Index: src/gpu/GrOvalRenderer.cpp |
diff --git a/src/gpu/GrOvalRenderer.cpp b/src/gpu/GrOvalRenderer.cpp |
index 500fc74b1682518fdf85503b49fbad663fb2cc7b..aab8a5eb88bc5e01fa986143aaf0676706727fb3 100644 |
--- a/src/gpu/GrOvalRenderer.cpp |
+++ b/src/gpu/GrOvalRenderer.cpp |
@@ -78,6 +78,7 @@ public: |
const Attribute* inPosition() const { return fInPosition; } |
const Attribute* inCircleEdge() const { return fInCircleEdge; } |
GrColor color() const { return fColor; } |
+ const SkMatrix& localMatrix() const { return fLocalMatrix; } |
virtual ~CircleEdgeEffect() {} |
const char* name() const override { return "CircleEdge"; } |
@@ -131,9 +132,9 @@ public: |
const GrGLSLCaps&, |
GrProcessorKeyBuilder* b) { |
const BatchTracker& local = bt.cast<BatchTracker>(); |
- const CircleEdgeEffect& circleEffect = gp.cast<CircleEdgeEffect>(); |
- uint16_t key = circleEffect.isStroked() ? 0x1 : 0x0; |
- key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x2 : 0x0; |
+ const CircleEdgeEffect& ce = gp.cast<CircleEdgeEffect>(); |
+ uint16_t key = ce.isStroked() ? 0x1 : 0x0; |
+ key |= local.fUsesLocalCoords && ce.localMatrix().hasPerspective() ? 0x2 : 0x0; |
b->add32(key << 16 | local.fInputColorType); |
} |
@@ -149,6 +150,13 @@ public: |
} |
} |
+ void setTransformData(const GrPrimitiveProcessor& primProc, |
+ const GrGLProgramDataManager& pdman, |
+ int index, |
+ const SkTArray<const GrCoordTransform*, true>& transforms) override { |
+ this->setTransformDataHelper<CircleEdgeEffect>(primProc, pdman, index, transforms); |
+ } |
+ |
private: |
GrColor fColor; |
UniformHandle fColorUniform; |
@@ -174,8 +182,8 @@ public: |
private: |
CircleEdgeEffect(GrColor color, bool stroke, const SkMatrix& localMatrix) |
- : INHERITED(localMatrix) |
- , fColor(color) { |
+ : fColor(color) |
+ , fLocalMatrix(localMatrix) { |
this->initClassID<CircleEdgeEffect>(); |
fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertexAttribType)); |
fInCircleEdge = &this->addVertexAttrib(Attribute("inCircleEdge", |
@@ -190,6 +198,7 @@ private: |
}; |
GrColor fColor; |
+ SkMatrix fLocalMatrix; |
const Attribute* fInPosition; |
const Attribute* fInCircleEdge; |
bool fStroke; |
@@ -234,6 +243,7 @@ public: |
const Attribute* inEllipseOffset() const { return fInEllipseOffset; } |
const Attribute* inEllipseRadii() const { return fInEllipseRadii; } |
GrColor color() const { return fColor; } |
+ const SkMatrix& localMatrix() const { return fLocalMatrix; } |
inline bool isStroked() const { return fStroke; } |
@@ -305,9 +315,9 @@ public: |
const GrGLSLCaps&, |
GrProcessorKeyBuilder* b) { |
const BatchTracker& local = bt.cast<BatchTracker>(); |
- const EllipseEdgeEffect& ellipseEffect = gp.cast<EllipseEdgeEffect>(); |
- uint16_t key = ellipseEffect.isStroked() ? 0x1 : 0x0; |
- key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x2 : 0x0; |
+ const EllipseEdgeEffect& ee = gp.cast<EllipseEdgeEffect>(); |
+ uint16_t key = ee.isStroked() ? 0x1 : 0x0; |
+ key |= local.fUsesLocalCoords && ee.localMatrix().hasPerspective() ? 0x2 : 0x0; |
b->add32(key << 16 | local.fInputColorType); |
} |
@@ -324,6 +334,13 @@ public: |
} |
} |
+ void setTransformData(const GrPrimitiveProcessor& primProc, |
+ const GrGLProgramDataManager& pdman, |
+ int index, |
+ const SkTArray<const GrCoordTransform*, true>& transforms) override { |
+ this->setTransformDataHelper<EllipseEdgeEffect>(primProc, pdman, index, transforms); |
+ } |
+ |
private: |
GrColor fColor; |
UniformHandle fColorUniform; |
@@ -350,8 +367,8 @@ public: |
private: |
EllipseEdgeEffect(GrColor color, bool stroke, const SkMatrix& localMatrix) |
- : INHERITED(localMatrix) |
- , fColor(color) { |
+ : fColor(color) |
+ , fLocalMatrix(localMatrix) { |
this->initClassID<EllipseEdgeEffect>(); |
fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertexAttribType)); |
fInEllipseOffset = &this->addVertexAttrib(Attribute("inEllipseOffset", |
@@ -371,6 +388,7 @@ private: |
const Attribute* fInEllipseOffset; |
const Attribute* fInEllipseRadii; |
GrColor fColor; |
+ SkMatrix fLocalMatrix; |
bool fStroke; |
GR_DECLARE_GEOMETRY_PROCESSOR_TEST; |
@@ -454,7 +472,7 @@ public: |
// emit transforms |
this->emitTransforms(args.fPB, gpArgs->fPositionVar, ee.inPosition()->fName, |
- ee.localMatrix(), args.fTransformsIn, args.fTransformsOut); |
+ args.fTransformsIn, args.fTransformsOut); |
GrGLFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); |
SkAssertResult(fsBuilder->enableFeature( |
@@ -504,7 +522,6 @@ public: |
const BatchTracker& local = bt.cast<BatchTracker>(); |
const DIEllipseEdgeEffect& ellipseEffect = gp.cast<DIEllipseEdgeEffect>(); |
uint16_t key = ellipseEffect.getMode(); |
- key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x1 << 8 : 0x0; |
key |= ComputePosKey(ellipseEffect.viewMatrix()) << 9; |
b->add32(key << 16 | local.fInputColorType); |
} |