| 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 221 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   232         if (!viewMatrix.invert(&localMatrix)) { |   232         if (!viewMatrix.invert(&localMatrix)) { | 
|   233             SkDebugf("Could not invert matrix\n"); |   233             SkDebugf("Could not invert matrix\n"); | 
|   234             return; |   234             return; | 
|   235         } |   235         } | 
|   236  |   236  | 
|   237         AutoCheckFlush acf(fDrawingManager); |   237         AutoCheckFlush acf(fDrawingManager); | 
|   238  |   238  | 
|   239         SkAutoTUnref<GrDrawBatch> batch( |   239         SkAutoTUnref<GrDrawBatch> batch( | 
|   240                 GrRectBatchFactory::CreateNonAAFill(paint->getColor(), SkMatrix:
      :I(), r, nullptr, |   240                 GrRectBatchFactory::CreateNonAAFill(paint->getColor(), SkMatrix:
      :I(), r, nullptr, | 
|   241                                                     &localMatrix)); |   241                                                     &localMatrix)); | 
|   242         GrPipelineBuilder pipelineBuilder(*paint, fRenderTarget.get()); |   242         GrPipelineBuilder pipelineBuilder(*paint, this->isUnifiedMultisampled())
      ; | 
 |   243         pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 
|   243         this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); |   244         this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 
|   244     } |   245     } | 
|   245 } |   246 } | 
|   246  |   247  | 
|   247 static inline bool rect_contains_inclusive(const SkRect& rect, const SkPoint& po
      int) { |   248 static inline bool rect_contains_inclusive(const SkRect& rect, const SkPoint& po
      int) { | 
|   248     return point.fX >= rect.fLeft && point.fX <= rect.fRight && |   249     return point.fX >= rect.fLeft && point.fX <= rect.fRight && | 
|   249            point.fY >= rect.fTop && point.fY <= rect.fBottom; |   250            point.fY >= rect.fTop && point.fY <= rect.fBottom; | 
|   250 } |   251 } | 
|   251  |   252  | 
|   252 static bool view_matrix_ok_for_aa_fill_rect(const SkMatrix& viewMatrix) { |   253 static bool view_matrix_ok_for_aa_fill_rect(const SkMatrix& viewMatrix) { | 
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   348             batch.reset(GrRectBatchFactory::CreateNonAAStroke(color, viewMatrix,
       rect, |   349             batch.reset(GrRectBatchFactory::CreateNonAAStroke(color, viewMatrix,
       rect, | 
|   349                                                               width, snapToPixel
      Centers)); |   350                                                               width, snapToPixel
      Centers)); | 
|   350  |   351  | 
|   351             // Depending on sub-pixel coordinates and the particular GPU, we may
       lose a corner of |   352             // Depending on sub-pixel coordinates and the particular GPU, we may
       lose a corner of | 
|   352             // hairline rects. We jam all the vertices to pixel centers to avoid
       this, but not |   353             // hairline rects. We jam all the vertices to pixel centers to avoid
       this, but not | 
|   353             // when MSAA is enabled because it can cause ugly artifacts. |   354             // when MSAA is enabled because it can cause ugly artifacts. | 
|   354         } |   355         } | 
|   355     } |   356     } | 
|   356  |   357  | 
|   357     if (batch) { |   358     if (batch) { | 
|   358         GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); |   359         GrPipelineBuilder pipelineBuilder(paint,  this->isUnifiedMultisampled())
      ; | 
 |   360         pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 
|   359  |   361  | 
|   360         if (snapToPixelCenters) { |   362         if (snapToPixelCenters) { | 
|   361             pipelineBuilder.setState(GrPipelineBuilder::kSnapVerticesToPixelCent
      ers_Flag, |   363             pipelineBuilder.setState(GrPipelineBuilder::kSnapVerticesToPixelCent
      ers_Flag, | 
|   362                                      snapToPixelCenters); |   364                                      snapToPixelCenters); | 
|   363         } |   365         } | 
|   364  |   366  | 
|   365         this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); |   367         this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 
|   366         return; |   368         return; | 
|   367     } |   369     } | 
|   368  |   370  | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
|   385     GR_AUDIT_TRAIL_AUTO_FRAME(fDrawContext->fAuditTrail, "GrDrawContext::stencil
      Rect"); |   387     GR_AUDIT_TRAIL_AUTO_FRAME(fDrawContext->fAuditTrail, "GrDrawContext::stencil
      Rect"); | 
|   386  |   388  | 
|   387     AutoCheckFlush acf(fDrawContext->fDrawingManager); |   389     AutoCheckFlush acf(fDrawContext->fDrawingManager); | 
|   388  |   390  | 
|   389     GrPaint paint; |   391     GrPaint paint; | 
|   390     paint.setAntiAlias(doAA); |   392     paint.setAntiAlias(doAA); | 
|   391     paint.setCoverageSetOpXPFactory(op, invert); |   393     paint.setCoverageSetOpXPFactory(op, invert); | 
|   392  |   394  | 
|   393     SkAutoTUnref<GrDrawBatch> batch(fDrawContext->getFillRectBatch(paint, viewMa
      trix, rect)); |   395     SkAutoTUnref<GrDrawBatch> batch(fDrawContext->getFillRectBatch(paint, viewMa
      trix, rect)); | 
|   394     if (batch) { |   396     if (batch) { | 
|   395         GrPipelineBuilder pipelineBuilder(paint, fDrawContext->accessRenderTarge
      t()); |   397         GrPipelineBuilder pipelineBuilder(paint, fDrawContext->isUnifiedMultisam
      pled()); | 
 |   398         pipelineBuilder.setRenderTarget(fDrawContext->accessRenderTarget()); | 
|   396         pipelineBuilder.setUserStencil(ss); |   399         pipelineBuilder.setUserStencil(ss); | 
|   397  |   400  | 
|   398         fDrawContext->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); |   401         fDrawContext->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 
|   399         return true; |   402         return true; | 
|   400     } |   403     } | 
|   401  |   404  | 
|   402     SkPath path; |   405     SkPath path; | 
|   403     path.setIsVolatile(true); |   406     path.setIsVolatile(true); | 
|   404     path.addRect(rect); |   407     path.addRect(rect); | 
|   405     return this->drawAndStencilPath(clip, ss, op, invert, doAA, viewMatrix, path
      ); |   408     return this->drawAndStencilPath(clip, ss, op, invert, doAA, viewMatrix, path
      ); | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
