| 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 "GrPipelineBuilder.h" | 10 #include "GrPipelineBuilder.h" |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 fPixels.reset(bmImageInfo); | 219 fPixels.reset(bmImageInfo); |
| 220 } | 220 } |
| 221 fDraw.fDst = fPixels; | 221 fDraw.fDst = fPixels; |
| 222 fRasterClip.setRect(bounds); | 222 fRasterClip.setRect(bounds); |
| 223 fDraw.fRC = &fRasterClip; | 223 fDraw.fRC = &fRasterClip; |
| 224 fDraw.fClip = &fRasterClip.bwRgn(); | 224 fDraw.fClip = &fRasterClip.bwRgn(); |
| 225 fDraw.fMatrix = &fMatrix; | 225 fDraw.fMatrix = &fMatrix; |
| 226 return true; | 226 return true; |
| 227 } | 227 } |
| 228 | 228 |
| 229 #include "GrContext.h" |
| 230 #include "GrResourceProvider.h" |
| 231 |
| 229 /** | 232 /** |
| 230 * Get a texture (from the texture cache) of the correct size & format. | 233 * Get a texture (from the texture cache) of the correct size & format. |
| 231 */ | 234 */ |
| 232 GrTexture* GrSWMaskHelper::createTexture() { | 235 GrTexture* GrSWMaskHelper::createTexture() { |
| 233 GrSurfaceDesc desc; | 236 GrSurfaceDesc desc; |
| 234 desc.fWidth = fPixels.width(); | 237 desc.fWidth = fPixels.width(); |
| 235 desc.fHeight = fPixels.height(); | 238 desc.fHeight = fPixels.height(); |
| 236 desc.fConfig = kAlpha_8_GrPixelConfig; | 239 desc.fConfig = kAlpha_8_GrPixelConfig; |
| 237 | 240 |
| 238 if (kNone_CompressionMode != fCompressionMode) { | 241 if (kNone_CompressionMode != fCompressionMode) { |
| 239 | 242 |
| 240 #ifdef SK_DEBUG | 243 #ifdef SK_DEBUG |
| 241 int dimX, dimY; | 244 int dimX, dimY; |
| 242 SkTextureCompressor::GetBlockDimensions(fCompressedFormat, &dimX, &dimY)
; | 245 SkTextureCompressor::GetBlockDimensions(fCompressedFormat, &dimX, &dimY)
; |
| 243 SkASSERT((desc.fWidth % dimX) == 0); | 246 SkASSERT((desc.fWidth % dimX) == 0); |
| 244 SkASSERT((desc.fHeight % dimY) == 0); | 247 SkASSERT((desc.fHeight % dimY) == 0); |
| 245 #endif | 248 #endif |
| 246 | 249 |
| 247 desc.fConfig = fmt_to_config(fCompressedFormat); | 250 desc.fConfig = fmt_to_config(fCompressedFormat); |
| 248 SkASSERT(fContext->caps()->isConfigTexturable(desc.fConfig)); | 251 SkASSERT(fContext->caps()->isConfigTexturable(desc.fConfig)); |
| 249 } | 252 } |
| 250 | 253 |
| 251 return fContext->textureProvider()->createApproxTexture(desc); | 254 return fContext->resourceProvider()->createApproxTexture(desc, GrResourcePro
vider::kNoPendingIO_Flag); |
| 252 } | 255 } |
| 253 | 256 |
| 254 void GrSWMaskHelper::sendTextureData(GrTexture *texture, const GrSurfaceDesc& de
sc, | 257 void GrSWMaskHelper::sendTextureData(GrTexture *texture, const GrSurfaceDesc& de
sc, |
| 255 const void *data, size_t rowbytes) { | 258 const void *data, size_t rowbytes) { |
| 256 // If we aren't reusing scratch textures we don't need to flush before | 259 // If we aren't reusing scratch textures we don't need to flush before |
| 257 // writing since no one else will be using 'texture' | 260 // writing since no one else will be using 'texture' |
| 258 bool reuseScratch = fContext->caps()->reuseScratchTextures(); | 261 bool reuseScratch = fContext->caps()->reuseScratchTextures(); |
| 259 | 262 |
| 260 // Since we're uploading to it, and it's compressed, 'texture' shouldn't | 263 // Since we're uploading to it, and it's compressed, 'texture' shouldn't |
| 261 // have a render target. | 264 // have a render target. |
| 262 SkASSERT(nullptr == texture->asRenderTarget()); | 265 SkASSERT(nullptr == texture->asRenderTarget()); |
| 263 | 266 |
| 264 texture->writePixels(0, 0, desc.fWidth, desc.fHeight, | 267 texture->writePixels(NULL, 0, 0, desc.fWidth, desc.fHeight, |
| 265 desc.fConfig, data, rowbytes, | 268 desc.fConfig, data, rowbytes, |
| 266 reuseScratch ? 0 : GrContext::kDontFlush_PixelOpsFlag); | 269 reuseScratch ? 0 : GrContext::kDontFlush_PixelOpsFlag); |
| 270 |
| 271 texture->setFromRawPixels(true); |
| 272 texture->setException(true); |
| 267 } | 273 } |
| 268 | 274 |
| 269 void GrSWMaskHelper::compressTextureData(GrTexture *texture, const GrSurfaceDesc
& desc) { | 275 void GrSWMaskHelper::compressTextureData(GrTexture *texture, const GrSurfaceDesc
& desc) { |
| 270 | 276 |
| 271 SkASSERT(GrPixelConfigIsCompressed(desc.fConfig)); | 277 SkASSERT(GrPixelConfigIsCompressed(desc.fConfig)); |
| 272 SkASSERT(fmt_to_config(fCompressedFormat) == desc.fConfig); | 278 SkASSERT(fmt_to_config(fCompressedFormat) == desc.fConfig); |
| 273 | 279 |
| 274 SkAutoDataUnref cmpData(SkTextureCompressor::CompressBitmapToFormat(fPixels, | 280 SkAutoDataUnref cmpData(SkTextureCompressor::CompressBitmapToFormat(fPixels, |
| 275 fCompres
sedFormat)); | 281 fCompres
sedFormat)); |
| 276 SkASSERT(cmpData); | 282 SkASSERT(cmpData); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 330 return nullptr; | 336 return nullptr; |
| 331 } | 337 } |
| 332 | 338 |
| 333 helper.draw(path, stroke, SkRegion::kReplace_Op, antiAlias, 0xFF); | 339 helper.draw(path, stroke, SkRegion::kReplace_Op, antiAlias, 0xFF); |
| 334 | 340 |
| 335 GrTexture* texture(helper.createTexture()); | 341 GrTexture* texture(helper.createTexture()); |
| 336 if (!texture) { | 342 if (!texture) { |
| 337 return nullptr; | 343 return nullptr; |
| 338 } | 344 } |
| 339 | 345 |
| 346 |
| 347 |
| 340 helper.toTexture(texture); | 348 helper.toTexture(texture); |
| 341 | 349 |
| 342 return texture; | 350 return texture; |
| 343 } | 351 } |
| 344 | 352 |
| 345 void GrSWMaskHelper::DrawToTargetWithPathMask(GrTexture* texture, | 353 void GrSWMaskHelper::DrawToTargetWithPathMask(GrTexture* texture, |
| 346 GrDrawTarget* target, | 354 GrDrawTarget* target, |
| 347 GrPipelineBuilder* pipelineBuilder
, | 355 GrPipelineBuilder* pipelineBuilder
, |
| 348 GrColor color, | 356 GrColor color, |
| 349 const SkMatrix& viewMatrix, | 357 const SkMatrix& viewMatrix, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 363 // a translation so that the top-left of the device bounds maps to 0,0, and
then a scaling | 371 // a translation so that the top-left of the device bounds maps to 0,0, and
then a scaling |
| 364 // matrix to normalized coords. | 372 // matrix to normalized coords. |
| 365 SkMatrix maskMatrix; | 373 SkMatrix maskMatrix; |
| 366 maskMatrix.setIDiv(texture->width(), texture->height()); | 374 maskMatrix.setIDiv(texture->width(), texture->height()); |
| 367 maskMatrix.preTranslate(SkIntToScalar(-rect.fLeft), SkIntToScalar(-rect.fTop
)); | 375 maskMatrix.preTranslate(SkIntToScalar(-rect.fLeft), SkIntToScalar(-rect.fTop
)); |
| 368 | 376 |
| 369 pipelineBuilder->addCoverageFragmentProcessor( | 377 pipelineBuilder->addCoverageFragmentProcessor( |
| 370 GrSimpleTextureEffect::Create(texture, | 378 GrSimpleTextureEffect::Create(texture, |
| 371 maskMatrix, | 379 maskMatrix, |
| 372 GrTextureParams::kNone_Fi
lterMode, | 380 GrTextureParams::kNone_Fi
lterMode, |
| 373 kDevice_GrCoordSet))->unr
ef(); | 381 kDevice_GrCoordSet, targe
t->rt_delete_me()))->unref(); |
| 374 | 382 |
| 375 target->drawNonAARect(*pipelineBuilder, color, SkMatrix::I(), dstRect, inver
t); | 383 target->drawNonAARect(*pipelineBuilder, color, SkMatrix::I(), dstRect, inver
t); |
| 376 } | 384 } |
| OLD | NEW |