| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 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 "GrContext.h" | 9 #include "GrContext.h" |
| 10 | 10 |
| (...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 573 } | 573 } |
| 574 | 574 |
| 575 | 575 |
| 576 //////////////////////////////////////////////////////////////////////////////// | 576 //////////////////////////////////////////////////////////////////////////////// |
| 577 | 577 |
| 578 void GrContext::clear(const SkIRect* rect, | 578 void GrContext::clear(const SkIRect* rect, |
| 579 const GrColor color, | 579 const GrColor color, |
| 580 bool canIgnoreRect, | 580 bool canIgnoreRect, |
| 581 GrRenderTarget* renderTarget) { | 581 GrRenderTarget* renderTarget) { |
| 582 ASSERT_OWNED_RESOURCE(renderTarget); | 582 ASSERT_OWNED_RESOURCE(renderTarget); |
| 583 SkASSERT(renderTarget); |
| 584 |
| 583 AutoRestoreEffects are; | 585 AutoRestoreEffects are; |
| 584 AutoCheckFlush acf(this); | 586 AutoCheckFlush acf(this); |
| 585 GR_CREATE_TRACE_MARKER_CONTEXT("GrContext::clear", this); | 587 GR_CREATE_TRACE_MARKER_CONTEXT("GrContext::clear", this); |
| 586 GrDrawTarget* target = this->prepareToDraw(NULL, &are, &acf); | 588 GrDrawTarget* target = this->prepareToDraw(NULL, &are, &acf); |
| 587 if (NULL == target) { | 589 if (NULL == target) { |
| 588 return; | 590 return; |
| 589 } | 591 } |
| 590 target->clear(rect, color, canIgnoreRect, renderTarget); | 592 target->clear(rect, color, canIgnoreRect, renderTarget); |
| 591 } | 593 } |
| 592 | 594 |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 746 // Does the rect bound the RT? | 748 // Does the rect bound the RT? |
| 747 SkPoint srcSpaceRTQuad[4]; | 749 SkPoint srcSpaceRTQuad[4]; |
| 748 invM.mapRectToQuad(srcSpaceRTQuad, rtRect); | 750 invM.mapRectToQuad(srcSpaceRTQuad, rtRect); |
| 749 if (rect_contains_inclusive(rect, srcSpaceRTQuad[0]) && | 751 if (rect_contains_inclusive(rect, srcSpaceRTQuad[0]) && |
| 750 rect_contains_inclusive(rect, srcSpaceRTQuad[1]) && | 752 rect_contains_inclusive(rect, srcSpaceRTQuad[1]) && |
| 751 rect_contains_inclusive(rect, srcSpaceRTQuad[2]) && | 753 rect_contains_inclusive(rect, srcSpaceRTQuad[2]) && |
| 752 rect_contains_inclusive(rect, srcSpaceRTQuad[3])) { | 754 rect_contains_inclusive(rect, srcSpaceRTQuad[3])) { |
| 753 // Will it blend? | 755 // Will it blend? |
| 754 GrColor clearColor; | 756 GrColor clearColor; |
| 755 if (paint.isOpaqueAndConstantColor(&clearColor)) { | 757 if (paint.isOpaqueAndConstantColor(&clearColor)) { |
| 756 target->clear(NULL, clearColor, true); | 758 target->clear(NULL, clearColor, true, fRenderTarget); |
| 757 return; | 759 return; |
| 758 } | 760 } |
| 759 } | 761 } |
| 760 } | 762 } |
| 761 } | 763 } |
| 762 | 764 |
| 763 SkRect devBoundRect; | 765 SkRect devBoundRect; |
| 764 bool needAA = paint.isAntiAlias() && | 766 bool needAA = paint.isAntiAlias() && |
| 765 !target->getDrawState().getRenderTarget()->isMultisampled(); | 767 !target->getDrawState().getRenderTarget()->isMultisampled(); |
| 766 bool doAA = needAA && apply_aa_to_rect(target, rect, width, matrix, &devBoun
dRect); | 768 bool doAA = needAA && apply_aa_to_rect(target, rect, width, matrix, &devBoun
dRect); |
| (...skipping 626 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1393 SkASSERT(kBGRA_8888_SkColorType == ct); | 1395 SkASSERT(kBGRA_8888_SkColorType == ct); |
| 1394 return kRGBA_8888_SkColorType; | 1396 return kRGBA_8888_SkColorType; |
| 1395 } | 1397 } |
| 1396 } | 1398 } |
| 1397 | 1399 |
| 1398 bool GrContext::readRenderTargetPixels(GrRenderTarget* target, | 1400 bool GrContext::readRenderTargetPixels(GrRenderTarget* target, |
| 1399 int left, int top, int width, int height, | 1401 int left, int top, int width, int height, |
| 1400 GrPixelConfig dstConfig, void* buffer, si
ze_t rowBytes, | 1402 GrPixelConfig dstConfig, void* buffer, si
ze_t rowBytes, |
| 1401 uint32_t flags) { | 1403 uint32_t flags) { |
| 1402 ASSERT_OWNED_RESOURCE(target); | 1404 ASSERT_OWNED_RESOURCE(target); |
| 1403 | 1405 SkASSERT(target); |
| 1404 if (NULL == target) { | |
| 1405 target = fRenderTarget.get(); | |
| 1406 if (NULL == target) { | |
| 1407 return false; | |
| 1408 } | |
| 1409 } | |
| 1410 | 1406 |
| 1411 if (!(kDontFlush_PixelOpsFlag & flags) && target->surfacePriv().hasPendingWr
ite()) { | 1407 if (!(kDontFlush_PixelOpsFlag & flags) && target->surfacePriv().hasPendingWr
ite()) { |
| 1412 this->flush(); | 1408 this->flush(); |
| 1413 } | 1409 } |
| 1414 | 1410 |
| 1415 // Determine which conversions have to be applied: flipY, swapRAnd, and/or u
npremul. | 1411 // Determine which conversions have to be applied: flipY, swapRAnd, and/or u
npremul. |
| 1416 | 1412 |
| 1417 // If fGpu->readPixels would incur a y-flip cost then we will read the pixel
s upside down. We'll | 1413 // If fGpu->readPixels would incur a y-flip cost then we will read the pixel
s upside down. We'll |
| 1418 // either do the flipY by drawing into a scratch with a matrix or on the cpu
after the read. | 1414 // either do the flipY by drawing into a scratch with a matrix or on the cpu
after the read. |
| 1419 bool flipY = fGpu->readPixelsWillPayForYFlip(target, left, top, | 1415 bool flipY = fGpu->readPixelsWillPayForYFlip(target, left, top, |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1534 srcPI.fRowBytes = rowBytes; | 1530 srcPI.fRowBytes = rowBytes; |
| 1535 | 1531 |
| 1536 return srcPI.convertPixelsTo(&dstPI, width, height); | 1532 return srcPI.convertPixelsTo(&dstPI, width, height); |
| 1537 } | 1533 } |
| 1538 return true; | 1534 return true; |
| 1539 } | 1535 } |
| 1540 | 1536 |
| 1541 void GrContext::resolveRenderTarget(GrRenderTarget* target) { | 1537 void GrContext::resolveRenderTarget(GrRenderTarget* target) { |
| 1542 SkASSERT(target); | 1538 SkASSERT(target); |
| 1543 ASSERT_OWNED_RESOURCE(target); | 1539 ASSERT_OWNED_RESOURCE(target); |
| 1544 // In the future we may track whether there are any pending draws to this | 1540 if (!target->needsResolve()) { |
| 1545 // target. We don't today so we always perform a flush. We don't promise | 1541 return; |
| 1546 // this to our clients, though. | 1542 } |
| 1547 this->flush(); | 1543 if (target->surfacePriv().hasPendingIO()) { |
| 1544 this->flush(); |
| 1545 } |
| 1548 if (fGpu) { | 1546 if (fGpu) { |
| 1549 fGpu->resolveRenderTarget(target); | 1547 fGpu->resolveRenderTarget(target); |
| 1550 } | 1548 } |
| 1551 } | 1549 } |
| 1552 | 1550 |
| 1553 void GrContext::discardRenderTarget(GrRenderTarget* renderTarget) { | 1551 void GrContext::discardRenderTarget(GrRenderTarget* renderTarget) { |
| 1554 SkASSERT(renderTarget); | 1552 SkASSERT(renderTarget); |
| 1555 ASSERT_OWNED_RESOURCE(renderTarget); | 1553 ASSERT_OWNED_RESOURCE(renderTarget); |
| 1556 AutoRestoreEffects are; | 1554 AutoRestoreEffects are; |
| 1557 AutoCheckFlush acf(this); | 1555 AutoCheckFlush acf(this); |
| (...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1786 fResourceCache->printStats(); | 1784 fResourceCache->printStats(); |
| 1787 } | 1785 } |
| 1788 #endif | 1786 #endif |
| 1789 | 1787 |
| 1790 #if GR_GPU_STATS | 1788 #if GR_GPU_STATS |
| 1791 const GrContext::GPUStats* GrContext::gpuStats() const { | 1789 const GrContext::GPUStats* GrContext::gpuStats() const { |
| 1792 return fGpu->gpuStats(); | 1790 return fGpu->gpuStats(); |
| 1793 } | 1791 } |
| 1794 #endif | 1792 #endif |
| 1795 | 1793 |
| OLD | NEW |