| Index: include/gpu/GrContext.h
|
| diff --git a/include/gpu/GrContext.h b/include/gpu/GrContext.h
|
| index 6a225c2538b0c057c19fd26ab42bfe3d22b49030..2433b89189d60fc43e84e6dae4f893b143fa7e3b 100644
|
| --- a/include/gpu/GrContext.h
|
| +++ b/include/gpu/GrContext.h
|
| @@ -362,6 +362,20 @@
|
| GrRenderTarget* wrapBackendRenderTarget(const GrBackendRenderTargetDesc& desc);
|
|
|
| ///////////////////////////////////////////////////////////////////////////
|
| + // Clip state
|
| + /**
|
| + * Gets the current clip.
|
| + * @return the current clip.
|
| + */
|
| + const GrClip* getClip() const { return fClip; }
|
| +
|
| + /**
|
| + * Sets the clip.
|
| + * @param clipData the clip to set.
|
| + */
|
| + void setClip(const GrClip* clipData) { fClip = clipData; }
|
| +
|
| + ///////////////////////////////////////////////////////////////////////////
|
| // Draws
|
|
|
| /**
|
| @@ -377,7 +391,7 @@
|
| /**
|
| * Draw everywhere (respecting the clip) with the paint.
|
| */
|
| - void drawPaint(GrRenderTarget*, const GrClip&, const GrPaint&, const SkMatrix& viewMatrix);
|
| + void drawPaint(GrRenderTarget*, const GrPaint&, const SkMatrix& viewMatrix);
|
|
|
| /**
|
| * Draw the rect using a paint.
|
| @@ -392,7 +406,6 @@
|
| * The rects coords are used to access the paint (through texture matrix)
|
| */
|
| void drawRect(GrRenderTarget*,
|
| - const GrClip&,
|
| const GrPaint& paint,
|
| const SkMatrix& viewMatrix,
|
| const SkRect&,
|
| @@ -409,7 +422,6 @@
|
| * to rectToDraw
|
| */
|
| void drawNonAARectToRect(GrRenderTarget*,
|
| - const GrClip&,
|
| const GrPaint& paint,
|
| const SkMatrix& viewMatrix,
|
| const SkRect& rectToDraw,
|
| @@ -420,12 +432,11 @@
|
| * Draws a non-AA rect with paint and a localMatrix
|
| */
|
| void drawNonAARectWithLocalMatrix(GrRenderTarget* rt,
|
| - const GrClip& clip,
|
| const GrPaint& paint,
|
| const SkMatrix& viewMatrix,
|
| const SkRect& rect,
|
| const SkMatrix& localMatrix) {
|
| - this->drawNonAARectToRect(rt, clip, paint, viewMatrix, rect, rect, &localMatrix);
|
| + this->drawNonAARectToRect(rt, paint, viewMatrix, rect, rect, &localMatrix);
|
| }
|
|
|
| /**
|
| @@ -438,7 +449,6 @@
|
| * the dash information (intervals, count, phase).
|
| */
|
| void drawRRect(GrRenderTarget*,
|
| - const GrClip&,
|
| const GrPaint&,
|
| const SkMatrix& viewMatrix,
|
| const SkRRect& rrect,
|
| @@ -455,7 +465,6 @@
|
| * @param inner the inner roundrect
|
| */
|
| void drawDRRect(GrRenderTarget*,
|
| - const GrClip&,
|
| const GrPaint&,
|
| const SkMatrix& viewMatrix,
|
| const SkRRect& outer,
|
| @@ -472,7 +481,6 @@
|
| * the dash information (intervals, count, phase).
|
| */
|
| void drawPath(GrRenderTarget*,
|
| - const GrClip&,
|
| const GrPaint&,
|
| const SkMatrix& viewMatrix,
|
| const SkPath&,
|
| @@ -496,7 +504,6 @@
|
| * number of indices.
|
| */
|
| void drawVertices(GrRenderTarget*,
|
| - const GrClip&,
|
| const GrPaint& paint,
|
| const SkMatrix& viewMatrix,
|
| GrPrimitiveType primitiveType,
|
| @@ -517,7 +524,6 @@
|
| * the dash information (intervals, count, phase).
|
| */
|
| void drawOval(GrRenderTarget*,
|
| - const GrClip&,
|
| const GrPaint& paint,
|
| const SkMatrix& viewMatrix,
|
| const SkRect& oval,
|
| @@ -660,6 +666,59 @@
|
| #endif
|
|
|
| ///////////////////////////////////////////////////////////////////////////
|
| + // Helpers
|
| +
|
| + class AutoClip : public ::SkNoncopyable {
|
| + public:
|
| + // This enum exists to require a caller of the constructor to acknowledge that the clip will
|
| + // initially be wide open. It also could be extended if there are other desirable initial
|
| + // clip states.
|
| + enum InitialClip {
|
| + kWideOpen_InitialClip,
|
| + };
|
| +
|
| + AutoClip(GrContext* context, InitialClip SkDEBUGCODE(initialState))
|
| + : fContext(context) {
|
| + SkASSERT(kWideOpen_InitialClip == initialState);
|
| + fNewClipData.setClipStack(&fNewClipStack);
|
| +
|
| + fOldClip = context->getClip();
|
| + context->setClip(&fNewClipData);
|
| + }
|
| +
|
| + AutoClip(GrContext* context, const SkRect& newClipRect)
|
| + : fContext(context)
|
| + , fNewClipStack(newClipRect) {
|
| + fNewClipData.setClipStack(&fNewClipStack);
|
| +
|
| + fOldClip = fContext->getClip();
|
| + fContext->setClip(&fNewClipData);
|
| + }
|
| +
|
| + ~AutoClip() {
|
| + if (fContext) {
|
| + fContext->setClip(fOldClip);
|
| + }
|
| + }
|
| + private:
|
| + GrContext* fContext;
|
| + const GrClip* fOldClip;
|
| +
|
| + SkClipStack fNewClipStack;
|
| + GrClip fNewClipData;
|
| + };
|
| +
|
| + class AutoWideOpenIdentityDraw {
|
| + public:
|
| + AutoWideOpenIdentityDraw(GrContext* ctx)
|
| + : fAutoClip(ctx, AutoClip::kWideOpen_InitialClip) {
|
| + }
|
| +
|
| + private:
|
| + AutoClip fAutoClip;
|
| + };
|
| +
|
| + ///////////////////////////////////////////////////////////////////////////
|
| // Functions intended for internal use only.
|
| GrGpu* getGpu() { return fGpu; }
|
| const GrGpu* getGpu() const { return fGpu; }
|
| @@ -702,6 +761,7 @@
|
|
|
| private:
|
| GrGpu* fGpu;
|
| + const GrClip* fClip;
|
|
|
| GrResourceCache* fResourceCache;
|
| GrFontCache* fFontCache;
|
| @@ -742,15 +802,10 @@
|
| void setupDrawBuffer();
|
|
|
| class AutoCheckFlush;
|
| - // Sets the paint and returns the target to draw into.
|
| - GrDrawTarget* prepareToDraw(GrPipelineBuilder*,
|
| - GrRenderTarget* rt,
|
| - const GrClip&,
|
| - const GrPaint* paint,
|
| + // Sets the paint and returns the target to draw into. This function is overloaded to either
|
| + // take a GrDrawState, GrPaint, and AutoCheckFlush, or JUST an AutoCheckFlush
|
| + GrDrawTarget* prepareToDraw(GrPipelineBuilder*, GrRenderTarget* rt, const GrPaint* paint,
|
| const AutoCheckFlush*);
|
| -
|
| - // A simpler version of the above which just returns the draw target. Clip is *NOT* set
|
| - GrDrawTarget* prepareToDraw();
|
|
|
| void internalDrawPath(GrDrawTarget*,
|
| GrPipelineBuilder*,
|
|
|