Donner SVG 0.8.0-pre
SVG editor and embeddable C⁠+⁠+⁠20 engine.
Loading...
Searching...
No Matches
donner::svg::RendererTinySkia Class Reference

Rendering backend using tiny-skia-cpp. More...

#include "donner/svg/renderer/RendererTinySkia.h"

Inheritance diagram for donner::svg::RendererTinySkia:
[legend]

Public Member Functions

 RendererTinySkia (bool verbose=false)
 Creates the tiny-skia renderer.
 ~RendererTinySkia ()
 Destructor.
 RendererTinySkia (RendererTinySkia &&) noexcept
 Move constructor.
RendererTinySkiaoperator= (RendererTinySkia &&) noexcept
 Move assignment operator.
 RendererTinySkia (const RendererTinySkia &)=delete
RendererTinySkiaoperator= (const RendererTinySkia &)=delete
void draw (SVGDocument &document) override
 Draws the SVG document using the renderer.
void beginFrameResourceScope () override
 Begins one aggregate resource-budget scope around a controller-managed frame.
void endFrameResourceScope () override
 Completes a scope opened by beginFrameResourceScope.
void beginFrame (const RenderViewport &viewport) override
 Begins a render pass for the given viewport.
void endFrame () override
 Completes the current render pass.
void setTransform (const Transform2d &transform) override
 Sets the absolute transform, replacing the current matrix.
void pushTransform (const Transform2d &transform) override
 Pushes a relative transform.
void popTransform () override
 Pops the most recent transform.
void pushClip (const ResolvedClip &clip) override
 Pushes a clip rect or clip path.
void popClip () override
 Pops the most recent clip.
void pushIsolatedLayer (double opacity, MixBlendMode blendMode) override
 Pushes an isolated compositing layer.
void popIsolatedLayer () override
 Pops the most recent isolated layer.
void pushFilterLayer (const components::FilterGraph &filterGraph, const std::optional< Box2d > &filterRegion) override
 Pushes a filter layer.
void popFilterLayer () override
 Pops the most recent filter layer.
void pushMask (const std::optional< Box2d > &maskBounds) override
 Begins mask rendering.
void pushMask (const std::optional< Box2d > &maskBounds, MaskType maskType) override
 Begins mask rendering with an explicit coverage mode.
void transitionMaskToContent () override
 Switches from mask rendering to masked content rendering.
void popMask () override
 Pops the current mask and composites the masked content.
bool beginPatternTile (const Box2d &tileRect, const Transform2d &targetFromPattern) override
 Begins pattern tile recording.
void endPatternTile (bool forStroke) override
 Ends pattern recording and stores the resulting pattern paint.
void setPaint (const PaintParams &paint) override
 Sets the active paint parameters for subsequent draw calls.
void drawPath (const PathShape &path, const StrokeParams &stroke) override
 Draws an arbitrary path.
void drawRect (const Box2d &rect, const StrokeParams &stroke) override
 Draws an axis-aligned rectangle.
void drawEllipse (const Box2d &bounds, const StrokeParams &stroke) override
 Draws an ellipse.
void drawImage (const ImageResource &image, const ImageParams &params) override
 Draws an image resource.
void drawBitmap (const RendererBitmap &bitmap, const ImageParams &params) override
 Zero-copy compose blit for premultiplied CPU bitmaps.
void drawText (Registry &registry, const components::ComputedTextComponent &text, const TextParams &params) override
 Draws shaped text.
RendererBitmap takeSnapshot () const override
 Captures a CPU-readable snapshot of the current frame.
std::unique_ptr< RendererInterfacecreateOffscreenInstance () const override
 Creates an independent offscreen renderer instance of the same type as this one.
RendererResourceStats resourceStats () const override
 Return resource-admission diagnostics for the current frame.
RendererFilterPreparationBudgetfilterPreparationBudget () override
 Shared driver-side filter preparation budget for this renderer family, when supported.
void setDashWorkBudgetForTesting (std::size_t maximumWorkUnits)
 Reduce generated-dash work for a boundary test.
void setGradientStopBudgetForTesting (std::size_t maximumStops)
 Reduce materialized gradient stops for a boundary test.
void setTextGlyphBudgetForTesting (std::size_t maximumGlyphs)
 Reduce admitted text glyphs for a boundary test.
void setTextMaterializationBudgetForTesting (RendererTextMaterializationBudget::Cost limits)
 Reduce decoded-outline and path-copy ceilings for a boundary test.
bool save (const char *filename)
 Saves the last rendered frame to a PNG file.
void setAntialias (bool antialias)
 Enables or disables anti-aliasing.
bool antialias () const
 Returns whether anti-aliasing is enabled.
void setRetainedSpansEnabled (bool enabled)
 Enables or disables retained rasterization.
