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 |