|   421     if (should_apply_coverage_aa(paint, fRenderTarget.get()) && |   424     if (should_apply_coverage_aa(paint, fRenderTarget.get()) && | 
|   422         view_matrix_ok_for_aa_fill_rect(viewMatrix)) { |   425         view_matrix_ok_for_aa_fill_rect(viewMatrix)) { | 
|   423         batch.reset(GrAAFillRectBatch::CreateWithLocalRect(paint.getColor(), vie
      wMatrix, rectToDraw, |   426         batch.reset(GrAAFillRectBatch::CreateWithLocalRect(paint.getColor(), vie
      wMatrix, rectToDraw, | 
|   424                                                            localRect)); |   427                                                            localRect)); | 
|   425     } else { |   428     } else { | 
|   426         batch.reset(GrRectBatchFactory::CreateNonAAFill(paint.getColor(), viewMa
      trix, rectToDraw, |   429         batch.reset(GrRectBatchFactory::CreateNonAAFill(paint.getColor(), viewMa
      trix, rectToDraw, | 
|   427                                                         &localRect, nullptr)); |   430                                                         &localRect, nullptr)); | 
|   428     } |   431     } | 
|   429  |   432  | 
|   430     if (batch) { |   433     if (batch) { | 
|   431         GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); |   434         GrPipelineBuilder pipelineBuilder(paint, this->isUnifiedMultisampled()); | 
 |   435         pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 
|   432         this->drawBatch(&pipelineBuilder, clip, batch); |   436         this->drawBatch(&pipelineBuilder, clip, batch); | 
|   433     } |   437     } | 
|   434 } |   438 } | 
|   435  |   439  | 
|   436 void GrDrawContext::fillRectWithLocalMatrix(const GrClip& clip, |   440 void GrDrawContext::fillRectWithLocalMatrix(const GrClip& clip, | 
|   437                                             const GrPaint& paint, |   441                                             const GrPaint& paint, | 
|   438                                             const SkMatrix& viewMatrix, |   442                                             const SkMatrix& viewMatrix, | 
|   439                                             const SkRect& rectToDraw, |   443                                             const SkRect& rectToDraw, | 
|   440                                             const SkMatrix& localMatrix) { |   444                                             const SkMatrix& localMatrix) { | 
|   441     ASSERT_SINGLE_OWNER |   445     ASSERT_SINGLE_OWNER | 
|   442     RETURN_IF_ABANDONED |   446     RETURN_IF_ABANDONED | 
|   443     SkDEBUGCODE(this->validate();) |   447     SkDEBUGCODE(this->validate();) | 
|   444     GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::fillRectWithLocalMatr
      ix"); |   448     GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::fillRectWithLocalMatr
      ix"); | 
|   445  |   449  | 
|   446     AutoCheckFlush acf(fDrawingManager); |   450     AutoCheckFlush acf(fDrawingManager); | 
|   447  |   451  | 
|   448     SkAutoTUnref<GrDrawBatch> batch; |   452     SkAutoTUnref<GrDrawBatch> batch; | 
|   449     if (should_apply_coverage_aa(paint, fRenderTarget.get()) && |   453     if (should_apply_coverage_aa(paint, fRenderTarget.get()) && | 
|   450         view_matrix_ok_for_aa_fill_rect(viewMatrix)) { |   454         view_matrix_ok_for_aa_fill_rect(viewMatrix)) { | 
|   451         batch.reset(GrAAFillRectBatch::Create(paint.getColor(), viewMatrix, loca
      lMatrix, |   455         batch.reset(GrAAFillRectBatch::Create(paint.getColor(), viewMatrix, loca
      lMatrix, | 
|   452                                               rectToDraw)); |   456                                               rectToDraw)); | 
|   453     } else { |   457     } else { | 
|   454         batch.reset(GrRectBatchFactory::CreateNonAAFill(paint.getColor(), viewMa
      trix, rectToDraw, |   458         batch.reset(GrRectBatchFactory::CreateNonAAFill(paint.getColor(), viewMa
      trix, rectToDraw, | 
|   455                                                         nullptr, &localMatrix)); |   459                                                         nullptr, &localMatrix)); | 
|   456     } |   460     } | 
|   457  |   461  | 
|   458     GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); |   462     GrPipelineBuilder pipelineBuilder(paint,  this->isUnifiedMultisampled()); | 
 |   463     pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 
|   459     this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); |   464     this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 
|   460 } |   465 } | 
|   461  |   466  | 
|   462 void GrDrawContext::drawVertices(const GrClip& clip, |   467 void GrDrawContext::drawVertices(const GrClip& clip, | 
|   463                                  const GrPaint& paint, |   468                                  const GrPaint& paint, | 
|   464                                  const SkMatrix& viewMatrix, |   469                                  const SkMatrix& viewMatrix, | 
|   465                                  GrPrimitiveType primitiveType, |   470                                  GrPrimitiveType primitiveType, | 
|   466                                  int vertexCount, |   471                                  int vertexCount, | 
|   467                                  const SkPoint positions[], |   472                                  const SkPoint positions[], | 
|   468                                  const SkPoint texCoords[], |   473                                  const SkPoint texCoords[], | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
|   493         bounds.outset(0.5f, 0.5f); |   498         bounds.outset(0.5f, 0.5f); | 
|   494     } |   499     } | 
|   495  |   500  | 
|   496     GrDrawVerticesBatch::Geometry geometry; |   501     GrDrawVerticesBatch::Geometry geometry; | 
|   497     geometry.fColor = paint.getColor(); |   502     geometry.fColor = paint.getColor(); | 
|   498     SkAutoTUnref<GrDrawBatch> batch(GrDrawVerticesBatch::Create(geometry, primit
      iveType, viewMatrix, |   503     SkAutoTUnref<GrDrawBatch> batch(GrDrawVerticesBatch::Create(geometry, primit
      iveType, viewMatrix, | 
|   499                                                                 positions, verte
      xCount, indices, |   504                                                                 positions, verte
      xCount, indices, | 
|   500                                                                 indexCount, colo
      rs, texCoords, |   505                                                                 indexCount, colo
      rs, texCoords, | 
|   501                                                                 bounds)); |   506                                                                 bounds)); | 
|   502  |   507  | 
|   503     GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); |   508     GrPipelineBuilder pipelineBuilder(paint,  this->isUnifiedMultisampled()); | 
 |   509     pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 