bool retainedSpansEnabled () const
 Returns whether retained rasterization is enabled.
void setRetainedSpanBudgetBytes (std::size_t bytes)
 Sets the per-document ceiling on retained coverage.
const RetainedSpanStatsretainedSpanStats () const
 Returns what retained rasterization did during the most recent frame.
int width () const override
 Returns the rendered width in pixels.
int height () const override
 Returns the rendered height in pixels.
const RendererTinySkiaFrameCountersframeCounters () const
 Conversions performed during the most recent frame.
Public Member Functions inherited from donner::svg::RendererInterface
virtual void setPreserveTargetOnBeginFrame (bool preserve)
 Preserve the current render target when the next frame begins.
virtual bool drawTextureSnapshot (const RendererTextureSnapshot &texture, const Box2d &targetRect, double opacity=1.0, bool pixelated=false)
 Draws a backend-owned texture snapshot into the given target rectangle.
virtual RendererBitmap takeSnapshotInterruptibly (const std::function< bool()> &shouldCancel) const
 Captures a CPU-readable snapshot while allowing a low-priority caller to abort the readback.
virtual RendererReadbackStats consumeReadbackStats ()
 Consume readback diagnostics accumulated by this renderer backend.
virtual void injectFilterLocalRasterAllocationFailureForTesting ()
 Cause the next local filter raster allocation to fail in a boundary test.
virtual std::shared_ptr< const RendererTextureSnapshottakeTextureSnapshot ()
 Captures the current frame buffer as a backend-owned GPU texture.
virtual const RendererTextureSnapshotborrowTextureSnapshot () UTILS_LIFETIME_BOUND
 Borrows the current backend-owned GPU texture for a synchronous presentation operation.
virtual bool requiresTextureSnapshotPresentation () const
 Returns true when presentation callers must use takeTextureSnapshot and must not fall back to CPU bitmap readback for normal frame handoff.
virtual void setOffscreenCreationHookForTesting (std::function< void()>)
 Install a zero-default hook entered from inside offscreen backend construction.
virtual std::uint64_t filterBudgetChunksForTesting () const
 Number of filter-budget command-buffer chunks submitted by this renderer family.
virtual void setDebugGeometryOverlay (bool)
 Enable or disable the backend's geometry debug overlay.
virtual bool debugGeometryOverlay () const
 Whether the backend's geometry debug overlay is enabled. Backends without an overlay always report false.

Detailed Description

Rendering backend using tiny-skia-cpp.

This backend provides a lightweight software rasterizer implementation of RendererInterface. It currently targets shape, image, gradient, clip, mask, pattern, and opacity-layer rendering. Text rendering is not yet implemented.

Constructor & Destructor Documentation

◆ RendererTinySkia()

donner::svg::RendererTinySkia::RendererTinySkia ( bool verbose = false)
explicit

Creates the tiny-skia renderer.

Parameters
verboseIf true, emit diagnostic logging for unsupported features.

Member Function Documentation

◆ beginFrame()

void donner::svg::RendererTinySkia::beginFrame ( const RenderViewport & viewport)
overridevirtual

Begins a render pass for the given viewport.

Parameters
viewportThe viewport dimensions for the render pass.

Implements donner::svg::RendererInterface.

◆ beginFrameResourceScope()

void donner::svg::RendererTinySkia::beginFrameResourceScope ( )
overridevirtual

Begins one aggregate resource-budget scope around a controller-managed frame.

A controller may render several offscreen passes before the root render pass. Backends that share frame budgets with their offscreen instances override this pair so every pass consumes one budget epoch instead of resetting independently. Ordinary single-pass callers may omit the scope and continue to rely on beginFrame.

Reimplemented from donner::svg::RendererInterface.

◆ beginPatternTile()

bool donner::svg::RendererTinySkia::beginPatternTile ( const Box2d & tileRect,
const Transform2d & targetFromPattern )
nodiscardoverridevirtual

Begins pattern tile recording.

Parameters
tileRectTile bounds in pattern space.
targetFromPatternTransform from pattern tile space to target space.
Returns
True when recording started. False rejects an unsafe tile before allocation.

Implements donner::svg::RendererInterface.

◆ createOffscreenInstance()

std::unique_ptr< RendererInterface > donner::svg::RendererTinySkia::createOffscreenInstance ( ) const
nodiscardoverridevirtual

Creates an independent offscreen renderer instance of the same type as this one.

Used for rendering sub-documents into intermediate pixmaps when a backend needs an isolated offscreen pass (e.g., for feImage with SVG content). Returns nullptr if offscreen rendering is not supported.

Reimplemented from donner::svg::RendererInterface.

◆ draw()

void donner::svg::RendererTinySkia::draw ( SVGDocument & document)
overridevirtual

Draws the SVG document using the renderer.

