diff options
author | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-07 09:17:13 +0000 |
---|---|---|
committer | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-07 09:17:13 +0000 |
commit | 9e7a2a61fb56270eb2ec81597ca1c174e22e2dd5 (patch) | |
tree | 46c7752f4cc5e0bce120d9c31f750b9ccf252427 /gpu | |
parent | c3cdc73805b33ceab93b95683266ad40b71a8657 (diff) | |
download | chromium_src-9e7a2a61fb56270eb2ec81597ca1c174e22e2dd5.zip chromium_src-9e7a2a61fb56270eb2ec81597ca1c174e22e2dd5.tar.gz chromium_src-9e7a2a61fb56270eb2ec81597ca1c174e22e2dd5.tar.bz2 |
Fix element array bug
BUG=164445
Review URL: https://chromiumcodereview.appspot.com/11450026
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@171748 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu')
-rw-r--r-- | gpu/command_buffer/client/vertex_array_object_manager.cc | 3 | ||||
-rw-r--r-- | gpu/command_buffer/client/vertex_array_object_manager_unittest.cc | 17 |
2 files changed, 16 insertions, 4 deletions
diff --git a/gpu/command_buffer/client/vertex_array_object_manager.cc b/gpu/command_buffer/client/vertex_array_object_manager.cc index 4c76fb5..65eb7c7 100644 --- a/gpu/command_buffer/client/vertex_array_object_manager.cc +++ b/gpu/command_buffer/client/vertex_array_object_manager.cc @@ -209,6 +209,9 @@ void VertexArrayObject::UnbindBuffer(GLuint id) { } } } + if (bound_element_array_buffer_id_ == id) { + bound_element_array_buffer_id_ = 0; + } } bool VertexArrayObject::BindElementArray(GLuint id) { diff --git a/gpu/command_buffer/client/vertex_array_object_manager_unittest.cc b/gpu/command_buffer/client/vertex_array_object_manager_unittest.cc index b74ed27..869793c 100644 --- a/gpu/command_buffer/client/vertex_array_object_manager_unittest.cc +++ b/gpu/command_buffer/client/vertex_array_object_manager_unittest.cc @@ -70,9 +70,10 @@ TEST_F(VertexArrayObjectManagerTest, Basic) { TEST_F(VertexArrayObjectManagerTest, UnbindBuffer) { const GLuint kBufferToUnbind = 123; const GLuint kBufferToRemain = 456; + const GLuint kElementArray = 789; bool changed = false; GLuint ids[2] = { 1, 3, }; - manager_->GenVertexArrays(2, ids); + manager_->GenVertexArrays(arraysize(ids), ids); // Bind buffers to attribs on 2 vaos. for (size_t ii = 0; ii < arraysize(ids); ++ii) { EXPECT_TRUE(manager_->BindVertexArray(ids[ii], &changed)); @@ -87,18 +88,23 @@ TEST_F(VertexArrayObjectManagerTest, UnbindBuffer) { for (size_t jj = 0; jj < 4u; ++jj) { manager_->SetAttribEnable(jj, true); } + manager_->BindElementArray(kElementArray); } EXPECT_FALSE(manager_->HaveEnabledClientSideBuffers()); EXPECT_TRUE(manager_->BindVertexArray(ids[0], &changed)); // Unbind the buffer. manager_->UnbindBuffer(kBufferToUnbind); + manager_->UnbindBuffer(kElementArray); // The attribs are still enabled but their buffer is 0. EXPECT_TRUE(manager_->HaveEnabledClientSideBuffers()); // Check the status of the bindings. - uint32 expected[][4] = { + static const uint32 expected[][4] = { { 0, kBufferToRemain, 0, kBufferToRemain, }, { kBufferToUnbind, kBufferToRemain, kBufferToUnbind, kBufferToRemain, }, }; + static const GLuint expected_element_array[] = { + 0, kElementArray, + }; for (size_t ii = 0; ii < arraysize(ids); ++ii) { EXPECT_TRUE(manager_->BindVertexArray(ids[ii], &changed)); for (size_t jj = 0; jj < 4; ++jj) { @@ -108,7 +114,10 @@ TEST_F(VertexArrayObjectManagerTest, UnbindBuffer) { EXPECT_EQ(expected[ii][jj], param) << "id: " << ids[ii] << ", attrib: " << jj; } + EXPECT_EQ(expected_element_array[ii], + manager_->bound_element_array_buffer()); } + // The vao that was not bound still has all service side bufferws. EXPECT_FALSE(manager_->HaveEnabledClientSideBuffers()); } @@ -168,7 +177,7 @@ TEST_F(VertexArrayObjectManagerTest, HaveEnabledClientSideArrays) { TEST_F(VertexArrayObjectManagerTest, BindElementArray) { bool changed = false; GLuint ids[2] = { 1, 3, }; - manager_->GenVertexArrays(2, ids); + manager_->GenVertexArrays(arraysize(ids), ids); // Check the default element array is 0. EXPECT_EQ(0u, manager_->bound_element_array_buffer()); @@ -208,7 +217,7 @@ TEST_F(VertexArrayObjectManagerTest, GenBindDelete) { EXPECT_FALSE(changed); GLuint ids[2] = { 1, 3, }; - manager_->GenVertexArrays(2, ids); + manager_->GenVertexArrays(arraysize(ids), ids); // Check Genned arrays succeed. EXPECT_TRUE(manager_->BindVertexArray(1, &changed)); EXPECT_TRUE(changed); |