diff options
Diffstat (limited to 'src/gpu/effects')
-rw-r--r-- | src/gpu/effects/GrBezierEffect.cpp | 40 | ||||
-rw-r--r-- | src/gpu/effects/GrBitmapTextGeoProc.cpp | 15 | ||||
-rw-r--r-- | src/gpu/effects/GrDashingEffect.cpp | 37 | ||||
-rw-r--r-- | src/gpu/effects/GrDistanceFieldGeoProc.cpp | 22 |
4 files changed, 40 insertions, 74 deletions
diff --git a/src/gpu/effects/GrBezierEffect.cpp b/src/gpu/effects/GrBezierEffect.cpp index 1894192d58..798695d4ec 100644 --- a/src/gpu/effects/GrBezierEffect.cpp +++ b/src/gpu/effects/GrBezierEffect.cpp @@ -25,8 +25,8 @@ public: const GrGLSLCaps&, GrProcessorKeyBuilder*); - void setData(const GrGLSLProgramDataManager& pdman, - const GrPrimitiveProcessor& primProc) override { + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, + FPCoordTransformIter&& transformIter) override { const GrConicEffect& ce = primProc.cast<GrConicEffect>(); if (!ce.viewMatrix().isIdentity() && !fViewMatrix.cheapEqualTo(ce.viewMatrix())) { @@ -47,14 +47,7 @@ public: pdman.set1f(fCoverageScaleUniform, GrNormalizeByteToFloat(ce.coverageScale())); fCoverageScale = ce.coverageScale(); } - } - - void setTransformData(const GrPrimitiveProcessor& primProc, - const GrGLSLProgramDataManager& pdman, - int index, - const SkTArray<const GrCoordTransform*, true>& transforms) override { - this->setTransformDataHelper(primProc.cast<GrConicEffect>().localMatrix(), pdman, index, - transforms); + this->setTransformDataHelper(ce.localMatrix(), pdman, &transformIter); } private: @@ -109,8 +102,7 @@ void GrGLConicEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { gpArgs->fPositionVar, gp.inPosition()->fName, gp.localMatrix(), - args.fTransformsIn, - args.fTransformsOut); + args.fFPCoordTransformHandler); // TODO: this precision check should actually be a check on the number of bits // high and medium provide and the selection of the lowest level that suffices. @@ -299,8 +291,8 @@ public: const GrGLSLCaps&, GrProcessorKeyBuilder*); - void setData(const GrGLSLProgramDataManager& pdman, - const GrPrimitiveProcessor& primProc) override { + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, + FPCoordTransformIter&& transformIter) override { const GrQuadEffect& qe = primProc.cast<GrQuadEffect>(); if (!qe.viewMatrix().isIdentity() && !fViewMatrix.cheapEqualTo(qe.viewMatrix())) { @@ -321,14 +313,7 @@ public: pdman.set1f(fCoverageScaleUniform, GrNormalizeByteToFloat(qe.coverageScale())); fCoverageScale = qe.coverageScale(); } - } - - void setTransformData(const GrPrimitiveProcessor& primProc, - const GrGLSLProgramDataManager& pdman, - int index, - const SkTArray<const GrCoordTransform*, true>& transforms) override { - this->setTransformDataHelper(primProc.cast<GrQuadEffect>().localMatrix(), pdman, index, - transforms); + this->setTransformDataHelper(qe.localMatrix(), pdman, &transformIter); } private: @@ -383,8 +368,7 @@ void GrGLQuadEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { gpArgs->fPositionVar, gp.inPosition()->fName, gp.localMatrix(), - args.fTransformsIn, - args.fTransformsOut); + args.fFPCoordTransformHandler); fragBuilder->codeAppendf("float edgeAlpha;"); @@ -516,8 +500,8 @@ public: const GrGLSLCaps&, GrProcessorKeyBuilder*); - void setData(const GrGLSLProgramDataManager& pdman, - const GrPrimitiveProcessor& primProc) override { + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, + FPCoordTransformIter&& transformIter) override { const GrCubicEffect& ce = primProc.cast<GrCubicEffect>(); if (!ce.viewMatrix().isIdentity() && !fViewMatrix.cheapEqualTo(ce.viewMatrix())) { @@ -533,6 +517,7 @@ public: pdman.set4fv(fColorUniform, 1, c); fColor = ce.color(); } + this->setTransformDataHelper(SkMatrix::I(), pdman, &transformIter); } private: @@ -584,8 +569,7 @@ void GrGLCubicEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { uniformHandler, gpArgs->fPositionVar, gp.inPosition()->fName, - args.fTransformsIn, - args.fTransformsOut); + args.fFPCoordTransformHandler); GrGLSLShaderVar edgeAlpha("edgeAlpha", kFloat_GrSLType, 0, kHigh_GrSLPrecision); diff --git a/src/gpu/effects/GrBitmapTextGeoProc.cpp b/src/gpu/effects/GrBitmapTextGeoProc.cpp index 20a4e937c0..7f5366363f 100644 --- a/src/gpu/effects/GrBitmapTextGeoProc.cpp +++ b/src/gpu/effects/GrBitmapTextGeoProc.cpp @@ -60,8 +60,7 @@ public: gpArgs->fPositionVar, cte.inPosition()->fName, cte.localMatrix(), - args.fTransformsIn, - args.fTransformsOut); + args.fFPCoordTransformHandler); if (cte.maskFormat() == kARGB_GrMaskFormat) { fragBuilder->codeAppendf("%s = ", args.fOutputColor); @@ -84,7 +83,8 @@ public: } } - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& gp) override { + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& gp, + FPCoordTransformIter&& transformIter) override { const GrBitmapTextGeoProc& btgp = gp.cast<GrBitmapTextGeoProc>(); if (btgp.color() != fColor && !btgp.hasVertexColor()) { float c[4]; @@ -92,14 +92,7 @@ public: pdman.set4fv(fColorUniform, 1, c); fColor = btgp.color(); } - } - - void setTransformData(const GrPrimitiveProcessor& primProc, - const GrGLSLProgramDataManager& pdman, - int index, - const SkTArray<const GrCoordTransform*, true>& transforms) override { - this->setTransformDataHelper(primProc.cast<GrBitmapTextGeoProc>().localMatrix(), pdman, - index, transforms); + this->setTransformDataHelper(btgp.localMatrix(), pdman, &transformIter); } static inline void GenKey(const GrGeometryProcessor& proc, diff --git a/src/gpu/effects/GrDashingEffect.cpp b/src/gpu/effects/GrDashingEffect.cpp index 167cefa47e..9ce725b7e6 100644 --- a/src/gpu/effects/GrDashingEffect.cpp +++ b/src/gpu/effects/GrDashingEffect.cpp @@ -817,16 +817,8 @@ public: const GrGLSLCaps&, GrProcessorKeyBuilder*); - void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&) override; - - void setTransformData(const GrPrimitiveProcessor& primProc, - const GrGLSLProgramDataManager& pdman, - int index, - const SkTArray<const GrCoordTransform*, true>& transforms) override { - this->setTransformDataHelper(primProc.cast<DashingCircleEffect>().localMatrix(), pdman, - index, transforms); - } - + void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&, + FPCoordTransformIter&& transformIter) override; private: UniformHandle fParamUniform; UniformHandle fColorUniform; @@ -879,8 +871,7 @@ void GLDashingCircleEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { gpArgs->fPositionVar, dce.inPosition()->fName, dce.localMatrix(), - args.fTransformsIn, - args.fTransformsOut); + args.fFPCoordTransformHandler); // transforms all points so that we can compare them to our test circle fragBuilder->codeAppendf("float xShifted = %s.x - floor(%s.x / %s.z) * %s.z;", @@ -901,7 +892,8 @@ void GLDashingCircleEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { } void GLDashingCircleEffect::setData(const GrGLSLProgramDataManager& pdman, - const GrPrimitiveProcessor& processor) { + const GrPrimitiveProcessor& processor, + FPCoordTransformIter&& transformIter) { const DashingCircleEffect& dce = processor.cast<DashingCircleEffect>(); if (dce.color() != fColor) { float c[4]; @@ -909,6 +901,7 @@ void GLDashingCircleEffect::setData(const GrGLSLProgramDataManager& pdman, pdman.set4fv(fColorUniform, 1, c); fColor = dce.color(); } + this->setTransformDataHelper(dce.localMatrix(), pdman, &transformIter); } void GLDashingCircleEffect::GenKey(const GrGeometryProcessor& gp, @@ -1037,15 +1030,8 @@ public: const GrGLSLCaps&, GrProcessorKeyBuilder*); - void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&) override; - - void setTransformData(const GrPrimitiveProcessor& primProc, - const GrGLSLProgramDataManager& pdman, - int index, - const SkTArray<const GrCoordTransform*, true>& transforms) override { - this->setTransformDataHelper(primProc.cast<DashingLineEffect>().localMatrix(), pdman, index, - transforms); - } + void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&, + FPCoordTransformIter&& iter) override; private: GrColor fColor; @@ -1094,8 +1080,7 @@ void GLDashingLineEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { gpArgs->fPositionVar, de.inPosition()->fName, de.localMatrix(), - args.fTransformsIn, - args.fTransformsOut); + args.fFPCoordTransformHandler); // transforms all points so that we can compare them to our test rect fragBuilder->codeAppendf("float xShifted = %s.x - floor(%s.x / %s.z) * %s.z;", @@ -1134,7 +1119,8 @@ void GLDashingLineEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { } void GLDashingLineEffect::setData(const GrGLSLProgramDataManager& pdman, - const GrPrimitiveProcessor& processor) { + const GrPrimitiveProcessor& processor, + FPCoordTransformIter&& transformIter) { const DashingLineEffect& de = processor.cast<DashingLineEffect>(); if (de.color() != fColor) { float c[4]; @@ -1142,6 +1128,7 @@ void GLDashingLineEffect::setData(const GrGLSLProgramDataManager& pdman, pdman.set4fv(fColorUniform, 1, c); fColor = de.color(); } + this->setTransformDataHelper(de.localMatrix(), pdman, &transformIter); } void GLDashingLineEffect::GenKey(const GrGeometryProcessor& gp, diff --git a/src/gpu/effects/GrDistanceFieldGeoProc.cpp b/src/gpu/effects/GrDistanceFieldGeoProc.cpp index c74c5cec80..5404b0c805 100644 --- a/src/gpu/effects/GrDistanceFieldGeoProc.cpp +++ b/src/gpu/effects/GrDistanceFieldGeoProc.cpp @@ -73,8 +73,7 @@ public: uniformHandler, gpArgs->fPositionVar, dfTexEffect.inPosition()->fName, - args.fTransformsIn, - args.fTransformsOut); + args.fFPCoordTransformHandler); // add varyings GrGLSLVertToFrag recipScale(kFloat_GrSLType); @@ -179,7 +178,8 @@ public: fragBuilder->codeAppendf("%s = vec4(val);", args.fOutputCoverage); } - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc) override { + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc, + FPCoordTransformIter&& transformIter) override { #ifdef SK_GAMMA_APPLY_TO_A8 const GrDistanceFieldA8TextGeoProc& dfTexEffect = proc.cast<GrDistanceFieldA8TextGeoProc>(); float distanceAdjust = dfTexEffect.getDistanceAdjust(); @@ -196,6 +196,7 @@ public: GrGLSLGetMatrix<3>(viewMatrix, fViewMatrix); pdman.setMatrix3f(fViewMatrixUniform, viewMatrix); } + this->setTransformDataHelper(SkMatrix::I(), pdman, &transformIter); } static inline void GenKey(const GrGeometryProcessor& gp, @@ -345,8 +346,7 @@ public: uniformHandler, gpArgs->fPositionVar, dfTexEffect.inPosition()->fName, - args.fTransformsIn, - args.fTransformsOut); + args.fFPCoordTransformHandler); const char* textureSizeUniName = nullptr; fTextureSizeUni = uniformHandler->addUniform(kFragment_GrShaderFlag, @@ -433,7 +433,8 @@ public: fragBuilder->codeAppendf("%s = vec4(val);", args.fOutputCoverage); } - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc) override { + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc, + FPCoordTransformIter&& transformIter) override { SkASSERT(fTextureSizeUni.isValid()); GrTexture* texture = proc.texture(0); @@ -453,6 +454,7 @@ public: GrGLSLGetMatrix<3>(viewMatrix, fViewMatrix); pdman.setMatrix3f(fViewMatrixUniform, viewMatrix); } + this->setTransformDataHelper(SkMatrix::I(), pdman, &transformIter); } static inline void GenKey(const GrGeometryProcessor& gp, @@ -582,8 +584,7 @@ public: uniformHandler, gpArgs->fPositionVar, dfTexEffect.inPosition()->fName, - args.fTransformsIn, - args.fTransformsOut); + args.fFPCoordTransformHandler); // set up varyings bool isUniformScale = (dfTexEffect.getFlags() & kUniformScale_DistanceFieldEffectMask) == @@ -732,8 +733,8 @@ public: fragBuilder->codeAppendf("%s = val;", args.fOutputCoverage); } - void setData(const GrGLSLProgramDataManager& pdman, - const GrPrimitiveProcessor& processor) override { + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& processor, + FPCoordTransformIter&& transformIter) override { SkASSERT(fDistanceAdjustUni.isValid()); const GrDistanceFieldLCDTextGeoProc& dflcd = processor.cast<GrDistanceFieldLCDTextGeoProc>(); @@ -752,6 +753,7 @@ public: GrGLSLGetMatrix<3>(viewMatrix, fViewMatrix); pdman.setMatrix3f(fViewMatrixUniform, viewMatrix); } + this->setTransformDataHelper(SkMatrix::I(), pdman, &transformIter); } static inline void GenKey(const GrGeometryProcessor& gp, |