ColorShaders report no bitmaps, but only a color_gradient, which we now detect
on the gpu side. git-svn-id: http://skia.googlecode.com/svn/trunk@1810 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
parent
f78e78da58
commit
2be9e8b407
@ -47,6 +47,7 @@ public:
|
||||
virtual void shadeSpan16(int x, int y, uint16_t span[], int count);
|
||||
virtual void shadeSpanAlpha(int x, int y, uint8_t alpha[], int count);
|
||||
|
||||
// we return false for this, use asAGradient
|
||||
virtual BitmapType asABitmap(SkBitmap* outTexture,
|
||||
SkMatrix* outMatrix,
|
||||
TileMode xy[2],
|
||||
@ -68,9 +69,6 @@ private:
|
||||
uint16_t fColor16; // cached after setContext()
|
||||
SkBool8 fInheritColor;
|
||||
|
||||
// deferred allocation, used for asABitmap()
|
||||
mutable SkPixelRef* fAsABitmapPixelRef;
|
||||
|
||||
typedef SkShader INHERITED;
|
||||
};
|
||||
|
||||
|
@ -219,23 +219,18 @@ SkShader* SkShader::CreateBitmapShader(const SkBitmap& src,
|
||||
SkColorShader::SkColorShader() {
|
||||
fFlags = 0;
|
||||
fInheritColor = true;
|
||||
fAsABitmapPixelRef = NULL;
|
||||
}
|
||||
|
||||
SkColorShader::SkColorShader(SkColor c) {
|
||||
fFlags = 0;
|
||||
fColor = c;
|
||||
fInheritColor = false;
|
||||
fAsABitmapPixelRef = NULL;
|
||||
}
|
||||
|
||||
SkColorShader::~SkColorShader() {
|
||||
SkSafeUnref(fAsABitmapPixelRef);
|
||||
}
|
||||
SkColorShader::~SkColorShader() {}
|
||||
|
||||
SkColorShader::SkColorShader(SkFlattenableReadBuffer& b) : INHERITED(b) {
|
||||
fFlags = 0; // computed in setContext
|
||||
fAsABitmapPixelRef = NULL;
|
||||
|
||||
fInheritColor = b.readU8();
|
||||
if (fInheritColor) {
|
||||
@ -313,25 +308,7 @@ void SkColorShader::shadeSpanAlpha(int x, int y, uint8_t alpha[], int count) {
|
||||
SkShader::BitmapType SkColorShader::asABitmap(SkBitmap* bitmap, SkMatrix* matrix,
|
||||
TileMode modes[],
|
||||
SkScalar* twoPointRadialParams) const {
|
||||
// we cache the pixelref, since its generateID is used in the texture cache
|
||||
if (NULL == fAsABitmapPixelRef) {
|
||||
SkPMColor* storage = (SkPMColor*)sk_malloc_throw(sizeof(SkPMColor));
|
||||
*storage = fPMColor;
|
||||
fAsABitmapPixelRef = new SkMallocPixelRef(storage, sizeof(SkPMColor),
|
||||
NULL);
|
||||
}
|
||||
|
||||
if (bitmap) {
|
||||
bitmap->setConfig(SkBitmap::kARGB_8888_Config, 1, 1);
|
||||
bitmap->setPixelRef(fAsABitmapPixelRef);
|
||||
}
|
||||
if (matrix) {
|
||||
matrix->reset();
|
||||
}
|
||||
if (modes) {
|
||||
modes[0] = modes[1] = SkShader::kRepeat_TileMode;
|
||||
}
|
||||
return kDefault_BitmapType;
|
||||
return kNone_BitmapType;
|
||||
}
|
||||
|
||||
SkShader::GradientType SkColorShader::asAGradient(GradientInfo* info) const {
|
||||
|
@ -481,6 +481,21 @@ bool SkGpuDevice::skPaint2GrPaintShader(const SkPaint& skPaint,
|
||||
|
||||
GrSamplerState::SampleMode sampleMode = sk_bmp_type_to_sample_mode[bmptype];
|
||||
if (-1 == sampleMode) {
|
||||
SkShader::GradientInfo info;
|
||||
SkColor color;
|
||||
|
||||
info.fColors = &color;
|
||||
info.fColorOffsets = NULL;
|
||||
info.fColorCount = 1;
|
||||
if (SkShader::kColor_GradientType == shader->asAGradient(&info)) {
|
||||
SkPaint copy(skPaint);
|
||||
copy.setShader(NULL);
|
||||
copy.setColor(SkColorSetA(color, copy.getAlpha()));
|
||||
return this->skPaint2GrPaintNoShader(copy,
|
||||
false,
|
||||
grPaint,
|
||||
constantColor);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
GrSamplerState* sampler = grPaint->getTextureSampler(kShaderTextureIdx);
|
||||
|
Loading…
Reference in New Issue
Block a user