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 |