| 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 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 fBatch.fCoverageIgnored = !init.readsCoverage(); | 160 fBatch.fCoverageIgnored = !init.readsCoverage(); |
| 161 } | 161 } |
| 162 | 162 |
| 163 struct FlushInfo { | 163 struct FlushInfo { |
| 164 SkAutoTUnref<const GrVertexBuffer> fVertexBuffer; | 164 SkAutoTUnref<const GrVertexBuffer> fVertexBuffer; |
| 165 SkAutoTUnref<const GrIndexBuffer> fIndexBuffer; | 165 SkAutoTUnref<const GrIndexBuffer> fIndexBuffer; |
| 166 int fVertexOffset; | 166 int fVertexOffset; |
| 167 int fInstancesToFlush; | 167 int fInstancesToFlush; |
| 168 }; | 168 }; |
| 169 | 169 |
| 170 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline
) override { | 170 void generateGeometry(GrBatchTarget* batchTarget) override { |
| 171 int instanceCount = fGeoData.count(); | 171 int instanceCount = fGeoData.count(); |
| 172 | 172 |
| 173 SkMatrix invert; | 173 SkMatrix invert; |
| 174 if (this->usesLocalCoords() && !this->viewMatrix().invert(&invert)) { | 174 if (this->usesLocalCoords() && !this->viewMatrix().invert(&invert)) { |
| 175 SkDebugf("Could not invert viewmatrix\n"); | 175 SkDebugf("Could not invert viewmatrix\n"); |
| 176 return; | 176 return; |
| 177 } | 177 } |
| 178 | 178 |
| 179 uint32_t flags = 0; | 179 uint32_t flags = 0; |
| 180 flags |= this->viewMatrix().isSimilarity() ? kSimilarity_DistanceFieldEf
fectFlag : 0; | 180 flags |= this->viewMatrix().isSimilarity() ? kSimilarity_DistanceFieldEf
fectFlag : 0; |
| 181 | 181 |
| 182 GrTextureParams params(SkShader::kRepeat_TileMode, GrTextureParams::kBil
erp_FilterMode); | 182 GrTextureParams params(SkShader::kRepeat_TileMode, GrTextureParams::kBil
erp_FilterMode); |
| 183 | 183 |
| 184 // Setup GrGeometryProcessor | 184 // Setup GrGeometryProcessor |
| 185 GrBatchAtlas* atlas = fAtlas; | 185 GrBatchAtlas* atlas = fAtlas; |
| 186 SkAutoTUnref<GrGeometryProcessor> dfProcessor( | 186 SkAutoTUnref<GrGeometryProcessor> dfProcessor( |
| 187 GrDistanceFieldPathGeoProc::Create(this->color(), | 187 GrDistanceFieldPathGeoProc::Create(this->color(), |
| 188 this->viewMatrix(), | 188 this->viewMatrix(), |
| 189 atlas->getTexture(), | 189 atlas->getTexture(), |
| 190 params, | 190 params, |
| 191 flags, | 191 flags, |
| 192 this->usesLocalCoords())); | 192 this->usesLocalCoords())); |
| 193 | 193 |
| 194 batchTarget->initDraw(dfProcessor, pipeline); | 194 batchTarget->initDraw(dfProcessor, this->pipeline()); |
| 195 | 195 |
| 196 FlushInfo flushInfo; | 196 FlushInfo flushInfo; |
| 197 | 197 |
| 198 // allocate vertices | 198 // allocate vertices |
| 199 size_t vertexStride = dfProcessor->getVertexStride(); | 199 size_t vertexStride = dfProcessor->getVertexStride(); |
| 200 SkASSERT(vertexStride == 2 * sizeof(SkPoint)); | 200 SkASSERT(vertexStride == 2 * sizeof(SkPoint)); |
| 201 | 201 |
| 202 const GrVertexBuffer* vertexBuffer; | 202 const GrVertexBuffer* vertexBuffer; |
| 203 void* vertices = batchTarget->makeVertSpace(vertexStride, | 203 void* vertices = batchTarget->makeVertSpace(vertexStride, |
| 204 kVerticesPerQuad * instanceC
ount, | 204 kVerticesPerQuad * instanceC
ount, |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 237 // Remove the stale cache entry | 237 // Remove the stale cache entry |
| 238 if (args.fPathData) { | 238 if (args.fPathData) { |
| 239 fPathCache->remove(args.fPathData->fKey); | 239 fPathCache->remove(args.fPathData->fKey); |
| 240 fPathList->remove(args.fPathData); | 240 fPathList->remove(args.fPathData); |
| 241 SkDELETE(args.fPathData); | 241 SkDELETE(args.fPathData); |
| 242 } | 242 } |
| 243 SkScalar scale = desiredDimension/maxDim; | 243 SkScalar scale = desiredDimension/maxDim; |
| 244 args.fPathData = SkNEW(PathData); | 244 args.fPathData = SkNEW(PathData); |
| 245 if (!this->addPathToAtlas(batchTarget, | 245 if (!this->addPathToAtlas(batchTarget, |
| 246 dfProcessor, | 246 dfProcessor, |
| 247 pipeline, | 247 this->pipeline(), |
| 248 &flushInfo, | 248 &flushInfo, |
| 249 atlas, | 249 atlas, |
| 250 args.fPathData, | 250 args.fPathData, |
| 251 args.fPath, | 251 args.fPath, |
| 252 args.fStroke, | 252 args.fStroke, |
| 253 args.fAntiAlias, | 253 args.fAntiAlias, |
| 254 desiredDimension, | 254 desiredDimension, |
| 255 scale)) { | 255 scale)) { |
| 256 SkDebugf("Can't rasterize path\n"); | 256 SkDebugf("Can't rasterize path\n"); |
| 257 return; | 257 return; |
| 258 } | 258 } |
| 259 } | 259 } |
| 260 | 260 |
| 261 atlas->setLastUseToken(args.fPathData->fID, batchTarget->currentToke
n()); | 261 atlas->setLastUseToken(args.fPathData->fID, batchTarget->currentToke
n()); |
| 262 | 262 |
| 263 // Now set vertices | 263 // Now set vertices |
| 264 intptr_t offset = reinterpret_cast<intptr_t>(vertices); | 264 intptr_t offset = reinterpret_cast<intptr_t>(vertices); |
| 265 offset += i * kVerticesPerQuad * vertexStride; | 265 offset += i * kVerticesPerQuad * vertexStride; |
| 266 SkPoint* positions = reinterpret_cast<SkPoint*>(offset); | 266 SkPoint* positions = reinterpret_cast<SkPoint*>(offset); |
| 267 this->writePathVertices(batchTarget, | 267 this->writePathVertices(batchTarget, |
| 268 atlas, | 268 atlas, |
| 269 pipeline, | 269 this->pipeline(), |
| 270 dfProcessor, | 270 dfProcessor, |
| 271 positions, | 271 positions, |
| 272 vertexStride, | 272 vertexStride, |
| 273 this->viewMatrix(), | 273 this->viewMatrix(), |
| 274 args.fPath, | 274 args.fPath, |
| 275 args.fPathData); | 275 args.fPathData); |
| 276 flushInfo.fInstancesToFlush++; | 276 flushInfo.fInstancesToFlush++; |
| 277 } | 277 } |
| 278 | 278 |
| 279 this->flush(batchTarget, &flushInfo); | 279 this->flush(batchTarget, &flushInfo); |
| (...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 625 geometry.fPath = GrTest::TestPath(random); | 625 geometry.fPath = GrTest::TestPath(random); |
| 626 geometry.fAntiAlias = random->nextBool(); | 626 geometry.fAntiAlias = random->nextBool(); |
| 627 | 627 |
| 628 return AADistanceFieldPathBatch::Create(geometry, color, viewMatrix, | 628 return AADistanceFieldPathBatch::Create(geometry, color, viewMatrix, |
| 629 gTestStruct.fAtlas, | 629 gTestStruct.fAtlas, |
| 630 &gTestStruct.fPathCache, | 630 &gTestStruct.fPathCache, |
| 631 &gTestStruct.fPathList); | 631 &gTestStruct.fPathList); |
| 632 } | 632 } |
| 633 | 633 |
| 634 #endif | 634 #endif |
| OLD | NEW |