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

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

Issue 1485973004: Reduce use of GrRenderTarget in GrTextContexts (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebased to ToT Created 5 years 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
« no previous file with comments | « no previous file | 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 2015 Google Inc. 3 * Copyright 2015 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 "GrAtlasTextContext.h" 9 #include "GrAtlasTextContext.h"
10 #include "GrBatchTest.h" 10 #include "GrBatchTest.h"
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 const SkRect& rect, 241 const SkRect& rect,
242 const GrStrokeInfo* strokeInfo) { 242 const GrStrokeInfo* strokeInfo) {
243 RETURN_IF_ABANDONED 243 RETURN_IF_ABANDONED
244 SkDEBUGCODE(this->validate();) 244 SkDEBUGCODE(this->validate();)
245 245
246 // Dashing should've been devolved to a path in SkGpuDevice 246 // Dashing should've been devolved to a path in SkGpuDevice
247 SkASSERT(!strokeInfo || !strokeInfo->isDashed()); 247 SkASSERT(!strokeInfo || !strokeInfo->isDashed());
248 248
249 AutoCheckFlush acf(fDrawingManager); 249 AutoCheckFlush acf(fDrawingManager);
250 250
251 GrPipelineBuilder pipelineBuilder(paint, fRenderTarget, clip);
252
253 SkScalar width = nullptr == strokeInfo ? -1 : strokeInfo->getWidth(); 251 SkScalar width = nullptr == strokeInfo ? -1 : strokeInfo->getWidth();
254 252
255 // Check if this is a full RT draw and can be replaced with a clear. We don' t bother checking 253 // Check if this is a full RT draw and can be replaced with a clear. We don' t bother checking
256 // cases where the RT is fully inside a stroke. 254 // cases where the RT is fully inside a stroke.
257 if (width < 0) { 255 if (width < 0) {
258 SkRect rtRect; 256 SkRect rtRect;
259 pipelineBuilder.getRenderTarget()->getBoundsRect(&rtRect); 257 fRenderTarget->getBoundsRect(&rtRect);
260 SkRect clipSpaceRTRect = rtRect; 258 SkRect clipSpaceRTRect = rtRect;
261 bool checkClip = GrClip::kWideOpen_ClipType != clip.clipType(); 259 bool checkClip = GrClip::kWideOpen_ClipType != clip.clipType();
262 if (checkClip) { 260 if (checkClip) {
263 clipSpaceRTRect.offset(SkIntToScalar(clip.origin().fX), 261 clipSpaceRTRect.offset(SkIntToScalar(clip.origin().fX),
264 SkIntToScalar(clip.origin().fY)); 262 SkIntToScalar(clip.origin().fY));
265 } 263 }
266 // Does the clip contain the entire RT? 264 // Does the clip contain the entire RT?
267 if (!checkClip || clip.quickContains(clipSpaceRTRect)) { 265 if (!checkClip || clip.quickContains(clipSpaceRTRect)) {
268 SkMatrix invM; 266 SkMatrix invM;
269 if (!viewMatrix.invert(&invM)) { 267 if (!viewMatrix.invert(&invM)) {
(...skipping 10 matching lines...) Expand all
280 GrColor clearColor; 278 GrColor clearColor;
281 if (paint.isConstantBlendedColor(&clearColor)) { 279 if (paint.isConstantBlendedColor(&clearColor)) {
282 this->getDrawTarget()->clear(nullptr, clearColor, true, fRen derTarget); 280 this->getDrawTarget()->clear(nullptr, clearColor, true, fRen derTarget);
283 return; 281 return;
284 } 282 }
285 } 283 }
286 } 284 }
287 } 285 }
288 286
289 GrColor color = paint.getColor(); 287 GrColor color = paint.getColor();
290 bool needAA = should_apply_coverage_aa(paint, pipelineBuilder.getRenderTarge t()); 288 bool needAA = should_apply_coverage_aa(paint, fRenderTarget);
291 289
292 // The fill path can handle rotation but not skew 290 // The fill path can handle rotation but not skew
293 // The stroke path needs the rect to remain axis aligned (no rotation or ske w) 291 // The stroke path needs the rect to remain axis aligned (no rotation or ske w)
294 // None of our AA draw rect calls can handle perspective yet 292 // None of our AA draw rect calls can handle perspective yet
295 bool canApplyAA = width >=0 ? viewMatrix.rectStaysRect() : 293 bool canApplyAA = width >=0 ? viewMatrix.rectStaysRect() :
296 view_matrix_ok_for_aa_fill_rect(viewMatrix); 294 view_matrix_ok_for_aa_fill_rect(viewMatrix);
297 295
296 GrPipelineBuilder pipelineBuilder(paint, fRenderTarget, clip);
297
298 if (needAA && canApplyAA) { 298 if (needAA && canApplyAA) {
299 SkASSERT(!viewMatrix.hasPerspective()); 299 SkASSERT(!viewMatrix.hasPerspective());
300 SkAutoTUnref<GrDrawBatch> batch; 300 SkAutoTUnref<GrDrawBatch> batch;
301 if (width >= 0) { 301 if (width >= 0) {
302 batch.reset(GrRectBatchFactory::CreateAAStroke(color, viewMatrix, re ct, *strokeInfo)); 302 batch.reset(GrRectBatchFactory::CreateAAStroke(color, viewMatrix, re ct, *strokeInfo));
303 } else { 303 } else {
304 SkRect devBoundRect; 304 SkRect devBoundRect;
305 viewMatrix.mapRect(&devBoundRect, rect); 305 viewMatrix.mapRect(&devBoundRect, rect);
306 batch.reset(GrRectBatchFactory::CreateAAFill(color, viewMatrix, rect , devBoundRect)); 306 batch.reset(GrRectBatchFactory::CreateAAFill(color, viewMatrix, rect , devBoundRect));
307 } 307 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 const GrPaint& paint, 358 const GrPaint& paint,
359 const SkMatrix& viewMatrix, 359 const SkMatrix& viewMatrix,
360 const SkRect& rectToDraw, 360 const SkRect& rectToDraw,
361 const SkMatrix& localMatrix) { 361 const SkMatrix& localMatrix) {
362 RETURN_IF_ABANDONED 362 RETURN_IF_ABANDONED
363 SkDEBUGCODE(this->validate();) 363 SkDEBUGCODE(this->validate();)
364 364
365 AutoCheckFlush acf(fDrawingManager); 365 AutoCheckFlush acf(fDrawingManager);
366 366
367 GrPipelineBuilder pipelineBuilder(paint, fRenderTarget, clip); 367 GrPipelineBuilder pipelineBuilder(paint, fRenderTarget, clip);
368 if (should_apply_coverage_aa(paint, pipelineBuilder.getRenderTarget()) && 368
369 if (should_apply_coverage_aa(paint, fRenderTarget) &&
369 view_matrix_ok_for_aa_fill_rect(viewMatrix)) { 370 view_matrix_ok_for_aa_fill_rect(viewMatrix)) {
370 SkAutoTUnref<GrDrawBatch> batch(GrAAFillRectBatch::Create( 371 SkAutoTUnref<GrDrawBatch> batch(GrAAFillRectBatch::Create(
371 paint.getColor(), viewMatrix, localMatrix, rectToDraw)); 372 paint.getColor(), viewMatrix, localMatrix, rectToDraw));
372 this->drawBatch(&pipelineBuilder, batch); 373 this->drawBatch(&pipelineBuilder, batch);
373 } else { 374 } else {
374 this->getDrawTarget()->drawNonAARect(pipelineBuilder, 375 this->getDrawTarget()->drawNonAARect(pipelineBuilder,
375 paint.getColor(), 376 paint.getColor(),
376 viewMatrix, 377 viewMatrix,
377 rectToDraw, 378 rectToDraw,
378 localMatrix); 379 localMatrix);
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after
796 args.fAntiAlias = useCoverageAA; 797 args.fAntiAlias = useCoverageAA;
797 pr->drawPath(args); 798 pr->drawPath(args);
798 } 799 }
799 800
800 void GrDrawContext::drawBatch(GrPipelineBuilder* pipelineBuilder, GrDrawBatch* b atch) { 801 void GrDrawContext::drawBatch(GrPipelineBuilder* pipelineBuilder, GrDrawBatch* b atch) {
801 RETURN_IF_ABANDONED 802 RETURN_IF_ABANDONED
802 SkDEBUGCODE(this->validate();) 803 SkDEBUGCODE(this->validate();)
803 804
804 this->getDrawTarget()->drawBatch(*pipelineBuilder, batch); 805 this->getDrawTarget()->drawBatch(*pipelineBuilder, batch);
805 } 806 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698