aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/glsl/GrGLSLGeometryProcessor.h
diff options
context:
space:
mode:
authorGravatar bsalomon <bsalomon@google.com>2016-09-19 08:36:58 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-09-19 08:36:58 -0700
commitd91237ee051523f439238042674ade99207fe4a6 (patch)
treee53b2b1e356e1945863bc6a6446187ee1f4d76f2 /src/gpu/glsl/GrGLSLGeometryProcessor.h
parent122fac306189940a4135e884eaef71a9aa0d5c8a (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.h32
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;
};