| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "GrSWMaskHelper.h" | 8 #include "GrSWMaskHelper.h" |
| 9 | 9 |
| 10 #include "GrCaps.h" | 10 #include "GrCaps.h" |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 | 97 |
| 98 /** | 98 /** |
| 99 * Get a texture (from the texture cache) of the correct size & format. | 99 * Get a texture (from the texture cache) of the correct size & format. |
| 100 */ | 100 */ |
| 101 GrTexture* GrSWMaskHelper::createTexture() { | 101 GrTexture* GrSWMaskHelper::createTexture() { |
| 102 GrSurfaceDesc desc; | 102 GrSurfaceDesc desc; |
| 103 desc.fWidth = fPixels.width(); | 103 desc.fWidth = fPixels.width(); |
| 104 desc.fHeight = fPixels.height(); | 104 desc.fHeight = fPixels.height(); |
| 105 desc.fConfig = kAlpha_8_GrPixelConfig; | 105 desc.fConfig = kAlpha_8_GrPixelConfig; |
| 106 | 106 |
| 107 return fContext->textureProvider()->createApproxTexture(desc); | 107 return fTexProvider->createApproxTexture(desc); |
| 108 } | 108 } |
| 109 | 109 |
| 110 /** | 110 /** |
| 111 * Move the result of the software mask generation back to the gpu | 111 * Move the result of the software mask generation back to the gpu |
| 112 */ | 112 */ |
| 113 void GrSWMaskHelper::toTexture(GrTexture *texture) { | 113 void GrSWMaskHelper::toTexture(GrTexture *texture) { |
| 114 // Since we're uploading to it, and it's compressed, 'texture' shouldn't | 114 // Since we're uploading to it, and it's compressed, 'texture' shouldn't |
| 115 // have a render target. | 115 // have a render target. |
| 116 SkASSERT(!texture->asRenderTarget()); | 116 SkASSERT(!texture->asRenderTarget()); |
| 117 | 117 |
| 118 texture->writePixels(0, 0, fPixels.width(), fPixels.height(), texture->confi
g(), | 118 texture->writePixels(0, 0, fPixels.width(), fPixels.height(), texture->confi
g(), |
| 119 fPixels.addr(), fPixels.rowBytes()); | 119 fPixels.addr(), fPixels.rowBytes()); |
| 120 | 120 |
| 121 } | 121 } |
| 122 | 122 |
| 123 /** | 123 /** |
| 124 * Convert mask generation results to a signed distance field | 124 * Convert mask generation results to a signed distance field |
| 125 */ | 125 */ |
| 126 void GrSWMaskHelper::toSDF(unsigned char* sdf) { | 126 void GrSWMaskHelper::toSDF(unsigned char* sdf) { |
| 127 SkGenerateDistanceFieldFromA8Image(sdf, (const unsigned char*)fPixels.addr()
, | 127 SkGenerateDistanceFieldFromA8Image(sdf, (const unsigned char*)fPixels.addr()
, |
| 128 fPixels.width(), fPixels.height(), fPixel
s.rowBytes()); | 128 fPixels.width(), fPixels.height(), fPixel
s.rowBytes()); |
| 129 } | 129 } |
| 130 | 130 |
| 131 //////////////////////////////////////////////////////////////////////////////// | 131 //////////////////////////////////////////////////////////////////////////////// |
| 132 /** | 132 /** |
| 133 * Software rasterizes path to A8 mask (possibly using the context's matrix) | 133 * Software rasterizes path to A8 mask (possibly using the context's matrix) |
| 134 * and uploads the result to a scratch texture. Returns the resulting | 134 * and uploads the result to a scratch texture. Returns the resulting |
| 135 * texture on success; nullptr on failure. | 135 * texture on success; nullptr on failure. |
| 136 */ | 136 */ |
| 137 GrTexture* GrSWMaskHelper::DrawPathMaskToTexture(GrContext* context, | 137 GrTexture* GrSWMaskHelper::DrawPathMaskToTexture(GrTextureProvider* texProvider, |
| 138 const SkPath& path, | 138 const SkPath& path, |
| 139 const GrStyle& style, | 139 const GrStyle& style, |
| 140 const SkIRect& resultBounds, | 140 const SkIRect& resultBounds, |
| 141 bool antiAlias, | 141 bool antiAlias, |
| 142 const SkMatrix* matrix) { | 142 const SkMatrix* matrix) { |
| 143 GrSWMaskHelper helper(context); | 143 GrSWMaskHelper helper(texProvider); |
| 144 | 144 |
| 145 if (!helper.init(resultBounds, matrix)) { | 145 if (!helper.init(resultBounds, matrix)) { |
| 146 return nullptr; | 146 return nullptr; |
| 147 } | 147 } |
| 148 | 148 |
| 149 helper.drawPath(path, style, SkRegion::kReplace_Op, antiAlias, 0xFF); | 149 helper.drawPath(path, style, SkRegion::kReplace_Op, antiAlias, 0xFF); |
| 150 | 150 |
| 151 GrTexture* texture(helper.createTexture()); | 151 GrTexture* texture(helper.createTexture()); |
| 152 if (!texture) { | 152 if (!texture) { |
| 153 return nullptr; | 153 return nullptr; |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 pipelineBuilder->addCoverageFragmentProcessor( | 186 pipelineBuilder->addCoverageFragmentProcessor( |
| 187 GrSimpleTextureEffect::Create(texture, | 187 GrSimpleTextureEffect::Create(texture, |
| 188 maskMatrix, | 188 maskMatrix, |
| 189 GrTextureParams::kNone_Fi
lterMode, | 189 GrTextureParams::kNone_Fi
lterMode, |
| 190 kDevice_GrCoordSet))->unr
ef(); | 190 kDevice_GrCoordSet))->unr
ef(); |
| 191 | 191 |
| 192 SkAutoTUnref<GrDrawBatch> batch(GrRectBatchFactory::CreateNonAAFill(color, S
kMatrix::I(), | 192 SkAutoTUnref<GrDrawBatch> batch(GrRectBatchFactory::CreateNonAAFill(color, S
kMatrix::I(), |
| 193 dstRect,
nullptr, &invert)); | 193 dstRect,
nullptr, &invert)); |
| 194 target->drawBatch(*pipelineBuilder, clip, batch); | 194 target->drawBatch(*pipelineBuilder, clip, batch); |
| 195 } | 195 } |
| OLD | NEW |