|
|
Donner SVG 0.8.0-pre
SVG editor and embeddable C++20 engine.
|
Backend-agnostic renderer driver that prepares documents for rendering and emits drawing commands through a RendererInterface implementation. More...
#include "donner/svg/renderer/RendererDriver.h"
Classes | |
| struct | SecurityStats |
| Optional diagnostics for structured fuzzers and embedders auditing rejected preparation. More... | |
Public Member Functions | |
| RendererDriver (RendererInterface &renderer, bool verbose=false, SecurityStats *securityStats=nullptr) | |
| Create a renderer driver that will forward traversal output to the given backend implementation. | |
| void | draw (SVGDocument &document) |
| Render the given SVGDocument using the configured backend. | |
| void | draw (SVGDocument &document, const RenderViewport &viewport, const Transform2d &surfaceFromCanvas) |
Render the given SVGDocument into viewport after applying surfaceFromCanvas to every canvas-space draw command. | |
| bool | drawInterruptibly (SVGDocument &document, const RenderViewport &viewport, const Transform2d &surfaceFromCanvas, const std::function< bool()> &shouldCancel) |
Prepare and render a document while polling shouldCancel between rendered entities. | |
| RenderSnapshot | captureRenderSnapshot (SVGDocument &document) |
| Capture an immutable render snapshot from the given SVGDocument. | |
| void | draw (const RenderSnapshot &snapshot) |
| Replay an already-captured render snapshot into the configured backend. | |
| void | drawEntityRange (Registry ®istry, Entity firstEntity, Entity lastEntity, const RenderViewport &viewport, const Transform2d &surfaceFromCanvas) |
| Render a range of entities from an already-prepared document's render tree. | |
| bool | drawEntityRangeInterruptibly (Registry ®istry, Entity firstEntity, Entity lastEntity, const RenderViewport &viewport, const Transform2d &surfaceFromCanvas, const std::function< bool()> &shouldCancel) |
Render a prepared entity range while polling shouldCancel between shapes. | |
| void | drawEntityRangeIntoCurrentFrame (Registry ®istry, Entity firstEntity, Entity lastEntity, const RenderViewport &viewport, const Transform2d &surfaceFromCanvas) |
| Render a range of entities into the renderer's already-active frame. | |
| void | drawDocumentIntoCurrentFrame (SVGDocument &document, const RenderViewport &viewport, const Transform2d &surfaceFromCanvas) |
| Prepare and draw a whole document into the renderer's already-open frame, using the same main-entity selection as drawInterruptibly (traversal order, offscreen feImage shadow entities excluded). | |
| std::optional< Box2d > | computeEntityRangeBounds (Registry ®istry, Entity firstEntity, Entity lastEntity, const RenderViewport &viewport, const Transform2d &surfaceFromCanvas) |
| Compute the canvas-space bounding box of every pixel a subsequent drawEntityRange(registry, firstEntity, lastEntity, viewport,
baseTransform) call would write to. | |
| RendererBitmap | takeSnapshot () const |
| Capture a snapshot from the underlying backend after rendering. | |
Static Public Attributes | |
| static constexpr std::size_t | kMaximumPreparedFilterGraphs |
| Aggregate limits for frame-wide filter graph preparation and feImage snapshots. | |
| static constexpr std::size_t | kMaximumPreparedFilterNodes |
| static constexpr std::uint64_t | kMaximumPreparedFilterImageBytes |
| static constexpr std::uint64_t | kMaximumPreparedFilterMaterializationBytes |
| static constexpr std::uint64_t | kMaximumPreparedFilterPayloadBytes |
| static constexpr std::size_t | kMaximumPreparedFilterShadowEntities |
Backend-agnostic renderer driver that prepares documents for rendering and emits drawing commands through a RendererInterface implementation.
| struct donner::svg::RendererDriver::SecurityStats |
Optional diagnostics for structured fuzzers and embedders auditing rejected preparation.
|
explicit |
Create a renderer driver that will forward traversal output to the given backend implementation.
| renderer | Backend receiving prepared draw calls. |
| verbose | Whether to emit diagnostic warnings. |
| securityStats | Optional preparation diagnostics destination. |
|
nodiscard |
Capture an immutable render snapshot from the given SVGDocument.
Snapshot capture prepares the live render tree under document access, then records backend-agnostic draw commands that can be replayed after access is released.
| document | Document to snapshot. |
|
nodiscard |
Compute the canvas-space bounding box of every pixel a subsequent drawEntityRange(registry, firstEntity, lastEntity, viewport, baseTransform) call would write to.
Runs the same entity traversal as drawEntityRange but with a bounds-accumulating visitor; no side effects on the renderer or registry.
The bounds include the effect of:
Returns std::nullopt when:
Safe to call on a RendererDriver whose renderer holds persistent state - the traversal never invokes renderer methods.
| void donner::svg::RendererDriver::draw | ( | const RenderSnapshot & | snapshot | ) |
Replay an already-captured render snapshot into the configured backend.
| snapshot | Snapshot to render. |
| void donner::svg::RendererDriver::draw | ( | SVGDocument & | document, |
| const RenderViewport & | viewport, | ||
| const Transform2d & | surfaceFromCanvas ) |
Render the given SVGDocument into viewport after applying surfaceFromCanvas to every canvas-space draw command.
This is used by editor-style camera rendering: SVG layout can still use the document's semantic full canvas, while the backend only allocates the visible output surface.
| document | Document to render. |
| viewport | Output viewport for the backend frame. |
| surfaceFromCanvas | Transform from document canvas coordinates to the output surface. |
| void donner::svg::RendererDriver::drawDocumentIntoCurrentFrame | ( | SVGDocument & | document, |
| const RenderViewport & | viewport, | ||
| const Transform2d & | surfaceFromCanvas ) |
Prepare and draw a whole document into the renderer's already-open frame, using the same main-entity selection as drawInterruptibly (traversal order, offscreen feImage shadow entities excluded).
Use this instead of deriving an entity range by hand: a range computed from a different ordering can cross drawEntityRange's first/last walk and unbalance layer bookkeeping.
The caller owns beginFrame/endFrame and holds the document's write access.
| document | Document to draw; prepared for rendering by this call. |
| viewport | Viewport for the active render pass. |
| surfaceFromCanvas | Transform that maps canvas coords to the active render surface. |
| void donner::svg::RendererDriver::drawEntityRange | ( | Registry & | registry, |
| Entity | firstEntity, | ||
| Entity | lastEntity, | ||
| const RenderViewport & | viewport, | ||
| const Transform2d & | surfaceFromCanvas ) |
Render a range of entities from an already-prepared document's render tree.
The document must have been prepared via RendererUtils::prepareDocumentForRendering() before calling this method.
| registry | The registry containing the prepared render tree. |
| firstEntity | First entity in the range to render (inclusive). |
| lastEntity | Last entity in the range to render (inclusive). |
| viewport | Viewport for the render pass. |
| surfaceFromCanvas | Transform that maps canvas coords to the render surface (Translate(-topLeft) for tight-bounded compositor segments, identity for full-canvas layers/segments). Named with destFromSource convention; composed with each entity's worldFromEntityTransform as worldFromEntityTransform * surfaceFromCanvas (donner's left-first operator*: "apply entity-to-canvas, then canvas-to-surface"). |
|
nodiscard |
Render a prepared entity range while polling shouldCancel between shapes.
The renderer frame is always balanced and ended before this method returns. A cancelled partial frame is safe to discard, which lets editor workers release their document guard without waiting for an entire complex compositor segment to finish.
| void donner::svg::RendererDriver::drawEntityRangeIntoCurrentFrame | ( | Registry & | registry, |
| Entity | firstEntity, | ||
| Entity | lastEntity, | ||
| const RenderViewport & | viewport, | ||
| const Transform2d & | surfaceFromCanvas ) |
Render a range of entities into the renderer's already-active frame.
This is the current-frame form of drawEntityRange: the caller owns RendererInterface::beginFrame() / endFrame(), and this method only emits the entity-range draw commands. It is used by the compositor when an immediate-mode span should be drawn directly into the composition render target instead of first being rasterized into an offscreen tile.
| registry | The registry containing the prepared render tree. |
| firstEntity | First entity in the range to render (inclusive). |
| lastEntity | Last entity in the range to render (inclusive). |
| viewport | Viewport for the active render pass. |
| surfaceFromCanvas | Transform that maps canvas coords to the active render surface. |
|
nodiscard |
Prepare and render a document while polling shouldCancel between rendered entities.
The document write guard and renderer frame are always balanced before this method returns. A cancelled partial frame is safe for a background worker to discard.
|
staticconstexpr |
Aggregate limits for frame-wide filter graph preparation and feImage snapshots.
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |
|
staticconstexpr |