| Index: src/core/SkSpecialImage.cpp
|
| diff --git a/src/core/SkSpecialImage.cpp b/src/core/SkSpecialImage.cpp
|
| index e90c655a5824567bb64035da8643567ea77f73e1..991e16351586674ad01272215071f043c72d8408 100644
|
| --- a/src/core/SkSpecialImage.cpp
|
| +++ b/src/core/SkSpecialImage.cpp
|
| @@ -4,10 +4,16 @@
|
| * Use of this source code is governed by a BSD-style license that can be
|
| * found in the LICENSE file
|
| */
|
| +#include "SkSpecialImage.h"
|
| +
|
| +#if SK_SUPPORT_GPU
|
| +#include "GrTexture.h"
|
| +#include "GrTextureParams.h"
|
| +#include "SkGr.h"
|
| +#endif
|
|
|
| #include "SkCanvas.h"
|
| #include "SkImage_Base.h"
|
| -#include "SkSpecialImage.h"
|
| #include "SkSpecialSurface.h"
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
| @@ -42,6 +48,38 @@ static inline const SkSpecialImage_Base* as_SIB(const SkSpecialImage* image) {
|
| return static_cast<const SkSpecialImage_Base*>(image);
|
| }
|
|
|
| +sk_sp<SkSpecialImage> SkSpecialImage::makeTextureImage(SkImageFilter::Proxy* proxy,
|
| + GrContext* context) {
|
| +#if SK_SUPPORT_GPU
|
| + if (!context) {
|
| + return nullptr;
|
| + }
|
| + if (GrTexture* peek = as_SIB(this)->peekTexture()) {
|
| + return peek->getContext() == context ? sk_sp<SkSpecialImage>(SkRef(this)) : nullptr;
|
| + }
|
| +
|
| + SkBitmap bmp;
|
| + if (!this->internal_getBM(&bmp)) {
|
| + return nullptr;
|
| + }
|
| +
|
| + SkAutoTUnref<GrTexture> resultTex(
|
| + GrRefCachedBitmapTexture(context, bmp, GrTextureParams::ClampNoFilter()));
|
| + if (!resultTex) {
|
| + return nullptr;
|
| + }
|
| +
|
| + SkAlphaType at = this->isOpaque() ? kOpaque_SkAlphaType : kPremul_SkAlphaType;
|
| +
|
| + return SkSpecialImage::MakeFromGpu(proxy,
|
| + SkIRect::MakeWH(resultTex->width(), resultTex->height()),
|
| + this->uniqueID(),
|
| + resultTex, at);
|
| +#else
|
| + return nullptr;
|
| +#endif
|
| +}
|
| +
|
| void SkSpecialImage::draw(SkCanvas* canvas, SkScalar x, SkScalar y, const SkPaint* paint) const {
|
| return as_SIB(this)->onDraw(canvas, x, y, paint);
|
| }
|
|
|