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 |