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