Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Side by Side Diff: chrome/browser/android/vr_shell/vr_shell_renderer.cc

Issue 2814443004: Refactor VR math off of GVR types, onto gfx types where possible. (Closed)
Patch Set: Fix tests Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/android/vr_shell/vr_shell_renderer.h ('k') | device/vr/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « chrome/browser/android/vr_shell/vr_shell_renderer.h ('k') | device/vr/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698