aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrPathRenderer.h
diff options
context:
space:
mode:
authorGravatar robertphillips <robertphillips@google.com>2016-06-03 10:59:20 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-06-03 10:59:20 -0700
commit976f5f0dc5e907d1ca50685fad117bd15d7fc87b (patch)
treee1e1499da0cd5dfb990de560dcc1b6288c26616b /src/gpu/GrPathRenderer.h
parentadf5afa628adb62a0ad451d07ef1442381a0ee20 (diff)
Make GrClipMaskManager stateless and push GrPipelineBuilder construction downstack
This will be followed up with a CL to remove the GrRenderTarget from the GrPipelineBuilder. Split out of: https://codereview.chromium.org/1988923002/ (Declassify GrClipMaskManager and Remove GrRenderTarget and GrDrawTarget from GrPipelineBuilder) GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2035823002 Review-Url: https://codereview.chromium.org/2035823002
Diffstat (limited to 'src/gpu/GrPathRenderer.h')
-rw-r--r--src/gpu/GrPathRenderer.h60
1 files changed, 29 insertions, 31 deletions
diff --git a/src/gpu/GrPathRenderer.h b/src/gpu/GrPathRenderer.h
index 39f9ad24f0..20c6967997 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);
}