| 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) {
|
| - 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;
|
| };
|
|
|
|
|