From 5c2483da538dfb68a42d28fdba963efed22a37f4 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sun, 5 Dec 2021 14:43:06 -0600 Subject: [PATCH] starting to work on glfw3 native module --- include/onyx_library.h | 1 + modules/glfw3/build.sh | 4 + modules/glfw3/module.onyx | 338 ++++++++++++++++++++++++++++++++++++ modules/glfw3/onyx_glfw3.c | 127 ++++++++++++++ modules/glfw3/onyx_glfw3.so | Bin 0 -> 27040 bytes src/wasm_runtime.c | 14 +- 6 files changed, 483 insertions(+), 1 deletion(-) create mode 100755 modules/glfw3/build.sh create mode 100644 modules/glfw3/module.onyx create mode 100644 modules/glfw3/onyx_glfw3.c create mode 100755 modules/glfw3/onyx_glfw3.so diff --git a/include/onyx_library.h b/include/onyx_library.h index d19a8209..dd755043 100644 --- a/include/onyx_library.h +++ b/include/onyx_library.h @@ -49,6 +49,7 @@ typedef struct WasmFuncDefinition { struct WasmFuncDefinition *ONYX_MODULE_NAME_GEN(ONYX_LIBRARY_NAME)[] = // Shorter names +#define BOOL WASM_I32 #define INT WASM_I32 #define LONG WASM_I64 #define FLOAT WASM_F32 diff --git a/modules/glfw3/build.sh b/modules/glfw3/build.sh new file mode 100755 index 00000000..2b09837a --- /dev/null +++ b/modules/glfw3/build.sh @@ -0,0 +1,4 @@ +#!/bin/sh +# To be run from the project root + +gcc -O2 -shared -fPIC ./modules/glfw3/onyx_glfw3.c -I include -I lib/linux_x86_64/include -lglfw -o modules/glfw3/onyx_glfw3.so \ No newline at end of file diff --git a/modules/glfw3/module.onyx b/modules/glfw3/module.onyx new file mode 100644 index 00000000..efc7ade9 --- /dev/null +++ b/modules/glfw3/module.onyx @@ -0,0 +1,338 @@ +package glfw3 + +// Temporary path +#library "./modules/glfw3/onyx_glfw3" + +// Opaque types that are only used by pointer +GLFWmonitor_p :: #distinct u64 +GLFWwindow_p :: #distinct u64 + +GLFWimage :: struct #size 16 { + width, height: i32; + pixels: ^u8; +} + +glfwInit :: () -> bool #foreign "onyx_glfw3" "glfwInit" --- +glfwTerminate :: () -> void #foreign "onyx_glfw3" "glfwTerminate" --- +glfwGetVersion :: (major, minor, rev: ^i32) -> void #foreign "onyx_glfw3" "glfwGetVersion" --- +// glfwSetErrorCallback :: (f: (i32, cstr) -> void) -> void #foreign "onyx_glfw3" "glfwSetErrorCallback" --- + +glfwCreateWindow :: (width, height: i32, title: cstr, monitor: GLFWmonitor_p = 0, share: GLFWwindow_p = 0) -> GLFWwindow_p #foreign "onyx_glfw3" "glfwCreateWindow" --- +glfwDestroyWindow :: (window: GLFWwindow_p) -> void #foreign "onyx_glfw3" "glfwDestroyWindow" --- +glfwWindowShouldClose :: (window: GLFWwindow_p) -> bool #foreign "onyx_glfw3" "glfwWindowShouldClose" --- +glfwSetWindowShouldClose :: (window: GLFWwindow_p, value: i32) -> void #foreign "onyx_glfw3" "glfwSetWindowShouldClose" --- +glfwDefaultWindowHints :: () -> void #foreign "onyx_glfw3" "glfwDefaultWindowHints" --- +glfwWindowHint :: (hint: i32, value: i32) -> void #foreign "onyx_glfw3" "glfwWindowHint" --- +glfwSetWindowTitle :: (window: GLFWwindow_p, title: cstr) -> void #foreign "onyx_glfw3" "glfwSetWindowTitle" --- +glfwGetWindowPos :: (window: GLFWwindow_p, xpos, ypos: ^i32) -> void #foreign "onyx_glfw3" "glfwGetWindowPos" --- +glfwSetWindowPos :: (window: GLFWwindow_p, xpos, ypos: i32) -> void #foreign "onyx_glfw3" "glfwSetWindowPos" --- +// ... +glfwPollEvents :: () -> void #foreign "onyx_glfw3" "glfwPollEvents" --- +glfwWaitEvents :: () -> void #foreign "onyx_glfw3" "glfwWaitEvents" --- +glfwWaitEventsTimeout :: (timeout: f64) -> void #foreign "onyx_glfw3" "glfwWaitEventsTimeout" --- +glfwPostEmptyEvent :: () -> void #foreign "onyx_glfw3" "glfwPostEmptyEvent" --- +glfwSwapBuffers :: (window: GLFWwindow_p) -> void #foreign "onyx_glfw3" "glfwSwapBuffers" --- + +GLFW_FOCUSED :: 0x00020001; +GLFW_ICONIFIED :: 0x00020002; +GLFW_RESIZABLE :: 0x00020003; +GLFW_VISIBLE :: 0x00020004; +GLFW_DECORATED :: 0x00020005; +GLFW_AUTO_ICONIFY :: 0x00020006; +GLFW_FLOATING :: 0x00020007; +GLFW_MAXIMIZED :: 0x00020008; +GLFW_CENTER_CURSOR :: 0x00020009; +GLFW_TRANSPARENT_FRAMEBUFFER :: 0x0002000A; +GLFW_HOVERED :: 0x0002000B; +GLFW_FOCUS_ON_SHOW :: 0x0002000C; +GLFW_RED_BITS :: 0x00021001; +GLFW_GREEN_BITS :: 0x00021002; +GLFW_BLUE_BITS :: 0x00021003; +GLFW_ALPHA_BITS :: 0x00021004; +GLFW_DEPTH_BITS :: 0x00021005; +GLFW_STENCIL_BITS :: 0x00021006; +GLFW_ACCUM_RED_BITS :: 0x00021007; +GLFW_ACCUM_GREEN_BITS :: 0x00021008; +GLFW_ACCUM_BLUE_BITS :: 0x00021009; +GLFW_ACCUM_ALPHA_BITS :: 0x0002100A; +GLFW_AUX_BUFFERS :: 0x0002100B; +GLFW_STEREO :: 0x0002100C; +GLFW_SAMPLES :: 0x0002100D; +GLFW_SRGB_CAPABLE :: 0x0002100E; +GLFW_REFRESH_RATE :: 0x0002100F; +GLFW_DOUBLEBUFFER :: 0x00021010; +GLFW_CLIENT_API :: 0x00022001; +GLFW_CONTEXT_VERSION_MAJOR :: 0x00022002; +GLFW_CONTEXT_VERSION_MINOR :: 0x00022003; +GLFW_CONTEXT_REVISION :: 0x00022004; +GLFW_CONTEXT_ROBUSTNESS :: 0x00022005; +GLFW_OPENGL_FORWARD_COMPAT :: 0x00022006; +GLFW_OPENGL_DEBUG_CONTEXT :: 0x00022007; +GLFW_OPENGL_PROFILE :: 0x00022008; +GLFW_CONTEXT_RELEASE_BEHAVIOR :: 0x00022009; + +GLFW_NO_API :: 0; +GLFW_OPENGL_API :: 0x00030001; +GLFW_OPENGL_ES_API :: 0x00030002; + +GLFW_NO_ROBUSTNESS :: 0; +GLFW_NO_RESET_NOTIFICATION :: 0x00031001; +GLFW_LOSE_CONTEXT_ON_RESET :: 0x00031002; + +GLFW_OPENGL_ANY_PROFILE :: 0; +GLFW_OPENGL_CORE_PROFILE :: 0x00032001; +GLFW_OPENGL_COMPAT_PROFILE :: 0x00032002; + +GLFW_CURSOR :: 0x00033001; +GLFW_STICKY_KEYS :: 0x00033002; +GLFW_STICKY_MOUSE_BUTTONS :: 0x00033003; +GLFW_LOCK_KEY_MODS :: 0x00033004; +GLFW_RAW_MOUSE_MOTION :: 0x00033005; + +GLFW_CURSOR_NORMAL :: 0x00034001; +GLFW_CURSOR_HIDDEN :: 0x00034002; +GLFW_CURSOR_DISABLED :: 0x00034003; + +GLFW_ANY_RELEASE_BEHAVIOR :: 0; +GLFW_RELEASE_BEHAVIOR_FLUSH :: 0x00035001; +GLFW_RELEASE_BEHAVIOR_NONE :: 0x00035002; + +GLFW_NATIVE_CONTEXT_API :: 0x00036001; +GLFW_EGL_CONTEXT_API :: 0x00036002; +GLFW_OSMESA_CONTEXT_API :: 0x00036003; + +GLFW_ARROW_CURSOR :: 0x00036001 +GLFW_IBEAM_CURSOR :: 0x00036002 +GLFW_CROSSHAIR_CURSOR :: 0x00036003 +GLFW_HAND_CURSOR :: 0x00036004 +GLFW_HRESIZE_CURSOR :: 0x00036005 +GLFW_VRESIZE_CURSOR :: 0x00036006 +GLFW_CONNECTED :: 0x00040001 +GLFW_DISCONNECTED :: 0x00040002 +GLFW_JOYSTICK_HAT_BUTTONS :: 0x00050001 +GLFW_COCOA_CHDIR_RESOURCES :: 0x00051001 +GLFW_COCOA_MENUBAR :: 0x00051002 +GLFW_DONT_CARE :: -1 + +GLFW_VERSION_MAJOR :: 3 +GLFW_VERSION_MINOR :: 3 +GLFW_VERSION_REVISION :: 5 +GLFW_TRUE :: 1 +GLFW_FALSE :: 0 + +GLFW_RELEASE :: 0 +GLFW_PRESS :: 1 +GLFW_REPEAT :: 2 + +GLFW_HAT_CENTERED :: 0 +GLFW_HAT_UP :: 1 +GLFW_HAT_RIGHT :: 2 +GLFW_HAT_DOWN :: 4 +GLFW_HAT_LEFT :: 8 +GLFW_HAT_RIGHT_UP :: GLFW_HAT_RIGHT | GLFW_HAT_UP +GLFW_HAT_RIGHT_DOWN :: GLFW_HAT_RIGHT | GLFW_HAT_DOWN +GLFW_HAT_LEFT_UP :: GLFW_HAT_LEFT | GLFW_HAT_UP +GLFW_HAT_LEFT_DOWN :: GLFW_HAT_LEFT | GLFW_HAT_DOWN + +GLFW_KEY_UNKNOWN :: -1 + +GLFW_KEY_SPACE :: 32 +GLFW_KEY_APOSTROPHE :: 39 /* ' */ +GLFW_KEY_COMMA :: 44 /* , */ +GLFW_KEY_MINUS :: 45 /* - */ +GLFW_KEY_PERIOD :: 46 /* . */ +GLFW_KEY_SLASH :: 47 /* / */ +GLFW_KEY_0 :: 48 +GLFW_KEY_1 :: 49 +GLFW_KEY_2 :: 50 +GLFW_KEY_3 :: 51 +GLFW_KEY_4 :: 52 +GLFW_KEY_5 :: 53 +GLFW_KEY_6 :: 54 +GLFW_KEY_7 :: 55 +GLFW_KEY_8 :: 56 +GLFW_KEY_9 :: 57 +GLFW_KEY_SEMICOLON :: 59 /* ; */ +GLFW_KEY_EQUAL :: 61 /* = */ +GLFW_KEY_A :: 65 +GLFW_KEY_B :: 66 +GLFW_KEY_C :: 67 +GLFW_KEY_D :: 68 +GLFW_KEY_E :: 69 +GLFW_KEY_F :: 70 +GLFW_KEY_G :: 71 +GLFW_KEY_H :: 72 +GLFW_KEY_I :: 73 +GLFW_KEY_J :: 74 +GLFW_KEY_K :: 75 +GLFW_KEY_L :: 76 +GLFW_KEY_M :: 77 +GLFW_KEY_N :: 78 +GLFW_KEY_O :: 79 +GLFW_KEY_P :: 80 +GLFW_KEY_Q :: 81 +GLFW_KEY_R :: 82 +GLFW_KEY_S :: 83 +GLFW_KEY_T :: 84 +GLFW_KEY_U :: 85 +GLFW_KEY_V :: 86 +GLFW_KEY_W :: 87 +GLFW_KEY_X :: 88 +GLFW_KEY_Y :: 89 +GLFW_KEY_Z :: 90 +GLFW_KEY_LEFT_BRACKET :: 91 /* [ */ +GLFW_KEY_BACKSLASH :: 92 /* \ */ +GLFW_KEY_RIGHT_BRACKET :: 93 /* ] */ +GLFW_KEY_GRAVE_ACCENT :: 96 /* ` */ +GLFW_KEY_WORLD_1 :: 161 /* non-US #1 */ +GLFW_KEY_WORLD_2 :: 162 /* non-US #2 */ + +GLFW_KEY_ESCAPE :: 256 +GLFW_KEY_ENTER :: 257 +GLFW_KEY_TAB :: 258 +GLFW_KEY_BACKSPACE :: 259 +GLFW_KEY_INSERT :: 260 +GLFW_KEY_DELETE :: 261 +GLFW_KEY_RIGHT :: 262 +GLFW_KEY_LEFT :: 263 +GLFW_KEY_DOWN :: 264 +GLFW_KEY_UP :: 265 +GLFW_KEY_PAGE_UP :: 266 +GLFW_KEY_PAGE_DOWN :: 267 +GLFW_KEY_HOME :: 268 +GLFW_KEY_END :: 269 +GLFW_KEY_CAPS_LOCK :: 280 +GLFW_KEY_SCROLL_LOCK :: 281 +GLFW_KEY_NUM_LOCK :: 282 +GLFW_KEY_PRINT_SCREEN :: 283 +GLFW_KEY_PAUSE :: 284 +GLFW_KEY_F1 :: 290 +GLFW_KEY_F2 :: 291 +GLFW_KEY_F3 :: 292 +GLFW_KEY_F4 :: 293 +GLFW_KEY_F5 :: 294 +GLFW_KEY_F6 :: 295 +GLFW_KEY_F7 :: 296 +GLFW_KEY_F8 :: 297 +GLFW_KEY_F9 :: 298 +GLFW_KEY_F10 :: 299 +GLFW_KEY_F11 :: 300 +GLFW_KEY_F12 :: 301 +GLFW_KEY_F13 :: 302 +GLFW_KEY_F14 :: 303 +GLFW_KEY_F15 :: 304 +GLFW_KEY_F16 :: 305 +GLFW_KEY_F17 :: 306 +GLFW_KEY_F18 :: 307 +GLFW_KEY_F19 :: 308 +GLFW_KEY_F20 :: 309 +GLFW_KEY_F21 :: 310 +GLFW_KEY_F22 :: 311 +GLFW_KEY_F23 :: 312 +GLFW_KEY_F24 :: 313 +GLFW_KEY_F25 :: 314 +GLFW_KEY_KP_0 :: 320 +GLFW_KEY_KP_1 :: 321 +GLFW_KEY_KP_2 :: 322 +GLFW_KEY_KP_3 :: 323 +GLFW_KEY_KP_4 :: 324 +GLFW_KEY_KP_5 :: 325 +GLFW_KEY_KP_6 :: 326 +GLFW_KEY_KP_7 :: 327 +GLFW_KEY_KP_8 :: 328 +GLFW_KEY_KP_9 :: 329 +GLFW_KEY_KP_DECIMAL :: 330 +GLFW_KEY_KP_DIVIDE :: 331 +GLFW_KEY_KP_MULTIPLY :: 332 +GLFW_KEY_KP_SUBTRACT :: 333 +GLFW_KEY_KP_ADD :: 334 +GLFW_KEY_KP_ENTER :: 335 +GLFW_KEY_KP_EQUAL :: 336 +GLFW_KEY_LEFT_SHIFT :: 340 +GLFW_KEY_LEFT_CONTROL :: 341 +GLFW_KEY_LEFT_ALT :: 342 +GLFW_KEY_LEFT_SUPER :: 343 +GLFW_KEY_RIGHT_SHIFT :: 344 +GLFW_KEY_RIGHT_CONTROL :: 345 +GLFW_KEY_RIGHT_ALT :: 346 +GLFW_KEY_RIGHT_SUPER :: 347 +GLFW_KEY_MENU :: 348 + +GLFW_KEY_LAST :: GLFW_KEY_MENU +GLFW_MOD_SHIFT :: 0x0001 +GLFW_MOD_CONTROL :: 0x0002 +GLFW_MOD_ALT :: 0x0004 +GLFW_MOD_SUPER :: 0x0008 +GLFW_MOD_CAPS_LOCK :: 0x0010 +GLFW_MOD_NUM_LOCK :: 0x0020 + +GLFW_MOUSE_BUTTON_1 :: 0 +GLFW_MOUSE_BUTTON_2 :: 1 +GLFW_MOUSE_BUTTON_3 :: 2 +GLFW_MOUSE_BUTTON_4 :: 3 +GLFW_MOUSE_BUTTON_5 :: 4 +GLFW_MOUSE_BUTTON_6 :: 5 +GLFW_MOUSE_BUTTON_7 :: 6 +GLFW_MOUSE_BUTTON_8 :: 7 +GLFW_MOUSE_BUTTON_LAST :: GLFW_MOUSE_BUTTON_8 +GLFW_MOUSE_BUTTON_LEFT :: GLFW_MOUSE_BUTTON_1 +GLFW_MOUSE_BUTTON_RIGHT :: GLFW_MOUSE_BUTTON_2 +GLFW_MOUSE_BUTTON_MIDDLE :: GLFW_MOUSE_BUTTON_3 +GLFW_JOYSTICK_1 :: 0 +GLFW_JOYSTICK_2 :: 1 +GLFW_JOYSTICK_3 :: 2 +GLFW_JOYSTICK_4 :: 3 +GLFW_JOYSTICK_5 :: 4 +GLFW_JOYSTICK_6 :: 5 +GLFW_JOYSTICK_7 :: 6 +GLFW_JOYSTICK_8 :: 7 +GLFW_JOYSTICK_9 :: 8 +GLFW_JOYSTICK_10 :: 9 +GLFW_JOYSTICK_11 :: 10 +GLFW_JOYSTICK_12 :: 11 +GLFW_JOYSTICK_13 :: 12 +GLFW_JOYSTICK_14 :: 13 +GLFW_JOYSTICK_15 :: 14 +GLFW_JOYSTICK_16 :: 15 +GLFW_JOYSTICK_LAST :: GLFW_JOYSTICK_16 +GLFW_GAMEPAD_BUTTON_A :: 0 +GLFW_GAMEPAD_BUTTON_B :: 1 +GLFW_GAMEPAD_BUTTON_X :: 2 +GLFW_GAMEPAD_BUTTON_Y :: 3 +GLFW_GAMEPAD_BUTTON_LEFT_BUMPER :: 4 +GLFW_GAMEPAD_BUTTON_RIGHT_BUMPER :: 5 +GLFW_GAMEPAD_BUTTON_BACK :: 6 +GLFW_GAMEPAD_BUTTON_START :: 7 +GLFW_GAMEPAD_BUTTON_GUIDE :: 8 +GLFW_GAMEPAD_BUTTON_LEFT_THUMB :: 9 +GLFW_GAMEPAD_BUTTON_RIGHT_THUMB :: 10 +GLFW_GAMEPAD_BUTTON_DPAD_UP :: 11 +GLFW_GAMEPAD_BUTTON_DPAD_RIGHT :: 12 +GLFW_GAMEPAD_BUTTON_DPAD_DOWN :: 13 +GLFW_GAMEPAD_BUTTON_DPAD_LEFT :: 14 +GLFW_GAMEPAD_BUTTON_LAST :: GLFW_GAMEPAD_BUTTON_DPAD_LEFT + +GLFW_GAMEPAD_BUTTON_CROSS :: GLFW_GAMEPAD_BUTTON_A +GLFW_GAMEPAD_BUTTON_CIRCLE :: GLFW_GAMEPAD_BUTTON_B +GLFW_GAMEPAD_BUTTON_SQUARE :: GLFW_GAMEPAD_BUTTON_X +GLFW_GAMEPAD_BUTTON_TRIANGLE :: GLFW_GAMEPAD_BUTTON_Y +GLFW_GAMEPAD_AXIS_LEFT_X :: 0 +GLFW_GAMEPAD_AXIS_LEFT_Y :: 1 +GLFW_GAMEPAD_AXIS_RIGHT_X :: 2 +GLFW_GAMEPAD_AXIS_RIGHT_Y :: 3 +GLFW_GAMEPAD_AXIS_LEFT_TRIGGER :: 4 +GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER :: 5 +GLFW_GAMEPAD_AXIS_LAST :: GLFW_GAMEPAD_AXIS_RIGHT_TRIGGER + +GLFW_NO_ERROR :: 0 +GLFW_NOT_INITIALIZED :: 0x00010001 +GLFW_NO_CURRENT_CONTEXT :: 0x00010002 +GLFW_INVALID_ENUM :: 0x00010003 +GLFW_INVALID_VALUE :: 0x00010004 +GLFW_OUT_OF_MEMORY :: 0x00010005 +GLFW_API_UNAVAILABLE :: 0x00010006 +GLFW_VERSION_UNAVAILABLE :: 0x00010007 +GLFW_PLATFORM_ERROR :: 0x00010008 +GLFW_FORMAT_UNAVAILABLE :: 0x00010009 +GLFW_NO_WINDOW_CONTEXT :: 0x0001000A + diff --git a/modules/glfw3/onyx_glfw3.c b/modules/glfw3/onyx_glfw3.c new file mode 100644 index 00000000..e2c785b1 --- /dev/null +++ b/modules/glfw3/onyx_glfw3.c @@ -0,0 +1,127 @@ +#include "onyx_library.h" +#include + +#define ONYX_LIBRARY_NAME onyx_glfw3 + +ONYX_DEF(glfwInit, (), (INT)) { + results->data[0] = WASM_I32_VAL(glfwInit()); + return NULL; +} + +ONYX_DEF(glfwTerminate, (), ()) { + glfwTerminate(); + return NULL; +} + +ONYX_DEF(glfwGetVersion, (PTR, PTR, PTR), ()) { + glfwGetVersion((int *) ONYX_PTR(params->data[0].of.i32), + (int *) ONYX_PTR(params->data[1].of.i32), + (int *) ONYX_PTR(params->data[2].of.i32)); + return NULL; +} + +ONYX_DEF(glfwCreateWindow, (INT, INT, PTR, LONG, LONG), (LONG)) { + GLFWwindow* window = glfwCreateWindow( + params->data[0].of.i32, params->data[1].of.i32, + ONYX_PTR(params->data[2].of.i32), + (GLFWmonitor *) params->data[3].of.i64, + (GLFWwindow *) params->data[4].of.i64); + + wasm_val_init_ptr(&results->data[0], window); + return NULL; +} + +ONYX_DEF(glfwDestroyWindow, (LONG), ()) { + GLFWwindow *window = (GLFWwindow *) params->data[0].of.i64; + glfwDestroyWindow(window); + return NULL; +} + +ONYX_DEF(glfwWindowShouldClose, (LONG), (BOOL)) { + GLFWwindow *window = (GLFWwindow *) params->data[0].of.i64; + results->data[0] = WASM_I32_VAL(glfwWindowShouldClose(window) == GLFW_TRUE); + return NULL; +} + +ONYX_DEF(glfwSetWindowShouldClose, (LONG, BOOL), ()) { + GLFWwindow *window = (GLFWwindow *) params->data[0].of.i64; + glfwSetWindowShouldClose(window, params->data[1].of.i32); + return NULL; +} + +ONYX_DEF(glfwDefaultWindowHints, (), ()) { + glfwDefaultWindowHints(); + return NULL; +} + +ONYX_DEF(glfwWindowHint, (INT, INT), ()) { + glfwWindowHint(params->data[0].of.i32, params->data[1].of.i32); + return NULL; +} + +ONYX_DEF(glfwSetWindowTitle, (LONG, PTR), ()) { + GLFWwindow *window = (GLFWwindow *) params->data[0].of.i64; + glfwSetWindowTitle(window, ONYX_PTR(params->data[1].of.i32)); + return NULL; +} + +ONYX_DEF(glfwGetWindowPos, (LONG, PTR, PTR), ()) { + GLFWwindow *window = (GLFWwindow *) params->data[0].of.i64; + glfwGetWindowPos(window, (int *) ONYX_PTR(params->data[1].of.i32), (int *) ONYX_PTR(params->data[2].of.i32)); + return NULL; +} + +ONYX_DEF(glfwSetWindowPos, (LONG, INT, INT), ()) { + GLFWwindow *window = (GLFWwindow *) params->data[0].of.i64; + glfwSetWindowPos(window, params->data[1].of.i32, params->data[2].of.i32); + return NULL; +} + +// ... +ONYX_DEF(glfwPollEvents, (), ()) { + glfwPollEvents(); + return NULL; +} + +ONYX_DEF(glfwWaitEvents, (), ()) { + glfwWaitEvents(); + return NULL; +} + +ONYX_DEF(glfwWaitEventsTimeout, (DOUBLE), ()) { + glfwWaitEventsTimeout(params->data[0].of.f64); + return NULL; +} + +ONYX_DEF(glfwPostEmptyEvent, (), ()) { + glfwPostEmptyEvent(); + return NULL; +} + +ONYX_DEF(glfwSwapBuffers, (LONG), ()) { + GLFWwindow *window = (GLFWwindow *) params->data[0].of.i64; + glfwSwapBuffers(window); + return NULL; +} + +ONYX_LIBRARY { + ONYX_FUNC(glfwInit) + ONYX_FUNC(glfwTerminate) + ONYX_FUNC(glfwGetVersion) + ONYX_FUNC(glfwCreateWindow) + ONYX_FUNC(glfwDestroyWindow) + ONYX_FUNC(glfwWindowShouldClose) + ONYX_FUNC(glfwSetWindowShouldClose) + ONYX_FUNC(glfwDefaultWindowHints) + ONYX_FUNC(glfwWindowHint) + ONYX_FUNC(glfwSetWindowTitle) + ONYX_FUNC(glfwGetWindowPos) + ONYX_FUNC(glfwSetWindowPos) + ONYX_FUNC(glfwPollEvents) + ONYX_FUNC(glfwWaitEvents) + ONYX_FUNC(glfwWaitEventsTimeout) + ONYX_FUNC(glfwPostEmptyEvent) + ONYX_FUNC(glfwSwapBuffers) + + NULL +}; \ No newline at end of file diff --git a/modules/glfw3/onyx_glfw3.so b/modules/glfw3/onyx_glfw3.so new file mode 100755 index 0000000000000000000000000000000000000000..c438dd4e95cb20ed7136e8fc74300c014c83f973 GIT binary patch literal 27040 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 r{BgVa_=nGhcHJRsr^fv%`$-%eT4KKpt%3}