Browse Source

Move legacy vertex element information to GraphicsDefs.cpp so that it doesn't have to be repeated for different graphics APIs.

Lasse Öörni 9 years ago
parent
commit
06d8ea602d

+ 5 - 34
Source/Urho3D/Graphics/Direct3D9/D3D9VertexBuffer.cpp

@@ -32,35 +32,6 @@
 namespace Urho3D
 {
 
-static const VertexElement legacyVertexElements[] =
-{
-    VertexElement(TYPE_VECTOR3, SEM_POSITION, 0, false),     // Position
-    VertexElement(TYPE_VECTOR3, SEM_NORMAL, 0, false),       // Normal
-    VertexElement(TYPE_UBYTE4_NORM, SEM_COLOR, 0, false),    // Color
-    VertexElement(TYPE_VECTOR2, SEM_TEXCOORD, 0, false),     // Texcoord1
-    VertexElement(TYPE_VECTOR2, SEM_TEXCOORD, 1, false),     // Texcoord2
-    VertexElement(TYPE_VECTOR3, SEM_TEXCOORD, 0, false),     // Cubetexcoord1
-    VertexElement(TYPE_VECTOR3, SEM_TEXCOORD, 1, false),     // Cubetexcoord2
-    VertexElement(TYPE_VECTOR4, SEM_TANGENT, 0, false),      // Tangent
-    VertexElement(TYPE_VECTOR4, SEM_BLENDWEIGHTS, 0, false), // Blendweights
-    VertexElement(TYPE_UBYTE4, SEM_BLENDINDICES, 0, false),  // Blendindices
-    VertexElement(TYPE_VECTOR4, SEM_TEXCOORD, 4, true),      // Instancematrix1
-    VertexElement(TYPE_VECTOR4, SEM_TEXCOORD, 5, true),      // Instancematrix2
-    VertexElement(TYPE_VECTOR4, SEM_TEXCOORD, 6, true),      // Instancematrix3
-    VertexElement(TYPE_INT, SEM_OBJECTINDEX, 0, false)      // Objectindex
-};
-
-static const unsigned elementTypeSize[] =
-{
-    sizeof(int),
-    sizeof(float),
-    2 * sizeof(float),
-    3 * sizeof(float),
-    4 * sizeof(float),
-    sizeof(unsigned),
-    sizeof(unsigned)
-};
-
 VertexBuffer::VertexBuffer(Context* context, bool forceHeadless) :
     Object(context),
     GPUObject(forceHeadless ? (Graphics*)0 : GetSubsystem<Graphics>()),
@@ -344,13 +315,13 @@ void VertexBuffer::UpdateOffsets()
     for (PODVector<VertexElement>::Iterator i = elements_.Begin(); i != elements_.End(); ++i)
     {
         i->offset_ = elementOffset;
-        elementOffset += elementTypeSize[i->type_];
+        elementOffset += ELEMENT_TYPESIZES[i->type_];
         elementHash_ <<= 6;
         elementHash_ += (((int)i->type_ + 1) * ((int)i->semantic_ + 1) + i->index_);
 
         for (unsigned j = 0; j < MAX_LEGACY_VERTEX_ELEMENTS; ++j)
         {
-            const VertexElement& legacy = legacyVertexElements[j];
+            const VertexElement& legacy = LEGACY_VERTEXELEMENTS[j];
             if (i->type_ == legacy.type_ && i->semantic_ == legacy.semantic_ && i->index_ == legacy.index_)
                 elementMask_ |= (1 << j);
         }
@@ -410,7 +381,7 @@ PODVector<VertexElement> VertexBuffer::GetElements(unsigned elementMask)
     for (unsigned i = 0; i < MAX_LEGACY_VERTEX_ELEMENTS; ++i)
     {
         if (elementMask & (1 << i))
-            ret.Push(legacyVertexElements[i]);
+            ret.Push(LEGACY_VERTEXELEMENTS[i]);
     }
 
     return ret;
@@ -421,7 +392,7 @@ unsigned VertexBuffer::GetVertexSize(const PODVector<VertexElement>& elements)
     unsigned size = 0;
 
     for (unsigned i = 0; i < elements.Size(); ++i)
-        size += elementTypeSize[elements[i].type_];
+        size += ELEMENT_TYPESIZES[elements[i].type_];
 
     return size;
 }
@@ -433,7 +404,7 @@ unsigned VertexBuffer::GetVertexSize(unsigned elementMask)
     for (unsigned i = 0; i < MAX_LEGACY_VERTEX_ELEMENTS; ++i)
     {
         if (elementMask & (1 << i))
-            size += elementTypeSize[legacyVertexElements[i].type_];
+            size += ELEMENT_TYPESIZES[LEGACY_VERTEXELEMENTS[i].type_];
     }
 
     return size;

+ 30 - 0
Source/Urho3D/Graphics/GraphicsDefs.cpp

@@ -85,4 +85,34 @@ extern URHO3D_API const StringHash PSP_VSMSHADOWPARAMS("VSMShadowParams");
 
 extern URHO3D_API const Vector3 DOT_SCALE(1 / 3.0f, 1 / 3.0f, 1 / 3.0f);
 
+extern URHO3D_API const VertexElement LEGACY_VERTEXELEMENTS[] =
+{
+    VertexElement(TYPE_VECTOR3, SEM_POSITION, 0, false),     // Position
+    VertexElement(TYPE_VECTOR3, SEM_NORMAL, 0, false),       // Normal
+    VertexElement(TYPE_UBYTE4_NORM, SEM_COLOR, 0, false),    // Color
+    VertexElement(TYPE_VECTOR2, SEM_TEXCOORD, 0, false),     // Texcoord1
+    VertexElement(TYPE_VECTOR2, SEM_TEXCOORD, 1, false),     // Texcoord2
+    VertexElement(TYPE_VECTOR3, SEM_TEXCOORD, 0, false),     // Cubetexcoord1
+    VertexElement(TYPE_VECTOR3, SEM_TEXCOORD, 1, false),     // Cubetexcoord2
+    VertexElement(TYPE_VECTOR4, SEM_TANGENT, 0, false),      // Tangent
+    VertexElement(TYPE_VECTOR4, SEM_BLENDWEIGHTS, 0, false), // Blendweights
+    VertexElement(TYPE_UBYTE4, SEM_BLENDINDICES, 0, false),  // Blendindices
+    VertexElement(TYPE_VECTOR4, SEM_TEXCOORD, 4, true),      // Instancematrix1
+    VertexElement(TYPE_VECTOR4, SEM_TEXCOORD, 5, true),      // Instancematrix2
+    VertexElement(TYPE_VECTOR4, SEM_TEXCOORD, 6, true),      // Instancematrix3
+    VertexElement(TYPE_INT, SEM_OBJECTINDEX, 0, false)      // Objectindex
+};
+
+extern URHO3D_API const unsigned ELEMENT_TYPESIZES[] =
+{
+    sizeof(int),
+    sizeof(float),
+    2 * sizeof(float),
+    3 * sizeof(float),
+    4 * sizeof(float),
+    sizeof(unsigned),
+    sizeof(unsigned)
+};
+
+
 }

+ 6 - 0
Source/Urho3D/Graphics/GraphicsDefs.h

@@ -206,6 +206,12 @@ struct URHO3D_API VertexElement
     unsigned offset_;
 };
 
+/// Sizes of vertex element types.
+extern URHO3D_API const unsigned ELEMENT_TYPESIZES[];
+
+/// Vertex element definitions for the legacy elements.
+extern URHO3D_API const VertexElement LEGACY_VERTEXELEMENTS[];
+
 /// Texture filtering mode.
 enum TextureFilterMode
 {