Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(774)

Side by Side Diff: src/gpu/batches/GrAADistanceFieldPathRenderer.cpp

Issue 1512533003: Remove uniform color for GrDistanceFieldGeoProc (Closed) Base URL: https://skia.googlesource.com/skia.git@cleanuptext4
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/gpu/batches/GrAtlasTextBatch.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 params, 205 params,
206 flags, 206 flags,
207 this->usesLocalCoords())); 207 this->usesLocalCoords()));
208 208
209 target->initDraw(dfProcessor, this->pipeline()); 209 target->initDraw(dfProcessor, this->pipeline());
210 210
211 FlushInfo flushInfo; 211 FlushInfo flushInfo;
212 212
213 // allocate vertices 213 // allocate vertices
214 size_t vertexStride = dfProcessor->getVertexStride(); 214 size_t vertexStride = dfProcessor->getVertexStride();
215 SkASSERT(vertexStride == 2 * sizeof(SkPoint)); 215 SkASSERT(vertexStride == 2 * sizeof(SkPoint) + sizeof(GrColor));
216 216
217 const GrVertexBuffer* vertexBuffer; 217 const GrVertexBuffer* vertexBuffer;
218 void* vertices = target->makeVertexSpace(vertexStride, 218 void* vertices = target->makeVertexSpace(vertexStride,
219 kVerticesPerQuad * instanceCoun t, 219 kVerticesPerQuad * instanceCoun t,
220 &vertexBuffer, 220 &vertexBuffer,
221 &flushInfo.fVertexOffset); 221 &flushInfo.fVertexOffset);
222 flushInfo.fVertexBuffer.reset(SkRef(vertexBuffer)); 222 flushInfo.fVertexBuffer.reset(SkRef(vertexBuffer));
223 flushInfo.fIndexBuffer.reset(target->resourceProvider()->refQuadIndexBuf fer()); 223 flushInfo.fIndexBuffer.reset(target->resourceProvider()->refQuadIndexBuf fer());
224 if (!vertices || !flushInfo.fIndexBuffer) { 224 if (!vertices || !flushInfo.fIndexBuffer) {
225 SkDebugf("Could not allocate vertices\n"); 225 SkDebugf("Could not allocate vertices\n");
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 SkDebugf("Can't rasterize path\n"); 271 SkDebugf("Can't rasterize path\n");
272 return; 272 return;
273 } 273 }
274 } 274 }
275 275
276 atlas->setLastUseToken(pathData->fID, target->currentToken()); 276 atlas->setLastUseToken(pathData->fID, target->currentToken());
277 277
278 // Now set vertices 278 // Now set vertices
279 intptr_t offset = reinterpret_cast<intptr_t>(vertices); 279 intptr_t offset = reinterpret_cast<intptr_t>(vertices);
280 offset += i * kVerticesPerQuad * vertexStride; 280 offset += i * kVerticesPerQuad * vertexStride;
281 SkPoint* positions = reinterpret_cast<SkPoint*>(offset);
282 this->writePathVertices(target, 281 this->writePathVertices(target,
283 atlas, 282 atlas,
284 this->pipeline(), 283 this->pipeline(),
285 dfProcessor, 284 dfProcessor,
286 positions, 285 offset,
286 this->color(),
287 vertexStride, 287 vertexStride,
288 this->viewMatrix(), 288 this->viewMatrix(),
289 args.fPath, 289 args.fPath,
290 pathData); 290 pathData);
291 flushInfo.fInstancesToFlush++; 291 flushInfo.fInstancesToFlush++;
292 } 292 }
293 293
294 this->flush(target, &flushInfo); 294 this->flush(target, &flushInfo);
295 } 295 }
296 296
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 #ifdef DF_PATH_TRACKING 430 #ifdef DF_PATH_TRACKING
431 ++g_NumCachedPaths; 431 ++g_NumCachedPaths;
432 #endif 432 #endif
433 return true; 433 return true;
434 } 434 }
435 435
436 void writePathVertices(GrDrawBatch::Target* target, 436 void writePathVertices(GrDrawBatch::Target* target,
437 GrBatchAtlas* atlas, 437 GrBatchAtlas* atlas,
438 const GrPipeline* pipeline, 438 const GrPipeline* pipeline,
439 const GrGeometryProcessor* gp, 439 const GrGeometryProcessor* gp,
440 SkPoint* positions, 440 intptr_t offset,
441 GrColor color,
441 size_t vertexStride, 442 size_t vertexStride,
442 const SkMatrix& viewMatrix, 443 const SkMatrix& viewMatrix,
443 const SkPath& path, 444 const SkPath& path,
444 const PathData* pathData) const { 445 const PathData* pathData) const {
445 GrTexture* texture = atlas->getTexture(); 446 GrTexture* texture = atlas->getTexture();
446 447
447 SkScalar dx = pathData->fBounds.fLeft; 448 SkScalar dx = pathData->fBounds.fLeft;
448 SkScalar dy = pathData->fBounds.fTop; 449 SkScalar dy = pathData->fBounds.fTop;
449 SkScalar width = pathData->fBounds.width(); 450 SkScalar width = pathData->fBounds.width();
450 SkScalar height = pathData->fBounds.height(); 451 SkScalar height = pathData->fBounds.height();
451 452
452 SkScalar invScale = 1.0f / pathData->fScale; 453 SkScalar invScale = 1.0f / pathData->fScale;
453 dx *= invScale; 454 dx *= invScale;
454 dy *= invScale; 455 dy *= invScale;
455 width *= invScale; 456 width *= invScale;
456 height *= invScale; 457 height *= invScale;
457 458
458 SkFixed tx = SkIntToFixed(pathData->fAtlasLocation.fX); 459 SkFixed tx = SkIntToFixed(pathData->fAtlasLocation.fX);
459 SkFixed ty = SkIntToFixed(pathData->fAtlasLocation.fY); 460 SkFixed ty = SkIntToFixed(pathData->fAtlasLocation.fY);
460 SkFixed tw = SkScalarToFixed(pathData->fBounds.width()); 461 SkFixed tw = SkScalarToFixed(pathData->fBounds.width());
461 SkFixed th = SkScalarToFixed(pathData->fBounds.height()); 462 SkFixed th = SkScalarToFixed(pathData->fBounds.height());
462 463
464 SkPoint* positions = reinterpret_cast<SkPoint*>(offset);
465
463 // vertex positions 466 // vertex positions
464 // TODO make the vertex attributes a struct 467 // TODO make the vertex attributes a struct
465 SkRect r = SkRect::MakeXYWH(dx, dy, width, height); 468 SkRect r = SkRect::MakeXYWH(dx, dy, width, height);
466 positions->setRectFan(r.left(), r.top(), r.right(), r.bottom(), vertexSt ride); 469 positions->setRectFan(r.left(), r.top(), r.right(), r.bottom(), vertexSt ride);
467 470
471 // colors
472 for (int i = 0; i < kVerticesPerQuad; i++) {
473 GrColor* colorPtr = (GrColor*)(offset + sizeof(SkPoint) + i * vertex Stride);
474 *colorPtr = color;
475 }
476
468 // vertex texture coords 477 // vertex texture coords
469 SkPoint* textureCoords = positions + 1; 478 SkPoint* textureCoords = (SkPoint*)(offset + sizeof(SkPoint) + sizeof(Gr Color));
470 textureCoords->setRectFan(SkFixedToFloat(texture->texturePriv().normaliz eFixedX(tx)), 479 textureCoords->setRectFan(SkFixedToFloat(texture->texturePriv().normaliz eFixedX(tx)),
471 SkFixedToFloat(texture->texturePriv().normaliz eFixedY(ty)), 480 SkFixedToFloat(texture->texturePriv().normaliz eFixedY(ty)),
472 SkFixedToFloat(texture->texturePriv().normaliz eFixedX(tx + tw)), 481 SkFixedToFloat(texture->texturePriv().normaliz eFixedX(tx + tw)),
473 SkFixedToFloat(texture->texturePriv().normaliz eFixedY(ty + th)), 482 SkFixedToFloat(texture->texturePriv().normaliz eFixedY(ty + th)),
474 vertexStride); 483 vertexStride);
475 } 484 }
476 485
477 void flush(GrVertexBatch::Target* target, FlushInfo* flushInfo) const { 486 void flush(GrVertexBatch::Target* target, FlushInfo* flushInfo) const {
478 GrVertices vertices; 487 GrVertices vertices;
479 int maxInstancesPerDraw = flushInfo->fIndexBuffer->maxQuads(); 488 int maxInstancesPerDraw = flushInfo->fIndexBuffer->maxQuads();
(...skipping 10 matching lines...) Expand all
490 bool usesLocalCoords() const { return fBatch.fUsesLocalCoords; } 499 bool usesLocalCoords() const { return fBatch.fUsesLocalCoords; }
491 500
492 bool onCombineIfPossible(GrBatch* t, const GrCaps& caps) override { 501 bool onCombineIfPossible(GrBatch* t, const GrCaps& caps) override {
493 AADistanceFieldPathBatch* that = t->cast<AADistanceFieldPathBatch>(); 502 AADistanceFieldPathBatch* that = t->cast<AADistanceFieldPathBatch>();
494 if (!GrPipeline::CanCombine(*this->pipeline(), this->bounds(), *that->pi peline(), 503 if (!GrPipeline::CanCombine(*this->pipeline(), this->bounds(), *that->pi peline(),
495 that->bounds(), caps)) { 504 that->bounds(), caps)) {
496 return false; 505 return false;
497 } 506 }
498 507
499 // TODO we could actually probably do a bunch of this work on the CPU, i e map viewMatrix, 508 // TODO we could actually probably do a bunch of this work on the CPU, i e map viewMatrix,
500 // maybe upload color via attribute 509 // maybe upload color via attribute
bsalomon 2015/12/09 02:10:05 To answer my own question, we should delete this.
501 if (this->color() != that->color()) { 510 if (this->color() != that->color()) {
502 return false; 511 return false;
503 } 512 }
504 513
505 if (!this->viewMatrix().cheapEqualTo(that->viewMatrix())) { 514 if (!this->viewMatrix().cheapEqualTo(that->viewMatrix())) {
506 return false; 515 return false;
507 } 516 }
508 517
509 fGeoData.push_back_n(that->geoData()->count(), that->geoData()->begin()) ; 518 fGeoData.push_back_n(that->geoData()->count(), that->geoData()->begin()) ;
510 this->joinBounds(that->bounds()); 519 this->joinBounds(that->bounds());
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
633 geometry.fAntiAlias = random->nextBool(); 642 geometry.fAntiAlias = random->nextBool();
634 geometry.fGenID = random->nextU(); 643 geometry.fGenID = random->nextU();
635 644
636 return AADistanceFieldPathBatch::Create(geometry, color, viewMatrix, 645 return AADistanceFieldPathBatch::Create(geometry, color, viewMatrix,
637 gTestStruct.fAtlas, 646 gTestStruct.fAtlas,
638 &gTestStruct.fPathCache, 647 &gTestStruct.fPathCache,
639 &gTestStruct.fPathList); 648 &gTestStruct.fPathList);
640 } 649 }
641 650
642 #endif 651 #endif
OLDNEW
« no previous file with comments | « no previous file | src/gpu/batches/GrAtlasTextBatch.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698