37 KiB
Datoviz v0.4 Feature Fixture Matrix
Status: Informative planning Scope: minimal one-feature C examples, generated fixtures, and advanced low-level examples Goal: maintain one small example idea per implemented or planned Datoviz feature
This matrix is an implementation guide for building a compact example suite. It does not define runtime semantics. It records what each fixture should demonstrate, what layer it should use, and which optional capabilities it requires.
Scene/app rows are owned here. Low-level vk, vklite, canvas, stream, video, DRP2,
WebGPU, CUDA, and interop rows are included only as a cross-stack coverage index. Their behavior
belongs in the owning subsystem specs.
Release staging is not decided in this file. Use
PLANNING.md to decide whether a fixture or worked
example is v0.4 required, v0.4 experimental, v0.4 fixture-only, v0.5, later, or
external/GSP. This matrix should stay focused on small, one-feature validation artifacts.
Principles
- One feature per fixture. Avoid combining multiple visual families, controllers, effects, GUI panels, and data loaders in one file unless the feature is the combination itself.
- Prefer deterministic offscreen output. A PNG, JSON stream, DVZR directory, or stdout assertion is better than a live window when the feature does not require live interaction.
- Use tiny synthetic data. Prefer three points, one triangle, a 4x4 image, or a tiny 3D scalar field over external datasets.
- Make optional dependencies explicit. GLFW, GUI/cimgui, CUDA/NVENC, Kvazaar, WebGPU, and external-memory fixtures should be gated in CMake and documented in the fixture row.
- Separate fixtures from showcases. Fixtures prove one API shape; showcase examples may combine features into richer applications. A fixture can be release-critical without becoming a gallery example.
- Keep low-level examples in their own track. Direct
vk,vklite,canvas,stream, anddrp2examples are useful, but they target power users and should not obscure the scene examples.
Output classes
| Output | Use |
|---|---|
| PNG | deterministic visual smoke for offscreen scene/canvas fixtures |
| JSON | scene JSON, DRP2 fixture JSON, or WebGPU-compatible stream fixture |
| DVZR | recording/replay examples and regression inputs |
| MP4/raw video | video encoder/sink fixtures |
| stdout | non-rendering low-level setup, config, and validation examples |
| bounded GLFW window | interaction, GUI, present, or live-sink examples only |
Scene and app fixtures
| Area | Feature | Status | Example name | Output | Requirements | Minimal fixture idea |
|---|---|---|---|---|---|---|
| Scene lifecycle | Empty scene | Implemented | fixture_scene_empty.c |
PNG | scene+app | Create one scene, figure, panel, and offscreen view; capture an empty frame. |
| Figure | Resize | Implemented | fixture_figure_resize.c |
PNG x2 | scene+app | Render at one size, resize the figure/window, render again. |
| Panel | Layout | Implemented | fixture_panel_layout.c |
PNG | scene+app | Two panels with different background colors. |
| Panel | Background color | Implemented | fixture_panel_background.c |
PNG | scene+app | One panel filled by dvz_panel_set_background_color(). |
| Visual | Point | Implemented | fixture_point.c |
PNG | scene+app | Three colored points with different sizes. |
| Visual | Pixel | Implemented | fixture_pixel.c |
PNG | scene+app | Three screen-space square sprites. |
| Visual | Splat | Planned v0.4 experimental | fixture_splat.c |
PNG | scene+app | One deterministic dense splat cloud with center, radius, color, opacity, depth policy, and nonblank capture. |
| Visual | Sphere impostor | Implemented | fixture_sphere.c |
PNG | scene+app | Three lit spheres with different radii. |
| Visual | Primitive triangle | Implemented | fixture_primitive_triangle.c |
PNG | scene+app | One RGB triangle with DVZ_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST. |
| Visual | Primitive line | Implemented | fixture_primitive_line.c |
PNG | scene+app | One line strip or line list. |
| Visual | Mesh | Implemented | fixture_mesh.c |
PNG | scene+app | One indexed tetrahedron or cube. |
| Visual | Textured mesh | Implemented / needs fixture promotion | fixture_mesh_textured.c |
PNG | scene+app | One UV-mapped quad or small terrain grid with a 4x4 RGBA texture sampled by the mesh shader and lit; current broad proof is examples/c/visuals/textured_mesh.c. |
| Visual | Path | Implemented | fixture_path.c |
PNG | scene+app | One five-point polyline. |
| Visual | Image | Implemented | fixture_image.c |
PNG | scene+app | One 4x4 RGBA checkerboard on a quad. |
| Visual | Volume slice | Implemented | fixture_volume_slice.c |
PNG | scene+app | One tiny 3D scalar field rendered as a slice. |
| Visual data | Initial attributes | Implemented | fixture_visual_data.c |
PNG | scene+app | Set position, color, and size on one point visual. |
| Visual data | Partial range update | Implemented | fixture_visual_update_range.c |
PNG x2 | scene+app | Render points, update one item's color/size, render again. |
| Visual data | Many-attribute upload | Implemented | fixture_visual_data_many.c |
PNG | scene+app | Upload several attributes through the compact multi-data path. |
| Visual data | Mutability hints | Implemented | fixture_visual_attr_mutability.c |
stdout/PNG | scene+app | Mark size dynamic and position static, then emit one frame. |
| Visual state | Visibility | Implemented | fixture_visual_visibility.c |
PNG x2 | scene+app | Capture the same scene with a visual hidden and visible. |
| Visual state | Depth test | Implemented | fixture_depth_test.c |
PNG x2 | scene+app | Two overlapping triangles with depth testing enabled and disabled. |
| Controller | Panzoom | Implemented | fixture_panzoom.c |
PNG | scene+app | Apply a preset panzoom transform to a 2D path. |
| Controller | Arcball | Implemented | fixture_arcball.c |
PNG | scene+app | Apply a preset arcball orientation to a cube. |
| Controller | Fly camera | Implemented | fixture_fly_camera.c |
PNG/live | scene+app | Show a fixed fly-camera pose in a simple 3D scene. |
| Controller | Turntable | Implemented | fixture_turntable.c |
PNG/live | scene+app | Show a fixed turntable pose around a mesh. |
| Attachment | Fixed overlay | Implemented | fixture_fixed_overlay.c |
PNG | scene+app | Combine a controlled data visual with a fixed overlay/background. |
| Field | 2D RGBA sampled field | Implemented | fixture_field_rgba2d.c |
PNG | scene+app | Bind a small RGBA sampled field to an image visual. |
| Field | Scalar field colormap | Implemented | fixture_field_scalar_colormap.c |
PNG | scene+app | Render an 8x8 float gradient through a continuous scale/colormap. |
| Field | Region update | Implemented | fixture_field_update_region.c |
PNG x2 | scene+app | Update a 2x2 subregion in an image field. |
| Field | 3D scalar field | Implemented | fixture_field_scalar3d.c |
PNG | scene+app | Bind a tiny 3D scalar field to a volume visual. |
| Scale | Domain clipping | Implemented | fixture_scale_domain.c |
PNG | scene+app | Render the same scalar image with a clipped scale domain. |
| Scale | Categorical colormap | Implemented | fixture_scale_categorical.c |
PNG | scene+app | Render a small label image through a categorical scale. |
| Colorbar | Retained bookkeeping | Implemented | fixture_colorbar_bookkeeping.c |
stdout/JSON | scene | Create a colorbar object and serialize/inspect it. |
| Colorbar | Frame-plan contributions | Implemented in scene tests | fixture_colorbar_frame_plan.c |
JSON | scene | Verify ramp, ticks, tick labels, title, anchor, orientation, and auto-reserve metadata. |
| Colorbar | Rendered vertical colorbar | Implemented app/offscreen smoke | fixture_colorbar_vertical.c |
PNG | scene+app | Render scalar image plus a right-anchored continuous colorbar with title and tick labels. |
| Colorbar | Rendered horizontal colorbar | Scene-tested; PNG fixture pending | fixture_colorbar_horizontal.c |
PNG | scene+app | Render scalar image plus a bottom-anchored continuous colorbar and deterministic tick labels. |
| Colorbar | Unsupported scale/anchor diagnostics | Implemented in scene tests | fixture_colorbar_diagnostics.c |
stdout/JSON | scene | Check categorical scale and non-edge anchor diagnostics without silent fallback. |
| Material | Unlit | Implemented | fixture_material_unlit.c |
PNG | scene+app | One triangle/mesh using unlit material state. |
| Material | Phong/lit | Implemented | fixture_material_phong.c |
PNG | scene+app | One lit cube or sphere with normals. |
| Effect | Depth cue points | Implemented | fixture_depth_cue_points.c |
PNG | scene+app | Points at different z values fade/darken with depth. |
| Effect | Depth cue mesh | Implemented | fixture_depth_cue_mesh.c |
PNG | scene+app | One slanted mesh with depth cue enabled. |
| Technique | MSAA | Implemented | fixture_msaa.c |
PNG | scene+app | Diagonal line/triangle edges with panel MSAA enabled. |
| Technique | Eye-Dome Lighting | Implemented | fixture_edl.c |
PNG | scene+app | Dense point cloud with EDL enabled and no GUI panel. |
| Technique | SSAO | Implemented/active | fixture_ssao_spheres.c |
PNG | scene+app | A few lit spheres with SSAO enabled. |
| Technique | Volume occlusion | Implemented | fixture_volume_occlusion.c |
PNG | scene+app | Volume plus embedded points/spheres. |
| Transparency | Alpha blending | Implemented | fixture_alpha_blend.c |
PNG | scene+app | Two overlapping translucent quads. |
| Transparency/stress | Dense splat blending | Planned v0.4 experimental | fixture_splat_blending.c |
PNG | scene+app | Overlapping splats at several depths to validate the selected blend/depth policy. |
| Transparency | WBOIT | Implemented | fixture_wboit.c |
PNG/live | scene+app | One translucent cube between opaque cards. |
| Transparency | Depth peeling | Implemented | fixture_depth_peel.c |
PNG/live | scene+app | Two translucent crossing layers. |
| Transparency | Alpha mask | Draft/API-shaped | fixture_alpha_mask.c |
PNG | scene+app | Checkerboard alpha mask when runtime path is active. |
| Interaction | Point picking | Implemented narrow GPU path | fixture_point_pick.c |
stdout | scene+app | Queue a pick at a known pixel and print/verify selected item. |
| Interaction | Image probing | Implemented narrow GPU path | fixture_image_probe.c |
stdout | scene+app | Probe a known texel in a 4x4 scalar image. |
| Interaction | Request coalescing | Implemented | fixture_request_coalesce.c |
stdout | scene+app | Queue several picks/probes and verify latest-result semantics. |
| Interaction | Selection object | Implemented bookkeeping | fixture_selection.c |
stdout | scene | Apply a synthetic pick result to a selection and print count. |
| Interaction | Link channel | Implemented bookkeeping | fixture_link_channel.c |
stdout | scene | Link two panel ranges through a channel with synthetic state. |
| Interaction | Pinned readout | Implemented bookkeeping | fixture_pinned_readout.c |
stdout | scene | Create a pinned readout from a synthetic probe result. |
| Interaction | Hover picking | Implemented live example | fixture_pick_hover_glfw.c |
bounded GLFW | scene+app+GLFW | Minimal live hover-pick point scene. |
| Text | Font resource | Implemented | fixture_font_resource.c |
stdout | scene | Create/destroy a scene-owned font resource. |
| Text | Retained text | Implemented | fixture_text_bookkeeping.c |
JSON/stdout | scene | Create text, update string/style/placement. |
| Text | Rendered text | Implemented example/app smoke | fixture_text_rendered.c |
PNG | scene+app | Promote examples/c/visuals/text.c behavior into a deterministic offscreen fixture. |
| Annotation | Retained label | Implemented | fixture_annotation_bookkeeping.c |
JSON/stdout | scene | Create a label annotation and update format. |
| Annotation | Rendered label | Implemented first slice | fixture_annotation_rendered.c |
PNG | scene+app | One point with one label overlay; callouts remain separate. |
| App | Offscreen render | Implemented | fixture_app_offscreen.c |
PNG | scene+app | Render one point scene offscreen. |
| App | PNG capture | Implemented | fixture_capture_png.c |
PNG | scene+app | Render and save a PNG through app/canvas capture. |
| App | High-resolution capture | Planned practical fixture | fixture_capture_high_res.c |
PNG | scene+app | Render the same tiny scene at a larger output size and verify dimensions/nonblank pixels. |
| App | Transparent-background capture | Planned/deferred | fixture_capture_transparent_bg.c |
PNG | scene+app | Render one alpha-enabled scene and verify exported alpha where the runtime supports it. |
| App | Batch parameter sweep | Planned practical fixture | fixture_batch_capture_sweep.c |
PNG set | scene+app | Render a small deterministic scene across a few parameter values without opening a window. |
| App | GLFW live window | Implemented | fixture_glfw_window.c |
bounded GLFW | scene+app+GLFW | One point scene, auto-close after N frames. |
| App | Fullscreen window | Planned runtime fixture | fixture_glfw_fullscreen.c |
bounded GLFW | scene+app+GLFW | Open a fullscreen or borderless view when supported, render one scene, then auto-close. |
| App | Multi-window | Planned runtime fixture | fixture_glfw_multi_window.c |
bounded GLFW | scene+app+GLFW | Two small windows render independent or synchronized tiny scenes. |
| App | HiDPI resize | Planned runtime fixture | fixture_hidpi_window.c |
stdout/PNG | scene+app+GLFW | Report logical/physical sizes and render a crisp text/line smoke when content scale is available. |
| App | Frame callback | Implemented | fixture_frame_callback.c |
PNG | scene+app | Mutate point color on frame 2 and capture frame 3. |
| Animation/stress | CPU fluid or particle advection | v0.4 experimental/stretch | fixture_cpu_fluid_particles.c |
PNG/live | scene+app | Update a small scalar image plus particle points or short trails over bounded frames without scene-level GPU compute. |
| Controller | Camera bookmarks | Planned | fixture_camera_bookmarks.c |
PNG x2 | scene+app | Save or define two named camera/controller states and render both deterministically. |
| Coordinates | Coordinate-space debug | Planned diagnostic fixture | fixture_coordinate_spaces.c |
PNG/stdout | scene+app | Show or print screen, panel, data, world, and NDC coordinate mappings for one point/probe. |
| App | Hosted window | Implemented smoke | fixture_hosted_window.c |
bounded GLFW | app+canvas+GLFW | Minimal hosted-window integration smoke. |
| Serialization | Scene JSON | Implemented | fixture_scene_json.c |
JSON | scene | Serialize one-point scene to JSON. |
| Emission | Figure DRP2 stream | Implemented | fixture_emit_drp2.c |
JSON | scene+drp2 | Emit a one-triangle frame plan and save debug JSON. |
GUI and cimgui fixtures
| Area | Feature | Status | Example name | Output | Requirements | Minimal fixture idea |
|---|---|---|---|---|---|---|
| GUI | Overlay attach | Implemented | fixture_gui_overlay.c |
bounded GLFW | GUI+GLFW | Attach DvzGui to a GLFW view and show one tiny window. |
| GUI | Callback | Implemented | fixture_gui_callback.c |
bounded GLFW | GUI+GLFW | Register a GUI callback that increments and displays a counter. |
| GUI | Curated controls | Implemented | fixture_gui_controls.c |
bounded GLFW | GUI+GLFW | One panel with text, button, checkbox, combo, and slider. |
| GUI | Text widget | Implemented | fixture_gui_text.c |
bounded GLFW | GUI+GLFW | Show one dvz_gui_text() item. |
| GUI | Button | Implemented | fixture_gui_button.c |
bounded GLFW | GUI+GLFW | Button toggles a visual or background color. |
| GUI | Checkbox | Implemented | fixture_gui_checkbox.c |
bounded GLFW | GUI+GLFW | Checkbox toggles point visibility. |
| GUI | Combo | Implemented | fixture_gui_combo.c |
bounded GLFW | GUI+GLFW | Combo switches background or alpha mode. |
| GUI | Slider | Implemented | fixture_gui_slider_float.c |
bounded GLFW | GUI+GLFW | Slider controls point size. |
| GUI | Formatted slider | Implemented | fixture_gui_slider_float_format.c |
bounded GLFW | GUI+GLFW | Slider controls mesh alpha with custom display format. |
| GUI | Monospace font | Implemented | fixture_gui_mono_font.c |
bounded GLFW | GUI+GLFW | Display one normal and one monospace line. |
| GUI | Demo window | Implemented | fixture_gui_demo.c |
bounded GLFW | GUI+GLFW | Show the Dear ImGui demo window; developer-only. |
| GUI | Docking/dockspace | Implemented | fixture_gui_docking.c |
bounded GLFW | GUI+GLFW | Enable docking and show a small dockable control panel. |
| GUI viewport | Datoviz image viewport | Implemented | fixture_gui_viewport.c |
bounded GLFW | GUI+GLFW | Render a point figure into a dockable ImGui viewport image. |
| GUI viewport | Input forwarding | Implemented | fixture_gui_viewport_input.c |
bounded GLFW | GUI+GLFW | Forward viewport input to a panzoom or arcball controller. |
| GUI viewport | Multi-viewport | Implemented | fixture_gui_multi_viewport.c |
bounded GLFW | GUI+GLFW | Two tiny offscreen figures shown in two GUI viewport windows. |
| cimgui | Raw ig* calls |
Implemented | fixture_cimgui_raw.c |
bounded GLFW | GUI+cimgui+GLFW | Include datoviz/imgui.h and call one raw cimgui function in a GUI callback. |
Video fixtures
| Area | Feature | Status | Example name | Output | Requirements | Minimal fixture idea |
|---|---|---|---|---|---|---|
| Video | Encoder defaults | Implemented | fixture_video_config.c |
stdout | video | Print/default-check codec, mux, backend, size, and fps settings. |
| Video | Sink defaults | Implemented | fixture_video_sink_config.c |
stdout | video | Build a DvzVideoSinkConfig from defaults and print fields. |
| Video | CPU readback config | Implemented | fixture_video_cpu_readback_config.c |
stdout | video | Configure CPU callbacks for synthetic RGBA frames. |
| Video | Offline/headless encode | Implemented | fixture_video_offline_encode.c |
MP4 | video backend | Encode 8-16 synthetic RGBA frames to MP4. |
| Video | Builtin stream sink | Implemented | fixture_video_sink.c |
MP4 | stream+video backend | Register/use dvz_stream_sink_video() and feed a few frames. |
| Video | Offscreen scene capture | Planned practical fixture | fixture_video_scene_offscreen.c |
MP4 | scene+app+video backend | Render a simple offscreen point scene for N frames and encode it. |
| Video | Canvas video sink | Implemented API | advanced_canvas_video_sink.c |
MP4 | canvas+video backend | Enable dvz_canvas_configure_video_sink() on a manual canvas. |
| Video | MP4 streaming mux | Implemented | fixture_video_mp4_streaming.c |
MP4 | video backend | Encode tiny synthetic frames with streaming MP4 mux. |
| Video | MP4 post mux | Implemented/backend-dependent | fixture_video_mp4_post.c |
MP4+raw | video backend | Encode to temporary raw stream and post-mux. |
| Video | Raw H.26x stream | Implemented/backend-dependent | fixture_video_raw_h26x.c |
.h264/.h265 |
video backend | Disable MP4 mux and write elementary stream. |
| Video | H.264 | Implemented enum/backend-dependent | fixture_video_h264.c |
MP4/raw | video backend | Tiny synthetic frames with H.264 codec. |
| Video | HEVC | Implemented enum/backend-dependent | fixture_video_hevc.c |
MP4/raw | video backend | Tiny synthetic frames with HEVC codec. |
| Video backend | NVENC external capture | Optional | fixture_video_nvenc_external.c |
MP4 | CUDA+NVENC+Vulkan external memory | Developer-only external image/semaphore encode smoke. |
| Video backend | Kvazaar CPU fallback | Optional | fixture_video_kvazaar_cpu.c |
MP4 | Kvazaar | Encode CPU RGBA frames through Kvazaar. |
| Video backend | Missing-backend fallback | Implemented internally | fixture_video_backend_fallback.c |
stdout | video | Request a missing backend and verify graceful fallback/failure. |
Low-level vk fixtures
| Area | Feature | Status | Example name | Output | Requirements | Minimal fixture idea |
|---|---|---|---|---|---|---|
| vk | GPU context | Implemented | advanced_vk_gpu_context.c |
stdout | vk | Create DvzGpuCtx, print selected GPU info, destroy. |
| vk | Validation | Implemented | advanced_vk_validation.c |
stdout | vk+validation layers | Enable validation and print validation error count. |
| vk | GPU selection | Implemented | advanced_vk_select_gpu.c |
stdout | vk | Choose GPU index from CLI and print selected device. |
| vk | Feature request | Implemented | advanced_vk_features.c |
stdout | vk | Request selected Vulkan 1.2/1.3 features before context creation. |
| vk | Instance extension request | Implemented | advanced_vk_instance_extension.c |
stdout | vk | Add one instance extension to GPU context config. |
| vk | Canvas extensions | Implemented | advanced_vk_canvas_extensions.c |
stdout | vk+canvas deps | Enable surface/swapchain device extensions for future present canvas use. |
| vk | External-memory allocator policy | Implemented | advanced_vk_external_memory.c |
stdout | vk+platform support | Configure allocator export handle type for interop. |
| vk | GLSL compilation | Implemented | advanced_vk_compile_glsl.c |
stdout/SPIR-V | shaderc available | Compile tiny GLSL vertex/fragment/compute string to SPIR-V. |
| vk | Queue access | Implemented | advanced_vk_queue.c |
stdout | vk | Retrieve graphics/transfer queues from the GPU context. |
Low-level vklite fixtures
| Area | Feature | Status | Example name | Output | Requirements | Minimal fixture idea |
|---|---|---|---|---|---|---|
| vklite | Buffer upload/download | Implemented | advanced_vklite_buffer.c |
stdout | vk+vklite | Allocate buffer, upload four floats, download and print them. |
| vklite | Buffer resize | Implemented | advanced_vklite_buffer_resize.c |
stdout | vk+vklite | Create buffer, resize it, verify allocated size. |
| vklite | Image and view | Implemented | advanced_vklite_image.c |
stdout | vk+vklite | Create a 2D RGBA image and image view. |
| vklite | Image upload | Implemented | advanced_vklite_image_upload.c |
PNG/stdout | vk+vklite | Upload a 4x4 checkerboard to an image through staging/copy helpers. |
| vklite | Sampler | Implemented | advanced_vklite_sampler.c |
stdout | vk+vklite | Create nearest and linear samplers. |
| vklite | Shader module | Implemented | advanced_vklite_shader.c |
stdout | vk+vklite | Compile/load SPIR-V and create a shader module. |
| vklite | Commands | Implemented | advanced_vklite_commands.c |
stdout | vk+vklite | Allocate command buffer, begin/end/reset/release. |
| vklite | Barriers | Implemented | advanced_vklite_barriers.c |
stdout | vk+vklite | Record one image layout transition. |
| vklite | Sync | Implemented | advanced_vklite_sync.c |
stdout | vk+vklite | Create fence/semaphore, submit empty command buffer, wait. |
| vklite | Descriptors | Implemented | advanced_vklite_descriptors.c |
stdout | vk+vklite | Create a simple uniform-buffer descriptor set. |
| vklite | Graphics pipeline | Implemented helpers | advanced_vklite_graphics_triangle.c |
PNG | vk+vklite | Draw one triangle without scene or DRP2. |
| vklite | Compute pipeline | Implemented helpers | advanced_vklite_compute.c |
stdout | vk+vklite | Dispatch a tiny compute shader that writes to a buffer. |
| vklite | Surface wrapping | Implemented | advanced_vklite_surface.c |
stdout | vk+vklite+GLFW | Wrap a native window surface and print formats/present modes. |
| vklite | Swapchain acquire/present | Implemented | advanced_vklite_swapchain.c |
bounded GLFW | vk+vklite+GLFW | Create swapchain, acquire one image, present. |
| vklite | Immediate present | Implemented | advanced_vklite_immediate_present.c |
stdout/live | vk+vklite+GLFW | Minimal immediate-present loop for FPS diagnostics. |
Window and input fixtures
| Area | Feature | Status | Example name | Output | Requirements | Minimal fixture idea |
|---|---|---|---|---|---|---|
| Window | Headless window | Implemented | advanced_window_headless.c |
stdout | window | Create a headless window and poll once. |
| Window | GLFW window | Implemented | advanced_window_glfw.c |
bounded GLFW | window+GLFW | Create a GLFW window, poll events, auto-close. |
| Window | User data | Implemented | advanced_window_user_data.c |
stdout | window | Attach a struct pointer to a window and retrieve it. |
| Window | Request-frame loop | Implemented | advanced_window_request_frame.c |
stdout | window | Request frames manually and observe pending state. |
| Window | Surface query | Implemented | advanced_window_surface.c |
stdout | window+GLFW+vk | Print native surface extent/handle availability. |
| Input | Router callbacks | Implemented | advanced_input_router.c |
stdout | input | Attach pointer/key callbacks and emit/observe one synthetic event. |
Stream and canvas fixtures
| Area | Feature | Status | Example name | Output | Requirements | Minimal fixture idea |
|---|---|---|---|---|---|---|
| Stream | Empty stream | Implemented | advanced_stream_empty.c |
stdout | stream | Create/start/update/stop a stream with a borrowed dummy frame. |
| Stream | Custom sink backend | Implemented | advanced_stream_custom_sink.c |
stdout | stream | Implement a sink that logs frame ids and timeline values. |
| Stream | Sink registry | Implemented | advanced_stream_registry.c |
stdout | stream | Register custom sink, find by name, pick automatically. |
| Stream | Multi-sink routing | Implemented | advanced_stream_multi_sink.c |
stdout/MP4 | stream+optional video | Attach log sink plus video/live sink. |
| Stream | Borrowed frame descriptor | Implemented | advanced_stream_borrowed_frame.c |
stdout | stream+vk | Construct DvzStreamFrame around externally owned Vulkan handles. |
| Stream | Frame usage flags | Implemented | advanced_stream_usage_flags.c |
stdout | stream | Demonstrate render-target/copy-src/copy-dst metadata. |
| Canvas | Draw callback | Implemented | advanced_canvas_draw_callback.c |
PNG/live | canvas+vk | Create canvas, set callback, clear/draw manually. |
| Canvas | Offscreen capture | Implemented | advanced_canvas_offscreen_capture.c |
PNG | canvas+vk | Draw one color/triangle and save PNG. |
| Canvas | Present | Implemented | advanced_canvas_present.c |
bounded GLFW | canvas+GLFW | Create GLFW-backed canvas and present N frames. |
| Canvas | Immediate FPS | Implemented | advanced_canvas_immediate.c |
stdout/live | canvas+GLFW | Present as fast as possible and print timing samples. |
| Canvas | RGBA capture | Implemented | advanced_canvas_capture_rgba.c |
stdout | canvas | Render offscreen, read RGBA, inspect first pixel. |
| Canvas | PNG capture | Implemented | advanced_canvas_capture_png.c |
PNG | canvas | Render and save PNG without scene/app. |
| Canvas | Video sink | Implemented | advanced_canvas_video_sink.c |
MP4 | canvas+video backend | Enable canvas video sink and write a short MP4. |
| Canvas | Live-image sink | Implemented | advanced_canvas_live_image_sink.c |
stdout | canvas+platform handles | Enable live-image callback and print Vulkan handles. |
| Canvas | Underlying stream | Implemented | advanced_canvas_stream.c |
stdout | canvas+stream | Retrieve dvz_canvas_stream() and inspect/attach custom sinks. |
| Canvas | Input router | Implemented | advanced_canvas_input.c |
stdout/live | canvas+window | Get dvz_canvas_input() and wire custom controls. |
| Canvas | Timing diagnostics | Implemented | advanced_canvas_timing.c |
stdout | canvas | Render frames and print timing samples. |
Direct DRP2, DVZR, and WebGPU fixtures
| Area | Feature | Status | Example name | Output | Requirements | Minimal fixture idea |
|---|---|---|---|---|---|---|
| DRP2 | Hello stream | Implemented | advanced_drp2_hello.c |
stdout/JSON | drp2 | Create stream, append HelloRenderer, print command count. |
| DRP2 | Raw triangle | Implemented | advanced_drp2_triangle.c |
PNG/JSON | drp2+runtime | Direct DRP2 triangle without scene. |
| DRP2 | Validation | Implemented | advanced_drp2_validate.c |
stdout | drp2 | Build valid/invalid streams and print validation results. |
| DRP2 | vklite runtime execution | Implemented | advanced_drp2_runtime.c |
PNG/stdout | drp2+vklite | Execute a tiny stream through a vklite runtime. |
| DRP2 | Borrowed canvas frame | Implemented | advanced_drp2_canvas_frame.c |
PNG/live | drp2+canvas | Attach a canvas frame target and render into it. |
| DRP2 | Readback | Implemented | advanced_drp2_readback.c |
stdout | drp2+vklite | Copy/write into a buffer and read CPU bytes after execution. |
| DRP2 | External buffer | Implemented | advanced_drp2_external_buffer.c |
PNG/stdout | drp2+vklite | Register a caller-owned buffer under a DRP2 id. |
| DRP2 | Labels/debug trace | Implemented | advanced_drp2_labels.c |
stdout/JSON | drp2 | Attach debug labels to ids and serialize/print the stream. |
| DRP2 | Fixture JSON | Implemented | advanced_drp2_fixture_json.c |
JSON | drp2 | Produce a deterministic DRP2 fixture JSON document. |
| DVZR | Raw DRP2 recording | Implemented | advanced_drp2_recording.c |
DVZR | drp2 | Record/replay raw DRP2 frames without scene/app. |
| DVZR | Scene app recording | Implemented | fixture_dvzr_record_replay.c |
DVZR+PNG | scene+app+drp2 | Record one offscreen scene frame, replay it, compare/capture output. |
| DVZR | Raw fallback diagnostics | Implemented | fixture_dvzr_raw_fallback.c |
stdout/DVZR | drp2 | Developer-only unsupported-command fallback diagnostic. |
| WebGPU | Clear | Planned feasibility | fixture_webgpu_clear.json |
JSON | WebGPU adapter | Clear-only DRP2 subset. |
| WebGPU | Static point | Planned feasibility | fixture_webgpu_point.json |
JSON | WebGPU adapter | One static point stream. |
| WebGPU | Primitive | Planned feasibility | fixture_webgpu_primitive.json |
JSON | WebGPU adapter | One triangle stream. |
| WebGPU | Image | Planned feasibility | fixture_webgpu_image.json |
JSON | WebGPU adapter | One checkerboard image stream. |
| WebGPU | Depth | Planned after basics | fixture_webgpu_depth.json |
JSON | WebGPU adapter | Two overlapping triangles with depth. |
Interop and external-consumer fixtures
| Area | Feature | Status | Example name | Output | Requirements | Minimal fixture idea |
|---|---|---|---|---|---|---|
| Interop | Live image handoff | Implemented | advanced_interop_live_image.c |
stdout | canvas+platform handles | Canvas live-image callback prints image/view/command buffer/FD handles. |
| Interop | External memory export | Implemented lower-level support | advanced_interop_external_memory.c |
stdout | vk+platform support | Create export-capable allocation metadata. |
| Interop | CUDA-filled external buffer | Implemented test smoke | advanced_interop_cuda_buffer.c |
PNG/stdout | CUDA+Vulkan external memory | CUDA fills Vulkan-owned buffer, then render/readback. |
| Interop | External timeline semaphore | Implemented lower-level support | advanced_interop_timeline_semaphore.c |
stdout | CUDA/Vulkan platform support | Demonstrate synchronization metadata and wait/signal path. |
| Interop | Custom external UI sink | Implemented stream substrate | advanced_interop_custom_sink.c |
stdout | stream+canvas | Route frames into a custom sink for embedding applications. |
Deferred and planned scene fixtures
These rows should remain planned until the corresponding runtime behavior is landed and validated.
| Area | Feature | Example name | Minimal future fixture idea |
|---|---|---|---|
| Axes | 2D axes/ticks | fixture_axes_2d.c |
One path/point plot with x/y axes and ticks. |
| Legends | Legend | fixture_legend.c |
Two visuals with a simple legend. |
| Text | Rendered glyph atlas | fixture_text_glyph_atlas.c |
One line of text rendered from an atlas. |
| Annotation | Arrow/callout | fixture_annotation_callout.c |
One arrow from text label to a point. |
| Picking | Mesh face picking | fixture_pick_mesh_face.c |
Pick an indexed mesh triangle and report face id. |
| Picking | Rich payload ids | fixture_pick_payload_ids.c |
Verify stable visual/item/group identity payloads. |
| Technique | Object-id G-buffer | fixture_gbuffer_object_id.c |
Render object ids to an auxiliary target. |
| Technique | Selected outline | fixture_selected_outline.c |
Select one object and render an outline. |
| Technique | Dual depth peeling | fixture_dual_depth_peel.c |
Transparent layered geometry after graph-backed path lands. |
| Technique | Curvature/cavity shading | fixture_cavity_shading.c |
One lit mesh/sphere with cavity shading. |
| Diagnostics | Picking-id view | fixture_diagnostics_picking_ids.c |
Render or read a tiny id target and verify stable visual/item ids. |
| Diagnostics | Bounds/grid overlay | fixture_diagnostics_bounds_grid.c |
Show coordinate grid and visual bounds over a tiny scene. |
| Diagnostics | Draw/update trace | fixture_diagnostics_update_trace.c |
Emit a deterministic trace of draw groups or buffer dirty ranges for one update. |
| Compute | GPU particle simulation | fixture_gpu_particles.c |
Scene-level compute writes persistent particle buffers consumed by point/sphere rendering. |
Showcase Pressure Tests
These rows are not one-feature fixtures. They record gallery-scale examples that combine several features and should be backed by smaller fixtures for the individual capabilities.
| Area | Example | Status | Main pressure | Minimal first slice |
|---|---|---|---|---|
| Embedding dashboard | IMAGE_EMBEDDING_LOD.md |
Planned showcase | PD12M image thumbnails, texture-array LOD, panzoom, picking, retained resource reuse. | <=10,000 PD12M items rendered as mean-color rectangles from preprocessed embedding positions. |
| Embedding dashboard | SEMANTIC_EMBEDDING_ATLAS.md |
Planned showcase | Dense semantic points, label LOD, title search, selection cards, optional query vectors. | <=100,000 Wikivecs articles rendered as colored points with panzoom and stable pick ids. |
| Terrain/planet | textured_planet.c; historical GRAND_CANYON_FLYOVER.md / EARTH.md notes |
v0.4 required showcase slice | Retained textured mesh, UVs, sampler state, lit sphere-like surface, camera/capture. | One deterministic UV-mapped Earth/Mars planet using true mesh texture sampling, not baked vertex colors. Full terrain/DEM workflow follows later. |
| Dense splats | Splat / Gaussian-like point cloud | v0.4 experimental if visual lands | New splat visual, dense translucent rendering, blend/depth policy, camera/capture. | One synthetic or LiDAR-like splat cloud with deterministic seed, fixed camera, and nonblank PNG. |
| Physics | CFD_VORTICITY_ADVECTION.md |
v0.4 experimental/stretch | Dynamic image updates, particle/path updates, bounded animation loop, optional video capture. | CPU advection updates a small field and point/trail overlay for 64-256 frames. |
| Frame graph | Debug graph dump | fixture_frame_plan_graph_debug.c |
Emit deterministic graph debug output with typed resources/passes. | |
| Descriptor refresh | Resize refresh | fixture_descriptor_refresh_resize.c |
Repeated resize with stable resource ids and refreshed descriptors. | |
| CuPy | Python/CuPy external memory | fixture_cupy_external_memory.py |
Future Python-facing Vulkan-owned allocation import into CuPy. |
Recommended implementation order
Phase 1 — tiny deterministic scene fixtures
fixture_point.cfixture_pixel.cfixture_path.cfixture_primitive_triangle.cfixture_mesh.cfixture_image.cfixture_field_scalar_colormap.cfixture_volume_slice.cfixture_sphere.cfixture_panel_layout.cfixture_depth_test.cfixture_alpha_blend.cfixture_scene_json.cfixture_dvzr_record_replay.c
Phase 2 — interaction, effects, and app features
fixture_point_pick.cfixture_image_probe.cfixture_frame_callback.cfixture_wboit.cfixture_depth_peel.cfixture_edl.cfixture_ssao_spheres.cfixture_volume_occlusion.c
Phase 3 — GUI and video
fixture_gui_controls.cfixture_gui_viewport.cfixture_cimgui_raw.cfixture_video_config.cfixture_video_offline_encode.cfixture_video_scene_offscreen.c
Phase 4 — low-level power-user examples
advanced_vk_gpu_context.cadvanced_vklite_buffer.cadvanced_vklite_image.cadvanced_vklite_commands.cadvanced_canvas_offscreen_capture.cadvanced_canvas_live_image_sink.cadvanced_stream_custom_sink.cadvanced_drp2_triangle.cadvanced_drp2_canvas_frame.cadvanced_drp2_recording.c
Phase 5 — backend-gated and future fixtures
fixture_video_nvenc_external.cfixture_video_kvazaar_cpu.cadvanced_interop_cuda_buffer.c- WebGPU JSON fixture set
- rendered text/annotation fixtures
- richer picking and frame-graph fixtures