| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 "GrDefaultPathRenderer.h" | 8 #include "GrDefaultPathRenderer.h" |
| 9 | 9 |
| 10 #include "GrBatchFlushState.h" | 10 #include "GrBatchFlushState.h" |
| (...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 244 } | 244 } |
| 245 overrides.getOverrideColorIfSet(&fGeoData[0].fColor); | 245 overrides.getOverrideColorIfSet(&fGeoData[0].fColor); |
| 246 | 246 |
| 247 // setup batch properties | 247 // setup batch properties |
| 248 fBatch.fColorIgnored = !overrides.readsColor(); | 248 fBatch.fColorIgnored = !overrides.readsColor(); |
| 249 fBatch.fColor = fGeoData[0].fColor; | 249 fBatch.fColor = fGeoData[0].fColor; |
| 250 fBatch.fUsesLocalCoords = overrides.readsLocalCoords(); | 250 fBatch.fUsesLocalCoords = overrides.readsLocalCoords(); |
| 251 fBatch.fCoverageIgnored = !overrides.readsCoverage(); | 251 fBatch.fCoverageIgnored = !overrides.readsCoverage(); |
| 252 } | 252 } |
| 253 | 253 |
| 254 void onPrepareDraws(Target* target) override { | 254 void onPrepareDraws(Target* target) const override { |
| 255 SkAutoTUnref<const GrGeometryProcessor> gp; | 255 SkAutoTUnref<const GrGeometryProcessor> gp; |
| 256 { | 256 { |
| 257 using namespace GrDefaultGeoProcFactory; | 257 using namespace GrDefaultGeoProcFactory; |
| 258 Color color(this->color()); | 258 Color color(this->color()); |
| 259 Coverage coverage(this->coverage()); | 259 Coverage coverage(this->coverage()); |
| 260 if (this->coverageIgnored()) { | 260 if (this->coverageIgnored()) { |
| 261 coverage.fType = Coverage::kNone_Type; | 261 coverage.fType = Coverage::kNone_Type; |
| 262 } | 262 } |
| 263 LocalCoords localCoords(this->usesLocalCoords() ? LocalCoords::kUseP
osition_Type : | 263 LocalCoords localCoords(this->usesLocalCoords() ? LocalCoords::kUseP
osition_Type : |
| 264 LocalCoords::kUnus
ed_Type); | 264 LocalCoords::kUnus
ed_Type); |
| 265 gp.reset(GrDefaultGeoProcFactory::Create(color, coverage, localCoord
s, | 265 gp.reset(GrDefaultGeoProcFactory::Create(color, coverage, localCoord
s, |
| 266 this->viewMatrix())); | 266 this->viewMatrix())); |
| 267 } | 267 } |
| 268 | 268 |
| 269 size_t vertexStride = gp->getVertexStride(); | 269 size_t vertexStride = gp->getVertexStride(); |
| 270 SkASSERT(vertexStride == sizeof(SkPoint)); | 270 SkASSERT(vertexStride == sizeof(SkPoint)); |
| 271 | 271 |
| 272 target->initDraw(gp, this->pipeline()); | 272 target->initDraw(gp, this->pipeline()); |
| 273 | 273 |
| 274 int instanceCount = fGeoData.count(); | 274 int instanceCount = fGeoData.count(); |
| 275 | 275 |
| 276 // compute number of vertices | 276 // compute number of vertices |
| 277 int maxVertices = 0; | 277 int maxVertices = 0; |
| 278 | 278 |
| 279 // We will use index buffers if we have multiple paths or one path with
multiple contours | 279 // We will use index buffers if we have multiple paths or one path with
multiple contours |
| 280 bool isIndexed = instanceCount > 1; | 280 bool isIndexed = instanceCount > 1; |
| 281 for (int i = 0; i < instanceCount; i++) { | 281 for (int i = 0; i < instanceCount; i++) { |
| 282 Geometry& args = fGeoData[i]; | 282 const Geometry& args = fGeoData[i]; |
| 283 | 283 |
| 284 int contourCount; | 284 int contourCount; |
| 285 maxVertices += GrPathUtils::worstCasePointCount(args.fPath, &contour
Count, | 285 maxVertices += GrPathUtils::worstCasePointCount(args.fPath, &contour
Count, |
| 286 args.fTolerance); | 286 args.fTolerance); |
| 287 | 287 |
| 288 isIndexed = isIndexed || contourCount > 1; | 288 isIndexed = isIndexed || contourCount > 1; |
| 289 } | 289 } |
| 290 | 290 |
| 291 if (maxVertices == 0 || maxVertices > ((int)SK_MaxU16 + 1)) { | 291 if (maxVertices == 0 || maxVertices > ((int)SK_MaxU16 + 1)) { |
| 292 SkDebugf("Cannot render path (%d)\n", maxVertices); | 292 SkDebugf("Cannot render path (%d)\n", maxVertices); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 334 if (!indices) { | 334 if (!indices) { |
| 335 SkDebugf("Could not allocate indices\n"); | 335 SkDebugf("Could not allocate indices\n"); |
| 336 return; | 336 return; |
| 337 } | 337 } |
| 338 } | 338 } |
| 339 | 339 |
| 340 // fill buffers | 340 // fill buffers |
| 341 int vertexOffset = 0; | 341 int vertexOffset = 0; |
| 342 int indexOffset = 0; | 342 int indexOffset = 0; |
| 343 for (int i = 0; i < instanceCount; i++) { | 343 for (int i = 0; i < instanceCount; i++) { |
| 344 Geometry& args = fGeoData[i]; | 344 const Geometry& args = fGeoData[i]; |
| 345 | 345 |
| 346 int vertexCnt = 0; | 346 int vertexCnt = 0; |
| 347 int indexCnt = 0; | 347 int indexCnt = 0; |
| 348 if (!this->createGeom(verts, | 348 if (!this->createGeom(verts, |
| 349 vertexOffset, | 349 vertexOffset, |
| 350 indices, | 350 indices, |
| 351 indexOffset, | 351 indexOffset, |
| 352 &vertexCnt, | 352 &vertexCnt, |
| 353 &indexCnt, | 353 &indexCnt, |
| 354 args.fPath, | 354 args.fPath, |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 424 } | 424 } |
| 425 | 425 |
| 426 bool createGeom(void* vertices, | 426 bool createGeom(void* vertices, |
| 427 size_t vertexOffset, | 427 size_t vertexOffset, |
| 428 void* indices, | 428 void* indices, |
| 429 size_t indexOffset, | 429 size_t indexOffset, |
| 430 int* vertexCnt, | 430 int* vertexCnt, |
| 431 int* indexCnt, | 431 int* indexCnt, |
| 432 const SkPath& path, | 432 const SkPath& path, |
| 433 SkScalar srcSpaceTol, | 433 SkScalar srcSpaceTol, |
| 434 bool isIndexed) { | 434 bool isIndexed) const { |
| 435 { | 435 { |
| 436 SkScalar srcSpaceTolSqd = SkScalarMul(srcSpaceTol, srcSpaceTol); | 436 SkScalar srcSpaceTolSqd = SkScalarMul(srcSpaceTol, srcSpaceTol); |
| 437 | 437 |
| 438 uint16_t indexOffsetU16 = (uint16_t)indexOffset; | 438 uint16_t indexOffsetU16 = (uint16_t)indexOffset; |
| 439 uint16_t vertexOffsetU16 = (uint16_t)vertexOffset; | 439 uint16_t vertexOffsetU16 = (uint16_t)vertexOffset; |
| 440 | 440 |
| 441 uint16_t* idxBase = reinterpret_cast<uint16_t*>(indices) + indexOffs
etU16; | 441 uint16_t* idxBase = reinterpret_cast<uint16_t*>(indices) + indexOffs
etU16; |
| 442 uint16_t* idx = idxBase; | 442 uint16_t* idx = idxBase; |
| 443 uint16_t subpathIdxStart = vertexOffsetU16; | 443 uint16_t subpathIdxStart = vertexOffsetU16; |
| 444 | 444 |
| (...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 764 geometry.fColor = color; | 764 geometry.fColor = color; |
| 765 geometry.fPath = path; | 765 geometry.fPath = path; |
| 766 geometry.fTolerance = srcSpaceTol; | 766 geometry.fTolerance = srcSpaceTol; |
| 767 | 767 |
| 768 viewMatrix.mapRect(&bounds); | 768 viewMatrix.mapRect(&bounds); |
| 769 uint8_t coverage = GrRandomCoverage(random); | 769 uint8_t coverage = GrRandomCoverage(random); |
| 770 return DefaultPathBatch::Create(geometry, coverage, viewMatrix, true, bounds
); | 770 return DefaultPathBatch::Create(geometry, coverage, viewMatrix, true, bounds
); |
| 771 } | 771 } |
| 772 | 772 |
| 773 #endif | 773 #endif |
| OLD | NEW |