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

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

Issue 938383004: Dynamically create stencil buffer when needed. (Closed) Base URL: https://skia.googlesource.com/skia.git@bigstencil
Patch Set: Actually save file before uploading Created 5 years, 10 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
« no previous file with comments | « src/effects/SkXfermodeImageFilter.cpp ('k') | src/gpu/GrContext.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 2012 Google Inc. 2 * Copyright 2012 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 "GrClipMaskManager.h" 8 #include "GrClipMaskManager.h"
9 #include "GrAAConvexPathRenderer.h" 9 #include "GrAAConvexPathRenderer.h"
10 #include "GrAAHairLinePathRenderer.h" 10 #include "GrAAHairLinePathRenderer.h"
11 #include "GrAARectRenderer.h" 11 #include "GrAARectRenderer.h"
12 #include "GrDrawTargetCaps.h" 12 #include "GrDrawTargetCaps.h"
13 #include "GrPaint.h" 13 #include "GrPaint.h"
14 #include "GrPathRenderer.h" 14 #include "GrPathRenderer.h"
15 #include "GrRenderTarget.h" 15 #include "GrRenderTarget.h"
16 #include "GrRenderTargetPriv.h"
16 #include "GrStencilBuffer.h" 17 #include "GrStencilBuffer.h"
17 #include "GrSWMaskHelper.h" 18 #include "GrSWMaskHelper.h"
18 #include "SkRasterClip.h" 19 #include "SkRasterClip.h"
19 #include "SkStrokeRec.h" 20 #include "SkStrokeRec.h"
20 #include "SkTLazy.h" 21 #include "SkTLazy.h"
21 #include "effects/GrConvexPolyEffect.h" 22 #include "effects/GrConvexPolyEffect.h"
22 #include "effects/GrPorterDuffXferProcessor.h" 23 #include "effects/GrPorterDuffXferProcessor.h"
23 #include "effects/GrRRectEffect.h" 24 #include "effects/GrRRectEffect.h"
24 #include "effects/GrTextureDomain.h" 25 #include "effects/GrTextureDomain.h"
25 26
(...skipping 642 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 // (as opposed to canvas) coordinates 669 // (as opposed to canvas) coordinates
669 bool GrClipMaskManager::createStencilClipMask(GrRenderTarget* rt, 670 bool GrClipMaskManager::createStencilClipMask(GrRenderTarget* rt,
670 int32_t elementsGenID, 671 int32_t elementsGenID,
671 GrReducedClip::InitialState initia lState, 672 GrReducedClip::InitialState initia lState,
672 const GrReducedClip::ElementList& elements, 673 const GrReducedClip::ElementList& elements,
673 const SkIRect& clipSpaceIBounds, 674 const SkIRect& clipSpaceIBounds,
674 const SkIPoint& clipSpaceToStencil Offset) { 675 const SkIPoint& clipSpaceToStencil Offset) {
675 SkASSERT(kNone_ClipMaskType == fCurrClipMaskType); 676 SkASSERT(kNone_ClipMaskType == fCurrClipMaskType);
676 SkASSERT(rt); 677 SkASSERT(rt);
677 678
678 // TODO: dynamically attach a SB when needed. 679 GrStencilBuffer* stencilBuffer = rt->renderTargetPriv().attachStencilBuffer( );
679 GrStencilBuffer* stencilBuffer = rt->getStencilBuffer();
680 if (NULL == stencilBuffer) { 680 if (NULL == stencilBuffer) {
681 return false; 681 return false;
682 } 682 }
683 683
684 if (stencilBuffer->mustRenderClip(elementsGenID, clipSpaceIBounds, clipSpace ToStencilOffset)) { 684 if (stencilBuffer->mustRenderClip(elementsGenID, clipSpaceIBounds, clipSpace ToStencilOffset)) {
685 stencilBuffer->setLastClip(elementsGenID, clipSpaceIBounds, clipSpaceToS tencilOffset); 685 stencilBuffer->setLastClip(elementsGenID, clipSpaceIBounds, clipSpaceToS tencilOffset);
686 // Set the matrix so that rendered clip elements are transformed from cl ip to stencil space. 686 // Set the matrix so that rendered clip elements are transformed from cl ip to stencil space.
687 SkVector translate = { 687 SkVector translate = {
688 SkIntToScalar(clipSpaceToStencilOffset.fX), 688 SkIntToScalar(clipSpaceToStencilOffset.fX),
689 SkIntToScalar(clipSpaceToStencilOffset.fY) 689 SkIntToScalar(clipSpaceToStencilOffset.fY)
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
898 if (pipelineBuilder->getStencil().isDisabled()) { 898 if (pipelineBuilder->getStencil().isDisabled()) {
899 if (GrClipMaskManager::kRespectClip_StencilClipMode == fClipMode) { 899 if (GrClipMaskManager::kRespectClip_StencilClipMode == fClipMode) {
900 settings = basic_apply_stencil_clip_settings(); 900 settings = basic_apply_stencil_clip_settings();
901 } else { 901 } else {
902 return; 902 return;
903 } 903 }
904 } else { 904 } else {
905 settings = pipelineBuilder->getStencil(); 905 settings = pipelineBuilder->getStencil();
906 } 906 }
907 907
908 // TODO: dynamically attach a stencil buffer
909 int stencilBits = 0; 908 int stencilBits = 0;
910 GrStencilBuffer* stencilBuffer = pipelineBuilder->getRenderTarget()->getSten cilBuffer(); 909 GrRenderTarget* rt = pipelineBuilder->getRenderTarget();
910 GrStencilBuffer* stencilBuffer = rt->renderTargetPriv().attachStencilBuffer( );
911 if (stencilBuffer) { 911 if (stencilBuffer) {
912 stencilBits = stencilBuffer->bits(); 912 stencilBits = stencilBuffer->bits();
913 } 913 }
914 914
915 SkASSERT(fClipTarget->caps()->stencilWrapOpsSupport() || !settings.usesWrapO p()); 915 SkASSERT(fClipTarget->caps()->stencilWrapOpsSupport() || !settings.usesWrapO p());
916 SkASSERT(fClipTarget->caps()->twoSidedStencilSupport() || !settings.isTwoSid ed()); 916 SkASSERT(fClipTarget->caps()->twoSidedStencilSupport() || !settings.isTwoSid ed());
917 this->adjustStencilParams(&settings, fClipMode, stencilBits); 917 this->adjustStencilParams(&settings, fClipMode, stencilBits);
918 ars->set(pipelineBuilder); 918 ars->set(pipelineBuilder);
919 pipelineBuilder->setStencil(settings); 919 pipelineBuilder->setStencil(settings);
920 } 920 }
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
1077 fAACache.purgeResources(); 1077 fAACache.purgeResources();
1078 } 1078 }
1079 1079
1080 void GrClipMaskManager::setClipTarget(GrClipTarget* clipTarget) { 1080 void GrClipMaskManager::setClipTarget(GrClipTarget* clipTarget) {
1081 fClipTarget = clipTarget; 1081 fClipTarget = clipTarget;
1082 fAACache.setContext(clipTarget->getContext()); 1082 fAACache.setContext(clipTarget->getContext());
1083 } 1083 }
1084 1084
1085 void GrClipMaskManager::adjustPathStencilParams(const GrStencilBuffer* stencilBu ffer, 1085 void GrClipMaskManager::adjustPathStencilParams(const GrStencilBuffer* stencilBu ffer,
1086 GrStencilSettings* settings) { 1086 GrStencilSettings* settings) {
1087 // TODO: dynamically attach a stencil buffer
1088 if (stencilBuffer) { 1087 if (stencilBuffer) {
1089 int stencilBits = stencilBuffer->bits(); 1088 int stencilBits = stencilBuffer->bits();
1090 this->adjustStencilParams(settings, fClipMode, stencilBits); 1089 this->adjustStencilParams(settings, fClipMode, stencilBits);
1091 } 1090 }
1092 } 1091 }
OLDNEW
« no previous file with comments | « src/effects/SkXfermodeImageFilter.cpp ('k') | src/gpu/GrContext.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698