Parameters
documentThe SVG document to render.

Implements donner::svg::RendererInterface.

◆ drawBitmap()

void donner::svg::RendererTinySkia::drawBitmap ( const RendererBitmap & bitmap,
const ImageParams & params )
overridevirtual

Zero-copy compose blit for premultiplied CPU bitmaps.

tiny-skia consumes premultiplied RGBA natively, so a tightly-packed premultiplied RendererBitmap is drawn through a borrowed PixmapView with no pixel-buffer conversion or copy. Padded and non-premultiplied bitmaps are packed into draw scratch before creating the view.

Parameters
bitmapThe bitmap to draw.
paramsImage placement parameters.

Reimplemented from donner::svg::RendererInterface.

◆ drawEllipse()

void donner::svg::RendererTinySkia::drawEllipse ( const Box2d & bounds,
const StrokeParams & stroke )
overridevirtual

Draws an ellipse.

Parameters
boundsThe ellipse bounds.
strokeStroke configuration for the ellipse.

Implements donner::svg::RendererInterface.

◆ drawImage()

void donner::svg::RendererTinySkia::drawImage ( const ImageResource & image,
const ImageParams & params )
overridevirtual

Draws an image resource.

Parameters
imageThe image resource to draw.
paramsImage placement parameters.

Implements donner::svg::RendererInterface.

◆ drawPath()

void donner::svg::RendererTinySkia::drawPath ( const PathShape & path,
const StrokeParams & stroke )
overridevirtual

Draws an arbitrary path.

Parameters
pathThe path to draw.
strokeStroke configuration for the path.

Implements donner::svg::RendererInterface.

◆ drawRect()

void donner::svg::RendererTinySkia::drawRect ( const Box2d & rect,
const StrokeParams & stroke )
overridevirtual

Draws an axis-aligned rectangle.

Parameters
rectThe rectangle bounds.
strokeStroke configuration for the rectangle.

Implements donner::svg::RendererInterface.

◆ drawText()

void donner::svg::RendererTinySkia::drawText ( Registry & registry,
const components::ComputedTextComponent & text,
const TextParams & params )
overridevirtual

Draws shaped text.

Parameters
registryECS registry used for resolving paint references.
textThe shaped text runs.
paramsText styling parameters.

Implements donner::svg::RendererInterface.

◆ endFrame()

void donner::svg::RendererTinySkia::endFrame ( )
overridevirtual

Completes the current render pass.

Implements donner::svg::RendererInterface.

◆ endFrameResourceScope()

void donner::svg::RendererTinySkia::endFrameResourceScope ( )
overridevirtual

Completes a scope opened by beginFrameResourceScope.

Reimplemented from donner::svg::RendererInterface.

◆ endPatternTile()

void donner::svg::RendererTinySkia::endPatternTile ( bool forStroke)
overridevirtual

Ends pattern recording and stores the resulting pattern paint.

Parameters
forStrokeIf true, store as stroke paint, otherwise fill paint.

Implements donner::svg::RendererInterface.

◆ filterPreparationBudget()

RendererFilterPreparationBudget * donner::svg::RendererTinySkia::filterPreparationBudget ( )
nodiscardoverridevirtual

Shared driver-side filter preparation budget for this renderer family, when supported.

Reimplemented from donner::svg::RendererInterface.

◆ frameCounters()

const RendererTinySkiaFrameCounters & donner::svg::RendererTinySkia::frameCounters ( ) const
inlinenodiscard

Conversions performed during the most recent frame.

See also
RendererTinySkiaFrameCounters

◆ height()

int donner::svg::RendererTinySkia::height ( ) const
overridevirtual

Returns the rendered height in pixels.

Implements donner::svg::RendererInterface.

◆ popClip()

void donner::svg::RendererTinySkia::popClip ( )
overridevirtual

Pops the most recent clip.

Implements donner::svg::RendererInterface.

◆ popFilterLayer()

void donner::svg::RendererTinySkia::popFilterLayer ( )
overridevirtual

Pops the most recent filter layer.

Implements donner::svg::RendererInterface.

◆ popIsolatedLayer()

void donner::svg::RendererTinySkia::popIsolatedLayer ( )
overridevirtual

Pops the most recent isolated layer.

Implements donner::svg::RendererInterface.

◆ popMask()

void donner::svg::RendererTinySkia::popMask ( )
overridevirtual

Pops the current mask and composites the masked content.

Implements donner::svg::RendererInterface.

◆ popTransform()

void donner::svg::RendererTinySkia::popTransform ( )
overridevirtual

Pops the most recent transform.

Implements donner::svg::RendererInterface.

◆ pushClip()

void donner::svg::RendererTinySkia::pushClip ( const ResolvedClip & clip)
overridevirtual

Pushes a clip rect or clip path.

