diff options
author | 2016-09-19 08:36:58 -0700 | |
---|---|---|
committer | 2016-09-19 08:36:58 -0700 | |
commit | d91237ee051523f439238042674ade99207fe4a6 (patch) | |
tree | e53b2b1e356e1945863bc6a6446187ee1f4d76f2 /src/gpu/GrOvalRenderer.cpp | |
parent | 122fac306189940a4135e884eaef71a9aa0d5c8a (diff) |
Stop flattening GrCoordTransforms in parent GrFragmentProcessors.
This changes moves to a model that iterates over GrCTs in a GrFP hierarchy when inserting transformations by GrGLSLPrimitiveProcessors.
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2339203002
Review-Url: https://codereview.chromium.org/2339203002
Diffstat (limited to 'src/gpu/GrOvalRenderer.cpp')
-rw-r--r-- | src/gpu/GrOvalRenderer.cpp | 37 |
1 files changed, 13 insertions, 24 deletions
diff --git a/src/gpu/GrOvalRenderer.cpp b/src/gpu/GrOvalRenderer.cpp index a04aa00711..90b2d8e4f1 100644 --- a/src/gpu/GrOvalRenderer.cpp +++ b/src/gpu/GrOvalRenderer.cpp @@ -161,8 +161,7 @@ private: gpArgs->fPositionVar, cgp.fInPosition->fName, cgp.fLocalMatrix, - args.fTransformsIn, - args.fTransformsOut); + args.fFPCoordTransformHandler); fragBuilder->codeAppend("float d = length(circleEdge.xy);"); fragBuilder->codeAppend("float distanceToOuterEdge = circleEdge.z * (1.0 - d);"); @@ -210,14 +209,10 @@ private: b->add32(key); } - void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProcessor&) override {} - - void setTransformData(const GrPrimitiveProcessor& primProc, - const GrGLSLProgramDataManager& pdman, - int index, - const SkTArray<const GrCoordTransform*, true>& transforms) override { + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, + FPCoordTransformIter&& transformIter) override { this->setTransformDataHelper(primProc.cast<CircleGeometryProcessor>().fLocalMatrix, - pdman, index, transforms); + pdman, &transformIter); } private: @@ -319,8 +314,7 @@ private: gpArgs->fPositionVar, egp.fInPosition->fName, egp.fLocalMatrix, - args.fTransformsIn, - args.fTransformsOut); + args.fFPCoordTransformHandler); // for outer curve fragBuilder->codeAppendf("vec2 scaledOffset = %s*%s.xy;", ellipseOffsets.fsIn(), @@ -357,15 +351,10 @@ private: b->add32(key); } - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& gp) override { - } - - void setTransformData(const GrPrimitiveProcessor& primProc, - const GrGLSLProgramDataManager& pdman, - int index, - const SkTArray<const GrCoordTransform*, true>& transforms) override { - this->setTransformDataHelper(primProc.cast<EllipseGeometryProcessor>().fLocalMatrix, - pdman, index, transforms); + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& primProc, + FPCoordTransformIter&& transformIter) override { + const EllipseGeometryProcessor& egp = primProc.cast<EllipseGeometryProcessor>(); + this->setTransformDataHelper(egp.fLocalMatrix, pdman, &transformIter); } private: @@ -472,8 +461,7 @@ private: uniformHandler, gpArgs->fPositionVar, diegp.fInPosition->fName, - args.fTransformsIn, - args.fTransformsOut); + args.fFPCoordTransformHandler); SkAssertResult(fragBuilder->enableFeature( GrGLSLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature)); @@ -525,8 +513,8 @@ private: b->add32(key); } - void setData(const GrGLSLProgramDataManager& pdman, - const GrPrimitiveProcessor& gp) override { + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& gp, + FPCoordTransformIter&& transformIter) override { const DIEllipseGeometryProcessor& diegp = gp.cast<DIEllipseGeometryProcessor>(); if (!diegp.fViewMatrix.isIdentity() && !fViewMatrix.cheapEqualTo(diegp.fViewMatrix)) { @@ -535,6 +523,7 @@ private: GrGLSLGetMatrix<3>(viewMatrix, fViewMatrix); pdman.setMatrix3f(fViewMatrixUniform, viewMatrix); } + this->setTransformDataHelper(SkMatrix::I(), pdman, &transformIter); } private: |