Index: src/gpu/gl/GrGLEffect.h |
=================================================================== |
--- src/gpu/gl/GrGLEffect.h (revision 8241) |
+++ src/gpu/gl/GrGLEffect.h (working copy) |
@@ -12,7 +12,6 @@ |
#include "GrGLShaderBuilder.h" |
#include "GrGLShaderVar.h" |
#include "GrGLSL.h" |
-#include "GrEffectStage.h" |
class GrGLTexture; |
@@ -21,13 +20,20 @@ |
include/gpu/GrEffect.h. Objects of type GrGLEffect are responsible for emitting the |
GLSL code that implements a GrEffect and for uploading uniforms at draw time. They also |
must have a function: |
- static inline EffectKey GenKey(const GrEffectStage&, const GrGLCaps&) |
+ static inline EffectKey GenKey(const GrDrawEffect&, const GrGLCaps&) |
that is used to implement a program cache. When two GrEffects produce the same key this means |
that their GrGLEffects would emit the same GLSL code. |
+ The GrGLEffect subclass must also have a constructor of the form: |
+ EffectSubclass::EffectSubclass(const GrBackendEffectFactory&, const GrDrawEffect&) |
+ The effect held by the GrDrawEffect is guaranteed to be of the type that generated the |
+ GrGLEffect subclass instance. |
+ |
These objects are created by the factory object returned by the GrEffect::getFactory(). |
*/ |
+class GrDrawEffect; |
+ |
class GrGLEffect { |
public: |
@@ -50,14 +56,10 @@ |
stages. |
@param builder Interface used to emit code in the shaders. |
- @param stage The effect stage that generated this program stage. |
+ @param drawEffect A wrapper on the effect that generated this program stage. |
@param key The key that was computed by GenKey() from the generating GrEffect. |
Only the bits indicated by GrBackendEffectFactory::kEffectKeyBits are |
guaranteed to match the value produced by GenKey(); |
- @param vertexCoords A vec2 in the VS that holds the position in local coords. This is either |
- the pre-view-matrix vertex position or if explicit per-vertex texture |
- coords are used with a stage then it is those coordinates. See |
- GrVertexLayout. |
@param outputColor A predefined vec4 in the FS in which the stage should place its output |
color (or coverage). |
@param inputColor A vec4 that holds the input color to the stage in the FS. This may be |
@@ -70,9 +72,8 @@ |
reads in the generated code. |
*/ |
virtual void emitCode(GrGLShaderBuilder* builder, |
- const GrEffectStage& stage, |
+ const GrDrawEffect& drawEffect, |
EffectKey key, |
- const char* vertexCoords, |
const char* outputColor, |
const char* inputColor, |
const TextureSamplerArray& samplers) = 0; |
@@ -81,35 +82,16 @@ |
key; this function reads data from a stage and uploads any uniform variables required |
by the shaders created in emitCode(). The GrEffect installed in the GrEffectStage is |
guaranteed to be of the same type that created this GrGLEffect and to have an identical |
- EffectKey as the one that created this GrGLEffect. */ |
- virtual void setData(const GrGLUniformManager&, const GrEffectStage&); |
+ EffectKey as the one that created this GrGLEffect. Effects that use local coords have |
+ to consider whether the GrEffectStage's coord change matrix should be used. When explicit |
+ local coordinates are used it can be ignored. */ |
+ virtual void setData(const GrGLUniformManager&, const GrDrawEffect&); |
const char* name() const { return fFactory.name(); } |
- static EffectKey GenTextureKey(const GrEffectRef*, const GrGLCaps&); |
- static EffectKey GenAttribKey(const GrEffectStage& stage); |
+ static EffectKey GenTextureKey(const GrDrawEffect&, const GrGLCaps&); |
+ static EffectKey GenAttribKey(const GrDrawEffect& stage); |
- /** |
- * GrGLEffect subclasses get passed a GrEffectStage in their emitCode and setData functions. |
- * The GrGLEffect usually needs to cast the stage's effect to the GrEffect subclass that |
- * generated the GrGLEffect. This helper does just that. |
- */ |
- template <typename T> |
- static const T& GetEffectFromStage(const GrEffectStage& effectStage) { |
- GrAssert(NULL != effectStage.getEffect()); |
- return CastEffect<T>(*effectStage.getEffect()); |
- } |
- |
- /** |
- * Extracts the GrEffect from a GrEffectRef and down-casts to a GrEffect subclass. Usually used |
- * in a GrGLEffect subclass's constructor (which takes const GrEffectRef&). |
- */ |
- template <typename T> |
- static const T& CastEffect(const GrEffectRef& effectRef) { |
- GrAssert(NULL != effectRef.get()); |
- return *static_cast<const T*>(effectRef.get()); |
- } |
- |
protected: |
const GrBackendEffectFactory& fFactory; |
}; |