tecs.platform.gamepadnative
The tecsgamepad binding behind the gamepad backend contract.
Loading this module loads libtecsgamepad through tecs.internal.nativelibrary, so a build that cannot find the library raises here rather than anywhere later. tecs.input requires it through pcall for exactly that reason and falls back to tecs.platform.gamepadbackend.none when it is absent, which is what makes a headless test and a machine with no controller support behave the same.
Observations cross as one contiguous C array per drain. Nothing in the library ever calls a Nupp function. gilrs runs a thread of its own on macOS, where IOHIDManager needs a CFRunLoop, and entering Nupp from a thread the Lua virtual machine never created is undefined, so that thread posts to a channel the library drains on the frame thread instead. This binding therefore declares no function pointer anywhere.
local backend <const> = assert(tecs.platform.gamepadnative.open())Module contents
Functions
| Function | Kind | Description |
|---|---|---|
open | function | Opens the platform's gamepad source and returns it as a backend. |
openDetached | function | Opens a context with no platform source, for a deterministic native test. |
Functions#
openfunction#
function open(): gamepadbackend.Backend?, string?Opens the platform's gamepad source and returns it as a backend.
A machine with no controller support still opens: the backend reports available false, answers every call, and never sees a device.
Returns
| Type | Description |
|---|---|
gamepadbackend.Backend? | the backend, or nil when the library opened nothing |
string? | the reason, when the first return is nil |
openDetachedfunction#
function openDetached(): gamepadbackend.Backend?, string?Opens a context with no platform source, for a deterministic native test.
This proves the binding itself against the real library without needing a controller plugged in, which is what a headless suite can check.
Returns
| Type | Description |
|---|---|
gamepadbackend.Backend? | the backend, or nil when the library opened nothing |
string? | the reason, when the first return is nil |