/* * Copyright 2022 Google LLC * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef sktext_gpu_SubRunContainer_DEFINED #define sktext_gpu_SubRunContainer_DEFINED #include "include/core/SkMatrix.h" #include "include/core/SkRefCnt.h" #include "include/core/SkSpan.h" #include "src/text/gpu/SubRunAllocator.h" #include <cstddef> #include <functional> #include <iterator> #include <memory> #include <tuple> #include <utility> class SkCanvas; class SkPaint; class SkReadBuffer; class SkStrikeClient; class SkWriteBuffer; struct SkPoint; struct SkStrikeDeviceInfo; namespace sktext { class GlyphRunList; class StrikeForGPUCacheInterface; } namespace skgpu { enum class MaskFormat : int; } #if defined(SK_GANESH) || defined(SK_USE_LEGACY_GANESH_TEXT_APIS) #include "src/gpu/ganesh/GrColor.h" #include "src/gpu/ganesh/ops/GrOp.h" class GrClip; struct SkIRect; namespace skgpu::ganesh { class SurfaceDrawContext; } #endif namespace sktext::gpu { class GlyphVector; class Glyph; class StrikeCache; class VertexFiller; RegenerateAtlasDelegate; struct RendererData { … }; // -- AtlasSubRun -------------------------------------------------------------------------------- // AtlasSubRun is the API that AtlasTextOp uses to generate vertex data for drawing. // There are three different ways AtlasSubRun is specialized. // * DirectMaskSubRun* - this is by far the most common type of SubRun. The mask pixels are // in 1:1 correspondence with the pixels on the device. The destination rectangles in this // SubRun are in device space. This SubRun handles color glyphs. // * TransformedMaskSubRun* - handles glyph where the image in the atlas needs to be // transformed to the screen. It is usually used for large color glyph which can't be // drawn with paths or scaled distance fields, but will be used to draw bitmap glyphs to // the screen, if the matrix does not map 1:1 to the screen. The destination rectangles // are in source space. // * SDFTSubRun* - scaled distance field text handles largish single color glyphs that still // can fit in the atlas; the sizes between direct SubRun, and path SubRun. The destination // rectangles are in source space. class AtlasSubRun { … }; AtlasDrawDelegate; // -- SubRun ------------------------------------------------------------------------------------- // SubRun defines the most basic functionality of a SubRun; the ability to draw, and the // ability to be in a list. class SubRun; SubRunOwner; class SubRun { … }; // -- SubRunList ----------------------------------------------------------------------------------- class SubRunList { … }; // -- SubRunContainer ------------------------------------------------------------------------------ class SubRunContainer; SubRunContainerOwner; class SubRunContainer { … }; // Returns the empty span if there is a problem reading the positions. SkSpan<SkPoint> MakePointsFromBuffer(SkReadBuffer&, SubRunAllocator*); } // namespace sktext::gpu #endif // sktext_gpu_SubRunContainer_DEFINED