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

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

Issue 2795793002: Implementation of elbow model for the controller position and rotation. (Closed)
Patch Set: Rebasing. 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
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 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698