| Index: src/effects/SkLightingImageFilter.cpp
|
| diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp
|
| index 7a74f73624bc89411c12d79c8e149417f2e50852..7dcd7297a4deee0225a55761c5f126621ad1d6b4 100644
|
| --- a/src/effects/SkLightingImageFilter.cpp
|
| +++ b/src/effects/SkLightingImageFilter.cpp
|
| @@ -23,9 +23,6 @@
|
| class GrGLDiffuseLightingEffect;
|
| class GrGLSpecularLightingEffect;
|
|
|
| -// For brevity
|
| -typedef GrGLUniformManager::UniformHandle UniformHandle;
|
| -static const UniformHandle kInvalidUniformHandle = GrGLUniformManager::kInvalidUniformHandle;
|
| #endif
|
|
|
| namespace {
|
| @@ -36,13 +33,13 @@ const SkScalar gOneHalf = SkFloatToScalar(0.5f);
|
| const SkScalar gOneQuarter = SkFloatToScalar(0.25f);
|
|
|
| #if SK_SUPPORT_GPU
|
| -void setUniformPoint3(const GrGLUniformManager& uman, UniformHandle uni, const SkPoint3& point) {
|
| +void setUniformPoint3(const GrGLContext& context, GrGLUniform* uni, const SkPoint3& point) {
|
| GR_STATIC_ASSERT(sizeof(SkPoint3) == 3 * sizeof(GrGLfloat));
|
| - uman.set3fv(uni, 0, 1, &point.fX);
|
| + uni->set3fv(context, 0, 1, &point.fX);
|
| }
|
|
|
| -void setUniformNormal3(const GrGLUniformManager& uman, UniformHandle uni, const SkPoint3& point) {
|
| - setUniformPoint3(uman, uni, SkPoint3(point.fX, point.fY, point.fZ));
|
| +void setUniformNormal3(const GrGLContext& context, GrGLUniform* uni, const SkPoint3& point) {
|
| + setUniformPoint3(context, uni, SkPoint3(point.fX, point.fY, point.fZ));
|
| }
|
| #endif
|
|
|
| @@ -419,7 +416,7 @@ public:
|
| * This is called by GrGLLightingEffect::emitCode() before either of the two virtual functions
|
| * below. It adds a vec3f uniform visible in the FS that represents the constant light color.
|
| */
|
| - void emitLightColorUniform(GrGLShaderBuilder*);
|
| + GrGLShaderBuilder::Uniform* emitLightColorUniform(GrGLShaderBuilder*);
|
|
|
| /**
|
| * These two functions are called from GrGLLightingEffect's emitCode() function.
|
| @@ -430,11 +427,11 @@ public:
|
| * and so this function only needs to be overridden if the light color varies spatially.
|
| */
|
| virtual void emitSurfaceToLight(GrGLShaderBuilder*, const char* z) = 0;
|
| - virtual void emitLightColor(GrGLShaderBuilder*, const char *surfaceToLight);
|
| + virtual void emitLightColor(GrGLShaderBuilder*, GrGLShaderBuilder::Uniform*, const char *surfaceToLight);
|
|
|
| // This is called from GrGLLightingEffect's setData(). Subclasses of GrGLLight must call
|
| // INHERITED::setData().
|
| - virtual void setData(const GrGLUniformManager&,
|
| + virtual void setData(const GrGLContext&,
|
| const SkLight* light,
|
| const SkIPoint& offset) const;
|
|
|
| @@ -443,10 +440,10 @@ protected:
|
| * Gets the constant light color uniform. Subclasses can use this in their emitLightColor
|
| * function.
|
| */
|
| - UniformHandle lightColorUni() const { return fColorUni; }
|
| + GrGLUniform* lightColorUni() const { return fColorUni; }
|
|
|
| private:
|
| - UniformHandle fColorUni;
|
| + GrGLUniform* fColorUni;
|
|
|
| typedef SkRefCnt INHERITED;
|
| };
|
| @@ -456,14 +453,14 @@ private:
|
| class GrGLDistantLight : public GrGLLight {
|
| public:
|
| virtual ~GrGLDistantLight() {}
|
| - virtual void setData(const GrGLUniformManager&,
|
| + virtual void setData(const GrGLContext&,
|
| const SkLight* light,
|
| const SkIPoint& offset) const SK_OVERRIDE;
|
| virtual void emitSurfaceToLight(GrGLShaderBuilder*, const char* z) SK_OVERRIDE;
|
|
|
| private:
|
| typedef GrGLLight INHERITED;
|
| - UniformHandle fDirectionUni;
|
| + GrGLUniform* fDirectionUni;
|
| };
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| @@ -471,14 +468,14 @@ private:
|
| class GrGLPointLight : public GrGLLight {
|
| public:
|
| virtual ~GrGLPointLight() {}
|
| - virtual void setData(const GrGLUniformManager&,
|
| + virtual void setData(const GrGLContext&,
|
| const SkLight* light,
|
| const SkIPoint& offset) const SK_OVERRIDE;
|
| virtual void emitSurfaceToLight(GrGLShaderBuilder*, const char* z) SK_OVERRIDE;
|
|
|
| private:
|
| typedef GrGLLight INHERITED;
|
| - UniformHandle fLocationUni;
|
| + GrGLUniform* fLocationUni;
|
| };
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| @@ -486,22 +483,22 @@ private:
|
| class GrGLSpotLight : public GrGLLight {
|
| public:
|
| virtual ~GrGLSpotLight() {}
|
| - virtual void setData(const GrGLUniformManager&,
|
| + virtual void setData(const GrGLContext&,
|
| const SkLight* light,
|
| const SkIPoint& offset) const SK_OVERRIDE;
|
| virtual void emitSurfaceToLight(GrGLShaderBuilder*, const char* z) SK_OVERRIDE;
|
| - virtual void emitLightColor(GrGLShaderBuilder*, const char *surfaceToLight) SK_OVERRIDE;
|
| + virtual void emitLightColor(GrGLShaderBuilder*, GrGLShaderBuilder::Uniform*, const char *surfaceToLight) SK_OVERRIDE;
|
|
|
| private:
|
| typedef GrGLLight INHERITED;
|
|
|
| SkString fLightColorFunc;
|
| - UniformHandle fLocationUni;
|
| - UniformHandle fExponentUni;
|
| - UniformHandle fCosOuterConeAngleUni;
|
| - UniformHandle fCosInnerConeAngleUni;
|
| - UniformHandle fConeScaleUni;
|
| - UniformHandle fSUni;
|
| + GrGLUniform* fLocationUni;
|
| + GrGLUniform* fExponentUni;
|
| + GrGLUniform* fCosOuterConeAngleUni;
|
| + GrGLUniform* fCosInnerConeAngleUni;
|
| + GrGLUniform* fConeScaleUni;
|
| + GrGLUniform* fSUni;
|
| };
|
| #else
|
|
|
| @@ -1038,7 +1035,7 @@ public:
|
| /**
|
| * Subclasses of GrGLLightingEffect must call INHERITED::setData();
|
| */
|
| - virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVERRIDE;
|
| + virtual void setData(const GrGLContext&, const GrDrawEffect&) SK_OVERRIDE;
|
|
|
| protected:
|
| virtual void emitLightFunc(GrGLShaderBuilder*, SkString* funcName) = 0;
|
| @@ -1046,8 +1043,8 @@ protected:
|
| private:
|
| typedef GrGLEffect INHERITED;
|
|
|
| - UniformHandle fImageIncrementUni;
|
| - UniformHandle fSurfaceScaleUni;
|
| + GrGLUniform* fImageIncrementUni;
|
| + GrGLUniform* fSurfaceScaleUni;
|
| GrGLLight* fLight;
|
| GrGLEffectMatrix fEffectMatrix;
|
| };
|
| @@ -1059,12 +1056,12 @@ public:
|
| GrGLDiffuseLightingEffect(const GrBackendEffectFactory& factory,
|
| const GrDrawEffect& drawEffect);
|
| virtual void emitLightFunc(GrGLShaderBuilder*, SkString* funcName) SK_OVERRIDE;
|
| - virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVERRIDE;
|
| + virtual void setData(const GrGLContext&, const GrDrawEffect&) SK_OVERRIDE;
|
|
|
| private:
|
| typedef GrGLLightingEffect INHERITED;
|
|
|
| - UniformHandle fKDUni;
|
| + GrGLUniform* fKDUni;
|
| };
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| @@ -1074,13 +1071,13 @@ public:
|
| GrGLSpecularLightingEffect(const GrBackendEffectFactory& factory,
|
| const GrDrawEffect& effect);
|
| virtual void emitLightFunc(GrGLShaderBuilder*, SkString* funcName) SK_OVERRIDE;
|
| - virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVERRIDE;
|
| + virtual void setData(const GrGLContext&, const GrDrawEffect&) SK_OVERRIDE;
|
|
|
| private:
|
| typedef GrGLLightingEffect INHERITED;
|
|
|
| - UniformHandle fKSUni;
|
| - UniformHandle fShininessUni;
|
| + GrGLUniform* fKSUni;
|
| + GrGLUniform* fShininessUni;
|
| };
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| @@ -1150,8 +1147,8 @@ GrEffectRef* GrDiffuseLightingEffect::TestCreate(SkMWCRandom* random,
|
| GrGLLightingEffect::GrGLLightingEffect(const GrBackendEffectFactory& factory,
|
| const GrDrawEffect& drawEffect)
|
| : INHERITED(factory)
|
| - , fImageIncrementUni(kInvalidUniformHandle)
|
| - , fSurfaceScaleUni(kInvalidUniformHandle)
|
| + , fImageIncrementUni(NULL)
|
| + , fSurfaceScaleUni(NULL)
|
| , fEffectMatrix(drawEffect.castEffect<GrLightingEffect>().coordsType()) {
|
| const GrLightingEffect& m = drawEffect.castEffect<GrLightingEffect>();
|
| fLight = m.light()->createGLLight();
|
| @@ -1170,13 +1167,16 @@ void GrGLLightingEffect::emitCode(GrGLShaderBuilder* builder,
|
| const char* coords;
|
| fEffectMatrix.emitCodeMakeFSCoords2D(builder, key, &coords);
|
|
|
| - fImageIncrementUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
|
| - kVec2f_GrSLType,
|
| - "ImageIncrement");
|
| - fSurfaceScaleUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
|
| - kFloat_GrSLType,
|
| - "SurfaceScale");
|
| - fLight->emitLightColorUniform(builder);
|
| + GrGLShaderBuilder::Uniform* imageIncrementUni =
|
| + builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, kVec2f_GrSLType,
|
| + "ImageIncrement");
|
| + fImageIncrementUni = imageIncrementUni->glUniform();
|
| +
|
| + GrGLShaderBuilder::Uniform* surfaceScaleUni =
|
| + builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, kFloat_GrSLType, "SurfaceScale");
|
| + fSurfaceScaleUni = surfaceScaleUni->glUniform();
|
| +
|
| + GrGLShaderBuilder::Uniform* lightColorUni = fLight->emitLightColorUniform(builder);
|
| SkString lightFunc;
|
| this->emitLightFunc(builder, &lightFunc);
|
| static const GrGLShaderVar gSobelArgs[] = {
|
| @@ -1233,14 +1233,11 @@ void GrGLLightingEffect::emitCode(GrGLShaderBuilder* builder,
|
| builder->fsCodeAppendf("\t\tvec2 coord = %s;\n", coords);
|
| builder->fsCodeAppend("\t\tfloat m[9];\n");
|
|
|
| - const char* imgInc = builder->getUniformCStr(fImageIncrementUni);
|
| - const char* surfScale = builder->getUniformCStr(fSurfaceScaleUni);
|
| -
|
| int index = 0;
|
| for (int dy = -1; dy <= 1; dy++) {
|
| for (int dx = -1; dx <= 1; dx++) {
|
| SkString texCoords;
|
| - texCoords.appendf("coord + vec2(%d, %d) * %s", dx, dy, imgInc);
|
| + texCoords.appendf("coord + vec2(%d, %d) * %s", dx, dy, imageIncrementUni->c_str());
|
| builder->fsCodeAppendf("\t\tm[%d] = ", index++);
|
| builder->appendTextureLookup(GrGLShaderBuilder::kFragment_ShaderType,
|
| samplers[0],
|
| @@ -1250,12 +1247,12 @@ void GrGLLightingEffect::emitCode(GrGLShaderBuilder* builder,
|
| }
|
| builder->fsCodeAppend("\t\tvec3 surfaceToLight = ");
|
| SkString arg;
|
| - arg.appendf("%s * m[4]", surfScale);
|
| + arg.appendf("%s * m[4]", surfaceScaleUni->c_str());
|
| fLight->emitSurfaceToLight(builder, arg.c_str());
|
| builder->fsCodeAppend(";\n");
|
| builder->fsCodeAppendf("\t\t%s = %s(%s(m, %s), surfaceToLight, ",
|
| - outputColor, lightFunc.c_str(), interiorNormalName.c_str(), surfScale);
|
| - fLight->emitLightColor(builder, "surfaceToLight");
|
| + outputColor, lightFunc.c_str(), interiorNormalName.c_str(), surfaceScaleUni->c_str());
|
| + fLight->emitLightColor(builder, lightColorUni, "surfaceToLight");
|
| builder->fsCodeAppend(");\n");
|
| SkString modulate;
|
| GrGLSLMulVarBy4f(&modulate, 2, outputColor, inputColor);
|
| @@ -1274,15 +1271,15 @@ GrGLEffect::EffectKey GrGLLightingEffect::GenKey(const GrDrawEffect& drawEffect,
|
| return key | matrixKey;
|
| }
|
|
|
| -void GrGLLightingEffect::setData(const GrGLUniformManager& uman,
|
| +void GrGLLightingEffect::setData(const GrGLContext& context,
|
| 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, lighting.surfaceScale());
|
| - fLight->setData(uman, lighting.light(), lighting.offset());
|
| - fEffectMatrix.setData(uman,
|
| + fImageIncrementUni->set2f(context, 1.0f / texture->width(), ySign / texture->height());
|
| + fSurfaceScaleUni->set1f(context, lighting.surfaceScale());
|
| + fLight->setData(context, lighting.light(), lighting.offset());
|
| + fEffectMatrix.setData(context,
|
| lighting.getMatrix(),
|
| drawEffect,
|
| lighting.texture(0));
|
| @@ -1295,7 +1292,7 @@ void GrGLLightingEffect::setData(const GrGLUniformManager& uman,
|
| GrGLDiffuseLightingEffect::GrGLDiffuseLightingEffect(const GrBackendEffectFactory& factory,
|
| const GrDrawEffect& drawEffect)
|
| : INHERITED(factory, drawEffect)
|
| - , fKDUni(kInvalidUniformHandle) {
|
| + , fKDUni(NULL) {
|
| }
|
|
|
| void GrGLDiffuseLightingEffect::emitLightFunc(GrGLShaderBuilder* builder, SkString* funcName) {
|
| @@ -1303,7 +1300,7 @@ void GrGLDiffuseLightingEffect::emitLightFunc(GrGLShaderBuilder* builder, SkStri
|
| fKDUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
|
| kFloat_GrSLType,
|
| "KD",
|
| - &kd);
|
| + &kd)->glUniform();
|
|
|
| static const GrGLShaderVar gLightArgs[] = {
|
| GrGLShaderVar("normal", kVec3f_GrSLType),
|
| @@ -1322,11 +1319,11 @@ void GrGLDiffuseLightingEffect::emitLightFunc(GrGLShaderBuilder* builder, SkStri
|
| funcName);
|
| }
|
|
|
| -void GrGLDiffuseLightingEffect::setData(const GrGLUniformManager& uman,
|
| +void GrGLDiffuseLightingEffect::setData(const GrGLContext& context,
|
| const GrDrawEffect& drawEffect) {
|
| - INHERITED::setData(uman, drawEffect);
|
| + INHERITED::setData(context, drawEffect);
|
| const GrDiffuseLightingEffect& diffuse = drawEffect.castEffect<GrDiffuseLightingEffect>();
|
| - uman.set1f(fKDUni, diffuse.kd());
|
| + fKDUni->set1f(context, diffuse.kd());
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| @@ -1372,9 +1369,9 @@ GrEffectRef* GrSpecularLightingEffect::TestCreate(SkMWCRandom* random,
|
|
|
| GrGLSpecularLightingEffect::GrGLSpecularLightingEffect(const GrBackendEffectFactory& factory,
|
| const GrDrawEffect& drawEffect)
|
| - : GrGLLightingEffect(factory, drawEffect)
|
| - , fKSUni(kInvalidUniformHandle)
|
| - , fShininessUni(kInvalidUniformHandle) {
|
| + : INHERITED(factory, drawEffect)
|
| + , fKSUni(NULL)
|
| + , fShininessUni(NULL) {
|
| }
|
|
|
| void GrGLSpecularLightingEffect::emitLightFunc(GrGLShaderBuilder* builder, SkString* funcName) {
|
| @@ -1382,9 +1379,9 @@ void GrGLSpecularLightingEffect::emitLightFunc(GrGLShaderBuilder* builder, SkStr
|
| const char* shininess;
|
|
|
| fKSUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
|
| - kFloat_GrSLType, "KS", &ks);
|
| + kFloat_GrSLType, "KS", &ks)->glUniform();
|
| fShininessUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
|
| - kFloat_GrSLType, "Shininess", &shininess);
|
| + kFloat_GrSLType, "Shininess", &shininess)->glUniform();
|
|
|
| static const GrGLShaderVar gLightArgs[] = {
|
| GrGLShaderVar("normal", kVec3f_GrSLType),
|
| @@ -1405,101 +1402,106 @@ void GrGLSpecularLightingEffect::emitLightFunc(GrGLShaderBuilder* builder, SkStr
|
| funcName);
|
| }
|
|
|
| -void GrGLSpecularLightingEffect::setData(const GrGLUniformManager& uman,
|
| +void GrGLSpecularLightingEffect::setData(const GrGLContext& context,
|
| const GrDrawEffect& drawEffect) {
|
| - INHERITED::setData(uman, drawEffect);
|
| + INHERITED::setData(context, drawEffect);
|
| const GrSpecularLightingEffect& spec = drawEffect.castEffect<GrSpecularLightingEffect>();
|
| - uman.set1f(fKSUni, spec.ks());
|
| - uman.set1f(fShininessUni, spec.shininess());
|
| + fKSUni->set1f(context, spec.ks());
|
| + fShininessUni->set1f(context, spec.shininess());
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| -void GrGLLight::emitLightColorUniform(GrGLShaderBuilder* builder) {
|
| - fColorUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
|
| - kVec3f_GrSLType, "LightColor");
|
| +GrGLShaderBuilder::Uniform* GrGLLight::emitLightColorUniform(GrGLShaderBuilder* builder) {
|
| + GrGLShaderBuilder::Uniform* colorUni =
|
| + builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
|
| + kVec3f_GrSLType, "LightColor");
|
| + fColorUni = colorUni->glUniform();
|
| + return colorUni;
|
| }
|
|
|
| void GrGLLight::emitLightColor(GrGLShaderBuilder* builder,
|
| + GrGLShaderBuilder::Uniform* colorUni,
|
| const char *surfaceToLight) {
|
| - builder->fsCodeAppend(builder->getUniformCStr(this->lightColorUni()));
|
| + builder->fsCodeAppend(colorUni->c_str());
|
| }
|
|
|
| -void GrGLLight::setData(const GrGLUniformManager& uman,
|
| +void GrGLLight::setData(const GrGLContext& context,
|
| const SkLight* light,
|
| const SkIPoint&) const {
|
| - setUniformPoint3(uman, fColorUni, light->color() * SkScalarInvert(SkIntToScalar(255)));
|
| + setUniformPoint3(context, fColorUni, light->color() * SkScalarInvert(SkIntToScalar(255)));
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -void GrGLDistantLight::setData(const GrGLUniformManager& uman,
|
| +void GrGLDistantLight::setData(const GrGLContext& context,
|
| const SkLight* light,
|
| const SkIPoint& offset) const {
|
| - INHERITED::setData(uman, light, offset);
|
| + INHERITED::setData(context, light, offset);
|
| SkASSERT(light->type() == SkLight::kDistant_LightType);
|
| const SkDistantLight* distantLight = static_cast<const SkDistantLight*>(light);
|
| - setUniformNormal3(uman, fDirectionUni, distantLight->direction());
|
| + setUniformNormal3(context, fDirectionUni, distantLight->direction());
|
| }
|
|
|
| void GrGLDistantLight::emitSurfaceToLight(GrGLShaderBuilder* builder, const char* z) {
|
| const char* dir;
|
| fDirectionUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, kVec3f_GrSLType,
|
| - "LightDirection", &dir);
|
| + "LightDirection", &dir)->glUniform();
|
| builder->fsCodeAppend(dir);
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -void GrGLPointLight::setData(const GrGLUniformManager& uman,
|
| +void GrGLPointLight::setData(const GrGLContext& context,
|
| const SkLight* light,
|
| const SkIPoint& offset) const {
|
| - INHERITED::setData(uman, light, offset);
|
| + INHERITED::setData(context, light, offset);
|
| SkASSERT(light->type() == SkLight::kPoint_LightType);
|
| const SkPointLight* pointLight = static_cast<const SkPointLight*>(light);
|
| SkPoint3 location = pointLight->location();
|
| location.fX -= offset.fX;
|
| location.fY -= offset.fY;
|
| - setUniformPoint3(uman, fLocationUni, location);
|
| + setUniformPoint3(context, fLocationUni, location);
|
| }
|
|
|
| void GrGLPointLight::emitSurfaceToLight(GrGLShaderBuilder* builder, const char* z) {
|
| const char* loc;
|
| fLocationUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType, kVec3f_GrSLType,
|
| - "LightLocation", &loc);
|
| + "LightLocation", &loc)->glUniform();
|
| builder->fsCodeAppendf("normalize(%s - vec3(%s.xy, %s))", loc, builder->fragmentPosition(), z);
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -void GrGLSpotLight::setData(const GrGLUniformManager& uman,
|
| +void GrGLSpotLight::setData(const GrGLContext& context,
|
| const SkLight* light,
|
| const SkIPoint& offset) const {
|
| - INHERITED::setData(uman, light, offset);
|
| + INHERITED::setData(context, light, offset);
|
| SkASSERT(light->type() == SkLight::kSpot_LightType);
|
| const SkSpotLight* spotLight = static_cast<const SkSpotLight *>(light);
|
| SkPoint3 location = spotLight->location();
|
| location.fX -= offset.fX;
|
| location.fY -= offset.fY;
|
| - setUniformPoint3(uman, fLocationUni, location);
|
| - uman.set1f(fExponentUni, spotLight->specularExponent());
|
| - uman.set1f(fCosInnerConeAngleUni, spotLight->cosInnerConeAngle());
|
| - uman.set1f(fCosOuterConeAngleUni, spotLight->cosOuterConeAngle());
|
| - uman.set1f(fConeScaleUni, spotLight->coneScale());
|
| - setUniformNormal3(uman, fSUni, spotLight->s());
|
| + setUniformPoint3(context, fLocationUni, location);
|
| + fExponentUni->set1f(context, spotLight->specularExponent());
|
| + fCosInnerConeAngleUni->set1f(context, spotLight->cosInnerConeAngle());
|
| + fCosOuterConeAngleUni->set1f(context, spotLight->cosOuterConeAngle());
|
| + fConeScaleUni->set1f(context, spotLight->coneScale());
|
| + setUniformNormal3(context, fSUni, spotLight->s());
|
| }
|
|
|
| void GrGLSpotLight::emitSurfaceToLight(GrGLShaderBuilder* builder, const char* z) {
|
| const char* location;
|
| fLocationUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
|
| - kVec3f_GrSLType, "LightLocation", &location);
|
| + kVec3f_GrSLType, "LightLocation", &location)->glUniform();
|
| builder->fsCodeAppendf("normalize(%s - vec3(%s.xy, %s))",
|
| location, builder->fragmentPosition(), z);
|
| }
|
|
|
| void GrGLSpotLight::emitLightColor(GrGLShaderBuilder* builder,
|
| + GrGLShaderBuilder::Uniform* lightUni,
|
| const char *surfaceToLight) {
|
|
|
| - const char* color = builder->getUniformCStr(this->lightColorUni()); // created by parent class.
|
| + const char* color = lightUni->c_str(); // created by parent class.
|
|
|
| const char* exponent;
|
| const char* cosInner;
|
| @@ -1507,15 +1509,15 @@ void GrGLSpotLight::emitLightColor(GrGLShaderBuilder* builder,
|
| const char* coneScale;
|
| const char* s;
|
| fExponentUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
|
| - kFloat_GrSLType, "Exponent", &exponent);
|
| + kFloat_GrSLType, "Exponent", &exponent)->glUniform();
|
| fCosInnerConeAngleUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
|
| - kFloat_GrSLType, "CosInnerConeAngle", &cosInner);
|
| + kFloat_GrSLType, "CosInnerConeAngle", &cosInner)->glUniform();
|
| fCosOuterConeAngleUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
|
| - kFloat_GrSLType, "CosOuterConeAngle", &cosOuter);
|
| + kFloat_GrSLType, "CosOuterConeAngle", &cosOuter)->glUniform();
|
| fConeScaleUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
|
| - kFloat_GrSLType, "ConeScale", &coneScale);
|
| + kFloat_GrSLType, "ConeScale", &coneScale)->glUniform();
|
| fSUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
|
| - kVec3f_GrSLType, "S", &s);
|
| + kVec3f_GrSLType, "S", &s)->glUniform();
|
|
|
| static const GrGLShaderVar gLightColorArgs[] = {
|
| GrGLShaderVar("surfaceToLight", kVec3f_GrSLType)
|
|
|