Index: src/gpu/glsl/GrGLSLProgramBuilder.h |
diff --git a/src/gpu/glsl/GrGLSLProgramBuilder.h b/src/gpu/glsl/GrGLSLProgramBuilder.h |
index e87ab0aee93d37fee610f90e15467346ee54e724..81037084e9805968b0dbb2cb88413bbca32c4ed2 100644 |
--- a/src/gpu/glsl/GrGLSLProgramBuilder.h |
+++ b/src/gpu/glsl/GrGLSLProgramBuilder.h |
@@ -17,6 +17,7 @@ |
class GrGLSLCaps; |
class GrGLSLShaderVar; |
+class GrGLSLVaryingHandler; |
// Enough precision to represent 1 / 2048 accurately in printf |
#define GR_SIGNIFICANT_POW2_DECIMAL_DIG 11 |
@@ -32,7 +33,6 @@ public: |
virtual ~GrGLSLUniformBuilder() {} |
typedef GrGLSLProgramDataManager::UniformHandle UniformHandle; |
- typedef GrGLSLProgramDataManager::SeparableVaryingHandle SeparableVaryingHandle; |
/** Add a uniform variable to the current program, that has visibility in one or more shaders. |
visibility is a bitfield of ShaderVisibility values indicating from which shaders the |
@@ -79,91 +79,10 @@ protected: |
const char** outName) = 0; |
}; |
-// TODO move this into GrGLSLGPBuilder and move them both out of this file |
-class GrGLSLVarying { |
-public: |
- bool vsVarying() const { return kVertToFrag_Varying == fVarying || |
- kVertToGeo_Varying == fVarying; } |
- bool fsVarying() const { return kVertToFrag_Varying == fVarying || |
- kGeoToFrag_Varying == fVarying; } |
- const char* vsOut() const { return fVsOut; } |
- const char* gsIn() const { return fGsIn; } |
- const char* gsOut() const { return fGsOut; } |
- const char* fsIn() const { return fFsIn; } |
- GrSLType type() const { return fType; } |
- |
-protected: |
- enum Varying { |
- kVertToFrag_Varying, |
- kVertToGeo_Varying, |
- kGeoToFrag_Varying, |
- }; |
- |
- GrGLSLVarying(GrSLType type, Varying varying) |
- : fVarying(varying), fType(type), fVsOut(nullptr), fGsIn(nullptr), fGsOut(nullptr), |
- fFsIn(nullptr) {} |
- |
- Varying fVarying; |
- |
-private: |
- GrSLType fType; |
- const char* fVsOut; |
- const char* fGsIn; |
- const char* fGsOut; |
- const char* fFsIn; |
- |
- friend class GrGLSLVertexBuilder; |
- friend class GrGLSLGeometryBuilder; |
- friend class GrGLSLXferBuilder; |
- friend class GrGLSLFragmentShaderBuilder; |
-}; |
- |
-struct GrGLSLVertToFrag : public GrGLSLVarying { |
- GrGLSLVertToFrag(GrSLType type) |
- : GrGLSLVarying(type, kVertToFrag_Varying) {} |
-}; |
- |
-struct GrGLSLVertToGeo : public GrGLSLVarying { |
- GrGLSLVertToGeo(GrSLType type) |
- : GrGLSLVarying(type, kVertToGeo_Varying) {} |
-}; |
- |
-struct GrGLSLGeoToFrag : public GrGLSLVarying { |
- GrGLSLGeoToFrag(GrSLType type) |
- : GrGLSLVarying(type, kGeoToFrag_Varying) {} |
-}; |
- |
/* a specialization of the above for GPs. Lets the user add uniforms, varyings, and VS / FS code */ |
class GrGLSLGPBuilder : public virtual GrGLSLUniformBuilder { |
public: |
/* |
- * addVarying allows fine grained control for setting up varyings between stages. If you just |
- * need to take an attribute and pass it through to an output value in a fragment shader, use |
- * addPassThroughAttribute. |
- * TODO convert most uses of addVarying to addPassThroughAttribute |
- */ |
- virtual void addVarying(const char* name, |
- GrGLSLVarying*, |
- GrSLPrecision precision = kDefault_GrSLPrecision) = 0; |
- |
- /* |
- * This call can be used by GP to pass an attribute through all shaders directly to 'output' in |
- * the fragment shader. Though this call effects both the vertex shader and fragment shader, |
- * it expects 'output' to be defined in the fragment shader before this call is made. |
- * TODO it might be nicer behavior to have a flag to declare output inside this call |
- */ |
- virtual void addPassThroughAttribute(const GrGeometryProcessor::Attribute*, |
- const char* output) = 0; |
- |
- /* |
- * Creates a fragment shader varying that can be referred to. |
- * Comparable to GrGLSLUniformBuilder::addUniform(). |
- */ |
- virtual SeparableVaryingHandle addSeparableVarying( |
- const char* name, GrGLSLVertToFrag*, |
- GrSLPrecision fsPrecision = kDefault_GrSLPrecision) = 0; |
- |
- /* |
* *NOTE* NO MEMBERS ALLOWED, MULTIPLE INHERITANCE |
*/ |
}; |
@@ -229,12 +148,15 @@ protected: |
// explicitly asked not to. |
void nameVariable(SkString* out, char prefix, const char* name, bool mangle = true); |
+ virtual GrGLSLVaryingHandler* varyingHandler() = 0; |
+ |
// number of each input/output type in a single allocation block, used by many builders |
static const int kVarsPerBlock; |
- GrGLSLVertexBuilder fVS; |
- GrGLSLGeometryBuilder fGS; |
+ GrGLSLVertexBuilder fVS; |
+ GrGLSLGeometryBuilder fGS; |
GrGLSLFragmentShaderBuilder fFS; |
+ |
int fStageIndex; |
BuiltinUniformHandles fUniformHandles; |
@@ -248,6 +170,7 @@ private: |
friend class GrGLSLVertexBuilder; |
friend class GrGLSLFragmentShaderBuilder; |
friend class GrGLSLGeometryBuilder; |
+ friend class GrGLSLVaryingHandler; |
}; |
#endif |