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

Unified Diff: src/gpu/gl/GrGLShaderBuilder.h

Issue 306063002: move all code generation under genProgram() in GrGLShaderBuilder. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: fix typo Created 6 years, 7 months 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 | src/gpu/gl/GrGLShaderBuilder.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/gl/GrGLShaderBuilder.h
diff --git a/src/gpu/gl/GrGLShaderBuilder.h b/src/gpu/gl/GrGLShaderBuilder.h
index 42186defc2f221058ce814f355c3e0e10cf22932..3a93c1bf72e33e944c36403d06d8c9c975a32b65 100644
--- a/src/gpu/gl/GrGLShaderBuilder.h
+++ b/src/gpu/gl/GrGLShaderBuilder.h
@@ -233,9 +233,6 @@ protected:
const GrGLProgramDesc& desc() const { return fDesc; }
- void setInputColor(const GrGLSLExpr4& inputColor) { fInputColor = inputColor; }
- void setInputCoverage(const GrGLSLExpr4& inputCoverage) { fInputCoverage = inputCoverage; }
-
/** Add input/output variable declarations (i.e. 'varying') to the fragment shader. */
GrGLShaderVar& fsInputAppend() { return fFSInputs.push_back(); }
@@ -317,6 +314,15 @@ private:
bool genProgram(const GrEffectStage* colorStages[], const GrEffectStage* coverageStages[]);
/**
+ * The base class will emit the fragment code that precedes the per-effect code and then call
+ * this function. The subclass can use it to insert additional fragment code that should
+ * execute before the effects' code and/or emit other shaders (e.g. geometry, vertex).
+ *
+ * The subclass can modify the initial color or coverage
+ */
+ virtual void emitCodeBeforeEffects(GrGLSLExpr4* color, GrGLSLExpr4* coverage) = 0;
+
+ /**
* Adds code for effects and returns a GrGLProgramEffects* object. The caller is responsible for
* deleting it when finished. effectStages contains the effects to add. effectKeys[i] is the key
* generated from effectStages[i]. inOutFSColor specifies the input color to the first stage and
@@ -329,6 +335,11 @@ private:
int effectCnt,
GrGLSLExpr4* inOutFSColor) = 0;
+ /**
+ * Similar to emitCodeBeforeEffects() but called after per-effect code is emitted.
+ */
+ virtual void emitCodeAfterEffects() = 0;
+
/** Enables using the secondary color output and returns the name of the var in which it is
to be stored */
const char* enableSecondaryOutput();
@@ -341,14 +352,6 @@ private:
**/
bool finish();
- const GrGLSLExpr4& getInputColor() const {
- return fInputColor;
- }
-
- const GrGLSLExpr4& getInputCoverage() const {
- return fInputCoverage;
- }
-
/**
* Features that should only be enabled by GrGLShaderBuilder itself.
*/
@@ -392,9 +395,6 @@ private:
bool fSetupFragPosition;
bool fTopLeftFragPosRead;
- GrGLSLExpr4 fInputColor;
- GrGLSLExpr4 fInputCoverage;
-
bool fHasCustomColorOutput;
bool fHasSecondaryOutput;
};
@@ -448,10 +448,15 @@ public:
const SkString* getEffectAttributeName(int attributeIndex) const;
private:
+ virtual void emitCodeBeforeEffects(GrGLSLExpr4* color, GrGLSLExpr4* coverage) SK_OVERRIDE;
+
virtual GrGLProgramEffects* createAndEmitEffects(const GrEffectStage* effectStages[],
const EffectKey effectKeys[],
int effectCnt,
GrGLSLExpr4* inOutFSColor) SK_OVERRIDE;
+
+ virtual void emitCodeAfterEffects() SK_OVERRIDE;
+
virtual bool compileAndAttachShaders(GrGLuint programId,
SkTDArray<GrGLuint>* shaderIds) const SK_OVERRIDE;
@@ -488,12 +493,15 @@ public:
int addTexCoordSets(int count);
private:
+ virtual void emitCodeBeforeEffects(GrGLSLExpr4* color, GrGLSLExpr4* coverage) SK_OVERRIDE {}
virtual GrGLProgramEffects* createAndEmitEffects(const GrEffectStage* effectStages[],
const EffectKey effectKeys[],
int effectCnt,
GrGLSLExpr4* inOutFSColor) SK_OVERRIDE;
+ virtual void emitCodeAfterEffects() SK_OVERRIDE {}
+
typedef GrGLShaderBuilder INHERITED;
};
« no previous file with comments | « no previous file | src/gpu/gl/GrGLShaderBuilder.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698