|  | // 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. | 
|  |  | 
|  | #ifndef CC_OUTPUT_GEOMETRY_BINDING_H_ | 
|  | #define CC_OUTPUT_GEOMETRY_BINDING_H_ | 
|  |  | 
|  | #include "base/basictypes.h" | 
|  | #include "cc/output/gl_renderer.h"  // For the GLC() macro. | 
|  | #include "gpu/command_buffer/client/gles2_interface.h" | 
|  | #include "third_party/khronos/GLES2/gl2.h" | 
|  | #include "third_party/khronos/GLES2/gl2ext.h" | 
|  | #include "ui/gfx/geometry/rect_f.h" | 
|  |  | 
|  | namespace gfx { | 
|  | class QuadF; | 
|  | class Quad; | 
|  | class QuadIndex; | 
|  | class PointF; | 
|  | } | 
|  |  | 
|  | namespace cc { | 
|  |  | 
|  | struct GeometryBindingVertex { | 
|  | float a_position[3]; | 
|  | float a_texCoord[2]; | 
|  | // Index of the vertex, divide by 4 to have the matrix for this quad. | 
|  | float a_index; | 
|  | }; | 
|  |  | 
|  | struct GeometryBindingQuad { | 
|  | GeometryBindingQuad(); | 
|  | GeometryBindingQuad(const GeometryBindingVertex& vert0, | 
|  | const GeometryBindingVertex& vert1, | 
|  | const GeometryBindingVertex& vert2, | 
|  | const GeometryBindingVertex& vert3); | 
|  | GeometryBindingVertex v0, v1, v2, v3; | 
|  | }; | 
|  |  | 
|  | struct GeometryBindingQuadIndex { | 
|  | GeometryBindingQuadIndex(); | 
|  | GeometryBindingQuadIndex(uint16 index0, | 
|  | uint16 index1, | 
|  | uint16 index2, | 
|  | uint16 index3, | 
|  | uint16 index4, | 
|  | uint16 index5); | 
|  |  | 
|  | uint16 data[6]; | 
|  | }; | 
|  |  | 
|  | class DrawQuad; | 
|  | class DrawPolygon; | 
|  |  | 
|  | struct GeometryBinding { | 
|  | // All layer shaders share the same attribute locations for the vertex | 
|  | // positions and texture coordinates. This allows switching shaders without | 
|  | // rebinding attribute arrays. | 
|  | static int PositionAttribLocation() { return 0; } | 
|  | static int TexCoordAttribLocation() { return 1; } | 
|  | static int TriangleIndexAttribLocation() { return 2; } | 
|  | }; | 
|  |  | 
|  | void SetupGLContext(gpu::gles2::GLES2Interface* gl, | 
|  | GLuint quad_elements_vbo, | 
|  | GLuint quad_vertices_vbo); | 
|  |  | 
|  | }  // namespace cc | 
|  |  | 
|  | #endif  // CC_OUTPUT_GEOMETRY_BINDING_H_ |