A MoonBit reimplementation of libepoxy: OpenGL function pointer dispatch.
$ moon -C examples run hello_gl/main --release
GL_VERSION = 2.1 Metal - 90.5
gl_version = 21 (2.1)
is_desktop = true
has GL_APPLE_vertex_array_object = true
GL_MAX_TEXTURE_SIZE = 16384
glGenBuffers -> [1, 2, 3]
glShaderSource+compile ok = true
glColor3sv round-trip = [1, 0, 0]| Path | Role |
|---|---|
| resolver.mbt, version.mbt, handles.mbt | The epoxy library (module root, tonyfettes/epoxy): the lazy dlopen/dlsym resolver + self-patching Dispatch slots, the version/extension introspection API, and the opaque-handle types. |
| epoxy.c | Hand-written C: the dlopen/dlsym resolver. |
| gl_generated.mbt / gl_generated.c | Generated dispatch wrappers + per-signature C call shims (3217). |
| gl_generated_enums.mbt | Generated GL enum constants (pub const GL_* : UInt/UInt64/Int, 6061). |
| internal/glinfo/ | Pure parsers for the GL_VERSION/GL_EXTENSIONS strings (the introspection logic, unit-tested in isolation). Module-internal — not part of the public API. |
| generator/ | The binding generator — its own module, tonyfettes/epoxy-generator: parse.mbt (streaming registry parse), emit.mbt (classification + codegen), main.mbt (CLI driver), plus its private support packages gen/ (the GLxxx→type table), cdecl/ (C-declarator parser), aliasgroup/ (union-find over <alias> edges). |
| examples/ | A separate module (tonyfettes/epoxy-examples); see hello_gl. |
| upstream/libepoxy | The reference C implementation (submodule), incl. registry/*.xml. |
moon -C generator run . # regenerate bindings from gl.xml
moon test # all unit tests
moon -C examples run hello_gl/main --release # the demo (release: see examples/hello_gl)moon -C generator run . -- \
--registry ../upstream/libepoxy/registry/gl.xml \
--out-mbt ../gl_generated.mbt \
--out-c ../gl_generated.c \
--out-enums ../gl_generated_enums.mbt| Category | Count | Status |
|---|---|---|
| scalar / void / string + scalar/string/16-bit arrays + opaque handles | 3217 | ✅ generated |
| void** out-pointers (glGetPointerv, glMultiDrawElements, …) | 36 | deferred |
| GLhandleARB (platform-variant ABI; modern GLuint form is bound) | 23 | deferred |
| non-string pointer return (void* glMapBuffer) | 11 | deferred |
| pointer-width arrays (GLintptr* in glBindBuffersRange, …) | 5 | deferred |
| callback argument (GLDEBUGPROC) | 4 | deferred |
| non-char double-pointer arrays (GLvdpauSurfaceNV*) | 2 | deferred |
| OpenCL interop type (glCreateSyncFromCLeventARB) | 1 | deferred |
This package contains over 9285 items.
A MoonBit reimplementation of libepoxy: OpenGL function pointer dispatch.