cog

module
v0.0.0-...-60efaf8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 28, 2026 License: MIT

README

Cog Engine

Cog is a small typed plugin engine for Go. Plugins communicate through events, commands, and locked resources; the kernel owns registration, scheduling, and error handling.

Why Cog

  • Safe parallelism by construction. Ready event subscribers and independent tasks run concurrently whenever their resource access does not conflict. Handlers declare access by binding typed read and write handles; the scheduler acquires the resulting lock set atomically and prevents races over engine-managed state.
  • No lock bookkeeping to keep in sync. The same binding that gives a handler access to a resource declares its lock. When one command uses another, Cog computes the transitive resource set at composition time, so callers stay decoupled from the callee's implementation details.
  • A small, highly decoupled microkernel. Plugins depend on typed commands, events, and resources rather than concrete plugin implementations. Features can be added, removed, or replaced at the composition root without a central application object accumulating subsystem knowledge.
  • Declarative scenes without asset plumbing. Build each frame from UI element values and canvas draw declarations that reference images and fonts by path. Canvas loads and caches assets lazily, packs sprites and glyphs into atlases, and manages their GPU resources; explicit unloading remains available when an application needs tighter residency control.
  • Invalid architectures fail before startup. Cog validates plugin dependencies, unique ownership, required resources, command usage, and event ordering while composing the engine instead of discovering structural mistakes during play.
  • Deterministic lifecycle and event ordering. Explicit dependencies govern startup and shutdown, while event subscribers can declare ordering only where it matters and remain parallel everywhere else.
  • Typed contracts without generated glue. Exact Go types identify commands, events, and resources, preserving compile-time request and response types across plugin boundaries.
  • Low-allocation frame loops. Handler factories run once during registration, synchronous command dispatch avoids per-call allocations, warmed UI processing is allocation-free, and canvas queues retain their backing storage between frames.
  • One operational boundary. Context propagation, asynchronous errors, cancellation, and orderly shutdown converge in the kernel, and the finalized plugin and contract graph is available for runtime introspection.

Packages

  • kernel: plugin lifecycle, typed registry, scheduler, resources, and errors.
  • app: the application loop — lifecycle, fixed-step update and render events, quit, and time control with pause, step and a hold that makes several observations describe one tick — over a platform MainLoop.
  • input: input state, discrete events, the driver-facing apply command, and scripted input.
  • anim: timelines of eased value tracks and one-tick cues, advanced every fixed step.
  • ecs: entities, components, the sparse-set stores they live in, and systems as plain funcs whose parameter types are their lock set.
  • storage: layered read filesystems and one permanent writable filesystem, which a platform Adapter provides.
  • diskstorage and jsstorage: storage's permanent filesystem Adapters, a directory under the user's data directory on desktop and localStorage in a browser.
  • m: immutable vectors, rectangles, colors, matrices, quaternions, scalar helpers, splines, and piecewise-linear ramps. Angles use radians.
  • assets: one cache for loaded assets, keyed by a comparable descriptor — a static run of bytes, a descriptor, a stateless loader, and the four verbs a plugin caches an asset family with.
  • config: plugin configuration named from outside the binary — --cog.<plugin>.<Field>=<value>, COG_<PLUGIN>_<FIELD>, and a COG_ENV string in the browser's localStorage — applied by one call at the composition root.
  • gfx: driver-neutral rendering queues, resources, viewport, backend contract, frame capture, and per-tick snapshots.
  • canvas: layered 2D sprites, text, primitives, and custom triangles over gfx, with a snapshot of what a tick recorded.
  • scene: the 3D renderer, the ECS's binding of model — camera, glTF model, baked mesh, light and debug-shape Components, batched and recorded into gfx.
  • ui: immediate-mode layout, interaction, canvas-backed visual processing, and a snapshot of what layout resolved.
  • gogpu: window, input, frame timing and WebGPU system driver, and app's platform MainLoop.
  • mcp: the agent-facing extension point — typed capabilities a plugin offers, collected through a Port from every plugin's Provider by a broker that serves them to an agent over MCP.

