| 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 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 } | 178 } |
| 179 /* clang-format on */); | 179 /* clang-format on */); |
| 180 case vr_shell::ShaderID::LASER_FRAGMENT_SHADER: | 180 case vr_shell::ShaderID::LASER_FRAGMENT_SHADER: |
| 181 return SHADER( | 181 return SHADER( |
| 182 /* clang-format off */ | 182 /* clang-format off */ |
| 183 varying mediump vec2 v_TexCoordinate; | 183 varying mediump vec2 v_TexCoordinate; |
| 184 uniform sampler2D texture_unit; | 184 uniform sampler2D texture_unit; |
| 185 uniform lowp vec4 color; | 185 uniform lowp vec4 color; |
| 186 uniform mediump float fade_point; | 186 uniform mediump float fade_point; |
| 187 uniform mediump float fade_end; | 187 uniform mediump float fade_end; |
| 188 uniform mediump float u_Opacity; |
| 188 | 189 |
| 189 void main() { | 190 void main() { |
| 190 mediump vec2 uv = v_TexCoordinate; | 191 mediump vec2 uv = v_TexCoordinate; |
| 191 mediump float front_fade_factor = 1.0 - | 192 mediump float front_fade_factor = 1.0 - |
| 192 clamp(1.0 - (uv.y - fade_point) / (1.0 - fade_point), 0.0, 1.0); | 193 clamp(1.0 - (uv.y - fade_point) / (1.0 - fade_point), 0.0, 1.0); |
| 193 mediump float back_fade_factor = | 194 mediump float back_fade_factor = |
| 194 clamp((uv.y - fade_point) / (fade_end - fade_point), 0.0, 1.0); | 195 clamp((uv.y - fade_point) / (fade_end - fade_point), 0.0, 1.0); |
| 195 mediump float total_fade = front_fade_factor * back_fade_factor; | 196 mediump float total_fade = front_fade_factor * back_fade_factor; |
| 196 lowp vec4 texture_color = texture2D(texture_unit, uv); | 197 lowp vec4 texture_color = texture2D(texture_unit, uv); |
| 197 lowp vec4 final_color = color * texture_color; | 198 lowp vec4 final_color = color * texture_color; |
| 198 gl_FragColor = vec4(final_color.xyz, final_color.w * total_fade); | 199 gl_FragColor = vec4(final_color.xyz, |
| 200 final_color.w * total_fade * u_Opacity); |
| 199 } | 201 } |
| 200 /* clang-format on */); | 202 /* clang-format on */); |
| 201 case vr_shell::ShaderID::GRADIENT_QUAD_FRAGMENT_SHADER: | 203 case vr_shell::ShaderID::GRADIENT_QUAD_FRAGMENT_SHADER: |
| 202 case vr_shell::ShaderID::GRADIENT_GRID_FRAGMENT_SHADER: | 204 case vr_shell::ShaderID::GRADIENT_GRID_FRAGMENT_SHADER: |
| 203 return OEIE_SHADER( | 205 return OEIE_SHADER( |
| 204 /* clang-format off */ | 206 /* clang-format off */ |
| 205 precision highp float; | 207 precision highp float; |
| 206 varying vec2 v_GridPosition; | 208 varying vec2 v_GridPosition; |
| 207 uniform vec4 u_CenterColor; | 209 uniform vec4 u_CenterColor; |
| 208 uniform vec4 u_EdgeColor; | 210 uniform vec4 u_EdgeColor; |
| 209 uniform mediump float u_Opacity; | 211 uniform mediump float u_Opacity; |
| 210 | 212 |
| 211 void main() { | 213 void main() { |
| 212 float edgeColorWeight = clamp(length(v_GridPosition), 0.0, 1.0); | 214 float edgeColorWeight = clamp(length(v_GridPosition), 0.0, 1.0); |
| 213 float centerColorWeight = 1.0 - edgeColorWeight; | 215 float centerColorWeight = 1.0 - edgeColorWeight; |
| 214 gl_FragColor = (u_CenterColor * centerColorWeight + | 216 gl_FragColor = (u_CenterColor * centerColorWeight + |
| 215 u_EdgeColor * edgeColorWeight) * vec4(1.0, 1.0, 1.0, u_Opacity); | 217 u_EdgeColor * edgeColorWeight) * vec4(1.0, 1.0, 1.0, u_Opacity); |
| 216 } | 218 } |
| 217 /* clang-format on */); | 219 /* clang-format on */); |
| 218 case vr_shell::ShaderID::CONTROLLER_FRAGMENT_SHADER: | 220 case vr_shell::ShaderID::CONTROLLER_FRAGMENT_SHADER: |
| 219 return SHADER( | 221 return SHADER( |
| 220 /* clang-format off */ | 222 /* clang-format off */ |
| 221 uniform sampler2D u_texture; | 223 uniform sampler2D u_texture; |
| 222 varying vec2 v_TexCoordinate; | 224 varying vec2 v_TexCoordinate; |
| 225 uniform mediump float u_Opacity; |
| 223 | 226 |
| 224 void main() { | 227 void main() { |
| 225 gl_FragColor = texture2D(u_texture, v_TexCoordinate); | 228 lowp vec4 texture_color = texture2D(u_texture, v_TexCoordinate); |
| 229 gl_FragColor = vec4(texture_color.xyz, texture_color.w * u_Opacity); |
| 226 } | 230 } |
| 227 /* clang-format on */); | 231 /* clang-format on */); |
| 228 default: | 232 default: |
| 229 LOG(ERROR) << "Shader source requested for unknown shader"; | 233 LOG(ERROR) << "Shader source requested for unknown shader"; |
| 230 return ""; | 234 return ""; |
| 231 } | 235 } |
| 232 } | 236 } |
| 233 | 237 |
| 234 } // namespace | 238 } // namespace |
| 235 | 239 |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 482 ReticleRenderer::~ReticleRenderer() = default; | 486 ReticleRenderer::~ReticleRenderer() = default; |
| 483 | 487 |
| 484 LaserRenderer::LaserRenderer() | 488 LaserRenderer::LaserRenderer() |
| 485 : BaseQuadRenderer(LASER_VERTEX_SHADER, LASER_FRAGMENT_SHADER) { | 489 : BaseQuadRenderer(LASER_VERTEX_SHADER, LASER_FRAGMENT_SHADER) { |
| 486 model_view_proj_matrix_handle_ = | 490 model_view_proj_matrix_handle_ = |
| 487 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); | 491 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); |
| 488 texture_unit_handle_ = glGetUniformLocation(program_handle_, "texture_unit"); | 492 texture_unit_handle_ = glGetUniformLocation(program_handle_, "texture_unit"); |
| 489 color_handle_ = glGetUniformLocation(program_handle_, "color"); | 493 color_handle_ = glGetUniformLocation(program_handle_, "color"); |
| 490 fade_point_handle_ = glGetUniformLocation(program_handle_, "fade_point"); | 494 fade_point_handle_ = glGetUniformLocation(program_handle_, "fade_point"); |
| 491 fade_end_handle_ = glGetUniformLocation(program_handle_, "fade_end"); | 495 fade_end_handle_ = glGetUniformLocation(program_handle_, "fade_end"); |
| 496 opacity_handle_ = glGetUniformLocation(program_handle_, "u_Opacity"); |
| 492 | 497 |
| 493 glGenTextures(1, &texture_data_handle_); | 498 glGenTextures(1, &texture_data_handle_); |
| 494 glBindTexture(GL_TEXTURE_2D, texture_data_handle_); | 499 glBindTexture(GL_TEXTURE_2D, texture_data_handle_); |
| 495 | 500 |
| 496 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, kLaserDataWidth, kLaserDataHeight, 0, | 501 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, kLaserDataWidth, kLaserDataHeight, 0, |
| 497 GL_RGBA, GL_UNSIGNED_BYTE, kLaserData); | 502 GL_RGBA, GL_UNSIGNED_BYTE, kLaserData); |
| 498 | 503 |
| 499 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); | 504 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); |
| 500 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); | 505 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
| 501 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); | 506 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
| 502 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); | 507 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); |
| 503 } | 508 } |
| 504 | 509 |
| 505 void LaserRenderer::Draw(const gvr::Mat4f& view_proj_matrix) { | 510 void LaserRenderer::Draw(float opacity, const gvr::Mat4f& view_proj_matrix) { |
| 506 PrepareToDraw(model_view_proj_matrix_handle_, view_proj_matrix); | 511 PrepareToDraw(model_view_proj_matrix_handle_, view_proj_matrix); |
| 507 | 512 |
| 508 // Link texture data with texture unit. | 513 // Link texture data with texture unit. |
| 509 glActiveTexture(GL_TEXTURE0); | 514 glActiveTexture(GL_TEXTURE0); |
| 510 glBindTexture(GL_TEXTURE_2D, texture_data_handle_); | 515 glBindTexture(GL_TEXTURE_2D, texture_data_handle_); |
| 511 | 516 |
| 512 glUniform1i(texture_unit_handle_, 0); | 517 glUniform1i(texture_unit_handle_, 0); |
| 513 glUniform4f(color_handle_, kLaserColor[0], kLaserColor[1], kLaserColor[2], | 518 glUniform4f(color_handle_, kLaserColor[0], kLaserColor[1], kLaserColor[2], |
| 514 kLaserColor[3]); | 519 kLaserColor[3]); |
| 515 glUniform1f(fade_point_handle_, kFadePoint); | 520 glUniform1f(fade_point_handle_, kFadePoint); |
| 516 glUniform1f(fade_end_handle_, kFadeEnd); | 521 glUniform1f(fade_end_handle_, kFadeEnd); |
| 522 glUniform1f(opacity_handle_, opacity); |
| 517 | 523 |
| 518 glDrawArrays(GL_TRIANGLES, 0, kVerticesNumber); | 524 glDrawArrays(GL_TRIANGLES, 0, kVerticesNumber); |
| 519 | 525 |
| 520 glDisableVertexAttribArray(position_handle_); | 526 glDisableVertexAttribArray(position_handle_); |
| 521 glDisableVertexAttribArray(tex_coord_handle_); | 527 glDisableVertexAttribArray(tex_coord_handle_); |
| 522 } | 528 } |
| 523 | 529 |
| 524 LaserRenderer::~LaserRenderer() = default; | 530 LaserRenderer::~LaserRenderer() = default; |
| 525 | 531 |
| 526 ControllerRenderer::ControllerRenderer() | 532 ControllerRenderer::ControllerRenderer() |
| 527 : BaseRenderer(CONTROLLER_VERTEX_SHADER, CONTROLLER_FRAGMENT_SHADER), | 533 : BaseRenderer(CONTROLLER_VERTEX_SHADER, CONTROLLER_FRAGMENT_SHADER), |
| 528 texture_handles_(VrControllerModel::STATE_COUNT) { | 534 texture_handles_(VrControllerModel::STATE_COUNT) { |
| 529 model_view_proj_matrix_handle_ = | 535 model_view_proj_matrix_handle_ = |
| 530 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); | 536 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); |
| 531 tex_uniform_handle_ = glGetUniformLocation(program_handle_, "u_Texture"); | 537 tex_uniform_handle_ = glGetUniformLocation(program_handle_, "u_Texture"); |
| 538 opacity_handle_ = glGetUniformLocation(program_handle_, "u_Opacity"); |
| 532 } | 539 } |
| 533 | 540 |
| 534 ControllerRenderer::~ControllerRenderer() = default; | 541 ControllerRenderer::~ControllerRenderer() = default; |
| 535 | 542 |
| 536 void ControllerRenderer::SetUp(std::unique_ptr<VrControllerModel> model) { | 543 void ControllerRenderer::SetUp(std::unique_ptr<VrControllerModel> model) { |
| 537 glGenBuffersARB(1, &indices_buffer_); | 544 glGenBuffersARB(1, &indices_buffer_); |
| 538 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indices_buffer_); | 545 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indices_buffer_); |
| 539 glBufferData(GL_ELEMENT_ARRAY_BUFFER, model->IndicesBufferSize(), | 546 glBufferData(GL_ELEMENT_ARRAY_BUFFER, model->IndicesBufferSize(), |
| 540 model->IndicesBuffer(), GL_STATIC_DRAW); | 547 model->IndicesBuffer(), GL_STATIC_DRAW); |
| 541 | 548 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 570 | 577 |
| 571 draw_mode_ = model->DrawMode(); | 578 draw_mode_ = model->DrawMode(); |
| 572 accessor = model->IndicesAccessor(); | 579 accessor = model->IndicesAccessor(); |
| 573 indices_count_ = accessor->count; | 580 indices_count_ = accessor->count; |
| 574 indices_type_ = accessor->component_type; | 581 indices_type_ = accessor->component_type; |
| 575 indices_offset_ = VOID_OFFSET(accessor->byte_offset); | 582 indices_offset_ = VOID_OFFSET(accessor->byte_offset); |
| 576 setup_ = true; | 583 setup_ = true; |
| 577 } | 584 } |
| 578 | 585 |
| 579 void ControllerRenderer::Draw(VrControllerModel::State state, | 586 void ControllerRenderer::Draw(VrControllerModel::State state, |
| 587 float opacity, |
| 580 const gvr::Mat4f& view_proj_matrix) { | 588 const gvr::Mat4f& view_proj_matrix) { |
| 581 glUseProgram(program_handle_); | 589 glUseProgram(program_handle_); |
| 582 | 590 |
| 591 glUniform1f(opacity_handle_, opacity); |
| 592 |
| 583 glUniformMatrix4fv(model_view_proj_matrix_handle_, 1, false, | 593 glUniformMatrix4fv(model_view_proj_matrix_handle_, 1, false, |
| 584 MatrixToGLArray(view_proj_matrix).data()); | 594 MatrixToGLArray(view_proj_matrix).data()); |
| 585 | 595 |
| 586 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_); | 596 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_); |
| 587 | 597 |
| 588 glVertexAttribPointer(position_handle_, position_components_, position_type_, | 598 glVertexAttribPointer(position_handle_, position_components_, position_type_, |
| 589 GL_FALSE, position_stride_, position_offset_); | 599 GL_FALSE, position_stride_, position_offset_); |
| 590 glEnableVertexAttribArray(position_handle_); | 600 glEnableVertexAttribArray(position_handle_); |
| 591 | 601 |
| 592 glVertexAttribPointer(tex_coord_handle_, tex_coord_components_, | 602 glVertexAttribPointer(tex_coord_handle_, tex_coord_components_, |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 734 laser_renderer_(base::MakeUnique<LaserRenderer>()), | 744 laser_renderer_(base::MakeUnique<LaserRenderer>()), |
| 735 controller_renderer_(base::MakeUnique<ControllerRenderer>()), | 745 controller_renderer_(base::MakeUnique<ControllerRenderer>()), |
| 736 gradient_quad_renderer_(base::MakeUnique<GradientQuadRenderer>()), | 746 gradient_quad_renderer_(base::MakeUnique<GradientQuadRenderer>()), |
| 737 gradient_grid_renderer_(base::MakeUnique<GradientGridRenderer>()) { | 747 gradient_grid_renderer_(base::MakeUnique<GradientGridRenderer>()) { |
| 738 BaseQuadRenderer::SetVertexBuffer(); | 748 BaseQuadRenderer::SetVertexBuffer(); |
| 739 } | 749 } |
| 740 | 750 |
| 741 VrShellRenderer::~VrShellRenderer() = default; | 751 VrShellRenderer::~VrShellRenderer() = default; |
| 742 | 752 |
| 743 } // namespace vr_shell | 753 } // namespace vr_shell |
| OLD | NEW |