diff options
author | 2012-10-23 14:53:55 +0000 | |
---|---|---|
committer | 2012-10-23 14:53:55 +0000 | |
commit | 706f66831a575bdc2b1ab1331b48b793cd487356 (patch) | |
tree | 2a9457241edf1a433643c92d2dafa933fff7d0a2 /src/effects/SkLightingImageFilter.cpp | |
parent | 281c726c760c2b0ef957674da0360d5595d52a9c (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.cpp | 89 |
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, |