Plugin Kinds

Every plugin is one kind, and its directory says which:

  • Slots (slots/) cannot work until an Adapter fills a Port they require, and composition fails without one: app, gfx, storage.
  • Extensions (extensions/) provide Adapters for Slots and declare no API: gogpu, diskstorage, jsstorage.
  • Bundles (bundles/) are every other plugin. They require no Port, and may collect Adapters or contribute them.
  • Libraries (libs/) define no plugin and import only other Libraries and the kernel, and kernel imports nothing else in cog.

Every plugin X has one shape:

  • The root, X/, declares nothing: it is an index of aliases. Its commands, events, resources, Ports, Adapters, types, config, errors and Name, each in its own fixed file, are type aliases and re-exported constants and variables of what X/internal/ declares. An Extension's root offers only Name, config, its Adapters and errors.
  • Its functions are forwarders. They live in utils.go, and each one is a single call into X/internal/ passing its parameters through. A Slot's forwarders name no other plugin's types.
  • X/internal/ declares everything the root offers, in files of the same names, beside the implementation, and never imports its own root. An optional X/internal/types holds plain data only, when another package of the plugin needs it apart from the logic.
  • The constructor package, X/Xplugin, exports only New().
package may import
root libs, kernel, other plugins' roots, its own internal/ and internal/types
internal/types libs, kernel, other plugins' roots
internal/ libs, kernel, other plugins' roots, its own internal/ and internal/types
constructor kernel, its own internal/

Nothing in cog imports a constructor package or another plugin's internals, except tests. Games and examples are composition roots and import freely.

This shape is ADR 0003's, which turned round the root-to-internal edge of ADR 0002; mcp still has ADR 0002's declaration root until it moves. Both supersede the one ADR 0001 decided. The kinds, the file allowlists, where new code goes and the full import table are in .github/instructions/architecture.instructions.md, and go test ./kernel/archtest enforces them.

Plugin Layout

Plugin file layout, handler structure, and resource-scope rules are enforced conventions; see .github/instructions/kernel.instructions.md.

Each package's documents live under <package>/docs/. <package>/docs/README.md is its API, and design records live under <package>/docs/specs/: the package's general spec is <package>.md (for example bundles/scene/docs/specs/scene.md) and a spec covering one focused mechanism takes that mechanism's name.

Lifecycle

config := map[kernel.PluginName]any{
    diskstorage.Name: diskstorage.Config{AppId: "my-app"},
    gogpu.Name: gogpu.Config{}.WithTitle("My App"),
}

plugins := []kernel.Plugin{
    storageplugin.New(),
    diskstorageplugin.New(), // provides storage's PermanentFS Adapter
    inputplugin.New(),
    appplugin.New(),
    gfxplugin.New(),
    gogpuplugin.New(), // provides app's MainLoop and gfx's Backend Adapters
    mygame.New(os.DirFS("res")), // provides storage's read mount for res/
    ...
}

kernel.New(config).
    WithPlugins(plugins...).
    Run()

kernel.New returns an *Engine: the composition root that owns the plugin set, registry, scheduler, and lifetime. WithPlugins validates and topologically orders dependencies, calls every Register, then finalizes ownership and subscription DAGs. Run calls optional PluginStarter implementations in dependency order, calls the optional PluginHost on the calling thread, and invokes optional PluginStopper implementations in reverse order. Unrelated plugins retain caller order.

At runtime plugins receive a kernel.Kernel: a small per-dispatch value carrying the engine, the invocation context, and the locks its caller holds.

Communication At A Glance

Plugins talk through three mechanisms, all identified by exact Go type:

  • Commands are synchronous and return a result. Identity is a distinct defined factory type: type LoadCmd kernel.Command[LoadRequest, LoadResponse].
  • Events are asynchronous and need no registration. Zero or more subscriptions may react: type updateHandler kernel.Subscription[app.UpdateEvent].
  • Resources are shared state whose access the scheduler serializes. A handler binds a Read[T] or Write[T] handle once, and binding is what declares the lock.

