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