| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 The Android Open Source Project | 2 * Copyright 2012 The Android Open Source Project |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "SkLightingImageFilter.h" | 8 #include "SkLightingImageFilter.h" |
| 9 #include "SkBitmap.h" | 9 #include "SkBitmap.h" |
| 10 #include "SkColorPriv.h" | 10 #include "SkColorPriv.h" |
| (...skipping 1113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1124 } | 1124 } |
| 1125 | 1125 |
| 1126 class GrGLLightingEffect : public GrGLEffect { | 1126 class GrGLLightingEffect : public GrGLEffect { |
| 1127 public: | 1127 public: |
| 1128 GrGLLightingEffect(const GrBackendEffectFactory& factory, | 1128 GrGLLightingEffect(const GrBackendEffectFactory& factory, |
| 1129 const GrDrawEffect& effect); | 1129 const GrDrawEffect& effect); |
| 1130 virtual ~GrGLLightingEffect(); | 1130 virtual ~GrGLLightingEffect(); |
| 1131 | 1131 |
| 1132 virtual void emitCode(GrGLShaderBuilder*, | 1132 virtual void emitCode(GrGLShaderBuilder*, |
| 1133 const GrDrawEffect&, | 1133 const GrDrawEffect&, |
| 1134 EffectKey, | 1134 const GrEffectKey&, |
| 1135 const char* outputColor, | 1135 const char* outputColor, |
| 1136 const char* inputColor, | 1136 const char* inputColor, |
| 1137 const TransformedCoordsArray&, | 1137 const TransformedCoordsArray&, |
| 1138 const TextureSamplerArray&) SK_OVERRIDE; | 1138 const TextureSamplerArray&) SK_OVERRIDE; |
| 1139 | 1139 |
| 1140 static inline EffectKey GenKey(const GrDrawEffect&, const GrGLCaps&); | 1140 static inline void GenKey(const GrDrawEffect&, const GrGLCaps&, GrEffectKeyB
uilder* b); |
| 1141 | 1141 |
| 1142 /** | 1142 /** |
| 1143 * Subclasses of GrGLLightingEffect must call INHERITED::setData(); | 1143 * Subclasses of GrGLLightingEffect must call INHERITED::setData(); |
| 1144 */ | 1144 */ |
| 1145 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER
RIDE; | 1145 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER
RIDE; |
| 1146 | 1146 |
| 1147 protected: | 1147 protected: |
| 1148 virtual void emitLightFunc(GrGLShaderBuilder*, SkString* funcName) = 0; | 1148 virtual void emitLightFunc(GrGLShaderBuilder*, SkString* funcName) = 0; |
| 1149 | 1149 |
| 1150 private: | 1150 private: |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1259 const GrLightingEffect& m = drawEffect.castEffect<GrLightingEffect>(); | 1259 const GrLightingEffect& m = drawEffect.castEffect<GrLightingEffect>(); |
| 1260 fLight = m.light()->createGLLight(); | 1260 fLight = m.light()->createGLLight(); |
| 1261 } | 1261 } |
| 1262 | 1262 |
| 1263 GrGLLightingEffect::~GrGLLightingEffect() { | 1263 GrGLLightingEffect::~GrGLLightingEffect() { |
| 1264 delete fLight; | 1264 delete fLight; |
| 1265 } | 1265 } |
| 1266 | 1266 |
| 1267 void GrGLLightingEffect::emitCode(GrGLShaderBuilder* builder, | 1267 void GrGLLightingEffect::emitCode(GrGLShaderBuilder* builder, |
| 1268 const GrDrawEffect&, | 1268 const GrDrawEffect&, |
| 1269 EffectKey key, | 1269 const GrEffectKey& key, |
| 1270 const char* outputColor, | 1270 const char* outputColor, |
| 1271 const char* inputColor, | 1271 const char* inputColor, |
| 1272 const TransformedCoordsArray& coords, | 1272 const TransformedCoordsArray& coords, |
| 1273 const TextureSamplerArray& samplers) { | 1273 const TextureSamplerArray& samplers) { |
| 1274 SkString coords2D = builder->ensureFSCoords2D(coords, 0); | 1274 SkString coords2D = builder->ensureFSCoords2D(coords, 0); |
| 1275 | 1275 |
| 1276 fImageIncrementUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibi
lity, | 1276 fImageIncrementUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibi
lity, |
| 1277 kVec2f_GrSLType, | 1277 kVec2f_GrSLType, |
| 1278 "ImageIncrement"); | 1278 "ImageIncrement"); |
| 1279 fSurfaceScaleUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibili
ty, | 1279 fSurfaceScaleUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibili
ty, |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1353 builder->fsCodeAppend(";\n"); | 1353 builder->fsCodeAppend(";\n"); |
| 1354 builder->fsCodeAppendf("\t\t%s = %s(%s(m, %s), surfaceToLight, ", | 1354 builder->fsCodeAppendf("\t\t%s = %s(%s(m, %s), surfaceToLight, ", |
| 1355 outputColor, lightFunc.c_str(), interiorNormalName.c_
str(), surfScale); | 1355 outputColor, lightFunc.c_str(), interiorNormalName.c_
str(), surfScale); |
| 1356 fLight->emitLightColor(builder, "surfaceToLight"); | 1356 fLight->emitLightColor(builder, "surfaceToLight"); |
| 1357 builder->fsCodeAppend(");\n"); | 1357 builder->fsCodeAppend(");\n"); |
| 1358 SkString modulate; | 1358 SkString modulate; |
| 1359 GrGLSLMulVarBy4f(&modulate, 2, outputColor, inputColor); | 1359 GrGLSLMulVarBy4f(&modulate, 2, outputColor, inputColor); |
| 1360 builder->fsCodeAppend(modulate.c_str()); | 1360 builder->fsCodeAppend(modulate.c_str()); |
| 1361 } | 1361 } |
| 1362 | 1362 |
| 1363 GrGLEffect::EffectKey GrGLLightingEffect::GenKey(const GrDrawEffect& drawEffect, | 1363 void GrGLLightingEffect::GenKey(const GrDrawEffect& drawEffect, |
| 1364 const GrGLCaps& caps) { | 1364 const GrGLCaps& caps, GrEffectKeyBuilder* b) { |
| 1365 return drawEffect.castEffect<GrLightingEffect>().light()->type(); | 1365 b->add32(drawEffect.castEffect<GrLightingEffect>().light()->type()); |
| 1366 } | 1366 } |
| 1367 | 1367 |
| 1368 void GrGLLightingEffect::setData(const GrGLUniformManager& uman, | 1368 void GrGLLightingEffect::setData(const GrGLUniformManager& uman, |
| 1369 const GrDrawEffect& drawEffect) { | 1369 const GrDrawEffect& drawEffect) { |
| 1370 const GrLightingEffect& lighting = drawEffect.castEffect<GrLightingEffect>()
; | 1370 const GrLightingEffect& lighting = drawEffect.castEffect<GrLightingEffect>()
; |
| 1371 GrTexture* texture = lighting.texture(0); | 1371 GrTexture* texture = lighting.texture(0); |
| 1372 float ySign = texture->origin() == kTopLeft_GrSurfaceOrigin ? -1.0f : 1.0f; | 1372 float ySign = texture->origin() == kTopLeft_GrSurfaceOrigin ? -1.0f : 1.0f; |
| 1373 uman.set2f(fImageIncrementUni, 1.0f / texture->width(), ySign / texture->hei
ght()); | 1373 uman.set2f(fImageIncrementUni, 1.0f / texture->width(), ySign / texture->hei
ght()); |
| 1374 uman.set1f(fSurfaceScaleUni, lighting.surfaceScale()); | 1374 uman.set1f(fSurfaceScaleUni, lighting.surfaceScale()); |
| 1375 SkAutoTUnref<SkLight> transformedLight(lighting.light()->transform(lighting.
filterMatrix())); | 1375 SkAutoTUnref<SkLight> transformedLight(lighting.light()->transform(lighting.
filterMatrix())); |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1616 | 1616 |
| 1617 builder->fsCodeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); | 1617 builder->fsCodeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); |
| 1618 } | 1618 } |
| 1619 | 1619 |
| 1620 #endif | 1620 #endif |
| 1621 | 1621 |
| 1622 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) | 1622 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) |
| 1623 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) | 1623 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) |
| 1624 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) | 1624 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) |
| 1625 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 1625 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| OLD | NEW |