A SpriteRenderer — pure data, plugs into engine._renderingContexts.
Inherits clearColor, _drawCallsPre, _update, _record from RenderingContext;
adds only its discriminator tag and the renderer-owned layer list.
Lifecycle. A SpriteRenderer is independent of any SceneContext — it is
registered directly on the engine, opens its own sampleCount=1 swapchain pass, and
must be disposed by the caller. Two patterns:
Standalone (no scene, or one or more renderers alongside a scene):
registerSpriteRenderer after createSpriteRenderer, disposeSpriteRenderer
on shutdown. Caller owns the lifetime end-to-end.
HUD-on-3D (renderer overlaid on a scene): same register step,
then tie disposal to the scene with
onSceneDispose(scene, () => disposeSpriteRenderer(hud)) —
disposeScene then cleans it up automatically. Register the renderer
afterregisterScene so it draws on top.
Scene 52 demonstrates pattern (2). For depth-hosted sprites that should
sort against 3D meshes, use addDepthHostedSpriteLayer(scene, layer) with
a depth-enabled Sprite2DLayer instead — that route is fully owned by the scene.
A
SpriteRenderer— pure data, plugs intoengine._renderingContexts. InheritsclearColor,_drawCallsPre,_update,_recordfromRenderingContext; adds only its discriminator tag and the renderer-owned layer list.Lifecycle. A
SpriteRendereris independent of anySceneContext— it is registered directly on the engine, opens its own sampleCount=1 swapchain pass, and must be disposed by the caller. Two patterns:registerSpriteRendereraftercreateSpriteRenderer,disposeSpriteRendereron shutdown. Caller owns the lifetime end-to-end.registerstep, then tie disposal to the scene withonSceneDispose(scene, () => disposeSpriteRenderer(hud))—disposeScenethen cleans it up automatically. Register the renderer afterregisterSceneso it draws on top.Scene 52 demonstrates pattern (2). For depth-hosted sprites that should sort against 3D meshes, use
addDepthHostedSpriteLayer(scene, layer)with a depth-enabledSprite2DLayerinstead — that route is fully owned by the scene.