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; |
} |