Browse Source

Pass discard flag to buffer "unlock" on OpenGL. Closes #1706.

Lasse Öörni 9 years ago
parent
commit
ed15cc21e4

+ 2 - 0
Source/Urho3D/Graphics/IndexBuffer.h

@@ -113,6 +113,8 @@ private:
     bool dynamic_;
     bool dynamic_;
     /// Shadowed flag.
     /// Shadowed flag.
     bool shadowed_;
     bool shadowed_;
+    /// Discard lock flag. Used by OpenGL only.
+    bool discardLock_;
 };
 };
 
 
 }
 }

+ 3 - 2
Source/Urho3D/Graphics/OpenGL/OGLIndexBuffer.cpp

@@ -181,6 +181,7 @@ void* IndexBuffer::Lock(unsigned start, unsigned count, bool discard)
 
 
     lockStart_ = start;
     lockStart_ = start;
     lockCount_ = count;
     lockCount_ = count;
+    discardLock_ = discard;
 
 
     if (shadowData_)
     if (shadowData_)
     {
     {
@@ -202,12 +203,12 @@ void IndexBuffer::Unlock()
     switch (lockState_)
     switch (lockState_)
     {
     {
     case LOCK_SHADOW:
     case LOCK_SHADOW:
-        SetDataRange(shadowData_.Get() + lockStart_ * indexSize_, lockStart_, lockCount_);
+        SetDataRange(shadowData_.Get() + lockStart_ * indexSize_, lockStart_, lockCount_, discardLock_);
         lockState_ = LOCK_NONE;
         lockState_ = LOCK_NONE;
         break;
         break;
 
 
     case LOCK_SCRATCH:
     case LOCK_SCRATCH:
-        SetDataRange(lockScratchData_, lockStart_, lockCount_);
+        SetDataRange(lockScratchData_, lockStart_, lockCount_, discardLock_);
         if (graphics_)
         if (graphics_)
             graphics_->FreeScratchBuffer(lockScratchData_);
             graphics_->FreeScratchBuffer(lockScratchData_);
         lockScratchData_ = 0;
         lockScratchData_ = 0;

+ 3 - 2
Source/Urho3D/Graphics/OpenGL/OGLVertexBuffer.cpp

@@ -184,6 +184,7 @@ void* VertexBuffer::Lock(unsigned start, unsigned count, bool discard)
 
 
     lockStart_ = start;
     lockStart_ = start;
     lockCount_ = count;
     lockCount_ = count;
+    discardLock_ = discard;
 
 
     if (shadowData_)
     if (shadowData_)
     {
     {
@@ -205,12 +206,12 @@ void VertexBuffer::Unlock()
     switch (lockState_)
     switch (lockState_)
     {
     {
     case LOCK_SHADOW:
     case LOCK_SHADOW:
-        SetDataRange(shadowData_.Get() + lockStart_ * vertexSize_, lockStart_, lockCount_);
+        SetDataRange(shadowData_.Get() + lockStart_ * vertexSize_, lockStart_, lockCount_, discardLock_);
         lockState_ = LOCK_NONE;
         lockState_ = LOCK_NONE;
         break;
         break;
 
 
     case LOCK_SCRATCH:
     case LOCK_SCRATCH:
-        SetDataRange(lockScratchData_, lockStart_, lockCount_);
+        SetDataRange(lockScratchData_, lockStart_, lockCount_, discardLock_);
         if (graphics_)
         if (graphics_)
             graphics_->FreeScratchBuffer(lockScratchData_);
             graphics_->FreeScratchBuffer(lockScratchData_);
         lockScratchData_ = 0;
         lockScratchData_ = 0;

+ 2 - 0
Source/Urho3D/Graphics/VertexBuffer.h

@@ -165,6 +165,8 @@ private:
     bool dynamic_;
     bool dynamic_;
     /// Shadowed flag.
     /// Shadowed flag.
     bool shadowed_;
     bool shadowed_;
+    /// Discard lock flag. Used by OpenGL only.
+    bool discardLock_;
 };
 };
 
 
 }
 }