Index: third_party/WebKit/Source/modules/webgl/WebGLVertexArrayObjectBase.cpp |
diff --git a/third_party/WebKit/Source/modules/webgl/WebGLVertexArrayObjectBase.cpp b/third_party/WebKit/Source/modules/webgl/WebGLVertexArrayObjectBase.cpp |
index 842546731cd6b336cd710b789745e3147d3fe49c..f5370cb50413efde620cf9409ffcbb5097405bac 100644 |
--- a/third_party/WebKit/Source/modules/webgl/WebGLVertexArrayObjectBase.cpp |
+++ b/third_party/WebKit/Source/modules/webgl/WebGLVertexArrayObjectBase.cpp |
@@ -16,8 +16,13 @@ WebGLVertexArrayObjectBase::WebGLVertexArrayObjectBase(WebGLRenderingContextBase |
, m_hasEverBeenBound(false) |
, m_destructionInProgress(false) |
, m_boundElementArrayBuffer(nullptr) |
+ , m_isAllEnabledAttribBufferBound(true) |
{ |
m_arrayBufferList.resize(ctx->maxVertexAttribs()); |
+ m_attribEnabled.resize(ctx->maxVertexAttribs()); |
+ for (size_t i = 0; i < m_attribEnabled.size(); ++i) { |
+ m_attribEnabled[i] = false; |
+ } |
switch (m_type) { |
case VaoTypeDefault: |
@@ -80,7 +85,7 @@ void WebGLVertexArrayObjectBase::setElementArrayBuffer(WebGLBuffer* buffer) |
WebGLBuffer* WebGLVertexArrayObjectBase::getArrayBufferForAttrib(size_t index) |
{ |
- ASSERT(index < context()->maxVertexAttribs()); |
+ DCHECK(index < context()->maxVertexAttribs()); |
return m_arrayBufferList[index].get(); |
} |
@@ -92,6 +97,31 @@ void WebGLVertexArrayObjectBase::setArrayBufferForAttrib(GLuint index, WebGLBuff |
m_arrayBufferList[index]->onDetached(context()->contextGL()); |
m_arrayBufferList[index] = buffer; |
+ updateAttribBufferBoundStatus(); |
+} |
+ |
+void WebGLVertexArrayObjectBase::setAttribEnabled(GLuint index, bool enabled) |
+{ |
+ DCHECK(index < context()->maxVertexAttribs()); |
+ m_attribEnabled[index] = enabled; |
+ updateAttribBufferBoundStatus(); |
+} |
+ |
+bool WebGLVertexArrayObjectBase::getAttribEnabled(GLuint index) const |
+{ |
+ DCHECK(index < context()->maxVertexAttribs()); |
+ return m_attribEnabled[index]; |
+} |
+ |
+void WebGLVertexArrayObjectBase::updateAttribBufferBoundStatus() |
+{ |
+ m_isAllEnabledAttribBufferBound = true; |
+ for (size_t i = 0; i < m_attribEnabled.size(); ++i) { |
+ if (m_attribEnabled[i] && !m_arrayBufferList[i]) { |
+ m_isAllEnabledAttribBufferBound = false; |
+ return; |
+ } |
+ } |
} |
void WebGLVertexArrayObjectBase::unbindBuffer(WebGLBuffer* buffer) |
@@ -107,6 +137,7 @@ void WebGLVertexArrayObjectBase::unbindBuffer(WebGLBuffer* buffer) |
m_arrayBufferList[i] = nullptr; |
} |
} |
+ updateAttribBufferBoundStatus(); |
} |
ScopedPersistent<v8::Array>* WebGLVertexArrayObjectBase::getPersistentCache() |