diff options
Diffstat (limited to 'src/gpu/ops/GrSmallPathRenderer.cpp')
-rw-r--r-- | src/gpu/ops/GrSmallPathRenderer.cpp | 49 |
1 files changed, 25 insertions, 24 deletions
diff --git a/src/gpu/ops/GrSmallPathRenderer.cpp b/src/gpu/ops/GrSmallPathRenderer.cpp index 3e7da52230..c4201d7be2 100644 --- a/src/gpu/ops/GrSmallPathRenderer.cpp +++ b/src/gpu/ops/GrSmallPathRenderer.cpp @@ -181,7 +181,7 @@ public: fHelper.visitProxies(func); const sk_sp<GrTextureProxy>* proxies = fAtlas->getProxies(); - for (uint32_t i = 0; i < fAtlas->pageCount(); ++i) { + for (uint32_t i = 0; i < fAtlas->numActivePages(); ++i) { SkASSERT(proxies[i]); func(proxies[i].get()); } @@ -222,11 +222,6 @@ private: FlushInfo flushInfo; flushInfo.fPipeline = fHelper.makePipeline(target); // Setup GrGeometryProcessor - GrDrawOpAtlas* atlas = fAtlas; - uint32_t atlasPageCount = atlas->pageCount(); - if (!atlasPageCount) { - return; - } const SkMatrix& ctm = fShapes[0].fViewMatrix; if (fUsesDistanceField) { uint32_t flags = 0; @@ -249,7 +244,7 @@ private: matrix = &SkMatrix::I(); } flushInfo.fGeometryProcessor = GrDistanceFieldPathGeoProc::Make( - *matrix, atlas->getProxies(), GrSamplerState::ClampBilerp(), flags); + *matrix, fAtlas->getProxies(), GrSamplerState::ClampBilerp(), flags); } else { SkMatrix invert; if (fHelper.usesLocalCoords()) { @@ -260,7 +255,7 @@ private: } flushInfo.fGeometryProcessor = GrBitmapTextGeoProc::Make( - this->color(), atlas->getProxies(), GrSamplerState::ClampNearest(), + this->color(), fAtlas->getProxies(), GrSamplerState::ClampNearest(), kA8_GrMaskFormat, invert, fHelper.usesLocalCoords()); } @@ -335,7 +330,7 @@ private: // check to see if df path is cached ShapeData::Key key(args.fShape, SkScalarCeilToInt(desiredDimension)); shapeData = fShapeCache->find(key); - if (nullptr == shapeData || !atlas->hasID(shapeData->fID)) { + if (nullptr == shapeData || !fAtlas->hasID(shapeData->fID)) { // Remove the stale cache entry if (shapeData) { fShapeCache->remove(shapeData->fKey); @@ -347,7 +342,7 @@ private: shapeData = new ShapeData; if (!this->addDFPathToAtlas(target, &flushInfo, - atlas, + fAtlas, shapeData, args.fShape, SkScalarCeilToInt(desiredDimension), @@ -360,7 +355,7 @@ private: // check to see if bitmap path is cached ShapeData::Key key(args.fShape, args.fViewMatrix); shapeData = fShapeCache->find(key); - if (nullptr == shapeData || !atlas->hasID(shapeData->fID)) { + if (nullptr == shapeData || !fAtlas->hasID(shapeData->fID)) { // Remove the stale cache entry if (shapeData) { fShapeCache->remove(shapeData->fKey); @@ -371,7 +366,7 @@ private: shapeData = new ShapeData; if (!this->addBMPathToAtlas(target, &flushInfo, - atlas, + fAtlas, shapeData, args.fShape, args.fViewMatrix)) { @@ -382,9 +377,9 @@ private: } auto uploadTarget = target->deferredUploadTarget(); - atlas->setLastUseToken(shapeData->fID, uploadTarget->tokenTracker()->nextDrawToken()); + fAtlas->setLastUseToken(shapeData->fID, uploadTarget->tokenTracker()->nextDrawToken()); - this->writePathVertices(atlas, + this->writePathVertices(fAtlas, offset, args.fColor, vertexStride, @@ -400,6 +395,8 @@ private: bool addDFPathToAtlas(GrMeshDrawOp::Target* target, FlushInfo* flushInfo, GrDrawOpAtlas* atlas, ShapeData* shapeData, const GrShape& shape, uint32_t dimension, SkScalar scale) const { + auto resourceProvider = target->resourceProvider(); + const SkRect& bounds = shape.bounds(); // generate bounding rect for bitmap draw @@ -488,10 +485,11 @@ private: SkIPoint16 atlasLocation; GrDrawOpAtlas::AtlasID id; auto uploadTarget = target->deferredUploadTarget(); - if (!atlas->addToAtlas(&id, uploadTarget, width, height, dfStorage.get(), &atlasLocation)) { + if (!atlas->addToAtlas(resourceProvider, &id, uploadTarget, width, height, + dfStorage.get(), &atlasLocation)) { this->flush(target, flushInfo); - if (!atlas->addToAtlas(&id, uploadTarget, width, height, dfStorage.get(), - &atlasLocation)) { + if (!atlas->addToAtlas(resourceProvider, &id, uploadTarget, width, height, + dfStorage.get(), &atlasLocation)) { return false; } } @@ -530,6 +528,8 @@ private: bool addBMPathToAtlas(GrMeshDrawOp::Target* target, FlushInfo* flushInfo, GrDrawOpAtlas* atlas, ShapeData* shapeData, const GrShape& shape, const SkMatrix& ctm) const { + auto resourceProvider = target->resourceProvider(); + const SkRect& bounds = shape.bounds(); if (bounds.isEmpty()) { return false; @@ -590,11 +590,11 @@ private: SkIPoint16 atlasLocation; GrDrawOpAtlas::AtlasID id; auto uploadTarget = target->deferredUploadTarget(); - if (!atlas->addToAtlas(&id, uploadTarget, dst.width(), dst.height(), dst.addr(), - &atlasLocation)) { + if (!atlas->addToAtlas(resourceProvider, &id, uploadTarget, dst.width(), dst.height(), + dst.addr(), &atlasLocation)) { this->flush(target, flushInfo); - if (!atlas->addToAtlas(&id, uploadTarget, dst.width(), dst.height(), dst.addr(), - &atlasLocation)) { + if (!atlas->addToAtlas(resourceProvider, &id, uploadTarget, dst.width(), dst.height(), + dst.addr(), &atlasLocation)) { return false; } } @@ -696,7 +696,7 @@ private: void flush(GrMeshDrawOp::Target* target, FlushInfo* flushInfo) const { GrGeometryProcessor* gp = flushInfo->fGeometryProcessor.get(); - if (gp->numTextureSamplers() != (int)fAtlas->pageCount()) { + if (gp->numTextureSamplers() != (int)fAtlas->numActivePages()) { // During preparation the number of atlas pages has increased. // Update the proxies used in the GP to match. if (fUsesDistanceField) { @@ -788,7 +788,7 @@ bool GrSmallPathRenderer::onDrawPath(const DrawPathArgs& args) { SkASSERT(!args.fShape->isEmpty()); SkASSERT(args.fShape->hasUnstyledKey()); if (!fAtlas) { - fAtlas = GrDrawOpAtlas::Make(args.fContext, + fAtlas = GrDrawOpAtlas::Make(args.fContext->contextPriv().proxyProvider(), kAlpha_8_GrPixelConfig, ATLAS_TEXTURE_WIDTH, ATLAS_TEXTURE_HEIGHT, NUM_PLOTS_X, NUM_PLOTS_Y, @@ -858,7 +858,8 @@ GR_DRAW_OP_TEST_DEFINE(SmallPathOp) { if (context->uniqueID() != gTestStruct.fContextID) { gTestStruct.fContextID = context->uniqueID(); gTestStruct.reset(); - gTestStruct.fAtlas = GrDrawOpAtlas::Make(context, kAlpha_8_GrPixelConfig, + gTestStruct.fAtlas = GrDrawOpAtlas::Make(context->contextPriv().proxyProvider(), + kAlpha_8_GrPixelConfig, ATLAS_TEXTURE_WIDTH, ATLAS_TEXTURE_HEIGHT, NUM_PLOTS_X, NUM_PLOTS_Y, GrDrawOpAtlas::AllowMultitexturing::kYes, |