A handler is a factory returning a Lock that binds handles and a body that runs per invocation. The factory runs once, at registration.

See kernel/docs/README.md for the full API and .github/instructions/kernel.instructions.md for the rules that keep usage correct — particularly that values read from a handle are valid only while the handler holds its lock.

Errors and Shutdown

All command and subscription handler errors flow through the engine's serialized ErrorHandler. Returning true terminates the engine; returning false allows recovery where possible. The default handler logs and terminates. Context cancellation and the host returning both shut down the runtime.

Checks

cog has no CI. A change is checked by running scripts/check.sh from anywhere inside the repo. It stops at the first failing step, printing each step's name before it runs:

  1. go build ./...
  2. go vet ./...
  3. gofmt -l over every tracked .go file, failing on and naming any file it lists
  4. GOOS=js GOARCH=wasm go build ./... and GOOS=js GOARCH=wasm go vet ./...
  5. go test ./...
  6. go test -tags ecs_validate, Validation mode, over every package but bundles/ecsphysics2d/..., which is excluded until #548 is fixed
  7. go test -race over every package but docs/research/ecs-go-mechanics-bench, a research harness that asserts nothing and whose allocation sweep would multiply under the detector, and kernel/archtest, which checks package structure, runs no concurrent code and is already slow; both still run in step 5

Steps 1–6 need only sh, git and Go, and run anywhere, Git Bash on Windows included. Step 7 needs cgo and a C toolchain, so it runs under WSL or on Linux (apt install build-essential on Debian or Ubuntu). On a machine that cannot build the race detector the step fails with an explanation; it never skips.

  • scripts/check.sh --no-race runs steps 1–6, for a machine without a C toolchain.
  • scripts/check.sh --race runs step 7 only.

Allocation-count assertions run only without -race: the detector changes allocation behaviour, so under it they skip. extensions/jsstorage and extensions/jssound are built and vetted for js/wasm but their tests are not run, since they need a js/wasm runtime the script does not drive.

Directories

