Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(14)

Unified Diff: include/gpu/GrFragmentStage.h

Issue 821243003: removing coord change matrices (Closed) Base URL: https://skia.googlesource.com/skia.git@no-coordchange-on-drawstate
Patch Set: rebase Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | include/gpu/GrPaint.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
};
« no previous file with comments | « no previous file | include/gpu/GrPaint.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698