4 using System.Collections.Generic;
6 using SiliconStudio.Paradox.Effects.Data;
7 using SiliconStudio.Paradox.Graphics;
8 using SiliconStudio.Core;
9 using SiliconStudio.Core.Mathematics;
10 using SiliconStudio.Paradox.Graphics.Data;
12 namespace SiliconStudio.
Paradox.Extensions
23 var vertexElementsToTransform1 = vertexBufferBinding.Declaration
24 .EnumerateWithOffsets()
26 && (x.VertexElement.Format ==
PixelFormat.R32G32B32A32_Float
27 || x.VertexElement.Format ==
PixelFormat.R32G32B32_Float))
31 var vertexElementsToTransform2 = vertexBufferBinding.Declaration
32 .EnumerateWithOffsets()
36 && x.VertexElement.Format == PixelFormat.R32G32B32_Float)
40 Matrix inverseTransposeMatrix;
41 if (vertexElementsToTransform2.Length > 0)
43 Matrix.Invert(ref matrix, out inverseTransposeMatrix);
44 Matrix.Transpose(ref inverseTransposeMatrix, out inverseTransposeMatrix);
48 inverseTransposeMatrix = Matrix.Identity;
52 var bufferData = vertexBufferBinding.Buffer.Value.Content;
53 var vertexStride = vertexBufferBinding.Declaration.VertexStride;
54 var vertexCount = vertexBufferBinding.Count;
55 fixed (byte* bufferPointerStart = &bufferData[vertexBufferBinding.
Offset])
57 var bufferPointer = bufferPointerStart;
59 for (
int i = 0; i < vertexCount; ++i)
62 foreach (var vertexElement
in vertexElementsToTransform1)
64 var elementPointer = bufferPointer + vertexElement.Offset;
65 if (vertexElement.VertexElement.Format ==
PixelFormat.R32G32B32A32_Float)
67 Vector4.Transform(ref *(
Vector4*)elementPointer, ref matrix, out *(
Vector4*)elementPointer);
71 Vector3.TransformCoordinate(ref *(
Vector3*)elementPointer, ref matrix, out *(
Vector3*)elementPointer);
76 foreach (var vertexElement
in vertexElementsToTransform2)
78 var elementPointer = bufferPointer + vertexElement.Offset;
79 Vector3.TransformNormal(ref *(
Vector3*)elementPointer, ref inverseTransposeMatrix, out *(
Vector3*)elementPointer);
82 bufferPointer += vertexStride;
static readonly string BiTangent
Vertex Bitangent data.
static readonly string Tangent
Vertex tangent data.
Represents a three dimensional mathematical vector.
Represents a four dimensional mathematical vector.
Data type for SiliconStudio.Paradox.Graphics.VertexBufferBinding.
static readonly string Normal
Vertex normal data.
static readonly string Position
Position data.
System.Int32 Offset
Data field for SiliconStudio.Paradox.Graphics.VertexBufferBinding.Offset.
PixelFormat
Defines various types of pixel formats.
Represents a 4x4 mathematical matrix.