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

Unified Diff: src/effects/gradients/SkGradientShader.cpp

Issue 241173005: Get gradient information for gpu effect directly from SkGradientShader instead of calling asAGradie… (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 6 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: src/effects/gradients/SkGradientShader.cpp
diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp
index 3547fbec94f4e372c5ee3dc70e7c0bd4a03effdd..58c4a511784c7a58371a04377fe528f6470430c1 100644
--- a/src/effects/gradients/SkGradientShader.cpp
+++ b/src/effects/gradients/SkGradientShader.cpp
@@ -203,6 +203,18 @@ void SkGradientShaderBase::flatten(SkWriteBuffer& buffer) const {
buffer.writeMatrix(fPtsToUnit);
}
+void SkGradientShaderBase::getGradientDescriptorGpu(DescriptorGpu* desc) const {
+ desc->fCount = fColorCount;
+ if (fColorCount <= 3) {
+ memcpy(desc->fColors, fOrigColors, fColorCount * sizeof(SkColor));
+ }
+ if (3 == fColorCount){
+ desc->fMidPos = SkFixedToScalar(fRecs[1].fPos);
+ }
+ desc->fTileMode = fTileMode;
+ desc->fFlags = fGradFlags;
+}
+
bool SkGradientShaderBase::isOpaque() const {
return fColorsAreOpaque;
}
@@ -1005,31 +1017,27 @@ GrGradientEffect::GrGradientEffect(GrContext* ctx,
SkShader::TileMode tileMode) {
fIsOpaque = shader.isOpaque();
+ SkGradientShaderBase::DescriptorGpu gradDesc;
- SkShader::GradientInfo info;
- SkScalar pos[3] = {0};
-
- info.fColorCount = 3;
- info.fColors = &fColors[0];
- info.fColorOffsets = &pos[0];
- shader.asAGradient(&info);
+ gradDesc.fColors = &fColors[0];
+ shader.getGradientDescriptorGpu(&gradDesc);
// The two and three color specializations do not currently support tiling.
bool foundSpecialCase = false;
- if (SkShader::kClamp_TileMode == info.fTileMode) {
- if (2 == info.fColorCount) {
+ if (SkShader::kClamp_TileMode == gradDesc.fTileMode) {
+ if (2 == gradDesc.fCount) {
fRow = -1; // flag for no atlas
fColorType = kTwo_ColorType;
foundSpecialCase = true;
- } else if (3 == info.fColorCount &&
- (SkScalarAbs(pos[1] - SK_ScalarHalf) < SK_Scalar1 / 1000)) { // 3 color symmetric
+ } else if (3 == gradDesc.fCount &&
+ (SkScalarAbs(gradDesc.fMidPos - SK_ScalarHalf) < SK_Scalar1 / 1000)) { // 3 color symmetric
fRow = -1; // flag for no atlas
fColorType = kThree_ColorType;
foundSpecialCase = true;
}
}
if (foundSpecialCase) {
- if (SkGradientShader::kInterpolateColorsInPremul_Flag & info.fGradientFlags) {
+ if (SkGradientShader::kInterpolateColorsInPremul_Flag & gradDesc.fFlags) {
fPremulType = kBeforeInterp_PremulType;
} else {
fPremulType = kAfterInterp_PremulType;
« no previous file with comments | « no previous file | src/effects/gradients/SkGradientShaderPriv.h » ('j') | src/effects/gradients/SkGradientShaderPriv.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698