diff options
author | 2012-07-20 16:25:18 +0000 | |
---|---|---|
committer | 2012-07-20 16:25:18 +0000 | |
commit | 1e8f016305805d4d8cad74aba3a21b78486f9d6f (patch) | |
tree | af375e711e189cffeb808567c761af57c1b9c678 /src/gpu/SkGpuDevice.cpp | |
parent | 96291dfa7054545327b34016882ca57f40a1fc81 (diff) |
Remove easily-removable uses of setTexture(), instead creating a GrSingleTextureEffect -
where feasible, through convenience function on GrDrawState.
http://codereview.appspot.com/6425055/
git-svn-id: http://skia.googlecode.com/svn/trunk@4694 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/gpu/SkGpuDevice.cpp')
-rw-r--r-- | src/gpu/SkGpuDevice.cpp | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp index 32d5883edd..1dc17fb610 100644 --- a/src/gpu/SkGpuDevice.cpp +++ b/src/gpu/SkGpuDevice.cpp @@ -425,7 +425,13 @@ SkGpuRenderTarget* SkGpuDevice::accessRenderTarget() { bool SkGpuDevice::bindDeviceAsTexture(GrPaint* paint) { if (NULL != fTexture) { + // FIXME: cannot use GrSingleTextureEffect here: fails + // assert in line 1617: null != devTex; generalizing GrPaint::getTexture() + // to grab textures off of GrCustomStages breaks gms in various ways - + // particularly since table color filter requires multiple textures paint->setTexture(kBitmapTextureIdx, fTexture); + //paint->textureSampler(kBitmapTextureIdx)->setCustomStage( + //SkNEW_ARGS(GrSingleTextureEffect, (fTexture)))->unref(); return true; } return false; @@ -486,7 +492,7 @@ inline bool skPaint2GrPaintNoShader(SkGpuDevice* dev, GrAssert(!constantColor); } else { grPaint->fColor = SkColor2GrColor(skPaint.getColor()); - grPaint->setTexture(kShaderTextureIdx, NULL); + GrAssert(NULL == grPaint->getTexture(kShaderTextureIdx)); } SkColorFilter* colorFilter = skPaint.getColorFilter(); SkColor color; @@ -616,9 +622,7 @@ inline bool skPaint2GrPaintShader(SkGpuDevice* dev, } else { sampler->setFilter(GrSamplerState::kNearest_Filter); } - // TODO - once we have a trivial GrCustomStage for texture drawing, - // create that here & get rid of the paint's texture - grPaint->setTexture(kShaderTextureIdx, texture); + sampler->setCustomStage(SkNEW_ARGS(GrSingleTextureEffect, (texture)))->unref(); break; } sampler->setWrapX(sk_tile_mode_to_grwrap(tileModes[0])); @@ -904,7 +908,8 @@ bool drawWithGPUMaskFilter(GrContext* context, const SkPath& path, pathTexture->height()); // Blend pathTexture over blurTexture. context->setRenderTarget(blurTexture->asRenderTarget()); - paint.setTexture(0, pathTexture); + paint.textureSampler(0)->setCustomStage(SkNEW_ARGS + (GrSingleTextureEffect, (pathTexture)))->unref(); if (SkMaskFilter::kInner_BlurType == blurType) { // inner: dst = dst * src paint.fSrcBlendCoeff = kDC_GrBlendCoeff; @@ -1409,7 +1414,8 @@ void SkGpuDevice::internalDrawBitmap(const SkDraw& draw, return; } - grPaint->setTexture(kBitmapTextureIdx, texture); + grPaint->textureSampler(kBitmapTextureIdx)->setCustomStage(SkNEW_ARGS + (GrSingleTextureEffect, (texture)))->unref(); GrRect dstRect = SkRect::MakeWH(GrIntToScalar(srcRect.width()), GrIntToScalar(srcRect.height())); @@ -1558,14 +1564,16 @@ void SkGpuDevice::drawSprite(const SkDraw& draw, const SkBitmap& bitmap, GrTexture* texture; sampler->reset(); SkAutoCachedTexture act(this, bitmap, sampler, &texture); - grPaint.setTexture(kBitmapTextureIdx, texture); + grPaint.textureSampler(kBitmapTextureIdx)->setCustomStage(SkNEW_ARGS + (GrSingleTextureEffect, (texture)))->unref(); SkImageFilter* filter = paint.getImageFilter(); if (NULL != filter) { GrTexture* filteredTexture = filter_texture(fContext, texture, filter, GrRect::MakeWH(SkIntToScalar(w), SkIntToScalar(h))); if (filteredTexture) { - grPaint.setTexture(kBitmapTextureIdx, filteredTexture); + grPaint.textureSampler(kBitmapTextureIdx)->setCustomStage(SkNEW_ARGS + (GrSingleTextureEffect, (filteredTexture)))->unref(); texture = filteredTexture; filteredTexture->unref(); } @@ -1608,7 +1616,8 @@ void SkGpuDevice::drawDevice(const SkDraw& draw, SkDevice* device, GrTexture* filteredTexture = filter_texture(fContext, devTex, filter, rect); if (filteredTexture) { - grPaint.setTexture(kBitmapTextureIdx, filteredTexture); + grPaint.textureSampler(kBitmapTextureIdx)->setCustomStage(SkNEW_ARGS + (GrSingleTextureEffect, (filteredTexture)))->unref(); devTex = filteredTexture; filteredTexture->unref(); } |