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

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

Issue 812063002: Change to create device coord coordset (Closed) Base URL: https://skia.googlesource.com/skia.git@vm-off-context
Patch Set: ignoring bleed Created 6 years 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
« no previous file with comments | « src/gpu/GrContext.cpp ('k') | src/gpu/effects/GrConfigConversionEffect.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "SkGpuDevice.h" 8 #include "SkGpuDevice.h"
9 9
10 #include "effects/GrBicubicEffect.h" 10 #include "effects/GrBicubicEffect.h"
(...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 /////////////////////////////////////////////////////////////////////////////// 567 ///////////////////////////////////////////////////////////////////////////////
568 568
569 // helpers for applying mask filters 569 // helpers for applying mask filters
570 namespace { 570 namespace {
571 571
572 // Draw a mask using the supplied paint. Since the coverage/geometry 572 // Draw a mask using the supplied paint. Since the coverage/geometry
573 // is already burnt into the mask this boils down to a rect draw. 573 // is already burnt into the mask this boils down to a rect draw.
574 // Return true if the mask was successfully drawn. 574 // Return true if the mask was successfully drawn.
575 bool draw_mask(GrContext* context, const SkMatrix& viewMatrix, const SkRect& mas kRect, 575 bool draw_mask(GrContext* context, const SkMatrix& viewMatrix, const SkRect& mas kRect,
576 GrPaint* grp, GrTexture* mask) { 576 GrPaint* grp, GrTexture* mask) {
577 if (!grp->localCoordChangeInverse(viewMatrix)) {
578 return false;
579 }
580
581 SkMatrix matrix; 577 SkMatrix matrix;
582 matrix.setTranslate(-maskRect.fLeft, -maskRect.fTop); 578 matrix.setTranslate(-maskRect.fLeft, -maskRect.fTop);
583 matrix.postIDiv(mask->width(), mask->height()); 579 matrix.postIDiv(mask->width(), mask->height());
584 580
585 grp->addCoverageProcessor(GrSimpleTextureEffect::Create(mask, matrix))->unre f(); 581 grp->addCoverageProcessor(GrSimpleTextureEffect::Create(mask, matrix,
586 context->drawRect(*grp, SkMatrix::I(), maskRect); 582 kDevice_GrCoordSet)) ->unref();
583
584 SkMatrix inverse;
585 if (!viewMatrix.invert(&inverse)) {
586 return false;
587 }
588 context->drawNonAARectWithLocalMatrix(*grp, SkMatrix::I(), maskRect, inverse );
587 return true; 589 return true;
588 } 590 }
589 591
590 bool draw_with_mask_filter(GrContext* context, const SkMatrix& viewMatrix, const SkPath& devPath, 592 bool draw_with_mask_filter(GrContext* context, const SkMatrix& viewMatrix, const SkPath& devPath,
591 SkMaskFilter* filter, const SkRegion& clip, 593 SkMaskFilter* filter, const SkRegion& clip,
592 GrPaint* grp, SkPaint::Style style) { 594 GrPaint* grp, SkPaint::Style style) {
593 SkMask srcM, dstM; 595 SkMask srcM, dstM;
594 596
595 if (!SkDraw::DrawToMask(devPath, &clip.getBounds(), filter, &viewMatrix, &sr cM, 597 if (!SkDraw::DrawToMask(devPath, &clip.getBounds(), filter, &viewMatrix, &sr cM,
596 SkMask::kComputeBoundsAndRenderImage_CreateMode, sty le)) { 598 SkMask::kComputeBoundsAndRenderImage_CreateMode, sty le)) {
(...skipping 777 matching lines...) Expand 10 before | Expand all | Expand 10 after
1374 1376
1375 // Construct a GrPaint by setting the bitmap texture as the first effect and then configuring 1377 // Construct a GrPaint by setting the bitmap texture as the first effect and then configuring
1376 // the rest from the SkPaint. 1378 // the rest from the SkPaint.
1377 GrPaint grPaint; 1379 GrPaint grPaint;
1378 grPaint.addColorProcessor(fp); 1380 grPaint.addColorProcessor(fp);
1379 bool alphaOnly = !(kAlpha_8_SkColorType == bitmap.colorType()); 1381 bool alphaOnly = !(kAlpha_8_SkColorType == bitmap.colorType());
1380 GrColor paintColor = (alphaOnly) ? SkColor2GrColorJustAlpha(paint.getColor() ) : 1382 GrColor paintColor = (alphaOnly) ? SkColor2GrColorJustAlpha(paint.getColor() ) :
1381 SkColor2GrColor(paint.getColor()); 1383 SkColor2GrColor(paint.getColor());
1382 SkPaint2GrPaintNoShader(this->context(), paint, paintColor, false, &grPaint) ; 1384 SkPaint2GrPaintNoShader(this->context(), paint, paintColor, false, &grPaint) ;
1383 1385
1384 fContext->drawRectToRect(grPaint, viewMatrix, dstRect, paintRect); 1386 fContext->drawNonAARectToRect(grPaint, viewMatrix, dstRect, paintRect);
1385 } 1387 }
1386 1388
1387 bool SkGpuDevice::filterTexture(GrContext* context, GrTexture* texture, 1389 bool SkGpuDevice::filterTexture(GrContext* context, GrTexture* texture,
1388 const SkImageFilter* filter, 1390 const SkImageFilter* filter,
1389 const SkImageFilter::Context& ctx, 1391 const SkImageFilter::Context& ctx,
1390 SkBitmap* result, SkIPoint* offset) { 1392 SkBitmap* result, SkIPoint* offset) {
1391 SkASSERT(filter); 1393 SkASSERT(filter);
1392 1394
1393 // FIXME: plumb actual surface props such that we don't have to lie about th e flags here 1395 // FIXME: plumb actual surface props such that we don't have to lie about th e flags here
1394 // (https://code.google.com/p/skia/issues/detail?id=3148). 1396 // (https://code.google.com/p/skia/issues/detail?id=3148).
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1445 return; 1447 return;
1446 } 1448 }
1447 } 1449 }
1448 1450
1449 GrPaint grPaint; 1451 GrPaint grPaint;
1450 grPaint.addColorTextureProcessor(texture, SkMatrix::I()); 1452 grPaint.addColorTextureProcessor(texture, SkMatrix::I());
1451 1453
1452 SkPaint2GrPaintNoShader(this->context(), paint, SkColor2GrColorJustAlpha(pai nt.getColor()), 1454 SkPaint2GrPaintNoShader(this->context(), paint, SkColor2GrColorJustAlpha(pai nt.getColor()),
1453 false, &grPaint); 1455 false, &grPaint);
1454 1456
1455 fContext->drawRectToRect(grPaint, 1457 fContext->drawNonAARectToRect(grPaint,
1456 SkMatrix::I(), 1458 SkMatrix::I(),
1457 SkRect::MakeXYWH(SkIntToScalar(left), 1459 SkRect::MakeXYWH(SkIntToScalar(left),
1458 SkIntToScalar(top), 1460 SkIntToScalar(top),
1459 SkIntToScalar(w), 1461 SkIntToScalar(w),
1460 SkIntToScalar(h)), 1462 SkIntToScalar(h)),
1461 SkRect::MakeXYWH(0, 1463 SkRect::MakeXYWH(0,
1462 0, 1464 0,
1463 SK_Scalar1 * w / texture->width(), 1465 SK_Scalar1 * w / texture->wid th(),
1464 SK_Scalar1 * h / texture->height() )); 1466 SK_Scalar1 * h / texture->hei ght()));
1465 } 1467 }
1466 1468
1467 void SkGpuDevice::drawBitmapRect(const SkDraw& origDraw, const SkBitmap& bitmap, 1469 void SkGpuDevice::drawBitmapRect(const SkDraw& origDraw, const SkBitmap& bitmap,
1468 const SkRect* src, const SkRect& dst, 1470 const SkRect* src, const SkRect& dst,
1469 const SkPaint& paint, 1471 const SkPaint& paint,
1470 SkCanvas::DrawBitmapRectFlags flags) { 1472 SkCanvas::DrawBitmapRectFlags flags) {
1471 SkMatrix matrix; 1473 SkMatrix matrix;
1472 SkRect bitmapBounds, tmpSrc; 1474 SkRect bitmapBounds, tmpSrc;
1473 1475
1474 bitmapBounds.set(0, 0, 1476 bitmapBounds.set(0, 0,
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
1567 SkRect dstRect = SkRect::MakeXYWH(SkIntToScalar(x), 1569 SkRect dstRect = SkRect::MakeXYWH(SkIntToScalar(x),
1568 SkIntToScalar(y), 1570 SkIntToScalar(y),
1569 SkIntToScalar(w), 1571 SkIntToScalar(w),
1570 SkIntToScalar(h)); 1572 SkIntToScalar(h));
1571 1573
1572 // The device being drawn may not fill up its texture (e.g. saveLayer uses a pproximate 1574 // The device being drawn may not fill up its texture (e.g. saveLayer uses a pproximate
1573 // scratch texture). 1575 // scratch texture).
1574 SkRect srcRect = SkRect::MakeWH(SK_Scalar1 * w / devTex->width(), 1576 SkRect srcRect = SkRect::MakeWH(SK_Scalar1 * w / devTex->width(),
1575 SK_Scalar1 * h / devTex->height()); 1577 SK_Scalar1 * h / devTex->height());
1576 1578
1577 fContext->drawRectToRect(grPaint, SkMatrix::I(), dstRect, srcRect); 1579 fContext->drawNonAARectToRect(grPaint, SkMatrix::I(), dstRect, srcRect);
1578 } 1580 }
1579 1581
1580 bool SkGpuDevice::canHandleImageFilter(const SkImageFilter* filter) { 1582 bool SkGpuDevice::canHandleImageFilter(const SkImageFilter* filter) {
1581 return filter->canFilterImageGPU(); 1583 return filter->canFilterImageGPU();
1582 } 1584 }
1583 1585
1584 bool SkGpuDevice::filterImage(const SkImageFilter* filter, const SkBitmap& src, 1586 bool SkGpuDevice::filterImage(const SkImageFilter* filter, const SkBitmap& src,
1585 const SkImageFilter::Context& ctx, 1587 const SkImageFilter::Context& ctx,
1586 SkBitmap* result, SkIPoint* offset) { 1588 SkBitmap* result, SkIPoint* offset) {
1587 // want explicitly our impl, so guard against a subclass of us overriding it 1589 // want explicitly our impl, so guard against a subclass of us overriding it
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
1883 #endif 1885 #endif
1884 } 1886 }
1885 1887
1886 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() { 1888 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() {
1887 // We always return a transient cache, so it is freed after each 1889 // We always return a transient cache, so it is freed after each
1888 // filter traversal. 1890 // filter traversal.
1889 return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize); 1891 return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize);
1890 } 1892 }
1891 1893
1892 #endif 1894 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrContext.cpp ('k') | src/gpu/effects/GrConfigConversionEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698