diff options
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/SkRemoteGlyphCache.cpp | 69 | ||||
-rw-r--r-- | src/core/SkRemoteGlyphCache.h | 17 |
2 files changed, 15 insertions, 71 deletions
diff --git a/src/core/SkRemoteGlyphCache.cpp b/src/core/SkRemoteGlyphCache.cpp index d5e96fce88..c7f1f4497b 100644 --- a/src/core/SkRemoteGlyphCache.cpp +++ b/src/core/SkRemoteGlyphCache.cpp @@ -23,7 +23,6 @@ #if SK_SUPPORT_GPU #include "GrDrawOpAtlas.h" -#include "text/GrAtlasTextContext.h" #endif static SkDescriptor* auto_descriptor_from_desc(const SkDescriptor* source_desc, @@ -189,18 +188,14 @@ public: }; // -- SkTextBlobCacheDiffCanvas ------------------------------------------------------------------- -SkTextBlobCacheDiffCanvas::Settings::Settings() = default; -SkTextBlobCacheDiffCanvas::Settings::~Settings() = default; - SkTextBlobCacheDiffCanvas::SkTextBlobCacheDiffCanvas(int width, int height, const SkMatrix& deviceMatrix, const SkSurfaceProps& props, - SkStrikeServer* strikeSever, Settings settings) + SkStrikeServer* strikeSever) : SkNoDrawCanvas{sk_make_sp<TrackLayerDevice>(SkIRect::MakeWH(width, height), props)} , fDeviceMatrix{deviceMatrix} , fSurfaceProps{props} - , fStrikeServer{strikeSever} - , fSettings{settings} { + , fStrikeServer{strikeSever} { SkASSERT(fStrikeServer); } @@ -279,23 +274,6 @@ void SkTextBlobCacheDiffCanvas::processGlyphRun( runMatrix.preTranslate(position.x(), position.y()); runMatrix.preTranslate(it.offset().x(), it.offset().y()); -#if SK_SUPPORT_GPU - GrAtlasTextContext::Options options; - options.fMinDistanceFieldFontSize = fSettings.fMinDistanceFieldFontSize; - options.fMaxDistanceFieldFontSize = fSettings.fMaxDistanceFieldFontSize; - GrAtlasTextContext::SanitizeOptions(&options); - if (GrAtlasTextContext::CanDrawAsDistanceFields(runPaint, runMatrix, fSurfaceProps, - fSettings.fContextSupportsDistanceFieldText, - options)) { - SkScalar textRatio; - SkPaint dfPaint(runPaint); - SkScalerContextFlags flags; - GrAtlasTextContext::InitDistanceFieldPaint(nullptr, &dfPaint, runMatrix, options, - &textRatio, &flags); - this->processGlyphRunForDFT(it, dfPaint, flags); - } -#endif - // If the matrix has perspective, we fall back to using distance field text or paths. // TODO: Add distance field text support, and FallbackTextHelper logic from GrAtlasTextContext. if (SkDraw::ShouldDrawTextAsPaths(runPaint, runMatrix)) { @@ -356,11 +334,9 @@ void SkTextBlobCacheDiffCanvas::processGlyphRun( SkScalerContextRec deviceSpecificRec; SkScalerContextEffects effects; - auto* glyphCacheState = - static_cast<SkStrikeServer*>(fStrikeServer) - ->getOrCreateCache(runPaint, &fSurfaceProps, &runMatrix, - SkScalerContextFlags::kFakeGammaAndBoostContrast, - &deviceSpecificRec, &effects); + auto* glyphCacheState = static_cast<SkStrikeServer*>(fStrikeServer) + ->getOrCreateCache(runPaint, &fSurfaceProps, &runMatrix, + &deviceSpecificRec, &effects); SkASSERT(glyphCacheState); const bool asPath = false; @@ -395,33 +371,11 @@ void SkTextBlobCacheDiffCanvas::processGlyphRunForPaths(const SkTextBlobRunItera SkScalerContextRec deviceSpecificRec; SkScalerContextEffects effects; - auto* glyphCacheState = - static_cast<SkStrikeServer*>(fStrikeServer) - ->getOrCreateCache(pathPaint, &fSurfaceProps, nullptr, - SkScalerContextFlags::kFakeGammaAndBoostContrast, - &deviceSpecificRec, &effects); - - const bool asPath = true; - const SkIPoint subPixelPos{0, 0}; - const uint16_t* glyphs = it.glyphs(); - for (uint32_t index = 0; index < it.glyphCount(); index++) { - glyphCacheState->addGlyph(runPaint.getTypeface(), - effects, - SkPackedGlyphID(glyphs[index], subPixelPos.x(), subPixelPos.y()), - asPath); - } -} - -void SkTextBlobCacheDiffCanvas::processGlyphRunForDFT(const SkTextBlobRunIterator& it, - const SkPaint& runPaint, - SkScalerContextFlags flags) { - SkScalerContextRec deviceSpecificRec; - SkScalerContextEffects effects; auto* glyphCacheState = static_cast<SkStrikeServer*>(fStrikeServer) - ->getOrCreateCache(runPaint, &fSurfaceProps, nullptr, flags, + ->getOrCreateCache(pathPaint, &fSurfaceProps, nullptr, &deviceSpecificRec, &effects); - const bool asPath = false; + const bool asPath = true; const SkIPoint subPixelPos{0, 0}; const uint16_t* glyphs = it.glyphs(); for (uint32_t index = 0; index < it.glyphCount(); index++) { @@ -497,12 +451,15 @@ SkStrikeServer::SkGlyphCacheState* SkStrikeServer::getOrCreateCache( const SkPaint& paint, const SkSurfaceProps* props, const SkMatrix* matrix, - SkScalerContextFlags flags, SkScalerContextRec* deviceRec, SkScalerContextEffects* effects) { SkScalerContextRec keyRec; - SkScalerContext::MakeRecAndEffects(paint, props, matrix, flags, deviceRec, effects, true); - SkScalerContext::MakeRecAndEffects(paint, props, matrix, flags, &keyRec, effects, false); + SkScalerContext::MakeRecAndEffects(paint, props, matrix, + SkScalerContextFlags::kFakeGammaAndBoostContrast, deviceRec, + effects, true); + SkScalerContext::MakeRecAndEffects(paint, props, matrix, + SkScalerContextFlags::kFakeGammaAndBoostContrast, &keyRec, + effects, false); TRACE_EVENT1("skia", "RecForDesc", "rec", TRACE_STR_COPY(keyRec.dump().c_str())); // TODO: possible perf improvement - don't recompute the device desc on cache hit. diff --git a/src/core/SkRemoteGlyphCache.h b/src/core/SkRemoteGlyphCache.h index d1119cf70a..60d880791f 100644 --- a/src/core/SkRemoteGlyphCache.h +++ b/src/core/SkRemoteGlyphCache.h @@ -28,7 +28,6 @@ class Serializer; class SkDescriptor; class SkGlyphCache; struct SkPackedGlyphID; -enum SkScalerContextFlags : uint32_t; class SkScalerContextRecDescriptor; class SkTextBlobRunIterator; class SkTypefaceProxy; @@ -52,17 +51,8 @@ using SkDescriptorSet = // which will be serialized and renderered using the SkStrikeClient. class SK_API SkTextBlobCacheDiffCanvas : public SkNoDrawCanvas { public: - struct SK_API Settings { - Settings(); - ~Settings(); - - bool fContextSupportsDistanceFieldText = true; - SkScalar fMinDistanceFieldFontSize = -1.f; - SkScalar fMaxDistanceFieldFontSize = -1.f; - }; SkTextBlobCacheDiffCanvas(int width, int height, const SkMatrix& deviceMatrix, - const SkSurfaceProps& props, SkStrikeServer* strikeserver, - Settings settings = Settings()); + const SkSurfaceProps& props, SkStrikeServer* strikeserver); ~SkTextBlobCacheDiffCanvas() override; protected: @@ -80,13 +70,10 @@ private: const SkTextBlobRunIterator& it, const SkPaint& runPaint); void processGlyphRunForPaths(const SkTextBlobRunIterator& it, const SkPaint& runPaint); - void processGlyphRunForDFT(const SkTextBlobRunIterator& it, const SkPaint& runPaint, - SkScalerContextFlags flags); const SkMatrix fDeviceMatrix; const SkSurfaceProps fSurfaceProps; SkStrikeServer* const fStrikeServer; - const Settings fSettings; }; using SkDiscardableHandleId = uint32_t; @@ -174,7 +161,7 @@ public: }; SkGlyphCacheState* getOrCreateCache(const SkPaint&, const SkSurfaceProps*, const SkMatrix*, - SkScalerContextFlags flags, SkScalerContextRec* deviceRec, + SkScalerContextRec* deviceRec, SkScalerContextEffects* effects); private: |