335 lines
9.7 KiB
Plaintext
335 lines
9.7 KiB
Plaintext
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;
|