summaryrefslogtreecommitdiffstats
path: root/cc/output/geometry_binding.h
blob: de7cfc90b62e416cc8c89c16276cffebd1c2338f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// 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 "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_