aboutsummaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorGravatar joshualitt <joshualitt@chromium.org>2014-12-29 09:04:40 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2014-12-29 09:04:40 -0800
commit40d4bd8dafe9ed844f29a3de3d8965672248ee73 (patch)
tree44045b2daa070790e500d956fa00510370e7464a /include
parentd27f73ef27ff65a6a0a5d00aa8e5b784b1a0b47e (diff)
removing coord change matrices
Diffstat (limited to 'include')
-rw-r--r--include/gpu/GrFragmentStage.h113
-rw-r--r--include/gpu/GrPaint.h3
2 files changed, 7 insertions, 109 deletions
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<const GrFragmentProcessor> 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<const GrXPFactory> fXPFactory;
SkSTArray<4, GrFragmentStage> fColorStages;
SkSTArray<2, GrFragmentStage> fCoverageStages;