module updates; better build files
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Sat, 14 May 2022 20:54:01 +0000 (15:54 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Sat, 14 May 2022 20:54:01 +0000 (15:54 -0500)
24 files changed:
build.bat
build.sh
core/runtime/onyx_run.onyx
core/std.onyx
core/stdio.onyx
core/string.onyx
core/string/builder.onyx [deleted file]
modules/glfw3/build.onyx
modules/glfw3/build.sh [deleted file]
modules/glfw3/onyx_glfw3.so
modules/http/headers.onyx
modules/ncurses/build.onyx
modules/ncurses/build.sh [deleted file]
modules/ncurses/ncurses.c
modules/ncurses/onyx_ncurses.so
modules/opengles/build.bat
modules/opengles/build.onyx [new file with mode: 0644]
modules/opengles/build.sh [deleted file]
modules/opengles/module.onyx
modules/opengles/onyx_opengles.c [deleted file]
modules/opengles/onyx_opengles.so
modules/opengles/opengles.c [new file with mode: 0644]
scripts/c_binding.onyx
scripts/c_library.onyx

index edb0768295448369cf89a56eaae6085b9220d62d..41d2ef9b38e6ab0d4c4bbf8f62bcc81536784450 100644 (file)
--- a/build.bat
+++ b/build.bat
@@ -22,11 +22,11 @@ del *.ilk > NUL 2> NUL
 del *.obj > NUL 2> NUL
 del misc\icon_resource.res
 
-REM Compile the onyxrun tool
+REM Compile the onyx-run tool
 set SOURCE_FILES=src/onyxrun.c src/wasm_runtime.c
 
 rc.exe misc/icon_resource.rc
-cl.exe %FLAGS% /Iinclude /std:c17 /TC %SOURCE_FILES% /link /IGNORE:4217 %LINK_OPTIONS% /DEBUG /OUT:onyxrun.exe /incremental:no /opt:ref /subsystem:console misc\icon_resource.res
+cl.exe %FLAGS% /Iinclude /std:c17 /TC %SOURCE_FILES% /link /IGNORE:4217 %LINK_OPTIONS% /DEBUG /OUT:onyx-run.exe /incremental:no /opt:ref /subsystem:console misc\icon_resource.res
 
 del *.pdb > NUL 2> NUL
 del *.ilk > NUL 2> NUL
index ae07d20b87d6c16ba9a8f441b48538c93e3946d0..ff19219b2cbceb2237b419452858ad92b914b86a 100755 (executable)
--- a/build.sh
+++ b/build.sh
@@ -62,12 +62,17 @@ if [ ! -z "$ENABLE_BUNDLING_WASMER" ]; then
     INCLUDES="$INCLUDES -I$WASMER_INCLUDE_DIR"
 
     if [ ! -f "$CORE_DIR/lib/libwasmer.so" ]; then
+        echo "Copying libwasmer to $CORE_DIR/lib (first install)"
+
         sudo mkdir -p "$CORE_DIR/lib"
+        sudo mkdir -p "$CORE_DIR/include"
 
-        echo "Copying libwasmer to $CORE_DIR/lib (first install)"
         # sudo cp "$WASMER_LIBRARY_DIR/libiwasm.so" "$CORE_DIR/lib/libiwasm.so"
         sudo cp "$WASMER_LIBRARY_DIR/libwasmer.so" "$CORE_DIR/lib/libwasmer.so"
         sudo cp "$WASMER_LIBRARY_DIR/libwasmer.a" "$CORE_DIR/lib/libwasmer.a"
+
+        sudo cp "include/onyx_library.h" "$CORE_DIR/include/onyx_library.h"
+        sudo cp "lib/common/include/wasm.h" "$CORE_DIR/include/wasm.h"
     fi
 fi
 
@@ -97,11 +102,11 @@ sudo cp ./bin/onyx "$BIN_DIR/onyx"
 
 if [ ! -z "$ENABLE_BUNDLING_WASMER" ]; then
     C_FILES="onyxrun wasm_runtime"
-    TARGET="./bin/onyxrun"
+    TARGET="./bin/onyx-run"
 
     compile
     echo "Installing onyxrun executable"
-    sudo cp ./bin/onyxrun "$BIN_DIR/onyxrun"
+    sudo cp ./bin/onyx-run "$BIN_DIR/onyx-run"
 
     $CC -shared -fpic -I include -I lib/common/include src/onyx_runtime.c -o onyx_runtime.so -lpthread
     sudo mv "./onyx_runtime.so" "$CORE_DIR/lib/onyx_runtime.so"
index 2efe952600a317fd2004cbe6845386a550b5ad13..3a25ca424aadcfbbc1660e1825e101e51fb31956 100644 (file)
@@ -6,6 +6,7 @@ use package core
 
 #local {
     __stdout: os.File;
+    __stderr: os.File;
     __stdin:  os.File;
 }
 
@@ -14,6 +15,10 @@ __output_string :: (s: str) -> u32 {
     return wrote;
 }
 
