| 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 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 483 ReticleRenderer::~ReticleRenderer() = default; | 487 ReticleRenderer::~ReticleRenderer() = default; |
| 484 | 488 |
| 485 LaserRenderer::LaserRenderer() | 489 LaserRenderer::LaserRenderer() |
| 486 : BaseQuadRenderer(LASER_VERTEX_SHADER, LASER_FRAGMENT_SHADER) { | 490 : BaseQuadRenderer(LASER_VERTEX_SHADER, LASER_FRAGMENT_SHADER) { |
| 487 model_view_proj_matrix_handle_ = | 491 model_view_proj_matrix_handle_ = |
| 488 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); | 492 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); |
| 489 texture_unit_handle_ = glGetUniformLocation(program_handle_, "texture_unit"); | 493 texture_unit_handle_ = glGetUniformLocation(program_handle_, "texture_unit"); |
| 490 color_handle_ = glGetUniformLocation(program_handle_, "color"); | 494 color_handle_ = glGetUniformLocation(program_handle_, "color"); |
| 491 fade_point_handle_ = glGetUniformLocation(program_handle_, "fade_point"); | 495 fade_point_handle_ = glGetUniformLocation(program_handle_, "fade_point"); |
| 492 fade_end_handle_ = glGetUniformLocation(program_handle_, "fade_end"); | 496 fade_end_handle_ = glGetUniformLocation(program_handle_, "fade_end"); |
| 497 opacity_handle_ = glGetUniformLocation(program_handle_, "u_Opacity"); |
| 493 | 498 |
| 494 glGenTextures(1, &texture_data_handle_); | 499 glGenTextures(1, &texture_data_handle_); |
| 495 glBindTexture(GL_TEXTURE_2D, texture_data_handle_); | 500 glBindTexture(GL_TEXTURE_2D, texture_data_handle_); |
| 496 | 501 |
| 497 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, kLaserDataWidth, kLaserDataHeight, 0, | 502 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, kLaserDataWidth, kLaserDataHeight, 0, |
| 498 GL_RGBA, GL_UNSIGNED_BYTE, kLaserData); | 503 GL_RGBA, GL_UNSIGNED_BYTE, kLaserData); |
| 499 | 504 |
| 500 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); | 505 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); |
| 501 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); | 506 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
| 502 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); | 507 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
| 503 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); | 508 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); |
| 504 } | 509 } |
| 505 | 510 |
| 506 void LaserRenderer::Draw(const vr::Mat4f& view_proj_matrix) { | 511 void LaserRenderer::Draw(float opacity, const vr::Mat4f& view_proj_matrix) { |
| 507 PrepareToDraw(model_view_proj_matrix_handle_, view_proj_matrix); | 512 PrepareToDraw(model_view_proj_matrix_handle_, view_proj_matrix); |
| 508 | 513 |
| 509 // Link texture data with texture unit. | 514 // Link texture data with texture unit. |
| 510 glActiveTexture(GL_TEXTURE0); | 515 glActiveTexture(GL_TEXTURE0); |
| 511 glBindTexture(GL_TEXTURE_2D, texture_data_handle_); | 516 glBindTexture(GL_TEXTURE_2D, texture_data_handle_); |
| 512 | 517 |
| 513 glUniform1i(texture_unit_handle_, 0); | 518 glUniform1i(texture_unit_handle_, 0); |
| 514 glUniform4f(color_handle_, kLaserColor[0], kLaserColor[1], kLaserColor[2], | 519 glUniform4f(color_handle_, kLaserColor[0], kLaserColor[1], kLaserColor[2], |
| 515 kLaserColor[3]); | 520 kLaserColor[3]); |
| 516 glUniform1f(fade_point_handle_, kFadePoint); | 521 glUniform1f(fade_point_handle_, kFadePoint); |
| 517 glUniform1f(fade_end_handle_, kFadeEnd); | 522 glUniform1f(fade_end_handle_, kFadeEnd); |
| 523 glUniform1f(opacity_handle_, opacity); |
| 518 | 524 |
| 519 glDrawArrays(GL_TRIANGLES, 0, kVerticesNumber); | 525 glDrawArrays(GL_TRIANGLES, 0, kVerticesNumber); |
| 520 | 526 |
| 521 glDisableVertexAttribArray(position_handle_); | 527 glDisableVertexAttribArray(position_handle_); |
| 522 glDisableVertexAttribArray(tex_coord_handle_); | 528 glDisableVertexAttribArray(tex_coord_handle_); |
| 523 } | 529 } |
| 524 | 530 |
| 525 LaserRenderer::~LaserRenderer() = default; | 531 LaserRenderer::~LaserRenderer() = default; |
| 526 | 532 |
| 527 ControllerRenderer::ControllerRenderer() | 533 ControllerRenderer::ControllerRenderer() |
| 528 : BaseRenderer(CONTROLLER_VERTEX_SHADER, CONTROLLER_FRAGMENT_SHADER), | 534 : BaseRenderer(CONTROLLER_VERTEX_SHADER, CONTROLLER_FRAGMENT_SHADER), |
| 529 texture_handles_(VrControllerModel::STATE_COUNT) { | 535 texture_handles_(VrControllerModel::STATE_COUNT) { |
| 530 model_view_proj_matrix_handle_ = | 536 model_view_proj_matrix_handle_ = |
| 531 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); | 537 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); |
| 532 tex_uniform_handle_ = glGetUniformLocation(program_handle_, "u_Texture"); | 538 tex_uniform_handle_ = glGetUniformLocation(program_handle_, "u_Texture"); |
| 539 opacity_handle_ = glGetUniformLocation(program_handle_, "u_Opacity"); |
| 533 } | 540 } |
| 534 | 541 |
| 535 ControllerRenderer::~ControllerRenderer() = default; | 542 ControllerRenderer::~ControllerRenderer() = default; |
| 536 | 543 |
| 537 void ControllerRenderer::SetUp(std::unique_ptr<VrControllerModel> model) { | 544 void ControllerRenderer::SetUp(std::unique_ptr<VrControllerModel> model) { |
| 538 glGenBuffersARB(1, &indices_buffer_); | 545 glGenBuffersARB(1, &indices_buffer_); |
| 539 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indices_buffer_); | 546 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indices_buffer_); |
| 540 glBufferData(GL_ELEMENT_ARRAY_BUFFER, model->IndicesBufferSize(), | 547 glBufferData(GL_ELEMENT_ARRAY_BUFFER, model->IndicesBufferSize(), |
| 541 model->IndicesBuffer(), GL_STATIC_DRAW); | 548 model->IndicesBuffer(), GL_STATIC_DRAW); |
| 542 | 549 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 571 | 578 |
| 572 draw_mode_ = model->DrawMode(); | 579 draw_mode_ = model->DrawMode(); |
| 573 accessor = model->IndicesAccessor(); | 580 accessor = model->IndicesAccessor(); |
| 574 indices_count_ = accessor->count; | 581 indices_count_ = accessor->count; |
| 575 indices_type_ = accessor->component_type; | 582 indices_type_ = accessor->component_type; |
| 576 indices_offset_ = VOID_OFFSET(accessor->byte_offset); | 583 indices_offset_ = VOID_OFFSET(accessor->byte_offset); |
| 577 setup_ = true; | 584 setup_ = true; |
| 578 } | 585 } |
| 579 | 586 |
| 580 void ControllerRenderer::Draw(VrControllerModel::State state, | 587 void ControllerRenderer::Draw(VrControllerModel::State state, |
| 588 float opacity, |
| 581 const vr::Mat4f& view_proj_matrix) { | 589 const vr::Mat4f& view_proj_matrix) { |
| 582 glUseProgram(program_handle_); | 590 glUseProgram(program_handle_); |
| 583 | 591 |
| 592 glUniform1f(opacity_handle_, opacity); |
| 593 |
| 584 glUniformMatrix4fv(model_view_proj_matrix_handle_, 1, false, | 594 glUniformMatrix4fv(model_view_proj_matrix_handle_, 1, false, |
| 585 MatrixToGLArray(view_proj_matrix).data()); | 595 MatrixToGLArray(view_proj_matrix).data()); |
| 586 | 596 |
| 587 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_); | 597 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_); |
| 588 | 598 |
| 589 glVertexAttribPointer(position_handle_, position_components_, position_type_, | 599 glVertexAttribPointer(position_handle_, position_components_, position_type_, |
| 590 GL_FALSE, position_stride_, position_offset_); | 600 GL_FALSE, position_stride_, position_offset_); |
| 591 glEnableVertexAttribArray(position_handle_); | 601 glEnableVertexAttribArray(position_handle_); |
| 592 | 602 |
| 593 glVertexAttribPointer(tex_coord_handle_, tex_coord_components_, | 603 glVertexAttribPointer(tex_coord_handle_, tex_coord_components_, |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 735 laser_renderer_(base::MakeUnique<LaserRenderer>()), | 745 laser_renderer_(base::MakeUnique<LaserRenderer>()), |
| 736 controller_renderer_(base::MakeUnique<ControllerRenderer>()), | 746 controller_renderer_(base::MakeUnique<ControllerRenderer>()), |
| 737 gradient_quad_renderer_(base::MakeUnique<GradientQuadRenderer>()), | 747 gradient_quad_renderer_(base::MakeUnique<GradientQuadRenderer>()), |
| 738 gradient_grid_renderer_(base::MakeUnique<GradientGridRenderer>()) { | 748 gradient_grid_renderer_(base::MakeUnique<GradientGridRenderer>()) { |
| 739 BaseQuadRenderer::SetVertexBuffer(); | 749 BaseQuadRenderer::SetVertexBuffer(); |
| 740 } | 750 } |
| 741 | 751 |
| 742 VrShellRenderer::~VrShellRenderer() = default; | 752 VrShellRenderer::~VrShellRenderer() = default; |
| 743 | 753 |
| 744 } // namespace vr_shell | 754 } // namespace vr_shell |
| OLD | NEW |