Donner 0.5.1
Embeddable browser-grade SVG2 engine
Loading...
Searching...
No Matches
donner::svg::RendererInterface Class Referenceabstract

Backend-agnostic rendering interface consumed by RendererDriver during document traversal. More...

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

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

Public Member Functions

virtual void draw (SVGDocument &document)=0
 Renders the given SVG document.
virtual int width () const =0
 Returns the rendered width in device pixels.
virtual int height () const =0
 Returns the rendered height in device pixels.
virtual void beginFrame (const RenderViewport &viewport)=0
 Begins a render pass with the given viewport.
virtual void endFrame ()=0
 Completes the current render pass, flushing any pending work.
virtual void setTransform (const Transform2d &transform)=0
 Sets the absolute transform on the renderer, replacing the current matrix.
virtual void pushTransform (const Transform2d &transform)=0
 Pushes a transform onto the renderer stack, composing with the current transform.
virtual void popTransform ()=0
 Pops the most recent transform from the renderer stack.
virtual void pushClip (const ResolvedClip &clip)=0
 Pushes a clip path/mask onto the renderer stack.
virtual void popClip ()=0
 Pops the most recent clip from the renderer stack.
virtual void pushIsolatedLayer (double opacity, MixBlendMode blendMode)=0
 Pushes an isolated compositing layer with the given opacity and blend mode.
virtual void popIsolatedLayer ()=0
 Pops the most recent isolated layer, compositing it with the given opacity.
virtual void pushFilterLayer (const components::FilterGraph &filterGraph, const std::optional< Box2d > &filterRegion)=0
 Pushes a filter layer that applies the given filter graph to all content drawn within it.
virtual void popFilterLayer ()=0
 Pops the most recent filter layer.
virtual void pushMask (const std::optional< Box2d > &maskBounds)=0
 Begins mask rendering.
virtual void transitionMaskToContent ()=0
 Transitions from rendering mask content to rendering masked content.
virtual void popMask ()=0
 Pops the mask layer stack, compositing the masked content.
virtual void beginPatternTile (const Box2d &tileRect, const Transform2d &targetFromPattern)=0
 Begins recording content into a pattern tile.
virtual void endPatternTile (bool forStroke)=0
 Ends pattern tile recording and sets the resulting tiled shader as the current fill or stroke paint.
virtual void setPaint (const PaintParams &paint)=0
 Sets the active paint parameters used by subsequent draw calls.
virtual void drawPath (const PathShape &path, const StrokeParams &stroke)=0
 Draws an arbitrary path using the current paint state.
virtual void drawRect (const Box2d &rect, const StrokeParams &stroke)=0
 Convenience helper for drawing axis-aligned rectangles.
virtual void drawEllipse (const Box2d &bounds, const StrokeParams &stroke)=0
 Convenience helper for drawing ellipses bounded by the provided box.
virtual void drawImage (const ImageResource &image, const ImageParams &params)=0
 Draws an image resource into the given target rectangle.
virtual void drawText (Registry &registry, const components::ComputedTextComponent &text, const TextParams &params)=0
 Draws pre-shaped text with the provided paint parameters.
virtual RendererBitmap takeSnapshot () const =0
 Captures a CPU-readable snapshot of the current frame buffer for testing or downstream consumers.
virtual std::unique_ptr< RendererInterfacecreateOffscreenInstance () const
 Creates an independent offscreen renderer instance of the same type as this one.

Detailed Description

Backend-agnostic rendering interface consumed by RendererDriver during document traversal.

Implement this interface to create a custom rendering backend. The driver calls methods in the following order:

  1. Frame lifecycle: draw()beginFrame() → (drawing calls) → endFrame()
  2. State stacks: pushTransform()/popTransform(), pushClip()/popClip(), pushIsolatedLayer()/popIsolatedLayer() are always paired (LIFO).
  3. Paint: setPaint() is called before each draw operation.
  4. Masks: pushMask() → (render mask shape) → transitionMaskToContent() → (render masked content) → popMask(). Masks may nest.

Coordinates flow through three spaces: SVG user units → document coordinates (after viewBox mapping) → device pixels (after devicePixelRatio scaling in RenderViewport).

Member Function Documentation

◆ beginFrame()

virtual void donner::svg::RendererInterface::beginFrame ( const RenderViewport & viewport)
pure virtual

Begins a render pass with the given viewport.

Implementations may allocate or reset backend-specific frame resources here.

Implemented in donner::editor::sandbox::SerializingRenderer, donner::svg::Renderer, donner::svg::RendererGeode, and donner::svg::RendererTinySkia.

