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

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

Issue 2757213003: Implementing glTF 1.0 parser (Closed)
Patch Set: Resolving merge. Created 3 years, 9 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') | no next file » | 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 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 default: 216 default:
217 LOG(ERROR) << "Shader source requested for unknown shader"; 217 LOG(ERROR) << "Shader source requested for unknown shader";
218 return ""; 218 return "";
219 } 219 }
220 } 220 }
221 221
222 } // namespace 222 } // namespace
223 223
224 namespace vr_shell { 224 namespace vr_shell {
225 225
226 BaseRenderer::BaseRenderer(ShaderID vertex_id, 226 BaseRenderer::BaseRenderer(ShaderID vertex_id, ShaderID fragment_id) {
227 ShaderID fragment_id,
228 bool setup_vertex_buffer = true) {
229 std::string error; 227 std::string error;
230 GLuint vertex_shader_handle = 228 GLuint vertex_shader_handle =
231 CompileShader(GL_VERTEX_SHADER, GetShaderSource(vertex_id), error); 229 CompileShader(GL_VERTEX_SHADER, GetShaderSource(vertex_id), error);
232 CHECK(vertex_shader_handle) << error; 230 CHECK(vertex_shader_handle) << error;
233 231
234 GLuint fragment_shader_handle = 232 GLuint fragment_shader_handle =
235 CompileShader(GL_FRAGMENT_SHADER, GetShaderSource(fragment_id), error); 233 CompileShader(GL_FRAGMENT_SHADER, GetShaderSource(fragment_id), error);
236 CHECK(fragment_shader_handle) << error; 234 CHECK(fragment_shader_handle) << error;
237 235
238 program_handle_ = 236 program_handle_ =
239 CreateAndLinkProgram(vertex_shader_handle, fragment_shader_handle, error); 237 CreateAndLinkProgram(vertex_shader_handle, fragment_shader_handle, error);
240 CHECK(program_handle_) << error; 238 CHECK(program_handle_) << error;
241 239
242 // Once the program is linked the shader objects are no longer needed 240 // Once the program is linked the shader objects are no longer needed
243 glDeleteShader(vertex_shader_handle); 241 glDeleteShader(vertex_shader_handle);
244 glDeleteShader(fragment_shader_handle); 242 glDeleteShader(fragment_shader_handle);
245 243
246 position_handle_ = glGetAttribLocation(program_handle_, "a_Position"); 244 position_handle_ = glGetAttribLocation(program_handle_, "a_Position");
247 tex_coord_handle_ = glGetAttribLocation(program_handle_, "a_TexCoordinate"); 245 tex_coord_handle_ = glGetAttribLocation(program_handle_, "a_TexCoordinate");
248
249 if (setup_vertex_buffer) {
250 // Generate the vertex buffer
251 glGenBuffersARB(1, &vertex_buffer_);
252 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_);
253 glBufferData(GL_ARRAY_BUFFER, kTextureQuadVerticesSize,
254 kTextureQuadVertices, GL_STATIC_DRAW);
255 } else {
256 vertex_buffer_ = 0;
257 }
258 } 246 }
259 247
260 BaseRenderer::~BaseRenderer() = default; 248 BaseRenderer::~BaseRenderer() = default;
261 249
262 void BaseRenderer::PrepareToDraw(GLuint view_proj_matrix_handle, 250 void BaseRenderer::PrepareToDraw(GLuint view_proj_matrix_handle,
263 const gvr::Mat4f& view_proj_matrix) { 251 const gvr::Mat4f& view_proj_matrix) {
264 glUseProgram(program_handle_); 252 glUseProgram(program_handle_);
265 253
266 // Pass in model view project matrix. 254 // Pass in model view project matrix.
267 glUniformMatrix4fv(view_proj_matrix_handle, 1, false, 255 glUniformMatrix4fv(view_proj_matrix_handle, 1, false,
(...skipping 10 matching lines...) Expand all
278 // Set up texture coordinate attribute. 266 // Set up texture coordinate attribute.
279 glVertexAttribPointer(tex_coord_handle_, kTextureCoordinateDataSize, GL_FLOAT, 267 glVertexAttribPointer(tex_coord_handle_, kTextureCoordinateDataSize, GL_FLOAT,
280 false, kTextureQuadDataStride, 268 false, kTextureQuadDataStride,
281 VOID_OFFSET(kTextureCoordinateDataOffset)); 269 VOID_OFFSET(kTextureCoordinateDataOffset));
282 glEnableVertexAttribArray(tex_coord_handle_); 270 glEnableVertexAttribArray(tex_coord_handle_);
283 271
284 glEnable(GL_BLEND); 272 glEnable(GL_BLEND);
285 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 273 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
286 } 274 }
287 275
276 BaseQuadRenderer::BaseQuadRenderer(ShaderID vertex_id, ShaderID fragment_id)
277 : BaseRenderer(vertex_id, fragment_id) {
278 glGenBuffersARB(1, &vertex_buffer_);
279 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_);
280 glBufferData(GL_ARRAY_BUFFER, kTextureQuadVerticesSize, kTextureQuadVertices,
281 GL_STATIC_DRAW);
282 }
283
284 BaseQuadRenderer::~BaseQuadRenderer() = default;
285
288 TexturedQuadRenderer::TexturedQuadRenderer() 286 TexturedQuadRenderer::TexturedQuadRenderer()
289 : BaseRenderer(TEXTURE_QUAD_VERTEX_SHADER, TEXTURE_QUAD_FRAGMENT_SHADER) { 287 : BaseQuadRenderer(TEXTURE_QUAD_VERTEX_SHADER,
288 TEXTURE_QUAD_FRAGMENT_SHADER) {
290 model_view_proj_matrix_handle_ = 289 model_view_proj_matrix_handle_ =
291 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); 290 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix");
292 tex_uniform_handle_ = glGetUniformLocation(program_handle_, "u_Texture"); 291 tex_uniform_handle_ = glGetUniformLocation(program_handle_, "u_Texture");
293 copy_rect_uniform_handle_ = 292 copy_rect_uniform_handle_ =
294 glGetUniformLocation(program_handle_, "u_CopyRect"); 293 glGetUniformLocation(program_handle_, "u_CopyRect");
295 opacity_handle_ = glGetUniformLocation(program_handle_, "opacity"); 294 opacity_handle_ = glGetUniformLocation(program_handle_, "opacity");
296 } 295 }
297 296
298 void TexturedQuadRenderer::AddQuad(int texture_data_handle, 297 void TexturedQuadRenderer::AddQuad(int texture_data_handle,
299 const gvr::Mat4f& view_proj_matrix, 298 const gvr::Mat4f& view_proj_matrix,
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 quad_queue_.pop(); 375 quad_queue_.pop();
377 } 376 }
378 377
379 glDisableVertexAttribArray(position_handle_); 378 glDisableVertexAttribArray(position_handle_);
380 glDisableVertexAttribArray(tex_coord_handle_); 379 glDisableVertexAttribArray(tex_coord_handle_);
381 } 380 }
382 381
383 TexturedQuadRenderer::~TexturedQuadRenderer() = default; 382 TexturedQuadRenderer::~TexturedQuadRenderer() = default;
384 383
385 WebVrRenderer::WebVrRenderer() 384 WebVrRenderer::WebVrRenderer()
386 : BaseRenderer(WEBVR_VERTEX_SHADER, WEBVR_FRAGMENT_SHADER) { 385 : BaseQuadRenderer(WEBVR_VERTEX_SHADER, WEBVR_FRAGMENT_SHADER) {
387 tex_uniform_handle_ = glGetUniformLocation(program_handle_, "u_Texture"); 386 tex_uniform_handle_ = glGetUniformLocation(program_handle_, "u_Texture");
388 } 387 }
389 388
390 // Draw the stereo WebVR frame 389 // Draw the stereo WebVR frame
391 void WebVrRenderer::Draw(int texture_handle) { 390 void WebVrRenderer::Draw(int texture_handle) {
392 glUseProgram(program_handle_); 391 glUseProgram(program_handle_);
393 392
394 // Bind vertex attributes 393 // Bind vertex attributes
395 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_); 394 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_);
396 395
(...skipping 26 matching lines...) Expand all
423 glDisableVertexAttribArray(position_handle_); 422 glDisableVertexAttribArray(position_handle_);
424 glDisableVertexAttribArray(tex_coord_handle_); 423 glDisableVertexAttribArray(tex_coord_handle_);
425 } 424 }
426 425
427 // Note that we don't explicitly delete gl objects here, they're deleted 426 // Note that we don't explicitly delete gl objects here, they're deleted
428 // automatically when we call ShutdownGL, and deleting them here leads to 427 // automatically when we call ShutdownGL, and deleting them here leads to
429 // segfaults. 428 // segfaults.
430 WebVrRenderer::~WebVrRenderer() = default; 429 WebVrRenderer::~WebVrRenderer() = default;
431 430
432 ReticleRenderer::ReticleRenderer() 431 ReticleRenderer::ReticleRenderer()
433 : BaseRenderer(RETICLE_VERTEX_SHADER, RETICLE_FRAGMENT_SHADER) { 432 : BaseQuadRenderer(RETICLE_VERTEX_SHADER, RETICLE_FRAGMENT_SHADER) {
434 model_view_proj_matrix_handle_ = 433 model_view_proj_matrix_handle_ =
435 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); 434 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix");
436 color_handle_ = glGetUniformLocation(program_handle_, "color"); 435 color_handle_ = glGetUniformLocation(program_handle_, "color");
437 ring_diameter_handle_ = 436 ring_diameter_handle_ =
438 glGetUniformLocation(program_handle_, "ring_diameter"); 437 glGetUniformLocation(program_handle_, "ring_diameter");
439 inner_hole_handle_ = glGetUniformLocation(program_handle_, "inner_hole"); 438 inner_hole_handle_ = glGetUniformLocation(program_handle_, "inner_hole");
440 inner_ring_end_handle_ = 439 inner_ring_end_handle_ =
441 glGetUniformLocation(program_handle_, "inner_ring_end"); 440 glGetUniformLocation(program_handle_, "inner_ring_end");
442 inner_ring_thickness_handle_ = 441 inner_ring_thickness_handle_ =
443 glGetUniformLocation(program_handle_, "inner_ring_thickness"); 442 glGetUniformLocation(program_handle_, "inner_ring_thickness");
(...skipping 16 matching lines...) Expand all
460 459
461 glDrawArrays(GL_TRIANGLES, 0, kVerticesNumber); 460 glDrawArrays(GL_TRIANGLES, 0, kVerticesNumber);
462 461
463 glDisableVertexAttribArray(position_handle_); 462 glDisableVertexAttribArray(position_handle_);
464 glDisableVertexAttribArray(tex_coord_handle_); 463 glDisableVertexAttribArray(tex_coord_handle_);
465 } 464 }
466 465
467 ReticleRenderer::~ReticleRenderer() = default; 466 ReticleRenderer::~ReticleRenderer() = default;
468 467
469 LaserRenderer::LaserRenderer() 468 LaserRenderer::LaserRenderer()
470 : BaseRenderer(LASER_VERTEX_SHADER, LASER_FRAGMENT_SHADER) { 469 : BaseQuadRenderer(LASER_VERTEX_SHADER, LASER_FRAGMENT_SHADER) {
471 model_view_proj_matrix_handle_ = 470 model_view_proj_matrix_handle_ =
472 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); 471 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix");
473 texture_unit_handle_ = glGetUniformLocation(program_handle_, "texture_unit"); 472 texture_unit_handle_ = glGetUniformLocation(program_handle_, "texture_unit");
474 color_handle_ = glGetUniformLocation(program_handle_, "color"); 473 color_handle_ = glGetUniformLocation(program_handle_, "color");
475 fade_point_handle_ = glGetUniformLocation(program_handle_, "fade_point"); 474 fade_point_handle_ = glGetUniformLocation(program_handle_, "fade_point");
476 fade_end_handle_ = glGetUniformLocation(program_handle_, "fade_end"); 475 fade_end_handle_ = glGetUniformLocation(program_handle_, "fade_end");
477 476
478 glGenTextures(1, &texture_data_handle_); 477 glGenTextures(1, &texture_data_handle_);
479 glBindTexture(GL_TEXTURE_2D, texture_data_handle_); 478 glBindTexture(GL_TEXTURE_2D, texture_data_handle_);
480 479
(...skipping 21 matching lines...) Expand all
502 501
503 glDrawArrays(GL_TRIANGLES, 0, kVerticesNumber); 502 glDrawArrays(GL_TRIANGLES, 0, kVerticesNumber);
504 503
505 glDisableVertexAttribArray(position_handle_); 504 glDisableVertexAttribArray(position_handle_);
506 glDisableVertexAttribArray(tex_coord_handle_); 505 glDisableVertexAttribArray(tex_coord_handle_);
507 } 506 }
508 507
509 LaserRenderer::~LaserRenderer() = default; 508 LaserRenderer::~LaserRenderer() = default;
510 509
511 GradientQuadRenderer::GradientQuadRenderer() 510 GradientQuadRenderer::GradientQuadRenderer()
512 : BaseRenderer(GRADIENT_QUAD_VERTEX_SHADER, GRADIENT_QUAD_FRAGMENT_SHADER) { 511 : BaseQuadRenderer(GRADIENT_QUAD_VERTEX_SHADER,
512 GRADIENT_QUAD_FRAGMENT_SHADER) {
513 model_view_proj_matrix_handle_ = 513 model_view_proj_matrix_handle_ =
514 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); 514 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix");
515 scene_radius_handle_ = glGetUniformLocation(program_handle_, "u_SceneRadius"); 515 scene_radius_handle_ = glGetUniformLocation(program_handle_, "u_SceneRadius");
516 center_color_handle_ = glGetUniformLocation(program_handle_, "u_CenterColor"); 516 center_color_handle_ = glGetUniformLocation(program_handle_, "u_CenterColor");
517 edge_color_handle_ = glGetUniformLocation(program_handle_, "u_EdgeColor"); 517 edge_color_handle_ = glGetUniformLocation(program_handle_, "u_EdgeColor");
518 opacity_handle_ = glGetUniformLocation(program_handle_, "u_Opacity"); 518 opacity_handle_ = glGetUniformLocation(program_handle_, "u_Opacity");
519 } 519 }
520 520
521 void GradientQuadRenderer::Draw(const gvr::Mat4f& view_proj_matrix, 521 void GradientQuadRenderer::Draw(const gvr::Mat4f& view_proj_matrix,
522 const Colorf& edge_color, 522 const Colorf& edge_color,
(...skipping 13 matching lines...) Expand all
536 536
537 glDrawArrays(GL_TRIANGLES, 0, kVerticesNumber); 537 glDrawArrays(GL_TRIANGLES, 0, kVerticesNumber);
538 538
539 glDisableVertexAttribArray(position_handle_); 539 glDisableVertexAttribArray(position_handle_);
540 glDisableVertexAttribArray(tex_coord_handle_); 540 glDisableVertexAttribArray(tex_coord_handle_);
541 } 541 }
542 542
543 GradientQuadRenderer::~GradientQuadRenderer() = default; 543 GradientQuadRenderer::~GradientQuadRenderer() = default;
544 544
545 GradientGridRenderer::GradientGridRenderer() 545 GradientGridRenderer::GradientGridRenderer()
546 : BaseRenderer(GRADIENT_QUAD_VERTEX_SHADER, 546 : BaseRenderer(GRADIENT_QUAD_VERTEX_SHADER, GRADIENT_QUAD_FRAGMENT_SHADER) {
547 GRADIENT_QUAD_FRAGMENT_SHADER,
548 false) {
549 model_view_proj_matrix_handle_ = 547 model_view_proj_matrix_handle_ =
550 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); 548 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix");
551 scene_radius_handle_ = glGetUniformLocation(program_handle_, "u_SceneRadius"); 549 scene_radius_handle_ = glGetUniformLocation(program_handle_, "u_SceneRadius");
552 center_color_handle_ = glGetUniformLocation(program_handle_, "u_CenterColor"); 550 center_color_handle_ = glGetUniformLocation(program_handle_, "u_CenterColor");
553 edge_color_handle_ = glGetUniformLocation(program_handle_, "u_EdgeColor"); 551 edge_color_handle_ = glGetUniformLocation(program_handle_, "u_EdgeColor");
554 opacity_handle_ = glGetUniformLocation(program_handle_, "u_Opacity"); 552 opacity_handle_ = glGetUniformLocation(program_handle_, "u_Opacity");
555 } 553 }
556 554
557 void GradientGridRenderer::Draw(const gvr::Mat4f& view_proj_matrix, 555 void GradientGridRenderer::Draw(const gvr::Mat4f& view_proj_matrix,
558 const Colorf& edge_color, 556 const Colorf& edge_color,
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
634 : textured_quad_renderer_(new TexturedQuadRenderer), 632 : textured_quad_renderer_(new TexturedQuadRenderer),
635 webvr_renderer_(new WebVrRenderer), 633 webvr_renderer_(new WebVrRenderer),
636 reticle_renderer_(new ReticleRenderer), 634 reticle_renderer_(new ReticleRenderer),
637 laser_renderer_(new LaserRenderer), 635 laser_renderer_(new LaserRenderer),
638 gradient_quad_renderer_(new GradientQuadRenderer), 636 gradient_quad_renderer_(new GradientQuadRenderer),
639 gradient_grid_renderer_(new GradientGridRenderer) {} 637 gradient_grid_renderer_(new GradientGridRenderer) {}
640 638
641 VrShellRenderer::~VrShellRenderer() = default; 639 VrShellRenderer::~VrShellRenderer() = default;
642 640
643 } // namespace vr_shell 641 } // namespace vr_shell
OLDNEW
« no previous file with comments | « chrome/browser/android/vr_shell/vr_shell_renderer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698