From 1a19373de4d47a55454dcc53ccbc103d1beaefa5 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sat, 14 May 2022 15:54:01 -0500 Subject: [PATCH] module updates; better build files --- build.bat | 4 +- build.sh | 11 +- core/runtime/onyx_run.onyx | 11 + core/std.onyx | 1 - core/stdio.onyx | 15 + core/string.onyx | 2 + core/string/builder.onyx | 76 -- modules/glfw3/build.onyx | 15 +- modules/glfw3/build.sh | 5 - modules/glfw3/onyx_glfw3.so | Bin 92176 -> 100456 bytes modules/http/headers.onyx | 9 + modules/ncurses/build.onyx | 17 +- modules/ncurses/build.sh | 4 - modules/ncurses/ncurses.c | 3 + modules/ncurses/onyx_ncurses.so | Bin 216184 -> 228560 bytes modules/opengles/build.bat | 2 +- modules/opengles/build.onyx | 54 ++ modules/opengles/build.sh | 3 - modules/opengles/module.onyx | 24 +- modules/opengles/onyx_opengles.c | 811 ---------------- modules/opengles/onyx_opengles.so | Bin 237120 -> 240744 bytes modules/opengles/opengles.c | 1466 +++++++++++++++++++++++++++++ scripts/c_binding.onyx | 14 +- scripts/c_library.onyx | 13 +- 24 files changed, 1634 insertions(+), 926 deletions(-) delete mode 100644 core/string/builder.onyx delete mode 100755 modules/glfw3/build.sh delete mode 100755 modules/ncurses/build.sh create mode 100644 modules/opengles/build.onyx delete mode 100755 modules/opengles/build.sh delete mode 100644 modules/opengles/onyx_opengles.c create mode 100644 modules/opengles/opengles.c diff --git a/build.bat b/build.bat index edb07682..41d2ef9b 100644 --- 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 diff --git a/build.sh b/build.sh index ae07d20b..ff19219b 100755 --- 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" diff --git a/core/runtime/onyx_run.onyx b/core/runtime/onyx_run.onyx index 2efe9526..3a25ca42 100644 --- a/core/runtime/onyx_run.onyx +++ b/core/runtime/onyx_run.onyx @@ -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 = .{ diff --git a/core/std.onyx b/core/std.onyx index 8c888b77..c32ea1da 100644 --- a/core/std.onyx +++ b/core/std.onyx @@ -19,7 +19,6 @@ package core #load "./hash" #load "./string" -#load "./string/builder" #load "./string/reader" #load "./string/buffer" diff --git a/core/stdio.onyx b/core/stdio.onyx index 7f872596..f859943e 100644 --- a/core/stdio.onyx +++ b/core/stdio.onyx @@ -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); diff --git a/core/string.onyx b/core/string.onyx index d9b57b31..682aa322 100644 --- a/core/string.onyx +++ b/core/string.onyx @@ -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 index 7ff03293..00000000 --- a/core/string/builder.onyx +++ /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 diff --git a/modules/glfw3/build.onyx b/modules/glfw3/build.onyx index 50fa0eca..fb47c85e 100644 --- a/modules/glfw3/build.onyx +++ b/modules/glfw3/build.onyx @@ -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 index b7b38863..00000000 --- a/modules/glfw3/build.sh +++ /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 diff --git a/modules/glfw3/onyx_glfw3.so b/modules/glfw3/onyx_glfw3.so index dd2da0c0230868b6b6aae460358cbaf94a02df92..168d72232358ac5bac3318ec34ec4ec33d726648 100755 GIT binary patch literal 100456 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 SuYEV_KmKhcIhiRi*7|?=uDV_T literal 92176 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 diff --git a/modules/http/headers.onyx b/modules/http/headers.onyx index 6205d45c..2151ac55 100644 --- a/modules/http/headers.onyx +++ b/modules/http/headers.onyx @@ -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; } diff --git a/modules/ncurses/build.onyx b/modules/ncurses/build.onyx index ccdf0321..66c540ea 100644 --- a/modules/ncurses/build.onyx +++ b/modules/ncurses/build.onyx @@ -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 index 2412b380..00000000 --- a/modules/ncurses/build.sh +++ /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 diff --git a/modules/ncurses/ncurses.c b/modules/ncurses/ncurses.c index 275ef36d..efc67a62 100644 --- a/modules/ncurses/ncurses.c +++ b/modules/ncurses/ncurses.c @@ -1,3 +1,6 @@ +// +// THIS FILE WAS AUTOMATICALLY GENERATED. +// #include "ncurses.h" diff --git a/modules/ncurses/onyx_ncurses.so b/modules/ncurses/onyx_ncurses.so index 3ba7d3cf6961855261e7c7b45640a28b4ee6317f..b92ce9e5398b5916f5f159cf3b4a9c999c79cb02 100755 GIT binary patch literal 228560 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%0Djf- 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 diff --git a/modules/opengles/build.bat b/modules/opengles/build.bat index 37663769..d1a8d4fd 100644 --- a/modules/opengles/build.bat +++ b/modules/opengles/build.bat @@ -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 index 00000000..39d26b5d --- /dev/null +++ b/modules/opengles/build.onyx @@ -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 index 7702b256..00000000 --- a/modules/opengles/build.sh +++ /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 diff --git a/modules/opengles/module.onyx b/modules/opengles/module.onyx index 95b29a70..476f03e8 100644 --- a/modules/opengles/module.onyx +++ b/modules/opengles/module.onyx @@ -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 index d6cabd10..00000000 --- a/modules/opengles/onyx_opengles.c +++ /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 -}; diff --git a/modules/opengles/onyx_opengles.so b/modules/opengles/onyx_opengles.so index 6015b67ee5adae213bb217c128d55e77277c7aef..59deebe8679293d38899c9c6583e84aa4b857913 100755 GIT binary patch literal 240744 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 XG;00Qh`t_w;}6#@+RuR<3a*?07i@v6 literal 237120 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 T;bG%HbiK*$#0>>OJPrOIEI7{# diff --git a/modules/opengles/opengles.c b/modules/opengles/opengles.c new file mode 100644 index 00000000..c3261a92 --- /dev/null +++ b/modules/opengles/opengles.c @@ -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 diff --git a/scripts/c_binding.onyx b/scripts/c_binding.onyx index 9ac549b4..95e41aef 100644 --- a/scripts/c_binding.onyx +++ b/scripts/c_binding.onyx @@ -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"); } diff --git a/scripts/c_library.onyx b/scripts/c_library.onyx index 33c84a57..69cef4ee 100644 --- a/scripts/c_library.onyx +++ b/scripts/c_library.onyx @@ -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 -- 2.25.1