Index: include/gpu/GrProcessorStage.h |
diff --git a/include/gpu/GrProcessorStage.h b/include/gpu/GrProcessorStage.h |
deleted file mode 100644 |
index 0f24a30a32abb9cb4eb38666cdc9330f2a553111..0000000000000000000000000000000000000000 |
--- a/include/gpu/GrProcessorStage.h |
+++ /dev/null |
@@ -1,161 +0,0 @@ |
- |
-/* |
- * Copyright 2010 Google Inc. |
- * |
- * Use of this source code is governed by a BSD-style license that can be |
- * found in the LICENSE file. |
- */ |
- |
- |
- |
-#ifndef GrProcessorStage_DEFINED |
-#define GrProcessorStage_DEFINED |
- |
-#include "GrBackendProcessorFactory.h" |
-#include "GrCoordTransform.h" |
-#include "GrFragmentProcessor.h" |
-#include "GrProgramElementRef.h" |
-#include "SkMatrix.h" |
-#include "SkShader.h" |
- |
-// TODO: Make two variations on this class: One for GrDrawState that only owns regular refs |
-// and supports compatibility checks and changing local coords. The second is for GrOptDrawState, |
-// is immutable, and only owns pending execution refs. This requries removing the common base |
-// class from GrDrawState and GrOptDrawState called GrRODrawState and converting to GrOptDrawState |
-// when draws are enqueued in the GrInOrderDrawBuffer. |
-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.initAndRef(other.fProc); |
- } |
- |
- 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; |
- } |
- |
- 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;) |
- |
- 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); |
- } |
- |
- /** |
- * 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 isPerspectiveCoordTransform(int matrixIndex, bool useExplicitLocalCoords) const { |
- const GrCoordTransform& coordTransform = this->getProcessor()->coordTransform(matrixIndex); |
- SkMatrix::TypeMask type0 = coordTransform.getMatrix().getType(); |
- SkMatrix::TypeMask type1 = SkMatrix::kIdentity_Mask; |
- if (kLocal_GrCoordSet == coordTransform.sourceCoords()) { |
- type1 = useExplicitLocalCoords ? |
- SkMatrix::kIdentity_Mask : this->getCoordChangeMatrix().getType(); |
- } |
- |
- int combinedTypes = type0 | type1; |
- if (SkMatrix::kPerspective_Mask & combinedTypes) { |
- return true; |
- } else { |
- return false; |
- } |
- } |
- |
- const char* name() const { return fProc->name(); } |
- |
- const GrFragmentProcessor* getProcessor() const { return fProc.get(); } |
- |
- void convertToPendingExec() { fProc.convertToPendingExec(); } |
- |
-protected: |
- bool fCoordChangeMatrixSet; |
- SkMatrix fCoordChangeMatrix; |
- GrProgramElementRef<const GrFragmentProcessor> fProc; |
-}; |
- |
-#endif |