Chromium Code Reviews| Index: src/gpu/GrSWMaskHelper.cpp |
| diff --git a/src/gpu/GrSWMaskHelper.cpp b/src/gpu/GrSWMaskHelper.cpp |
| index 504f5a0a35aa4d912feea21a08613261f98757a5..044ff7a0944e81318ac9bcbd921b32663a85ea24 100644 |
| --- a/src/gpu/GrSWMaskHelper.cpp |
| +++ b/src/gpu/GrSWMaskHelper.cpp |
| @@ -6,16 +6,22 @@ |
| */ |
| #include "GrSWMaskHelper.h" |
| + |
| #include "GrDrawState.h" |
| #include "GrDrawTargetCaps.h" |
| #include "GrGpu.h" |
| #include "SkStrokeRec.h" |
| +#if GR_COMPRESS_ALPHA_MASK |
|
robertphillips
2014/06/10 22:19:46
no extra space here
krajcevski
2014/06/10 22:28:46
Done.
|
| +# include "SkData.h" |
| +# include "SkTextureCompressor.h" |
| +#endif |
| // TODO: try to remove this #include |
| #include "GrContext.h" |
| namespace { |
| + |
| /* |
| * Convert a boolean operation into a transfer mode code |
| */ |
| @@ -127,6 +133,26 @@ bool GrSWMaskHelper::getTexture(GrAutoScratchTexture* texture) { |
| return NULL != texture->texture(); |
| } |
| +GrTexture* GrSWMaskHelper::toLATCTexture(GrContext* ctx) { |
| +#if GR_COMPRESS_ALPHA_MASK |
| + // Encode the BM into LATC data: |
|
robertphillips
2014/06/10 22:19:46
Can just use fBM - don't need this-> in this case.
krajcevski
2014/06/10 22:28:46
Done.
|
| + SkAutoLockPixels alp(this->fBM); |
| + SkTextureCompressor::Format format = SkTextureCompressor::kLATC_Format; |
| + SkAutoDataUnref latcData(SkTextureCompressor::CompressBitmapToFormat(this->fBM, format)); |
| + if (NULL == latcData) { |
| + return NULL; |
| + } |
| + |
| + GrTextureDesc desc; |
| + desc.fWidth = this->fBM.width(); |
| + desc.fHeight = this->fBM.height(); |
| + desc.fConfig = kLATC_GrPixelConfig; |
| + return ctx->getGpu()->createTexture(desc, latcData->bytes(), 0); |
| +#else |
| + return NULL; |
| +#endif |
| +} |
| + |
| /** |
| * Move the result of the software mask generation back to the gpu |
| */ |
| @@ -158,8 +184,6 @@ GrTexture* GrSWMaskHelper::DrawPathMaskToTexture(GrContext* context, |
| const SkIRect& resultBounds, |
| bool antiAlias, |
| SkMatrix* matrix) { |
| - GrAutoScratchTexture ast; |
| - |
| GrSWMaskHelper helper(context); |
| if (!helper.init(resultBounds, matrix)) { |
| @@ -168,6 +192,16 @@ GrTexture* GrSWMaskHelper::DrawPathMaskToTexture(GrContext* context, |
| helper.draw(path, stroke, SkRegion::kReplace_Op, antiAlias, 0xFF); |
|
robertphillips
2014/06/10 22:19:46
Given the flag usage in toLATCTexture we probably
krajcevski
2014/06/10 22:28:46
Done.
|
| +#if GR_COMPRESS_ALPHA_MASK |
| + // Can we create an LATC texture? |
| + GrTexture *latc = helper.toLATCTexture(context); |
| + if (NULL != latc) { |
| + return latc; |
| + } |
| +#endif |
| + |
| + // Looks like we have to send a full A8 texture. |
| + GrAutoScratchTexture ast; |
| if (!helper.getTexture(&ast)) { |
| return NULL; |
| } |