Image barriers now carry their own stage masks and are recorded with
pipelineBarrier2, so barriers flushed together no longer share the
union of their stages. AccessState uses the 64-bit stage and access
flags, and the frame submit uses submit2.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Enable descriptor indexing (bindless), buffer device address, scalar
block layout, indirect draw count, shader draw parameters, timeline
semaphores and synchronization2 alongside dynamic rendering. A single
feature list drives both physical device selection and device creation.
The VMA allocator is created with buffer device address support.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add a RenderTarget resource so the scene can render offscreen instead of
straight to the swapchain. The editor uses it to show the scene inside the
Viewport panel.
- Rename AssetRegistry to ResourceRegistry (AssetTraits -> ResourceTraits,
assets() -> resources()) and move the pools from engine/src/assets to
engine/src/resources. It now covers non-asset GPU resources as well.
- Replace loadMesh() with create<T>(...), and add create<RenderTarget>(),
requestResize(), getExtent() and isAlive().
- Add RenderTarget and RenderTargetPool with RenderTargetHandle.
Resizes are deferred and applied at the start of the next frame, when the
GPU is idle.
- Add Application::setSceneTarget(). With no target set, the scene still
renders to the swapchain. With a target set, the scene renders offscreen
and the swapchain receives only the UI. Frame extent and camera projection
follow the target's size.
- Add sophia::UI (Application::ui()) with image() and getTextureId() to draw
a render target in an ImGui window, sizing the target to the available
space. ImGuiRenderer now registers the target textures for this.
- ViewportPanel takes the UI and a target, and draws the scene image in place
of the flat background fill.
- Update the testbed, the boids example, and the glossary for the rename.