Index: src/gpu/glsl/GrGLSLFragmentProcessor.h |
diff --git a/src/gpu/glsl/GrGLSLFragmentProcessor.h b/src/gpu/glsl/GrGLSLFragmentProcessor.h |
index f4a93ebe71c35b41b49a62466e22d204ca45ab58..9889bcc9c64546498323714b09bcd53ff1718237 100644 |
--- a/src/gpu/glsl/GrGLSLFragmentProcessor.h |
+++ b/src/gpu/glsl/GrGLSLFragmentProcessor.h |
@@ -33,6 +33,30 @@ public: |
typedef GrGLSLProgramDataManager::UniformHandle UniformHandle; |
typedef GrGLSLProgramDataManager::UniformHandle SamplerHandle; |
+ /** |
+ * When building a program from a GrPipeline this is used to provide the GrShaderVars that |
+ * contain the resulting transformed coords from each of a GrFragmentProcessor's |
+ * GrCoordTransforms. This allows the GrFragmentProcessor subclasses to refer to the transformed |
+ * coords in fragment code. |
+ */ |
+ class TransformedCoordVars { |
+ public: |
+ TransformedCoordVars(const GrFragmentProcessor* fp, const GrShaderVar* vars) |
+ : fFP(fp) |
+ , fTransformedVars(vars) {} |
+ |
+ const GrShaderVar& operator[] (int i) const { |
+ SkASSERT(i >= 0 && i < fFP->numCoordTransforms()); |
+ return fTransformedVars[i]; |
+ } |
+ |
+ TransformedCoordVars childTransforms(int childIdx) const; |
+ |
+ private: |
+ const GrFragmentProcessor* fFP; |
+ const GrShaderVar* fTransformedVars; |
+ }; |
+ |
/** Called when the program stage should insert its code into the shaders. The code in each |
shader will be in its own block ({}) and so locally scoped names will not collide across |
stages. |
@@ -50,7 +74,7 @@ public: |
etc.) that allows the processor to communicate back similar known |
info about its output. |
@param transformedCoords Fragment shader variables containing the coords computed using |
- each of the GrFragmentProcessor's Coord Transforms. |
+ each of the GrFragmentProcessor's GrCoordTransforms. |
@param texSamplers Contains one entry for each GrTextureAccess of the GrProcessor. |
These can be passed to the builder to emit texture reads in the |
generated code. |
@@ -65,7 +89,7 @@ public: |
const GrFragmentProcessor& fp, |
const char* outputColor, |
const char* inputColor, |
- const SkTArray<GrShaderVar>& transformedCoords, |
+ const TransformedCoordVars& transformedCoordVars, |
const SamplerHandle* texSamplers, |
const SamplerHandle* bufferSamplers, |
bool gpImplementsDistanceVector) |
@@ -75,7 +99,7 @@ public: |
, fFp(fp) |
, fOutputColor(outputColor) |
, fInputColor(inputColor) |
- , fTransformedCoords(transformedCoords) |
+ , fTransformedCoords(transformedCoordVars) |
, fTexSamplers(texSamplers) |
, fBufferSamplers(bufferSamplers) |
, fGpImplementsDistanceVector(gpImplementsDistanceVector) {} |
@@ -85,7 +109,7 @@ public: |
const GrFragmentProcessor& fFp; |
const char* fOutputColor; |
const char* fInputColor; |
- const SkTArray<GrShaderVar>& fTransformedCoords; |
+ const TransformedCoordVars& fTransformedCoords; |
const SamplerHandle* fTexSamplers; |
const SamplerHandle* fBufferSamplers; |
bool fGpImplementsDistanceVector; |