| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "GrBatchTest.h" | 8 #include "GrBatchTest.h" |
| 9 #include "GrColor.h" | 9 #include "GrColor.h" |
| 10 #include "GrDrawContext.h" | 10 #include "GrDrawContext.h" |
| (...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 294 AutoCheckFlush acf(fDrawingManager); | 294 AutoCheckFlush acf(fDrawingManager); |
| 295 | 295 |
| 296 const SkStrokeRec& stroke = style->strokeRec(); | 296 const SkStrokeRec& stroke = style->strokeRec(); |
| 297 SkScalar width = stroke.getWidth(); | 297 SkScalar width = stroke.getWidth(); |
| 298 | 298 |
| 299 // Check if this is a full RT draw and can be replaced with a clear. We don'
t bother checking | 299 // Check if this is a full RT draw and can be replaced with a clear. We don'
t bother checking |
| 300 // cases where the RT is fully inside a stroke. | 300 // cases where the RT is fully inside a stroke. |
| 301 if (width < 0) { | 301 if (width < 0) { |
| 302 SkRect rtRect; | 302 SkRect rtRect; |
| 303 fRenderTarget->getBoundsRect(&rtRect); | 303 fRenderTarget->getBoundsRect(&rtRect); |
| 304 SkRect clipSpaceRTRect = rtRect; | |
| 305 bool checkClip = GrClip::kWideOpen_ClipType != clip.clipType(); | |
| 306 if (checkClip) { | |
| 307 clipSpaceRTRect.offset(SkIntToScalar(clip.origin().fX), | |
| 308 SkIntToScalar(clip.origin().fY)); | |
| 309 } | |
| 310 // Does the clip contain the entire RT? | 304 // Does the clip contain the entire RT? |
| 311 if (!checkClip || clip.quickContains(clipSpaceRTRect)) { | 305 if (clip.quickContains(rtRect)) { |
| 312 SkMatrix invM; | 306 SkMatrix invM; |
| 313 if (!viewMatrix.invert(&invM)) { | 307 if (!viewMatrix.invert(&invM)) { |
| 314 return; | 308 return; |
| 315 } | 309 } |
| 316 // Does the rect bound the RT? | 310 // Does the rect bound the RT? |
| 317 SkPoint srcSpaceRTQuad[4]; | 311 SkPoint srcSpaceRTQuad[4]; |
| 318 invM.mapRectToQuad(srcSpaceRTQuad, rtRect); | 312 invM.mapRectToQuad(srcSpaceRTQuad, rtRect); |
| 319 if (rect_contains_inclusive(rect, srcSpaceRTQuad[0]) && | 313 if (rect_contains_inclusive(rect, srcSpaceRTQuad[0]) && |
| 320 rect_contains_inclusive(rect, srcSpaceRTQuad[1]) && | 314 rect_contains_inclusive(rect, srcSpaceRTQuad[1]) && |
| 321 rect_contains_inclusive(rect, srcSpaceRTQuad[2]) && | 315 rect_contains_inclusive(rect, srcSpaceRTQuad[2]) && |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 367 this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 361 this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); |
| 368 return; | 362 return; |
| 369 } | 363 } |
| 370 | 364 |
| 371 SkPath path; | 365 SkPath path; |
| 372 path.setIsVolatile(true); | 366 path.setIsVolatile(true); |
| 373 path.addRect(rect); | 367 path.addRect(rect); |
| 374 this->internalDrawPath(clip, paint, viewMatrix, path, *style); | 368 this->internalDrawPath(clip, paint, viewMatrix, path, *style); |
| 375 } | 369 } |
| 376 | 370 |
| 377 bool GrDrawContextPriv::drawAndStencilRect(const GrClip& clip, | 371 bool GrDrawContextPriv::drawAndStencilRect(const GrFixedClip& clip, |
| 378 const GrUserStencilSettings* ss, | 372 const GrUserStencilSettings* ss, |
| 379 SkRegion::Op op, | 373 SkRegion::Op op, |
| 380 bool invert, | 374 bool invert, |
| 381 bool doAA, | 375 bool doAA, |
| 382 const SkMatrix& viewMatrix, | 376 const SkMatrix& viewMatrix, |
| 383 const SkRect& rect) { | 377 const SkRect& rect) { |
| 384 ASSERT_SINGLE_OWNER_PRIV | 378 ASSERT_SINGLE_OWNER_PRIV |
| 385 RETURN_FALSE_IF_ABANDONED_PRIV | 379 RETURN_FALSE_IF_ABANDONED_PRIV |
| 386 SkDEBUGCODE(fDrawContext->validate();) | 380 SkDEBUGCODE(fDrawContext->validate();) |
| 387 GR_AUDIT_TRAIL_AUTO_FRAME(fDrawContext->fAuditTrail, "GrDrawContext::stencil
Rect"); | 381 GR_AUDIT_TRAIL_AUTO_FRAME(fDrawContext->fAuditTrail, "GrDrawContext::stencil
Rect"); |
| (...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 832 } | 826 } |
| 833 | 827 |
| 834 // Note that internalDrawPath may sw-rasterize the path into a scratch textu
re. | 828 // Note that internalDrawPath may sw-rasterize the path into a scratch textu
re. |
| 835 // Scratch textures can be recycled after they are returned to the texture | 829 // Scratch textures can be recycled after they are returned to the texture |
| 836 // cache. This presents a potential hazard for buffered drawing. However, | 830 // cache. This presents a potential hazard for buffered drawing. However, |
| 837 // the writePixels that uploads to the scratch will perform a flush so we're | 831 // the writePixels that uploads to the scratch will perform a flush so we're |
| 838 // OK. | 832 // OK. |
| 839 this->internalDrawPath(clip, paint, viewMatrix, path, style); | 833 this->internalDrawPath(clip, paint, viewMatrix, path, style); |
| 840 } | 834 } |
| 841 | 835 |
| 842 bool GrDrawContextPriv::drawAndStencilPath(const GrClip& clip, | 836 bool GrDrawContextPriv::drawAndStencilPath(const GrFixedClip& clip, |
| 843 const GrUserStencilSettings* ss, | 837 const GrUserStencilSettings* ss, |
| 844 SkRegion::Op op, | 838 SkRegion::Op op, |
| 845 bool invert, | 839 bool invert, |
| 846 bool doAA, | 840 bool doAA, |
| 847 const SkMatrix& viewMatrix, | 841 const SkMatrix& viewMatrix, |
| 848 const SkPath& path) { | 842 const SkPath& path) { |
| 849 ASSERT_SINGLE_OWNER_PRIV | 843 ASSERT_SINGLE_OWNER_PRIV |
| 850 RETURN_FALSE_IF_ABANDONED_PRIV | 844 RETURN_FALSE_IF_ABANDONED_PRIV |
| 851 SkDEBUGCODE(fDrawContext->validate();) | 845 SkDEBUGCODE(fDrawContext->validate();) |
| 852 GR_AUDIT_TRAIL_AUTO_FRAME(fDrawContext->fAuditTrail, "GrDrawContext::drawPat
h"); | 846 GR_AUDIT_TRAIL_AUTO_FRAME(fDrawContext->fAuditTrail, "GrDrawContext::drawPat
h"); |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1014 | 1008 |
| 1015 void GrDrawContext::drawBatch(GrPipelineBuilder* pipelineBuilder, const GrClip&
clip, | 1009 void GrDrawContext::drawBatch(GrPipelineBuilder* pipelineBuilder, const GrClip&
clip, |
| 1016 GrDrawBatch* batch) { | 1010 GrDrawBatch* batch) { |
| 1017 ASSERT_SINGLE_OWNER | 1011 ASSERT_SINGLE_OWNER |
| 1018 RETURN_IF_ABANDONED | 1012 RETURN_IF_ABANDONED |
| 1019 SkDEBUGCODE(this->validate();) | 1013 SkDEBUGCODE(this->validate();) |
| 1020 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawBatch"); | 1014 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawBatch"); |
| 1021 | 1015 |
| 1022 this->getDrawTarget()->drawBatch(*pipelineBuilder, clip, batch); | 1016 this->getDrawTarget()->drawBatch(*pipelineBuilder, clip, batch); |
| 1023 } | 1017 } |
| OLD | NEW |