|   504     this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); |   510     this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 
|   505 } |   511 } | 
|   506  |   512  | 
|   507 /////////////////////////////////////////////////////////////////////////////// |   513 /////////////////////////////////////////////////////////////////////////////// | 
|   508  |   514  | 
|   509 void GrDrawContext::drawAtlas(const GrClip& clip, |   515 void GrDrawContext::drawAtlas(const GrClip& clip, | 
|   510                               const GrPaint& paint, |   516                               const GrPaint& paint, | 
|   511                               const SkMatrix& viewMatrix, |   517                               const SkMatrix& viewMatrix, | 
|   512                               int spriteCount, |   518                               int spriteCount, | 
|   513                               const SkRSXform xform[], |   519                               const SkRSXform xform[], | 
|   514                               const SkRect texRect[], |   520                               const SkRect texRect[], | 
|   515                               const SkColor colors[]) { |   521                               const SkColor colors[]) { | 
|   516     ASSERT_SINGLE_OWNER |   522     ASSERT_SINGLE_OWNER | 
|   517     RETURN_IF_ABANDONED |   523     RETURN_IF_ABANDONED | 
|   518     SkDEBUGCODE(this->validate();) |   524     SkDEBUGCODE(this->validate();) | 
|   519     GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawAtlas"); |   525     GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawAtlas"); | 
|   520  |   526  | 
|   521     AutoCheckFlush acf(fDrawingManager); |   527     AutoCheckFlush acf(fDrawingManager); | 
|   522  |   528  | 
|   523     GrDrawAtlasBatch::Geometry geometry; |   529     GrDrawAtlasBatch::Geometry geometry; | 
|   524     geometry.fColor = paint.getColor(); |   530     geometry.fColor = paint.getColor(); | 
|   525     SkAutoTUnref<GrDrawBatch> batch(GrDrawAtlasBatch::Create(geometry, viewMatri
      x, spriteCount, |   531     SkAutoTUnref<GrDrawBatch> batch(GrDrawAtlasBatch::Create(geometry, viewMatri
      x, spriteCount, | 
|   526                                                              xform, texRect, col
      ors)); |   532                                                              xform, texRect, col
      ors)); | 
|   527  |   533  | 
|   528     GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); |   534     GrPipelineBuilder pipelineBuilder(paint,  this->isUnifiedMultisampled()); | 
 |   535     pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 
