Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: src/effects/SkLightingImageFilter.cpp

Issue 571163002: removing GrDrawEffect (Closed) Base URL: https://skia.googlesource.com/skia.git@gp3
Patch Set: rebase after revert Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/effects/SkDisplacementMapEffect.cpp ('k') | src/effects/SkLumaColorFilter.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 1188 matching lines...) Expand 10 before | Expand all | Expand 10 after
1199 SkFAIL("Unexpected value."); 1199 SkFAIL("Unexpected value.");
1200 return NULL; 1200 return NULL;
1201 } 1201 }
1202 } 1202 }
1203 1203
1204 } 1204 }
1205 1205
1206 class GrGLLightingEffect : public GrGLEffect { 1206 class GrGLLightingEffect : public GrGLEffect {
1207 public: 1207 public:
1208 GrGLLightingEffect(const GrBackendEffectFactory& factory, 1208 GrGLLightingEffect(const GrBackendEffectFactory& factory,
1209 const GrDrawEffect& effect); 1209 const GrEffect& effect);
1210 virtual ~GrGLLightingEffect(); 1210 virtual ~GrGLLightingEffect();
1211 1211
1212 virtual void emitCode(GrGLProgramBuilder*, 1212 virtual void emitCode(GrGLProgramBuilder*,
1213 const GrDrawEffect&, 1213 const GrEffect&,
1214 const GrEffectKey&, 1214 const GrEffectKey&,
1215 const char* outputColor, 1215 const char* outputColor,
1216 const char* inputColor, 1216 const char* inputColor,
1217 const TransformedCoordsArray&, 1217 const TransformedCoordsArray&,
1218 const TextureSamplerArray&) SK_OVERRIDE; 1218 const TextureSamplerArray&) SK_OVERRIDE;
1219 1219
1220 static inline void GenKey(const GrDrawEffect&, const GrGLCaps&, GrEffectKeyB uilder* b); 1220 static inline void GenKey(const GrEffect&, const GrGLCaps&, GrEffectKeyBuild er* b);
1221 1221
1222 /** 1222 /**
1223 * Subclasses of GrGLLightingEffect must call INHERITED::setData(); 1223 * Subclasses of GrGLLightingEffect must call INHERITED::setData();
1224 */ 1224 */
1225 virtual void setData(const GrGLProgramDataManager&, const GrDrawEffect&) SK_ OVERRIDE; 1225 virtual void setData(const GrGLProgramDataManager&, const GrEffect&) SK_OVER RIDE;
1226 1226
1227 protected: 1227 protected:
1228 virtual void emitLightFunc(GrGLProgramBuilder*, SkString* funcName) = 0; 1228 virtual void emitLightFunc(GrGLProgramBuilder*, SkString* funcName) = 0;
1229 1229
1230 private: 1230 private:
1231 typedef GrGLEffect INHERITED; 1231 typedef GrGLEffect INHERITED;
1232 1232
1233 UniformHandle fImageIncrementUni; 1233 UniformHandle fImageIncrementUni;
1234 UniformHandle fSurfaceScaleUni; 1234 UniformHandle fSurfaceScaleUni;
1235 GrGLLight* fLight; 1235 GrGLLight* fLight;
1236 }; 1236 };
1237 1237
1238 /////////////////////////////////////////////////////////////////////////////// 1238 ///////////////////////////////////////////////////////////////////////////////
1239 1239
1240 class GrGLDiffuseLightingEffect : public GrGLLightingEffect { 1240 class GrGLDiffuseLightingEffect : public GrGLLightingEffect {
1241 public: 1241 public:
1242 GrGLDiffuseLightingEffect(const GrBackendEffectFactory& factory, 1242 GrGLDiffuseLightingEffect(const GrBackendEffectFactory& factory,
1243 const GrDrawEffect& drawEffect); 1243 const GrEffect& effect);
1244 virtual void emitLightFunc(GrGLProgramBuilder*, SkString* funcName) SK_OVERR IDE; 1244 virtual void emitLightFunc(GrGLProgramBuilder*, SkString* funcName) SK_OVERR IDE;
1245 virtual void setData(const GrGLProgramDataManager&, const GrDrawEffect&) SK_ OVERRIDE; 1245 virtual void setData(const GrGLProgramDataManager&, const GrEffect&) SK_OVER RIDE;
1246 1246
1247 private: 1247 private:
1248 typedef GrGLLightingEffect INHERITED; 1248 typedef GrGLLightingEffect INHERITED;
1249 1249
1250 UniformHandle fKDUni; 1250 UniformHandle fKDUni;
1251 }; 1251 };
1252 1252
1253 /////////////////////////////////////////////////////////////////////////////// 1253 ///////////////////////////////////////////////////////////////////////////////
1254 1254
1255 class GrGLSpecularLightingEffect : public GrGLLightingEffect { 1255 class GrGLSpecularLightingEffect : public GrGLLightingEffect {
1256 public: 1256 public:
1257 GrGLSpecularLightingEffect(const GrBackendEffectFactory& factory, 1257 GrGLSpecularLightingEffect(const GrBackendEffectFactory& factory,
1258 const GrDrawEffect& effect); 1258 const GrEffect& effect);
1259 virtual void emitLightFunc(GrGLProgramBuilder*, SkString* funcName) SK_OVERR IDE; 1259 virtual void emitLightFunc(GrGLProgramBuilder*, SkString* funcName) SK_OVERR IDE;
1260 virtual void setData(const GrGLProgramDataManager&, const GrDrawEffect&) SK_ OVERRIDE; 1260 virtual void setData(const GrGLProgramDataManager&, const GrEffect&) SK_OVER RIDE;
1261 1261
1262 private: 1262 private:
1263 typedef GrGLLightingEffect INHERITED; 1263 typedef GrGLLightingEffect INHERITED;
1264 1264
1265 UniformHandle fKSUni; 1265 UniformHandle fKSUni;
1266 UniformHandle fShininessUni; 1266 UniformHandle fShininessUni;
1267 }; 1267 };
1268 1268
1269 /////////////////////////////////////////////////////////////////////////////// 1269 ///////////////////////////////////////////////////////////////////////////////
1270 1270
1271 GrLightingEffect::GrLightingEffect(GrTexture* texture, 1271 GrLightingEffect::GrLightingEffect(GrTexture* texture,
1272 const SkLight* light, 1272 const SkLight* light,
1273 SkScalar surfaceScale, 1273 SkScalar surfaceScale,
1274 const SkMatrix& matrix) 1274 const SkMatrix& matrix)
1275 : INHERITED(texture, GrCoordTransform::MakeDivByTextureWHMatrix(texture)) 1275 : INHERITED(texture, GrCoordTransform::MakeDivByTextureWHMatrix(texture))
1276 , fLight(light) 1276 , fLight(light)
1277 , fSurfaceScale(surfaceScale) 1277 , fSurfaceScale(surfaceScale)
1278 , fFilterMatrix(matrix) { 1278 , fFilterMatrix(matrix) {
1279 fLight->ref(); 1279 fLight->ref();
1280 if (light->requiresFragmentPosition()) { 1280 if (light->requiresFragmentPosition()) {
1281 this->setWillReadFragmentPosition(); 1281 this->setWillReadFragmentPosition();
1282 } 1282 }
1283 } 1283 }
1284 1284
1285 GrLightingEffect::~GrLightingEffect() { 1285 GrLightingEffect::~GrLightingEffect() {
1286 fLight->unref(); 1286 fLight->unref();
1287 } 1287 }
1288 1288
1289 bool GrLightingEffect::onIsEqual(const GrEffect& sBase) const { 1289 bool GrLightingEffect::onIsEqual(const GrEffect& sBase) const {
1290 const GrLightingEffect& s = CastEffect<GrLightingEffect>(sBase); 1290 const GrLightingEffect& s = sBase.cast<GrLightingEffect>();
1291 return this->texture(0) == s.texture(0) && 1291 return this->texture(0) == s.texture(0) &&
1292 fLight->isEqual(*s.fLight) && 1292 fLight->isEqual(*s.fLight) &&
1293 fSurfaceScale == s.fSurfaceScale; 1293 fSurfaceScale == s.fSurfaceScale;
1294 } 1294 }
1295 1295
1296 /////////////////////////////////////////////////////////////////////////////// 1296 ///////////////////////////////////////////////////////////////////////////////
1297 1297
1298 GrDiffuseLightingEffect::GrDiffuseLightingEffect(GrTexture* texture, 1298 GrDiffuseLightingEffect::GrDiffuseLightingEffect(GrTexture* texture,
1299 const SkLight* light, 1299 const SkLight* light,
1300 SkScalar surfaceScale, 1300 SkScalar surfaceScale,
1301 const SkMatrix& matrix, 1301 const SkMatrix& matrix,
1302 SkScalar kd) 1302 SkScalar kd)
1303 : INHERITED(texture, light, surfaceScale, matrix), fKD(kd) { 1303 : INHERITED(texture, light, surfaceScale, matrix), fKD(kd) {
1304 } 1304 }
1305 1305
1306 const GrBackendEffectFactory& GrDiffuseLightingEffect::getFactory() const { 1306 const GrBackendEffectFactory& GrDiffuseLightingEffect::getFactory() const {
1307 return GrTBackendEffectFactory<GrDiffuseLightingEffect>::getInstance(); 1307 return GrTBackendEffectFactory<GrDiffuseLightingEffect>::getInstance();
1308 } 1308 }
1309 1309
1310 bool GrDiffuseLightingEffect::onIsEqual(const GrEffect& sBase) const { 1310 bool GrDiffuseLightingEffect::onIsEqual(const GrEffect& sBase) const {
1311 const GrDiffuseLightingEffect& s = CastEffect<GrDiffuseLightingEffect>(sBase ); 1311 const GrDiffuseLightingEffect& s = sBase.cast<GrDiffuseLightingEffect>();
1312 return INHERITED::onIsEqual(sBase) && 1312 return INHERITED::onIsEqual(sBase) &&
1313 this->kd() == s.kd(); 1313 this->kd() == s.kd();
1314 } 1314 }
1315 1315
1316 GR_DEFINE_EFFECT_TEST(GrDiffuseLightingEffect); 1316 GR_DEFINE_EFFECT_TEST(GrDiffuseLightingEffect);
1317 1317
1318 GrEffect* GrDiffuseLightingEffect::TestCreate(SkRandom* random, 1318 GrEffect* GrDiffuseLightingEffect::TestCreate(SkRandom* random,
1319 GrContext* context, 1319 GrContext* context,
1320 const GrDrawTargetCaps&, 1320 const GrDrawTargetCaps&,
1321 GrTexture* textures[]) { 1321 GrTexture* textures[]) {
1322 SkScalar surfaceScale = random->nextSScalar1(); 1322 SkScalar surfaceScale = random->nextSScalar1();
1323 SkScalar kd = random->nextUScalar1(); 1323 SkScalar kd = random->nextUScalar1();
1324 SkAutoTUnref<SkLight> light(create_random_light(random)); 1324 SkAutoTUnref<SkLight> light(create_random_light(random));
1325 SkMatrix matrix; 1325 SkMatrix matrix;
1326 for (int i = 0; i < 9; i++) { 1326 for (int i = 0; i < 9; i++) {
1327 matrix[i] = random->nextUScalar1(); 1327 matrix[i] = random->nextUScalar1();
1328 } 1328 }
1329 return GrDiffuseLightingEffect::Create(textures[GrEffectUnitTest::kAlphaText ureIdx], 1329 return GrDiffuseLightingEffect::Create(textures[GrEffectUnitTest::kAlphaText ureIdx],
1330 light, surfaceScale, matrix, kd); 1330 light, surfaceScale, matrix, kd);
1331 } 1331 }
1332 1332
1333 1333
1334 /////////////////////////////////////////////////////////////////////////////// 1334 ///////////////////////////////////////////////////////////////////////////////
1335 1335
1336 GrGLLightingEffect::GrGLLightingEffect(const GrBackendEffectFactory& factory, 1336 GrGLLightingEffect::GrGLLightingEffect(const GrBackendEffectFactory& factory,
1337 const GrDrawEffect& drawEffect) 1337 const GrEffect& effect)
1338 : INHERITED(factory) { 1338 : INHERITED(factory) {
1339 const GrLightingEffect& m = drawEffect.castEffect<GrLightingEffect>(); 1339 const GrLightingEffect& m = effect.cast<GrLightingEffect>();
1340 fLight = m.light()->createGLLight(); 1340 fLight = m.light()->createGLLight();
1341 } 1341 }
1342 1342
1343 GrGLLightingEffect::~GrGLLightingEffect() { 1343 GrGLLightingEffect::~GrGLLightingEffect() {
1344 delete fLight; 1344 delete fLight;
1345 } 1345 }
1346 1346
1347 void GrGLLightingEffect::emitCode(GrGLProgramBuilder* builder, 1347 void GrGLLightingEffect::emitCode(GrGLProgramBuilder* builder,
1348 const GrDrawEffect&, 1348 const GrEffect&,
1349 const GrEffectKey& key, 1349 const GrEffectKey& key,
1350 const char* outputColor, 1350 const char* outputColor,
1351 const char* inputColor, 1351 const char* inputColor,
1352 const TransformedCoordsArray& coords, 1352 const TransformedCoordsArray& coords,
1353 const TextureSamplerArray& samplers) { 1353 const TextureSamplerArray& samplers) {
1354 fImageIncrementUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visib ility, 1354 fImageIncrementUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visib ility,
1355 kVec2f_GrSLType, 1355 kVec2f_GrSLType,
1356 "ImageIncrement"); 1356 "ImageIncrement");
1357 fSurfaceScaleUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibil ity, 1357 fSurfaceScaleUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibil ity,
1358 kFloat_GrSLType, 1358 kFloat_GrSLType,
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1434 fsBuilder->codeAppend(";\n"); 1434 fsBuilder->codeAppend(";\n");
1435 fsBuilder->codeAppendf("\t\t%s = %s(%s(m, %s), surfaceToLight, ", 1435 fsBuilder->codeAppendf("\t\t%s = %s(%s(m, %s), surfaceToLight, ",
1436 outputColor, lightFunc.c_str(), interiorNormalName.c_ str(), surfScale); 1436 outputColor, lightFunc.c_str(), interiorNormalName.c_ str(), surfScale);
1437 fLight->emitLightColor(builder, "surfaceToLight"); 1437 fLight->emitLightColor(builder, "surfaceToLight");
1438 fsBuilder->codeAppend(");\n"); 1438 fsBuilder->codeAppend(");\n");
1439 SkString modulate; 1439 SkString modulate;
1440 GrGLSLMulVarBy4f(&modulate, 2, outputColor, inputColor); 1440 GrGLSLMulVarBy4f(&modulate, 2, outputColor, inputColor);
1441 fsBuilder->codeAppend(modulate.c_str()); 1441 fsBuilder->codeAppend(modulate.c_str());
1442 } 1442 }
1443 1443
1444 void GrGLLightingEffect::GenKey(const GrDrawEffect& drawEffect, 1444 void GrGLLightingEffect::GenKey(const GrEffect& effect,
1445 const GrGLCaps& caps, GrEffectKeyBuilder* b) { 1445 const GrGLCaps& caps, GrEffectKeyBuilder* b) {
1446 b->add32(drawEffect.castEffect<GrLightingEffect>().light()->type()); 1446 b->add32(effect.cast<GrLightingEffect>().light()->type());
1447 } 1447 }
1448 1448
1449 void GrGLLightingEffect::setData(const GrGLProgramDataManager& pdman, 1449 void GrGLLightingEffect::setData(const GrGLProgramDataManager& pdman,
1450 const GrDrawEffect& drawEffect) { 1450 const GrEffect& effect) {
1451 const GrLightingEffect& lighting = drawEffect.castEffect<GrLightingEffect>() ; 1451 const GrLightingEffect& lighting = effect.cast<GrLightingEffect>();
1452 GrTexture* texture = lighting.texture(0); 1452 GrTexture* texture = lighting.texture(0);
1453 float ySign = texture->origin() == kTopLeft_GrSurfaceOrigin ? -1.0f : 1.0f; 1453 float ySign = texture->origin() == kTopLeft_GrSurfaceOrigin ? -1.0f : 1.0f;
1454 pdman.set2f(fImageIncrementUni, 1.0f / texture->width(), ySign / texture->he ight()); 1454 pdman.set2f(fImageIncrementUni, 1.0f / texture->width(), ySign / texture->he ight());
1455 pdman.set1f(fSurfaceScaleUni, lighting.surfaceScale()); 1455 pdman.set1f(fSurfaceScaleUni, lighting.surfaceScale());
1456 SkAutoTUnref<SkLight> transformedLight(lighting.light()->transform(lighting. filterMatrix())); 1456 SkAutoTUnref<SkLight> transformedLight(lighting.light()->transform(lighting. filterMatrix()));
1457 fLight->setData(pdman, transformedLight); 1457 fLight->setData(pdman, transformedLight);
1458 } 1458 }
1459 1459
1460 /////////////////////////////////////////////////////////////////////////////// 1460 ///////////////////////////////////////////////////////////////////////////////
1461 1461
1462 /////////////////////////////////////////////////////////////////////////////// 1462 ///////////////////////////////////////////////////////////////////////////////
1463 1463
1464 GrGLDiffuseLightingEffect::GrGLDiffuseLightingEffect(const GrBackendEffectFactor y& factory, 1464 GrGLDiffuseLightingEffect::GrGLDiffuseLightingEffect(const GrBackendEffectFactor y& factory,
1465 const GrDrawEffect& drawEff ect) 1465 const GrEffect& effect)
1466 : INHERITED(factory, drawEffect) { 1466 : INHERITED(factory, effect) {
1467 } 1467 }
1468 1468
1469 void GrGLDiffuseLightingEffect::emitLightFunc(GrGLProgramBuilder* builder, SkStr ing* funcName) { 1469 void GrGLDiffuseLightingEffect::emitLightFunc(GrGLProgramBuilder* builder, SkStr ing* funcName) {
1470 const char* kd; 1470 const char* kd;
1471 fKDUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, 1471 fKDUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
1472 kFloat_GrSLType, 1472 kFloat_GrSLType,
1473 "KD", 1473 "KD",
1474 &kd); 1474 &kd);
1475 1475
1476 static const GrGLShaderVar gLightArgs[] = { 1476 static const GrGLShaderVar gLightArgs[] = {
1477 GrGLShaderVar("normal", kVec3f_GrSLType), 1477 GrGLShaderVar("normal", kVec3f_GrSLType),
1478 GrGLShaderVar("surfaceToLight", kVec3f_GrSLType), 1478 GrGLShaderVar("surfaceToLight", kVec3f_GrSLType),
1479 GrGLShaderVar("lightColor", kVec3f_GrSLType) 1479 GrGLShaderVar("lightColor", kVec3f_GrSLType)
1480 }; 1480 };
1481 SkString lightBody; 1481 SkString lightBody;
1482 lightBody.appendf("\tfloat colorScale = %s * dot(normal, surfaceToLight);\n" , kd); 1482 lightBody.appendf("\tfloat colorScale = %s * dot(normal, surfaceToLight);\n" , kd);
1483 lightBody.appendf("\treturn vec4(lightColor * clamp(colorScale, 0.0, 1.0), 1 .0);\n"); 1483 lightBody.appendf("\treturn vec4(lightColor * clamp(colorScale, 0.0, 1.0), 1 .0);\n");
1484 builder->getFragmentShaderBuilder()->emitFunction(kVec4f_GrSLType, 1484 builder->getFragmentShaderBuilder()->emitFunction(kVec4f_GrSLType,
1485 "light", 1485 "light",
1486 SK_ARRAY_COUNT(gLightArgs) , 1486 SK_ARRAY_COUNT(gLightArgs) ,
1487 gLightArgs, 1487 gLightArgs,
1488 lightBody.c_str(), 1488 lightBody.c_str(),
1489 funcName); 1489 funcName);
1490 } 1490 }
1491 1491
1492 void GrGLDiffuseLightingEffect::setData(const GrGLProgramDataManager& pdman, 1492 void GrGLDiffuseLightingEffect::setData(const GrGLProgramDataManager& pdman,
1493 const GrDrawEffect& drawEffect) { 1493 const GrEffect& effect) {
1494 INHERITED::setData(pdman, drawEffect); 1494 INHERITED::setData(pdman, effect);
1495 const GrDiffuseLightingEffect& diffuse = drawEffect.castEffect<GrDiffuseLigh tingEffect>(); 1495 const GrDiffuseLightingEffect& diffuse = effect.cast<GrDiffuseLightingEffect >();
1496 pdman.set1f(fKDUni, diffuse.kd()); 1496 pdman.set1f(fKDUni, diffuse.kd());
1497 } 1497 }
1498 1498
1499 /////////////////////////////////////////////////////////////////////////////// 1499 ///////////////////////////////////////////////////////////////////////////////
1500 1500
1501 GrSpecularLightingEffect::GrSpecularLightingEffect(GrTexture* texture, 1501 GrSpecularLightingEffect::GrSpecularLightingEffect(GrTexture* texture,
1502 const SkLight* light, 1502 const SkLight* light,
1503 SkScalar surfaceScale, 1503 SkScalar surfaceScale,
1504 const SkMatrix& matrix, 1504 const SkMatrix& matrix,
1505 SkScalar ks, 1505 SkScalar ks,
1506 SkScalar shininess) 1506 SkScalar shininess)
1507 : INHERITED(texture, light, surfaceScale, matrix), 1507 : INHERITED(texture, light, surfaceScale, matrix),
1508 fKS(ks), 1508 fKS(ks),
1509 fShininess(shininess) { 1509 fShininess(shininess) {
1510 } 1510 }
1511 1511
1512 const GrBackendEffectFactory& GrSpecularLightingEffect::getFactory() const { 1512 const GrBackendEffectFactory& GrSpecularLightingEffect::getFactory() const {
1513 return GrTBackendEffectFactory<GrSpecularLightingEffect>::getInstance(); 1513 return GrTBackendEffectFactory<GrSpecularLightingEffect>::getInstance();
1514 } 1514 }
1515 1515
1516 bool GrSpecularLightingEffect::onIsEqual(const GrEffect& sBase) const { 1516 bool GrSpecularLightingEffect::onIsEqual(const GrEffect& sBase) const {
1517 const GrSpecularLightingEffect& s = CastEffect<GrSpecularLightingEffect>(sBa se); 1517 const GrSpecularLightingEffect& s = sBase.cast<GrSpecularLightingEffect>();
1518 return INHERITED::onIsEqual(sBase) && 1518 return INHERITED::onIsEqual(sBase) &&
1519 this->ks() == s.ks() && 1519 this->ks() == s.ks() &&
1520 this->shininess() == s.shininess(); 1520 this->shininess() == s.shininess();
1521 } 1521 }
1522 1522
1523 GR_DEFINE_EFFECT_TEST(GrSpecularLightingEffect); 1523 GR_DEFINE_EFFECT_TEST(GrSpecularLightingEffect);
1524 1524
1525 GrEffect* GrSpecularLightingEffect::TestCreate(SkRandom* random, 1525 GrEffect* GrSpecularLightingEffect::TestCreate(SkRandom* random,
1526 GrContext* context, 1526 GrContext* context,
1527 const GrDrawTargetCaps&, 1527 const GrDrawTargetCaps&,
1528 GrTexture* textures[]) { 1528 GrTexture* textures[]) {
1529 SkScalar surfaceScale = random->nextSScalar1(); 1529 SkScalar surfaceScale = random->nextSScalar1();
1530 SkScalar ks = random->nextUScalar1(); 1530 SkScalar ks = random->nextUScalar1();
1531 SkScalar shininess = random->nextUScalar1(); 1531 SkScalar shininess = random->nextUScalar1();
1532 SkAutoTUnref<SkLight> light(create_random_light(random)); 1532 SkAutoTUnref<SkLight> light(create_random_light(random));
1533 SkMatrix matrix; 1533 SkMatrix matrix;
1534 for (int i = 0; i < 9; i++) { 1534 for (int i = 0; i < 9; i++) {
1535 matrix[i] = random->nextUScalar1(); 1535 matrix[i] = random->nextUScalar1();
1536 } 1536 }
1537 return GrSpecularLightingEffect::Create(textures[GrEffectUnitTest::kAlphaTex tureIdx], 1537 return GrSpecularLightingEffect::Create(textures[GrEffectUnitTest::kAlphaTex tureIdx],
1538 light, surfaceScale, matrix, ks, shi niness); 1538 light, surfaceScale, matrix, ks, shi niness);
1539 } 1539 }
1540 1540
1541 /////////////////////////////////////////////////////////////////////////////// 1541 ///////////////////////////////////////////////////////////////////////////////
1542 1542
1543 GrGLSpecularLightingEffect::GrGLSpecularLightingEffect(const GrBackendEffectFact ory& factory, 1543 GrGLSpecularLightingEffect::GrGLSpecularLightingEffect(const GrBackendEffectFact ory& factory,
1544 const GrDrawEffect& drawE ffect) 1544 const GrEffect& effect)
1545 : INHERITED(factory, drawEffect) { 1545 : INHERITED(factory, effect) {
1546 } 1546 }
1547 1547
1548 void GrGLSpecularLightingEffect::emitLightFunc(GrGLProgramBuilder* builder, SkSt ring* funcName) { 1548 void GrGLSpecularLightingEffect::emitLightFunc(GrGLProgramBuilder* builder, SkSt ring* funcName) {
1549 const char* ks; 1549 const char* ks;
1550 const char* shininess; 1550 const char* shininess;
1551 1551
1552 fKSUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, 1552 fKSUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
1553 kFloat_GrSLType, "KS", &ks); 1553 kFloat_GrSLType, "KS", &ks);
1554 fShininessUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility , 1554 fShininessUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility ,
1555 kFloat_GrSLType, "Shininess", &shininess ); 1555 kFloat_GrSLType, "Shininess", &shininess );
(...skipping 10 matching lines...) Expand all
1566 lightBody.appendf("\treturn vec4(color, max(max(color.r, color.g), color.b)) ;\n"); 1566 lightBody.appendf("\treturn vec4(color, max(max(color.r, color.g), color.b)) ;\n");
1567 builder->getFragmentShaderBuilder()->emitFunction(kVec4f_GrSLType, 1567 builder->getFragmentShaderBuilder()->emitFunction(kVec4f_GrSLType,
1568 "light", 1568 "light",
1569 SK_ARRAY_COUNT(gLightArgs) , 1569 SK_ARRAY_COUNT(gLightArgs) ,
1570 gLightArgs, 1570 gLightArgs,
1571 lightBody.c_str(), 1571 lightBody.c_str(),
1572 funcName); 1572 funcName);
1573 } 1573 }
1574 1574
1575 void GrGLSpecularLightingEffect::setData(const GrGLProgramDataManager& pdman, 1575 void GrGLSpecularLightingEffect::setData(const GrGLProgramDataManager& pdman,
1576 const GrDrawEffect& drawEffect) { 1576 const GrEffect& effect) {
1577 INHERITED::setData(pdman, drawEffect); 1577 INHERITED::setData(pdman, effect);
1578 const GrSpecularLightingEffect& spec = drawEffect.castEffect<GrSpecularLight ingEffect>(); 1578 const GrSpecularLightingEffect& spec = effect.cast<GrSpecularLightingEffect> ();
1579 pdman.set1f(fKSUni, spec.ks()); 1579 pdman.set1f(fKSUni, spec.ks());
1580 pdman.set1f(fShininessUni, spec.shininess()); 1580 pdman.set1f(fShininessUni, spec.shininess());
1581 } 1581 }
1582 1582
1583 /////////////////////////////////////////////////////////////////////////////// 1583 ///////////////////////////////////////////////////////////////////////////////
1584 void GrGLLight::emitLightColorUniform(GrGLProgramBuilder* builder) { 1584 void GrGLLight::emitLightColorUniform(GrGLProgramBuilder* builder) {
1585 fColorUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, 1585 fColorUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
1586 kVec3f_GrSLType, "LightColor"); 1586 kVec3f_GrSLType, "LightColor");
1587 } 1587 }
1588 1588
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
1703 1703
1704 fsBuilder->codeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight); 1704 fsBuilder->codeAppendf("%s(%s)", fLightColorFunc.c_str(), surfaceToLight);
1705 } 1705 }
1706 1706
1707 #endif 1707 #endif
1708 1708
1709 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter) 1709 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkLightingImageFilter)
1710 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter) 1710 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDiffuseLightingImageFilter)
1711 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter) 1711 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSpecularLightingImageFilter)
1712 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 1712 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
OLDNEW
« no previous file with comments | « src/effects/SkDisplacementMapEffect.cpp ('k') | src/effects/SkLumaColorFilter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698