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/glsl/GrGLSLGeometryProcessor.h | |
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/glsl/GrGLSLGeometryProcessor.h')
-rw-r--r-- | src/gpu/glsl/GrGLSLGeometryProcessor.h | 32 |
1 files changed, 5 insertions, 27 deletions
diff --git a/src/gpu/glsl/GrGLSLGeometryProcessor.h b/src/gpu/glsl/GrGLSLGeometryProcessor.h index d1e715f78a..6777620a88 100644 --- a/src/gpu/glsl/GrGLSLGeometryProcessor.h +++ b/src/gpu/glsl/GrGLSLGeometryProcessor.h @@ -22,31 +22,11 @@ public: /* Any general emit code goes in the base class emitCode. Subclasses override onEmitCode */ void emitCode(EmitArgs&) override; - // By default we use the identity matrix - void setTransformData(const GrPrimitiveProcessor&, - const GrGLSLProgramDataManager& pdman, - int index, - const SkTArray<const GrCoordTransform*, true>& transforms) override { - this->setTransformDataHelper(SkMatrix::I(), pdman, index, transforms); - } - protected: // A helper which subclasses can use if needed and used above in the default setTransformData(). void setTransformDataHelper(const SkMatrix& localMatrix, const GrGLSLProgramDataManager& pdman, - int index, - const SkTArray<const GrCoordTransform*, true>& transforms) { - SkTArray<TransformUniform, true>& procTransforms = fInstalledTransforms[index]; - int numTransforms = transforms.count(); - for (int t = 0; t < numTransforms; ++t) { - SkASSERT(procTransforms[t].fHandle.isValid()); - const SkMatrix& transform = GetTransformMatrix(localMatrix, *transforms[t]); - if (!procTransforms[t].fCurrentValue.cheapEqualTo(transform)) { - pdman.setSkMatrix(procTransforms[t].fHandle.toIndex(), transform); - procTransforms[t].fCurrentValue = transform; - } - } - } + FPCoordTransformIter*); // Emit a uniform matrix for each coord transform. void emitTransforms(GrGLSLVertexBuilder* vb, @@ -54,10 +34,9 @@ protected: GrGLSLUniformHandler* uniformHandler, const GrShaderVar& posVar, const char* localCoords, - const TransformsIn& tin, - TransformsOut* tout) { + FPCoordTransformHandler* handler) { this->emitTransforms(vb, varyingHandler, uniformHandler, - posVar, localCoords, SkMatrix::I(), tin, tout); + posVar, localCoords, SkMatrix::I(), handler); } // Emit pre-transformed coords as a vertex attribute per coord-transform. @@ -67,8 +46,7 @@ protected: const GrShaderVar& posVar, const char* localCoords, const SkMatrix& localMatrix, - const TransformsIn&, - TransformsOut*); + FPCoordTransformHandler*); struct GrGPArgs { // The variable used by a GP to store its position. It can be @@ -103,7 +81,7 @@ private: SkMatrix fCurrentValue = SkMatrix::InvalidMatrix(); }; - SkSTArray<8, SkSTArray<2, TransformUniform, true> > fInstalledTransforms; + SkTArray<TransformUniform, true> fInstalledTransforms; typedef GrGLSLPrimitiveProcessor INHERITED; }; |