OLD | NEW |
| (Empty) |
1 // Copyright 2010 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef CC_OUTPUT_GL_RENDERER_H_ | |
6 #define CC_OUTPUT_GL_RENDERER_H_ | |
7 | |
8 #include "base/cancelable_callback.h" | |
9 #include "cc/base/scoped_ptr_deque.h" | |
10 #include "cc/base/scoped_ptr_vector.h" | |
11 #include "cc/output/direct_renderer.h" | |
12 #include "cc/output/gl_renderer_draw_cache.h" | |
13 #include "cc/output/program_binding.h" | |
14 #include "cc/output/renderer.h" | |
15 #include "cc/quads/checkerboard_draw_quad.h" | |
16 #include "cc/quads/debug_border_draw_quad.h" | |
17 #include "cc/quads/io_surface_draw_quad.h" | |
18 #include "cc/quads/render_pass_draw_quad.h" | |
19 #include "cc/quads/solid_color_draw_quad.h" | |
20 #include "cc/quads/tile_draw_quad.h" | |
21 #include "cc/quads/yuv_video_draw_quad.h" | |
22 #include "ui/gfx/geometry/quad_f.h" | |
23 | |
24 class SkBitmap; | |
25 | |
26 namespace gpu { | |
27 namespace gles2 { | |
28 class GLES2Interface; | |
29 } | |
30 } | |
31 | |
32 namespace cc { | |
33 | |
34 class GLRendererShaderTest; | |
35 class OutputSurface; | |
36 class PictureDrawQuad; | |
37 class ScopedResource; | |
38 class StreamVideoDrawQuad; | |
39 class TextureDrawQuad; | |
40 class TextureMailboxDeleter; | |
41 class StaticGeometryBinding; | |
42 class DynamicGeometryBinding; | |
43 class ScopedEnsureFramebufferAllocation; | |
44 | |
45 // Class that handles drawing of composited render layers using GL. | |
46 class GLRenderer : public DirectRenderer { | |
47 public: | |
48 class ScopedUseGrContext; | |
49 | |
50 static scoped_ptr<GLRenderer> Create( | |
51 RendererClient* client, | |
52 const RendererSettings* settings, | |
53 OutputSurface* output_surface, | |
54 ResourceProvider* resource_provider, | |
55 TextureMailboxDeleter* texture_mailbox_deleter, | |
56 int highp_threshold_min); | |
57 | |
58 ~GLRenderer() override; | |
59 | |
60 const RendererCapabilitiesImpl& Capabilities() const override; | |
61 | |
62 // Waits for rendering to finish. | |
63 void Finish() override; | |
64 | |
65 void DoNoOp() override; | |
66 void SwapBuffers(const CompositorFrameMetadata& metadata) override; | |
67 | |
68 virtual bool IsContextLost(); | |
69 | |
70 static void DebugGLCall(gpu::gles2::GLES2Interface* gl, | |
71 const char* command, | |
72 const char* file, | |
73 int line); | |
74 | |
75 protected: | |
76 GLRenderer(RendererClient* client, | |
77 const RendererSettings* settings, | |
78 OutputSurface* output_surface, | |
79 ResourceProvider* resource_provider, | |
80 TextureMailboxDeleter* texture_mailbox_deleter, | |
81 int highp_threshold_min); | |
82 | |
83 void DidChangeVisibility() override; | |
84 | |
85 bool IsBackbufferDiscarded() const { return is_backbuffer_discarded_; } | |
86 | |
87 const gfx::QuadF& SharedGeometryQuad() const { return shared_geometry_quad_; } | |
88 const StaticGeometryBinding* SharedGeometry() const { | |
89 return shared_geometry_.get(); | |
90 } | |
91 | |
92 void GetFramebufferPixelsAsync(const DrawingFrame* frame, | |
93 const gfx::Rect& rect, | |
94 scoped_ptr<CopyOutputRequest> request); | |
95 void GetFramebufferTexture(unsigned texture_id, | |
96 ResourceFormat texture_format, | |
97 const gfx::Rect& device_rect); | |
98 void ReleaseRenderPassTextures(); | |
99 enum BoundGeometry { NO_BINDING, SHARED_BINDING, CLIPPED_BINDING }; | |
100 void PrepareGeometry(BoundGeometry geometry_to_bind); | |
101 void SetStencilEnabled(bool enabled); | |
102 bool stencil_enabled() const { return stencil_shadow_; } | |
103 void SetBlendEnabled(bool enabled); | |
104 bool blend_enabled() const { return blend_shadow_; } | |
105 | |
106 void BindFramebufferToOutputSurface(DrawingFrame* frame) override; | |
107 bool BindFramebufferToTexture(DrawingFrame* frame, | |
108 const ScopedResource* resource, | |
109 const gfx::Rect& target_rect) override; | |
110 void SetDrawViewport(const gfx::Rect& window_space_viewport) override; | |
111 void SetScissorTestRect(const gfx::Rect& scissor_rect) override; | |
112 void PrepareSurfaceForPass(DrawingFrame* frame, | |
113 SurfaceInitializationMode initialization_mode, | |
114 const gfx::Rect& render_pass_scissor) override; | |
115 void DoDrawQuad(DrawingFrame* frame, | |
116 const class DrawQuad*, | |
117 const gfx::QuadF* draw_region) override; | |
118 void BeginDrawingFrame(DrawingFrame* frame) override; | |
119 void FinishDrawingFrame(DrawingFrame* frame) override; | |
120 bool FlippedFramebuffer(const DrawingFrame* frame) const override; | |
121 bool FlippedRootFramebuffer() const; | |
122 void EnsureScissorTestEnabled() override; | |
123 void EnsureScissorTestDisabled() override; | |
124 void CopyCurrentRenderPassToBitmap( | |
125 DrawingFrame* frame, | |
126 scoped_ptr<CopyOutputRequest> request) override; | |
127 void FinishDrawingQuadList() override; | |
128 | |
129 // Returns true if quad requires antialiasing and false otherwise. | |
130 static bool ShouldAntialiasQuad(const gfx::Transform& device_transform, | |
131 const DrawQuad* quad, | |
132 bool force_antialiasing); | |
133 | |
134 // Inflate the quad and fill edge array for fragment shader. | |
135 // |local_quad| is set to inflated quad. |edge| array is filled with | |
136 // inflated quad's edge data. | |
137 static void SetupQuadForClippingAndAntialiasing( | |
138 const gfx::Transform& device_transform, | |
139 const DrawQuad* quad, | |
140 bool use_aa, | |
141 const gfx::QuadF* clip_region, | |
142 gfx::QuadF* local_quad, | |
143 float edge[24]); | |
144 | |
145 private: | |
146 friend class GLRendererShaderPixelTest; | |
147 friend class GLRendererShaderTest; | |
148 | |
149 static void ToGLMatrix(float* gl_matrix, const gfx::Transform& transform); | |
150 | |
151 void DiscardPixels(); | |
152 void ClearFramebuffer(DrawingFrame* frame); | |
153 | |
154 void DrawCheckerboardQuad(const DrawingFrame* frame, | |
155 const CheckerboardDrawQuad* quad, | |
156 const gfx::QuadF* clip_region); | |
157 void DrawDebugBorderQuad(const DrawingFrame* frame, | |
158 const DebugBorderDrawQuad* quad); | |
159 static bool IsDefaultBlendMode(SkXfermode::Mode blend_mode) { | |
160 return blend_mode == SkXfermode::kSrcOver_Mode; | |
161 } | |
162 bool CanApplyBlendModeUsingBlendFunc(SkXfermode::Mode blend_mode); | |
163 void ApplyBlendModeUsingBlendFunc(SkXfermode::Mode blend_mode); | |
164 void RestoreBlendFuncToDefault(SkXfermode::Mode blend_mode); | |
165 | |
166 gfx::Rect GetBackdropBoundingBoxForRenderPassQuad( | |
167 DrawingFrame* frame, | |
168 const RenderPassDrawQuad* quad, | |
169 const gfx::Transform& contents_device_transform, | |
170 const gfx::QuadF* clip_region, | |
171 bool use_aa); | |
172 scoped_ptr<ScopedResource> GetBackdropTexture(const gfx::Rect& bounding_rect); | |
173 | |
174 void DrawRenderPassQuad(DrawingFrame* frame, | |
175 const RenderPassDrawQuad* quadi, | |
176 const gfx::QuadF* clip_region); | |
177 void DrawSolidColorQuad(const DrawingFrame* frame, | |
178 const SolidColorDrawQuad* quad, | |
179 const gfx::QuadF* clip_region); | |
180 void DrawStreamVideoQuad(const DrawingFrame* frame, | |
181 const StreamVideoDrawQuad* quad, | |
182 const gfx::QuadF* clip_region); | |
183 void DrawTextureQuad(const DrawingFrame* frame, | |
184 const TextureDrawQuad* quad, | |
185 const gfx::QuadF* clip_region); | |
186 void EnqueueTextureQuad(const DrawingFrame* frame, | |
187 const TextureDrawQuad* quad, | |
188 const gfx::QuadF* clip_region); | |
189 void FlushTextureQuadCache(BoundGeometry flush_binding); | |
190 void DrawIOSurfaceQuad(const DrawingFrame* frame, | |
191 const IOSurfaceDrawQuad* quad, | |
192 const gfx::QuadF* clip_region); | |
193 void DrawTileQuad(const DrawingFrame* frame, | |
194 const TileDrawQuad* quad, | |
195 const gfx::QuadF* clip_region); | |
196 void DrawContentQuad(const DrawingFrame* frame, | |
197 const ContentDrawQuadBase* quad, | |
198 ResourceProvider::ResourceId resource_id, | |
199 const gfx::QuadF* clip_region); | |
200 void DrawContentQuadAA(const DrawingFrame* frame, | |
201 const ContentDrawQuadBase* quad, | |
202 ResourceProvider::ResourceId resource_id, | |
203 const gfx::Transform& device_transform, | |
204 const gfx::QuadF* clip_region); | |
205 void DrawContentQuadNoAA(const DrawingFrame* frame, | |
206 const ContentDrawQuadBase* quad, | |
207 ResourceProvider::ResourceId resource_id, | |
208 const gfx::QuadF* clip_region); | |
209 void DrawYUVVideoQuad(const DrawingFrame* frame, | |
210 const YUVVideoDrawQuad* quad, | |
211 const gfx::QuadF* clip_region); | |
212 void DrawPictureQuad(const DrawingFrame* frame, | |
213 const PictureDrawQuad* quad, | |
214 const gfx::QuadF* clip_region); | |
215 | |
216 void SetShaderOpacity(float opacity, int alpha_location); | |
217 void SetShaderQuadF(const gfx::QuadF& quad, int quad_location); | |
218 void DrawQuadGeometryClippedByQuadF(const DrawingFrame* frame, | |
219 const gfx::Transform& draw_transform, | |
220 const gfx::RectF& quad_rect, | |
221 const gfx::QuadF& clipping_region_quad, | |
222 int matrix_location, | |
223 const float uv[8]); | |
224 void DrawQuadGeometry(const DrawingFrame* frame, | |
225 const gfx::Transform& draw_transform, | |
226 const gfx::RectF& quad_rect, | |
227 int matrix_location); | |
228 void SetUseProgram(unsigned program); | |
229 | |
230 bool UseScopedTexture(DrawingFrame* frame, | |
231 const ScopedResource* resource, | |
232 const gfx::Rect& viewport_rect); | |
233 | |
234 bool MakeContextCurrent(); | |
235 | |
236 void InitializeSharedObjects(); | |
237 void CleanupSharedObjects(); | |
238 | |
239 typedef base::Callback<void(scoped_ptr<CopyOutputRequest> copy_request, | |
240 bool success)> | |
241 AsyncGetFramebufferPixelsCleanupCallback; | |
242 void FinishedReadback(unsigned source_buffer, | |
243 unsigned query, | |
244 const gfx::Size& size); | |
245 | |
246 void ReinitializeGLState(); | |
247 void RestoreGLState(); | |
248 void RestoreFramebuffer(DrawingFrame* frame); | |
249 | |
250 void DiscardBackbuffer() override; | |
251 void EnsureBackbuffer() override; | |
252 void EnforceMemoryPolicy(); | |
253 | |
254 void ScheduleOverlays(DrawingFrame* frame); | |
255 | |
256 typedef ScopedPtrVector<ResourceProvider::ScopedReadLockGL> | |
257 OverlayResourceLockList; | |
258 OverlayResourceLockList pending_overlay_resources_; | |
259 OverlayResourceLockList in_use_overlay_resources_; | |
260 | |
261 RendererCapabilitiesImpl capabilities_; | |
262 | |
263 unsigned offscreen_framebuffer_id_; | |
264 | |
265 scoped_ptr<StaticGeometryBinding> shared_geometry_; | |
266 scoped_ptr<DynamicGeometryBinding> clipped_geometry_; | |
267 gfx::QuadF shared_geometry_quad_; | |
268 | |
269 // This block of bindings defines all of the programs used by the compositor | |
270 // itself. Add any new programs here to GLRendererShaderTest. | |
271 | |
272 // Tiled layer shaders. | |
273 typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexAlpha> | |
274 TileProgram; | |
275 typedef ProgramBinding<VertexShaderTileAA, FragmentShaderRGBATexClampAlphaAA> | |
276 TileProgramAA; | |
277 typedef ProgramBinding<VertexShaderTileAA, | |
278 FragmentShaderRGBATexClampSwizzleAlphaAA> | |
279 TileProgramSwizzleAA; | |
280 typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexOpaque> | |
281 TileProgramOpaque; | |
282 typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexSwizzleAlpha> | |
283 TileProgramSwizzle; | |
284 typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexSwizzleOpaque> | |
285 TileProgramSwizzleOpaque; | |
286 typedef ProgramBinding<VertexShaderPosTex, FragmentShaderCheckerboard> | |
287 TileCheckerboardProgram; | |
288 | |
289 // Texture shaders. | |
290 typedef ProgramBinding<VertexShaderPosTexTransform, | |
291 FragmentShaderRGBATexVaryingAlpha> TextureProgram; | |
292 typedef ProgramBinding<VertexShaderPosTexTransform, | |
293 FragmentShaderRGBATexPremultiplyAlpha> | |
294 NonPremultipliedTextureProgram; | |
295 typedef ProgramBinding<VertexShaderPosTexTransform, | |
296 FragmentShaderTexBackgroundVaryingAlpha> | |
297 TextureBackgroundProgram; | |
298 typedef ProgramBinding<VertexShaderPosTexTransform, | |
299 FragmentShaderTexBackgroundPremultiplyAlpha> | |
300 NonPremultipliedTextureBackgroundProgram; | |
301 | |
302 // Render surface shaders. | |
303 typedef ProgramBinding<VertexShaderPosTexTransform, | |
304 FragmentShaderRGBATexAlpha> RenderPassProgram; | |
305 typedef ProgramBinding<VertexShaderPosTexTransform, | |
306 FragmentShaderRGBATexAlphaMask> RenderPassMaskProgram; | |
307 typedef ProgramBinding<VertexShaderQuadTexTransformAA, | |
308 FragmentShaderRGBATexAlphaAA> RenderPassProgramAA; | |
309 typedef ProgramBinding<VertexShaderQuadTexTransformAA, | |
310 FragmentShaderRGBATexAlphaMaskAA> | |
311 RenderPassMaskProgramAA; | |
312 typedef ProgramBinding<VertexShaderPosTexTransform, | |
313 FragmentShaderRGBATexColorMatrixAlpha> | |
314 RenderPassColorMatrixProgram; | |
315 typedef ProgramBinding<VertexShaderQuadTexTransformAA, | |
316 FragmentShaderRGBATexAlphaMaskColorMatrixAA> | |
317 RenderPassMaskColorMatrixProgramAA; | |
318 typedef ProgramBinding<VertexShaderQuadTexTransformAA, | |
319 FragmentShaderRGBATexAlphaColorMatrixAA> | |
320 RenderPassColorMatrixProgramAA; | |
321 typedef ProgramBinding<VertexShaderPosTexTransform, | |
322 FragmentShaderRGBATexAlphaMaskColorMatrix> | |
323 RenderPassMaskColorMatrixProgram; | |
324 | |
325 // Video shaders. | |
326 typedef ProgramBinding<VertexShaderVideoTransform, FragmentShaderRGBATex> | |
327 VideoStreamTextureProgram; | |
328 typedef ProgramBinding<VertexShaderPosTexYUVStretchOffset, | |
329 FragmentShaderYUVVideo> VideoYUVProgram; | |
330 typedef ProgramBinding<VertexShaderPosTexYUVStretchOffset, | |
331 FragmentShaderYUVAVideo> VideoYUVAProgram; | |
332 | |
333 // Special purpose / effects shaders. | |
334 typedef ProgramBinding<VertexShaderPos, FragmentShaderColor> | |
335 DebugBorderProgram; | |
336 typedef ProgramBinding<VertexShaderQuad, FragmentShaderColor> | |
337 SolidColorProgram; | |
338 typedef ProgramBinding<VertexShaderQuadAA, FragmentShaderColorAA> | |
339 SolidColorProgramAA; | |
340 | |
341 const TileProgram* GetTileProgram( | |
342 TexCoordPrecision precision, SamplerType sampler); | |
343 const TileProgramOpaque* GetTileProgramOpaque( | |
344 TexCoordPrecision precision, SamplerType sampler); | |
345 const TileProgramAA* GetTileProgramAA( | |
346 TexCoordPrecision precision, SamplerType sampler); | |
347 const TileProgramSwizzle* GetTileProgramSwizzle( | |
348 TexCoordPrecision precision, SamplerType sampler); | |
349 const TileProgramSwizzleOpaque* GetTileProgramSwizzleOpaque( | |
350 TexCoordPrecision precision, SamplerType sampler); | |
351 const TileProgramSwizzleAA* GetTileProgramSwizzleAA( | |
352 TexCoordPrecision precision, SamplerType sampler); | |
353 | |
354 const TileCheckerboardProgram* GetTileCheckerboardProgram(); | |
355 | |
356 const RenderPassProgram* GetRenderPassProgram(TexCoordPrecision precision, | |
357 BlendMode blend_mode); | |
358 const RenderPassProgramAA* GetRenderPassProgramAA(TexCoordPrecision precision, | |
359 BlendMode blend_mode); | |
360 const RenderPassMaskProgram* GetRenderPassMaskProgram( | |
361 TexCoordPrecision precision, | |
362 SamplerType sampler, | |
363 BlendMode blend_mode, | |
364 bool mask_for_background); | |
365 const RenderPassMaskProgramAA* GetRenderPassMaskProgramAA( | |
366 TexCoordPrecision precision, | |
367 SamplerType sampler, | |
368 BlendMode blend_mode, | |
369 bool mask_for_background); | |
370 const RenderPassColorMatrixProgram* GetRenderPassColorMatrixProgram( | |
371 TexCoordPrecision precision, | |
372 BlendMode blend_mode); | |
373 const RenderPassColorMatrixProgramAA* GetRenderPassColorMatrixProgramAA( | |
374 TexCoordPrecision precision, | |
375 BlendMode blend_mode); | |
376 const RenderPassMaskColorMatrixProgram* GetRenderPassMaskColorMatrixProgram( | |
377 TexCoordPrecision precision, | |
378 SamplerType sampler, | |
379 BlendMode blend_mode, | |
380 bool mask_for_background); | |
381 const RenderPassMaskColorMatrixProgramAA* | |
382 GetRenderPassMaskColorMatrixProgramAA(TexCoordPrecision precision, | |
383 SamplerType sampler, | |
384 BlendMode blend_mode, | |
385 bool mask_for_background); | |
386 | |
387 const TextureProgram* GetTextureProgram( | |
388 TexCoordPrecision precision); | |
389 const NonPremultipliedTextureProgram* GetNonPremultipliedTextureProgram( | |
390 TexCoordPrecision precision); | |
391 const TextureBackgroundProgram* GetTextureBackgroundProgram( | |
392 TexCoordPrecision precision); | |
393 const NonPremultipliedTextureBackgroundProgram* | |
394 GetNonPremultipliedTextureBackgroundProgram(TexCoordPrecision precision); | |
395 const TextureProgram* GetTextureIOSurfaceProgram( | |
396 TexCoordPrecision precision); | |
397 | |
398 const VideoYUVProgram* GetVideoYUVProgram( | |
399 TexCoordPrecision precision); | |
400 const VideoYUVAProgram* GetVideoYUVAProgram( | |
401 TexCoordPrecision precision); | |
402 const VideoStreamTextureProgram* GetVideoStreamTextureProgram( | |
403 TexCoordPrecision precision); | |
404 | |
405 const DebugBorderProgram* GetDebugBorderProgram(); | |
406 const SolidColorProgram* GetSolidColorProgram(); | |
407 const SolidColorProgramAA* GetSolidColorProgramAA(); | |
408 | |
409 TileProgram | |
410 tile_program_[LAST_TEX_COORD_PRECISION + 1][LAST_SAMPLER_TYPE + 1]; | |
411 TileProgramOpaque | |
412 tile_program_opaque_[LAST_TEX_COORD_PRECISION + 1][LAST_SAMPLER_TYPE + 1]; | |
413 TileProgramAA | |
414 tile_program_aa_[LAST_TEX_COORD_PRECISION + 1][LAST_SAMPLER_TYPE + 1]; | |
415 TileProgramSwizzle tile_program_swizzle_[LAST_TEX_COORD_PRECISION + | |
416 1][LAST_SAMPLER_TYPE + 1]; | |
417 TileProgramSwizzleOpaque | |
418 tile_program_swizzle_opaque_[LAST_TEX_COORD_PRECISION + | |
419 1][LAST_SAMPLER_TYPE + 1]; | |
420 TileProgramSwizzleAA tile_program_swizzle_aa_[LAST_TEX_COORD_PRECISION + | |
421 1][LAST_SAMPLER_TYPE + 1]; | |
422 | |
423 TileCheckerboardProgram tile_checkerboard_program_; | |
424 | |
425 TextureProgram texture_program_[LAST_TEX_COORD_PRECISION + 1]; | |
426 NonPremultipliedTextureProgram | |
427 nonpremultiplied_texture_program_[LAST_TEX_COORD_PRECISION + 1]; | |
428 TextureBackgroundProgram | |
429 texture_background_program_[LAST_TEX_COORD_PRECISION + 1]; | |
430 NonPremultipliedTextureBackgroundProgram | |
431 nonpremultiplied_texture_background_program_[LAST_TEX_COORD_PRECISION + | |
432 1]; | |
433 TextureProgram texture_io_surface_program_[LAST_TEX_COORD_PRECISION + 1]; | |
434 | |
435 RenderPassProgram | |
436 render_pass_program_[LAST_TEX_COORD_PRECISION + 1][LAST_BLEND_MODE + 1]; | |
437 RenderPassProgramAA render_pass_program_aa_[LAST_TEX_COORD_PRECISION + | |
438 1][LAST_BLEND_MODE + 1]; | |
439 RenderPassMaskProgram | |
440 render_pass_mask_program_[LAST_TEX_COORD_PRECISION + 1] | |
441 [LAST_SAMPLER_TYPE + 1] | |
442 [LAST_BLEND_MODE + 1] | |
443 [LAST_MASK_VALUE + 1]; | |
444 RenderPassMaskProgramAA | |
445 render_pass_mask_program_aa_[LAST_TEX_COORD_PRECISION + 1] | |
446 [LAST_SAMPLER_TYPE + 1] | |
447 [LAST_BLEND_MODE + 1] | |
448 [LAST_MASK_VALUE + 1]; | |
449 RenderPassColorMatrixProgram | |
450 render_pass_color_matrix_program_[LAST_TEX_COORD_PRECISION + | |
451 1][LAST_BLEND_MODE + 1]; | |
452 RenderPassColorMatrixProgramAA | |
453 render_pass_color_matrix_program_aa_[LAST_TEX_COORD_PRECISION + | |
454 1][LAST_BLEND_MODE + 1]; | |
455 RenderPassMaskColorMatrixProgram | |
456 render_pass_mask_color_matrix_program_[LAST_TEX_COORD_PRECISION + 1] | |
457 [LAST_SAMPLER_TYPE + 1] | |
458 [LAST_BLEND_MODE + 1] | |
459 [LAST_MASK_VALUE + 1]; | |
460 RenderPassMaskColorMatrixProgramAA | |
461 render_pass_mask_color_matrix_program_aa_[LAST_TEX_COORD_PRECISION + 1] | |
462 [LAST_SAMPLER_TYPE + 1] | |
463 [LAST_BLEND_MODE + 1] | |
464 [LAST_MASK_VALUE + 1]; | |
465 | |
466 VideoYUVProgram video_yuv_program_[LAST_TEX_COORD_PRECISION + 1]; | |
467 VideoYUVAProgram video_yuva_program_[LAST_TEX_COORD_PRECISION + 1]; | |
468 VideoStreamTextureProgram | |
469 video_stream_texture_program_[LAST_TEX_COORD_PRECISION + 1]; | |
470 | |
471 DebugBorderProgram debug_border_program_; | |
472 SolidColorProgram solid_color_program_; | |
473 SolidColorProgramAA solid_color_program_aa_; | |
474 | |
475 gpu::gles2::GLES2Interface* gl_; | |
476 gpu::ContextSupport* context_support_; | |
477 | |
478 TextureMailboxDeleter* texture_mailbox_deleter_; | |
479 | |
480 gfx::Rect swap_buffer_rect_; | |
481 gfx::Rect scissor_rect_; | |
482 gfx::Rect viewport_; | |
483 bool is_backbuffer_discarded_; | |
484 bool is_using_bind_uniform_; | |
485 bool is_scissor_enabled_; | |
486 bool scissor_rect_needs_reset_; | |
487 bool stencil_shadow_; | |
488 bool blend_shadow_; | |
489 unsigned program_shadow_; | |
490 TexturedQuadDrawCache draw_cache_; | |
491 int highp_threshold_min_; | |
492 int highp_threshold_cache_; | |
493 | |
494 struct PendingAsyncReadPixels; | |
495 ScopedPtrVector<PendingAsyncReadPixels> pending_async_read_pixels_; | |
496 | |
497 scoped_ptr<ResourceProvider::ScopedWriteLockGL> current_framebuffer_lock_; | |
498 | |
499 class SyncQuery; | |
500 ScopedPtrDeque<SyncQuery> pending_sync_queries_; | |
501 ScopedPtrDeque<SyncQuery> available_sync_queries_; | |
502 scoped_ptr<SyncQuery> current_sync_query_; | |
503 bool use_sync_query_; | |
504 bool use_blend_equation_advanced_; | |
505 bool use_blend_equation_advanced_coherent_; | |
506 | |
507 SkBitmap on_demand_tile_raster_bitmap_; | |
508 ResourceProvider::ResourceId on_demand_tile_raster_resource_id_; | |
509 BoundGeometry bound_geometry_; | |
510 DISALLOW_COPY_AND_ASSIGN(GLRenderer); | |
511 }; | |
512 | |
513 // Setting DEBUG_GL_CALLS to 1 will call glGetError() after almost every GL | |
514 // call made by the compositor. Useful for debugging rendering issues but | |
515 // will significantly degrade performance. | |
516 #define DEBUG_GL_CALLS 0 | |
517 | |
518 #if DEBUG_GL_CALLS && !defined(NDEBUG) | |
519 #define GLC(context, x) \ | |
520 (x, GLRenderer::DebugGLCall(&* context, #x, __FILE__, __LINE__)) | |
521 #else | |
522 #define GLC(context, x) (x) | |
523 #endif | |
524 | |
525 } // namespace cc | |
526 | |
527 #endif // CC_OUTPUT_GL_RENDERER_H_ | |
OLD | NEW |