Index: src/effects/SkLightingImageFilter.cpp |
=================================================================== |
--- src/effects/SkLightingImageFilter.cpp (revision 8241) |
+++ src/effects/SkLightingImageFilter.cpp (working copy) |
@@ -980,23 +980,22 @@ |
class GrGLLightingEffect : public GrGLEffect { |
public: |
GrGLLightingEffect(const GrBackendEffectFactory& factory, |
- const GrEffectRef& effect); |
+ const GrDrawEffect& effect); |
virtual ~GrGLLightingEffect(); |
virtual void emitCode(GrGLShaderBuilder*, |
- const GrEffectStage&, |
+ const GrDrawEffect&, |
EffectKey, |
- const char* vertexCoords, |
const char* outputColor, |
const char* inputColor, |
const TextureSamplerArray&) SK_OVERRIDE; |
- static inline EffectKey GenKey(const GrEffectStage&, const GrGLCaps&); |
+ static inline EffectKey GenKey(const GrDrawEffect&, const GrGLCaps&); |
/** |
* Subclasses of GrGLLightingEffect must call INHERITED::setData(); |
*/ |
- virtual void setData(const GrGLUniformManager&, const GrEffectStage&) SK_OVERRIDE; |
+ virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVERRIDE; |
protected: |
virtual void emitLightFunc(GrGLShaderBuilder*, SkString* funcName) = 0; |
@@ -1015,9 +1014,9 @@ |
class GrGLDiffuseLightingEffect : public GrGLLightingEffect { |
public: |
GrGLDiffuseLightingEffect(const GrBackendEffectFactory& factory, |
- const GrEffectRef& effect); |
+ const GrDrawEffect& drawEffect); |
virtual void emitLightFunc(GrGLShaderBuilder*, SkString* funcName) SK_OVERRIDE; |
- virtual void setData(const GrGLUniformManager&, const GrEffectStage&) SK_OVERRIDE; |
+ virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVERRIDE; |
private: |
typedef GrGLLightingEffect INHERITED; |
@@ -1030,9 +1029,9 @@ |
class GrGLSpecularLightingEffect : public GrGLLightingEffect { |
public: |
GrGLSpecularLightingEffect(const GrBackendEffectFactory& factory, |
- const GrEffectRef& effect); |
+ const GrDrawEffect& effect); |
virtual void emitLightFunc(GrGLShaderBuilder*, SkString* funcName) SK_OVERRIDE; |
- virtual void setData(const GrGLUniformManager&, const GrEffectStage&) SK_OVERRIDE; |
+ virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVERRIDE; |
private: |
typedef GrGLLightingEffect INHERITED; |
@@ -1093,11 +1092,12 @@ |
/////////////////////////////////////////////////////////////////////////////// |
GrGLLightingEffect::GrGLLightingEffect(const GrBackendEffectFactory& factory, |
- const GrEffectRef& effect) |
+ const GrDrawEffect& drawEffect) |
: INHERITED(factory) |
, fImageIncrementUni(kInvalidUniformHandle) |
- , fSurfaceScaleUni(kInvalidUniformHandle) { |
- const GrLightingEffect& m = CastEffect<GrLightingEffect>(effect); |
+ , fSurfaceScaleUni(kInvalidUniformHandle) |
+ , fEffectMatrix(drawEffect.castEffect<GrLightingEffect>().coordsType()) { |
+ const GrLightingEffect& m = drawEffect.castEffect<GrLightingEffect>(); |
fLight = m.light()->createGLLight(); |
} |
@@ -1106,14 +1106,14 @@ |
} |
void GrGLLightingEffect::emitCode(GrGLShaderBuilder* builder, |
- const GrEffectStage&, |
+ const GrDrawEffect&, |
EffectKey key, |
- const char* vertexCoords, |
const char* outputColor, |
const char* inputColor, |
const TextureSamplerArray& samplers) { |
const char* coords; |
- fEffectMatrix.emitCodeMakeFSCoords2D(builder, key, vertexCoords, &coords); |
+ const GrGLShaderVar& localCoords = builder->localCoordsAttribute(); |
+ fEffectMatrix.emitCodeMakeFSCoords2D(builder, key, &coords); |
fImageIncrementUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, |
kVec2f_GrSLType, |
@@ -1207,28 +1207,30 @@ |
builder->fsCodeAppend(modulate.c_str()); |
} |
-GrGLEffect::EffectKey GrGLLightingEffect::GenKey(const GrEffectStage& s, |
+GrGLEffect::EffectKey GrGLLightingEffect::GenKey(const GrDrawEffect& drawEffect, |
const GrGLCaps& caps) { |
- const GrLightingEffect& effect = GetEffectFromStage<GrLightingEffect>(s); |
- EffectKey key = effect.light()->type(); |
+ const GrLightingEffect& lighting = drawEffect.castEffect<GrLightingEffect>(); |
+ EffectKey key = lighting.light()->type(); |
key <<= GrGLEffectMatrix::kKeyBits; |
- EffectKey matrixKey = GrGLEffectMatrix::GenKey(effect.getMatrix(), |
- s.getCoordChangeMatrix(), |
- effect.texture(0)); |
+ EffectKey matrixKey = GrGLEffectMatrix::GenKey(lighting.getMatrix(), |
+ drawEffect, |
+ lighting.coordsType(), |
+ lighting.texture(0)); |
return key | matrixKey; |
} |
-void GrGLLightingEffect::setData(const GrGLUniformManager& uman, const GrEffectStage& stage) { |
- const GrLightingEffect& effect = GetEffectFromStage<GrLightingEffect>(stage); |
- GrTexture* texture = effect.texture(0); |
+void GrGLLightingEffect::setData(const GrGLUniformManager& uman, |
+ const GrDrawEffect& drawEffect) { |
+ const GrLightingEffect& lighting = drawEffect.castEffect<GrLightingEffect>(); |
+ GrTexture* texture = lighting.texture(0); |
float ySign = texture->origin() == kTopLeft_GrSurfaceOrigin ? -1.0f : 1.0f; |
uman.set2f(fImageIncrementUni, 1.0f / texture->width(), ySign / texture->height()); |
- uman.set1f(fSurfaceScaleUni, effect.surfaceScale()); |
- fLight->setData(uman, effect.light()); |
+ uman.set1f(fSurfaceScaleUni, lighting.surfaceScale()); |
+ fLight->setData(uman, lighting.light()); |
fEffectMatrix.setData(uman, |
- effect.getMatrix(), |
- stage.getCoordChangeMatrix(), |
- effect.texture(0)); |
+ lighting.getMatrix(), |
+ drawEffect, |
+ lighting.texture(0)); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -1236,8 +1238,8 @@ |
/////////////////////////////////////////////////////////////////////////////// |
GrGLDiffuseLightingEffect::GrGLDiffuseLightingEffect(const GrBackendEffectFactory& factory, |
- const GrEffectRef& effect) |
- : INHERITED(factory, effect) |
+ const GrDrawEffect& drawEffect) |
+ : INHERITED(factory, drawEffect) |
, fKDUni(kInvalidUniformHandle) { |
} |
@@ -1266,10 +1268,10 @@ |
} |
void GrGLDiffuseLightingEffect::setData(const GrGLUniformManager& uman, |
- const GrEffectStage& stage) { |
- INHERITED::setData(uman, stage); |
- const GrDiffuseLightingEffect& effect = GetEffectFromStage<GrDiffuseLightingEffect>(stage); |
- uman.set1f(fKDUni, effect.kd()); |
+ const GrDrawEffect& drawEffect) { |
+ INHERITED::setData(uman, drawEffect); |
+ const GrDiffuseLightingEffect& diffuse = drawEffect.castEffect<GrDiffuseLightingEffect>(); |
+ uman.set1f(fKDUni, diffuse.kd()); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -1307,8 +1309,8 @@ |
/////////////////////////////////////////////////////////////////////////////// |
GrGLSpecularLightingEffect::GrGLSpecularLightingEffect(const GrBackendEffectFactory& factory, |
- const GrEffectRef& effect) |
- : GrGLLightingEffect(factory, effect) |
+ const GrDrawEffect& drawEffect) |
+ : GrGLLightingEffect(factory, drawEffect) |
, fKSUni(kInvalidUniformHandle) |
, fShininessUni(kInvalidUniformHandle) { |
} |
@@ -1342,11 +1344,11 @@ |
} |
void GrGLSpecularLightingEffect::setData(const GrGLUniformManager& uman, |
- const GrEffectStage& stage) { |
- INHERITED::setData(uman, stage); |
- const GrSpecularLightingEffect& effect = GetEffectFromStage<GrSpecularLightingEffect>(stage); |
- uman.set1f(fKSUni, effect.ks()); |
- uman.set1f(fShininessUni, effect.shininess()); |
+ const GrDrawEffect& drawEffect) { |
+ INHERITED::setData(uman, drawEffect); |
+ const GrSpecularLightingEffect& spec = drawEffect.castEffect<GrSpecularLightingEffect>(); |
+ uman.set1f(fKSUni, spec.ks()); |
+ uman.set1f(fShininessUni, spec.shininess()); |
} |
/////////////////////////////////////////////////////////////////////////////// |
@@ -1360,8 +1362,7 @@ |
builder->fsCodeAppend(builder->getUniformCStr(this->lightColorUni())); |
} |
-void GrGLLight::setData(const GrGLUniformManager& uman, |
- const SkLight* light) const { |
+void GrGLLight::setData(const GrGLUniformManager& uman, const SkLight* light) const { |
setUniformPoint3(uman, fColorUni, light->color() * SkScalarInvert(SkIntToScalar(255))); |
} |
@@ -1383,8 +1384,7 @@ |
/////////////////////////////////////////////////////////////////////////////// |
-void GrGLPointLight::setData(const GrGLUniformManager& uman, |
- const SkLight* light) const { |
+void GrGLPointLight::setData(const GrGLUniformManager& uman, const SkLight* light) const { |
INHERITED::setData(uman, light); |
SkASSERT(light->type() == SkLight::kPoint_LightType); |
const SkPointLight* pointLight = static_cast<const SkPointLight*>(light); |
@@ -1400,8 +1400,7 @@ |
/////////////////////////////////////////////////////////////////////////////// |
-void GrGLSpotLight::setData(const GrGLUniformManager& uman, |
- const SkLight* light) const { |
+void GrGLSpotLight::setData(const GrGLUniformManager& uman, const SkLight* light) const { |
INHERITED::setData(uman, light); |
SkASSERT(light->type() == SkLight::kSpot_LightType); |
const SkSpotLight* spotLight = static_cast<const SkSpotLight *>(light); |