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 |