diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gpu/GrDrawState.h | 8 | ||||
-rw-r--r-- | src/gpu/gl/GrGLProgramEffects.cpp | 7 |
2 files changed, 11 insertions, 4 deletions
diff --git a/src/gpu/GrDrawState.h b/src/gpu/GrDrawState.h index d1b7a66f5c..b894cb5a29 100644 --- a/src/gpu/GrDrawState.h +++ b/src/gpu/GrDrawState.h @@ -893,13 +893,17 @@ public: fDrawFace != that.fDrawFace) { return false; } + + bool explicitLocalCoords = this->hasLocalCoordAttribute(); for (int i = 0; i < fColorStages.count(); i++) { - if (fColorStages[i] != that.fColorStages[i]) { + if (!GrEffectStage::AreCompatible(fColorStages[i], that.fColorStages[i], + explicitLocalCoords)) { return false; } } for (int i = 0; i < fCoverageStages.count(); i++) { - if (fCoverageStages[i] != that.fCoverageStages[i]) { + if (!GrEffectStage::AreCompatible(fCoverageStages[i], that.fCoverageStages[i], + explicitLocalCoords)) { return false; } } diff --git a/src/gpu/gl/GrGLProgramEffects.cpp b/src/gpu/gl/GrGLProgramEffects.cpp index cff31e29c2..3fa4f15ac8 100644 --- a/src/gpu/gl/GrGLProgramEffects.cpp +++ b/src/gpu/gl/GrGLProgramEffects.cpp @@ -90,8 +90,11 @@ GrCoordSet get_source_coords(uint32_t transformKey, int transformIdx) { SkMatrix get_transform_matrix(const GrDrawEffect& drawEffect, int transformIdx) { const GrCoordTransform& coordTransform = drawEffect.effect()->coordTransform(transformIdx); SkMatrix combined; - if (kLocal_GrCoordSet == coordTransform.sourceCoords() && - !drawEffect.programHasExplicitLocalCoords()) { + + if (kLocal_GrCoordSet == coordTransform.sourceCoords()) { + // If we have explicit local coords then we shouldn't need a coord change. + SkASSERT(!drawEffect.programHasExplicitLocalCoords() || + drawEffect.getCoordChangeMatrix().isIdentity()); combined.setConcat(coordTransform.getMatrix(), drawEffect.getCoordChangeMatrix()); } else { combined = coordTransform.getMatrix(); |