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 #include "GrDrawState.h" | 9 #include "GrDrawState.h" |
10 #include "GrGpu.h" | 10 #include "GrGpu.h" |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
123 desc.fHeight = fBM.height(); | 123 desc.fHeight = fBM.height(); |
124 desc.fConfig = kAlpha_8_GrPixelConfig; | 124 desc.fConfig = kAlpha_8_GrPixelConfig; |
125 | 125 |
126 texture->set(fContext, desc); | 126 texture->set(fContext, desc); |
127 return NULL != texture->texture(); | 127 return NULL != texture->texture(); |
128 } | 128 } |
129 | 129 |
130 /** | 130 /** |
131 * Move the result of the software mask generation back to the gpu | 131 * Move the result of the software mask generation back to the gpu |
132 */ | 132 */ |
133 void GrSWMaskHelper::toTexture(GrTexture *texture, uint8_t alpha) { | 133 void GrSWMaskHelper::toTexture(GrTexture *texture) { |
134 SkAutoLockPixels alp(fBM); | 134 SkAutoLockPixels alp(fBM); |
135 | 135 |
136 // The destination texture is almost always larger than "fBM". Clear | |
137 // it appropriately so we don't get mask artifacts outside of the path's | |
138 // bounding box | |
139 | |
140 // "texture" needs to be installed as the render target for the clear | |
141 // and the texture upload but cannot remain the render target upon | |
142 // return. Callers typically use it as a texture and it would then | |
143 // be both source and dest. | |
144 GrDrawState::AutoRenderTargetRestore artr(fContext->getGpu()->drawState(), | |
145 texture->asRenderTarget()); | |
146 | |
147 fContext->getGpu()->clear(NULL, GrColorPackRGBA(alpha, alpha, alpha, alpha))
; | |
148 | |
149 texture->writePixels(0, 0, fBM.width(), fBM.height(), | 136 texture->writePixels(0, 0, fBM.width(), fBM.height(), |
150 kAlpha_8_GrPixelConfig, | 137 kAlpha_8_GrPixelConfig, |
151 fBM.getPixels(), fBM.rowBytes()); | 138 fBM.getPixels(), fBM.rowBytes()); |
152 } | 139 } |
153 | 140 |
154 //////////////////////////////////////////////////////////////////////////////// | 141 //////////////////////////////////////////////////////////////////////////////// |
155 /** | 142 /** |
156 * Software rasterizes path to A8 mask (possibly using the context's matrix) | 143 * Software rasterizes path to A8 mask (possibly using the context's matrix) |
157 * and uploads the result to a scratch texture. Returns the resulting | 144 * and uploads the result to a scratch texture. Returns the resulting |
158 * texture on success; NULL on failure. | 145 * texture on success; NULL on failure. |
(...skipping 11 matching lines...) Expand all Loading... |
170 if (!helper.init(resultBounds, matrix)) { | 157 if (!helper.init(resultBounds, matrix)) { |
171 return NULL; | 158 return NULL; |
172 } | 159 } |
173 | 160 |
174 helper.draw(path, stroke, SkRegion::kReplace_Op, antiAlias, 0xFF); | 161 helper.draw(path, stroke, SkRegion::kReplace_Op, antiAlias, 0xFF); |
175 | 162 |
176 if (!helper.getTexture(&ast)) { | 163 if (!helper.getTexture(&ast)) { |
177 return NULL; | 164 return NULL; |
178 } | 165 } |
179 | 166 |
180 helper.toTexture(ast.texture(), 0x00); | 167 helper.toTexture(ast.texture()); |
181 | 168 |
182 return ast.detach(); | 169 return ast.detach(); |
183 } | 170 } |
184 | 171 |
185 void GrSWMaskHelper::DrawToTargetWithPathMask(GrTexture* texture, | 172 void GrSWMaskHelper::DrawToTargetWithPathMask(GrTexture* texture, |
186 GrDrawTarget* target, | 173 GrDrawTarget* target, |
187 const SkIRect& rect) { | 174 const SkIRect& rect) { |
188 GrDrawState* drawState = target->drawState(); | 175 GrDrawState* drawState = target->drawState(); |
189 | 176 |
190 GrDrawState::AutoViewMatrixRestore avmr; | 177 GrDrawState::AutoViewMatrixRestore avmr; |
(...skipping 17 matching lines...) Expand all Loading... |
208 maskMatrix.preConcat(drawState->getViewMatrix()); | 195 maskMatrix.preConcat(drawState->getViewMatrix()); |
209 | 196 |
210 drawState->addCoverageEffect( | 197 drawState->addCoverageEffect( |
211 GrSimpleTextureEffect::Create(texture, | 198 GrSimpleTextureEffect::Create(texture, |
212 maskMatrix, | 199 maskMatrix, |
213 false, | 200 false, |
214 GrEffect::kPosition_Coord
sType))->unref(); | 201 GrEffect::kPosition_Coord
sType))->unref(); |
215 | 202 |
216 target->drawSimpleRect(dstRect); | 203 target->drawSimpleRect(dstRect); |
217 } | 204 } |
OLD | NEW |