| Index: src/gpu/SkGpuDevice.cpp
|
| ===================================================================
|
| --- src/gpu/SkGpuDevice.cpp (revision 8413)
|
| +++ src/gpu/SkGpuDevice.cpp (working copy)
|
| @@ -37,12 +37,13 @@
|
| #define CHECK_SHOULD_DRAW(draw, forceI) this->prepareDraw(draw, forceI)
|
| #endif
|
|
|
| -// we use the same texture slot on GrPaint for bitmaps and shaders
|
| -// (since drawBitmap, drawSprite, and drawDevice ignore skia's shader)
|
| +// we use the same effect slot on GrPaint for bitmaps and shaders (since drawBitmap, drawSprite,
|
| +// and drawDevice ignore SkShader)
|
| enum {
|
| - kBitmapTextureIdx = 0,
|
| - kShaderTextureIdx = 0,
|
| - kColorFilterTextureIdx = 1
|
| + kShaderEffectIdx = 0,
|
| + kBitmapEffectIdx = 0,
|
| + kColorFilterEffectIdx = 1,
|
| + kXfermodeEffectIdx = 2,
|
| };
|
|
|
| #define MAX_BLUR_SIGMA 4.0f
|
| @@ -443,7 +444,7 @@
|
| bool SkGpuDevice::bindDeviceAsTexture(GrPaint* paint) {
|
| GrTexture* texture = fRenderTarget->asTexture();
|
| if (NULL != texture) {
|
| - paint->colorStage(kBitmapTextureIdx)->setEffect(
|
| + paint->colorStage(kBitmapEffectIdx)->setEffect(
|
| GrSimpleTextureEffect::Create(texture, SkMatrix::I()))->unref();
|
| return true;
|
| }
|
| @@ -486,8 +487,7 @@
|
| SkXfermode* mode = skPaint.getXfermode();
|
| GrEffectRef* xferEffect = NULL;
|
| if (SkXfermode::AsNewEffect(mode, dev->context(), &xferEffect, &sm, &dm)) {
|
| - // We're not ready for xfermode effects yet
|
| - GrAssert(NULL == xferEffect);
|
| + SkSafeUnref(grPaint->colorStage(kXfermodeEffectIdx)->setEffect(xferEffect));
|
| } else {
|
| //SkDEBUGCODE(SkDebugf("Unsupported xfer mode.\n");)
|
| #if 0
|
| @@ -504,7 +504,7 @@
|
| GrAssert(!constantColor);
|
| } else {
|
| grPaint->setColor(SkColor2GrColor(skPaint.getColor()));
|
| - GrAssert(!grPaint->isColorStageEnabled(kShaderTextureIdx));
|
| + GrAssert(!grPaint->isColorStageEnabled(kShaderEffectIdx));
|
| }
|
|
|
| SkColorFilter* colorFilter = skPaint.getColorFilter();
|
| @@ -517,7 +517,7 @@
|
| } else {
|
| SkAutoTUnref<GrEffectRef> effect(colorFilter->asNewEffect(dev->context()));
|
| if (NULL != effect.get()) {
|
| - grPaint->colorStage(kColorFilterTextureIdx)->setEffect(effect);
|
| + grPaint->colorStage(kColorFilterEffectIdx)->setEffect(effect);
|
| } else {
|
| // TODO: rewrite this using asNewEffect()
|
| SkColor color;
|
| @@ -549,7 +549,7 @@
|
|
|
| SkAutoTUnref<GrEffectRef> effect(shader->asNewEffect(dev->context(), skPaint));
|
| if (NULL != effect.get()) {
|
| - grPaint->colorStage(kShaderTextureIdx)->setEffect(effect);
|
| + grPaint->colorStage(kShaderEffectIdx)->setEffect(effect);
|
| return true;
|
| }
|
|
|
| @@ -1378,7 +1378,7 @@
|
| } else {
|
| effect.reset(GrSimpleTextureEffect::Create(texture, SkMatrix::I(), params));
|
| }
|
| - grPaint->colorStage(kBitmapTextureIdx)->setEffect(effect);
|
| + grPaint->colorStage(kBitmapEffectIdx)->setEffect(effect);
|
| fContext->drawRectToRect(*grPaint, dstRect, paintRect, &m);
|
| }
|
|
|
| @@ -1460,20 +1460,20 @@
|
| return;
|
| }
|
|
|
| - GrEffectStage* stage = grPaint.colorStage(kBitmapTextureIdx);
|
| + GrEffectStage* stage = grPaint.colorStage(kBitmapEffectIdx);
|
|
|
| GrTexture* texture;
|
| stage->reset();
|
| // draw sprite uses the default texture params
|
| SkAutoCachedTexture act(this, bitmap, NULL, &texture);
|
| - grPaint.colorStage(kBitmapTextureIdx)->setEffect(
|
| + grPaint.colorStage(kBitmapEffectIdx)->setEffect(
|
| GrSimpleTextureEffect::Create(texture, SkMatrix::I()))->unref();
|
|
|
| SkImageFilter* filter = paint.getImageFilter();
|
| if (NULL != filter) {
|
| SkBitmap filterBitmap;
|
| if (filter_texture(this, fContext, texture, filter, w, h, &filterBitmap)) {
|
| - grPaint.colorStage(kBitmapTextureIdx)->setEffect(
|
| + grPaint.colorStage(kBitmapEffectIdx)->setEffect(
|
| GrSimpleTextureEffect::Create((GrTexture*) filterBitmap.getTexture(), SkMatrix::I()))->unref();
|
| texture = (GrTexture*) filterBitmap.getTexture();
|
| w = filterBitmap.width();
|
| @@ -1533,13 +1533,13 @@
|
| CHECK_SHOULD_DRAW(draw, true);
|
|
|
| GrPaint grPaint;
|
| - grPaint.colorStage(kBitmapTextureIdx)->reset();
|
| + grPaint.colorStage(kBitmapEffectIdx)->reset();
|
| if (!dev->bindDeviceAsTexture(&grPaint) ||
|
| !skPaint2GrPaintNoShader(this, paint, true, false, &grPaint)) {
|
| return;
|
| }
|
|
|
| - GrTexture* devTex = (*grPaint.getColorStage(kBitmapTextureIdx).getEffect())->texture(0);
|
| + GrTexture* devTex = (*grPaint.getColorStage(kBitmapEffectIdx).getEffect())->texture(0);
|
| SkASSERT(NULL != devTex);
|
|
|
| const SkBitmap& bm = dev->accessBitmap(false);
|
| @@ -1550,7 +1550,7 @@
|
| if (NULL != filter) {
|
| SkBitmap filterBitmap;
|
| if (filter_texture(this, fContext, devTex, filter, w, h, &filterBitmap)) {
|
| - grPaint.colorStage(kBitmapTextureIdx)->setEffect(
|
| + grPaint.colorStage(kBitmapEffectIdx)->setEffect(
|
| GrSimpleTextureEffect::Create((GrTexture*) filterBitmap.getTexture(), SkMatrix::I()))->unref();
|
| devTex = (GrTexture*) filterBitmap.getTexture();
|
| w = filterBitmap.width();
|
|
|