Index: src/gpu/GrPathRenderer.h |
diff --git a/src/gpu/GrPathRenderer.h b/src/gpu/GrPathRenderer.h |
index 39f9ad24f0f72401d2d5f910b62361ad96932def..20c6967997b279046f59fb9fe37fe35d3bb63fdf 100644 |
--- a/src/gpu/GrPathRenderer.h |
+++ b/src/gpu/GrPathRenderer.h |
@@ -8,13 +8,16 @@ |
#ifndef GrPathRenderer_DEFINED |
#define GrPathRenderer_DEFINED |
-#include "GrDrawTarget.h" |
+#include "GrDrawContext.h" |
+#include "GrPaint.h" |
+#include "GrResourceProvider.h" |
#include "GrStyle.h" |
#include "SkDrawProcs.h" |
#include "SkTArray.h" |
class SkPath; |
+class GrFixedClip; |
struct GrPoint; |
/** |
@@ -120,9 +123,11 @@ public: |
* fGammaCorrect true if gamma-correct rendering is to be used. |
*/ |
struct DrawPathArgs { |
- GrDrawTarget* fTarget; |
GrResourceProvider* fResourceProvider; |
- GrPipelineBuilder* fPipelineBuilder; |
+ const GrPaint* fPaint; |
+ const GrUserStencilSettings*fUserStencilSettings; |
+ |
+ GrDrawContext* fDrawContext; |
const GrClip* fClip; |
GrColor fColor; |
const SkMatrix* fViewMatrix; |
@@ -132,9 +137,10 @@ public: |
bool fGammaCorrect; |
void validate() const { |
- SkASSERT(fTarget); |
SkASSERT(fResourceProvider); |
- SkASSERT(fPipelineBuilder); |
+ SkASSERT(fPaint); |
+ SkASSERT(fUserStencilSettings); |
+ SkASSERT(fDrawContext); |
SkASSERT(fClip); |
SkASSERT(fViewMatrix); |
SkASSERT(fPath); |
@@ -151,17 +157,16 @@ public: |
SkDEBUGCODE(args.validate();) |
#ifdef SK_DEBUG |
CanDrawPathArgs canArgs; |
- canArgs.fShaderCaps = args.fTarget->caps()->shaderCaps(); |
+ canArgs.fShaderCaps = args.fResourceProvider->caps()->shaderCaps(); |
canArgs.fViewMatrix = args.fViewMatrix; |
canArgs.fPath = args.fPath; |
canArgs.fStyle = args.fStyle; |
canArgs.fAntiAlias = args.fAntiAlias; |
- canArgs.fHasUserStencilSettings = args.fPipelineBuilder->hasUserStencilSettings(); |
- canArgs.fIsStencilBufferMSAA = |
- args.fPipelineBuilder->getRenderTarget()->isStencilBufferMultisampled(); |
+ canArgs.fHasUserStencilSettings = !args.fUserStencilSettings->isUnused(); |
+ canArgs.fIsStencilBufferMSAA = args.fDrawContext->isStencilBufferMultisampled(); |
SkASSERT(this->canDrawPath(canArgs)); |
- if (args.fPipelineBuilder->hasUserStencilSettings()) { |
+ if (!args.fUserStencilSettings->isUnused()) { |
SkASSERT(kNoRestriction_StencilSupport == this->getStencilSupport(*args.fPath)); |
SkASSERT(args.fStyle->isSimpleFill()); |
} |
@@ -171,24 +176,23 @@ public: |
/* Args to stencilPath(). |
* |
- * fTarget The target that the path will be rendered to. |
* fResourceProvider The resource provider for creating gpu resources to render the path |
- * fPipelineBuilder The pipeline builder. |
+ * fDrawContext The target of the draws |
* fViewMatrix Matrix applied to the path. |
* fPath The path to draw. |
+ * fIsAA Is the path to be drawn AA (only set when MSAA is available) |
*/ |
struct StencilPathArgs { |
- GrDrawTarget* fTarget; |
GrResourceProvider* fResourceProvider; |
- GrPipelineBuilder* fPipelineBuilder; |
- const GrClip* fClip; |
+ GrDrawContext* fDrawContext; |
+ const GrFixedClip* fClip; |
const SkMatrix* fViewMatrix; |
const SkPath* fPath; |
+ bool fIsAA; |
void validate() const { |
- SkASSERT(fTarget); |
SkASSERT(fResourceProvider); |
- SkASSERT(fPipelineBuilder); |
+ SkASSERT(fDrawContext); |
SkASSERT(fViewMatrix); |
SkASSERT(fPath); |
SkASSERT(!fPath->isEmpty()); |
@@ -232,14 +236,6 @@ protected: |
const SkMatrix& matrix, |
SkRect* bounds); |
- // Helper version that gets the dev width and height from a GrSurface. |
- static void GetPathDevBounds(const SkPath& path, |
- const GrSurface* device, |
- const SkMatrix& matrix, |
- SkRect* bounds) { |
- GetPathDevBounds(path, device->width(), device->height(), matrix, bounds); |
- } |
- |
private: |
/** |
* Subclass overrides if it has any limitations of stenciling support. |
@@ -272,17 +268,19 @@ private: |
GrUserStencilOp::kReplace, |
0xffff>() |
); |
- args.fPipelineBuilder->setUserStencil(&kIncrementStencil); |
- args.fPipelineBuilder->setDisableColorXPFactory(); |
+ |
+ GrPaint paint; |
+ |
DrawPathArgs drawArgs; |
- drawArgs.fTarget = args.fTarget; |
drawArgs.fResourceProvider = args.fResourceProvider; |
- drawArgs.fPipelineBuilder = args.fPipelineBuilder; |
- drawArgs.fColor = 0xFFFFFFFF; |
+ drawArgs.fPaint = &paint; |
+ drawArgs.fUserStencilSettings = &kIncrementStencil; |
+ drawArgs.fDrawContext = args.fDrawContext; |
+ drawArgs.fColor = GrColor_WHITE; |
drawArgs.fViewMatrix = args.fViewMatrix; |
drawArgs.fPath = args.fPath; |
drawArgs.fStyle = &GrStyle::SimpleFill(); |
- drawArgs.fAntiAlias = false; |
+ drawArgs.fAntiAlias = false; // In this case the MSAA handles the AA so we want to draw BW |
drawArgs.fGammaCorrect = false; |
this->drawPath(drawArgs); |
} |