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 "SkGpuDevice.h" | 8 #include "SkGpuDevice.h" |
9 | 9 |
10 #include "GrBlurUtils.h" | 10 #include "GrBlurUtils.h" |
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
400 if (!SkPaintToGrPaint(this->context(), fDrawContext.get(), paint, *draw.fMat
rix, &grPaint)) { | 400 if (!SkPaintToGrPaint(this->context(), fDrawContext.get(), paint, *draw.fMat
rix, &grPaint)) { |
401 return; | 401 return; |
402 } | 402 } |
403 | 403 |
404 GrStyle style(paint); | 404 GrStyle style(paint); |
405 fDrawContext->drawRect(fClip, grPaint, *draw.fMatrix, rect, &style); | 405 fDrawContext->drawRect(fClip, grPaint, *draw.fMatrix, rect, &style); |
406 } | 406 } |
407 | 407 |
408 /////////////////////////////////////////////////////////////////////////////// | 408 /////////////////////////////////////////////////////////////////////////////// |
409 | 409 |
410 void SkGpuDevice::drawRRect(const SkDraw& draw, const SkRRect& rect, | 410 void SkGpuDevice::drawRRect(const SkDraw& draw, const SkRRect& rrect, |
411 const SkPaint& paint) { | 411 const SkPaint& paint) { |
412 ASSERT_SINGLE_OWNER | 412 ASSERT_SINGLE_OWNER |
413 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawRRect", fContext); | 413 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawRRect", fContext); |
414 CHECK_SHOULD_DRAW(draw); | 414 CHECK_SHOULD_DRAW(draw); |
415 | 415 |
416 GrPaint grPaint; | 416 GrPaint grPaint; |
417 if (!SkPaintToGrPaint(this->context(), fDrawContext.get(), paint, *draw.fMat
rix, &grPaint)) { | 417 if (!SkPaintToGrPaint(this->context(), fDrawContext.get(), paint, *draw.fMat
rix, &grPaint)) { |
418 return; | 418 return; |
419 } | 419 } |
420 | 420 |
421 GrStyle style(paint); | 421 GrStyle style(paint); |
422 if (paint.getMaskFilter()) { | 422 if (paint.getMaskFilter()) { |
423 // try to hit the fast path for drawing filtered round rects | 423 // try to hit the fast path for drawing filtered round rects |
424 | 424 |
425 SkRRect devRRect; | 425 SkRRect devRRect; |
426 if (rect.transform(*draw.fMatrix, &devRRect)) { | 426 if (rrect.transform(*draw.fMatrix, &devRRect)) { |
427 if (devRRect.allCornersCircular()) { | 427 if (devRRect.allCornersCircular()) { |
428 SkRect maskRect; | 428 SkRect maskRect; |
429 if (paint.getMaskFilter()->canFilterMaskGPU(devRRect, | 429 if (paint.getMaskFilter()->canFilterMaskGPU(devRRect, |
430 draw.fRC->getBounds(
), | 430 draw.fRC->getBounds(
), |
431 *draw.fMatrix, | 431 *draw.fMatrix, |
432 &maskRect)) { | 432 &maskRect)) { |
433 SkIRect finalIRect; | 433 SkIRect finalIRect; |
434 maskRect.roundOut(&finalIRect); | 434 maskRect.roundOut(&finalIRect); |
435 if (draw.fRC->quickReject(finalIRect)) { | 435 if (draw.fRC->quickReject(finalIRect)) { |
436 // clipped out | 436 // clipped out |
(...skipping 13 matching lines...) Expand all Loading... |
450 } | 450 } |
451 } | 451 } |
452 } | 452 } |
453 | 453 |
454 if (paint.getMaskFilter() || style.pathEffect()) { | 454 if (paint.getMaskFilter() || style.pathEffect()) { |
455 // The only mask filter the native rrect drawing code could've handle wa
s taken | 455 // The only mask filter the native rrect drawing code could've handle wa
s taken |
456 // care of above. | 456 // care of above. |
457 // A path effect will presumably transform this rrect into something els
e. | 457 // A path effect will presumably transform this rrect into something els
e. |
458 SkPath path; | 458 SkPath path; |
459 path.setIsVolatile(true); | 459 path.setIsVolatile(true); |
460 path.addRRect(rect); | 460 path.addRRect(rrect); |
461 GrBlurUtils::drawPathWithMaskFilter(fContext, fDrawContext.get(), | 461 GrBlurUtils::drawPathWithMaskFilter(fContext, fDrawContext.get(), |
462 fClip, path, paint, | 462 fClip, path, paint, |
463 *draw.fMatrix, nullptr, | 463 *draw.fMatrix, nullptr, |
464 draw.fRC->getBounds(), true); | 464 draw.fRC->getBounds(), true); |
465 return; | 465 return; |
466 } | 466 } |
467 | 467 |
468 SkASSERT(!style.pathEffect()); | 468 SkASSERT(!style.pathEffect()); |
469 | 469 |
470 fDrawContext->drawRRect(fClip, grPaint, *draw.fMatrix, rect, style); | 470 fDrawContext->drawRRect(fClip, grPaint, *draw.fMatrix, rrect, style); |
471 } | 471 } |
472 | 472 |
473 | 473 |
474 void SkGpuDevice::drawDRRect(const SkDraw& draw, const SkRRect& outer, | 474 void SkGpuDevice::drawDRRect(const SkDraw& draw, const SkRRect& outer, |
475 const SkRRect& inner, const SkPaint& paint) { | 475 const SkRRect& inner, const SkPaint& paint) { |
476 ASSERT_SINGLE_OWNER | 476 ASSERT_SINGLE_OWNER |
477 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawDRRect", fContext); | 477 GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice", "drawDRRect", fContext); |
478 CHECK_SHOULD_DRAW(draw); | 478 CHECK_SHOULD_DRAW(draw); |
479 | 479 |
480 if (outer.isEmpty()) { | 480 if (outer.isEmpty()) { |
(...skipping 1272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1753 } | 1753 } |
1754 | 1754 |
1755 SkImageFilterCache* SkGpuDevice::getImageFilterCache() { | 1755 SkImageFilterCache* SkGpuDevice::getImageFilterCache() { |
1756 ASSERT_SINGLE_OWNER | 1756 ASSERT_SINGLE_OWNER |
1757 // We always return a transient cache, so it is freed after each | 1757 // We always return a transient cache, so it is freed after each |
1758 // filter traversal. | 1758 // filter traversal. |
1759 return SkImageFilterCache::Create(kDefaultImageFilterCacheSize); | 1759 return SkImageFilterCache::Create(kDefaultImageFilterCacheSize); |
1760 } | 1760 } |
1761 | 1761 |
1762 #endif | 1762 #endif |
OLD | NEW |