Path Synopsis
bundles
anim
Package anim declares timelines of eased value tracks and one-tick cues.
Package anim declares timelines of eased value tracks and one-tick cues.
anim/animplugin
Package animplugin constructs the anim plugin.
Package animplugin constructs the anim plugin.
anim/internal
Package internal is the anim plugin: New, and the handler behind anim's AdvanceOnUpdate subscription that advances every timeline each tick.
Package internal is the anim plugin: New, and the handler behind anim's AdvanceOnUpdate subscription that advances every timeline each tick.
canvas
Package canvas declares the 2D drawing Bundle: layered sprites, text, primitives and custom triangles recorded into a frame-local queue, and sprites and text measured through a persistent lookup.
Package canvas declares the 2D drawing Bundle: layered sprites, text, primitives and custom triangles recorded into a frame-local queue, and sprites and text measured through a persistent lookup.
canvas/canvasplugin
Package canvasplugin constructs the canvas plugin.
Package canvasplugin constructs the canvas plugin.
canvas/internal
Package internal is the canvas plugin: New, the resolution of canvas.Config, the flush that turns a tick's recorded canvas.OpQueue into gfx draws through the sprite and triangle batchers, the draw-snapshot slot behind canvas.ArmDrawsCmd, the Start mount of the built-in shaders and default font, and the mcp Provider offering canvas_draws.
Package internal is the canvas plugin: New, the resolution of canvas.Config, the flush that turns a tick's recorded canvas.OpQueue into gfx draws through the sprite and triangle batchers, the draw-snapshot slot behind canvas.ArmDrawsCmd, the Start mount of the built-in shaders and default font, and the mcp Provider offering canvas_draws.
ecs
Package ecs describes things in the world as Entities carrying Components.
Package ecs describes things in the world as Entities carrying Components.
ecs/ecsplugin
Package ecsplugin constructs the ecs plugin.
Package ecsplugin constructs the ecs plugin.
ecs/internal
Package internal is the ecs plugin: New, the resolution of ecs.Config, and a registration that publishes the id authority, *ecs.Entities, as the resource every System holds for read and every structural change holds for write; registers ShrinkCmd and the six unexported Commands that read and write the world by Component name (read.go); registers the one Component the ECS owns, m.Transform; and subscribes the one System it owns, the general drainer (drainsystem.go), as ecs.DrainOnUpdate.
Package internal is the ecs plugin: New, the resolution of ecs.Config, and a registration that publishes the id authority, *ecs.Entities, as the resource every System holds for read and every structural change holds for write; registers ShrinkCmd and the six unexported Commands that read and write the world by Component name (read.go); registers the one Component the ECS owns, m.Transform; and subscribes the one System it owns, the general drainer (drainsystem.go), as ecs.DrainOnUpdate.
ecsaudio
Package ecsaudio records Entities into sound.
Package ecsaudio records Entities into sound.
ecsaudio/ecsaudioplugin
Package ecsaudioplugin constructs the ecsaudio plugin.
Package ecsaudioplugin constructs the ecsaudio plugin.
ecsaudio/internal
Package internal is the ecsaudio plugin: New, the registration of the three Components ecsaudio's root aliases, the plugin-owned Entity-to-Voice table, and the one System, subscribed as ecsaudio.RecordOnUpdate, that reconciles every Emitter against the Voice it already has and writes the Listener, into sound's queue once a tick.
Package internal is the ecsaudio plugin: New, the registration of the three Components ecsaudio's root aliases, the plugin-owned Entity-to-Voice table, and the one System, subscribed as ecsaudio.RecordOnUpdate, that reconciles every Emitter against the Voice it already has and writes the Listener, into sound's queue once a tick.
ecsphysics2d
Package ecsphysics2d gives an app 2D rigid-body physics on a plane.
Package ecsphysics2d gives an app 2D rigid-body physics on a plane.
ecsphysics2d/ecsphysics2dplugin
Package ecsphysics2dplugin constructs the physics plugin.
Package ecsphysics2dplugin constructs the physics plugin.
ecsphysics2d/internal
Package internal is the physics plugin itself: the Components it registers, the five Systems the step is, and the settings resolved at registration.
Package internal is the physics plugin itself: the Components it registers, the five Systems the step is, and the settings resolved at registration.
input
Package input declares the driver-agnostic input Bundle: a unified Key space (keyboard keys AND mouse buttons), a polled State resource, discrete input events, and the Apply command a driver uses to feed input changes.
Package input declares the driver-agnostic input Bundle: a unified Key space (keyboard keys AND mouse buttons), a polled State resource, discrete input events, and the Apply command a driver uses to feed input changes.
input/inputplugin
Package inputplugin constructs the input plugin.
Package inputplugin constructs the input plugin.
input/internal
Package internal is the input plugin: New, the handlers behind input's commands and its AdvanceOnUpdate subscription, and the mcp Provider offering input_send and input_state.
Package internal is the input plugin: New, the handlers behind input's commands and its AdvanceOnUpdate subscription, and the mcp Provider offering input_send and input_state.
mcp
Package mcp declares the agent-facing Bundle: how a plugin offers typed capabilities to an agent, and nothing about how those capabilities reach one.
Package mcp declares the agent-facing Bundle: how a plugin offers typed capabilities to an agent, and nothing about how those capabilities reach one.
mcp/internal
Package internal is the mcp broker: the one plugin that collects every mcp.Provider Adapter in the engine and serves their capabilities to an agent over the Model Context Protocol.
Package internal is the mcp broker: the one plugin that collects every mcp.Provider Adapter in the engine and serves their capabilities to an agent over the Model Context Protocol.
mcp/internal/types
Package types declares the concrete types mcp's root aliases: Capability, whose unexported fields only its two constructors, Command and Func, may set, and Option, which writes to capability settings no other package can reach.
Package types declares the concrete types mcp's root aliases: Capability, whose unexported fields only its two constructors, Command and Func, may set, and Option, which writes to capability settings no other package can reach.
mcp/mcpplugin
Package mcpplugin constructs the mcp broker plugin.
Package mcpplugin constructs the mcp broker plugin.
model
Package model is the plugin that owns everything a model file can contain: glTF decode, geometry generation, vertex and morph packing, GPU upload, the model and texture caches, and the one mesh table every renderer draws from.
Package model is the plugin that owns everything a model file can contain: glTF decode, geometry generation, vertex and morph packing, GPU upload, the model and texture caches, and the one mesh table every renderer draws from.
model/internal
Package internal is the model plugin: New, the resolution of model.Config, and the registration of the *model.Lookup resource every renderer draws from.
Package internal is the model plugin: New, the resolution of model.Config, and the registration of the *model.Lookup resource every renderer draws from.
model/internal/gltf
Package gltf is model's glTF decoder: one glTF or GLB file in, plain data out.
Package gltf is model's glTF decoder: one glTF or GLB file in, plain data out.
model/modelplugin
Package modelplugin constructs the model plugin.
Package modelplugin constructs the model plugin.
scene
Package scene draws Entities: it is cog's 3D renderer, the ECS's binding of model's drawing.
Package scene draws Entities: it is cog's 3D renderer, the ECS's binding of model's drawing.
scene/internal
Package internal is the scene plugin: New, the registration of every Component scene's root aliases, and its Systems with their scratches.
Package internal is the scene plugin: New, the registration of every Component scene's root aliases, and its Systems with their scratches.
scene/sceneplugin
Package sceneplugin constructs the scene plugin.
Package sceneplugin constructs the scene plugin.
ui
Package ui declares the immediate-mode layout and interaction Bundle: a consumer declares a tree of Elements into the Frame every update tick, and ui measures and arranges it, hit-tests the pointer, records the visuals into canvas and publishes what was interacted with in Interactions.
Package ui declares the immediate-mode layout and interaction Bundle: a consumer declares a tree of Elements into the Frame every update tick, and ui measures and arranges it, hit-tests the pointer, records the visuals into canvas and publishes what was interacted with in Interactions.
ui/internal
Package internal is the ui plugin: New, the processing behind ui.ProcessOnUpdate that lays out the tick's ui.Frame, resolves the pointer into ui.Interactions and records into canvas, the private layout resource it keeps across ticks, the layout-snapshot slot behind ui.ArmLayoutCmd, and the mcp Provider offering ui_layout.
Package internal is the ui plugin: New, the processing behind ui.ProcessOnUpdate that lays out the tick's ui.Frame, resolves the pointer into ui.Interactions and records into canvas, the private layout resource it keeps across ticks, the layout-snapshot slot behind ui.ArmLayoutCmd, and the mcp Provider offering ui_layout.
ui/uiplugin
Package uiplugin constructs the ui plugin.
Package uiplugin constructs the ui plugin.
docs
research/ecs-go-mechanics-bench/store
Package store is a throwaway stand-in for an ECS component store living in a DIFFERENT package from the loop that ranges over it.
Package store is a throwaway stand-in for an ECS component store living in a DIFFERENT package from the loop that ranges over it.
extensions
diskstorage
Package diskstorage declares the desktop Extension of storage: a plugin that provides storage.PermanentFS as a directory confined under the user's data directory, named by the application id.
Package diskstorage declares the desktop Extension of storage: a plugin that provides storage.PermanentFS as a directory confined under the user's data directory, named by the application id.
diskstorage/diskstorageplugin
Package diskstorageplugin constructs the diskstorage plugin.
Package diskstorageplugin constructs the diskstorage plugin.
diskstorage/internal
Package internal is the diskstorage plugin: New, the application id and data directory resolution, and the confined directory it provides as storage's PermanentFS.
Package internal is the diskstorage plugin: New, the application id and data directory resolution, and the confined directory it provides as storage's PermanentFS.
gogpu
Package gogpu declares cog's window, input, frame timing and WebGPU driver, built on, and named for, the gogpu library (github.com/gogpu/gogpu): the one kernel.PluginHost.
Package gogpu declares cog's window, input, frame timing and WebGPU driver, built on, and named for, the gogpu library (github.com/gogpu/gogpu): the one kernel.PluginHost.
gogpu/gogpuplugin
Package gogpuplugin constructs the gogpu plugin.
Package gogpuplugin constructs the gogpu plugin.
gogpu/internal
Package internal is the gogpu plugin: New, the kernel.PluginHost that owns the gogpu library's main loop, the app.MainLoop and gfx.Backend it provides, and the input bridge.
Package internal is the gogpu plugin: New, the kernel.PluginHost that owns the gogpu library's main loop, the app.MainLoop and gfx.Backend it provides, and the input bridge.
jssound
Package jssound declares the browser Extension of sound: a plugin that fills sound's BackendPort with Web Audio nodes, so the browser decodes and mixes on its own audio thread rather than on the one that starves.
Package jssound declares the browser Extension of sound: a plugin that fills sound's BackendPort with Web Audio nodes, so the browser decodes and mixes on its own audio thread rather than on the one that starves.
jssound/internal
Package internal is the jssound plugin: New, the Backend it provides for sound's BackendPort, the Web Audio node graph one Voice is, and the two tiers a Clip's samples reach it through - decoded whole into one AudioBuffer, or decoded a chunk at a time and scheduled on the context clock.
Package internal is the jssound plugin: New, the Backend it provides for sound's BackendPort, the Web Audio node graph one Voice is, and the two tiers a Clip's samples reach it through - decoded whole into one AudioBuffer, or decoded a chunk at a time and scheduled on the context clock.
jssound/jssoundplugin
Package jssoundplugin constructs the jssound plugin.
Package jssoundplugin constructs the jssound plugin.
jsstorage
Package jsstorage declares the browser Extension of storage: a plugin that provides storage.PermanentFS backed by the page's localStorage, under the key cog.storage.<AppId>.
Package jsstorage declares the browser Extension of storage: a plugin that provides storage.PermanentFS backed by the page's localStorage, under the key cog.storage.<AppId>.
jsstorage/internal
Package internal is the jsstorage plugin: New, the application id check, and the localStorage-backed filesystem it provides as storage's PermanentFS.
Package internal is the jsstorage plugin: New, the application id check, and the localStorage-backed filesystem it provides as storage's PermanentFS.
jsstorage/jsstorageplugin
Package jsstorageplugin constructs the jsstorage plugin.
Package jsstorageplugin constructs the jsstorage plugin.
nosound
Package nosound declares the silent Extension of sound: a plugin that fills sound's BackendPort, accepts everything and plays nothing.
Package nosound declares the silent Extension of sound: a plugin that fills sound's BackendPort, accepts everything and plays nothing.
nosound/internal
Package internal is the nosound plugin: New, and the silent Backend it provides for sound's BackendPort.
Package internal is the nosound plugin: New, and the silent Backend it provides for sound's BackendPort.
nosound/nosoundplugin
Package nosoundplugin constructs the nosound plugin.
Package nosoundplugin constructs the nosound plugin.
otosound
Package otosound declares the desktop Extension of sound: our own software Mixer over ebitengine/oto/v3, in pure Go, decoding Ogg Vorbis with jfreymuth/oggvorbis.
Package otosound declares the desktop Extension of sound: our own software Mixer over ebitengine/oto/v3, in pure Go, decoding Ogg Vorbis with jfreymuth/oggvorbis.
otosound/internal
Package internal is the otosound plugin: New, the Backend it provides for sound's BackendPort, the ring that carries a tick's operations to the Mixer, the Mixer itself, and the decode that turns encoded Ogg into resident samples.
Package internal is the otosound plugin: New, the Backend it provides for sound's BackendPort, the ring that carries a tick's operations to the Mixer, the Mixer itself, and the decode that turns encoded Ogg into resident samples.
otosound/otosoundplugin
Package otosoundplugin constructs the otosound plugin.
Package otosoundplugin constructs the otosound plugin.
Package kernel is a small microkernel: plugins register resources, commands, and event subscriptions, then communicate through them.
Package kernel is a small microkernel: plugins register resources, commands, and event subscriptions, then communicate through them.
archtest/internal
Package internal holds the fixture types kernel.TypeName's table test renders: named types declared in a package whose import path ends in internal, which is the shape every Bundle's and Port's internal/ package has.
Package internal holds the fixture types kernel.TypeName's table test renders: named types declared in a package whose import path ends in internal, which is the shape every Bundle's and Port's internal/ package has.
libs
config
Package config names a cog engine's configuration from outside the binary, so a run can be re-pointed without editing the composition root and rebuilding.
Package config names a cog engine's configuration from outside the binary, so a run can be re-pointed without editing the composition root and rebuilding.
m
Package m provides immutable value-style mathematics for Cog.
Package m provides immutable value-style mathematics for Cog.
slots
app
Package app declares the app Slot: the platform-agnostic application loop.
Package app declares the app Slot: the platform-agnostic application loop.
app/appplugin
Package appplugin constructs the app plugin.
Package appplugin constructs the app plugin.
app/internal
Package internal is the app plugin: New, the Loop a MainLoop drives, the tick source behind app.TimeCmd, the QuitCmd and TimeCmd handlers, and its mcp provider.
Package internal is the app plugin: New, the Loop a MainLoop drives, the tick source behind app.TimeCmd, the QuitCmd and TimeCmd handlers, and its mcp provider.
gfx
Package gfx declares the gfx Slot, cog's driver-agnostic high-level renderer (renderer v2).
Package gfx declares the gfx Slot, cog's driver-agnostic high-level renderer (renderer v2).
gfx/gfxplugin
Package gfxplugin constructs the gfx plugin.
Package gfxplugin constructs the gfx plugin.
gfx/internal/mcp
Package mcp is gfx's capture and frame-snapshot machinery and what it offers an agent through the mcp broker: the capture and snapshot slots, the ArmCaptureCmd and ArmFrameCmd that arm them, and the gfx_capture and gfx_frame tools.
Package mcp is gfx's capture and frame-snapshot machinery and what it offers an agent through the mcp broker: the capture and snapshot slots, the ArmCaptureCmd and ArmFrameCmd that arm them, and the gfx_capture and gfx_frame tools.
sound
Package sound declares the sound Slot: Clips played as Voices, grouped on Buses, with all of the arithmetic computed here and none of it below.
Package sound declares the sound Slot: Clips played as Voices, grouped on Buses, with all of the arithmetic computed here and none of it below.
sound/internal
Package internal is the sound plugin: New, the six resources, and the once-per-tick flush that turns a tick's recorded operations into one Emit.
Package internal is the sound plugin: New, the six resources, and the once-per-tick flush that turns a tick's recorded operations into one Emit.
sound/soundplugin
Package soundplugin constructs the sound plugin.
Package soundplugin constructs the sound plugin.
storage
Package storage declares the storage Slot: one kernel resource, FileSystem, a prioritized read-only overlay over every mounted filesystem, including the single permanent one that writes land in.
Package storage declares the storage Slot: one kernel resource, FileSystem, a prioritized read-only overlay over every mounted filesystem, including the single permanent one that writes land in.
storage/internal
Package internal is the storage plugin: New and the handlers behind storage's commands.
Package internal is the storage plugin: New and the handlers behind storage's commands.
storage/storageplugin
Package storageplugin constructs the storage plugin.
Package storageplugin constructs the storage plugin.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL