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

Side by Side Diff: src/effects/gradients/SkGradientShader.cpp

Issue 2343703003: Revert of Bundle common arguments to GrGradientEffect creation (Closed)
Patch Set: Created 4 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 | « no previous file | src/effects/gradients/SkGradientShaderPriv.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 2006 The Android Open Source Project 2 * Copyright 2006 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 "Sk4fLinearGradient.h" 8 #include "Sk4fLinearGradient.h"
9 #include "SkGradientShaderPriv.h" 9 #include "SkGradientShaderPriv.h"
10 #include "SkLinearGradient.h" 10 #include "SkLinearGradient.h"
(...skipping 1314 matching lines...) Expand 10 before | Expand all | Expand 10 after
1325 fragBuilder->appendTextureLookupAndModulate(inputColor, texSamplers[ 0], "coord"); 1325 fragBuilder->appendTextureLookupAndModulate(inputColor, texSamplers[ 0], "coord");
1326 fragBuilder->codeAppend(";"); 1326 fragBuilder->codeAppend(";");
1327 1327
1328 break; 1328 break;
1329 } 1329 }
1330 } 1330 }
1331 } 1331 }
1332 1332
1333 ///////////////////////////////////////////////////////////////////// 1333 /////////////////////////////////////////////////////////////////////
1334 1334
1335 GrGradientEffect::GrGradientEffect(const CreateArgs& args) { 1335 GrGradientEffect::GrGradientEffect(GrContext* ctx,
1336 const SkGradientShaderBase& shader(*args.fShader); 1336 const SkGradientShaderBase& shader,
1337 const SkMatrix& matrix,
1338 SkShader::TileMode tileMode) {
1337 1339
1338 fIsOpaque = shader.isOpaque(); 1340 fIsOpaque = shader.isOpaque();
1339 1341
1340 fColorType = this->determineColorType(shader); 1342 fColorType = this->determineColorType(shader);
1341 1343
1342 if (kTexture_ColorType != fColorType) { 1344 if (kTexture_ColorType != fColorType) {
1343 if (shader.fOrigColors) { 1345 if (shader.fOrigColors) {
1344 fColors = SkTDArray<SkColor>(shader.fOrigColors, shader.fColorCount) ; 1346 fColors = SkTDArray<SkColor>(shader.fOrigColors, shader.fColorCount) ;
1345 } 1347 }
1346 1348
1347 #if GR_GL_USE_ACCURATE_HARD_STOP_GRADIENTS 1349 #if GR_GL_USE_ACCURATE_HARD_STOP_GRADIENTS
1348 if (shader.fOrigPos) { 1350 if (shader.fOrigPos) {
1349 fPositions = SkTDArray<SkScalar>(shader.fOrigPos, shader.fColorCount ); 1351 fPositions = SkTDArray<SkScalar>(shader.fOrigPos, shader.fColorCount );
1350 } 1352 }
1351 #endif 1353 #endif
1352 } 1354 }
1353 1355
1354 #if GR_GL_USE_ACCURATE_HARD_STOP_GRADIENTS 1356 #if GR_GL_USE_ACCURATE_HARD_STOP_GRADIENTS
1355 fTileMode = args.fTileMode; 1357 fTileMode = tileMode;
1356 #endif 1358 #endif
1357 1359
1358 switch (fColorType) { 1360 switch (fColorType) {
1359 // The two and three color specializations do not currently support tili ng. 1361 // The two and three color specializations do not currently support tili ng.
1360 case kTwo_ColorType: 1362 case kTwo_ColorType:
1361 case kThree_ColorType: 1363 case kThree_ColorType:
1362 #if GR_GL_USE_ACCURATE_HARD_STOP_GRADIENTS 1364 #if GR_GL_USE_ACCURATE_HARD_STOP_GRADIENTS
1363 case kHardStopLeftEdged_ColorType: 1365 case kHardStopLeftEdged_ColorType:
1364 case kHardStopRightEdged_ColorType: 1366 case kHardStopRightEdged_ColorType:
1365 case kHardStopCentered_ColorType: 1367 case kHardStopCentered_ColorType:
1366 #endif 1368 #endif
1367 fRow = -1; 1369 fRow = -1;
1368 1370
1369 if (SkGradientShader::kInterpolateColorsInPremul_Flag & shader.getGr adFlags()) { 1371 if (SkGradientShader::kInterpolateColorsInPremul_Flag & shader.getGr adFlags()) {
1370 fPremulType = kBeforeInterp_PremulType; 1372 fPremulType = kBeforeInterp_PremulType;
1371 } else { 1373 } else {
1372 fPremulType = kAfterInterp_PremulType; 1374 fPremulType = kAfterInterp_PremulType;
1373 } 1375 }
1374 1376
1375 fCoordTransform.reset(kCoordSet, *args.fMatrix); 1377 fCoordTransform.reset(kCoordSet, matrix);
1376 1378
1377 break; 1379 break;
1378 case kTexture_ColorType: 1380 case kTexture_ColorType:
1379 // doesn't matter how this is set, just be consistent because it is part of the 1381 // doesn't matter how this is set, just be consistent because it is part of the
1380 // effect key. 1382 // effect key.
1381 fPremulType = kBeforeInterp_PremulType; 1383 fPremulType = kBeforeInterp_PremulType;
1382 1384
1383 SkBitmap bitmap; 1385 SkBitmap bitmap;
1384 shader.getGradientTableBitmap(&bitmap); 1386 shader.getGradientTableBitmap(&bitmap);
1385 1387
1386 GrTextureStripAtlas::Desc desc; 1388 GrTextureStripAtlas::Desc desc;
1387 desc.fWidth = bitmap.width(); 1389 desc.fWidth = bitmap.width();
1388 desc.fHeight = 32; 1390 desc.fHeight = 32;
1389 desc.fRowHeight = bitmap.height(); 1391 desc.fRowHeight = bitmap.height();
1390 desc.fContext = args.fContext; 1392 desc.fContext = ctx;
1391 desc.fConfig = SkImageInfo2GrPixelConfig(bitmap.info(), *args.fConte xt->caps()); 1393 desc.fConfig = SkImageInfo2GrPixelConfig(bitmap.info(), *ctx->caps() );
1392 fAtlas = GrTextureStripAtlas::GetAtlas(desc); 1394 fAtlas = GrTextureStripAtlas::GetAtlas(desc);
1393 SkASSERT(fAtlas); 1395 SkASSERT(fAtlas);
1394 1396
1395 // We always filter the gradient table. Each table is one row of a t exture, always 1397 // We always filter the gradient table. Each table is one row of a t exture, always
1396 // y-clamp. 1398 // y-clamp.
1397 GrTextureParams params; 1399 GrTextureParams params;
1398 params.setFilterMode(GrTextureParams::kBilerp_FilterMode); 1400 params.setFilterMode(GrTextureParams::kBilerp_FilterMode);
1399 params.setTileModeX(args.fTileMode); 1401 params.setTileModeX(tileMode);
1400 1402
1401 fRow = fAtlas->lockRow(bitmap); 1403 fRow = fAtlas->lockRow(bitmap);
1402 if (-1 != fRow) { 1404 if (-1 != fRow) {
1403 fYCoord = fAtlas->getYOffset(fRow)+SK_ScalarHalf*fAtlas->getNorm alizedTexelHeight(); 1405 fYCoord = fAtlas->getYOffset(fRow)+SK_ScalarHalf*fAtlas->getNorm alizedTexelHeight();
1404 fCoordTransform.reset(kCoordSet, *args.fMatrix, fAtlas->getTextu re(), 1406 fCoordTransform.reset(kCoordSet, matrix, fAtlas->getTexture(), p arams.filterMode());
1405 params.filterMode());
1406 fTextureAccess.reset(fAtlas->getTexture(), params); 1407 fTextureAccess.reset(fAtlas->getTexture(), params);
1407 } else { 1408 } else {
1408 SkAutoTUnref<GrTexture> texture( 1409 SkAutoTUnref<GrTexture> texture(
1409 GrRefCachedBitmapTexture(args.fContext, bitmap, params, 1410 GrRefCachedBitmapTexture(ctx, bitmap, params,
1410 SkSourceGammaTreatment::kRespect)); 1411 SkSourceGammaTreatment::kRespect));
1411 if (!texture) { 1412 if (!texture) {
1412 return; 1413 return;
1413 } 1414 }
1414 fCoordTransform.reset(kCoordSet, *args.fMatrix, texture, params. filterMode()); 1415 fCoordTransform.reset(kCoordSet, matrix, texture, params.filterM ode());
1415 fTextureAccess.reset(texture, params); 1416 fTextureAccess.reset(texture, params);
1416 fYCoord = SK_ScalarHalf; 1417 fYCoord = SK_ScalarHalf;
1417 } 1418 }
1418 1419
1419 this->addTextureAccess(&fTextureAccess); 1420 this->addTextureAccess(&fTextureAccess);
1420 1421
1421 break; 1422 break;
1422 } 1423 }
1423 1424
1424 this->addCoordTransform(&fCoordTransform); 1425 this->addCoordTransform(&fCoordTransform);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1484 (*stops)[i] = stop; 1485 (*stops)[i] = stop;
1485 stop = i < outColors - 1 ? stop + random->nextUScalar1() * (1.f - st op) : 1.f; 1486 stop = i < outColors - 1 ? stop + random->nextUScalar1() * (1.f - st op) : 1.f;
1486 } 1487 }
1487 } 1488 }
1488 *tm = static_cast<SkShader::TileMode>(random->nextULessThan(SkShader::kTileM odeCount)); 1489 *tm = static_cast<SkShader::TileMode>(random->nextULessThan(SkShader::kTileM odeCount));
1489 1490
1490 return outColors; 1491 return outColors;
1491 } 1492 }
1492 1493
1493 #endif 1494 #endif
OLDNEW
« no previous file with comments | « no previous file | src/effects/gradients/SkGradientShaderPriv.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698