Index: src/gpu/GrDrawTarget.h |
diff --git a/src/gpu/GrDrawTarget.h b/src/gpu/GrDrawTarget.h |
index 1b6651716c3f2f0fcc54f58f8f8159b01e63ca32..a26e02534e9030fa2e587488da6f2370e91eaeff 100644 |
--- a/src/gpu/GrDrawTarget.h |
+++ b/src/gpu/GrDrawTarget.h |
@@ -31,6 +31,7 @@ class GrClipData; |
class GrDrawTargetCaps; |
class GrPath; |
class GrPathRange; |
+class GrPipeline; |
class GrDrawTarget : public SkRefCnt { |
public: |
@@ -678,9 +679,36 @@ protected: |
// but couldn't be made. Otherwise, returns true. This method needs to be protected because it |
// needs to be accessed by GLPrograms to setup a correct drawstate |
bool setupDstReadIfNecessary(const GrPipelineBuilder&, |
+ const GrProcOptInfo& colorPOI, |
+ const GrProcOptInfo& coveragePOI, |
GrDeviceCoordTexture* dstCopy, |
const SkRect* drawBounds); |
+ struct PipelineInfo { |
+ PipelineInfo(GrPipelineBuilder* pipelineBuilder, GrScissorState* scissor, |
+ const GrPrimitiveProcessor* primProc, const SkRect* devBounds, |
+ GrDrawTarget* target); |
+ |
+ PipelineInfo(GrPipelineBuilder* pipelineBuilder, GrScissorState* scissor, |
+ const GrBatch* batch, const SkRect* devBounds, GrDrawTarget* target); |
+ |
+ bool willBlendWithDst(const GrPrimitiveProcessor* primProc) const { |
+ return fPipelineBuilder->willBlendWithDst(primProc); |
+ } |
+ private: |
+ friend class GrDrawTarget; |
+ |
+ bool mustSkipDraw() const { return (NULL == fPipelineBuilder); } |
+ |
+ GrPipelineBuilder* fPipelineBuilder; |
+ GrScissorState* fScissor; |
+ GrProcOptInfo fColorPOI; |
+ GrProcOptInfo fCoveragePOI; |
+ GrDeviceCoordTexture fDstCopy; |
+ }; |
+ |
+ void setupPipeline(const PipelineInfo& pipelineInfo, GrPipeline* pipeline); |
+ |
private: |
/** |
* This will be called before allocating a texture as a dst for copySurface. This function |
@@ -717,14 +745,8 @@ private: |
virtual void geometrySourceWillPush() = 0; |
virtual void geometrySourceWillPop(const GeometrySrcState& restoredState) = 0; |
// subclass called to perform drawing |
- virtual void onDraw(const GrPipelineBuilder&, |
- const GrGeometryProcessor*, |
- const DrawInfo&, |
- const GrScissorState&) = 0; |
- virtual void onDrawBatch(GrBatch*, |
- const GrPipelineBuilder&, |
- const GrScissorState&, |
- const SkRect* devBounds) = 0; |
+ virtual void onDraw(const GrGeometryProcessor*, const DrawInfo&, const PipelineInfo&) = 0; |
+ virtual void onDrawBatch(GrBatch*, const PipelineInfo&) = 0; |
// TODO copy in order drawbuffer onDrawRect to here |
virtual void onDrawRect(GrPipelineBuilder*, |
GrColor color, |
@@ -738,23 +760,19 @@ private: |
const GrPath*, |
const GrScissorState&, |
const GrStencilSettings&) = 0; |
- virtual void onDrawPath(const GrPipelineBuilder&, |
- const GrPathProcessor*, |
+ virtual void onDrawPath(const GrPathProcessor*, |
const GrPath*, |
- const GrScissorState&, |
const GrStencilSettings&, |
- const SkRect* devBounds) = 0; |
- virtual void onDrawPaths(const GrPipelineBuilder&, |
- const GrPathProcessor*, |
+ const PipelineInfo&) = 0; |
+ virtual void onDrawPaths(const GrPathProcessor*, |
const GrPathRange*, |
const void* indices, |
PathIndexType, |
const float transformValues[], |
PathTransformType, |
int count, |
- const GrScissorState&, |
const GrStencilSettings&, |
- const SkRect* devBounds) = 0; |
+ const PipelineInfo&) = 0; |
virtual void onClear(const SkIRect* rect, GrColor color, bool canIgnoreRect, |
GrRenderTarget* renderTarget) = 0; |