blob: aff8ff265dd6114e950cba3f16a307b16f3505a4 [file] [log] [blame]
// Copyright 2017 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 "chrome/browser/vr/renderers/base_quad_renderer.h"
#include "base/stl_util.h"
#include "chrome/browser/vr/vr_gl_util.h"
#include "ui/gfx/transform.h"
namespace vr {
namespace {
static constexpr float kQuadVertices[8] = {
-0.5f, 0.5f, -0.5f, -0.5f, 0.5f, 0.5f, 0.5f, -0.5f,
};
static constexpr GLushort kQuadIndices[6] = {0, 1, 2, 1, 3, 2};
static constexpr int kQuadPositionDataSize = 2;
} // namespace
BaseQuadRenderer::BaseQuadRenderer(const char* vertex_src,
const char* fragment_src)
: BaseRenderer(vertex_src, fragment_src) {}
BaseQuadRenderer::~BaseQuadRenderer() = default;
void BaseQuadRenderer::PrepareToDraw(GLuint view_proj_matrix_handle,
const gfx::Transform& view_proj_matrix) {
glUseProgram(program_handle_);
// Pass in model view project matrix.
glUniformMatrix4fv(view_proj_matrix_handle, 1, false,
MatrixToGLArray(view_proj_matrix).data());
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_);
// Set up position attribute.
glVertexAttribPointer(position_handle_, kQuadPositionDataSize, GL_FLOAT,
false, 0, 0);
glEnableVertexAttribArray(position_handle_);
}
GLuint BaseQuadRenderer::vertex_buffer_ = 0;
GLuint BaseQuadRenderer::index_buffer_ = 0;
void BaseQuadRenderer::CreateBuffers() {
GLuint buffers[2];
glGenBuffers(2, buffers);
vertex_buffer_ = buffers[0];
index_buffer_ = buffers[1];
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_);
glBufferData(GL_ARRAY_BUFFER, base::size(kQuadVertices) * sizeof(float),
kQuadVertices, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, index_buffer_);
glBufferData(GL_ELEMENT_ARRAY_BUFFER,
base::size(kQuadIndices) * sizeof(GLushort), kQuadIndices,
GL_STATIC_DRAW);
}
int BaseQuadRenderer::NumQuadIndices() {
return base::size(kQuadIndices);
}
} // namespace vr