Index: cc/output/gl_renderer.h |
diff --git a/cc/output/gl_renderer.h b/cc/output/gl_renderer.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1bb8c2d78d65dc11b6a17d416d9a6045ba50531b |
--- /dev/null |
+++ b/cc/output/gl_renderer.h |
@@ -0,0 +1,527 @@ |
+// Copyright 2010 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 CC_OUTPUT_GL_RENDERER_H_ |
+#define CC_OUTPUT_GL_RENDERER_H_ |
+ |
+#include "base/cancelable_callback.h" |
+#include "cc/base/scoped_ptr_deque.h" |
+#include "cc/base/scoped_ptr_vector.h" |
+#include "cc/output/direct_renderer.h" |
+#include "cc/output/gl_renderer_draw_cache.h" |
+#include "cc/output/program_binding.h" |
+#include "cc/output/renderer.h" |
+#include "cc/quads/checkerboard_draw_quad.h" |
+#include "cc/quads/debug_border_draw_quad.h" |
+#include "cc/quads/io_surface_draw_quad.h" |
+#include "cc/quads/render_pass_draw_quad.h" |
+#include "cc/quads/solid_color_draw_quad.h" |
+#include "cc/quads/tile_draw_quad.h" |
+#include "cc/quads/yuv_video_draw_quad.h" |
+#include "ui/gfx/geometry/quad_f.h" |
+ |
+class SkBitmap; |
+ |
+namespace gpu { |
+namespace gles2 { |
+class GLES2Interface; |
+} |
+} |
+ |
+namespace cc { |
+ |
+class GLRendererShaderTest; |
+class OutputSurface; |
+class PictureDrawQuad; |
+class ScopedResource; |
+class StreamVideoDrawQuad; |
+class TextureDrawQuad; |
+class TextureMailboxDeleter; |
+class StaticGeometryBinding; |
+class DynamicGeometryBinding; |
+class ScopedEnsureFramebufferAllocation; |
+ |
+// Class that handles drawing of composited render layers using GL. |
+class GLRenderer : public DirectRenderer { |
+ public: |
+ class ScopedUseGrContext; |
+ |
+ static scoped_ptr<GLRenderer> Create( |
+ RendererClient* client, |
+ const RendererSettings* settings, |
+ OutputSurface* output_surface, |
+ ResourceProvider* resource_provider, |
+ TextureMailboxDeleter* texture_mailbox_deleter, |
+ int highp_threshold_min); |
+ |
+ ~GLRenderer() override; |
+ |
+ const RendererCapabilitiesImpl& Capabilities() const override; |
+ |
+ // Waits for rendering to finish. |
+ void Finish() override; |
+ |
+ void DoNoOp() override; |
+ void SwapBuffers(const CompositorFrameMetadata& metadata) override; |
+ |
+ virtual bool IsContextLost(); |
+ |
+ static void DebugGLCall(gpu::gles2::GLES2Interface* gl, |
+ const char* command, |
+ const char* file, |
+ int line); |
+ |
+ protected: |
+ GLRenderer(RendererClient* client, |
+ const RendererSettings* settings, |
+ OutputSurface* output_surface, |
+ ResourceProvider* resource_provider, |
+ TextureMailboxDeleter* texture_mailbox_deleter, |
+ int highp_threshold_min); |
+ |
+ void DidChangeVisibility() override; |
+ |
+ bool IsBackbufferDiscarded() const { return is_backbuffer_discarded_; } |
+ |
+ const gfx::QuadF& SharedGeometryQuad() const { return shared_geometry_quad_; } |
+ const StaticGeometryBinding* SharedGeometry() const { |
+ return shared_geometry_.get(); |
+ } |
+ |
+ void GetFramebufferPixelsAsync(const DrawingFrame* frame, |
+ const gfx::Rect& rect, |
+ scoped_ptr<CopyOutputRequest> request); |
+ void GetFramebufferTexture(unsigned texture_id, |
+ ResourceFormat texture_format, |
+ const gfx::Rect& device_rect); |
+ void ReleaseRenderPassTextures(); |
+ enum BoundGeometry { NO_BINDING, SHARED_BINDING, CLIPPED_BINDING }; |
+ void PrepareGeometry(BoundGeometry geometry_to_bind); |
+ void SetStencilEnabled(bool enabled); |
+ bool stencil_enabled() const { return stencil_shadow_; } |
+ void SetBlendEnabled(bool enabled); |
+ bool blend_enabled() const { return blend_shadow_; } |
+ |
+ void BindFramebufferToOutputSurface(DrawingFrame* frame) override; |
+ bool BindFramebufferToTexture(DrawingFrame* frame, |
+ const ScopedResource* resource, |
+ const gfx::Rect& target_rect) override; |
+ void SetDrawViewport(const gfx::Rect& window_space_viewport) override; |
+ void SetScissorTestRect(const gfx::Rect& scissor_rect) override; |
+ void PrepareSurfaceForPass(DrawingFrame* frame, |
+ SurfaceInitializationMode initialization_mode, |
+ const gfx::Rect& render_pass_scissor) override; |
+ void DoDrawQuad(DrawingFrame* frame, |
+ const class DrawQuad*, |
+ const gfx::QuadF* draw_region) override; |
+ void BeginDrawingFrame(DrawingFrame* frame) override; |
+ void FinishDrawingFrame(DrawingFrame* frame) override; |
+ bool FlippedFramebuffer(const DrawingFrame* frame) const override; |
+ bool FlippedRootFramebuffer() const; |
+ void EnsureScissorTestEnabled() override; |
+ void EnsureScissorTestDisabled() override; |
+ void CopyCurrentRenderPassToBitmap( |
+ DrawingFrame* frame, |
+ scoped_ptr<CopyOutputRequest> request) override; |
+ void FinishDrawingQuadList() override; |
+ |
+ // Returns true if quad requires antialiasing and false otherwise. |
+ static bool ShouldAntialiasQuad(const gfx::Transform& device_transform, |
+ const DrawQuad* quad, |
+ bool force_antialiasing); |
+ |
+ // Inflate the quad and fill edge array for fragment shader. |
+ // |local_quad| is set to inflated quad. |edge| array is filled with |
+ // inflated quad's edge data. |
+ static void SetupQuadForClippingAndAntialiasing( |
+ const gfx::Transform& device_transform, |
+ const DrawQuad* quad, |
+ bool use_aa, |
+ const gfx::QuadF* clip_region, |
+ gfx::QuadF* local_quad, |
+ float edge[24]); |
+ |
+ private: |
+ friend class GLRendererShaderPixelTest; |
+ friend class GLRendererShaderTest; |
+ |
+ static void ToGLMatrix(float* gl_matrix, const gfx::Transform& transform); |
+ |
+ void DiscardPixels(); |
+ void ClearFramebuffer(DrawingFrame* frame); |
+ |
+ void DrawCheckerboardQuad(const DrawingFrame* frame, |
+ const CheckerboardDrawQuad* quad, |
+ const gfx::QuadF* clip_region); |
+ void DrawDebugBorderQuad(const DrawingFrame* frame, |
+ const DebugBorderDrawQuad* quad); |
+ static bool IsDefaultBlendMode(SkXfermode::Mode blend_mode) { |
+ return blend_mode == SkXfermode::kSrcOver_Mode; |
+ } |
+ bool CanApplyBlendModeUsingBlendFunc(SkXfermode::Mode blend_mode); |
+ void ApplyBlendModeUsingBlendFunc(SkXfermode::Mode blend_mode); |
+ void RestoreBlendFuncToDefault(SkXfermode::Mode blend_mode); |
+ |
+ gfx::Rect GetBackdropBoundingBoxForRenderPassQuad( |
+ DrawingFrame* frame, |
+ const RenderPassDrawQuad* quad, |
+ const gfx::Transform& contents_device_transform, |
+ const gfx::QuadF* clip_region, |
+ bool use_aa); |
+ scoped_ptr<ScopedResource> GetBackdropTexture(const gfx::Rect& bounding_rect); |
+ |
+ void DrawRenderPassQuad(DrawingFrame* frame, |
+ const RenderPassDrawQuad* quadi, |
+ const gfx::QuadF* clip_region); |
+ void DrawSolidColorQuad(const DrawingFrame* frame, |
+ const SolidColorDrawQuad* quad, |
+ const gfx::QuadF* clip_region); |
+ void DrawStreamVideoQuad(const DrawingFrame* frame, |
+ const StreamVideoDrawQuad* quad, |
+ const gfx::QuadF* clip_region); |
+ void DrawTextureQuad(const DrawingFrame* frame, |
+ const TextureDrawQuad* quad, |
+ const gfx::QuadF* clip_region); |
+ void EnqueueTextureQuad(const DrawingFrame* frame, |
+ const TextureDrawQuad* quad, |
+ const gfx::QuadF* clip_region); |
+ void FlushTextureQuadCache(BoundGeometry flush_binding); |
+ void DrawIOSurfaceQuad(const DrawingFrame* frame, |
+ const IOSurfaceDrawQuad* quad, |
+ const gfx::QuadF* clip_region); |
+ void DrawTileQuad(const DrawingFrame* frame, |
+ const TileDrawQuad* quad, |
+ const gfx::QuadF* clip_region); |
+ void DrawContentQuad(const DrawingFrame* frame, |
+ const ContentDrawQuadBase* quad, |
+ ResourceProvider::ResourceId resource_id, |
+ const gfx::QuadF* clip_region); |
+ void DrawContentQuadAA(const DrawingFrame* frame, |
+ const ContentDrawQuadBase* quad, |
+ ResourceProvider::ResourceId resource_id, |
+ const gfx::Transform& device_transform, |
+ const gfx::QuadF* clip_region); |
+ void DrawContentQuadNoAA(const DrawingFrame* frame, |
+ const ContentDrawQuadBase* quad, |
+ ResourceProvider::ResourceId resource_id, |
+ const gfx::QuadF* clip_region); |
+ void DrawYUVVideoQuad(const DrawingFrame* frame, |
+ const YUVVideoDrawQuad* quad, |
+ const gfx::QuadF* clip_region); |
+ void DrawPictureQuad(const DrawingFrame* frame, |
+ const PictureDrawQuad* quad, |
+ const gfx::QuadF* clip_region); |
+ |
+ void SetShaderOpacity(float opacity, int alpha_location); |
+ void SetShaderQuadF(const gfx::QuadF& quad, int quad_location); |
+ void DrawQuadGeometryClippedByQuadF(const DrawingFrame* frame, |
+ const gfx::Transform& draw_transform, |
+ const gfx::RectF& quad_rect, |
+ const gfx::QuadF& clipping_region_quad, |
+ int matrix_location, |
+ const float uv[8]); |
+ void DrawQuadGeometry(const DrawingFrame* frame, |
+ const gfx::Transform& draw_transform, |
+ const gfx::RectF& quad_rect, |
+ int matrix_location); |
+ void SetUseProgram(unsigned program); |
+ |
+ bool UseScopedTexture(DrawingFrame* frame, |
+ const ScopedResource* resource, |
+ const gfx::Rect& viewport_rect); |
+ |
+ bool MakeContextCurrent(); |
+ |
+ void InitializeSharedObjects(); |
+ void CleanupSharedObjects(); |
+ |
+ typedef base::Callback<void(scoped_ptr<CopyOutputRequest> copy_request, |
+ bool success)> |
+ AsyncGetFramebufferPixelsCleanupCallback; |
+ void FinishedReadback(unsigned source_buffer, |
+ unsigned query, |
+ const gfx::Size& size); |
+ |
+ void ReinitializeGLState(); |
+ void RestoreGLState(); |
+ void RestoreFramebuffer(DrawingFrame* frame); |
+ |
+ void DiscardBackbuffer() override; |
+ void EnsureBackbuffer() override; |
+ void EnforceMemoryPolicy(); |
+ |
+ void ScheduleOverlays(DrawingFrame* frame); |
+ |
+ typedef ScopedPtrVector<ResourceProvider::ScopedReadLockGL> |
+ OverlayResourceLockList; |
+ OverlayResourceLockList pending_overlay_resources_; |
+ OverlayResourceLockList in_use_overlay_resources_; |
+ |
+ RendererCapabilitiesImpl capabilities_; |
+ |
+ unsigned offscreen_framebuffer_id_; |
+ |
+ scoped_ptr<StaticGeometryBinding> shared_geometry_; |
+ scoped_ptr<DynamicGeometryBinding> clipped_geometry_; |
+ gfx::QuadF shared_geometry_quad_; |
+ |
+ // This block of bindings defines all of the programs used by the compositor |
+ // itself. Add any new programs here to GLRendererShaderTest. |
+ |
+ // Tiled layer shaders. |
+ typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexAlpha> |
+ TileProgram; |
+ typedef ProgramBinding<VertexShaderTileAA, FragmentShaderRGBATexClampAlphaAA> |
+ TileProgramAA; |
+ typedef ProgramBinding<VertexShaderTileAA, |
+ FragmentShaderRGBATexClampSwizzleAlphaAA> |
+ TileProgramSwizzleAA; |
+ typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexOpaque> |
+ TileProgramOpaque; |
+ typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexSwizzleAlpha> |
+ TileProgramSwizzle; |
+ typedef ProgramBinding<VertexShaderTile, FragmentShaderRGBATexSwizzleOpaque> |
+ TileProgramSwizzleOpaque; |
+ typedef ProgramBinding<VertexShaderPosTex, FragmentShaderCheckerboard> |
+ TileCheckerboardProgram; |
+ |
+ // Texture shaders. |
+ typedef ProgramBinding<VertexShaderPosTexTransform, |
+ FragmentShaderRGBATexVaryingAlpha> TextureProgram; |
+ typedef ProgramBinding<VertexShaderPosTexTransform, |
+ FragmentShaderRGBATexPremultiplyAlpha> |
+ NonPremultipliedTextureProgram; |
+ typedef ProgramBinding<VertexShaderPosTexTransform, |
+ FragmentShaderTexBackgroundVaryingAlpha> |
+ TextureBackgroundProgram; |
+ typedef ProgramBinding<VertexShaderPosTexTransform, |
+ FragmentShaderTexBackgroundPremultiplyAlpha> |
+ NonPremultipliedTextureBackgroundProgram; |
+ |
+ // Render surface shaders. |
+ typedef ProgramBinding<VertexShaderPosTexTransform, |
+ FragmentShaderRGBATexAlpha> RenderPassProgram; |
+ typedef ProgramBinding<VertexShaderPosTexTransform, |
+ FragmentShaderRGBATexAlphaMask> RenderPassMaskProgram; |
+ typedef ProgramBinding<VertexShaderQuadTexTransformAA, |
+ FragmentShaderRGBATexAlphaAA> RenderPassProgramAA; |
+ typedef ProgramBinding<VertexShaderQuadTexTransformAA, |
+ FragmentShaderRGBATexAlphaMaskAA> |
+ RenderPassMaskProgramAA; |
+ typedef ProgramBinding<VertexShaderPosTexTransform, |
+ FragmentShaderRGBATexColorMatrixAlpha> |
+ RenderPassColorMatrixProgram; |
+ typedef ProgramBinding<VertexShaderQuadTexTransformAA, |
+ FragmentShaderRGBATexAlphaMaskColorMatrixAA> |
+ RenderPassMaskColorMatrixProgramAA; |
+ typedef ProgramBinding<VertexShaderQuadTexTransformAA, |
+ FragmentShaderRGBATexAlphaColorMatrixAA> |
+ RenderPassColorMatrixProgramAA; |
+ typedef ProgramBinding<VertexShaderPosTexTransform, |
+ FragmentShaderRGBATexAlphaMaskColorMatrix> |
+ RenderPassMaskColorMatrixProgram; |
+ |
+ // Video shaders. |
+ typedef ProgramBinding<VertexShaderVideoTransform, FragmentShaderRGBATex> |
+ VideoStreamTextureProgram; |
+ typedef ProgramBinding<VertexShaderPosTexYUVStretchOffset, |
+ FragmentShaderYUVVideo> VideoYUVProgram; |
+ typedef ProgramBinding<VertexShaderPosTexYUVStretchOffset, |
+ FragmentShaderYUVAVideo> VideoYUVAProgram; |
+ |
+ // Special purpose / effects shaders. |
+ typedef ProgramBinding<VertexShaderPos, FragmentShaderColor> |
+ DebugBorderProgram; |
+ typedef ProgramBinding<VertexShaderQuad, FragmentShaderColor> |
+ SolidColorProgram; |
+ typedef ProgramBinding<VertexShaderQuadAA, FragmentShaderColorAA> |
+ SolidColorProgramAA; |
+ |
+ const TileProgram* GetTileProgram( |
+ TexCoordPrecision precision, SamplerType sampler); |
+ const TileProgramOpaque* GetTileProgramOpaque( |
+ TexCoordPrecision precision, SamplerType sampler); |
+ const TileProgramAA* GetTileProgramAA( |
+ TexCoordPrecision precision, SamplerType sampler); |
+ const TileProgramSwizzle* GetTileProgramSwizzle( |
+ TexCoordPrecision precision, SamplerType sampler); |
+ const TileProgramSwizzleOpaque* GetTileProgramSwizzleOpaque( |
+ TexCoordPrecision precision, SamplerType sampler); |
+ const TileProgramSwizzleAA* GetTileProgramSwizzleAA( |
+ TexCoordPrecision precision, SamplerType sampler); |
+ |
+ const TileCheckerboardProgram* GetTileCheckerboardProgram(); |
+ |
+ const RenderPassProgram* GetRenderPassProgram(TexCoordPrecision precision, |
+ BlendMode blend_mode); |
+ const RenderPassProgramAA* GetRenderPassProgramAA(TexCoordPrecision precision, |
+ BlendMode blend_mode); |
+ const RenderPassMaskProgram* GetRenderPassMaskProgram( |
+ TexCoordPrecision precision, |
+ SamplerType sampler, |
+ BlendMode blend_mode, |
+ bool mask_for_background); |
+ const RenderPassMaskProgramAA* GetRenderPassMaskProgramAA( |
+ TexCoordPrecision precision, |
+ SamplerType sampler, |
+ BlendMode blend_mode, |
+ bool mask_for_background); |
+ const RenderPassColorMatrixProgram* GetRenderPassColorMatrixProgram( |
+ TexCoordPrecision precision, |
+ BlendMode blend_mode); |
+ const RenderPassColorMatrixProgramAA* GetRenderPassColorMatrixProgramAA( |
+ TexCoordPrecision precision, |
+ BlendMode blend_mode); |
+ const RenderPassMaskColorMatrixProgram* GetRenderPassMaskColorMatrixProgram( |
+ TexCoordPrecision precision, |
+ SamplerType sampler, |
+ BlendMode blend_mode, |
+ bool mask_for_background); |
+ const RenderPassMaskColorMatrixProgramAA* |
+ GetRenderPassMaskColorMatrixProgramAA(TexCoordPrecision precision, |
+ SamplerType sampler, |
+ BlendMode blend_mode, |
+ bool mask_for_background); |
+ |
+ const TextureProgram* GetTextureProgram( |
+ TexCoordPrecision precision); |
+ const NonPremultipliedTextureProgram* GetNonPremultipliedTextureProgram( |
+ TexCoordPrecision precision); |
+ const TextureBackgroundProgram* GetTextureBackgroundProgram( |
+ TexCoordPrecision precision); |
+ const NonPremultipliedTextureBackgroundProgram* |
+ GetNonPremultipliedTextureBackgroundProgram(TexCoordPrecision precision); |
+ const TextureProgram* GetTextureIOSurfaceProgram( |
+ TexCoordPrecision precision); |
+ |
+ const VideoYUVProgram* GetVideoYUVProgram( |
+ TexCoordPrecision precision); |
+ const VideoYUVAProgram* GetVideoYUVAProgram( |
+ TexCoordPrecision precision); |
+ const VideoStreamTextureProgram* GetVideoStreamTextureProgram( |
+ TexCoordPrecision precision); |
+ |
+ const DebugBorderProgram* GetDebugBorderProgram(); |
+ const SolidColorProgram* GetSolidColorProgram(); |
+ const SolidColorProgramAA* GetSolidColorProgramAA(); |
+ |
+ TileProgram |
+ tile_program_[LAST_TEX_COORD_PRECISION + 1][LAST_SAMPLER_TYPE + 1]; |
+ TileProgramOpaque |
+ tile_program_opaque_[LAST_TEX_COORD_PRECISION + 1][LAST_SAMPLER_TYPE + 1]; |
+ TileProgramAA |
+ tile_program_aa_[LAST_TEX_COORD_PRECISION + 1][LAST_SAMPLER_TYPE + 1]; |
+ TileProgramSwizzle tile_program_swizzle_[LAST_TEX_COORD_PRECISION + |
+ 1][LAST_SAMPLER_TYPE + 1]; |
+ TileProgramSwizzleOpaque |
+ tile_program_swizzle_opaque_[LAST_TEX_COORD_PRECISION + |
+ 1][LAST_SAMPLER_TYPE + 1]; |
+ TileProgramSwizzleAA tile_program_swizzle_aa_[LAST_TEX_COORD_PRECISION + |
+ 1][LAST_SAMPLER_TYPE + 1]; |
+ |
+ TileCheckerboardProgram tile_checkerboard_program_; |
+ |
+ TextureProgram texture_program_[LAST_TEX_COORD_PRECISION + 1]; |
+ NonPremultipliedTextureProgram |
+ nonpremultiplied_texture_program_[LAST_TEX_COORD_PRECISION + 1]; |
+ TextureBackgroundProgram |
+ texture_background_program_[LAST_TEX_COORD_PRECISION + 1]; |
+ NonPremultipliedTextureBackgroundProgram |
+ nonpremultiplied_texture_background_program_[LAST_TEX_COORD_PRECISION + |
+ 1]; |
+ TextureProgram texture_io_surface_program_[LAST_TEX_COORD_PRECISION + 1]; |
+ |
+ RenderPassProgram |
+ render_pass_program_[LAST_TEX_COORD_PRECISION + 1][LAST_BLEND_MODE + 1]; |
+ RenderPassProgramAA render_pass_program_aa_[LAST_TEX_COORD_PRECISION + |
+ 1][LAST_BLEND_MODE + 1]; |
+ RenderPassMaskProgram |
+ render_pass_mask_program_[LAST_TEX_COORD_PRECISION + 1] |
+ [LAST_SAMPLER_TYPE + 1] |
+ [LAST_BLEND_MODE + 1] |
+ [LAST_MASK_VALUE + 1]; |
+ RenderPassMaskProgramAA |
+ render_pass_mask_program_aa_[LAST_TEX_COORD_PRECISION + 1] |
+ [LAST_SAMPLER_TYPE + 1] |
+ [LAST_BLEND_MODE + 1] |
+ [LAST_MASK_VALUE + 1]; |
+ RenderPassColorMatrixProgram |
+ render_pass_color_matrix_program_[LAST_TEX_COORD_PRECISION + |
+ 1][LAST_BLEND_MODE + 1]; |
+ RenderPassColorMatrixProgramAA |
+ render_pass_color_matrix_program_aa_[LAST_TEX_COORD_PRECISION + |
+ 1][LAST_BLEND_MODE + 1]; |
+ RenderPassMaskColorMatrixProgram |
+ render_pass_mask_color_matrix_program_[LAST_TEX_COORD_PRECISION + 1] |
+ [LAST_SAMPLER_TYPE + 1] |
+ [LAST_BLEND_MODE + 1] |
+ [LAST_MASK_VALUE + 1]; |
+ RenderPassMaskColorMatrixProgramAA |
+ render_pass_mask_color_matrix_program_aa_[LAST_TEX_COORD_PRECISION + 1] |
+ [LAST_SAMPLER_TYPE + 1] |
+ [LAST_BLEND_MODE + 1] |
+ [LAST_MASK_VALUE + 1]; |
+ |
+ VideoYUVProgram video_yuv_program_[LAST_TEX_COORD_PRECISION + 1]; |
+ VideoYUVAProgram video_yuva_program_[LAST_TEX_COORD_PRECISION + 1]; |
+ VideoStreamTextureProgram |
+ video_stream_texture_program_[LAST_TEX_COORD_PRECISION + 1]; |
+ |
+ DebugBorderProgram debug_border_program_; |
+ SolidColorProgram solid_color_program_; |
+ SolidColorProgramAA solid_color_program_aa_; |
+ |
+ gpu::gles2::GLES2Interface* gl_; |
+ gpu::ContextSupport* context_support_; |
+ |
+ TextureMailboxDeleter* texture_mailbox_deleter_; |
+ |
+ gfx::Rect swap_buffer_rect_; |
+ gfx::Rect scissor_rect_; |
+ gfx::Rect viewport_; |
+ bool is_backbuffer_discarded_; |
+ bool is_using_bind_uniform_; |
+ bool is_scissor_enabled_; |
+ bool scissor_rect_needs_reset_; |
+ bool stencil_shadow_; |
+ bool blend_shadow_; |
+ unsigned program_shadow_; |
+ TexturedQuadDrawCache draw_cache_; |
+ int highp_threshold_min_; |
+ int highp_threshold_cache_; |
+ |
+ struct PendingAsyncReadPixels; |
+ ScopedPtrVector<PendingAsyncReadPixels> pending_async_read_pixels_; |
+ |
+ scoped_ptr<ResourceProvider::ScopedWriteLockGL> current_framebuffer_lock_; |
+ |
+ class SyncQuery; |
+ ScopedPtrDeque<SyncQuery> pending_sync_queries_; |
+ ScopedPtrDeque<SyncQuery> available_sync_queries_; |
+ scoped_ptr<SyncQuery> current_sync_query_; |
+ bool use_sync_query_; |
+ bool use_blend_equation_advanced_; |
+ bool use_blend_equation_advanced_coherent_; |
+ |
+ SkBitmap on_demand_tile_raster_bitmap_; |
+ ResourceProvider::ResourceId on_demand_tile_raster_resource_id_; |
+ BoundGeometry bound_geometry_; |
+ DISALLOW_COPY_AND_ASSIGN(GLRenderer); |
+}; |
+ |
+// Setting DEBUG_GL_CALLS to 1 will call glGetError() after almost every GL |
+// call made by the compositor. Useful for debugging rendering issues but |
+// will significantly degrade performance. |
+#define DEBUG_GL_CALLS 0 |
+ |
+#if DEBUG_GL_CALLS && !defined(NDEBUG) |
+#define GLC(context, x) \ |
+ (x, GLRenderer::DebugGLCall(&* context, #x, __FILE__, __LINE__)) |
+#else |
+#define GLC(context, x) (x) |
+#endif |
+ |
+} // namespace cc |
+ |
+#endif // CC_OUTPUT_GL_RENDERER_H_ |