Skip to content

Overview

Example apps live in the engine repo under apps/. Run from the app directory: ./plume3d . (after building) or from repo root: plume3d path/to/app.

ExampleDescription
Aspect RatioDesign resolution (1280×720) and letterbox scaling; resize to see black bars
Window DemoDisplay window title, width, and height via the Window API
ExampleDescription
Audio BasicPlay a click (Space) and toggle looping music (M)
Audio 3D3D listener and moving source; A/D move listener, Space plays sound, source on sine path
Audio PlayerRadio-style tuner: tune with Left/Right, stations from channels.toml, static when off-frequency
Audio Player 3D3D radio with power button, knobs, and body rotate; blend-loaded model, raycast picking
Audio StreamingStreams a procedural 220 Hz sine tone via Audio.newStreamingSource; feed interleaved float PCM over time, poll queuedBuffers to pace refills
ExampleDescription
Physics SimpleAutomatic rigid bodies from Blender (floor + falling cube); toggle pause; shadow mapping
Physics StackTower of stacked cubes; onContactBegin logs each collision
Physics FrictionBoxes on an inclined ramp; R resets; compares Blender friction values
Physics Constraint HingeHinge-constrained door; Space applies impulse; FPS camera
Physics Particles DebrisTier 2 debris emitter: 64 physics-body particles bouncing off the ground
Physics GolfRestitution side by side: three spheres (0.0 / 0.5 / 0.9) dropped from the same height
Physics Mesh TerrainBall rolls into a procedural triangle-mesh trough; one grid drives both collider and render mesh
Physics HeightfieldBall settles into a heightfield-grid bowl; one grid drives both collider and render mesh
ExampleDescription
Character ControllerTop-down 3D: WASD/Shift/Space/C/E; mouse-aim; all CharacterState constants; shadows
ExampleDescription
Blend LoadLoad Cube.blend, instantiate Cube and camera/light from blend; FPS camera, raycast-drag cube
ExampleDescription
GUI OverviewBasic Nuklear GUI: two windows, labels, buttons
GUI InputLive display of mouse, keys, modifiers, and window size
GUI CalculatorFull calculator built with GUI buttons and layout
GUI ConfiguratorSettings panel: quality, fullscreen, window size, design size, scale mode
GUI TerminalIn-game terminal: backtick to open; #!command methods
GUI ButtonsLabel, color, symbol, and symbol+label buttons; repeater mode
GUI SliderssliderFloat/sliderInt, knobFloat/knobInt, progress bar
GUI TogglesCheckboxes (independent), radio buttons (exclusive), selectables
GUI LabelsAll label variants: colored, aligned (L/C/R), wrapping, colored separators
GUI ComboLabel, color, and symbol combo/dropdowns; inline color picker
GUI ChartAnimated sine wave line chart and static column chart
GUI LayoutAll layout types: dynamic, static, row, template, space, groups
GUI TreeTree node and tab types; collapsible nested sections
GUI MenuMenubar (File/Edit) and right-click contextual menu
GUI PopupStatic/dynamic popups; simple and custom tooltips
GUI PropertypropertyFloat/propertyInt; filtered editString
GUI ThemeDark/light switch, accent color, rounding, alpha, font loading
GUI WindowWindow flags, bounds, show/hide, collapse, widget disable
GUI ShowcaseKitchen-sink: theme, sliders, checkboxes, radio, combos, menus, properties
ExampleDescription
Plume TriangleMinimal: load shader, create colored triangle mesh, draw
Mesh LinesLine list, line strip, and line loop draw modes
Mesh PointsPoint mesh with animated colors
Mesh IndexedIndexed cube (8 vertices, vertex map for 12 triangles)
Mesh Draw RangeAnimate draw range to reveal a grid of triangles over time
Mesh DynamicAnimated trianglestrip (circle with wave + color animation), setVertexAttribute + flush
Mesh AttributesAnimate per-vertex position and color via setVertexAttribute; GUI and terminal commands
Instanced Mesh GPUGPU-instanced rendering (SSBO): 1,000 animated cubes in a single draw call
Material TexturesFull PBR material map set (base/metallic/roughness/normal/AO/emissive) assigned to a script mesh from Wren; derivative-TBN normal mapping
Sprite DemoBillboarded sprites: one texture, four tinted camera-facing quads, depth-sorted by the engine
SDF Text DemoSDF text: world-space and screen-space labels, outline, wrapping, rich-text markup
UI DemoRetained-mode UI: a .ui card (title, subtitle, interactive button) loaded and rendered full-window
UI WidgetsRetained-UI interactive widgets: a toggle and a slider whose state the game polls to recolour a swatch
UI CanvasRetained-UI custom drawing: a game draws node boxes, bezier wires, and labels into a type="canvas" element
UI 9-Slice DemoRetained-UI textured 9-slice: two different-sized frames share one image-by-path PNG + a .ui.component sidecar, corners unstretched
UI Input DemoRetained-UI editable text input: a Name field (initial text) and a City field (placeholder), focus by click, read via elem.text
ExampleDescription
Save/Load DemoPersists a launch counter across runs with a typed, versioned SaveState + Save.write/Save.read
ExampleDescription
Coroutine DemoCooperative coroutines: a self-cycling traffic light (Async.wait) and a per-frame counter (Async.nextFrame), both engine-ticked each frame
ExampleDescription
TOML EditorGUI editor for game.toml (Game, Window, Physics layers, audio channels); runs standalone or against another app via --tool
UI EditorWYSIWYG visual editor for retained-UI .ui documents: element tree, inspector, live canvas, selection gizmo; runs standalone or against another app via --tool
Node EditorVisual node editor for animation-controller graphs: states as nodes, transitions as bezier wires; loads/edits/saves the controller TOML; runs standalone or via --tool