OLD | NEW |
1 // Copyright 2010 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 | 5 // Temporary forwarding header |
6 #ifndef CCRendererGL_h | 6 #include "cc/gl_renderer.h" |
7 #define CCRendererGL_h | |
8 | |
9 #if USE(ACCELERATED_COMPOSITING) | |
10 | |
11 #include "base/basictypes.h" | |
12 #include "CCCheckerboardDrawQuad.h" | |
13 #include "CCDebugBorderDrawQuad.h" | |
14 #include "CCDirectRenderer.h" | |
15 #include "CCIOSurfaceDrawQuad.h" | |
16 #include "CCRenderPassDrawQuad.h" | |
17 #include "CCRenderer.h" | |
18 #include "CCSolidColorDrawQuad.h" | |
19 #include "CCStreamVideoDrawQuad.h" | |
20 #include "CCTextureDrawQuad.h" | |
21 #include "CCTileDrawQuad.h" | |
22 #include "CCYUVVideoDrawQuad.h" | |
23 #include "Extensions3DChromium.h" | |
24 #include <wtf/PassOwnPtr.h> | |
25 | |
26 namespace WebKit { | |
27 class WebGraphicsContext3D; | |
28 } | |
29 | |
30 namespace cc { | |
31 | |
32 class CCScopedTexture; | |
33 class GeometryBinding; | |
34 class ScopedEnsureFramebufferAllocation; | |
35 | |
36 // Class that handles drawing of composited render layers using GL. | |
37 class CCRendererGL : public CCDirectRenderer, | |
38 public WebKit::WebGraphicsContext3D::WebGraphicsSwapBuffers
CompleteCallbackCHROMIUM, | |
39 public WebKit::WebGraphicsContext3D::WebGraphicsMemoryAlloc
ationChangedCallbackCHROMIUM , | |
40 public WebKit::WebGraphicsContext3D::WebGraphicsContextLost
Callback { | |
41 public: | |
42 static PassOwnPtr<CCRendererGL> create(CCRendererClient*, CCResourceProvider
*); | |
43 | |
44 virtual ~CCRendererGL(); | |
45 | |
46 virtual const RendererCapabilities& capabilities() const OVERRIDE; | |
47 | |
48 WebKit::WebGraphicsContext3D* context(); | |
49 | |
50 virtual void viewportChanged() OVERRIDE; | |
51 | |
52 const FloatQuad& sharedGeometryQuad() const { return m_sharedGeometryQuad; } | |
53 | |
54 // waits for rendering to finish | |
55 virtual void finish() OVERRIDE; | |
56 | |
57 virtual void doNoOp() OVERRIDE; | |
58 // puts backbuffer onscreen | |
59 virtual bool swapBuffers() OVERRIDE; | |
60 | |
61 static void debugGLCall(WebKit::WebGraphicsContext3D*, const char* command,
const char* file, int line); | |
62 | |
63 const GeometryBinding* sharedGeometry() const { return m_sharedGeometry.get(
); } | |
64 | |
65 virtual void getFramebufferPixels(void *pixels, const IntRect&) OVERRIDE; | |
66 bool getFramebufferTexture(CCScopedTexture*, const IntRect& deviceRect); | |
67 | |
68 virtual bool isContextLost() OVERRIDE; | |
69 | |
70 virtual void setVisible(bool) OVERRIDE; | |
71 | |
72 protected: | |
73 CCRendererGL(CCRendererClient*, CCResourceProvider*); | |
74 | |
75 bool isFramebufferDiscarded() const { return m_isFramebufferDiscarded; } | |
76 bool initialize(); | |
77 | |
78 void releaseRenderPassTextures(); | |
79 | |
80 virtual void bindFramebufferToOutputSurface(DrawingFrame&) OVERRIDE; | |
81 virtual bool bindFramebufferToTexture(DrawingFrame&, const CCScopedTexture*,
const IntRect& framebufferRect) OVERRIDE; | |
82 virtual void setDrawViewportSize(const IntSize&) OVERRIDE; | |
83 virtual void enableScissorTestRect(const IntRect& scissorRect) OVERRIDE; | |
84 virtual void disableScissorTest() OVERRIDE; | |
85 virtual void clearFramebuffer(DrawingFrame&) OVERRIDE; | |
86 virtual void drawQuad(DrawingFrame&, const CCDrawQuad*) OVERRIDE; | |
87 virtual void beginDrawingFrame(DrawingFrame&) OVERRIDE; | |
88 virtual void finishDrawingFrame(DrawingFrame&) OVERRIDE; | |
89 virtual bool flippedFramebuffer() const OVERRIDE; | |
90 | |
91 private: | |
92 static void toGLMatrix(float*, const WebKit::WebTransformationMatrix&); | |
93 | |
94 void drawCheckerboardQuad(const DrawingFrame&, const CCCheckerboardDrawQuad*
); | |
95 void drawDebugBorderQuad(const DrawingFrame&, const CCDebugBorderDrawQuad*); | |
96 PassOwnPtr<CCScopedTexture> drawBackgroundFilters(DrawingFrame&, const CCRen
derPassDrawQuad*, const WebKit::WebFilterOperations&, const WebKit::WebTransform
ationMatrix& deviceTransform); | |
97 void drawRenderPassQuad(DrawingFrame&, const CCRenderPassDrawQuad*); | |
98 void drawSolidColorQuad(const DrawingFrame&, const CCSolidColorDrawQuad*); | |
99 void drawStreamVideoQuad(const DrawingFrame&, const CCStreamVideoDrawQuad*); | |
100 void drawTextureQuad(const DrawingFrame&, const CCTextureDrawQuad*); | |
101 void drawIOSurfaceQuad(const DrawingFrame&, const CCIOSurfaceDrawQuad*); | |
102 void drawTileQuad(const DrawingFrame&, const CCTileDrawQuad*); | |
103 void drawYUVVideoQuad(const DrawingFrame&, const CCYUVVideoDrawQuad*); | |
104 | |
105 void setShaderOpacity(float opacity, int alphaLocation); | |
106 void setShaderFloatQuad(const FloatQuad&, int quadLocation); | |
107 void drawQuadGeometry(const DrawingFrame&, const WebKit::WebTransformationMa
trix& drawTransform, const FloatRect& quadRect, int matrixLocation); | |
108 | |
109 void copyTextureToFramebuffer(const DrawingFrame&, int textureId, const IntR
ect&, const WebKit::WebTransformationMatrix& drawMatrix); | |
110 | |
111 bool useScopedTexture(DrawingFrame&, const CCScopedTexture*, const IntRect&
viewportRect); | |
112 | |
113 bool makeContextCurrent(); | |
114 | |
115 bool initializeSharedObjects(); | |
116 void cleanupSharedObjects(); | |
117 | |
118 // WebKit::WebGraphicsContext3D::WebGraphicsSwapBuffersCompleteCallbackCHROM
IUM implementation. | |
119 virtual void onSwapBuffersComplete() OVERRIDE; | |
120 | |
121 // WebKit::WebGraphicsContext3D::WebGraphicsMemoryAllocationChangedCallbackC
HROMIUM implementation. | |
122 virtual void onMemoryAllocationChanged(WebKit::WebGraphicsMemoryAllocation)
OVERRIDE; | |
123 void onMemoryAllocationChangedOnImplThread(WebKit::WebGraphicsMemoryAllocati
on); | |
124 void discardFramebuffer(); | |
125 void ensureFramebuffer(); | |
126 | |
127 // WebGraphicsContext3D::WebGraphicsContextLostCallback implementation. | |
128 virtual void onContextLost() OVERRIDE; | |
129 | |
130 RendererCapabilities m_capabilities; | |
131 | |
132 unsigned m_offscreenFramebufferId; | |
133 | |
134 OwnPtr<GeometryBinding> m_sharedGeometry; | |
135 FloatQuad m_sharedGeometryQuad; | |
136 | |
137 // This block of bindings defines all of the programs used by the compositor
itself. | |
138 | |
139 // Tiled layer shaders. | |
140 typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexAlpha> TilePro
gram; | |
141 typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexClampAlphaAA>
TileProgramAA; | |
142 typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexClampSwizzleAl
phaAA> TileProgramSwizzleAA; | |
143 typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexOpaque> TilePr
ogramOpaque; | |
144 typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexSwizzleAlpha>
TileProgramSwizzle; | |
145 typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexSwizzleOpaque>
TileProgramSwizzleOpaque; | |
146 typedef ProgramBinding<VertexShaderPosTex, FragmentShaderCheckerboard> TileC
heckerboardProgram; | |
147 | |
148 // Render surface shaders. | |
149 typedef ProgramBinding<VertexShaderPosTex, FragmentShaderRGBATexAlpha> Rende
rPassProgram; | |
150 typedef ProgramBinding<VertexShaderPosTex, FragmentShaderRGBATexAlphaMask> R
enderPassMaskProgram; | |
151 typedef ProgramBinding<VertexShaderQuad, FragmentShaderRGBATexAlphaAA> Rende
rPassProgramAA; | |
152 typedef ProgramBinding<VertexShaderQuad, FragmentShaderRGBATexAlphaMaskAA> R
enderPassMaskProgramAA; | |
153 | |
154 // Texture shaders. | |
155 typedef ProgramBinding<VertexShaderPosTexTransform, FragmentShaderRGBATexAlp
ha> TextureProgram; | |
156 typedef ProgramBinding<VertexShaderPosTexTransform, FragmentShaderRGBATexFli
pAlpha> TextureProgramFlip; | |
157 typedef ProgramBinding<VertexShaderPosTexTransform, FragmentShaderRGBATexRec
tAlpha> TextureIOSurfaceProgram; | |
158 | |
159 // Video shaders. | |
160 typedef ProgramBinding<VertexShaderVideoTransform, FragmentShaderOESImageExt
ernal> VideoStreamTextureProgram; | |
161 typedef ProgramBinding<VertexShaderPosTexYUVStretch, FragmentShaderYUVVideo>
VideoYUVProgram; | |
162 | |
163 // Special purpose / effects shaders. | |
164 typedef ProgramBinding<VertexShaderPos, FragmentShaderColor> SolidColorProgr
am; | |
165 | |
166 const TileProgram* tileProgram(); | |
167 const TileProgramOpaque* tileProgramOpaque(); | |
168 const TileProgramAA* tileProgramAA(); | |
169 const TileProgramSwizzle* tileProgramSwizzle(); | |
170 const TileProgramSwizzleOpaque* tileProgramSwizzleOpaque(); | |
171 const TileProgramSwizzleAA* tileProgramSwizzleAA(); | |
172 const TileCheckerboardProgram* tileCheckerboardProgram(); | |
173 | |
174 const RenderPassProgram* renderPassProgram(); | |
175 const RenderPassProgramAA* renderPassProgramAA(); | |
176 const RenderPassMaskProgram* renderPassMaskProgram(); | |
177 const RenderPassMaskProgramAA* renderPassMaskProgramAA(); | |
178 | |
179 const TextureProgram* textureProgram(); | |
180 const TextureProgramFlip* textureProgramFlip(); | |
181 const TextureIOSurfaceProgram* textureIOSurfaceProgram(); | |
182 | |
183 const VideoYUVProgram* videoYUVProgram(); | |
184 const VideoStreamTextureProgram* videoStreamTextureProgram(); | |
185 | |
186 const SolidColorProgram* solidColorProgram(); | |
187 | |
188 OwnPtr<TileProgram> m_tileProgram; | |
189 OwnPtr<TileProgramOpaque> m_tileProgramOpaque; | |
190 OwnPtr<TileProgramAA> m_tileProgramAA; | |
191 OwnPtr<TileProgramSwizzle> m_tileProgramSwizzle; | |
192 OwnPtr<TileProgramSwizzleOpaque> m_tileProgramSwizzleOpaque; | |
193 OwnPtr<TileProgramSwizzleAA> m_tileProgramSwizzleAA; | |
194 OwnPtr<TileCheckerboardProgram> m_tileCheckerboardProgram; | |
195 | |
196 OwnPtr<RenderPassProgram> m_renderPassProgram; | |
197 OwnPtr<RenderPassProgramAA> m_renderPassProgramAA; | |
198 OwnPtr<RenderPassMaskProgram> m_renderPassMaskProgram; | |
199 OwnPtr<RenderPassMaskProgramAA> m_renderPassMaskProgramAA; | |
200 | |
201 OwnPtr<TextureProgram> m_textureProgram; | |
202 OwnPtr<TextureProgramFlip> m_textureProgramFlip; | |
203 OwnPtr<TextureIOSurfaceProgram> m_textureIOSurfaceProgram; | |
204 | |
205 OwnPtr<VideoYUVProgram> m_videoYUVProgram; | |
206 OwnPtr<VideoStreamTextureProgram> m_videoStreamTextureProgram; | |
207 | |
208 OwnPtr<SolidColorProgram> m_solidColorProgram; | |
209 | |
210 WebKit::WebGraphicsContext3D* m_context; | |
211 | |
212 IntRect m_swapBufferRect; | |
213 bool m_isViewportChanged; | |
214 bool m_isFramebufferDiscarded; | |
215 bool m_isUsingBindUniform; | |
216 bool m_visible; | |
217 | |
218 OwnPtr<CCResourceProvider::ScopedWriteLockGL> m_currentFramebufferLock; | |
219 | |
220 DISALLOW_COPY_AND_ASSIGN(CCRendererGL); | |
221 }; | |
222 | |
223 | |
224 // Setting DEBUG_GL_CALLS to 1 will call glGetError() after almost every GL | |
225 // call made by the compositor. Useful for debugging rendering issues but | |
226 // will significantly degrade performance. | |
227 #define DEBUG_GL_CALLS 0 | |
228 | |
229 #if DEBUG_GL_CALLS && !defined ( NDEBUG ) | |
230 #define GLC(context, x) (x, CCRendererGL::debugGLCall(&*context, #x, __FILE__, _
_LINE__)) | |
231 #else | |
232 #define GLC(context, x) (x) | |
233 #endif | |
234 | |
235 | |
236 } | |
237 | |
238 #endif // USE(ACCELERATED_COMPOSITING) | |
239 | |
240 #endif | |
OLD | NEW |