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

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

Issue 2757213003: Implementing glTF 1.0 parser (Closed)
Patch Set: Moving glTF structs to their own file 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
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 246
249 if (setup_vertex_buffer) { 247 vertex_buffer_ = 0;
cjgrant 2017/03/21 16:16:47 This could now be done in the header file, FWIW.
acondor_ 2017/03/21 19:31:30 Done.
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 } 248 }
259 249
260 BaseRenderer::~BaseRenderer() = default; 250 BaseRenderer::~BaseRenderer() = default;
261 251
262 void BaseRenderer::PrepareToDraw(GLuint view_proj_matrix_handle, 252 void BaseRenderer::PrepareToDraw(GLuint view_proj_matrix_handle,
263 const gvr::Mat4f& view_proj_matrix) { 253 const gvr::Mat4f& view_proj_matrix) {
264 glUseProgram(program_handle_); 254 glUseProgram(program_handle_);
265 255
266 // Pass in model view project matrix. 256 // Pass in model view project matrix.
267 glUniformMatrix4fv(view_proj_matrix_handle, 1, false, 257 glUniformMatrix4fv(view_proj_matrix_handle, 1, false,
(...skipping 10 matching lines...) Expand all
278 // Set up texture coordinate attribute. 268 // Set up texture coordinate attribute.
279 glVertexAttribPointer(tex_coord_handle_, kTextureCoordinateDataSize, GL_FLOAT, 269 glVertexAttribPointer(tex_coord_handle_, kTextureCoordinateDataSize, GL_FLOAT,
280 false, kTextureQuadDataStride, 270 false, kTextureQuadDataStride,
281 VOID_OFFSET(kTextureCoordinateDataOffset)); 271 VOID_OFFSET(kTextureCoordinateDataOffset));
282 glEnableVertexAttribArray(tex_coord_handle_); 272 glEnableVertexAttribArray(tex_coord_handle_);
283 273
284 glEnable(GL_BLEND); 274 glEnable(GL_BLEND);
285 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 275 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
286 } 276 }
287 277
278 BaseQuadRenderer::BaseQuadRenderer(ShaderID vertex_id, ShaderID fragment_id)
279 : BaseRenderer(vertex_id, fragment_id) {
280 glGenBuffersARB(1, &vertex_buffer_);
281 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_);
282 glBufferData(GL_ARRAY_BUFFER, kTextureQuadVerticesSize, kTextureQuadVertices,
283 GL_STATIC_DRAW);
284 }
285
286 BaseQuadRenderer::~BaseQuadRenderer() = default;
287
288 TexturedQuadRenderer::TexturedQuadRenderer() 288 TexturedQuadRenderer::TexturedQuadRenderer()
289 : BaseRenderer(TEXTURE_QUAD_VERTEX_SHADER, TEXTURE_QUAD_FRAGMENT_SHADER) { 289 : BaseQuadRenderer(TEXTURE_QUAD_VERTEX_SHADER,
290 TEXTURE_QUAD_FRAGMENT_SHADER) {
290 model_view_proj_matrix_handle_ = 291 model_view_proj_matrix_handle_ =
291 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); 292 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix");
292 tex_uniform_handle_ = glGetUniformLocation(program_handle_, "u_Texture"); 293 tex_uniform_handle_ = glGetUniformLocation(program_handle_, "u_Texture");
293 copy_rect_uniform_handle_ = 294 copy_rect_uniform_handle_ =
294 glGetUniformLocation(program_handle_, "u_CopyRect"); 295 glGetUniformLocation(program_handle_, "u_CopyRect");
295 opacity_handle_ = glGetUniformLocation(program_handle_, "opacity"); 296 opacity_handle_ = glGetUniformLocation(program_handle_, "opacity");
296 } 297 }
297 298
298 void TexturedQuadRenderer::AddQuad(int texture_data_handle, 299 void TexturedQuadRenderer::AddQuad(int texture_data_handle,
299 const gvr::Mat4f& view_proj_matrix, 300 const gvr::Mat4f& view_proj_matrix,
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 quad_queue_.pop(); 377 quad_queue_.pop();
377 } 378 }
378 379
379 glDisableVertexAttribArray(position_handle_); 380 glDisableVertexAttribArray(position_handle_);
380 glDisableVertexAttribArray(tex_coord_handle_); 381 glDisableVertexAttribArray(tex_coord_handle_);
381 } 382 }
382 383
383 TexturedQuadRenderer::~TexturedQuadRenderer() = default; 384 TexturedQuadRenderer::~TexturedQuadRenderer() = default;
384 385
385 WebVrRenderer::WebVrRenderer() 386 WebVrRenderer::WebVrRenderer()
386 : BaseRenderer(WEBVR_VERTEX_SHADER, WEBVR_FRAGMENT_SHADER) { 387 : BaseQuadRenderer(WEBVR_VERTEX_SHADER, WEBVR_FRAGMENT_SHADER) {
387 tex_uniform_handle_ = glGetUniformLocation(program_handle_, "u_Texture"); 388 tex_uniform_handle_ = glGetUniformLocation(program_handle_, "u_Texture");
388 } 389 }
389 390
390 // Draw the stereo WebVR frame 391 // Draw the stereo WebVR frame
391 void WebVrRenderer::Draw(int texture_handle) { 392 void WebVrRenderer::Draw(int texture_handle) {
392 glUseProgram(program_handle_); 393 glUseProgram(program_handle_);
393 394
394 // Bind vertex attributes 395 // Bind vertex attributes
395 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_); 396 glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_);
396 397
(...skipping 26 matching lines...) Expand all
423 glDisableVertexAttribArray(position_handle_); 424 glDisableVertexAttribArray(position_handle_);
424 glDisableVertexAttribArray(tex_coord_handle_); 425 glDisableVertexAttribArray(tex_coord_handle_);
425 } 426 }
426 427
427 // Note that we don't explicitly delete gl objects here, they're deleted 428 // 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 429 // automatically when we call ShutdownGL, and deleting them here leads to
429 // segfaults. 430 // segfaults.
430 WebVrRenderer::~WebVrRenderer() = default; 431 WebVrRenderer::~WebVrRenderer() = default;
431 432
432 ReticleRenderer::ReticleRenderer() 433 ReticleRenderer::ReticleRenderer()
433 : BaseRenderer(RETICLE_VERTEX_SHADER, RETICLE_FRAGMENT_SHADER) { 434 : BaseQuadRenderer(RETICLE_VERTEX_SHADER, RETICLE_FRAGMENT_SHADER) {
434 model_view_proj_matrix_handle_ = 435 model_view_proj_matrix_handle_ =
435 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); 436 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix");
436 color_handle_ = glGetUniformLocation(program_handle_, "color"); 437 color_handle_ = glGetUniformLocation(program_handle_, "color");
437 ring_diameter_handle_ = 438 ring_diameter_handle_ =
438 glGetUniformLocation(program_handle_, "ring_diameter"); 439 glGetUniformLocation(program_handle_, "ring_diameter");
439 inner_hole_handle_ = glGetUniformLocation(program_handle_, "inner_hole"); 440 inner_hole_handle_ = glGetUniformLocation(program_handle_, "inner_hole");
440 inner_ring_end_handle_ = 441 inner_ring_end_handle_ =
441 glGetUniformLocation(program_handle_, "inner_ring_end"); 442 glGetUniformLocation(program_handle_, "inner_ring_end");
442 inner_ring_thickness_handle_ = 443 inner_ring_thickness_handle_ =
443 glGetUniformLocation(program_handle_, "inner_ring_thickness"); 444 glGetUniformLocation(program_handle_, "inner_ring_thickness");
(...skipping 16 matching lines...) Expand all
460 461
461 glDrawArrays(GL_TRIANGLES, 0, kVerticesNumber); 462 glDrawArrays(GL_TRIANGLES, 0, kVerticesNumber);
462 463
463 glDisableVertexAttribArray(position_handle_); 464 glDisableVertexAttribArray(position_handle_);
464 glDisableVertexAttribArray(tex_coord_handle_); 465 glDisableVertexAttribArray(tex_coord_handle_);
465 } 466 }
466 467
467 ReticleRenderer::~ReticleRenderer() = default; 468 ReticleRenderer::~ReticleRenderer() = default;
468 469
469 LaserRenderer::LaserRenderer() 470 LaserRenderer::LaserRenderer()
470 : BaseRenderer(LASER_VERTEX_SHADER, LASER_FRAGMENT_SHADER) { 471 : BaseQuadRenderer(LASER_VERTEX_SHADER, LASER_FRAGMENT_SHADER) {
471 model_view_proj_matrix_handle_ = 472 model_view_proj_matrix_handle_ =
472 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); 473 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix");
473 texture_unit_handle_ = glGetUniformLocation(program_handle_, "texture_unit"); 474 texture_unit_handle_ = glGetUniformLocation(program_handle_, "texture_unit");
474 color_handle_ = glGetUniformLocation(program_handle_, "color"); 475 color_handle_ = glGetUniformLocation(program_handle_, "color");
475 fade_point_handle_ = glGetUniformLocation(program_handle_, "fade_point"); 476 fade_point_handle_ = glGetUniformLocation(program_handle_, "fade_point");
476 fade_end_handle_ = glGetUniformLocation(program_handle_, "fade_end"); 477 fade_end_handle_ = glGetUniformLocation(program_handle_, "fade_end");
477 478
478 glGenTextures(1, &texture_data_handle_); 479 glGenTextures(1, &texture_data_handle_);
479 glBindTexture(GL_TEXTURE_2D, texture_data_handle_); 480 glBindTexture(GL_TEXTURE_2D, texture_data_handle_);
480 481
(...skipping 21 matching lines...) Expand all
502 503
503 glDrawArrays(GL_TRIANGLES, 0, kVerticesNumber); 504 glDrawArrays(GL_TRIANGLES, 0, kVerticesNumber);
504 505
505 glDisableVertexAttribArray(position_handle_); 506 glDisableVertexAttribArray(position_handle_);
506 glDisableVertexAttribArray(tex_coord_handle_); 507 glDisableVertexAttribArray(tex_coord_handle_);
507 } 508 }
508 509
509 LaserRenderer::~LaserRenderer() = default; 510 LaserRenderer::~LaserRenderer() = default;
510 511
511 GradientQuadRenderer::GradientQuadRenderer() 512 GradientQuadRenderer::GradientQuadRenderer()
512 : BaseRenderer(GRADIENT_QUAD_VERTEX_SHADER, GRADIENT_QUAD_FRAGMENT_SHADER) { 513 : BaseQuadRenderer(GRADIENT_QUAD_VERTEX_SHADER,
514 GRADIENT_QUAD_FRAGMENT_SHADER) {
513 model_view_proj_matrix_handle_ = 515 model_view_proj_matrix_handle_ =
514 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); 516 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix");
515 scene_radius_handle_ = glGetUniformLocation(program_handle_, "u_SceneRadius"); 517 scene_radius_handle_ = glGetUniformLocation(program_handle_, "u_SceneRadius");
516 center_color_handle_ = glGetUniformLocation(program_handle_, "u_CenterColor"); 518 center_color_handle_ = glGetUniformLocation(program_handle_, "u_CenterColor");
517 edge_color_handle_ = glGetUniformLocation(program_handle_, "u_EdgeColor"); 519 edge_color_handle_ = glGetUniformLocation(program_handle_, "u_EdgeColor");
518 opacity_handle_ = glGetUniformLocation(program_handle_, "u_Opacity"); 520 opacity_handle_ = glGetUniformLocation(program_handle_, "u_Opacity");
519 } 521 }
520 522
521 void GradientQuadRenderer::Draw(const gvr::Mat4f& view_proj_matrix, 523 void GradientQuadRenderer::Draw(const gvr::Mat4f& view_proj_matrix,
522 const Colorf& edge_color, 524 const Colorf& edge_color,
(...skipping 13 matching lines...) Expand all
536 538
537 glDrawArrays(GL_TRIANGLES, 0, kVerticesNumber); 539 glDrawArrays(GL_TRIANGLES, 0, kVerticesNumber);
538 540
539 glDisableVertexAttribArray(position_handle_); 541 glDisableVertexAttribArray(position_handle_);
540 glDisableVertexAttribArray(tex_coord_handle_); 542 glDisableVertexAttribArray(tex_coord_handle_);
541 } 543 }
542 544
543 GradientQuadRenderer::~GradientQuadRenderer() = default; 545 GradientQuadRenderer::~GradientQuadRenderer() = default;
544 546
545 GradientGridRenderer::GradientGridRenderer() 547 GradientGridRenderer::GradientGridRenderer()
546 : BaseRenderer(GRADIENT_QUAD_VERTEX_SHADER, 548 : BaseRenderer(GRADIENT_QUAD_VERTEX_SHADER, GRADIENT_QUAD_FRAGMENT_SHADER) {
547 GRADIENT_QUAD_FRAGMENT_SHADER,
548 false) {
549 model_view_proj_matrix_handle_ = 549 model_view_proj_matrix_handle_ =
550 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix"); 550 glGetUniformLocation(program_handle_, "u_ModelViewProjMatrix");
551 scene_radius_handle_ = glGetUniformLocation(program_handle_, "u_SceneRadius"); 551 scene_radius_handle_ = glGetUniformLocation(program_handle_, "u_SceneRadius");
552 center_color_handle_ = glGetUniformLocation(program_handle_, "u_CenterColor"); 552 center_color_handle_ = glGetUniformLocation(program_handle_, "u_CenterColor");
553 edge_color_handle_ = glGetUniformLocation(program_handle_, "u_EdgeColor"); 553 edge_color_handle_ = glGetUniformLocation(program_handle_, "u_EdgeColor");
554 opacity_handle_ = glGetUniformLocation(program_handle_, "u_Opacity"); 554 opacity_handle_ = glGetUniformLocation(program_handle_, "u_Opacity");
555 } 555 }
556 556
557 void GradientGridRenderer::Draw(const gvr::Mat4f& view_proj_matrix, 557 void GradientGridRenderer::Draw(const gvr::Mat4f& view_proj_matrix,
558 const Colorf& edge_color, 558 const Colorf& edge_color,
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
634 : textured_quad_renderer_(new TexturedQuadRenderer), 634 : textured_quad_renderer_(new TexturedQuadRenderer),
635 webvr_renderer_(new WebVrRenderer), 635 webvr_renderer_(new WebVrRenderer),
636 reticle_renderer_(new ReticleRenderer), 636 reticle_renderer_(new ReticleRenderer),
637 laser_renderer_(new LaserRenderer), 637 laser_renderer_(new LaserRenderer),
638 gradient_quad_renderer_(new GradientQuadRenderer), 638 gradient_quad_renderer_(new GradientQuadRenderer),
639 gradient_grid_renderer_(new GradientGridRenderer) {} 639 gradient_grid_renderer_(new GradientGridRenderer) {}
640 640
641 VrShellRenderer::~VrShellRenderer() = default; 641 VrShellRenderer::~VrShellRenderer() = default;
642 642
643 } // namespace vr_shell 643 } // namespace vr_shell
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698