/* * 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 skgpu_AtlasTypes_DEFINED #define skgpu_AtlasTypes_DEFINED #include "include/core/SkColorType.h" #include "include/core/SkPoint.h" #include "include/core/SkRect.h" #include "include/core/SkRefCnt.h" #include "include/core/SkTypes.h" #include "include/private/base/SkDebug.h" #include "include/private/base/SkTArray.h" #include "include/private/base/SkTo.h" #include "src/base/SkTInternalLList.h" #include "src/core/SkIPoint16.h" #include "src/gpu/RectanizerSkyline.h" #include <array> #include <cstdint> #include <cstring> #include <utility> class GrOpFlushState; class SkAutoPixmapStorage; class TestingUploadTarget; namespace skgpu::graphite { class RecorderPriv; } /** * This file includes internal types that are used by all of our gpu backends for atlases. */ namespace skgpu { struct IRect16 { … }; /** * Formats for masks, used by the font cache. Important that these are 0-based. */ enum class MaskFormat : int { … }; static const int kMaskFormatCount = …; /** * Return the number of bytes-per-pixel for the specified mask format. */ inline constexpr int MaskFormatBytesPerPixel(MaskFormat format) { … } static constexpr SkColorType MaskFormatToColorType(MaskFormat format) { … } /** * Keep track of generation number for atlases and Plots. */ class AtlasGenerationCounter { … }; /** * AtlasToken is used to sequence uploads relative to each other and to batches of draws. */ class AtlasToken { … }; /** * The TokenTracker encapsulates the incrementing and distribution of AtlasTokens. */ class TokenTracker { … }; /** * A PlotLocator specifies the plot and is analogous to a directory path: * page/plot/plotGeneration * * In fact PlotLocator is a portion of a glyph image location in the atlas fully specified by: * format/atlasGeneration/page/plot/plotGeneration/rect */ class PlotLocator { … }; // AtlasLocator handles atlas position information. It keeps a left-top, right-bottom pair of // encoded UV coordinates. The bits 13 & 14 of the U coordinates hold the atlas page index. // This information is handed directly as is from fUVs. This encoding has the nice property // that width = fUVs[2] - fUVs[0]; the page encoding in the top bits subtracts to zero. class AtlasLocator { … }; /** * An interface for eviction callbacks. Whenever an atlas evicts a specific PlotLocator, * it will call all of the registered listeners so they can process the eviction. */ class PlotEvictionCallback { … }; /** * A class which can be handed back to an atlas for updating plots in bulk. The * current max number of plots per page an atlas can handle is 32. If in the future * this is insufficient then we can move to a 64 bit int. */ class BulkUsePlotUpdater { … }; /** * The backing texture for an atlas is broken into a spatial grid of Plots. The Plots * keep track of subimage placement via their Rectanizer. A Plot may be subclassed if * the atlas class needs to track additional information. */ class Plot : public SkRefCnt { … }; PlotList; } // namespace skgpu #endif // skgpu_AtlasTypes_DEFINED