red pill
This commit is contained in:
334
modules/sdl3.sx
Normal file
334
modules/sdl3.sx
Normal file
@@ -0,0 +1,334 @@
|
||||
sdl3 :: #library "SDL3";
|
||||
|
||||
// SDL_InitFlags
|
||||
SDL_INIT_VIDEO :u32: 0x20;
|
||||
|
||||
// SDL_WindowFlags
|
||||
SDL_WINDOW_OPENGL :u64: 0x2;
|
||||
|
||||
// SDL_GLAttr (enum starting at 0)
|
||||
SDL_GL_DOUBLEBUFFER :s32: 5;
|
||||
SDL_GL_DEPTH_SIZE :s32: 6;
|
||||
SDL_GL_CONTEXT_MAJOR_VERSION :s32: 17;
|
||||
SDL_GL_CONTEXT_MINOR_VERSION :s32: 18;
|
||||
SDL_GL_CONTEXT_FLAGS :s32: 19;
|
||||
SDL_GL_CONTEXT_PROFILE_MASK :s32: 20;
|
||||
|
||||
// SDL_GLProfile
|
||||
SDL_GL_CONTEXT_PROFILE_CORE :s32: 0x1;
|
||||
|
||||
// SDL_GLContextFlag
|
||||
SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG :s32: 0x2;
|
||||
|
||||
// SDL_Keycode — virtual key codes (layout-dependent)
|
||||
SDL_Keycode :: enum u32 {
|
||||
// Common
|
||||
unknown :: 0x00;
|
||||
return_key :: 0x0D;
|
||||
escape :: 0x1B;
|
||||
backspace :: 0x08;
|
||||
tab :: 0x09;
|
||||
space :: 0x20;
|
||||
delete_key :: 0x7F;
|
||||
|
||||
// Punctuation
|
||||
exclaim :: 0x21;
|
||||
double_quote :: 0x22;
|
||||
hash :: 0x23;
|
||||
dollar :: 0x24;
|
||||
percent :: 0x25;
|
||||
ampersand :: 0x26;
|
||||
apostrophe :: 0x27;
|
||||
leftparen :: 0x28;
|
||||
rightparen :: 0x29;
|
||||
asterisk :: 0x2A;
|
||||
plus :: 0x2B;
|
||||
comma :: 0x2C;
|
||||
minus :: 0x2D;
|
||||
period :: 0x2E;
|
||||
slash :: 0x2F;
|
||||
colon :: 0x3A;
|
||||
semicolon :: 0x3B;
|
||||
less :: 0x3C;
|
||||
equals :: 0x3D;
|
||||
greater :: 0x3E;
|
||||
question :: 0x3F;
|
||||
at :: 0x40;
|
||||
leftbracket :: 0x5B;
|
||||
backslash :: 0x5C;
|
||||
rightbracket :: 0x5D;
|
||||
caret :: 0x5E;
|
||||
underscore :: 0x5F;
|
||||
grave :: 0x60;
|
||||
leftbrace :: 0x7B;
|
||||
pipe :: 0x7C;
|
||||
rightbrace :: 0x7D;
|
||||
tilde :: 0x7E;
|
||||
plusminus :: 0xB1;
|
||||
|
||||
// Numbers
|
||||
key_0 :: 0x30;
|
||||
key_1 :: 0x31;
|
||||
key_2 :: 0x32;
|
||||
key_3 :: 0x33;
|
||||
key_4 :: 0x34;
|
||||
key_5 :: 0x35;
|
||||
key_6 :: 0x36;
|
||||
key_7 :: 0x37;
|
||||
key_8 :: 0x38;
|
||||
key_9 :: 0x39;
|
||||
|
||||
// Letters
|
||||
a :: 0x61;
|
||||
b :: 0x62;
|
||||
c :: 0x63;
|
||||
d :: 0x64;
|
||||
e :: 0x65;
|
||||
f :: 0x66;
|
||||
g :: 0x67;
|
||||
h :: 0x68;
|
||||
i :: 0x69;
|
||||
j :: 0x6A;
|
||||
k :: 0x6B;
|
||||
l :: 0x6C;
|
||||
m :: 0x6D;
|
||||
n :: 0x6E;
|
||||
o :: 0x6F;
|
||||
p :: 0x70;
|
||||
q :: 0x71;
|
||||
r :: 0x72;
|
||||
s :: 0x73;
|
||||
t :: 0x74;
|
||||
u :: 0x75;
|
||||
v :: 0x76;
|
||||
w :: 0x77;
|
||||
x :: 0x78;
|
||||
y :: 0x79;
|
||||
z :: 0x7A;
|
||||
|
||||
// Function keys
|
||||
f1 :: 0x4000003A;
|
||||
f2 :: 0x4000003B;
|
||||
f3 :: 0x4000003C;
|
||||
f4 :: 0x4000003D;
|
||||
f5 :: 0x4000003E;
|
||||
f6 :: 0x4000003F;
|
||||
f7 :: 0x40000040;
|
||||
f8 :: 0x40000041;
|
||||
f9 :: 0x40000042;
|
||||
f10 :: 0x40000043;
|
||||
f11 :: 0x40000044;
|
||||
f12 :: 0x40000045;
|
||||
f13 :: 0x40000068;
|
||||
f14 :: 0x40000069;
|
||||
f15 :: 0x4000006A;
|
||||
f16 :: 0x4000006B;
|
||||
f17 :: 0x4000006C;
|
||||
f18 :: 0x4000006D;
|
||||
f19 :: 0x4000006E;
|
||||
f20 :: 0x4000006F;
|
||||
f21 :: 0x40000070;
|
||||
f22 :: 0x40000071;
|
||||
f23 :: 0x40000072;
|
||||
f24 :: 0x40000073;
|
||||
|
||||
// Navigation
|
||||
capslock :: 0x40000039;
|
||||
printscreen :: 0x40000046;
|
||||
scrolllock :: 0x40000047;
|
||||
pause :: 0x40000048;
|
||||
insert :: 0x40000049;
|
||||
home :: 0x4000004A;
|
||||
pageup :: 0x4000004B;
|
||||
end :: 0x4000004D;
|
||||
pagedown :: 0x4000004E;
|
||||
right :: 0x4000004F;
|
||||
left :: 0x40000050;
|
||||
down :: 0x40000051;
|
||||
up :: 0x40000052;
|
||||
|
||||
// Keypad
|
||||
numlock :: 0x40000053;
|
||||
kp_divide :: 0x40000054;
|
||||
kp_multiply :: 0x40000055;
|
||||
kp_minus :: 0x40000056;
|
||||
kp_plus :: 0x40000057;
|
||||
kp_enter :: 0x40000058;
|
||||
kp_1 :: 0x40000059;
|
||||
kp_2 :: 0x4000005A;
|
||||
kp_3 :: 0x4000005B;
|
||||
kp_4 :: 0x4000005C;
|
||||
kp_5 :: 0x4000005D;
|
||||
kp_6 :: 0x4000005E;
|
||||
kp_7 :: 0x4000005F;
|
||||
kp_8 :: 0x40000060;
|
||||
kp_9 :: 0x40000061;
|
||||
kp_0 :: 0x40000062;
|
||||
kp_period :: 0x40000063;
|
||||
kp_equals :: 0x40000067;
|
||||
kp_comma :: 0x40000085;
|
||||
|
||||
// Modifiers
|
||||
lctrl :: 0x400000E0;
|
||||
lshift :: 0x400000E1;
|
||||
lalt :: 0x400000E2;
|
||||
lgui :: 0x400000E3;
|
||||
rctrl :: 0x400000E4;
|
||||
rshift :: 0x400000E5;
|
||||
ralt :: 0x400000E6;
|
||||
rgui :: 0x400000E7;
|
||||
mode :: 0x40000101;
|
||||
|
||||
// Editing
|
||||
undo :: 0x4000007A;
|
||||
cut :: 0x4000007B;
|
||||
copy :: 0x4000007C;
|
||||
paste :: 0x4000007D;
|
||||
find :: 0x4000007E;
|
||||
|
||||
// Media
|
||||
mute :: 0x4000007F;
|
||||
volumeup :: 0x40000080;
|
||||
volumedown :: 0x40000081;
|
||||
media_play :: 0x40000106;
|
||||
media_pause :: 0x40000107;
|
||||
media_fast_forward :: 0x40000109;
|
||||
media_rewind :: 0x4000010A;
|
||||
media_next_track :: 0x4000010B;
|
||||
media_previous_track :: 0x4000010C;
|
||||
media_stop :: 0x4000010D;
|
||||
media_eject :: 0x4000010E;
|
||||
media_play_pause :: 0x4000010F;
|
||||
|
||||
// System
|
||||
application :: 0x40000065;
|
||||
power :: 0x40000066;
|
||||
execute :: 0x40000074;
|
||||
help :: 0x40000075;
|
||||
menu :: 0x40000076;
|
||||
select :: 0x40000077;
|
||||
sleep :: 0x40000102;
|
||||
wake :: 0x40000103;
|
||||
}
|
||||
|
||||
// Event payload structs — match SDL3 layout from byte 4 onward (after the u32 type tag)
|
||||
// Common header: reserved (u32), timestamp (u64)
|
||||
|
||||
SDL_WindowData :: struct {
|
||||
timestamp: u64; // event time in nanoseconds
|
||||
window_id: u32;
|
||||
data1: s32; // event-dependent: x position for moved, width for resized
|
||||
data2: s32; // event-dependent: y position for moved, height for resized
|
||||
}
|
||||
|
||||
SDL_Keymod :: enum flags u16 {
|
||||
lshift :: 0b0000_0000_0000_0001; // left Shift
|
||||
rshift :: 0b0000_0000_0000_0010; // right Shift
|
||||
level5 :: 0b0000_0000_0000_0100; // Level 5 Shift
|
||||
lctrl :: 0b0000_0000_0100_0000; // left Ctrl
|
||||
rctrl :: 0b0000_0000_1000_0000; // right Ctrl
|
||||
lalt :: 0b0000_0001_0000_0000; // left Alt
|
||||
ralt :: 0b0000_0010_0000_0000; // right Alt
|
||||
lgui :: 0b0000_0100_0000_0000; // left GUI (Windows/Cmd key)
|
||||
rgui :: 0b0000_1000_0000_0000; // right GUI (Windows/Cmd key)
|
||||
num :: 0b0001_0000_0000_0000; // Num Lock
|
||||
caps :: 0b0010_0000_0000_0000; // Caps Lock
|
||||
mode :: 0b0100_0000_0000_0000; // AltGr
|
||||
scroll :: 0b1000_0000_0000_0000; // Scroll Lock
|
||||
}
|
||||
|
||||
SDL_KeyData :: struct {
|
||||
timestamp: u64; // event time in nanoseconds
|
||||
window_id: u32; // window with keyboard focus
|
||||
which: u32; // keyboard instance id, 0 if unknown or virtual
|
||||
scancode: u32; // physical key code (layout-independent)
|
||||
key: SDL_Keycode; // virtual key code (layout-dependent)
|
||||
mod: SDL_Keymod; // active modifier keys
|
||||
raw: u16; // platform-specific scancode
|
||||
down: u8; // 1 if pressed, 0 if released
|
||||
repeat: u8; // 1 if this is a key repeat
|
||||
}
|
||||
|
||||
SDL_MouseMotionData :: struct {
|
||||
timestamp: u64; // event time in nanoseconds
|
||||
window_id: u32; // window with mouse focus
|
||||
which: u32; // mouse instance id, 0 for touch events
|
||||
state: u32; // button state bitmask (bit 0 = left, 1 = middle, 2 = right)
|
||||
x: f32; // x position relative to window
|
||||
y: f32; // y position relative to window
|
||||
xrel: f32; // relative motion in x
|
||||
yrel: f32; // relative motion in y
|
||||
}
|
||||
|
||||
SDL_MouseButtonData :: struct {
|
||||
timestamp: u64; // event time in nanoseconds
|
||||
window_id: u32; // window with mouse focus
|
||||
which: u32; // mouse instance id, 0 for touch events
|
||||
button: u8; // button index (1 = left, 2 = middle, 3 = right)
|
||||
down: u8; // 1 if pressed, 0 if released
|
||||
clicks: u8; // 1 for single-click, 2 for double-click, etc.
|
||||
_: u8;
|
||||
x: f32; // x position relative to window
|
||||
y: f32; // y position relative to window
|
||||
}
|
||||
|
||||
SDL_MouseWheelData :: struct {
|
||||
timestamp: u64; // event time in nanoseconds
|
||||
window_id: u32; // window with mouse focus
|
||||
which: u32; // mouse instance id
|
||||
x: f32; // horizontal scroll (positive = right)
|
||||
y: f32; // vertical scroll (positive = away from user)
|
||||
direction: u32; // 0 = normal, 1 = flipped (multiply by -1 to normalize)
|
||||
mouse_x: f32; // mouse x position relative to window
|
||||
mouse_y: f32; // mouse y position relative to window
|
||||
}
|
||||
|
||||
SDL_Event :: enum struct { tag: u32; _: u32; payload: [30]u32; } {
|
||||
none :: 0;
|
||||
|
||||
// Application
|
||||
quit :: 0x100;
|
||||
|
||||
// Window
|
||||
window_shown :: 0x202: SDL_WindowData;
|
||||
window_hidden :: 0x203: SDL_WindowData;
|
||||
window_exposed :: 0x204: SDL_WindowData;
|
||||
window_moved :: 0x205: SDL_WindowData;
|
||||
window_resized :: 0x206: SDL_WindowData;
|
||||
window_minimized :: 0x209: SDL_WindowData;
|
||||
window_maximized :: 0x20A: SDL_WindowData;
|
||||
window_restored :: 0x20B: SDL_WindowData;
|
||||
window_mouse_enter :: 0x20C: SDL_WindowData;
|
||||
window_mouse_leave :: 0x20D: SDL_WindowData;
|
||||
window_focus_gained :: 0x20E: SDL_WindowData;
|
||||
window_focus_lost :: 0x20F: SDL_WindowData;
|
||||
window_close_requested :: 0x210: SDL_WindowData;
|
||||
window_destroyed :: 0x219: SDL_WindowData;
|
||||
|
||||
// Keyboard
|
||||
key_down :: 0x300: SDL_KeyData;
|
||||
key_up :: 0x301: SDL_KeyData;
|
||||
|
||||
// Mouse
|
||||
mouse_motion :: 0x400: SDL_MouseMotionData;
|
||||
mouse_button_down :: 0x401: SDL_MouseButtonData;
|
||||
mouse_button_up :: 0x402: SDL_MouseButtonData;
|
||||
mouse_wheel :: 0x403: SDL_MouseWheelData;
|
||||
}
|
||||
|
||||
// Functions
|
||||
SDL_Init :: (flags: u32) -> bool #foreign sdl3;
|
||||
SDL_Quit :: () -> void #foreign sdl3;
|
||||
SDL_CreateWindow :: (title: [:0]u8, w: s32, h: s32, flags: u64) -> *void #foreign sdl3;
|
||||
SDL_DestroyWindow :: (window: *void) -> void #foreign sdl3;
|
||||
SDL_GL_SetAttribute :: (attr: s32, value: s32) -> bool #foreign sdl3;
|
||||
SDL_GL_CreateContext :: (window: *void) -> *void #foreign sdl3;
|
||||
SDL_GL_DestroyContext :: (context: *void) -> bool #foreign sdl3;
|
||||
SDL_GL_MakeCurrent :: (window: *void, context: *void) -> bool #foreign sdl3;
|
||||
SDL_GL_SwapWindow :: (window: *void) -> bool #foreign sdl3;
|
||||
SDL_GL_SetSwapInterval :: (interval: s32) -> bool #foreign sdl3;
|
||||
SDL_GL_GetProcAddress :: (proc: [:0]u8) -> *void #foreign sdl3;
|
||||
SDL_PollEvent :: (event: *SDL_Event) -> bool #foreign sdl3;
|
||||
SDL_GetTicks :: () -> u64 #foreign sdl3;
|
||||
SDL_Delay :: (ms: u32) -> void #foreign sdl3;
|
||||
SDL_GetError :: () -> [*]u8 #foreign sdl3;
|
||||
Reference in New Issue
Block a user