All work

01 / RENDERING SYSTEMS

Renderer

I designed and implemented a 2D vector renderer for use across multiple platforms.

ROLE
New renderer architecture and implementation
STACK
Rust · wgpu · WGSL · WASM

PROTOPIE / STUDIO XID

Cross-platform Rendering

The project moved rendering from ProtoPie’s platform-specific DOM and native views into a shared GPU engine. I designed and implemented the architecture and core rendering paths of a 2D vector renderer built with Rust and wgpu.

DECISION 01 / CONSISTENCY

Geometry Consistency

Interpreting stroke width or alignment independently at each stage can make calculated bounds disagree with the rendered result. I designed a shared interpretation that is computed once and reused across stages.

STROKE INPUTShared planone interpretationBoundslayout extentsPaintappearanceGeometryshape datawidth · align · paint
Shared stroke interpretation across bounds, paint and geometry — concept diagram.

I also distinguished changes that require rebuilding geometry from changes, such as color, that only update paint properties. This keeps rendering consistent while avoiding unnecessary work.

DECISION 02 / RENDER GRAPH

Render Graph

Operations such as blur and compositing consume earlier results, so execution must respect dependencies between passes. I designed the render graph to determine pass order and manage when temporary textures holding intermediate results are needed.

scenepass Apass Bpass Cpass DsubmitDEPENDENCIEStemporary texture lifetime
Concept diagram of pass dependencies and temporary texture lifetimes.

Planning and GPU command encoding were separate stages, allowing graph construction and backend implementation to be developed independently.

DECISION 03 / RECOVERY

Error Recovery

When retrying makes sense

Transient failures retry on a later frame. If the render target changed, it is reconfigured first.

When input needs to change

Work that consistently fails on the same input is retried only when that input changes.

NEXT PROJECTInteractive 3D