diff options
Diffstat (limited to 'src/gpu/GrPipelineBuilder.cpp')
-rw-r--r-- | src/gpu/GrPipelineBuilder.cpp | 66 |
1 files changed, 35 insertions, 31 deletions
diff --git a/src/gpu/GrPipelineBuilder.cpp b/src/gpu/GrPipelineBuilder.cpp index 0fb8ac0cca..64a1d0c428 100644 --- a/src/gpu/GrPipelineBuilder.cpp +++ b/src/gpu/GrPipelineBuilder.cpp @@ -22,6 +22,20 @@ GrPipelineBuilder::GrPipelineBuilder() SkDEBUGCODE(fBlockEffectRemovalCnt = 0;) } +GrPipelineBuilder& GrPipelineBuilder::operator=(const GrPipelineBuilder& that) { + fProcDataManager.reset(SkNEW_ARGS(GrProcessorDataManager, (*that.processorDataManager()))); + fRenderTarget.reset(SkSafeRef(that.fRenderTarget.get())); + fFlags = that.fFlags; + fStencilSettings = that.fStencilSettings; + fDrawFace = that.fDrawFace; + fXPFactory.reset(SkRef(that.getXPFactory())); + fColorStages = that.fColorStages; + fCoverageStages = that.fCoverageStages; + fClip = that.fClip; + + return *this; +} + GrPipelineBuilder::GrPipelineBuilder(const GrPaint& paint, GrRenderTarget* rt, const GrClip& clip) { SkDEBUGCODE(fBlockEffectRemovalCnt = 0;) @@ -29,12 +43,15 @@ GrPipelineBuilder::GrPipelineBuilder(const GrPaint& paint, GrRenderTarget* rt, c fProcDataManager.reset( const_cast<GrProcessorDataManager*>(SkRef(paint.processorDataManager()))); - for (int i = 0; i < paint.numColorFragmentProcessors(); ++i) { - fColorFragmentProcessors.push_back(SkRef(paint.getColorFragmentProcessor(i))); + fColorStages.reset(); + fCoverageStages.reset(); + + for (int i = 0; i < paint.numColorStages(); ++i) { + fColorStages.push_back(paint.getColorStage(i)); } - for (int i = 0; i < paint.numCoverageFragmentProcessors(); ++i) { - fCoverageFragmentProcessors.push_back(SkRef(paint.getCoverageFragmentProcessor(i))); + for (int i = 0; i < paint.numCoverageStages(); ++i) { + fCoverageStages.push_back(paint.getCoverageStage(i)); } fXPFactory.reset(SkRef(paint.getXPFactory())); @@ -65,26 +82,21 @@ bool GrPipelineBuilder::willXPNeedDstTexture(const GrCaps& caps, void GrPipelineBuilder::AutoRestoreFragmentProcessorState::set( const GrPipelineBuilder* pipelineBuilder) { if (fPipelineBuilder) { - int m = fPipelineBuilder->numColorFragmentProcessors() - fColorEffectCnt; + int m = fPipelineBuilder->numColorFragmentStages() - fColorEffectCnt; SkASSERT(m >= 0); - for (int i = 0; i < m; ++i) { - fPipelineBuilder->fColorFragmentProcessors.fromBack(i)->unref(); - } - fPipelineBuilder->fColorFragmentProcessors.pop_back_n(m); + fPipelineBuilder->fColorStages.pop_back_n(m); - int n = fPipelineBuilder->numCoverageFragmentProcessors() - fCoverageEffectCnt; + int n = fPipelineBuilder->numCoverageFragmentStages() - fCoverageEffectCnt; SkASSERT(n >= 0); - for (int i = 0; i < n; ++i) { - fPipelineBuilder->fCoverageFragmentProcessors.fromBack(i)->unref(); - } - fPipelineBuilder->fCoverageFragmentProcessors.pop_back_n(n); + fPipelineBuilder->fCoverageStages.pop_back_n(n); + SkDEBUGCODE(--fPipelineBuilder->fBlockEffectRemovalCnt;) fPipelineBuilder->getProcessorDataManager()->restoreToSaveMarker(/*fSaveMarker*/); } fPipelineBuilder = const_cast<GrPipelineBuilder*>(pipelineBuilder); if (NULL != pipelineBuilder) { - fColorEffectCnt = pipelineBuilder->numColorFragmentProcessors(); - fCoverageEffectCnt = pipelineBuilder->numCoverageFragmentProcessors(); + fColorEffectCnt = pipelineBuilder->numColorFragmentStages(); + fCoverageEffectCnt = pipelineBuilder->numCoverageFragmentStages(); SkDEBUGCODE(++pipelineBuilder->fBlockEffectRemovalCnt;) fSaveMarker = pipelineBuilder->processorDataManager()->currentSaveMarker(); } @@ -94,33 +106,25 @@ void GrPipelineBuilder::AutoRestoreFragmentProcessorState::set( GrPipelineBuilder::~GrPipelineBuilder() { SkASSERT(0 == fBlockEffectRemovalCnt); - for (int i = 0; i < fColorFragmentProcessors.count(); ++i) { - fColorFragmentProcessors[i]->unref(); - } - for (int i = 0; i < fCoverageFragmentProcessors.count(); ++i) { - fCoverageFragmentProcessors[i]->unref(); - } } //////////////////////////////////////////////////////////////////////////////// void GrPipelineBuilder::calcColorInvariantOutput(const GrPrimitiveProcessor* pp) const { - fColorProcInfo.calcColorWithPrimProc(pp, fColorFragmentProcessors.begin(), - this->numColorFragmentProcessors()); - + fColorProcInfo.calcColorWithPrimProc(pp, fColorStages.begin(), this->numColorFragmentStages()); } void GrPipelineBuilder::calcCoverageInvariantOutput(const GrPrimitiveProcessor* pp) const { - fCoverageProcInfo.calcCoverageWithPrimProc(pp, fCoverageFragmentProcessors.begin(), - this->numCoverageFragmentProcessors()); + fCoverageProcInfo.calcCoverageWithPrimProc(pp, fCoverageStages.begin(), + this->numCoverageFragmentStages()); } void GrPipelineBuilder::calcColorInvariantOutput(const GrDrawBatch* batch) const { - fColorProcInfo.calcColorWithBatch(batch, fColorFragmentProcessors.begin(), - this->numColorFragmentProcessors()); + fColorProcInfo.calcColorWithBatch(batch, fColorStages.begin(), this->numColorFragmentStages()); } void GrPipelineBuilder::calcCoverageInvariantOutput(const GrDrawBatch* batch) const { - fCoverageProcInfo.calcCoverageWithBatch(batch, fCoverageFragmentProcessors.begin(), - this->numCoverageFragmentProcessors()); + fCoverageProcInfo.calcCoverageWithBatch(batch, fCoverageStages.begin(), + this->numCoverageFragmentStages()); } + |