summaryrefslogtreecommitdiffstats
path: root/cc/output/geometry_binding.cc
diff options
context:
space:
mode:
authorjamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-18 07:24:30 +0000
committerjamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-18 07:24:30 +0000
commit7f0d825f49dde66a6e9137a4e35460765bc5f0d8 (patch)
tree6944603cf2a97934afad6e599500ff45091316ed /cc/output/geometry_binding.cc
parent95e4e1a0fda6929b47702e69e4ddfe384b5d014b (diff)
downloadchromium_src-7f0d825f49dde66a6e9137a4e35460765bc5f0d8.zip
chromium_src-7f0d825f49dde66a6e9137a4e35460765bc5f0d8.tar.gz
chromium_src-7f0d825f49dde66a6e9137a4e35460765bc5f0d8.tar.bz2
Part 4 of cc/ directory shuffles: output
Continuation of https://src.chromium.org/viewvc/chrome?view=rev&revision=188681 BUG=190824 TBR=piman@chromium.org, jschuh@chromium.org Review URL: https://codereview.chromium.org/12912006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@188689 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/output/geometry_binding.cc')
-rw-r--r--cc/output/geometry_binding.cc110
1 files changed, 110 insertions, 0 deletions
diff --git a/cc/output/geometry_binding.cc b/cc/output/geometry_binding.cc
new file mode 100644
index 0000000..5c3db34
--- /dev/null
+++ b/cc/output/geometry_binding.cc
@@ -0,0 +1,110 @@
+// 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 "cc/output/gl_renderer.h" // For the GLC() macro.
+#include "third_party/WebKit/Source/Platform/chromium/public/WebGraphicsContext3D.h"
+#include "third_party/khronos/GLES2/gl2.h"
+#include "ui/gfx/rect_f.h"
+
+namespace cc {
+
+GeometryBinding::GeometryBinding(WebKit::WebGraphicsContext3D* context,
+ const gfx::RectF& quad_vertex_rect)
+ : context_(context),
+ quad_vertices_vbo_(0),
+ quad_elements_vbo_(0) {
+ float vertices[] = {
+ quad_vertex_rect.x(), quad_vertex_rect.bottom(), 0.0f, 0.0f,
+ 1.0f, quad_vertex_rect.x(), quad_vertex_rect.y(), 0.0f,
+ 0.0f, 0.0f, quad_vertex_rect.right(), quad_vertex_rect.y(),
+ 0.0f, 1.0f, 0.0f, quad_vertex_rect.right(),
+ quad_vertex_rect.bottom(), 0.0f, 1.0f, 1.0f
+ };
+
+ struct Vertex {
+ 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 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 = { quad_vertex_rect.x(), quad_vertex_rect.bottom(), 0.0f, 0.0f,
+ 1.0f, i * 4.0f + 0.0f };
+ Vertex v1 = { quad_vertex_rect.x(), quad_vertex_rect.y(), 0.0f, 0.0f, 0.0f,
+ i * 4.0f + 1.0f };
+ Vertex v2 = { quad_vertex_rect.right(), quad_vertex_rect.y(), 0.0f, 1.0f,
+ 0.0f, i * 4.0f + 2.0f };
+ Vertex v3 = { quad_vertex_rect.right(), quad_vertex_rect.bottom(), 0.0f,
+ 1.0f, 1.0f, i * 4.0f + 3.0f };
+ 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(context_, quad_vertices_vbo_ = context_->createBuffer());
+ GLC(context_, quad_elements_vbo_ = context_->createBuffer());
+ GLC(context_, context_->bindBuffer(GL_ARRAY_BUFFER, quad_vertices_vbo_));
+ GLC(context_,
+ context_->bufferData(
+ GL_ARRAY_BUFFER, sizeof(quad_list), quad_list, GL_STATIC_DRAW));
+ GLC(context_,
+ context_->bindBuffer(GL_ELEMENT_ARRAY_BUFFER, quad_elements_vbo_));
+ GLC(context_,
+ context_->bufferData(GL_ELEMENT_ARRAY_BUFFER,
+ sizeof(quad_index_list),
+ quad_index_list,
+ GL_STATIC_DRAW));
+}
+
+GeometryBinding::~GeometryBinding() {
+ GLC(context_, context_->deleteBuffer(quad_vertices_vbo_));
+ GLC(context_, context_->deleteBuffer(quad_elements_vbo_));
+}
+
+void GeometryBinding::PrepareForDraw() {
+ GLC(context_,
+ context_->bindBuffer(GL_ELEMENT_ARRAY_BUFFER, quad_elements_vbo_));
+
+ GLC(context_, context_->bindBuffer(GL_ARRAY_BUFFER, quad_vertices_vbo_));
+ GLC(context_,
+ context_->vertexAttribPointer(
+ PositionAttribLocation(), 3, GL_FLOAT, false, 6 * sizeof(float), 0));
+ GLC(context_,
+ context_->vertexAttribPointer(TexCoordAttribLocation(),
+ 2,
+ GL_FLOAT,
+ false,
+ 6 * sizeof(float),
+ 3 * sizeof(float)));
+ GLC(context_,
+ context_->vertexAttribPointer(TriangleIndexAttribLocation(),
+ 1,
+ GL_FLOAT,
+ false,
+ 6 * sizeof(float),
+ 5 * sizeof(float)));
+ GLC(context_, context_->enableVertexAttribArray(PositionAttribLocation()));
+ GLC(context_, context_->enableVertexAttribArray(TexCoordAttribLocation()));
+ GLC(context_,
+ context_->enableVertexAttribArray(TriangleIndexAttribLocation()));
+}
+
+} // namespace cc