| 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
|
|
|