summaryrefslogtreecommitdiff
path: root/rgfw.c3l/rgfw.c3
diff options
context:
space:
mode:
Diffstat (limited to 'rgfw.c3l/rgfw.c3')
-rw-r--r--rgfw.c3l/rgfw.c31301
1 files changed, 660 insertions, 641 deletions
diff --git a/rgfw.c3l/rgfw.c3 b/rgfw.c3l/rgfw.c3
index 171ea5b..bdbe771 100644
--- a/rgfw.c3l/rgfw.c3
+++ b/rgfw.c3l/rgfw.c3
@@ -1,5 +1,4 @@
-/*
-*
+/**
* Copyright (C) 2026 andromeda
*
* This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
@@ -7,33 +6,32 @@
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
-*
-*/
+**/
module rgfw;
-alias Info = void;
-alias Window = void;
+alias Info = void;
+alias Window = void;
alias Window_src = void;
constdef Format : char
{
- RGB8 = 0,
- BGR8,
- RGBA8,
- ARGB8,
- BGRA8,
- ABGR8,
- COUNT,
+ RGB8 = 0,
+ BGR8,
+ RGBA8,
+ ARGB8,
+ BGRA8,
+ ABGR8,
+ COUNT,
}
struct ColorLayout
{
- int r;
- int g;
- int b;
- int a;
- uint channels;
+ int r;
+ int g;
+ int b;
+ int a;
+ uint channels;
}
alias ConvertImageDataFunc = fn void(char*, char*, ColorLayout*, ColorLayout*, usz);
@@ -43,790 +41,811 @@ alias Surface = void;
struct GammaRamp
{
- ushort* red;
- ushort* green;
- ushort* blue;
- usz count;
+ ushort* red;
+ ushort* green;
+ ushort* blue;
+ usz count;
}
struct MonitorMode
{
- int w;
- int h;
- float refreshRate;
- char red;
- char blue;
- char green;
- void* src;
+ int w;
+ int h;
+ float refreshRate;
+ char red;
+ char blue;
+ char green;
+ void* src;
}
alias MonitorNode = void;
struct Monitor
{
- int x;
- int y;
- CChar* name;
- float scaleX;
- float scaleY;
- float pixelRatio;
- float physW;
- float physH;
- MonitorMode mode;
- void* userPtr;
- MonitorNode* node;
+ int x;
+ int y;
+ CChar* name;
+ float scaleX;
+ float scaleY;
+ float pixelRatio;
+ float physW;
+ float physH;
+ MonitorMode mode;
+ void* userPtr;
+ MonitorNode* node;
}
constdef ModeRequest : char
{
- SCALE = 1 << 0,
- REFRESH = 1 << 1,
- RGB = 1 << 2,
- ALL = SCALE | REFRESH | RGB,
+ SCALE = 1 << 0,
+ REFRESH = 1 << 1,
+ RGB = 1 << 2,
+ ALL = SCALE | REFRESH | RGB,
}
alias Mouse = void;
constdef Key
{
- KEY_NULL = 0,
- KEY_ESCAPE = 27,
- KEY_BACKTICK = '`',
- KEY_0 = '0',
- KEY_1 = '1',
- KEY_2 = '2',
- KEY_3 = '3',
- KEY_4 = '4',
- KEY_5 = '5',
- KEY_6 = '6',
- KEY_7 = '7',
- KEY_8 = '8',
- KEY_9 = '9',
- KEY_MINUS = '-',
- KEY_EQUAL = '=',
- KEY_EQUALS = KEY_EQUAL,
- KEY_BACKSPACE = '\b',
- KEY_TAB = '\t',
- KEY_SPACE = ' ',
- KEY_A = 'a',
- KEY_B = 'b',
- KEY_C = 'c',
- KEY_D = 'd',
- KEY_E = 'e',
- KEY_F = 'f',
- KEY_G = 'g',
- KEY_H = 'h',
- KEY_I = 'i',
- KEY_J = 'j',
- KEY_K = 'k',
- KEY_L = 'l',
- KEY_M = 'm',
- KEY_N = 'n',
- KEY_O = 'o',
- KEY_P = 'p',
- KEY_Q = 'q',
- KEY_R = 'r',
- KEY_S = 's',
- KEY_T = 't',
- KEY_U = 'u',
- KEY_V = 'v',
- KEY_W = 'w',
- KEY_X = 'x',
- KEY_Y = 'y',
- KEY_Z = 'z',
- KEY_PERIOD = '.',
- KEY_COMMA = ',',
- KEY_SLASH = '/',
- KEY_BRACKET = '[',
- KEY_CLOSEBRACKET = ']',
- KEY_SEMICOLON = ';',
- KEY_APOSTROPHE = '\'',
- KEY_BACKSLASH = '\\',
- KEY_RETURN = '\n',
- KEY_ENTER = KEY_RETURN,
- KEY_DELETE = 127,
- KEY_F1,
- KEY_F2,
- KEY_F3,
- KEY_F4,
- KEY_F5,
- KEY_F6,
- KEY_F7,
- KEY_F8,
- KEY_F9,
- KEY_F10,
- KEY_F11,
- KEY_F12,
- KEY_F13,
- KEY_F14,
- KEY_F15,
- KEY_F16,
- KEY_F17,
- KEY_F18,
- KEY_F19,
- KEY_F20,
- KEY_F21,
- KEY_F22,
- KEY_F23,
- KEY_F24,
- KEY_F25,
- KEY_CAPSLOCK,
- KEY_SHIFTL,
- KEY_CONTROLL,
- KEY_ALTL,
- KEY_SUPERL,
- KEY_SHIFTR,
- KEY_CONTROLR,
- KEY_ALTR,
- KEY_SUPERR,
- KEY_UP,
- KEY_DOWN,
- KEY_LEFT,
- KEY_RIGHT,
- KEY_INSERT,
- KEY_MENU,
- KEY_END,
- KEY_HOME,
- KEY_PAGEUP,
- KEY_PAGEDOWN,
- KEY_NUMLOCK,
- KEY_PADSLASH,
- KEY_PADMULTIPLY,
- KEY_PADPLUS,
- KEY_PADMINUS,
- KEY_PADEQUAL,
- KEY_PADEQUALS = KEY_PADEQUAL,
- KEY_KEY_PAD1,
- KEY_PAD2,
- KEY_PAD3,
- KEY_PAD4,
- KEY_PAD5,
- KEY_PAD6,
- KEY_PAD7,
- KEY_PAD8,
- KEY_PAD9,
- KEY_PAD0,
- KEY_PADPERIOD,
- KEY_PADRETURN,
- KEY_SCROLLLOCK,
- KEY_PRINTSCREEN,
- KEY_PAUSE,
- KEY_WORLD1,
- KEY_WORLD2,
- KEY_LAST = 256,
+ KEY_NULL = 0,
+ KEY_ESCAPE = 27,
+ KEY_BACKTICK = '`',
+ KEY_0 = '0',
+ KEY_1 = '1',
+ KEY_2 = '2',
+ KEY_3 = '3',
+ KEY_4 = '4',
+ KEY_5 = '5',
+ KEY_6 = '6',
+ KEY_7 = '7',
+ KEY_8 = '8',
+ KEY_9 = '9',
+ KEY_MINUS = '-',
+ KEY_EQUAL = '=',
+ KEY_EQUALS = KEY_EQUAL,
+ KEY_BACKSPACE = '\b',
+ KEY_TAB = '\t',
+ KEY_SPACE = ' ',
+ KEY_A = 'a',
+ KEY_B = 'b',
+ KEY_C = 'c',
+ KEY_D = 'd',
+ KEY_E = 'e',
+ KEY_F = 'f',
+ KEY_G = 'g',
+ KEY_H = 'h',
+ KEY_I = 'i',
+ KEY_J = 'j',
+ KEY_K = 'k',
+ KEY_L = 'l',
+ KEY_M = 'm',
+ KEY_N = 'n',
+ KEY_O = 'o',
+ KEY_P = 'p',
+ KEY_Q = 'q',
+ KEY_R = 'r',
+ KEY_S = 's',
+ KEY_T = 't',
+ KEY_U = 'u',
+ KEY_V = 'v',
+ KEY_W = 'w',
+ KEY_X = 'x',
+ KEY_Y = 'y',
+ KEY_Z = 'z',
+ KEY_PERIOD = '.',
+ KEY_COMMA = ',',
+ KEY_SLASH = '/',
+ KEY_BRACKET = '[',
+ KEY_CLOSEBRACKET = ']',
+ KEY_SEMICOLON = ';',
+ KEY_APOSTROPHE = '\'',
+ KEY_BACKSLASH = '\\',
+ KEY_RETURN = '\n',
+ KEY_ENTER = KEY_RETURN,
+ KEY_DELETE = 127,
+ KEY_F1,
+ KEY_F2,
+ KEY_F3,
+ KEY_F4,
+ KEY_F5,
+ KEY_F6,
+ KEY_F7,
+ KEY_F8,
+ KEY_F9,
+ KEY_F10,
+ KEY_F11,
+ KEY_F12,
+ KEY_F13,
+ KEY_F14,
+ KEY_F15,
+ KEY_F16,
+ KEY_F17,
+ KEY_F18,
+ KEY_F19,
+ KEY_F20,
+ KEY_F21,
+ KEY_F22,
+ KEY_F23,
+ KEY_F24,
+ KEY_F25,
+ KEY_CAPSLOCK,
+ KEY_SHIFTL,
+ KEY_CONTROLL,
+ KEY_ALTL,
+ KEY_SUPERL,
+ KEY_SHIFTR,
+ KEY_CONTROLR,
+ KEY_ALTR,
+ KEY_SUPERR,
+ KEY_UP,
+ KEY_DOWN,
+ KEY_LEFT,
+ KEY_RIGHT,
+ KEY_INSERT,
+ KEY_MENU,
+ KEY_END,
+ KEY_HOME,
+ KEY_PAGEUP,
+ KEY_PAGEDOWN,
+ KEY_NUMLOCK,
+ KEY_PADSLASH,
+ KEY_PADMULTIPLY,
+ KEY_PADPLUS,
+ KEY_PADMINUS,
+ KEY_PADEQUAL,
+ KEY_PADEQUALS = KEY_PADEQUAL,
+ KEY_KEY_PAD1,
+ KEY_PAD2,
+ KEY_PAD3,
+ KEY_PAD4,
+ KEY_PAD5,
+ KEY_PAD6,
+ KEY_PAD7,
+ KEY_PAD8,
+ KEY_PAD9,
+ KEY_PAD0,
+ KEY_PADPERIOD,
+ KEY_PADRETURN,
+ KEY_SCROLLLOCK,
+ KEY_PRINTSCREEN,
+ KEY_PAUSE,
+ KEY_WORLD1,
+ KEY_WORLD2,
+ KEY_LAST = 256,
}
constdef MouseButton : char
{
- LEFT = 0,
- MIDDLE,
- RIGHT,
- MISC1,
- MISC2,
- MISC3,
- MISC4,
- MISC5,
- FINAL,
+ LEFT = 0,
+ MIDDLE,
+ RIGHT,
+ MISC1,
+ MISC2,
+ MISC3,
+ MISC4,
+ MISC5,
+ FINAL,
}
constdef Keymod : char
{
- CAPSLOCK = 1 << 0,
- NUMLOCK = 1 << 1,
- CONTROL = 1 << 2,
- ALT = 1 << 3,
- SHIFT = 1 << 4,
- SUPER = 1 << 5,
- SCROLLLOCK = 1 << 6,
+ CAPSLOCK = 1 << 0,
+ NUMLOCK = 1 << 1,
+ CONTROL = 1 << 2,
+ ALT = 1 << 3,
+ SHIFT = 1 << 4,
+ SUPER = 1 << 5,
+ SCROLLLOCK = 1 << 6,
}
constdef DndActionType : char
{
- ACTION_NONE = 0,
- ACTION_ENTER,
- ACTION_MOVE,
- ACTION_EXIT,
+ ACTION_NONE = 0,
+ ACTION_ENTER,
+ ACTION_MOVE,
+ ACTION_EXIT,
}
constdef DataTransferType : char
{
- NONE = 0,
- TEXT,
- FILE,
- URL,
- IMAGE,
- UNKNOWN,
+ NONE = 0,
+ TEXT,
+ FILE,
+ URL,
+ IMAGE,
+ UNKNOWN,
}
struct DataDropNode
{
- ZString data;
- usz size;
- DataTransferType type;
- DataDropNode* next;
+ ZString data;
+ usz size;
+ DataTransferType type;
+ DataDropNode* next;
}
constdef EventType : char
{
- EVENT_NONE = 0,
- KEY_PRESSED,
- KEY_RELEASED,
- KEY_CHAR,
- MOUSE_BUTTON_PRESSED,
- MOUSE_BUTTON_RELEASED,
- MOUSE_SCROLL,
- MOUSE_POS_CHANGED,
- MOUSE_RAW_MOTION,
- MOUSE_ENTER,
- MOUSE_LEAVE,
- WINDOW_MOVED,
- WINDOW_RESIZED,
- WINDOW_FOCUS_IN,
- WINDOW_FOCUS_OUT,
- WINDOW_REFRESH,
- WINDOW_CLOSE,
- WINDOW_MAXIMIZED,
- WINDOW_MINIMIZED,
- WINDOW_RESTORED,
- DATA_DROP,
- DATA_DRAG,
- SCALE_UPDATED,
- MONITOR_CONNECTED,
- MONITOR_DISCONNECTED,
- EVENT_COUNT,
+ EVENT_NONE = 0,
+ KEY_PRESSED,
+ KEY_RELEASED,
+ KEY_CHAR,
+ MOUSE_BUTTON_PRESSED,
+ MOUSE_BUTTON_RELEASED,
+ MOUSE_SCROLL,
+ MOUSE_POS_CHANGED,
+ MOUSE_RAW_MOTION,
+ MOUSE_ENTER,
+ MOUSE_LEAVE,
+ WINDOW_MOVED,
+ WINDOW_RESIZED,
+ WINDOW_FOCUS_IN,
+ WINDOW_FOCUS_OUT,
+ WINDOW_REFRESH,
+ WINDOW_CLOSE,
+ WINDOW_MAXIMIZED,
+ WINDOW_MINIMIZED,
+ WINDOW_RESTORED,
+ DATA_DROP,
+ DATA_DRAG,
+ SCALE_UPDATED,
+ MONITOR_CONNECTED,
+ MONITOR_DISCONNECTED,
+ EVENT_COUNT,
}
constdef EventFlag : uint
{
- KEY_PRESSED = 1 << (char)EventType.KEY_PRESSED,
- KEY_RELEASED = 1 << (char)EventType.KEY_RELEASED,
- KEY_CHAR = 1 << (char)EventType.KEY_CHAR,
- MOUSE_BUTTON_PRESSED = 1 << (char)EventType.MOUSE_BUTTON_PRESSED,
- MOUSE_BUTTON_RELEASED = 1 << (char)EventType.MOUSE_BUTTON_RELEASED,
- MOUSE_SCROLL = 1 << (char)EventType.MOUSE_SCROLL,
- MOUSE_POS_CHANGED = 1 << (char)EventType.MOUSE_POS_CHANGED,
- MOUSE_RAW_MOTION = 1 << (char)EventType.MOUSE_RAW_MOTION,
- MOUSE_ENTER = 1 << (char)EventType.MOUSE_ENTER,
- MOUSE_LEAVE = 1 << (char)EventType.MOUSE_LEAVE,
- WINDOW_MOVED = 1 << (char)EventType.WINDOW_MOVED,
- WINDOW_RESIZED = 1 << (char)EventType.WINDOW_RESIZED,
- WINDOW_FOCUS_IN = 1 << (char)EventType.WINDOW_FOCUS_IN,
- WINDOW_FOCUS_OUT = 1 << (char)EventType.WINDOW_FOCUS_OUT,
- WINDOW_REFRESH = 1 << (char)EventType.WINDOW_REFRESH,
- WINDOW_CLOSE = 1 << (char)EventType.WINDOW_CLOSE,
- WINDOW_MAXIMIZED = 1 << (char)EventType.WINDOW_MAXIMIZED,
- WINDOW_MINIMIZED = 1 << (char)EventType.WINDOW_MINIMIZED,
- WINDOW_RESTORED = 1 << (char)EventType.WINDOW_RESTORED,
- DATA_DROP = 1 << (char)EventType.DATA_DROP,
- DATA_DRAG = 1 << (char)EventType.DATA_DRAG,
- SCALE_UPDATED = 1 << (char)EventType.SCALE_UPDATED,
- MONITOR_CONNECTED = 1 << (char)EventType.MONITOR_CONNECTED,
- MONITOR_DISCONNECTED = 1 << (char)EventType.MONITOR_DISCONNECTED,
+ KEY_PRESSED = 1 << (char)EventType.KEY_PRESSED,
+ KEY_RELEASED = 1 << (char)EventType.KEY_RELEASED,
+ KEY_CHAR = 1 << (char)EventType.KEY_CHAR,
+ MOUSE_BUTTON_PRESSED = 1 << (char)EventType.MOUSE_BUTTON_PRESSED,
+ MOUSE_BUTTON_RELEASED = 1 << (char)EventType.MOUSE_BUTTON_RELEASED,
+ MOUSE_SCROLL = 1 << (char)EventType.MOUSE_SCROLL,
+ MOUSE_POS_CHANGED = 1 << (char)EventType.MOUSE_POS_CHANGED,
+ MOUSE_RAW_MOTION = 1 << (char)EventType.MOUSE_RAW_MOTION,
+ MOUSE_ENTER = 1 << (char)EventType.MOUSE_ENTER,
+ MOUSE_LEAVE = 1 << (char)EventType.MOUSE_LEAVE,
+ WINDOW_MOVED = 1 << (char)EventType.WINDOW_MOVED,
+ WINDOW_RESIZED = 1 << (char)EventType.WINDOW_RESIZED,
+ WINDOW_FOCUS_IN = 1 << (char)EventType.WINDOW_FOCUS_IN,
+ WINDOW_FOCUS_OUT = 1 << (char)EventType.WINDOW_FOCUS_OUT,
+ WINDOW_REFRESH = 1 << (char)EventType.WINDOW_REFRESH,
+ WINDOW_CLOSE = 1 << (char)EventType.WINDOW_CLOSE,
+ WINDOW_MAXIMIZED = 1 << (char)EventType.WINDOW_MAXIMIZED,
+ WINDOW_MINIMIZED = 1 << (char)EventType.WINDOW_MINIMIZED,
+ WINDOW_RESTORED = 1 << (char)EventType.WINDOW_RESTORED,
+ DATA_DROP = 1 << (char)EventType.DATA_DROP,
+ DATA_DRAG = 1 << (char)EventType.DATA_DRAG,
+ SCALE_UPDATED = 1 << (char)EventType.SCALE_UPDATED,
+ MONITOR_CONNECTED = 1 << (char)EventType.MONITOR_CONNECTED,
+ MONITOR_DISCONNECTED = 1 << (char)EventType.MONITOR_DISCONNECTED,
- KEY_EVENTS = KEY_PRESSED | KEY_RELEASED | KEY_CHAR,
- MOUSE_EVENTS = MOUSE_BUTTON_PRESSED | MOUSE_BUTTON_RELEASED | MOUSE_SCROLL | MOUSE_POS_CHANGED | MOUSE_RAW_MOTION | MOUSE_ENTER | MOUSE_LEAVE,
- WINDOW_EVENTS = WINDOW_MOVED | WINDOW_RESIZED | WINDOW_REFRESH | WINDOW_MAXIMIZED | WINDOW_MINIMIZED | WINDOW_RESTORED | SCALE_UPDATED,
- WINDOW_FOCUS_EVENTS = WINDOW_FOCUS_IN | WINDOW_FOCUS_OUT,
- DATA_DRAG_DROP_EVENTS = DATA_DRAG | DATA_DROP,
- MONITOR_EVENTS = MONITOR_CONNECTED | MONITOR_DISCONNECTED,
- ALL_EVENTS = KEY_EVENTS | MOUSE_EVENTS | WINDOW_EVENTS | WINDOW_FOCUS_EVENTS | DATA_DRAG_DROP_EVENTS | MONITOR_EVENTS,
+ KEY_EVENTS = KEY_PRESSED | KEY_RELEASED | KEY_CHAR,
+ MOUSE_EVENTS = MOUSE_BUTTON_PRESSED | MOUSE_BUTTON_RELEASED | MOUSE_SCROLL | MOUSE_POS_CHANGED
+ | MOUSE_RAW_MOTION
+ | MOUSE_ENTER
+ | MOUSE_LEAVE,
+ WINDOW_EVENTS = WINDOW_MOVED | WINDOW_RESIZED | WINDOW_REFRESH | WINDOW_MAXIMIZED | WINDOW_MINIMIZED
+ | WINDOW_RESTORED
+ | SCALE_UPDATED,
+ WINDOW_FOCUS_EVENTS = WINDOW_FOCUS_IN | WINDOW_FOCUS_OUT,
+ DATA_DRAG_DROP_EVENTS = DATA_DRAG | DATA_DROP,
+ MONITOR_EVENTS = MONITOR_CONNECTED | MONITOR_DISCONNECTED,
+ ALL_EVENTS = KEY_EVENTS | MOUSE_EVENTS | WINDOW_EVENTS | WINDOW_FOCUS_EVENTS | DATA_DRAG_DROP_EVENTS
+ | MONITOR_EVENTS,
}
struct CommonEvent
{
- EventType type;
- Window* win;
+ EventType type;
+ Window* win;
}
struct WindowFocusEvent
{
- EventType type;
- Window* win;
- bool state;
+ EventType type;
+ Window* win;
+ bool state;
}
struct MouseButtonEvent
{
- EventType type;
- Window* win;
- MouseButton value;
- bool state;
+ EventType type;
+ Window* win;
+ MouseButton value;
+ bool state;
}
struct MouseDeltaEvent
{
- EventType type;
- Window* win;
- float x;
- float y;
+ EventType type;
+ Window* win;
+ float x;
+ float y;
}
struct MousePosEvent
{
- EventType type;
- Window* win;
- int x;
- int y;
- bool inWindow;
+ EventType type;
+ Window* win;
+ int x;
+ int y;
+ bool inWindow;
}
struct KeyEvent
{
- EventType type;
- Window* win;
- Key value;
- bool repeat;
- Keymod mod;
- bool state;
+ EventType type;
+ Window* win;
+ Key value;
+ bool repeat;
+ Keymod mod;
+ bool state;
}
struct KeyCharEvent
{
- EventType type;
- Window* win;
- Char32 value;
+ EventType type;
+ Window* win;
+ Char32 value;
}
struct DataDropEvent
{
- EventType type;
- Window* win;
- DataDropNode* value;
+ EventType type;
+ Window* win;
+ DataDropNode* value;
}
struct DataDragEvent
{
- EventType type;
- Window* win;
- int x;
- int y;
- DndActionType action;
- DataTransferType dataType;
+ EventType type;
+ Window* win;
+ int x;
+ int y;
+ DndActionType action;
+ DataTransferType dataType;
}
struct ScaleUpdatedEvent
{
- EventType type;
- Window* win;
- float x;
- float y;
+ EventType type;
+ Window* win;
+ float x;
+ float y;
}
struct MonitorEvent
{
- EventType type;
- Window* win;
- Monitor* monitor;
- bool state;
+ EventType type;
+ Window* win;
+ Monitor* monitor;
+ bool state;
}
struct WindowUpdateEvent
{
- EventType type;
- Window* win;
- int x;
- int y;
- int w;
- int h;
+ EventType type;
+ Window* win;
+ int x;
+ int y;
+ int w;
+ int h;
}
union Event
{
- EventType type;
- CommonEvent common;
- WindowFocusEvent focus;
- WindowUpdateEvent update;
- MouseButtonEvent button;
- MouseDeltaEvent delta;
- MousePosEvent mouse;
- KeyEvent key;
- KeyCharEvent keyChar;
- DataDropEvent drop;
- DataDragEvent drag;
- ScaleUpdatedEvent scale;
- MonitorEvent monitor;
+ EventType type;
+ CommonEvent common;
+ WindowFocusEvent focus;
+ WindowUpdateEvent update;
+ MouseButtonEvent button;
+ MouseDeltaEvent delta;
+ MousePosEvent mouse;
+ KeyEvent key;
+ KeyCharEvent keyChar;
+ DataDropEvent drop;
+ DataDragEvent drag;
+ ScaleUpdatedEvent scale;
+ MonitorEvent monitor;
}
constdef EventWait : int
{
- NO_WAIT = 0,
- WAIT_NEXT = -1,
+ NO_WAIT = 0,
+ WAIT_NEXT = -1,
}
alias GenericFunc = fn void(Event*);
-struct Callbacks { GenericFunc* arr; }
+struct Callbacks
+{
+ GenericFunc* arr;
+}
constdef WindowFlags : uint
{
- NO_BORDER = 1 << 0,
- NO_RESIZE = 1 << 1,
- ALLOW_DND = 1 << 2,
- HIDE_MOUSE = 1 << 3,
- FULLSCREEN = 1 << 4,
- TRANSLUCENT = 1 << 5,
- TRANSPARENT = TRANSLUCENT,
- CENTER = 1 << 6,
- RAW_MOUSE = 1 << 7,
- SCALE_TO_MONITOR = 1 << 8,
- HIDE = 1 << 9,
- MAXIMIZE = 1 << 10,
- CENTER_CURSOR = 1 << 11,
- FLOATING = 1 << 12,
- FOCUS_ON_SHOW = 1 << 13,
- MINIMIZE = 1 << 14,
- FOCUS = 1 << 15,
- CAPTURE_MOUSE = 1 << 16,
- OPENGL = 1 << 17,
- EGL = 1 << 18,
- NO_DEINIT_ON_CLOSE = 1 << 19,
- WINDOWED_FULLSCREEN = NO_BORDER | MAXIMIZE,
- CAPTURE_RAW_MOUSE = CAPTURE_MOUSE | RAW_MOUSE,
+ NO_BORDER = 1 << 0,
+ NO_RESIZE = 1 << 1,
+ ALLOW_DND = 1 << 2,
+ HIDE_MOUSE = 1 << 3,
+ FULLSCREEN = 1 << 4,
+ TRANSLUCENT = 1 << 5,
+ TRANSPARENT = TRANSLUCENT,
+ CENTER = 1 << 6,
+ RAW_MOUSE = 1 << 7,
+ SCALE_TO_MONITOR = 1 << 8,
+ HIDE = 1 << 9,
+ MAXIMIZE = 1 << 10,
+ CENTER_CURSOR = 1 << 11,
+ FLOATING = 1 << 12,
+ FOCUS_ON_SHOW = 1 << 13,
+ MINIMIZE = 1 << 14,
+ FOCUS = 1 << 15,
+ CAPTURE_MOUSE = 1 << 16,
+ OPENGL = 1 << 17,
+ EGL = 1 << 18,
+ NO_DEINIT_ON_CLOSE = 1 << 19,
+ WINDOWED_FULLSCREEN = NO_BORDER | MAXIMIZE,
+ CAPTURE_RAW_MOUSE = CAPTURE_MOUSE | RAW_MOUSE,
}
constdef Icon : char
{
- TASKBAR = 1 << 0,
- WINDOW = 1 << 1,
- BOTH = TASKBAR | WINDOW,
+ TASKBAR = 1 << 0,
+ WINDOW = 1 << 1,
+ BOTH = TASKBAR | WINDOW,
}
constdef MouseIcon : char
{
- NORMAL = 0,
- ARROW,
- IBEAM,
- TEXT = IBEAM,
- CROSSHAIR,
- POINTING_HAND,
- RESIZE_EW,
- RESIZE_NS,
- RESIZE_NWSE,
- RESIZE_NESW,
- RESIZE_NW,
- RESIZE_N,
- RESIZE_NE,
- RESIZE_E,
- RESIZE_SE,
- RESIZE_S,
- RESIZE_SW,
- RESIZE_W,
- RESIZE_ALL,
- NOT_ALLOWED,
- WAIT,
- PROGRESS,
- ICON_COUNT,
- ICON_FINAL = 16, // padding
+ NORMAL = 0,
+ ARROW,
+ IBEAM,
+ TEXT = IBEAM,
+ CROSSHAIR,
+ POINTING_HAND,
+ RESIZE_EW,
+ RESIZE_NS,
+ RESIZE_NWSE,
+ RESIZE_NESW,
+ RESIZE_NW,
+ RESIZE_N,
+ RESIZE_NE,
+ RESIZE_E,
+ RESIZE_SE,
+ RESIZE_S,
+ RESIZE_SW,
+ RESIZE_W,
+ RESIZE_ALL,
+ NOT_ALLOWED,
+ WAIT,
+ PROGRESS,
+ ICON_COUNT,
+ ICON_FINAL = 16, // padding
}
constdef FlashRequest : char
{
- CANCEL = 0,
- BRIEFLY,
- UNTIL_FOCUSED,
+ CANCEL = 0,
+ BRIEFLY,
+ UNTIL_FOCUSED,
}
constdef DebugType : char
{
- ERROR = 0,
- WARNING,
- INFO,
+ ERROR = 0,
+ WARNING,
+ INFO,
}
constdef ErrorCode : char
{
- NO_ERROR = 0,
- ERR_OUT_OF_MEMORY,
- ERR_OPENGL_CONTEXT,
- ERR_EGL_CONTEXT,
- ERR_WAYLAND,
- ERR_X11,
- ERR_DIRECTX_CONTEXT,
- ERR_IOKIT,
- ERR_CLIPBOARD,
- ERR_FAILED_FUNC_LOAD,
- ERR_BUFFER,
- ERR_METAL,
- ERR_PLATFORM,
- ERR_EVENT_QUEUE,
- INFO_WINDOW,
- INFO_BUFFER,
- INFO_GLOBAL,
- INFO_OPENGL,
- WARNING_WAYLAND,
- WARNING_OPENGL,
+ NO_ERROR = 0,
+ ERR_OUT_OF_MEMORY,
+ ERR_OPENGL_CONTEXT,
+ ERR_EGL_CONTEXT,
+ ERR_WAYLAND,
+ ERR_X11,
+ ERR_DIRECTX_CONTEXT,
+ ERR_IOKIT,
+ ERR_CLIPBOARD,
+ ERR_FAILED_FUNC_LOAD,
+ ERR_BUFFER,
+ ERR_METAL,
+ ERR_PLATFORM,
+ ERR_EVENT_QUEUE,
+ INFO_WINDOW,
+ INFO_BUFFER,
+ INFO_GLOBAL,
+ INFO_OPENGL,
+ WARNING_WAYLAND,
+ WARNING_OPENGL,
}
struct DebugInfo
{
- DebugType type;
- ErrorCode code;
- ZString msg;
+ DebugType type;
+ ErrorCode code;
+ ZString msg;
}
-alias DebugFunc = fn void(DebugInfo*);
-alias Proc @if($feature(OPENGL)) = fn void();
-alias GlContext @if($feature(OPENGL)) = void;
+alias DebugFunc = fn void(DebugInfo*);
+alias Proc @if($feature(OPENGL)) = fn void();
+alias GlContext @if($feature(OPENGL)) = void;
alias EglContext @if($feature(EGL)) = void;
constdef GlReleaseBehavior : int @if($feature(OPENGL))
{
- FLUSH = 0,
- NONE,
+ FLUSH = 0,
+ NONE,
}
constdef GlProfile : int @if($feature(OPENGL))
{
- CORE = 0,
- FORWARD_COMPATIBILITY,
- COMPATIBILITY,
- ES,
+ CORE = 0,
+ FORWARD_COMPATIBILITY,
+ COMPATIBILITY,
+ ES,
}
constdef GlRenderer : int @if($feature(OPENGL))
{
- ACCELERATED = 0,
- SOFTWARE,
+ ACCELERATED = 0,
+ SOFTWARE,
}
struct GlHints @if($feature(OPENGL))
{
- int stencil;
- int samples;
- int stereo;
- int auxBuffers;
- int doubleBuffer;
- int red;
- int green;
- int blue;
- int alpha;
- int depth;
- int accumRed;
- int accumGreen;
- int accumBlue;
- int accumAlpha;
- bool sRGB;
- bool robustness;
- bool debug;
- bool noError;
- GlReleaseBehavior releaseBehavior;
- GlProfile profile;
- int major;
- int minor;
- GlContext* share;
- EglContext* shareEGL;
- GlRenderer renderer;
+ int stencil;
+ int samples;
+ int stereo;
+ int auxBuffers;
+ int doubleBuffer;
+ int red;
+ int green;
+ int blue;
+ int alpha;
+ int depth;
+ int accumRed;
+ int accumGreen;
+ int accumBlue;
+ int accumAlpha;
+ bool sRGB;
+ bool robustness;
+ bool debug;
+ bool noError;
+ GlReleaseBehavior releaseBehavior;
+ GlProfile profile;
+ int major;
+ int minor;
+ GlContext* share;
+ EglContext* shareEGL;
+ GlRenderer renderer;
}
-extern fn void* alloc(usz) @cname("RGFW_alloc");
-extern fn void free(void*) @cname("RGFW_free");
-extern fn usz sizeofWindow() @cname("RGFW_sizeofWindow");
-extern fn usz sizeofWindowSrc() @cname("RGFW_sizeofWindowSrc");
-extern fn void useWayland(bool) @cname("RGFW_useWayland");
-extern fn bool usingWayland() @cname("RGFW_usingWayland");
-extern fn void* getLayer_OSX() @cname("RGFW_getLayer_OSX");
-extern fn void* getDisplay_X11() @cname("RGFW_getDisplay_X11");
-extern fn void* getDisplay_Wayland() @cname("RGFW_getDisplay_Wayland"); // TODO return isn't void*
-extern fn void setClassName(ZString) @cname("RGFW_setClassName");
-extern fn void setXInstName(ZString) @cname("RGFW_setXInstName");
-extern fn void moveToMacOSResourceDir() @cname("RGFW_modeToMacOSResourceDir");
-extern fn void copyImageData(char*, int, int, Format, char*, Format, ConvertImageDataFunc) @cname("RGFW_copyImageData");
-extern fn usz sizeofNativeImage() @cname("RGFW_sizeofNativeImage");
-extern fn usz sizeofSurface() @cname("RGFW_sizeofSurface");
-extern fn Format nativeFormat() @cname("RGFW_nativeFormat");
-extern fn Surface* createSurface(char*, int, int, Format) @cname("RGFW_createSurface");
-extern fn bool createSurfacePtr(char*, int, int, Format, Surface*) @cname("RGFW_createSurfacePtr");
-extern fn NativeImage* surface_getNativeImage(Surface*) @cname("RGFW_surface_getNativeImage");
-extern fn void surface_free(Surface*) @cname("RGFW_surface_free");
-extern fn void surface_freePtr(Surface*) @cname("RGFW_surface_freePtr");
-extern fn Mouse* createMouse(char*, int, int, Format) @cname("RGFW_createMouse");
-extern fn Mouse* createMouseStandard(MouseIcon) @cname("RGFW_createMouseStandard");
-extern fn void freeMouse(Mouse*) @cname("RGFW_freeMouse");
-extern fn MonitorMode* monitor_getModes(Monitor*, usz*) @cname("RGFW_monitor_getModes");
-extern fn void freeModes(MonitorMode*) @cname("RGFW_freeModes");
-extern fn usz monitor_getModesPtr(Monitor*, MonitorMode**) @cname("RGFW_monitor_getModesPtr");
-extern fn bool monitor_findClosestMode(Monitor*, MonitorMode*, MonitorMode*) @cname("RGFW_monitor_findClosestMode");
-extern fn GammaRamp* monitor_getGammaRamp(Monitor*) @cname("RGFW_monitor_getGammaRamp");
-extern fn void freeGammaRamp(GammaRamp*) @cname("RGFW_freeGammaRamp");
-extern fn usz monitor_getGammaRampPtr(Monitor*, GammaRamp*) @cname("RGFW_monitor_getGammaRampPtr");
-extern fn bool monitor_setGammaRamp(Monitor*, GammaRamp*) @cname("RGFW_monitor_setGammaRamp");
-extern fn bool monitor_setGamma(Monitor*, float) @cname("RGFW_monitor_setGamma");
-extern fn bool monitor_setGammaPtr(Monitor*, float, ushort*, usz) @cname("RGFW_monitor_setGammaPtr");
-extern fn bool monitor_getWorkarea(Monitor*, int*, int*, int*, int*) @cname("RGFW_monitor_getWorkarea");
-extern fn bool monitor_getPosition(Monitor*, int*, int*) @cname("RGFW_monitor_getPosition");
-extern fn ZString monitor_getName(Monitor*) @cname("RGFW_monitor_getName");
-extern fn bool monitor_getScale(Monitor*, float*, float*) @cname("RGFW_monitor_getScale");
-extern fn bool monitor_getPhysicalSize(Monitor*, float*, float*) @cname("RGFW_monitor_getPhysicalSize");
-extern fn void monitor_setUserPtr(Monitor*, void*) @cname("RGFW_monitor_setUserPtr");
-extern fn void* monitor_getUserPtr(Monitor*) @cname("RGFW_monitor_getUserPtr");
-extern fn bool monitor_getMode(Monitor*, MonitorMode*) @cname("RGFW_monitor_getMode");
-extern fn void pollMonitors() @cname("RGFW_pollMonitors");
-extern fn Monitor** getMonitors(usz*) @cname("RGFW_getMonitors");
-extern fn Monitor* getPrimaryMonitor() @cname("RGFW_getPrimaryMonitor");
-extern fn bool monitor_requestMode(Monitor*, MonitorMode*, ModeRequest) @cname("RGFW_monitor_requestMode");
-extern fn bool monitor_setMode(Monitor*, MonitorMode*) @cname("RGFW_monitor_setMode");
-extern fn bool monitorModeCompare(MonitorMode*, MonitorMode*, ModeRequest) @cname("RGFW_monitorModeCompare");
-extern fn bool monitor_scaleToWindow(Monitor*, Window*) @cname("RGFW_monitor_scaleToWindow");
-extern fn void setRawMouseMode(bool) @cname("RGFW_setRawMouseMode");
-extern fn void setBuildDND(bool) @cname("RGFW_setbuildDND");
-extern fn void waitForEvent(int) @cname("RGFW_waitForEvent");
-extern fn void setQueueEvents(bool) @cname("RGFW_setQueueEvents");
-extern fn GenericFunc* setEventCallback(EventType, GenericFunc) @cname("RGFW_setEventCallback");
-extern fn void setDualEventCallback(EventType, GenericFunc, GenericFunc*, GenericFunc*) @cname("RGFW_setDualEventCallback");
-extern fn void setAllEventCallbacks(GenericFunc, Callbacks*) @cname("RGFW_setAllEventCallbacks");
-extern fn void pollEvents() @cname("RGFW_pollEvents");
-extern fn void stopCheckEvents() @cname("RGFW_stopCheckEvents");
-extern fn bool checkEvent(Event*) @cname("RGFW_checkEvent");
-extern fn bool checkQueuedEvent(Event*) @cname("RGFW_checkQueuedEvent");
-extern fn bool isKeyPressed(Key) @cname("RGFW_isKeyPressed");
-extern fn bool isKeyReleased(Key) @cname("RGFW_isKeyReleased");
-extern fn bool isKeyDown(Key) @cname("RGFW_isKeyDown");
-extern fn bool isMousePressed(MouseButton) @cname("RGFW_isMousePressed");
-extern fn bool isMouseReleased(MouseButton) @cname("RGFW_isMouseReleased");
-extern fn bool isMouseDown(MouseButton) @cname("RGFW_isMouseDown");
-extern fn void getMouseScroll(float*, float*) @cname("RGFW_getMouseScroll");
-extern fn void getMouseVector(float*, float*) @cname("RGFW_getMouseVector");
-extern fn Window* createWindow(ZString, int, int, int, int, WindowFlags) @cname("RGFW_createWindow");
-extern fn Window* createWindowPtr(ZString, int, int, int, int, WindowFlags, Window*) @cname("RGFW_createWindowPtr");
-extern fn Surface* window_createSurface(Window*, char*, int, int, Format) @cname("RGFW_window_createSurface");
-extern fn Surface* window_createSurfacePtr(Window*, char*, int, int, Format, Surface*) @cname("RGFW_window_createSurfacePtr");
-extern fn void surface_setConvertFunc(Surface*, ConvertImageDataFunc) @cname("RGFW_surface_setConvertFunc");
-extern fn void window_blitSurface(Window*, Surface*) @cname("RGFW_window_blitSurface");
-extern fn bool window_getPosition(Window*, int*, int*) @cname("RGFW_window_getPosition");
-extern fn bool window_getSize(Window*, int*, int*) @cname("RGFW_window_getSize");
-extern fn bool window_getSizeInPixels(Window*, int*, int*) @cname("RGFW_window_getSizeInPixels");
-extern fn uint window_getFlags(Window*) @cname("RGFW_window_getFlags");
-extern fn Key window_getExitKey(Window*) @cname("RGFW_window_getExitKey");
-extern fn void window_setExitKey(Window*, Key) @cname("RGFW_window_setExitKey");
-extern fn void window_setEnabledEvents(Window*, EventFlag) @cname("RGFW_window_setEnabledEvents");
-extern fn EventFlag window_getEnabledEvents(Window*) @cname("RGFW_window_getEnabledEvents");
-extern fn void window_setDisabledEvents(Window*, EventFlag) @cname("RGFW_window_setDisabledEvents");
-extern fn void window_setEventState(Window*, EventFlag, bool) @cname("RGFW_window_setEventState");
-extern fn void* window_getUserPtr(Window*) @cname("RGFW_window_getUserPtr");
-extern fn void window_setUserPtr(Window*, void*) @cname("RGFW_window_setUserPtr");
-extern fn Window_src* window_getSrc(Window*) @cname("RGFW_window_getSrc");
-extern fn void window_setLayer_OSX(Window*, void*) @cname("RGFW_window_setLayer_OSX");
-extern fn void* window_getView_OSX(Window*) @cname("RGFW_window_getView_OSX");
-extern fn void* window_getWindow_OSX(Window*) @cname("RGFW_window_getWindow_OSX");
-extern fn void* window_getHWND(Window*) @cname("RGFW_window_getHWND");
-extern fn void* window_getHDC(Window*) @cname("RGFW_window_getHDC");
-extern fn ulong window_getWindow_X11(Window*) @cname("RGFW_window_getWindow_X11");
-extern fn void* window_getWindow_Wayland(Window*) @cname("RGFW_window_getWindow_Wayland"); // TODO return isn't *void
-extern fn void window_setFlags(Window*, WindowFlags) @cname("RGFW_window_setFlags");
-extern fn bool window_checkEvent(Window*, Event*) @cname("RGFW_window_checkEvent");
-extern fn bool window_checkQueuedEvent(Window*, Event*) @cname("RGFW_window_checkQueuedEvent");
-extern fn bool window_isKeyPressed(Window*, Key) @cname("RGFW_window_isKeyPressed");
-extern fn bool window_isKeyDown(Window*, Key) @cname("RGFW_window_isKeyDown");
-extern fn bool window_isKeyReleased(Window*, Key) @cname("RGFW_window_isKeyReleased");
-extern fn bool window_isMousePressed(Window*, MouseButton) @cname("RGFW_window_isMousePressed");
-extern fn bool window_isMouseDown(Window*, MouseButton) @cname("RGFW_window_isMouseDown");
-extern fn bool window_isMouseReleased(Window*, MouseButton) @cname("RGFW_window_isMouseReleased");
-extern fn bool window_didMouseLeave(Window*) @cname("RGFW_window_didMouseLeave");
-extern fn bool window_didMouseEnter(Window*) @cname("RGFW_window_didMouseEnter");
-extern fn bool window_isMouseInside(Window*) @cname("RGFW_window_isMouseInside");
-extern fn bool window_isDataDragging(Window*) @cname("RGFW_window_isDataDragging");
-extern fn bool window_getDataDrag(Window*, int*, int*) @cname("RGFW_window_getDataDrag");
-extern fn bool window_didDataDrop(Window*) @cname("RGFW_window_didDataDrop");
-extern fn DataDropNode* window_getDataDrop(Window*) @cname("RGFW_window_getDataDrop");
-extern fn void window_close(Window*) @cname("RGFW_window_close");
-extern fn void window_closePtr(Window*) @cname("RGFW_window_closePtr");
-extern fn bool window_fetchSize(Window*, int*, int*) @cname("RGFW_window_fetchSize");
-extern fn void window_move(Window*, int, int) @cname("RGFW_window_move");
-extern fn void window_moveToMonitor(Window*, Monitor*) @cname("RGFW_window_moveToMonitor");
-extern fn void window_resize(Window*, int, int) @cname("RGFW_window_resize");
-extern fn void window_setAspectRatio(Window*, int, int) @cname("RGFW_window_setAspectRation");
-extern fn void window_setMinSize(Window*, int, int) @cname("RGFW_window_setMinSize");
-extern fn void window_setMaxSize(Window*, int, int) @cname("RGFW_window_setMaxSize");
-extern fn void window_focus(Window*) @cname("RGFW_window_focus");
-extern fn bool window_isInFocus(Window*) @cname("RGFW_window_isInFocus");
-extern fn void window_raise(Window*) @cname("RGFW_window_raise");
-extern fn void window_maximize(Window*) @cname("RGFW_window_maximize");
-extern fn void window_setFullscreen(Window*, bool) @cname("RGFW_window_setFullscreen");
-extern fn void window_center(Window*) @cname("RGFW_window_center");
-extern fn void window_minimize(Window*) @cname("RGFW_window_minimize");
-extern fn void window_restore(Window*) @cname("RGFW_window_restore");
-extern fn void window_setFloating(Window*, bool) @cname("RGFW_window_setFloating");
-extern fn void window_setOpacity(Window*, char) @cname("RGFW_window_setOpacity");
-extern fn void window_setBorder(Window*, bool) @cname("RGFW_window_setBorder");
-extern fn bool window_borderless(Window*) @cname("RGFW_window_borderless");
-extern fn void window_setDND(Window*, bool) @cname("RGFW_window_setDND");
-extern fn bool window_allowsDND(Window*) @cname("RGFW_window_allowsDND");
-extern fn void window_setMousePassthrough(Window*, bool) @cname("RGFW_window_setMousePassthrough");
-extern fn void window_setName(Window*, ZString) @cname("RGFW_window_setName");
-extern fn bool window_setIcon(Window*, char*, int, int, Format) @cname("RGFW_window_seticon");
-extern fn bool window_setIconEx(Window*, char*, int, int, Format, Icon) @cname("RGFW_window_setIconEx");
-extern fn bool window_setMouse(Window*, Mouse*) @cname("RGFW_window_setMouse");
-extern fn bool window_setMouseStandard(Window*, MouseIcon) @cname("RGFW_window_setMouseStandard");
-extern fn bool window_setMouseDefault(Window*) @cname("RGFW_window_setMouseDefault");
-extern fn void window_setRawMouseMode(Window*, bool) @cname("RGFW_window_setRawMousemode");
-extern fn void window_captureMouse(Window*, bool) @cname("RGFW_window_captureMouse");
-extern fn void window_captureRawMouse(Window*, bool) @cname("RGFW_window_captureRawMouse");
-extern fn bool window_isRawMouseMode(Window*) @cname("RGFW_window_isRawMouseMode");
-extern fn bool window_isCaptured(Window*) @cname("RGFW_window_isCaptured");
-extern fn void window_hide(Window*) @cname("RGFW_window_hide");
-extern fn void window_show(Window*) @cname("RGFW_window_show");
-extern fn void window_flash(Window*, FlashRequest) @cname("RGFW_window_flash");
-extern fn void window_setShouldClose(Window*, bool) @cname("RGFW_window_setShouldClose");
-extern fn bool window_getGlobalMouse(int*, int*) @cname("RGFW_window_getGlobalMouse");
-extern fn bool window_getMouse(Window*, int*, int*) @cname("RGFW_window_getMouse");
-extern fn void window_showMouse(Window*, bool) @cname("RGFW_window_showMouse");
-extern fn bool window_isMouseHidden(Window*) @cname("RGFW_window_isMouseHidden");
-extern fn void window_moveMouse(Window*, int, int) @cname("RGFW_window_moveMouse");
-extern fn bool window_shouldClose(Window*) @cname("RGFW_window_shouldClose");
-extern fn bool window_isFullscreen(Window*) @cname("RGFW_window_isFullscreen");
-extern fn bool window_isHidden(Window*) @cname("RGFW_window_isHidden");
-extern fn bool window_isMinimized(Window*) @cname("RGFW_window_isMinimized");
-extern fn bool window_isMaximized(Window*) @cname("RGFW_window_isMaximized");
-extern fn bool window_isFloating(Window*) @cname("RGFW_window_isFloating");
-extern fn void window_scaleToMonitor(Window*) @cname("RGFW_window_scaleToMonitor");
-extern fn Monitor* window_getMonitor(Window*) @cname("RGFW_window_getMonitor");
-extern fn ZString readClipboard(usz*) @cname("RGFW_readClipboard");
-extern fn sz readClipboardPtr(CChar*, usz) @cname("RGFW_readClipboardPtr");
-extern fn void writeClipboard(ZString, uint) @cname("RGFW_writeClipboard");
-extern fn DebugFunc setDebugCallback(DebugFunc) @cname("RGFW_setDebugCallback");
-extern fn void debugCallback(DebugType, ErrorCode, ZString) @cname("RGFW_debugCallback");
+extern fn void* alloc(usz) @cname("RGFW_alloc");
+extern fn void free(void*) @cname("RGFW_free");
+extern fn usz sizeofWindow() @cname("RGFW_sizeofWindow");
+extern fn usz sizeofWindowSrc() @cname("RGFW_sizeofWindowSrc");
+extern fn void useWayland(bool) @cname("RGFW_useWayland");
+extern fn bool usingWayland() @cname("RGFW_usingWayland");
+extern fn void* getLayer_OSX() @cname("RGFW_getLayer_OSX");
+extern fn void* getDisplay_X11() @cname("RGFW_getDisplay_X11");
+extern fn void* getDisplay_Wayland() @cname("RGFW_getDisplay_Wayland"); // TODO return isn't void*
+extern fn void setClassName(ZString) @cname("RGFW_setClassName");
+extern fn void setXInstName(ZString) @cname("RGFW_setXInstName");
+extern fn void moveToMacOSResourceDir() @cname("RGFW_modeToMacOSResourceDir");
+extern fn void copyImageData(char*, int, int, Format, char*, Format, ConvertImageDataFunc) @cname("RGFW_copyImageData");
+extern fn usz sizeofNativeImage() @cname("RGFW_sizeofNativeImage");
+extern fn usz sizeofSurface() @cname("RGFW_sizeofSurface");
+extern fn Format nativeFormat() @cname("RGFW_nativeFormat");
+extern fn Surface* createSurface(char*, int, int, Format) @cname("RGFW_createSurface");
+extern fn bool createSurfacePtr(char*, int, int, Format, Surface*) @cname("RGFW_createSurfacePtr");
+extern fn NativeImage* surface_getNativeImage(Surface*) @cname("RGFW_surface_getNativeImage");
+extern fn void surface_free(Surface*) @cname("RGFW_surface_free");
+extern fn void surface_freePtr(Surface*) @cname("RGFW_surface_freePtr");
+extern fn Mouse* createMouse(char*, int, int, Format) @cname("RGFW_createMouse");
+extern fn Mouse* createMouseStandard(MouseIcon) @cname("RGFW_createMouseStandard");
+extern fn void freeMouse(Mouse*) @cname("RGFW_freeMouse");
+extern fn MonitorMode* monitor_getModes(Monitor*, usz*) @cname("RGFW_monitor_getModes");
+extern fn void freeModes(MonitorMode*) @cname("RGFW_freeModes");
+extern fn usz monitor_getModesPtr(Monitor*, MonitorMode**) @cname("RGFW_monitor_getModesPtr");
+extern fn bool monitor_findClosestMode(Monitor*, MonitorMode*, MonitorMode*) @cname("RGFW_monitor_findClosestMode");
+extern fn GammaRamp* monitor_getGammaRamp(Monitor*) @cname("RGFW_monitor_getGammaRamp");
+extern fn void freeGammaRamp(GammaRamp*) @cname("RGFW_freeGammaRamp");
+extern fn usz monitor_getGammaRampPtr(Monitor*, GammaRamp*) @cname("RGFW_monitor_getGammaRampPtr");
+extern fn bool monitor_setGammaRamp(Monitor*, GammaRamp*) @cname("RGFW_monitor_setGammaRamp");
+extern fn bool monitor_setGamma(Monitor*, float) @cname("RGFW_monitor_setGamma");
+extern fn bool monitor_setGammaPtr(Monitor*, float, ushort*, usz) @cname("RGFW_monitor_setGammaPtr");
+extern fn bool monitor_getWorkarea(Monitor*, int*, int*, int*, int*) @cname("RGFW_monitor_getWorkarea");
+extern fn bool monitor_getPosition(Monitor*, int*, int*) @cname("RGFW_monitor_getPosition");
+extern fn ZString monitor_getName(Monitor*) @cname("RGFW_monitor_getName");
+extern fn bool monitor_getScale(Monitor*, float*, float*) @cname("RGFW_monitor_getScale");
+extern fn bool monitor_getPhysicalSize(Monitor*, float*, float*) @cname("RGFW_monitor_getPhysicalSize");
+extern fn void monitor_setUserPtr(Monitor*, void*) @cname("RGFW_monitor_setUserPtr");
+extern fn void* monitor_getUserPtr(Monitor*) @cname("RGFW_monitor_getUserPtr");
+extern fn bool monitor_getMode(Monitor*, MonitorMode*) @cname("RGFW_monitor_getMode");
+extern fn void pollMonitors() @cname("RGFW_pollMonitors");
+extern fn Monitor** getMonitors(usz*) @cname("RGFW_getMonitors");
+extern fn Monitor* getPrimaryMonitor() @cname("RGFW_getPrimaryMonitor");
+extern fn bool monitor_requestMode(Monitor*, MonitorMode*, ModeRequest) @cname("RGFW_monitor_requestMode");
+extern fn bool monitor_setMode(Monitor*, MonitorMode*) @cname("RGFW_monitor_setMode");
+extern fn bool monitorModeCompare(MonitorMode*, MonitorMode*, ModeRequest) @cname("RGFW_monitorModeCompare");
+extern fn bool monitor_scaleToWindow(Monitor*, Window*) @cname("RGFW_monitor_scaleToWindow");
+extern fn void setRawMouseMode(bool) @cname("RGFW_setRawMouseMode");
+extern fn void setBuildDND(bool) @cname("RGFW_setbuildDND");
+extern fn void waitForEvent(int) @cname("RGFW_waitForEvent");
+extern fn void setQueueEvents(bool) @cname("RGFW_setQueueEvents");
+extern fn GenericFunc* setEventCallback(EventType, GenericFunc) @cname("RGFW_setEventCallback");
+extern fn void setDualEventCallback(
+ EventType,
+ GenericFunc,
+ GenericFunc*,
+ GenericFunc*
+) @cname("RGFW_setDualEventCallback");
+extern fn void setAllEventCallbacks(GenericFunc, Callbacks*) @cname("RGFW_setAllEventCallbacks");
+extern fn void pollEvents() @cname("RGFW_pollEvents");
+extern fn void stopCheckEvents() @cname("RGFW_stopCheckEvents");
+extern fn bool checkEvent(Event*) @cname("RGFW_checkEvent");
+extern fn bool checkQueuedEvent(Event*) @cname("RGFW_checkQueuedEvent");
+extern fn bool isKeyPressed(Key) @cname("RGFW_isKeyPressed");
+extern fn bool isKeyReleased(Key) @cname("RGFW_isKeyReleased");
+extern fn bool isKeyDown(Key) @cname("RGFW_isKeyDown");
+extern fn bool isMousePressed(MouseButton) @cname("RGFW_isMousePressed");
+extern fn bool isMouseReleased(MouseButton) @cname("RGFW_isMouseReleased");
+extern fn bool isMouseDown(MouseButton) @cname("RGFW_isMouseDown");
+extern fn void getMouseScroll(float*, float*) @cname("RGFW_getMouseScroll");
+extern fn void getMouseVector(float*, float*) @cname("RGFW_getMouseVector");
+extern fn Window* createWindow(ZString, int, int, int, int, WindowFlags) @cname("RGFW_createWindow");
+extern fn Window* createWindowPtr(ZString, int, int, int, int, WindowFlags, Window*) @cname("RGFW_createWindowPtr");
+extern fn Surface* window_createSurface(Window*, char*, int, int, Format) @cname("RGFW_window_createSurface");
+extern fn Surface* window_createSurfacePtr(
+ Window*,
+ char*,
+ int,
+ int,
+ Format,
+ Surface*
+) @cname("RGFW_window_createSurfacePtr");
+extern fn void surface_setConvertFunc(Surface*, ConvertImageDataFunc) @cname("RGFW_surface_setConvertFunc");
+extern fn void window_blitSurface(Window*, Surface*) @cname("RGFW_window_blitSurface");
+extern fn bool window_getPosition(Window*, int*, int*) @cname("RGFW_window_getPosition");
+extern fn bool window_getSize(Window*, int*, int*) @cname("RGFW_window_getSize");
+extern fn bool window_getSizeInPixels(Window*, int*, int*) @cname("RGFW_window_getSizeInPixels");
+extern fn uint window_getFlags(Window*) @cname("RGFW_window_getFlags");
+extern fn Key window_getExitKey(Window*) @cname("RGFW_window_getExitKey");
+extern fn void window_setExitKey(Window*, Key) @cname("RGFW_window_setExitKey");
+extern fn void window_setEnabledEvents(Window*, EventFlag) @cname("RGFW_window_setEnabledEvents");
+extern fn EventFlag window_getEnabledEvents(Window*) @cname("RGFW_window_getEnabledEvents");
+extern fn void window_setDisabledEvents(Window*, EventFlag) @cname("RGFW_window_setDisabledEvents");
+extern fn void window_setEventState(Window*, EventFlag, bool) @cname("RGFW_window_setEventState");
+extern fn void* window_getUserPtr(Window*) @cname("RGFW_window_getUserPtr");
+extern fn void window_setUserPtr(Window*, void*) @cname("RGFW_window_setUserPtr");
+extern fn Window_src* window_getSrc(Window*) @cname("RGFW_window_getSrc");
+extern fn void window_setLayer_OSX(Window*, void*) @cname("RGFW_window_setLayer_OSX");
+extern fn void* window_getView_OSX(Window*) @cname("RGFW_window_getView_OSX");
+extern fn void* window_getWindow_OSX(Window*) @cname("RGFW_window_getWindow_OSX");
+extern fn void* window_getHWND(Window*) @cname("RGFW_window_getHWND");
+extern fn void* window_getHDC(Window*) @cname("RGFW_window_getHDC");
+extern fn ulong window_getWindow_X11(Window*) @cname("RGFW_window_getWindow_X11");
+extern fn void* window_getWindow_Wayland(Window*) @cname("RGFW_window_getWindow_Wayland"); // TODO return isn't *void
+extern fn void window_setFlags(Window*, WindowFlags) @cname("RGFW_window_setFlags");
+extern fn bool window_checkEvent(Window*, Event*) @cname("RGFW_window_checkEvent");
+extern fn bool window_checkQueuedEvent(Window*, Event*) @cname("RGFW_window_checkQueuedEvent");
+extern fn bool window_isKeyPressed(Window*, Key) @cname("RGFW_window_isKeyPressed");
+extern fn bool window_isKeyDown(Window*, Key) @cname("RGFW_window_isKeyDown");
+extern fn bool window_isKeyReleased(Window*, Key) @cname("RGFW_window_isKeyReleased");
+extern fn bool window_isMousePressed(Window*, MouseButton) @cname("RGFW_window_isMousePressed");
+extern fn bool window_isMouseDown(Window*, MouseButton) @cname("RGFW_window_isMouseDown");
+extern fn bool window_isMouseReleased(Window*, MouseButton) @cname("RGFW_window_isMouseReleased");
+extern fn bool window_didMouseLeave(Window*) @cname("RGFW_window_didMouseLeave");
+extern fn bool window_didMouseEnter(Window*) @cname("RGFW_window_didMouseEnter");
+extern fn bool window_isMouseInside(Window*) @cname("RGFW_window_isMouseInside");
+extern fn bool window_isDataDragging(Window*) @cname("RGFW_window_isDataDragging");
+extern fn bool window_getDataDrag(Window*, int*, int*) @cname("RGFW_window_getDataDrag");
+extern fn bool window_didDataDrop(Window*) @cname("RGFW_window_didDataDrop");
+extern fn DataDropNode* window_getDataDrop(Window*) @cname("RGFW_window_getDataDrop");
+extern fn void window_close(Window*) @cname("RGFW_window_close");
+extern fn void window_closePtr(Window*) @cname("RGFW_window_closePtr");
+extern fn bool window_fetchSize(Window*, int*, int*) @cname("RGFW_window_fetchSize");
+extern fn void window_move(Window*, int, int) @cname("RGFW_window_move");
+extern fn void window_moveToMonitor(Window*, Monitor*) @cname("RGFW_window_moveToMonitor");
+extern fn void window_resize(Window*, int, int) @cname("RGFW_window_resize");
+extern fn void window_setAspectRatio(Window*, int, int) @cname("RGFW_window_setAspectRation");
+extern fn void window_setMinSize(Window*, int, int) @cname("RGFW_window_setMinSize");
+extern fn void window_setMaxSize(Window*, int, int) @cname("RGFW_window_setMaxSize");
+extern fn void window_focus(Window*) @cname("RGFW_window_focus");
+extern fn bool window_isInFocus(Window*) @cname("RGFW_window_isInFocus");
+extern fn void window_raise(Window*) @cname("RGFW_window_raise");
+extern fn void window_maximize(Window*) @cname("RGFW_window_maximize");
+extern fn void window_setFullscreen(Window*, bool) @cname("RGFW_window_setFullscreen");
+extern fn void window_center(Window*) @cname("RGFW_window_center");
+extern fn void window_minimize(Window*) @cname("RGFW_window_minimize");
+extern fn void window_restore(Window*) @cname("RGFW_window_restore");
+extern fn void window_setFloating(Window*, bool) @cname("RGFW_window_setFloating");
+extern fn void window_setOpacity(Window*, char) @cname("RGFW_window_setOpacity");
+extern fn void window_setBorder(Window*, bool) @cname("RGFW_window_setBorder");
+extern fn bool window_borderless(Window*) @cname("RGFW_window_borderless");
+extern fn void window_setDND(Window*, bool) @cname("RGFW_window_setDND");
+extern fn bool window_allowsDND(Window*) @cname("RGFW_window_allowsDND");
+extern fn void window_setMousePassthrough(Window*, bool) @cname("RGFW_window_setMousePassthrough");
+extern fn void window_setName(Window*, ZString) @cname("RGFW_window_setName");
+extern fn bool window_setIcon(Window*, char*, int, int, Format) @cname("RGFW_window_seticon");
+extern fn bool window_setIconEx(Window*, char*, int, int, Format, Icon) @cname("RGFW_window_setIconEx");
+extern fn bool window_setMouse(Window*, Mouse*) @cname("RGFW_window_setMouse");
+extern fn bool window_setMouseStandard(Window*, MouseIcon) @cname("RGFW_window_setMouseStandard");
+extern fn bool window_setMouseDefault(Window*) @cname("RGFW_window_setMouseDefault");
+extern fn void window_setRawMouseMode(Window*, bool) @cname("RGFW_window_setRawMousemode");
+extern fn void window_captureMouse(Window*, bool) @cname("RGFW_window_captureMouse");
+extern fn void window_captureRawMouse(Window*, bool) @cname("RGFW_window_captureRawMouse");
+extern fn bool window_isRawMouseMode(Window*) @cname("RGFW_window_isRawMouseMode");
+extern fn bool window_isCaptured(Window*) @cname("RGFW_window_isCaptured");
+extern fn void window_hide(Window*) @cname("RGFW_window_hide");
+extern fn void window_show(Window*) @cname("RGFW_window_show");
+extern fn void window_flash(Window*, FlashRequest) @cname("RGFW_window_flash");
+extern fn void window_setShouldClose(Window*, bool) @cname("RGFW_window_setShouldClose");
+extern fn bool window_getGlobalMouse(int*, int*) @cname("RGFW_window_getGlobalMouse");
+extern fn bool window_getMouse(Window*, int*, int*) @cname("RGFW_window_getMouse");
+extern fn void window_showMouse(Window*, bool) @cname("RGFW_window_showMouse");
+extern fn bool window_isMouseHidden(Window*) @cname("RGFW_window_isMouseHidden");
+extern fn void window_moveMouse(Window*, int, int) @cname("RGFW_window_moveMouse");
+extern fn bool window_shouldClose(Window*) @cname("RGFW_window_shouldClose");
+extern fn bool window_isFullscreen(Window*) @cname("RGFW_window_isFullscreen");
+extern fn bool window_isHidden(Window*) @cname("RGFW_window_isHidden");
+extern fn bool window_isMinimized(Window*) @cname("RGFW_window_isMinimized");
+extern fn bool window_isMaximized(Window*) @cname("RGFW_window_isMaximized");
+extern fn bool window_isFloating(Window*) @cname("RGFW_window_isFloating");
+extern fn void window_scaleToMonitor(Window*) @cname("RGFW_window_scaleToMonitor");
+extern fn Monitor* window_getMonitor(Window*) @cname("RGFW_window_getMonitor");
+extern fn ZString readClipboard(usz*) @cname("RGFW_readClipboard");
+extern fn sz readClipboardPtr(CChar*, usz) @cname("RGFW_readClipboardPtr");
+extern fn void writeClipboard(ZString, uint) @cname("RGFW_writeClipboard");
+extern fn DebugFunc setDebugCallback(DebugFunc) @cname("RGFW_setDebugCallback");
+extern fn void debugCallback(DebugType, ErrorCode, ZString) @cname("RGFW_debugCallback");
module rgfw::opengl @if($feature(OPENGL));
-extern fn void setGlobalHints(GlHints*) @cname("RGFW_setGlobalHints_OpenGL");
-extern fn void resetGlobalHints() @cname("RGFW_resetGlobalHints_OpenGL");
-extern fn GlHints* getGlobalHints() @cname("RGFW_getGlobalHints_OpenGL");
-extern fn GlContext* window_createContext(Window*, GlHints*) @cname("RGFW_window_createContext_OpenGL");
-extern fn bool window_createContextPtr(Window*, GlContext*, GlHints*) @cname("RGFW_window_createContextPtr_OpenGL");
-extern fn GlContext* window_getContext(Window*) @cname("RGFW_window_getContext_OpenGL");
-extern fn void window_deleteContext(Window*, GlContext*) @cname("RGFW_window_deleteContext_OpenGL");
-extern fn void window_deleteContextPtr(Window*, GlContext*) @cname("RGFW_window_deleteContextPtr_OpenGL");
-extern fn void* glContext_getSourceContext(GlContext*) @cname("RGFW_glContext_getSourceContext");
-extern fn void window_makeCurrentWindow(Window*) @cname("RGFW_window_makeCurrentWindow_OpenGL");
-extern fn void window_makeCurrentContext(Window*) @cname("RGFW_window_makeCurrentContext_OpenGL");
-extern fn void window_swapBuffers(Window*) @cname("RGFW_window_swapBuffers_OpenGL");
-extern fn void* getCurrentContext() @cname("RGFW_getCurrentContext_OpenGL");
-extern fn Window* getCurrentWindow() @cname("RGFW_getCurrentWindow_OpenGL");
-extern fn void window_swapInterval(Window*, int) @cname("RGFW_window_swapInterval_OpenGL");
-extern fn Proc getProcAddress(ZString) @cname("RGFW_getProcAddress_OpenGL");
-extern fn bool extensionSupported(ZString, usz) @cname("RGFW_extensionSupported_OpenGL");
-extern fn bool extensionSupportedPlatform(ZString, usz) @cname("RGFW_extensionSupportedPlatform_OpenGL");
+extern fn void setGlobalHints(GlHints*) @cname("RGFW_setGlobalHints_OpenGL");
+extern fn void resetGlobalHints() @cname("RGFW_resetGlobalHints_OpenGL");
+extern fn GlHints* getGlobalHints() @cname("RGFW_getGlobalHints_OpenGL");
+extern fn GlContext* window_createContext(Window*, GlHints*) @cname("RGFW_window_createContext_OpenGL");
+extern fn bool window_createContextPtr(Window*, GlContext*, GlHints*) @cname("RGFW_window_createContextPtr_OpenGL");
+extern fn GlContext* window_getContext(Window*) @cname("RGFW_window_getContext_OpenGL");
+extern fn void window_deleteContext(Window*, GlContext*) @cname("RGFW_window_deleteContext_OpenGL");
+extern fn void window_deleteContextPtr(Window*, GlContext*) @cname("RGFW_window_deleteContextPtr_OpenGL");
+extern fn void* glContext_getSourceContext(GlContext*) @cname("RGFW_glContext_getSourceContext");
+extern fn void window_makeCurrentWindow(Window*) @cname("RGFW_window_makeCurrentWindow_OpenGL");
+extern fn void window_makeCurrentContext(Window*) @cname("RGFW_window_makeCurrentContext_OpenGL");
+extern fn void window_swapBuffers(Window*) @cname("RGFW_window_swapBuffers_OpenGL");
+extern fn void* getCurrentContext() @cname("RGFW_getCurrentContext_OpenGL");
+extern fn Window* getCurrentWindow() @cname("RGFW_getCurrentWindow_OpenGL");
+extern fn void window_swapInterval(Window*, int) @cname("RGFW_window_swapInterval_OpenGL");
+extern fn Proc getProcAddress(ZString) @cname("RGFW_getProcAddress_OpenGL");
+extern fn bool extensionSupported(ZString, usz) @cname("RGFW_extensionSupported_OpenGL");
+extern fn bool extensionSupportedPlatform(ZString, usz) @cname("RGFW_extensionSupportedPlatform_OpenGL");
// RGFW_EGL
module rgfw::egl @if($feature(EGL));
-extern fn EglContext* window_createContext(Window*, GlHints*) @cname("RGFW_window_createContext_EGL");
-extern fn bool window_createContextPtr(Window*, EglContext*, GlHints*) @cname("RGFW_window_createContextPtr_EGL");
-extern fn void window_deleteContext(Window*, EglContext*) @cname("RGFW_window_deleteContext_EGL");
-extern fn void window_deleteContextPtr(Window*, EglContext*) @cname("RGFW_window_deleteContextPtr_EGL");
-extern fn EglContext* window_getContext(Window*) @cname("RGFW_window_getContext_EGL");
-extern fn void* getDisplay() @cname("RGFW_getDisplay_EGL");
-extern fn void* eglContext_getSourceContext(EglContext*) @cname("RGFW_eglContext_getSourceContext");
-extern fn void* eglContext_getSurface(EglContext*) @cname("RGFW_eglContext_getSurface");
-extern fn void* eglContext_wlEglWindow(EglContext*) @cname("RGFW_eglContext_wlEGLWindow");
-extern fn void window_swapBuffers(Window*) @cname("RGFW_window_swapBuffers_EGL");
-extern fn void window_makeCurrentWindow(Window*) @cname("RGFW_window_makeCurrentWindow_EGL");
-extern fn void window_makeCurrentContext(Window*) @cname("RGFW_window_makeCurrentContext_EGL");
-extern fn void* getCurrentContext() @cname("RGFW_getCurrentContext_EGL");
-extern fn Window* getCurrentWindow() @cname("RGFW_getCurrentWindow_EGL");
-extern fn void window_swapInterval(Window*, int) @cname("RGFW_window_swapInterval_EGL");
-extern fn Proc* getProcAddress(ZString) @cname("RGFW_getProcAddress_EGL");
-extern fn bool extensionSupported(ZString, usz) @cname("RGFW_extensionSupported_EGL");
-extern fn bool extensionSupportedPlatform(ZString, usz) @cname("RGFW_extensionSupportedPlatform_EGL");
+extern fn EglContext* window_createContext(Window*, GlHints*) @cname("RGFW_window_createContext_EGL");
+extern fn bool window_createContextPtr(Window*, EglContext*, GlHints*) @cname("RGFW_window_createContextPtr_EGL");
+extern fn void window_deleteContext(Window*, EglContext*) @cname("RGFW_window_deleteContext_EGL");
+extern fn void window_deleteContextPtr(Window*, EglContext*) @cname("RGFW_window_deleteContextPtr_EGL");
+extern fn EglContext* window_getContext(Window*) @cname("RGFW_window_getContext_EGL");
+extern fn void* getDisplay() @cname("RGFW_getDisplay_EGL");
+extern fn void* eglContext_getSourceContext(EglContext*) @cname("RGFW_eglContext_getSourceContext");
+extern fn void* eglContext_getSurface(EglContext*) @cname("RGFW_eglContext_getSurface");
+extern fn void* eglContext_wlEglWindow(EglContext*) @cname("RGFW_eglContext_wlEGLWindow");
+extern fn void window_swapBuffers(Window*) @cname("RGFW_window_swapBuffers_EGL");
+extern fn void window_makeCurrentWindow(Window*) @cname("RGFW_window_makeCurrentWindow_EGL");
+extern fn void window_makeCurrentContext(Window*) @cname("RGFW_window_makeCurrentContext_EGL");
+extern fn void* getCurrentContext() @cname("RGFW_getCurrentContext_EGL");
+extern fn Window* getCurrentWindow() @cname("RGFW_getCurrentWindow_EGL");
+extern fn void window_swapInterval(Window*, int) @cname("RGFW_window_swapInterval_EGL");
+extern fn Proc* getProcAddress(ZString) @cname("RGFW_getProcAddress_EGL");
+extern fn bool extensionSupported(ZString, usz) @cname("RGFW_extensionSupported_EGL");
+extern fn bool extensionSupportedPlatform(ZString, usz) @cname("RGFW_extensionSupportedPlatform_EGL");
// RGFW_VULKAN 2599..2626
// RGFW_DIRECTX 2630..2649
-// RGFW_WEBGPU 2652..2661
+// RGFW_WEBGPU 2652..2661 \ No newline at end of file