Index: cc/output/gl_renderer.h |
diff --git a/cc/output/gl_renderer.h b/cc/output/gl_renderer.h |
index 01668abb23823b597e1b6af2da4cd1da11769143..27f2c4221ef4fc8abc6d19059ba364bf1dcf3e00 100644 |
--- a/cc/output/gl_renderer.h |
+++ b/cc/output/gl_renderer.h |
@@ -39,7 +39,8 @@ class ScopedResource; |
class StreamVideoDrawQuad; |
class TextureDrawQuad; |
class TextureMailboxDeleter; |
-class GeometryBinding; |
+class StaticGeometryBinding; |
+class DynamicGeometryBinding; |
class ScopedEnsureFramebufferAllocation; |
// Class that handles drawing of composited render layers using GL. |
@@ -85,7 +86,7 @@ class CC_EXPORT GLRenderer : public DirectRenderer { |
bool IsBackbufferDiscarded() const { return is_backbuffer_discarded_; } |
const gfx::QuadF& SharedGeometryQuad() const { return shared_geometry_quad_; } |
- const GeometryBinding* SharedGeometry() const { |
+ const StaticGeometryBinding* SharedGeometry() const { |
return shared_geometry_.get(); |
} |
@@ -96,7 +97,8 @@ class CC_EXPORT GLRenderer : public DirectRenderer { |
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); |
@@ -112,7 +114,9 @@ class CC_EXPORT GLRenderer : public DirectRenderer { |
bool draw_rect_covers_full_surface) override; |
void ClearFramebuffer(DrawingFrame* frame, |
bool has_external_stencil_test) override; |
- void DoDrawQuad(DrawingFrame* frame, const class DrawQuad*) 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; |
@@ -132,10 +136,13 @@ class CC_EXPORT GLRenderer : public DirectRenderer { |
// 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 SetupQuadForAntialiasing(const gfx::Transform& device_transform, |
- const DrawQuad* quad, |
- gfx::QuadF* local_quad, |
- float edge[24]); |
+ 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; |
@@ -144,7 +151,8 @@ class CC_EXPORT GLRenderer : public DirectRenderer { |
static void ToGLMatrix(float* gl_matrix, const gfx::Transform& transform); |
void DrawCheckerboardQuad(const DrawingFrame* frame, |
- const CheckerboardDrawQuad* quad); |
+ const CheckerboardDrawQuad* quad, |
+ const gfx::QuadF* clip_region); |
void DrawDebugBorderQuad(const DrawingFrame* frame, |
const DebugBorderDrawQuad* quad); |
static bool IsDefaultBlendMode(SkXfermode::Mode blend_mode) { |
@@ -158,6 +166,7 @@ class CC_EXPORT GLRenderer : public DirectRenderer { |
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); |
@@ -168,34 +177,56 @@ class CC_EXPORT GLRenderer : public DirectRenderer { |
const RenderPassDrawQuad* quad, |
ScopedResource* background_texture); |
- void DrawRenderPassQuad(DrawingFrame* frame, const RenderPassDrawQuad* quad); |
+ void DrawRenderPassQuad(DrawingFrame* frame, |
+ const RenderPassDrawQuad* quadi, |
+ const gfx::QuadF* clip_region); |
void DrawSolidColorQuad(const DrawingFrame* frame, |
- const SolidColorDrawQuad* quad); |
+ const SolidColorDrawQuad* quad, |
+ const gfx::QuadF* clip_region); |
void DrawStreamVideoQuad(const DrawingFrame* frame, |
- const StreamVideoDrawQuad* quad); |
+ 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); |
- void FlushTextureQuadCache(); |
+ const TextureDrawQuad* quad, |
+ const gfx::QuadF* clip_region); |
+ void FlushTextureQuadCache(BoundGeometry flush_binding); |
void DrawIOSurfaceQuad(const DrawingFrame* frame, |
- const IOSurfaceDrawQuad* quad); |
- void DrawTileQuad(const DrawingFrame* frame, const TileDrawQuad* quad); |
+ 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); |
+ 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::Transform& device_transform, |
+ const gfx::QuadF* clip_region); |
void DrawContentQuadNoAA(const DrawingFrame* frame, |
const ContentDrawQuadBase* quad, |
- ResourceProvider::ResourceId resource_id); |
+ ResourceProvider::ResourceId resource_id, |
+ const gfx::QuadF* clip_region); |
void DrawYUVVideoQuad(const DrawingFrame* frame, |
- const YUVVideoDrawQuad* quad); |
+ const YUVVideoDrawQuad* quad, |
+ const gfx::QuadF* clip_region); |
void DrawPictureQuad(const DrawingFrame* frame, |
- const PictureDrawQuad* quad); |
+ 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, |
@@ -237,7 +268,8 @@ class CC_EXPORT GLRenderer : public DirectRenderer { |
unsigned offscreen_framebuffer_id_; |
- scoped_ptr<GeometryBinding> shared_geometry_; |
+ 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 |
@@ -480,7 +512,7 @@ class CC_EXPORT GLRenderer : public DirectRenderer { |
SkBitmap on_demand_tile_raster_bitmap_; |
ResourceProvider::ResourceId on_demand_tile_raster_resource_id_; |
- |
+ BoundGeometry bound_geometry_; |
DISALLOW_COPY_AND_ASSIGN(GLRenderer); |
}; |