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

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

Issue 15780002: Replace GrDrawState::AutoDeviceCoordDraw with GrDrawState::AutoViewMatrixRestore::setIdentity(). s (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: update based on comments Created 7 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 | Annotate | Revision Log
« no previous file with comments | « src/gpu/GrClipMaskManager.cpp ('k') | src/gpu/GrDefaultPathRenderer.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 /* 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 9
10 #include "GrContext.h" 10 #include "GrContext.h"
(...skipping 759 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 770
771 GrRect devRect; 771 GrRect devRect;
772 SkMatrix combinedMatrix; 772 SkMatrix combinedMatrix;
773 bool useVertexCoverage; 773 bool useVertexCoverage;
774 bool needAA = paint.isAntiAlias() && 774 bool needAA = paint.isAntiAlias() &&
775 !target->getDrawState().getRenderTarget()->isMultisampled(); 775 !target->getDrawState().getRenderTarget()->isMultisampled();
776 bool doAA = needAA && apply_aa_to_rect(target, rect, width, matrix, 776 bool doAA = needAA && apply_aa_to_rect(target, rect, width, matrix,
777 &combinedMatrix, &devRect, 777 &combinedMatrix, &devRect,
778 &useVertexCoverage); 778 &useVertexCoverage);
779 if (doAA) { 779 if (doAA) {
780 GrDrawState::AutoDeviceCoordDraw adcd(target->drawState()); 780 GrDrawState::AutoViewMatrixRestore avmr;
781 if (!adcd.succeeded()) { 781 if (!avmr.setIdentity(target->drawState())) {
782 return; 782 return;
783 } 783 }
784 if (width >= 0) { 784 if (width >= 0) {
785 fAARectRenderer->strokeAARect(this->getGpu(), target, 785 fAARectRenderer->strokeAARect(this->getGpu(), target,
786 rect, combinedMatrix, devRect, 786 rect, combinedMatrix, devRect,
787 width, useVertexCoverage); 787 width, useVertexCoverage);
788 } else { 788 } else {
789 // filled AA rect 789 // filled AA rect
790 fAARectRenderer->fillAARect(this->getGpu(), target, 790 fAARectRenderer->fillAARect(this->getGpu(), target,
791 rect, combinedMatrix, devRect, 791 rect, combinedMatrix, devRect,
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 target->drawSimpleRect(rect, matrix); 839 target->drawSimpleRect(rect, matrix);
840 } 840 }
841 } 841 }
842 842
843 void GrContext::drawRectToRect(const GrPaint& paint, 843 void GrContext::drawRectToRect(const GrPaint& paint,
844 const GrRect& dstRect, 844 const GrRect& dstRect,
845 const GrRect& localRect, 845 const GrRect& localRect,
846 const SkMatrix* dstMatrix, 846 const SkMatrix* dstMatrix,
847 const SkMatrix* localMatrix) { 847 const SkMatrix* localMatrix) {
848 SK_TRACE_EVENT0("GrContext::drawRectToRect"); 848 SK_TRACE_EVENT0("GrContext::drawRectToRect");
849
850 GrDrawTarget* target = this->prepareToDraw(&paint, BUFFERED_DRAW); 849 GrDrawTarget* target = this->prepareToDraw(&paint, BUFFERED_DRAW);
851 GrDrawState::AutoStageDisable atr(fDrawState); 850 GrDrawState::AutoStageDisable atr(fDrawState);
852 851
853 target->drawRect(dstRect, dstMatrix, &localRect, localMatrix); 852 target->drawRect(dstRect, dstMatrix, &localRect, localMatrix);
854 } 853 }
855 854
856 namespace { 855 namespace {
857 856
858 extern const GrVertexAttrib gPosUVColorAttribs[] = { 857 extern const GrVertexAttrib gPosUVColorAttribs[] = {
859 {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding }, 858 {kVec2f_GrVertexAttribType, 0, kPosition_GrVertexAttribBinding },
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
1042 } 1041 }
1043 1042
1044 // Note that internalDrawPath may sw-rasterize the path into a scratch textu re. 1043 // Note that internalDrawPath may sw-rasterize the path into a scratch textu re.
1045 // Scratch textures can be recycled after they are returned to the texture 1044 // Scratch textures can be recycled after they are returned to the texture
1046 // cache. This presents a potential hazard for buffered drawing. However, 1045 // cache. This presents a potential hazard for buffered drawing. However,
1047 // the writePixels that uploads to the scratch will perform a flush so we're 1046 // the writePixels that uploads to the scratch will perform a flush so we're
1048 // OK. 1047 // OK.
1049 GrDrawTarget* target = this->prepareToDraw(&paint, BUFFERED_DRAW); 1048 GrDrawTarget* target = this->prepareToDraw(&paint, BUFFERED_DRAW);
1050 GrDrawState::AutoStageDisable atr(fDrawState); 1049 GrDrawState::AutoStageDisable atr(fDrawState);
1051 1050
1052 bool useAA = paint.isAntiAlias() && !this->getRenderTarget()->isMultisampled (); 1051 bool useAA = paint.isAntiAlias() && !target->getDrawState().getRenderTarget( )->isMultisampled();
1053 if (useAA && stroke.getWidth() < 0 && !path.isConvex()) { 1052 if (useAA && stroke.getWidth() < 0 && !path.isConvex()) {
1054 // Concave AA paths are expensive - try to avoid them for special cases 1053 // Concave AA paths are expensive - try to avoid them for special cases
1055 bool useVertexCoverage; 1054 bool useVertexCoverage;
1056 SkRect rects[2]; 1055 SkRect rects[2];
1057 1056
1058 if (is_nested_rects(target, path, stroke, rects, &useVertexCoverage)) { 1057 if (is_nested_rects(target, path, stroke, rects, &useVertexCoverage)) {
1059 GrDrawState::AutoDeviceCoordDraw adcd(target->drawState()); 1058 SkMatrix origViewMatrix = target->getDrawState().getViewMatrix();
1060 if (!adcd.succeeded()) { 1059 GrDrawState::AutoViewMatrixRestore avmr;
1060 if (!avmr.setIdentity(target->drawState())) {
1061 return; 1061 return;
1062 } 1062 }
1063 1063
1064 fAARectRenderer->fillAANestedRects(this->getGpu(), target, 1064 fAARectRenderer->fillAANestedRects(this->getGpu(), target,
1065 rects, 1065 rects,
1066 adcd.getOriginalMatrix(), 1066 origViewMatrix,
1067 useVertexCoverage); 1067 useVertexCoverage);
1068 return; 1068 return;
1069 } 1069 }
1070 } 1070 }
1071 1071
1072 SkRect ovalRect; 1072 SkRect ovalRect;
1073 bool isOval = path.isOval(&ovalRect); 1073 bool isOval = path.isOval(&ovalRect);
1074 1074
1075 if (!isOval || path.isInverseFillType() 1075 if (!isOval || path.isInverseFillType()
1076 || !fOvalRenderer->drawOval(target, this, useAA, ovalRect, stroke)) { 1076 || !fOvalRenderer->drawOval(target, this, useAA, ovalRect, stroke)) {
(...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after
1527 if (!this->writeTexturePixels(texture, 1527 if (!this->writeTexturePixels(texture,
1528 0, 0, width, height, 1528 0, 0, width, height,
1529 writeConfig, buffer, rowBytes, 1529 writeConfig, buffer, rowBytes,
1530 flags & ~kUnpremul_PixelOpsFlag)) { 1530 flags & ~kUnpremul_PixelOpsFlag)) {
1531 return false; 1531 return false;
1532 } 1532 }
1533 1533
1534 // writeRenderTargetPixels can be called in the midst of drawing another 1534 // writeRenderTargetPixels can be called in the midst of drawing another
1535 // object (e.g., when uploading a SW path rendering to the gpu while 1535 // object (e.g., when uploading a SW path rendering to the gpu while
1536 // drawing a rect) so preserve the current geometry. 1536 // drawing a rect) so preserve the current geometry.
1537 GrDrawTarget::AutoGeometryAndStatePush agasp(fGpu, GrDrawTarget::kReset_ASRI nit); 1537 SkMatrix matrix;
1538 matrix.setTranslate(SkIntToScalar(left), SkIntToScalar(top));
1539 GrDrawTarget::AutoGeometryAndStatePush agasp(fGpu, GrDrawTarget::kReset_ASRI nit, &matrix);
1538 GrDrawState* drawState = fGpu->drawState(); 1540 GrDrawState* drawState = fGpu->drawState();
1539 GrAssert(effect); 1541 GrAssert(effect);
1540 drawState->setEffect(0, effect); 1542 drawState->setEffect(0, effect);
1541 1543
1542 SkMatrix matrix;
1543 matrix.setTranslate(SkIntToScalar(left), SkIntToScalar(top));
1544 drawState->setViewMatrix(matrix);
1545 drawState->setRenderTarget(target); 1544 drawState->setRenderTarget(target);
1546 1545
1547 fGpu->drawSimpleRect(GrRect::MakeWH(SkIntToScalar(width), SkIntToScalar(heig ht)), NULL); 1546 fGpu->drawSimpleRect(GrRect::MakeWH(SkIntToScalar(width), SkIntToScalar(heig ht)), NULL);
1548 return true; 1547 return true;
1549 } 1548 }
1550 //////////////////////////////////////////////////////////////////////////////// 1549 ////////////////////////////////////////////////////////////////////////////////
1551 1550
1552 GrDrawTarget* GrContext::prepareToDraw(const GrPaint* paint, BufferedDraw buffer ed) { 1551 GrDrawTarget* GrContext::prepareToDraw(const GrPaint* paint, BufferedDraw buffer ed) {
1553 if (kNo_BufferedDraw == buffered && kYes_BufferedDraw == fLastDrawWasBuffere d) { 1552 if (kNo_BufferedDraw == buffered && kYes_BufferedDraw == fLastDrawWasBuffere d) {
1554 this->flushDrawBuffer(); 1553 this->flushDrawBuffer();
1555 fLastDrawWasBuffered = kNo_BufferedDraw; 1554 fLastDrawWasBuffered = kNo_BufferedDraw;
1556 } 1555 }
1557 ASSERT_OWNED_RESOURCE(fRenderTarget.get()); 1556 ASSERT_OWNED_RESOURCE(fRenderTarget.get());
1558 if (NULL != paint) { 1557 if (NULL != paint) {
1559 GrAssert(fDrawState->stagesDisabled()); 1558 GrAssert(fDrawState->stagesDisabled());
1560 fDrawState->setFromPaint(*paint, fViewMatrix, fRenderTarget.get()); 1559 fDrawState->setFromPaint(*paint, fViewMatrix, fRenderTarget.get());
1561 #if GR_DEBUG_PARTIAL_COVERAGE_CHECK 1560 #if GR_DEBUG_PARTIAL_COVERAGE_CHECK
1562 if ((paint->hasMask() || 0xff != paint->fCoverage) && 1561 if ((paint->hasMask() || 0xff != paint->fCoverage) &&
1563 !fGpu->canApplyCoverage()) { 1562 !fGpu->canApplyCoverage()) {
1564 GrPrintf("Partial pixel coverage will be incorrectly blended.\n"); 1563 GrPrintf("Partial pixel coverage will be incorrectly blended.\n");
1565 } 1564 }
1566 #endif 1565 #endif
1567 } else { 1566 } else {
1568 fDrawState->reset(); 1567 fDrawState->reset(fViewMatrix);
1569 *fDrawState->viewMatrix() = fViewMatrix;
1570 fDrawState->setRenderTarget(fRenderTarget.get()); 1568 fDrawState->setRenderTarget(fRenderTarget.get());
1571 } 1569 }
1572 GrDrawTarget* target; 1570 GrDrawTarget* target;
1573 if (kYes_BufferedDraw == buffered) { 1571 if (kYes_BufferedDraw == buffered) {
1574 fLastDrawWasBuffered = kYes_BufferedDraw; 1572 fLastDrawWasBuffered = kYes_BufferedDraw;
1575 target = fDrawBuffer; 1573 target = fDrawBuffer;
1576 } else { 1574 } else {
1577 GrAssert(kNo_BufferedDraw == buffered); 1575 GrAssert(kNo_BufferedDraw == buffered);
1578 fLastDrawWasBuffered = kNo_BufferedDraw; 1576 fLastDrawWasBuffered = kNo_BufferedDraw;
1579 target = fGpu; 1577 target = fGpu;
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
1837 return srcTexture; 1835 return srcTexture;
1838 } 1836 }
1839 } 1837 }
1840 1838
1841 /////////////////////////////////////////////////////////////////////////////// 1839 ///////////////////////////////////////////////////////////////////////////////
1842 #if GR_CACHE_STATS 1840 #if GR_CACHE_STATS
1843 void GrContext::printCacheStats() const { 1841 void GrContext::printCacheStats() const {
1844 fTextureCache->printStats(); 1842 fTextureCache->printStats();
1845 } 1843 }
1846 #endif 1844 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrClipMaskManager.cpp ('k') | src/gpu/GrDefaultPathRenderer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698