added event system for browser events
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 8 Sep 2020 16:34:01 +0000 (11:34 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Tue, 8 Sep 2020 16:34:01 +0000 (11:34 -0500)
14 files changed:
.gitignore
build.sh [deleted file]
docs/plan [new file with mode: 0644]
environment.js [deleted file]
index.html
index.js [deleted file]
js/environment.js [new file with mode: 0644]
js/index.js [new file with mode: 0644]
js/webgl.js [new file with mode: 0644]
src/events.onyx [new file with mode: 0644]
src/gfx/quad_renderer.onyx
src/main.onyx
tags [new file with mode: 0644]
webgl.js [deleted file]

index 6a63cb1118bbe9420e495a89e60a6c0eaeada4c1..660663eedffc84c76c2c1e850e8bcbb03ab2f611 100644 (file)
@@ -1,3 +1,4 @@
 *.wasm
 *.sublime-project
 *.sublime-workspace
+.vimmake
diff --git a/build.sh b/build.sh
deleted file mode 100755 (executable)
index a94529e..0000000
--- a/build.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-onyx -verbose src/main.onyx -o ./game.wasm
diff --git a/docs/plan b/docs/plan
new file mode 100644 (file)
index 0000000..04e83d2
--- /dev/null
+++ b/docs/plan
@@ -0,0 +1,15 @@
+I don't have a solid idea of what kind of game I am making, but I know some of the things that will
+be needed no matter what kind of game I make. Those things are:
+    - GL Rendering
+    - Vector and Matrix math
+    - Hooks to some JS Apis
+        * Pointer Lock
+        * Fetch
+
+    - Event System
+
+
+
+
+JS:   DomEvents -> Prespecified buffer (at most N per frame) -> Flag how many were added
+Onyx: Poll proc will be called -> Load each event out of the buffer -> Process them 1 by 1
diff --git a/environment.js b/environment.js
deleted file mode 100644 (file)
index e45e207..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-
-let anim_frame = () => {
-    return new Promise((res, _) => {
-        window.requestAnimationFrame(res)
-    });
-}
-
-async function start_game(gs) {
-    while (true) {
-        await anim_frame();
-
-        WASM_EXPORTS.new_frame_callback(gs);
-    }
-}
-
-function create_import_obj() {
-
-return {
-    gl: WebGl_Wasm,
-
-    time: {
-        now() { return Date.now(); }
-    },
-
-    host: {
-        print_str(str, len) {
-            let buffer = new Uint8Array(WASM_MEMORY.buffer, str, len);
-            let output = new TextDecoder().decode(buffer);
-            console.log(output);
-        },
-    },
-
-    game: { launch: start_game },
-}
-
-}
index efc08a77ff3bc1a4053cab6b46bcd9d759992540..ec76c5b589aa2de9d1b116df6449cdfdfc4642f4 100644 (file)
@@ -5,9 +5,9 @@
         <meta name="viewport" content="width=device-width">
         <title>Game in Onyx</title>
 
-        <script src="webgl.js"></script>
-        <script defer src="environment.js"></script>
-        <script defer src="index.js"></script>
+        <script src="js/webgl.js"></script>
+        <script defer src="js/environment.js"></script>
+        <script defer src="js/index.js"></script>
 
     </head>
     <body style="background: black">
diff --git a/index.js b/index.js
deleted file mode 100644 (file)
index 09d5390..0000000
--- a/index.js
+++ /dev/null
@@ -1,27 +0,0 @@
-
-function main(module) {
-    WASM_MODULE = module;
-    WASM_MEMORY = null;
-    WASM_EXPORTS = null;
-
-    console.log("Loaded WASM");
-    console.log(module);
-
-    WebAssembly
-           .instantiate(module, create_import_obj())
-           .then(instance => {
-               console.log(instance);
-
-                   WASM_EXPORTS = instance.exports;
-                   WASM_MEMORY  = instance.exports.memory;
-
-                   instance.exports._start();
-           });
-}
-
-//fetch("game.wasm")
-fetch("out.wasm")
-    .then(res => res.arrayBuffer())
-    .then(buffer => WebAssembly.compile(buffer))
-    .then(main);
-
diff --git a/js/environment.js b/js/environment.js
new file mode 100644 (file)
index 0000000..03a3b7d
--- /dev/null
@@ -0,0 +1,87 @@
+
+let anim_frame = () => {
+    return new Promise((res, _) => {
+        window.requestAnimationFrame(res)
+    });
+}
+
+async function start_game(gs) {
+    while (true) {
+        await anim_frame();
+
+        WASM_EXPORTS.new_frame_callback(gs);
+    }
+}
+
+function push_event_to_buffer(esp, event_size, event_kind, data) {
+    if (WASM_U32[esp] >= WASM_U32[esp + 1]) {
+        console.log("Buffer full!");
+        return;
+    }
+
+    WASM_U32[esp] += 1;
+
+    let event_idx = esp + (WASM_U32[esp] - 1) * (event_size / 4) + 2;
+    WASM_U32[event_idx] = event_kind;
+    WASM_U32[event_idx + 1] = Date.now();
+
+    for (let i = 0; i < data.length; i++) {
+        WASM_U32[event_idx + 2 + i] = data[i];
+    }
+}
+
+function create_import_obj() {
+
+return {
+    gl: WebGl_Wasm,
+
+    time: {
+        now() { return Date.now(); }
+    },
+
+    host: {
+        print_str(str, len) {
+            let buffer = new Uint8Array(WASM_MEMORY.buffer, str, len);
+            let output = new TextDecoder().decode(buffer);
+            console.log(output);
+        },
+    },
+
+    game: { launch: start_game },
+
+    event: {
+        setup(esp, event_size) {
+            // Indicies into a Uint32Array are not based on bytes,
+            // but on the index.
+            esp /= 4;
+
+            document.addEventListener("keydown", (ev) => {
+                if (ev.isComposing || ev.keyCode === 229) return;
+                push_event_to_buffer(esp, event_size, 0x04, [ ev.keyCode ]);
+            });
+
+            document.addEventListener("keyup", (ev) => {
+                if (ev.isComposing || ev.keyCode === 229) return;
+                push_event_to_buffer(esp, event_size, 0x05, [ ev.keyCode ]);
+            });
+
+            document.addEventListener("mousedown", (ev) => {
+                push_event_to_buffer(esp, event_size, 0x01, [ ev.clientX, ev.clientY, ev.button ]);
+            });
+
+            document.addEventListener("mouseup", (ev) => {
+                push_event_to_buffer(esp, event_size, 0x02, [ ev.clientX, ev.clientY, ev.button ]);
+            });
+
+            document.addEventListener("mousemove", (ev) => {
+                push_event_to_buffer(esp, event_size, 0x03, [ ev.clientX, ev.clientY, -1 ]);
+            });
+
+            window.addEventListener("resize", (ev) => {
+                push_event_to_buffer(esp, event_size, 0x06, [ window.innerWidth, window.innerHeight ]);
+            });
+        }
+    }
+}
+
+}
diff --git a/js/index.js b/js/index.js
new file mode 100644 (file)
index 0000000..1b2a760
--- /dev/null
@@ -0,0 +1,36 @@
+
+function main(module) {
+    WASM_MODULE = module;
+    WASM_MEMORY = null;
+    WASM_EXPORTS = null;
+
+    console.log("Loaded WASM");
+    console.log(module);
+
+    WebAssembly
+           .instantiate(module, create_import_obj())
+           .then(instance => {
+               console.log(instance);
+
+                   WASM_EXPORTS = instance.exports;
+                   WASM_MEMORY  = instance.exports.memory;
+
+            WASM_U8  = new Uint8Array(WASM_MEMORY.buffer);
+            WASM_I8  = new Int8Array(WASM_MEMORY.buffer);
+            WASM_U16 = new Uint16Array(WASM_MEMORY.buffer);
+            WASM_I16 = new Int16Array(WASM_MEMORY.buffer);
+            WASM_U32 = new Uint32Array(WASM_MEMORY.buffer);
+            WASM_I32 = new Int32Array(WASM_MEMORY.buffer);
+            WASM_U64 = new BigUint64Array(WASM_MEMORY.buffer);
+            WASM_I64 = new BigInt64Array(WASM_MEMORY.buffer);
+
+                   instance.exports._start();
+           });
+}
+
+//fetch("game.wasm")
+fetch("out.wasm")
+    .then(res => res.arrayBuffer())
+    .then(buffer => WebAssembly.compile(buffer))
+    .then(main);
+
diff --git a/js/webgl.js b/js/webgl.js
new file mode 100644 (file)
index 0000000..1199e89
--- /dev/null
@@ -0,0 +1,280 @@
+WebGl_Wasm = {
+    init(name, namelen) {
+        const decoder = new TextDecoder();
+        const str = new Uint8Array(WASM_MEMORY.buffer, name, namelen);
+        const canvasname = decoder.decode(str);
+
+        this.programs = [];
+        this.shaders = [];
+        this.buffers = [];
+        this.framebuffers = [];
+        this.renderbuffers = [];
+        this.textures = [];
+        this.uniformlocs = [];
+        this.vertexArrays = [];
+
+        this.canvas = document.getElementById(canvasname);
+        if (this.canvas == null) return 0;
+
+        this.gl = this.canvas.getContext("webgl2");
+        if (this.gl == null) return 0;
+
+        return 1;
+    },
+
+    activeTexture(texture) { this.gl.activeTexture(texture); },
+    attachShader(program, shader) { this.gl.attachShader(this.programs[program], this.shaders[shader]); return this.programs[program]; },
+    bindAttribLocation(program, index, name, namelen) { console.log("NOT IMPLEMENTED!"); },
+    bindBuffer(target, buffer) {
+        if (buffer == -1) {
+            this.gl.bindBuffer(target, null);
+        } else {
+            this.gl.bindBuffer(target, this.buffers[buffer]);
+        }
+    },
+    bindFramebuffer(target, framebuffer) { this.gl.bindFramebuffer(target, this.framebuffers[framebuffer]); },
+    bindRenderbuffer(target, renderbuffer) { this.gl.bindRenderbuffer(target, this.renderbuffers[renderbuffer]); },
+    bindTexture(target, texture) { this.gl.bindTexture(target, this.textures[texture]); },
+    bindVertexArray(vertexArray) { this.gl.bindVertexArray(this.vertexArrays[vertexArray]); },
+
+    blendColor(red, green, blue, alpha) { this.gl.blendColor(red, green, blue, alpha); },
+    blendEquation(mode) { this.gl.blendEquation(mode); },
+    blendEquationSeparate(modeRGB, modeAlpha) { this.gl.blendEquationSeparate(modeRGB, modeAlpha); },
+    blendFunc(sfactor, dfactor) { this.gl.blendFunc(sfactor, dfactor); },
+    blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha) { this.gl.blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); },
+
+    blitFramebuffer(sx0, sy0, sx1, sy1, dx0, dy0, dx1, dy1, mask, filter) {
+        this.gl.blitFramebuffer(sx0, sy0, sx1, sy1, dx0, dy0, dx1, dy1, mask, filter);
+    },
+
+    bufferDataWithData(target, bufferdata, bufferlen, usage) {
+        const data = new DataView(WASM_MEMORY.buffer, bufferdata, bufferlen);
+        this.gl.bufferData(target, data, usage);
+    },
+
+    bufferDataNoData(target, size, usage) { this.gl.bufferData(target, size, usage); },
+    bufferSubData(target, offset, bufferdata, bufferlen) {
+        const data = new DataView(WASM_MEMORY.buffer, bufferdata, bufferlen);
+        this.gl.bufferSubData(target, offset, data);
+    },
+    checkFrameBufferStatus(target) { return this.gl.checkFrameBufferStatus(target); },
+    clear(bit) { this.gl.clear(bit); },
+    clearColor(r, g, b, a) { this.gl.clearColor(r, g, b, a); },
+    clearDepth(depth) { this.gl.clearDepth(depth); },
+    clearStencil(stencil) { this.gl.clearStencil(stencil); },
+    colorMask(r, g, b, a) { this.gl.colorMask(r, g, b, a); },
+    compileShader(shader) { this.gl.compileShader(this.shaders[shader]); },
+    compressedTexImage2D(target, level, internalformat, width, height, border, data, datalen) {
+        const pixels = new DataView(WASM_MEMORY.buffer, data, datalen);
+        this.gl.compressedTexImage2D(target, level, internalformat, width, height, border, pixels);
+    },
+    compressedTexSubImage2D(target, level, internalformat, xoff, yoff, width, height, format, data, datalen) {
+        const pixels = new DataView(WASM_MEMORY.buffer, data, datalen);
+        this.gl.compressedSubTexImage2D(target, level, internalformat, xoff, yoff, width, height, format, pixels);
+    },
+    copyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size) { this.gl.copyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); },
+    copyTexImage2D(target, level, internalforamt, x, y, width, height, border) {
+        this.gl.copyTexImage2D(target, level, internalforamt, x, y, width, height, border);
+    },
+    copyTexSubImage2D(target, level, xoff, yoff, x, y, width, height) {
+        this.gl.copyTexSubImage2D(target, level, xoff, yoff, x, y, width, height);
+    },
+    createBuffer() {
+        const buf = this.gl.createBuffer();
+        if (buf == null) return -1;
+
+        this.buffers.push(buf);
+        return this.buffers.length - 1;
+    },
+    createFramebuffer() {
+        const buf = this.gl.createFramebuffer();
+        if (buf == null) return -1;
+
+        this.framebuffers.push(buf);
+        return this.framebuffers.length - 1;
+    },
+    createProgram() {
+        const prog = this.gl.createProgram();
+        if (prog == null) return -1;
+
+        this.programs.push(prog);
+        return this.programs.length - 1;
+    },
+    createRenderbuffer() {
+        const buf = this.gl.createRenderbuffer();
+        if (buf == null) return -1;
+
+        this.renderbuffers.push(buf);
+        return this.renderbuffers.length - 1;
+    },
+    createShader(type) {
+        const shader = this.gl.createShader(type);
+        if (shader == null) return -1;
+
+        this.shaders.push(shader);
+        return this.shaders.length - 1;
+    },
+    createTexture() {
+        const texture = this.gl.createTexture();
+        if (texture == null) return -1;
+
+        this.textures.push(texture);
+        return this.textures.length - 1;
+    },
+    createVertexArray() {
+        const vao = this.gl.createVertexArray();
+        if (vao == null) return -1;
+
+        this.vertexArrays.push(vao);
+        return this.vertexArrays.length - 1;
+    },
+    cullFace(mode) { this.gl.cullFace(mode); },
+    deleteBuffer(buffer) { this.gl.deleteBuffer(this.buffers[buffer]); },
+    deleteFramebuffer(framebuffer) { this.gl.deleteFramebuffer(this.framebuffers[framebuffer]); },
+    deleteProgram(program) { this.gl.deleteProgram(this.programs[program]); },
+    deleteRenderbuffer(renderbuffer) { this.gl.deleteRenderbuffer(this.renderbuffers[renderbuffer]); },
+    deleteShader(shader) { this.gl.deleteShader(this.shaders[shader]); },
+    deleteTexture(texture) { this.gl.deleteTexture(this.textures[texture]); },
+    deleteVertexArray(vertexArray) { this.gl.deleteVertexArray(this.vertexArrays[vertexArray]); },
+    depthFunc(func) { this.gl.depthFunc(func); },
+    depthMask(flag) { this.gl.depthMask(flag); },
+    depthRange(znear, zfar) { this.gl.depthRange(znear, zfar); },
+    detachShader(program, shader) { this.gl.detachShader(this.programs[program], this.shaders[shader]); },
+    disable(cap) { this.gl.disable(cap); },
+    disableVertexAttribArray(index) { this.gl.disableVertexAttribArray(index); },
+    drawArrays(mode, first, count) { this.gl.drawArrays(mode, first, count); },
+    drawArraysInstanced(mode, first, count, instanceCount) { this.gl.drawArraysInstanced(mode, first, count, instanceCount); },
+    drawElements(mode, count, type, offset) { this.gl.drawElements(mode, count, type, offset); },
+    drawElementsInstanced(mode, count, type, offset, instanceCount) { this.gl.drawElementsInstanced(mode, count, type, offset, instanceCount); },
+    enable(cap) { this.gl.enable(cap); },
+    enableVertexAttribArray(index) { this.gl.enableVertexAttribArray(index); },
+    finish() { this.gl.finish(); },
+    flush() { this.gl.flush(); },
+    framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer) {
+        this.gl.framebufferRenderbuffer(target, attachment, renderbuffertarget, this.renderbuffers[renderbuffer]);
+    },
+    framebufferTexture2D(target, attachment, texttarget, texture, level) {
+        this.gl.framebufferTexture2D(target, attachment, texttarget, this.textures[texture], level);
+    },
+    framebufferTextureLayer(target, attachment, texture, level, layer) { this.gl.framebufferTextureLayer(target, attachment, this.textures[texture], level, layer); },
+    frontFace(mode) { this.gl.frontFace(mode); },
+    generateMipmap(target) { this.gl.generateMipmap(target); },
+    getActiveAttrib(program, index, out) {
+        const loc = this.gl.getActiveAttrib(this.programs[program], index);
+        const data = new Int32Array(WASM_MEMORY.buffer, out, 2);
+        data[0] = loc.size;
+        data[1] = loc.type;
+    },
+    getActiveUniform(program, index, out) {
+        const loc = this.gl.getActiveUniform(this.programs[program], index);
+        const data = new Int32Array(WASM_MEMORY.buffer, out, 2);
+        data[0] = loc.size;
+        data[1] = loc.type;
+    },
+    // getAttachedShaders() { console.log("NOT IMPLEMENTED!"); },
+    getAttribLocation(program, name, namelen) {
+        const decoder = new TextDecoder();
+        const str = new Uint8Array(WASM_MEMORY.buffer, name, namelen);
+        const attribname = decoder.decode(str);
+
+        return this.gl.getAttribLocation(this.programs[program], attribname);
+    },
+    // getBufferParameter() { console.log("NOT IMPLEMENTED!"); },
+    getBufferSubData(target, srcbyteoffset, dstbufferdata, dstbufferlen, dstoffset, length) {
+        const dst = new DataView(WASM_MEMORY.buffer, dstbufferdata, dstbufferlen);
+        this.gl.getBufferSubData(target, srcbyteoffset, dst, dstoffset, length);
+    },
+    getError() { return this.gl.getError(); },
+    getInternalformatParameter(target, internalformat, pname) { return this.gl.getInternalformatParameter(target, internalformat, pname); },
+    // many of the 'gets() { console.log("NOT IMPLEMENTED!"); },
+    getShaderParameter(shader, param) { return this.gl.getShaderParameter(this.shaders[shader], param); },
+    getProgramParameter(program, param) { return this.gl.getProgramParameter(this.programs[program], param); },
+    getUniformLocation(program, name, namelen) {
+        const decoder = new TextDecoder();
+        const str = new Int8Array(WASM_MEMORY.buffer, name, namelen);
+        const uniname = decoder.decode(str);
+
+        this.uniformlocs.push(this.gl.getUniformLocation(this.programs[program], uniname));
+        return this.uniformlocs.length - 1;
+    },
+    getVertexAttribOffset(index, pname) { return this.gl.getVertexAttribOffset(index, pname); },
+    hint(target, mode) { this.gl.hint(target, mode); },
+    isEnabled(cap) { return this.gl.isEnabled(cap); },
+    invalidateFramebuffer(target, attachdata, attachlen) {
+        const attachments = new Int32Array(WASM_MEMORY.buffer, attachdata, attachlen);
+        this.gl.invalidateFramebuffer(target, attacements);
+    },
+    invalidateSubFramebuffer(target, attachdata, attachlen, x, y, width, height) {
+        const attachments = new Int32Array(WASM_MEMORY.buffer, attachdata, attachlen);
+        this.gl.invalidateFramebuffer(target, attacements, x, y, width, height);
+    },
+    lineWidth(width) { this.gl.lineWidth(width); },
+    linkProgram(program) { this.gl.linkProgram(this.programs[program]); },
+    pixelStorei(pname, param) { this.gl.pixelStorei(pname, param); },
+    polygonOffset(factor, units) { this.gl.polygonOffset(factor, units); },
+    printProgramInfoLog(program) { console.log(this.gl.getProgramInfoLog(this.programs[program])); },
+    printShaderInfoLog(shader) { console.log(this.gl.getShaderInfoLog(this.shaders[shader])); },
+    readPixels(x, y, width, height, format, type, pixels, pixelslen) {
+        const pixeldata = new Uint8Array(WASM_MEMORY.buffer, pixels, pixelslen);
+        this.gl.readPixels(x, y, width, height, format, type, pixeldata);
+    },
+    readBuffer(src) { this.gl.readBuffer(src); },
+    renderbufferStorageMultisample(target, samples, internalforamt, width, height) {
+        this.gl.renderbufferStorageMultisample(target, samples, internalforamt, width, height);
+    },
+    sampleCoverage(value, invert) { this.gl.sampleCoverage(value, invert); },
+    scissor(x, y, width, height) { this.gl.scissor(x, y, width, height); },
+    shaderSource(shader, source, sourcelen) {
+        const decoder = new TextDecoder();
+        const str = new Int8Array(WASM_MEMORY.buffer, source, sourcelen);
+        const sourcedata = decoder.decode(str);
+
+        this.gl.shaderSource(this.shaders[shader], sourcedata);
+    },
+    stencilFunc(func, ref, mask) { this.gl.stencilFunc(func, ref, mask); },
+    stencilFuncSeparate(face, func, ref, mask) { this.gl.stencilFuncSeparate(face, func, ref, mask); },
+    stencilMask(mask) { this.gl.stencilMask(mask); },
+    stencilMaskSeparate(face, mask) { this.gl.stencilMaskSeparate(face, mask); },
+    stencilOp(fail, zfail, mask) { this.gl.stencilOp(fail, zfail, mask); },
+    stencilOpSeparate(face, fail, zfail, zpass) { this.gl.stencilOpSeparate(face, fail, zfail, zpass); },
+    texImage2D(target, level, internalforamt, width, height, border, format, type, pixels, pixelslen) {
+        const data = new DataView(WASM_MEMORY.buffer, pixels, pixelslen);
+        this.gl.texImage2D(target, level, internalforamt, width, height, border, format, type, data);
+    },
+    texParameterf(target, pname, param) { this.gl.texParameterf(target, pname, param); },
+    texParameteri(target, pname, param) { this.gl.texParameteri(target, pname, param); },
+    texSubImage2D(target, level, xoff, yoff, width, height, format, type, pixels, pixelslen) {
+        const data = new Uint8Array(WASM_MEMORY.buffer, pixels, pixelslen);
+        this.gl.texSubImage2D(target, level, xoff, yoff, width, height, format, type, data);
+    },
+    uniform1f(loc, x) { this.gl.uniform1f(this.uniformlocs[loc], x); },
+    uniform1i(loc, x) { this.gl.uniform1i(this.uniformlocs[loc], x); },
+    uniform2f(loc, x, y) { this.gl.uniform2f(this.uniformlocs[loc], x, y); },
+    uniform2i(loc, x, y) { this.gl.uniform2i(this.uniformlocs[loc], x, y); },
+    uniform3f(loc, x, y, z) { this.gl.uniform3f(this.uniformlocs[loc], x, y, z); },
+    uniform3i(loc, x, y, z) { this.gl.uniform3i(this.uniformlocs[loc], x, y, z); },
+    uniform4f(loc, x, y, z, w) { this.gl.uniform4f(this.uniformlocs[loc], x, y, z, w); },
+    uniform4i(loc, x, y, z, w) { this.gl.uniform4i(this.uniformlocs[loc], x, y, z, w); },
+    uniformMatrix2(loc, transpose, valueptr) {
+        const data = new Float32Array(WASM_MEMORY.buffer, valueptr, 4);
+        this.gl.uniformMatrix2fv(this.uniformlocs[loc], transpose, data);
+    },
+    uniformMatrix3(loc, transpose, valueptr) {
+        const data = new Float32Array(WASM_MEMORY.buffer, valueptr, 9);
+        this.gl.uniformMatrix3fv(this.uniformlocs[loc], transpose, data);
+    },
+    uniformMatrix4(loc, transpose, valueptr) {
+        const data = new Float32Array(WASM_MEMORY.buffer, valueptr, 16);
+        this.gl.uniformMatrix4fv(this.uniformlocs[loc], transpose, data);
+    },
+    useProgram(program) { this.gl.useProgram(this.programs[program]); },
+    validateProgram(program) { this.gl.validateProgram(this.program[program]); },
+    vertexAttrib1f(idx, x) { this.gl.vertexAttrib1f(idx, x); },
+    vertexAttrib2f(idx, x, y) { this.gl.vertexAttrib2f(idx, x, y); },
+    vertexAttrib3f(idx, x, y, z) { this.gl.vertexAttrib3f(idx, x, y, z); },
+    vertexAttrib4f(idx, x, y, z, w) { this.gl.vertexAttrib4f(idx, x, y, z, w); },
+    vertexAttribPointer(idx, size, type, normalized, stride, offset) { this.gl.vertexAttribPointer(idx, size, type, normalized, stride, offset); },
+    vertexAttribDivisor(idx, divisor) { this.gl.vertexAttribDivisor(idx, divisor); },
+    viewport(x, y, width, height) { this.gl.viewport(x, y, width, height); },
+
+};
diff --git a/src/events.onyx b/src/events.onyx
new file mode 100644 (file)
index 0000000..84fa804
--- /dev/null
@@ -0,0 +1,101 @@
+package event
+
+use package core { print }
+
+MAX_EVENTS :: 16
+
+// NOTE: These need to match exactly what is in the corresponding javascript
+DomEventKind :: enum {
+    None      :: 0x00;
+
+    MouseDown :: 0x01;
+    MouseUp   :: 0x02;
+    MouseMove :: 0x03;
+
+    KeyDown   :: 0x04;
+    KeyUp     :: 0x05;
+
+    Resize    :: 0x06;
+}
+
+DomEvent :: struct {
+    kind : DomEventKind;
+    timestamp : u32;
+}
+
+KeyboardEvent :: struct {
+    use event : DomEvent;
+
+    keycode : u32;
+}
+
+MouseButton :: enum {
+    Left :: 0x00;
+    Middle :: 0x01;
+    Right :: 0x02;
+
+    WheelUp :: 0x03;
+    WheelDown :: 0x04;
+}
+
+MouseEvent :: struct {
+    use event : DomEvent;
+
+    pos_x  : u32;
+    pos_y  : u32;
+    button : MouseButton;
+}
+
+ResizeEvent :: struct {
+    use event : DomEvent;
+
+    width  : u32;
+    height : u32;
+}
+
+Event :: struct #union {
+    use dom : DomEvent;
+
+    keyboard : KeyboardEvent;
+    mouse    : MouseEvent;
+    resize   : ResizeEvent;
+}
+
+clear_event :: proc (ev: ^Event) {
+    dev := cast(^DomEvent) ev;
+    dev.kind = DomEventKind.None;
+    dev.timestamp = 0;
+}
+
+init :: proc {
+    event_storage.event_count = 0;
+    event_storage.max_events = MAX_EVENTS;
+
+    for ^ev: event_storage.event_buffer do clear_event(ev);
+
+    event_setup(^event_storage, sizeof Event);
+}
+
+poll :: proc (ev: ^Event) -> bool {
+    if event_storage.event_count == 0 do return false;
+
+    *ev = event_storage.event_buffer[0];
+    for i: 0 .. MAX_EVENTS - 2 {
+        event_storage.event_buffer[i] = event_storage.event_buffer[i + 1];
+    }
+
+    event_storage.event_count -= 1;
+
+    return true;
+}
+
+/* Private members */
+
+#private EventStorage :: struct {
+    event_count  : u32;
+    max_events   : u32;
+    event_buffer : [MAX_EVENTS] Event;
+}
+
+#private event_storage : EventStorage;
+#private event_setup :: proc (event_storage: ^EventStorage, event_size: u32) #foreign "event" "setup" ---
index d2c44fa3103ab9533b87b54a21d47aac218bdba5..37940e56e23ce0f8e7108b3c8192d8139e012d8a 100644 (file)
@@ -20,16 +20,17 @@ QuadRenderer :: struct {
     quadBuffer   : gl.GLBuffer;
 
     program : gl.GLProgram;
+
+    is_data_dirty : bool = false;
 }
 
 Quad :: struct {
-    x : f32;
-    y : f32;
-    w : f32;
-    h : f32;
-    r : f32;
-    g : f32;
-    b : f32;
+    use pos : Vec2;
+    w : f32 = 0.0f;
+    h : f32 = 0.0f;
+    r : f32 = 0.0f;
+    g : f32 = 0.0f;
+    b : f32 = 0.0f;
 }
 
 quad_renderer_init :: proc (use qr: ^QuadRenderer, initial_quads := 10) {
@@ -56,16 +57,15 @@ quad_renderer_init :: proc (use qr: ^QuadRenderer, initial_quads := 10) {
 
     array_init(^quad_data, initial_quads);
 
-    for i: 0, initial_quads {
-        array_push(^quad_data, Quad.{
-            x = cast(f32) random_between(0, 1000) / 1000.0f,
-            y = cast(f32) random_between(0, 1000) / 1000.0f,
-            w = 0.1f,
-            h = 0.1f,
-            r = 1.0f,
-            g = 0.0f,
-            b = 0.0f,
-        });
+    default_quad : Quad;
+    default_quad.pos = Vec2.{ 0.0f, 0.0f };
+    default_quad.w = 0.0f;
+    default_quad.h = 0.0f;
+    default_quad.r = 0.0f;
+    default_quad.g = 0.0f;
+    default_quad.b = 0.0f;
+    for i: 0 .. initial_quads {
+        array_push(^quad_data, default_quad);
     }
 
     quadBuffer = gl.createBuffer();
@@ -131,13 +131,18 @@ quad_renderer_draw :: proc (use qr: ^QuadRenderer) {
 
 quad_update_at_index :: proc (use qr: ^QuadRenderer, idx: i32, quad: Quad) {
     quad_data[idx] = quad;
+    is_data_dirty = true;
 }
 
 quad_rebuffer_data :: proc (use qr: ^QuadRenderer) {
+    if !is_data_dirty do return;
+
     gl.bindBuffer(gl.ARRAY_BUFFER, quadBuffer);
     gl.bufferSubData(gl.ARRAY_BUFFER, 0, Buffer.{
         count = quad_data.count * sizeof Quad,
         data = cast(^void) quad_data.data,
     });
     gl.bindBuffer(gl.ARRAY_BUFFER, -1);
+
+    is_data_dirty = false;
 }
index e2573abcbb12b180d48286c2ba1a166cdf28a146..fda6efa16c61a0fc0fa23524451054a84038a428 100644 (file)
@@ -6,33 +6,88 @@ package main
 #include_folder "src/"
 #include_file "utils/gl"
 #include_file "gfx/quad_renderer"
+#include_file "events"
 
 use package core
 use package gfx
 use package gl as gl
+use package event as event
+
+NUM_QUADS :: 1000
 
 GameState :: struct {
-    dummy : i32;
     quad_renderer : QuadRenderer;
 }
 
+poll_events :: proc (use gs: ^GameState) {
+    ev : event.Event;
+    while event.poll(^ev) {
+        switch ev.kind {
+            case event.DomEventKind.KeyDown {
+                print("Key pressed: ");
+                print(ev.keyboard.keycode, 16);
+                print("\n");
+            }
+
+            case event.DomEventKind.KeyUp {
+                print("Key released: ");
+                print(ev.keyboard.keycode, 16);
+                print("\n");
+            }
+
+            case event.DomEventKind.MouseDown,
+                 event.DomEventKind.MouseUp {
+                print("Mouse event: (");
+                print(ev.mouse.pos_x);
+                print(", ");
+                print(ev.mouse.pos_y);
+                print(")    button: ");
+                print(cast(u32) ev.mouse.button);
+                print("\n");
+            }
+
+            case event.DomEventKind.MouseMove ---
+
+            case event.DomEventKind.Resize {
+                print("New window size: ");
+                print(ev.resize.width);
+                print("x");
+                print(ev.resize.height);
+                print("\n");
+            }
+
+            case #default {
+                print("Unknown event kind: ");
+                print(cast(u32) ev.kind);
+                print("\n");
+            }
+        }
+    }
+}
+
 update :: proc (use gs: ^GameState) {
-    for i: 0, 10000 {
+    poll_events(gs);
+
+    for i: 0 .. NUM_QUADS {
+        t := random_float();
+        d := random_float(0.8f, 1.0f);
+
         quad_update_at_index(^quad_renderer, i, Quad.{
-            x = cast(f32) random_between(0, 100) / 100.0f,
-            y = cast(f32) random_between(0, 100) / 100.0f,
-            w = cast(f32) random_between(1, 10)  / 1000.0f,
-            h = cast(f32) random_between(1, 10)  / 1000.0f,
-            r = cast(f32) random_between(0, 255) / 255.0f,
-            g = cast(f32) random_between(0, 255) / 255.0f,
-            b = cast(f32) random_between(0, 255) / 255.0f,
-            // r = 0.0f, g = 0.0f, b = 1.0f
+            x = d * cos(t * 2.0f * PI) / 2.2f + 0.5f,
+            y = d * sin(t * 2.0f * PI) / 2.2f + 0.5f,
+
+            w = random_float(0.006f, 0.01f),
+            h = random_float(0.006f, 0.01f),
+
+            r = random_float(),
+            g = random_float(0.6f, 1.0f),
+            b = random_float(0.6f, 1.0f),
         });
     }
 }
 
 draw :: proc (use gs: ^GameState) {
-    gl.clearColor(1.0f, 1.0f, 1.0f, 1.0f);
+    gl.clearColor(0.1f, 0.1f, 0.1f, 1.0f);
     gl.clear(gl.COLOR_BUFFER_BIT);
 
     quad_rebuffer_data(^quad_renderer);
@@ -40,16 +95,12 @@ draw :: proc (use gs: ^GameState) {
 }
 
 // This procedure is called asynchronously from JS.
-// It provides us with the pointer game it in main.
+// It provides us with the pointer we gave it in main.
 new_frame_callback :: proc (gs: ^GameState) #export {
     update(gs);
     draw(gs);
 }
 
-setup_drawing :: proc (use state: ^GameState) {
-    quad_renderer_init(^quad_renderer, 10000);
-}
-
 main :: proc (args: [] cstring) {
     print("Setting up WebGL2 canvas...\n");
 
@@ -58,8 +109,14 @@ main :: proc (args: [] cstring) {
         return;
     }
 
+    gl.enable(gl.CULL_FACE);
+    gl.cullFace(gl.BACK);
+
     gs := cast(^GameState) calloc(sizeof GameState);
-    setup_drawing(gs);
+
+    quad_renderer_init(^gs.quad_renderer, NUM_QUADS);
+
+    event.init();
 
     game_launch(gs);
 }
diff --git a/tags b/tags
new file mode 100644 (file)
index 0000000..a2e928c
--- /dev/null
+++ b/tags
@@ -0,0 +1,894 @@
+!_TAG_FILE_FORMAT      2
+!_TAG_FILE_SORTED      1
+!_TAG_OUTPUT_FILESEP   slash
+!_TAG_OUTPUT_MODE      u-ctags
+!_TAG_PROGRAM_AUTHOR   Onyx Compiler
+!_TAG_PROGRAM_NAME     Onyx Compiler
+!_TAG_PROGRAM_URL      https://github.com/brendanfh/onyx
+!_TAG_PROGRAM_VERSION  0.0.1
+ACTIVE_ATTRIBUTES      /usr/share/onyx/core/js/webgl.onyx      /^ACTIVE_ATTRIBUTES                :: 0x8B89$/
+ACTIVE_TEXTURE /usr/share/onyx/core/js/webgl.onyx      /^ACTIVE_TEXTURE                 :: 0x84E0$/
+ACTIVE_UNIFORMS        /usr/share/onyx/core/js/webgl.onyx      /^ACTIVE_UNIFORMS                  :: 0x8B86$/
+ACTIVE_UNIFORM_BLOCKS  /usr/share/onyx/core/js/webgl.onyx      /^ACTIVE_UNIFORM_BLOCKS                         :: 0x8A36$/
+ALIASED_LINE_WIDTH_RANGE       /usr/share/onyx/core/js/webgl.onyx      /^ALIASED_LINE_WIDTH_RANGE       :: 0x846E$/
+ALIASED_POINT_SIZE_RANGE       /usr/share/onyx/core/js/webgl.onyx      /^ALIASED_POINT_SIZE_RANGE       :: 0x846D$/
+ALPHA  /usr/share/onyx/core/js/webgl.onyx      /^ALPHA                          :: 0x1906$/
+ALPHA_BITS     /usr/share/onyx/core/js/webgl.onyx      /^ALPHA_BITS                     :: 0x0D55$/
+ALREADY_SIGNALED       /usr/share/onyx/core/js/webgl.onyx      /^ALREADY_SIGNALED                              :: 0x911A$/
+ALWAYS /usr/share/onyx/core/js/webgl.onyx      /^ALWAYS                         :: 0x0207$/
+ANY_SAMPLES_PASSED     /usr/share/onyx/core/js/webgl.onyx      /^ANY_SAMPLES_PASSED                            :: 0x8C2F$/
+ANY_SAMPLES_PASSED_CONSERVATIVE        /usr/share/onyx/core/js/webgl.onyx      /^ANY_SAMPLES_PASSED_CONSERVATIVE               :: 0x8D6A$/
+ARRAY_BUFFER   /usr/share/onyx/core/js/webgl.onyx      /^ARRAY_BUFFER                   :: 0x8892$/
+ARRAY_BUFFER_BINDING   /usr/share/onyx/core/js/webgl.onyx      /^ARRAY_BUFFER_BINDING           :: 0x8894$/
+ATTACHED_SHADERS       /usr/share/onyx/core/js/webgl.onyx      /^ATTACHED_SHADERS                 :: 0x8B85$/
+AllocAction    /usr/share/onyx/core/builtin.onyx       /^AllocAction :: enum {$/
+Allocator      /usr/share/onyx/core/builtin.onyx       /^Allocator :: struct {$/
+BACK   /usr/share/onyx/core/js/webgl.onyx      /^BACK                           :: 0x0405$/
+BLEND  /usr/share/onyx/core/js/webgl.onyx      /^BLEND                          :: 0x0BE2$/
+BLEND_COLOR    /usr/share/onyx/core/js/webgl.onyx      /^BLEND_COLOR                    :: 0x8005$/
+BLEND_DST_ALPHA        /usr/share/onyx/core/js/webgl.onyx      /^BLEND_DST_ALPHA                :: 0x80CA$/
+BLEND_DST_RGB  /usr/share/onyx/core/js/webgl.onyx      /^BLEND_DST_RGB                  :: 0x80C8$/
+BLEND_EQUATION /usr/share/onyx/core/js/webgl.onyx      /^BLEND_EQUATION                 :: 0x8009$/
+BLEND_EQUATION_ALPHA   /usr/share/onyx/core/js/webgl.onyx      /^BLEND_EQUATION_ALPHA           :: 0x883D$/
+BLEND_EQUATION_RGB     /usr/share/onyx/core/js/webgl.onyx      /^BLEND_EQUATION_RGB             :: 0x8009   // same as BLEND_EQUATION$/
+BLEND_SRC_ALPHA        /usr/share/onyx/core/js/webgl.onyx      /^BLEND_SRC_ALPHA                :: 0x80CB$/
+BLEND_SRC_RGB  /usr/share/onyx/core/js/webgl.onyx      /^BLEND_SRC_RGB                  :: 0x80C9$/
+BLUE_BITS      /usr/share/onyx/core/js/webgl.onyx      /^BLUE_BITS                      :: 0x0D54$/
+BOOL   /usr/share/onyx/core/js/webgl.onyx      /^BOOL                           :: 0x8B56$/
+BOOL_VEC2      /usr/share/onyx/core/js/webgl.onyx      /^BOOL_VEC2                      :: 0x8B57$/
+BOOL_VEC3      /usr/share/onyx/core/js/webgl.onyx      /^BOOL_VEC3                      :: 0x8B58$/
+BOOL_VEC4      /usr/share/onyx/core/js/webgl.onyx      /^BOOL_VEC4                      :: 0x8B59$/
+BROWSER_DEFAULT_WEBGL  /usr/share/onyx/core/js/webgl.onyx      /^BROWSER_DEFAULT_WEBGL          :: 0x9244$/
+BUFFER_SIZE    /usr/share/onyx/core/js/webgl.onyx      /^BUFFER_SIZE                    :: 0x8764$/
+BUFFER_USAGE   /usr/share/onyx/core/js/webgl.onyx      /^BUFFER_USAGE                   :: 0x8765$/
+BYTE   /usr/share/onyx/core/js/webgl.onyx      /^BYTE                           :: 0x1400$/
+Buffer /usr/share/onyx/core/builtin.onyx       /^Buffer :: #type []void;$/
+CCW    /usr/share/onyx/core/js/webgl.onyx      /^CCW                            :: 0x0901$/
+CLAMP_TO_EDGE  /usr/share/onyx/core/js/webgl.onyx      /^CLAMP_TO_EDGE                  :: 0x812F$/
+COLOR  /usr/share/onyx/core/js/webgl.onyx      /^COLOR                                         :: 0x1800$/
+COLOR_ATTACHMENT0      /usr/share/onyx/core/js/webgl.onyx      /^COLOR_ATTACHMENT0              :: 0x8CE0$/
+COLOR_ATTACHMENT1      /usr/share/onyx/core/js/webgl.onyx      /^COLOR_ATTACHMENT1                             :: 0x8CE1$/
+COLOR_ATTACHMENT10     /usr/share/onyx/core/js/webgl.onyx      /^COLOR_ATTACHMENT10                            :: 0x8CEA$/
+COLOR_ATTACHMENT11     /usr/share/onyx/core/js/webgl.onyx      /^COLOR_ATTACHMENT11                            :: 0x8CEB$/
+COLOR_ATTACHMENT12     /usr/share/onyx/core/js/webgl.onyx      /^COLOR_ATTACHMENT12                            :: 0x8CEC$/
+COLOR_ATTACHMENT13     /usr/share/onyx/core/js/webgl.onyx      /^COLOR_ATTACHMENT13                            :: 0x8CED$/
+COLOR_ATTACHMENT14     /usr/share/onyx/core/js/webgl.onyx      /^COLOR_ATTACHMENT14                            :: 0x8CEE$/
+COLOR_ATTACHMENT15     /usr/share/onyx/core/js/webgl.onyx      /^COLOR_ATTACHMENT15                            :: 0x8CEF$/
+COLOR_ATTACHMENT2      /usr/share/onyx/core/js/webgl.onyx      /^COLOR_ATTACHMENT2                             :: 0x8CE2$/
+COLOR_ATTACHMENT3      /usr/share/onyx/core/js/webgl.onyx      /^COLOR_ATTACHMENT3                             :: 0x8CE3$/
+COLOR_ATTACHMENT4      /usr/share/onyx/core/js/webgl.onyx      /^COLOR_ATTACHMENT4                             :: 0x8CE4$/
+COLOR_ATTACHMENT5      /usr/share/onyx/core/js/webgl.onyx      /^COLOR_ATTACHMENT5                             :: 0x8CE5$/
+COLOR_ATTACHMENT6      /usr/share/onyx/core/js/webgl.onyx      /^COLOR_ATTACHMENT6                             :: 0x8CE6$/
+COLOR_ATTACHMENT7      /usr/share/onyx/core/js/webgl.onyx      /^COLOR_ATTACHMENT7                             :: 0x8CE7$/
+COLOR_ATTACHMENT8      /usr/share/onyx/core/js/webgl.onyx      /^COLOR_ATTACHMENT8                             :: 0x8CE8$/
+COLOR_ATTACHMENT9      /usr/share/onyx/core/js/webgl.onyx      /^COLOR_ATTACHMENT9                             :: 0x8CE9$/
+COLOR_BUFFER_BIT       /usr/share/onyx/core/js/webgl.onyx      /^COLOR_BUFFER_BIT               :: 0x00004000$/
+COLOR_CLEAR_VALUE      /usr/share/onyx/core/js/webgl.onyx      /^COLOR_CLEAR_VALUE              :: 0x0C22$/
+COLOR_WRITEMASK        /usr/share/onyx/core/js/webgl.onyx      /^COLOR_WRITEMASK                :: 0x0C23$/
+COMPARE_REF_TO_TEXTURE /usr/share/onyx/core/js/webgl.onyx      /^COMPARE_REF_TO_TEXTURE                        :: 0x884E$/
+COMPILE_STATUS /usr/share/onyx/core/js/webgl.onyx      /^COMPILE_STATUS                 :: 0x8B81$/
+COMPRESSED_TEXTURE_FORMATS     /usr/share/onyx/core/js/webgl.onyx      /^COMPRESSED_TEXTURE_FORMATS     :: 0x86A3$/
+CONDITION_SATISFIED    /usr/share/onyx/core/js/webgl.onyx      /^CONDITION_SATISFIED                           :: 0x911C$/
+CONSTANT_ALPHA /usr/share/onyx/core/js/webgl.onyx      /^CONSTANT_ALPHA                 :: 0x8003$/
+CONSTANT_COLOR /usr/share/onyx/core/js/webgl.onyx      /^CONSTANT_COLOR                 :: 0x8001$/
+CONTEXT_LOST_WEBGL     /usr/share/onyx/core/js/webgl.onyx      /^CONTEXT_LOST_WEBGL             :: 0x9242$/
+COPY_READ_BUFFER       /usr/share/onyx/core/js/webgl.onyx      /^COPY_READ_BUFFER                              :: 0x8F36$/
+COPY_READ_BUFFER_BINDING       /usr/share/onyx/core/js/webgl.onyx      /^COPY_READ_BUFFER_BINDING                      :: 0x8F36$/
+COPY_WRITE_BUFFER      /usr/share/onyx/core/js/webgl.onyx      /^COPY_WRITE_BUFFER                             :: 0x8F37$/
+COPY_WRITE_BUFFER_BINDING      /usr/share/onyx/core/js/webgl.onyx      /^COPY_WRITE_BUFFER_BINDING                     :: 0x8F37$/
+CULL_FACE      /usr/share/onyx/core/js/webgl.onyx      /^CULL_FACE                      :: 0x0B44$/
+CULL_FACE_MODE /usr/share/onyx/core/js/webgl.onyx      /^CULL_FACE_MODE                 :: 0x0B45$/
+CURRENT_PROGRAM        /usr/share/onyx/core/js/webgl.onyx      /^CURRENT_PROGRAM                  :: 0x8B8D$/
+CURRENT_QUERY  /usr/share/onyx/core/js/webgl.onyx      /^CURRENT_QUERY                                 :: 0x8865$/
+CURRENT_VERTEX_ATTRIB  /usr/share/onyx/core/js/webgl.onyx      /^CURRENT_VERTEX_ATTRIB          :: 0x8626$/
+CW     /usr/share/onyx/core/js/webgl.onyx      /^CW                             :: 0x0900$/
+DECR   /usr/share/onyx/core/js/webgl.onyx      /^DECR                           :: 0x1E03$/
+DECR_WRAP      /usr/share/onyx/core/js/webgl.onyx      /^DECR_WRAP                      :: 0x8508$/
+DEFAULT_ALLOCATION_ALIGNMENT   /usr/share/onyx/core/builtin.onyx       /^DEFAULT_ALLOCATION_ALIGNMENT :: 16$/
+DELETE_STATUS  /usr/share/onyx/core/js/webgl.onyx      /^DELETE_STATUS                    :: 0x8B80$/
+DEPTH  /usr/share/onyx/core/js/webgl.onyx      /^DEPTH                                         :: 0x1801$/
+DEPTH24_STENCIL8       /usr/share/onyx/core/js/webgl.onyx      /^DEPTH24_STENCIL8                              :: 0x88F0$/
+DEPTH32F_STENCIL8      /usr/share/onyx/core/js/webgl.onyx      /^DEPTH32F_STENCIL8                             :: 0x8CAD$/
+DEPTH_ATTACHMENT       /usr/share/onyx/core/js/webgl.onyx      /^DEPTH_ATTACHMENT               :: 0x8D00$/
+DEPTH_BITS     /usr/share/onyx/core/js/webgl.onyx      /^DEPTH_BITS                     :: 0x0D56$/
+DEPTH_BUFFER_BIT       /usr/share/onyx/core/js/webgl.onyx      /^DEPTH_BUFFER_BIT               :: 0x00000100$/
+DEPTH_CLEAR_VALUE      /usr/share/onyx/core/js/webgl.onyx      /^DEPTH_CLEAR_VALUE              :: 0x0B73$/
+DEPTH_COMPONENT        /usr/share/onyx/core/js/webgl.onyx      /^DEPTH_COMPONENT                :: 0x1902$/
+DEPTH_COMPONENT16      /usr/share/onyx/core/js/webgl.onyx      /^DEPTH_COMPONENT16              :: 0x81A5$/
+DEPTH_COMPONENT24      /usr/share/onyx/core/js/webgl.onyx      /^DEPTH_COMPONENT24                             :: 0x81A6$/
+DEPTH_COMPONENT32F     /usr/share/onyx/core/js/webgl.onyx      /^DEPTH_COMPONENT32F                            :: 0x8CAC$/
+DEPTH_FUNC     /usr/share/onyx/core/js/webgl.onyx      /^DEPTH_FUNC                     :: 0x0B74$/
+DEPTH_RANGE    /usr/share/onyx/core/js/webgl.onyx      /^DEPTH_RANGE                    :: 0x0B70$/
+DEPTH_STENCIL  /usr/share/onyx/core/js/webgl.onyx      /^DEPTH_STENCIL                  :: 0x84F9$/
+DEPTH_STENCIL_ATTACHMENT       /usr/share/onyx/core/js/webgl.onyx      /^DEPTH_STENCIL_ATTACHMENT       :: 0x821A$/
+DEPTH_TEST     /usr/share/onyx/core/js/webgl.onyx      /^DEPTH_TEST                     :: 0x0B71$/
+DEPTH_WRITEMASK        /usr/share/onyx/core/js/webgl.onyx      /^DEPTH_WRITEMASK                :: 0x0B72$/
+DITHER /usr/share/onyx/core/js/webgl.onyx      /^DITHER                         :: 0x0BD0$/
+DONT_CARE      /usr/share/onyx/core/js/webgl.onyx      /^DONT_CARE                      :: 0x1100$/
+DRAW_BUFFER0   /usr/share/onyx/core/js/webgl.onyx      /^DRAW_BUFFER0                                  :: 0x8825$/
+DRAW_BUFFER1   /usr/share/onyx/core/js/webgl.onyx      /^DRAW_BUFFER1                                  :: 0x8826$/
+DRAW_BUFFER10  /usr/share/onyx/core/js/webgl.onyx      /^DRAW_BUFFER10                                 :: 0x882F$/
+DRAW_BUFFER11  /usr/share/onyx/core/js/webgl.onyx      /^DRAW_BUFFER11                                 :: 0x8830$/
+DRAW_BUFFER12  /usr/share/onyx/core/js/webgl.onyx      /^DRAW_BUFFER12                                 :: 0x8831$/
+DRAW_BUFFER13  /usr/share/onyx/core/js/webgl.onyx      /^DRAW_BUFFER13                                 :: 0x8832$/
+DRAW_BUFFER14  /usr/share/onyx/core/js/webgl.onyx      /^DRAW_BUFFER14                                 :: 0x8833$/
+DRAW_BUFFER15  /usr/share/onyx/core/js/webgl.onyx      /^DRAW_BUFFER15                                 :: 0x8834$/
+DRAW_BUFFER2   /usr/share/onyx/core/js/webgl.onyx      /^DRAW_BUFFER2                                  :: 0x8827$/
+DRAW_BUFFER3   /usr/share/onyx/core/js/webgl.onyx      /^DRAW_BUFFER3                                  :: 0x8828$/
+DRAW_BUFFER4   /usr/share/onyx/core/js/webgl.onyx      /^DRAW_BUFFER4                                  :: 0x8829$/
+DRAW_BUFFER5   /usr/share/onyx/core/js/webgl.onyx      /^DRAW_BUFFER5                                  :: 0x882A$/
+DRAW_BUFFER6   /usr/share/onyx/core/js/webgl.onyx      /^DRAW_BUFFER6                                  :: 0x882B$/
+DRAW_BUFFER7   /usr/share/onyx/core/js/webgl.onyx      /^DRAW_BUFFER7                                  :: 0x882C$/
+DRAW_BUFFER8   /usr/share/onyx/core/js/webgl.onyx      /^DRAW_BUFFER8                                  :: 0x882D$/
+DRAW_BUFFER9   /usr/share/onyx/core/js/webgl.onyx      /^DRAW_BUFFER9                                  :: 0x882E$/
+DRAW_FRAMEBUFFER       /usr/share/onyx/core/js/webgl.onyx      /^DRAW_FRAMEBUFFER                              :: 0x8CA9$/
+DRAW_FRAMEBUFFER_BINDING       /usr/share/onyx/core/js/webgl.onyx      /^DRAW_FRAMEBUFFER_BINDING                      :: 0x8CA6$/
+DST_ALPHA      /usr/share/onyx/core/js/webgl.onyx      /^DST_ALPHA                      :: 0x0304$/
+DST_COLOR      /usr/share/onyx/core/js/webgl.onyx      /^DST_COLOR                      :: 0x0306$/
+DYNAMIC_COPY   /usr/share/onyx/core/js/webgl.onyx      /^DYNAMIC_COPY                                  :: 0x88EA$/
+DYNAMIC_DRAW   /usr/share/onyx/core/js/webgl.onyx      /^DYNAMIC_DRAW                   :: 0x88E8$/
+DYNAMIC_READ   /usr/share/onyx/core/js/webgl.onyx      /^DYNAMIC_READ                                  :: 0x88E9$/
+DomEvent       src/events.onyx /^DomEvent :: struct {$/
+DomEventKind   src/events.onyx /^DomEventKind :: enum {$/
+ELEMENT_ARRAY_BUFFER   /usr/share/onyx/core/js/webgl.onyx      /^ELEMENT_ARRAY_BUFFER           :: 0x8893$/
+ELEMENT_ARRAY_BUFFER_BINDING   /usr/share/onyx/core/js/webgl.onyx      /^ELEMENT_ARRAY_BUFFER_BINDING   :: 0x8895$/
+EQUAL  /usr/share/onyx/core/js/webgl.onyx      /^EQUAL                          :: 0x0202$/
+Event  src/events.onyx /^Event :: struct #union {$/
+EventStorage   src/events.onyx /^#private EventStorage :: struct {$/
+FASTEST        /usr/share/onyx/core/js/webgl.onyx      /^FASTEST                        :: 0x1101$/
+FLOAT  /usr/share/onyx/core/js/webgl.onyx      /^FLOAT                          :: 0x1406$/
+FLOAT_32_UNSIGNED_INT_24_8_REV /usr/share/onyx/core/js/webgl.onyx      /^FLOAT_32_UNSIGNED_INT_24_8_REV                :: 0x8DAD$/
+FLOAT_MAT2     /usr/share/onyx/core/js/webgl.onyx      /^FLOAT_MAT2                     :: 0x8B5A$/
+FLOAT_MAT2x3   /usr/share/onyx/core/js/webgl.onyx      /^FLOAT_MAT2x3                                  :: 0x8B65$/
+FLOAT_MAT2x4   /usr/share/onyx/core/js/webgl.onyx      /^FLOAT_MAT2x4                                  :: 0x8B66$/
+FLOAT_MAT3     /usr/share/onyx/core/js/webgl.onyx      /^FLOAT_MAT3                     :: 0x8B5B$/
+FLOAT_MAT3x2   /usr/share/onyx/core/js/webgl.onyx      /^FLOAT_MAT3x2                                  :: 0x8B67$/
+FLOAT_MAT3x4   /usr/share/onyx/core/js/webgl.onyx      /^FLOAT_MAT3x4                                  :: 0x8B68$/
+FLOAT_MAT4     /usr/share/onyx/core/js/webgl.onyx      /^FLOAT_MAT4                     :: 0x8B5C$/
+FLOAT_MAT4x2   /usr/share/onyx/core/js/webgl.onyx      /^FLOAT_MAT4x2                                  :: 0x8B69$/
+FLOAT_MAT4x3   /usr/share/onyx/core/js/webgl.onyx      /^FLOAT_MAT4x3                                  :: 0x8B6A$/
+FLOAT_VEC2     /usr/share/onyx/core/js/webgl.onyx      /^FLOAT_VEC2                     :: 0x8B50$/
+FLOAT_VEC3     /usr/share/onyx/core/js/webgl.onyx      /^FLOAT_VEC3                     :: 0x8B51$/
+FLOAT_VEC4     /usr/share/onyx/core/js/webgl.onyx      /^FLOAT_VEC4                     :: 0x8B52$/
+FRAGMENT_SHADER        /usr/share/onyx/core/js/webgl.onyx      /^FRAGMENT_SHADER                  :: 0x8B30$/
+FRAGMENT_SHADER_DERIVATIVE_HINT        /usr/share/onyx/core/js/webgl.onyx      /^FRAGMENT_SHADER_DERIVATIVE_HINT               :: 0x8B8B$/
+FRAMEBUFFER    /usr/share/onyx/core/js/webgl.onyx      /^FRAMEBUFFER                    :: 0x8D40$/
+FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE      /usr/share/onyx/core/js/webgl.onyx      /^FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE             :: 0x8215$/
+FRAMEBUFFER_ATTACHMENT_BLUE_SIZE       /usr/share/onyx/core/js/webgl.onyx      /^FRAMEBUFFER_ATTACHMENT_BLUE_SIZE              :: 0x8214$/
+FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING  /usr/share/onyx/core/js/webgl.onyx      /^FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING         :: 0x8210$/
+FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE  /usr/share/onyx/core/js/webgl.onyx      /^FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE         :: 0x8211$/
+FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE      /usr/share/onyx/core/js/webgl.onyx      /^FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE             :: 0x8216$/
+FRAMEBUFFER_ATTACHMENT_GREEN_SIZE      /usr/share/onyx/core/js/webgl.onyx      /^FRAMEBUFFER_ATTACHMENT_GREEN_SIZE             :: 0x8213$/
+FRAMEBUFFER_ATTACHMENT_OBJECT_NAME     /usr/share/onyx/core/js/webgl.onyx      /^FRAMEBUFFER_ATTACHMENT_OBJECT_NAME           :: 0x8CD1$/
+FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE     /usr/share/onyx/core/js/webgl.onyx      /^FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE           :: 0x8CD0$/
+FRAMEBUFFER_ATTACHMENT_RED_SIZE        /usr/share/onyx/core/js/webgl.onyx      /^FRAMEBUFFER_ATTACHMENT_RED_SIZE               :: 0x8212$/
+FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE    /usr/share/onyx/core/js/webgl.onyx      /^FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE           :: 0x8217$/
+FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE   /usr/share/onyx/core/js/webgl.onyx      /^FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE :: 0x8CD3$/
+FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER   /usr/share/onyx/core/js/webgl.onyx      /^FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER          :: 0x8CD4$/
+FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL   /usr/share/onyx/core/js/webgl.onyx      /^FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL         :: 0x8CD2$/
+FRAMEBUFFER_BINDING    /usr/share/onyx/core/js/webgl.onyx      /^FRAMEBUFFER_BINDING            :: 0x8CA6$/
+FRAMEBUFFER_COMPLETE   /usr/share/onyx/core/js/webgl.onyx      /^FRAMEBUFFER_COMPLETE                      :: 0x8CD5$/
+FRAMEBUFFER_DEFAULT    /usr/share/onyx/core/js/webgl.onyx      /^FRAMEBUFFER_DEFAULT                           :: 0x8218$/
+FRAMEBUFFER_INCOMPLETE_ATTACHMENT      /usr/share/onyx/core/js/webgl.onyx      /^FRAMEBUFFER_INCOMPLETE_ATTACHMENT         :: 0x8CD6$/
+FRAMEBUFFER_INCOMPLETE_DIMENSIONS      /usr/share/onyx/core/js/webgl.onyx      /^FRAMEBUFFER_INCOMPLETE_DIMENSIONS         :: 0x8CD9$/
+FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT      /usr/share/onyx/core/js/webgl.onyx      /^FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT :: 0x8CD7$/
+FRAMEBUFFER_INCOMPLETE_MULTISAMPLE     /usr/share/onyx/core/js/webgl.onyx      /^FRAMEBUFFER_INCOMPLETE_MULTISAMPLE            :: 0x8D56$/
+FRAMEBUFFER_UNSUPPORTED        /usr/share/onyx/core/js/webgl.onyx      /^FRAMEBUFFER_UNSUPPORTED                   :: 0x8CDD$/
+FRONT  /usr/share/onyx/core/js/webgl.onyx      /^FRONT                          :: 0x0404$/
+FRONT_AND_BACK /usr/share/onyx/core/js/webgl.onyx      /^FRONT_AND_BACK                 :: 0x0408$/
+FRONT_FACE     /usr/share/onyx/core/js/webgl.onyx      /^FRONT_FACE                     :: 0x0B46$/
+FUNC_ADD       /usr/share/onyx/core/js/webgl.onyx      /^FUNC_ADD                       :: 0x8006$/
+FUNC_REVERSE_SUBTRACT  /usr/share/onyx/core/js/webgl.onyx      /^FUNC_REVERSE_SUBTRACT          :: 0x800B$/
+FUNC_SUBTRACT  /usr/share/onyx/core/js/webgl.onyx      /^FUNC_SUBTRACT                  :: 0x800A$/
+GENERATE_MIPMAP_HINT   /usr/share/onyx/core/js/webgl.onyx      /^GENERATE_MIPMAP_HINT            :: 0x8192$/
+GEQUAL /usr/share/onyx/core/js/webgl.onyx      /^GEQUAL                         :: 0x0206$/
+GLActiveInfo   /usr/share/onyx/core/js/webgl.onyx      /^GLActiveInfo :: struct {$/
+GLBuffer       /usr/share/onyx/core/js/webgl.onyx      /^GLBuffer :: #type i32$/
+GLFramebuffer  /usr/share/onyx/core/js/webgl.onyx      /^GLFramebuffer :: #type i32$/
+GLMat2 /usr/share/onyx/core/js/webgl.onyx      /^GLMat2 :: #type [4] GLfloat$/
+GLMat3 /usr/share/onyx/core/js/webgl.onyx      /^GLMat3 :: #type [9] GLfloat$/
+GLMat4 /usr/share/onyx/core/js/webgl.onyx      /^GLMat4 :: #type [16] GLfloat$/
+GLProgram      /usr/share/onyx/core/js/webgl.onyx      /^GLProgram :: #type i32$/
+GLRenderbuffer /usr/share/onyx/core/js/webgl.onyx      /^GLRenderbuffer :: #type i32$/
+GLShader       /usr/share/onyx/core/js/webgl.onyx      /^GLShader  :: #type i32$/
+GLTexture      /usr/share/onyx/core/js/webgl.onyx      /^GLTexture :: #type i32$/
+GLUniformLocation      /usr/share/onyx/core/js/webgl.onyx      /^GLUniformLocation :: #type i32$/
+GLVertexArrayObject    /usr/share/onyx/core/js/webgl.onyx      /^GLVertexArrayObject :: #type i32$/
+GLbitfield     /usr/share/onyx/core/js/webgl.onyx      /^GLbitfield :: #type u32$/
+GLboolean      /usr/share/onyx/core/js/webgl.onyx      /^GLboolean  :: #type bool$/
+GLbyte /usr/share/onyx/core/js/webgl.onyx      /^GLbyte     :: #type i8$/
+GLclampf       /usr/share/onyx/core/js/webgl.onyx      /^GLclampf   :: #type f32$/
+GLenum /usr/share/onyx/core/js/webgl.onyx      /^GLenum     :: #type u32$/
+GLfloat        /usr/share/onyx/core/js/webgl.onyx      /^GLfloat    :: #type f32$/
+GLint  /usr/share/onyx/core/js/webgl.onyx      /^GLint      :: #type i32$/
+GLintptr       /usr/share/onyx/core/js/webgl.onyx      /^GLintptr   :: #type i64$/
+GLshort        /usr/share/onyx/core/js/webgl.onyx      /^GLshort    :: #type i16$/
+GLsizei        /usr/share/onyx/core/js/webgl.onyx      /^GLsizei    :: #type i32$/
+GLsizeiptr     /usr/share/onyx/core/js/webgl.onyx      /^GLsizeiptr :: #type i64$/
+GLubyte        /usr/share/onyx/core/js/webgl.onyx      /^GLubyte    :: #type u8$/
+GLuint /usr/share/onyx/core/js/webgl.onyx      /^GLuint     :: #type u32$/
+GLushort       /usr/share/onyx/core/js/webgl.onyx      /^GLushort   :: #type u16$/
+GREATER        /usr/share/onyx/core/js/webgl.onyx      /^GREATER                        :: 0x0204$/
+GREEN_BITS     /usr/share/onyx/core/js/webgl.onyx      /^GREEN_BITS                     :: 0x0D53$/
+GameState      src/main.onyx   /^GameState :: struct {$/
+HALF_FLOAT     /usr/share/onyx/core/js/webgl.onyx      /^HALF_FLOAT                                    :: 0x140B$/
+HIGH_FLOAT     /usr/share/onyx/core/js/webgl.onyx      /^HIGH_FLOAT                     :: 0x8DF2$/
+HIGH_INT       /usr/share/onyx/core/js/webgl.onyx      /^HIGH_INT                       :: 0x8DF5$/
+IMPLEMENTATION_COLOR_READ_FORMAT       /usr/share/onyx/core/js/webgl.onyx      /^IMPLEMENTATION_COLOR_READ_FORMAT :: 0x8B9B$/
+IMPLEMENTATION_COLOR_READ_TYPE /usr/share/onyx/core/js/webgl.onyx      /^IMPLEMENTATION_COLOR_READ_TYPE   :: 0x8B9A$/
+INCR   /usr/share/onyx/core/js/webgl.onyx      /^INCR                           :: 0x1E02$/
+INCR_WRAP      /usr/share/onyx/core/js/webgl.onyx      /^INCR_WRAP                      :: 0x8507$/
+INT    /usr/share/onyx/core/js/webgl.onyx      /^INT                            :: 0x1404$/
+INTERLEAVED_ATTRIBS    /usr/share/onyx/core/js/webgl.onyx      /^INTERLEAVED_ATTRIBS                           :: 0x8C8C$/
+INT_2_10_10_10_REV     /usr/share/onyx/core/js/webgl.onyx      /^INT_2_10_10_10_REV                            :: 0x8D9F$/
+INT_SAMPLER_2D /usr/share/onyx/core/js/webgl.onyx      /^INT_SAMPLER_2D                                :: 0x8DCA$/
+INT_SAMPLER_2D_ARRAY   /usr/share/onyx/core/js/webgl.onyx      /^INT_SAMPLER_2D_ARRAY                          :: 0x8DCF$/
+INT_SAMPLER_3D /usr/share/onyx/core/js/webgl.onyx      /^INT_SAMPLER_3D                                :: 0x8DCB$/
+INT_SAMPLER_CUBE       /usr/share/onyx/core/js/webgl.onyx      /^INT_SAMPLER_CUBE                              :: 0x8DCC$/
+INT_VEC2       /usr/share/onyx/core/js/webgl.onyx      /^INT_VEC2                       :: 0x8B53$/
+INT_VEC3       /usr/share/onyx/core/js/webgl.onyx      /^INT_VEC3                       :: 0x8B54$/
+INT_VEC4       /usr/share/onyx/core/js/webgl.onyx      /^INT_VEC4                       :: 0x8B55$/
+INVALID_ENUM   /usr/share/onyx/core/js/webgl.onyx      /^INVALID_ENUM                   :: 0x0500$/
+INVALID_FRAMEBUFFER_OPERATION  /usr/share/onyx/core/js/webgl.onyx      /^INVALID_FRAMEBUFFER_OPERATION  :: 0x0506$/
+INVALID_INDEX  /usr/share/onyx/core/js/webgl.onyx      /^INVALID_INDEX                                 :: 0xFFFFFFF$/
+INVALID_OPERATION      /usr/share/onyx/core/js/webgl.onyx      /^INVALID_OPERATION              :: 0x0502$/
+INVALID_VALUE  /usr/share/onyx/core/js/webgl.onyx      /^INVALID_VALUE                  :: 0x0501$/
+INVERT /usr/share/onyx/core/js/webgl.onyx      /^INVERT                         :: 0x150A$/
+KEEP   /usr/share/onyx/core/js/webgl.onyx      /^KEEP                           :: 0x1E00$/
+KeyboardEvent  src/events.onyx /^KeyboardEvent :: struct {$/
+LEQUAL /usr/share/onyx/core/js/webgl.onyx      /^LEQUAL                         :: 0x0203$/
+LESS   /usr/share/onyx/core/js/webgl.onyx      /^LESS                           :: 0x0201$/
+LINEAR /usr/share/onyx/core/js/webgl.onyx      /^LINEAR                         :: 0x2601$/
+LINEAR_MIPMAP_LINEAR   /usr/share/onyx/core/js/webgl.onyx      /^LINEAR_MIPMAP_LINEAR           :: 0x2703$/
+LINEAR_MIPMAP_NEAREST  /usr/share/onyx/core/js/webgl.onyx      /^LINEAR_MIPMAP_NEAREST          :: 0x2701$/
+LINES  /usr/share/onyx/core/js/webgl.onyx      /^LINES                          :: 0x0001$/
+LINE_LOOP      /usr/share/onyx/core/js/webgl.onyx      /^LINE_LOOP                      :: 0x0002$/
+LINE_STRIP     /usr/share/onyx/core/js/webgl.onyx      /^LINE_STRIP                     :: 0x0003$/
+LINE_WIDTH     /usr/share/onyx/core/js/webgl.onyx      /^LINE_WIDTH                     :: 0x0B21$/
+LINK_STATUS    /usr/share/onyx/core/js/webgl.onyx      /^LINK_STATUS                      :: 0x8B82$/
+LOW_FLOAT      /usr/share/onyx/core/js/webgl.onyx      /^LOW_FLOAT                      :: 0x8DF0$/
+LOW_INT        /usr/share/onyx/core/js/webgl.onyx      /^LOW_INT                        :: 0x8DF3$/
+LUMINANCE      /usr/share/onyx/core/js/webgl.onyx      /^LUMINANCE                      :: 0x1909$/
+LUMINANCE_ALPHA        /usr/share/onyx/core/js/webgl.onyx      /^LUMINANCE_ALPHA                :: 0x190A$/
+MAX    /usr/share/onyx/core/js/webgl.onyx      /^MAX                                           :: 0x8008$/
+MAX_3D_TEXTURE_SIZE    /usr/share/onyx/core/js/webgl.onyx      /^MAX_3D_TEXTURE_SIZE                           :: 0x8073$/
+MAX_ARRAY_TEXTURE_LAYERS       /usr/share/onyx/core/js/webgl.onyx      /^MAX_ARRAY_TEXTURE_LAYERS                      :: 0x88FF$/
+MAX_CLIENT_WAIT_TIMEOUT_WEBGL  /usr/share/onyx/core/js/webgl.onyx      /^MAX_CLIENT_WAIT_TIMEOUT_WEBGL  :: 0x9247$/
+MAX_COLOR_ATTACHMENTS  /usr/share/onyx/core/js/webgl.onyx      /^MAX_COLOR_ATTACHMENTS                         :: 0x8CDF$/
+MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS       /usr/share/onyx/core/js/webgl.onyx      /^MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS      :: 0x8A33$/
+MAX_COMBINED_TEXTURE_IMAGE_UNITS       /usr/share/onyx/core/js/webgl.onyx      /^MAX_COMBINED_TEXTURE_IMAGE_UNITS :: 0x8B4D$/
+MAX_COMBINED_UNIFORM_BLOCKS    /usr/share/onyx/core/js/webgl.onyx      /^MAX_COMBINED_UNIFORM_BLOCKS                   :: 0x8A2E$/
+MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS /usr/share/onyx/core/js/webgl.onyx      /^MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS        :: 0x8A31$/
+MAX_CUBE_MAP_TEXTURE_SIZE      /usr/share/onyx/core/js/webgl.onyx      /^MAX_CUBE_MAP_TEXTURE_SIZE      :: 0x851C$/
+MAX_DRAW_BUFFERS       /usr/share/onyx/core/js/webgl.onyx      /^MAX_DRAW_BUFFERS                              :: 0x8824$/
+MAX_ELEMENTS_INDICES   /usr/share/onyx/core/js/webgl.onyx      /^MAX_ELEMENTS_INDICES                          :: 0x80E9$/
+MAX_ELEMENTS_VERTICES  /usr/share/onyx/core/js/webgl.onyx      /^MAX_ELEMENTS_VERTICES                         :: 0x80E8$/
+MAX_ELEMENT_INDEX      /usr/share/onyx/core/js/webgl.onyx      /^MAX_ELEMENT_INDEX                             :: 0x8D6B$/
+MAX_EVENTS     src/events.onyx /^MAX_EVENTS :: 16$/
+MAX_FRAGMENT_INPUT_COMPONENTS  /usr/share/onyx/core/js/webgl.onyx      /^MAX_FRAGMENT_INPUT_COMPONENTS                 :: 0x9125$/
+MAX_FRAGMENT_UNIFORM_BLOCKS    /usr/share/onyx/core/js/webgl.onyx      /^MAX_FRAGMENT_UNIFORM_BLOCKS                   :: 0x8A2D$/
+MAX_FRAGMENT_UNIFORM_COMPONENTS        /usr/share/onyx/core/js/webgl.onyx      /^MAX_FRAGMENT_UNIFORM_COMPONENTS               :: 0x8B49$/
+MAX_FRAGMENT_UNIFORM_VECTORS   /usr/share/onyx/core/js/webgl.onyx      /^MAX_FRAGMENT_UNIFORM_VECTORS     :: 0x8DFD$/
+MAX_PROGRAM_TEXEL_OFFSET       /usr/share/onyx/core/js/webgl.onyx      /^MAX_PROGRAM_TEXEL_OFFSET                      :: 0x8905$/
+MAX_RENDERBUFFER_SIZE  /usr/share/onyx/core/js/webgl.onyx      /^MAX_RENDERBUFFER_SIZE          :: 0x84E8$/
+MAX_SAMPLES    /usr/share/onyx/core/js/webgl.onyx      /^MAX_SAMPLES                                   :: 0x8D57$/
+MAX_SERVER_WAIT_TIMEOUT        /usr/share/onyx/core/js/webgl.onyx      /^MAX_SERVER_WAIT_TIMEOUT                       :: 0x9111$/
+MAX_TEXTURE_IMAGE_UNITS        /usr/share/onyx/core/js/webgl.onyx      /^MAX_TEXTURE_IMAGE_UNITS          :: 0x8872$/
+MAX_TEXTURE_LOD_BIAS   /usr/share/onyx/core/js/webgl.onyx      /^MAX_TEXTURE_LOD_BIAS                          :: 0x84FD$/
+MAX_TEXTURE_SIZE       /usr/share/onyx/core/js/webgl.onyx      /^MAX_TEXTURE_SIZE               :: 0x0D33$/
+MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS  /usr/share/onyx/core/js/webgl.onyx      /^MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS :: 0x8C8A$/
+MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS        /usr/share/onyx/core/js/webgl.onyx      /^MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS       :: 0x8C8B$/
+MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS     /usr/share/onyx/core/js/webgl.onyx      /^MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS    :: 0x8C80$/
+MAX_UNIFORM_BLOCK_SIZE /usr/share/onyx/core/js/webgl.onyx      /^MAX_UNIFORM_BLOCK_SIZE                        :: 0x8A30$/
+MAX_UNIFORM_BUFFER_BINDINGS    /usr/share/onyx/core/js/webgl.onyx      /^MAX_UNIFORM_BUFFER_BINDINGS                   :: 0x8A2F$/
+MAX_VARYING_COMPONENTS /usr/share/onyx/core/js/webgl.onyx      /^MAX_VARYING_COMPONENTS                        :: 0x8B4B$/
+MAX_VARYING_VECTORS    /usr/share/onyx/core/js/webgl.onyx      /^MAX_VARYING_VECTORS              :: 0x8DFC$/
+MAX_VERTEX_ATTRIBS     /usr/share/onyx/core/js/webgl.onyx      /^MAX_VERTEX_ATTRIBS               :: 0x8869$/
+MAX_VERTEX_OUTPUT_COMPONENTS   /usr/share/onyx/core/js/webgl.onyx      /^MAX_VERTEX_OUTPUT_COMPONENTS                  :: 0x9122$/
+MAX_VERTEX_TEXTURE_IMAGE_UNITS /usr/share/onyx/core/js/webgl.onyx      /^MAX_VERTEX_TEXTURE_IMAGE_UNITS   :: 0x8B4C$/
+MAX_VERTEX_UNIFORM_BLOCKS      /usr/share/onyx/core/js/webgl.onyx      /^MAX_VERTEX_UNIFORM_BLOCKS                     :: 0x8A2B$/
+MAX_VERTEX_UNIFORM_COMPONENTS  /usr/share/onyx/core/js/webgl.onyx      /^MAX_VERTEX_UNIFORM_COMPONENTS                 :: 0x8B4A$/
+MAX_VERTEX_UNIFORM_VECTORS     /usr/share/onyx/core/js/webgl.onyx      /^MAX_VERTEX_UNIFORM_VECTORS       :: 0x8DFB$/
+MAX_VIEWPORT_DIMS      /usr/share/onyx/core/js/webgl.onyx      /^MAX_VIEWPORT_DIMS              :: 0x0D3A$/
+MEDIUM_FLOAT   /usr/share/onyx/core/js/webgl.onyx      /^MEDIUM_FLOAT                   :: 0x8DF1$/
+MEDIUM_INT     /usr/share/onyx/core/js/webgl.onyx      /^MEDIUM_INT                     :: 0x8DF4$/
+MIN    /usr/share/onyx/core/js/webgl.onyx      /^MIN                                           :: 0x8007$/
+MIN_PROGRAM_TEXEL_OFFSET       /usr/share/onyx/core/js/webgl.onyx      /^MIN_PROGRAM_TEXEL_OFFSET                      :: 0x8904$/
+MIRRORED_REPEAT        /usr/share/onyx/core/js/webgl.onyx      /^MIRRORED_REPEAT                :: 0x8370$/
+MouseButton    src/events.onyx /^MouseButton :: enum {$/
+MouseEvent     src/events.onyx /^MouseEvent :: struct {$/
+NEAREST        /usr/share/onyx/core/js/webgl.onyx      /^NEAREST                        :: 0x2600$/
+NEAREST_MIPMAP_LINEAR  /usr/share/onyx/core/js/webgl.onyx      /^NEAREST_MIPMAP_LINEAR          :: 0x2702$/
+NEAREST_MIPMAP_NEAREST /usr/share/onyx/core/js/webgl.onyx      /^NEAREST_MIPMAP_NEAREST         :: 0x2700$/
+NEVER  /usr/share/onyx/core/js/webgl.onyx      /^NEVER                          :: 0x0200$/
+NICEST /usr/share/onyx/core/js/webgl.onyx      /^NICEST                         :: 0x1102$/
+NONE   /usr/share/onyx/core/js/webgl.onyx      /^NONE                           :: 0$/
+NOTEQUAL       /usr/share/onyx/core/js/webgl.onyx      /^NOTEQUAL                       :: 0x0205$/
+NO_ERROR       /usr/share/onyx/core/js/webgl.onyx      /^NO_ERROR                       :: 0$/
+NUM_QUADS      src/main.onyx   /^NUM_QUADS :: 1000$/
+OBJECT_TYPE    /usr/share/onyx/core/js/webgl.onyx      /^OBJECT_TYPE                                   :: 0x9112$/
+ONE    /usr/share/onyx/core/js/webgl.onyx      /^ONE                            :: 1$/
+ONE_MINUS_CONSTANT_ALPHA       /usr/share/onyx/core/js/webgl.onyx      /^ONE_MINUS_CONSTANT_ALPHA       :: 0x8004$/
+ONE_MINUS_CONSTANT_COLOR       /usr/share/onyx/core/js/webgl.onyx      /^ONE_MINUS_CONSTANT_COLOR       :: 0x8002$/
+ONE_MINUS_DST_ALPHA    /usr/share/onyx/core/js/webgl.onyx      /^ONE_MINUS_DST_ALPHA            :: 0x0305$/
+ONE_MINUS_DST_COLOR    /usr/share/onyx/core/js/webgl.onyx      /^ONE_MINUS_DST_COLOR            :: 0x0307$/
+ONE_MINUS_SRC_ALPHA    /usr/share/onyx/core/js/webgl.onyx      /^ONE_MINUS_SRC_ALPHA            :: 0x0303$/
+ONE_MINUS_SRC_COLOR    /usr/share/onyx/core/js/webgl.onyx      /^ONE_MINUS_SRC_COLOR            :: 0x0301$/
+OUT_OF_MEMORY  /usr/share/onyx/core/js/webgl.onyx      /^OUT_OF_MEMORY                  :: 0x0505$/
+PACK_ALIGNMENT /usr/share/onyx/core/js/webgl.onyx      /^PACK_ALIGNMENT                 :: 0x0D05$/
+PACK_ROW_LENGTH        /usr/share/onyx/core/js/webgl.onyx      /^PACK_ROW_LENGTH                               :: 0x0D02$/
+PACK_SKIP_PIXELS       /usr/share/onyx/core/js/webgl.onyx      /^PACK_SKIP_PIXELS                              :: 0x0D04$/
+PACK_SKIP_ROWS /usr/share/onyx/core/js/webgl.onyx      /^PACK_SKIP_ROWS                                :: 0x0D03$/
+PI     /usr/share/onyx/core/math.onyx  /^PI  :: 3.14159265f;$/
+PIXEL_PACK_BUFFER      /usr/share/onyx/core/js/webgl.onyx      /^PIXEL_PACK_BUFFER                             :: 0x88EB$/
+PIXEL_PACK_BUFFER_BINDING      /usr/share/onyx/core/js/webgl.onyx      /^PIXEL_PACK_BUFFER_BINDING                     :: 0x88ED$/
+PIXEL_UNPACK_BUFFER    /usr/share/onyx/core/js/webgl.onyx      /^PIXEL_UNPACK_BUFFER                           :: 0x88EC$/
+PIXEL_UNPACK_BUFFER_BINDING    /usr/share/onyx/core/js/webgl.onyx      /^PIXEL_UNPACK_BUFFER_BINDING                   :: 0x88EF$/
+POINTS /usr/share/onyx/core/js/webgl.onyx      /^POINTS                         :: 0x0000$/
+POLYGON_OFFSET_FACTOR  /usr/share/onyx/core/js/webgl.onyx      /^POLYGON_OFFSET_FACTOR          :: 0x8038$/
+POLYGON_OFFSET_FILL    /usr/share/onyx/core/js/webgl.onyx      /^POLYGON_OFFSET_FILL            :: 0x8037$/
+POLYGON_OFFSET_UNITS   /usr/share/onyx/core/js/webgl.onyx      /^POLYGON_OFFSET_UNITS           :: 0x2A00$/
+PtrMap /usr/share/onyx/core/ptrmap.onyx        /^PtrMap :: struct {$/
+PtrMapEntry    /usr/share/onyx/core/ptrmap.onyx        /^PtrMapEntry :: struct {$/
+PtrMapLookupResult     /usr/share/onyx/core/ptrmap.onyx        /^PtrMapLookupResult :: struct {$/
+QUERY_RESULT   /usr/share/onyx/core/js/webgl.onyx      /^QUERY_RESULT                                  :: 0x8866$/
+QUERY_RESULT_AVAILABLE /usr/share/onyx/core/js/webgl.onyx      /^QUERY_RESULT_AVAILABLE                        :: 0x8867$/
+Quad   src/gfx/quad_renderer.onyx      /^Quad :: struct {$/
+QuadRenderer   src/gfx/quad_renderer.onyx      /^QuadRenderer :: struct {$/
+R11F_G11F_B10F /usr/share/onyx/core/js/webgl.onyx      /^R11F_G11F_B10F                                :: 0x8C3A$/
+R16F   /usr/share/onyx/core/js/webgl.onyx      /^R16F                                          :: 0x822D$/
+R16I   /usr/share/onyx/core/js/webgl.onyx      /^R16I                                          :: 0x8233$/
+R16UI  /usr/share/onyx/core/js/webgl.onyx      /^R16UI                                         :: 0x8234$/
+R32F   /usr/share/onyx/core/js/webgl.onyx      /^R32F                                          :: 0x822E$/
+R32I   /usr/share/onyx/core/js/webgl.onyx      /^R32I                                          :: 0x8235$/
+R32UI  /usr/share/onyx/core/js/webgl.onyx      /^R32UI                                         :: 0x8236$/
+R8     /usr/share/onyx/core/js/webgl.onyx      /^R8                                            :: 0x8229$/
+R8I    /usr/share/onyx/core/js/webgl.onyx      /^R8I                                           :: 0x8231$/
+R8UI   /usr/share/onyx/core/js/webgl.onyx      /^R8UI                                          :: 0x8232$/
+R8_SNORM       /usr/share/onyx/core/js/webgl.onyx      /^R8_SNORM                                      :: 0x8F94$/
+RASTERIZER_DISCARD     /usr/share/onyx/core/js/webgl.onyx      /^RASTERIZER_DISCARD                            :: 0x8C89$/
+READ_BUFFER    /usr/share/onyx/core/js/webgl.onyx      /^READ_BUFFER                                   :: 0x0C02$/
+READ_FRAMEBUFFER       /usr/share/onyx/core/js/webgl.onyx      /^READ_FRAMEBUFFER                              :: 0x8CA8$/
+READ_FRAMEBUFFER_BINDING       /usr/share/onyx/core/js/webgl.onyx      /^READ_FRAMEBUFFER_BINDING                      :: 0x8CAA$/
+RED    /usr/share/onyx/core/js/webgl.onyx      /^RED                                           :: 0x1903$/
+RED_BITS       /usr/share/onyx/core/js/webgl.onyx      /^RED_BITS                       :: 0x0D52$/
+RED_INTEGER    /usr/share/onyx/core/js/webgl.onyx      /^RED_INTEGER                                   :: 0x8D94$/
+RENDERBUFFER   /usr/share/onyx/core/js/webgl.onyx      /^RENDERBUFFER                   :: 0x8D41$/
+RENDERBUFFER_ALPHA_SIZE        /usr/share/onyx/core/js/webgl.onyx      /^RENDERBUFFER_ALPHA_SIZE        :: 0x8D53$/
+RENDERBUFFER_BINDING   /usr/share/onyx/core/js/webgl.onyx      /^RENDERBUFFER_BINDING           :: 0x8CA7$/
+RENDERBUFFER_BLUE_SIZE /usr/share/onyx/core/js/webgl.onyx      /^RENDERBUFFER_BLUE_SIZE         :: 0x8D52$/
+RENDERBUFFER_DEPTH_SIZE        /usr/share/onyx/core/js/webgl.onyx      /^RENDERBUFFER_DEPTH_SIZE        :: 0x8D54$/
+RENDERBUFFER_GREEN_SIZE        /usr/share/onyx/core/js/webgl.onyx      /^RENDERBUFFER_GREEN_SIZE        :: 0x8D51$/
+RENDERBUFFER_HEIGHT    /usr/share/onyx/core/js/webgl.onyx      /^RENDERBUFFER_HEIGHT            :: 0x8D43$/
+RENDERBUFFER_INTERNAL_FORMAT   /usr/share/onyx/core/js/webgl.onyx      /^RENDERBUFFER_INTERNAL_FORMAT   :: 0x8D44$/
+RENDERBUFFER_RED_SIZE  /usr/share/onyx/core/js/webgl.onyx      /^RENDERBUFFER_RED_SIZE          :: 0x8D50$/
+RENDERBUFFER_SAMPLES   /usr/share/onyx/core/js/webgl.onyx      /^RENDERBUFFER_SAMPLES                          :: 0x8CAB$/
+RENDERBUFFER_STENCIL_SIZE      /usr/share/onyx/core/js/webgl.onyx      /^RENDERBUFFER_STENCIL_SIZE      :: 0x8D55$/
+RENDERBUFFER_WIDTH     /usr/share/onyx/core/js/webgl.onyx      /^RENDERBUFFER_WIDTH             :: 0x8D42$/
+RENDERER       /usr/share/onyx/core/js/webgl.onyx      /^RENDERER                       :: 0x1F01$/
+REPEAT /usr/share/onyx/core/js/webgl.onyx      /^REPEAT                         :: 0x2901$/
+REPLACE        /usr/share/onyx/core/js/webgl.onyx      /^REPLACE                        :: 0x1E01$/
+RG     /usr/share/onyx/core/js/webgl.onyx      /^RG                                            :: 0x8227$/
+RG16F  /usr/share/onyx/core/js/webgl.onyx      /^RG16F                                         :: 0x822F$/
+RG16I  /usr/share/onyx/core/js/webgl.onyx      /^RG16I                                         :: 0x8239$/
+RG16UI /usr/share/onyx/core/js/webgl.onyx      /^RG16UI                                        :: 0x823A$/
+RG32F  /usr/share/onyx/core/js/webgl.onyx      /^RG32F                                         :: 0x8230$/
+RG32I  /usr/share/onyx/core/js/webgl.onyx      /^RG32I                                         :: 0x823B$/
+RG32UI /usr/share/onyx/core/js/webgl.onyx      /^RG32UI                                        :: 0x823C$/
+RG8    /usr/share/onyx/core/js/webgl.onyx      /^RG8                                           :: 0x822B$/
+RG8I   /usr/share/onyx/core/js/webgl.onyx      /^RG8I                                          :: 0x8237$/
+RG8UI  /usr/share/onyx/core/js/webgl.onyx      /^RG8UI                                         :: 0x8238$/
+RG8_SNORM      /usr/share/onyx/core/js/webgl.onyx      /^RG8_SNORM                                     :: 0x8F95$/
+RGB    /usr/share/onyx/core/js/webgl.onyx      /^RGB                            :: 0x1907$/
+RGB10_A2       /usr/share/onyx/core/js/webgl.onyx      /^RGB10_A2                                      :: 0x8059$/
+RGB10_A2UI     /usr/share/onyx/core/js/webgl.onyx      /^RGB10_A2UI                                    :: 0x906F$/
+RGB16F /usr/share/onyx/core/js/webgl.onyx      /^RGB16F                                        :: 0x881B$/
+RGB16I /usr/share/onyx/core/js/webgl.onyx      /^RGB16I                                        :: 0x8D89$/
+RGB16UI        /usr/share/onyx/core/js/webgl.onyx      /^RGB16UI                                       :: 0x8D77$/
+RGB32F /usr/share/onyx/core/js/webgl.onyx      /^RGB32F                                        :: 0x8815$/
+RGB32I /usr/share/onyx/core/js/webgl.onyx      /^RGB32I                                        :: 0x8D83$/
+RGB32UI        /usr/share/onyx/core/js/webgl.onyx      /^RGB32UI                                       :: 0x8D71$/
+RGB565 /usr/share/onyx/core/js/webgl.onyx      /^RGB565                         :: 0x8D62$/
+RGB5_A1        /usr/share/onyx/core/js/webgl.onyx      /^RGB5_A1                        :: 0x8057$/
+RGB8   /usr/share/onyx/core/js/webgl.onyx      /^RGB8                                          :: 0x8051$/
+RGB8I  /usr/share/onyx/core/js/webgl.onyx      /^RGB8I                                         :: 0x8D8F$/
+RGB8UI /usr/share/onyx/core/js/webgl.onyx      /^RGB8UI                                        :: 0x8D7D$/
+RGB8_SNORM     /usr/share/onyx/core/js/webgl.onyx      /^RGB8_SNORM                                    :: 0x8F96$/
+RGB9_E5        /usr/share/onyx/core/js/webgl.onyx      /^RGB9_E5                                       :: 0x8C3D$/
+RGBA   /usr/share/onyx/core/js/webgl.onyx      /^RGBA                           :: 0x1908$/
+RGBA16F        /usr/share/onyx/core/js/webgl.onyx      /^RGBA16F                                       :: 0x881A$/
+RGBA16I        /usr/share/onyx/core/js/webgl.onyx      /^RGBA16I                                       :: 0x8D88$/
+RGBA16UI       /usr/share/onyx/core/js/webgl.onyx      /^RGBA16UI                                      :: 0x8D76$/
+RGBA32F        /usr/share/onyx/core/js/webgl.onyx      /^RGBA32F                                       :: 0x8814$/
+RGBA32I        /usr/share/onyx/core/js/webgl.onyx      /^RGBA32I                                       :: 0x8D82$/
+RGBA32UI       /usr/share/onyx/core/js/webgl.onyx      /^RGBA32UI                                      :: 0x8D70$/
+RGBA4  /usr/share/onyx/core/js/webgl.onyx      /^RGBA4                          :: 0x8056$/
+RGBA8  /usr/share/onyx/core/js/webgl.onyx      /^RGBA8                                         :: 0x8058$/
+RGBA8I /usr/share/onyx/core/js/webgl.onyx      /^RGBA8I                                        :: 0x8D8E$/
+RGBA8UI        /usr/share/onyx/core/js/webgl.onyx      /^RGBA8UI                                       :: 0x8D7C$/
+RGBA8_SNORM    /usr/share/onyx/core/js/webgl.onyx      /^RGBA8_SNORM                                   :: 0x8F97$/
+RGBA_INTEGER   /usr/share/onyx/core/js/webgl.onyx      /^RGBA_INTEGER                                  :: 0x8D99$/
+RGB_INTEGER    /usr/share/onyx/core/js/webgl.onyx      /^RGB_INTEGER                                   :: 0x8D98$/
+RG_INTEGER     /usr/share/onyx/core/js/webgl.onyx      /^RG_INTEGER                                    :: 0x8228$/
+ResizeEvent    src/events.onyx /^ResizeEvent :: struct {$/
+SAMPLER_2D     /usr/share/onyx/core/js/webgl.onyx      /^SAMPLER_2D                     :: 0x8B5E$/
+SAMPLER_2D_ARRAY       /usr/share/onyx/core/js/webgl.onyx      /^SAMPLER_2D_ARRAY                              :: 0x8DC1$/
+SAMPLER_2D_ARRAY_SHADOW        /usr/share/onyx/core/js/webgl.onyx      /^SAMPLER_2D_ARRAY_SHADOW                       :: 0x8DC4$/
+SAMPLER_2D_SHADOW      /usr/share/onyx/core/js/webgl.onyx      /^SAMPLER_2D_SHADOW                             :: 0x8B62$/
+SAMPLER_3D     /usr/share/onyx/core/js/webgl.onyx      /^SAMPLER_3D                                    :: 0x8B5F$/
+SAMPLER_BINDING        /usr/share/onyx/core/js/webgl.onyx      /^SAMPLER_BINDING                               :: 0x8919$/
+SAMPLER_CUBE   /usr/share/onyx/core/js/webgl.onyx      /^SAMPLER_CUBE                   :: 0x8B60$/
+SAMPLER_CUBE_SHADOW    /usr/share/onyx/core/js/webgl.onyx      /^SAMPLER_CUBE_SHADOW                           :: 0x8DC5$/
+SAMPLES        /usr/share/onyx/core/js/webgl.onyx      /^SAMPLES                        :: 0x80A9$/
+SAMPLE_ALPHA_TO_COVERAGE       /usr/share/onyx/core/js/webgl.onyx      /^SAMPLE_ALPHA_TO_COVERAGE       :: 0x809E$/
+SAMPLE_BUFFERS /usr/share/onyx/core/js/webgl.onyx      /^SAMPLE_BUFFERS                 :: 0x80A8$/
+SAMPLE_COVERAGE        /usr/share/onyx/core/js/webgl.onyx      /^SAMPLE_COVERAGE                :: 0x80A0$/
+SAMPLE_COVERAGE_INVERT /usr/share/onyx/core/js/webgl.onyx      /^SAMPLE_COVERAGE_INVERT         :: 0x80AB$/
+SAMPLE_COVERAGE_VALUE  /usr/share/onyx/core/js/webgl.onyx      /^SAMPLE_COVERAGE_VALUE          :: 0x80AA$/
+SCISSOR_BOX    /usr/share/onyx/core/js/webgl.onyx      /^SCISSOR_BOX                    :: 0x0C10$/
+SCISSOR_TEST   /usr/share/onyx/core/js/webgl.onyx      /^SCISSOR_TEST                   :: 0x0C11$/
+SEPARATE_ATTRIBS       /usr/share/onyx/core/js/webgl.onyx      /^SEPARATE_ATTRIBS                              :: 0x8C8D$/
+SHADER_TYPE    /usr/share/onyx/core/js/webgl.onyx      /^SHADER_TYPE                      :: 0x8B4F$/
+SHADING_LANGUAGE_VERSION       /usr/share/onyx/core/js/webgl.onyx      /^SHADING_LANGUAGE_VERSION         :: 0x8B8C$/
+SHORT  /usr/share/onyx/core/js/webgl.onyx      /^SHORT                          :: 0x1402$/
+SIGNALED       /usr/share/onyx/core/js/webgl.onyx      /^SIGNALED                                      :: 0x9119$/
+SIGNED_NORMALIZED      /usr/share/onyx/core/js/webgl.onyx      /^SIGNED_NORMALIZED                             :: 0x8F9C$/
+SRC_ALPHA      /usr/share/onyx/core/js/webgl.onyx      /^SRC_ALPHA                      :: 0x0302$/
+SRC_ALPHA_SATURATE     /usr/share/onyx/core/js/webgl.onyx      /^SRC_ALPHA_SATURATE             :: 0x0308$/
+SRC_COLOR      /usr/share/onyx/core/js/webgl.onyx      /^SRC_COLOR                      :: 0x0300$/
+SRGB   /usr/share/onyx/core/js/webgl.onyx      /^SRGB                                          :: 0x8C40$/
+SRGB8  /usr/share/onyx/core/js/webgl.onyx      /^SRGB8                                         :: 0x8C41$/
+SRGB8_ALPHA8   /usr/share/onyx/core/js/webgl.onyx      /^SRGB8_ALPHA8                                  :: 0x8C43$/
+STATIC_COPY    /usr/share/onyx/core/js/webgl.onyx      /^STATIC_COPY                                   :: 0x88E6$/
+STATIC_DRAW    /usr/share/onyx/core/js/webgl.onyx      /^STATIC_DRAW                    :: 0x88E4$/
+STATIC_READ    /usr/share/onyx/core/js/webgl.onyx      /^STATIC_READ                                   :: 0x88E5$/
+STENCIL        /usr/share/onyx/core/js/webgl.onyx      /^STENCIL                                       :: 0x1802$/
+STENCIL_ATTACHMENT     /usr/share/onyx/core/js/webgl.onyx      /^STENCIL_ATTACHMENT             :: 0x8D20$/
+STENCIL_BACK_FAIL      /usr/share/onyx/core/js/webgl.onyx      /^STENCIL_BACK_FAIL              :: 0x8801$/
+STENCIL_BACK_FUNC      /usr/share/onyx/core/js/webgl.onyx      /^STENCIL_BACK_FUNC              :: 0x8800$/
+STENCIL_BACK_PASS_DEPTH_FAIL   /usr/share/onyx/core/js/webgl.onyx      /^STENCIL_BACK_PASS_DEPTH_FAIL   :: 0x8802$/
+STENCIL_BACK_PASS_DEPTH_PASS   /usr/share/onyx/core/js/webgl.onyx      /^STENCIL_BACK_PASS_DEPTH_PASS   :: 0x8803$/
+STENCIL_BACK_REF       /usr/share/onyx/core/js/webgl.onyx      /^STENCIL_BACK_REF               :: 0x8CA3$/
+STENCIL_BACK_VALUE_MASK        /usr/share/onyx/core/js/webgl.onyx      /^STENCIL_BACK_VALUE_MASK        :: 0x8CA4$/
+STENCIL_BACK_WRITEMASK /usr/share/onyx/core/js/webgl.onyx      /^STENCIL_BACK_WRITEMASK         :: 0x8CA5$/
+STENCIL_BITS   /usr/share/onyx/core/js/webgl.onyx      /^STENCIL_BITS                   :: 0x0D57$/
+STENCIL_BUFFER_BIT     /usr/share/onyx/core/js/webgl.onyx      /^STENCIL_BUFFER_BIT             :: 0x00000400$/
+STENCIL_CLEAR_VALUE    /usr/share/onyx/core/js/webgl.onyx      /^STENCIL_CLEAR_VALUE            :: 0x0B91$/
+STENCIL_FAIL   /usr/share/onyx/core/js/webgl.onyx      /^STENCIL_FAIL                   :: 0x0B94$/
+STENCIL_FUNC   /usr/share/onyx/core/js/webgl.onyx      /^STENCIL_FUNC                   :: 0x0B92$/
+STENCIL_INDEX  /usr/share/onyx/core/js/webgl.onyx      /^STENCIL_INDEX                  :: 0x1901$/
+STENCIL_INDEX8 /usr/share/onyx/core/js/webgl.onyx      /^STENCIL_INDEX8                 :: 0x8D48$/
+STENCIL_PASS_DEPTH_FAIL        /usr/share/onyx/core/js/webgl.onyx      /^STENCIL_PASS_DEPTH_FAIL        :: 0x0B95$/
+STENCIL_PASS_DEPTH_PASS        /usr/share/onyx/core/js/webgl.onyx      /^STENCIL_PASS_DEPTH_PASS        :: 0x0B96$/
+STENCIL_REF    /usr/share/onyx/core/js/webgl.onyx      /^STENCIL_REF                    :: 0x0B97$/
+STENCIL_TEST   /usr/share/onyx/core/js/webgl.onyx      /^STENCIL_TEST                   :: 0x0B90$/
+STENCIL_VALUE_MASK     /usr/share/onyx/core/js/webgl.onyx      /^STENCIL_VALUE_MASK             :: 0x0B93$/
+STENCIL_WRITEMASK      /usr/share/onyx/core/js/webgl.onyx      /^STENCIL_WRITEMASK              :: 0x0B98$/
+STREAM_COPY    /usr/share/onyx/core/js/webgl.onyx      /^STREAM_COPY                                   :: 0x88E2$/
+STREAM_DRAW    /usr/share/onyx/core/js/webgl.onyx      /^STREAM_DRAW                    :: 0x88E0$/
+STREAM_READ    /usr/share/onyx/core/js/webgl.onyx      /^STREAM_READ                                   :: 0x88E1$/
+SUBPIXEL_BITS  /usr/share/onyx/core/js/webgl.onyx      /^SUBPIXEL_BITS                  :: 0x0D50$/
+SYNC_CONDITION /usr/share/onyx/core/js/webgl.onyx      /^SYNC_CONDITION                                :: 0x9113$/
+SYNC_FENCE     /usr/share/onyx/core/js/webgl.onyx      /^SYNC_FENCE                                    :: 0x9116$/
+SYNC_FLAGS     /usr/share/onyx/core/js/webgl.onyx      /^SYNC_FLAGS                                    :: 0x9115$/
+SYNC_FLUSH_COMMANDS_BIT        /usr/share/onyx/core/js/webgl.onyx      /^SYNC_FLUSH_COMMANDS_BIT                       :: 0x0000001$/
+SYNC_GPU_COMMANDS_COMPLETE     /usr/share/onyx/core/js/webgl.onyx      /^SYNC_GPU_COMMANDS_COMPLETE                    :: 0x9117$/
+SYNC_STATUS    /usr/share/onyx/core/js/webgl.onyx      /^SYNC_STATUS                                   :: 0x9114$/
+ScratchState   /usr/share/onyx/core/alloc.onyx /^ScratchState :: struct {$/
+StringBuilder  /usr/share/onyx/core/string.onyx        /^StringBuilder :: struct {$/
+TAU    /usr/share/onyx/core/math.onyx  /^TAU :: 6.28318330f;$/
+TEXTURE        /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE                        :: 0x1702$/
+TEXTURE0       /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE0                       :: 0x84C0$/
+TEXTURE1       /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE1                       :: 0x84C1$/
+TEXTURE10      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE10                      :: 0x84CA$/
+TEXTURE11      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE11                      :: 0x84CB$/
+TEXTURE12      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE12                      :: 0x84CC$/
+TEXTURE13      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE13                      :: 0x84CD$/
+TEXTURE14      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE14                      :: 0x84CE$/
+TEXTURE15      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE15                      :: 0x84CF$/
+TEXTURE16      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE16                      :: 0x84D0$/
+TEXTURE17      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE17                      :: 0x84D1$/
+TEXTURE18      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE18                      :: 0x84D2$/
+TEXTURE19      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE19                      :: 0x84D3$/
+TEXTURE2       /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE2                       :: 0x84C2$/
+TEXTURE20      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE20                      :: 0x84D4$/
+TEXTURE21      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE21                      :: 0x84D5$/
+TEXTURE22      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE22                      :: 0x84D6$/
+TEXTURE23      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE23                      :: 0x84D7$/
+TEXTURE24      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE24                      :: 0x84D8$/
+TEXTURE25      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE25                      :: 0x84D9$/
+TEXTURE26      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE26                      :: 0x84DA$/
+TEXTURE27      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE27                      :: 0x84DB$/
+TEXTURE28      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE28                      :: 0x84DC$/
+TEXTURE29      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE29                      :: 0x84DD$/
+TEXTURE3       /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE3                       :: 0x84C3$/
+TEXTURE30      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE30                      :: 0x84DE$/
+TEXTURE31      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE31                      :: 0x84DF$/
+TEXTURE4       /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE4                       :: 0x84C4$/
+TEXTURE5       /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE5                       :: 0x84C5$/
+TEXTURE6       /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE6                       :: 0x84C6$/
+TEXTURE7       /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE7                       :: 0x84C7$/
+TEXTURE8       /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE8                       :: 0x84C8$/
+TEXTURE9       /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE9                       :: 0x84C9$/
+TEXTURE_2D     /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_2D                     :: 0x0DE1$/
+TEXTURE_2D_ARRAY       /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_2D_ARRAY                              :: 0x8C1A$/
+TEXTURE_3D     /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_3D                                    :: 0x806F$/
+TEXTURE_BASE_LEVEL     /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_BASE_LEVEL                            :: 0x813C$/
+TEXTURE_BINDING_2D     /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_BINDING_2D             :: 0x8069$/
+TEXTURE_BINDING_2D_ARRAY       /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_BINDING_2D_ARRAY                      :: 0x8C1D$/
+TEXTURE_BINDING_3D     /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_BINDING_3D                            :: 0x806A$/
+TEXTURE_BINDING_CUBE_MAP       /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_BINDING_CUBE_MAP       :: 0x8514$/
+TEXTURE_COMPARE_FUNC   /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_COMPARE_FUNC                          :: 0x884D$/
+TEXTURE_COMPARE_MODE   /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_COMPARE_MODE                          :: 0x884C$/
+TEXTURE_CUBE_MAP       /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_CUBE_MAP               :: 0x8513$/
+TEXTURE_CUBE_MAP_NEGATIVE_X    /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_CUBE_MAP_NEGATIVE_X    :: 0x8516$/
+TEXTURE_CUBE_MAP_NEGATIVE_Y    /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_CUBE_MAP_NEGATIVE_Y    :: 0x8518$/
+TEXTURE_CUBE_MAP_NEGATIVE_Z    /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_CUBE_MAP_NEGATIVE_Z    :: 0x851A$/
+TEXTURE_CUBE_MAP_POSITIVE_X    /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_CUBE_MAP_POSITIVE_X    :: 0x8515$/
+TEXTURE_CUBE_MAP_POSITIVE_Y    /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_CUBE_MAP_POSITIVE_Y    :: 0x8517$/
+TEXTURE_CUBE_MAP_POSITIVE_Z    /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_CUBE_MAP_POSITIVE_Z    :: 0x8519$/
+TEXTURE_IMMUTABLE_FORMAT       /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_IMMUTABLE_FORMAT                      :: 0x912F$/
+TEXTURE_IMMUTABLE_LEVELS       /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_IMMUTABLE_LEVELS                      :: 0x82DF$/
+TEXTURE_MAG_FILTER     /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_MAG_FILTER             :: 0x2800$/
+TEXTURE_MAX_LEVEL      /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_MAX_LEVEL                             :: 0x813D$/
+TEXTURE_MAX_LOD        /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_MAX_LOD                               :: 0x813B$/
+TEXTURE_MIN_FILTER     /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_MIN_FILTER             :: 0x2801$/
+TEXTURE_MIN_LOD        /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_MIN_LOD                               :: 0x813A$/
+TEXTURE_WRAP_R /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_WRAP_R                                :: 0x8072$/
+TEXTURE_WRAP_S /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_WRAP_S                 :: 0x2802$/
+TEXTURE_WRAP_T /usr/share/onyx/core/js/webgl.onyx      /^TEXTURE_WRAP_T                 :: 0x2803$/
+TIMEOUT_EXPIRED        /usr/share/onyx/core/js/webgl.onyx      /^TIMEOUT_EXPIRED                               :: 0x911B$/
+TIMEOUT_IGNORED        /usr/share/onyx/core/js/webgl.onyx      /^TIMEOUT_IGNORED                               :: -1$/
+TRANSFORM_FEEDBACK     /usr/share/onyx/core/js/webgl.onyx      /^TRANSFORM_FEEDBACK                            :: 0x8E22$/
+TRANSFORM_FEEDBACK_ACTIVE      /usr/share/onyx/core/js/webgl.onyx      /^TRANSFORM_FEEDBACK_ACTIVE                     :: 0x8E24$/
+TRANSFORM_FEEDBACK_BINDING     /usr/share/onyx/core/js/webgl.onyx      /^TRANSFORM_FEEDBACK_BINDING                    :: 0x8E25$/
+TRANSFORM_FEEDBACK_BUFFER      /usr/share/onyx/core/js/webgl.onyx      /^TRANSFORM_FEEDBACK_BUFFER                     :: 0x8C8E$/
+TRANSFORM_FEEDBACK_BUFFER_BINDING      /usr/share/onyx/core/js/webgl.onyx      /^TRANSFORM_FEEDBACK_BUFFER_BINDING             :: 0x8C8F$/
+TRANSFORM_FEEDBACK_BUFFER_MODE /usr/share/onyx/core/js/webgl.onyx      /^TRANSFORM_FEEDBACK_BUFFER_MODE                :: 0x8C7F$/
+TRANSFORM_FEEDBACK_BUFFER_SIZE /usr/share/onyx/core/js/webgl.onyx      /^TRANSFORM_FEEDBACK_BUFFER_SIZE                :: 0x8C85$/
+TRANSFORM_FEEDBACK_BUFFER_START        /usr/share/onyx/core/js/webgl.onyx      /^TRANSFORM_FEEDBACK_BUFFER_START               :: 0x8C84$/
+TRANSFORM_FEEDBACK_PAUSED      /usr/share/onyx/core/js/webgl.onyx      /^TRANSFORM_FEEDBACK_PAUSED                     :: 0x8E23$/
+TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN  /usr/share/onyx/core/js/webgl.onyx      /^TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN         :: 0x8C88$/
+TRANSFORM_FEEDBACK_VARYINGS    /usr/share/onyx/core/js/webgl.onyx      /^TRANSFORM_FEEDBACK_VARYINGS                   :: 0x8C83$/
+TRIANGLES      /usr/share/onyx/core/js/webgl.onyx      /^TRIANGLES                      :: 0x0004$/
+TRIANGLE_FAN   /usr/share/onyx/core/js/webgl.onyx      /^TRIANGLE_FAN                   :: 0x0006$/
+TRIANGLE_STRIP /usr/share/onyx/core/js/webgl.onyx      /^TRIANGLE_STRIP                 :: 0x0005$/
+UNIFORM_ARRAY_STRIDE   /usr/share/onyx/core/js/webgl.onyx      /^UNIFORM_ARRAY_STRIDE                          :: 0x8A3C$/
+UNIFORM_BLOCK_ACTIVE_UNIFORMS  /usr/share/onyx/core/js/webgl.onyx      /^UNIFORM_BLOCK_ACTIVE_UNIFORMS                 :: 0x8A42$/
+UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES   /usr/share/onyx/core/js/webgl.onyx      /^UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES          :: 0x8A43$/
+UNIFORM_BLOCK_BINDING  /usr/share/onyx/core/js/webgl.onyx      /^UNIFORM_BLOCK_BINDING                         :: 0x8A3F$/
+UNIFORM_BLOCK_DATA_SIZE        /usr/share/onyx/core/js/webgl.onyx      /^UNIFORM_BLOCK_DATA_SIZE                       :: 0x8A40$/
+UNIFORM_BLOCK_INDEX    /usr/share/onyx/core/js/webgl.onyx      /^UNIFORM_BLOCK_INDEX                           :: 0x8A3A$/
+UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER    /usr/share/onyx/core/js/webgl.onyx      /^UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER   :: 0x8A46$/
+UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER      /usr/share/onyx/core/js/webgl.onyx      /^UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER     :: 0x8A44$/
+UNIFORM_BUFFER /usr/share/onyx/core/js/webgl.onyx      /^UNIFORM_BUFFER                                :: 0x8A11$/
+UNIFORM_BUFFER_BINDING /usr/share/onyx/core/js/webgl.onyx      /^UNIFORM_BUFFER_BINDING                        :: 0x8A28$/
+UNIFORM_BUFFER_OFFSET_ALIGNMENT        /usr/share/onyx/core/js/webgl.onyx      /^UNIFORM_BUFFER_OFFSET_ALIGNMENT               :: 0x8A34$/
+UNIFORM_BUFFER_SIZE    /usr/share/onyx/core/js/webgl.onyx      /^UNIFORM_BUFFER_SIZE                           :: 0x8A2A$/
+UNIFORM_BUFFER_START   /usr/share/onyx/core/js/webgl.onyx      /^UNIFORM_BUFFER_START                          :: 0x8A29$/
+UNIFORM_IS_ROW_MAJOR   /usr/share/onyx/core/js/webgl.onyx      /^UNIFORM_IS_ROW_MAJOR                          :: 0x8A3E$/
+UNIFORM_MATRIX_STRIDE  /usr/share/onyx/core/js/webgl.onyx      /^UNIFORM_MATRIX_STRIDE                         :: 0x8A3D$/
+UNIFORM_OFFSET /usr/share/onyx/core/js/webgl.onyx      /^UNIFORM_OFFSET                                :: 0x8A3B$/
+UNIFORM_SIZE   /usr/share/onyx/core/js/webgl.onyx      /^UNIFORM_SIZE                                  :: 0x8A38$/
+UNIFORM_TYPE   /usr/share/onyx/core/js/webgl.onyx      /^UNIFORM_TYPE                                  :: 0x8A37$/
+UNPACK_ALIGNMENT       /usr/share/onyx/core/js/webgl.onyx      /^UNPACK_ALIGNMENT               :: 0x0CF5$/
+UNPACK_COLORSPACE_CONVERSION_WEBGL     /usr/share/onyx/core/js/webgl.onyx      /^UNPACK_COLORSPACE_CONVERSION_WEBGL :: 0x9243$/
+UNPACK_FLIP_Y_WEBGL    /usr/share/onyx/core/js/webgl.onyx      /^UNPACK_FLIP_Y_WEBGL            :: 0x9240$/
+UNPACK_IMAGE_HEIGHT    /usr/share/onyx/core/js/webgl.onyx      /^UNPACK_IMAGE_HEIGHT                           :: 0x806E$/
+UNPACK_PREMULTIPLY_ALPHA_WEBGL /usr/share/onyx/core/js/webgl.onyx      /^UNPACK_PREMULTIPLY_ALPHA_WEBGL :: 0x9241$/
+UNPACK_ROW_LENGTH      /usr/share/onyx/core/js/webgl.onyx      /^UNPACK_ROW_LENGTH                             :: 0x0CF2$/
+UNPACK_SKIP_IMAGES     /usr/share/onyx/core/js/webgl.onyx      /^UNPACK_SKIP_IMAGES                            :: 0x806D$/
+UNPACK_SKIP_PIXELS     /usr/share/onyx/core/js/webgl.onyx      /^UNPACK_SKIP_PIXELS                            :: 0x0CF4$/
+UNPACK_SKIP_ROWS       /usr/share/onyx/core/js/webgl.onyx      /^UNPACK_SKIP_ROWS                              :: 0x0CF3$/
+UNSIGNALED     /usr/share/onyx/core/js/webgl.onyx      /^UNSIGNALED                                    :: 0x9118$/
+UNSIGNED_BYTE  /usr/share/onyx/core/js/webgl.onyx      /^UNSIGNED_BYTE                  :: 0x1401$/
+UNSIGNED_INT   /usr/share/onyx/core/js/webgl.onyx      /^UNSIGNED_INT                   :: 0x1405$/
+UNSIGNED_INT_10F_11F_11F_REV   /usr/share/onyx/core/js/webgl.onyx      /^UNSIGNED_INT_10F_11F_11F_REV                  :: 0x8C3B$/
+UNSIGNED_INT_24_8      /usr/share/onyx/core/js/webgl.onyx      /^UNSIGNED_INT_24_8                             :: 0x84FA$/
+UNSIGNED_INT_2_10_10_10_REV    /usr/share/onyx/core/js/webgl.onyx      /^UNSIGNED_INT_2_10_10_10_REV                   :: 0x8368$/
+UNSIGNED_INT_5_9_9_9_REV       /usr/share/onyx/core/js/webgl.onyx      /^UNSIGNED_INT_5_9_9_9_REV                      :: 0x8C3E$/
+UNSIGNED_INT_SAMPLER_2D        /usr/share/onyx/core/js/webgl.onyx      /^UNSIGNED_INT_SAMPLER_2D                       :: 0x8DD2$/
+UNSIGNED_INT_SAMPLER_2D_ARRAY  /usr/share/onyx/core/js/webgl.onyx      /^UNSIGNED_INT_SAMPLER_2D_ARRAY                 :: 0x8DD7$/
+UNSIGNED_INT_SAMPLER_3D        /usr/share/onyx/core/js/webgl.onyx      /^UNSIGNED_INT_SAMPLER_3D                       :: 0x8DD3$/
+UNSIGNED_INT_SAMPLER_CUBE      /usr/share/onyx/core/js/webgl.onyx      /^UNSIGNED_INT_SAMPLER_CUBE                     :: 0x8DD4$/
+UNSIGNED_INT_VEC2      /usr/share/onyx/core/js/webgl.onyx      /^UNSIGNED_INT_VEC2                             :: 0x8DC6$/
+UNSIGNED_INT_VEC3      /usr/share/onyx/core/js/webgl.onyx      /^UNSIGNED_INT_VEC3                             :: 0x8DC7$/
+UNSIGNED_INT_VEC4      /usr/share/onyx/core/js/webgl.onyx      /^UNSIGNED_INT_VEC4                             :: 0x8DC8$/
+UNSIGNED_NORMALIZED    /usr/share/onyx/core/js/webgl.onyx      /^UNSIGNED_NORMALIZED                           :: 0x8C17$/
+UNSIGNED_SHORT /usr/share/onyx/core/js/webgl.onyx      /^UNSIGNED_SHORT                 :: 0x1403$/
+UNSIGNED_SHORT_4_4_4_4 /usr/share/onyx/core/js/webgl.onyx      /^UNSIGNED_SHORT_4_4_4_4         :: 0x8033$/
+UNSIGNED_SHORT_5_5_5_1 /usr/share/onyx/core/js/webgl.onyx      /^UNSIGNED_SHORT_5_5_5_1         :: 0x8034$/
+UNSIGNED_SHORT_5_6_5   /usr/share/onyx/core/js/webgl.onyx      /^UNSIGNED_SHORT_5_6_5           :: 0x8363$/
+VALIDATE_STATUS        /usr/share/onyx/core/js/webgl.onyx      /^VALIDATE_STATUS                  :: 0x8B83$/
+VENDOR /usr/share/onyx/core/js/webgl.onyx      /^VENDOR                         :: 0x1F00$/
+VERSION        /usr/share/onyx/core/js/webgl.onyx      /^VERSION                        :: 0x1F02$/
+VERTEX_ARRAY_BINDING   /usr/share/onyx/core/js/webgl.onyx      /^VERTEX_ARRAY_BINDING                          :: 0x85B5$/
+VERTEX_ATTRIB_ARRAY_BUFFER_BINDING     /usr/share/onyx/core/js/webgl.onyx      /^VERTEX_ATTRIB_ARRAY_BUFFER_BINDING :: 0x889F$/
+VERTEX_ATTRIB_ARRAY_DIVISOR    /usr/share/onyx/core/js/webgl.onyx      /^VERTEX_ATTRIB_ARRAY_DIVISOR                   :: 0x88FE$/
+VERTEX_ATTRIB_ARRAY_ENABLED    /usr/share/onyx/core/js/webgl.onyx      /^VERTEX_ATTRIB_ARRAY_ENABLED        :: 0x8622$/
+VERTEX_ATTRIB_ARRAY_INTEGER    /usr/share/onyx/core/js/webgl.onyx      /^VERTEX_ATTRIB_ARRAY_INTEGER                   :: 0x88FD$/
+VERTEX_ATTRIB_ARRAY_NORMALIZED /usr/share/onyx/core/js/webgl.onyx      /^VERTEX_ATTRIB_ARRAY_NORMALIZED     :: 0x886A$/
+VERTEX_ATTRIB_ARRAY_POINTER    /usr/share/onyx/core/js/webgl.onyx      /^VERTEX_ATTRIB_ARRAY_POINTER        :: 0x8645$/
+VERTEX_ATTRIB_ARRAY_SIZE       /usr/share/onyx/core/js/webgl.onyx      /^VERTEX_ATTRIB_ARRAY_SIZE           :: 0x8623$/
+VERTEX_ATTRIB_ARRAY_STRIDE     /usr/share/onyx/core/js/webgl.onyx      /^VERTEX_ATTRIB_ARRAY_STRIDE         :: 0x8624$/
+VERTEX_ATTRIB_ARRAY_TYPE       /usr/share/onyx/core/js/webgl.onyx      /^VERTEX_ATTRIB_ARRAY_TYPE           :: 0x8625$/
+VERTEX_SHADER  /usr/share/onyx/core/js/webgl.onyx      /^VERTEX_SHADER                    :: 0x8B31$/
+VIEWPORT       /usr/share/onyx/core/js/webgl.onyx      /^VIEWPORT                       :: 0x0BA2$/
+Vec2   src/gfx/quad_renderer.onyx      /^Vec2 :: struct {$/
+WAIT_FAILED    /usr/share/onyx/core/js/webgl.onyx      /^WAIT_FAILED                                   :: 0x911D$/
+ZERO   /usr/share/onyx/core/js/webgl.onyx      /^ZERO                           :: 0$/
+abs_f32        /usr/share/onyx/core/intrinsics.onyx    /^abs_f32      :: proc (val: f32) -> f32 #intrinsic ---$/
+abs_f64        /usr/share/onyx/core/intrinsics.onyx    /^abs_f64      :: proc (val: f64) -> f64 #intrinsic ---$/
+activeTexture  /usr/share/onyx/core/js/webgl.onyx      /^activeTexture                  :: proc (texture: GLenum) #foreign "gl" "activeTexture" ---$/
+alloc  /usr/share/onyx/core/builtin.onyx       /^alloc :: proc (use a: Allocator, size: u32) -> rawptr {$/
+allocator_proc /usr/share/onyx/core/builtin.onyx       /^allocator_proc :: #type proc (rawptr, AllocAction, u32, u32, rawptr) -> rawptr;$/
+and_i32        /usr/share/onyx/core/intrinsics.onyx    /^and_i32      :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---$/
+and_i64        /usr/share/onyx/core/intrinsics.onyx    /^and_i64      :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---$/
+array_average  /usr/share/onyx/core/array.onyx /^array_average :: proc (arr: ^[..] $T) -> T {$/
+array_clear    /usr/share/onyx/core/array.onyx /^array_clear :: proc (arr: ^[..] $T) {$/
+array_contains /usr/share/onyx/core/array.onyx /^array_contains :: proc (arr: ^[..] $T, x: T) -> bool {$/
+array_delete   /usr/share/onyx/core/array.onyx /^array_delete :: proc (arr: ^[..] $T, idx: u32) {$/
+array_ensure_capacity  /usr/share/onyx/core/array.onyx /^array_ensure_capacity :: proc (arr: ^[..] $T, cap: u32) {$/
+array_fast_delete      /usr/share/onyx/core/array.onyx /^array_fast_delete :: proc (arr: ^[..] $T, idx: u32) {$/
+array_fold     /usr/share/onyx/core/array.onyx /^array_fold :: proc (arr: ^[..] $T, init: $R, f: proc (T, R) -> R) -> R {$/
+array_free     /usr/share/onyx/core/array.onyx /^array_free :: proc (arr: ^[..] $T) {$/
+array_init     /usr/share/onyx/core/array.onyx /^array_init :: proc (arr: ^[..] $T, initial_cap := 4) {$/
+array_insert   /usr/share/onyx/core/array.onyx /^array_insert :: proc (arr: ^[..] $T, idx: u32, x: T) {$/
+array_map      /usr/share/onyx/core/array.onyx /^array_map :: proc (arr: ^[..] $T, f: proc (T) -> T) {$/
+array_pop      /usr/share/onyx/core/array.onyx /^array_pop :: proc (arr: ^[..] $T) -> T {$/
+array_push     /usr/share/onyx/core/array.onyx /^array_push :: proc (arr: ^[..] $T, x: T) {$/
+array_remove   /usr/share/onyx/core/array.onyx /^array_remove :: proc (arr: ^[..] $T, elem: T) {$/
+array_sort     /usr/share/onyx/core/array.onyx /^array_sort :: proc (arr: ^[..] $T, cmp: proc (T, T) -> i32) {$/
+array_to_slice /usr/share/onyx/core/array.onyx /^array_to_slice :: proc (arr: ^[..] $T) -> [] T {$/
+attachShader   /usr/share/onyx/core/js/webgl.onyx      /^attachShader                   :: proc (program: GLProgram, shader: GLShader) -> GLProgram #foreign "gl" "attachShader" ---$/
+bindAttribLocation     /usr/share/onyx/core/js/webgl.onyx      /^bindAttribLocation             :: proc (program: GLProgram, index: GLuint, name: string) #foreign "gl" "bindAttribLocation" ---$/
+bindBuffer     /usr/share/onyx/core/js/webgl.onyx      /^bindBuffer                     :: proc (target: GLenum, buffer: GLBuffer) #foreign "gl" "bindBuffer" ---$/
+bindFramebuffer        /usr/share/onyx/core/js/webgl.onyx      /^bindFramebuffer                :: proc (target: GLenum, framebuffer: GLFramebuffer) #foreign "gl" "bindFramebuffer" ---$/
+bindRenderbuffer       /usr/share/onyx/core/js/webgl.onyx      /^bindRenderbuffer               :: proc (target: GLenum, renderbuffer: GLRenderbuffer) #foreign "gl" "bindRenderbuffer" ---$/
+bindTexture    /usr/share/onyx/core/js/webgl.onyx      /^bindTexture                    :: proc (target: GLenum, texture: GLTexture) #foreign "gl" "bindTexture" ---$/
+bindVertexArray        /usr/share/onyx/core/js/webgl.onyx      /^bindVertexArray                :: proc (vertexArray: GLVertexArrayObject) #foreign "gl" "bindVertexArray" ---$/
+blendColor     /usr/share/onyx/core/js/webgl.onyx      /^blendColor                     :: proc (red: GLclampf, green: GLclampf, blue: GLclampf, alpha: GLclampf) #foreign "gl" "blendColor" ---$/
+blendEquation  /usr/share/onyx/core/js/webgl.onyx      /^blendEquation                  :: proc (mode: GLenum) #foreign "gl" "blendEquation" ---$/
+blendEquationSeparate  /usr/share/onyx/core/js/webgl.onyx      /^blendEquationSeparate          :: proc (modeRGB: GLenum, modeAlpha: GLenum) #foreign "gl" "blendEquationSeparate" ---$/
+blendFunc      /usr/share/onyx/core/js/webgl.onyx      /^blendFunc                      :: proc (sfactor: GLenum, dfactor: GLenum) #foreign "gl" "blendFunc" ---$/
+blendFuncSeparate      /usr/share/onyx/core/js/webgl.onyx      /^blendFuncSeparate              :: proc (srcRGB: GLenum, dstRGB: GLenum, srcAlpha: GLenum, dstAlpha: GLenum) #foreign "gl" "blendFuncSeparate" ---$/
+blitFramebuffer        /usr/share/onyx/core/js/webgl.onyx      /^blitFramebuffer                :: proc (sx0: GLint, sy0: GLint, sx1: GLint, sy1: GLint, dx0: GLint, dy0: GLint, dx1: GLint, dy1: GLint, mask: GLbitfield, filter: GLenum) #foreign "gl" "blitFramebuffer" ---$/
+bufferData     /usr/share/onyx/core/js/webgl.onyx      /^bufferData                     :: proc #overloaded { bufferDataWithData, bufferDataNoData }$/
+bufferDataNoData       /usr/share/onyx/core/js/webgl.onyx      /^bufferDataNoData               :: proc (target: GLenum, size: GLsizeiptr, usage: GLenum) #foreign "gl" "bufferDataNoData" ---$/
+bufferDataWithData     /usr/share/onyx/core/js/webgl.onyx      /^bufferDataWithData             :: proc (target: GLenum, buffer: Buffer, usage: GLenum) #foreign "gl" "bufferDataWithData" ---$/
+bufferSubData  /usr/share/onyx/core/js/webgl.onyx      /^bufferSubData                  :: proc (target: GLenum, offset: GLsizei, data: Buffer) #foreign "gl" "bufferSubData" ---$/
+calloc /usr/share/onyx/core/builtin.onyx       /^calloc  :: proc (size: u32) -> rawptr do return alloc(context.allocator, size);$/
+ceil_f32       /usr/share/onyx/core/intrinsics.onyx    /^ceil_f32     :: proc (val: f32) -> f32 #intrinsic ---$/
+ceil_f64       /usr/share/onyx/core/intrinsics.onyx    /^ceil_f64     :: proc (val: f64) -> f64 #intrinsic ---$/
+cfree  /usr/share/onyx/core/builtin.onyx       /^cfree   :: proc (ptr: rawptr) do free(context.allocator, ptr);$/
+checkFrameBufferStatus /usr/share/onyx/core/js/webgl.onyx      /^checkFrameBufferStatus         :: proc (target: GLenum) -> GLenum #foreign "gl" "checkFrameBufferStatus" ---$/
+clear  /usr/share/onyx/core/js/webgl.onyx      /^clear                          :: proc (mask: GLbitfield) #foreign "gl" "clear" ---$/
+clearColor     /usr/share/onyx/core/js/webgl.onyx      /^clearColor                     :: proc (red: GLclampf, green: GLclampf, blue: GLclampf, alpha: GLclampf) #foreign "gl" "clearColor" ---$/
+clearDepth     /usr/share/onyx/core/js/webgl.onyx      /^clearDepth                     :: proc (depth: GLclampf) #foreign "gl" "clearDepth" ---$/
+clearStencil   /usr/share/onyx/core/js/webgl.onyx      /^clearStencil                   :: proc (s: GLint) #foreign "gl" "clearStencil" ---$/
+clear_event    src/events.onyx /^clear_event :: proc (ev: ^Event) {$/
+clz_i32        /usr/share/onyx/core/intrinsics.onyx    /^clz_i32      :: proc (val: i32) -> i32 #intrinsic ---$/
+clz_i64        /usr/share/onyx/core/intrinsics.onyx    /^clz_i64      :: proc (val: i64) -> i64 #intrinsic ---$/
+cmp_asc        /usr/share/onyx/core/builtin.onyx       /^cmp_asc :: proc (a: $T, b: T) -> i32 do return cast(i32) (a - b);$/
+cmp_dec        /usr/share/onyx/core/builtin.onyx       /^cmp_dec :: proc (a: $T, b: T) -> i32 do return cast(i32) (b - a);$/
+colorMask      /usr/share/onyx/core/js/webgl.onyx      /^colorMask                      :: proc (red: GLboolean, green: GLboolean, blue: GLboolean, alpha: GLboolean) #foreign "gl" "colorMask" ---$/
+compileShader  /usr/share/onyx/core/js/webgl.onyx      /^compileShader                  :: proc (shader: GLShader) #foreign "gl" "compileShader" ---$/
+compile_shader src/utils/gl.onyx       /^compile_shader :: proc (shader_type: gl.GLenum, source: cstring) -> gl.GLShader {$/
+compressedTexImage2D   /usr/share/onyx/core/js/webgl.onyx      /^compressedTexImage2D           :: proc (target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, border: GLint, data: string) #foreign "gl" "compressedTexImage2D" ---$/
+compressedTexSubImage2D        /usr/share/onyx/core/js/webgl.onyx      /^compressedTexSubImage2D        :: proc (target: GLenum, level: GLint, internalformat: GLenum, xoff: GLint, yoff: GLint, width: GLsizei, height: GLsizei, format: GLenum, data: string) #foreign "gl" "compressedTexSubImage2D" ---$/
+context        /usr/share/onyx/core/builtin.onyx       /^context : struct {$/
+copyBufferSubData      /usr/share/onyx/core/js/webgl.onyx      /^copyBufferSubData              :: proc (readTarget: GLenum, writeTarget: GLenum, readOffset: GLintptr, writeOffset: GLintptr, size: GLsizeiptr) #foreign "gl" "copyBufferSubData" ---$/
+copyTexImage2D /usr/share/onyx/core/js/webgl.onyx      /^copyTexImage2D                 :: proc (target: GLenum, level: GLint, internalformat: GLenum, x: GLint, y: GLint, width: GLsizei, height: GLsizei, border: GLint) #foreign "gl" "copyTexImage2D" ---$/
+copyTexSubImage2D      /usr/share/onyx/core/js/webgl.onyx      /^copyTexSubImage2D              :: proc (target: GLenum, level: GLint, xoff: GLint, yoff: GLint, x: GLint, y: GLint, width: GLsizei, height: GLsizei) #foreign "gl" "copyTexSubImage2D" ---$/
+copysign_f32   /usr/share/onyx/core/intrinsics.onyx    /^copysign_f32 :: proc (lhs: f32, rhs: f32) -> f32 #intrinsic ---$/
+copysign_f64   /usr/share/onyx/core/intrinsics.onyx    /^copysign_f64 :: proc (lhs: f64, rhs: f64) -> f64 #intrinsic ---$/
+cos    /usr/share/onyx/core/math.onyx  /^cos :: proc (t_: f32) -> f32 {$/
+createBuffer   /usr/share/onyx/core/js/webgl.onyx      /^createBuffer                   :: proc -> GLBuffer #foreign "gl" "createBuffer" ---$/
+createFramebuffer      /usr/share/onyx/core/js/webgl.onyx      /^createFramebuffer              :: proc -> GLFramebuffer #foreign "gl" "createFramebuffer" ---$/
+createProgram  /usr/share/onyx/core/js/webgl.onyx      /^createProgram                  :: proc -> GLProgram #foreign "gl" "createProgram" ---$/
+createRenderbuffer     /usr/share/onyx/core/js/webgl.onyx      /^createRenderbuffer             :: proc -> GLRenderbuffer #foreign "gl" "createRenderbuffer" ---$/
+createShader   /usr/share/onyx/core/js/webgl.onyx      /^createShader                   :: proc (type: GLenum) -> GLShader #foreign "gl" "createShader" ---$/
+createTexture  /usr/share/onyx/core/js/webgl.onyx      /^createTexture                  :: proc -> GLTexture #foreign "gl" "createTexture" ---$/
+createVertexArray      /usr/share/onyx/core/js/webgl.onyx      /^createVertexArray              :: proc -> GLVertexArrayObject #foreign "gl" "createVertexArray" ---$/
+cresize        /usr/share/onyx/core/builtin.onyx       /^cresize :: proc (ptr: rawptr, size: u32) -> rawptr do return resize(context.allocator, ptr, size);$/
+cstring        /usr/share/onyx/core/builtin.onyx       /^cstring :: #type ^u8;$/
+ctz_i32        /usr/share/onyx/core/intrinsics.onyx    /^ctz_i32      :: proc (val: i32) -> i32 #intrinsic ---$/
+ctz_i64        /usr/share/onyx/core/intrinsics.onyx    /^ctz_i64      :: proc (val: i64) -> i64 #intrinsic ---$/
+cullFace       /usr/share/onyx/core/js/webgl.onyx      /^cullFace                       :: proc (mode: GLenum) #foreign "gl" "cullFace" ---$/
+deleteBuffer   /usr/share/onyx/core/js/webgl.onyx      /^deleteBuffer                   :: proc (buffer: GLBuffer) #foreign "gl" "deleteBuffer" ---$/
+deleteFramebuffer      /usr/share/onyx/core/js/webgl.onyx      /^deleteFramebuffer              :: proc (framebuffer: GLFramebuffer) #foreign "gl" "deleteFramebuffer" ---$/
+deleteProgram  /usr/share/onyx/core/js/webgl.onyx      /^deleteProgram                  :: proc (program: GLProgram) #foreign "gl" "deleteProgram" ---$/
+deleteRenderbuffer     /usr/share/onyx/core/js/webgl.onyx      /^deleteRenderbuffer             :: proc (renderbuffer: GLRenderbuffer) #foreign "gl" "deleteRenderbuffer" ---$/
+deleteShader   /usr/share/onyx/core/js/webgl.onyx      /^deleteShader                   :: proc (shader: GLShader) #foreign "gl" "deleteShader" ---$/
+deleteTexture  /usr/share/onyx/core/js/webgl.onyx      /^deleteTexture                  :: proc (texture: GLTexture) #foreign "gl" "deleteTexture" ---$/
+deleteVertexArray      /usr/share/onyx/core/js/webgl.onyx      /^deleteVertexArray              :: proc (vertexArray: GLVertexArrayObject) #foreign "gl" "deleteVertexArray" ---$/
+depthFunc      /usr/share/onyx/core/js/webgl.onyx      /^depthFunc                      :: proc (func: GLenum) #foreign "gl" "depthFunc" ---$/
+depthMask      /usr/share/onyx/core/js/webgl.onyx      /^depthMask                      :: proc (flag: GLboolean) #foreign "gl" "depthMask" ---$/
+depthRange     /usr/share/onyx/core/js/webgl.onyx      /^depthRange                     :: proc (zNear: GLclampf, zFar: GLclampf) #foreign "gl" "depthRange" ---$/
+detachShader   /usr/share/onyx/core/js/webgl.onyx      /^detachShader                   :: proc (program: GLProgram, shader: GLShader) #foreign "gl" "detachShader" ---$/
+disable        /usr/share/onyx/core/js/webgl.onyx      /^disable                        :: proc (cap: GLenum) #foreign "gl" "disable" ---$/
+disableVertexAttribArray       /usr/share/onyx/core/js/webgl.onyx      /^disableVertexAttribArray       :: proc (index: GLuint) #foreign "gl" "disableVertexAttribArray" ---$/
+draw   src/main.onyx   /^draw :: proc (use gs: ^GameState) {$/
+drawArrays     /usr/share/onyx/core/js/webgl.onyx      /^drawArrays                     :: proc (mode: GLenum, first: GLint, count: GLsizei) #foreign "gl" "drawArrays" ---$/
+drawArraysInstanced    /usr/share/onyx/core/js/webgl.onyx      /^drawArraysInstanced            :: proc (mode: GLenum, first: GLint, count: GLsizei, instanceCount: GLsizei) #foreign "gl" "drawArraysInstanced" ---$/
+drawElements   /usr/share/onyx/core/js/webgl.onyx      /^drawElements                   :: proc (mode: GLenum, count: GLsizei, type: GLenum, offset: GLint) #foreign "gl" "drawElements" ---$/
+drawElementsInstanced  /usr/share/onyx/core/js/webgl.onyx      /^drawElementsInstanced          :: proc (mode: GLenum, count: GLsizei, type: GLenum, offset: GLint, instanceCount: GLsizei) #foreign "gl" "drawElementsInstanced" ---$/
+enable /usr/share/onyx/core/js/webgl.onyx      /^enable                         :: proc (cap: GLenum) #foreign "gl" "enable" ---$/
+enableVertexAttribArray        /usr/share/onyx/core/js/webgl.onyx      /^enableVertexAttribArray        :: proc (index: GLuint) #foreign "gl" "enableVertexAttribArray" ---$/
+event_setup    src/events.onyx /^#private event_setup :: proc (event_storage: ^EventStorage, event_size: u32) #foreign "event" "setup" ---$/
+event_storage  src/events.onyx /^#private event_storage : EventStorage;$/
+finish /usr/share/onyx/core/js/webgl.onyx      /^finish                         :: proc #foreign "gl" "finish" ---$/
+floor_f32      /usr/share/onyx/core/intrinsics.onyx    /^floor_f32    :: proc (val: f32) -> f32 #intrinsic ---$/
+floor_f64      /usr/share/onyx/core/intrinsics.onyx    /^floor_f64    :: proc (val: f64) -> f64 #intrinsic ---$/
+flush  /usr/share/onyx/core/js/webgl.onyx      /^flush                          :: proc #foreign "gl" "flush" ---$/
+framebufferRenderbuffer        /usr/share/onyx/core/js/webgl.onyx      /^framebufferRenderbuffer        :: proc (target: GLenum, attachment: GLenum, renderbuffertarget: GLenum, renderbuffer: GLRenderbuffer) #foreign "gl" "framebufferRenderbuffer" ---$/
+framebufferTexture2D   /usr/share/onyx/core/js/webgl.onyx      /^framebufferTexture2D           :: proc (target: GLenum, attachment: GLenum, textarget: GLenum, texture: GLTexture, level: GLint) #foreign "gl" "framebufferTexture2D" ---$/
+framebufferTextureLayer        /usr/share/onyx/core/js/webgl.onyx      /^framebufferTextureLayer        :: proc (target: GLenum, attachment: GLenum, texture: GLTexture, level: GLint, layer: GLint) #foreign "gl" "framebufferTextureLayer" ---$/
+free   /usr/share/onyx/core/builtin.onyx       /^free :: proc (use a: Allocator, ptr: rawptr) {$/
+frontFace      /usr/share/onyx/core/js/webgl.onyx      /^frontFace                      :: proc (mode: GLenum) #foreign "gl" "frontFace" ---$/
+game_launch    src/main.onyx   /^game_launch :: proc (gs: ^GameState) #foreign "game" "launch" ---$/
+generateMipmap /usr/share/onyx/core/js/webgl.onyx      /^generateMipmap                 :: proc (target: GLenum) #foreign "gl" "generateMipmap" ---$/
+getActiveAttrib        /usr/share/onyx/core/js/webgl.onyx      /^getActiveAttrib                :: proc (program: GLProgram, index: GLuint, out: ^GLActiveInfo) #foreign "gl" "getActiveAttrib" ---$/
+getActiveUniform       /usr/share/onyx/core/js/webgl.onyx      /^getActiveUniform               :: proc (program: GLProgram, index: GLuint, out: ^GLActiveInfo) #foreign "gl" "getActiveUniform" ---$/
+getAttribLocation      /usr/share/onyx/core/js/webgl.onyx      /^getAttribLocation              :: proc (program: GLProgram, name: string) -> GLint #foreign "gl" "getAttribLocation" ---$/
+getBufferSubData       /usr/share/onyx/core/js/webgl.onyx      /^getBufferSubData               :: proc (target: GLenum, srcByteOffset: GLintptr, dstBuffer: string, dstOffset: GLuint, length: GLuint) #foreign "gl" "getBufferSubData" ---$/
+getError       /usr/share/onyx/core/js/webgl.onyx      /^getError                       :: proc -> GLenum #foreign "gl" "getError" ---$/
+getInternalformatParameter     /usr/share/onyx/core/js/webgl.onyx      /^getInternalformatParameter     :: proc (target: GLenum, internalFormat: GLenum, pname: GLenum) -> GLenum #foreign "gl" "getInternalformatParameter" ---$/
+getProgramParameter    /usr/share/onyx/core/js/webgl.onyx      /^getProgramParameter            :: proc (program: GLProgram, pname: GLenum) -> GLenum #foreign "gl" "getProgramParameter" ---$/
+getShaderParameter     /usr/share/onyx/core/js/webgl.onyx      /^getShaderParameter             :: proc (shader: GLShader, pname: GLenum) -> GLenum #foreign "gl" "getShaderParameter" ---$/
+getUniformLocation     /usr/share/onyx/core/js/webgl.onyx      /^getUniformLocation             :: proc (program: GLProgram, name: string) -> GLUniformLocation #foreign "gl" "getUniformLocation" ---$/
+getVertexAttribOffset  /usr/share/onyx/core/js/webgl.onyx      /^getVertexAttribOffset          :: proc (index: GLuint, pname: GLenum) #foreign "gl" "getVertexAttribOffset" ---$/
+heap_alloc     /usr/share/onyx/core/alloc.onyx /^heap_alloc :: proc (size_: u32, align: u32) -> rawptr {$/
+heap_alloc_proc        /usr/share/onyx/core/alloc.onyx /^heap_alloc_proc :: proc (data: rawptr, aa: AllocAction, size: u32, align: u32, oldptr: rawptr) -> rawptr {$/
+heap_allocator /usr/share/onyx/core/alloc.onyx /^heap_allocator : Allocator;$/
+heap_block     /usr/share/onyx/core/alloc.onyx /^heap_block :: struct {$/
+heap_free      /usr/share/onyx/core/alloc.onyx /^heap_free :: proc (ptr: rawptr) {$/
+heap_init      /usr/share/onyx/core/alloc.onyx /^heap_init :: proc {$/
+heap_resize    /usr/share/onyx/core/alloc.onyx /^heap_resize :: proc (ptr: rawptr, new_size: u32, align: u32) -> rawptr {$/
+heap_state     /usr/share/onyx/core/alloc.onyx /^heap_state : struct {$/
+hint   /usr/share/onyx/core/js/webgl.onyx      /^hint                           :: proc (target: GLenum, mode: GLenum) #foreign "gl" "hint" ---$/
+i64_to_string  /usr/share/onyx/core/string.onyx        /^i64_to_string :: proc (n_: i64, base: u64, buf: Buffer) -> string {$/
+init   src/events.onyx /^init :: proc {$/
+init   /usr/share/onyx/core/js/webgl.onyx      /^init                           :: proc (canvasname: string) -> GLboolean #foreign "gl" "init" ---$/
+invalidateFramebuffer  /usr/share/onyx/core/js/webgl.onyx      /^invalidateFramebuffer          :: proc (target: GLenum, attachments: string) #foreign "gl" "invalidateFramebuffer" ---$/
+invalidateSubFramebuffer       /usr/share/onyx/core/js/webgl.onyx      /^invalidateSubFramebuffer       :: proc (target: GLenum, attachments: string, x: GLint, y: GLint, width: GLsizei, height: GLsizei) #foreign "gl" "invalidateSubFramebuffer" ---$/
+isEnabled      /usr/share/onyx/core/js/webgl.onyx      /^isEnabled                      :: proc (cap: GLenum) -> GLboolean #foreign "gl" "isEnabled" ---$/
+lineWidth      /usr/share/onyx/core/js/webgl.onyx      /^lineWidth                      :: proc (width: GLfloat) #foreign "gl" "lineWidth" ---$/
+linkProgram    /usr/share/onyx/core/js/webgl.onyx      /^linkProgram                    :: proc (program: GLProgram) #foreign "gl" "linkProgram" ---$/
+link_program   src/utils/gl.onyx       /^link_program :: proc (vertex_shader: gl.GLShader, frag_shader: gl.GLShader) -> gl.GLProgram {$/
+main   src/main.onyx   /^main :: proc (args: [] cstring) {$/
+max_f32        /usr/share/onyx/core/intrinsics.onyx    /^max_f32      :: proc (lhs: f32, rhs: f32) -> f32 #intrinsic ---$/
+max_f64        /usr/share/onyx/core/intrinsics.onyx    /^max_f64      :: proc (lhs: f64, rhs: f64) -> f64 #intrinsic ---$/
+memory_copy    /usr/share/onyx/core/memory.onyx        /^memory_copy :: proc (dst_: rawptr, src_: rawptr, len: u32) {$/
+memory_grow    /usr/share/onyx/core/intrinsics.onyx    /^memory_grow  :: proc (val: i32) -> i32 #intrinsic ---$/
+memory_init    /usr/share/onyx/core/alloc.onyx /^memory_init :: proc {$/
+memory_size    /usr/share/onyx/core/intrinsics.onyx    /^memory_size  :: proc -> i32 #intrinsic ---$/
+min_f32        /usr/share/onyx/core/intrinsics.onyx    /^min_f32      :: proc (lhs: f32, rhs: f32) -> f32 #intrinsic ---$/
+min_f64        /usr/share/onyx/core/intrinsics.onyx    /^min_f64      :: proc (lhs: f64, rhs: f64) -> f64 #intrinsic ---$/
+nearest_f32    /usr/share/onyx/core/intrinsics.onyx    /^nearest_f32  :: proc (val: f32) -> f32 #intrinsic ---$/
+nearest_f64    /usr/share/onyx/core/intrinsics.onyx    /^nearest_f64  :: proc (val: f64) -> f64 #intrinsic ---$/
+new_frame_callback     src/main.onyx   /^new_frame_callback :: proc (gs: ^GameState) #export {$/
+null   /usr/share/onyx/core/builtin.onyx       /^null :: cast(rawptr) 0;$/
+or_i32 /usr/share/onyx/core/intrinsics.onyx    /^or_i32       :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---$/
+or_i64 /usr/share/onyx/core/intrinsics.onyx    /^or_i64       :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---$/
+output_string  /usr/share/onyx/core/sys/js.onyx        /^output_string :: proc (s: string) -> u32 #foreign "host" "print_str" ---$/
+pixelStorei    /usr/share/onyx/core/js/webgl.onyx      /^pixelStorei                    :: proc (pname: GLenum, param: GLenum) #foreign "gl" "pixelStorei" ---$/
+poll   src/events.onyx /^poll :: proc (ev: ^Event) -> bool {$/
+poll_events    src/main.onyx   /^poll_events :: proc (use gs: ^GameState) {$/
+polygonOffset  /usr/share/onyx/core/js/webgl.onyx      /^polygonOffset                  :: proc (factor: GLfloat, units: GLfloat) #foreign "gl" "polygonOffset" ---$/
+popcnt_i32     /usr/share/onyx/core/intrinsics.onyx    /^popcnt_i32   :: proc (val: i32) -> i32 #intrinsic ---$/
+popcnt_i64     /usr/share/onyx/core/intrinsics.onyx    /^popcnt_i64   :: proc (val: i64) -> i64 #intrinsic ---$/
+print  /usr/share/onyx/core/stdio.onyx /^print :: proc #overloaded {$/
+printProgramInfoLog    /usr/share/onyx/core/js/webgl.onyx      /^printProgramInfoLog            :: proc (program: GLProgram) #foreign "gl" "printProgramInfoLog" ---$/
+printShaderInfoLog     /usr/share/onyx/core/js/webgl.onyx      /^printShaderInfoLog             :: proc (shader: GLShader) #foreign "gl" "printShaderInfoLog" ---$/
+print_array    /usr/share/onyx/core/stdio.onyx /^print_array :: proc (arr: $T, sep := " ") {$/
+print_bool     /usr/share/onyx/core/stdio.onyx /^print_bool    :: proc (b: bool) do string_builder_append(^print_buffer, b);$/
+print_buffer   /usr/share/onyx/core/stdio.onyx /^print_buffer : StringBuilder;$/
+print_buffer_flush     /usr/share/onyx/core/stdio.onyx /^print_buffer_flush :: proc {$/
+print_cstring  /usr/share/onyx/core/stdio.onyx /^print_cstring :: proc (s: cstring) do string_builder_append(^print_buffer, s);$/
+print_i32      /usr/share/onyx/core/stdio.onyx /^print_i32     :: proc (n: i32, base := 10)  do string_builder_append(^print_buffer, cast(i64) n, cast(u64) base);$/
+print_i64      /usr/share/onyx/core/stdio.onyx /^print_i64     :: proc (n: i64, base := 10l) do string_builder_append(^print_buffer, n, base);$/
+print_ptr      /usr/share/onyx/core/stdio.onyx /^print_ptr     :: proc (p: ^void) do string_builder_append(^print_buffer, cast(i64) p, 16l);$/
+print_range    /usr/share/onyx/core/stdio.onyx /^print_range :: proc (r: range, sep := " ") {$/
+print_string   /usr/share/onyx/core/stdio.onyx /^print_string  :: proc (s: string) {$/
+ptrmap_clear   /usr/share/onyx/core/ptrmap.onyx        /^ptrmap_clear :: proc (use pmap: ^PtrMap) {$/
+ptrmap_delete  /usr/share/onyx/core/ptrmap.onyx        /^ptrmap_delete :: proc (use pmap: ^PtrMap, key: rawptr) {$/
+ptrmap_free    /usr/share/onyx/core/ptrmap.onyx        /^ptrmap_free :: proc (use pmap: ^PtrMap) {$/
+ptrmap_get     /usr/share/onyx/core/ptrmap.onyx        /^ptrmap_get :: proc (use pmap: ^PtrMap, key: rawptr) -> rawptr {$/
+ptrmap_has     /usr/share/onyx/core/ptrmap.onyx        /^ptrmap_has :: proc (use pmap: ^PtrMap, key: rawptr) -> bool {$/
+ptrmap_init    /usr/share/onyx/core/ptrmap.onyx        /^ptrmap_init :: proc (use pmap: ^PtrMap, hash_count: i32 = 16) {$/
+ptrmap_lookup  /usr/share/onyx/core/ptrmap.onyx        /^ptrmap_lookup :: proc (use pmap: ^PtrMap, key: rawptr) -> PtrMapLookupResult {$/
+ptrmap_put     /usr/share/onyx/core/ptrmap.onyx        /^ptrmap_put :: proc (use pmap: ^PtrMap, key: rawptr, value: rawptr) {$/
+quad_rebuffer_data     src/gfx/quad_renderer.onyx      /^quad_rebuffer_data :: proc (use qr: ^QuadRenderer) {$/
+quad_renderer_draw     src/gfx/quad_renderer.onyx      /^quad_renderer_draw :: proc (use qr: ^QuadRenderer) {$/
+quad_renderer_init     src/gfx/quad_renderer.onyx      /^quad_renderer_init :: proc (use qr: ^QuadRenderer, initial_quads := 10) {$/
+quad_update_at_index   src/gfx/quad_renderer.onyx      /^quad_update_at_index :: proc (use qr: ^QuadRenderer, idx: i32, quad: Quad) {$/
+random /usr/share/onyx/core/random.onyx        /^random :: proc (s := ^seed) -> u32 {$/
+random_between /usr/share/onyx/core/random.onyx        /^random_between :: proc (lo: i32, hi: i32) -> i32 do return random() % (hi + 1 - lo) + lo;$/
+random_float   /usr/share/onyx/core/random.onyx        /^random_float :: proc (lo := 0.0f, hi := 1.0f) -> f32 {$/
+random_seed    /usr/share/onyx/core/random.onyx        /^random_seed :: proc (s: u32) do seed = s;$/
+range  /usr/share/onyx/core/builtin.onyx       /^range :: struct {$/
+readBuffer     /usr/share/onyx/core/js/webgl.onyx      /^readBuffer                     :: proc (src: GLenum) #foreign "gl" "readBuffer" ---$/
+readPixels     /usr/share/onyx/core/js/webgl.onyx      /^readPixels                     :: proc (x: GLint, y: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, pixels: string) #foreign "gl" "readPixels" ---$/
+renderbufferStorageMultisample /usr/share/onyx/core/js/webgl.onyx      /^renderbufferStorageMultisample :: proc (target: GLenum, samples: GLsizei, internalforamt: GLenum, width: GLsizei, height: GLsizei) #foreign "gl" "renderbufferStorageMultisample" ---$/
+resize /usr/share/onyx/core/builtin.onyx       /^resize :: proc (use a: Allocator, ptr: rawptr, size: u32) -> rawptr {$/
+rotl_i32       /usr/share/onyx/core/intrinsics.onyx    /^rotl_i32     :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---$/
+rotl_i64       /usr/share/onyx/core/intrinsics.onyx    /^rotl_i64     :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---$/
+rotr_i32       /usr/share/onyx/core/intrinsics.onyx    /^rotr_i32     :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---$/
+rotr_i64       /usr/share/onyx/core/intrinsics.onyx    /^rotr_i64     :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---$/
+sampleCoverage /usr/share/onyx/core/js/webgl.onyx      /^sampleCoverage                 :: proc (value: GLclampf, invert: GLboolean) #foreign "gl" "sampleCoverage" ---$/
+sar_i32        /usr/share/onyx/core/intrinsics.onyx    /^sar_i32      :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---$/
+sar_i64        /usr/share/onyx/core/intrinsics.onyx    /^sar_i64      :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---$/
+scissor        /usr/share/onyx/core/js/webgl.onyx      /^scissor                        :: proc (x: GLint, y: GLint, width: GLsizei, height: GLsizei) #foreign "gl" "scissor" ---$/
+scratch_alloc_init     /usr/share/onyx/core/alloc.onyx /^scratch_alloc_init :: proc (a: ^Allocator, ss: ^ScratchState) {$/
+scratch_alloc_proc     /usr/share/onyx/core/alloc.onyx /^scratch_alloc_proc :: proc (data: rawptr, aa: AllocAction, size: u32, align: u32, oldptr: rawptr) -> rawptr {$/
+scratch_state_init     /usr/share/onyx/core/alloc.onyx /^scratch_state_init :: proc (use ss: ^ScratchState, buffer: rawptr, length: u32) {$/
+seed   /usr/share/onyx/core/random.onyx        /^seed := 8675309$/
+shaderSource   /usr/share/onyx/core/js/webgl.onyx      /^shaderSource                   :: proc (shader: GLShader, source: string) #foreign "gl" "shaderSource" ---$/
+shl_i32        /usr/share/onyx/core/intrinsics.onyx    /^shl_i32      :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---$/
+shl_i64        /usr/share/onyx/core/intrinsics.onyx    /^shl_i64      :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---$/
+sin    /usr/share/onyx/core/math.onyx  /^sin :: proc (t_: f32) -> f32 {$/
+slr_i32        /usr/share/onyx/core/intrinsics.onyx    /^slr_i32      :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---$/
+slr_i64        /usr/share/onyx/core/intrinsics.onyx    /^slr_i64      :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---$/
+sqrt_f32       /usr/share/onyx/core/intrinsics.onyx    /^sqrt_f32     :: proc (val: f32) -> f32 #intrinsic ---$/
+sqrt_f64       /usr/share/onyx/core/intrinsics.onyx    /^sqrt_f64     :: proc (val: f64) -> f64 #intrinsic ---$/
+stdio_init     /usr/share/onyx/core/stdio.onyx /^stdio_init :: proc {$/
+stencilFunc    /usr/share/onyx/core/js/webgl.onyx      /^stencilFunc                    :: proc (func: GLenum, ref: GLint, mask: GLuint) #foreign "gl" "stencilFunc" ---$/
+stencilFuncSeparate    /usr/share/onyx/core/js/webgl.onyx      /^stencilFuncSeparate            :: proc (face: GLenum, func: GLenum, ref: GLint, mask: GLuint) #foreign "gl" "stencilFuncSeparate" ---$/
+stencilMask    /usr/share/onyx/core/js/webgl.onyx      /^stencilMask                    :: proc (mask: GLuint) #foreign "gl" "stencilMask" ---$/
+stencilMaskSeparate    /usr/share/onyx/core/js/webgl.onyx      /^stencilMaskSeparate            :: proc (face: GLenum, mask: GLenum) #foreign "gl" "stencilMaskSeparate" ---$/
+stencilOp      /usr/share/onyx/core/js/webgl.onyx      /^stencilOp                      :: proc (fail: GLenum, zfail: GLenum, zpass: GLenum) #foreign "gl" "stencilOp" ---$/
+stencilOpSeparate      /usr/share/onyx/core/js/webgl.onyx      /^stencilOpSeparate              :: proc (face: GLenum, fail: GLenum, zfail: GLenum, zpass: GLenum) #foreign "gl" "stencilOpSeparate" ---$/
+string /usr/share/onyx/core/builtin.onyx       /^string  :: #type []u8;$/
+string_advance_line    /usr/share/onyx/core/string.onyx        /^string_advance_line :: proc (str: ^string) {$/
+string_builder_add_bool        /usr/share/onyx/core/string.onyx        /^string_builder_add_bool :: proc (use sb: ^StringBuilder, b: bool) -> ^StringBuilder {$/
+string_builder_add_cstring     /usr/share/onyx/core/string.onyx        /^string_builder_add_cstring :: proc (use sb: ^StringBuilder, cstr: cstring) -> ^StringBuilder {$/
+string_builder_add_i64 /usr/share/onyx/core/string.onyx        /^string_builder_add_i64 :: proc (use sb: ^StringBuilder, n: i64, base := 10l) -> ^StringBuilder {$/
+string_builder_add_string      /usr/share/onyx/core/string.onyx        /^string_builder_add_string :: proc (use sb: ^StringBuilder, str: string) -> ^StringBuilder {$/
+string_builder_append  /usr/share/onyx/core/string.onyx        /^string_builder_append :: proc #overloaded {$/
+string_builder_clear   /usr/share/onyx/core/string.onyx        /^string_builder_clear :: proc (use sb: ^StringBuilder) -> ^StringBuilder {$/
+string_builder_make    /usr/share/onyx/core/string.onyx        /^string_builder_make :: proc (initial_cap: u32) -> StringBuilder {$/
+string_builder_to_string       /usr/share/onyx/core/string.onyx        /^string_builder_to_string :: proc (use sb: ^StringBuilder) -> string {$/
+string_concat  /usr/share/onyx/core/string.onyx        /^string_concat :: proc (s1: string, s2: string) -> string {$/
+string_contains        /usr/share/onyx/core/string.onyx        /^string_contains :: proc (str: string, c: u8) -> bool {$/
+string_free    /usr/share/onyx/core/string.onyx        /^string_free :: proc (s: string) do cfree(s.data);$/
+string_length  /usr/share/onyx/core/string.onyx        /^string_length :: proc #overloaded {$/
+string_make    /usr/share/onyx/core/string.onyx        /^string_make :: proc #overloaded { string_make_from_cstring }$/
+string_make_from_cstring       /usr/share/onyx/core/string.onyx        /^string_make_from_cstring :: proc (s: cstring) -> string {$/
+string_read    /usr/share/onyx/core/string.onyx        /^string_read :: proc #overloaded {$/
+string_read_char       /usr/share/onyx/core/string.onyx        /^string_read_char :: proc (str: ^string, out: ^u8) {$/
+string_read_line       /usr/share/onyx/core/string.onyx        /^string_read_line :: proc (str: ^string, out: ^string) {$/
+string_read_u32        /usr/share/onyx/core/string.onyx        /^string_read_u32 :: proc (str: ^string, out: ^u32) {$/
+string_split   /usr/share/onyx/core/string.onyx        /^string_split :: proc (str: string, delim: u8) -> []string {$/
+string_strip_leading_whitespace        /usr/share/onyx/core/string.onyx        /^string_strip_leading_whitespace :: proc (str: ^string) {$/
+string_strip_trailing_whitespace       /usr/share/onyx/core/string.onyx        /^string_strip_trailing_whitespace :: proc (str: ^string) {$/
+string_substr  /usr/share/onyx/core/string.onyx        /^string_substr :: proc (str: string, sub: string) -> string {$/
+texImage2D     /usr/share/onyx/core/js/webgl.onyx      /^texImage2D                     :: proc (target: GLenum, level: GLint, internalFormat: GLenum, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type: GLenum, pixels: string) #foreign "gl" "texImage2D" ---$/
+texParameterf  /usr/share/onyx/core/js/webgl.onyx      /^texParameterf                  :: proc (target: GLenum, pname: GLenum, param: GLfloat) #foreign "gl" "texParameterf" ---$/
+texParameteri  /usr/share/onyx/core/js/webgl.onyx      /^texParameteri                  :: proc (target: GLenum, pname: GLenum, param: GLint) #foreign "gl" "texParameteri" ---$/
+texSubImage2D  /usr/share/onyx/core/js/webgl.onyx      /^texSubImage2D                  :: proc (target: GLenum, level: GLint, xoff: GLint, yoff: GLint, width: GLsizei, height: GLsizei, format: GLenum, type: GLenum, pixels: string) #foreign "gl" "texSubImage2D" ---$/
+trunc_f32      /usr/share/onyx/core/intrinsics.onyx    /^trunc_f32    :: proc (val: f32) -> f32 #intrinsic ---$/
+trunc_f64      /usr/share/onyx/core/intrinsics.onyx    /^trunc_f64    :: proc (val: f64) -> f64 #intrinsic ---$/
+uniform1f      /usr/share/onyx/core/js/webgl.onyx      /^uniform1f                      :: proc (loc: GLUniformLocation, x: GLfloat) #foreign "gl" "uniform1f" ---$/
+uniform1i      /usr/share/onyx/core/js/webgl.onyx      /^uniform1i                      :: proc (loc: GLUniformLocation, x: GLint) #foreign "gl" "uniform1i" ---$/
+uniform2f      /usr/share/onyx/core/js/webgl.onyx      /^uniform2f                      :: proc (loc: GLUniformLocation, x: GLfloat, y: GLfloat) #foreign "gl" "uniform2f" ---$/
+uniform2i      /usr/share/onyx/core/js/webgl.onyx      /^uniform2i                      :: proc (loc: GLUniformLocation, x: GLint, y: GLint) #foreign "gl" "uniform2i" ---$/
+uniform3f      /usr/share/onyx/core/js/webgl.onyx      /^uniform3f                      :: proc (loc: GLUniformLocation, x: GLfloat, y: GLfloat, z: GLfloat) #foreign "gl" "uniform3f" ---$/
+uniform3i      /usr/share/onyx/core/js/webgl.onyx      /^uniform3i                      :: proc (loc: GLUniformLocation, x: GLint, y: GLint, z: GLint) #foreign "gl" "uniform3i" ---$/
+uniform4f      /usr/share/onyx/core/js/webgl.onyx      /^uniform4f                      :: proc (loc: GLUniformLocation, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat) #foreign "gl" "uniform4f" ---$/
+uniform4i      /usr/share/onyx/core/js/webgl.onyx      /^uniform4i                      :: proc (loc: GLUniformLocation, x: GLint, y: GLint, z: GLint, w: GLint) #foreign "gl" "uniform4i" ---$/
+uniformMatrix2 /usr/share/onyx/core/js/webgl.onyx      /^uniformMatrix2                 :: proc (loc: GLUniformLocation, transpose: GLboolean, value: GLMat2) #foreign "gl" "uniformMatrix2" ---$/
+uniformMatrix3 /usr/share/onyx/core/js/webgl.onyx      /^uniformMatrix3                 :: proc (loc: GLUniformLocation, transpose: GLboolean, value: GLMat3) #foreign "gl" "uniformMatrix3" ---$/
+uniformMatrix4 /usr/share/onyx/core/js/webgl.onyx      /^uniformMatrix4                 :: proc (loc: GLUniformLocation, transpose: GLboolean, value: GLMat4) #foreign "gl" "uniformMatrix4" ---$/
+update src/main.onyx   /^update :: proc (use gs: ^GameState) {$/
+useProgram     /usr/share/onyx/core/js/webgl.onyx      /^useProgram                     :: proc (program: GLProgram) #foreign "gl" "useProgram" ---$/
+validateProgram        /usr/share/onyx/core/js/webgl.onyx      /^validateProgram                :: proc (program: GLProgram) #foreign "gl" "validateProgram" ---$/
+vertexAttrib1f /usr/share/onyx/core/js/webgl.onyx      /^vertexAttrib1f                 :: proc (idx: GLuint, x: GLfloat) #foreign "gl" "vertexAttrib1f" ---$/
+vertexAttrib2f /usr/share/onyx/core/js/webgl.onyx      /^vertexAttrib2f                 :: proc (idx: GLuint, x: GLfloat, y: GLfloat) #foreign "gl" "vertexAttrib2f" ---$/
+vertexAttrib3f /usr/share/onyx/core/js/webgl.onyx      /^vertexAttrib3f                 :: proc (idx: GLuint, x: GLfloat, y: GLfloat, z: GLfloat) #foreign "gl" "vertexAttrib3f" ---$/
+vertexAttrib4f /usr/share/onyx/core/js/webgl.onyx      /^vertexAttrib4f                 :: proc (idx: GLuint, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat) #foreign "gl" "vertexAttrib4f" ---$/
+vertexAttribDivisor    /usr/share/onyx/core/js/webgl.onyx      /^vertexAttribDivisor            :: proc (idx: GLuint, divisor: GLuint) #foreign "gl" "vertexAttribDivisor" ---$/
+vertexAttribPointer    /usr/share/onyx/core/js/webgl.onyx      /^vertexAttribPointer            :: proc (idx: GLuint, size: GLint, type: GLenum, normalized: GLboolean, stride: GLsizei, offset: GLint) #foreign "gl" "vertexAttribPointer" ---$/
+viewport       /usr/share/onyx/core/js/webgl.onyx      /^viewport                       :: proc (x: GLint, y: GLint, width: GLsizei, height: GLsizei) #foreign "gl" "viewport" ---      $/
+xor_i32        /usr/share/onyx/core/intrinsics.onyx    /^xor_i32      :: proc (lhs: i32, rhs: i32) -> i32 #intrinsic ---$/
+xor_i64        /usr/share/onyx/core/intrinsics.onyx    /^xor_i64      :: proc (lhs: i64, rhs: i64) -> i64 #intrinsic ---$/
diff --git a/webgl.js b/webgl.js
deleted file mode 100644 (file)
index 1199e89..0000000
--- a/webgl.js
+++ /dev/null
@@ -1,280 +0,0 @@
-WebGl_Wasm = {
-    init(name, namelen) {
-        const decoder = new TextDecoder();
-        const str = new Uint8Array(WASM_MEMORY.buffer, name, namelen);
-        const canvasname = decoder.decode(str);
-
-        this.programs = [];
-        this.shaders = [];
-        this.buffers = [];
-        this.framebuffers = [];
-        this.renderbuffers = [];
-        this.textures = [];
-        this.uniformlocs = [];
-        this.vertexArrays = [];
-
-        this.canvas = document.getElementById(canvasname);
-        if (this.canvas == null) return 0;
-
-        this.gl = this.canvas.getContext("webgl2");
-        if (this.gl == null) return 0;
-
-        return 1;
-    },
-
-    activeTexture(texture) { this.gl.activeTexture(texture); },
-    attachShader(program, shader) { this.gl.attachShader(this.programs[program], this.shaders[shader]); return this.programs[program]; },
-    bindAttribLocation(program, index, name, namelen) { console.log("NOT IMPLEMENTED!"); },
-    bindBuffer(target, buffer) {
-        if (buffer == -1) {
-            this.gl.bindBuffer(target, null);
-        } else {
-            this.gl.bindBuffer(target, this.buffers[buffer]);
-        }
-    },
-    bindFramebuffer(target, framebuffer) { this.gl.bindFramebuffer(target, this.framebuffers[framebuffer]); },
-    bindRenderbuffer(target, renderbuffer) { this.gl.bindRenderbuffer(target, this.renderbuffers[renderbuffer]); },
-    bindTexture(target, texture) { this.gl.bindTexture(target, this.textures[texture]); },
-    bindVertexArray(vertexArray) { this.gl.bindVertexArray(this.vertexArrays[vertexArray]); },
-
-    blendColor(red, green, blue, alpha) { this.gl.blendColor(red, green, blue, alpha); },
-    blendEquation(mode) { this.gl.blendEquation(mode); },
-    blendEquationSeparate(modeRGB, modeAlpha) { this.gl.blendEquationSeparate(modeRGB, modeAlpha); },
-    blendFunc(sfactor, dfactor) { this.gl.blendFunc(sfactor, dfactor); },
-    blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha) { this.gl.blendFuncSeparate(srcRGB, dstRGB, srcAlpha, dstAlpha); },
-
-    blitFramebuffer(sx0, sy0, sx1, sy1, dx0, dy0, dx1, dy1, mask, filter) {
-        this.gl.blitFramebuffer(sx0, sy0, sx1, sy1, dx0, dy0, dx1, dy1, mask, filter);
-    },
-
-    bufferDataWithData(target, bufferdata, bufferlen, usage) {
-        const data = new DataView(WASM_MEMORY.buffer, bufferdata, bufferlen);
-        this.gl.bufferData(target, data, usage);
-    },
-
-    bufferDataNoData(target, size, usage) { this.gl.bufferData(target, size, usage); },
-    bufferSubData(target, offset, bufferdata, bufferlen) {
-        const data = new DataView(WASM_MEMORY.buffer, bufferdata, bufferlen);
-        this.gl.bufferSubData(target, offset, data);
-    },
-    checkFrameBufferStatus(target) { return this.gl.checkFrameBufferStatus(target); },
-    clear(bit) { this.gl.clear(bit); },
-    clearColor(r, g, b, a) { this.gl.clearColor(r, g, b, a); },
-    clearDepth(depth) { this.gl.clearDepth(depth); },
-    clearStencil(stencil) { this.gl.clearStencil(stencil); },
-    colorMask(r, g, b, a) { this.gl.colorMask(r, g, b, a); },
-    compileShader(shader) { this.gl.compileShader(this.shaders[shader]); },
-    compressedTexImage2D(target, level, internalformat, width, height, border, data, datalen) {
-        const pixels = new DataView(WASM_MEMORY.buffer, data, datalen);
-        this.gl.compressedTexImage2D(target, level, internalformat, width, height, border, pixels);
-    },
-    compressedTexSubImage2D(target, level, internalformat, xoff, yoff, width, height, format, data, datalen) {
-        const pixels = new DataView(WASM_MEMORY.buffer, data, datalen);
-        this.gl.compressedSubTexImage2D(target, level, internalformat, xoff, yoff, width, height, format, pixels);
-    },
-    copyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size) { this.gl.copyBufferSubData(readTarget, writeTarget, readOffset, writeOffset, size); },
-    copyTexImage2D(target, level, internalforamt, x, y, width, height, border) {
-        this.gl.copyTexImage2D(target, level, internalforamt, x, y, width, height, border);
-    },
-    copyTexSubImage2D(target, level, xoff, yoff, x, y, width, height) {
-        this.gl.copyTexSubImage2D(target, level, xoff, yoff, x, y, width, height);
-    },
-    createBuffer() {
-        const buf = this.gl.createBuffer();
-        if (buf == null) return -1;
-
-        this.buffers.push(buf);
-        return this.buffers.length - 1;
-    },
-    createFramebuffer() {
-        const buf = this.gl.createFramebuffer();
-        if (buf == null) return -1;
-
-        this.framebuffers.push(buf);
-        return this.framebuffers.length - 1;
-    },
-    createProgram() {
-        const prog = this.gl.createProgram();
-        if (prog == null) return -1;
-
-        this.programs.push(prog);
-        return this.programs.length - 1;
-    },
-    createRenderbuffer() {
-        const buf = this.gl.createRenderbuffer();
-        if (buf == null) return -1;
-
-        this.renderbuffers.push(buf);
-        return this.renderbuffers.length - 1;
-    },
-    createShader(type) {
-        const shader = this.gl.createShader(type);
-        if (shader == null) return -1;
-
-        this.shaders.push(shader);
-        return this.shaders.length - 1;
-    },
-    createTexture() {
-        const texture = this.gl.createTexture();
-        if (texture == null) return -1;
-
-        this.textures.push(texture);
-        return this.textures.length - 1;
-    },
-    createVertexArray() {
-        const vao = this.gl.createVertexArray();
-        if (vao == null) return -1;
-
-        this.vertexArrays.push(vao);
-        return this.vertexArrays.length - 1;
-    },
-    cullFace(mode) { this.gl.cullFace(mode); },
-    deleteBuffer(buffer) { this.gl.deleteBuffer(this.buffers[buffer]); },
-    deleteFramebuffer(framebuffer) { this.gl.deleteFramebuffer(this.framebuffers[framebuffer]); },
-    deleteProgram(program) { this.gl.deleteProgram(this.programs[program]); },
-    deleteRenderbuffer(renderbuffer) { this.gl.deleteRenderbuffer(this.renderbuffers[renderbuffer]); },
-    deleteShader(shader) { this.gl.deleteShader(this.shaders[shader]); },
-    deleteTexture(texture) { this.gl.deleteTexture(this.textures[texture]); },
-    deleteVertexArray(vertexArray) { this.gl.deleteVertexArray(this.vertexArrays[vertexArray]); },
-    depthFunc(func) { this.gl.depthFunc(func); },
-    depthMask(flag) { this.gl.depthMask(flag); },
-    depthRange(znear, zfar) { this.gl.depthRange(znear, zfar); },
-    detachShader(program, shader) { this.gl.detachShader(this.programs[program], this.shaders[shader]); },
-    disable(cap) { this.gl.disable(cap); },
-    disableVertexAttribArray(index) { this.gl.disableVertexAttribArray(index); },
-    drawArrays(mode, first, count) { this.gl.drawArrays(mode, first, count); },
-    drawArraysInstanced(mode, first, count, instanceCount) { this.gl.drawArraysInstanced(mode, first, count, instanceCount); },
-    drawElements(mode, count, type, offset) { this.gl.drawElements(mode, count, type, offset); },
-    drawElementsInstanced(mode, count, type, offset, instanceCount) { this.gl.drawElementsInstanced(mode, count, type, offset, instanceCount); },
-    enable(cap) { this.gl.enable(cap); },
-    enableVertexAttribArray(index) { this.gl.enableVertexAttribArray(index); },
-    finish() { this.gl.finish(); },
-    flush() { this.gl.flush(); },
-    framebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer) {
-        this.gl.framebufferRenderbuffer(target, attachment, renderbuffertarget, this.renderbuffers[renderbuffer]);
-    },
-    framebufferTexture2D(target, attachment, texttarget, texture, level) {
-        this.gl.framebufferTexture2D(target, attachment, texttarget, this.textures[texture], level);
-    },
-    framebufferTextureLayer(target, attachment, texture, level, layer) { this.gl.framebufferTextureLayer(target, attachment, this.textures[texture], level, layer); },
-    frontFace(mode) { this.gl.frontFace(mode); },
-    generateMipmap(target) { this.gl.generateMipmap(target); },
-    getActiveAttrib(program, index, out) {
-        const loc = this.gl.getActiveAttrib(this.programs[program], index);
-        const data = new Int32Array(WASM_MEMORY.buffer, out, 2);
-        data[0] = loc.size;
-        data[1] = loc.type;
-    },
-    getActiveUniform(program, index, out) {
-        const loc = this.gl.getActiveUniform(this.programs[program], index);
-        const data = new Int32Array(WASM_MEMORY.buffer, out, 2);
-        data[0] = loc.size;
-        data[1] = loc.type;
-    },
-    // getAttachedShaders() { console.log("NOT IMPLEMENTED!"); },
-    getAttribLocation(program, name, namelen) {
-        const decoder = new TextDecoder();
-        const str = new Uint8Array(WASM_MEMORY.buffer, name, namelen);
-        const attribname = decoder.decode(str);
-
-        return this.gl.getAttribLocation(this.programs[program], attribname);
-    },
-    // getBufferParameter() { console.log("NOT IMPLEMENTED!"); },
-    getBufferSubData(target, srcbyteoffset, dstbufferdata, dstbufferlen, dstoffset, length) {
-        const dst = new DataView(WASM_MEMORY.buffer, dstbufferdata, dstbufferlen);
-        this.gl.getBufferSubData(target, srcbyteoffset, dst, dstoffset, length);
-    },
-    getError() { return this.gl.getError(); },
-    getInternalformatParameter(target, internalformat, pname) { return this.gl.getInternalformatParameter(target, internalformat, pname); },
-    // many of the 'gets() { console.log("NOT IMPLEMENTED!"); },
-    getShaderParameter(shader, param) { return this.gl.getShaderParameter(this.shaders[shader], param); },
-    getProgramParameter(program, param) { return this.gl.getProgramParameter(this.programs[program], param); },
-    getUniformLocation(program, name, namelen) {
-        const decoder = new TextDecoder();
-        const str = new Int8Array(WASM_MEMORY.buffer, name, namelen);
-        const uniname = decoder.decode(str);
-
-        this.uniformlocs.push(this.gl.getUniformLocation(this.programs[program], uniname));
-        return this.uniformlocs.length - 1;
-    },
-    getVertexAttribOffset(index, pname) { return this.gl.getVertexAttribOffset(index, pname); },
-    hint(target, mode) { this.gl.hint(target, mode); },
-    isEnabled(cap) { return this.gl.isEnabled(cap); },
-    invalidateFramebuffer(target, attachdata, attachlen) {
-        const attachments = new Int32Array(WASM_MEMORY.buffer, attachdata, attachlen);
-        this.gl.invalidateFramebuffer(target, attacements);
-    },
-    invalidateSubFramebuffer(target, attachdata, attachlen, x, y, width, height) {
-        const attachments = new Int32Array(WASM_MEMORY.buffer, attachdata, attachlen);
-        this.gl.invalidateFramebuffer(target, attacements, x, y, width, height);
-    },
-    lineWidth(width) { this.gl.lineWidth(width); },
-    linkProgram(program) { this.gl.linkProgram(this.programs[program]); },
-    pixelStorei(pname, param) { this.gl.pixelStorei(pname, param); },
-    polygonOffset(factor, units) { this.gl.polygonOffset(factor, units); },
-    printProgramInfoLog(program) { console.log(this.gl.getProgramInfoLog(this.programs[program])); },
-    printShaderInfoLog(shader) { console.log(this.gl.getShaderInfoLog(this.shaders[shader])); },
-    readPixels(x, y, width, height, format, type, pixels, pixelslen) {
-        const pixeldata = new Uint8Array(WASM_MEMORY.buffer, pixels, pixelslen);
-        this.gl.readPixels(x, y, width, height, format, type, pixeldata);
-    },
-    readBuffer(src) { this.gl.readBuffer(src); },
-    renderbufferStorageMultisample(target, samples, internalforamt, width, height) {
-        this.gl.renderbufferStorageMultisample(target, samples, internalforamt, width, height);
-    },
-    sampleCoverage(value, invert) { this.gl.sampleCoverage(value, invert); },
-    scissor(x, y, width, height) { this.gl.scissor(x, y, width, height); },
-    shaderSource(shader, source, sourcelen) {
-        const decoder = new TextDecoder();
-        const str = new Int8Array(WASM_MEMORY.buffer, source, sourcelen);
-        const sourcedata = decoder.decode(str);
-
-        this.gl.shaderSource(this.shaders[shader], sourcedata);
-    },
-    stencilFunc(func, ref, mask) { this.gl.stencilFunc(func, ref, mask); },
-    stencilFuncSeparate(face, func, ref, mask) { this.gl.stencilFuncSeparate(face, func, ref, mask); },
-    stencilMask(mask) { this.gl.stencilMask(mask); },
-    stencilMaskSeparate(face, mask) { this.gl.stencilMaskSeparate(face, mask); },
-    stencilOp(fail, zfail, mask) { this.gl.stencilOp(fail, zfail, mask); },
-    stencilOpSeparate(face, fail, zfail, zpass) { this.gl.stencilOpSeparate(face, fail, zfail, zpass); },
-    texImage2D(target, level, internalforamt, width, height, border, format, type, pixels, pixelslen) {
-        const data = new DataView(WASM_MEMORY.buffer, pixels, pixelslen);
-        this.gl.texImage2D(target, level, internalforamt, width, height, border, format, type, data);
-    },
-    texParameterf(target, pname, param) { this.gl.texParameterf(target, pname, param); },
-    texParameteri(target, pname, param) { this.gl.texParameteri(target, pname, param); },
-    texSubImage2D(target, level, xoff, yoff, width, height, format, type, pixels, pixelslen) {
-        const data = new Uint8Array(WASM_MEMORY.buffer, pixels, pixelslen);
-        this.gl.texSubImage2D(target, level, xoff, yoff, width, height, format, type, data);
-    },
-    uniform1f(loc, x) { this.gl.uniform1f(this.uniformlocs[loc], x); },
-    uniform1i(loc, x) { this.gl.uniform1i(this.uniformlocs[loc], x); },
-    uniform2f(loc, x, y) { this.gl.uniform2f(this.uniformlocs[loc], x, y); },
-    uniform2i(loc, x, y) { this.gl.uniform2i(this.uniformlocs[loc], x, y); },
-    uniform3f(loc, x, y, z) { this.gl.uniform3f(this.uniformlocs[loc], x, y, z); },
-    uniform3i(loc, x, y, z) { this.gl.uniform3i(this.uniformlocs[loc], x, y, z); },
-    uniform4f(loc, x, y, z, w) { this.gl.uniform4f(this.uniformlocs[loc], x, y, z, w); },
-    uniform4i(loc, x, y, z, w) { this.gl.uniform4i(this.uniformlocs[loc], x, y, z, w); },
-    uniformMatrix2(loc, transpose, valueptr) {
-        const data = new Float32Array(WASM_MEMORY.buffer, valueptr, 4);
-        this.gl.uniformMatrix2fv(this.uniformlocs[loc], transpose, data);
-    },
-    uniformMatrix3(loc, transpose, valueptr) {
-        const data = new Float32Array(WASM_MEMORY.buffer, valueptr, 9);
-        this.gl.uniformMatrix3fv(this.uniformlocs[loc], transpose, data);
-    },
-    uniformMatrix4(loc, transpose, valueptr) {
-        const data = new Float32Array(WASM_MEMORY.buffer, valueptr, 16);
-        this.gl.uniformMatrix4fv(this.uniformlocs[loc], transpose, data);
-    },
-    useProgram(program) { this.gl.useProgram(this.programs[program]); },
-    validateProgram(program) { this.gl.validateProgram(this.program[program]); },
-    vertexAttrib1f(idx, x) { this.gl.vertexAttrib1f(idx, x); },
-    vertexAttrib2f(idx, x, y) { this.gl.vertexAttrib2f(idx, x, y); },
-    vertexAttrib3f(idx, x, y, z) { this.gl.vertexAttrib3f(idx, x, y, z); },
-    vertexAttrib4f(idx, x, y, z, w) { this.gl.vertexAttrib4f(idx, x, y, z, w); },
-    vertexAttribPointer(idx, size, type, normalized, stride, offset) { this.gl.vertexAttribPointer(idx, size, type, normalized, stride, offset); },
-    vertexAttribDivisor(idx, divisor) { this.gl.vertexAttribDivisor(idx, divisor); },
-    viewport(x, y, width, height) { this.gl.viewport(x, y, width, height); },
-
-};