Index: src/gpu/SkGpuDevice.cpp |
diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp |
index 20e5afef9fc613bad1a5187f52fd13581072cbb1..3b864f28362fbc80ed9d2e4d85278605d92396da 100644 |
--- a/src/gpu/SkGpuDevice.cpp |
+++ b/src/gpu/SkGpuDevice.cpp |
@@ -67,43 +67,6 @@ enum { kDefaultImageFilterCacheSize = 32 * 1024 * 1024 }; |
/////////////////////////////////////////////////////////////////////////////// |
-// Helper for turning a bitmap into a texture. If the bitmap is GrTexture backed this |
-// just accesses the backing GrTexture. Otherwise, it creates a cached texture |
-// representation and releases it in the destructor. |
-class AutoBitmapTexture : public SkNoncopyable { |
-public: |
- AutoBitmapTexture() {} |
- |
- AutoBitmapTexture(GrContext* context, |
- const SkBitmap& bitmap, |
- const GrTextureParams& params, |
- SkSourceGammaTreatment gammaTreatment, |
- GrTexture** texture) { |
- SkASSERT(texture); |
- *texture = this->set(context, bitmap, params, gammaTreatment); |
- } |
- |
- GrTexture* set(GrContext* context, |
- const SkBitmap& bitmap, |
- const GrTextureParams& params, |
- SkSourceGammaTreatment gammaTreatment) { |
- // Either get the texture directly from the bitmap, or else use the cache and |
- // remember to unref it. |
- if (GrTexture* bmpTexture = bitmap.getTexture()) { |
- fTexture.reset(nullptr); |
- return bmpTexture; |
- } else { |
- fTexture.reset(GrRefCachedBitmapTexture(context, bitmap, params, gammaTreatment)); |
- return fTexture.get(); |
- } |
- } |
- |
-private: |
- SkAutoTUnref<GrTexture> fTexture; |
-}; |
- |
-/////////////////////////////////////////////////////////////////////////////// |
- |
/** Checks that the alpha type is legal and gets constructor flags. Returns false if device creation |
should fail. */ |
bool SkGpuDevice::CheckAlphaTypeAndGetFlags( |
@@ -836,11 +799,6 @@ bool SkGpuDevice::shouldTileBitmap(const SkBitmap& bitmap, |
int* tileSize, |
SkIRect* clippedSrcRect) const { |
ASSERT_SINGLE_OWNER |
- // if bitmap is explictly texture backed then just use the texture |
- if (bitmap.getTexture()) { |
- return false; |
- } |
- |
return this->shouldTileImageID(bitmap.getGenerationID(), bitmap.getSubset(), viewMatrix, params, |
srcRectPtr, maxTileSize, tileSize, clippedSrcRect); |
} |
@@ -887,13 +845,7 @@ void SkGpuDevice::drawBitmap(const SkDraw& origDraw, |
CHECK_SHOULD_DRAW(origDraw); |
SkMatrix viewMatrix; |
viewMatrix.setConcat(*origDraw.fMatrix, m); |
- if (bitmap.getTexture()) { |
- GrBitmapTextureAdjuster adjuster(&bitmap); |
- // We can use kFast here because we know texture-backed bitmaps don't support extractSubset. |
- this->drawTextureProducer(&adjuster, nullptr, nullptr, SkCanvas::kFast_SrcRectConstraint, |
- viewMatrix, fClip, paint); |
- return; |
- } |
+ |
int maxTileSize = fContext->caps()->maxTileSize(); |
// The tile code path doesn't currently support AA, so if the paint asked for aa and we could |
@@ -1090,16 +1042,13 @@ void SkGpuDevice::internalDrawBitmap(const SkBitmap& bitmap, |
// We should have already handled bitmaps larger than the max texture size. |
SkASSERT(bitmap.width() <= fContext->caps()->maxTextureSize() && |
bitmap.height() <= fContext->caps()->maxTextureSize()); |
- // Unless the bitmap is inherently texture-backed, we should be respecting the max tile size |
- // by the time we get here. |
- SkASSERT(bitmap.getTexture() || |
- (bitmap.width() <= fContext->caps()->maxTileSize() && |
- bitmap.height() <= fContext->caps()->maxTileSize())); |
+ // We should be respecting the max tile size by the time we get here. |
+ SkASSERT(bitmap.width() <= fContext->caps()->maxTileSize() && |
+ bitmap.height() <= fContext->caps()->maxTileSize()); |
- GrTexture* texture; |
SkSourceGammaTreatment gammaTreatment = this->surfaceProps().isGammaCorrect() |
? SkSourceGammaTreatment::kRespect : SkSourceGammaTreatment::kIgnore; |
- AutoBitmapTexture abt(fContext, bitmap, params, gammaTreatment, &texture); |
+ sk_sp<GrTexture> texture = GrMakeCachedBitmapTexture(fContext, bitmap, params, gammaTreatment); |
if (nullptr == texture) { |
return; |
} |
@@ -1151,19 +1100,19 @@ void SkGpuDevice::internalDrawBitmap(const SkBitmap& bitmap, |
} |
textureDomain.setLTRB(left, top, right, bottom); |
if (bicubic) { |
- fp = GrBicubicEffect::Make(texture, std::move(colorSpaceXform), texMatrix, |
+ fp = GrBicubicEffect::Make(texture.get(), std::move(colorSpaceXform), texMatrix, |
f(malita)
2016/07/25 12:58:15
std::move(texture)?
|
textureDomain); |
} else { |
- fp = GrTextureDomainEffect::Make(texture, std::move(colorSpaceXform), texMatrix, |
+ fp = GrTextureDomainEffect::Make(texture.get(), std::move(colorSpaceXform), texMatrix, |
f(malita)
2016/07/25 12:58:15
ditto
|
textureDomain, GrTextureDomain::kClamp_Mode, |
params.filterMode()); |
} |
} else if (bicubic) { |
SkASSERT(GrTextureParams::kNone_FilterMode == params.filterMode()); |
SkShader::TileMode tileModes[2] = { params.getTileModeX(), params.getTileModeY() }; |
- fp = GrBicubicEffect::Make(texture, std::move(colorSpaceXform), texMatrix, tileModes); |
+ fp = GrBicubicEffect::Make(texture.get(), std::move(colorSpaceXform), texMatrix, tileModes); |
f(malita)
2016/07/25 12:58:15
ditto
|
} else { |
- fp = GrSimpleTextureEffect::Make(texture, std::move(colorSpaceXform), texMatrix, params); |
+ fp = GrSimpleTextureEffect::Make(texture.get(), std::move(colorSpaceXform), texMatrix, params); |
f(malita)
2016/07/25 12:58:15
ditto
bsalomon
2016/07/25 13:50:07
We aren't widely using sk_sp for GrResource types
|
} |
GrPaint grPaint; |
@@ -1192,8 +1141,8 @@ void SkGpuDevice::drawSprite(const SkDraw& draw, const SkBitmap& bitmap, |
return; |
} |
- sk_sp<GrTexture> texture = sk_ref_sp(bitmap.getTexture()); |
- if (!texture) { |
+ sk_sp<GrTexture> texture; |
+ { |
SkAutoLockPixels alp(bitmap, true); |
if (!bitmap.readyToDraw()) { |
return; |
@@ -1282,12 +1231,7 @@ void SkGpuDevice::drawBitmapRect(const SkDraw& draw, const SkBitmap& bitmap, |
const SkPaint& paint, SkCanvas::SrcRectConstraint constraint) { |
ASSERT_SINGLE_OWNER |
CHECK_SHOULD_DRAW(draw); |
- if (bitmap.getTexture()) { |
- GrBitmapTextureAdjuster adjuster(&bitmap); |
- this->drawTextureProducer(&adjuster, src, &origDst, constraint, *draw.fMatrix, fClip, |
- paint); |
- return; |
- } |
+ |
// The src rect is inferred to be the bmp bounds if not provided. Otherwise, the src rect must |
// be clipped to the bmp bounds. To determine tiling parameters we need the filter mode which |
// in turn requires knowing the src-to-dst mapping. If the src was clipped to the bmp bounds |
@@ -1366,23 +1310,21 @@ void SkGpuDevice::drawBitmapRect(const SkDraw& draw, const SkBitmap& bitmap, |
} |
sk_sp<SkSpecialImage> SkGpuDevice::makeSpecial(const SkBitmap& bitmap) { |
- SkASSERT(!bitmap.getTexture()); |
- |
SkAutoLockPixels alp(bitmap, true); |
if (!bitmap.readyToDraw()) { |
return nullptr; |
} |
- GrTexture* texture; |
- AutoBitmapTexture abt(fContext, bitmap, GrTextureParams::ClampNoFilter(), |
- SkSourceGammaTreatment::kRespect, &texture); |
+ sk_sp<GrTexture> texture = GrMakeCachedBitmapTexture(fContext, bitmap, |
+ GrTextureParams::ClampNoFilter(), |
+ SkSourceGammaTreatment::kRespect); |
if (!texture) { |
return nullptr; |
} |
return SkSpecialImage::MakeFromGpu(bitmap.bounds(), |
bitmap.getGenerationID(), |
robertphillips
2016/07/25 12:08:28
std::move ?
|
- sk_ref_sp(texture), |
+ texture, |
sk_ref_sp(bitmap.colorSpace()), |
&this->surfaceProps()); |
} |
@@ -1576,13 +1518,8 @@ void SkGpuDevice::drawImageNine(const SkDraw& draw, const SkImage* image, |
void SkGpuDevice::drawBitmapNine(const SkDraw& draw, const SkBitmap& bitmap, const SkIRect& center, |
const SkRect& dst, const SkPaint& paint) { |
ASSERT_SINGLE_OWNER |
- if (bitmap.getTexture()) { |
- GrBitmapTextureAdjuster adjuster(&bitmap); |
- this->drawProducerNine(draw, &adjuster, center, dst, paint); |
- } else { |
- GrBitmapTextureMaker maker(fContext, bitmap); |
- this->drawProducerNine(draw, &maker, center, dst, paint); |
- } |
+ GrBitmapTextureMaker maker(fContext, bitmap); |
+ this->drawProducerNine(draw, &maker, center, dst, paint); |
} |
/////////////////////////////////////////////////////////////////////////////// |