|   529     this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); |   536     this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 
|   530 } |   537 } | 
|   531  |   538  | 
|   532 /////////////////////////////////////////////////////////////////////////////// |   539 /////////////////////////////////////////////////////////////////////////////// | 
|   533  |   540  | 
|   534 void GrDrawContext::drawRRect(const GrClip& clip, |   541 void GrDrawContext::drawRRect(const GrClip& clip, | 
|   535                               const GrPaint& paint, |   542                               const GrPaint& paint, | 
|   536                               const SkMatrix& viewMatrix, |   543                               const SkMatrix& viewMatrix, | 
|   537                               const SkRRect& rrect, |   544                               const SkRRect& rrect, | 
|   538                               const GrStyle& style) { |   545                               const GrStyle& style) { | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
|   551  |   558  | 
|   552     if (should_apply_coverage_aa(paint, fRenderTarget.get())) { |   559     if (should_apply_coverage_aa(paint, fRenderTarget.get())) { | 
|   553         GrShaderCaps* shaderCaps = fContext->caps()->shaderCaps(); |   560         GrShaderCaps* shaderCaps = fContext->caps()->shaderCaps(); | 
|   554  |   561  | 
|   555         SkAutoTUnref<GrDrawBatch> batch(GrOvalRenderer::CreateRRectBatch(paint.g
      etColor(), |   562         SkAutoTUnref<GrDrawBatch> batch(GrOvalRenderer::CreateRRectBatch(paint.g
      etColor(), | 
|   556                                                                          viewMat
      rix, |   563                                                                          viewMat
      rix, | 
|   557                                                                          rrect, |   564                                                                          rrect, | 
|   558                                                                          stroke, |   565                                                                          stroke, | 
|   559                                                                          shaderC
      aps)); |   566                                                                          shaderC
      aps)); | 
|   560         if (batch) { |   567         if (batch) { | 
|   561             GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); |   568             GrPipelineBuilder pipelineBuilder(paint,  this->isUnifiedMultisample
      d()); | 
 |   569             pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 
|   562             this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); |   570             this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 
|   563             return; |   571             return; | 
|   564         } |   572         } | 
|   565     } |   573     } | 
|   566  |   574  | 
|   567     SkPath path; |   575     SkPath path; | 
|   568     path.setIsVolatile(true); |   576     path.setIsVolatile(true); | 
|   569     path.addRRect(rrect); |   577     path.addRRect(rrect); | 
|   570     this->internalDrawPath(clip, paint, viewMatrix, path, style); |   578     this->internalDrawPath(clip, paint, viewMatrix, path, style); | 
|   571 } |   579 } | 
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   676     AutoCheckFlush acf(fDrawingManager); |   684     AutoCheckFlush acf(fDrawingManager); | 
|   677     const SkStrokeRec& stroke = style.strokeRec(); |   685     const SkStrokeRec& stroke = style.strokeRec(); | 
|   678     if (should_apply_coverage_aa(paint, fRenderTarget.get())) { |   686     if (should_apply_coverage_aa(paint, fRenderTarget.get())) { | 
|   679         GrShaderCaps* shaderCaps = fContext->caps()->shaderCaps(); |   687         GrShaderCaps* shaderCaps = fContext->caps()->shaderCaps(); | 
|   680         SkAutoTUnref<GrDrawBatch> batch(GrOvalRenderer::CreateOvalBatch(paint.ge
      tColor(), |   688         SkAutoTUnref<GrDrawBatch> batch(GrOvalRenderer::CreateOvalBatch(paint.ge
      tColor(), | 
|   681                                                                         viewMatr
      ix, |   689                                                                         viewMatr
      ix, | 
|   682                                                                         oval, |   690                                                                         oval, | 
|   683                                                                         stroke, |   691                                                                         stroke, | 
|   684                                                                         shaderCa
      ps)); |   692                                                                         shaderCa
      ps)); | 
|   685         if (batch) { |   693         if (batch) { | 
|   686             GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); |   694             GrPipelineBuilder pipelineBuilder(paint,  this->isUnifiedMultisample
      d()); | 
 |   695             pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 
|   687             this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); |   696             this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 
|   688             return; |   697             return; | 
|   689         } |   698         } | 
|   690     } |   699     } | 
|   691  |   700  | 
|   692     SkPath path; |   701     SkPath path; | 
|   693     path.setIsVolatile(true); |   702     path.setIsVolatile(true); | 
|   694     path.addOval(oval); |   703     path.addOval(oval); | 
|   695     this->internalDrawPath(clip, paint, viewMatrix, path, style); |   704     this->internalDrawPath(clip, paint, viewMatrix, path, style); | 
|   696 } |   705 } | 
|   697  |   706  | 
|   698 void GrDrawContext::drawImageNine(const GrClip& clip, |   707 void GrDrawContext::drawImageNine(const GrClip& clip, | 
|   699                                   const GrPaint& paint, |   708                                   const GrPaint& paint, | 
|   700                                   const SkMatrix& viewMatrix, |   709                                   const SkMatrix& viewMatrix, | 
|   701                                   int imageWidth, |   710                                   int imageWidth, | 
|   702                                   int imageHeight, |   711                                   int imageHeight, | 
|   703                                   const SkIRect& center, |   712                                   const SkIRect& center, | 
|   704                                   const SkRect& dst) { |   713                                   const SkRect& dst) { | 
|   705     ASSERT_SINGLE_OWNER |   714     ASSERT_SINGLE_OWNER | 
|   706     RETURN_IF_ABANDONED |   715     RETURN_IF_ABANDONED | 
|   707     SkDEBUGCODE(this->validate();) |   716     SkDEBUGCODE(this->validate();) | 
|   708     GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawImageNine"); |   717     GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawImageNine"); | 
|   709  |   718  | 
|   710     AutoCheckFlush acf(fDrawingManager); |   719     AutoCheckFlush acf(fDrawingManager); | 
|   711  |   720  | 
|   712     SkAutoTUnref<GrDrawBatch> batch(GrNinePatch::CreateNonAA(paint.getColor(), v
      iewMatrix, |   721     SkAutoTUnref<GrDrawBatch> batch(GrNinePatch::CreateNonAA(paint.getColor(), v
      iewMatrix, | 
|   713                                                              imageWidth, imageHe
      ight, |   722                                                              imageWidth, imageHe
      ight, | 
|   714                                                              center, dst)); |   723                                                              center, dst)); | 
|   715  |   724  | 
|   716     GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); |   725     GrPipelineBuilder pipelineBuilder(paint,  this->isUnifiedMultisampled()); | 
 |   726     pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 
