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

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

Issue 208213003: Plumb overlay processing into DirectRenderer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase, Build Created 6 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 | Annotate | Revision Log
« no previous file with comments | « cc/output/gl_renderer.h ('k') | cc/output/overlay_candidate.h » ('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 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 InitializeSharedObjects(); 251 InitializeSharedObjects();
252 } 252 }
253 253
254 GLRenderer::~GLRenderer() { 254 GLRenderer::~GLRenderer() {
255 while (!pending_async_read_pixels_.empty()) { 255 while (!pending_async_read_pixels_.empty()) {
256 PendingAsyncReadPixels* pending_read = pending_async_read_pixels_.back(); 256 PendingAsyncReadPixels* pending_read = pending_async_read_pixels_.back();
257 pending_read->finished_read_pixels_callback.Cancel(); 257 pending_read->finished_read_pixels_callback.Cancel();
258 pending_async_read_pixels_.pop_back(); 258 pending_async_read_pixels_.pop_back();
259 } 259 }
260 260
261 in_use_overlay_resources_.clear();
262
261 CleanupSharedObjects(); 263 CleanupSharedObjects();
262 } 264 }
263 265
264 const RendererCapabilitiesImpl& GLRenderer::Capabilities() const { 266 const RendererCapabilitiesImpl& GLRenderer::Capabilities() const {
265 return capabilities_; 267 return capabilities_;
266 } 268 }
267 269
268 void GLRenderer::DebugGLCall(GLES2Interface* gl, 270 void GLRenderer::DebugGLCall(GLES2Interface* gl,
269 const char* command, 271 const char* command,
270 const char* file, 272 const char* file,
(...skipping 1727 matching lines...) Expand 10 before | Expand all | Expand 10 after
1998 2000
1999 GLC(gl_, gl_->BindTexture(GL_TEXTURE_RECTANGLE_ARB, 0)); 2001 GLC(gl_, gl_->BindTexture(GL_TEXTURE_RECTANGLE_ARB, 0));
2000 } 2002 }
2001 2003
2002 void GLRenderer::FinishDrawingFrame(DrawingFrame* frame) { 2004 void GLRenderer::FinishDrawingFrame(DrawingFrame* frame) {
2003 current_framebuffer_lock_.reset(); 2005 current_framebuffer_lock_.reset();
2004 swap_buffer_rect_.Union(gfx::ToEnclosingRect(frame->root_damage_rect)); 2006 swap_buffer_rect_.Union(gfx::ToEnclosingRect(frame->root_damage_rect));
2005 2007
2006 GLC(gl_, gl_->Disable(GL_BLEND)); 2008 GLC(gl_, gl_->Disable(GL_BLEND));
2007 blend_shadow_ = false; 2009 blend_shadow_ = false;
2010
2011 ScheduleOverlays(frame);
2008 } 2012 }
2009 2013
2010 void GLRenderer::FinishDrawingQuadList() { FlushTextureQuadCache(); } 2014 void GLRenderer::FinishDrawingQuadList() { FlushTextureQuadCache(); }
2011 2015
2012 bool GLRenderer::FlippedFramebuffer() const { return true; } 2016 bool GLRenderer::FlippedFramebuffer() const { return true; }
2013 2017
2014 void GLRenderer::EnsureScissorTestEnabled() { 2018 void GLRenderer::EnsureScissorTestEnabled() {
2015 if (is_scissor_enabled_) 2019 if (is_scissor_enabled_)
2016 return; 2020 return;
2017 2021
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
2169 gfx::Rect(swap_buffer_rect_.x(), 2173 gfx::Rect(swap_buffer_rect_.x(),
2170 flipped_y_pos_of_rect_bottom, 2174 flipped_y_pos_of_rect_bottom,
2171 swap_buffer_rect_.width(), 2175 swap_buffer_rect_.width(),
2172 swap_buffer_rect_.height()); 2176 swap_buffer_rect_.height());
2173 } else { 2177 } else {
2174 compositor_frame.gl_frame_data->sub_buffer_rect = 2178 compositor_frame.gl_frame_data->sub_buffer_rect =
2175 gfx::Rect(output_surface_->SurfaceSize()); 2179 gfx::Rect(output_surface_->SurfaceSize());
2176 } 2180 }
2177 output_surface_->SwapBuffers(&compositor_frame); 2181 output_surface_->SwapBuffers(&compositor_frame);
2178 2182
2183 // Release previously used overlay resources and hold onto the pending ones
2184 // until the next swap buffers.
2185 in_use_overlay_resources_.clear();
2186 in_use_overlay_resources_.swap(pending_overlay_resources_);
2187
2179 swap_buffer_rect_ = gfx::Rect(); 2188 swap_buffer_rect_ = gfx::Rect();
2180 2189
2181 // We don't have real fences, so we mark read fences as passed 2190 // We don't have real fences, so we mark read fences as passed
2182 // assuming a double-buffered GPU pipeline. A texture can be 2191 // assuming a double-buffered GPU pipeline. A texture can be
2183 // written to after one full frame has past since it was last read. 2192 // written to after one full frame has past since it was last read.
2184 if (last_swap_fence_.get()) 2193 if (last_swap_fence_.get())
2185 static_cast<SimpleSwapFence*>(last_swap_fence_.get())->SetHasPassed(); 2194 static_cast<SimpleSwapFence*>(last_swap_fence_.get())->SetHasPassed();
2186 last_swap_fence_ = resource_provider_->GetReadLockFence(); 2195 last_swap_fence_ = resource_provider_->GetReadLockFence();
2187 resource_provider_->SetReadLockFence(new SimpleSwapFence()); 2196 resource_provider_->SetReadLockFence(new SimpleSwapFence());
2188 } 2197 }
(...skipping 854 matching lines...) Expand 10 before | Expand all | Expand 10 after
3043 // Make sure scissoring starts as disabled. 3052 // Make sure scissoring starts as disabled.
3044 is_scissor_enabled_ = false; 3053 is_scissor_enabled_ = false;
3045 GLC(gl_, gl_->Disable(GL_SCISSOR_TEST)); 3054 GLC(gl_, gl_->Disable(GL_SCISSOR_TEST));
3046 scissor_rect_needs_reset_ = true; 3055 scissor_rect_needs_reset_ = true;
3047 } 3056 }
3048 3057
3049 bool GLRenderer::IsContextLost() { 3058 bool GLRenderer::IsContextLost() {
3050 return output_surface_->context_provider()->IsContextLost(); 3059 return output_surface_->context_provider()->IsContextLost();
3051 } 3060 }
3052 3061
3062 void GLRenderer::ScheduleOverlays(DrawingFrame* frame) {
3063 if (!frame->overlay_list.size())
3064 return;
3065
3066 ResourceProvider::ResourceIdArray resources;
3067 OverlayCandidateList& overlays = frame->overlay_list;
3068 OverlayCandidateList::iterator it;
3069 for (it = overlays.begin(); it != overlays.end(); ++it) {
3070 const OverlayCandidate& overlay = *it;
3071 // Skip primary plane.
3072 if (overlay.plane_z_order == 0)
3073 continue;
3074
3075 pending_overlay_resources_.push_back(
3076 make_scoped_ptr(new ResourceProvider::ScopedReadLockGL(
3077 resource_provider(), overlay.resource_id)));
3078
3079 context_support_->ScheduleOverlayPlane(
3080 overlay.plane_z_order,
3081 overlay.transform,
3082 pending_overlay_resources_.back()->texture_id(),
3083 overlay.display_rect,
3084 overlay.uv_rect);
3085 }
3086 }
3087
3053 } // namespace cc 3088 } // namespace cc
OLDNEW
« no previous file with comments | « cc/output/gl_renderer.h ('k') | cc/output/overlay_candidate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698