From 40d4bd8dafe9ed844f29a3de3d8965672248ee73 Mon Sep 17 00:00:00 2001 From: joshualitt Date: Mon, 29 Dec 2014 09:04:40 -0800 Subject: removing coord change matrices BUG=skia: Review URL: https://codereview.chromium.org/821243003 --- include/gpu/GrFragmentStage.h | 113 +++--------------------------------------- include/gpu/GrPaint.h | 3 -- 2 files changed, 7 insertions(+), 109 deletions(-) (limited to 'include') diff --git a/include/gpu/GrFragmentStage.h b/include/gpu/GrFragmentStage.h index 8089e9fab7..ca3be8a0f7 100644 --- a/include/gpu/GrFragmentStage.h +++ b/include/gpu/GrFragmentStage.h @@ -9,124 +9,25 @@ #define GrFragmentStage_DEFINED #include "GrFragmentProcessor.h" -#include "SkMatrix.h" /** - * Wraps a GrFragmentProcessor. It also contains a coord change matrix. This matrix should be - * concat'ed with all the processor's coord transforms that apply to local coords, unless - * explicit local coords are provided with the draw. + * Wraps a GrFragmentProcessor, basically a copyable SkAutoTUnref */ class GrFragmentStage { public: - explicit GrFragmentStage(const GrFragmentProcessor* proc) - : fProc(SkRef(proc)) { - fCoordChangeMatrixSet = false; - } - - GrFragmentStage(const GrFragmentStage& other) { - fCoordChangeMatrixSet = other.fCoordChangeMatrixSet; - if (other.fCoordChangeMatrixSet) { - fCoordChangeMatrix = other.fCoordChangeMatrix; - } - fProc.reset(SkRef(other.fProc.get())); - } - - static bool AreCompatible(const GrFragmentStage& a, const GrFragmentStage& b, - bool usingExplicitLocalCoords) { - SkASSERT(a.fProc.get()); - SkASSERT(b.fProc.get()); - - if (!a.getProcessor()->isEqual(*b.getProcessor())) { - return false; - } - - // We always track the coord change matrix, but it has no effect when explicit local coords - // are used. - if (usingExplicitLocalCoords) { - return true; - } - - if (a.fCoordChangeMatrixSet != b.fCoordChangeMatrixSet) { - return false; - } - - if (!a.fCoordChangeMatrixSet) { - return true; - } + explicit GrFragmentStage(const GrFragmentProcessor* proc) : fProc(SkRef(proc)) {} - return a.fCoordChangeMatrix == b.fCoordChangeMatrix; - } - - /** - * This is called when the coordinate system in which the geometry is specified will change. - * - * @param matrix The transformation from the old coord system in which geometry is specified - * to the new one from which it will actually be drawn. - */ - void localCoordChange(const SkMatrix& matrix) { - if (fCoordChangeMatrixSet) { - fCoordChangeMatrix.preConcat(matrix); - } else { - fCoordChangeMatrixSet = true; - fCoordChangeMatrix = matrix; - } - } - - class SavedCoordChange { - public: - SkDEBUGCODE(SavedCoordChange() : fEffectUniqueID(SK_InvalidUniqueID) {}) - private: - bool fCoordChangeMatrixSet; - SkMatrix fCoordChangeMatrix; - SkDEBUGCODE(mutable uint32_t fEffectUniqueID;) + GrFragmentStage(const GrFragmentStage& other) { fProc.reset(SkRef(other.fProc.get())); } - friend class GrFragmentStage; - }; - - /** - * This gets the current coordinate system change. It is the accumulation of - * localCoordChange calls since the effect was installed. It is used when then caller - * wants to temporarily change the source geometry coord system, draw something, and then - * restore the previous coord system (e.g. temporarily draw in device coords). - */ - void saveCoordChange(SavedCoordChange* savedCoordChange) const { - savedCoordChange->fCoordChangeMatrixSet = fCoordChangeMatrixSet; - if (fCoordChangeMatrixSet) { - savedCoordChange->fCoordChangeMatrix = fCoordChangeMatrix; - } - SkASSERT(SK_InvalidUniqueID == savedCoordChange->fEffectUniqueID); - SkDEBUGCODE(savedCoordChange->fEffectUniqueID = fProc->getUniqueID();) - } - - /** - * This balances the saveCoordChange call. - */ - void restoreCoordChange(const SavedCoordChange& savedCoordChange) { - fCoordChangeMatrixSet = savedCoordChange.fCoordChangeMatrixSet; - if (fCoordChangeMatrixSet) { - fCoordChangeMatrix = savedCoordChange.fCoordChangeMatrix; - } - SkASSERT(savedCoordChange.fEffectUniqueID == fProc->getUniqueID()); - SkDEBUGCODE(savedCoordChange.fEffectUniqueID = SK_InvalidUniqueID); - } + const GrFragmentProcessor* processor() const { return fProc.get(); } - /** - * Gets the matrix representing all changes of coordinate system since the GrProcessor was - * installed in the stage. - */ - const SkMatrix& getCoordChangeMatrix() const { - if (fCoordChangeMatrixSet) { - return fCoordChangeMatrix; - } else { - return SkMatrix::I(); - } + bool operator==(const GrFragmentStage& that) const { + return this->processor() == that.processor(); } - const GrFragmentProcessor* getProcessor() const { return fProc.get(); } + bool operator!=(const GrFragmentStage& that) const { return !(*this == that); } protected: - bool fCoordChangeMatrixSet; - SkMatrix fCoordChangeMatrix; SkAutoTUnref fProc; }; diff --git a/include/gpu/GrPaint.h b/include/gpu/GrPaint.h index 3c131a6fcf..6f8528234e 100644 --- a/include/gpu/GrPaint.h +++ b/include/gpu/GrPaint.h @@ -148,9 +148,6 @@ public: bool isOpaqueAndConstantColor(GrColor* constantColor) const; private: - friend class GrContext; // To access above two functions - friend class GrStencilAndCoverTextContext; // To access above two functions - SkAutoTUnref fXPFactory; SkSTArray<4, GrFragmentStage> fColorStages; SkSTArray<2, GrFragmentStage> fCoverageStages; -- cgit v1.2.3