diff options
author | 2012-07-20 16:25:18 +0000 | |
---|---|---|
committer | 2012-07-20 16:25:18 +0000 | |
commit | 1e8f016305805d4d8cad74aba3a21b78486f9d6f (patch) | |
tree | af375e711e189cffeb808567c761af57c1b9c678 /src | |
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')
-rw-r--r-- | src/gpu/GrClipMaskManager.cpp | 4 | ||||
-rw-r--r-- | src/gpu/GrContext.cpp | 9 | ||||
-rw-r--r-- | src/gpu/GrDrawState.h | 14 | ||||
-rw-r--r-- | src/gpu/GrSWMaskHelper.cpp | 2 | ||||
-rw-r--r-- | src/gpu/GrTextContext.cpp | 2 | ||||
-rw-r--r-- | src/gpu/SkGpuDevice.cpp | 27 |
6 files changed, 40 insertions, 18 deletions
diff --git a/src/gpu/GrClipMaskManager.cpp b/src/gpu/GrClipMaskManager.cpp index ebeaefaa9d..f313d68ccc 100644 --- a/src/gpu/GrClipMaskManager.cpp +++ b/src/gpu/GrClipMaskManager.cpp @@ -41,7 +41,7 @@ void setup_drawstate_aaclip(GrGpu* gpu, GrSamplerState::kNearest_Filter, mat); - drawState->setTexture(maskStage, result); + drawState->createTextureEffect(maskStage, result); } bool path_needs_SW_renderer(GrContext* context, @@ -431,11 +431,11 @@ void GrClipMaskManager::drawTexture(GrTexture* target, GrMatrix sampleM; sampleM.setIDiv(texture->width(), texture->height()); - drawState->setTexture(0, texture); drawState->sampler(0)->reset(GrSamplerState::kClamp_WrapMode, GrSamplerState::kNearest_Filter, sampleM); + drawState->createTextureEffect(0, texture); GrRect rect = GrRect::MakeWH(SkIntToScalar(target->width()), SkIntToScalar(target->height())); diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp index a78bdf7bec..8c6db5d0e2 100644 --- a/src/gpu/GrContext.cpp +++ b/src/gpu/GrContext.cpp @@ -368,8 +368,7 @@ GrContext::TextureCacheEntry GrContext::createAndLockTexture( GrDrawTarget::kReset_ASRInit); GrDrawState* drawState = fGpu->drawState(); drawState->setRenderTarget(texture->asRenderTarget()); - drawState->sampler(0)->setCustomStage(SkNEW_ARGS(GrSingleTextureEffect, - (clampEntry.texture())))->unref(); + drawState->createTextureEffect(0, clampEntry.texture()); GrSamplerState::Filter filter; // if filtering is not desired then we want to ensure all @@ -1405,7 +1404,7 @@ bool GrContext::internalReadRenderTargetPixels(GrRenderTarget* target, matrix.postIDiv(src->width(), src->height()); drawState->sampler(0)->reset(matrix); drawState->sampler(0)->setRAndBSwap(swapRAndB); - drawState->sampler(0)->setCustomStage(SkNEW_ARGS(GrSingleTextureEffect, (src)))->unref(); + drawState->createTextureEffect(0, src); GrRect rect; rect.setXYWH(0, 0, SK_Scalar1 * width, SK_Scalar1 * height); fGpu->drawSimpleRect(rect, NULL); @@ -1445,7 +1444,7 @@ void GrContext::copyTexture(GrTexture* src, GrRenderTarget* dst) { GrMatrix sampleM; sampleM.setIDiv(src->width(), src->height()); drawState->sampler(0)->reset(sampleM); - drawState->sampler(0)->setCustomStage(SkNEW_ARGS(GrSingleTextureEffect, (src)))->unref(); + drawState->createTextureEffect(0, src); SkRect rect = SkRect::MakeXYWH(0, 0, SK_Scalar1 * src->width(), SK_Scalar1 * src->height()); @@ -1544,7 +1543,7 @@ void GrContext::internalWriteRenderTargetPixels(GrRenderTarget* target, drawState->sampler(0)->reset(GrSamplerState::kClamp_WrapMode, GrSamplerState::kNearest_Filter, matrix); - drawState->sampler(0)->setCustomStage(SkNEW_ARGS(GrSingleTextureEffect, (texture)))->unref(); + drawState->createTextureEffect(0, texture); drawState->sampler(0)->setRAndBSwap(swapRAndB); static const GrVertexLayout layout = 0; diff --git a/src/gpu/GrDrawState.h b/src/gpu/GrDrawState.h index df70bb25e7..471ae1c59f 100644 --- a/src/gpu/GrDrawState.h +++ b/src/gpu/GrDrawState.h @@ -16,6 +16,7 @@ #include "GrStencil.h" #include "GrTexture.h" #include "GrRenderTarget.h" +#include "effects/GrSingleTextureEffect.h" #include "SkXfermode.h" @@ -187,6 +188,8 @@ public: * * @param texture The texture to set. Can be NULL though there is no * advantage to settings a NULL texture if doing non-textured drawing + * + * @deprecated */ void setTexture(int stage, GrTexture* texture) { GrAssert((unsigned)stage < kNumStages); @@ -195,6 +198,17 @@ public: } /** + * Creates a GrSingleTextureEffect. + * + * Replacement for setTexture. + */ + void createTextureEffect(int stage, GrTexture* texture) { + GrAssert(!this->getSampler(stage).getCustomStage()); + this->sampler(stage)->setCustomStage( + SkNEW_ARGS(GrSingleTextureEffect, (texture)))->unref(); + } + + /** * Retrieves the currently set texture. * * @return The currently set texture. The return value will be NULL if no diff --git a/src/gpu/GrSWMaskHelper.cpp b/src/gpu/GrSWMaskHelper.cpp index 247a444338..27d6760e7b 100644 --- a/src/gpu/GrSWMaskHelper.cpp +++ b/src/gpu/GrSWMaskHelper.cpp @@ -212,8 +212,8 @@ void GrSWMaskHelper::DrawToTargetWithPathMask(GrTexture* texture, kPathMaskStage = GrPaint::kTotalStages, }; GrAssert(!drawState->isStageEnabled(kPathMaskStage)); - drawState->setTexture(kPathMaskStage, texture); drawState->sampler(kPathMaskStage)->reset(); + drawState->createTextureEffect(kPathMaskStage, texture); GrScalar w = GrIntToScalar(rect.width()); GrScalar h = GrIntToScalar(rect.height()); GrRect maskRect = GrRect::MakeWH(w / texture->width(), diff --git a/src/gpu/GrTextContext.cpp b/src/gpu/GrTextContext.cpp index dc04fcd279..1fb17b56b3 100644 --- a/src/gpu/GrTextContext.cpp +++ b/src/gpu/GrTextContext.cpp @@ -40,7 +40,7 @@ void GrTextContext::flushGlyphs() { GrAssert(GrIsALIGN4(fCurrVertex)); GrAssert(fCurrTexture); - drawState->setTexture(kGlyphMaskStage, fCurrTexture); + drawState->createTextureEffect(kGlyphMaskStage, fCurrTexture); if (!GrPixelConfigIsAlphaOnly(fCurrTexture->config())) { if (kOne_GrBlendCoeff != fPaint.fSrcBlendCoeff || 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(); } |