OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2014 Google Inc. | 3 * Copyright 2014 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 "GrAADistanceFieldPathRenderer.h" | 9 #include "GrAADistanceFieldPathRenderer.h" |
10 | 10 |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 | 190 |
191 GrTextureParams params(SkShader::kRepeat_TileMode, GrTextureParams::kBil
erp_FilterMode); | 191 GrTextureParams params(SkShader::kRepeat_TileMode, GrTextureParams::kBil
erp_FilterMode); |
192 | 192 |
193 // Setup GrGeometryProcessor | 193 // Setup GrGeometryProcessor |
194 GrBatchAtlas* atlas = fAtlas; | 194 GrBatchAtlas* atlas = fAtlas; |
195 SkAutoTUnref<GrGeometryProcessor> dfProcessor( | 195 SkAutoTUnref<GrGeometryProcessor> dfProcessor( |
196 GrDistanceFieldPathGeoProc::Create(this->color(), | 196 GrDistanceFieldPathGeoProc::Create(this->color(), |
197 this->viewMatrix(), | 197 this->viewMatrix(), |
198 atlas->getTexture(), | 198 atlas->getTexture(), |
199 params, | 199 params, |
200 flags, | 200 flags)); |
201 this->usesLocalCoords())); | |
202 | 201 |
203 batchTarget->initDraw(dfProcessor, pipeline); | 202 this->initDraw(batchTarget, dfProcessor, pipeline); |
204 | 203 |
205 FlushInfo flushInfo; | 204 FlushInfo flushInfo; |
206 | 205 |
207 // allocate vertices | 206 // allocate vertices |
208 size_t vertexStride = dfProcessor->getVertexStride(); | 207 size_t vertexStride = dfProcessor->getVertexStride(); |
209 SkASSERT(vertexStride == 2 * sizeof(SkPoint)); | 208 SkASSERT(vertexStride == 2 * sizeof(SkPoint)); |
210 | 209 |
211 const GrVertexBuffer* vertexBuffer; | 210 const GrVertexBuffer* vertexBuffer; |
212 void* vertices = batchTarget->makeVertSpace(vertexStride, | 211 void* vertices = batchTarget->makeVertSpace(vertexStride, |
213 kVerticesPerQuad * instanceC
ount, | 212 kVerticesPerQuad * instanceC
ount, |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
408 bmp.width(), bmp.height(), bmp.ro
wBytes()); | 407 bmp.width(), bmp.height(), bmp.ro
wBytes()); |
409 } | 408 } |
410 | 409 |
411 // add to atlas | 410 // add to atlas |
412 SkIPoint16 atlasLocation; | 411 SkIPoint16 atlasLocation; |
413 GrBatchAtlas::AtlasID id; | 412 GrBatchAtlas::AtlasID id; |
414 bool success = atlas->addToAtlas(&id, batchTarget, width, height, dfStor
age.get(), | 413 bool success = atlas->addToAtlas(&id, batchTarget, width, height, dfStor
age.get(), |
415 &atlasLocation); | 414 &atlasLocation); |
416 if (!success) { | 415 if (!success) { |
417 this->flush(batchTarget, flushInfo); | 416 this->flush(batchTarget, flushInfo); |
418 batchTarget->initDraw(dfProcessor, pipeline); | 417 this->initDraw(batchTarget, dfProcessor, pipeline); |
419 | 418 |
420 SkDEBUGCODE(success =) atlas->addToAtlas(&id, batchTarget, width, he
ight, | 419 SkDEBUGCODE(success =) atlas->addToAtlas(&id, batchTarget, width, he
ight, |
421 dfStorage.get(), &atlasLoca
tion); | 420 dfStorage.get(), &atlasLoca
tion); |
422 SkASSERT(success); | 421 SkASSERT(success); |
423 | 422 |
424 } | 423 } |
425 | 424 |
426 // add to cache | 425 // add to cache |
427 pathData->fKey.fGenID = path.getGenerationID(); | 426 pathData->fKey.fGenID = path.getGenerationID(); |
428 pathData->fKey.fDimension = dimension; | 427 pathData->fKey.fDimension = dimension; |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
485 | 484 |
486 // vertex texture coords | 485 // vertex texture coords |
487 SkPoint* textureCoords = positions + 1; | 486 SkPoint* textureCoords = positions + 1; |
488 textureCoords->setRectFan(SkFixedToFloat(texture->texturePriv().normaliz
eFixedX(tx)), | 487 textureCoords->setRectFan(SkFixedToFloat(texture->texturePriv().normaliz
eFixedX(tx)), |
489 SkFixedToFloat(texture->texturePriv().normaliz
eFixedY(ty)), | 488 SkFixedToFloat(texture->texturePriv().normaliz
eFixedY(ty)), |
490 SkFixedToFloat(texture->texturePriv().normaliz
eFixedX(tx + tw)), | 489 SkFixedToFloat(texture->texturePriv().normaliz
eFixedX(tx + tw)), |
491 SkFixedToFloat(texture->texturePriv().normaliz
eFixedY(ty + th)), | 490 SkFixedToFloat(texture->texturePriv().normaliz
eFixedY(ty + th)), |
492 vertexStride); | 491 vertexStride); |
493 } | 492 } |
494 | 493 |
| 494 void initDraw(GrBatchTarget* batchTarget, |
| 495 const GrGeometryProcessor* dfProcessor, |
| 496 const GrPipeline* pipeline) { |
| 497 batchTarget->initDraw(dfProcessor, pipeline); |
| 498 |
| 499 // TODO remove this when batch is everywhere |
| 500 GrPipelineInfo init; |
| 501 init.fColorIgnored = fBatch.fColorIgnored; |
| 502 init.fOverrideColor = GrColor_ILLEGAL; |
| 503 init.fCoverageIgnored = fBatch.fCoverageIgnored; |
| 504 init.fUsesLocalCoords = this->usesLocalCoords(); |
| 505 dfProcessor->initBatchTracker(batchTarget->currentBatchTracker(), init); |
| 506 } |
| 507 |
495 void flush(GrBatchTarget* batchTarget, FlushInfo* flushInfo) { | 508 void flush(GrBatchTarget* batchTarget, FlushInfo* flushInfo) { |
496 GrVertices vertices; | 509 GrVertices vertices; |
497 int maxInstancesPerDraw = flushInfo->fIndexBuffer->maxQuads(); | 510 int maxInstancesPerDraw = flushInfo->fIndexBuffer->maxQuads(); |
498 vertices.initInstanced(kTriangles_GrPrimitiveType, flushInfo->fVertexBuf
fer, | 511 vertices.initInstanced(kTriangles_GrPrimitiveType, flushInfo->fVertexBuf
fer, |
499 flushInfo->fIndexBuffer, flushInfo->fVertexOffset, kVerticesPerQuad, | 512 flushInfo->fIndexBuffer, flushInfo->fVertexOffset, kVerticesPerQuad, |
500 kIndicesPerQuad, flushInfo->fInstancesToFlush, maxInstancesPerDraw); | 513 kIndicesPerQuad, flushInfo->fInstancesToFlush, maxInstancesPerDraw); |
501 batchTarget->draw(vertices); | 514 batchTarget->draw(vertices); |
502 flushInfo->fVertexOffset += kVerticesPerQuad * flushInfo->fInstancesToFl
ush; | 515 flushInfo->fVertexOffset += kVerticesPerQuad * flushInfo->fInstancesToFl
ush; |
503 flushInfo->fInstancesToFlush = 0; | 516 flushInfo->fInstancesToFlush = 0; |
504 } | 517 } |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
658 geometry.fPath = GrTest::TestPath(random); | 671 geometry.fPath = GrTest::TestPath(random); |
659 geometry.fAntiAlias = random->nextBool(); | 672 geometry.fAntiAlias = random->nextBool(); |
660 | 673 |
661 return AADistanceFieldPathBatch::Create(geometry, color, viewMatrix, | 674 return AADistanceFieldPathBatch::Create(geometry, color, viewMatrix, |
662 gTestStruct.fAtlas, | 675 gTestStruct.fAtlas, |
663 &gTestStruct.fPathCache, | 676 &gTestStruct.fPathCache, |
664 &gTestStruct.fPathList); | 677 &gTestStruct.fPathList); |
665 } | 678 } |
666 | 679 |
667 #endif | 680 #endif |
OLD | NEW |