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

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: 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 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698