2.4 KiB
Console
Source: src/dusk/console/
Overview
The console is a lightweight in-engine debug overlay. It maintains a
fixed-size ring buffer of text lines and can render them to the screen
as an overlay. On Linux (where DUSK_CONSOLE_POSIX is defined), it
also reads commands from stdin on a background thread, allowing
interactive input during development without pausing the game loop.
Limits
| Constant | Value |
|---|---|
CONSOLE_LINE_MAX |
512 chars per line |
CONSOLE_HISTORY_MAX |
16 lines in the ring buffer |
CONSOLE_EXEC_BUFFER_MAX |
32 pending execution slots |
Global state
typedef struct {
char_t line[CONSOLE_HISTORY_MAX][CONSOLE_LINE_MAX]; // ring buffer
bool_t visible;
#ifdef DUSK_CONSOLE_POSIX
threadmutex_t printMutex; // guards ring buffer on POSIX targets
#endif
} console_t;
extern console_t CONSOLE;
API
void consoleInit(void);
// printf-style print into the ring buffer.
// Thread-safe on POSIX (uses printMutex).
void consolePrint(const char_t *message, ...);
// Process any queued script input lines. Must be called from the
// main thread once per frame.
void consoleUpdate(void);
// Draw the ring buffer as an overlay in UI space.
errorret_t consoleDraw(void);
void consoleDispose(void);
POSIX stdin mode (DUSK_CONSOLE_POSIX)
On Linux only (DUSK_CONSOLE_POSIX), the console launches a background
thread that polls stdin using poll() at 75 ms intervals
(CONSOLE_POSIX_POLL_RATE). Lines typed at the terminal are queued
and dispatched on the main thread by consoleUpdate().
This allows typing commands or JS expressions into the running game
without blocking the render loop. The ring buffer is protected by
CONSOLE.printMutex so consolePrint is safe to call from either
thread.
POSIX mode is not available on PSP, Vita, or Dolphin targets.
Notes
CONSOLE.visiblecontrols whetherconsoleDrawrenders anything. Toggle it from a debug keybind or always set it totruein development builds.consolePrintwraps lines atCONSOLE_LINE_MAX-- long messages are truncated. Use multiple calls for long output.- The console is distinct from the error system (
errorThrow/errorPrint). UseconsolePrintfor diagnostic output; useerrorThrowfor recoverable failures. - Log calls (
logDebug,logError) go to the platform's debug output (stdout/stderr), not to the console ring buffer.