Index: cc/render_pass.cc |
diff --git a/cc/render_pass.cc b/cc/render_pass.cc |
index bbb36e5a629250d83100214c67e5b77c3f19b97c..e73aa4e68fa164aa45752afb6dd9e9088b1b361d 100644 |
--- a/cc/render_pass.cc |
+++ b/cc/render_pass.cc |
@@ -16,101 +16,175 @@ using WebKit::WebTransformationMatrix; |
namespace cc { |
-scoped_ptr<RenderPass> RenderPass::create(Id id, gfx::Rect outputRect, const WebKit::WebTransformationMatrix& transformToRootTarget) |
-{ |
- return make_scoped_ptr(new RenderPass(id, outputRect, transformToRootTarget)); |
+scoped_ptr<RenderPass> RenderPass::Create() { |
+ return make_scoped_ptr(new RenderPass); |
} |
-RenderPass::RenderPass(Id id, gfx::Rect outputRect, const WebKit::WebTransformationMatrix& transformToRootTarget) |
- : m_id(id) |
- , m_transformToRootTarget(transformToRootTarget) |
- , m_outputRect(outputRect) |
- , m_hasTransparentBackground(true) |
- , m_hasOcclusionFromOutsideTargetSurface(false) |
- , m_filter(0) |
-{ |
- DCHECK(id.layerId > 0); |
- DCHECK(id.index >= 0); |
+RenderPass::RenderPass() |
+ : id(Id(-1, -1)), |
+ has_transparent_background(true), |
+ has_occlusion_from_outside_target_surface(false), |
+ filter(NULL) { |
} |
-RenderPass::~RenderPass() |
-{ |
- SkSafeUnref(m_filter); |
+RenderPass::~RenderPass() { |
+ SkSafeUnref(filter); |
} |
-scoped_ptr<RenderPass> RenderPass::copy(Id newId) const |
-{ |
- DCHECK(newId != m_id); |
- |
- scoped_ptr<RenderPass> copyPass(create(newId, m_outputRect, m_transformToRootTarget)); |
- copyPass->setDamageRect(m_damageRect); |
- copyPass->setHasTransparentBackground(m_hasTransparentBackground); |
- copyPass->setHasOcclusionFromOutsideTargetSurface(m_hasOcclusionFromOutsideTargetSurface); |
- copyPass->setFilters(m_filters); |
- copyPass->setBackgroundFilters(m_backgroundFilters); |
- copyPass->setFilter(m_filter); |
- return copyPass.Pass(); |
+scoped_ptr<RenderPass> RenderPass::Copy(Id new_id) const { |
+ DCHECK(new_id != id); |
+ |
+ scoped_ptr<RenderPass> copy_pass(Create()); |
+ copy_pass->SetAll(new_id, |
+ output_rect, |
+ damage_rect, |
+ transform_to_root_target, |
+ has_transparent_background, |
+ has_occlusion_from_outside_target_surface, |
+ filters, |
+ filter, |
+ background_filters); |
+ return copy_pass.Pass(); |
} |
-void RenderPass::appendQuadsForLayer(LayerImpl* layer, OcclusionTrackerImpl* occlusionTracker, AppendQuadsData& appendQuadsData) |
-{ |
- bool forSurface = false; |
- QuadCuller quadCuller(m_quadList, m_sharedQuadStateList, layer, occlusionTracker, layer->showDebugBorders(), forSurface); |
+void RenderPass::SetNew(Id id, |
+ gfx::Rect output_rect, |
+ gfx::RectF damage_rect, |
+ const WebKit::WebTransformationMatrix& transform_to_root_target) { |
+ DCHECK_GT(id.layer_id, 0); |
+ DCHECK_GE(id.index, 0); |
- layer->appendQuads(quadCuller, appendQuadsData); |
+ this->id = id; |
+ this->output_rect = output_rect; |
+ this->damage_rect = damage_rect; |
+ this->transform_to_root_target = transform_to_root_target; |
+ |
+ DCHECK(quad_list.isEmpty()); |
+ DCHECK(shared_quad_state_list.isEmpty()); |
} |
-void RenderPass::appendQuadsForRenderSurfaceLayer(LayerImpl* layer, const RenderPass* contributingRenderPass, OcclusionTrackerImpl* occlusionTracker, AppendQuadsData& appendQuadsData) |
-{ |
- bool forSurface = true; |
- QuadCuller quadCuller(m_quadList, m_sharedQuadStateList, layer, occlusionTracker, layer->showDebugBorders(), forSurface); |
+void RenderPass::SetAll(Id id, |
+ gfx::Rect output_rect, |
+ gfx::RectF damage_rect, |
+ const WebKit::WebTransformationMatrix& transform_to_root_target, |
+ bool has_transparent_background, |
+ bool has_occlusion_from_outside_target_surface, |
+ const WebKit::WebFilterOperations& filters, |
+ SkImageFilter* filter, |
+ const WebKit::WebFilterOperations& background_filters) { |
+ DCHECK_GT(id.layer_id, 0); |
+ DCHECK_GE(id.index, 0); |
+ |
+ this->id = id; |
+ this->output_rect = output_rect; |
+ this->damage_rect = damage_rect; |
+ this->transform_to_root_target = transform_to_root_target; |
+ this->has_transparent_background = has_transparent_background; |
+ this->has_occlusion_from_outside_target_surface = |
+ has_occlusion_from_outside_target_surface; |
+ this->filters = filters; |
+ SkRefCnt_SafeAssign(this->filter, filter); |
+ this->background_filters = background_filters; |
+ |
+ DCHECK(quad_list.isEmpty()); |
+ DCHECK(shared_quad_state_list.isEmpty()); |
+} |
- bool isReplica = false; |
- layer->renderSurface()->appendQuads(quadCuller, appendQuadsData, isReplica, contributingRenderPass->id()); |
+void RenderPass::AppendQuadsForLayer( |
aelias_OOO_until_Jul13
2012/11/21 01:50:10
These methods aren't very readable without the "m_
danakj
2012/11/21 01:53:02
Ya that's reasonable, they aren't used by tests.
|
+ LayerImpl* layer, |
+ OcclusionTrackerImpl& occlusion_tracker, |
+ AppendQuadsData& append_quads_data) { |
- // Add replica after the surface so that it appears below the surface. |
- if (layer->hasReplica()) { |
- isReplica = true; |
- layer->renderSurface()->appendQuads(quadCuller, appendQuadsData, isReplica, contributingRenderPass->id()); |
- } |
+ bool for_surface = false; |
+ QuadCuller quad_culler(quad_list, |
+ shared_quad_state_list, |
+ layer, |
+ occlusion_tracker, |
+ layer->showDebugBorders(), |
+ for_surface); |
+ |
+ layer->appendQuads(quad_culler, append_quads_data); |
} |
-void RenderPass::appendQuadsToFillScreen(LayerImpl* rootLayer, SkColor screenBackgroundColor, const OcclusionTrackerImpl& occlusionTracker) |
-{ |
- if (!rootLayer || !screenBackgroundColor) |
- return; |
+void RenderPass::AppendQuadsForRenderSurfaceLayer( |
+ LayerImpl* layer, |
+ const RenderPass& contributing_render_pass, |
+ OcclusionTrackerImpl& occlusion_tracker, |
+ AppendQuadsData& append_quads_data) { |
+ |
+ bool for_surface = true; |
+ QuadCuller quad_culler(quad_list, |
+ shared_quad_state_list, |
+ layer, |
+ occlusion_tracker, |
+ layer->showDebugBorders(), |
+ for_surface); |
+ |
+ bool is_replica = false; |
+ layer->renderSurface()->appendQuads(quad_culler, |
+ append_quads_data, |
+ is_replica, |
+ contributing_render_pass.id); |
+ |
+ // Add replica after the surface so that it appears below the surface. |
+ if (layer->hasReplica()) { |
+ is_replica = true; |
+ layer->renderSurface()->appendQuads(quad_culler, |
+ append_quads_data, |
+ is_replica, |
+ contributing_render_pass.id); |
+ } |
+} |
- Region fillRegion = occlusionTracker.computeVisibleRegionInScreen(); |
- if (fillRegion.IsEmpty()) |
- return; |
+void RenderPass::AppendQuadsToFillScreen( |
+ LayerImpl* root_layer, |
+ SkColor screen_background_color, |
+ const OcclusionTrackerImpl& occlusion_tracker) { |
- bool forSurface = false; |
- QuadCuller quadCuller(m_quadList, m_sharedQuadStateList, rootLayer, &occlusionTracker, rootLayer->showDebugBorders(), forSurface); |
+ if (!root_layer || !SkColorGetA(screen_background_color)) |
+ return; |
+ |
+ Region fill_region = occlusion_tracker.computeVisibleRegionInScreen(); |
+ if (fill_region.IsEmpty()) |
+ return; |
+ |
+ bool for_surface = false; |
+ QuadCuller quad_culler(quad_list, |
+ shared_quad_state_list, |
+ root_layer, |
+ occlusion_tracker, |
+ root_layer->showDebugBorders(), |
+ for_surface); |
// Manually create the quad state for the gutter quads, as the root layer |
// doesn't have any bounds and so can't generate this itself. |
// FIXME: Make the gutter quads generated by the solid color layer (make it smarter about generating quads to fill unoccluded areas). |
- DCHECK(rootLayer->screenSpaceTransform().isInvertible()); |
+ DCHECK(root_layer->screenSpaceTransform().isInvertible()); |
- gfx::Rect rootTargetRect = rootLayer->renderSurface()->contentRect(); |
+ gfx::Rect root_target_rect = root_layer->renderSurface()->contentRect(); |
float opacity = 1; |
- SharedQuadState* sharedQuadState = quadCuller.useSharedQuadState(SharedQuadState::Create()); |
- sharedQuadState->SetAll(rootLayer->drawTransform(), rootTargetRect, rootTargetRect, opacity); |
- |
- WebTransformationMatrix transformToLayerSpace = rootLayer->screenSpaceTransform().inverse(); |
- for (Region::Iterator fillRects(fillRegion); fillRects.has_rect(); fillRects.next()) { |
- // The root layer transform is composed of translations and scales only, no perspective, so mapping is sufficient. |
- gfx::Rect layerRect = MathUtil::mapClippedRect(transformToLayerSpace, fillRects.rect()); |
- // Skip the quad culler and just append the quads directly to avoid occlusion checks. |
- scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create(); |
- quad->SetNew(sharedQuadState, layerRect, screenBackgroundColor); |
- m_quadList.append(quad.PassAs<DrawQuad>()); |
+ SharedQuadState* shared_quad_state = quad_culler.useSharedQuadState( |
+ SharedQuadState::Create()); |
+ shared_quad_state->SetAll(root_layer->drawTransform(), |
+ root_target_rect, |
+ root_target_rect, |
+ opacity); |
+ |
+ WebTransformationMatrix transform_to_layer_space = |
+ root_layer->screenSpaceTransform().inverse(); |
+ Region::Iterator fill_rects(fill_region); |
aelias_OOO_until_Jul13
2012/11/21 01:50:10
nit: why not keep this inside the for()?
danakj
2012/11/21 01:53:02
80 columns nonsense, and splitting the for over 3
|
+ for (; fill_rects.has_rect(); fill_rects.next()) { |
+ // The root layer transform is composed of translations and scales only, |
+ // no perspective, so mapping is sufficient. |
+ gfx::Rect layer_rect = MathUtil::mapClippedRect( |
+ transform_to_layer_space, fill_rects.rect()); |
+ // Skip the quad culler and just append the quads directly to avoid |
+ // occlusion checks. |
+ scoped_ptr<SolidColorDrawQuad> quad = SolidColorDrawQuad::Create(); |
+ quad->SetNew(shared_quad_state, layer_rect, screen_background_color); |
+ quad_list.append(quad.PassAs<DrawQuad>()); |
} |
} |
-void RenderPass::setFilter(SkImageFilter* filter) { |
- SkRefCnt_SafeAssign(m_filter, filter); |
-} |
- |
} // namespace cc |