aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/effects/SkLightingImageFilter.cpp
diff options
context:
space:
mode:
authorGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-10-23 14:53:55 +0000
committerGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-10-23 14:53:55 +0000
commit706f66831a575bdc2b1ab1331b48b793cd487356 (patch)
tree2a9457241edf1a433643c92d2dafa933fff7d0a2 /src/effects/SkLightingImageFilter.cpp
parent281c726c760c2b0ef957674da0360d5595d52a9c (diff)
Reland r6330 thru r6333 but do without enabling GL_ARB_fragment_coord_conventions on Intel GPUs.
git-svn-id: http://skia.googlecode.com/svn/trunk@6048 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/effects/SkLightingImageFilter.cpp')
-rw-r--r--src/effects/SkLightingImageFilter.cpp89
1 files changed, 30 insertions, 59 deletions
diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp
index ddb31936ca..07acde3f3e 100644
--- a/src/effects/SkLightingImageFilter.cpp
+++ b/src/effects/SkLightingImageFilter.cpp
@@ -42,14 +42,7 @@ void setUniformPoint3(const GrGLUniformManager& uman, UniformHandle uni, const S
}
void setUniformNormal3(const GrGLUniformManager& uman, UniformHandle uni, const SkPoint3& point) {
- setUniformPoint3(uman, uni, SkPoint3(point.fX, -point.fY, point.fZ));
-}
-
-void setUniformPoint3FlipY(const GrGLUniformManager& uman,
- UniformHandle uni,
- const SkPoint3& point,
- int height) {
- setUniformPoint3(uman, uni, SkPoint3(point.fX, height-point.fY, point.fZ));
+ setUniformPoint3(uman, uni, SkPoint3(point.fX, point.fY, point.fZ));
}
#endif
@@ -376,12 +369,12 @@ public:
virtual void setupVariables(GrGLShaderBuilder* builder);
virtual void emitVS(SkString* out) const {}
virtual void emitFuncs(GrGLShaderBuilder* builder) {}
- virtual void emitSurfaceToLight(const GrGLShaderBuilder*,
+ virtual void emitSurfaceToLight(GrGLShaderBuilder*,
SkString* out,
const char* z) const = 0;
virtual void emitLightColor(GrGLShaderBuilder*,
const char *surfaceToLight) const;
- virtual void setData(const GrGLUniformManager&, const GrRenderTarget* rt, const SkLight* light) const;
+ virtual void setData(const GrGLUniformManager&, const SkLight* light) const;
private:
typedef SkRefCnt INHERITED;
@@ -396,8 +389,8 @@ class GrGLDistantLight : public GrGLLight {
public:
virtual ~GrGLDistantLight() {}
virtual void setupVariables(GrGLShaderBuilder* builder) SK_OVERRIDE;
- virtual void setData(const GrGLUniformManager&, const GrRenderTarget* rt, const SkLight* light) const SK_OVERRIDE;
- virtual void emitSurfaceToLight(const GrGLShaderBuilder*,
+ virtual void setData(const GrGLUniformManager&, const SkLight* light) const SK_OVERRIDE;
+ virtual void emitSurfaceToLight(GrGLShaderBuilder*,
SkString* out,
const char* z) const SK_OVERRIDE;
private:
@@ -411,9 +404,9 @@ class GrGLPointLight : public GrGLLight {
public:
virtual ~GrGLPointLight() {}
virtual void setupVariables(GrGLShaderBuilder* builder) SK_OVERRIDE;
- virtual void setData(const GrGLUniformManager&, const GrRenderTarget* rt, const SkLight* light) const SK_OVERRIDE;
+ virtual void setData(const GrGLUniformManager&, const SkLight* light) const SK_OVERRIDE;
virtual void emitVS(SkString* out) const SK_OVERRIDE;
- virtual void emitSurfaceToLight(const GrGLShaderBuilder*,
+ virtual void emitSurfaceToLight(GrGLShaderBuilder*,
SkString* out,
const char* z) const SK_OVERRIDE;
private:
@@ -428,10 +421,10 @@ class GrGLSpotLight : public GrGLLight {
public:
virtual ~GrGLSpotLight() {}
virtual void setupVariables(GrGLShaderBuilder* builder) SK_OVERRIDE;
- virtual void setData(const GrGLUniformManager&, const GrRenderTarget* rt, const SkLight* light) const SK_OVERRIDE;
+ virtual void setData(const GrGLUniformManager&, const SkLight* light) const SK_OVERRIDE;
virtual void emitVS(SkString* out) const SK_OVERRIDE;
virtual void emitFuncs(GrGLShaderBuilder* builder);
- virtual void emitSurfaceToLight(const GrGLShaderBuilder* builder,
+ virtual void emitSurfaceToLight(GrGLShaderBuilder* builder,
SkString* out,
const char* z) const SK_OVERRIDE;
virtual void emitLightColor(GrGLShaderBuilder*,
@@ -964,10 +957,7 @@ public:
static inline StageKey GenKey(const GrCustomStage& s, const GrGLCaps& caps);
- virtual void setData(const GrGLUniformManager&,
- const GrCustomStage&,
- const GrRenderTarget*,
- int stageNum) SK_OVERRIDE;
+ virtual void setData(const GrGLUniformManager&, const GrCustomStage&) SK_OVERRIDE;
private:
typedef GrGLProgramStage INHERITED;
@@ -985,10 +975,7 @@ public:
const GrCustomStage& stage);
virtual void setupVariables(GrGLShaderBuilder* builder) SK_OVERRIDE;
virtual void emitLightFunc(GrGLShaderBuilder*, SkString* funcName) SK_OVERRIDE;
- virtual void setData(const GrGLUniformManager&,
- const GrCustomStage&,
- const GrRenderTarget*,
- int stageNum) SK_OVERRIDE;
+ virtual void setData(const GrGLUniformManager&, const GrCustomStage&) SK_OVERRIDE;
private:
typedef GrGLLightingEffect INHERITED;
@@ -1004,10 +991,7 @@ public:
const GrCustomStage& stage);
virtual void setupVariables(GrGLShaderBuilder* builder) SK_OVERRIDE;
virtual void emitLightFunc(GrGLShaderBuilder*, SkString* funcName) SK_OVERRIDE;
- virtual void setData(const GrGLUniformManager&,
- const GrCustomStage&,
- const GrRenderTarget*,
- int stageNum) SK_OVERRIDE;
+ virtual void setData(const GrGLUniformManager&, const GrCustomStage&) SK_OVERRIDE;
private:
typedef GrGLLightingEffect INHERITED;
@@ -1133,7 +1117,7 @@ void GrGLLightingEffect::emitFS(GrGLShaderBuilder* builder,
"pointToNormal",
SK_ARRAY_COUNT(gPointToNormalArgs),
gPointToNormalArgs,
- "\treturn normalize(vec3(-x * scale, -y * scale, 1));\n",
+ "\treturn normalize(vec3(-x * scale, y * scale, 1));\n",
&pointToNormalName);
static const GrGLShaderVar gInteriorNormalArgs[] = {
@@ -1189,17 +1173,14 @@ GrGLProgramStage::StageKey GrGLLightingEffect::GenKey(const GrCustomStage& s,
return static_cast<const GrLightingEffect&>(s).light()->type();
}
-void GrGLLightingEffect::setData(const GrGLUniformManager& uman,
- const GrCustomStage& data,
- const GrRenderTarget* rt,
- int stageNum) {
+void GrGLLightingEffect::setData(const GrGLUniformManager& uman, const GrCustomStage& data) {
const GrLightingEffect& effect =
static_cast<const GrLightingEffect&>(data);
GrGLTexture* texture = static_cast<GrGLTexture*>(data.texture(0));
float ySign = texture->orientation() == GrGLTexture::kTopDown_Orientation ? -1.0f : 1.0f;
uman.set2f(fImageIncrementUni, 1.0f / texture->width(), ySign / texture->height());
uman.set1f(fSurfaceScaleUni, effect.surfaceScale());
- fLight->setData(uman, rt, effect.light());
+ fLight->setData(uman, effect.light());
}
///////////////////////////////////////////////////////////////////////////////
@@ -1236,11 +1217,8 @@ void GrGLDiffuseLightingEffect::emitLightFunc(GrGLShaderBuilder* builder, SkStri
funcName);
}
-void GrGLDiffuseLightingEffect::setData(const GrGLUniformManager& uman,
- const GrCustomStage& data,
- const GrRenderTarget* rt,
- int stageNum) {
- INHERITED::setData(uman, data, rt, stageNum);
+void GrGLDiffuseLightingEffect::setData(const GrGLUniformManager& uman, const GrCustomStage& data) {
+ INHERITED::setData(uman, data);
const GrDiffuseLightingEffect& effect =
static_cast<const GrDiffuseLightingEffect&>(data);
uman.set1f(fKDUni, effect.kd());
@@ -1319,10 +1297,8 @@ void GrGLSpecularLightingEffect::emitLightFunc(GrGLShaderBuilder* builder, SkStr
}
void GrGLSpecularLightingEffect::setData(const GrGLUniformManager& uman,
- const GrCustomStage& data,
- const GrRenderTarget* rt,
- int stageNum) {
- INHERITED::setData(uman, data, rt, stageNum);
+ const GrCustomStage& data) {
+ INHERITED::setData(uman, data);
const GrSpecularLightingEffect& effect = static_cast<const GrSpecularLightingEffect&>(data);
uman.set1f(fKSUni, effect.ks());
uman.set1f(fShininessUni, effect.shininess());
@@ -1342,7 +1318,6 @@ void GrGLLight::setupVariables(GrGLShaderBuilder* builder) {
}
void GrGLLight::setData(const GrGLUniformManager& uman,
- const GrRenderTarget* rt,
const SkLight* light) const {
setUniformPoint3(uman, fColorUni, light->color() * SkScalarInvert(SkIntToScalar(255)));
}
@@ -1355,16 +1330,14 @@ void GrGLDistantLight::setupVariables(GrGLShaderBuilder* builder) {
"LightDirection");
}
-void GrGLDistantLight::setData(const GrGLUniformManager& uman,
- const GrRenderTarget* rt,
- const SkLight* light) const {
- INHERITED::setData(uman, rt, light);
+void GrGLDistantLight::setData(const GrGLUniformManager& uman, const SkLight* light) const {
+ INHERITED::setData(uman, light);
SkASSERT(light->type() == SkLight::kDistant_LightType);
const SkDistantLight* distantLight = static_cast<const SkDistantLight*>(light);
setUniformNormal3(uman, fDirectionUni, distantLight->direction());
}
-void GrGLDistantLight::emitSurfaceToLight(const GrGLShaderBuilder* builder,
+void GrGLDistantLight::emitSurfaceToLight(GrGLShaderBuilder* builder,
SkString* out,
const char* z) const {
const char* dir = builder->getUniformCStr(fDirectionUni);
@@ -1380,22 +1353,21 @@ void GrGLPointLight::setupVariables(GrGLShaderBuilder* builder) {
}
void GrGLPointLight::setData(const GrGLUniformManager& uman,
- const GrRenderTarget* rt,
const SkLight* light) const {
- INHERITED::setData(uman, rt, light);
+ INHERITED::setData(uman, light);
SkASSERT(light->type() == SkLight::kPoint_LightType);
const SkPointLight* pointLight = static_cast<const SkPointLight*>(light);
- setUniformPoint3FlipY(uman, fLocationUni, pointLight->location(), rt->height());
+ setUniformPoint3(uman, fLocationUni, pointLight->location());
}
void GrGLPointLight::emitVS(SkString* out) const {
}
-void GrGLPointLight::emitSurfaceToLight(const GrGLShaderBuilder* builder,
+void GrGLPointLight::emitSurfaceToLight(GrGLShaderBuilder* builder,
SkString* out,
const char* z) const {
const char* loc = builder->getUniformCStr(fLocationUni);
- out->appendf("normalize(%s - vec3(gl_FragCoord.xy, %s))", loc, z);
+ out->appendf("normalize(%s - vec3(%s.xy, %s))", loc, builder->fragmentPosition(), z);
}
///////////////////////////////////////////////////////////////////////////////
@@ -1417,12 +1389,11 @@ void GrGLSpotLight::setupVariables(GrGLShaderBuilder* builder) {
}
void GrGLSpotLight::setData(const GrGLUniformManager& uman,
- const GrRenderTarget* rt,
const SkLight* light) const {
- INHERITED::setData(uman, rt, light);
+ INHERITED::setData(uman, light);
SkASSERT(light->type() == SkLight::kSpot_LightType);
const SkSpotLight* spotLight = static_cast<const SkSpotLight *>(light);
- setUniformPoint3FlipY(uman, fLocationUni, spotLight->location(), rt->height());
+ setUniformPoint3(uman, fLocationUni, spotLight->location());
uman.set1f(fExponentUni, spotLight->specularExponent());
uman.set1f(fCosInnerConeAngleUni, spotLight->cosInnerConeAngle());
uman.set1f(fCosOuterConeAngleUni, spotLight->cosOuterConeAngle());
@@ -1463,11 +1434,11 @@ void GrGLSpotLight::emitFuncs(GrGLShaderBuilder* builder) {
&fLightColorFunc);
}
-void GrGLSpotLight::emitSurfaceToLight(const GrGLShaderBuilder* builder,
+void GrGLSpotLight::emitSurfaceToLight(GrGLShaderBuilder* builder,
SkString* out,
const char* z) const {
const char* location= builder->getUniformCStr(fLocationUni);
- out->appendf("normalize(%s - vec3(gl_FragCoord.xy, %s))", location, z);
+ out->appendf("normalize(%s - vec3(%s.xy, %s))", location, builder->fragmentPosition(), z);
}
void GrGLSpotLight::emitLightColor(GrGLShaderBuilder* builder,