◆ beginPatternTile()

virtual void donner::svg::RendererInterface::beginPatternTile ( const Box2d & tileRect,
const Transform2d & targetFromPattern )
pure virtual

Begins recording content into a pattern tile.

Content drawn between beginPatternTile and endPatternTile is captured as a repeating pattern.

Parameters
tileRectThe tile rectangle in pattern coordinate space.
targetFromPatternTransform from pattern tile space to target element space.

Implemented in donner::editor::sandbox::SerializingRenderer, donner::svg::Renderer, donner::svg::RendererGeode, and donner::svg::RendererTinySkia.

◆ createOffscreenInstance()

virtual std::unique_ptr< RendererInterface > donner::svg::RendererInterface::createOffscreenInstance ( ) const
inlinenodiscardvirtual

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 in donner::editor::sandbox::SerializingRenderer, donner::svg::Renderer, donner::svg::RendererGeode, and donner::svg::RendererTinySkia.

◆ draw()

virtual void donner::svg::RendererInterface::draw ( SVGDocument & document)
pure virtual

Renders the given SVG document.

Implementations prepare the document, traverse the render tree, and emit drawing commands.

Implemented in donner::editor::sandbox::SerializingRenderer, donner::svg::Renderer, donner::svg::RendererGeode, and donner::svg::RendererTinySkia.

◆ drawEllipse()

virtual void donner::svg::RendererInterface::drawEllipse ( const Box2d & bounds,
const StrokeParams & stroke )
pure virtual

Convenience helper for drawing ellipses bounded by the provided box.

Implemented in donner::editor::sandbox::SerializingRenderer, donner::svg::Renderer, donner::svg::RendererGeode, and donner::svg::RendererTinySkia.

◆ drawImage()

virtual void donner::svg::RendererInterface::drawImage ( const ImageResource & image,
const ImageParams & params )
pure virtual

Draws an image resource into the given target rectangle.

Implemented in donner::editor::sandbox::SerializingRenderer, donner::svg::Renderer, donner::svg::RendererGeode, and donner::svg::RendererTinySkia.

◆ drawPath()

virtual void donner::svg::RendererInterface::drawPath ( const PathShape & path,
const StrokeParams & stroke )
pure virtual

Draws an arbitrary path using the current paint state.

Implemented in donner::editor::sandbox::SerializingRenderer, donner::svg::Renderer, donner::svg::RendererGeode, and donner::svg::RendererTinySkia.

◆ drawRect()

virtual void donner::svg::RendererInterface::drawRect ( const Box2d & rect,
const StrokeParams & stroke )
pure virtual

Convenience helper for drawing axis-aligned rectangles.

Implemented in donner::editor::sandbox::SerializingRenderer, donner::svg::Renderer, donner::svg::RendererGeode, and donner::svg::RendererTinySkia.

◆ drawText()

virtual void donner::svg::RendererInterface::drawText ( Registry & registry,
const components::ComputedTextComponent & text,
const TextParams & params )
pure virtual

Draws pre-shaped text with the provided paint parameters.

Implemented in donner::editor::sandbox::SerializingRenderer, donner::svg::Renderer, donner::svg::RendererGeode, and donner::svg::RendererTinySkia.

◆ endFrame()

virtual void donner::svg::RendererInterface::endFrame ( )
pure virtual

Completes the current render pass, flushing any pending work.

Implemented in donner::editor::sandbox::SerializingRenderer, donner::svg::Renderer, donner::svg::RendererGeode, and donner::svg::RendererTinySkia.

◆ endPatternTile()

virtual void donner::svg::RendererInterface::endPatternTile ( bool forStroke)
pure virtual

Ends pattern tile recording and sets the resulting tiled shader as the current fill or stroke paint.

Parameters
forStrokeIf true, set the pattern as the stroke paint; otherwise as the fill paint.

Implemented in donner::editor::sandbox::SerializingRenderer, donner::svg::Renderer, donner::svg::RendererGeode, and donner::svg::RendererTinySkia.

◆ height()

virtual int donner::svg::RendererInterface::height ( ) const
nodiscardpure virtual

◆ popClip()

virtual void donner::svg::RendererInterface::popClip ( )
pure virtual

◆ popFilterLayer()

virtual void donner::svg::RendererInterface::popFilterLayer ( )
pure virtual

◆ popIsolatedLayer()

virtual void donner::svg::RendererInterface::popIsolatedLayer ( )
pure virtual

Pops the most recent isolated layer, compositing it with the given opacity.

