| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2010 Google Inc. | 3 * Copyright 2010 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 "GrDrawTarget.h" | 9 #include "GrDrawTarget.h" |
| 10 | 10 |
| 11 #include "GrBatch.h" | 11 #include "GrBatch.h" |
| 12 #include "GrContext.h" | 12 #include "GrContext.h" |
| 13 #include "GrDrawTargetCaps.h" | 13 #include "GrDrawTargetCaps.h" |
| 14 #include "GrPath.h" | 14 #include "GrPath.h" |
| 15 #include "GrPipeline.h" | 15 #include "GrPipeline.h" |
| 16 #include "GrRenderTarget.h" | 16 #include "GrRenderTarget.h" |
| 17 #include "GrRenderTargetPriv.h" |
| 17 #include "GrSurfacePriv.h" | 18 #include "GrSurfacePriv.h" |
| 18 #include "GrTemplates.h" | 19 #include "GrTemplates.h" |
| 19 #include "GrTexture.h" | 20 #include "GrTexture.h" |
| 20 #include "GrVertexBuffer.h" | 21 #include "GrVertexBuffer.h" |
| 21 | 22 |
| 22 #include "SkStrokeRec.h" | 23 #include "SkStrokeRec.h" |
| 23 | 24 |
| 24 //////////////////////////////////////////////////////////////////////////////// | 25 //////////////////////////////////////////////////////////////////////////////// |
| 25 | 26 |
| 26 GrDrawTarget::DrawInfo& GrDrawTarget::DrawInfo::operator =(const DrawInfo& di) { | 27 GrDrawTarget::DrawInfo& GrDrawTarget::DrawInfo::operator =(const DrawInfo& di) { |
| (...skipping 573 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 600 // Setup clip | 601 // Setup clip |
| 601 GrScissorState scissorState; | 602 GrScissorState scissorState; |
| 602 GrPipelineBuilder::AutoRestoreEffects are; | 603 GrPipelineBuilder::AutoRestoreEffects are; |
| 603 GrPipelineBuilder::AutoRestoreStencil ars; | 604 GrPipelineBuilder::AutoRestoreStencil ars; |
| 604 if (!this->setupClip(pipelineBuilder, &are, &ars, &scissorState, NULL)) { | 605 if (!this->setupClip(pipelineBuilder, &are, &ars, &scissorState, NULL)) { |
| 605 return; | 606 return; |
| 606 } | 607 } |
| 607 | 608 |
| 608 // set stencil settings for path | 609 // set stencil settings for path |
| 609 GrStencilSettings stencilSettings; | 610 GrStencilSettings stencilSettings; |
| 610 this->getPathStencilSettingsForFilltype(fill, | 611 GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); |
| 611 pipelineBuilder->getRenderTarget()->
getStencilBuffer(), | 612 GrStencilBuffer* sb = rt->renderTargetPriv().attachStencilBuffer(); |
| 612 &stencilSettings); | 613 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); |
| 613 | 614 |
| 614 this->onStencilPath(*pipelineBuilder, pathProc, path, scissorState, stencilS
ettings); | 615 this->onStencilPath(*pipelineBuilder, pathProc, path, scissorState, stencilS
ettings); |
| 615 } | 616 } |
| 616 | 617 |
| 617 void GrDrawTarget::drawPath(GrPipelineBuilder* pipelineBuilder, | 618 void GrDrawTarget::drawPath(GrPipelineBuilder* pipelineBuilder, |
| 618 const GrPathProcessor* pathProc, | 619 const GrPathProcessor* pathProc, |
| 619 const GrPath* path, | 620 const GrPath* path, |
| 620 GrPathRendering::FillType fill) { | 621 GrPathRendering::FillType fill) { |
| 621 // TODO: extract portions of checkDraw that are relevant to path rendering. | 622 // TODO: extract portions of checkDraw that are relevant to path rendering. |
| 622 SkASSERT(path); | 623 SkASSERT(path); |
| 623 SkASSERT(this->caps()->pathRenderingSupport()); | 624 SkASSERT(this->caps()->pathRenderingSupport()); |
| 624 SkASSERT(pipelineBuilder); | 625 SkASSERT(pipelineBuilder); |
| 625 | 626 |
| 626 SkRect devBounds = path->getBounds(); | 627 SkRect devBounds = path->getBounds(); |
| 627 pathProc->viewMatrix().mapRect(&devBounds); | 628 pathProc->viewMatrix().mapRect(&devBounds); |
| 628 | 629 |
| 629 // Setup clip | 630 // Setup clip |
| 630 GrScissorState scissorState; | 631 GrScissorState scissorState; |
| 631 GrPipelineBuilder::AutoRestoreEffects are; | 632 GrPipelineBuilder::AutoRestoreEffects are; |
| 632 GrPipelineBuilder::AutoRestoreStencil ars; | 633 GrPipelineBuilder::AutoRestoreStencil ars; |
| 633 if (!this->setupClip(pipelineBuilder, &are, &ars, &scissorState, &devBounds)
) { | 634 if (!this->setupClip(pipelineBuilder, &are, &ars, &scissorState, &devBounds)
) { |
| 634 return; | 635 return; |
| 635 } | 636 } |
| 636 | 637 |
| 637 // set stencil settings for path | 638 // set stencil settings for path |
| 638 GrStencilSettings stencilSettings; | 639 GrStencilSettings stencilSettings; |
| 639 this->getPathStencilSettingsForFilltype(fill, | 640 GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); |
| 640 pipelineBuilder->getRenderTarget()->
getStencilBuffer(), | 641 GrStencilBuffer* sb = rt->renderTargetPriv().attachStencilBuffer(); |
| 641 &stencilSettings); | 642 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); |
| 642 | 643 |
| 643 GrDrawTarget::PipelineInfo pipelineInfo(pipelineBuilder, &scissorState, path
Proc, &devBounds, | 644 GrDrawTarget::PipelineInfo pipelineInfo(pipelineBuilder, &scissorState, path
Proc, &devBounds, |
| 644 this); | 645 this); |
| 645 if (pipelineInfo.mustSkipDraw()) { | 646 if (pipelineInfo.mustSkipDraw()) { |
| 646 return; | 647 return; |
| 647 } | 648 } |
| 648 | 649 |
| 649 this->onDrawPath(pathProc, path, stencilSettings, pipelineInfo); | 650 this->onDrawPath(pathProc, path, stencilSettings, pipelineInfo); |
| 650 } | 651 } |
| 651 | 652 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 669 GrScissorState scissorState; | 670 GrScissorState scissorState; |
| 670 GrPipelineBuilder::AutoRestoreEffects are; | 671 GrPipelineBuilder::AutoRestoreEffects are; |
| 671 GrPipelineBuilder::AutoRestoreStencil ars; | 672 GrPipelineBuilder::AutoRestoreStencil ars; |
| 672 | 673 |
| 673 if (!this->setupClip(pipelineBuilder, &are, &ars, &scissorState, NULL)) { | 674 if (!this->setupClip(pipelineBuilder, &are, &ars, &scissorState, NULL)) { |
| 674 return; | 675 return; |
| 675 } | 676 } |
| 676 | 677 |
| 677 // set stencil settings for path | 678 // set stencil settings for path |
| 678 GrStencilSettings stencilSettings; | 679 GrStencilSettings stencilSettings; |
| 679 this->getPathStencilSettingsForFilltype(fill, | 680 GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); |
| 680 pipelineBuilder->getRenderTarget()->
getStencilBuffer(), | 681 GrStencilBuffer* sb = rt->renderTargetPriv().attachStencilBuffer(); |
| 681 &stencilSettings); | 682 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); |
| 682 | 683 |
| 683 // Don't compute a bounding box for dst copy texture, we'll opt | 684 // Don't compute a bounding box for dst copy texture, we'll opt |
| 684 // instead for it to just copy the entire dst. Realistically this is a moot | 685 // instead for it to just copy the entire dst. Realistically this is a moot |
| 685 // point, because any context that supports NV_path_rendering will also | 686 // point, because any context that supports NV_path_rendering will also |
| 686 // support NV_blend_equation_advanced. | 687 // support NV_blend_equation_advanced. |
| 687 GrDrawTarget::PipelineInfo pipelineInfo(pipelineBuilder, &scissorState, path
Proc, NULL, this); | 688 GrDrawTarget::PipelineInfo pipelineInfo(pipelineBuilder, &scissorState, path
Proc, NULL, this); |
| 688 if (pipelineInfo.mustSkipDraw()) { | 689 if (pipelineInfo.mustSkipDraw()) { |
| 689 return; | 690 return; |
| 690 } | 691 } |
| 691 | 692 |
| (...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1290 GrPipelineBuilder::AutoRestoreStencil* ars, | 1291 GrPipelineBuilder::AutoRestoreStencil* ars, |
| 1291 GrScissorState* scissorState, | 1292 GrScissorState* scissorState, |
| 1292 const SkRect* devBounds) { | 1293 const SkRect* devBounds) { |
| 1293 return fClipMaskManager.setupClipping(pipelineBuilder, | 1294 return fClipMaskManager.setupClipping(pipelineBuilder, |
| 1294 are, | 1295 are, |
| 1295 ars, | 1296 ars, |
| 1296 scissorState, | 1297 scissorState, |
| 1297 this->getClip(), | 1298 this->getClip(), |
| 1298 devBounds); | 1299 devBounds); |
| 1299 } | 1300 } |
| OLD | NEW |