| 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 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 | 139 |
| 140 void GrDrawTarget::reset() { | 140 void GrDrawTarget::reset() { |
| 141 fFirstUnpreparedBatch = 0; | 141 fFirstUnpreparedBatch = 0; |
| 142 fBatches.reset(); | 142 fBatches.reset(); |
| 143 fFlushState.reset(); | 143 fFlushState.reset(); |
| 144 } | 144 } |
| 145 | 145 |
| 146 void GrDrawTarget::drawBatch(const GrPipelineBuilder& pipelineBuilder, GrDrawBat
ch* batch) { | 146 void GrDrawTarget::drawBatch(const GrPipelineBuilder& pipelineBuilder, GrDrawBat
ch* batch) { |
| 147 // Setup clip | 147 // Setup clip |
| 148 GrScissorState scissorState; | 148 GrScissorState scissorState; |
| 149 GrPipelineBuilder::AutoRestoreStencil ars; |
| 150 GrAppliedClip clip; |
| 151 if (!fClipMaskManager->setupClipping(pipelineBuilder, &ars, &scissorState, &
batch->bounds(), |
| 152 &clip)) { |
| 153 return; |
| 154 } |
| 149 GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps; | 155 GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps; |
| 150 GrPipelineBuilder::AutoRestoreStencil ars; | 156 if (clip.clipCoverageFragmentProcessor()) { |
| 151 if (!fClipMaskManager->setupClipping(pipelineBuilder, &arfps, &ars, &scissor
State, | 157 arfps.set(&pipelineBuilder); |
| 152 &batch->bounds())) { | 158 arfps.addCoverageFragmentProcessor(clip.clipCoverageFragmentProcessor())
; |
| 153 return; | |
| 154 } | 159 } |
| 155 | 160 |
| 156 GrPipeline::CreateArgs args; | 161 GrPipeline::CreateArgs args; |
| 157 if (!this->installPipelineInDrawBatch(&pipelineBuilder, &scissorState, batch
)) { | 162 if (!this->installPipelineInDrawBatch(&pipelineBuilder, &scissorState, batch
)) { |
| 158 return; | 163 return; |
| 159 } | 164 } |
| 160 | 165 |
| 161 this->recordBatch(batch); | 166 this->recordBatch(batch); |
| 162 } | 167 } |
| 163 | 168 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 199 void GrDrawTarget::stencilPath(const GrPipelineBuilder& pipelineBuilder, | 204 void GrDrawTarget::stencilPath(const GrPipelineBuilder& pipelineBuilder, |
| 200 const SkMatrix& viewMatrix, | 205 const SkMatrix& viewMatrix, |
| 201 const GrPath* path, | 206 const GrPath* path, |
| 202 GrPathRendering::FillType fill) { | 207 GrPathRendering::FillType fill) { |
| 203 // TODO: extract portions of checkDraw that are relevant to path stenciling. | 208 // TODO: extract portions of checkDraw that are relevant to path stenciling. |
| 204 SkASSERT(path); | 209 SkASSERT(path); |
| 205 SkASSERT(this->caps()->shaderCaps()->pathRenderingSupport()); | 210 SkASSERT(this->caps()->shaderCaps()->pathRenderingSupport()); |
| 206 | 211 |
| 207 // Setup clip | 212 // Setup clip |
| 208 GrScissorState scissorState; | 213 GrScissorState scissorState; |
| 214 GrPipelineBuilder::AutoRestoreStencil ars; |
| 215 GrAppliedClip clip; |
| 216 if (!fClipMaskManager->setupClipping(pipelineBuilder, &ars, &scissorState, n
ullptr, &clip)) { |
| 217 return; |
| 218 } |
| 219 |
| 209 GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps; | 220 GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps; |
| 210 GrPipelineBuilder::AutoRestoreStencil ars; | 221 if (clip.clipCoverageFragmentProcessor()) { |
| 211 | 222 arfps.set(&pipelineBuilder); |
| 212 if (!fClipMaskManager->setupClipping(pipelineBuilder, &arfps, &ars, &scissor
State, nullptr)) { | 223 arfps.addCoverageFragmentProcessor(clip.clipCoverageFragmentProcessor())
; |
| 213 return; | |
| 214 } | 224 } |
| 215 | 225 |
| 216 // set stencil settings for path | 226 // set stencil settings for path |
| 217 GrStencilSettings stencilSettings; | 227 GrStencilSettings stencilSettings; |
| 218 GrRenderTarget* rt = pipelineBuilder.getRenderTarget(); | 228 GrRenderTarget* rt = pipelineBuilder.getRenderTarget(); |
| 219 GrStencilAttachment* sb = fResourceProvider->attachStencilAttachment(rt); | 229 GrStencilAttachment* sb = fResourceProvider->attachStencilAttachment(rt); |
| 220 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); | 230 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); |
| 221 | 231 |
| 222 GrBatch* batch = GrStencilPathBatch::Create(viewMatrix, | 232 GrBatch* batch = GrStencilPathBatch::Create(viewMatrix, |
| 223 pipelineBuilder.isHWAntialias(), | 233 pipelineBuilder.isHWAntialias(), |
| (...skipping 30 matching lines...) Expand all Loading... |
| 254 | 264 |
| 255 void GrDrawTarget::drawPathBatch(const GrPipelineBuilder& pipelineBuilder, | 265 void GrDrawTarget::drawPathBatch(const GrPipelineBuilder& pipelineBuilder, |
| 256 GrDrawPathBatchBase* batch, | 266 GrDrawPathBatchBase* batch, |
| 257 GrPathRendering::FillType fill) { | 267 GrPathRendering::FillType fill) { |
| 258 // This looks like drawBatch() but there is an added wrinkle that stencil se
ttings get inserted | 268 // This looks like drawBatch() but there is an added wrinkle that stencil se
ttings get inserted |
| 259 // after setting up clipping but before onDrawBatch(). TODO: Figure out a be
tter model for | 269 // after setting up clipping but before onDrawBatch(). TODO: Figure out a be
tter model for |
| 260 // handling stencil settings WRT interactions between pipeline(builder), cli
pmaskmanager, and | 270 // handling stencil settings WRT interactions between pipeline(builder), cli
pmaskmanager, and |
| 261 // batches. | 271 // batches. |
| 262 | 272 |
| 263 GrScissorState scissorState; | 273 GrScissorState scissorState; |
| 274 GrPipelineBuilder::AutoRestoreStencil ars; |
| 275 GrAppliedClip clip; |
| 276 if (!fClipMaskManager->setupClipping(pipelineBuilder, &ars, &scissorState, &
batch->bounds(), |
| 277 &clip)) { |
| 278 return; |
| 279 } |
| 280 |
| 264 GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps; | 281 GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps; |
| 265 GrPipelineBuilder::AutoRestoreStencil ars; | 282 if (clip.clipCoverageFragmentProcessor()) { |
| 266 if (!fClipMaskManager->setupClipping(pipelineBuilder, &arfps, &ars, &scissor
State, | 283 arfps.set(&pipelineBuilder); |
| 267 &batch->bounds())) { | 284 arfps.addCoverageFragmentProcessor(clip.clipCoverageFragmentProcessor())
; |
| 268 return; | |
| 269 } | 285 } |
| 270 | 286 |
| 271 // Ensure the render target has a stencil buffer and get the stencil setting
s. | 287 // Ensure the render target has a stencil buffer and get the stencil setting
s. |
| 272 GrStencilSettings stencilSettings; | 288 GrStencilSettings stencilSettings; |
| 273 GrRenderTarget* rt = pipelineBuilder.getRenderTarget(); | 289 GrRenderTarget* rt = pipelineBuilder.getRenderTarget(); |
| 274 GrStencilAttachment* sb = fResourceProvider->attachStencilAttachment(rt); | 290 GrStencilAttachment* sb = fResourceProvider->attachStencilAttachment(rt); |
| 275 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); | 291 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); |
| 276 batch->setStencilSettings(stencilSettings); | 292 batch->setStencilSettings(stencilSettings); |
| 277 | 293 |
| 278 GrPipeline::CreateArgs args; | 294 GrPipeline::CreateArgs args; |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 463 } | 479 } |
| 464 | 480 |
| 465 return true; | 481 return true; |
| 466 } | 482 } |
| 467 | 483 |
| 468 void GrDrawTarget::clearStencilClip(const SkIRect& rect, bool insideClip, GrRend
erTarget* rt) { | 484 void GrDrawTarget::clearStencilClip(const SkIRect& rect, bool insideClip, GrRend
erTarget* rt) { |
| 469 GrBatch* batch = new GrClearStencilClipBatch(rect, insideClip, rt); | 485 GrBatch* batch = new GrClearStencilClipBatch(rect, insideClip, rt); |
| 470 this->recordBatch(batch); | 486 this->recordBatch(batch); |
| 471 batch->unref(); | 487 batch->unref(); |
| 472 } | 488 } |
| OLD | NEW |