|   717     this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); |   727     this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 
|   718 } |   728 } | 
|   719  |   729  | 
|   720  |   730  | 
|   721 // Can 'path' be drawn as a pair of filled nested rectangles? |   731 // Can 'path' be drawn as a pair of filled nested rectangles? | 
|   722 static bool fills_as_nested_rects(const SkMatrix& viewMatrix, const SkPath& path
      , SkRect rects[2]) { |   732 static bool fills_as_nested_rects(const SkMatrix& viewMatrix, const SkPath& path
      , SkRect rects[2]) { | 
|   723  |   733  | 
|   724     if (path.isInverseFillType()) { |   734     if (path.isInverseFillType()) { | 
|   725         return false; |   735         return false; | 
|   726     } |   736     } | 
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   766  |   776  | 
|   767 void GrDrawContext::drawBatch(const GrClip& clip, |   777 void GrDrawContext::drawBatch(const GrClip& clip, | 
|   768                               const GrPaint& paint, GrDrawBatch* batch) { |   778                               const GrPaint& paint, GrDrawBatch* batch) { | 
|   769     ASSERT_SINGLE_OWNER |   779     ASSERT_SINGLE_OWNER | 
|   770     RETURN_IF_ABANDONED |   780     RETURN_IF_ABANDONED | 
|   771     SkDEBUGCODE(this->validate();) |   781     SkDEBUGCODE(this->validate();) | 
|   772     GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawBatch"); |   782     GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawBatch"); | 
|   773  |   783  | 
|   774     AutoCheckFlush acf(fDrawingManager); |   784     AutoCheckFlush acf(fDrawingManager); | 
|   775  |   785  | 
|   776     GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); |   786     GrPipelineBuilder pipelineBuilder(paint,  this->isUnifiedMultisampled()); | 
 |   787     pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 
|   777     this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); |   788     this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 
|   778 } |   789 } | 
|   779  |   790  | 
|   780 void GrDrawContext::drawPath(const GrClip& clip, |   791 void GrDrawContext::drawPath(const GrClip& clip, | 
|   781                              const GrPaint& paint, |   792                              const GrPaint& paint, | 
|   782                              const SkMatrix& viewMatrix, |   793                              const SkMatrix& viewMatrix, | 
|   783                              const SkPath& path, |   794                              const SkPath& path, | 
|   784                              const GrStyle& style) { |   795                              const GrStyle& style) { | 
|   785     ASSERT_SINGLE_OWNER |   796     ASSERT_SINGLE_OWNER | 
|   786     RETURN_IF_ABANDONED |   797     RETURN_IF_ABANDONED | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
|   798  |   809  | 
|   799     if (should_apply_coverage_aa(paint, fRenderTarget.get()) && !style.pathEffec
      t()) { |   810     if (should_apply_coverage_aa(paint, fRenderTarget.get()) && !style.pathEffec
      t()) { | 
|   800         if (style.isSimpleFill() && !path.isConvex()) { |   811         if (style.isSimpleFill() && !path.isConvex()) { | 
|   801             // Concave AA paths are expensive - try to avoid them for special ca
      ses |   812             // Concave AA paths are expensive - try to avoid them for special ca
      ses | 
|   802             SkRect rects[2]; |   813             SkRect rects[2]; | 
|   803  |   814  | 
|   804             if (fills_as_nested_rects(viewMatrix, path, rects)) { |   815             if (fills_as_nested_rects(viewMatrix, path, rects)) { | 
|   805                 SkAutoTUnref<GrDrawBatch> batch(GrRectBatchFactory::CreateAAFill
      NestedRects( |   816                 SkAutoTUnref<GrDrawBatch> batch(GrRectBatchFactory::CreateAAFill
      NestedRects( | 
|   806                     paint.getColor(), viewMatrix, rects)); |   817                     paint.getColor(), viewMatrix, rects)); | 
|   807                 if (batch) { |   818                 if (batch) { | 
|   808                     GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()
      ); |   819                     GrPipelineBuilder pipelineBuilder(paint,  this->isUnifiedMul
      tisampled()); | 
 |   820                     pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 
|   809                     this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batc
      h); |   821                     this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batc
      h); | 
|   810                 } |   822                 } | 
|   811                 return; |   823                 return; | 
|   812             } |   824             } | 
|   813         } |   825         } | 
|   814         SkRect ovalRect; |   826         SkRect ovalRect; | 
|   815         bool isOval = path.isOval(&ovalRect); |   827         bool isOval = path.isOval(&ovalRect); | 
|   816  |   828  | 
|   817         if (isOval && !path.isInverseFillType()) { |   829         if (isOval && !path.isInverseFillType()) { | 
|   818             GrShaderCaps* shaderCaps = fContext->caps()->shaderCaps(); |   830             GrShaderCaps* shaderCaps = fContext->caps()->shaderCaps(); | 
|   819             SkAutoTUnref<GrDrawBatch> batch(GrOvalRenderer::CreateOvalBatch(pain
      t.getColor(), |   831             SkAutoTUnref<GrDrawBatch> batch(GrOvalRenderer::CreateOvalBatch(pain
      t.getColor(), | 
|   820                                                                             view
      Matrix, |   832                                                                             view
      Matrix, | 
|   821                                                                             oval
      Rect, |   833                                                                             oval
      Rect, | 
|   822                                                                             styl
      e.strokeRec(), |   834                                                                             styl
      e.strokeRec(), | 
|   823                                                                             shad
      erCaps)); |   835                                                                             shad
      erCaps)); | 
|   824             if (batch) { |   836             if (batch) { | 
|   825                 GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); |   837                 GrPipelineBuilder pipelineBuilder(paint,  this->isUnifiedMultisa
      mpled()); | 
 |   838                 pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 
|   826                 this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); |   839                 this->getDrawTarget()->drawBatch(pipelineBuilder, clip, batch); | 
|   827                 return; |   840                 return; | 
|   828             } |   841             } | 
|   829         } |   842         } | 
|   830     } |   843     } | 
|   831  |   844  | 
|   832     // Note that internalDrawPath may sw-rasterize the path into a scratch textu
      re. |   845     // Note that internalDrawPath may sw-rasterize the path into a scratch textu
      re. | 
|   833     // Scratch textures can be recycled after they are returned to the texture |   846     // Scratch textures can be recycled after they are returned to the texture | 
|   834     // cache. This presents a potential hazard for buffered drawing. However, |   847     // cache. This presents a potential hazard for buffered drawing. However, | 
|   835     // the writePixels that uploads to the scratch will perform a flush so we're |   848     // the writePixels that uploads to the scratch will perform a flush so we're | 
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   881  |   894  | 
|   882     // Don't allow the SW renderer |   895     // Don't allow the SW renderer | 
|   883     GrPathRenderer* pr = fDrawContext->fDrawingManager->getPathRenderer(canDrawA
      rgs, false, type); |   896     GrPathRenderer* pr = fDrawContext->fDrawingManager->getPathRenderer(canDrawA
      rgs, false, type); | 
|   884     if (!pr) { |   897     if (!pr) { | 
|   885         return false; |   898         return false; | 
|   886     } |   899     } | 
|   887  |   900  | 
|   888     GrPaint paint; |   901     GrPaint paint; | 
|   889     paint.setCoverageSetOpXPFactory(op, invert); |   902     paint.setCoverageSetOpXPFactory(op, invert); | 
|   890  |   903  | 
|   891     GrPipelineBuilder pipelineBuilder(paint, fDrawContext->accessRenderTarget())
      ; |   904     GrPipelineBuilder pipelineBuilder(paint,  fDrawContext->isUnifiedMultisample
      d()); | 
 |   905     pipelineBuilder.setRenderTarget(fDrawContext->accessRenderTarget()); | 
