| Index: chrome/browser/android/vr_shell/vr_shell_renderer.cc
|
| diff --git a/chrome/browser/android/vr_shell/vr_shell_renderer.cc b/chrome/browser/android/vr_shell/vr_shell_renderer.cc
|
| index a0afcd04db920ad6ee5fc61f6bacb012d6f15c15..f04c51fc27b10153406a9a9e949448e999082709 100644
|
| --- a/chrome/browser/android/vr_shell/vr_shell_renderer.cc
|
| +++ b/chrome/browser/android/vr_shell/vr_shell_renderer.cc
|
| @@ -27,18 +27,13 @@ static constexpr float kTexturedQuadTextureCoordinates[12] =
|
|
|
| static constexpr int kTextureCoordinateDataSize = 2;
|
|
|
| -static constexpr float kWebVrVertices[32] = {
|
| +static constexpr float kWebVrVertices[16] = {
|
| // x y u, v
|
| - -1.f, 1.f, 0.f, 0.f, // Left Eye
|
| + -1.f, 1.f, 0.f, 0.f,
|
| -1.f, -1.f, 0.f, 1.f,
|
| - 0.f, -1.f, 1.f, 1.f,
|
| - 0.f, 1.f, 1.f, 0.f,
|
| -
|
| - 0.f, 1.f, 0.f, 0.f, // Right Eye
|
| - 0.f, -1.f, 0.f, 1.f,
|
| 1.f, -1.f, 1.f, 1.f,
|
| 1.f, 1.f, 1.f, 0.f };
|
| -static constexpr int kWebVrVerticesSize = sizeof(float) * 32;
|
| +static constexpr int kWebVrVerticesSize = sizeof(float) * 16;
|
|
|
| // Reticle constants
|
| static constexpr float kRingDiameter = 1.0f;
|
| @@ -103,14 +98,13 @@ const char* GetShaderSource(vr_shell::ShaderID shader) {
|
| });
|
| case vr_shell::ShaderID::WEBVR_VERTEX_SHADER:
|
| return SHADER(
|
| - attribute vec2 a_Position;
|
| - attribute vec2 a_TexCoordinate;
|
| - uniform vec4 u_SrcRect;
|
| + attribute vec4 a_Position;
|
| varying vec2 v_TexCoordinate;
|
|
|
| void main() {
|
| - v_TexCoordinate = u_SrcRect.xy + (a_TexCoordinate * u_SrcRect.zw);
|
| - gl_Position = vec4(a_Position, 0.0, 1.0);
|
| + // Pack the texcoord into the position to avoid state changes.
|
| + v_TexCoordinate = a_Position.zw;
|
| + gl_Position = vec4(a_Position.xy, 0.0, 1.0);
|
| });
|
| case vr_shell::ShaderID::WEBVR_FRAGMENT_SHADER:
|
| return OEIE_SHADER(
|
| @@ -259,11 +253,7 @@ TexturedQuadRenderer::~TexturedQuadRenderer() = default;
|
|
|
| WebVrRenderer::WebVrRenderer() :
|
| BaseRenderer(WEBVR_VERTEX_SHADER, WEBVR_FRAGMENT_SHADER) {
|
| - left_bounds_ = { 0.0f, 0.0f, 0.5f, 1.0f };
|
| - right_bounds_ = { 0.5f, 0.0f, 0.5f, 1.0f };
|
| -
|
| tex_uniform_handle_ = glGetUniformLocation(program_handle_, "u_Texture");
|
| - src_rect_uniform_handle_ = glGetUniformLocation(program_handle_, "u_SrcRect");
|
|
|
| // TODO(bajones): Figure out why this need to be restored.
|
| GLint old_buffer;
|
| @@ -289,12 +279,9 @@ void WebVrRenderer::Draw(int texture_handle) {
|
| glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_);
|
|
|
| glEnableVertexAttribArray(position_handle_);
|
| - glEnableVertexAttribArray(tex_coord_handle_);
|
|
|
| - glVertexAttribPointer(position_handle_, POSITION_ELEMENTS, GL_FLOAT, false,
|
| - VERTEX_STRIDE, VOID_OFFSET(POSITION_OFFSET));
|
| - glVertexAttribPointer(tex_coord_handle_, TEXCOORD_ELEMENTS, GL_FLOAT, false,
|
| - VERTEX_STRIDE, VOID_OFFSET(TEXCOORD_OFFSET));
|
| + glVertexAttribPointer(position_handle_, VERTEX_ELEMENTS, GL_FLOAT, false,
|
| + VERTEX_STRIDE, VOID_OFFSET(VERTEX_OFFSET));
|
|
|
| // Bind texture. Ideally this should be a 1:1 pixel copy. (Or even more
|
| // ideally, a zero copy reuse of the texture.) For now, we're using an
|
| @@ -305,33 +292,18 @@ void WebVrRenderer::Draw(int texture_handle) {
|
| glBindTexture(GL_TEXTURE_EXTERNAL_OES, texture_handle);
|
| glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
| glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
| - glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
| - glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
| + glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
| + glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
| glUniform1i(tex_uniform_handle_, 0);
|
|
|
| - // TODO(bajones): Should be able handle both eyes in a single draw call.
|
| - // Left eye
|
| - glUniform4fv(src_rect_uniform_handle_, 1, (float*)(&left_bounds_));
|
| + // Blit texture to buffer
|
| glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
|
|
|
| - // Right eye
|
| - glUniform4fv(src_rect_uniform_handle_, 1, (float*)(&right_bounds_));
|
| - glDrawArrays(GL_TRIANGLE_FAN, 4, 4);
|
| -
|
| glDisableVertexAttribArray(position_handle_);
|
| - glDisableVertexAttribArray(tex_coord_handle_);
|
|
|
| glBindBuffer(GL_ARRAY_BUFFER, old_buffer);
|
| }
|
|
|
| -void WebVrRenderer::UpdateTextureBounds(int eye, const gvr::Rectf& bounds) {
|
| - if (eye == 0) {
|
| - left_bounds_ = bounds;
|
| - } else if (eye == 1) {
|
| - right_bounds_ = bounds;
|
| - }
|
| -}
|
| -
|
| // Note that we don't explicitly delete gl objects here, they're deleted
|
| // automatically when we call ClearGLBindings, and deleting them here leads to
|
| // segfaults.
|
|
|