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 |