8#ifndef sktext_gpu_SubRunContainer_DEFINED
9#define sktext_gpu_SubRunContainer_DEFINED
34class StrikeForGPUCacheInterface;
41#if defined(SK_GANESH) || defined(SK_USE_LEGACY_GANESH_TEXT_APIS)
92#if defined(SK_GANESH) || defined(SK_USE_LEGACY_GANESH_TEXT_APIS)
93 virtual size_t vertexStride(
const SkMatrix& drawMatrix)
const = 0;
95 virtual std::tuple<const GrClip*, GrOp::Owner> makeAtlasTextOp(
103 virtual void fillVertexData(
129using SubRunOwner = std::unique_ptr<SubRun, SubRunAllocator::Destroyer>;
187 *fTail = std::move(subRun);
190 bool isEmpty()
const {
return fHead ==
nullptr; }
203class SubRunContainer;
247 const SkMatrix fInitialPositionMatrix;
static SkPath clip(const SkPath &path, const SkHalfPlane &plane)
Type::kYUV Type::kRGBA() int(0.7 *637)
virtual skgpu::MaskFormat maskFormat() const =0
virtual const VertexFiller & vertexFiller() const =0
virtual unsigned short instanceFlags() const =0
virtual int glyphSrcPadding() const =0
virtual void testingOnly_packedGlyphIDToGlyph(StrikeCache *cache) const =0
virtual std::tuple< bool, int > regenerateAtlas(int begin, int end, RegenerateAtlasDelegate) const =0
virtual SkSpan< const Glyph * > glyphs() const =0
virtual ~AtlasSubRun()=default
virtual int glyphCount() const =0
static SubRunContainerOwner MakeInAlloc(const GlyphRunList &glyphRunList, const SkMatrix &positionMatrix, const SkPaint &runPaint, SkStrikeDeviceInfo strikeDeviceInfo, StrikeForGPUCacheInterface *strikeCache, sktext::gpu::SubRunAllocator *alloc, SubRunCreationBehavior creationBehavior, const char *tag)
SubRunContainer(SubRunContainer &&)=delete
static size_t EstimateAllocSize(const GlyphRunList &glyphRunList)
void flattenAllocSizeHint(SkWriteBuffer &buffer) const
SubRunContainer(const SubRunContainer &)=delete
const SkMatrix & initialPosition() const
SubRunContainer & operator=(SubRunContainer &&)=delete
static SubRunContainerOwner MakeFromBufferInAlloc(SkReadBuffer &buffer, const SkStrikeClient *client, SubRunAllocator *alloc)
@ kStrikeCalculationsOnly
void draw(SkCanvas *, SkPoint drawOrigin, const SkPaint &, const SkRefCnt *subRunStorage, const AtlasDrawDelegate &) const
SubRunContainer & operator=(const SubRunContainer &)=delete
void flattenRuns(SkWriteBuffer &buffer) const
static int AllocSizeHintFromBuffer(SkReadBuffer &buffer)
bool canReuse(const SkPaint &paint, const SkMatrix &positionMatrix) const
ptrdiff_t difference_type
bool operator!=(const Iterator &rhs) const
std::input_iterator_tag iterator_category
bool operator==(const Iterator &rhs) const
void append(SubRunOwner subRun)
virtual void doFlatten(SkWriteBuffer &buffer) const =0
virtual int unflattenSize() const =0
virtual void draw(SkCanvas *, SkPoint drawOrigin, const SkPaint &, sk_sp< SkRefCnt > subRunStorage, const AtlasDrawDelegate &) const =0
virtual bool canReuse(const SkPaint &paint, const SkMatrix &positionMatrix) const =0
void flatten(SkWriteBuffer &buffer) const
virtual SubRunStreamTag subRunStreamTag() const =0
virtual const AtlasSubRun * testingOnly_atlasSubRun() const =0
static SubRunOwner MakeFromBuffer(SkReadBuffer &buffer, sktext::gpu::SubRunAllocator *alloc, const SkStrikeClient *client)
static const char * begin(const StringSlice &s)
static const uint8_t buffer[]
std::unique_ptr< SubRun, SubRunAllocator::Destroyer > SubRunOwner
std::function< std::tuple< bool, int >(GlyphVector *, int begin, int end, skgpu::MaskFormat, int padding)> RegenerateAtlasDelegate
std::unique_ptr< SubRunContainer, SubRunAllocator::Destroyer > SubRunContainerOwner
std::function< void(const sktext::gpu::AtlasSubRun *subRun, SkPoint drawOrigin, const SkPaint &paint, sk_sp< SkRefCnt > subRunStorage, sktext::gpu::RendererData)> AtlasDrawDelegate