diff options
author | joshualitt <joshualitt@chromium.org> | 2015-08-05 11:05:22 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-08-05 11:05:22 -0700 |
commit | b2aa7cb90f4c66125056bac70dbca2093dd5ba41 (patch) | |
tree | 2a24701dd189ab74e9dc82f472a2a6c42834aff8 /src/gpu/GrGeometryProcessor.h | |
parent | 0e8296eaa62eb8bc37b3ffc78523183f15dfc0d1 (diff) |
This CL wires up the backend portion necessary for sending transformed coords via vertex attributes.
BUG=skia:
Review URL: https://codereview.chromium.org/1243583002
Diffstat (limited to 'src/gpu/GrGeometryProcessor.h')
-rw-r--r-- | src/gpu/GrGeometryProcessor.h | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/src/gpu/GrGeometryProcessor.h b/src/gpu/GrGeometryProcessor.h index ea4e890ee1..96c1cb6bf3 100644 --- a/src/gpu/GrGeometryProcessor.h +++ b/src/gpu/GrGeometryProcessor.h @@ -22,7 +22,7 @@ public: GrGeometryProcessor() : INHERITED(false) , fWillUseGeoShader(false) - , fHasLocalCoords(false) {} + , fLocalCoordsType(kUnused_LocalCoordsType) {} bool willUseGeoShader() const override { return fWillUseGeoShader; } @@ -45,6 +45,14 @@ public: SkFAIL("Unsupported\n"); } + bool hasTransformedLocalCoords() const override { + return kHasTransformed_LocalCoordsType == fLocalCoordsType; + } + + bool hasExplicitLocalCoords() const override { + return kHasExplicit_LocalCoordsType == fLocalCoordsType; + } + protected: /** * Subclasses call this from their constructor to register vertex attributes. Attributes @@ -64,14 +72,32 @@ protected: void setWillUseGeoShader() { fWillUseGeoShader = true; } - // TODO hack see above - void setHasLocalCoords() { fHasLocalCoords = true; } + /** + * If a GrFragmentProcessor in the GrPipeline needs localCoods, we will provide them in one of + * three ways + * 1) LocalCoordTransform * Position - in Shader + * 2) LocalCoordTransform * ExplicitLocalCoords- in Shader + * 3) A transformation on the CPU uploaded via vertex attribute + * TODO make this GrBatches responsibility + */ + enum LocalCoordsType { + kUnused_LocalCoordsType, + kHasExplicit_LocalCoordsType, + kHasTransformed_LocalCoordsType + }; + + void setHasExplicitLocalCoords() { + SkASSERT(kUnused_LocalCoordsType == fLocalCoordsType); + fLocalCoordsType = kHasExplicit_LocalCoordsType; + } + void setHasTransformedLocalCoords() { + SkASSERT(kUnused_LocalCoordsType == fLocalCoordsType); + fLocalCoordsType = kHasTransformed_LocalCoordsType; + } private: - bool hasExplicitLocalCoords() const override { return fHasLocalCoords; } - bool fWillUseGeoShader; - bool fHasLocalCoords; + LocalCoordsType fLocalCoordsType; typedef GrPrimitiveProcessor INHERITED; }; |