aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--vendor/glfw/LICENSE22
-rw-r--r--vendor/glfw/bindings/bindings.odin159
-rw-r--r--vendor/glfw/bindings/types.odin55
-rw-r--r--vendor/glfw/constants.odin372
-rw-r--r--vendor/glfw/lib/glfw3.dllbin0 -> 226304 bytes
-rw-r--r--vendor/glfw/lib/glfw3.libbin0 -> 650328 bytes
-rw-r--r--vendor/glfw/lib/glfw3_mt.libbin0 -> 649750 bytes
-rw-r--r--vendor/glfw/lib/glfw3dll.libbin0 -> 30306 bytes
-rw-r--r--vendor/glfw/native.odin33
-rw-r--r--vendor/glfw/types.odin36
-rw-r--r--vendor/glfw/wrapper.odin225
11 files changed, 902 insertions, 0 deletions
diff --git a/vendor/glfw/LICENSE b/vendor/glfw/LICENSE
new file mode 100644
index 000000000..b8c096845
--- /dev/null
+++ b/vendor/glfw/LICENSE
@@ -0,0 +1,22 @@
+Copyright (c) 2002-2006 Marcus Geelnard
+
+Copyright (c) 2006-2019 Camilla Löwy
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would
+ be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and must not
+ be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source
+ distribution.
diff --git a/vendor/glfw/bindings/bindings.odin b/vendor/glfw/bindings/bindings.odin
new file mode 100644
index 000000000..23cc7ff15
--- /dev/null
+++ b/vendor/glfw/bindings/bindings.odin
@@ -0,0 +1,159 @@
+package glfw_bindings
+
+import "core:c"
+import vk "vendor:vulkan"
+
+when ODIN_OS == "linux" do foreign import glfw "system:glfw" // TODO: Add the billion-or-so static libs to link to in linux
+when ODIN_OS == "windows" do foreign import glfw { "lib/glfw3.lib", "system:user32.lib", "system:gdi32.lib", "system:shell32.lib" }
+
+#assert(size_of(c.int) == size_of(b32));
+
+/*** Functions ***/
+@(default_calling_convention="c", link_prefix="glfw")
+foreign glfw {
+ Init :: proc() -> c.int ---
+ Terminate :: proc() ---
+
+ InitHint :: proc(hint, value: c.int) ---
+
+ GetVersion :: proc(major, minor, rev: ^c.int) ---
+ GetError :: proc(description: ^cstring) -> c.int ---
+
+ GetPrimaryMonitor :: proc() -> MonitorHandle ---
+ GetMonitors :: proc(count: ^c.int) -> [^]MonitorHandle ---
+ GetMonitorPos :: proc(monitor: MonitorHandle, xpos, ypos: ^c.int) ---
+ GetMonitorPhysicalSize :: proc(monitor: MonitorHandle, widthMM, heightMM: ^c.int) ---
+ GetMonitorContentScale :: proc(monitor: MonitorHandle, xscale, yscale: ^f32) ---
+
+ SetMonitorUserPointer :: proc(monitor: MonitorHandle, pointer: rawptr) ---
+ GetMonitorUserPointer :: proc(monitor: MonitorHandle) -> rawptr ---
+
+ GetVideoMode :: proc(monitor: MonitorHandle) -> ^VidMode ---
+ SetGamma :: proc(monitor: MonitorHandle, gamma: f32) ---
+ GetGammaRamp :: proc(monitor: MonitorHandle) -> ^GammaRamp ---
+ SetGammaRamp :: proc(monitor: MonitorHandle, ramp: ^GammaRamp) ---
+
+ CreateWindow :: proc(width, height: c.int, title: cstring, monitor: MonitorHandle, share: WindowHandle) -> WindowHandle ---
+ DestroyWindow :: proc(window: WindowHandle) ---
+
+ WindowHint :: proc(hint, value: c.int) ---
+ DefaultWindowHints :: proc() ---
+ WindowHintString :: proc(hint: c.int, value: cstring) ---
+ WindowShouldClose :: proc(window: WindowHandle) -> c.int ---
+
+ SwapInterval :: proc(interval: c.int) ---
+ SwapBuffers :: proc(window: WindowHandle) ---
+
+ SetWindowTitle :: proc(window: WindowHandle, title: cstring) ---
+ SetWindowIcon :: proc(window: WindowHandle, count: c.int, images: [^]Image) ---
+ SetWindowPos :: proc(window: WindowHandle, xpos, ypos: c.int) ---
+ SetWindowSizeLimits :: proc(window: WindowHandle, minwidth, minheight, maxwidth, maxheight: c.int) ---
+ SetWindowAspectRatio :: proc(window: WindowHandle, numer, denom: c.int) ---
+ SetWindowSize :: proc(window: WindowHandle, width, height: c.int) ---
+ GetWindowPos :: proc(window: WindowHandle, xpos, ypos: ^c.int) ---
+ GetWindowSize :: proc(window: WindowHandle, width, height: ^c.int) ---
+ GetFramebufferSize :: proc(window: WindowHandle, width, height: ^c.int) ---
+ GetWindowFrameSize :: proc(window: WindowHandle, left, top, right, bottom: ^c.int) ---
+
+ GetWindowContentScale :: proc(window: WindowHandle, xscale, yscale: ^f32) ---
+ GetWindowOpacity :: proc(window: WindowHandle) -> f32 ---
+ SetWindowOpacity :: proc(window: WindowHandle, opacity: f32) ---
+
+ GetVersionString :: proc() -> cstring ---
+ GetMonitorName :: proc(monitor: MonitorHandle) -> cstring ---
+ GetClipboardString :: proc(window: WindowHandle) -> cstring ---
+ GetVideoModes :: proc(monitor: MonitorHandle, count: ^c.int) -> [^]VidMode ---
+ GetKey :: proc(window: WindowHandle, key: c.int) -> c.int ---
+ GetKeyName :: proc(key, scancode: c.int) -> cstring ---
+ SetWindowShouldClose :: proc(window: WindowHandle, value: b32) ---
+ JoystickPresent :: proc(joy: c.int) -> b32 ---
+ GetJoystickName :: proc(joy: c.int) -> cstring ---
+ GetKeyScancode :: proc(key: c.int) -> c.int ---
+
+ IconifyWindow :: proc(window: WindowHandle) ---
+ RestoreWindow :: proc(window: WindowHandle) ---
+ MaximizeWindow :: proc(window: WindowHandle) ---
+ ShowWindow :: proc(window: WindowHandle) ---
+ HideWindow :: proc(window: WindowHandle) ---
+ FocusWindow :: proc(window: WindowHandle) ---
+
+ RequestWindowAttention :: proc(window: WindowHandle) ---
+
+ GetWindowMonitor :: proc(window: WindowHandle) -> MonitorHandle ---
+ SetWindowMonitor :: proc(window: WindowHandle, monitor: MonitorHandle, xpos, ypos, width, height, refresh_rate: c.int) ---
+ GetWindowAttrib :: proc(window: WindowHandle, attrib: c.int) -> c.int ---
+ SetWindowUserPointer :: proc(window: WindowHandle, pointer: rawptr) ---
+ GetWindowUserPointer :: proc(window: WindowHandle) -> rawptr ---
+
+ SetWindowAttrib :: proc(window: WindowHandle, attrib, value: c.int) ---
+
+ PollEvents :: proc() ---
+ WaitEvents :: proc() ---
+ WaitEventsTimeout :: proc(timeout: f64) ---
+ PostEmptyEvent :: proc() ---
+
+ GetInputMode :: proc(window: WindowHandle, mode: c.int) -> c.int ---
+ SetInputMode :: proc(window: WindowHandle, mode, value: c.int) ---
+
+ GetMouseButton :: proc(window: WindowHandle, button: c.int) -> c.int ---
+ GetCursorPos :: proc(window: WindowHandle, xpos, ypos: ^f64) ---
+ SetCursorPos :: proc(window: WindowHandle, xpos, ypos: f64) ---
+
+ CreateCursor :: proc(image: ^Image, xhot, yhot: c.int) -> CursorHandle ---
+ DestroyCursor :: proc(cursor: CursorHandle) ---
+ SetCursor :: proc(window: WindowHandle, cursor: CursorHandle) ---
+ CreateStandardCursor :: proc(shape: c.int) -> CursorHandle ---
+
+ GetJoystickAxes :: proc(joy: c.int, count: ^c.int) -> [^]f32 ---
+ GetJoystickButtons :: proc(joy: c.int, count: ^c.int) -> [^]u8 ---
+ GetJoystickHats :: proc(jid: c.int, count: ^c.int) -> [^]u8 ---
+ GetJoystickGUID :: proc(jid: c.int) -> cstring ---
+ SetJoystickUserPointer :: proc(jid: c.int, pointer: rawptr) ---
+ GetJoystickUserPointer :: proc(jid: c.int) -> rawptr ---
+ JoystickIsGamepad :: proc(jid: c.int) -> b32 ---
+ UpdateGamepadMappings :: proc(str: cstring) -> c.int ---
+ GetGamepadName :: proc(jid: c.int) -> cstring ---
+ GetGamepadState :: proc(jid: c.int, state: ^GamepadState) -> c.int ---
+
+ SetClipboardString :: proc(window: WindowHandle, str: cstring) ---
+
+ SetTime :: proc(time: f64) ---
+ GetTime :: proc() -> f64 ---
+ GetTimerValue :: proc() -> u64 ---
+ GetTimerFrequency :: proc() -> u64 ---
+
+ MakeContextCurrent :: proc(window: WindowHandle) ---
+ GetCurrentContext :: proc() -> WindowHandle ---
+ GetProcAddress :: proc(name: cstring) -> rawptr ---
+ ExtensionSupported :: proc(extension: cstring) -> c.int ---
+
+ VulkanSupported :: proc() -> b32 ---
+ GetRequiredInstanceExtensions :: proc(count: ^u32) -> [^]cstring ---
+ GetInstanceProcAddress :: proc(instance: vk.Instance, procname: cstring) -> rawptr ---
+ GetPhysicalDevicePresentationSupport :: proc(instance: vk.Instance, device: vk.PhysicalDevice, queuefamily: u32) -> c.int ---
+ CreateWindowSurface :: proc(instance: vk.Instance, window: WindowHandle, allocator: ^vk.AllocationCallbacks, surface: ^vk.SurfaceKHR) -> vk.Result ---
+
+ SetWindowIconifyCallback :: proc(window: WindowHandle, cbfun: WindowIconifyProc) -> WindowIconifyProc ---
+ SetWindowRefreshCallback :: proc(window: WindowHandle, cbfun: WindowRefreshProc) -> WindowRefreshProc ---
+ SetWindowFocusCallback :: proc(window: WindowHandle, cbfun: WindowFocusProc) -> WindowFocusProc ---
+ SetWindowCloseCallback :: proc(window: WindowHandle, cbfun: WindowCloseProc) -> WindowCloseProc ---
+ SetWindowSizeCallback :: proc(window: WindowHandle, cbfun: WindowSizeProc) -> WindowSizeProc ---
+ SetWindowPosCallback :: proc(window: WindowHandle, cbfun: WindowPosProc) -> WindowPosProc ---
+ SetFramebufferSizeCallback :: proc(window: WindowHandle, cbfun: FramebufferSizeProc) -> FramebufferSizeProc ---
+ SetDropCallback :: proc(window: WindowHandle, cbfun: DropProc) -> DropProc ---
+ SetMonitorCallback :: proc(window: WindowHandle, cbfun: MonitorProc) -> MonitorProc ---
+ SetWindowMaximizeCallback :: proc(window: WindowHandle, cbfun: WindowMaximizeProc) -> WindowMaximizeProc ---
+ SetWindowContentScaleCallback :: proc(window: WindowHandle, cbfun: WindowContentScaleProc) -> WindowContentScaleProc ---
+
+ SetKeyCallback :: proc(window: WindowHandle, cbfun: KeyProc) -> KeyProc ---
+ SetMouseButtonCallback :: proc(window: WindowHandle, cbfun: MouseButtonProc) -> MouseButtonProc ---
+ SetCursorPosCallback :: proc(window: WindowHandle, cbfun: CursorPosProc) -> CursorPosProc ---
+ SetScrollCallback :: proc(window: WindowHandle, cbfun: ScrollProc) -> ScrollProc ---
+ SetCharCallback :: proc(window: WindowHandle, cbfun: CharProc) -> CharProc ---
+ SetCharModsCallback :: proc(window: WindowHandle, cbfun: CharModsProc) -> CharModsProc ---
+ SetCursorEnterCallback :: proc(window: WindowHandle, cbfun: CursorEnterProc) -> CursorEnterProc ---
+ SetJoystickCallback :: proc(window: WindowHandle, cbfun: JoystickProc) -> JoystickProc ---
+
+ SetErrorCallback :: proc(cbfun: ErrorProc) -> ErrorProc ---
+}
+
diff --git a/vendor/glfw/bindings/types.odin b/vendor/glfw/bindings/types.odin
new file mode 100644
index 000000000..684477c1b
--- /dev/null
+++ b/vendor/glfw/bindings/types.odin
@@ -0,0 +1,55 @@
+package glfw_bindings
+
+import "core:c"
+
+WindowHandle :: distinct rawptr;
+MonitorHandle :: distinct rawptr;
+CursorHandle :: distinct rawptr;
+
+VidMode :: struct {
+ width: c.int,
+ height: c.int,
+ red_bits: c.int,
+ green_bits: c.int,
+ blue_bits: c.int,
+ refresh_rate: c.int,
+};
+
+GammaRamp :: struct {
+ red, green, blue: [^]c.ushort,
+ size: c.uint,
+}
+
+Image :: struct {
+ width, height: c.int,
+ pixels: [^]u8,
+}
+
+GamepadState :: struct {
+ buttons: [15]u8,
+ axes: [6]f32,
+}
+
+/*** Procedure type declarations ***/
+WindowIconifyProc :: #type proc "c" (window: WindowHandle, iconified: c.int);
+WindowRefreshProc :: #type proc "c" (window: WindowHandle);
+WindowFocusProc :: #type proc "c" (window: WindowHandle, focused: c.int);
+WindowCloseProc :: #type proc "c" (window: WindowHandle);
+WindowSizeProc :: #type proc "c" (window: WindowHandle, width, height: c.int);
+WindowPosProc :: #type proc "c" (window: WindowHandle, xpos, ypos: c.int);
+WindowMaximizeProc :: #type proc "c" (window: WindowHandle, iconified: c.int);
+WindowContentScaleProc :: #type proc "c" (window: WindowHandle, xscale, yscale: f32);
+FramebufferSizeProc :: #type proc "c" (window: WindowHandle, width, height: c.int);
+DropProc :: #type proc "c" (window: WindowHandle, count: c.int, paths: [^]cstring);
+MonitorProc :: #type proc "c" (window: WindowHandle);
+
+KeyProc :: #type proc "c" (window: WindowHandle, key, scancode, action, mods: c.int);
+MouseButtonProc :: #type proc "c" (window: WindowHandle, button, action, mods: c.int);
+CursorPosProc :: #type proc "c" (window: WindowHandle, xpos, ypos: f64);
+ScrollProc :: #type proc "c" (window: WindowHandle, xoffset, yoffset: f64);
+CharProc :: #type proc "c" (window: WindowHandle, codepoint: rune);
+CharModsProc :: #type proc "c" (window: WindowHandle, codepoint: rune, mods: c.int);
+CursorEnterProc :: #type proc "c" (window: WindowHandle, entered: c.int);
+JoystickProc :: #type proc "c" (joy, event: c.int);
+
+ErrorProc :: #type proc "c" (error: c.int, description: cstring);
diff --git a/vendor/glfw/constants.odin b/vendor/glfw/constants.odin
new file mode 100644
index 000000000..c9d9bf78a
--- /dev/null
+++ b/vendor/glfw/constants.odin
@@ -0,0 +1,372 @@
+package glfw
+
+/*** Constants ***/
+/* Versions */
+VERSION_MAJOR :: 3;
+VERSION_MINOR :: 3;
+VERSION_REVISION :: 4;
+
+/* Booleans */
+TRUE :: true;
+FALSE :: false;
+
+/* Button/Key states */
+RELEASE :: 0;
+PRESS :: 1;
+REPEAT :: 2;
+
+/* Joystick hat states. */
+HAT_CENTERED :: 0;
+HAT_UP :: 1;
+HAT_RIGHT :: 2;
+HAT_DOWN :: 4;
+HAT_LEFT :: 8;
+HAT_RIGHT_UP :: (HAT_RIGHT | HAT_UP);
+HAT_RIGHT_DOWN :: (HAT_RIGHT | HAT_DOWN);
+HAT_LEFT_UP :: (HAT_LEFT | HAT_UP);
+HAT_LEFT_DOWN :: (HAT_LEFT | HAT_DOWN);
+
+/* The unknown key */
+KEY_UNKNOWN :: -1;
+
+/** Printable keys **/
+
+/* Named printable keys */
+KEY_SPACE :: 32;
+KEY_APOSTROPHE :: 39; /* ' */
+KEY_COMMA :: 44; /* , */
+KEY_MINUS :: 45; /* - */
+KEY_PERIOD :: 46; /* . */
+KEY_SLASH :: 47; /* / */
+KEY_SEMICOLON :: 59; /* ; */
+KEY_EQUAL :: 61; /* :: */
+KEY_LEFT_BRACKET :: 91; /* [ */
+KEY_BACKSLASH :: 92; /* \ */
+KEY_RIGHT_BRACKET :: 93; /* ] */
+KEY_GRAVE_ACCENT :: 96; /* ` */
+KEY_WORLD_1 :: 161; /* non-US #1 */
+KEY_WORLD_2 :: 162; /* non-US #2 */
+
+/* Alphanumeric characters */
+KEY_0 :: 48;
+KEY_1 :: 49;
+KEY_2 :: 50;
+KEY_3 :: 51;
+KEY_4 :: 52;
+KEY_5 :: 53;
+KEY_6 :: 54;
+KEY_7 :: 55;
+KEY_8 :: 56;
+KEY_9 :: 57;
+
+KEY_A :: 65;
+KEY_B :: 66;
+KEY_C :: 67;
+KEY_D :: 68;
+KEY_E :: 69;
+KEY_F :: 70;
+KEY_G :: 71;
+KEY_H :: 72;
+KEY_I :: 73;
+KEY_J :: 74;
+KEY_K :: 75;
+KEY_L :: 76;
+KEY_M :: 77;
+KEY_N :: 78;
+KEY_O :: 79;
+KEY_P :: 80;
+KEY_Q :: 81;
+KEY_R :: 82;
+KEY_S :: 83;
+KEY_T :: 84;
+KEY_U :: 85;
+KEY_V :: 86;
+KEY_W :: 87;
+KEY_X :: 88;
+KEY_Y :: 89;
+KEY_Z :: 90;
+
+
+/** Function keys **/
+
+/* Named non-printable keys */
+KEY_ESCAPE :: 256;
+KEY_ENTER :: 257;
+KEY_TAB :: 258;
+KEY_BACKSPACE :: 259;
+KEY_INSERT :: 260;
+KEY_DELETE :: 261;
+KEY_RIGHT :: 262;
+KEY_LEFT :: 263;
+KEY_DOWN :: 264;
+KEY_UP :: 265;
+KEY_PAGE_UP :: 266;
+KEY_PAGE_DOWN :: 267;
+KEY_HOME :: 268;
+KEY_END :: 269;
+KEY_CAPS_LOCK :: 280;
+KEY_SCROLL_LOCK :: 281;
+KEY_NUM_LOCK :: 282;
+KEY_PRINT_SCREEN :: 283;
+KEY_PAUSE :: 284;
+
+/* Function keys */
+KEY_F1 :: 290;
+KEY_F2 :: 291;
+KEY_F3 :: 292;
+KEY_F4 :: 293;
+KEY_F5 :: 294;
+KEY_F6 :: 295;
+KEY_F7 :: 296;
+KEY_F8 :: 297;
+KEY_F9 :: 298;
+KEY_F10 :: 299;
+KEY_F11 :: 300;
+KEY_F12 :: 301;
+KEY_F13 :: 302;
+KEY_F14 :: 303;
+KEY_F15 :: 304;
+KEY_F16 :: 305;
+KEY_F17 :: 306;
+KEY_F18 :: 307;
+KEY_F19 :: 308;
+KEY_F20 :: 309;
+KEY_F21 :: 310;
+KEY_F22 :: 311;
+KEY_F23 :: 312;
+KEY_F24 :: 313;
+KEY_F25 :: 314;
+
+/* Keypad numbers */
+KEY_KP_0 :: 320;
+KEY_KP_1 :: 321;
+KEY_KP_2 :: 322;
+KEY_KP_3 :: 323;
+KEY_KP_4 :: 324;
+KEY_KP_5 :: 325;
+KEY_KP_6 :: 326;
+KEY_KP_7 :: 327;
+KEY_KP_8 :: 328;
+KEY_KP_9 :: 329;
+
+/* Keypad named function keys */
+KEY_KP_DECIMAL :: 330;
+KEY_KP_DIVIDE :: 331;
+KEY_KP_MULTIPLY :: 332;
+KEY_KP_SUBTRACT :: 333;
+KEY_KP_ADD :: 334;
+KEY_KP_ENTER :: 335;
+KEY_KP_EQUAL :: 336;
+
+/* Modifier keys */
+KEY_LEFT_SHIFT :: 340;
+KEY_LEFT_CONTROL :: 341;
+KEY_LEFT_ALT :: 342;
+KEY_LEFT_SUPER :: 343;
+KEY_RIGHT_SHIFT :: 344;
+KEY_RIGHT_CONTROL :: 345;
+KEY_RIGHT_ALT :: 346;
+KEY_RIGHT_SUPER :: 347;
+KEY_MENU :: 348;
+
+KEY_LAST :: KEY_MENU;
+
+/* Bitmask for modifier keys */
+MOD_SHIFT :: 0x0001;
+MOD_CONTROL :: 0x0002;
+MOD_ALT :: 0x0004;
+MOD_SUPER :: 0x0008;
+MOD_CAPS_LOCK :: 0x0010;
+MOD_NUM_LOCK :: 0x0020;
+
+/* Mouse buttons */
+MOUSE_BUTTON_1 :: 0;
+MOUSE_BUTTON_2 :: 1;
+MOUSE_BUTTON_3 :: 2;
+MOUSE_BUTTON_4 :: 3;
+MOUSE_BUTTON_5 :: 4;
+MOUSE_BUTTON_6 :: 5;
+MOUSE_BUTTON_7 :: 6;
+MOUSE_BUTTON_8 :: 7;
+
+/* Mousebutton aliases */
+MOUSE_BUTTON_LAST :: MOUSE_BUTTON_8;
+MOUSE_BUTTON_LEFT :: MOUSE_BUTTON_1;
+MOUSE_BUTTON_RIGHT :: MOUSE_BUTTON_2;
+MOUSE_BUTTON_MIDDLE :: MOUSE_BUTTON_3;
+
+/* Joystick buttons */
+JOYSTICK_1 :: 0;
+JOYSTICK_2 :: 1;
+JOYSTICK_3 :: 2;
+JOYSTICK_4 :: 3;
+JOYSTICK_5 :: 4;
+JOYSTICK_6 :: 5;
+JOYSTICK_7 :: 6;
+JOYSTICK_8 :: 7;
+JOYSTICK_9 :: 8;
+JOYSTICK_10 :: 9;
+JOYSTICK_11 :: 10;
+JOYSTICK_12 :: 11;
+JOYSTICK_13 :: 12;
+JOYSTICK_14 :: 13;
+JOYSTICK_15 :: 14;
+JOYSTICK_16 :: 15;
+
+JOYSTICK_LAST :: JOYSTICK_16;
+
+/* Gamepad buttons */
+GAMEPAD_BUTTON_A :: 0;
+GAMEPAD_BUTTON_B :: 1;
+GAMEPAD_BUTTON_X :: 2;
+GAMEPAD_BUTTON_Y :: 3;
+GAMEPAD_BUTTON_LEFT_BUMPER :: 4;
+GAMEPAD_BUTTON_RIGHT_BUMPER :: 5;
+GAMEPAD_BUTTON_BACK :: 6;
+GAMEPAD_BUTTON_START :: 7;
+GAMEPAD_BUTTON_GUIDE :: 8;
+GAMEPAD_BUTTON_LEFT_THUMB :: 9;
+GAMEPAD_BUTTON_RIGHT_THUMB :: 10;
+GAMEPAD_BUTTON_DPAD_UP :: 11;
+GAMEPAD_BUTTON_DPAD_RIGHT :: 12;
+GAMEPAD_BUTTON_DPAD_DOWN :: 13;
+GAMEPAD_BUTTON_DPAD_LEFT :: 14;
+GAMEPAD_BUTTON_LAST :: GAMEPAD_BUTTON_DPAD_LEFT;
+
+GAMEPAD_BUTTON_CROSS :: GAMEPAD_BUTTON_A;
+GAMEPAD_BUTTON_CIRCLE :: GAMEPAD_BUTTON_B;
+GAMEPAD_BUTTON_SQUARE :: GAMEPAD_BUTTON_X;
+GAMEPAD_BUTTON_TRIANGLE :: GAMEPAD_BUTTON_Y;
+
+/* Gamepad axes */
+GAMEPAD_AXIS_LEFT_X :: 0;
+GAMEPAD_AXIS_LEFT_Y :: 1;
+GAMEPAD_AXIS_RIGHT_X :: 2;
+GAMEPAD_AXIS_RIGHT_Y :: 3;
+GAMEPAD_AXIS_LEFT_TRIGGER :: 4;
+GAMEPAD_AXIS_RIGHT_TRIGGER :: 5;
+GAMEPAD_AXIS_LAST :: GAMEPAD_AXIS_RIGHT_TRIGGER;
+
+/* Error constants */
+NO_ERROR :: 0x00000000;
+NOT_INITIALIZED :: 0x00010001;
+NO_CURRENT_CONTEXT :: 0x00010002;
+INVALID_ENUM :: 0x00010003;
+INVALID_VALUE :: 0x00010004;
+OUT_OF_MEMORY :: 0x00010005;
+API_UNAVAILABLE :: 0x00010006;
+VERSION_UNAVAILABLE :: 0x00010007;
+PLATFORM_ERROR :: 0x00010008;
+FORMAT_UNAVAILABLE :: 0x00010009;
+NO_WINDOW_CONTEXT :: 0x0001000A;
+
+/* Window attributes */
+FOCUSED :: 0x00020001;
+ICONIFIED :: 0x00020002;
+RESIZABLE :: 0x00020003;
+VISIBLE :: 0x00020004;
+DECORATED :: 0x00020005;
+AUTO_ICONIFY :: 0x00020006;
+FLOATING :: 0x00020007;
+MAXIMIZED :: 0x00020008;
+CENTER_CURSOR :: 0x00020009;
+TRANSPARENT_FRAMEBUFFER :: 0x0002000A;
+HOVERED :: 0x0002000B;
+FOCUS_ON_SHOW :: 0x0002000C;
+
+/* Pixel window attributes */
+RED_BITS :: 0x00021001;
+GREEN_BITS :: 0x00021002;
+BLUE_BITS :: 0x00021003;
+ALPHA_BITS :: 0x00021004;
+DEPTH_BITS :: 0x00021005;
+STENCIL_BITS :: 0x00021006;
+ACCUM_RED_BITS :: 0x00021007;
+ACCUM_GREEN_BITS :: 0x00021008;
+ACCUM_BLUE_BITS :: 0x00021009;
+ACCUM_ALPHA_BITS :: 0x0002100A;
+AUX_BUFFERS :: 0x0002100B;
+STEREO :: 0x0002100C;
+SAMPLES :: 0x0002100D;
+SRGB_CAPABLE :: 0x0002100E;
+REFRESH_RATE :: 0x0002100F;
+DOUBLEBUFFER :: 0x00021010;
+
+/* Context window attributes */
+CLIENT_API :: 0x00022001;
+CONTEXT_VERSION_MAJOR :: 0x00022002;
+CONTEXT_VERSION_MINOR :: 0x00022003;
+CONTEXT_REVISION :: 0x00022004;
+CONTEXT_ROBUSTNESS :: 0x00022005;
+OPENGL_FORWARD_COMPAT :: 0x00022006;
+OPENGL_DEBUG_CONTEXT :: 0x00022007;
+OPENGL_PROFILE :: 0x00022008;
+CONTEXT_RELEASE_BEHAVIOR :: 0x00022009;
+CONTEXT_NO_ERROR :: 0x0002200A;
+CONTEXT_CREATION_API :: 0x0002200B;
+SCALE_TO_MONITOR :: 0x0002200C;
+
+/* Cross platform attributes */
+COCOA_RETINA_FRAMEBUFFER :: 0x00023001;
+COCOA_FRAME_NAME :: 0x00023002;
+COCOA_GRAPHICS_SWITCHING :: 0x00023003;
+X11_CLASS_NAME :: 0x00024001;
+X11_INSTANCE_NAME :: 0x00024002;
+
+/* APIs */
+NO_API :: 0;
+OPENGL_API :: 0x00030001;
+OPENGL_ES_API :: 0x00030002;
+
+/* Robustness? */
+NO_ROBUSTNESS :: 0;
+NO_RESET_NOTIFICATION :: 0x00031001;
+LOSE_CONTEXT_ON_RESET :: 0x00031002;
+
+/* OpenGL Profiles */
+OPENGL_ANY_PROFILE :: 0;
+OPENGL_CORE_PROFILE :: 0x00032001;
+OPENGL_COMPAT_PROFILE :: 0x00032002;
+
+/* Cursor draw state and whether keys are sticky */
+CURSOR :: 0x00033001;
+STICKY_KEYS :: 0x00033002;
+STICKY_MOUSE_BUTTONS :: 0x00033003;
+LOCK_KEY_MODS :: 0x00033004;
+
+/* Cursor draw state */
+CURSOR_NORMAL :: 0x00034001;
+CURSOR_HIDDEN :: 0x00034002;
+CURSOR_DISABLED :: 0x00034003;
+
+/* Behavior? */
+ANY_RELEASE_BEHAVIOR :: 0;
+RELEASE_BEHAVIOR_FLUSH :: 0x00035001;
+RELEASE_BEHAVIOR_NONE :: 0x00035002;
+
+/* Context API ? */
+NATIVE_CONTEXT_API :: 0x00036001;
+EGL_CONTEXT_API :: 0x00036002;
+OSMESA_CONTEXT_API :: 0x00036003;
+
+/* Types of cursors */
+ARROW_CURSOR :: 0x00036001;
+IBEAM_CURSOR :: 0x00036002;
+CROSSHAIR_CURSOR :: 0x00036003;
+HAND_CURSOR :: 0x00036004;
+HRESIZE_CURSOR :: 0x00036005;
+VRESIZE_CURSOR :: 0x00036006;
+RESIZE_NWSE_CURSOR :: 0x00036007;
+RESIZE_NESW_CURSOR :: 0x00036008;
+
+/* Joystick? */
+CONNECTED :: 0x00040001;
+DISCONNECTED :: 0x00040002;
+
+/* macOS specific init hint. */
+JOYSTICK_HAT_BUTTONS :: 0x00050001;
+COCOA_CHDIR_RESOURCES :: 0x00051001;
+COCOA_MENUBAR :: 0x00051002;
+
+/* */
+DONT_CARE :: -1;
diff --git a/vendor/glfw/lib/glfw3.dll b/vendor/glfw/lib/glfw3.dll
new file mode 100644
index 000000000..0359bb4f3
--- /dev/null
+++ b/vendor/glfw/lib/glfw3.dll
Binary files differ
diff --git a/vendor/glfw/lib/glfw3.lib b/vendor/glfw/lib/glfw3.lib
new file mode 100644
index 000000000..e59770e65
--- /dev/null
+++ b/vendor/glfw/lib/glfw3.lib
Binary files differ
diff --git a/vendor/glfw/lib/glfw3_mt.lib b/vendor/glfw/lib/glfw3_mt.lib
new file mode 100644
index 000000000..231030e92
--- /dev/null
+++ b/vendor/glfw/lib/glfw3_mt.lib
Binary files differ
diff --git a/vendor/glfw/lib/glfw3dll.lib b/vendor/glfw/lib/glfw3dll.lib
new file mode 100644
index 000000000..cfcf1197b
--- /dev/null
+++ b/vendor/glfw/lib/glfw3dll.lib
Binary files differ
diff --git a/vendor/glfw/native.odin b/vendor/glfw/native.odin
new file mode 100644
index 000000000..871c42af9
--- /dev/null
+++ b/vendor/glfw/native.odin
@@ -0,0 +1,33 @@
+package glfw
+
+when ODIN_OS == "windows" {
+ import win32 "core:sys/windows"
+
+ foreign import glfw { "lib/glfw3.lib", "system:user32.lib", "system:gdi32.lib", "system:shell32.lib" }
+
+ @(default_calling_convention="c", link_prefix="glfw")
+ foreign glfw {
+ GetWin32Adapter :: proc(monitor: MonitorHandle) -> cstring ---
+ GetWin32Monitor :: proc(monitor: MonitorHandle) -> cstring ---
+ GetWin32Window :: proc(window: WindowHandle) -> win32.HWND ---
+ GetWGLContext :: proc(window: WindowHandle) -> rawptr ---
+ }
+} else when ODIN_OS == "linux" {
+ // TODO: Native Linux
+ // Display* glfwGetX11Display(void);
+ // RRCrtc glfwGetX11Adapter(GLFWmonitor* monitor);
+ // RROutput glfwGetX11Monitor(GLFWmonitor* monitor);
+ // Window glfwGetX11Window(GLFWwindow* window);
+ // void glfwSetX11SelectionString(const char* string);
+ // const char* glfwGetX11SelectionString(void);
+
+ // struct wl_display* glfwGetWaylandDisplay(void);
+ // struct wl_output* glfwGetWaylandMonitor(GLFWmonitor* monitor);
+ // struct wl_surface* glfwGetWaylandWindow(GLFWwindow* window);
+} else when ODIN_OS == "darwin" {
+ // TODO: Native Darwin
+ // CGDirectDisplayID glfwGetCocoaMonitor(GLFWmonitor* monitor);
+ // id glfwGetCocoaWindow(GLFWwindow* window);
+ // id glfwGetNSGLContext(GLFWwindow* window);
+}
+
diff --git a/vendor/glfw/types.odin b/vendor/glfw/types.odin
new file mode 100644
index 000000000..c7bc977da
--- /dev/null
+++ b/vendor/glfw/types.odin
@@ -0,0 +1,36 @@
+package glfw
+
+import glfw "bindings"
+
+WindowHandle :: glfw.WindowHandle;
+MonitorHandle :: glfw.MonitorHandle;
+CursorHandle :: glfw.CursorHandle;
+
+VidMode :: glfw.VidMode;
+GammaRamp :: glfw.GammaRamp;
+Image :: glfw.Image;
+GamepadState :: glfw.GamepadState;
+
+/*** Procedure type declarations ***/
+WindowIconifyProc :: glfw.WindowIconifyProc;
+WindowRefreshProc :: glfw.WindowRefreshProc;
+WindowFocusProc :: glfw.WindowFocusProc;
+WindowCloseProc :: glfw.WindowCloseProc;
+WindowSizeProc :: glfw.WindowSizeProc;
+WindowPosProc :: glfw.WindowPosProc;
+WindowMaximizeProc :: glfw.WindowMaximizeProc;
+WindowContentScaleProc :: glfw.WindowContentScaleProc;
+FramebufferSizeProc :: glfw.FramebufferSizeProc;
+DropProc :: glfw.DropProc;
+MonitorProc :: glfw.MonitorProc;
+
+KeyProc :: glfw.KeyProc;
+MouseButtonProc :: glfw.MouseButtonProc;
+CursorPosProc :: glfw.CursorPosProc;
+ScrollProc :: glfw.ScrollProc;
+CharProc :: glfw.CharProc;
+CharModsProc :: glfw.CharModsProc;
+CursorEnterProc :: glfw.CursorEnterProc;
+JoystickProc :: glfw.JoystickProc;
+
+ErrorProc :: glfw.ErrorProc;
diff --git a/vendor/glfw/wrapper.odin b/vendor/glfw/wrapper.odin
new file mode 100644
index 000000000..f799115ef
--- /dev/null
+++ b/vendor/glfw/wrapper.odin
@@ -0,0 +1,225 @@
+package glfw
+
+import "core:c"
+import glfw "bindings"
+
+Init :: glfw.Init;
+Terminate :: glfw.Terminate;
+
+InitHint :: glfw.InitHint;
+
+GetVersion :: proc "c" () -> (major, minor, rev: c.int) {
+ glfw.GetVersion(&major, &minor, &rev);
+ return;
+}
+GetError :: proc "c" () -> (description: string, code: c.int) {
+ desc: cstring;
+ code = glfw.GetError(&desc);
+ description = string(desc);
+ return;
+}
+
+GetPrimaryMonitor :: glfw.GetPrimaryMonitor;
+GetMonitors :: proc "c" () -> []MonitorHandle {
+ count: c.int;
+ monitors := glfw.GetMonitors(&count);
+ return monitors[:count];
+}
+GetMonitorPos :: proc "c" (monitor: MonitorHandle) -> (xpos, ypos: c.int) {
+ glfw.GetMonitorPos(monitor, &xpos, &ypos);
+ return;
+}
+GetMonitorPhysicalSize :: proc "c" (monitor: MonitorHandle) -> (widthMM, heightMM: c.int) {
+ glfw.GetMonitorPhysicalSize(monitor, &widthMM, &heightMM);
+ return;
+}
+GetMonitorContentScale :: proc "c" (monitor: MonitorHandle) -> (xscale, yscale: f32) {
+ glfw.GetMonitorContentScale(monitor, &xscale, &yscale);
+ return;
+}
+
+SetMonitorUserPointer :: glfw.SetMonitorUserPointer;
+GetMonitorUserPointer :: glfw.GetMonitorUserPointer;
+
+GetVideoMode :: glfw.GetVideoMode;
+SetGamma :: glfw.SetGamma;
+GetGammaRamp :: glfw.GetGammaRamp;
+SetGammaRamp :: glfw.SetGammaRamp;
+
+CreateWindow :: glfw.CreateWindow;
+DestroyWindow :: glfw.DestroyWindow;
+
+WindowHint :: glfw.WindowHint;
+DefaultWindowHints :: glfw.DefaultWindowHints;
+WindowHintString :: glfw.WindowHintString;
+WindowShouldClose :: glfw.WindowShouldClose;
+
+SwapInterval :: glfw.SwapInterval;
+SwapBuffers :: glfw.SwapBuffers;
+
+SetWindowTitle :: glfw.SetWindowTitle;
+SetWindowIcon :: proc "c" (window: WindowHandle, images: []Image) {
+ glfw.SetWindowIcon(window, c.int(len(images)), raw_data(images));
+}
+SetWindowPos :: glfw.SetWindowPos;
+SetWindowSizeLimits :: glfw.SetWindowSizeLimits;
+SetWindowAspectRatio :: glfw.SetWindowAspectRatio;
+SetWindowSize :: glfw.SetWindowSize;
+GetWindowPos :: proc "c" (window: WindowHandle) -> (xpos, ypos: c.int) {
+ glfw.GetWindowPos(window, &xpos, &ypos);
+ return;
+}
+GetWindowSize :: proc "c" (window: WindowHandle) -> (width, height: c.int) {
+ glfw.GetWindowSize(window, &width, &height);
+ return;
+}
+GetFramebufferSize :: proc "c" (window: WindowHandle) -> (width, height: c.int) {
+ glfw.GetFramebufferSize(window, &width, &height);
+ return;
+}
+GetWindowFrameSize :: proc "c" (window: WindowHandle) -> (left, top, right, bottom: c.int) {
+ glfw.GetWindowFrameSize(window, &left, &top, &right, &bottom);
+ return;
+}
+
+GetWindowContentScale :: proc "c" (window: WindowHandle) -> (xscale, yscale: f32) {
+ glfw.GetWindowContentScale(window, &xscale, &yscale);
+ return;
+}
+GetWindowOpacity :: glfw.GetWindowOpacity;
+SetWindowOpacity :: glfw.SetWindowOpacity;
+
+GetVersionString :: proc "c" () -> string {
+ return string(glfw.GetVersionString());
+}
+GetMonitorName :: proc "c" (monitor: MonitorHandle) -> string {
+ return string(glfw.GetMonitorName(monitor));
+}
+GetClipboardString :: proc "c" (window: WindowHandle) -> string {
+ return string(glfw.GetClipboardString(window));
+}
+GetVideoModes :: proc "c" (monitor: MonitorHandle) -> []VidMode {
+ count: c.int;
+ modes := glfw.GetVideoModes(monitor, &count);
+ return modes[:count];
+}
+
+GetKey :: glfw.GetKey;
+GetKeyName :: proc "c" (key, scancode: c.int) -> string {
+ return string(glfw.GetKeyName(key, scancode));
+}
+SetWindowShouldClose :: glfw.SetWindowShouldClose;
+JoystickPresent :: glfw.JoystickPresent;
+GetJoystickName :: proc "c" (joy: c.int) -> string {
+ return string(glfw.GetJoystickName(joy));
+}
+GetKeyScancode :: glfw.GetKeyScancode;
+
+IconifyWindow :: glfw.IconifyWindow;
+RestoreWindow :: glfw.RestoreWindow;
+MaximizeWindow :: glfw.MaximizeWindow;
+ShowWindow :: glfw.ShowWindow;
+HideWindow :: glfw.HideWindow;
+FocusWindow :: glfw.FocusWindow;
+
+RequestWindowAttention :: glfw.RequestWindowAttention;
+
+GetWindowMonitor :: glfw.GetWindowMonitor;
+SetWindowMonitor :: glfw.SetWindowMonitor;
+GetWindowAttrib :: glfw.GetWindowAttrib;
+SetWindowUserPointer :: glfw.SetWindowUserPointer;
+GetWindowUserPointer :: glfw.GetWindowUserPointer;
+
+SetWindowAttrib :: glfw.SetWindowAttrib;
+
+PollEvents :: glfw.PollEvents;
+WaitEvents :: glfw.WaitEvents;
+WaitEventsTimeout :: glfw.WaitEventsTimeout;
+PostEmptyEvent :: glfw.PostEmptyEvent;
+
+GetInputMode :: glfw.GetInputMode;
+SetInputMode :: glfw.SetInputMode;
+
+GetMouseButton :: glfw.GetMouseButton;
+GetCursorPos :: proc "c" (window: WindowHandle) -> (xpos, ypos: f64) {
+ glfw.GetCursorPos(window, &xpos, &ypos);
+ return;
+}
+SetCursorPos :: glfw.SetCursorPos;
+
+CreateCursor :: glfw.CreateCursor;
+DestroyCursor :: glfw.DestroyCursor;
+SetCursor :: glfw.SetCursor;
+CreateStandardCursor :: glfw.CreateStandardCursor;
+
+GetJoystickAxes :: proc "c" (joy: c.int) -> []f32 {
+ count: c.int;
+ axes := glfw.GetJoystickAxes(joy, &count);
+ return axes[:count];
+}
+GetJoystickButtons :: proc "c" (joy: c.int) -> []u8 {
+ count: c.int;
+ buttons := glfw.GetJoystickButtons(joy, &count);
+ return buttons[:count];
+}
+GetJoystickHats :: proc "c" (jid: c.int) -> []u8 {
+ count: c.int;
+ hats := glfw.GetJoystickHats(jid, &count);
+ return hats[:count];
+}
+GetJoystickGUID :: proc "c" (jid: c.int) -> string {
+ return string(glfw.GetJoystickGUID(jid));
+}
+SetJoystickUserPointer :: glfw.SetJoystickUserPointer;
+GetJoystickUserPointer :: glfw.GetJoystickUserPointer;
+JoystickIsGamepad :: glfw.JoystickIsGamepad;
+UpdateGamepadMappings :: glfw.UpdateGamepadMappings;
+GetGamepadName :: proc "c" (jid: c.int) -> string {
+ return string(glfw.GetGamepadName(jid));
+}
+GetGamepadState :: glfw.GetGamepadState;
+
+SetClipboardString :: glfw.SetClipboardString;
+
+SetTime :: glfw.SetTime;
+GetTime :: glfw.GetTime;
+GetTimerValue :: glfw.GetTimerValue;
+GetTimerFrequency :: glfw.GetTimerFrequency;
+
+MakeContextCurrent :: glfw.MakeContextCurrent;
+GetCurrentContext :: glfw.GetCurrentContext;
+GetProcAddress :: glfw.GetProcAddress;
+ExtensionSupported :: glfw.ExtensionSupported;
+
+VulkanSupported :: glfw.VulkanSupported;
+GetRequiredInstanceExtensions :: proc "c" () -> []cstring {
+ count: u32;
+ exts := glfw.GetRequiredInstanceExtensions(&count);
+ return exts[:count];
+}
+GetInstanceProcAddress :: glfw.GetInstanceProcAddress;
+GetPhysicalDevicePresentationSupport :: glfw.GetPhysicalDevicePresentationSupport;
+CreateWindowSurface :: glfw.CreateWindowSurface;
+
+SetWindowIconifyCallback :: glfw.SetWindowIconifyCallback;
+SetWindowRefreshCallback :: glfw.SetWindowRefreshCallback;
+SetWindowFocusCallback :: glfw.SetWindowFocusCallback;
+SetWindowCloseCallback :: glfw.SetWindowCloseCallback;
+SetWindowSizeCallback :: glfw.SetWindowSizeCallback;
+SetWindowPosCallback :: glfw.SetWindowPosCallback;
+SetFramebufferSizeCallback :: glfw.SetFramebufferSizeCallback;
+SetDropCallback :: glfw.SetDropCallback;
+SetMonitorCallback :: glfw.SetMonitorCallback;
+SetWindowMaximizeCallback :: glfw.SetWindowMaximizeCallback;
+SetWindowContentScaleCallback :: glfw.SetWindowContentScaleCallback;
+
+SetKeyCallback :: glfw.SetKeyCallback;
+SetMouseButtonCallback :: glfw.SetMouseButtonCallback;
+SetCursorPosCallback :: glfw.SetCursorPosCallback;
+SetScrollCallback :: glfw.SetScrollCallback;
+SetCharCallback :: glfw.SetCharCallback;
+SetCharModsCallback :: glfw.SetCharModsCallback;
+SetCursorEnterCallback :: glfw.SetCursorEnterCallback;
+SetJoystickCallback :: glfw.SetJoystickCallback;
+
+SetErrorCallback :: glfw.SetErrorCallback; \ No newline at end of file