Chromium Code Reviews| Index: include/gpu/GrFragmentStage.h |
| diff --git a/include/gpu/GrFragmentStage.h b/include/gpu/GrFragmentStage.h |
| index 8089e9fab7a7819b94502a1d6ee4285e6248ff5a..ca3be8a0f7f56c9a732f02753954166f3ccc01cf 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) { |
|
bsalomon
2014/12/29 14:23:33
wooooooooooo!
|
| - 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<const GrFragmentProcessor> fProc; |
| }; |