| 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 | 
| (...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 557 static const GrStencilSettings& even_odd_path_stencil_settings() { | 557 static const GrStencilSettings& even_odd_path_stencil_settings() { | 
| 558     GR_STATIC_CONST_SAME_STENCIL_STRUCT(gSettings, | 558     GR_STATIC_CONST_SAME_STENCIL_STRUCT(gSettings, | 
| 559         kInvert_StencilOp, | 559         kInvert_StencilOp, | 
| 560         kInvert_StencilOp, | 560         kInvert_StencilOp, | 
| 561         kAlwaysIfInClip_StencilFunc, | 561         kAlwaysIfInClip_StencilFunc, | 
| 562         0xFFFF, 0xFFFF, 0xFFFF); | 562         0xFFFF, 0xFFFF, 0xFFFF); | 
| 563     return *GR_CONST_STENCIL_SETTINGS_PTR_FROM_STRUCT_PTR(&gSettings); | 563     return *GR_CONST_STENCIL_SETTINGS_PTR_FROM_STRUCT_PTR(&gSettings); | 
| 564 } | 564 } | 
| 565 | 565 | 
| 566 void GrDrawTarget::getPathStencilSettingsForFilltype(GrPathRendering::FillType f
      ill, | 566 void GrDrawTarget::getPathStencilSettingsForFilltype(GrPathRendering::FillType f
      ill, | 
| 567                                                      const GrStencilBuffer* sb, | 567                                                      const GrStencilAttachment* 
      sb, | 
| 568                                                      GrStencilSettings* outStenc
      ilSettings) { | 568                                                      GrStencilSettings* outStenc
      ilSettings) { | 
| 569 | 569 | 
| 570     switch (fill) { | 570     switch (fill) { | 
| 571         default: | 571         default: | 
| 572             SkFAIL("Unexpected path fill."); | 572             SkFAIL("Unexpected path fill."); | 
| 573         case GrPathRendering::kWinding_FillType: | 573         case GrPathRendering::kWinding_FillType: | 
| 574             *outStencilSettings = winding_path_stencil_settings(); | 574             *outStencilSettings = winding_path_stencil_settings(); | 
| 575             break; | 575             break; | 
| 576         case GrPathRendering::kEvenOdd_FillType: | 576         case GrPathRendering::kEvenOdd_FillType: | 
| 577             *outStencilSettings = even_odd_path_stencil_settings(); | 577             *outStencilSettings = even_odd_path_stencil_settings(); | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 593     GrScissorState scissorState; | 593     GrScissorState scissorState; | 
| 594     GrPipelineBuilder::AutoRestoreFragmentProcessors arfp; | 594     GrPipelineBuilder::AutoRestoreFragmentProcessors arfp; | 
| 595     GrPipelineBuilder::AutoRestoreStencil ars; | 595     GrPipelineBuilder::AutoRestoreStencil ars; | 
| 596     if (!this->setupClip(pipelineBuilder, &arfp, &ars, &scissorState, NULL)) { | 596     if (!this->setupClip(pipelineBuilder, &arfp, &ars, &scissorState, NULL)) { | 
| 597         return; | 597         return; | 
| 598     } | 598     } | 
| 599 | 599 | 
| 600     // set stencil settings for path | 600     // set stencil settings for path | 
| 601     GrStencilSettings stencilSettings; | 601     GrStencilSettings stencilSettings; | 
| 602     GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); | 602     GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); | 
| 603     GrStencilBuffer* sb = rt->renderTargetPriv().attachStencilBuffer(); | 603     GrStencilAttachment* sb = rt->renderTargetPriv().attachStencilAttachment(); | 
| 604     this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); | 604     this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); | 
| 605 | 605 | 
| 606     this->onStencilPath(*pipelineBuilder, pathProc, path, scissorState, stencilS
      ettings); | 606     this->onStencilPath(*pipelineBuilder, pathProc, path, scissorState, stencilS
      ettings); | 
| 607 } | 607 } | 
| 608 | 608 | 
| 609 void GrDrawTarget::drawPath(GrPipelineBuilder* pipelineBuilder, | 609 void GrDrawTarget::drawPath(GrPipelineBuilder* pipelineBuilder, | 
| 610                             const GrPathProcessor* pathProc, | 610                             const GrPathProcessor* pathProc, | 
| 611                             const GrPath* path, | 611                             const GrPath* path, | 
| 612                             GrPathRendering::FillType fill) { | 612                             GrPathRendering::FillType fill) { | 
| 613     // TODO: extract portions of checkDraw that are relevant to path rendering. | 613     // TODO: extract portions of checkDraw that are relevant to path rendering. | 
| 614     SkASSERT(path); | 614     SkASSERT(path); | 
| 615     SkASSERT(this->caps()->pathRenderingSupport()); | 615     SkASSERT(this->caps()->pathRenderingSupport()); | 
| 616     SkASSERT(pipelineBuilder); | 616     SkASSERT(pipelineBuilder); | 
| 617 | 617 | 
| 618     SkRect devBounds = path->getBounds(); | 618     SkRect devBounds = path->getBounds(); | 
| 619     pathProc->viewMatrix().mapRect(&devBounds); | 619     pathProc->viewMatrix().mapRect(&devBounds); | 
| 620 | 620 | 
| 621     // Setup clip | 621     // Setup clip | 
| 622     GrScissorState scissorState; | 622     GrScissorState scissorState; | 
| 623     GrPipelineBuilder::AutoRestoreFragmentProcessors arfp; | 623     GrPipelineBuilder::AutoRestoreFragmentProcessors arfp; | 
| 624     GrPipelineBuilder::AutoRestoreStencil ars; | 624     GrPipelineBuilder::AutoRestoreStencil ars; | 
| 625     if (!this->setupClip(pipelineBuilder, &arfp, &ars, &scissorState, &devBounds
      )) { | 625     if (!this->setupClip(pipelineBuilder, &arfp, &ars, &scissorState, &devBounds
      )) { | 
| 626        return; | 626        return; | 
| 627     } | 627     } | 
| 628 | 628 | 
| 629     // set stencil settings for path | 629     // set stencil settings for path | 
| 630     GrStencilSettings stencilSettings; | 630     GrStencilSettings stencilSettings; | 
| 631     GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); | 631     GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); | 
| 632     GrStencilBuffer* sb = rt->renderTargetPriv().attachStencilBuffer(); | 632     GrStencilAttachment* sb = rt->renderTargetPriv().attachStencilAttachment(); | 
| 633     this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); | 633     this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); | 
| 634 | 634 | 
| 635     GrDrawTarget::PipelineInfo pipelineInfo(pipelineBuilder, &scissorState, path
      Proc, &devBounds, | 635     GrDrawTarget::PipelineInfo pipelineInfo(pipelineBuilder, &scissorState, path
      Proc, &devBounds, | 
| 636                                             this); | 636                                             this); | 
| 637     if (pipelineInfo.mustSkipDraw()) { | 637     if (pipelineInfo.mustSkipDraw()) { | 
| 638         return; | 638         return; | 
| 639     } | 639     } | 
| 640 | 640 | 
| 641     this->onDrawPath(pathProc, path, stencilSettings, pipelineInfo); | 641     this->onDrawPath(pathProc, path, stencilSettings, pipelineInfo); | 
| 642 } | 642 } | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 662     GrPipelineBuilder::AutoRestoreFragmentProcessors arfp; | 662     GrPipelineBuilder::AutoRestoreFragmentProcessors arfp; | 
| 663     GrPipelineBuilder::AutoRestoreStencil ars; | 663     GrPipelineBuilder::AutoRestoreStencil ars; | 
| 664 | 664 | 
| 665     if (!this->setupClip(pipelineBuilder, &arfp, &ars, &scissorState, NULL)) { | 665     if (!this->setupClip(pipelineBuilder, &arfp, &ars, &scissorState, NULL)) { | 
| 666         return; | 666         return; | 
| 667     } | 667     } | 
| 668 | 668 | 
| 669     // set stencil settings for path | 669     // set stencil settings for path | 
| 670     GrStencilSettings stencilSettings; | 670     GrStencilSettings stencilSettings; | 
| 671     GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); | 671     GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); | 
| 672     GrStencilBuffer* sb = rt->renderTargetPriv().attachStencilBuffer(); | 672     GrStencilAttachment* sb = rt->renderTargetPriv().attachStencilAttachment(); | 
| 673     this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); | 673     this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); | 
| 674 | 674 | 
| 675     // Don't compute a bounding box for dst copy texture, we'll opt | 675     // Don't compute a bounding box for dst copy texture, we'll opt | 
| 676     // instead for it to just copy the entire dst. Realistically this is a moot | 676     // instead for it to just copy the entire dst. Realistically this is a moot | 
| 677     // point, because any context that supports NV_path_rendering will also | 677     // point, because any context that supports NV_path_rendering will also | 
| 678     // support NV_blend_equation_advanced. | 678     // support NV_blend_equation_advanced. | 
| 679     GrDrawTarget::PipelineInfo pipelineInfo(pipelineBuilder, &scissorState, path
      Proc, NULL, this); | 679     GrDrawTarget::PipelineInfo pipelineInfo(pipelineBuilder, &scissorState, path
      Proc, NULL, this); | 
| 680     if (pipelineInfo.mustSkipDraw()) { | 680     if (pipelineInfo.mustSkipDraw()) { | 
| 681         return; | 681         return; | 
| 682     } | 682     } | 
| (...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1260                              GrPipelineBuilder::AutoRestoreFragmentProcessors* a
      rfp, | 1260                              GrPipelineBuilder::AutoRestoreFragmentProcessors* a
      rfp, | 
| 1261                              GrPipelineBuilder::AutoRestoreStencil* ars, | 1261                              GrPipelineBuilder::AutoRestoreStencil* ars, | 
| 1262                              GrScissorState* scissorState, | 1262                              GrScissorState* scissorState, | 
| 1263                              const SkRect* devBounds) { | 1263                              const SkRect* devBounds) { | 
| 1264     return fClipMaskManager.setupClipping(pipelineBuilder, | 1264     return fClipMaskManager.setupClipping(pipelineBuilder, | 
| 1265                                           arfp, | 1265                                           arfp, | 
| 1266                                           ars, | 1266                                           ars, | 
| 1267                                           scissorState, | 1267                                           scissorState, | 
| 1268                                           devBounds); | 1268                                           devBounds); | 
| 1269 } | 1269 } | 
| OLD | NEW | 
|---|