Donner
C++20 SVG rendering library
Loading...
Searching...
No Matches
donner::svg::RendererSkia Class Reference

Rendering backend using Skia, https://github.com/google/skia. More...

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

Inheritance diagram for donner::svg::RendererSkia:
[legend]
Collaboration diagram for donner::svg::RendererSkia:
[legend]

Public Member Functions

 RendererSkia (bool verbose=false)
 Create the Skia renderer.
 ~RendererSkia ()
 Destructor.
 RendererSkia (RendererSkia &&) noexcept
 Move constructor.
RendererSkiaoperator= (RendererSkia &&) noexcept
 Move assignment operator.
 RendererSkia (const RendererSkia &)=delete
RendererSkiaoperator= (const RendererSkia &)=delete
void draw (SVGDocument &document) override
 Draw the SVG document using the renderer.
void beginFrame (const RenderViewport &viewport) override
 Begins a render pass for the given viewport.
void endFrame () override
 Completes the current render pass, flushing any buffered work.
void setTransform (const Transformd &transform) override
 Sets the absolute transform, replacing the current matrix.
void pushTransform (const Transformd &transform) override
 Pushes a transform onto the Skia canvas stack.
void popTransform () override
 Pops the most recently applied transform.
void pushClip (const ResolvedClip &clip) override
 Pushes a clip rect or path mask onto the Skia canvas stack.
void popClip () override
 Pops the most recently applied clip.
void pushIsolatedLayer (double opacity) override
 Pushes an isolated compositing layer with the given opacity.
void popIsolatedLayer () override
 Pops the most recent isolated layer.
void pushFilterLayer (std::span< const FilterEffect > effects) override
 Pushes a filter layer that applies the given effect chain.
void popFilterLayer () override
 Pops the most recent filter layer.
void pushMask (const std::optional< Boxd > &maskBounds) override
 Begins mask rendering.
void transitionMaskToContent () override
 Transitions from rendering mask content to rendering masked content.
void popMask () override
 Pops the mask layer stack, compositing the masked content.
void beginPatternTile (const Boxd &tileRect, const Transformd &patternToTarget) override
 Begins recording content into a pattern tile.
void endPatternTile (bool forStroke) override
 Ends pattern tile recording and sets the resulting tiled shader as the current fill or stroke paint.
void setPaint (const PaintParams &paint) override
 Sets the current paint state for subsequent draw calls.
void drawPath (const PathShape &path, const StrokeParams &stroke) override
 Draws a path with fill and stroke derived from the current paint.
void drawRect (const Boxd &rect, const StrokeParams &stroke) override
 Draws a rectangle convenience primitive.
void drawEllipse (const Boxd &bounds, const StrokeParams &stroke) override
 Draws an ellipse convenience primitive.
void drawImage (const ImageResource &image, const ImageParams &params) override
 Draws an image resource.
void drawText (const components::ComputedTextComponent &text, const TextParams &params) override
 Draws text runs.
RendererBitmap takeSnapshot () const override
 Captures a CPU-readable snapshot of the last-rendered frame.
std::unique_ptr< RendererInterfacecreateOffscreenInstance () const override
 Creates an independent offscreen renderer instance of the same type as this one.
sk_sp< SkPicture > drawIntoSkPicture (SVGDocument &document)
 Draw the given SVGDocument into a SkPicture, for offscreen rendering or debugging purposes.
bool save (const char *filename)
 Save the rendered image to a PNG file.
std::span< const uint8_t > pixelData () const
 Get the pixel data of the rendered image.
int width () const override
 Get the width of the rendered image in pixels.
int height () const override
 Get the height of the rendered image in pixels.
const SkBitmap & bitmap () const
 Get the SkBitmap of the rendered image.
void setAntialias (bool antialias)
 Enable or disable antialiasing.

Detailed Description

Rendering backend using Skia, https://github.com/google/skia.

Skia is a 2D graphics library that powers Chrome, Firefox, Android, and many other projects, and supports all functionality required to implement SVG (as many of these projects also support SVG).

Skia is used as the reference renderer while implementing Donner.

Constructor & Destructor Documentation

◆ RendererSkia()

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

Create the Skia renderer.

Parameters
verboseIf true, print verbose logging.

Member Function Documentation

◆ beginFrame()

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

Begins a render pass for the given viewport.

Implements donner::svg::RendererInterface.

◆ beginPatternTile()

void donner::svg::RendererSkia::beginPatternTile ( const Boxd & tileRect,
const Transformd & patternToTarget )
overridevirtual

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.
patternToTargetTransform from pattern tile space to target element space.

Implements donner::svg::RendererInterface.

◆ createOffscreenInstance()

std::unique_ptr< RendererInterface > donner::svg::RendererSkia::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. Returns nullptr if offscreen rendering is not supported.