+__output_error :: (s: str) -> u32 {
+    err, wrote := io.stream_write(^__stderr, s);
+    return wrote;
+}
 
 __read_from_input :: (buffer: [] u8) -> i32 {
     err, read := io.stream_read(^__stdin, buffer);
@@ -44,6 +49,12 @@ __read_from_input :: (buffer: [] u8) -> i32 {
         .{ ^fs.__file_stream_vtable },
         .{ fd },
     };
+    
+    __file_get_standard(2, ^fd);
+    __stderr = .{
+        .{ ^fs.__file_stream_vtable },
+        .{ fd },
+    };
 
     __file_get_standard(0, ^fd);
     __stdin = .{
index 8c888b77110e4143316db330f6fa5594adbb18a1..c32ea1da46f93483afaf0384855bb6fddcd4de12 100644 (file)
@@ -19,7 +19,6 @@ package core
 #load "./hash"
 
 #load "./string"
-#load "./string/builder"
 #load "./string/reader"
 #load "./string/buffer"
 
index 7f872596f8e709e1ab242fc98364448615166b63..f859943e9260db9e970886e07d1111d87e479091 100644 (file)
@@ -29,6 +29,7 @@ println :: (x) => {
     print("\n");
 }
 
+// Standard formatted print.
 printf :: (format: str, va: ..any) {
     flush :: (_, to_output) => {
         io.write(^stdio.print_writer, to_output);
@@ -40,6 +41,20 @@ printf :: (format: str, va: ..any) {
     print(conv.format_va(buffer, format, va, .{null, flush}));
 }
 
+// Print to standard error, if available.
+#if #defined((package runtime).__output_error) {
+    eprintf :: (format: str, va: ..any) -> str {
+        flush :: (_, to_output) => {
+            (package runtime).__output_error(to_output);
+            return true;
+        }
+
+        buffer: [1024] u8;
+        print(conv.format_va(buffer, format, va, .{null, flush}));
+    }
+}
+
+// Print to a dynamically allocated string.
 aprintf :: (format: str, va: ..any) -> str {
     buffer: [8196] u8;
     out := conv.format_va(buffer, format, va);
index d9b57b318cf7c8b0ef3d2724511d64dba9ee0d14..682aa322ef9751b4b3e9889ba36b4a88b7ac95ac 100644 (file)
@@ -187,6 +187,8 @@ ends_with :: (s: str, suffix: str) -> bool {
     return true;
 }
 
+is_empty :: macro (s: str) => s.count == 0 || s.data == null;
+
 strip_whitespace :: #match {
     (s: ^str) { strip_leading_whitespace(s); strip_trailing_whitespace(s); },
     (s:  str) => s |> strip_leading_whitespace() |> strip_trailing_whitespace()
diff --git a/core/string/builder.onyx b/core/string/builder.onyx
deleted file mode 100644 (file)
index 7ff0329..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-package core.string.builder
-
-// DEPRECATED: This package is deprecated in favor of using
-// an io.DynamicStringStream with an io.Writer.
-
-#if false {
-
-#local array  :: package core.array
-#local string :: package core.string
-#local conv   :: package core.conv
-
-Builder :: struct {
-    data  : [..] u8;
-}
-
-make :: (initial_cap := 4, alloc := context.allocator) -> Builder {
-    builder : Builder;
-    array.init(^builder.data, initial_cap, allocator = alloc);
-
-    return builder;
-}
-
-clear :: (use sb: ^Builder) -> ^Builder {
-    data.count = 0;
-    return sb;
-}
-
-add_str :: (use sb: ^Builder, s: str) -> ^Builder {
-    len_total := data.count + s.count;
-
-    if data.capacity < len_total {
-        if !array.ensure_capacity(^data, len_total) do return sb;
-    }
-
-    for i: 0 .. s.count do data[data.count + i] = s[i];
-    data.count += s.count;
-    return sb;
-}
-
-add_cstr :: (use sb: ^Builder, cstring: cstr) -> ^Builder {
-    s := string.from_cstr(cstring);
-    return add_str(sb, s);
-}
-
-add_i64 :: (use sb: ^Builder, n: i64, base: u64 = 10) -> ^Builder {
-    buf : [256] u8;
-    s := conv.i64_to_str(n, base, buf[0 .. 256]);
-    return add_str(sb, s);
-}
-
-add_f64 :: (use sb: ^Builder, f: f64) -> ^Builder {
-    buf : [256] u8;
-    s := conv.f64_to_str(f, buf[0 .. 256]);
-    return add_str(sb, s);
-}
-
-add_bool :: (use sb: ^Builder, b: bool) -> ^Builder {
-    if b do return add_str(sb, "true");
-    else do return add_str(sb, "false");
-
-    return sb;
-}
-
-append :: #match {
-    add_str,
-    add_cstr,
-    add_i64,
-    add_f64,
-    add_bool,
-}
-
-to_str :: (use sb: ^Builder) -> str {
-    return str.{ data.data, data.count };
-}
-
-}
\ No newline at end of file
index 50fa0eca449fffbcb950980c0fa31eae55d6d541..fb47c85efa859bbfb4ff694dac81f7be4e3fb82c 100644 (file)
@@ -1,13 +1,18 @@
 #load "core/std"
 #load "scripts/c_binding"
+#load "scripts/c_library"
 #load "./module"
 
 use package core
 use package c_binding
 
 main :: () {
+    path := module_path(#file);
+
+    c_file_path := string.concat(path, "onyx_glfw3.c");
+
     result := build_c_binding(.{
-        output_file = "modules/glfw3/onyx_glfw3.c",
+        output_file = c_file_path,
         foreign_block = (package glfw3).foreign_block,
 
         cast_map = .[
@@ -85,4 +90,12 @@ main :: () {
     } else {
         println("Sucessfully made glfw3.c");
     }
+
+    result = compile_c_file(c_file_path, string.concat(path, "onyx_glfw3.so"), libraries=.["glfw"]);
+    if !result {
+        println("Failed to compile glfw3.c");
+        os.exit(1);
+    } else {
+        println("Successfully made onyx_glfw3.so");
+    }
 }
diff --git a/modules/glfw3/build.sh b/modules/glfw3/build.sh
deleted file mode 100755 (executable)
index b7b3886..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/bin/sh
-# To be run from the project root
-
-onyx run modules/glfw3/build --generate-foreign-info
-gcc -O2 -shared -fPIC ./modules/glfw3/onyx_glfw3.c -I include -I lib/common/include -lglfw -o modules/glfw3/onyx_glfw3.so
\ No newline at end of file
index dd2da0c0230868b6b6aae460358cbaf94a02df92..168d72232358ac5bac3318ec34ec4ec33d726648 100755 (executable)
Binary files a/modules/glfw3/onyx_glfw3.so and b/modules/glfw3/onyx_glfw3.so differ
index 6205d45ce7a524b9dd732e5e7a74e9a7ff71d1e3..2151ac55ee13c41004940f92e11bf938eecdea23 100644 (file)
@@ -8,6 +8,7 @@ HTTP_Header :: enum {
     Server;
     Accept;
     AcceptEncoding;
+    Location;
 }
 
 header_from_str :: (s: str) -> (HTTP_Header, success: bool) {
@@ -18,6 +19,7 @@ header_from_str :: (s: str) -> (HTTP_Header, success: bool) {
         case "transfer-encoding"    do return .TransferEncoding, true;
         case "accept"               do return .Accept, true;
         case "accept-encoding"      do return .AcceptEncoding, true;
+        case "location"             do return .Location, true;
         case #default do return ~~ -1, false;
     }
 }
@@ -31,6 +33,7 @@ header_from_str :: (s: str) -> (HTTP_Header, success: bool) {
         case .Server           do return "Server";
         case .Accept           do return "Accept";
         case .AcceptEncoding   do return "Accept-Encoding";
+        case .Location         do return "Location";
         case #default          do return "";
     }
 }
@@ -77,6 +80,7 @@ HTTP_Headers :: struct {
     expect: bool;
     chunked: bool;
     accept: MediaType;
+    location: str;
     custom_entries: Map(str, str);
 
     parse_header_line :: (use this: ^HTTP_Headers, line_: [] u8) -> bool {
@@ -136,6 +140,11 @@ HTTP_Headers :: struct {
                 return true;
             }
 
+            case .Location {
+                location = content |> string.strip_whitespace();
+                return true;
+            }
+
             case .Server {
                 return true;
             }
index ccdf0321caaec57314750b702e764b16ae70036b..66c540ea5dc461cc744bd731ec582240a67344e3 100644 (file)
@@ -1,13 +1,18 @@
 #load "core/std"
 #load "scripts/c_binding"
+#load "scripts/c_library"
 #load "./module"
 
 use package core
 use package c_binding
 
 main :: () {
+    path := module_path(#file);
+
+    c_file_path := string.concat(path, "ncurses.c");
+
     result := build_c_binding(.{
-        output_file = "modules/ncurses/ncurses.c",
+        output_file = c_file_path,
         foreign_block = (package ncurses).foreign_block,
 
         cast_map = .[
@@ -26,6 +31,8 @@ void __get_beg_yx(WINDOW *w, int *y, int *x) { getbegyx(w, *y, *x); }
 void __get_max_yx(WINDOW *w, int *y, int *x) { getmaxyx(w, *y, *x); }
 """
         ],
+
+        custom_implementations = .[],
     });
 
     if !result {
@@ -34,4 +41,12 @@ void __get_max_yx(WINDOW *w, int *y, int *x) { getmaxyx(w, *y, *x); }
     } else {
         println("Sucessfully made ncurses.c");
     }
+
+    result = compile_c_file(c_file_path, string.concat(path, "onyx_ncurses.so"), libraries=.["ncurses"]);
+    if !result {
+        println("Failed to compile ncurses.c");
+        os.exit(1);
+    } else {
+        println("Sucessfully made onyx_ncurses.so");
+    }
 }
\ No newline at end of file
diff --git a/modules/ncurses/build.sh b/modules/ncurses/build.sh
deleted file mode 100755 (executable)
index 2412b38..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-
-onyx run modules/ncurses/build.onyx --generate-foreign-info
-gcc -shared -fPIC -I include -I lib/common/include -O2 modules/ncurses/ncurses.c -o modules/ncurses/onyx_ncurses.so -lncurses
index 275ef36dd96f5be907f1ec472cc010c28b19c009..efc67a629ca2dfb639f21fd63de03a4e802baa63 100644 (file)
@@ -1,3 +1,6 @@
+//
+// THIS FILE WAS AUTOMATICALLY GENERATED.
+//
 
 #include "ncurses.h"
 
index 3ba7d3cf6961855261e7c7b45640a28b4ee6317f..b92ce9e5398b5916f5f159cf3b4a9c999c79cb02 100755 (executable)
Binary files a/modules/ncurses/onyx_ncurses.so and b/modules/ncurses/onyx_ncurses.so differ
index 376637693f6524c2d2788c419b773d363bfeb29d..d1a8d4fdb565284f66d6d3ab25dc05d3e3e675fb 100644 (file)
@@ -2,7 +2,7 @@
 
 call "tools\dev.bat"
 
-cl /MT /std:c17 /TC /I include /I lib/common/include /IC:\dev\heartbreak\lib\common\include /D_USRDLL /D_WINDLL modules\opengles\onyx_opengles.c /link opengl32.lib ws2_32.lib Advapi32.lib userenv.lib bcrypt.lib  libcmt.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib /DLL /OUT:onyx_opengles.dll
+cl /MT /std:c17 /TC /I include /I lib/common/include /IC:\dev\heartbreak\lib\common\include /D_USRDLL /D_WINDLL modules\opengles\opengles.c /link opengl32.lib ws2_32.lib Advapi32.lib userenv.lib bcrypt.lib  libcmt.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrtd.lib /DLL /OUT:onyx_opengles.dll
 
 del onyx_opengles.obj
 del onyx_opengles.lib
diff --git a/modules/opengles/build.onyx b/modules/opengles/build.onyx
new file mode 100644 (file)
index 0000000..39d26b5
--- /dev/null
@@ -0,0 +1,54 @@
+#load "core/std"
+#load "scripts/c_binding"
+#load "scripts/c_library"
+#load "./module"
+
+use package core
+use package c_binding
+
+main :: () {
+    path := module_path(#file);
+
+    c_file_path := string.concat(path, "opengles.c");
+
+    result := build_c_binding(.{
+        output_file = c_file_path,
+        foreign_block = (package opengles).foreign_block,
+
+        cast_map = .[],
+        name_map = ((name) => aprintf("glad_{}", name)),
+
+        preamble = .[
+"""
+#define GLAD_GLES2_IMPLEMENTATION
+#include "glad.h"
+"""
+        ],
+
+        custom_implementations = .[
+            .{ "glInit",
+            """
+ONYX_DEF(glInit, (LONG), ()) {
+    GLADloadfunc load_sym = (GLADloadfunc) params->data[0].of.i64;
+    gladLoadGLES2(load_sym);
+    return NULL;
+}
+            """}
+        ],
+    });
+
+    if !result {
+        println("Failed to make opengles.c");
+        os.exit(1);
+    } else {
+        println("Successfully made opengles.c");
+    }
+
+    result = compile_c_file(c_file_path, string.concat(path, "onyx_opengles.so"));
+    if !result {
+        println("Failed compile opengles.c");
+        os.exit(1);
+    } else {
+        println("Successfully made onyx_opengles.so");
+    }
+}
diff --git a/modules/opengles/build.sh b/modules/opengles/build.sh
deleted file mode 100755 (executable)
index 7702b25..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-gcc -shared -fPIC modules/opengles/onyx_opengles.c -I include -I lib/common/include -o ./modules/opengles/onyx_opengles.so
\ No newline at end of file
index 95b29a7018b64446f3997254b8e55443f26999b1..476f03e8308bf3002a27b15b0da9264590279a09 100644 (file)
@@ -2,11 +2,15 @@ package opengles
 
 use package core { cptr }
 
-#library "onyx_opengles"
+#if #defined((package runtime).Generated_Foreign_Info) {
+    foreign_block :: __foreign_block
+} else {
+    #library "onyx_opengles"
+}
 
 GLGetProcAddress :: #distinct i64 // (name: cstr) -> ^void
 
-#foreign "onyx_opengles" {
+#local __foreign_block :: #foreign "onyx_opengles" {
     // glInit MUST be called before any other GL calls, as it initializes all GL function pointers
     // using the load_function provided. Currently, the only supported library that provides this
     // is glfwGetLoadProcAddress.
@@ -83,7 +87,7 @@ GLGetProcAddress :: #distinct i64 // (name: cstr) -> ^void
     glGetShaderInfoLog :: (shader: GLuint, bufSize: GLsizei, length: ^GLsizei, infoLog: ^GLchar) -> void ---
     glGetShaderPrecisionFormat :: (shadertype: GLenum, precisiontype: GLenum, range: ^GLint, precision: ^GLint) -> void ---
     glGetShaderSource :: (shader: GLuint, bufSize: GLsizei, length: ^GLsizei, source: ^GLchar) -> void ---
-    glGetString :: (name: GLenum) -> ^GLubyte ---
+    glGetString :: (name: GLenum) -> cptr(GLubyte) ---
     glGetTexParameterfv :: (target: GLenum, pname: GLenum, params: ^GLfloat) -> void ---
     glGetTexParameteriv :: (target: GLenum, pname: GLenum, params: ^GLint) -> void ---
     glGetUniformfv :: (program: GLuint, location: GLint, params: ^GLfloat) -> void ---
@@ -217,7 +221,7 @@ GLGetProcAddress :: #distinct i64 // (name: cstr) -> ^void
     glClearBufferuiv :: (buffer: GLenum, drawbuffer: GLint, value: ^GLuint) -> void ---
     glClearBufferfv :: (buffer: GLenum, drawbuffer: GLint, value: ^GLfloat) -> void ---
     glClearBufferfi :: (buffer: GLenum, drawbuffer: GLint, depth: GLfloat, stencil: GLint) -> void ---
-    glGetStringi :: (name: GLenum, index: GLuint) -> ^GLubyte ---
+    glGetStringi :: (name: GLenum, index: GLuint) -> cptr(GLubyte) ---
     glCopyBufferSubData :: (readTarget: GLenum, writeTarget: GLenum, readOffset: GLintptr, writeOffset: GLintptr, size: GLsizeiptr) -> void ---
     glGetUniformIndices :: (program: GLuint, uniformCount: GLsizei, uniformNames: ^cptr(GLchar), uniformIndices: ^GLuint) -> void ---
     glGetActiveUniformsiv :: (program: GLuint, uniformCount: GLsizei, uniformIndices: ^GLuint, pname: GLenum, params: ^GLint) -> void ---
@@ -227,13 +231,13 @@ GLGetProcAddress :: #distinct i64 // (name: cstr) -> ^void
     glUniformBlockBinding :: (program: GLuint, uniformBlockIndex: GLuint, uniformBlockBinding: GLuint) -> void ---
     glDrawArraysInstanced :: (mode: GLenum, first: GLint, count: GLsizei, instancecount: GLsizei) -> void ---
     glDrawElementsInstanced :: (mode: GLenum, count: GLsizei, type: GLenum, indices: rawptr, instancecount: GLsizei) -> void ---
-    glFenceSync :: (condition: GLenum, flags: GLbitfield) -> GLsync ---
-    glIsSync :: (sync: GLsync) -> GLboolean ---
-    glDeleteSync :: (sync: GLsync) -> void ---
-    glClientWaitSync :: (sync: GLsync, flags: GLbitfield, timeout: GLuint64) -> GLenum ---
-    glWaitSync :: (sync: GLsync, flags: GLbitfield, timeout: GLuint64) -> void ---
+    // glFenceSync :: (condition: GLenum, flags: GLbitfield) -> GLsync ---
+    // glIsSync :: (sync: GLsync) -> GLboolean ---
+    // glDeleteSync :: (sync: GLsync) -> void ---
+    // glClientWaitSync :: (sync: GLsync, flags: GLbitfield, timeout: GLuint64) -> GLenum ---
+    // glWaitSync :: (sync: GLsync, flags: GLbitfield, timeout: GLuint64) -> void ---
     glGetInteger64v :: (pname: GLenum, data: ^GLint64) -> void ---
-    glGetSynciv :: (sync: GLsync, pname: GLenum, bufSize: GLsizei, length: ^GLsizei, values: ^GLint) -> void ---
+    // glGetSynciv :: (sync: GLsync, pname: GLenum, bufSize: GLsizei, length: ^GLsizei, values: ^GLint) -> void ---
     glGetInteger64i_v :: (target: GLenum, index: GLuint, data: ^GLint64) -> void ---
     glGetBufferParameteri64v :: (target: GLenum, pname: GLenum, params: ^GLint64) -> void ---
     glGenSamplers :: (count: GLsizei, samplers: ^GLuint) -> void ---
diff --git a/modules/opengles/onyx_opengles.c b/modules/opengles/onyx_opengles.c
deleted file mode 100644 (file)
index d6cabd1..0000000
+++ /dev/null
@@ -1,811 +0,0 @@
-
-#define GLAD_GLES2_IMPLEMENTATION
-#include "glad.h"
-
-#define ONYX_LIBRARY_NAME onyx_opengles
-#include "onyx_library.h"
-
-#if defined(_WIN32) || defined(_WIN64)
-    // Why is Windows dumb?
-    #define alloca _alloca
-#endif
-
-#define ONYX_GL_0(name) \
-    ONYX_DEF(name, (), ()) { \
-        glad_##name (); \
-        return NULL;                   \
-    }
-
-#define ONYX_GL_0_RET_INT(name) \
-    ONYX_DEF(name, (), (INT)) { \
-        results->data[0] = WASM_I32_VAL( glad_##name () ); \
-        return NULL;                   \
-    }
-
-#define ONYX_GL_INT_1(name) \
-    ONYX_DEF(name, (INT), ()) { \
-        glad_##name (params->data[0].of.i32); \
-        return NULL;                   \
-    }
-
-#define ONYX_GL_INT_1_RET_INT(name)             \
-    ONYX_DEF(name, (INT), (INT)) {              \
-        results->data[0] = WASM_I32_VAL( glad_##name (params->data[0].of.i32) ); \
-        return NULL; \
-    }
-
-#define ONYX_GL_INT_2(name) \
-    ONYX_DEF(name, (INT, INT), ()) { \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32); \
-        return NULL;                   \
-    }
-
-#define ONYX_GL_INT_2_RET_INT(name) \
-    ONYX_DEF(name, (INT, INT), (INT)) { \
-        results->data[0] = WASM_I32_VAL( glad_##name (params->data[0].of.i32, params->data[1].of.i32) ); \
-        return NULL;                   \
-    }
-
-#define ONYX_GL_INT_3(name) \
-    ONYX_DEF(name, (INT, INT, INT), ()) { \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, params->data[2].of.i32); \
-        return NULL;                   \
-    }
-
-#define ONYX_GL_INT_4(name) \
-    ONYX_DEF(name, (INT, INT, INT, INT), ()) { \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, params->data[2].of.i32, params->data[3].of.i32); \
-        return NULL;                   \
-    }
-
-#define ONYX_GL_INT_5(name) \
-    ONYX_DEF(name, (INT, INT, INT, INT, INT), ()) { \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, params->data[2].of.i32, params->data[3].of.i32, params->data[4].of.i32); \
-        return NULL;                   \
-    }
-
-#define ONYX_GL_INT_6(name) \
-    ONYX_DEF(name, (INT, INT, INT, INT, INT, INT), ()) { \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, params->data[2].of.i32, params->data[3].of.i32, params->data[4].of.i32, params->data[5].of.i32); \
-        return NULL;                   \
-    }
-
-#define ONYX_GL_INT_7(name) \
-    ONYX_DEF(name, (INT, INT, INT, INT, INT, INT, INT), ()) { \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, params->data[2].of.i32, params->data[3].of.i32, params->data[4].of.i32, params->data[5].of.i32, params->data[6].of.i32); \
-        return NULL;                   \
-    }
-
-#define ONYX_GL_INT_8(name) \
-    ONYX_DEF(name, (INT, INT, INT, INT, INT, INT, INT), ()) { \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, params->data[2].of.i32, params->data[3].of.i32, params->data[4].of.i32, params->data[5].of.i32, params->data[6].of.i32, params->data[7].of.i32); \
-        return NULL;                   \
-    }
-
-#define ONYX_GL_INT_9(name) \
-    ONYX_DEF(name, (INT, INT, INT, INT, INT, INT, INT, INT), ()) { \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, params->data[2].of.i32, params->data[3].of.i32, params->data[4].of.i32, params->data[5].of.i32, params->data[6].of.i32, params->data[7].of.i32, params->data[8].of.i32); \
-        return NULL;                   \
-    }
-
-#define ONYX_GL_INT_10(name) \
-    ONYX_DEF(name, (INT, INT, INT, INT, INT, INT, INT, INT, INT), ()) { \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, params->data[2].of.i32, params->data[3].of.i32, params->data[4].of.i32, params->data[5].of.i32, params->data[6].of.i32, params->data[7].of.i32, params->data[8].of.i32, params->data[9].of.i32); \
-        return NULL;                   \
-    }
-
-#define ONYX_GL_FLOAT_1(name)                   \
-    ONYX_DEF(name, (FLOAT), ()) {  \
-        glad_##name (params->data[0].of.f32); \
-        return NULL; \
-    }
-
-#define ONYX_GL_FLOAT_INT(name)                   \
-    ONYX_DEF(name, (FLOAT, INT), ()) {  \
-        glad_##name (params->data[0].of.f32, params->data[1].of.i32); \
-        return NULL; \
-    }
-
-#define ONYX_GL_FLOAT_2(name)                   \
-    ONYX_DEF(name, (FLOAT, FLOAT), ()) {  \
-        glad_##name (params->data[0].of.f32, params->data[1].of.f32); \
-        return NULL; \
-    }
-
-#define ONYX_GL_FLOAT_4(name)                   \
-    ONYX_DEF(name, (FLOAT, FLOAT, FLOAT, FLOAT), ()) {  \
-        glad_##name (params->data[0].of.f32, params->data[1].of.f32, params->data[2].of.f32, params->data[3].of.f32); \
-        return NULL; \
-    }
-
-#define ONYX_GL_INT_PTR(name, ptr_type)         \
-    ONYX_DEF(name, (INT, PTR), ()) {            \
-        glad_##name (params->data[0].of.i32, (ptr_type *) ONYX_PTR(params->data[1].of.i32)); \
-        return NULL; \
-    }
-
-#define ONYX_GL_INT_PTR_RET_PTR(name, ptr_type) \
-    ONYX_DEF(name, (INT, PTR), (INT)) {            \
-        results->data[0] = WASM_I32_VAL(glad_##name (params->data[0].of.i32, (ptr_type *) ONYX_PTR(params->data[1].of.i32))); \
-        return NULL; \
-    }
-
-#define ONYX_GL_INT_PTR_RET_INT(name, ptr_type) \
-    ONYX_DEF(name, (INT, PTR), (INT)) {            \
-        results->data[0] = WASM_I32_VAL(glad_##name (params->data[0].of.i32, (ptr_type *) ONYX_PTR(params->data[1].of.i32))); \
-        return NULL; \
-    }
-
-#define ONYX_GL_INT_2_PTR(name, ptr_type)       \
-    ONYX_DEF(name, (INT, INT, PTR), ()) {       \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, (ptr_type *) ONYX_PTR(params->data[2].of.i32)); \
-        return NULL; \
-    }
-
-#define ONYX_GL_INT_3_PTR(name, ptr_type) \
-    ONYX_DEF(name, (INT, INT, INT, PTR), ()) { \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, params->data[2].of.i32, (ptr_type *) ONYX_PTR(params->data[3].of.i32)); \
-        return NULL;                   \
-    }
-
-#define ONYX_GL_INT_3_FAUX_PTR(name, ptr_type) \
-    ONYX_DEF(name, (INT, INT, INT, PTR), ()) { \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, params->data[2].of.i32, (ptr_type *) (unsigned long long) params->data[3].of.i32); \
-        return NULL;                   \
-    }
-
-#define ONYX_GL_INT_4_PTR(name, ptr_type) \
-    ONYX_DEF(name, (INT, INT, INT, INT, PTR), ()) { \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, params->data[2].of.i32, params->data[3].of.i32, (ptr_type *) ONYX_PTR(params->data[4].of.i32)); \
-        return NULL;                   \
-    }
-
-#define ONYX_GL_INT_5_PTR(name, ptr_type) \
-    ONYX_DEF(name, (INT, INT, INT, INT, INT, PTR), ()) { \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, params->data[2].of.i32, params->data[3].of.i32, params->data[4].of.i32, (ptr_type *) ONYX_PTR(params->data[5].of.i32)); \
-        return NULL;                   \
-    }
-
-#define ONYX_GL_INT_6_PTR(name, ptr_type) \
-    ONYX_DEF(name, (INT, INT, INT, INT, INT, INT, PTR), ()) { \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, params->data[2].of.i32, params->data[3].of.i32, params->data[4].of.i32, params->data[5].of.i32, (ptr_type *) ONYX_PTR(params->data[6].of.i32)); \
-        return NULL;                   \
-    }
-
-#define ONYX_GL_INT_7_PTR(name, ptr_type) \
-    ONYX_DEF(name, (INT, INT, INT, INT, INT, INT, INT, PTR), ()) { \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, params->data[2].of.i32, params->data[3].of.i32, params->data[4].of.i32, params->data[5].of.i32, params->data[6].of.i32, (ptr_type *) ONYX_PTR(params->data[7].of.i32)); \
-        return NULL;                   \
-    }
-
-#define ONYX_GL_INT_8_PTR(name, ptr_type) \
-    ONYX_DEF(name, (INT, INT, INT, INT, INT, INT, INT, INT, PTR), ()) { \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, params->data[2].of.i32, params->data[3].of.i32, params->data[4].of.i32, params->data[5].of.i32, params->data[6].of.i32, params->data[7].of.i32, (ptr_type *) ONYX_PTR(params->data[8].of.i32)); \
-        return NULL;                   \
-    }
-
-#define ONYX_GL_INT_9_PTR(name, ptr_type) \
-    ONYX_DEF(name, (INT, INT, INT, INT, INT, INT, INT, INT, INT, PTR), ()) { \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, params->data[2].of.i32, params->data[3].of.i32, params->data[4].of.i32, params->data[5].of.i32, params->data[6].of.i32, params->data[7].of.i32, params->data[8].of.i32, (ptr_type *) ONYX_PTR(params->data[9].of.i32)); \
-        return NULL;                   \
-    }
-
-#define ONYX_GL_INT_10_PTR(name, ptr_type) \
-    ONYX_DEF(name, (INT, INT, INT, INT, INT, INT, INT, INT, INT, INT, PTR), ()) { \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, params->data[2].of.i32, params->data[3].of.i32, params->data[4].of.i32, params->data[5].of.i32, params->data[6].of.i32, params->data[7].of.i32, params->data[8].of.i32, params->data[9].of.i32, (ptr_type *) ONYX_PTR(params->data[10].of.i32)); \
-        return NULL;                   \
-    }
-
-#define ONYX_GL_INT_FLOAT(name) \
-    ONYX_DEF(name, (INT, FLOAT), ()) { \
-        glad_##name (params->data[0].of.i32, params->data[1].of.f32); \
-        return NULL; \
-    }
-
-#define ONYX_GL_INT_FLOAT_2(name) \
-    ONYX_DEF(name, (INT, FLOAT, FLOAT), ()) { \
-        glad_##name (params->data[0].of.i32, params->data[1].of.f32, params->data[2].of.f32); \
-        return NULL; \
-    }
-
-#define ONYX_GL_INT_FLOAT_3(name) \
-    ONYX_DEF(name, (INT, FLOAT, FLOAT, FLOAT), ()) { \
-        glad_##name (params->data[0].of.i32, params->data[1].of.f32, params->data[2].of.f32, params->data[3].of.f32); \
-        return NULL; \
-    }
-
-#define ONYX_GL_INT_FLOAT_4(name) \
-    ONYX_DEF(name, (INT, FLOAT, FLOAT, FLOAT, FLOAT), ()) { \
-        glad_##name (params->data[0].of.i32, params->data[1].of.f32, params->data[2].of.f32, params->data[3].of.f32, params->data[4].of.f32); \
-        return NULL; \
-    }
-
-#define ONYX_GL_INT_2_FLOAT(name)       \
-    ONYX_DEF(name, (INT, INT, FLOAT), ()) {       \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, params->data[2].of.i32); \
-        return NULL; \
-    }
-
-#define ONYX_GL_INT_2_PTR_INT(name, ptr_type)       \
-    ONYX_DEF(name, (INT, INT, PTR, INT), ()) {       \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, (ptr_type *) ONYX_PTR(params->data[2].of.i32), params->data[3].of.i32); \
-        return NULL; \
-    }
-
-#define ONYX_GL_INT_2_PTR_2(name, p1, p2)       \
-    ONYX_DEF(name, (INT, INT, PTR, PTR), ()) {       \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, \
-                (p1 *) ONYX_PTR(params->data[2].of.i32), \
-                (p2 *) ONYX_PTR(params->data[3].of.i32)); \
-        return NULL; \
-    }
-
-#define ONYX_GL_INT_2_PTR_3(name, p1, p2, p3)       \
-    ONYX_DEF(name, (INT, INT, PTR, PTR, PTR), ()) {       \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, \
-                (p1 *) ONYX_PTR(params->data[2].of.i32), \
-                (p2 *) ONYX_PTR(params->data[3].of.i32), \
-                (p3 *) ONYX_PTR(params->data[4].of.i32)); \
-        return NULL; \
-    }
-
-#define ONYX_GL_INT_3_PTR_2(name, p1, p2)       \
-    ONYX_DEF(name, (INT, INT, INT, PTR, PTR), ()) {       \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, params->data[2].of.i32, \
-                (p1 *) ONYX_PTR(params->data[3].of.i32), \
-                (p2 *) ONYX_PTR(params->data[4].of.i32)); \
-        return NULL; \
-    }
-
-#define ONYX_GL_INT_3_PTR_4(name, p1, p2, p3, p4)       \
-    ONYX_DEF(name, (INT, INT, INT, PTR, PTR, PTR, PTR), ()) {       \
-        glad_##name (params->data[0].of.i32, params->data[1].of.i32, params->data[2].of.i32, \
-                (p1 *) ONYX_PTR(params->data[3].of.i32), \
-                (p2 *) ONYX_PTR(params->data[4].of.i32), \
-                (p3 *) ONYX_PTR(params->data[5].of.i32), \
-                (p4 *) ONYX_PTR(params->data[6].of.i32)); \
-        return NULL; \
-    }
-
-#define ONYX_GL_INT_PTR_INT_PTR_INT(name, p1, p2) \
-    ONYX_DEF(name, (INT, PTR, INT, PTR, INT), ()) { \
-        glad_##name (params->data[0].of.i32,                        \
-                (p1 *) ONYX_PTR(params->data[1].of.i32),     \
-                params->data[2].of.i32,                      \
-                (p2 *) ONYX_PTR(params->data[3].of.i32),     \
-                params->data[4].of.i32);                     \
-        return NULL;                                         \
-    }
-
-ONYX_DEF(glInit, (LONG), ()) {
-    GLADloadfunc load_sym = (GLADloadfunc) params->data[0].of.i64;
-    gladLoadGLES2(load_sym);
-    return NULL;
-}
-
-ONYX_GL_0(glFinish)
-ONYX_GL_0(glFlush)
-ONYX_GL_0(glReleaseShaderCompiler)
-ONYX_GL_0(glEndTransformFeedback)
-ONYX_GL_0(glPauseTransformFeedback)
-ONYX_GL_0(glResumeTransformFeedback)
-ONYX_GL_0_RET_INT(glCreateProgram)
-ONYX_GL_0_RET_INT(glGetError)
-ONYX_GL_INT_1(glActiveTexture)
-ONYX_GL_INT_1(glClear)
-ONYX_GL_INT_1(glEnable)
-ONYX_GL_INT_1(glDisable)
-ONYX_GL_INT_1(glBlendEquation)
-ONYX_GL_INT_1(glClearStencil)
-ONYX_GL_INT_1(glCompileShader)
-ONYX_GL_INT_1(glCullFace)
-ONYX_GL_INT_1(glDeleteProgram)
-ONYX_GL_INT_1(glDeleteShader)
-ONYX_GL_INT_1(glDepthFunc)
-ONYX_GL_INT_1(glDepthMask)
-ONYX_GL_INT_1(glDisableVertexAttribArray)
-ONYX_GL_INT_1(glEnableVertexAttribArray)
-ONYX_GL_INT_1(glFrontFace)
-ONYX_GL_INT_1(glGenerateMipmap)
-ONYX_GL_INT_1(glLinkProgram)
-ONYX_GL_INT_1(glStencilMask)
-ONYX_GL_INT_1(glUseProgram)
-ONYX_GL_INT_1(glValidateProgram)
-ONYX_GL_INT_1(glReadBuffer)
-ONYX_GL_INT_1(glEndQuery)
-ONYX_GL_INT_1(glBindVertexArray)
-ONYX_GL_INT_1(glBeginTransformFeedback)
-ONYX_GL_INT_2(glAttachShader)
-ONYX_GL_INT_2(glBindBuffer)
-ONYX_GL_INT_2(glBindFramebuffer)
-ONYX_GL_INT_2(glBindRenderbuffer)
-ONYX_GL_INT_2(glBindTexture)
-ONYX_GL_INT_2(glBlendEquationSeparate)
-ONYX_GL_INT_2(glBlendFunc)
-ONYX_GL_INT_2(glDetachShader)
-ONYX_GL_INT_2(glHint)
-ONYX_GL_INT_2(glPixelStorei)
-ONYX_GL_INT_2(glStencilMaskSeparate)
-ONYX_GL_INT_2(glBeginQuery)
-ONYX_GL_INT_2(glBindSampler)
-ONYX_GL_INT_2(glVertexAttribDivisor)
-ONYX_GL_INT_2(glBindTransformFeedback)
-ONYX_GL_INT_1_RET_INT(glCheckFramebufferStatus)
-ONYX_GL_INT_1_RET_INT(glCreateShader)
-ONYX_GL_INT_1_RET_INT(glIsBuffer)
-ONYX_GL_INT_1_RET_INT(glIsEnabled)
-ONYX_GL_INT_1_RET_INT(glIsFramebuffer)
-ONYX_GL_INT_1_RET_INT(glIsProgram )
-ONYX_GL_INT_1_RET_INT(glIsRenderbuffer)
-ONYX_GL_INT_1_RET_INT(glIsShader)
-ONYX_GL_INT_1_RET_INT(glIsTexture)
-ONYX_GL_INT_1_RET_INT(glIsQuery)
-ONYX_GL_INT_1_RET_INT(glUnmapBuffer)
-ONYX_GL_INT_1_RET_INT(glIsVertexArray)
-// ONYX_GL_INT_1_RET_INT(glIsSync)
-ONYX_GL_INT_1_RET_INT(glIsTransformFeedback)
-ONYX_GL_INT_1_RET_INT(glIsSampler)
-// ONYX_GL_INT_2_RET_INT(glFenceSync)
-ONYX_GL_FLOAT_1(glLineWidth)
-ONYX_GL_FLOAT_1(glClearDepthf)
-ONYX_GL_FLOAT_2(glDepthRangef)
-ONYX_GL_FLOAT_2(glPolygonOffset)
-ONYX_GL_FLOAT_4(glClearColor)
-ONYX_GL_FLOAT_4(glBlendColor)
-
-ONYX_GL_INT_PTR(glDeleteBuffers, GLuint)
-ONYX_GL_INT_PTR(glDeleteFramebuffers, GLuint)
-ONYX_GL_INT_PTR(glDeleteRenderbuffers, GLuint)
-ONYX_GL_INT_PTR(glDeleteTextures, GLuint)
-ONYX_GL_INT_PTR(glGenBuffers, GLuint)
-ONYX_GL_INT_PTR(glGenFramebuffers, GLuint)
-ONYX_GL_INT_PTR(glGenRenderbuffers, GLuint)
-ONYX_GL_INT_PTR(glGenTextures, GLuint)
-ONYX_GL_INT_PTR(glGetAttribLocation, char)
-ONYX_GL_INT_PTR(glGetBooleanv, GLboolean)
-ONYX_GL_INT_PTR(glGetFloatv, GLfloat)
-ONYX_GL_INT_PTR(glGetIntegerv, GLint)
-ONYX_GL_INT_PTR_RET_INT(glGetUniformLocation, char)
-ONYX_GL_INT_PTR(glVertexAttrib1fv, GLfloat)
-ONYX_GL_INT_PTR(glVertexAttrib2fv, GLfloat)
-ONYX_GL_INT_PTR(glVertexAttrib3fv, GLfloat)
-ONYX_GL_INT_PTR(glVertexAttrib4fv, GLfloat)
-ONYX_GL_INT_PTR(glGenQueries, GLuint)
-ONYX_GL_INT_PTR(glDeleteQueries, GLuint)
-ONYX_GL_INT_PTR(glDrawBuffers, GLenum)
-ONYX_GL_INT_PTR(glDeleteVertexArrays, GLuint)
-ONYX_GL_INT_PTR(glGenVertexArrays, GLuint)
-ONYX_GL_INT_PTR(glGenSamplers, GLuint)
-ONYX_GL_INT_PTR(glGetInteger64v, GLint64)
-ONYX_GL_INT_PTR(glDeleteSamplers, GLuint)
-ONYX_GL_INT_PTR(glDeleteTransformFeedbacks, GLuint)
-ONYX_GL_INT_PTR(glGenTransformFeedbacks, GLuint)
-ONYX_GL_INT_PTR(glGetFragDataLocation, char)
-ONYX_GL_INT_PTR(glVertexAttribI4iv, GLint)
-ONYX_GL_INT_PTR(glVertexAttribI4uiv, GLuint)
-ONYX_GL_INT_PTR_RET_PTR(glGetUniformBlockIndex, char)
-ONYX_GL_INT_3(glDrawArrays)
-ONYX_GL_INT_3(glStencilFunc)
-ONYX_GL_INT_3(glStencilOp)
-ONYX_GL_INT_3(glFlushMappedBufferRange)
-ONYX_GL_INT_3(glBindBufferBase)
-ONYX_GL_INT_3(glSamplerParameteri)
-ONYX_GL_INT_3(glProgramParameteri)
-ONYX_GL_INT_3(glTexParameteri)
-ONYX_GL_INT_4(glBlendFuncSeparate)
-ONYX_GL_INT_4(glColorMask)
-ONYX_GL_INT_4(glScissor)
-ONYX_GL_INT_4(glStencilFuncSeparate)
-ONYX_GL_INT_4(glViewport)
-ONYX_GL_INT_4(glMapBufferRange)
-ONYX_GL_INT_4(glFramebufferRenderbuffer)
-ONYX_GL_INT_4(glRenderbufferStorage)
-ONYX_GL_INT_4(glStencilOpSeparate)
-
-ONYX_GL_INT_2_PTR(glBindAttribLocation, char)
-ONYX_GL_INT_2_PTR(glGetBufferParameteriv, GLint)
-ONYX_GL_INT_2_PTR(glGetProgramiv, GLint)
-ONYX_GL_INT_2_PTR(glGetRenderbufferParameteriv, GLint)
-ONYX_GL_INT_2_PTR(glGetShaderiv, GLint)
-ONYX_GL_INT_2_PTR(glGetTexParameterfv, GLfloat)
-ONYX_GL_INT_2_PTR(glGetTexParameteriv, GLint)
-ONYX_GL_INT_2_PTR(glGetUniformfv, GLfloat)
-ONYX_GL_INT_2_PTR(glGetUniformiv, GLint)
-ONYX_GL_INT_2_PTR(glGetVertexAttribfv, GLfloat)
-ONYX_GL_INT_2_PTR(glGetVertexAttribiv, GLint)
-ONYX_GL_INT_2_PTR(glTexParameterfv, GLfloat)
-ONYX_GL_INT_2_PTR(glTexParameteriv, GLint)
-ONYX_GL_INT_2_PTR(glUniform1fv, GLfloat)
-ONYX_GL_INT_2_PTR(glUniform1iv, GLint)
-ONYX_GL_INT_2_PTR(glUniform2fv, GLfloat)
-ONYX_GL_INT_2_PTR(glUniform2iv, GLint)
-ONYX_GL_INT_2_PTR(glUniform3fv, GLfloat)
-ONYX_GL_INT_2_PTR(glUniform3iv, GLint)
-ONYX_GL_INT_2_PTR(glUniform4fv, GLfloat)
-ONYX_GL_INT_2_PTR(glUniform4iv, GLint)
-ONYX_GL_INT_2_PTR(glGetQueryiv, GLint)
-ONYX_GL_INT_2_PTR(glGetQueryObjectuiv, GLuint)
-ONYX_GL_INT_2_PTR(glGetInteger64i_v, GLint64)
-ONYX_GL_INT_2_PTR(glGetBufferParameteri64v, GLint64)
-ONYX_GL_INT_2_PTR(glSamplerParameteriv, GLint)
-ONYX_GL_INT_2_PTR(glSamplerParameterfv, GLfloat)
-ONYX_GL_INT_2_PTR(glGetSamplerParameteriv, GLint)
-ONYX_GL_INT_2_PTR(glGetSamplerParameterfv, GLfloat)
-ONYX_GL_INT_2_PTR(glGetIntegeri_v, GLint)
-ONYX_GL_INT_2_PTR(glGetVertexAttribIiv, GLint)
-ONYX_GL_INT_2_PTR(glGetVertexAttribIuiv, GLuint)
-ONYX_GL_INT_2_PTR(glGetUniformuiv, GLuint)
-ONYX_GL_INT_2_PTR(glUniform1uiv, GLuint)
-ONYX_GL_INT_2_PTR(glUniform2uiv, GLuint)
-ONYX_GL_INT_2_PTR(glUniform3uiv, GLuint)
-ONYX_GL_INT_2_PTR(glUniform4uiv, GLuint)
-ONYX_GL_INT_2_PTR(glClearBufferiv, GLint)
-ONYX_GL_INT_2_PTR(glClearBufferuiv, GLuint)
-ONYX_GL_INT_2_PTR(glClearBufferfv, GLfloat)
-ONYX_GL_INT_2_PTR(glInvalidateFramebuffer, GLenum)
-ONYX_GL_INT_3_PTR(glBufferSubData, void)
-ONYX_GL_INT_3_FAUX_PTR(glDrawElements, void)
-ONYX_GL_INT_3_PTR(glGetFramebufferAttachmentParameteriv, GLint)
-ONYX_GL_INT_2_FLOAT(glSamplerParameterf)
-ONYX_GL_INT_2_FLOAT(glTexParameterf)
-
-ONYX_GL_INT_2_PTR_INT(glBufferData, void)
-ONYX_GL_INT_7_PTR(glCompressedTexImage2D, void)
-ONYX_GL_INT_8_PTR(glCompressedTexSubImage2D, void)
-ONYX_GL_INT_8(glCopyTexImage2D)
-ONYX_GL_INT_8(glCopyTexSubImage2D)
-ONYX_GL_INT_5(glFramebufferTexture2D)
-ONYX_GL_INT_3_PTR_4(glGetActiveAttrib, GLsizei, GLint, GLenum, char)
-ONYX_GL_INT_3_PTR_4(glGetActiveUniform, GLsizei, GLint, GLenum, char)
-ONYX_GL_INT_2_PTR_2(glGetAttachedShaders, GLsizei, GLuint)
-ONYX_GL_INT_2_PTR_2(glGetProgramInfoLog, GLsizei, char)
-ONYX_GL_INT_2_PTR_2(glGetShaderInfoLog, GLsizei, char) 
-ONYX_GL_INT_2_PTR_2(glGetShaderPrecisionFormat, GLint, GLint)
-ONYX_GL_INT_2_PTR_2(glGetShaderSource, GLsizei, char)
-ONYX_GL_INT_6_PTR(glReadPixels, void)
-ONYX_GL_FLOAT_INT(glSampleCoverage)
-ONYX_GL_INT_PTR_INT_PTR_INT(glShaderBinary, GLuint, void)
-ONYX_GL_INT_8_PTR(glTexImage2D, void)
-ONYX_GL_INT_8_PTR(glTexSubImage2D, void)
-ONYX_GL_INT_6(glVertexAttribPointer)
-ONYX_GL_INT_FLOAT(glUniform1f)
-ONYX_GL_INT_2(glUniform1i)
-ONYX_GL_INT_FLOAT_2(glUniform2f)
-ONYX_GL_INT_3(glUniform2i)
-ONYX_GL_INT_FLOAT_3(glUniform3f)
-ONYX_GL_INT_4(glUniform3i)
-ONYX_GL_INT_FLOAT_4(glUniform4f)
-ONYX_GL_INT_5(glUniform4i)
-ONYX_GL_INT_2(glUniform1ui)
-ONYX_GL_INT_3(glUniform2ui)
-ONYX_GL_INT_4(glUniform3ui)
-ONYX_GL_INT_5(glUniform4ui)
-ONYX_GL_INT_3_PTR(glUniformMatrix2fv, GLfloat)
-ONYX_GL_INT_3_PTR(glUniformMatrix3fv, GLfloat)
-ONYX_GL_INT_3_PTR(glUniformMatrix4fv, GLfloat)
-ONYX_GL_INT_FLOAT(glVertexAttrib1f)
-ONYX_GL_INT_FLOAT_2(glVertexAttrib2f)
-ONYX_GL_INT_FLOAT_3(glVertexAttrib3f)
-ONYX_GL_INT_FLOAT_4(glVertexAttrib4f)
-ONYX_GL_INT_3_PTR(glUniformMatrix2x3fv, GLfloat)
-ONYX_GL_INT_3_PTR(glUniformMatrix3x2fv, GLfloat)
-ONYX_GL_INT_3_PTR(glUniformMatrix2x4fv, GLfloat)
-ONYX_GL_INT_3_PTR(glUniformMatrix4x2fv, GLfloat)
-ONYX_GL_INT_3_PTR(glUniformMatrix3x4fv, GLfloat)
-ONYX_GL_INT_3_PTR(glUniformMatrix4x3fv, GLfloat)
-
-
-// Open3: GLES
-ONYX_GL_INT_6(glDrawRangeElements)
-ONYX_GL_INT_9_PTR(glTexImage3D, void)
-ONYX_GL_INT_10_PTR(glTexSubImage3D, void)
-ONYX_GL_INT_9(glCopyTexSubImage3D)
-ONYX_GL_INT_8_PTR(glCompressedTexImage3D, void)
-ONYX_GL_INT_10_PTR(glCompressedTexSubImage3D, void)
-ONYX_GL_INT_10(glBlitFramebuffer)
-ONYX_GL_INT_5(glRenderbufferStorageMultisample)
-ONYX_GL_INT_5(glFramebufferTextureLayer)
-ONYX_GL_INT_5(glBindBufferRange)
-ONYX_GL_INT_3_PTR_4(glGetTransformFeedbackVarying, GLsizei, GLsizei, GLenum, char)
-ONYX_GL_INT_5(glVertexAttribIPointer)
-ONYX_GL_INT_5(glVertexAttribI4i)
-ONYX_GL_INT_5(glVertexAttribI4ui)
-// ONYX_GL_INT_2_FLOAT_INT(glClearBufferfi)
-ONYX_GL_INT_5(glCopyBufferSubData)
-// ONYX_GL_INT_2_PTR_INT_PTR(glGetActiveUniformsiv, GLuint, GLint)
-ONYX_GL_INT_3_PTR(glGetActiveUniformBlockiv, GLint)
-ONYX_GL_INT_3_PTR_2(glGetActiveUniformBlockName, GLsizei, char)
-ONYX_GL_INT_3(glUniformBlockBinding)
-ONYX_GL_INT_4(glDrawArraysInstanced)
-ONYX_GL_INT_5(glDrawElementsInstanced)
-ONYX_GL_INT_2_PTR_3(glGetProgramBinary, GLsizei, GLenum, void)
-ONYX_GL_INT_2_PTR_INT(glProgramBinary, void)
-// ONYX_GL_INT_2_PTR_INT_4(glInvalidateSubFramebuffer, GLenum)
-ONYX_GL_INT_5(glTexStorage2D)
-ONYX_GL_INT_6(glTexStorage3D)
-ONYX_GL_INT_4_PTR(glGetInternalformativ, GLint)
-
-ONYX_DEF(glShaderSource, (INT, INT, PTR, PTR), ()) {
-    GLsizei  count = params->data[1].of.i32;
-    GLchar** sources = ONYX_PTR(params->data[2].of.i32);
-    GLint*   lengths = ONYX_PTR(params->data[3].of.i32);
-
-    glad_glShaderSource(params->data[0].of.i32, count, sources, lengths);
-    return NULL;
-}
-
-ONYX_DEF(glGetUniformIndices, (INT, INT, PTR, PTR), ()) {
-    GLsizei  count = params->data[1].of.i32;
-    GLchar** names = ONYX_PTR(params->data[2].of.i32);
-    GLint*   lengths = ONYX_PTR(params->data[3].of.i32);
-    
-    glad_glGetUniformIndices(params->data[0].of.i32, count, (const char *const*) names, lengths);
-    return NULL;
-}
-
-// glGetBufferPointerv :: (target: GLenum, pname: GLenum, params: ^rawptr) -> void ---
-// glGetVertexAttribPointerv :: (index: GLuint, pname: GLenum, pointer: ^rawptr) -> void ---
-// glTransformFeedbackVaryings       :: (program: GLuint, count: GLsizei, varyings: ^^GLchar, bufferMode: GLenum) -> void ---
-
-// Hmm...
-// glClientWaitSync                  :: (sync: GLsync, flags: GLbitfield, timeout: GLuint64) -> GLenum ---
-// glWaitSync                        :: (sync: GLsync, flags: GLbitfield, timeout: GLuint64) -> void ---
-// glGetSynciv                       :: (sync: GLsync, pname: GLenum, bufSize: GLsizei, length: ^GLsizei, values: ^GLint) -> void ---
-// ONYX_GL_INT_RET_LONG(glGetString)
-// ONYX_GL_INT_2_RET_LONG(glGetStringi)
-
-
-ONYX_LIBRARY {
-    ONYX_FUNC(glInit)
-    ONYX_FUNC(glActiveTexture)
-    ONYX_FUNC(glAttachShader)
-    ONYX_FUNC(glBindAttribLocation)
-    ONYX_FUNC(glBindBuffer)
-    ONYX_FUNC(glBindFramebuffer)
-    ONYX_FUNC(glBindRenderbuffer)
-    ONYX_FUNC(glBindTexture)
-    ONYX_FUNC(glBlendColor)
-    ONYX_FUNC(glBlendEquation)
-    ONYX_FUNC(glBlendEquationSeparate)
-    ONYX_FUNC(glBlendFunc)
-    ONYX_FUNC(glBlendFuncSeparate)
-    ONYX_FUNC(glBufferData)
-    ONYX_FUNC(glBufferSubData)
-    ONYX_FUNC(glCheckFramebufferStatus)
-    ONYX_FUNC(glClear)
-    ONYX_FUNC(glClearColor)
-    ONYX_FUNC(glClearDepthf)
-    ONYX_FUNC(glClearStencil)
-    ONYX_FUNC(glColorMask)
-    ONYX_FUNC(glCompileShader)
-    ONYX_FUNC(glCompressedTexImage2D)
-    ONYX_FUNC(glCompressedTexSubImage2D)
-    ONYX_FUNC(glCopyTexImage2D)
-    ONYX_FUNC(glCopyTexSubImage2D)
-    ONYX_FUNC(glCreateProgram)
-    ONYX_FUNC(glCreateShader)
-    ONYX_FUNC(glCullFace)
-    ONYX_FUNC(glDeleteBuffers)
-    ONYX_FUNC(glDeleteFramebuffers)
-    ONYX_FUNC(glDeleteProgram)
-    ONYX_FUNC(glDeleteRenderbuffers)
-    ONYX_FUNC(glDeleteShader)
-    ONYX_FUNC(glDeleteTextures)
-    ONYX_FUNC(glDepthFunc)
-    ONYX_FUNC(glDepthMask)
-    ONYX_FUNC(glDepthRangef)
-    ONYX_FUNC(glDetachShader)
-    ONYX_FUNC(glDisable)
-    ONYX_FUNC(glDisableVertexAttribArray)
-    ONYX_FUNC(glDrawArrays)
-    ONYX_FUNC(glDrawElements)
-    ONYX_FUNC(glEnable)
-    ONYX_FUNC(glEnableVertexAttribArray)
-    ONYX_FUNC(glFinish)
-    ONYX_FUNC(glFlush)
-    ONYX_FUNC(glFramebufferRenderbuffer)
-    ONYX_FUNC(glFramebufferTexture2D)
-    ONYX_FUNC(glFrontFace)
-    ONYX_FUNC(glGenBuffers)
-    ONYX_FUNC(glGenerateMipmap)
-    ONYX_FUNC(glGenFramebuffers)
-    ONYX_FUNC(glGenRenderbuffers)
-    ONYX_FUNC(glGenTextures)
-    ONYX_FUNC(glGetActiveAttrib)
-    ONYX_FUNC(glGetActiveUniform)
-    ONYX_FUNC(glGetAttachedShaders)
-    ONYX_FUNC(glGetAttribLocation)
-    ONYX_FUNC(glGetBooleanv)
-    ONYX_FUNC(glGetBufferParameteriv)
-    ONYX_FUNC(glGetError)
-    ONYX_FUNC(glGetFloatv)
-    ONYX_FUNC(glGetFramebufferAttachmentParameteriv)
-    ONYX_FUNC(glGetIntegerv)
-    ONYX_FUNC(glGetProgramiv)
-    ONYX_FUNC(glGetProgramInfoLog)
-    ONYX_FUNC(glGetRenderbufferParameteriv)
-    ONYX_FUNC(glGetShaderiv)
-    ONYX_FUNC(glGetShaderInfoLog)
-    ONYX_FUNC(glGetShaderPrecisionFormat)
-    ONYX_FUNC(glGetShaderSource)
-    // ONYX_FUNC(glGetString)
-    ONYX_FUNC(glGetTexParameterfv)
-    ONYX_FUNC(glGetTexParameteriv)
-    ONYX_FUNC(glGetUniformfv)
-    ONYX_FUNC(glGetUniformiv)
-    ONYX_FUNC(glGetUniformLocation)
-    ONYX_FUNC(glGetVertexAttribfv)
-    ONYX_FUNC(glGetVertexAttribiv)
-    // ONYX_FUNC(glGetVertexAttribPointerv)
-    ONYX_FUNC(glHint)
-    ONYX_FUNC(glIsBuffer)
-    ONYX_FUNC(glIsEnabled)
-    ONYX_FUNC(glIsFramebuffer)
-    ONYX_FUNC(glIsProgram)
-    ONYX_FUNC(glIsRenderbuffer)
-    ONYX_FUNC(glIsShader)
-    ONYX_FUNC(glIsTexture)
-    ONYX_FUNC(glLineWidth)
-    ONYX_FUNC(glLinkProgram)
-    ONYX_FUNC(glPixelStorei)
-    ONYX_FUNC(glPolygonOffset)
-    ONYX_FUNC(glReadPixels)
-    ONYX_FUNC(glReleaseShaderCompiler)
-    ONYX_FUNC(glRenderbufferStorage)
-    ONYX_FUNC(glSampleCoverage)
-    ONYX_FUNC(glScissor)
-    ONYX_FUNC(glShaderBinary)
-    ONYX_FUNC(glShaderSource)
-    ONYX_FUNC(glStencilFunc)
-    ONYX_FUNC(glStencilFuncSeparate)
-    ONYX_FUNC(glStencilMask)
-    ONYX_FUNC(glStencilMaskSeparate)
-    ONYX_FUNC(glStencilOp)
-    ONYX_FUNC(glStencilOpSeparate)
-    ONYX_FUNC(glTexImage2D)
-    ONYX_FUNC(glTexParameterf)
-    ONYX_FUNC(glTexParameterfv)
-    ONYX_FUNC(glTexParameteri)
-    ONYX_FUNC(glTexParameteriv)
-    ONYX_FUNC(glTexSubImage2D)
-    ONYX_FUNC(glUniform1f)
-    ONYX_FUNC(glUniform1fv)
-    ONYX_FUNC(glUniform1i)
-    ONYX_FUNC(glUniform1iv)
-    ONYX_FUNC(glUniform2f)
-    ONYX_FUNC(glUniform2fv)
-    ONYX_FUNC(glUniform2i)
-    ONYX_FUNC(glUniform2iv)
-    ONYX_FUNC(glUniform3f)
-    ONYX_FUNC(glUniform3fv)
-    ONYX_FUNC(glUniform3i)
-    ONYX_FUNC(glUniform3iv)
-    ONYX_FUNC(glUniform4f)
-    ONYX_FUNC(glUniform4fv)
-    ONYX_FUNC(glUniform4i)
-    ONYX_FUNC(glUniform4iv)
-    ONYX_FUNC(glUniformMatrix2fv)
-    ONYX_FUNC(glUniformMatrix3fv)
-    ONYX_FUNC(glUniformMatrix4fv)
-    ONYX_FUNC(glUseProgram)
-    ONYX_FUNC(glValidateProgram)
-    ONYX_FUNC(glVertexAttrib1f)
-    ONYX_FUNC(glVertexAttrib1fv)
-    ONYX_FUNC(glVertexAttrib2f)
-    ONYX_FUNC(glVertexAttrib2fv)
-    ONYX_FUNC(glVertexAttrib3f)
-    ONYX_FUNC(glVertexAttrib3fv)
-    ONYX_FUNC(glVertexAttrib4f)
-    ONYX_FUNC(glVertexAttrib4fv)
-    ONYX_FUNC(glVertexAttribPointer)
-    ONYX_FUNC(glViewport)
-
-
-    // Open3: GLES
-    ONYX_FUNC(glReadBuffer)
-    ONYX_FUNC(glDrawRangeElements)
-    ONYX_FUNC(glTexImage3D)
-    ONYX_FUNC(glTexSubImage3D)
-    ONYX_FUNC(glCopyTexSubImage3D)
-    ONYX_FUNC(glCompressedTexImage3D)
-    ONYX_FUNC(glCompressedTexSubImage3D)
-    ONYX_FUNC(glGenQueries)
-    ONYX_FUNC(glDeleteQueries)
-    ONYX_FUNC(glIsQuery)
-    ONYX_FUNC(glBeginQuery)
-    ONYX_FUNC(glEndQuery)
-    ONYX_FUNC(glGetQueryiv)
-    ONYX_FUNC(glGetQueryObjectuiv)
-    ONYX_FUNC(glUnmapBuffer)
-    // ONYX_FUNC(glGetBufferPointerv)
-    ONYX_FUNC(glDrawBuffers)
-    ONYX_FUNC(glUniformMatrix2x3fv)
-    ONYX_FUNC(glUniformMatrix3x2fv)
-    ONYX_FUNC(glUniformMatrix2x4fv)
-    ONYX_FUNC(glUniformMatrix4x2fv)
-    ONYX_FUNC(glUniformMatrix3x4fv)
-    ONYX_FUNC(glUniformMatrix4x3fv)
-    ONYX_FUNC(glBlitFramebuffer)
-    ONYX_FUNC(glRenderbufferStorageMultisample)
-    ONYX_FUNC(glFramebufferTextureLayer)
-    ONYX_FUNC(glMapBufferRange)
-    ONYX_FUNC(glFlushMappedBufferRange)
-    ONYX_FUNC(glBindVertexArray)
-    ONYX_FUNC(glDeleteVertexArrays)
-    ONYX_FUNC(glGenVertexArrays)
-    ONYX_FUNC(glIsVertexArray)
-    ONYX_FUNC(glGetIntegeri_v)
-    ONYX_FUNC(glBeginTransformFeedback)
-    ONYX_FUNC(glEndTransformFeedback)
-    ONYX_FUNC(glBindBufferRange)
-    ONYX_FUNC(glBindBufferBase)
-    // ONYX_FUNC(glTransformFeedbackVaryings)
-    ONYX_FUNC(glGetTransformFeedbackVarying)
-    ONYX_FUNC(glVertexAttribIPointer)
-    ONYX_FUNC(glGetVertexAttribIiv)
-    ONYX_FUNC(glGetVertexAttribIuiv)
-    ONYX_FUNC(glVertexAttribI4i)
-    ONYX_FUNC(glVertexAttribI4ui)
-    ONYX_FUNC(glVertexAttribI4iv)
-    ONYX_FUNC(glVertexAttribI4uiv)
-    ONYX_FUNC(glGetUniformuiv)
-    ONYX_FUNC(glGetFragDataLocation)
-    ONYX_FUNC(glUniform1ui)
-    ONYX_FUNC(glUniform2ui)
-    ONYX_FUNC(glUniform3ui)
-    ONYX_FUNC(glUniform4ui)
-    ONYX_FUNC(glUniform1uiv)
-    ONYX_FUNC(glUniform2uiv)
-    ONYX_FUNC(glUniform3uiv)
-    ONYX_FUNC(glUniform4uiv)
-    ONYX_FUNC(glClearBufferiv)
-    ONYX_FUNC(glClearBufferuiv)
-    ONYX_FUNC(glClearBufferfv)
-    // ONYX_FUNC(glClearBufferfi)
-    // ONYX_FUNC(glGetStringi)
-    ONYX_FUNC(glCopyBufferSubData)
-    ONYX_FUNC(glGetUniformIndices)
-    // ONYX_FUNC(glGetActiveUniformsiv)
-    ONYX_FUNC(glGetUniformBlockIndex)
-    ONYX_FUNC(glGetActiveUniformBlockiv)
-    ONYX_FUNC(glGetActiveUniformBlockName)
-    ONYX_FUNC(glUniformBlockBinding)
-    ONYX_FUNC(glDrawArraysInstanced)
-    ONYX_FUNC(glDrawElementsInstanced)
-    //ONYX_FUNC(glFenceSync)
-    //ONYX_FUNC(glIsSync)
-    //ONYX_FUNC(glDeleteSync)
-    //ONYX_FUNC(glClientWaitSync)
-    //ONYX_FUNC(glWaitSync)
-    ONYX_FUNC(glGetInteger64v)
-    // ONYX_FUNC(glGetSynciv)
-    ONYX_FUNC(glGetInteger64i_v)
-    ONYX_FUNC(glGetBufferParameteri64v)
-    ONYX_FUNC(glGenSamplers)
-    ONYX_FUNC(glDeleteSamplers)
-    ONYX_FUNC(glIsSampler)
-    ONYX_FUNC(glBindSampler)
-    ONYX_FUNC(glSamplerParameteri)
-    ONYX_FUNC(glSamplerParameteriv)
-    ONYX_FUNC(glSamplerParameterf)
-    ONYX_FUNC(glSamplerParameterfv)
-    ONYX_FUNC(glGetSamplerParameteriv)
-    ONYX_FUNC(glGetSamplerParameterfv)
-    ONYX_FUNC(glVertexAttribDivisor)
-    ONYX_FUNC(glBindTransformFeedback)
-    ONYX_FUNC(glDeleteTransformFeedbacks)
-    ONYX_FUNC(glGenTransformFeedbacks)
-    ONYX_FUNC(glIsTransformFeedback)
-    ONYX_FUNC(glPauseTransformFeedback)
-    ONYX_FUNC(glResumeTransformFeedback)
-    ONYX_FUNC(glGetProgramBinary)
-    ONYX_FUNC(glProgramBinary)
-    ONYX_FUNC(glProgramParameteri)
-    ONYX_FUNC(glInvalidateFramebuffer)
-    // ONYX_FUNC(glInvalidateSubFramebuffer)
-    ONYX_FUNC(glTexStorage2D)
-    ONYX_FUNC(glTexStorage3D)
-    ONYX_FUNC(glGetInternalformativ)
-
-    NULL
-};
index 6015b67ee5adae213bb217c128d55e77277c7aef..59deebe8679293d38899c9c6583e84aa4b857913 100755 (executable)
Binary files a/modules/opengles/onyx_opengles.so and b/modules/opengles/onyx_opengles.so differ
diff --git a/modules/opengles/opengles.c b/modules/opengles/opengles.c
new file mode 100644 (file)
index 0000000..c3261a9
--- /dev/null
@@ -0,0 +1,1466 @@
+//
+// THIS FILE WAS AUTOMATICALLY GENERATED.
+//
+
+#define GLAD_GLES2_IMPLEMENTATION
+#include "glad.h"
+
+
+#define ONYX_LIBRARY_NAME onyx_opengles
+#include "onyx_library.h"
+
+#define P(i, k) (params->data[i].of.k)
+
+
+ONYX_DEF(glInit, (LONG), ()) {
+    GLADloadfunc load_sym = (GLADloadfunc) params->data[0].of.i64;
+    gladLoadGLES2(load_sym);
+    return NULL;
+}
+            
+ONYX_DEF(glActiveTexture, (WASM_I32), ()) {
+    glad_glActiveTexture(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glAttachShader, (WASM_I32, WASM_I32), ()) {
+    glad_glAttachShader(P(0, i32), P(1, i32));
+    return NULL;
+}
+
+ONYX_DEF(glBindAttribLocation, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glBindAttribLocation(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glBindBuffer, (WASM_I32, WASM_I32), ()) {
+    glad_glBindBuffer(P(0, i32), P(1, i32));
+    return NULL;
+}
+
+ONYX_DEF(glBindFramebuffer, (WASM_I32, WASM_I32), ()) {
+    glad_glBindFramebuffer(P(0, i32), P(1, i32));
+    return NULL;
+}
+
+ONYX_DEF(glBindRenderbuffer, (WASM_I32, WASM_I32), ()) {
+    glad_glBindRenderbuffer(P(0, i32), P(1, i32));
+    return NULL;
+}
+
+ONYX_DEF(glBindTexture, (WASM_I32, WASM_I32), ()) {
+    glad_glBindTexture(P(0, i32), P(1, i32));
+    return NULL;
+}
+
+ONYX_DEF(glBlendColor, (WASM_F32, WASM_F32, WASM_F32, WASM_F32), ()) {
+    glad_glBlendColor(P(0, f32), P(1, f32), P(2, f32), P(3, f32));
+    return NULL;
+}
+
+ONYX_DEF(glBlendEquation, (WASM_I32), ()) {
+    glad_glBlendEquation(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glBlendEquationSeparate, (WASM_I32, WASM_I32), ()) {
+    glad_glBlendEquationSeparate(P(0, i32), P(1, i32));
+    return NULL;
+}
+
+ONYX_DEF(glBlendFunc, (WASM_I32, WASM_I32), ()) {
+    glad_glBlendFunc(P(0, i32), P(1, i32));
+    return NULL;
+}
+
+ONYX_DEF(glBlendFuncSeparate, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glBlendFuncSeparate(P(0, i32), P(1, i32), P(2, i32), P(3, i32));
+    return NULL;
+}
+
+ONYX_DEF(glBufferData, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glBufferData(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)), P(3, i32));
+    return NULL;
+}
+
+ONYX_DEF(glBufferSubData, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glBufferSubData(P(0, i32), P(1, i32), P(2, i32), ONYX_PTR(P(3, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glCheckFramebufferStatus, (WASM_I32), (WASM_I32)) {
+    results->data[0] = WASM_I32_VAL(glad_glCheckFramebufferStatus(P(0, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glClear, (WASM_I32), ()) {
+    glad_glClear(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glClearColor, (WASM_F32, WASM_F32, WASM_F32, WASM_F32), ()) {
+    glad_glClearColor(P(0, f32), P(1, f32), P(2, f32), P(3, f32));
+    return NULL;
+}
+
+ONYX_DEF(glClearDepthf, (WASM_F32), ()) {
+    glad_glClearDepthf(P(0, f32));
+    return NULL;
+}
+
+ONYX_DEF(glClearStencil, (WASM_I32), ()) {
+    glad_glClearStencil(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glColorMask, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glColorMask(P(0, i32), P(1, i32), P(2, i32), P(3, i32));
+    return NULL;
+}
+
+ONYX_DEF(glCompileShader, (WASM_I32), ()) {
+    glad_glCompileShader(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glCompressedTexImage2D, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glCompressedTexImage2D(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32), P(5, i32), P(6, i32), ONYX_PTR(P(7, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glCompressedTexSubImage2D, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glCompressedTexSubImage2D(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32), P(5, i32), P(6, i32), P(7, i32), ONYX_PTR(P(8, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glCopyTexImage2D, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glCopyTexImage2D(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32), P(5, i32), P(6, i32), P(7, i32));
+    return NULL;
+}
+
+ONYX_DEF(glCopyTexSubImage2D, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glCopyTexSubImage2D(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32), P(5, i32), P(6, i32), P(7, i32));
+    return NULL;
+}
+
+ONYX_DEF(glCreateProgram, (), (WASM_I32)) {
+    results->data[0] = WASM_I32_VAL(glad_glCreateProgram());
+    return NULL;
+}
+
+ONYX_DEF(glCreateShader, (WASM_I32), (WASM_I32)) {
+    results->data[0] = WASM_I32_VAL(glad_glCreateShader(P(0, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glCullFace, (WASM_I32), ()) {
+    glad_glCullFace(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glDeleteBuffers, (WASM_I32, WASM_I32), ()) {
+    glad_glDeleteBuffers(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glDeleteFramebuffers, (WASM_I32, WASM_I32), ()) {
+    glad_glDeleteFramebuffers(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glDeleteProgram, (WASM_I32), ()) {
+    glad_glDeleteProgram(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glDeleteRenderbuffers, (WASM_I32, WASM_I32), ()) {
+    glad_glDeleteRenderbuffers(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glDeleteShader, (WASM_I32), ()) {
+    glad_glDeleteShader(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glDeleteTextures, (WASM_I32, WASM_I32), ()) {
+    glad_glDeleteTextures(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glDepthFunc, (WASM_I32), ()) {
+    glad_glDepthFunc(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glDepthMask, (WASM_I32), ()) {
+    glad_glDepthMask(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glDepthRangef, (WASM_F32, WASM_F32), ()) {
+    glad_glDepthRangef(P(0, f32), P(1, f32));
+    return NULL;
+}
+
+ONYX_DEF(glDetachShader, (WASM_I32, WASM_I32), ()) {
+    glad_glDetachShader(P(0, i32), P(1, i32));
+    return NULL;
+}
+
+ONYX_DEF(glDisable, (WASM_I32), ()) {
+    glad_glDisable(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glDisableVertexAttribArray, (WASM_I32), ()) {
+    glad_glDisableVertexAttribArray(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glDrawArrays, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glDrawArrays(P(0, i32), P(1, i32), P(2, i32));
+    return NULL;
+}
+
+ONYX_DEF(glDrawElements, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glDrawElements(P(0, i32), P(1, i32), P(2, i32), ONYX_PTR(P(3, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glEnable, (WASM_I32), ()) {
+    glad_glEnable(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glEnableVertexAttribArray, (WASM_I32), ()) {
+    glad_glEnableVertexAttribArray(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glFinish, (), ()) {
+    glad_glFinish();
+    return NULL;
+}
+
+ONYX_DEF(glFlush, (), ()) {
+    glad_glFlush();
+    return NULL;
+}
+
+ONYX_DEF(glFramebufferRenderbuffer, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glFramebufferRenderbuffer(P(0, i32), P(1, i32), P(2, i32), P(3, i32));
+    return NULL;
+}
+
+ONYX_DEF(glFramebufferTexture2D, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glFramebufferTexture2D(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32));
+    return NULL;
+}
+
+ONYX_DEF(glFrontFace, (WASM_I32), ()) {
+    glad_glFrontFace(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glGenBuffers, (WASM_I32, WASM_I32), ()) {
+    glad_glGenBuffers(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGenerateMipmap, (WASM_I32), ()) {
+    glad_glGenerateMipmap(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glGenFramebuffers, (WASM_I32, WASM_I32), ()) {
+    glad_glGenFramebuffers(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGenRenderbuffers, (WASM_I32, WASM_I32), ()) {
+    glad_glGenRenderbuffers(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGenTextures, (WASM_I32, WASM_I32), ()) {
+    glad_glGenTextures(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetActiveAttrib, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetActiveAttrib(P(0, i32), P(1, i32), P(2, i32), ONYX_PTR(P(3, i32)), ONYX_PTR(P(4, i32)), ONYX_PTR(P(5, i32)), ONYX_PTR(P(6, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetActiveUniform, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetActiveUniform(P(0, i32), P(1, i32), P(2, i32), ONYX_PTR(P(3, i32)), ONYX_PTR(P(4, i32)), ONYX_PTR(P(5, i32)), ONYX_PTR(P(6, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetAttachedShaders, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetAttachedShaders(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)), ONYX_PTR(P(3, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetAttribLocation, (WASM_I32, WASM_I32), (WASM_I32)) {
+    results->data[0] = WASM_I32_VAL(glad_glGetAttribLocation(P(0, i32), ONYX_PTR(P(1, i32))));
+    return NULL;
+}
+
+ONYX_DEF(glGetBooleanv, (WASM_I32, WASM_I32), ()) {
+    glad_glGetBooleanv(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetBufferParameteriv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetBufferParameteriv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetError, (), (WASM_I32)) {
+    results->data[0] = WASM_I32_VAL(glad_glGetError());
+    return NULL;
+}
+
+ONYX_DEF(glGetFloatv, (WASM_I32, WASM_I32), ()) {
+    glad_glGetFloatv(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetFramebufferAttachmentParameteriv, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetFramebufferAttachmentParameteriv(P(0, i32), P(1, i32), P(2, i32), ONYX_PTR(P(3, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetIntegerv, (WASM_I32, WASM_I32), ()) {
+    glad_glGetIntegerv(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetProgramiv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetProgramiv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetProgramInfoLog, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetProgramInfoLog(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)), ONYX_PTR(P(3, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetRenderbufferParameteriv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetRenderbufferParameteriv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetShaderiv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetShaderiv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetShaderInfoLog, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetShaderInfoLog(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)), ONYX_PTR(P(3, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetShaderPrecisionFormat, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetShaderPrecisionFormat(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)), ONYX_PTR(P(3, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetShaderSource, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetShaderSource(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)), ONYX_PTR(P(3, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetString, (WASM_I32), (WASM_I64)) {
+    results->data[0] = WASM_I64_VAL(glad_glGetString(P(0, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetTexParameterfv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetTexParameterfv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetTexParameteriv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetTexParameteriv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetUniformfv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetUniformfv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetUniformiv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetUniformiv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetUniformLocation, (WASM_I32, WASM_I32), (WASM_I32)) {
+    results->data[0] = WASM_I32_VAL(glad_glGetUniformLocation(P(0, i32), ONYX_PTR(P(1, i32))));
+    return NULL;
+}
+
+ONYX_DEF(glGetVertexAttribfv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetVertexAttribfv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetVertexAttribiv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetVertexAttribiv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetVertexAttribPointerv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetVertexAttribPointerv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glHint, (WASM_I32, WASM_I32), ()) {
+    glad_glHint(P(0, i32), P(1, i32));
+    return NULL;
+}
+
+ONYX_DEF(glIsBuffer, (WASM_I32), (WASM_I32)) {
+    results->data[0] = WASM_I32_VAL(glad_glIsBuffer(P(0, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glIsEnabled, (WASM_I32), (WASM_I32)) {
+    results->data[0] = WASM_I32_VAL(glad_glIsEnabled(P(0, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glIsFramebuffer, (WASM_I32), (WASM_I32)) {
+    results->data[0] = WASM_I32_VAL(glad_glIsFramebuffer(P(0, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glIsProgram, (WASM_I32), (WASM_I32)) {
+    results->data[0] = WASM_I32_VAL(glad_glIsProgram(P(0, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glIsRenderbuffer, (WASM_I32), (WASM_I32)) {
+    results->data[0] = WASM_I32_VAL(glad_glIsRenderbuffer(P(0, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glIsShader, (WASM_I32), (WASM_I32)) {
+    results->data[0] = WASM_I32_VAL(glad_glIsShader(P(0, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glIsTexture, (WASM_I32), (WASM_I32)) {
+    results->data[0] = WASM_I32_VAL(glad_glIsTexture(P(0, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glLineWidth, (WASM_F32), ()) {
+    glad_glLineWidth(P(0, f32));
+    return NULL;
+}
+
+ONYX_DEF(glLinkProgram, (WASM_I32), ()) {
+    glad_glLinkProgram(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glPixelStorei, (WASM_I32, WASM_I32), ()) {
+    glad_glPixelStorei(P(0, i32), P(1, i32));
+    return NULL;
+}
+
+ONYX_DEF(glPolygonOffset, (WASM_F32, WASM_F32), ()) {
+    glad_glPolygonOffset(P(0, f32), P(1, f32));
+    return NULL;
+}
+
+ONYX_DEF(glReadPixels, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glReadPixels(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32), P(5, i32), ONYX_PTR(P(6, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glReleaseShaderCompiler, (), ()) {
+    glad_glReleaseShaderCompiler();
+    return NULL;
+}
+
+ONYX_DEF(glRenderbufferStorage, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glRenderbufferStorage(P(0, i32), P(1, i32), P(2, i32), P(3, i32));
+    return NULL;
+}
+
+ONYX_DEF(glSampleCoverage, (WASM_F32, WASM_I32), ()) {
+    glad_glSampleCoverage(P(0, f32), P(1, i32));
+    return NULL;
+}
+
+ONYX_DEF(glScissor, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glScissor(P(0, i32), P(1, i32), P(2, i32), P(3, i32));
+    return NULL;
+}
+
+ONYX_DEF(glShaderBinary, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glShaderBinary(P(0, i32), ONYX_PTR(P(1, i32)), P(2, i32), ONYX_PTR(P(3, i32)), P(4, i32));
+    return NULL;
+}
+
+ONYX_DEF(glShaderSource, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glShaderSource(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)), ONYX_PTR(P(3, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glStencilFunc, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glStencilFunc(P(0, i32), P(1, i32), P(2, i32));
+    return NULL;
+}
+
+ONYX_DEF(glStencilFuncSeparate, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glStencilFuncSeparate(P(0, i32), P(1, i32), P(2, i32), P(3, i32));
+    return NULL;
+}
+
+ONYX_DEF(glStencilMask, (WASM_I32), ()) {
+    glad_glStencilMask(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glStencilMaskSeparate, (WASM_I32, WASM_I32), ()) {
+    glad_glStencilMaskSeparate(P(0, i32), P(1, i32));
+    return NULL;
+}
+
+ONYX_DEF(glStencilOp, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glStencilOp(P(0, i32), P(1, i32), P(2, i32));
+    return NULL;
+}
+
+ONYX_DEF(glStencilOpSeparate, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glStencilOpSeparate(P(0, i32), P(1, i32), P(2, i32), P(3, i32));
+    return NULL;
+}
+
+ONYX_DEF(glTexImage2D, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glTexImage2D(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32), P(5, i32), P(6, i32), P(7, i32), ONYX_PTR(P(8, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glTexParameterf, (WASM_I32, WASM_I32, WASM_F32), ()) {
+    glad_glTexParameterf(P(0, i32), P(1, i32), P(2, f32));
+    return NULL;
+}
+
+ONYX_DEF(glTexParameterfv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glTexParameterfv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glTexParameteri, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glTexParameteri(P(0, i32), P(1, i32), P(2, i32));
+    return NULL;
+}
+
+ONYX_DEF(glTexParameteriv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glTexParameteriv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glTexSubImage2D, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glTexSubImage2D(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32), P(5, i32), P(6, i32), P(7, i32), ONYX_PTR(P(8, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUniform1f, (WASM_I32, WASM_F32), ()) {
+    glad_glUniform1f(P(0, i32), P(1, f32));
+    return NULL;
+}
+
+ONYX_DEF(glUniform1fv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniform1fv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUniform1i, (WASM_I32, WASM_I32), ()) {
+    glad_glUniform1i(P(0, i32), P(1, i32));
+    return NULL;
+}
+
+ONYX_DEF(glUniform1iv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniform1iv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUniform2f, (WASM_I32, WASM_F32, WASM_F32), ()) {
+    glad_glUniform2f(P(0, i32), P(1, f32), P(2, f32));
+    return NULL;
+}
+
+ONYX_DEF(glUniform2fv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniform2fv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUniform2i, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniform2i(P(0, i32), P(1, i32), P(2, i32));
+    return NULL;
+}
+
+ONYX_DEF(glUniform2iv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniform2iv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUniform3f, (WASM_I32, WASM_F32, WASM_F32, WASM_F32), ()) {
+    glad_glUniform3f(P(0, i32), P(1, f32), P(2, f32), P(3, f32));
+    return NULL;
+}
+
+ONYX_DEF(glUniform3fv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniform3fv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUniform3i, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniform3i(P(0, i32), P(1, i32), P(2, i32), P(3, i32));
+    return NULL;
+}
+
+ONYX_DEF(glUniform3iv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniform3iv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUniform4f, (WASM_I32, WASM_F32, WASM_F32, WASM_F32, WASM_F32), ()) {
+    glad_glUniform4f(P(0, i32), P(1, f32), P(2, f32), P(3, f32), P(4, f32));
+    return NULL;
+}
+
+ONYX_DEF(glUniform4fv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniform4fv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUniform4i, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniform4i(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32));
+    return NULL;
+}
+
+ONYX_DEF(glUniform4iv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniform4iv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUniformMatrix2fv, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniformMatrix2fv(P(0, i32), P(1, i32), P(2, i32), ONYX_PTR(P(3, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUniformMatrix3fv, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniformMatrix3fv(P(0, i32), P(1, i32), P(2, i32), ONYX_PTR(P(3, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUniformMatrix4fv, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniformMatrix4fv(P(0, i32), P(1, i32), P(2, i32), ONYX_PTR(P(3, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUseProgram, (WASM_I32), ()) {
+    glad_glUseProgram(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glValidateProgram, (WASM_I32), ()) {
+    glad_glValidateProgram(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glVertexAttrib1f, (WASM_I32, WASM_F32), ()) {
+    glad_glVertexAttrib1f(P(0, i32), P(1, f32));
+    return NULL;
+}
+
+ONYX_DEF(glVertexAttrib1fv, (WASM_I32, WASM_I32), ()) {
+    glad_glVertexAttrib1fv(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glVertexAttrib2f, (WASM_I32, WASM_F32, WASM_F32), ()) {
+    glad_glVertexAttrib2f(P(0, i32), P(1, f32), P(2, f32));
+    return NULL;
+}
+
+ONYX_DEF(glVertexAttrib2fv, (WASM_I32, WASM_I32), ()) {
+    glad_glVertexAttrib2fv(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glVertexAttrib3f, (WASM_I32, WASM_F32, WASM_F32, WASM_F32), ()) {
+    glad_glVertexAttrib3f(P(0, i32), P(1, f32), P(2, f32), P(3, f32));
+    return NULL;
+}
+
+ONYX_DEF(glVertexAttrib3fv, (WASM_I32, WASM_I32), ()) {
+    glad_glVertexAttrib3fv(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glVertexAttrib4f, (WASM_I32, WASM_F32, WASM_F32, WASM_F32, WASM_F32), ()) {
+    glad_glVertexAttrib4f(P(0, i32), P(1, f32), P(2, f32), P(3, f32), P(4, f32));
+    return NULL;
+}
+
+ONYX_DEF(glVertexAttrib4fv, (WASM_I32, WASM_I32), ()) {
+    glad_glVertexAttrib4fv(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glVertexAttribPointer, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glVertexAttribPointer(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32), ONYX_PTR(P(5, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glViewport, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glViewport(P(0, i32), P(1, i32), P(2, i32), P(3, i32));
+    return NULL;
+}
+
+ONYX_DEF(glReadBuffer, (WASM_I32), ()) {
+    glad_glReadBuffer(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glDrawRangeElements, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glDrawRangeElements(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32), ONYX_PTR(P(5, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glTexImage3D, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glTexImage3D(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32), P(5, i32), P(6, i32), P(7, i32), P(8, i32), ONYX_PTR(P(9, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glTexSubImage3D, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glTexSubImage3D(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32), P(5, i32), P(6, i32), P(7, i32), P(8, i32), P(9, i32), ONYX_PTR(P(10, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glCopyTexSubImage3D, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glCopyTexSubImage3D(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32), P(5, i32), P(6, i32), P(7, i32), P(8, i32));
+    return NULL;
+}
+
+ONYX_DEF(glCompressedTexImage3D, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glCompressedTexImage3D(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32), P(5, i32), P(6, i32), P(7, i32), ONYX_PTR(P(8, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glCompressedTexSubImage3D, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glCompressedTexSubImage3D(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32), P(5, i32), P(6, i32), P(7, i32), P(8, i32), P(9, i32), ONYX_PTR(P(10, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGenQueries, (WASM_I32, WASM_I32), ()) {
+    glad_glGenQueries(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glDeleteQueries, (WASM_I32, WASM_I32), ()) {
+    glad_glDeleteQueries(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glIsQuery, (WASM_I32), (WASM_I32)) {
+    results->data[0] = WASM_I32_VAL(glad_glIsQuery(P(0, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glBeginQuery, (WASM_I32, WASM_I32), ()) {
+    glad_glBeginQuery(P(0, i32), P(1, i32));
+    return NULL;
+}
+
+ONYX_DEF(glEndQuery, (WASM_I32), ()) {
+    glad_glEndQuery(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glGetQueryiv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetQueryiv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetQueryObjectuiv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetQueryObjectuiv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUnmapBuffer, (WASM_I32), (WASM_I32)) {
+    results->data[0] = WASM_I32_VAL(glad_glUnmapBuffer(P(0, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetBufferPointerv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetBufferPointerv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glDrawBuffers, (WASM_I32, WASM_I32), ()) {
+    glad_glDrawBuffers(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUniformMatrix2x3fv, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniformMatrix2x3fv(P(0, i32), P(1, i32), P(2, i32), ONYX_PTR(P(3, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUniformMatrix3x2fv, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniformMatrix3x2fv(P(0, i32), P(1, i32), P(2, i32), ONYX_PTR(P(3, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUniformMatrix2x4fv, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniformMatrix2x4fv(P(0, i32), P(1, i32), P(2, i32), ONYX_PTR(P(3, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUniformMatrix4x2fv, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniformMatrix4x2fv(P(0, i32), P(1, i32), P(2, i32), ONYX_PTR(P(3, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUniformMatrix3x4fv, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniformMatrix3x4fv(P(0, i32), P(1, i32), P(2, i32), ONYX_PTR(P(3, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUniformMatrix4x3fv, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniformMatrix4x3fv(P(0, i32), P(1, i32), P(2, i32), ONYX_PTR(P(3, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glBlitFramebuffer, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glBlitFramebuffer(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32), P(5, i32), P(6, i32), P(7, i32), P(8, i32), P(9, i32));
+    return NULL;
+}
+
+ONYX_DEF(glRenderbufferStorageMultisample, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glRenderbufferStorageMultisample(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32));
+    return NULL;
+}
+
+ONYX_DEF(glFramebufferTextureLayer, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glFramebufferTextureLayer(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32));
+    return NULL;
+}
+
+ONYX_DEF(glMapBufferRange, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), (WASM_I32)) {
+    results->data[0] = WASM_I32_VAL(glad_glMapBufferRange(P(0, i32), P(1, i32), P(2, i32), P(3, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glFlushMappedBufferRange, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glFlushMappedBufferRange(P(0, i32), P(1, i32), P(2, i32));
+    return NULL;
+}
+
+ONYX_DEF(glBindVertexArray, (WASM_I32), ()) {
+    glad_glBindVertexArray(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glDeleteVertexArrays, (WASM_I32, WASM_I32), ()) {
+    glad_glDeleteVertexArrays(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGenVertexArrays, (WASM_I32, WASM_I32), ()) {
+    glad_glGenVertexArrays(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glIsVertexArray, (WASM_I32), (WASM_I32)) {
+    results->data[0] = WASM_I32_VAL(glad_glIsVertexArray(P(0, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetIntegeri_v, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetIntegeri_v(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glBeginTransformFeedback, (WASM_I32), ()) {
+    glad_glBeginTransformFeedback(P(0, i32));
+    return NULL;
+}
+
+ONYX_DEF(glEndTransformFeedback, (), ()) {
+    glad_glEndTransformFeedback();
+    return NULL;
+}
+
+ONYX_DEF(glBindBufferRange, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glBindBufferRange(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32));
+    return NULL;
+}
+
+ONYX_DEF(glBindBufferBase, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glBindBufferBase(P(0, i32), P(1, i32), P(2, i32));
+    return NULL;
+}
+
+ONYX_DEF(glTransformFeedbackVaryings, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glTransformFeedbackVaryings(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)), P(3, i32));
+    return NULL;
+}
+
+ONYX_DEF(glGetTransformFeedbackVarying, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetTransformFeedbackVarying(P(0, i32), P(1, i32), P(2, i32), ONYX_PTR(P(3, i32)), ONYX_PTR(P(4, i32)), ONYX_PTR(P(5, i32)), ONYX_PTR(P(6, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glVertexAttribIPointer, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glVertexAttribIPointer(P(0, i32), P(1, i32), P(2, i32), P(3, i32), ONYX_PTR(P(4, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetVertexAttribIiv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetVertexAttribIiv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetVertexAttribIuiv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetVertexAttribIuiv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glVertexAttribI4i, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glVertexAttribI4i(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32));
+    return NULL;
+}
+
+ONYX_DEF(glVertexAttribI4ui, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glVertexAttribI4ui(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32));
+    return NULL;
+}
+
+ONYX_DEF(glVertexAttribI4iv, (WASM_I32, WASM_I32), ()) {
+    glad_glVertexAttribI4iv(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glVertexAttribI4uiv, (WASM_I32, WASM_I32), ()) {
+    glad_glVertexAttribI4uiv(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetUniformuiv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetUniformuiv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetFragDataLocation, (WASM_I32, WASM_I32), (WASM_I32)) {
+    results->data[0] = WASM_I32_VAL(glad_glGetFragDataLocation(P(0, i32), ONYX_PTR(P(1, i32))));
+    return NULL;
+}
+
+ONYX_DEF(glUniform1ui, (WASM_I32, WASM_I32), ()) {
+    glad_glUniform1ui(P(0, i32), P(1, i32));
+    return NULL;
+}
+
+ONYX_DEF(glUniform2ui, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniform2ui(P(0, i32), P(1, i32), P(2, i32));
+    return NULL;
+}
+
+ONYX_DEF(glUniform3ui, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniform3ui(P(0, i32), P(1, i32), P(2, i32), P(3, i32));
+    return NULL;
+}
+
+ONYX_DEF(glUniform4ui, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniform4ui(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32));
+    return NULL;
+}
+
+ONYX_DEF(glUniform1uiv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniform1uiv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUniform2uiv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniform2uiv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUniform3uiv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniform3uiv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUniform4uiv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniform4uiv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glClearBufferiv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glClearBufferiv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glClearBufferuiv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glClearBufferuiv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glClearBufferfv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glClearBufferfv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glClearBufferfi, (WASM_I32, WASM_I32, WASM_F32, WASM_I32), ()) {
+    glad_glClearBufferfi(P(0, i32), P(1, i32), P(2, f32), P(3, i32));
+    return NULL;
+}
+
+ONYX_DEF(glGetStringi, (WASM_I32, WASM_I32), (WASM_I64)) {
+    results->data[0] = WASM_I64_VAL(glad_glGetStringi(P(0, i32), P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glCopyBufferSubData, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glCopyBufferSubData(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32));
+    return NULL;
+}
+
+ONYX_DEF(glGetUniformIndices, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetUniformIndices(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)), ONYX_PTR(P(3, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetActiveUniformsiv, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetActiveUniformsiv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)), P(3, i32), ONYX_PTR(P(4, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetUniformBlockIndex, (WASM_I32, WASM_I32), (WASM_I32)) {
+    results->data[0] = WASM_I32_VAL(glad_glGetUniformBlockIndex(P(0, i32), ONYX_PTR(P(1, i32))));
+    return NULL;
+}
+
+ONYX_DEF(glGetActiveUniformBlockiv, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetActiveUniformBlockiv(P(0, i32), P(1, i32), P(2, i32), ONYX_PTR(P(3, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetActiveUniformBlockName, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetActiveUniformBlockName(P(0, i32), P(1, i32), P(2, i32), ONYX_PTR(P(3, i32)), ONYX_PTR(P(4, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glUniformBlockBinding, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glUniformBlockBinding(P(0, i32), P(1, i32), P(2, i32));
+    return NULL;
+}
+
+ONYX_DEF(glDrawArraysInstanced, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glDrawArraysInstanced(P(0, i32), P(1, i32), P(2, i32), P(3, i32));
+    return NULL;
+}
+
+ONYX_DEF(glDrawElementsInstanced, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glDrawElementsInstanced(P(0, i32), P(1, i32), P(2, i32), ONYX_PTR(P(3, i32)), P(4, i32));
+    return NULL;
+}
+
+ONYX_DEF(glGetInteger64v, (WASM_I32, WASM_I32), ()) {
+    glad_glGetInteger64v(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetInteger64i_v, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetInteger64i_v(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetBufferParameteri64v, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetBufferParameteri64v(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGenSamplers, (WASM_I32, WASM_I32), ()) {
+    glad_glGenSamplers(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glDeleteSamplers, (WASM_I32, WASM_I32), ()) {
+    glad_glDeleteSamplers(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glIsSampler, (WASM_I32), (WASM_I32)) {
+    results->data[0] = WASM_I32_VAL(glad_glIsSampler(P(0, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glBindSampler, (WASM_I32, WASM_I32), ()) {
+    glad_glBindSampler(P(0, i32), P(1, i32));
+    return NULL;
+}
+
+ONYX_DEF(glSamplerParameteri, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glSamplerParameteri(P(0, i32), P(1, i32), P(2, i32));
+    return NULL;
+}
+
+ONYX_DEF(glSamplerParameteriv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glSamplerParameteriv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glSamplerParameterf, (WASM_I32, WASM_I32, WASM_F32), ()) {
+    glad_glSamplerParameterf(P(0, i32), P(1, i32), P(2, f32));
+    return NULL;
+}
+
+ONYX_DEF(glSamplerParameterfv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glSamplerParameterfv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetSamplerParameteriv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetSamplerParameteriv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGetSamplerParameterfv, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetSamplerParameterfv(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glVertexAttribDivisor, (WASM_I32, WASM_I32), ()) {
+    glad_glVertexAttribDivisor(P(0, i32), P(1, i32));
+    return NULL;
+}
+
+ONYX_DEF(glBindTransformFeedback, (WASM_I32, WASM_I32), ()) {
+    glad_glBindTransformFeedback(P(0, i32), P(1, i32));
+    return NULL;
+}
+
+ONYX_DEF(glDeleteTransformFeedbacks, (WASM_I32, WASM_I32), ()) {
+    glad_glDeleteTransformFeedbacks(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glGenTransformFeedbacks, (WASM_I32, WASM_I32), ()) {
+    glad_glGenTransformFeedbacks(P(0, i32), ONYX_PTR(P(1, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glIsTransformFeedback, (WASM_I32), (WASM_I32)) {
+    results->data[0] = WASM_I32_VAL(glad_glIsTransformFeedback(P(0, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glPauseTransformFeedback, (), ()) {
+    glad_glPauseTransformFeedback();
+    return NULL;
+}
+
+ONYX_DEF(glResumeTransformFeedback, (), ()) {
+    glad_glResumeTransformFeedback();
+    return NULL;
+}
+
+ONYX_DEF(glGetProgramBinary, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetProgramBinary(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)), ONYX_PTR(P(3, i32)), ONYX_PTR(P(4, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glProgramBinary, (WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glProgramBinary(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)), P(3, i32));
+    return NULL;
+}
+
+ONYX_DEF(glProgramParameteri, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glProgramParameteri(P(0, i32), P(1, i32), P(2, i32));
+    return NULL;
+}
+
+ONYX_DEF(glInvalidateFramebuffer, (WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glInvalidateFramebuffer(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)));
+    return NULL;
+}
+
+ONYX_DEF(glInvalidateSubFramebuffer, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glInvalidateSubFramebuffer(P(0, i32), P(1, i32), ONYX_PTR(P(2, i32)), P(3, i32), P(4, i32), P(5, i32), P(6, i32));
+    return NULL;
+}
+
+ONYX_DEF(glTexStorage2D, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glTexStorage2D(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32));
+    return NULL;
+}
+
+ONYX_DEF(glTexStorage3D, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glTexStorage3D(P(0, i32), P(1, i32), P(2, i32), P(3, i32), P(4, i32), P(5, i32));
+    return NULL;
+}
+
+ONYX_DEF(glGetInternalformativ, (WASM_I32, WASM_I32, WASM_I32, WASM_I32, WASM_I32), ()) {
+    glad_glGetInternalformativ(P(0, i32), P(1, i32), P(2, i32), P(3, i32), ONYX_PTR(P(4, i32)));
+    return NULL;
+}
+
+
+
+ONYX_LIBRARY {
+    ONYX_FUNC(glInit)
+    ONYX_FUNC(glActiveTexture)
+    ONYX_FUNC(glAttachShader)
+    ONYX_FUNC(glBindAttribLocation)
+    ONYX_FUNC(glBindBuffer)
+    ONYX_FUNC(glBindFramebuffer)
+    ONYX_FUNC(glBindRenderbuffer)
+    ONYX_FUNC(glBindTexture)
+    ONYX_FUNC(glBlendColor)
+    ONYX_FUNC(glBlendEquation)
+    ONYX_FUNC(glBlendEquationSeparate)
+    ONYX_FUNC(glBlendFunc)
+    ONYX_FUNC(glBlendFuncSeparate)
+    ONYX_FUNC(glBufferData)
+    ONYX_FUNC(glBufferSubData)
+    ONYX_FUNC(glCheckFramebufferStatus)
+    ONYX_FUNC(glClear)
+    ONYX_FUNC(glClearColor)
+    ONYX_FUNC(glClearDepthf)
+    ONYX_FUNC(glClearStencil)
+    ONYX_FUNC(glColorMask)
+    ONYX_FUNC(glCompileShader)
+    ONYX_FUNC(glCompressedTexImage2D)
+    ONYX_FUNC(glCompressedTexSubImage2D)
+    ONYX_FUNC(glCopyTexImage2D)
+    ONYX_FUNC(glCopyTexSubImage2D)
+    ONYX_FUNC(glCreateProgram)
+    ONYX_FUNC(glCreateShader)
+    ONYX_FUNC(glCullFace)
+    ONYX_FUNC(glDeleteBuffers)
+    ONYX_FUNC(glDeleteFramebuffers)
+    ONYX_FUNC(glDeleteProgram)
+    ONYX_FUNC(glDeleteRenderbuffers)
+    ONYX_FUNC(glDeleteShader)
+    ONYX_FUNC(glDeleteTextures)
+    ONYX_FUNC(glDepthFunc)
+    ONYX_FUNC(glDepthMask)
+    ONYX_FUNC(glDepthRangef)
+    ONYX_FUNC(glDetachShader)
+    ONYX_FUNC(glDisable)
+    ONYX_FUNC(glDisableVertexAttribArray)
+    ONYX_FUNC(glDrawArrays)
+    ONYX_FUNC(glDrawElements)
+    ONYX_FUNC(glEnable)
+    ONYX_FUNC(glEnableVertexAttribArray)
+    ONYX_FUNC(glFinish)
+    ONYX_FUNC(glFlush)
+    ONYX_FUNC(glFramebufferRenderbuffer)
+    ONYX_FUNC(glFramebufferTexture2D)
+    ONYX_FUNC(glFrontFace)
+    ONYX_FUNC(glGenBuffers)
+    ONYX_FUNC(glGenerateMipmap)
+    ONYX_FUNC(glGenFramebuffers)
+    ONYX_FUNC(glGenRenderbuffers)
+    ONYX_FUNC(glGenTextures)
+    ONYX_FUNC(glGetActiveAttrib)
+    ONYX_FUNC(glGetActiveUniform)
+    ONYX_FUNC(glGetAttachedShaders)
+    ONYX_FUNC(glGetAttribLocation)
+    ONYX_FUNC(glGetBooleanv)
+    ONYX_FUNC(glGetBufferParameteriv)
+    ONYX_FUNC(glGetError)
+    ONYX_FUNC(glGetFloatv)
+    ONYX_FUNC(glGetFramebufferAttachmentParameteriv)
+    ONYX_FUNC(glGetIntegerv)
+    ONYX_FUNC(glGetProgramiv)
+    ONYX_FUNC(glGetProgramInfoLog)
+    ONYX_FUNC(glGetRenderbufferParameteriv)
+    ONYX_FUNC(glGetShaderiv)
+    ONYX_FUNC(glGetShaderInfoLog)
+    ONYX_FUNC(glGetShaderPrecisionFormat)
+    ONYX_FUNC(glGetShaderSource)
+    ONYX_FUNC(glGetString)
+    ONYX_FUNC(glGetTexParameterfv)
+    ONYX_FUNC(glGetTexParameteriv)
+    ONYX_FUNC(glGetUniformfv)
+    ONYX_FUNC(glGetUniformiv)
+    ONYX_FUNC(glGetUniformLocation)
+    ONYX_FUNC(glGetVertexAttribfv)
+    ONYX_FUNC(glGetVertexAttribiv)
+    ONYX_FUNC(glGetVertexAttribPointerv)
+    ONYX_FUNC(glHint)
+    ONYX_FUNC(glIsBuffer)
+    ONYX_FUNC(glIsEnabled)
+    ONYX_FUNC(glIsFramebuffer)
+    ONYX_FUNC(glIsProgram)
+    ONYX_FUNC(glIsRenderbuffer)
+    ONYX_FUNC(glIsShader)
+    ONYX_FUNC(glIsTexture)
+    ONYX_FUNC(glLineWidth)
+    ONYX_FUNC(glLinkProgram)
+    ONYX_FUNC(glPixelStorei)
+    ONYX_FUNC(glPolygonOffset)
+    ONYX_FUNC(glReadPixels)
+    ONYX_FUNC(glReleaseShaderCompiler)
+    ONYX_FUNC(glRenderbufferStorage)
+    ONYX_FUNC(glSampleCoverage)
+    ONYX_FUNC(glScissor)
+    ONYX_FUNC(glShaderBinary)
+    ONYX_FUNC(glShaderSource)
+    ONYX_FUNC(glStencilFunc)
+    ONYX_FUNC(glStencilFuncSeparate)
+    ONYX_FUNC(glStencilMask)
+    ONYX_FUNC(glStencilMaskSeparate)
+    ONYX_FUNC(glStencilOp)
+    ONYX_FUNC(glStencilOpSeparate)
+    ONYX_FUNC(glTexImage2D)
+    ONYX_FUNC(glTexParameterf)
+    ONYX_FUNC(glTexParameterfv)
+    ONYX_FUNC(glTexParameteri)
+    ONYX_FUNC(glTexParameteriv)
+    ONYX_FUNC(glTexSubImage2D)
+    ONYX_FUNC(glUniform1f)
+    ONYX_FUNC(glUniform1fv)
+    ONYX_FUNC(glUniform1i)
+    ONYX_FUNC(glUniform1iv)
+    ONYX_FUNC(glUniform2f)
+    ONYX_FUNC(glUniform2fv)
+    ONYX_FUNC(glUniform2i)
+    ONYX_FUNC(glUniform2iv)
+    ONYX_FUNC(glUniform3f)
+    ONYX_FUNC(glUniform3fv)
+    ONYX_FUNC(glUniform3i)
+    ONYX_FUNC(glUniform3iv)
+    ONYX_FUNC(glUniform4f)
+    ONYX_FUNC(glUniform4fv)
+    ONYX_FUNC(glUniform4i)
+    ONYX_FUNC(glUniform4iv)
+    ONYX_FUNC(glUniformMatrix2fv)
+    ONYX_FUNC(glUniformMatrix3fv)
+    ONYX_FUNC(glUniformMatrix4fv)
+    ONYX_FUNC(glUseProgram)
+    ONYX_FUNC(glValidateProgram)
+    ONYX_FUNC(glVertexAttrib1f)
+    ONYX_FUNC(glVertexAttrib1fv)
+    ONYX_FUNC(glVertexAttrib2f)
+    ONYX_FUNC(glVertexAttrib2fv)
+    ONYX_FUNC(glVertexAttrib3f)
+    ONYX_FUNC(glVertexAttrib3fv)
+    ONYX_FUNC(glVertexAttrib4f)
+    ONYX_FUNC(glVertexAttrib4fv)
+    ONYX_FUNC(glVertexAttribPointer)
+    ONYX_FUNC(glViewport)
+    ONYX_FUNC(glReadBuffer)
+    ONYX_FUNC(glDrawRangeElements)
+    ONYX_FUNC(glTexImage3D)
+    ONYX_FUNC(glTexSubImage3D)
+    ONYX_FUNC(glCopyTexSubImage3D)
+    ONYX_FUNC(glCompressedTexImage3D)
+    ONYX_FUNC(glCompressedTexSubImage3D)
+    ONYX_FUNC(glGenQueries)
+    ONYX_FUNC(glDeleteQueries)
+    ONYX_FUNC(glIsQuery)
+    ONYX_FUNC(glBeginQuery)
+    ONYX_FUNC(glEndQuery)
+    ONYX_FUNC(glGetQueryiv)
+    ONYX_FUNC(glGetQueryObjectuiv)
+    ONYX_FUNC(glUnmapBuffer)
+    ONYX_FUNC(glGetBufferPointerv)
+    ONYX_FUNC(glDrawBuffers)
+    ONYX_FUNC(glUniformMatrix2x3fv)
+    ONYX_FUNC(glUniformMatrix3x2fv)
+    ONYX_FUNC(glUniformMatrix2x4fv)
+    ONYX_FUNC(glUniformMatrix4x2fv)
+    ONYX_FUNC(glUniformMatrix3x4fv)
+    ONYX_FUNC(glUniformMatrix4x3fv)
+    ONYX_FUNC(glBlitFramebuffer)
+    ONYX_FUNC(glRenderbufferStorageMultisample)
+    ONYX_FUNC(glFramebufferTextureLayer)
+    ONYX_FUNC(glMapBufferRange)
+    ONYX_FUNC(glFlushMappedBufferRange)
+    ONYX_FUNC(glBindVertexArray)
+    ONYX_FUNC(glDeleteVertexArrays)
+    ONYX_FUNC(glGenVertexArrays)
+    ONYX_FUNC(glIsVertexArray)
+    ONYX_FUNC(glGetIntegeri_v)
+    ONYX_FUNC(glBeginTransformFeedback)
+    ONYX_FUNC(glEndTransformFeedback)
+    ONYX_FUNC(glBindBufferRange)
+    ONYX_FUNC(glBindBufferBase)
+    ONYX_FUNC(glTransformFeedbackVaryings)
+    ONYX_FUNC(glGetTransformFeedbackVarying)
+    ONYX_FUNC(glVertexAttribIPointer)
+    ONYX_FUNC(glGetVertexAttribIiv)
+    ONYX_FUNC(glGetVertexAttribIuiv)
+    ONYX_FUNC(glVertexAttribI4i)
+    ONYX_FUNC(glVertexAttribI4ui)
+    ONYX_FUNC(glVertexAttribI4iv)
+    ONYX_FUNC(glVertexAttribI4uiv)
+    ONYX_FUNC(glGetUniformuiv)
+    ONYX_FUNC(glGetFragDataLocation)
+    ONYX_FUNC(glUniform1ui)
+    ONYX_FUNC(glUniform2ui)
+    ONYX_FUNC(glUniform3ui)
+    ONYX_FUNC(glUniform4ui)
+    ONYX_FUNC(glUniform1uiv)
+    ONYX_FUNC(glUniform2uiv)
+    ONYX_FUNC(glUniform3uiv)
+    ONYX_FUNC(glUniform4uiv)
+    ONYX_FUNC(glClearBufferiv)
+    ONYX_FUNC(glClearBufferuiv)
+    ONYX_FUNC(glClearBufferfv)
+    ONYX_FUNC(glClearBufferfi)
+    ONYX_FUNC(glGetStringi)
+    ONYX_FUNC(glCopyBufferSubData)
+    ONYX_FUNC(glGetUniformIndices)
+    ONYX_FUNC(glGetActiveUniformsiv)
+    ONYX_FUNC(glGetUniformBlockIndex)
+    ONYX_FUNC(glGetActiveUniformBlockiv)
+    ONYX_FUNC(glGetActiveUniformBlockName)
+    ONYX_FUNC(glUniformBlockBinding)
+    ONYX_FUNC(glDrawArraysInstanced)
+    ONYX_FUNC(glDrawElementsInstanced)
+    ONYX_FUNC(glGetInteger64v)
+    ONYX_FUNC(glGetInteger64i_v)
+    ONYX_FUNC(glGetBufferParameteri64v)
+    ONYX_FUNC(glGenSamplers)
+    ONYX_FUNC(glDeleteSamplers)
+    ONYX_FUNC(glIsSampler)
+    ONYX_FUNC(glBindSampler)
+    ONYX_FUNC(glSamplerParameteri)
+    ONYX_FUNC(glSamplerParameteriv)
+    ONYX_FUNC(glSamplerParameterf)
+    ONYX_FUNC(glSamplerParameterfv)
+    ONYX_FUNC(glGetSamplerParameteriv)
+    ONYX_FUNC(glGetSamplerParameterfv)
+    ONYX_FUNC(glVertexAttribDivisor)
+    ONYX_FUNC(glBindTransformFeedback)
+    ONYX_FUNC(glDeleteTransformFeedbacks)
+    ONYX_FUNC(glGenTransformFeedbacks)
+    ONYX_FUNC(glIsTransformFeedback)
+    ONYX_FUNC(glPauseTransformFeedback)
+    ONYX_FUNC(glResumeTransformFeedback)
+    ONYX_FUNC(glGetProgramBinary)
+    ONYX_FUNC(glProgramBinary)
+    ONYX_FUNC(glProgramParameteri)
+    ONYX_FUNC(glInvalidateFramebuffer)
+    ONYX_FUNC(glInvalidateSubFramebuffer)
+    ONYX_FUNC(glTexStorage2D)
+    ONYX_FUNC(glTexStorage3D)
+    ONYX_FUNC(glGetInternalformativ)
+    NULL
+};
\ No newline at end of file
index 9ac549b45d57e7d39b20f2abc17c401ddfbfcffe..95e41aef9f48cf0eee318d5772c7f1f849bdc344 100644 (file)
@@ -24,6 +24,7 @@ Binding_Config :: struct {
     output_file: str;
     cast_map: [] Cast_Mapping;
     custom_implementations: [] Impl_Mapping;
+    name_map: (str) -> str = null_proc;
 }
 
 build_c_binding :: (use binding_config: Binding_Config) -> bool {
@@ -42,7 +43,7 @@ build_c_binding :: (use binding_config: Binding_Config) -> bool {
                 }
             }
 
-            write_function_body(^writer, it, cast_map);
+            write_function_body(^writer, it, cast_map, name_map);
         }
 
         write_library_block(^writer, fb.funcs);
@@ -69,7 +70,7 @@ write_file_introduction :: (writer: ^io.Writer, preamble: [] str, name: str) {
 """, name);
 }
 
-write_function_body :: (writer, ff, cast_map) => {
+write_function_body :: (writer, ff, cast_map, name_map) => {
     use info;
 
     method_type := ff.type;
@@ -90,7 +91,14 @@ write_function_body :: (writer, ff, cast_map) => {
     io.write(writer, "), (");
     io.write(writer, type_encoding(method_info.return_type));
     io.write(writer, ")) {\n");
-    print_body(writer, ff.name, method_info, cast_map);
+
+    method_name := ff.name;
+    if name_map != null_proc {
+        method_name = name_map(method_name);
+    }
+
+    print_body(writer, method_name, method_info, cast_map);
+
     io.write(writer, "}\n\n");
 }
 
index 33c84a578ef7e01edc13136c172713de3dfe9851..69cef4ee36997f4f1cf49ce2b539aeb33ec07080 100644 (file)
@@ -19,7 +19,7 @@ module_path :: (file_path: str) -> str {
     return out;
 }
 
-compile_c_file :: (path: str, dest: str, includes: [] str = .[], flags := "") -> bool {
+compile_c_file :: (path: str, dest: str, includes: [] str = .[], libraries: [] str = .[], flags := "") -> bool {
     printf("Compiling '{}' -> '{}'.\n", path, dest);
 
     #if runtime.compiler_os == .Linux {
@@ -29,9 +29,7 @@ compile_c_file :: (path: str, dest: str, includes: [] str = .[], flags := "") ->
         args << path;
 
         args << "-I";
-        args << "include";
-        args << "-I";
-        args << "lib/common/include";
+        args << "/usr/share/onyx/include";
 
         for includes {
             args << "-I";
@@ -45,6 +43,10 @@ compile_c_file :: (path: str, dest: str, includes: [] str = .[], flags := "") ->
         args << "-o";
         args << dest;
 
+        for libraries {
+            args << aprintf("-l{}", it);
+        }
+
         proc := os.process_spawn(Linux_Compiler, args);
         defer os.process_destroy(^proc);
 
@@ -55,9 +57,10 @@ compile_c_file :: (path: str, dest: str, includes: [] str = .[], flags := "") ->
         exit := os.process_wait(^proc);
         println(exit);
         println(output);
+        return exit == .Success;
     }
 
     #if runtime.compiler_os == .Windows {
-        
+        return true;
     }
 }
\ No newline at end of file