|   892     pipelineBuilder.setUserStencil(ss); |   906     pipelineBuilder.setUserStencil(ss); | 
|   893  |   907  | 
|   894     GrPathRenderer::DrawPathArgs args; |   908     GrPathRenderer::DrawPathArgs args; | 
|   895     args.fTarget = fDrawContext->getDrawTarget(); |   909     args.fTarget = fDrawContext->getDrawTarget(); | 
|   896     args.fResourceProvider = fDrawContext->fDrawingManager->getContext()->resour
      ceProvider(); |   910     args.fResourceProvider = fDrawContext->fDrawingManager->getContext()->resour
      ceProvider(); | 
|   897     args.fPipelineBuilder = &pipelineBuilder; |   911     args.fPipelineBuilder = &pipelineBuilder; | 
|   898     args.fClip = &clip; |   912     args.fClip = &clip; | 
|   899     args.fColor = GrColor_WHITE; |   913     args.fColor = GrColor_WHITE; | 
|   900     args.fViewMatrix = &viewMatrix; |   914     args.fViewMatrix = &viewMatrix; | 
|   901     args.fPath = &path; |   915     args.fPath = &path; | 
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   987         pr = fDrawingManager->getPathRenderer(canDrawArgs, true, type); |  1001         pr = fDrawingManager->getPathRenderer(canDrawArgs, true, type); | 
|   988     } |  1002     } | 
|   989  |  1003  | 
|   990     if (nullptr == pr) { |  1004     if (nullptr == pr) { | 
|   991 #ifdef SK_DEBUG |  1005 #ifdef SK_DEBUG | 
|   992         SkDebugf("Unable to find path renderer compatible with path.\n"); |  1006         SkDebugf("Unable to find path renderer compatible with path.\n"); | 
|   993 #endif |  1007 #endif | 
|   994         return; |  1008         return; | 
|   995     } |  1009     } | 
|   996  |  1010  | 
|   997     GrPipelineBuilder pipelineBuilder(paint, fRenderTarget.get()); |  1011     GrPipelineBuilder pipelineBuilder(paint,  this->isUnifiedMultisampled()); | 
 |  1012     pipelineBuilder.setRenderTarget(fRenderTarget.get()); | 
