| 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 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 BaseRenderer::~BaseRenderer() = default; | 260 BaseRenderer::~BaseRenderer() = default; |
| 261 | 261 |
| 262 BaseQuadRenderer::BaseQuadRenderer(ShaderID vertex_id, ShaderID fragment_id) | 262 BaseQuadRenderer::BaseQuadRenderer(ShaderID vertex_id, ShaderID fragment_id) |
| 263 : BaseRenderer(vertex_id, fragment_id) {} | 263 : BaseRenderer(vertex_id, fragment_id) {} |
| 264 | 264 |
| 265 GLuint BaseQuadRenderer::vertex_buffer_ = 0; | 265 GLuint BaseQuadRenderer::vertex_buffer_ = 0; |
| 266 | 266 |
| 267 BaseQuadRenderer::~BaseQuadRenderer() = default; | 267 BaseQuadRenderer::~BaseQuadRenderer() = default; |
| 268 | 268 |
| 269 void BaseQuadRenderer::PrepareToDraw(GLuint view_proj_matrix_handle, | 269 void BaseQuadRenderer::PrepareToDraw(GLuint view_proj_matrix_handle, |
| 270 const gvr::Mat4f& view_proj_matrix) { | 270 const vr::Mat4f& view_proj_matrix) { |
| 271 glUseProgram(program_handle_); | 271 glUseProgram(program_handle_); |
| 272 | 272 |
| 273 // Pass in model view project matrix. | 273 // Pass in model view project matrix. |
| 274 glUniformMatrix4fv(view_proj_matrix_handle, 1, false, | 274 glUniformMatrix4fv(view_proj_matrix_handle, 1, false, |
| 275 MatrixToGLArray(view_proj_matrix).data()); | 275 MatrixToGLArray(view_proj_matrix).data()); |
| 276 | 276 |
| 277 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_); | 277 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_); |
| 278 | 278 |
| 279 // Set up position attribute. | 279 // Set up position attribute. |
| 280 glVertexAttribPointer(position_handle_, kPositionDataSize, GL_FLOAT, false, | 280 glVertexAttribPointer(position_handle_, kPositionDataSize, GL_FLOAT, false, |
| (...skipping 23 matching lines...) Expand all Loading... |
| 304 TEXTURE_QUAD_FRAGMENT_SHADER) { | 304 TEXTURE_QUAD_FRAGMENT_SHADER) { |
| 305 model_view_proj_matrix_handle_ = | 305 model_view_proj_matrix_handle_ = |
| 306 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); | 306 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); |
| 307 tex_uniform_handle_ = glGetUniformLocation(program_handle_, "u_Texture"); | 307 tex_uniform_handle_ = glGetUniformLocation(program_handle_, "u_Texture"); |
| 308 copy_rect_uniform_handle_ = | 308 copy_rect_uniform_handle_ = |
| 309 glGetUniformLocation(program_handle_, "u_CopyRect"); | 309 glGetUniformLocation(program_handle_, "u_CopyRect"); |
| 310 opacity_handle_ = glGetUniformLocation(program_handle_, "opacity"); | 310 opacity_handle_ = glGetUniformLocation(program_handle_, "opacity"); |
| 311 } | 311 } |
| 312 | 312 |
| 313 void TexturedQuadRenderer::AddQuad(int texture_data_handle, | 313 void TexturedQuadRenderer::AddQuad(int texture_data_handle, |
| 314 const gvr::Mat4f& view_proj_matrix, | 314 const vr::Mat4f& view_proj_matrix, |
| 315 const Rectf& copy_rect, | 315 const gfx::RectF& copy_rect, |
| 316 float opacity) { | 316 float opacity) { |
| 317 TexturedQuad quad; | 317 TexturedQuad quad; |
| 318 quad.texture_data_handle = texture_data_handle; | 318 quad.texture_data_handle = texture_data_handle; |
| 319 quad.view_proj_matrix = view_proj_matrix; | 319 quad.view_proj_matrix = view_proj_matrix; |
| 320 quad.copy_rect = copy_rect; | 320 quad.copy_rect = {copy_rect.x(), copy_rect.y(), copy_rect.width(), |
| 321 copy_rect.height()}; |
| 321 quad.opacity = opacity; | 322 quad.opacity = opacity; |
| 322 quad_queue_.push(quad); | 323 quad_queue_.push(quad); |
| 323 } | 324 } |
| 324 | 325 |
| 325 void TexturedQuadRenderer::Flush() { | 326 void TexturedQuadRenderer::Flush() { |
| 326 if (quad_queue_.empty()) | 327 if (quad_queue_.empty()) |
| 327 return; | 328 return; |
| 328 | 329 |
| 329 int last_texture = 0; | 330 int last_texture = 0; |
| 330 float last_opacity = -1.0f; | 331 float last_opacity = -1.0f; |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 454 inner_hole_handle_ = glGetUniformLocation(program_handle_, "inner_hole"); | 455 inner_hole_handle_ = glGetUniformLocation(program_handle_, "inner_hole"); |
| 455 inner_ring_end_handle_ = | 456 inner_ring_end_handle_ = |
| 456 glGetUniformLocation(program_handle_, "inner_ring_end"); | 457 glGetUniformLocation(program_handle_, "inner_ring_end"); |
| 457 inner_ring_thickness_handle_ = | 458 inner_ring_thickness_handle_ = |
| 458 glGetUniformLocation(program_handle_, "inner_ring_thickness"); | 459 glGetUniformLocation(program_handle_, "inner_ring_thickness"); |
| 459 mid_ring_end_handle_ = glGetUniformLocation(program_handle_, "mid_ring_end"); | 460 mid_ring_end_handle_ = glGetUniformLocation(program_handle_, "mid_ring_end"); |
| 460 mid_ring_opacity_handle_ = | 461 mid_ring_opacity_handle_ = |
| 461 glGetUniformLocation(program_handle_, "mid_ring_opacity"); | 462 glGetUniformLocation(program_handle_, "mid_ring_opacity"); |
| 462 } | 463 } |
| 463 | 464 |
| 464 void ReticleRenderer::Draw(const gvr::Mat4f& view_proj_matrix) { | 465 void ReticleRenderer::Draw(const vr::Mat4f& view_proj_matrix) { |
| 465 PrepareToDraw(model_view_proj_matrix_handle_, view_proj_matrix); | 466 PrepareToDraw(model_view_proj_matrix_handle_, view_proj_matrix); |
| 466 | 467 |
| 467 glUniform4f(color_handle_, kReticleColor[0], kReticleColor[1], | 468 glUniform4f(color_handle_, kReticleColor[0], kReticleColor[1], |
| 468 kReticleColor[2], kReticleColor[3]); | 469 kReticleColor[2], kReticleColor[3]); |
| 469 glUniform1f(ring_diameter_handle_, kRingDiameter); | 470 glUniform1f(ring_diameter_handle_, kRingDiameter); |
| 470 glUniform1f(inner_hole_handle_, kInnerHole); | 471 glUniform1f(inner_hole_handle_, kInnerHole); |
| 471 glUniform1f(inner_ring_end_handle_, kInnerRingEnd); | 472 glUniform1f(inner_ring_end_handle_, kInnerRingEnd); |
| 472 glUniform1f(inner_ring_thickness_handle_, kInnerRingThickness); | 473 glUniform1f(inner_ring_thickness_handle_, kInnerRingThickness); |
| 473 glUniform1f(mid_ring_end_handle_, kMidRingEnd); | 474 glUniform1f(mid_ring_end_handle_, kMidRingEnd); |
| 474 glUniform1f(mid_ring_opacity_handle_, kMidRingOpacity); | 475 glUniform1f(mid_ring_opacity_handle_, kMidRingOpacity); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 495 | 496 |
| 496 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, kLaserDataWidth, kLaserDataHeight, 0, | 497 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, kLaserDataWidth, kLaserDataHeight, 0, |
| 497 GL_RGBA, GL_UNSIGNED_BYTE, kLaserData); | 498 GL_RGBA, GL_UNSIGNED_BYTE, kLaserData); |
| 498 | 499 |
| 499 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); | 500 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); | 501 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
| 501 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); | 502 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); |
| 502 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); | 503 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); |
| 503 } | 504 } |
| 504 | 505 |
| 505 void LaserRenderer::Draw(const gvr::Mat4f& view_proj_matrix) { | 506 void LaserRenderer::Draw(const vr::Mat4f& view_proj_matrix) { |
| 506 PrepareToDraw(model_view_proj_matrix_handle_, view_proj_matrix); | 507 PrepareToDraw(model_view_proj_matrix_handle_, view_proj_matrix); |
| 507 | 508 |
| 508 // Link texture data with texture unit. | 509 // Link texture data with texture unit. |
| 509 glActiveTexture(GL_TEXTURE0); | 510 glActiveTexture(GL_TEXTURE0); |
| 510 glBindTexture(GL_TEXTURE_2D, texture_data_handle_); | 511 glBindTexture(GL_TEXTURE_2D, texture_data_handle_); |
| 511 | 512 |
| 512 glUniform1i(texture_unit_handle_, 0); | 513 glUniform1i(texture_unit_handle_, 0); |
| 513 glUniform4f(color_handle_, kLaserColor[0], kLaserColor[1], kLaserColor[2], | 514 glUniform4f(color_handle_, kLaserColor[0], kLaserColor[1], kLaserColor[2], |
| 514 kLaserColor[3]); | 515 kLaserColor[3]); |
| 515 glUniform1f(fade_point_handle_, kFadePoint); | 516 glUniform1f(fade_point_handle_, kFadePoint); |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 570 | 571 |
| 571 draw_mode_ = model->DrawMode(); | 572 draw_mode_ = model->DrawMode(); |
| 572 accessor = model->IndicesAccessor(); | 573 accessor = model->IndicesAccessor(); |
| 573 indices_count_ = accessor->count; | 574 indices_count_ = accessor->count; |
| 574 indices_type_ = accessor->component_type; | 575 indices_type_ = accessor->component_type; |
| 575 indices_offset_ = VOID_OFFSET(accessor->byte_offset); | 576 indices_offset_ = VOID_OFFSET(accessor->byte_offset); |
| 576 setup_ = true; | 577 setup_ = true; |
| 577 } | 578 } |
| 578 | 579 |
| 579 void ControllerRenderer::Draw(VrControllerModel::State state, | 580 void ControllerRenderer::Draw(VrControllerModel::State state, |
| 580 const gvr::Mat4f& view_proj_matrix) { | 581 const vr::Mat4f& view_proj_matrix) { |
| 581 glUseProgram(program_handle_); | 582 glUseProgram(program_handle_); |
| 582 | 583 |
| 583 glUniformMatrix4fv(model_view_proj_matrix_handle_, 1, false, | 584 glUniformMatrix4fv(model_view_proj_matrix_handle_, 1, false, |
| 584 MatrixToGLArray(view_proj_matrix).data()); | 585 MatrixToGLArray(view_proj_matrix).data()); |
| 585 | 586 |
| 586 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_); | 587 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_); |
| 587 | 588 |
| 588 glVertexAttribPointer(position_handle_, position_components_, position_type_, | 589 glVertexAttribPointer(position_handle_, position_components_, position_type_, |
| 589 GL_FALSE, position_stride_, position_offset_); | 590 GL_FALSE, position_stride_, position_offset_); |
| 590 glEnableVertexAttribArray(position_handle_); | 591 glEnableVertexAttribArray(position_handle_); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 610 : BaseQuadRenderer(GRADIENT_QUAD_VERTEX_SHADER, | 611 : BaseQuadRenderer(GRADIENT_QUAD_VERTEX_SHADER, |
| 611 GRADIENT_QUAD_FRAGMENT_SHADER) { | 612 GRADIENT_QUAD_FRAGMENT_SHADER) { |
| 612 model_view_proj_matrix_handle_ = | 613 model_view_proj_matrix_handle_ = |
| 613 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); | 614 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); |
| 614 scene_radius_handle_ = glGetUniformLocation(program_handle_, "u_SceneRadius"); | 615 scene_radius_handle_ = glGetUniformLocation(program_handle_, "u_SceneRadius"); |
| 615 center_color_handle_ = glGetUniformLocation(program_handle_, "u_CenterColor"); | 616 center_color_handle_ = glGetUniformLocation(program_handle_, "u_CenterColor"); |
| 616 edge_color_handle_ = glGetUniformLocation(program_handle_, "u_EdgeColor"); | 617 edge_color_handle_ = glGetUniformLocation(program_handle_, "u_EdgeColor"); |
| 617 opacity_handle_ = glGetUniformLocation(program_handle_, "u_Opacity"); | 618 opacity_handle_ = glGetUniformLocation(program_handle_, "u_Opacity"); |
| 618 } | 619 } |
| 619 | 620 |
| 620 void GradientQuadRenderer::Draw(const gvr::Mat4f& view_proj_matrix, | 621 void GradientQuadRenderer::Draw(const vr::Mat4f& view_proj_matrix, |
| 621 const Colorf& edge_color, | 622 const vr::Colorf& edge_color, |
| 622 const Colorf& center_color, | 623 const vr::Colorf& center_color, |
| 623 float opacity) { | 624 float opacity) { |
| 624 PrepareToDraw(model_view_proj_matrix_handle_, view_proj_matrix); | 625 PrepareToDraw(model_view_proj_matrix_handle_, view_proj_matrix); |
| 625 | 626 |
| 626 // Tell shader the grid size so that it can calculate the fading. | 627 // Tell shader the grid size so that it can calculate the fading. |
| 627 glUniform1f(scene_radius_handle_, kHalfSize); | 628 glUniform1f(scene_radius_handle_, kHalfSize); |
| 628 | 629 |
| 629 // Set the edge color to the fog color so that it seems to fade out. | 630 // Set the edge color to the fog color so that it seems to fade out. |
| 630 glUniform4f(edge_color_handle_, edge_color.r, edge_color.g, edge_color.b, | 631 glUniform4f(edge_color_handle_, edge_color.r, edge_color.g, edge_color.b, |
| 631 edge_color.a); | 632 edge_color.a); |
| 632 glUniform4f(center_color_handle_, center_color.r, center_color.g, | 633 glUniform4f(center_color_handle_, center_color.r, center_color.g, |
| (...skipping 11 matching lines...) Expand all Loading... |
| 644 GradientGridRenderer::GradientGridRenderer() | 645 GradientGridRenderer::GradientGridRenderer() |
| 645 : BaseRenderer(GRADIENT_QUAD_VERTEX_SHADER, GRADIENT_QUAD_FRAGMENT_SHADER) { | 646 : BaseRenderer(GRADIENT_QUAD_VERTEX_SHADER, GRADIENT_QUAD_FRAGMENT_SHADER) { |
| 646 model_view_proj_matrix_handle_ = | 647 model_view_proj_matrix_handle_ = |
| 647 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); | 648 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); |
| 648 scene_radius_handle_ = glGetUniformLocation(program_handle_, "u_SceneRadius"); | 649 scene_radius_handle_ = glGetUniformLocation(program_handle_, "u_SceneRadius"); |
| 649 center_color_handle_ = glGetUniformLocation(program_handle_, "u_CenterColor"); | 650 center_color_handle_ = glGetUniformLocation(program_handle_, "u_CenterColor"); |
| 650 edge_color_handle_ = glGetUniformLocation(program_handle_, "u_EdgeColor"); | 651 edge_color_handle_ = glGetUniformLocation(program_handle_, "u_EdgeColor"); |
| 651 opacity_handle_ = glGetUniformLocation(program_handle_, "u_Opacity"); | 652 opacity_handle_ = glGetUniformLocation(program_handle_, "u_Opacity"); |
| 652 } | 653 } |
| 653 | 654 |
| 654 void GradientGridRenderer::Draw(const gvr::Mat4f& view_proj_matrix, | 655 void GradientGridRenderer::Draw(const vr::Mat4f& view_proj_matrix, |
| 655 const Colorf& edge_color, | 656 const vr::Colorf& edge_color, |
| 656 const Colorf& center_color, | 657 const vr::Colorf& center_color, |
| 657 int gridline_count, | 658 int gridline_count, |
| 658 float opacity) { | 659 float opacity) { |
| 659 // In case the tile number changed we have to regenerate the grid lines. | 660 // In case the tile number changed we have to regenerate the grid lines. |
| 660 if (grid_lines_.size() != static_cast<size_t>(2 * (gridline_count + 1))) { | 661 if (grid_lines_.size() != static_cast<size_t>(2 * (gridline_count + 1))) { |
| 661 MakeGridLines(gridline_count); | 662 MakeGridLines(gridline_count); |
| 662 } | 663 } |
| 663 | 664 |
| 664 glUseProgram(program_handle_); | 665 glUseProgram(program_handle_); |
| 665 | 666 |
| 666 // Pass in model view project matrix. | 667 // Pass in model view project matrix. |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 734 laser_renderer_(base::MakeUnique<LaserRenderer>()), | 735 laser_renderer_(base::MakeUnique<LaserRenderer>()), |
| 735 controller_renderer_(base::MakeUnique<ControllerRenderer>()), | 736 controller_renderer_(base::MakeUnique<ControllerRenderer>()), |
| 736 gradient_quad_renderer_(base::MakeUnique<GradientQuadRenderer>()), | 737 gradient_quad_renderer_(base::MakeUnique<GradientQuadRenderer>()), |
| 737 gradient_grid_renderer_(base::MakeUnique<GradientGridRenderer>()) { | 738 gradient_grid_renderer_(base::MakeUnique<GradientGridRenderer>()) { |
| 738 BaseQuadRenderer::SetVertexBuffer(); | 739 BaseQuadRenderer::SetVertexBuffer(); |
| 739 } | 740 } |
| 740 | 741 |
| 741 VrShellRenderer::~VrShellRenderer() = default; | 742 VrShellRenderer::~VrShellRenderer() = default; |
| 742 | 743 |
| 743 } // namespace vr_shell | 744 } // namespace vr_shell |
| OLD | NEW |