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

Unified Diff: cc/render_pass.cc

Issue 11413106: cc: Make RenderPass into a struct-like class. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/render_pass.h ('k') | cc/render_pass_draw_quad.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « cc/render_pass.h ('k') | cc/render_pass_draw_quad.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698