| // Copyright 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "cc/output/geometry_binding.h" |
| |
| #include <stdint.h> |
| |
| #include "gpu/command_buffer/client/gles2_interface.h" |
| #include "ui/gfx/geometry/rect_f.h" |
| |
| namespace cc { |
| |
| void SetupGLContext(gpu::gles2::GLES2Interface* gl, |
| GLuint quad_elements_vbo, |
| GLuint quad_vertices_vbo) { |
| gl->BindBuffer(GL_ELEMENT_ARRAY_BUFFER, quad_elements_vbo); |
| |
| gl->BindBuffer(GL_ARRAY_BUFFER, quad_vertices_vbo); |
| // OpenGL defines the last parameter to VertexAttribPointer as type |
| // "const GLvoid*" even though it is actually an offset into the buffer |
| // object's data store and not a pointer to the client's address space. |
| const void* offsets[3] = { |
| 0, |
| reinterpret_cast<const void*>(3 * sizeof(float)), |
| reinterpret_cast<const void*>(5 * sizeof(float)), |
| }; |
| |
| gl->VertexAttribPointer(GeometryBinding::PositionAttribLocation(), 3, |
| GL_FLOAT, false, 6 * sizeof(float), offsets[0]); |
| gl->VertexAttribPointer(GeometryBinding::TexCoordAttribLocation(), 2, |
| GL_FLOAT, false, 6 * sizeof(float), offsets[1]); |
| gl->VertexAttribPointer(GeometryBinding::TriangleIndexAttribLocation(), 1, |
| GL_FLOAT, false, 6 * sizeof(float), offsets[2]); |
| gl->EnableVertexAttribArray(GeometryBinding::PositionAttribLocation()); |
| gl->EnableVertexAttribArray(GeometryBinding::TexCoordAttribLocation()); |
| gl->EnableVertexAttribArray(GeometryBinding::TriangleIndexAttribLocation()); |
| } |
| |
| GeometryBindingQuad::GeometryBindingQuad() { |
| v0 = {{0, 0, 0}, {0, 0}, 0}; |
| v1 = {{0, 0, 0}, {0, 0}, 0}; |
| v2 = {{0, 0, 0}, {0, 0}, 0}; |
| v3 = {{0, 0, 0}, {0, 0}, 0}; |
| } |
| |
| GeometryBindingQuad::GeometryBindingQuad(const GeometryBindingVertex& vert0, |
| const GeometryBindingVertex& vert1, |
| const GeometryBindingVertex& vert2, |
| const GeometryBindingVertex& vert3) { |
| v0 = vert0; |
| v1 = vert1; |
| v2 = vert2; |
| v3 = vert3; |
| } |
| |
| GeometryBindingQuadIndex::GeometryBindingQuadIndex() { |
| memset(data, 0x0, sizeof(data)); |
| } |
| |
| GeometryBindingQuadIndex::GeometryBindingQuadIndex(uint16_t index0, |
| uint16_t index1, |
| uint16_t index2, |
| uint16_t index3, |
| uint16_t index4, |
| uint16_t index5) { |
| data[0] = index0; |
| data[1] = index1; |
| data[2] = index2; |
| data[3] = index3; |
| data[4] = index4; |
| data[5] = index5; |
| } |
| |
| } // namespace cc |