Implemented in donner::editor::sandbox::SerializingRenderer, donner::svg::Renderer, donner::svg::RendererGeode, and donner::svg::RendererTinySkia.

◆ popMask()

virtual void donner::svg::RendererInterface::popMask ( )
pure virtual

Pops the mask layer stack, compositing the masked content.

Implemented in donner::editor::sandbox::SerializingRenderer, donner::svg::Renderer, donner::svg::RendererGeode, and donner::svg::RendererTinySkia.

◆ popTransform()

virtual void donner::svg::RendererInterface::popTransform ( )
pure virtual

Pops the most recent transform from the renderer stack.

Implemented in donner::editor::sandbox::SerializingRenderer, donner::svg::Renderer, donner::svg::RendererGeode, and donner::svg::RendererTinySkia.

◆ pushClip()

virtual void donner::svg::RendererInterface::pushClip ( const ResolvedClip & clip)
pure virtual

◆ pushFilterLayer()

virtual void donner::svg::RendererInterface::pushFilterLayer ( const components::FilterGraph & filterGraph,
const std::optional< Box2d > & filterRegion )
pure virtual

Pushes a filter layer that applies the given filter graph to all content drawn within it.

Parameters
filterGraphThe filter graph describing primitives and their connections.
filterRegionThe filter region bounds in local coordinates, used to clip the filter output. If nullopt, the filter operates on the full surface.

Implemented in donner::editor::sandbox::SerializingRenderer, donner::svg::Renderer, donner::svg::RendererGeode, and donner::svg::RendererTinySkia.

◆ pushIsolatedLayer()

virtual void donner::svg::RendererInterface::pushIsolatedLayer ( double opacity,
MixBlendMode blendMode )
pure virtual

Pushes an isolated compositing layer with the given opacity and blend mode.

Content drawn between pushIsolatedLayer and popIsolatedLayer is composited as a group at the specified opacity using the specified blend mode.

Implemented in donner::editor::sandbox::SerializingRenderer, donner::svg::Renderer, donner::svg::RendererGeode, and donner::svg::RendererTinySkia.

◆ pushMask()

virtual void donner::svg::RendererInterface::pushMask ( const std::optional< Box2d > & maskBounds)
pure virtual

Begins mask rendering.

The driver renders the mask content between pushMask and transitionMaskToContent, then renders the actual content between transitionMaskToContent and popMask.

Parameters
maskBoundsOptional clip rect for the mask region.

Implemented in donner::editor::sandbox::SerializingRenderer, donner::svg::Renderer, donner::svg::RendererGeode, and donner::svg::RendererTinySkia.

◆ pushTransform()

virtual void donner::svg::RendererInterface::pushTransform ( const Transform2d & transform)
pure virtual

Pushes a transform onto the renderer stack, composing with the current transform.

Implemented in donner::editor::sandbox::SerializingRenderer, donner::svg::Renderer, donner::svg::RendererGeode, and donner::svg::RendererTinySkia.

◆ setPaint()

virtual void donner::svg::RendererInterface::setPaint ( const PaintParams & paint)
pure virtual

Sets the active paint parameters used by subsequent draw calls.

Implemented in donner::editor::sandbox::SerializingRenderer, donner::svg::Renderer, donner::svg::RendererGeode, and donner::svg::RendererTinySkia.

◆ setTransform()

virtual void donner::svg::RendererInterface::setTransform ( const Transform2d & transform)
pure virtual

Sets the absolute transform on the renderer, replacing the current matrix.

Unlike pushTransform, this does not interact with the save/restore stack.

Implemented in donner::editor::sandbox::SerializingRenderer, donner::svg::Renderer, donner::svg::RendererGeode, and donner::svg::RendererTinySkia.

◆ takeSnapshot()

virtual RendererBitmap donner::svg::RendererInterface::takeSnapshot ( ) const
nodiscardpure virtual

Captures a CPU-readable snapshot of the current frame buffer for testing or downstream consumers.

The snapshot must remain valid after the render pass completes.

Implemented in donner::editor::sandbox::SerializingRenderer, donner::svg::Renderer, donner::svg::RendererGeode, and donner::svg::RendererTinySkia.

◆ transitionMaskToContent()

virtual void donner::svg::RendererInterface::transitionMaskToContent ( )
pure virtual

Transitions from rendering mask content to rendering masked content.

Must be called between pushMask and popMask.

Implemented in donner::editor::sandbox::SerializingRenderer, donner::svg::Renderer, donner::svg::RendererGeode, and donner::svg::RendererTinySkia.

◆ width()

virtual int donner::svg::RendererInterface::width ( ) const
nodiscardpure virtual

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