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

Side by Side Diff: cc/output/gl_renderer.cc

Issue 1028333002: Chromium -> Mojo roll. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 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 | « cc/output/gl_renderer.h ('k') | cc/output/gl_renderer.cc.rej » ('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 2010 The Chromium Authors. All rights reserved. 1 // Copyright 2010 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 "cc/output/gl_renderer.h" 5 #include "cc/output/gl_renderer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <set> 9 #include <set>
10 #include <string> 10 #include <string>
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 } 394 }
395 395
396 void GLRenderer::DidChangeVisibility() { 396 void GLRenderer::DidChangeVisibility() {
397 EnforceMemoryPolicy(); 397 EnforceMemoryPolicy();
398 398
399 context_support_->SetSurfaceVisible(visible()); 399 context_support_->SetSurfaceVisible(visible());
400 } 400 }
401 401
402 void GLRenderer::ReleaseRenderPassTextures() { render_pass_textures_.clear(); } 402 void GLRenderer::ReleaseRenderPassTextures() { render_pass_textures_.clear(); }
403 403
404 void GLRenderer::DiscardPixels(bool has_external_stencil_test, 404 void GLRenderer::DiscardPixels() {
405 bool draw_rect_covers_full_surface) { 405 if (!capabilities_.using_discard_framebuffer)
406 if (has_external_stencil_test || !draw_rect_covers_full_surface ||
407 !capabilities_.using_discard_framebuffer)
408 return; 406 return;
409 bool using_default_framebuffer = 407 bool using_default_framebuffer =
410 !current_framebuffer_lock_ && 408 !current_framebuffer_lock_ &&
411 output_surface_->capabilities().uses_default_gl_framebuffer; 409 output_surface_->capabilities().uses_default_gl_framebuffer;
412 GLenum attachments[] = {static_cast<GLenum>( 410 GLenum attachments[] = {static_cast<GLenum>(
413 using_default_framebuffer ? GL_COLOR_EXT : GL_COLOR_ATTACHMENT0_EXT)}; 411 using_default_framebuffer ? GL_COLOR_EXT : GL_COLOR_ATTACHMENT0_EXT)};
414 gl_->DiscardFramebufferEXT( 412 gl_->DiscardFramebufferEXT(
415 GL_FRAMEBUFFER, arraysize(attachments), attachments); 413 GL_FRAMEBUFFER, arraysize(attachments), attachments);
416 } 414 }
417 415
418 void GLRenderer::ClearFramebuffer(DrawingFrame* frame, 416 void GLRenderer::PrepareSurfaceForPass(
419 bool has_external_stencil_test) { 417 DrawingFrame* frame,
420 // It's unsafe to clear when we have a stencil test because glClear ignores 418 SurfaceInitializationMode initialization_mode,
421 // stencil. 419 const gfx::Rect& render_pass_scissor) {
422 if (has_external_stencil_test) { 420 switch (initialization_mode) {
423 DCHECK(!frame->current_render_pass->has_transparent_background); 421 case SURFACE_INITIALIZATION_MODE_PRESERVE:
424 return; 422 EnsureScissorTestDisabled();
423 return;
424 case SURFACE_INITIALIZATION_MODE_FULL_SURFACE_CLEAR:
425 EnsureScissorTestDisabled();
426 DiscardPixels();
427 ClearFramebuffer(frame);
428 break;
429 case SURFACE_INITIALIZATION_MODE_SCISSORED_CLEAR:
430 SetScissorTestRect(render_pass_scissor);
431 ClearFramebuffer(frame);
432 break;
425 } 433 }
434 }
426 435
436 void GLRenderer::ClearFramebuffer(DrawingFrame* frame) {
427 // On DEBUG builds, opaque render passes are cleared to blue to easily see 437 // On DEBUG builds, opaque render passes are cleared to blue to easily see
428 // regions that were not drawn on the screen. 438 // regions that were not drawn on the screen.
429 if (frame->current_render_pass->has_transparent_background) 439 if (frame->current_render_pass->has_transparent_background)
430 GLC(gl_, gl_->ClearColor(0, 0, 0, 0)); 440 GLC(gl_, gl_->ClearColor(0, 0, 0, 0));
431 else 441 else
432 GLC(gl_, gl_->ClearColor(0, 0, 1, 1)); 442 GLC(gl_, gl_->ClearColor(0, 0, 1, 1));
433 443
434 bool always_clear = false; 444 bool always_clear = false;
435 #ifndef NDEBUG 445 #ifndef NDEBUG
436 always_clear = true; 446 always_clear = true;
(...skipping 2476 matching lines...) Expand 10 before | Expand all | Expand 10 after
2913 make_scoped_ptr(new ResourceProvider::ScopedWriteLockGL( 2923 make_scoped_ptr(new ResourceProvider::ScopedWriteLockGL(
2914 resource_provider_, texture->id())); 2924 resource_provider_, texture->id()));
2915 unsigned texture_id = current_framebuffer_lock_->texture_id(); 2925 unsigned texture_id = current_framebuffer_lock_->texture_id();
2916 GLC(gl_, 2926 GLC(gl_,
2917 gl_->FramebufferTexture2D( 2927 gl_->FramebufferTexture2D(
2918 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture_id, 0)); 2928 GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture_id, 0));
2919 2929
2920 DCHECK(gl_->CheckFramebufferStatus(GL_FRAMEBUFFER) == 2930 DCHECK(gl_->CheckFramebufferStatus(GL_FRAMEBUFFER) ==
2921 GL_FRAMEBUFFER_COMPLETE || 2931 GL_FRAMEBUFFER_COMPLETE ||
2922 IsContextLost()); 2932 IsContextLost());
2923
2924 InitializeViewport(
2925 frame, target_rect, gfx::Rect(target_rect.size()), target_rect.size());
2926 return true; 2933 return true;
2927 } 2934 }
2928 2935
2929 void GLRenderer::SetScissorTestRect(const gfx::Rect& scissor_rect) { 2936 void GLRenderer::SetScissorTestRect(const gfx::Rect& scissor_rect) {
2930 EnsureScissorTestEnabled(); 2937 EnsureScissorTestEnabled();
2931 2938
2932 // Don't unnecessarily ask the context to change the scissor, because it 2939 // Don't unnecessarily ask the context to change the scissor, because it
2933 // may cause undesired GPU pipeline flushes. 2940 // may cause undesired GPU pipeline flushes.
2934 if (scissor_rect == scissor_rect_ && !scissor_rect_needs_reset_) 2941 if (scissor_rect == scissor_rect_ && !scissor_rect_needs_reset_)
2935 return; 2942 return;
(...skipping 586 matching lines...) Expand 10 before | Expand all | Expand 10 after
3522 context_support_->ScheduleOverlayPlane( 3529 context_support_->ScheduleOverlayPlane(
3523 overlay.plane_z_order, 3530 overlay.plane_z_order,
3524 overlay.transform, 3531 overlay.transform,
3525 pending_overlay_resources_.back()->texture_id(), 3532 pending_overlay_resources_.back()->texture_id(),
3526 overlay.display_rect, 3533 overlay.display_rect,
3527 overlay.uv_rect); 3534 overlay.uv_rect);
3528 } 3535 }
3529 } 3536 }
3530 3537
3531 } // namespace cc 3538 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/gl_renderer.h ('k') | cc/output/gl_renderer.cc.rej » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698