Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(14)

Side by Side Diff: src/gpu/GrDrawTarget.cpp

Issue 1385233002: Move scissor state to GrAppliedClip (Closed) Base URL: https://skia.googlesource.com/skia.git@enum
Patch Set: revert accidental whitespace change Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« src/gpu/GrClipMaskManager.h ('K') | « src/gpu/GrClipMaskManager.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 } 138 }
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;
149 GrPipelineBuilder::AutoRestoreStencil ars; 148 GrPipelineBuilder::AutoRestoreStencil ars;
150 GrAppliedClip clip; 149 GrAppliedClip clip;
151 if (!fClipMaskManager->setupClipping(pipelineBuilder, &ars, &scissorState, & batch->bounds(), 150 if (!fClipMaskManager->setupClipping(pipelineBuilder, &ars, &batch->bounds() , &clip)) {
152 &clip)) {
153 return; 151 return;
154 } 152 }
155 GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps; 153 GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps;
156 if (clip.clipCoverageFragmentProcessor()) { 154 if (clip.clipCoverageFragmentProcessor()) {
157 arfps.set(&pipelineBuilder); 155 arfps.set(&pipelineBuilder);
158 arfps.addCoverageFragmentProcessor(clip.clipCoverageFragmentProcessor()) ; 156 arfps.addCoverageFragmentProcessor(clip.clipCoverageFragmentProcessor()) ;
159 } 157 }
160 158
161 GrPipeline::CreateArgs args; 159 GrPipeline::CreateArgs args;
162 if (!this->installPipelineInDrawBatch(&pipelineBuilder, &scissorState, batch )) { 160 if (!this->installPipelineInDrawBatch(&pipelineBuilder, &clip.scissorState() , batch)) {
163 return; 161 return;
164 } 162 }
165 163
166 this->recordBatch(batch); 164 this->recordBatch(batch);
167 } 165 }
168 166
169 static const GrStencilSettings& winding_path_stencil_settings() { 167 static const GrStencilSettings& winding_path_stencil_settings() {
170 GR_STATIC_CONST_SAME_STENCIL_STRUCT(gSettings, 168 GR_STATIC_CONST_SAME_STENCIL_STRUCT(gSettings,
171 kIncClamp_StencilOp, 169 kIncClamp_StencilOp,
172 kIncClamp_StencilOp, 170 kIncClamp_StencilOp,
(...skipping 30 matching lines...) Expand all
203 201
204 void GrDrawTarget::stencilPath(const GrPipelineBuilder& pipelineBuilder, 202 void GrDrawTarget::stencilPath(const GrPipelineBuilder& pipelineBuilder,
205 const SkMatrix& viewMatrix, 203 const SkMatrix& viewMatrix,
206 const GrPath* path, 204 const GrPath* path,
207 GrPathRendering::FillType fill) { 205 GrPathRendering::FillType fill) {
208 // TODO: extract portions of checkDraw that are relevant to path stenciling. 206 // TODO: extract portions of checkDraw that are relevant to path stenciling.
209 SkASSERT(path); 207 SkASSERT(path);
210 SkASSERT(this->caps()->shaderCaps()->pathRenderingSupport()); 208 SkASSERT(this->caps()->shaderCaps()->pathRenderingSupport());
211 209
212 // Setup clip 210 // Setup clip
213 GrScissorState scissorState;
214 GrPipelineBuilder::AutoRestoreStencil ars; 211 GrPipelineBuilder::AutoRestoreStencil ars;
215 GrAppliedClip clip; 212 GrAppliedClip clip;
216 if (!fClipMaskManager->setupClipping(pipelineBuilder, &ars, &scissorState, n ullptr, &clip)) { 213 if (!fClipMaskManager->setupClipping(pipelineBuilder, &ars, nullptr, &clip)) {
217 return; 214 return;
218 } 215 }
219 216
220 GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps; 217 GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps;
221 if (clip.clipCoverageFragmentProcessor()) { 218 if (clip.clipCoverageFragmentProcessor()) {
222 arfps.set(&pipelineBuilder); 219 arfps.set(&pipelineBuilder);
223 arfps.addCoverageFragmentProcessor(clip.clipCoverageFragmentProcessor()) ; 220 arfps.addCoverageFragmentProcessor(clip.clipCoverageFragmentProcessor()) ;
224 } 221 }
225 222
226 // set stencil settings for path 223 // set stencil settings for path
227 GrStencilSettings stencilSettings; 224 GrStencilSettings stencilSettings;
228 GrRenderTarget* rt = pipelineBuilder.getRenderTarget(); 225 GrRenderTarget* rt = pipelineBuilder.getRenderTarget();
229 GrStencilAttachment* sb = fResourceProvider->attachStencilAttachment(rt); 226 GrStencilAttachment* sb = fResourceProvider->attachStencilAttachment(rt);
230 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); 227 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings);
231 228
232 GrBatch* batch = GrStencilPathBatch::Create(viewMatrix, 229 GrBatch* batch = GrStencilPathBatch::Create(viewMatrix,
233 pipelineBuilder.isHWAntialias(), 230 pipelineBuilder.isHWAntialias(),
234 stencilSettings, scissorState, 231 stencilSettings, clip.scissorSta te(),
235 pipelineBuilder.getRenderTarget( ), 232 pipelineBuilder.getRenderTarget( ),
236 path); 233 path);
237 this->recordBatch(batch); 234 this->recordBatch(batch);
238 batch->unref(); 235 batch->unref();
239 } 236 }
240 237
241 void GrDrawTarget::drawPath(const GrPipelineBuilder& pipelineBuilder, 238 void GrDrawTarget::drawPath(const GrPipelineBuilder& pipelineBuilder,
242 const SkMatrix& viewMatrix, 239 const SkMatrix& viewMatrix,
243 GrColor color, 240 GrColor color,
244 const GrPath* path, 241 const GrPath* path,
(...skipping 18 matching lines...) Expand all
263 } 260 }
264 261
265 void GrDrawTarget::drawPathBatch(const GrPipelineBuilder& pipelineBuilder, 262 void GrDrawTarget::drawPathBatch(const GrPipelineBuilder& pipelineBuilder,
266 GrDrawPathBatchBase* batch, 263 GrDrawPathBatchBase* batch,
267 GrPathRendering::FillType fill) { 264 GrPathRendering::FillType fill) {
268 // This looks like drawBatch() but there is an added wrinkle that stencil se ttings get inserted 265 // This looks like drawBatch() but there is an added wrinkle that stencil se ttings get inserted
269 // after setting up clipping but before onDrawBatch(). TODO: Figure out a be tter model for 266 // after setting up clipping but before onDrawBatch(). TODO: Figure out a be tter model for
270 // handling stencil settings WRT interactions between pipeline(builder), cli pmaskmanager, and 267 // handling stencil settings WRT interactions between pipeline(builder), cli pmaskmanager, and
271 // batches. 268 // batches.
272 269
273 GrScissorState scissorState;
274 GrPipelineBuilder::AutoRestoreStencil ars; 270 GrPipelineBuilder::AutoRestoreStencil ars;
275 GrAppliedClip clip; 271 GrAppliedClip clip;
276 if (!fClipMaskManager->setupClipping(pipelineBuilder, &ars, &scissorState, & batch->bounds(), 272 if (!fClipMaskManager->setupClipping(pipelineBuilder, &ars, &batch->bounds() , &clip)) {
277 &clip)) {
278 return; 273 return;
279 } 274 }
280 275
281 GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps; 276 GrPipelineBuilder::AutoRestoreFragmentProcessorState arfps;
282 if (clip.clipCoverageFragmentProcessor()) { 277 if (clip.clipCoverageFragmentProcessor()) {
283 arfps.set(&pipelineBuilder); 278 arfps.set(&pipelineBuilder);
284 arfps.addCoverageFragmentProcessor(clip.clipCoverageFragmentProcessor()) ; 279 arfps.addCoverageFragmentProcessor(clip.clipCoverageFragmentProcessor()) ;
285 } 280 }
286 281
287 // Ensure the render target has a stencil buffer and get the stencil setting s. 282 // Ensure the render target has a stencil buffer and get the stencil setting s.
288 GrStencilSettings stencilSettings; 283 GrStencilSettings stencilSettings;
289 GrRenderTarget* rt = pipelineBuilder.getRenderTarget(); 284 GrRenderTarget* rt = pipelineBuilder.getRenderTarget();
290 GrStencilAttachment* sb = fResourceProvider->attachStencilAttachment(rt); 285 GrStencilAttachment* sb = fResourceProvider->attachStencilAttachment(rt);
291 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings); 286 this->getPathStencilSettingsForFilltype(fill, sb, &stencilSettings);
292 batch->setStencilSettings(stencilSettings); 287 batch->setStencilSettings(stencilSettings);
293 288
294 GrPipeline::CreateArgs args; 289 GrPipeline::CreateArgs args;
295 if (!this->installPipelineInDrawBatch(&pipelineBuilder, &scissorState, batch )) { 290 if (!this->installPipelineInDrawBatch(&pipelineBuilder, &clip.scissorState() , batch)) {
296 return; 291 return;
297 } 292 }
298 293
299 this->recordBatch(batch); 294 this->recordBatch(batch);
300 } 295 }
301 296
302 void GrDrawTarget::drawNonAARect(const GrPipelineBuilder& pipelineBuilder, 297 void GrDrawTarget::drawNonAARect(const GrPipelineBuilder& pipelineBuilder,
303 GrColor color, 298 GrColor color,
304 const SkMatrix& viewMatrix, 299 const SkMatrix& viewMatrix,
305 const SkRect& rect) { 300 const SkRect& rect) {
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
479 } 474 }
480 475
481 return true; 476 return true;
482 } 477 }
483 478
484 void GrDrawTarget::clearStencilClip(const SkIRect& rect, bool insideClip, GrRend erTarget* rt) { 479 void GrDrawTarget::clearStencilClip(const SkIRect& rect, bool insideClip, GrRend erTarget* rt) {
485 GrBatch* batch = new GrClearStencilClipBatch(rect, insideClip, rt); 480 GrBatch* batch = new GrClearStencilClipBatch(rect, insideClip, rt);
486 this->recordBatch(batch); 481 this->recordBatch(batch);
487 batch->unref(); 482 batch->unref();
488 } 483 }
OLDNEW
« src/gpu/GrClipMaskManager.h ('K') | « src/gpu/GrClipMaskManager.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698