Reimplemented from donner::svg::RendererInterface.

◆ draw()

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

Draw the SVG document using the renderer.

Writes to an internal bitmap, which can be retrieved using the bitmap() method.

Parameters
documentThe SVG document to render.

Implements donner::svg::RendererInterface.

◆ drawEllipse()

void donner::svg::RendererSkia::drawEllipse ( const Boxd & bounds,
const StrokeParams & stroke )
overridevirtual

Draws an ellipse convenience primitive.

Implements donner::svg::RendererInterface.

◆ drawImage()

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

Draws an image resource.

Implements donner::svg::RendererInterface.

◆ drawIntoSkPicture()

sk_sp< SkPicture > donner::svg::RendererSkia::drawIntoSkPicture ( SVGDocument & document)

Draw the given SVGDocument into a SkPicture, for offscreen rendering or debugging purposes.

Parameters
documentThe SVG document to render.

◆ drawPath()

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

Draws a path with fill and stroke derived from the current paint.

Implements donner::svg::RendererInterface.

◆ drawRect()

void donner::svg::RendererSkia::drawRect ( const Boxd & rect,
const StrokeParams & stroke )
overridevirtual

Draws a rectangle convenience primitive.

Implements donner::svg::RendererInterface.

◆ drawText()

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

Draws text runs.

Implements donner::svg::RendererInterface.

◆ endFrame()

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

Completes the current render pass, flushing any buffered work.

Implements donner::svg::RendererInterface.

◆ endPatternTile()

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

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.

Implements donner::svg::RendererInterface.

◆ height()

int donner::svg::RendererSkia::height ( ) const
inlineoverridevirtual

Get the height of the rendered image in pixels.

Implements donner::svg::RendererInterface.

◆ pixelData()

std::span< const uint8_t > donner::svg::RendererSkia::pixelData ( ) const

Get the pixel data of the rendered image.

Returns
A span of the pixel data, in RGBA format of size width() * height() * 4.

◆ popClip()

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

Pops the most recently applied clip.

Implements donner::svg::RendererInterface.

◆ popFilterLayer()

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

Pops the most recent filter layer.

Implements donner::svg::RendererInterface.

◆ popIsolatedLayer()

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

Pops the most recent isolated layer.

Implements donner::svg::RendererInterface.

◆ popMask()

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

Pops the mask layer stack, compositing the masked content.

Implements donner::svg::RendererInterface.

◆ popTransform()

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

Pops the most recently applied transform.

Implements donner::svg::RendererInterface.

◆ pushClip()

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

Pushes a clip rect or path mask onto the Skia canvas stack.

Implements donner::svg::RendererInterface.

◆ pushFilterLayer()

void donner::svg::RendererSkia::pushFilterLayer ( std::span< const FilterEffect > effects)
overridevirtual

Pushes a filter layer that applies the given effect chain.

Implements donner::svg::RendererInterface.

◆ pushIsolatedLayer()

void donner::svg::RendererSkia::pushIsolatedLayer ( double opacity)
overridevirtual

Pushes an isolated compositing layer with the given opacity.

Implements donner::svg::RendererInterface.

◆ pushMask()

void donner::svg::RendererSkia::pushMask ( const std::optional< Boxd > & maskBounds)
overridevirtual

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.

Implements donner::svg::RendererInterface.

◆ pushTransform()

void donner::svg::RendererSkia::pushTransform ( const Transformd & transform)
overridevirtual

Pushes a transform onto the Skia canvas stack.

Implements donner::svg::RendererInterface.

◆ save()

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

Save the rendered image to a PNG file.

Parameters
filenameThe filename to save the PNG to.
Returns
True if the save was successful.

◆ setAntialias()

void donner::svg::RendererSkia::setAntialias ( bool antialias)
inline

Enable or disable antialiasing.

On by default.

Parameters
antialiasWhether to enable antialiasing.

◆ setPaint()

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

Sets the current paint state for subsequent draw calls.

Implements donner::svg::RendererInterface.

◆ setTransform()

void donner::svg::RendererSkia::setTransform ( const Transformd & transform)
overridevirtual

Sets the absolute transform, replacing the current matrix.

Implements donner::svg::RendererInterface.

◆ takeSnapshot()

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

Captures a CPU-readable snapshot of the last-rendered frame.

Implements donner::svg::RendererInterface.

◆ transitionMaskToContent()

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

Transitions from rendering mask content to rendering masked content.

Must be called between pushMask and popMask.

Implements donner::svg::RendererInterface.

◆ width()

int donner::svg::RendererSkia::width ( ) const
inlineoverridevirtual

Get the width of the rendered image in pixels.

Implements donner::svg::RendererInterface.


The documentation for this class was generated from the following files:
  • donner/svg/renderer/RendererSkia.h
  • donner/svg/renderer/RendererSkia.cc