| 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_
|
|
|