Index: cc/draw_quad.h |
diff --git a/cc/draw_quad.h b/cc/draw_quad.h |
index 638cbb270ce9b24689d5095baf174ade4f4d1a13..05a69065468192a161ea93de87601fab0119a7cd 100644 |
--- a/cc/draw_quad.h |
+++ b/cc/draw_quad.h |
@@ -1,3 +1,96 @@ |
// Copyright 2012 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 CCDrawQuad_h |
+#define CCDrawQuad_h |
+ |
+#include "CCSharedQuadState.h" |
+ |
+namespace cc { |
+ |
+// WARNING! All CCXYZDrawQuad classes must remain PODs (plain old data). |
+// They are intended to be "serializable" by copying their raw bytes, so they |
+// must not contain any non-bit-copyable member variables! |
+// |
+// Furthermore, the class members need to be packed so they are aligned |
+// properly and don't have paddings/gaps, otherwise memory check tools |
+// like Valgrind will complain about uninitialized memory usage when |
+// transferring these classes over the wire. |
+#pragma pack(push, 4) |
+ |
+// CCDrawQuad is a bag of data used for drawing a quad. Because different |
+// materials need different bits of per-quad data to render, classes that derive |
+// from CCDrawQuad store additional data in their derived instance. The Material |
+// enum is used to "safely" downcast to the derived class. |
+class CCDrawQuad { |
+public: |
+ enum Material { |
+ Invalid, |
+ Checkerboard, |
+ DebugBorder, |
+ IOSurfaceContent, |
+ RenderPass, |
+ TextureContent, |
+ SolidColor, |
+ TiledContent, |
+ YUVVideoContent, |
+ StreamVideoContent, |
+ }; |
+ |
+ IntRect quadRect() const { return m_quadRect; } |
+ const WebKit::WebTransformationMatrix& quadTransform() const { return m_sharedQuadState->quadTransform; } |
+ IntRect visibleContentRect() const { return m_sharedQuadState->visibleContentRect; } |
+ IntRect clippedRectInTarget() const { return m_sharedQuadState->clippedRectInTarget; } |
+ float opacity() const { return m_sharedQuadState->opacity; } |
+ // For the purposes of blending, what part of the contents of this quad are opaque? |
+ IntRect opaqueRect() const; |
+ bool needsBlending() const { return m_needsBlending || !opaqueRect().contains(m_quadVisibleRect); } |
+ |
+ // Allows changing the rect that gets drawn to make it smaller. Parameter passed |
+ // in will be clipped to quadRect(). |
+ void setQuadVisibleRect(const IntRect&); |
+ IntRect quadVisibleRect() const { return m_quadVisibleRect; } |
+ bool isDebugQuad() const { return m_material == DebugBorder; } |
+ |
+ Material material() const { return m_material; } |
+ |
+ // Returns transfer size of this object based on the derived class (by |
+ // looking at the material type). |
+ unsigned size() const; |
+ |
+ scoped_ptr<CCDrawQuad> copy(const CCSharedQuadState* copiedSharedQuadState) const; |
+ |
+ const CCSharedQuadState* sharedQuadState() const { return m_sharedQuadState; } |
+ int sharedQuadStateId() const { return m_sharedQuadStateId; } |
+ void setSharedQuadState(const CCSharedQuadState*); |
+ |
+protected: |
+ CCDrawQuad(const CCSharedQuadState*, Material, const IntRect&); |
+ |
+ // Stores state common to a large bundle of quads; kept separate for memory |
+ // efficiency. There is special treatment to reconstruct these pointers |
+ // during serialization. |
+ const CCSharedQuadState* m_sharedQuadState; |
+ int m_sharedQuadStateId; |
+ |
+ Material m_material; |
+ IntRect m_quadRect; |
+ IntRect m_quadVisibleRect; |
+ |
+ // By default, the shared quad state determines whether or not this quad is |
+ // opaque or needs blending. Derived classes can override with these |
+ // variables. |
+ bool m_quadOpaque; |
+ bool m_needsBlending; |
+ |
+ // Be default, this rect is empty. It is used when the shared quad state and above |
+ // variables determine that the quad is not fully opaque but may be partially opaque. |
+ IntRect m_opaqueRect; |
+}; |
+ |
+#pragma pack(pop) |
+ |
+} |
+ |
+#endif |