Index: src/gpu/gl/builders/GrGLProgramBuilder.h |
diff --git a/src/gpu/gl/builders/GrGLProgramBuilder.h b/src/gpu/gl/builders/GrGLProgramBuilder.h |
index e1525c42efca2cbfdf00f6baf62e25d46d4e0856..4228d24485f037dd26d29645ba1b9376302ad72d 100644 |
--- a/src/gpu/gl/builders/GrGLProgramBuilder.h |
+++ b/src/gpu/gl/builders/GrGLProgramBuilder.h |
@@ -68,7 +68,19 @@ public: |
GrSLPrecision precision, |
const char* name, |
int arrayCount, |
- const char** outName = nullptr) = 0; |
+ const char** outName = nullptr) { |
+ return this->internalAddUniformArray(visibility, type, precision, name, true, arrayCount, |
+ outName); |
+ } |
+ |
+ UniformHandle addFragPosUniform(uint32_t visibility, |
joshualitt
2015/11/04 21:50:52
However you want to handle this, it should be priv
egdaniel
2015/11/05 21:49:59
Done.
|
+ GrSLType type, |
+ GrSLPrecision precision, |
+ const char* name, |
+ const char** outName) { |
+ return this->internalAddUniformArray(visibility, type, precision, name, false, 0, outName); |
+ } |
+ |
virtual const GrGLSLShaderVar& getUniformVariable(UniformHandle u) const = 0; |
@@ -86,6 +98,15 @@ public: |
/* |
* *NOTE* NO MEMBERS ALLOWED, MULTIPLE INHERITANCE |
*/ |
+private: |
+ virtual UniformHandle internalAddUniformArray( |
+ uint32_t visibility, |
+ GrSLType type, |
+ GrSLPrecision precision, |
+ const char* name, |
+ bool mangleName, |
+ int arrayCount, |
+ const char** outName) = 0; |
}; |
// TODO move this into GrGLGPBuilder and move them both out of this file |
@@ -239,12 +260,13 @@ public: |
*/ |
static GrGLProgram* CreateProgram(const DrawArgs&, GrGLGpu*); |
joshualitt
2015/11/04 21:50:52
This should be private
egdaniel
2015/11/05 21:49:59
Done.
|
- UniformHandle addUniformArray(uint32_t visibility, |
- GrSLType type, |
- GrSLPrecision precision, |
- const char* name, |
- int arrayCount, |
- const char** outName) override; |
+ UniformHandle internalAddUniformArray(uint32_t visibility, |
+ GrSLType type, |
+ GrSLPrecision precision, |
+ const char* name, |
+ bool mangleName, |
+ int arrayCount, |
+ const char** outName) override; |
const GrGLSLShaderVar& getUniformVariable(UniformHandle u) const override { |
return fUniforms[u.toIndex()].fVariable; |
@@ -300,8 +322,8 @@ protected: |
// Generates a name for a variable. The generated string will be name prefixed by the prefix |
// char (unless the prefix is '\0'). It also mangles the name to be stage-specific if we're |
- // generating stage code. |
- void nameVariable(SkString* out, char prefix, const char* name); |
+ // generating stage code and mangle is true. |
+ void nameVariable(SkString* out, char prefix, const char* name, bool mangle = true); |
// Generates a possibly mangled name for a stage variable and writes it to the fragment shader. |
// If GrGLSLExpr4 has a valid name then it will use that instead |
void nameExpression(GrGLSLExpr4*, const char* baseName); |
@@ -362,16 +384,6 @@ protected: |
} |
void addStage() { fStageIndex++; } |
- // This simple class exits the stage and then restores the stage when it goes out of scope |
- class AutoStageRestore { |
- public: |
- AutoStageRestore(GrGLProgramBuilder* pb) |
- : fPB(pb), fOutOfStage(pb->fOutOfStage) { pb->exitStage(); } |
- ~AutoStageRestore() { fPB->fOutOfStage = fOutOfStage; } |
- private: |
- GrGLProgramBuilder* fPB; |
- bool fOutOfStage; |
- }; |
class AutoStageAdvance { |
public: |
AutoStageAdvance(GrGLProgramBuilder* pb) |