Flutter Engine
The Flutter Engine
|
#include <PathAtlas.h>
Classes | |
class | DrawAtlasMgr |
Public Types | |
using | MaskAndOrigin = std::pair< CoverageMaskShape, SkIPoint > |
Public Member Functions | |
PathAtlas (Recorder *recorder, uint32_t requestedWidth, uint32_t requestedHeight) | |
virtual | ~PathAtlas () |
std::pair< const Renderer *, std::optional< MaskAndOrigin > > | addShape (const Rect &transformedShapeBounds, const Shape &shape, const Transform &localToDevice, const SkStrokeRec &style) |
virtual bool | isSuitableForAtlasing (const Rect &transformedShapeBounds, const Rect &clipBounds) const |
uint32_t | width () const |
uint32_t | height () const |
Static Public Attributes | |
static constexpr int | kEntryPadding = 1 |
Protected Member Functions | |
virtual const TextureProxy * | onAddShape (const Shape &, const Transform &transform, const SkStrokeRec &, skvx::half2 maskSize, skvx::half2 *outPos)=0 |
Protected Attributes | |
Recorder * | fRecorder |
uint32_t | fWidth = 0 |
uint32_t | fHeight = 0 |
PathAtlas manages one or more atlas textures that store coverage masks for path rendering.
The contents of a PathAtlas are intended to be transient: atlas regions are considered valid only for the scope of the render passes that sample them. Unlike DrawAtlas, PathAtlas does not necessarily support partial eviction and reuse of subregions. In most subclasses, once an atlas texture is filled up all of its sub-allocations must be invalidated before it can be reused.
PathAtlas does not prescribe how atlas contents get uploaded to the GPU. The specific task mechanism is defined by subclasses.
Definition at line 41 of file PathAtlas.h.
using skgpu::graphite::PathAtlas::MaskAndOrigin = std::pair<CoverageMaskShape, SkIPoint> |
Definition at line 50 of file PathAtlas.h.
skgpu::graphite::PathAtlas::PathAtlas | ( | Recorder * | recorder, |
uint32_t | requestedWidth, | ||
uint32_t | requestedHeight | ||
) |
The PathAtlas will use textures of the requested size or the system's maximum texture size, whichever is smaller.
Definition at line 26 of file PathAtlas.cpp.
|
virtualdefault |
std::pair< const Renderer *, std::optional< PathAtlas::MaskAndOrigin > > skgpu::graphite::PathAtlas::addShape | ( | const Rect & | transformedShapeBounds, |
const Shape & | shape, | ||
const Transform & | localToDevice, | ||
const SkStrokeRec & | style | ||
) |
Searches the atlas for a slot that can fit a coverage mask for a clipped shape with the given bounds in device coordinates and submits the mask to be drawn into the found atlas region. For atlases that cache coverage masks, will first search the cache before adding.
Returns an empty result if a the shape cannot fit in the atlas. Otherwise, returns the CoverageMaskShape (including the texture proxy) for sampling the eventually-rendered coverage mask and the device-space origin the mask should be drawn at (e.g. its recorded draw should be an integer translation matrix), and the Renderer that should be used to draw that shape. The Renderer should have single-channel coverage, require AA bounds outsetting, and have a single renderStep.
The bounds of the atlas entry is laid out with a 1 pixel outset from the given dimensions. The returned shape's UV origin accounts for the padding, and its mask size does not include the padding. This allows the mask to be sampled safely with linear filtering without worrying about HW filtering accessing pixels from other entries.
shape
will be drawn after applying the linear components (scale, rotation, skew) of the provided localToDevice
transform. This is done by translating the shape by the inverse of the rounded out transformedShapeBounds
offset. For an unclipped shape this amounts to translating it back to its origin while preserving any sub-pixel translation. For a clipped shape, this ensures that the visible portions of the mask are centered in the atlas slot while invisible portions that would lie outside the atlas slot get clipped out.
addShape()
schedules the shape to be drawn but when and how the rendering happens is specified by the subclass implementation.
The stroke-and-fill style is drawn as a single combined coverage mask containing the stroke and the fill.
Definition at line 38 of file PathAtlas.cpp.
|
inline |
Definition at line 109 of file PathAtlas.h.
|
inlinevirtual |
Returns true if a path coverage mask with the given device-space bounds is sufficiently small to benefit from atlasing without causing too many atlas renders.
transformedShapeBounds
represents the device-space bounds of the coverage mask shape unrestricted by clip and viewport bounds.
clipBounds
represents the conservative bounding box of the union of the clip stack that should apply to the shape.
Reimplemented in skgpu::graphite::ComputePathAtlas.
Definition at line 103 of file PathAtlas.h.
|
protectedpure virtual |
Implemented in skgpu::graphite::RasterPathAtlas.
|
inline |
Definition at line 108 of file PathAtlas.h.
|
protected |
Definition at line 180 of file PathAtlas.h.
|
protected |
Definition at line 177 of file PathAtlas.h.
|
protected |
Definition at line 179 of file PathAtlas.h.
|
staticconstexpr |
Definition at line 55 of file PathAtlas.h.