| Index: src/gpu/GrDrawTarget.h
|
| diff --git a/src/gpu/GrDrawTarget.h b/src/gpu/GrDrawTarget.h
|
| index 63d637803f02b6f6a5f493a09d74a5f94f4c7698..cae1552a3df2ac5b0acd26d18f54abdc39bd3905 100644
|
| --- a/src/gpu/GrDrawTarget.h
|
| +++ b/src/gpu/GrDrawTarget.h
|
| @@ -37,7 +37,7 @@ class GrDrawBatch;
|
| class GrDrawPathBatchBase;
|
| class GrPathRangeDraw;
|
|
|
| -class GrDrawTarget : public SkRefCnt {
|
| +class GrDrawTarget final : public SkRefCnt {
|
| public:
|
| // The context may not be fully constructed and should not be used during GrDrawTarget
|
| // construction.
|
| @@ -59,7 +59,7 @@ public:
|
| /**
|
| * Gets the capabilities of the draw target.
|
| */
|
| - const GrCaps* caps() const { return fCaps; }
|
| + const GrCaps* caps() const { return fGpu->caps(); }
|
|
|
| void drawBatch(const GrPipelineBuilder&, GrDrawBatch*);
|
|
|
| @@ -172,20 +172,35 @@ public:
|
| /**
|
| * Release any resources that are cached but not currently in use. This
|
| * is intended to give an application some recourse when resources are low.
|
| + * TODO: Stop holding on to resources.
|
| */
|
| - virtual void purgeResources() {};
|
| + virtual void purgeResources() {
|
| + // The clip mask manager can rebuild all its clip masks so just get rid of them all.
|
| + fClipMaskManager->purgeResources();
|
| + };
|
|
|
| bool programUnitTest(GrContext* owner, int maxStages);
|
|
|
| -protected:
|
| - GrGpu* getGpu() { return fGpu; }
|
| - const GrGpu* getGpu() const { return fGpu; }
|
| + /** Provides access to internal functions to GrClipMaskManager without friending all of
|
| + GrDrawTarget to CMM. */
|
| + class CMMAccess {
|
| + public:
|
| + CMMAccess(GrDrawTarget* drawTarget) : fDrawTarget(drawTarget) {}
|
| + private:
|
| + void clearStencilClip(const SkIRect& rect, bool insideClip, GrRenderTarget* rt) const {
|
| + fDrawTarget->clearStencilClip(rect, insideClip, rt);
|
| + }
|
|
|
| - void recordBatch(GrBatch*);
|
| + GrContext* context() const { return fDrawTarget->fContext; }
|
| + GrResourceProvider* resourceProvider() const { return fDrawTarget->fResourceProvider; }
|
| + GrDrawTarget* fDrawTarget;
|
| + friend class GrClipMaskManager;
|
| + };
|
|
|
| -private:
|
| - SkSTArray<256, SkAutoTUnref<GrBatch>, true> fBatches;
|
| + const CMMAccess cmmAccess() { return CMMAccess(this); }
|
|
|
| +private:
|
| + void recordBatch(GrBatch*);
|
| bool installPipelineInDrawBatch(const GrPipelineBuilder* pipelineBuilder,
|
| const GrScissorState* scissor,
|
| GrDrawBatch* batch);
|
| @@ -205,63 +220,25 @@ private:
|
| void getPathStencilSettingsForFilltype(GrPathRendering::FillType,
|
| const GrStencilAttachment*,
|
| GrStencilSettings*);
|
| - virtual GrClipMaskManager* clipMaskManager() = 0;
|
| - virtual bool setupClip(const GrPipelineBuilder&,
|
| + bool setupClip(const GrPipelineBuilder&,
|
| GrPipelineBuilder::AutoRestoreFragmentProcessorState*,
|
| GrPipelineBuilder::AutoRestoreStencil*,
|
| GrScissorState*,
|
| - const SkRect* devBounds) = 0;
|
| + const SkRect* devBounds);
|
|
|
| - GrGpu* fGpu;
|
| - const GrCaps* fCaps;
|
| - GrResourceProvider* fResourceProvider;
|
| - bool fFlushing;
|
| - GrBatchToken fLastFlushToken;
|
| -
|
| - typedef SkRefCnt INHERITED;
|
| -};
|
| -
|
| -/*
|
| - * This class is JUST for clip mask manager. Everyone else should just use draw target above.
|
| - */
|
| -class GrClipTarget : public GrDrawTarget {
|
| -public:
|
| - GrClipTarget(GrContext*);
|
| -
|
| - /* Clip mask manager needs access to the context.
|
| - * TODO we only need a very small subset of context in the CMM.
|
| - */
|
| - GrContext* getContext() { return fContext; }
|
| - const GrContext* getContext() const { return fContext; }
|
| -
|
| - /**
|
| - * Clip Mask Manager(and no one else) needs to clear private stencil bits.
|
| - * ClipTarget subclass sets clip bit in the stencil buffer. The subclass
|
| - * is free to clear the remaining bits to zero if masked clears are more
|
| - * expensive than clearing all bits.
|
| - */
|
| + // Used only by CMM.
|
| void clearStencilClip(const SkIRect&, bool insideClip, GrRenderTarget*);
|
|
|
| - /**
|
| - * Release any resources that are cached but not currently in use. This
|
| - * is intended to give an application some recourse when resources are low.
|
| - */
|
| - void purgeResources() override;
|
| -
|
| -protected:
|
| - SkAutoTDelete<GrClipMaskManager> fClipMaskManager;
|
| - GrContext* fContext;
|
| -
|
| -private:
|
| - GrClipMaskManager* clipMaskManager() override { return fClipMaskManager; }
|
| -
|
| - bool setupClip(const GrPipelineBuilder&,
|
| - GrPipelineBuilder::AutoRestoreFragmentProcessorState*,
|
| - GrPipelineBuilder::AutoRestoreStencil*,
|
| - GrScissorState* scissorState,
|
| - const SkRect* devBounds) override;
|
| + SkSTArray<256, SkAutoTUnref<GrBatch>, true> fBatches;
|
| + SkAutoTDelete<GrClipMaskManager> fClipMaskManager;
|
| + // The context is only in service of the clip mask manager, remove once CMM doesn't need this.
|
| + GrContext* fContext;
|
| + GrGpu* fGpu;
|
| + GrResourceProvider* fResourceProvider;
|
| + bool fFlushing;
|
| + GrBatchToken fLastFlushToken;
|
|
|
| - typedef GrDrawTarget INHERITED;
|
| + typedef SkRefCnt INHERITED;
|
| };
|
|
|
| #endif
|
|
|