| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/android/vr_shell/vr_shell_renderer.h" | 5 #include "chrome/browser/android/vr_shell/vr_shell_renderer.h" |
| 6 | 6 |
| 7 #include <math.h> | 7 #include <math.h> |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 lowp vec4 texture_color = texture2D(u_texture, v_TexCoordinate); | 255 lowp vec4 texture_color = texture2D(u_texture, v_TexCoordinate); |
| 256 gl_FragColor = texture_color * u_Opacity; | 256 gl_FragColor = texture_color * u_Opacity; |
| 257 } | 257 } |
| 258 /* clang-format on */); | 258 /* clang-format on */); |
| 259 default: | 259 default: |
| 260 LOG(ERROR) << "Shader source requested for unknown shader"; | 260 LOG(ERROR) << "Shader source requested for unknown shader"; |
| 261 return ""; | 261 return ""; |
| 262 } | 262 } |
| 263 } | 263 } |
| 264 | 264 |
| 265 void SetColorUniform(GLuint handle, SkColor c) { |
| 266 glUniform4f(handle, SkColorGetR(c) / 255.0, SkColorGetG(c) / 255.0, |
| 267 SkColorGetB(c) / 255.0, SkColorGetA(c) / 255.0); |
| 268 } |
| 269 |
| 265 } // namespace | 270 } // namespace |
| 266 | 271 |
| 267 namespace vr_shell { | 272 namespace vr_shell { |
| 268 | 273 |
| 269 BaseRenderer::BaseRenderer(ShaderID vertex_id, ShaderID fragment_id) { | 274 BaseRenderer::BaseRenderer(ShaderID vertex_id, ShaderID fragment_id) { |
| 270 std::string error; | 275 std::string error; |
| 271 GLuint vertex_shader_handle = | 276 GLuint vertex_shader_handle = |
| 272 CompileShader(GL_VERTEX_SHADER, GetShaderSource(vertex_id), error); | 277 CompileShader(GL_VERTEX_SHADER, GetShaderSource(vertex_id), error); |
| 273 CHECK(vertex_shader_handle) << error; | 278 CHECK(vertex_shader_handle) << error; |
| 274 | 279 |
| (...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 685 GRADIENT_QUAD_FRAGMENT_SHADER) { | 690 GRADIENT_QUAD_FRAGMENT_SHADER) { |
| 686 model_view_proj_matrix_handle_ = | 691 model_view_proj_matrix_handle_ = |
| 687 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); | 692 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); |
| 688 scene_radius_handle_ = glGetUniformLocation(program_handle_, "u_SceneRadius"); | 693 scene_radius_handle_ = glGetUniformLocation(program_handle_, "u_SceneRadius"); |
| 689 center_color_handle_ = glGetUniformLocation(program_handle_, "u_CenterColor"); | 694 center_color_handle_ = glGetUniformLocation(program_handle_, "u_CenterColor"); |
| 690 edge_color_handle_ = glGetUniformLocation(program_handle_, "u_EdgeColor"); | 695 edge_color_handle_ = glGetUniformLocation(program_handle_, "u_EdgeColor"); |
| 691 opacity_handle_ = glGetUniformLocation(program_handle_, "u_Opacity"); | 696 opacity_handle_ = glGetUniformLocation(program_handle_, "u_Opacity"); |
| 692 } | 697 } |
| 693 | 698 |
| 694 void GradientQuadRenderer::Draw(const vr::Mat4f& view_proj_matrix, | 699 void GradientQuadRenderer::Draw(const vr::Mat4f& view_proj_matrix, |
| 695 const vr::Colorf& edge_color, | 700 SkColor edge_color, |
| 696 const vr::Colorf& center_color, | 701 SkColor center_color, |
| 697 float opacity) { | 702 float opacity) { |
| 698 PrepareToDraw(model_view_proj_matrix_handle_, view_proj_matrix); | 703 PrepareToDraw(model_view_proj_matrix_handle_, view_proj_matrix); |
| 699 | 704 |
| 700 // Tell shader the grid size so that it can calculate the fading. | 705 // Tell shader the grid size so that it can calculate the fading. |
| 701 glUniform1f(scene_radius_handle_, kHalfSize); | 706 glUniform1f(scene_radius_handle_, kHalfSize); |
| 702 | 707 |
| 703 // Set the edge color to the fog color so that it seems to fade out. | 708 // Set the edge color to the fog color so that it seems to fade out. |
| 704 glUniform4f(edge_color_handle_, edge_color.r, edge_color.g, edge_color.b, | 709 SetColorUniform(edge_color_handle_, edge_color); |
| 705 edge_color.a); | 710 SetColorUniform(center_color_handle_, center_color); |
| 706 glUniform4f(center_color_handle_, center_color.r, center_color.g, | |
| 707 center_color.b, center_color.a); | |
| 708 glUniform1f(opacity_handle_, opacity); | 711 glUniform1f(opacity_handle_, opacity); |
| 709 | 712 |
| 710 glDrawArrays(GL_TRIANGLES, 0, kVerticesNumber); | 713 glDrawArrays(GL_TRIANGLES, 0, kVerticesNumber); |
| 711 | 714 |
| 712 glDisableVertexAttribArray(position_handle_); | 715 glDisableVertexAttribArray(position_handle_); |
| 713 glDisableVertexAttribArray(tex_coord_handle_); | 716 glDisableVertexAttribArray(tex_coord_handle_); |
| 714 } | 717 } |
| 715 | 718 |
| 716 GradientQuadRenderer::~GradientQuadRenderer() = default; | 719 GradientQuadRenderer::~GradientQuadRenderer() = default; |
| 717 | 720 |
| 718 GradientGridRenderer::GradientGridRenderer() | 721 GradientGridRenderer::GradientGridRenderer() |
| 719 : BaseRenderer(GRADIENT_QUAD_VERTEX_SHADER, GRADIENT_QUAD_FRAGMENT_SHADER) { | 722 : BaseRenderer(GRADIENT_QUAD_VERTEX_SHADER, GRADIENT_QUAD_FRAGMENT_SHADER) { |
| 720 model_view_proj_matrix_handle_ = | 723 model_view_proj_matrix_handle_ = |
| 721 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); | 724 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); |
| 722 scene_radius_handle_ = glGetUniformLocation(program_handle_, "u_SceneRadius"); | 725 scene_radius_handle_ = glGetUniformLocation(program_handle_, "u_SceneRadius"); |
| 723 center_color_handle_ = glGetUniformLocation(program_handle_, "u_CenterColor"); | 726 center_color_handle_ = glGetUniformLocation(program_handle_, "u_CenterColor"); |
| 724 edge_color_handle_ = glGetUniformLocation(program_handle_, "u_EdgeColor"); | 727 edge_color_handle_ = glGetUniformLocation(program_handle_, "u_EdgeColor"); |
| 725 opacity_handle_ = glGetUniformLocation(program_handle_, "u_Opacity"); | 728 opacity_handle_ = glGetUniformLocation(program_handle_, "u_Opacity"); |
| 726 } | 729 } |
| 727 | 730 |
| 728 void GradientGridRenderer::Draw(const vr::Mat4f& view_proj_matrix, | 731 void GradientGridRenderer::Draw(const vr::Mat4f& view_proj_matrix, |
| 729 const vr::Colorf& edge_color, | 732 SkColor edge_color, |
| 730 const vr::Colorf& center_color, | 733 SkColor center_color, |
| 731 int gridline_count, | 734 int gridline_count, |
| 732 float opacity) { | 735 float opacity) { |
| 733 // In case the tile number changed we have to regenerate the grid lines. | 736 // In case the tile number changed we have to regenerate the grid lines. |
| 734 if (grid_lines_.size() != static_cast<size_t>(2 * (gridline_count + 1))) { | 737 if (grid_lines_.size() != static_cast<size_t>(2 * (gridline_count + 1))) { |
| 735 MakeGridLines(gridline_count); | 738 MakeGridLines(gridline_count); |
| 736 } | 739 } |
| 737 | 740 |
| 738 glUseProgram(program_handle_); | 741 glUseProgram(program_handle_); |
| 739 | 742 |
| 740 // Pass in model view project matrix. | 743 // Pass in model view project matrix. |
| 741 glUniformMatrix4fv(model_view_proj_matrix_handle_, 1, false, | 744 glUniformMatrix4fv(model_view_proj_matrix_handle_, 1, false, |
| 742 MatrixToGLArray(view_proj_matrix).data()); | 745 MatrixToGLArray(view_proj_matrix).data()); |
| 743 | 746 |
| 744 // Tell shader the grid size so that it can calculate the fading. | 747 // Tell shader the grid size so that it can calculate the fading. |
| 745 glUniform1f(scene_radius_handle_, kHalfSize); | 748 glUniform1f(scene_radius_handle_, kHalfSize); |
| 746 | 749 |
| 747 // Set the edge color to the fog color so that it seems to fade out. | 750 // Set the edge color to the fog color so that it seems to fade out. |
| 748 glUniform4f(edge_color_handle_, edge_color.r, edge_color.g, edge_color.b, | 751 SetColorUniform(edge_color_handle_, edge_color); |
| 749 edge_color.a); | 752 SetColorUniform(center_color_handle_, center_color); |
| 750 glUniform4f(center_color_handle_, center_color.r, center_color.g, | |
| 751 center_color.b, center_color.a); | |
| 752 glUniform1f(opacity_handle_, opacity); | 753 glUniform1f(opacity_handle_, opacity); |
| 753 | 754 |
| 754 // Draw the grid. | 755 // Draw the grid. |
| 755 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_); | 756 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_); |
| 756 | 757 |
| 757 glVertexAttribPointer(position_handle_, kPositionDataSize, GL_FLOAT, false, 0, | 758 glVertexAttribPointer(position_handle_, kPositionDataSize, GL_FLOAT, false, 0, |
| 758 VOID_OFFSET(0)); | 759 VOID_OFFSET(0)); |
| 759 glEnableVertexAttribArray(position_handle_); | 760 glEnableVertexAttribArray(position_handle_); |
| 760 glEnable(GL_BLEND); | 761 glEnable(GL_BLEND); |
| 761 glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); | 762 glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 854 GradientGridRenderer* VrShellRenderer::GetGradientGridRenderer() { | 855 GradientGridRenderer* VrShellRenderer::GetGradientGridRenderer() { |
| 855 Flush(); | 856 Flush(); |
| 856 return gradient_grid_renderer_.get(); | 857 return gradient_grid_renderer_.get(); |
| 857 } | 858 } |
| 858 | 859 |
| 859 void VrShellRenderer::Flush() { | 860 void VrShellRenderer::Flush() { |
| 860 textured_quad_renderer_->Flush(); | 861 textured_quad_renderer_->Flush(); |
| 861 } | 862 } |
| 862 | 863 |
| 863 } // namespace vr_shell | 864 } // namespace vr_shell |
| OLD | NEW |