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

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: Rebase 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..0a8dc488f66e8b23415af19929977d2eec7cd84c 100644
--- a/cc/render_pass.cc
+++ b/cc/render_pass.cc
@@ -4,113 +4,84 @@
#include "cc/render_pass.h"
-#include "cc/layer_impl.h"
-#include "cc/math_util.h"
-#include "cc/occlusion_tracker.h"
-#include "cc/quad_culler.h"
-#include "cc/shared_quad_state.h"
-#include "cc/solid_color_draw_quad.h"
#include "third_party/skia/include/core/SkImageFilter.h"
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);
-}
-
-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);
-
- bool isReplica = false;
- layer->renderSurface()->appendQuads(quadCuller, appendQuadsData, isReplica, contributingRenderPass->id());
-
- // 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());
- }
-}
+ this->id = id;
+ this->output_rect = output_rect;
+ this->damage_rect = damage_rect;
+ this->transform_to_root_target = transform_to_root_target;
-void RenderPass::appendQuadsToFillScreen(LayerImpl* rootLayer, SkColor screenBackgroundColor, const OcclusionTrackerImpl& occlusionTracker)
-{
- if (!rootLayer || !screenBackgroundColor)
- return;
-
- Region fillRegion = occlusionTracker.computeVisibleRegionInScreen();
- if (fillRegion.IsEmpty())
- return;
-
- bool forSurface = false;
- QuadCuller quadCuller(m_quadList, m_sharedQuadStateList, rootLayer, &occlusionTracker, rootLayer->showDebugBorders(), forSurface);
-
- // 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());
-
- gfx::Rect rootTargetRect = rootLayer->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>());
- }
+ DCHECK(quad_list.isEmpty());
+ DCHECK(shared_quad_state_list.isEmpty());
}
-void RenderPass::setFilter(SkImageFilter* filter) {
- SkRefCnt_SafeAssign(m_filter, filter);
+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());
}
} // 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