OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CCDrawQuad_h | 5 // Temporary forwarding header |
6 #define CCDrawQuad_h | 6 #include "cc/draw_quad.h" |
7 | |
8 #include "CCSharedQuadState.h" | |
9 | |
10 namespace cc { | |
11 | |
12 // WARNING! All CCXYZDrawQuad classes must remain PODs (plain old data). | |
13 // They are intended to be "serializable" by copying their raw bytes, so they | |
14 // must not contain any non-bit-copyable member variables! | |
15 // | |
16 // Furthermore, the class members need to be packed so they are aligned | |
17 // properly and don't have paddings/gaps, otherwise memory check tools | |
18 // like Valgrind will complain about uninitialized memory usage when | |
19 // transferring these classes over the wire. | |
20 #pragma pack(push, 4) | |
21 | |
22 // CCDrawQuad is a bag of data used for drawing a quad. Because different | |
23 // materials need different bits of per-quad data to render, classes that derive | |
24 // from CCDrawQuad store additional data in their derived instance. The Material | |
25 // enum is used to "safely" downcast to the derived class. | |
26 class CCDrawQuad { | |
27 public: | |
28 enum Material { | |
29 Invalid, | |
30 Checkerboard, | |
31 DebugBorder, | |
32 IOSurfaceContent, | |
33 RenderPass, | |
34 TextureContent, | |
35 SolidColor, | |
36 TiledContent, | |
37 YUVVideoContent, | |
38 StreamVideoContent, | |
39 }; | |
40 | |
41 IntRect quadRect() const { return m_quadRect; } | |
42 const WebKit::WebTransformationMatrix& quadTransform() const { return m_shar
edQuadState->quadTransform; } | |
43 IntRect visibleContentRect() const { return m_sharedQuadState->visibleConten
tRect; } | |
44 IntRect clippedRectInTarget() const { return m_sharedQuadState->clippedRectI
nTarget; } | |
45 float opacity() const { return m_sharedQuadState->opacity; } | |
46 // For the purposes of blending, what part of the contents of this quad are
opaque? | |
47 IntRect opaqueRect() const; | |
48 bool needsBlending() const { return m_needsBlending || !opaqueRect().contain
s(m_quadVisibleRect); } | |
49 | |
50 // Allows changing the rect that gets drawn to make it smaller. Parameter pa
ssed | |
51 // in will be clipped to quadRect(). | |
52 void setQuadVisibleRect(const IntRect&); | |
53 IntRect quadVisibleRect() const { return m_quadVisibleRect; } | |
54 bool isDebugQuad() const { return m_material == DebugBorder; } | |
55 | |
56 Material material() const { return m_material; } | |
57 | |
58 // Returns transfer size of this object based on the derived class (by | |
59 // looking at the material type). | |
60 unsigned size() const; | |
61 | |
62 scoped_ptr<CCDrawQuad> copy(const CCSharedQuadState* copiedSharedQuadState)
const; | |
63 | |
64 const CCSharedQuadState* sharedQuadState() const { return m_sharedQuadState;
} | |
65 int sharedQuadStateId() const { return m_sharedQuadStateId; } | |
66 void setSharedQuadState(const CCSharedQuadState*); | |
67 | |
68 protected: | |
69 CCDrawQuad(const CCSharedQuadState*, Material, const IntRect&); | |
70 | |
71 // Stores state common to a large bundle of quads; kept separate for memory | |
72 // efficiency. There is special treatment to reconstruct these pointers | |
73 // during serialization. | |
74 const CCSharedQuadState* m_sharedQuadState; | |
75 int m_sharedQuadStateId; | |
76 | |
77 Material m_material; | |
78 IntRect m_quadRect; | |
79 IntRect m_quadVisibleRect; | |
80 | |
81 // By default, the shared quad state determines whether or not this quad is | |
82 // opaque or needs blending. Derived classes can override with these | |
83 // variables. | |
84 bool m_quadOpaque; | |
85 bool m_needsBlending; | |
86 | |
87 // Be default, this rect is empty. It is used when the shared quad state and
above | |
88 // variables determine that the quad is not fully opaque but may be partiall
y opaque. | |
89 IntRect m_opaqueRect; | |
90 }; | |
91 | |
92 #pragma pack(pop) | |
93 | |
94 } | |
95 | |
96 #endif | |
OLD | NEW |