소스 검색

Fixed SetDataRange() in OGLVertexBuffer & OGLIndexBuffer.
Code cleanup.

Lasse Öörni 14 년 전
부모
커밋
16b8bddde4

+ 10 - 18
Engine/Graphics/OpenGL/OGLIndexBuffer.cpp

@@ -41,8 +41,7 @@ IndexBuffer::IndexBuffer(Context* context) :
     indexCount_(0),
     indexCount_(0),
     indexSize_(0),
     indexSize_(0),
     dynamic_(false),
     dynamic_(false),
-    locked_(false),
-    mapped_(false)
+    locked_(false)
 {
 {
 }
 }
 
 
@@ -155,12 +154,12 @@ bool IndexBuffer::SetDataRange(const void* data, unsigned start, unsigned count)
     {
     {
         graphics_->SetIndexBuffer(0);
         graphics_->SetIndexBuffer(0);
         glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, object_);
         glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, object_);
-        glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, start * indexSize_, indexCount_ * indexSize_, data);
+        glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, start * indexSize_, count * indexSize_, data);
         return true;
         return true;
     }
     }
     else if (fallbackData_)
     else if (fallbackData_)
     {
     {
-        memcpy(fallbackData_.Get() + start * indexSize_, data, indexCount_ * indexSize_);
+        memcpy(fallbackData_.Get() + start * indexSize_, data, count * indexSize_);
         return true;
         return true;
     }
     }
     
     
@@ -209,7 +208,6 @@ void* IndexBuffer::Lock(unsigned start, unsigned count, LockMode mode)
             if (!hwData)
             if (!hwData)
                 return 0;
                 return 0;
             hwData = (unsigned char*)hwData + start * indexSize_;
             hwData = (unsigned char*)hwData + start * indexSize_;
-            mapped_ = true;
         }
         }
     }
     }
     else
     else
@@ -223,32 +221,26 @@ void IndexBuffer::Unlock()
 {
 {
     if (locked_)
     if (locked_)
     {
     {
+        locked_ = false;
+        
         if (object_)
         if (object_)
         {
         {
-            graphics_->SetIndexBuffer(0);
-            glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, object_);
-            if (mapped_)
+            if (!discardLockData_)
             {
             {
+                graphics_->SetIndexBuffer(0);
+                glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, object_);
                 glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER);
                 glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER);
-                mapped_ = false;
             }
             }
             else
             else
             {
             {
                 if (discardLockCount_ < indexCount_)
                 if (discardLockCount_ < indexCount_)
-                {
-                    glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, discardLockStart_ * indexSize_, discardLockCount_ * indexSize_,
-                        discardLockData_);
-                }
+                    SetDataRange(discardLockData_, discardLockStart_, discardLockCount_);
                 else
                 else
-                {
-                    glBufferData(GL_ELEMENT_ARRAY_BUFFER, discardLockCount_ * indexSize_, discardLockData_, dynamic_ ?
-                        GL_DYNAMIC_DRAW : GL_STATIC_DRAW);
-                }
+                    SetData(discardLockData_);
                 graphics_->FreeDiscardLockBuffer(discardLockData_);
                 graphics_->FreeDiscardLockBuffer(discardLockData_);
                 discardLockData_ = 0;
                 discardLockData_ = 0;
             }
             }
         }
         }
-        locked_ = false;
     }
     }
 }
 }
 
 

+ 0 - 2
Engine/Graphics/OpenGL/OGLIndexBuffer.h

@@ -92,6 +92,4 @@ private:
     bool dynamic_;
     bool dynamic_;
     /// Buffer locked flag.
     /// Buffer locked flag.
     bool locked_;
     bool locked_;
-    /// Buffer mapped flag.
-    bool mapped_;
 };
 };

+ 9 - 17
Engine/Graphics/OpenGL/OGLVertexBuffer.cpp

@@ -127,8 +127,7 @@ VertexBuffer::VertexBuffer(Context* context) :
     morphRangeStart_(0),
     morphRangeStart_(0),
     morphRangeCount_(0),
     morphRangeCount_(0),
     dynamic_(false),
     dynamic_(false),
-    locked_(false),
-    mapped_(false)
+    locked_(false)
 {
 {
     UpdateOffsets();
     UpdateOffsets();
 }
 }
@@ -250,12 +249,12 @@ bool VertexBuffer::SetDataRange(const void* data, unsigned start, unsigned count
     if (object_)
     if (object_)
     {
     {
         glBindBuffer(GL_ARRAY_BUFFER, object_);
         glBindBuffer(GL_ARRAY_BUFFER, object_);
-        glBufferSubData(GL_ARRAY_BUFFER, start * vertexSize_, vertexCount_ * vertexSize_, data);
+        glBufferSubData(GL_ARRAY_BUFFER, start * vertexSize_, count * vertexSize_, data);
         return true;
         return true;
     }
     }
     else if (fallbackData_)
     else if (fallbackData_)
     {
     {
-        memcpy(fallbackData_.Get() + start * vertexSize_, data, vertexCount_ * vertexSize_);
+        memcpy(fallbackData_.Get() + start * vertexSize_, data, count * vertexSize_);
         return true;
         return true;
     }
     }
     
     
@@ -321,7 +320,6 @@ void* VertexBuffer::Lock(unsigned start, unsigned count, LockMode mode)
             if (!hwData)
             if (!hwData)
                 return 0;
                 return 0;
             hwData = (unsigned char*)hwData + start * vertexSize_;
             hwData = (unsigned char*)hwData + start * vertexSize_;
-            mapped_ = true;
         }
         }
     }
     }
     else
     else
@@ -335,31 +333,25 @@ void VertexBuffer::Unlock()
 {
 {
     if (locked_)
     if (locked_)
     {
     {
+        locked_ = false;
+        
         if (object_)
         if (object_)
         {
         {
-            glBindBuffer(GL_ARRAY_BUFFER, object_);
-            if (mapped_)
+            if (!discardLockData_)
             {
             {
+                glBindBuffer(GL_ARRAY_BUFFER, object_);
                 glUnmapBuffer(GL_ARRAY_BUFFER);
                 glUnmapBuffer(GL_ARRAY_BUFFER);
-                mapped_ = false;
             }
             }
             else
             else
             {
             {
                 if (discardLockCount_ < vertexCount_)
                 if (discardLockCount_ < vertexCount_)
-                {
-                    glBufferSubData(GL_ARRAY_BUFFER, discardLockStart_ * vertexSize_, discardLockCount_ * vertexSize_,
-                        discardLockData_);
-                }
+                    SetDataRange(discardLockData_, discardLockStart_, discardLockCount_);
                 else
                 else
-                {
-                    glBufferData(GL_ARRAY_BUFFER, discardLockCount_ * vertexSize_, discardLockData_, dynamic_ ?
-                        GL_DYNAMIC_DRAW : GL_STATIC_DRAW);
-                }
+                    SetData(discardLockData_);
                 graphics_->FreeDiscardLockBuffer(discardLockData_);
                 graphics_->FreeDiscardLockBuffer(discardLockData_);
                 discardLockData_ = 0;
                 discardLockData_ = 0;
             }
             }
         }
         }
-        locked_ = false;
     }
     }
 }
 }
 
 

+ 0 - 2
Engine/Graphics/OpenGL/OGLVertexBuffer.h

@@ -135,6 +135,4 @@ private:
     bool dynamic_;
     bool dynamic_;
     /// Locked flag.
     /// Locked flag.
     bool locked_;
     bool locked_;
-    /// Mapped flag.
-    bool mapped_;
 };
 };