Index: src/gpu/gl/GrGLVertexArray.cpp |
diff --git a/src/gpu/gl/GrGLVertexArray.cpp b/src/gpu/gl/GrGLVertexArray.cpp |
index 564a91a1b64451b340a3d24c5c22368cadf227b2..d131ff21862421d7a749128b46076166fb8a7293 100644 |
--- a/src/gpu/gl/GrGLVertexArray.cpp |
+++ b/src/gpu/gl/GrGLVertexArray.cpp |
@@ -6,6 +6,7 @@ |
*/ |
#include "GrGLVertexArray.h" |
+#include "GrGLBuffer.h" |
#include "GrGLGpu.h" |
struct AttribLayout { |
@@ -38,7 +39,7 @@ GR_STATIC_ASSERT(8 == kUint_GrVertexAttribType); |
void GrGLAttribArrayState::set(GrGLGpu* gpu, |
int index, |
- GrGLuint vertexBufferID, |
+ const GrGLBuffer* vertexBuffer, |
GrVertexAttribType type, |
GrGLsizei stride, |
GrGLvoid* offset) { |
@@ -49,13 +50,11 @@ void GrGLAttribArrayState::set(GrGLGpu* gpu, |
array->fEnableIsValid = true; |
array->fEnabled = true; |
} |
- if (!array->fAttribPointerIsValid || |
- array->fVertexBufferID != vertexBufferID || |
+ if (array->fVertexBufferUniqueID != vertexBuffer->getUniqueID() || |
array->fType != type || |
array->fStride != stride || |
array->fOffset != offset) { |
- |
- gpu->bindVertexBuffer(vertexBufferID); |
+ gpu->bindBuffer(kVertex_GrBufferType, vertexBuffer); |
const AttribLayout& layout = gLayouts[type]; |
if (!GrVertexAttribTypeIsIntType(type)) { |
GR_GL_CALL(gpu->glInterface(), VertexAttribPointer(index, |
@@ -73,8 +72,7 @@ void GrGLAttribArrayState::set(GrGLGpu* gpu, |
stride, |
offset)); |
} |
- array->fAttribPointerIsValid = true; |
- array->fVertexBufferID = vertexBufferID; |
+ array->fVertexBufferUniqueID = vertexBuffer->getUniqueID(); |
array->fType = type; |
array->fStride = stride; |
array->fOffset = offset; |
@@ -103,7 +101,7 @@ void GrGLAttribArrayState::disableUnusedArrays(const GrGLGpu* gpu, uint64_t used |
GrGLVertexArray::GrGLVertexArray(GrGLint id, int attribCount) |
: fID(id) |
, fAttribArrays(attribCount) |
- , fIndexBufferIDIsValid(false) { |
+ , fIndexBufferUniqueID(SK_InvalidUniqueID) { |
} |
GrGLAttribArrayState* GrGLVertexArray::bind(GrGLGpu* gpu) { |
@@ -114,25 +112,16 @@ GrGLAttribArrayState* GrGLVertexArray::bind(GrGLGpu* gpu) { |
return &fAttribArrays; |
} |
-GrGLAttribArrayState* GrGLVertexArray::bindWithIndexBuffer(GrGLGpu* gpu, GrGLuint ibufferID) { |
+GrGLAttribArrayState* GrGLVertexArray::bindWithIndexBuffer(GrGLGpu* gpu, const GrGLBuffer* ibuff) { |
GrGLAttribArrayState* state = this->bind(gpu); |
- if (state) { |
- if (!fIndexBufferIDIsValid || ibufferID != fIndexBufferID) { |
- GR_GL_CALL(gpu->glInterface(), BindBuffer(GR_GL_ELEMENT_ARRAY_BUFFER, ibufferID)); |
- fIndexBufferIDIsValid = true; |
- fIndexBufferID = ibufferID; |
- } |
+ if (state && fIndexBufferUniqueID != ibuff->getUniqueID()) { |
+ GR_GL_CALL(gpu->glInterface(), BindBuffer(GR_GL_ELEMENT_ARRAY_BUFFER, ibuff->bufferID())); |
+ fIndexBufferUniqueID = ibuff->getUniqueID(); |
} |
return state; |
} |
-void GrGLVertexArray::notifyIndexBufferDelete(GrGLuint bufferID) { |
- if (fIndexBufferIDIsValid && bufferID == fIndexBufferID) { |
- fIndexBufferID = 0; |
- } |
- } |
- |
void GrGLVertexArray::invalidateCachedState() { |
fAttribArrays.invalidate(); |
- fIndexBufferIDIsValid = false; |
+ fIndexBufferUniqueID = SK_InvalidUniqueID; |
} |