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

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

Issue 318923005: SkShader::asNewEffect Refactoring (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: added macros to check for gpu support Created 6 years, 6 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/core/SkShader.cpp ('k') | src/effects/gradients/SkLinearGradient.h » ('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 2013 Google Inc. 2 * Copyright 2013 Google Inc.
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 "SkDither.h" 8 #include "SkDither.h"
9 #include "SkPerlinNoiseShader.h" 9 #include "SkPerlinNoiseShader.h"
10 #include "SkColorFilter.h" 10 #include "SkColorFilter.h"
(...skipping 708 matching lines...) Expand 10 before | Expand all | Expand 10 after
719 SkScalar baseFrequencyY = random->nextRangeScalar(0.01f, 719 SkScalar baseFrequencyY = random->nextRangeScalar(0.01f,
720 0.99f); 720 0.99f);
721 721
722 SkShader* shader = random->nextBool() ? 722 SkShader* shader = random->nextBool() ?
723 SkPerlinNoiseShader::CreateFractalNoise(baseFrequencyX, baseFrequencyY, numOctaves, seed, 723 SkPerlinNoiseShader::CreateFractalNoise(baseFrequencyX, baseFrequencyY, numOctaves, seed,
724 stitchTiles ? &tileSize : NULL) : 724 stitchTiles ? &tileSize : NULL) :
725 SkPerlinNoiseShader::CreateTurbulence(baseFrequencyX, baseFrequencyY, nu mOctaves, seed, 725 SkPerlinNoiseShader::CreateTurbulence(baseFrequencyX, baseFrequencyY, nu mOctaves, seed,
726 stitchTiles ? &tileSize : NULL); 726 stitchTiles ? &tileSize : NULL);
727 727
728 SkPaint paint; 728 SkPaint paint;
729 GrEffectRef* effect = shader->asNewEffect(context, paint, NULL); 729 GrColor grColor;
730 GrEffectRef* effect;
731 shader->asNewEffect(context, paint, NULL, &grColor, &effect);
730 732
731 SkDELETE(shader); 733 SkDELETE(shader);
732 734
733 return effect; 735 return effect;
734 } 736 }
735 737
736 ///////////////////////////////////////////////////////////////////// 738 /////////////////////////////////////////////////////////////////////
737 739
738 void GrGLSimplexNoise::emitCode(GrGLShaderBuilder* builder, 740 void GrGLSimplexNoise::emitCode(GrGLShaderBuilder* builder,
739 const GrDrawEffect&, 741 const GrDrawEffect&,
(...skipping 531 matching lines...) Expand 10 before | Expand all | Expand 10 after
1271 1273
1272 void GrGLSimplexNoise::setData(const GrGLUniformManager& uman, const GrDrawEffec t& drawEffect) { 1274 void GrGLSimplexNoise::setData(const GrGLUniformManager& uman, const GrDrawEffec t& drawEffect) {
1273 INHERITED::setData(uman, drawEffect); 1275 INHERITED::setData(uman, drawEffect);
1274 1276
1275 const GrSimplexNoiseEffect& turbulence = drawEffect.castEffect<GrSimplexNois eEffect>(); 1277 const GrSimplexNoiseEffect& turbulence = drawEffect.castEffect<GrSimplexNois eEffect>();
1276 uman.set1f(fSeedUni, turbulence.seed()); 1278 uman.set1f(fSeedUni, turbulence.seed());
1277 } 1279 }
1278 1280
1279 ///////////////////////////////////////////////////////////////////// 1281 /////////////////////////////////////////////////////////////////////
1280 1282
1281 GrEffectRef* SkPerlinNoiseShader::asNewEffect(GrContext* context, const SkPaint& paint, 1283 bool SkPerlinNoiseShader::asNewEffect(GrContext* context, const SkPaint& paint,
1282 const SkMatrix* externalLocalMatri x) const { 1284 const SkMatrix* externalLocalMatrix, GrCol or* grColor,
1285 GrEffectRef** grEffect) const {
1283 SkASSERT(NULL != context); 1286 SkASSERT(NULL != context);
1284 1287
1288 *grColor = SkColor2GrColorJustAlpha(paint.getColor());
1289
1285 SkMatrix localMatrix = this->getLocalMatrix(); 1290 SkMatrix localMatrix = this->getLocalMatrix();
1286 if (externalLocalMatrix) { 1291 if (externalLocalMatrix) {
1287 localMatrix.preConcat(*externalLocalMatrix); 1292 localMatrix.preConcat(*externalLocalMatrix);
1288 } 1293 }
1289 1294
1290 if (0 == fNumOctaves) { 1295 if (0 == fNumOctaves) {
1291 SkColor clearColor = 0; 1296 SkColor clearColor = 0;
1292 if (kFractalNoise_Type == fType) { 1297 if (kFractalNoise_Type == fType) {
1293 clearColor = SkColorSetARGB(paint.getAlpha() / 2, 127, 127, 127); 1298 clearColor = SkColorSetARGB(paint.getAlpha() / 2, 127, 127, 127);
1294 } 1299 }
1295 SkAutoTUnref<SkColorFilter> cf(SkColorFilter::CreateModeFilter( 1300 SkAutoTUnref<SkColorFilter> cf(SkColorFilter::CreateModeFilter(
1296 clearColor, SkXfermode::kSrc_Mod e)); 1301 clearColor, SkXfermode::kSrc_Mod e));
1297 return cf->asNewEffect(context); 1302 *grEffect = cf->asNewEffect(context);
1303 return true;
1298 } 1304 }
1299 1305
1300 // Either we don't stitch tiles, either we have a valid tile size 1306 // Either we don't stitch tiles, either we have a valid tile size
1301 SkASSERT(!fStitchTiles || !fTileSize.isEmpty()); 1307 SkASSERT(!fStitchTiles || !fTileSize.isEmpty());
1302 1308
1303 #ifdef SK_USE_SIMPLEX_NOISE 1309 #ifdef SK_USE_SIMPLEX_NOISE
1304 // Simplex noise is currently disabled but can be enabled by defining SK_USE _SIMPLEX_NOISE 1310 // Simplex noise is currently disabled but can be enabled by defining SK_USE _SIMPLEX_NOISE
1305 sk_ignore_unused_variable(context); 1311 sk_ignore_unused_variable(context);
1306 GrEffectRef* effect = 1312 *grEffect =
1307 GrSimplexNoiseEffect::Create(fType, fPaintingData->fBaseFrequency, 1313 GrSimplexNoiseEffect::Create(fType, fPaintingData->fBaseFrequency,
1308 fNumOctaves, fStitchTiles, fSeed, 1314 fNumOctaves, fStitchTiles, fSeed,
1309 this->getLocalMatrix(), paint.getAlpha()); 1315 this->getLocalMatrix(), paint.getAlpha());
1310 #else 1316 #else
1311 GrTexture* permutationsTexture = GrLockAndRefCachedBitmapTexture( 1317 GrTexture* permutationsTexture = GrLockAndRefCachedBitmapTexture(
1312 context, fPaintingData->getPermutationsBitmap(), NULL); 1318 context, fPaintingData->getPermutationsBitmap(), NULL);
1313 GrTexture* noiseTexture = GrLockAndRefCachedBitmapTexture( 1319 GrTexture* noiseTexture = GrLockAndRefCachedBitmapTexture(
1314 context, fPaintingData->getNoiseBitmap(), NULL); 1320 context, fPaintingData->getNoiseBitmap(), NULL);
1315 1321
1316 GrEffectRef* effect = (NULL != permutationsTexture) && (NULL != noiseTexture ) ? 1322 *grEffect = (NULL != permutationsTexture) && (NULL != noiseTexture) ?
1317 GrPerlinNoiseEffect::Create(fType, fPaintingData->fBaseFrequency, 1323 GrPerlinNoiseEffect::Create(fType, fPaintingData->fBaseFrequency,
1318 fNumOctaves, fStitchTiles, 1324 fNumOctaves, fStitchTiles,
1319 fPaintingData->fStitchDataInit, 1325 fPaintingData->fStitchDataInit,
1320 permutationsTexture, noiseTexture, 1326 permutationsTexture, noiseTexture,
1321 localMatrix, paint.getAlpha()) : 1327 localMatrix, paint.getAlpha()) :
1322 NULL; 1328 NULL;
1323 1329
1324 // Unlock immediately, this is not great, but we don't have a way of 1330 // Unlock immediately, this is not great, but we don't have a way of
1325 // knowing when else to unlock it currently. TODO: Remove this when 1331 // knowing when else to unlock it currently. TODO: Remove this when
1326 // unref becomes the unlock replacement for all types of textures. 1332 // unref becomes the unlock replacement for all types of textures.
1327 if (NULL != permutationsTexture) { 1333 if (NULL != permutationsTexture) {
1328 GrUnlockAndUnrefCachedBitmapTexture(permutationsTexture); 1334 GrUnlockAndUnrefCachedBitmapTexture(permutationsTexture);
1329 } 1335 }
1330 if (NULL != noiseTexture) { 1336 if (NULL != noiseTexture) {
1331 GrUnlockAndUnrefCachedBitmapTexture(noiseTexture); 1337 GrUnlockAndUnrefCachedBitmapTexture(noiseTexture);
1332 } 1338 }
1333 #endif 1339 #endif
1334 1340
1335 return effect; 1341 return true;
1336 } 1342 }
1337 1343
1338 #else 1344 #else
1339 1345
1340 GrEffectRef* SkPerlinNoiseShader::asNewEffect(GrContext*, const SkPaint&, const SkMatrix*) const { 1346 bool SkPerlinNoiseShader::asNewEffect(GrContext* context, const SkPaint& paint,
1347 const SkMatrix* externalLocalMatrix, GrCol or* grColor,
1348 GrEffectRef** grEffect) const {
1341 SkDEBUGFAIL("Should not call in GPU-less build"); 1349 SkDEBUGFAIL("Should not call in GPU-less build");
1342 return NULL; 1350 return false;
1343 } 1351 }
1344 1352
1345 #endif 1353 #endif
1346 1354
1347 #ifndef SK_IGNORE_TO_STRING 1355 #ifndef SK_IGNORE_TO_STRING
1348 void SkPerlinNoiseShader::toString(SkString* str) const { 1356 void SkPerlinNoiseShader::toString(SkString* str) const {
1349 str->append("SkPerlinNoiseShader: ("); 1357 str->append("SkPerlinNoiseShader: (");
1350 1358
1351 str->append("type: "); 1359 str->append("type: ");
1352 switch (fType) { 1360 switch (fType) {
(...skipping 16 matching lines...) Expand all
1369 str->append(" seed: "); 1377 str->append(" seed: ");
1370 str->appendScalar(fSeed); 1378 str->appendScalar(fSeed);
1371 str->append(" stitch tiles: "); 1379 str->append(" stitch tiles: ");
1372 str->append(fStitchTiles ? "true " : "false "); 1380 str->append(fStitchTiles ? "true " : "false ");
1373 1381
1374 this->INHERITED::toString(str); 1382 this->INHERITED::toString(str);
1375 1383
1376 str->append(")"); 1384 str->append(")");
1377 } 1385 }
1378 #endif 1386 #endif
OLDNEW
« no previous file with comments | « src/core/SkShader.cpp ('k') | src/effects/gradients/SkLinearGradient.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698