| Index: src/gpu/GrOvalRenderer.cpp
|
| diff --git a/src/gpu/GrOvalRenderer.cpp b/src/gpu/GrOvalRenderer.cpp
|
| index 2f8af8d175b6bac7e9696c7bdf8d53d7688b46ed..a35d70859a4b167ababf6a333869e2353f9c1b71 100644
|
| --- a/src/gpu/GrOvalRenderer.cpp
|
| +++ b/src/gpu/GrOvalRenderer.cpp
|
| @@ -83,7 +83,7 @@ public:
|
| const GrBatchTracker&)
|
| : fColor(GrColor_ILLEGAL) {}
|
|
|
| - void onEmitCode(EmitArgs& args) SK_OVERRIDE {
|
| + void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) SK_OVERRIDE{
|
| const CircleEdgeEffect& ce = args.fGP.cast<CircleEdgeEffect>();
|
| GrGLGPBuilder* pb = args.fPB;
|
| const BatchTracker& local = args.fBT.cast<BatchTracker>();
|
| @@ -104,11 +104,11 @@ public:
|
| this->addUniformViewMatrix(pb);
|
|
|
| // Setup position
|
| - vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", this->position(), this->uViewM(),
|
| - ce.inPosition()->fName);
|
| + SetupPosition(vsBuilder, gpArgs, ce.inPosition()->fName,
|
| + ce.viewMatrix(), this->uViewM());
|
|
|
| // emit transforms
|
| - this->emitTransforms(args.fPB, this->position(), ce.inPosition()->fName,
|
| + this->emitTransforms(args.fPB, gpArgs->fPositionVar, ce.inPosition()->fName,
|
| ce.localMatrix(), args.fTransformsIn, args.fTransformsOut);;
|
|
|
| GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
|
| @@ -123,14 +123,15 @@ public:
|
| fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage);
|
| }
|
|
|
| - static void GenKey(const GrGeometryProcessor& processor,
|
| + static void GenKey(const GrGeometryProcessor& gp,
|
| const GrBatchTracker& bt,
|
| const GrGLCaps&,
|
| GrProcessorKeyBuilder* b) {
|
| const BatchTracker& local = bt.cast<BatchTracker>();
|
| - const CircleEdgeEffect& circleEffect = processor.cast<CircleEdgeEffect>();
|
| + const CircleEdgeEffect& circleEffect = gp.cast<CircleEdgeEffect>();
|
| uint16_t key = circleEffect.isStroked() ? 0x1 : 0x0;
|
| - key |= local.fUsesLocalCoords && processor.localMatrix().hasPerspective() ? 0x2 : 0x0;
|
| + key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x2 : 0x0;
|
| + key |= ComputePosKey(gp.viewMatrix()) << 2;
|
| b->add32(key << 16 | local.fInputColorType);
|
| }
|
|
|
| @@ -259,7 +260,7 @@ public:
|
| const GrBatchTracker&)
|
| : fColor(GrColor_ILLEGAL) {}
|
|
|
| - void onEmitCode(EmitArgs& args) SK_OVERRIDE {
|
| + void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) SK_OVERRIDE{
|
| const EllipseEdgeEffect& ee = args.fGP.cast<EllipseEdgeEffect>();
|
| GrGLGPBuilder* pb = args.fPB;
|
| const BatchTracker& local = args.fBT.cast<BatchTracker>();
|
| @@ -286,11 +287,11 @@ public:
|
| this->addUniformViewMatrix(pb);
|
|
|
| // Setup position
|
| - vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", this->position(), this->uViewM(),
|
| - ee.inPosition()->fName);
|
| + SetupPosition(vsBuilder, gpArgs, ee.inPosition()->fName,
|
| + ee.viewMatrix(), this->uViewM());
|
|
|
| // emit transforms
|
| - this->emitTransforms(args.fPB, this->position(), ee.inPosition()->fName,
|
| + this->emitTransforms(args.fPB, gpArgs->fPositionVar, ee.inPosition()->fName,
|
| ee.localMatrix(), args.fTransformsIn, args.fTransformsOut);
|
|
|
| // for outer curve
|
| @@ -320,14 +321,15 @@ public:
|
| fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage);
|
| }
|
|
|
| - static void GenKey(const GrGeometryProcessor& processor,
|
| + static void GenKey(const GrGeometryProcessor& gp,
|
| const GrBatchTracker& bt,
|
| const GrGLCaps&,
|
| GrProcessorKeyBuilder* b) {
|
| const BatchTracker& local = bt.cast<BatchTracker>();
|
| - const EllipseEdgeEffect& ellipseEffect = processor.cast<EllipseEdgeEffect>();
|
| + const EllipseEdgeEffect& ellipseEffect = gp.cast<EllipseEdgeEffect>();
|
| uint16_t key = ellipseEffect.isStroked() ? 0x1 : 0x0;
|
| - key |= local.fUsesLocalCoords && processor.localMatrix().hasPerspective() ? 0x2 : 0x0;
|
| + key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x2 : 0x0;
|
| + key |= ComputePosKey(gp.viewMatrix()) << 2;
|
| b->add32(key << 16 | local.fInputColorType);
|
| }
|
|
|
| @@ -463,7 +465,7 @@ public:
|
| const GrBatchTracker&)
|
| : fColor(GrColor_ILLEGAL) {}
|
|
|
| - void onEmitCode(EmitArgs& args) SK_OVERRIDE {
|
| + void onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) SK_OVERRIDE{
|
| const DIEllipseEdgeEffect& ee = args.fGP.cast<DIEllipseEdgeEffect>();
|
| GrGLGPBuilder* pb = args.fPB;
|
| const BatchTracker& local = args.fBT.cast<BatchTracker>();
|
| @@ -490,11 +492,11 @@ public:
|
| this->addUniformViewMatrix(pb);
|
|
|
| // Setup position
|
| - vsBuilder->codeAppendf("%s = %s * vec3(%s, 1);", this->position(), this->uViewM(),
|
| - ee.inPosition()->fName);
|
| + SetupPosition(vsBuilder, gpArgs, ee.inPosition()->fName,
|
| + ee.viewMatrix(), this->uViewM());
|
|
|
| // emit transforms
|
| - this->emitTransforms(args.fPB, this->position(), ee.inPosition()->fName,
|
| + this->emitTransforms(args.fPB, gpArgs->fPositionVar, ee.inPosition()->fName,
|
| ee.localMatrix(), args.fTransformsIn, args.fTransformsOut);
|
|
|
| GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder();
|
| @@ -538,15 +540,15 @@ public:
|
| fsBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage);
|
| }
|
|
|
| - static void GenKey(const GrGeometryProcessor& processor,
|
| + static void GenKey(const GrGeometryProcessor& gp,
|
| const GrBatchTracker& bt,
|
| const GrGLCaps&,
|
| GrProcessorKeyBuilder* b) {
|
| const BatchTracker& local = bt.cast<BatchTracker>();
|
| - const DIEllipseEdgeEffect& ellipseEffect = processor.cast<DIEllipseEdgeEffect>();
|
| + const DIEllipseEdgeEffect& ellipseEffect = gp.cast<DIEllipseEdgeEffect>();
|
| uint16_t key = ellipseEffect.getMode();
|
| - key |= local.fUsesLocalCoords && processor.localMatrix().hasPerspective() ? 0x1 << 8 :
|
| - 0x0;
|
| + key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x1 << 8 : 0x0;
|
| + key |= ComputePosKey(gp.viewMatrix()) << 9;
|
| b->add32(key << 16 | local.fInputColorType);
|
| }
|
|
|
|
|