Donner SVG 0.8.0-pre
SVG editor and embeddable C⁠+⁠+⁠20 engine.
Loading...
Searching...
No Matches
donner::editor::RenderResult::CompositedTile Struct Reference

One composite tile from the worker's CompositorController:: snapshotCompositorTiles() snapshot. The editor uploads one GL texture per tile (keyed on id). The GL presenter composes those cached textures into one pane-sized presentation texture; the WebGPU presenter composites them directly into the framebuffer. Immediate tiles intentionally use transient ids and always carry a fresh payload. Geometry fields are doc-unit quantities so the editor can scale them by the current pixelsPerDocUnit during canvas-resize debouncing. More...

#include "donner/editor/AsyncRenderer.h"

Public Types

enum class  Kind : std::uint8_t {
  Segment ,
  Layer ,
  Immediate
}

Public Attributes

Kind kind = Kind::Segment
std::string id
 Stable id from the compositor - "seg:{i}" or "layer:{entity}". The editor's per-tile texture cache uses this to reuse GL textures across frames when the tile's generation hasn't bumped.
Entity layerEntity = entt::null
 Promoted entity represented by this layer tile. Null for static segment and full-canvas tiles. The presenter uses this to suppress stale cached pixels for a selected element that became non-rendering while keeping editor chrome visible.
std::uint64_t generation = 0
 Monotonic generation from the compositor. Editor re-uploads the bitmap only when this advances.
svg::RendererBitmap bitmap
 Source bitmap; uploaded as the tile's GL texture content.
std::shared_ptr< const svg::RendererTextureSnapshottextureSnapshot
 Backend-owned texture payload. Geode editor builds present this directly via ImGui WGPU.
Vector2i bitmapDimsPx = Vector2i::Zero()
 Intrinsic texture dimensions in raster pixels. Metadata-only tiles keep this populated so the presentation cache can reject stale texture reuse across canvas-size epochs.
Vector2i rasterCanvasSize = Vector2i::Zero()
 Raster canvas size that produced this payload. Metadata-only reuse is only valid inside the same raster-canvas epoch.
Vector2d canvasOffsetDoc = Vector2d::Zero()
 Canvas-space top-left of bitmap, in document units. Editor multiplies by pixelsPerDocUnit to get the on-screen blit origin.
Vector2d bitmapDimsDoc = Vector2d::Zero()
 Bitmap's intrinsic dimensions, in document units. Editor multiplies by current pixelsPerDocUnit to get the on-screen blit size - keeps the bitmap stretching with pinch-zoom while the canvas-size commit is debounced.
Vector2d dragTranslationDoc = Vector2d::Zero()
 For drag-target tiles, the per-frame DOM translation in doc units (the delta between the bitmap's rasterize-time DOM transform and the entity's current DOM transform). Editor adds this to canvasOffsetDoc so the dragged tile slides in real time without re-rasterizing.
Transform2d documentFromCachedDocument = Transform2d()
 Affine transform from cached document placement to presented document placement.
bool isDragTarget = false
 True when this tile is the active drag target. Useful for pre-test inspection; the editor's blit math treats drag and non-drag tiles uniformly via dragTranslationDoc.

Detailed Description

One composite tile from the worker's CompositorController:: snapshotCompositorTiles() snapshot. The editor uploads one GL texture per tile (keyed on id). The GL presenter composes those cached textures into one pane-sized presentation texture; the WebGPU presenter composites them directly into the framebuffer. Immediate tiles intentionally use transient ids and always carry a fresh payload. Geometry fields are doc-unit quantities so the editor can scale them by the current pixelsPerDocUnit during canvas-resize debouncing.


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