|   998  |  1013  | 
|   999     GrPathRenderer::DrawPathArgs args; |  1014     GrPathRenderer::DrawPathArgs args; | 
|  1000     args.fTarget = this->getDrawTarget(); |  1015     args.fTarget = this->getDrawTarget(); | 
|  1001     args.fResourceProvider = fDrawingManager->getContext()->resourceProvider(); |  1016     args.fResourceProvider = fDrawingManager->getContext()->resourceProvider(); | 
|  1002     args.fPipelineBuilder = &pipelineBuilder; |  1017     args.fPipelineBuilder = &pipelineBuilder; | 
|  1003     args.fClip = &clip; |  1018     args.fClip = &clip; | 
|  1004     args.fColor = paint.getColor(); |  1019     args.fColor = paint.getColor(); | 
|  1005     args.fViewMatrix = &viewMatrix; |  1020     args.fViewMatrix = &viewMatrix; | 
|  1006     args.fPath = canDrawArgs.fPath; |  1021     args.fPath = canDrawArgs.fPath; | 
|  1007     args.fStyle = canDrawArgs.fStyle; |  1022     args.fStyle = canDrawArgs.fStyle; | 
|  1008     args.fAntiAlias = useCoverageAA; |  1023     args.fAntiAlias = useCoverageAA; | 
|  1009     args.fGammaCorrect = this->isGammaCorrect(); |  1024     args.fGammaCorrect = this->isGammaCorrect(); | 
|  1010     pr->drawPath(args); |  1025     pr->drawPath(args); | 
|  1011 } |  1026 } | 
|  1012  |  1027  | 
|  1013 void GrDrawContext::drawBatch(GrPipelineBuilder* pipelineBuilder, const GrClip& 
      clip, |  1028 void GrDrawContext::drawBatch(GrPipelineBuilder* pipelineBuilder, const GrClip& 
      clip, | 
|  1014                               GrDrawBatch* batch) { |  1029                               GrDrawBatch* batch) { | 
|  1015     ASSERT_SINGLE_OWNER |  1030     ASSERT_SINGLE_OWNER | 
|  1016     RETURN_IF_ABANDONED |  1031     RETURN_IF_ABANDONED | 
|  1017     SkDEBUGCODE(this->validate();) |  1032     SkDEBUGCODE(this->validate();) | 
|  1018     GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawBatch"); |  1033     GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawBatch"); | 
|  1019  |  1034  | 
|  1020     this->getDrawTarget()->drawBatch(*pipelineBuilder, clip, batch); |  1035     this->getDrawTarget()->drawBatch(*pipelineBuilder, clip, batch); | 
|  1021 } |  1036 } | 
| OLD | NEW |