Chromium Code Reviews| Index: cc/output/gl_renderer.cc |
| diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc |
| index 89b1e00554a01a3e2eed1ac300305bae578e7be0..a3a936e34cbebe820195865aabfbb0186c280386 100644 |
| --- a/cc/output/gl_renderer.cc |
| +++ b/cc/output/gl_renderer.cc |
| @@ -2000,6 +2000,8 @@ void GLRenderer::FinishDrawingFrame(DrawingFrame* frame) { |
| GLC(gl_, gl_->Disable(GL_BLEND)); |
| blend_shadow_ = false; |
| + |
| + ScheduleOverlays(frame); |
| } |
| void GLRenderer::FinishDrawingQuadList() { FlushTextureQuadCache(); } |
| @@ -2171,6 +2173,11 @@ void GLRenderer::SwapBuffers(const CompositorFrameMetadata& metadata) { |
| } |
| output_surface_->SwapBuffers(&compositor_frame); |
| + // Release previously used overlay resources and hold onto the pending ones |
| + // until the next swap buffers. |
| + in_use_overlay_resources_.clear(); |
| + in_use_overlay_resources_.swap(pending_overlay_resources_); |
|
alexst (slow to review)
2014/03/24 23:25:40
This particular section, I am not 100% certain abo
piman
2014/03/25 00:08:08
The ScopedReadLockGL is not enough to prevent the
|
| + |
| swap_buffer_rect_ = gfx::Rect(); |
| // We don't have real fences, so we mark read fences as passed |
| @@ -3047,4 +3054,43 @@ bool GLRenderer::IsContextLost() { |
| return output_surface_->context_provider()->IsContextLost(); |
| } |
| +void GLRenderer::ScheduleOverlays(DrawingFrame* frame) { |
| + if (!frame->overlay_passes_in_draw_order) |
| + return; |
| + |
| + const RenderPassList* pass_list = frame->overlay_passes_in_draw_order; |
| + int plane_z_order = 1; |
| + for (RenderPassList::const_reverse_iterator it = pass_list->rbegin(); |
| + it != pass_list->rend(); |
| + ++it) { |
| + RenderPass* pass = *it; |
| + if (pass->overlay_state != RenderPass::SIMPLE_OVERLAY) |
| + continue; |
|
piman
2014/03/25 00:08:08
I wonder if it could make sense to construct the o
|
| + |
| + DCHECK_EQ(pass->quad_list.size(), 1U); |
| + const DrawQuad* candidate_quad = pass->quad_list.front(); |
| + DCHECK_EQ(candidate_quad->material, DrawQuad::TEXTURE_CONTENT); |
| + const TextureDrawQuad& quad = |
| + *TextureDrawQuad::MaterialCast(candidate_quad); |
| + |
| + pending_overlay_resources_.push_back( |
| + make_scoped_ptr(new ResourceProvider::ScopedReadLockGL( |
| + resource_provider(), quad.resource_id))); |
| + |
| + OverlayCandidate::OverlayTransform overlay_transform = |
| + OverlayCandidate::GetOverlayTransform(quad.quadTransform(), |
| + quad.flipped); |
| + gfx::Rect display_bounds = |
| + OverlayCandidate::GetOverlayRect(quad.quadTransform(), quad.rect); |
| + gfx::RectF uv_rect = BoundingRect(quad.uv_top_left, quad.uv_bottom_right); |
|
piman
2014/03/25 00:08:08
Mmh, a lot of these we computed previously when tr
|
| + |
| + context_support_->ScheduleOverlayPlane( |
| + plane_z_order++, |
| + overlay_transform, |
| + pending_overlay_resources_.back()->texture_id(), |
| + display_bounds, |
| + uv_rect); |
| + } |
| +} |
| + |
| } // namespace cc |