diff options
| author | andromeda <andromeda@bsd.my.domain> | 2026-10-19 01:35:19 -0400 |
|---|---|---|
| committer | andromeda <andromeda@bsd.my.domain> | 2026-10-19 01:35:19 -0400 |
| commit | c9c6170edd5a453aadda779961cc60fb62344561 (patch) | |
| tree | 8f718cfe0d7a6abffc41b3615757f501bc2d72d8 | |
| parent | 5fc4b38c3f93a52a39b47c7c5e6492ec582cf93d (diff) | |
add uefi.c3l, c3fmt
| -rw-r--r-- | .gitmodules | 3 | ||||
| -rw-r--r-- | rfont.c3l/rfont.c3 | 198 | ||||
| -rw-r--r-- | rgfw.c3l/rgfw.c3 | 1301 | ||||
| -rw-r--r-- | rsgl.c3l/rsgl.c3 | 690 | ||||
| m--------- | uefi.c3l | 0 |
5 files changed, 1161 insertions, 1031 deletions
diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..9bfd883 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "uefi.c3l"] + path = uefi.c3l + url = https://github.com/NotsoanoNimus/uefi.c3l/ diff --git a/rfont.c3l/rfont.c3 b/rfont.c3l/rfont.c3 index 3c7af6a..0743258 100644 --- a/rfont.c3l/rfont.c3 +++ b/rfont.c3l/rfont.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,8 +6,7 @@ * 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 rfont; @@ -20,110 +18,138 @@ alias Surface = void*; struct Render_data { - float* verts; - float* tcoords; - ushort* elements; - Texture atlas; - usz nverts; - usz nelements; + float* verts; + float* tcoords; + ushort* elements; + Texture atlas; + usz nverts; + usz nelements; } -alias Renderer_proc_size = fn usz(); -alias Renderer_proc_initPtr = fn void(void*); -alias Renderer_proc_create_atlas = fn Texture(void*, uint, uint); -alias Renderer_proc_free_atlas = fn void(void*, Texture); +alias Renderer_proc_size = fn usz(); +alias Renderer_proc_initPtr = fn void(void*); +alias Renderer_proc_create_atlas = fn Texture(void*, uint, uint); +alias Renderer_proc_free_atlas = fn void(void*, Texture); alias Renderer_proc_bitmap_to_atlas = fn void(void*, Texture, uint, uint, uint, char*, float, float, float*, float*); -alias Renderer_proc_render = fn void(void*, Render_data*); +alias Renderer_proc_render = fn void(void*, Render_data*); alias Renderer_proc_set_framebuffer = fn void(void*, uint, uint); -alias Renderer_proc_set_color = fn void(void*, float, float, float, float); -alias Renderer_proc_set_surface = fn void(void*, Surface); -alias Renderer_proc_freePtr = fn void(void*); +alias Renderer_proc_set_color = fn void(void*, float, float, float, float); +alias Renderer_proc_set_surface = fn void(void*, Surface); +alias Renderer_proc_freePtr = fn void(void*); struct Renderer_proc { - Renderer_proc_size size; - Renderer_proc_initPtr initPtr; - Renderer_proc_create_atlas create_atlas; - Renderer_proc_free_atlas free_atlas; - Renderer_proc_bitmap_to_atlas bitmap_to_atlas; - Renderer_proc_render render; - Renderer_proc_set_framebuffer set_framebuffer; - Renderer_proc_set_color set_color; - Renderer_proc_set_surface set_surface; - Renderer_proc_freePtr freePtr; + Renderer_proc_size size; + Renderer_proc_initPtr initPtr; + Renderer_proc_create_atlas create_atlas; + Renderer_proc_free_atlas free_atlas; + Renderer_proc_bitmap_to_atlas bitmap_to_atlas; + Renderer_proc_render render; + Renderer_proc_set_framebuffer set_framebuffer; + Renderer_proc_set_color set_color; + Renderer_proc_set_surface set_surface; + Renderer_proc_freePtr freePtr; } struct Renderer { - void* ctx; - Renderer_proc proc; + void* ctx; + Renderer_proc proc; } struct Font { - Src* src; - float fheight; - float descent; - float numOfLongHorMetrics; - float space_adv; - uint maxHeight; - Glyph[MAX_GLYPHS] glyphs; - usz glyph_len; - Texture atlas; - usz atlasWidth; - usz atlasHeight; - float atlasX; - float atlasY; - float[INIT_VERTS*3] verts; - float[INIT_VERTS*2] tcoords; - ushort[INIT_VERTS*6] elements; + Src* src; + float fheight; + float descent; + float numOfLongHorMetrics; + float space_adv; + uint maxHeight; + Glyph[MAX_GLYPHS] glyphs; + usz glyph_len; + Texture atlas; + usz atlasWidth; + usz atlasHeight; + float atlasX; + float atlasY; + float[INIT_VERTS * 3] verts; + float[INIT_VERTS * 2] tcoords; + ushort[INIT_VERTS * 6] elements; } struct Glyph { - uint codepoint; - usz size; - int x; - int x2; - int y; - int y2; - Font* font; - int src; - float w; - float h; - float x1; - float y1; - float advance; + uint codepoint; + usz size; + int x; + int x2; + int y; + int y2; + Font* font; + int src; + float w; + float h; + float x1; + float y1; + float advance; } alias Src = void; alias Glyph_fallback_callback = fn Glyph(Renderer*, Font*, uint, usz); -extern fn CChar* codepoint_to_utf8(uint) @cname("RFont_codepoint_to_utf8"); -extern fn Font* font_init(Renderer*, ZString, uint, usz, usz) @cname("RFont_font_init"); -extern fn Font* font_init_ptr(Renderer*, ZString, uint, usz, usz, Font*) @cname("RFont_font_init_ptr"); -extern fn Font* font_init_data(Renderer*, char*, uint, usz, usz) @cname("RFont_font_init_data"); -extern fn Font* font_init_data_ptr(Renderer*, char*, uint, usz, usz, Font*) @cname("RFont_font_init_data_ptr"); -extern fn void font_free(Renderer*, Font*) @cname("RFont_font_free"); -extern fn void font_free_ptr(Renderer*, Font*) @cname("RFont_font_free_ptr"); -extern fn Glyph_fallback_callback set_glyph_fallback_callback(Glyph_fallback_callback) @cname("RFont_set_glyph_fallback_callback"); -extern fn Glyph font_add_char(Renderer*, Font*, CChar, usz) @cname("RFont_font_add_char"); -extern fn Glyph font_add_codepoint(Renderer*, Font*, uint, usz) @cname("RFont_font_add_codepoint"); -extern fn Glyph font_add_codepoint_ex(Renderer*, Font*, uint, usz, char) @cname("RFont_font_add_codepoint_ex"); -extern fn void font_add_string(Renderer*, Font*, ZString, usz*, usz) @cname("RFont_font_add_string"); -extern fn void font_add_string_len(Renderer*, Font*, ZString, usz, usz*, usz) @cname("RFont_font_add_string_len"); -extern fn void text_area(Renderer*, Font*, ZString, uint, uint*, uint*) @cname("RFont_text_area"); -extern fn void text_area_spacing(Renderer*, Font*, ZString, float, uint, uint*, uint*) @cname("RFont_text_area_spacing"); -extern fn void text_area_len(Renderer*, Font*, ZString, usz, uint, usz, float, uint*, uint*) @cname("RFont_text_area_len"); -extern fn void draw_text(Renderer*, Font*, ZString, float, float, uint) @cname("RFont_draw_text"); -extern fn void draw_text_spacing(Renderer*, Font*, ZString, float, float, uint, float) @cname("RFont_draw_text_spacing"); -extern fn void draw_text_len(Renderer*, Font*, ZString, usz, float, float, uint, float) @cname("RFont_draw_text_len"); -extern fn usz renderer_size(Renderer*) @cname("RFont_renderer_size"); -extern fn Renderer* renderer_init(Renderer_proc) @cname("RFont_renderer_init"); -extern fn void renderer_initPtr(Renderer_proc, void*, Renderer*) @cname("RFont_renderer_initPtr"); -extern fn void renderer_set_framebuffer(Renderer*, uint, uint) @cname("RFont_renderer_set_framebuffer"); -extern fn void renderer_set_surface(Renderer*, Surface) @cname("RFont_renderer_set_surface"); -extern fn void renderer_set_color(Renderer*, float, float, float, float) @cname("RFont_renderer_set_color"); -extern fn void renderer_free(Renderer*) @cname("RFont_renderer_free"); -extern fn void renderer_freePtr(Renderer*) @cname("RFont_renderer_freePtr"); +extern fn CChar* codepoint_to_utf8(uint) @cname("RFont_codepoint_to_utf8"); +extern fn Font* font_init(Renderer*, ZString, uint, usz, usz) @cname("RFont_font_init"); +extern fn Font* font_init_ptr(Renderer*, ZString, uint, usz, usz, Font*) @cname("RFont_font_init_ptr"); +extern fn Font* font_init_data(Renderer*, char*, uint, usz, usz) @cname("RFont_font_init_data"); +extern fn Font* font_init_data_ptr(Renderer*, char*, uint, usz, usz, Font*) @cname("RFont_font_init_data_ptr"); +extern fn void font_free(Renderer*, Font*) @cname("RFont_font_free"); +extern fn void font_free_ptr(Renderer*, Font*) @cname("RFont_font_free_ptr"); +extern fn Glyph_fallback_callback set_glyph_fallback_callback( + Glyph_fallback_callback +) @cname("RFont_set_glyph_fallback_callback"); +extern fn Glyph font_add_char(Renderer*, Font*, CChar, usz) @cname("RFont_font_add_char"); +extern fn Glyph font_add_codepoint(Renderer*, Font*, uint, usz) @cname("RFont_font_add_codepoint"); +extern fn Glyph font_add_codepoint_ex(Renderer*, Font*, uint, usz, char) @cname("RFont_font_add_codepoint_ex"); +extern fn void font_add_string(Renderer*, Font*, ZString, usz*, usz) @cname("RFont_font_add_string"); +extern fn void font_add_string_len(Renderer*, Font*, ZString, usz, usz*, usz) @cname("RFont_font_add_string_len"); +extern fn void text_area(Renderer*, Font*, ZString, uint, uint*, uint*) @cname("RFont_text_area"); +extern fn void text_area_spacing( + Renderer*, + Font*, + ZString, + float, + uint, + uint*, + uint* +) @cname("RFont_text_area_spacing"); +extern fn void text_area_len( + Renderer*, + Font*, + ZString, + usz, + uint, + usz, + float, + uint*, + uint* +) @cname("RFont_text_area_len"); +extern fn void draw_text(Renderer*, Font*, ZString, float, float, uint) @cname("RFont_draw_text"); +extern fn void draw_text_spacing( + Renderer*, + Font*, + ZString, + float, + float, + uint, + float +) @cname("RFont_draw_text_spacing"); +extern fn void draw_text_len(Renderer*, Font*, ZString, usz, float, float, uint, float) @cname("RFont_draw_text_len"); +extern fn usz renderer_size(Renderer*) @cname("RFont_renderer_size"); +extern fn Renderer* renderer_init(Renderer_proc) @cname("RFont_renderer_init"); +extern fn void renderer_initPtr(Renderer_proc, void*, Renderer*) @cname("RFont_renderer_initPtr"); +extern fn void renderer_set_framebuffer(Renderer*, uint, uint) @cname("RFont_renderer_set_framebuffer"); +extern fn void renderer_set_surface(Renderer*, Surface) @cname("RFont_renderer_set_surface"); +extern fn void renderer_set_color(Renderer*, float, float, float, float) @cname("RFont_renderer_set_color"); +extern fn void renderer_free(Renderer*) @cname("RFont_renderer_free"); +extern fn void renderer_freePtr(Renderer*) @cname("RFont_renderer_freePtr");
\ No newline at end of file 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 diff --git a/rsgl.c3l/rsgl.c3 b/rsgl.c3l/rsgl.c3 index db292e0..dc770b2 100644 --- a/rsgl.c3l/rsgl.c3 +++ b/rsgl.c3l/rsgl.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,439 +6,522 @@ * 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 rsgl; -macro @rect(#x,#y,#w,#h) {return (Rect){#x,#y,#w,#h};} -macro @cube(#x,#y,#z,#w,#l,#h) {return (Cube){#x,#y,#z,#w,#l,#h};} -macro @vec2D(#x,#y) {return (Vec2D){#x,#y};} -macro @vec3D(#x,#y,#z) {return (Vec3D){#x,#y,#z};} -macro @triangle(#p1,#p2,#p3) {return (Vec3D[3]){#p1,#p2,#p3};} -macro @createTriangle(#p1x,#p1y,#p1z,#p2x,#p2y,#p2z,#p3x,#p3y,#p3z) {return @triangle(@vec3D(#p1x,#p1y,#p1z),@vec3D(#p2x,#p2y,#p2z),@vec3D(#p3x,#p3y,#p3z));} -macro @rgba(#r,#g,#b,#a) {return (Color){#a,#b,#g,#r};} -macro @rgb(#r,#g,#b) {return (Color){255,#b,#g,#r};} -macro @colorToHex(#color) {return (uint)#color & 0xFFFFFF00;} -macro @rgbToHex(#r,#g,#b) {return @colorToHex(@rgb(#r,#g,#b));} -macro @rgbaToHex(#r,#g,#b,#a) {return @colorToHex(@rgba(#r,#g,#b,#a));} +macro @rect(#x, #y, #w, #h) +{ + return (Rect) { #x, #y, #w, #h }; +} +macro @cube(#x, #y, #z, #w, #l, #h) +{ + return (Cube) { #x, #y, #z, #w, #l, #h }; +} +macro @vec2D(#x, #y) +{ + return (Vec2D) { #x, #y }; +} +macro @vec3D(#x, #y, #z) +{ + return (Vec3D) { #x, #y, #z }; +} +macro @triangle(#p1, #p2, #p3) +{ + return (Vec3D[3]) { #p1, #p2, #p3 }; +} +macro @createTriangle(#p1x, #p1y, #p1z, #p2x, #p2y, #p2z, #p3x, #p3y, #p3z) +{ + return @triangle(@vec3D(#p1x, #p1y, #p1z), @vec3D(#p2x, #p2y, #p2z), @vec3D(#p3x, #p3y, #p3z)); +} +macro @rgba(#r, #g, #b, #a) +{ + return (Color) { #a, #b, #g, #r }; +} +macro @rgb(#r, #g, #b) +{ + return (Color) { 255, #b, #g, #r }; +} +macro @colorToHex(#color) +{ + return (uint)#color & 0xFFFFFF00; +} +macro @rgbToHex(#r, #g, #b) +{ + return @colorToHex(@rgb(#r, #g, #b)); +} +macro @rgbaToHex(#r, #g, #b, #a) +{ + return @colorToHex(@rgba(#r, #g, #b, #a)); +} const int MAX_BATCHES = 2028; const int MAX_VERTS = 8192; constdef TextureFormat { - NONE = 0, - RGB, - BGR, - RGBA, - BGRA, - RED, - GRAYSCALE, - GRAYSCALE_ALPHA, - FORMAT_COUNT, + NONE = 0, + RGB, + BGR, + RGBA, + BGRA, + RED, + GRAYSCALE, + GRAYSCALE_ALPHA, + FORMAT_COUNT, } constdef TextureDataType { - INT = 0, - FLOAT, + INT = 0, + FLOAT, } constdef TextureFilter { - NEAREST = 0, - LINEAR, + NEAREST = 0, + LINEAR, } struct TextureBlob { - void* data; - usz width; - usz height; - TextureDataType dataType; - TextureFormat dataFormat; - TextureFormat textureFormat; - TextureFilter minFilter; - TextureFilter magFilter; + void* data; + usz width; + usz height; + TextureDataType dataType; + TextureFormat dataFormat; + TextureFormat textureFormat; + TextureFilter minFilter; + TextureFilter magFilter; } -alias Texture = usz; +alias Texture = usz; alias Framebuffer = usz; struct Rect { - float x; - float y; - float w; - float h; + float x; + float y; + float w; + float h; } struct Cube { - float x; - float y; - float z; - float w; - float l; - float h; + float x; + float y; + float z; + float w; + float l; + float h; } struct Vec2D { - float x; - float y; + float x; + float y; } struct Vec3D { - float x; - float y; - float z; + float x; + float y; + float z; } struct Color { - char a; - char b; - char g; - char r; + char a; + char b; + char g; + char r; } alias Mat4 = float[16]; -extern fn Mat4 mat4_loadIdentity() @cname("RSGL_mat4_loadIdentity"); -extern fn Mat4 mat4_scale(Mat4, float, float, float) @cname("RSGL_mat4_scale"); -extern fn Mat4 mat4_rotate(Mat4, float, float, float, float) @cname("RSGL_mat4_rotate"); -extern fn Mat4 mat4_translate(Mat4, float, float, float) @cname("RSGL_mat4_translate"); -extern fn Mat4 mat4_perspective(Mat4, float, float, float, float) @cname("RSGL_mat4_perspective"); -extern fn Mat4 mat4_ortho(Mat4, float, float, float, float, float, float) @cname("RSGL_mat4_ortho"); -extern fn Mat4 mat4_lookAt(Mat4, float, float, float, float, float, float, float, float, float) @cname("RSGL_mat4_lookAt"); -extern fn Mat4 mat4_multiply(Mat4, Mat4) @cname("RSGL_mat4_multiply"); -extern fn Vec3D mat4_multiplyPoint(Mat4, Vec3D) @cname("RSGL_mat4_multiplyPoint"); +extern fn Mat4 mat4_loadIdentity() @cname("RSGL_mat4_loadIdentity"); +extern fn Mat4 mat4_scale(Mat4, float, float, float) @cname("RSGL_mat4_scale"); +extern fn Mat4 mat4_rotate(Mat4, float, float, float, float) @cname("RSGL_mat4_rotate"); +extern fn Mat4 mat4_translate(Mat4, float, float, float) @cname("RSGL_mat4_translate"); +extern fn Mat4 mat4_perspective(Mat4, float, float, float, float) @cname("RSGL_mat4_perspective"); +extern fn Mat4 mat4_ortho(Mat4, float, float, float, float, float, float) @cname("RSGL_mat4_ortho"); +extern fn Mat4 mat4_lookAt( + Mat4, + float, + float, + float, + float, + float, + float, + float, + float, + float +) @cname("RSGL_mat4_lookAt"); +extern fn Mat4 mat4_multiply(Mat4, Mat4) @cname("RSGL_mat4_multiply"); +extern fn Vec3D mat4_multiplyPoint(Mat4, Vec3D) @cname("RSGL_mat4_multiplyPoint"); constdef ProjectionType { - ORTHO_2D = 0, - ORTHO_3D, - PERSPECTIVE_3D, + ORTHO_2D = 0, + ORTHO_3D, + PERSPECTIVE_3D, } struct Projection2D { - ProjectionType type; - uint width; - uint height; + ProjectionType type; + uint width; + uint height; } struct Projection3D { - ProjectionType type; - float fov; - float ratio; - float pNear; - float pFar; + ProjectionType type; + float fov; + float ratio; + float pNear; + float pFar; } union Projection { - ProjectionType type; - Projection2D p2D; - Projection3D p3D; + ProjectionType type; + Projection2D p2D; + Projection3D p3D; } extern fn Mat4 projection_getMatrix(Projection*) @cname("RSGL_projection_getMatrix"); constdef ShaderType { - NONE = 0, - STANDARD = 1, - COMPUTE = 2, - GEOMETRY = 4, + NONE = 0, + STANDARD = 1, + COMPUTE = 2, + GEOMETRY = 4, } struct ProgramBlob { - ZString vertex; - usz vertexLen; - ZString fragment; - usz fragmentLen; + ZString vertex; + usz vertexLen; + ZString fragment; + usz fragmentLen; } struct ProgramInfo { - usz program; - usz perspectiveView; - usz model; - usz vertexPosition; - usz vertexTexCoord; - usz vertexColor; - ShaderType type; + usz program; + usz perspectiveView; + usz model; + usz vertexPosition; + usz vertexTexCoord; + usz vertexColor; + ShaderType type; } struct Batch { - usz start; - usz len; - usz elmStart; - usz elmCount; - uint type; - Texture tex; - float lineWidth; - Mat4 matrix; + usz start; + usz len; + usz elmStart; + usz elmCount; + uint type; + Texture tex; + float lineWidth; + Mat4 matrix; } struct RenderData { - float* verts; - float* texCoords; - float* colors; - ushort* elements; - usz elements_count; - usz len; - Mat4 perspective; + float* verts; + float* texCoords; + float* colors; + ushort* elements; + usz elements_count; + usz len; + Mat4 perspective; } constdef BufferType { - ARRAY_BUFFER = 0, - ELEMENT_ARRAY_BUFFER, - SHADER_STORAGE_BUFFER, - TEXTURE_BUFFER, - UNIFORM_BUFFER, + ARRAY_BUFFER = 0, + ELEMENT_ARRAY_BUFFER, + SHADER_STORAGE_BUFFER, + TEXTURE_BUFFER, + UNIFORM_BUFFER, } struct RenderBuffers { - usz vertex; - usz color; - usz texture; - usz elements; - usz maxVerts; - Batch[MAX_BATCHES] batches; - usz batchCount; + usz vertex; + usz color; + usz texture; + usz elements; + usz maxVerts; + Batch[MAX_BATCHES] batches; + usz batchCount; } struct RenderState { - float* gradient; - Rect source; - Texture texture; - uint gradient_len; - Color color; - Vec3D rotate; - ProgramInfo* program; - RenderBuffers* buffers; - Vec3D center; - float lineWidth; - Mat4 modelMatrix; - Mat4 viewMatrix; - Mat4 perspectiveMatrix; - bool forceBatch; - bool overflow; - Framebuffer framebuffer; + float* gradient; + Rect source; + Texture texture; + uint gradient_len; + Color color; + Vec3D rotate; + ProgramInfo* program; + RenderBuffers* buffers; + Vec3D center; + float lineWidth; + Mat4 modelMatrix; + Mat4 viewMatrix; + Mat4 perspectiveMatrix; + bool forceBatch; + bool overflow; + Framebuffer framebuffer; } struct RenderPass { - ProgramInfo* program; - float* matrix; - RenderBuffers* buffers; - Framebuffer framebuffer; + ProgramInfo* program; + float* matrix; + RenderBuffers* buffers; + Framebuffer framebuffer; } -alias RendererProc_size = fn usz (); -alias RendererProc_defaultBlob = fn ProgramBlob (void*); -alias RendererProc_initPtr = fn void (void*, void*); -alias RendererProc_freePtr = fn void (void*); -alias RendererProc_render = fn void (void*, RenderPass*); -alias RendererProc_clear = fn void (void*, Framebuffer, float, float, float, float); -alias RendererProc_viewport = fn void (void*, int, int, int, int); -alias RendererProc_setSurface = fn void (void*, void*); -alias RendererProc_createTexture = fn Texture (void*, TextureBlob*); -alias RendererProc_copyToTexture = fn void (void*, Texture, usz, usz, TextureBlob*); -alias RendererProc_deleteTexture = fn void (void*, Texture); -alias RendererProc_scissorStart = fn void (void*, float, float, float, float, float); -alias RendererProc_scissorEnd = fn void (void*); -alias RendererProc_createProgram = fn ProgramInfo (void*, ProgramBlob*); -alias RendererProc_deleteProgram = fn void (void*, ProgramInfo*); -alias RendererProc_findShaderVariable = fn usz (void*, ProgramInfo*, ZString, usz); -alias RendererProc_updateShaderVariable = fn void (void*, ProgramInfo*, usz, float*, char); -alias RendererProc_createComputeProgram = fn ProgramInfo (void*, ZString); -alias RendererProc_dispatchComputeProgram = fn void (void*, ProgramInfo*, uint, uint, uint); -alias RendererProc_bindComputeTexture = fn void (void*, uint, char); -alias RendererProc_createBuffer = fn void (void*, BufferType, usz, void*, usz*); -alias RendererProc_updateBuffer = fn void (void*, BufferType, usz, void*, usz, usz); -alias RendererProc_deleteBuffer = fn void (void*, usz); -alias RendererProc_createFramebuffer = fn Framebuffer (void*, usz, usz); -alias RendererProc_attachFramebuffer = fn void (void*, Framebuffer, Texture, char, char); -alias RendererProc_deleteFramebuffer = fn void (void*, Framebuffer); +alias RendererProc_size = fn usz(); +alias RendererProc_defaultBlob = fn ProgramBlob(void*); +alias RendererProc_initPtr = fn void(void*, void*); +alias RendererProc_freePtr = fn void(void*); +alias RendererProc_render = fn void(void*, RenderPass*); +alias RendererProc_clear = fn void(void*, Framebuffer, float, float, float, float); +alias RendererProc_viewport = fn void(void*, int, int, int, int); +alias RendererProc_setSurface = fn void(void*, void*); +alias RendererProc_createTexture = fn Texture(void*, TextureBlob*); +alias RendererProc_copyToTexture = fn void(void*, Texture, usz, usz, TextureBlob*); +alias RendererProc_deleteTexture = fn void(void*, Texture); +alias RendererProc_scissorStart = fn void(void*, float, float, float, float, float); +alias RendererProc_scissorEnd = fn void(void*); +alias RendererProc_createProgram = fn ProgramInfo(void*, ProgramBlob*); +alias RendererProc_deleteProgram = fn void(void*, ProgramInfo*); +alias RendererProc_findShaderVariable = fn usz(void*, ProgramInfo*, ZString, usz); +alias RendererProc_updateShaderVariable = fn void(void*, ProgramInfo*, usz, float*, char); +alias RendererProc_createComputeProgram = fn ProgramInfo(void*, ZString); +alias RendererProc_dispatchComputeProgram = fn void(void*, ProgramInfo*, uint, uint, uint); +alias RendererProc_bindComputeTexture = fn void(void*, uint, char); +alias RendererProc_createBuffer = fn void(void*, BufferType, usz, void*, usz*); +alias RendererProc_updateBuffer = fn void(void*, BufferType, usz, void*, usz, usz); +alias RendererProc_deleteBuffer = fn void(void*, usz); +alias RendererProc_createFramebuffer = fn Framebuffer(void*, usz, usz); +alias RendererProc_attachFramebuffer = fn void(void*, Framebuffer, Texture, char, char); +alias RendererProc_deleteFramebuffer = fn void(void*, Framebuffer); struct RendererProc { - RendererProc_size size; - RendererProc_defaultBlob defaultBlob; - RendererProc_initPtr initPtr; - RendererProc_freePtr freePtr; - RendererProc_render render; - RendererProc_clear clear; - RendererProc_viewport viewport; - RendererProc_setSurface setSurface; - RendererProc_createTexture createTexture; - RendererProc_copyToTexture copyToTexture; - RendererProc_deleteTexture deleteTexture; - RendererProc_scissorStart scissorStart; - RendererProc_scissorEnd scissorEnd; - RendererProc_createProgram createProgram; - RendererProc_deleteProgram deleteProgram; - RendererProc_findShaderVariable findShaderVariable; - RendererProc_updateShaderVariable updateShaderVariable; - RendererProc_createComputeProgram createComputeProgram; - RendererProc_dispatchComputeProgram dispatchComputeProgram; - RendererProc_bindComputeTexture bindComputeTexture; - RendererProc_createBuffer createBuffer; - RendererProc_updateBuffer updateBuffer; - RendererProc_deleteBuffer deleteBuffer; - RendererProc_createFramebuffer createFramebuffer; - RendererProc_attachFramebuffer attachFramebuffer; - RendererProc_deleteFramebuffer deleteFramebuffer; + RendererProc_size size; + RendererProc_defaultBlob defaultBlob; + RendererProc_initPtr initPtr; + RendererProc_freePtr freePtr; + RendererProc_render render; + RendererProc_clear clear; + RendererProc_viewport viewport; + RendererProc_setSurface setSurface; + RendererProc_createTexture createTexture; + RendererProc_copyToTexture copyToTexture; + RendererProc_deleteTexture deleteTexture; + RendererProc_scissorStart scissorStart; + RendererProc_scissorEnd scissorEnd; + RendererProc_createProgram createProgram; + RendererProc_deleteProgram deleteProgram; + RendererProc_findShaderVariable findShaderVariable; + RendererProc_updateShaderVariable updateShaderVariable; + RendererProc_createComputeProgram createComputeProgram; + RendererProc_dispatchComputeProgram dispatchComputeProgram; + RendererProc_bindComputeTexture bindComputeTexture; + RendererProc_createBuffer createBuffer; + RendererProc_updateBuffer updateBuffer; + RendererProc_deleteBuffer deleteBuffer; + RendererProc_createFramebuffer createFramebuffer; + RendererProc_attachFramebuffer attachFramebuffer; + RendererProc_deleteFramebuffer deleteFramebuffer; } struct Renderer { - RenderData data; - RenderState state; - RendererProc proc; - void* userPtr; - void* ctx; - Texture defaultTexture; - ProgramInfo defaultProgram; - Mat4 defaultPerspectiveMatrix; - float[MAX_VERTS*3] verts; - float[MAX_VERTS*2] texCoords; - float[MAX_VERTS*4] colors; - ushort[MAX_VERTS*6] elements; - RenderBuffers buffers; + RenderData data; + RenderState state; + RendererProc proc; + void* userPtr; + void* ctx; + Texture defaultTexture; + ProgramInfo defaultProgram; + Mat4 defaultPerspectiveMatrix; + float[MAX_VERTS * 3] verts; + float[MAX_VERTS * 2] texCoords; + float[MAX_VERTS * 4] colors; + ushort[MAX_VERTS * 6] elements; + RenderBuffers buffers; } -extern fn void renderer_getRenderState(Renderer*, RenderState*) @cname("RSGL_renderer_getRenderState"); -extern fn usz renderer_size(Renderer*) @cname("RSGL_renderer_size"); -extern fn void renderer_initPtr(RendererProc*, void*, void*, Renderer*) @cname("RSGL_renderer_initPtr"); -extern fn Renderer* renderer_init(RendererProc, void*) @cname("RSGL_renderer_init"); -extern fn void renderer_updateSize(Renderer*, usz, usz) @cname("RSGL_renderer_updateSize"); -extern fn void renderer_freePtr(Renderer*) @cname("RSGL_renderer_freePtr"); -extern fn void renderer_setSurface(Renderer*, void*) @cname("RSGL_renderer_setSurface"); -extern fn void renderer_createBuffer(Renderer*, BufferType, usz, void*, usz*) @cname("RSGL_renderer_createBuffer"); -extern fn void renderer_updateBuffer(Renderer*, BufferType, usz, void*, usz, usz) @cname("RSGL_renderer_updateBuffer"); -extern fn void renderer_deleteBuffer(Renderer*, usz) @cname("RSGL_renderer_deleteBuffer"); -extern fn void renderer_createRenderBuffers(Renderer*, usz, RenderBuffers*) @cname("RSGL_renderer_createRenderBuffers"); -extern fn void renderer_deleteRenderBuffers(Renderer*, RenderBuffers*) @cname("RSGL_renderer_deleteRenderBuffers"); -extern fn void renderer_render(Renderer*) @cname("RSGL_renderer_render"); -extern fn void renderer_updateRenderBuffers(Renderer*) @cname("RSGL_renderer_updateRenderbuffers"); -extern fn void renderer_renderBuffers(Renderer*) @cname("RSGL_renderer_renderBuffers"); -extern fn void renderer_free(Renderer*) @cname("RSGL_renderer_free"); -extern fn void renderer_setRotate(Renderer*, Vec3D) @cname("RSGL_renderer_setRotate"); -extern fn void renderer_setTexture(Renderer*, Texture) @cname("RSGL_renderer_setTexture"); -extern fn void renderer_setTextureSource(Renderer*, Texture, Rect) @cname("RSGL_renderer_setTextureSource"); -extern fn void renderer_setColor(Renderer*, Color) @cname("RSGL_renderer_setColor"); -extern fn void renderer_setProgram(Renderer*, ProgramInfo*) @cname("RSGL_renderer_setProgram"); -extern fn void renderer_setFramebuffer(Renderer*, Framebuffer) @cname("RSGL_renderer_setFramebuffer"); -extern fn void renderer_setRenderBuffers(Renderer*, RenderBuffers*) @cname("RSGL_renderer_setRenderBuffers"); -extern fn void renderer_setGradient(Renderer*, float*, usz) @cname("RSGL_renderer_setGradient"); -extern fn void renderer_setCenter(Renderer*, Vec3D) @cname("RSGL_renderer_setCenter"); -extern fn void renderer_setOverflow(Renderer*, bool) @cname("RSGL_renderer_setOverflow"); -extern fn void renderer_clearArgs(Renderer*) @cname("RSGL_renderer_clearArgs"); -extern fn Mat4 renderer_initDrawMatrix(Renderer*, Vec3D) @cname("RSGL_renderer_initDrawMatrix"); -extern fn void renderer_clear(Renderer*, Color) @cname("RSGL_renderer_clear"); -extern fn void renderer_viewport(Renderer*, Rect) @cname("RSGL_renderer_viewport"); -extern fn Texture renderer_createTexture(Renderer*, TextureBlob*) @cname("RSGL_renderer_createTexture"); -extern fn void renderer_copyToTexture(Renderer*, Texture, usz, usz, TextureBlob*) @cname("RSGL_renderer_copyToTexture"); -extern fn void renderer_deleteTexture(Renderer*, Texture) @cname("RSGL_renderer_deleteTexture"); -extern fn Framebuffer renderer_createFramebuffer(Renderer*, usz, usz) @cname("RSGL_renderer_createFramebuffer"); -extern fn void renderer_attachFramebuffer(Renderer*, Framebuffer, Texture, char, char) @cname("RSGL_renderer_attachFramebuffer"); -extern fn void renderer_deleteFramebuffer(Renderer*, Framebuffer) @cname("RSGL_renderer_deleteFramebuffer"); -extern fn void renderer_scissorStart(Renderer*, Rect, int) @cname("RSGL_renderer_scissorStart"); -extern fn void renderer_scissorEnd(Renderer*) @cname("RSGL_renderer_scissorEnd"); -extern fn ProgramBlob renderer_defaultBlob(Renderer*) @cname("RSGL_renderer_defaultBlob"); -extern fn ProgramInfo renderer_createProgram(Renderer*, ProgramBlob*) @cname("RSGL_renderer_createProgram"); -extern fn void renderer_deleteProgram(Renderer*, ProgramInfo*) @cname("RSGL_renderer_deleteProgram"); -extern fn usz renderer_findShaderVariable(Renderer*, ProgramInfo*, ZString, usz) @cname("RSGL_renderer_findShaderVariable"); -extern fn void renderer_updateShaderVariable(Renderer*, ProgramInfo*, usz, float*, char) @cname("RSGL_renderer_updateShaderVariable"); -extern fn void renderer_forceBatch(Renderer*) @cname("RSGL_renderer_forceBatch"); -extern fn void renderer_setPerspectiveMatrix(Renderer*, Mat4) @cname("RSGL_renderer_setPerspectiveMatrix"); -extern fn void renderer_setDefaultPerspectiveMatrix(Renderer*, Mat4) @cname("RSGL_renderer_setDefaultPerspectiveMatrix"); -extern fn void renderer_setModelMatrix(Renderer*, Mat4) @cname("RSGL_renderer_setModelMatrix"); -extern fn void renderer_resetModelMatrix(Renderer*) @cname("RSGL_renderer_resetModelMatrix"); -extern fn ProgramInfo renderer_createComputeProgram(Renderer*, ZString) @cname("RSGL_renderer_createComputeProgram"); -extern fn void renderer_dispatchComputeProgram(Renderer*, ProgramInfo*, uint, uint, uint) @cname("RSGL_renderer_dispatchComputeProgram"); -extern fn void renderer_bindComputeTexture(Renderer*, uint, char) @cname("RSGL_renderer_bindComputeTexture"); +extern fn void renderer_getRenderState(Renderer*, RenderState*) @cname("RSGL_renderer_getRenderState"); +extern fn usz renderer_size(Renderer*) @cname("RSGL_renderer_size"); +extern fn void renderer_initPtr(RendererProc*, void*, void*, Renderer*) @cname("RSGL_renderer_initPtr"); +extern fn Renderer* renderer_init(RendererProc, void*) @cname("RSGL_renderer_init"); +extern fn void renderer_updateSize(Renderer*, usz, usz) @cname("RSGL_renderer_updateSize"); +extern fn void renderer_freePtr(Renderer*) @cname("RSGL_renderer_freePtr"); +extern fn void renderer_setSurface(Renderer*, void*) @cname("RSGL_renderer_setSurface"); +extern fn void renderer_createBuffer(Renderer*, BufferType, usz, void*, usz*) @cname("RSGL_renderer_createBuffer"); +extern fn void renderer_updateBuffer(Renderer*, BufferType, usz, void*, usz, usz) @cname("RSGL_renderer_updateBuffer"); +extern fn void renderer_deleteBuffer(Renderer*, usz) @cname("RSGL_renderer_deleteBuffer"); +extern fn void renderer_createRenderBuffers(Renderer*, usz, RenderBuffers*) @cname("RSGL_renderer_createRenderBuffers"); +extern fn void renderer_deleteRenderBuffers(Renderer*, RenderBuffers*) @cname("RSGL_renderer_deleteRenderBuffers"); +extern fn void renderer_render(Renderer*) @cname("RSGL_renderer_render"); +extern fn void renderer_updateRenderBuffers(Renderer*) @cname("RSGL_renderer_updateRenderbuffers"); +extern fn void renderer_renderBuffers(Renderer*) @cname("RSGL_renderer_renderBuffers"); +extern fn void renderer_free(Renderer*) @cname("RSGL_renderer_free"); +extern fn void renderer_setRotate(Renderer*, Vec3D) @cname("RSGL_renderer_setRotate"); +extern fn void renderer_setTexture(Renderer*, Texture) @cname("RSGL_renderer_setTexture"); +extern fn void renderer_setTextureSource(Renderer*, Texture, Rect) @cname("RSGL_renderer_setTextureSource"); +extern fn void renderer_setColor(Renderer*, Color) @cname("RSGL_renderer_setColor"); +extern fn void renderer_setProgram(Renderer*, ProgramInfo*) @cname("RSGL_renderer_setProgram"); +extern fn void renderer_setFramebuffer(Renderer*, Framebuffer) @cname("RSGL_renderer_setFramebuffer"); +extern fn void renderer_setRenderBuffers(Renderer*, RenderBuffers*) @cname("RSGL_renderer_setRenderBuffers"); +extern fn void renderer_setGradient(Renderer*, float*, usz) @cname("RSGL_renderer_setGradient"); +extern fn void renderer_setCenter(Renderer*, Vec3D) @cname("RSGL_renderer_setCenter"); +extern fn void renderer_setOverflow(Renderer*, bool) @cname("RSGL_renderer_setOverflow"); +extern fn void renderer_clearArgs(Renderer*) @cname("RSGL_renderer_clearArgs"); +extern fn Mat4 renderer_initDrawMatrix(Renderer*, Vec3D) @cname("RSGL_renderer_initDrawMatrix"); +extern fn void renderer_clear(Renderer*, Color) @cname("RSGL_renderer_clear"); +extern fn void renderer_viewport(Renderer*, Rect) @cname("RSGL_renderer_viewport"); +extern fn Texture renderer_createTexture(Renderer*, TextureBlob*) @cname("RSGL_renderer_createTexture"); +extern fn void renderer_copyToTexture(Renderer*, Texture, usz, usz, TextureBlob*) @cname("RSGL_renderer_copyToTexture"); +extern fn void renderer_deleteTexture(Renderer*, Texture) @cname("RSGL_renderer_deleteTexture"); +extern fn Framebuffer renderer_createFramebuffer(Renderer*, usz, usz) @cname("RSGL_renderer_createFramebuffer"); +extern fn void renderer_attachFramebuffer( + Renderer*, + Framebuffer, + Texture, + char, + char +) @cname("RSGL_renderer_attachFramebuffer"); +extern fn void renderer_deleteFramebuffer(Renderer*, Framebuffer) @cname("RSGL_renderer_deleteFramebuffer"); +extern fn void renderer_scissorStart(Renderer*, Rect, int) @cname("RSGL_renderer_scissorStart"); +extern fn void renderer_scissorEnd(Renderer*) @cname("RSGL_renderer_scissorEnd"); +extern fn ProgramBlob renderer_defaultBlob(Renderer*) @cname("RSGL_renderer_defaultBlob"); +extern fn ProgramInfo renderer_createProgram(Renderer*, ProgramBlob*) @cname("RSGL_renderer_createProgram"); +extern fn void renderer_deleteProgram(Renderer*, ProgramInfo*) @cname("RSGL_renderer_deleteProgram"); +extern fn usz renderer_findShaderVariable( + Renderer*, + ProgramInfo*, + ZString, + usz +) @cname("RSGL_renderer_findShaderVariable"); +extern fn void renderer_updateShaderVariable( + Renderer*, + ProgramInfo*, + usz, + float*, + char +) @cname("RSGL_renderer_updateShaderVariable"); +extern fn void renderer_forceBatch(Renderer*) @cname("RSGL_renderer_forceBatch"); +extern fn void renderer_setPerspectiveMatrix(Renderer*, Mat4) @cname("RSGL_renderer_setPerspectiveMatrix"); +extern fn void renderer_setDefaultPerspectiveMatrix( + Renderer*, + Mat4 +) @cname("RSGL_renderer_setDefaultPerspectiveMatrix"); +extern fn void renderer_setModelMatrix(Renderer*, Mat4) @cname("RSGL_renderer_setModelMatrix"); +extern fn void renderer_resetModelMatrix(Renderer*) @cname("RSGL_renderer_resetModelMatrix"); +extern fn ProgramInfo renderer_createComputeProgram(Renderer*, ZString) @cname("RSGL_renderer_createComputeProgram"); +extern fn void renderer_dispatchComputeProgram( + Renderer*, + ProgramInfo*, + uint, + uint, + uint +) @cname("RSGL_renderer_dispatchComputeProgram"); +extern fn void renderer_bindComputeTexture(Renderer*, uint, char) @cname("RSGL_renderer_bindComputeTexture"); constdef DrawType { - TRIANGLES = 0, - POINTS = 1, - LINES = 2, + TRIANGLES = 0, + POINTS = 1, + LINES = 2, } struct RawVerts { - DrawType type; - float* verts; - float* texCoords; - ushort* elements; - usz elmCount; - usz vert_count; + DrawType type; + float* verts; + float* texCoords; + ushort* elements; + usz elmCount; + usz vert_count; } extern fn int drawRawVerts(Renderer*, RawVerts*) @cname("RSGL_drawRawVerts"); -extern fn int drawPoint(Renderer*, Vec2D) @cname("RSGL_drawPoint") @if($feature(HIGHLEVEL)); -extern fn int drawRect(Renderer*, Rect) @cname("RSGL_drawRect") @if($feature(HIGHLEVEL)); -extern fn int drawRoundRect(Renderer*, Rect, Vec2D) @cname("RSGL_drawRoundRect") @if($feature(HIGHLEVEL)); -extern fn int drawPolygon(Renderer*, Rect, uint) @cname("RSGL_drawPolygon") @if($feature(HIGHLEVEL)); -extern fn int drawArc(Renderer*, Rect, Vec2D) @cname("RSGL_drawArc") @if($feature(HIGHLEVEL)); -extern fn int drawOval(Renderer*, Rect) @cname("RSGL_drawOval") @if($feature(HIGHLEVEL)); -extern fn int drawLine(Renderer*, Vec2D, Vec2D, uint) @cname("RSGL_drawLine") @if($feature(HIGHLEVEL)); -extern fn int drawTriangle(Renderer*, Vec3D[3]) @cname("RSGL_drawTriangle") @if($feature(HIGHLEVEL)); -extern fn int drawPoint3D(Renderer*, Vec3D) @cname("RSGL_drawPoint3D") @if($feature(HIGHLEVEL)); -extern fn int drawLine3D(Renderer*, Vec3D, Vec3D, uint) @cname("RSGL_drawLine3D") @if($feature(HIGHLEVEL)); -extern fn int drawCube(Renderer*, Cube) @cname("RSGL_drawCube") @if($feature(HIGHLEVEL)); -extern fn int drawTriangleOutline(Renderer*, Vec3D[3], uint) @cname("RSGL_drawTriangleOutline") @if($feature(HIGHLEVEL)); -extern fn int drawRectOutline(Renderer*, Rect, uint) @cname("RSGL_drawRectOutline") @if($feature(HIGHLEVEL)); -extern fn int drawRoundRectOutline(Renderer*, Rect, Vec2D, uint) @cname("RSGL_drawRoundRectOutline") @if($feature(HIGHLEVEL)); -extern fn int drawPolygonOutline(Renderer*, Rect, uint, uint) @cname("RSGL_drawPolygonOutline") @if($feature(HIGHLEVEL)); -extern fn int drawArcOutline(Renderer*, Rect, Vec2D, uint) @cname("RSGL_drawArcOutline") @if($feature(HIGHLEVEL)); -extern fn int drawOvalOutline(Renderer*, Rect, uint) @cname("RSGL_drawovalOutline") @if($feature(HIGHLEVEL)); +extern fn int drawPoint(Renderer*, Vec2D) @cname("RSGL_drawPoint") @if($feature(HIGHLEVEL)); +extern fn int drawRect(Renderer*, Rect) @cname("RSGL_drawRect") @if($feature(HIGHLEVEL)); +extern fn int drawRoundRect(Renderer*, Rect, Vec2D) @cname("RSGL_drawRoundRect") @if($feature(HIGHLEVEL)); +extern fn int drawPolygon(Renderer*, Rect, uint) @cname("RSGL_drawPolygon") @if($feature(HIGHLEVEL)); +extern fn int drawArc(Renderer*, Rect, Vec2D) @cname("RSGL_drawArc") @if($feature(HIGHLEVEL)); +extern fn int drawOval(Renderer*, Rect) @cname("RSGL_drawOval") @if($feature(HIGHLEVEL)); +extern fn int drawLine(Renderer*, Vec2D, Vec2D, uint) @cname("RSGL_drawLine") @if($feature(HIGHLEVEL)); +extern fn int drawTriangle(Renderer*, Vec3D[3]) @cname("RSGL_drawTriangle") @if($feature(HIGHLEVEL)); +extern fn int drawPoint3D(Renderer*, Vec3D) @cname("RSGL_drawPoint3D") @if($feature(HIGHLEVEL)); +extern fn int drawLine3D(Renderer*, Vec3D, Vec3D, uint) @cname("RSGL_drawLine3D") @if($feature(HIGHLEVEL)); +extern fn int drawCube(Renderer*, Cube) @cname("RSGL_drawCube") @if($feature(HIGHLEVEL)); +extern fn int drawTriangleOutline( + Renderer*, + Vec3D[3], + uint +) @cname("RSGL_drawTriangleOutline") @if($feature(HIGHLEVEL)); +extern fn int drawRectOutline(Renderer*, Rect, uint) @cname("RSGL_drawRectOutline") @if($feature(HIGHLEVEL)); +extern fn int drawRoundRectOutline( + Renderer*, + Rect, + Vec2D, + uint +) @cname("RSGL_drawRoundRectOutline") @if($feature(HIGHLEVEL)); +extern fn int drawPolygonOutline( + Renderer*, + Rect, + uint, + uint +) @cname("RSGL_drawPolygonOutline") @if($feature(HIGHLEVEL)); +extern fn int drawArcOutline(Renderer*, Rect, Vec2D, uint) @cname("RSGL_drawArcOutline") @if($feature(HIGHLEVEL)); +extern fn int drawOvalOutline(Renderer*, Rect, uint) @cname("RSGL_drawovalOutline") @if($feature(HIGHLEVEL)); constdef ViewType @if($feature(HIGHLEVEL)) { - NONE = 0, - TWO_D, - THREE_D, + NONE = 0, + TWO_D, + THREE_D, } struct View2D @if($feature(HIGHLEVEL)) { - ViewType type; - Vec3D offset; - Vec3D target; - float rotation; - float zoom; + ViewType type; + Vec3D offset; + Vec3D target; + float rotation; + float zoom; } struct View3D @if($feature(HIGHLEVEL)) { - ViewType type; - Vec3D pos; - Vec3D target; - Vec3D up; + ViewType type; + Vec3D pos; + Vec3D target; + Vec3D up; } union View @if($feature(HIGHLEVEL)) { - ViewType type; - View2D view2D; - View3D view3D; + ViewType type; + View2D view2D; + View3D view3D; } extern fn Mat4 view_getMatrix(View*) @cname("RSGL_view_getMatrix") @if($feature(HIGHLEVEL)); @@ -448,16 +530,16 @@ module rsgl::gl @if($feature(OPENGL)); struct GlRenderer { - uint vao; + uint vao; } extern fn RendererProc rendererProc() @cname("RSGL_GL_rendererProc"); -extern fn usz size() @cname("RSGL_GL_size"); +extern fn usz size() @cname("RSGL_GL_size"); module rsgl::rfont @if($feature(RFONT)); import rfont; -extern fn rfont::Renderer_proc renderer_proc() @cname("RFont_RSGL_renderer_proc"); -extern fn rfont::Renderer* renderer_init(rsgl::Renderer*) @cname("RFont_RSGL_renderer_init"); -extern fn void renderer_initPtr(rsgl::Renderer*, rfont::Renderer*) @cname("RFont_RSGL_renderer_initPtr"); -extern fn void renderer_free(rfont::Renderer*) @cname("RFont_RSGL_renderer_free"); +extern fn rfont::Renderer_proc renderer_proc() @cname("RFont_RSGL_renderer_proc"); +extern fn rfont::Renderer* renderer_init(rsgl::Renderer*) @cname("RFont_RSGL_renderer_init"); +extern fn void renderer_initPtr(rsgl::Renderer*, rfont::Renderer*) @cname("RFont_RSGL_renderer_initPtr"); +extern fn void renderer_free(rfont::Renderer*) @cname("RFont_RSGL_renderer_free");
\ No newline at end of file diff --git a/uefi.c3l b/uefi.c3l new file mode 160000 +Subproject 1001e0785fa3d132e9e3ab54d6ff192f179d927 |
