| 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 "GrTessellatingPathRenderer.h" | 8 #include "GrTessellatingPathRenderer.h" |
| 9 | 9 |
| 10 #include "GrBatch.h" | 10 #include "GrBatch.h" |
| 11 #include "GrBatchTarget.h" | 11 #include "GrBatchTarget.h" |
| 12 #include "GrDefaultGeoProcFactory.h" | 12 #include "GrDefaultGeoProcFactory.h" |
| 13 #include "GrPathUtils.h" | 13 #include "GrPathUtils.h" |
| 14 #include "GrVertexBuffer.h" | 14 #include "GrVertices.h" |
| 15 #include "SkChunkAlloc.h" | 15 #include "SkChunkAlloc.h" |
| 16 #include "SkGeometry.h" | 16 #include "SkGeometry.h" |
| 17 | 17 |
| 18 #include <stdio.h> | 18 #include <stdio.h> |
| 19 | 19 |
| 20 /* | 20 /* |
| 21 * This path renderer tessellates the path into triangles, uploads the triangles
to a | 21 * This path renderer tessellates the path into triangles, uploads the triangles
to a |
| 22 * vertex buffer, and renders them with a single draw call. It does not currentl
y do | 22 * vertex buffer, and renders them with a single draw call. It does not currentl
y do |
| 23 * antialiasing, so it must be used in conjunction with multisampling. | 23 * antialiasing, so it must be used in conjunction with multisampling. |
| 24 * | 24 * |
| (...skipping 1407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1432 count += (poly->fCount - 2) * (WIREFRAME ? 6 : 3); | 1432 count += (poly->fCount - 2) * (WIREFRAME ? 6 : 3); |
| 1433 } | 1433 } |
| 1434 } | 1434 } |
| 1435 if (0 == count) { | 1435 if (0 == count) { |
| 1436 return; | 1436 return; |
| 1437 } | 1437 } |
| 1438 | 1438 |
| 1439 size_t stride = gp->getVertexStride(); | 1439 size_t stride = gp->getVertexStride(); |
| 1440 const GrVertexBuffer* vertexBuffer; | 1440 const GrVertexBuffer* vertexBuffer; |
| 1441 int firstVertex; | 1441 int firstVertex; |
| 1442 void* vertices = batchTarget->vertexPool()->makeSpace(stride, | 1442 void* verts = batchTarget->vertexPool()->makeSpace(stride, |
| 1443 count, | 1443 count, |
| 1444 &vertexBuffer, | 1444 &vertexBuffer, |
| 1445 &firstVertex); | 1445 &firstVertex); |
| 1446 | 1446 |
| 1447 if (!vertices) { | 1447 if (!verts) { |
| 1448 SkDebugf("Could not allocate vertices\n"); | 1448 SkDebugf("Could not allocate vertices\n"); |
| 1449 return; | 1449 return; |
| 1450 } | 1450 } |
| 1451 | 1451 |
| 1452 LOG("emitting %d verts\n", count); | 1452 LOG("emitting %d verts\n", count); |
| 1453 void* end = polys_to_triangles(polys, fillType, vertices); | 1453 void* end = polys_to_triangles(polys, fillType, verts); |
| 1454 int actualCount = static_cast<int>( | 1454 int actualCount = static_cast<int>( |
| 1455 (static_cast<char*>(end) - static_cast<char*>(vertices)) / stride); | 1455 (static_cast<char*>(end) - static_cast<char*>(verts)) / stride); |
| 1456 LOG("actual count: %d\n", actualCount); | 1456 LOG("actual count: %d\n", actualCount); |
| 1457 SkASSERT(actualCount <= count); | 1457 SkASSERT(actualCount <= count); |
| 1458 | 1458 |
| 1459 GrPrimitiveType primitiveType = WIREFRAME ? kLines_GrPrimitiveType | 1459 GrPrimitiveType primitiveType = WIREFRAME ? kLines_GrPrimitiveType |
| 1460 : kTriangles_GrPrimitiveType; | 1460 : kTriangles_GrPrimitiveType; |
| 1461 GrDrawTarget::DrawInfo drawInfo; | 1461 GrVertices vertices; |
| 1462 drawInfo.init(primitiveType, vertexBuffer, firstVertex, actualCount); | 1462 vertices.init(primitiveType, vertexBuffer, firstVertex, actualCount); |
| 1463 batchTarget->draw(drawInfo); | 1463 batchTarget->draw(vertices); |
| 1464 | 1464 |
| 1465 batchTarget->putBackVertices((size_t)(count - actualCount), stride); | 1465 batchTarget->putBackVertices((size_t)(count - actualCount), stride); |
| 1466 return; | 1466 return; |
| 1467 } | 1467 } |
| 1468 | 1468 |
| 1469 bool onCombineIfPossible(GrBatch*) override { | 1469 bool onCombineIfPossible(GrBatch*) override { |
| 1470 return false; | 1470 return false; |
| 1471 } | 1471 } |
| 1472 | 1472 |
| 1473 private: | 1473 private: |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1511 SkMatrix vmi; | 1511 SkMatrix vmi; |
| 1512 if (!viewM.invert(&vmi)) { | 1512 if (!viewM.invert(&vmi)) { |
| 1513 return false; | 1513 return false; |
| 1514 } | 1514 } |
| 1515 vmi.mapRect(&clipBounds); | 1515 vmi.mapRect(&clipBounds); |
| 1516 SkAutoTUnref<GrBatch> batch(TessellatingPathBatch::Create(color, path, viewM
, clipBounds)); | 1516 SkAutoTUnref<GrBatch> batch(TessellatingPathBatch::Create(color, path, viewM
, clipBounds)); |
| 1517 target->drawBatch(pipelineBuilder, batch); | 1517 target->drawBatch(pipelineBuilder, batch); |
| 1518 | 1518 |
| 1519 return true; | 1519 return true; |
| 1520 } | 1520 } |
| OLD | NEW |