Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4866)

Unified Diff: cc/geometry_binding.cc

Issue 11415161: Texture Draw Calls Coalescing (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: moved { to line above Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/geometry_binding.h ('k') | cc/gl_renderer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/geometry_binding.cc
diff --git a/cc/geometry_binding.cc b/cc/geometry_binding.cc
index 3ccea1f1f3efa4c227f93267a2ac625855cf8abc..cef487012be8382deb15ed8b671aaf27980816be 100644
--- a/cc/geometry_binding.cc
+++ b/cc/geometry_binding.cc
@@ -17,20 +17,42 @@ GeometryBinding::GeometryBinding(WebKit::WebGraphicsContext3D* context, const gf
, m_quadElementsVbo(0)
, m_initialized(false)
{
- // Vertex positions and texture coordinates for the 4 corners of a 1x1 quad.
float vertices[] = { quadVertexRect.x(), quadVertexRect.bottom(), 0.0f, 0.0f, 1.0f,
quadVertexRect.x(), quadVertexRect.y(), 0.0f, 0.0f, 0.0f,
quadVertexRect.right(), quadVertexRect.y(), 0.0f, 1.0f, 0.0f,
- quadVertexRect.right(), quadVertexRect.bottom(), 0.0f, 1.0f, 1.0f };
- uint16_t indices[] = { 0, 1, 2, 0, 2, 3, // The two triangles that make up the layer quad.
- 0, 1, 2, 3}; // A line path for drawing the layer border.
+ quadVertexRect.right(), quadVertexRect.bottom(), 0.0f, 1.0f, 1.0f };
+
+ struct Vertex {
+ float a_position[3];
+ float a_texCoord[2];
+ float a_index; // index into the matrix array for this quad
+ };
+ struct Quad { Vertex v0, v1, v2, v3; };
+ struct QuadIndex { uint16_t data[6]; };
+
+ COMPILE_ASSERT(sizeof(Quad) == 24 * sizeof(float), struct_is_densely_packed);
+ COMPILE_ASSERT(sizeof(QuadIndex) == 6 * sizeof(uint16_t), struct_is_densely_packed);
+
+ Quad quad_list[8];
+ QuadIndex quad_index_list[8];
+ for (int i = 0; i < 8; i++) {
+ Vertex v0 = { quadVertexRect.x() , quadVertexRect.bottom(), 0.0f, 0.0f, 1.0f, (float)i };
+ Vertex v1 = { quadVertexRect.x() , quadVertexRect.y() , 0.0f, 0.0f, 0.0f, (float)i };
+ Vertex v2 = { quadVertexRect.right(), quadVertexRect.y() , 0.0f, 1.0f, 0.0f, (float)i };
+ Vertex v3 = { quadVertexRect.right(), quadVertexRect.bottom(), 0.0f, 1.0f, 1.0f, (float)i };
+ Quad x = { v0, v1, v2, v3 };
+ quad_list[i] = x;
+ QuadIndex y = { 0 + 4 * i, 1 + 4 * i, 2 + 4 * i, 3 + 4 * i, 0 + 4 * i, 2 + 4 * i };
+ quad_index_list[i] = y;
+ }
GLC(m_context, m_quadVerticesVbo = m_context->createBuffer());
GLC(m_context, m_quadElementsVbo = m_context->createBuffer());
+ GLC(m_context, m_quadListVerticesVbo = m_context->createBuffer());
GLC(m_context, m_context->bindBuffer(GL_ARRAY_BUFFER, m_quadVerticesVbo));
- GLC(m_context, m_context->bufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW));
+ GLC(m_context, m_context->bufferData(GL_ARRAY_BUFFER, sizeof(quad_list), quad_list, GL_STATIC_DRAW));
GLC(m_context, m_context->bindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_quadElementsVbo));
- GLC(m_context, m_context->bufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW));
+ GLC(m_context, m_context->bufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(quad_index_list), quad_index_list, GL_STATIC_DRAW));
m_initialized = true;
}
@@ -43,14 +65,15 @@ GeometryBinding::~GeometryBinding()
void GeometryBinding::prepareForDraw()
{
- GLC(m_context, m_context->bindBuffer(GL_ARRAY_BUFFER, quadVerticesVbo()));
GLC(m_context, m_context->bindBuffer(GL_ELEMENT_ARRAY_BUFFER, quadElementsVbo()));
- unsigned offset = 0;
- GLC(m_context, m_context->vertexAttribPointer(positionAttribLocation(), 3, GL_FLOAT, false, 5 * sizeof(float), offset));
- offset += 3 * sizeof(float);
- GLC(m_context, m_context->vertexAttribPointer(texCoordAttribLocation(), 2, GL_FLOAT, false, 5 * sizeof(float), offset));
+
+ GLC(m_context, m_context->bindBuffer(GL_ARRAY_BUFFER, quadVerticesVbo()));
+ GLC(m_context, m_context->vertexAttribPointer(positionAttribLocation(), 3, GL_FLOAT, false, 6 * sizeof(float), 0));
+ GLC(m_context, m_context->vertexAttribPointer(texCoordAttribLocation(), 2, GL_FLOAT, false, 6 * sizeof(float), 3 * sizeof(float)));
+ GLC(m_context, m_context->vertexAttribPointer(triangleIndexAttribLocation(), 1, GL_FLOAT, false, 6 * sizeof(float), 5 * sizeof(float)));
GLC(m_context, m_context->enableVertexAttribArray(positionAttribLocation()));
GLC(m_context, m_context->enableVertexAttribArray(texCoordAttribLocation()));
+ GLC(m_context, m_context->enableVertexAttribArray(triangleIndexAttribLocation()));
}
} // namespace cc
« no previous file with comments | « cc/geometry_binding.h ('k') | cc/gl_renderer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698