Parameters
clipThe resolved clip to apply.

Implements donner::svg::RendererInterface.

◆ pushFilterLayer()

void donner::svg::RendererTinySkia::pushFilterLayer ( const components::FilterGraph & filterGraph,
const std::optional< Box2d > & filterRegion )
overridevirtual

Pushes a filter layer.

Parameters
filterGraphThe filter graph to apply when the layer is popped.
filterRegionOptional filter region bounds in user space.

Implements donner::svg::RendererInterface.

◆ pushIsolatedLayer()

void donner::svg::RendererTinySkia::pushIsolatedLayer ( double opacity,
MixBlendMode blendMode )
overridevirtual

Pushes an isolated compositing layer.

Parameters
opacityGroup opacity applied when the layer is composited back.
blendModeMix-blend-mode applied when the layer is composited back.

Implements donner::svg::RendererInterface.

◆ pushMask() [1/2]

void donner::svg::RendererTinySkia::pushMask ( const std::optional< Box2d > & maskBounds)
inlineoverridevirtual

Begins mask rendering.

Parameters
maskBoundsOptional mask bounds clip.
maskTypeWhether mask coverage comes from luminance or alpha.

Implements donner::svg::RendererInterface.

◆ pushMask() [2/2]

void donner::svg::RendererTinySkia::pushMask ( const std::optional< Box2d > & maskBounds,
MaskType maskType )
overridevirtual

Begins mask rendering with an explicit coverage mode.

Appended after the legacy virtual surface to preserve existing vtable slot order. The default compatibility implementation delegates to the one-argument luminance entry point. Backends that support MaskType::Alpha override this overload.

Parameters
maskBoundsOptional clip rect for the mask region.
maskTypeWhether mask coverage comes from luminance or alpha.

Reimplemented from donner::svg::RendererInterface.

◆ pushTransform()

void donner::svg::RendererTinySkia::pushTransform ( const Transform2d & transform)
overridevirtual

Pushes a relative transform.

Parameters
transformThe transform to compose with the current matrix.

Implements donner::svg::RendererInterface.

◆ resourceStats()

RendererResourceStats donner::svg::RendererTinySkia::resourceStats ( ) const
nodiscardoverridevirtual

Return resource-admission diagnostics for the current frame.

Reimplemented from donner::svg::RendererInterface.

◆ save()

bool donner::svg::RendererTinySkia::save ( const char * filename)

Saves the last rendered frame to a PNG file.

Parameters
filenameThe output PNG filename.
Returns
True if the file was written.

◆ setPaint()

void donner::svg::RendererTinySkia::setPaint ( const PaintParams & paint)
overridevirtual

Sets the active paint parameters for subsequent draw calls.

Parameters
paintThe resolved paint state.

Implements donner::svg::RendererInterface.

◆ setRetainedSpanBudgetBytes()

void donner::svg::RendererTinySkia::setRetainedSpanBudgetBytes ( std::size_t bytes)
inline

Sets the per-document ceiling on retained coverage.

Exceeding it evicts the coldest shapes; a working set that does not fit at all turns retention off for that document.

See also
RetainedSpanDocumentState.
Parameters
bytesCeiling in bytes.

◆ setRetainedSpansEnabled()

void donner::svg::RendererTinySkia::setRetainedSpansEnabled ( bool enabled)
inline

Enables or disables retained rasterization.

When enabled, each shape's coverage is recorded the first time it is rasterized and replayed on later frames for as long as every input that coverage depended on is unchanged, which turns a redraw of an unchanged document into blits. Output is byte-identical either way; the cost is the memory the recordings occupy, bounded by setRetainedSpanBudgetBytes.

Off by default, because a renderer that draws each document once pays the recording cost with nothing to replay it onto.

Parameters
enabledWhether to retain and replay per-shape coverage.

◆ setTransform()

void donner::svg::RendererTinySkia::setTransform ( const Transform2d & transform)
overridevirtual

Sets the absolute transform, replacing the current matrix.

Parameters
transformThe transform to apply.

Implements donner::svg::RendererInterface.

◆ takeSnapshot()

RendererBitmap donner::svg::RendererTinySkia::takeSnapshot ( ) const
nodiscardoverridevirtual

Captures a CPU-readable snapshot of the current frame.

Returns
A snapshot of the rendered frame.

Implements donner::svg::RendererInterface.

◆ transitionMaskToContent()

void donner::svg::RendererTinySkia::transitionMaskToContent ( )
overridevirtual

Switches from mask rendering to masked content rendering.

Implements donner::svg::RendererInterface.

◆ width()

int donner::svg::RendererTinySkia::width ( ) const
overridevirtual

Returns the rendered width in pixels.

Implements donner::svg::RendererInterface.


The documentation for this class was generated from the following file: