| Index: src/gpu/gl/builders/GrGLFragmentShaderBuilder.h
|
| diff --git a/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h b/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h
|
| index 2b3e18d763dcc946a784f714f7167a97e23ca308..a058e9f7cc5d766a6eba59c3ded712e3f33ac67c 100644
|
| --- a/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h
|
| +++ b/src/gpu/gl/builders/GrGLFragmentShaderBuilder.h
|
| @@ -17,7 +17,10 @@ class GrGLVarying;
|
| */
|
| class GrGLFragmentBuilder : public GrGLShaderBuilder {
|
| public:
|
| - GrGLFragmentBuilder(GrGLProgramBuilder* program) : INHERITED(program) {}
|
| + GrGLFragmentBuilder(GrGLProgramBuilder* program)
|
| + : INHERITED(program) {
|
| + fSubstageIndices.push_back(0);
|
| + }
|
| virtual ~GrGLFragmentBuilder() {}
|
| /**
|
| * Use of these features may require a GLSL extension to be enabled. Shaders may not compile
|
| @@ -47,7 +50,40 @@ public:
|
| is in device space (e.g. 0,0 is the top left and pixel centers are at half-integers). */
|
| virtual const char* fragmentPosition() = 0;
|
|
|
| + /**
|
| + * Fragment procs with child procs should call these functions before/after calling emitCode
|
| + * on a child proc.
|
| + */
|
| + void onBeforeChildProcEmitCode();
|
| + void onAfterChildProcEmitCode();
|
| +
|
| + int getChildNumberThisLevel() const {
|
| + if (fSubstageIndices.count() > 1)
|
| + return fSubstageIndices[fSubstageIndices.count() - 2];
|
| + return -1;
|
| + }
|
| +
|
| + const SkString& getMangleString() const { return fMangleString; }
|
| +
|
| + SkString getMangleStringThisLevel() const {
|
| + SkString ret;
|
| + int childNumber = getChildNumberThisLevel();
|
| + if (childNumber >= 0)
|
| + ret.printf("_c%d", childNumber);
|
| + return ret;
|
| + }
|
| +
|
| private:
|
| + /*
|
| + * State that tracks which child proc in the proc tree is currently emitting code. This is
|
| + * used to update the manglestring, which is used to mangle the names of uniforms and functions
|
| + * emitted by the proc. fSubstageIndices is a stack: its count indicates how many levels deep
|
| + * we are in the tree, and its second-to-last value is the index of the child proc at that
|
| + * level which is currently emitting code.
|
| + */
|
| + SkTArray<int> fSubstageIndices;
|
| + SkString fMangleString;
|
| +
|
| friend class GrGLPathProcessor;
|
|
|
| typedef GrGLShaderBuilder INHERITED;
|
|
|