2
0
Lasse Öörni 14 жил өмнө
parent
commit
41b001f995

+ 15 - 0
Engine/Graphics/Direct3D9/D3D9VertexBuffer.cpp

@@ -289,6 +289,21 @@ void VertexBuffer::UpdateOffsets()
     vertexSize_ = elementOffset;
 }
 
+unsigned long long VertexBuffer::GetHash(unsigned streamIndex, unsigned useMask)
+{
+    unsigned long long bufferHash = elementMask_;
+    unsigned long long maskHash;
+    if (useMask == MASK_DEFAULT)
+        maskHash = ((unsigned long long)elementMask_) * 0x100000000ULL;
+    else
+        maskHash = ((unsigned long long)useMask) * 0x100000000ULL;
+    
+    bufferHash |= maskHash;
+    bufferHash <<= streamIndex * MAX_VERTEX_ELEMENTS;
+    
+    return bufferHash;
+}
+
 unsigned VertexBuffer::GetVertexSize(unsigned mask)
 {
     unsigned vertexSize = 0;

+ 3 - 1
Engine/Graphics/Direct3D9/D3D9VertexBuffer.h

@@ -86,7 +86,9 @@ public:
     const SharedArrayPtr<unsigned char>& GetMorphRangeResetData() { return morphRangeResetData_; }
     /// Return whether has a morph vertex range defined.
     bool HasMorphRange() const { return morphRangeCount_ > 0; }
-
+    /// Return buffer hash for state sorting.
+    unsigned long long GetHash(unsigned streamIndex, unsigned useMask);
+    
     /// Return vertex size corresponding to a vertex element mask.
     static unsigned GetVertexSize(unsigned elementMask);