| OLD | NEW |
| 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 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 SkDebugf("Could not invert matrix\n"); | 188 SkDebugf("Could not invert matrix\n"); |
| 189 return; | 189 return; |
| 190 } | 190 } |
| 191 | 191 |
| 192 AutoCheckFlush acf(fContext); | 192 AutoCheckFlush acf(fContext); |
| 193 if (!this->prepareToDraw(rt)) { | 193 if (!this->prepareToDraw(rt)) { |
| 194 return; | 194 return; |
| 195 } | 195 } |
| 196 | 196 |
| 197 GrPipelineBuilder pipelineBuilder(*paint, rt, clip); | 197 GrPipelineBuilder pipelineBuilder(*paint, rt, clip); |
| 198 fDrawTarget->drawBWRect(pipelineBuilder, | 198 fDrawTarget->drawNonAARect(pipelineBuilder, |
| 199 paint->getColor(), | 199 paint->getColor(), |
| 200 SkMatrix::I(), | 200 SkMatrix::I(), |
| 201 r, | 201 r, |
| 202 localMatrix); | 202 localMatrix); |
| 203 } | 203 } |
| 204 } | 204 } |
| 205 | 205 |
| 206 static inline bool rect_contains_inclusive(const SkRect& rect, const SkPoint& po
int) { | 206 static inline bool rect_contains_inclusive(const SkRect& rect, const SkPoint& po
int) { |
| 207 return point.fX >= rect.fLeft && point.fX <= rect.fRight && | 207 return point.fX >= rect.fLeft && point.fX <= rect.fRight && |
| 208 point.fY >= rect.fTop && point.fY <= rect.fBottom; | 208 point.fY >= rect.fTop && point.fY <= rect.fBottom; |
| 209 } | 209 } |
| 210 | 210 |
| 211 void GrDrawContext::drawRect(GrRenderTarget* rt, | 211 void GrDrawContext::drawRect(GrRenderTarget* rt, |
| 212 const GrClip& clip, | 212 const GrClip& clip, |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 274 // The stroke path needs the rect to remain axis aligned (no rotation or ske
w) | 274 // The stroke path needs the rect to remain axis aligned (no rotation or ske
w) |
| 275 // None of our draw rect calls can handle perspective yet | 275 // None of our draw rect calls can handle perspective yet |
| 276 SkASSERT(!viewMatrix.hasPerspective()); | 276 SkASSERT(!viewMatrix.hasPerspective()); |
| 277 bool canApplyAA = width >=0 ? viewMatrix.rectStaysRect() : viewMatrix.preser
vesRightAngles(); | 277 bool canApplyAA = width >=0 ? viewMatrix.rectStaysRect() : viewMatrix.preser
vesRightAngles(); |
| 278 | 278 |
| 279 if (needAA && canApplyAA) { | 279 if (needAA && canApplyAA) { |
| 280 SkRect devBoundRect; | 280 SkRect devBoundRect; |
| 281 viewMatrix.mapRect(&devBoundRect, rect); | 281 viewMatrix.mapRect(&devBoundRect, rect); |
| 282 SkAutoTUnref<GrDrawBatch> batch; | 282 SkAutoTUnref<GrDrawBatch> batch; |
| 283 if (width >= 0) { | 283 if (width >= 0) { |
| 284 batch.reset(GrRectBatchFactory::CreateStrokeAA(color, viewMatrix, re
ct, devBoundRect, | 284 batch.reset(GrRectBatchFactory::CreateAAStroke(color, viewMatrix, re
ct, devBoundRect, |
| 285 *strokeInfo)); | 285 *strokeInfo)); |
| 286 } else { | 286 } else { |
| 287 batch.reset(GrRectBatchFactory::CreateFillAA(color, viewMatrix, rect
, devBoundRect)); | 287 batch.reset(GrRectBatchFactory::CreateAAFill(color, viewMatrix, rect
, devBoundRect)); |
| 288 } | 288 } |
| 289 fDrawTarget->drawBatch(pipelineBuilder, batch); | 289 fDrawTarget->drawBatch(pipelineBuilder, batch); |
| 290 return; | 290 return; |
| 291 } | 291 } |
| 292 | 292 |
| 293 if (width >= 0) { | 293 if (width >= 0) { |
| 294 // Non-AA hairlines are snapped to pixel centers to make which pixels ar
e hit deterministic | 294 // Non-AA hairlines are snapped to pixel centers to make which pixels ar
e hit deterministic |
| 295 bool snapToPixelCenters = (0 == width && !rt->isUnifiedMultisampled()); | 295 bool snapToPixelCenters = (0 == width && !rt->isUnifiedMultisampled()); |
| 296 SkAutoTUnref<GrDrawBatch> batch(GrRectBatchFactory::CreateStrokeBW( | 296 SkAutoTUnref<GrDrawBatch> batch(GrRectBatchFactory::CreateNonAAStroke( |
| 297 color, viewMatrix, rect, width, snapToPi
xelCenters)); | 297 color, viewMatrix, rect, width, snapToPi
xelCenters)); |
| 298 | 298 |
| 299 // Depending on sub-pixel coordinates and the particular GPU, we may los
e a corner of | 299 // Depending on sub-pixel coordinates and the particular GPU, we may los
e a corner of |
| 300 // hairline rects. We jam all the vertices to pixel centers to avoid thi
s, but not when MSAA | 300 // hairline rects. We jam all the vertices to pixel centers to avoid thi
s, but not when MSAA |
| 301 // is enabled because it can cause ugly artifacts. | 301 // is enabled because it can cause ugly artifacts. |
| 302 pipelineBuilder.setState(GrPipelineBuilder::kSnapVerticesToPixelCenters_
Flag, | 302 pipelineBuilder.setState(GrPipelineBuilder::kSnapVerticesToPixelCenters_
Flag, |
| 303 snapToPixelCenters); | 303 snapToPixelCenters); |
| 304 fDrawTarget->drawBatch(pipelineBuilder, batch); | 304 fDrawTarget->drawBatch(pipelineBuilder, batch); |
| 305 } else { | 305 } else { |
| 306 // filled BW rect | 306 // filled BW rect |
| 307 fDrawTarget->drawBWRect(pipelineBuilder, color, viewMatrix, rect); | 307 fDrawTarget->drawNonAARect(pipelineBuilder, color, viewMatrix, rect); |
| 308 } | 308 } |
| 309 } | 309 } |
| 310 | 310 |
| 311 void GrDrawContext::drawNonAARectToRect(GrRenderTarget* rt, | 311 void GrDrawContext::drawNonAARectToRect(GrRenderTarget* rt, |
| 312 const GrClip& clip, | 312 const GrClip& clip, |
| 313 const GrPaint& paint, | 313 const GrPaint& paint, |
| 314 const SkMatrix& viewMatrix, | 314 const SkMatrix& viewMatrix, |
| 315 const SkRect& rectToDraw, | 315 const SkRect& rectToDraw, |
| 316 const SkRect& localRect) { | 316 const SkRect& localRect) { |
| 317 RETURN_IF_ABANDONED | 317 RETURN_IF_ABANDONED |
| 318 AutoCheckFlush acf(fContext); | 318 AutoCheckFlush acf(fContext); |
| 319 if (!this->prepareToDraw(rt)) { | 319 if (!this->prepareToDraw(rt)) { |
| 320 return; | 320 return; |
| 321 } | 321 } |
| 322 | 322 |
| 323 GrPipelineBuilder pipelineBuilder(paint, rt, clip); | 323 GrPipelineBuilder pipelineBuilder(paint, rt, clip); |
| 324 fDrawTarget->drawBWRect(pipelineBuilder, | 324 fDrawTarget->drawNonAARect(pipelineBuilder, |
| 325 paint.getColor(), | 325 paint.getColor(), |
| 326 viewMatrix, | 326 viewMatrix, |
| 327 rectToDraw, | 327 rectToDraw, |
| 328 localRect); | 328 localRect); |
| 329 } | 329 } |
| 330 | 330 |
| 331 void GrDrawContext::drawNonAARectWithLocalMatrix(GrRenderTarget* rt, | 331 void GrDrawContext::drawNonAARectWithLocalMatrix(GrRenderTarget* rt, |
| 332 const GrClip& clip, | 332 const GrClip& clip, |
| 333 const GrPaint& paint, | 333 const GrPaint& paint, |
| 334 const SkMatrix& viewMatrix, | 334 const SkMatrix& viewMatrix, |
| 335 const SkRect& rectToDraw, | 335 const SkRect& rectToDraw, |
| 336 const SkMatrix& localMatrix) { | 336 const SkMatrix& localMatrix) { |
| 337 RETURN_IF_ABANDONED | 337 RETURN_IF_ABANDONED |
| 338 AutoCheckFlush acf(fContext); | 338 AutoCheckFlush acf(fContext); |
| 339 if (!this->prepareToDraw(rt)) { | 339 if (!this->prepareToDraw(rt)) { |
| 340 return; | 340 return; |
| 341 } | 341 } |
| 342 | 342 |
| 343 GrPipelineBuilder pipelineBuilder(paint, rt, clip); | 343 GrPipelineBuilder pipelineBuilder(paint, rt, clip); |
| 344 fDrawTarget->drawBWRect(pipelineBuilder, | 344 fDrawTarget->drawNonAARect(pipelineBuilder, |
| 345 paint.getColor(), | 345 paint.getColor(), |
| 346 viewMatrix, | 346 viewMatrix, |
| 347 rectToDraw, | 347 rectToDraw, |
| 348 localMatrix); | 348 localMatrix); |
| 349 } | 349 } |
| 350 | 350 |
| 351 void GrDrawContext::drawVertices(GrRenderTarget* rt, | 351 void GrDrawContext::drawVertices(GrRenderTarget* rt, |
| 352 const GrClip& clip, | 352 const GrClip& clip, |
| 353 const GrPaint& paint, | 353 const GrPaint& paint, |
| 354 const SkMatrix& viewMatrix, | 354 const SkMatrix& viewMatrix, |
| 355 GrPrimitiveType primitiveType, | 355 GrPrimitiveType primitiveType, |
| 356 int vertexCount, | 356 int vertexCount, |
| 357 const SkPoint positions[], | 357 const SkPoint positions[], |
| 358 const SkPoint texCoords[], | 358 const SkPoint texCoords[], |
| (...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 635 GrPipelineBuilder pipelineBuilder(paint, rt, clip); | 635 GrPipelineBuilder pipelineBuilder(paint, rt, clip); |
| 636 if (!strokeInfo.isDashed()) { | 636 if (!strokeInfo.isDashed()) { |
| 637 bool useCoverageAA = paint.isAntiAlias() && | 637 bool useCoverageAA = paint.isAntiAlias() && |
| 638 !pipelineBuilder.getRenderTarget()->isUnifiedMultisampled(); | 638 !pipelineBuilder.getRenderTarget()->isUnifiedMultisampled(); |
| 639 | 639 |
| 640 if (useCoverageAA && strokeInfo.getWidth() < 0 && !path.isConvex()) { | 640 if (useCoverageAA && strokeInfo.getWidth() < 0 && !path.isConvex()) { |
| 641 // Concave AA paths are expensive - try to avoid them for special ca
ses | 641 // Concave AA paths are expensive - try to avoid them for special ca
ses |
| 642 SkRect rects[2]; | 642 SkRect rects[2]; |
| 643 | 643 |
| 644 if (is_nested_rects(viewMatrix, path, strokeInfo, rects)) { | 644 if (is_nested_rects(viewMatrix, path, strokeInfo, rects)) { |
| 645 SkAutoTUnref<GrDrawBatch> batch(GrRectBatchFactory::CreateFillNe
stedRectsAA( | 645 SkAutoTUnref<GrDrawBatch> batch(GrRectBatchFactory::CreateAAFill
NestedRects( |
| 646 color, viewMatrix, rects)); | 646 color, viewMatrix, rects)); |
| 647 fDrawTarget->drawBatch(pipelineBuilder, batch); | 647 fDrawTarget->drawBatch(pipelineBuilder, batch); |
| 648 return; | 648 return; |
| 649 } | 649 } |
| 650 } | 650 } |
| 651 SkRect ovalRect; | 651 SkRect ovalRect; |
| 652 bool isOval = path.isOval(&ovalRect); | 652 bool isOval = path.isOval(&ovalRect); |
| 653 | 653 |
| 654 if (isOval && !path.isInverseFillType()) { | 654 if (isOval && !path.isInverseFillType()) { |
| 655 if (GrOvalRenderer::DrawOval(fDrawTarget, | 655 if (GrOvalRenderer::DrawOval(fDrawTarget, |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 760 RETURN_FALSE_IF_ABANDONED | 760 RETURN_FALSE_IF_ABANDONED |
| 761 | 761 |
| 762 ASSERT_OWNED_RESOURCE(rt); | 762 ASSERT_OWNED_RESOURCE(rt); |
| 763 SkASSERT(rt); | 763 SkASSERT(rt); |
| 764 return true; | 764 return true; |
| 765 } | 765 } |
| 766 | 766 |
| 767 void GrDrawContext::drawBatch(GrPipelineBuilder* pipelineBuilder, GrDrawBatch* b
atch) { | 767 void GrDrawContext::drawBatch(GrPipelineBuilder* pipelineBuilder, GrDrawBatch* b
atch) { |
| 768 fDrawTarget->drawBatch(*pipelineBuilder, batch); | 768 fDrawTarget->drawBatch(*pipelineBuilder, batch); |
| 769 } | 769 } |
| OLD | NEW |