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 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 | 128 |
129 void GrDrawTarget::drawBatch(GrPipelineBuilder* pipelineBuilder, | 129 void GrDrawTarget::drawBatch(GrPipelineBuilder* pipelineBuilder, |
130 GrBatch* batch) { | 130 GrBatch* batch) { |
131 SkASSERT(pipelineBuilder); | 131 SkASSERT(pipelineBuilder); |
132 // TODO some kind of checkdraw, but not at this level | 132 // TODO some kind of checkdraw, but not at this level |
133 | 133 |
134 // Setup clip | 134 // Setup clip |
135 GrScissorState scissorState; | 135 GrScissorState scissorState; |
136 GrPipelineBuilder::AutoRestoreFragmentProcessors arfp; | 136 GrPipelineBuilder::AutoRestoreFragmentProcessors arfp; |
137 GrPipelineBuilder::AutoRestoreStencil ars; | 137 GrPipelineBuilder::AutoRestoreStencil ars; |
138 if (!this->setupClip(pipelineBuilder, &arfp, &ars, &scissorState, &batch->bo
unds())) { | 138 GrPipelineBuilder::AutoRestoreProcessorDataManager arpdm; |
| 139 if (!this->setupClip(pipelineBuilder, &arfp, &ars, &arpdm, &scissorState, &b
atch->bounds())) { |
139 return; | 140 return; |
140 } | 141 } |
141 | 142 |
142 // Batch bounds are tight, so for dev copies | 143 // Batch bounds are tight, so for dev copies |
143 // TODO move this into setupDstReadIfNecessary when paths are in batch | 144 // TODO move this into setupDstReadIfNecessary when paths are in batch |
144 SkRect bounds = batch->bounds(); | 145 SkRect bounds = batch->bounds(); |
145 bounds.outset(0.5f, 0.5f); | 146 bounds.outset(0.5f, 0.5f); |
146 | 147 |
147 GrDrawTarget::PipelineInfo pipelineInfo(pipelineBuilder, &scissorState, batc
h, &bounds, | 148 GrDrawTarget::PipelineInfo pipelineInfo(pipelineBuilder, &scissorState, batc
h, &bounds, |
148 this); | 149 this); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 GrPathRendering::FillType fill) { | 195 GrPathRendering::FillType fill) { |
195 // TODO: extract portions of checkDraw that are relevant to path stenciling. | 196 // TODO: extract portions of checkDraw that are relevant to path stenciling. |
196 SkASSERT(path); | 197 SkASSERT(path); |
197 SkASSERT(this->caps()->shaderCaps()->pathRenderingSupport()); | 198 SkASSERT(this->caps()->shaderCaps()->pathRenderingSupport()); |
198 SkASSERT(pipelineBuilder); | 199 SkASSERT(pipelineBuilder); |
199 | 200 |
200 // Setup clip | 201 // Setup clip |
201 GrScissorState scissorState; | 202 GrScissorState scissorState; |
202 GrPipelineBuilder::AutoRestoreFragmentProcessors arfp; | 203 GrPipelineBuilder::AutoRestoreFragmentProcessors arfp; |
203 GrPipelineBuilder::AutoRestoreStencil ars; | 204 GrPipelineBuilder::AutoRestoreStencil ars; |
204 if (!this->setupClip(pipelineBuilder, &arfp, &ars, &scissorState, NULL)) { | 205 GrPipelineBuilder::AutoRestoreProcessorDataManager arpdm; |
| 206 if (!this->setupClip(pipelineBuilder, &arfp, &ars, &arpdm, &scissorState, NU
LL)) { |
205 return; | 207 return; |
206 } | 208 } |
207 | 209 |
208 // set stencil settings for path | 210 // set stencil settings for path |
209 GrStencilSettings stencilSettings; | 211 GrStencilSettings stencilSettings; |
210 GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); | 212 GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); |
211 GrStencilAttachment* sb = rt->renderTargetPriv().attachStencilAttachment(); | 213 GrStencilAttachment* sb = rt->renderTargetPriv().attachStencilAttachment(); |
212 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); | 214 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); |
213 | 215 |
214 this->onStencilPath(*pipelineBuilder, pathProc, path, scissorState, stencilS
ettings); | 216 this->onStencilPath(*pipelineBuilder, pathProc, path, scissorState, stencilS
ettings); |
215 } | 217 } |
216 | 218 |
217 void GrDrawTarget::drawPath(GrPipelineBuilder* pipelineBuilder, | 219 void GrDrawTarget::drawPath(GrPipelineBuilder* pipelineBuilder, |
218 const GrPathProcessor* pathProc, | 220 const GrPathProcessor* pathProc, |
219 const GrPath* path, | 221 const GrPath* path, |
220 GrPathRendering::FillType fill) { | 222 GrPathRendering::FillType fill) { |
221 // TODO: extract portions of checkDraw that are relevant to path rendering. | 223 // TODO: extract portions of checkDraw that are relevant to path rendering. |
222 SkASSERT(path); | 224 SkASSERT(path); |
223 SkASSERT(this->caps()->shaderCaps()->pathRenderingSupport()); | 225 SkASSERT(this->caps()->shaderCaps()->pathRenderingSupport()); |
224 SkASSERT(pipelineBuilder); | 226 SkASSERT(pipelineBuilder); |
225 | 227 |
226 SkRect devBounds = path->getBounds(); | 228 SkRect devBounds = path->getBounds(); |
227 pathProc->viewMatrix().mapRect(&devBounds); | 229 pathProc->viewMatrix().mapRect(&devBounds); |
228 | 230 |
229 // Setup clip | 231 // Setup clip |
230 GrScissorState scissorState; | 232 GrScissorState scissorState; |
231 GrPipelineBuilder::AutoRestoreFragmentProcessors arfp; | 233 GrPipelineBuilder::AutoRestoreFragmentProcessors arfp; |
232 GrPipelineBuilder::AutoRestoreStencil ars; | 234 GrPipelineBuilder::AutoRestoreStencil ars; |
233 if (!this->setupClip(pipelineBuilder, &arfp, &ars, &scissorState, &devBounds
)) { | 235 GrPipelineBuilder::AutoRestoreProcessorDataManager arpdm; |
| 236 if (!this->setupClip(pipelineBuilder, &arfp, &ars, &arpdm, &scissorState, &d
evBounds)) { |
234 return; | 237 return; |
235 } | 238 } |
236 | 239 |
237 // set stencil settings for path | 240 // set stencil settings for path |
238 GrStencilSettings stencilSettings; | 241 GrStencilSettings stencilSettings; |
239 GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); | 242 GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); |
240 GrStencilAttachment* sb = rt->renderTargetPriv().attachStencilAttachment(); | 243 GrStencilAttachment* sb = rt->renderTargetPriv().attachStencilAttachment(); |
241 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); | 244 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); |
242 | 245 |
243 GrDrawTarget::PipelineInfo pipelineInfo(pipelineBuilder, &scissorState, path
Proc, &devBounds, | 246 GrDrawTarget::PipelineInfo pipelineInfo(pipelineBuilder, &scissorState, path
Proc, &devBounds, |
(...skipping 18 matching lines...) Expand all Loading... |
262 SkASSERT(pathRange); | 265 SkASSERT(pathRange); |
263 SkASSERT(indices); | 266 SkASSERT(indices); |
264 SkASSERT(0 == reinterpret_cast<long>(indices) % GrPathRange::PathIndexSizeIn
Bytes(indexType)); | 267 SkASSERT(0 == reinterpret_cast<long>(indices) % GrPathRange::PathIndexSizeIn
Bytes(indexType)); |
265 SkASSERT(transformValues); | 268 SkASSERT(transformValues); |
266 SkASSERT(pipelineBuilder); | 269 SkASSERT(pipelineBuilder); |
267 | 270 |
268 // Setup clip | 271 // Setup clip |
269 GrScissorState scissorState; | 272 GrScissorState scissorState; |
270 GrPipelineBuilder::AutoRestoreFragmentProcessors arfp; | 273 GrPipelineBuilder::AutoRestoreFragmentProcessors arfp; |
271 GrPipelineBuilder::AutoRestoreStencil ars; | 274 GrPipelineBuilder::AutoRestoreStencil ars; |
272 | 275 GrPipelineBuilder::AutoRestoreProcessorDataManager arpdm; |
273 if (!this->setupClip(pipelineBuilder, &arfp, &ars, &scissorState, NULL)) { | 276 if (!this->setupClip(pipelineBuilder, &arfp, &ars, &arpdm, &scissorState, NU
LL)) { |
274 return; | 277 return; |
275 } | 278 } |
276 | 279 |
277 // set stencil settings for path | 280 // set stencil settings for path |
278 GrStencilSettings stencilSettings; | 281 GrStencilSettings stencilSettings; |
279 GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); | 282 GrRenderTarget* rt = pipelineBuilder->getRenderTarget(); |
280 GrStencilAttachment* sb = rt->renderTargetPriv().attachStencilAttachment(); | 283 GrStencilAttachment* sb = rt->renderTargetPriv().attachStencilAttachment(); |
281 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); | 284 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); |
282 | 285 |
283 // Don't compute a bounding box for dst copy texture, we'll opt | 286 // Don't compute a bounding box for dst copy texture, we'll opt |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
497 GrClipTarget::GrClipTarget(GrContext* context) | 500 GrClipTarget::GrClipTarget(GrContext* context) |
498 : INHERITED(context->getGpu(), context->resourceProvider()) | 501 : INHERITED(context->getGpu(), context->resourceProvider()) |
499 , fContext(context) { | 502 , fContext(context) { |
500 fClipMaskManager.reset(SkNEW_ARGS(GrClipMaskManager, (this))); | 503 fClipMaskManager.reset(SkNEW_ARGS(GrClipMaskManager, (this))); |
501 } | 504 } |
502 | 505 |
503 | 506 |
504 bool GrClipTarget::setupClip(GrPipelineBuilder* pipelineBuilder, | 507 bool GrClipTarget::setupClip(GrPipelineBuilder* pipelineBuilder, |
505 GrPipelineBuilder::AutoRestoreFragmentProcessors* a
rfp, | 508 GrPipelineBuilder::AutoRestoreFragmentProcessors* a
rfp, |
506 GrPipelineBuilder::AutoRestoreStencil* ars, | 509 GrPipelineBuilder::AutoRestoreStencil* ars, |
| 510 GrPipelineBuilder::AutoRestoreProcessorDataManager*
arpdm, |
507 GrScissorState* scissorState, | 511 GrScissorState* scissorState, |
508 const SkRect* devBounds) { | 512 const SkRect* devBounds) { |
509 return fClipMaskManager->setupClipping(pipelineBuilder, | 513 return fClipMaskManager->setupClipping(*pipelineBuilder, |
510 arfp, | 514 arfp, |
511 ars, | 515 ars, |
512 scissorState, | 516 arpdm, |
513 devBounds); | 517 scissorState, |
| 518 devBounds); |
514 } | 519 } |
515 | 520 |
516 void GrClipTarget::purgeResources() { | 521 void GrClipTarget::purgeResources() { |
517 // The clip mask manager can rebuild all its clip masks so just | 522 // The clip mask manager can rebuild all its clip masks so just |
518 // get rid of them all. | 523 // get rid of them all. |
519 fClipMaskManager->purgeResources(); | 524 fClipMaskManager->purgeResources(); |
520 }; | 525 }; |
OLD | NEW |