OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 "SkCanvas.h" | 8 #include "SkCanvas.h" |
9 #include "SkColorPriv.h" | 9 #include "SkColorPriv.h" |
10 #include "SkMathPriv.h" | 10 #include "SkMathPriv.h" |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
193 // Can't use canvas->peekPixels(), as we are trying to look at GPU pixels so
metimes as well. | 193 // Can't use canvas->peekPixels(), as we are trying to look at GPU pixels so
metimes as well. |
194 // At some point this will be unsupported, as we won't allow accessBitmap()
to magically call | 194 // At some point this will be unsupported, as we won't allow accessBitmap()
to magically call |
195 // readPixels for the client. | 195 // readPixels for the client. |
196 SkBitmap secretDevBitmap; | 196 SkBitmap secretDevBitmap; |
197 canvas->readPixels(canvasInfo.bounds(), &secretDevBitmap); | 197 canvas->readPixels(canvasInfo.bounds(), &secretDevBitmap); |
198 | 198 |
199 SkAutoLockPixels alp(secretDevBitmap); | 199 SkAutoLockPixels alp(secretDevBitmap); |
200 canvasRowBytes = secretDevBitmap.rowBytes(); | 200 canvasRowBytes = secretDevBitmap.rowBytes(); |
201 canvasPixels = static_cast<const uint32_t*>(secretDevBitmap.getPixels()); | 201 canvasPixels = static_cast<const uint32_t*>(secretDevBitmap.getPixels()); |
202 | 202 |
203 if (NULL == canvasPixels) { | 203 if (nullptr == canvasPixels) { |
204 return false; | 204 return false; |
205 } | 205 } |
206 | 206 |
207 if (canvasInfo.width() != DEV_W || | 207 if (canvasInfo.width() != DEV_W || |
208 canvasInfo.height() != DEV_H || | 208 canvasInfo.height() != DEV_H || |
209 canvasInfo.colorType() != kN32_SkColorType) { | 209 canvasInfo.colorType() != kN32_SkColorType) { |
210 return false; | 210 return false; |
211 } | 211 } |
212 | 212 |
213 const SkImageInfo bmInfo = bitmap.info(); | 213 const SkImageInfo bmInfo = bitmap.info(); |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
279 #include "SkMallocPixelRef.h" | 279 #include "SkMallocPixelRef.h" |
280 | 280 |
281 // This is a tricky pattern, because we have to setConfig+rowBytes AND specify | 281 // This is a tricky pattern, because we have to setConfig+rowBytes AND specify |
282 // a custom pixelRef (which also has to specify its rowBytes), so we have to be | 282 // a custom pixelRef (which also has to specify its rowBytes), so we have to be |
283 // sure that the two rowBytes match (and the infos match). | 283 // sure that the two rowBytes match (and the infos match). |
284 // | 284 // |
285 static bool alloc_row_bytes(SkBitmap* bm, const SkImageInfo& info, size_t rowByt
es) { | 285 static bool alloc_row_bytes(SkBitmap* bm, const SkImageInfo& info, size_t rowByt
es) { |
286 if (!bm->setInfo(info, rowBytes)) { | 286 if (!bm->setInfo(info, rowBytes)) { |
287 return false; | 287 return false; |
288 } | 288 } |
289 SkPixelRef* pr = SkMallocPixelRef::NewAllocate(info, rowBytes, NULL); | 289 SkPixelRef* pr = SkMallocPixelRef::NewAllocate(info, rowBytes, nullptr); |
290 bm->setPixelRef(pr)->unref(); | 290 bm->setPixelRef(pr)->unref(); |
291 return true; | 291 return true; |
292 } | 292 } |
293 | 293 |
294 static void free_pixels(void* pixels, void* ctx) { | 294 static void free_pixels(void* pixels, void* ctx) { |
295 sk_free(pixels); | 295 sk_free(pixels); |
296 } | 296 } |
297 | 297 |
298 static SkSurface* create_surface(const CanvasConfig& c, GrContext* grCtx) { | 298 static SkSurface* create_surface(const CanvasConfig& c, GrContext* grCtx) { |
299 SkImageInfo info = SkImageInfo::MakeN32Premul(DEV_W, DEV_H); | 299 SkImageInfo info = SkImageInfo::MakeN32Premul(DEV_W, DEV_H); |
300 switch (c.fDevType) { | 300 switch (c.fDevType) { |
301 case kRaster_DevType: { | 301 case kRaster_DevType: { |
302 const size_t rowBytes = c.fTightRowBytes ? info.minRowBytes() : 4 *
DEV_W + 100; | 302 const size_t rowBytes = c.fTightRowBytes ? info.minRowBytes() : 4 *
DEV_W + 100; |
303 const size_t size = info.getSafeSize(rowBytes); | 303 const size_t size = info.getSafeSize(rowBytes); |
304 void* pixels = sk_malloc_throw(size); | 304 void* pixels = sk_malloc_throw(size); |
305 // if rowBytes isn't tight then set the padding to a known value | 305 // if rowBytes isn't tight then set the padding to a known value |
306 if (!c.fTightRowBytes) { | 306 if (!c.fTightRowBytes) { |
307 memset(pixels, DEV_PAD, size); | 307 memset(pixels, DEV_PAD, size); |
308 } | 308 } |
309 return SkSurface::NewRasterDirectReleaseProc(info, pixels, rowBytes,
free_pixels, NULL); | 309 return SkSurface::NewRasterDirectReleaseProc(info, pixels, rowBytes,
free_pixels, nullptr); |
310 } | 310 } |
311 #if SK_SUPPORT_GPU | 311 #if SK_SUPPORT_GPU |
312 case kGpu_BottomLeft_DevType: | 312 case kGpu_BottomLeft_DevType: |
313 case kGpu_TopLeft_DevType: | 313 case kGpu_TopLeft_DevType: |
314 GrSurfaceDesc desc; | 314 GrSurfaceDesc desc; |
315 desc.fFlags = kRenderTarget_GrSurfaceFlag; | 315 desc.fFlags = kRenderTarget_GrSurfaceFlag; |
316 desc.fWidth = DEV_W; | 316 desc.fWidth = DEV_W; |
317 desc.fHeight = DEV_H; | 317 desc.fHeight = DEV_H; |
318 desc.fConfig = kSkia8888_GrPixelConfig; | 318 desc.fConfig = kSkia8888_GrPixelConfig; |
319 desc.fOrigin = kGpu_TopLeft_DevType == c.fDevType ? | 319 desc.fOrigin = kGpu_TopLeft_DevType == c.fDevType ? |
320 kTopLeft_GrSurfaceOrigin : kBottomLeft_GrSurfaceOrigin; | 320 kTopLeft_GrSurfaceOrigin : kBottomLeft_GrSurfaceOrigin; |
321 SkAutoTUnref<GrTexture> texture(grCtx->textureProvider()->createText
ure(desc, false)); | 321 SkAutoTUnref<GrTexture> texture(grCtx->textureProvider()->createText
ure(desc, false)); |
322 return SkSurface::NewRenderTargetDirect(texture->asRenderTarget()); | 322 return SkSurface::NewRenderTargetDirect(texture->asRenderTarget()); |
323 #endif | 323 #endif |
324 } | 324 } |
325 return NULL; | 325 return nullptr; |
326 } | 326 } |
327 | 327 |
328 static bool setup_bitmap(SkBitmap* bm, SkColorType ct, SkAlphaType at, int w, in
t h, int tightRB) { | 328 static bool setup_bitmap(SkBitmap* bm, SkColorType ct, SkAlphaType at, int w, in
t h, int tightRB) { |
329 size_t rowBytes = tightRB ? 0 : 4 * w + 60; | 329 size_t rowBytes = tightRB ? 0 : 4 * w + 60; |
330 SkImageInfo info = SkImageInfo::Make(w, h, ct, at); | 330 SkImageInfo info = SkImageInfo::Make(w, h, ct, at); |
331 if (!alloc_row_bytes(bm, info, rowBytes)) { | 331 if (!alloc_row_bytes(bm, info, rowBytes)) { |
332 return false; | 332 return false; |
333 } | 333 } |
334 SkAutoLockPixels alp(*bm); | 334 SkAutoLockPixels alp(*bm); |
335 for (int y = 0; y < h; ++y) { | 335 for (int y = 0; y < h; ++y) { |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
410 for (size_t i = 0; i < SK_ARRAY_COUNT(gCanvasConfigs); ++i) { | 410 for (size_t i = 0; i < SK_ARRAY_COUNT(gCanvasConfigs); ++i) { |
411 int glCtxTypeCnt = 1; | 411 int glCtxTypeCnt = 1; |
412 #if SK_SUPPORT_GPU | 412 #if SK_SUPPORT_GPU |
413 bool isGPUDevice = kGpu_TopLeft_DevType == gCanvasConfigs[i].fDevType || | 413 bool isGPUDevice = kGpu_TopLeft_DevType == gCanvasConfigs[i].fDevType || |
414 kGpu_BottomLeft_DevType == gCanvasConfigs[i].fDevType
; | 414 kGpu_BottomLeft_DevType == gCanvasConfigs[i].fDevType
; |
415 if (isGPUDevice) { | 415 if (isGPUDevice) { |
416 glCtxTypeCnt = GrContextFactory::kGLContextTypeCnt; | 416 glCtxTypeCnt = GrContextFactory::kGLContextTypeCnt; |
417 } | 417 } |
418 #endif | 418 #endif |
419 for (int glCtxType = 0; glCtxType < glCtxTypeCnt; ++glCtxType) { | 419 for (int glCtxType = 0; glCtxType < glCtxTypeCnt; ++glCtxType) { |
420 GrContext* context = NULL; | 420 GrContext* context = nullptr; |
421 #if SK_SUPPORT_GPU | 421 #if SK_SUPPORT_GPU |
422 if (isGPUDevice) { | 422 if (isGPUDevice) { |
423 GrContextFactory::GLContextType type = | 423 GrContextFactory::GLContextType type = |
424 static_cast<GrContextFactory::GLContextType>(glCtxType); | 424 static_cast<GrContextFactory::GLContextType>(glCtxType); |
425 if (!GrContextFactory::IsRenderingGLContext(type)) { | 425 if (!GrContextFactory::IsRenderingGLContext(type)) { |
426 continue; | 426 continue; |
427 } | 427 } |
428 context = factory->get(type); | 428 context = factory->get(type); |
429 if (NULL == context) { | 429 if (nullptr == context) { |
430 continue; | 430 continue; |
431 } | 431 } |
432 } | 432 } |
433 #endif | 433 #endif |
434 | 434 |
435 SkAutoTUnref<SkSurface> surface(create_surface(gCanvasConfigs[i], co
ntext)); | 435 SkAutoTUnref<SkSurface> surface(create_surface(gCanvasConfigs[i], co
ntext)); |
436 SkCanvas& canvas = *surface->getCanvas(); | 436 SkCanvas& canvas = *surface->getCanvas(); |
437 | 437 |
438 static const struct { | 438 static const struct { |
439 SkColorType fColorType; | 439 SkColorType fColorType; |
(...skipping 29 matching lines...) Expand all Loading... |
469 SkIRect writeRect = SkIRect::MakeXYWH(rect.fLeft, rect.f
Top, | 469 SkIRect writeRect = SkIRect::MakeXYWH(rect.fLeft, rect.f
Top, |
470 bmp.width(), bmp.h
eight()); | 470 bmp.width(), bmp.h
eight()); |
471 bool intersects = SkIRect::Intersects(canvasRect, writeR
ect) ; | 471 bool intersects = SkIRect::Intersects(canvasRect, writeR
ect) ; |
472 REPORTER_ASSERT(reporter, intersects == (idBefore != idA
fter)); | 472 REPORTER_ASSERT(reporter, intersects == (idBefore != idA
fter)); |
473 } | 473 } |
474 } | 474 } |
475 } | 475 } |
476 } | 476 } |
477 } | 477 } |
478 } | 478 } |
OLD | NEW |