Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(14)

Side by Side Diff: src/gpu/GrAADistanceFieldPathRenderer.cpp

Issue 1148793007: change SkDraw and all Blitters to use pixmap instead of bitmap (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebase Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2014 Google Inc. 3 * Copyright 2014 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #include "GrAADistanceFieldPathRenderer.h" 9 #include "GrAADistanceFieldPathRenderer.h"
10 10
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 drawMatrix.postScale(scale, scale); 347 drawMatrix.postScale(scale, scale);
348 drawMatrix.postTranslate(kAntiAliasPad, kAntiAliasPad); 348 drawMatrix.postTranslate(kAntiAliasPad, kAntiAliasPad);
349 349
350 // setup bitmap backing 350 // setup bitmap backing
351 // Now translate so the bound's UL corner is at the origin 351 // Now translate so the bound's UL corner is at the origin
352 drawMatrix.postTranslate(-devPathBounds.fLeft * SK_Scalar1, 352 drawMatrix.postTranslate(-devPathBounds.fLeft * SK_Scalar1,
353 -devPathBounds.fTop * SK_Scalar1); 353 -devPathBounds.fTop * SK_Scalar1);
354 SkIRect pathBounds = SkIRect::MakeWH(devPathBounds.width(), 354 SkIRect pathBounds = SkIRect::MakeWH(devPathBounds.width(),
355 devPathBounds.height()); 355 devPathBounds.height());
356 356
357 SkBitmap bmp; 357 SkAutoPixmapStorage dst;
jvanverth1 2015/06/08 13:21:10 It's unclear to me why this should be a SkAutoPixm
reed1 2015/06/08 17:00:22 Just me being lazy. Now helper also uses pixmaps
358 const SkImageInfo bmImageInfo = SkImageInfo::MakeA8(pathBounds.fRight, 358 // reed: should these be width/height instead of right/bottom?
jvanverth1 2015/06/08 13:21:10 I think it's safe the way it is, though admittedly
reed1 2015/06/08 17:00:22 Hmmm, I could add asserts, but its starting to fee
359 pathBounds.fBottom); 359 const SkImageInfo bmImageInfo = SkImageInfo::MakeA8(pathBounds.fRight, p athBounds.fBottom);
360 if (!bmp.tryAllocPixels(bmImageInfo)) { 360 if (!dst.tryAlloc(bmImageInfo)) {
jvanverth1 2015/06/08 13:21:10 Change variable name to pmImageInfo?
reed1 2015/06/08 17:00:22 removed local var
361 return false; 361 return false;
362 } 362 }
363 363 sk_bzero(dst.writable_addr(), dst.getSafeSize());
364 sk_bzero(bmp.getPixels(), bmp.getSafeSize());
365 364
366 // rasterize path 365 // rasterize path
367 SkPaint paint; 366 SkPaint paint;
368 if (stroke.isHairlineStyle()) { 367 if (stroke.isHairlineStyle()) {
369 paint.setStyle(SkPaint::kStroke_Style); 368 paint.setStyle(SkPaint::kStroke_Style);
370 paint.setStrokeWidth(SK_Scalar1); 369 paint.setStrokeWidth(SK_Scalar1);
371 } else { 370 } else {
372 if (stroke.isFillStyle()) { 371 if (stroke.isFillStyle()) {
373 paint.setStyle(SkPaint::kFill_Style); 372 paint.setStyle(SkPaint::kFill_Style);
374 } else { 373 } else {
375 paint.setStyle(SkPaint::kStroke_Style); 374 paint.setStyle(SkPaint::kStroke_Style);
376 paint.setStrokeJoin(stroke.getJoin()); 375 paint.setStrokeJoin(stroke.getJoin());
377 paint.setStrokeCap(stroke.getCap()); 376 paint.setStrokeCap(stroke.getCap());
378 paint.setStrokeWidth(stroke.getWidth()); 377 paint.setStrokeWidth(stroke.getWidth());
379 } 378 }
380 } 379 }
381 paint.setAntiAlias(antiAlias); 380 paint.setAntiAlias(antiAlias);
382 381
383 SkDraw draw; 382 SkDraw draw;
384 sk_bzero(&draw, sizeof(draw)); 383 sk_bzero(&draw, sizeof(draw));
385 384
386 SkRasterClip rasterClip; 385 SkRasterClip rasterClip;
387 rasterClip.setRect(pathBounds); 386 rasterClip.setRect(pathBounds);
388 draw.fRC = &rasterClip; 387 draw.fRC = &rasterClip;
389 draw.fClip = &rasterClip.bwRgn(); 388 draw.fClip = &rasterClip.bwRgn();
390 draw.fMatrix = &drawMatrix; 389 draw.fMatrix = &drawMatrix;
391 draw.fBitmap = &bmp; 390 draw.fDst = dst;
392 391
393 draw.drawPathCoverage(path, paint); 392 draw.drawPathCoverage(path, paint);
394 393
395 // generate signed distance field 394 // generate signed distance field
396 devPathBounds.outset(SK_DistanceFieldPad, SK_DistanceFieldPad); 395 devPathBounds.outset(SK_DistanceFieldPad, SK_DistanceFieldPad);
397 int width = devPathBounds.width(); 396 int width = devPathBounds.width();
398 int height = devPathBounds.height(); 397 int height = devPathBounds.height();
399 // TODO We should really generate this directly into the plot somehow 398 // TODO We should really generate this directly into the plot somehow
400 SkAutoSMalloc<1024> dfStorage(width * height * sizeof(unsigned char)); 399 SkAutoSMalloc<1024> dfStorage(width * height * sizeof(unsigned char));
401 400
402 // Generate signed distance field 401 // Generate signed distance field
403 { 402 SkGenerateDistanceFieldFromA8Image((unsigned char*)dfStorage.get(),
404 SkAutoLockPixels alp(bmp); 403 (const unsigned char*)dst.addr(),
405 404 dst.width(), dst.height(), dst.rowByt es());
406 SkGenerateDistanceFieldFromA8Image((unsigned char*)dfStorage.get(),
407 (const unsigned char*)bmp.getPixe ls(),
408 bmp.width(), bmp.height(), bmp.ro wBytes());
409 }
410 405
411 // add to atlas 406 // add to atlas
412 SkIPoint16 atlasLocation; 407 SkIPoint16 atlasLocation;
413 GrBatchAtlas::AtlasID id; 408 GrBatchAtlas::AtlasID id;
414 bool success = atlas->addToAtlas(&id, batchTarget, width, height, dfStor age.get(), 409 bool success = atlas->addToAtlas(&id, batchTarget, width, height, dfStor age.get(),
415 &atlasLocation); 410 &atlasLocation);
416 if (!success) { 411 if (!success) {
417 this->flush(batchTarget, flushInfo); 412 this->flush(batchTarget, flushInfo);
418 batchTarget->initDraw(dfProcessor, pipeline); 413 batchTarget->initDraw(dfProcessor, pipeline);
419 414
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
658 geometry.fPath = GrTest::TestPath(random); 653 geometry.fPath = GrTest::TestPath(random);
659 geometry.fAntiAlias = random->nextBool(); 654 geometry.fAntiAlias = random->nextBool();
660 655
661 return AADistanceFieldPathBatch::Create(geometry, color, viewMatrix, 656 return AADistanceFieldPathBatch::Create(geometry, color, viewMatrix,
662 gTestStruct.fAtlas, 657 gTestStruct.fAtlas,
663 &gTestStruct.fPathCache, 658 &gTestStruct.fPathCache,
664 &gTestStruct.fPathList); 659 &gTestStruct.fPathList);
665 } 660 }
666 661
667 #endif 662 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698