| Index: cc/quads/render_pass.h
|
| diff --git a/cc/quads/render_pass.h b/cc/quads/render_pass.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..94c0df458201c4c8b8eb7fbb3d35c4f781fce9ce
|
| --- /dev/null
|
| +++ b/cc/quads/render_pass.h
|
| @@ -0,0 +1,148 @@
|
| +// Copyright 2011 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef CC_QUADS_RENDER_PASS_H_
|
| +#define CC_QUADS_RENDER_PASS_H_
|
| +
|
| +#include <utility>
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/callback.h"
|
| +#include "base/containers/hash_tables.h"
|
| +#include "cc/base/scoped_ptr_vector.h"
|
| +#include "cc/quads/list_container.h"
|
| +#include "cc/quads/render_pass_id.h"
|
| +#include "skia/ext/refptr.h"
|
| +#include "ui/gfx/geometry/rect.h"
|
| +#include "ui/gfx/geometry/rect_f.h"
|
| +#include "ui/gfx/transform.h"
|
| +
|
| +namespace base {
|
| +namespace trace_event {
|
| +class TracedValue;
|
| +}
|
| +class Value;
|
| +}
|
| +
|
| +namespace cc {
|
| +
|
| +class DrawQuad;
|
| +class CopyOutputRequest;
|
| +class RenderPassDrawQuad;
|
| +class SharedQuadState;
|
| +
|
| +// A list of DrawQuad objects, sorted internally in front-to-back order.
|
| +class QuadList : public ListContainer<DrawQuad> {
|
| + public:
|
| + explicit QuadList(size_t default_size_to_reserve);
|
| +
|
| + typedef QuadList::ReverseIterator BackToFrontIterator;
|
| + typedef QuadList::ConstReverseIterator ConstBackToFrontIterator;
|
| +
|
| + inline BackToFrontIterator BackToFrontBegin() { return rbegin(); }
|
| + inline BackToFrontIterator BackToFrontEnd() { return rend(); }
|
| + inline ConstBackToFrontIterator BackToFrontBegin() const { return rbegin(); }
|
| + inline ConstBackToFrontIterator BackToFrontEnd() const { return rend(); }
|
| +};
|
| +
|
| +typedef ListContainer<SharedQuadState> SharedQuadStateList;
|
| +
|
| +class RenderPass {
|
| + public:
|
| + ~RenderPass();
|
| +
|
| + static scoped_ptr<RenderPass> Create();
|
| + static scoped_ptr<RenderPass> Create(size_t num_layers);
|
| + static scoped_ptr<RenderPass> Create(size_t shared_quad_state_list_size,
|
| + size_t quad_list_size);
|
| +
|
| + // A shallow copy of the render pass, which does not include its quads or copy
|
| + // requests.
|
| + scoped_ptr<RenderPass> Copy(RenderPassId new_id) const;
|
| +
|
| + // A deep copy of the render passes in the list including the quads.
|
| + static void CopyAll(const ScopedPtrVector<RenderPass>& in,
|
| + ScopedPtrVector<RenderPass>* out);
|
| +
|
| + void SetNew(RenderPassId id,
|
| + const gfx::Rect& output_rect,
|
| + const gfx::Rect& damage_rect,
|
| + const gfx::Transform& transform_to_root_target);
|
| +
|
| + void SetAll(RenderPassId id,
|
| + const gfx::Rect& output_rect,
|
| + const gfx::Rect& damage_rect,
|
| + const gfx::Transform& transform_to_root_target,
|
| + bool has_transparent_background);
|
| +
|
| + void AsValueInto(base::trace_event::TracedValue* dict) const;
|
| +
|
| + SharedQuadState* CreateAndAppendSharedQuadState();
|
| +
|
| + template <typename DrawQuadType>
|
| + DrawQuadType* CreateAndAppendDrawQuad() {
|
| + return quad_list.AllocateAndConstruct<DrawQuadType>();
|
| + }
|
| +
|
| + RenderPassDrawQuad* CopyFromAndAppendRenderPassDrawQuad(
|
| + const RenderPassDrawQuad* quad,
|
| + const SharedQuadState* shared_quad_state,
|
| + RenderPassId render_pass_id);
|
| + DrawQuad* CopyFromAndAppendDrawQuad(const DrawQuad* quad,
|
| + const SharedQuadState* shared_quad_state);
|
| +
|
| + // Uniquely identifies the render pass in the compositor's current frame.
|
| + RenderPassId id;
|
| +
|
| + // These are in the space of the render pass' physical pixels.
|
| + gfx::Rect output_rect;
|
| + gfx::Rect damage_rect;
|
| +
|
| + // Transforms from the origin of the |output_rect| to the origin of the root
|
| + // render pass' |output_rect|.
|
| + gfx::Transform transform_to_root_target;
|
| +
|
| + // If false, the pixels in the render pass' texture are all opaque.
|
| + bool has_transparent_background;
|
| +
|
| + // If non-empty, the renderer should produce a copy of the render pass'
|
| + // contents as a bitmap, and give a copy of the bitmap to each callback in
|
| + // this list. This property should not be serialized between compositors, as
|
| + // it only makes sense in the root compositor.
|
| + ScopedPtrVector<CopyOutputRequest> copy_requests;
|
| +
|
| + QuadList quad_list;
|
| + SharedQuadStateList shared_quad_state_list;
|
| +
|
| + protected:
|
| + explicit RenderPass(size_t num_layers);
|
| + RenderPass();
|
| + RenderPass(size_t shared_quad_state_list_size, size_t quad_list_size);
|
| +
|
| + private:
|
| + template <typename DrawQuadType>
|
| + DrawQuadType* CopyFromAndAppendTypedDrawQuad(const DrawQuad* quad) {
|
| + return quad_list.AllocateAndCopyFrom(DrawQuadType::MaterialCast(quad));
|
| + }
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(RenderPass);
|
| +};
|
| +
|
| +} // namespace cc
|
| +
|
| +namespace BASE_HASH_NAMESPACE {
|
| +template <>
|
| +struct hash<cc::RenderPassId> {
|
| + size_t operator()(cc::RenderPassId key) const {
|
| + return base::HashPair(key.layer_id, key.index);
|
| + }
|
| +};
|
| +} // namespace BASE_HASH_NAMESPACE
|
| +
|
| +namespace cc {
|
| +typedef ScopedPtrVector<RenderPass> RenderPassList;
|
| +typedef base::hash_map<RenderPassId, RenderPass*> RenderPassIdHashMap;
|
| +} // namespace cc
|
| +
|
| +#endif // CC_QUADS_RENDER_PASS_H_
|
|
|