Correct numerous issues with SDL3 and add missing procedures

This commit is contained in:
gingerBill
2026-06-23 12:03:36 +01:00
parent 0fdc0fd9da
commit 8f83598750
9 changed files with 97 additions and 45 deletions

View File

@@ -38,14 +38,14 @@ AudioFormat :: enum c.int {
F32 = F32LE when BYTEORDER == LIL_ENDIAN else F32BE,
}
@(require_results) AUDIO_BITSIZE :: proc "c" (x: AudioFormat) -> Uint16 { return (Uint16(x) & AUDIO_MASK_BITSIZE) }
@(require_results) AUDIO_BYTESIZE :: proc "c" (x: AudioFormat) -> Uint16 { return AUDIO_BITSIZE(x) / 8 }
@(require_results) AUDIO_ISFLOAT :: proc "c" (x: AudioFormat) -> bool { return (Uint16(x) & AUDIO_MASK_FLOAT) != 0 }
@(require_results) AUDIO_ISBIGENDIAN :: proc "c" (x: AudioFormat) -> bool { return (Uint16(x) & AUDIO_MASK_BIG_ENDIAN) != 0 }
@(require_results) AUDIO_ISLITTLEENDIAN :: proc "c" (x: AudioFormat) -> bool { return !AUDIO_ISBIGENDIAN(x) }
@(require_results) AUDIO_ISSIGNED :: proc "c" (x: AudioFormat) -> bool { return (Uint16(x) & AUDIO_MASK_SIGNED) != 0 }
@(require_results) AUDIO_ISINT :: proc "c" (x: AudioFormat) -> bool { return !AUDIO_ISFLOAT(x) }
@(require_results) AUDIO_ISUNSIGNED :: proc "c" (x: AudioFormat) -> bool { return !AUDIO_ISSIGNED(x) }
@(require_results) AUDIO_BITSIZE :: #force_inline proc "c" (x: AudioFormat) -> Uint16 { return (Uint16(x) & AUDIO_MASK_BITSIZE) }
@(require_results) AUDIO_BYTESIZE :: #force_inline proc "c" (x: AudioFormat) -> Uint16 { return AUDIO_BITSIZE(x) / 8 }
@(require_results) AUDIO_ISFLOAT :: #force_inline proc "c" (x: AudioFormat) -> bool { return (Uint16(x) & AUDIO_MASK_FLOAT) != 0 }
@(require_results) AUDIO_ISBIGENDIAN :: #force_inline proc "c" (x: AudioFormat) -> bool { return (Uint16(x) & AUDIO_MASK_BIG_ENDIAN) != 0 }
@(require_results) AUDIO_ISLITTLEENDIAN :: #force_inline proc "c" (x: AudioFormat) -> bool { return !AUDIO_ISBIGENDIAN(x) }
@(require_results) AUDIO_ISSIGNED :: #force_inline proc "c" (x: AudioFormat) -> bool { return (Uint16(x) & AUDIO_MASK_SIGNED) != 0 }
@(require_results) AUDIO_ISINT :: #force_inline proc "c" (x: AudioFormat) -> bool { return !AUDIO_ISFLOAT(x) }
@(require_results) AUDIO_ISUNSIGNED :: #force_inline proc "c" (x: AudioFormat) -> bool { return !AUDIO_ISSIGNED(x) }
AudioDeviceID :: distinct Uint32
@@ -60,7 +60,7 @@ AudioSpec :: struct {
}
@(require_results)
AUDIO_FRAMESIZE :: proc "c" (x: AudioSpec) -> c.int {
AUDIO_FRAMESIZE :: #force_inline proc "c" (x: AudioSpec) -> c.int {
return c.int(AUDIO_BYTESIZE(x.format)) * x.channels
}

View File

@@ -20,6 +20,7 @@ HINT_AUDIO_DEVICE_APP_ICON_NAME :: "SDL_AUDIO_DEVICE_APP_ICON_NAME"
HINT_AUDIO_DEVICE_SAMPLE_FRAMES :: "SDL_AUDIO_DEVICE_SAMPLE_FRAMES"
HINT_AUDIO_DEVICE_STREAM_NAME :: "SDL_AUDIO_DEVICE_STREAM_NAME"
HINT_AUDIO_DEVICE_STREAM_ROLE :: "SDL_AUDIO_DEVICE_STREAM_ROLE"
HINT_AUDIO_DEVICE_RAW_STREAM :: "SDL_AUDIO_DEVICE_RAW_STREAM"
HINT_AUDIO_DISK_INPUT_FILE :: "SDL_AUDIO_DISK_INPUT_FILE"
HINT_AUDIO_DISK_OUTPUT_FILE :: "SDL_AUDIO_DISK_OUTPUT_FILE"
HINT_AUDIO_DISK_TIMESCALE :: "SDL_AUDIO_DISK_TIMESCALE"
@@ -36,6 +37,7 @@ HINT_CPU_FEATURE_MASK :: "SDL_CPU_FEATURE_MASK"
HINT_JOYSTICK_DIRECTINPUT :: "SDL_JOYSTICK_DIRECTINPUT"
HINT_FILE_DIALOG_DRIVER :: "SDL_FILE_DIALOG_DRIVER"
HINT_DISPLAY_USABLE_BOUNDS :: "SDL_DISPLAY_USABLE_BOUNDS"
HINT_INVALID_PARAM_CHECKS :: "SDL_INVALID_PARAM_CHECKS"
HINT_EMSCRIPTEN_ASYNCIFY :: "SDL_EMSCRIPTEN_ASYNCIFY"
HINT_EMSCRIPTEN_CANVAS_SELECTOR :: "SDL_EMSCRIPTEN_CANVAS_SELECTOR"
HINT_EMSCRIPTEN_KEYBOARD_ELEMENT :: "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT"
@@ -56,6 +58,7 @@ HINT_GDK_TEXTINPUT_MAX_LENGTH :: "SDL_GDK_TEXTINPUT_MAX_LENGTH"
HINT_GDK_TEXTINPUT_SCOPE :: "SDL_GDK_TEXTINPUT_SCOPE"
HINT_GDK_TEXTINPUT_TITLE :: "SDL_GDK_TEXTINPUT_TITLE"
HINT_HIDAPI_LIBUSB :: "SDL_HIDAPI_LIBUSB"
HINT_HIDAPI_LIBUSB_GAMECUBE :: "SDL_HIDAPI_LIBUSB_GAMECUBE"
HINT_HIDAPI_LIBUSB_WHITELIST :: "SDL_HIDAPI_LIBUSB_WHITELIST"
HINT_HIDAPI_UDEV :: "SDL_HIDAPI_UDEV"
HINT_GPU_DRIVER :: "SDL_GPU_DRIVER"
@@ -247,6 +250,7 @@ HINT_WINDOWS_ENABLE_MENU_MNEMONICS :: "SDL_WINDOWS_ENABLE_MENU_MNEMONI
HINT_WINDOWS_ENABLE_MESSAGELOOP :: "SDL_WINDOWS_ENABLE_MESSAGELOOP"
HINT_WINDOWS_GAMEINPUT :: "SDL_WINDOWS_GAMEINPUT"
HINT_WINDOWS_RAW_KEYBOARD :: "SDL_WINDOWS_RAW_KEYBOARD"
HINT_WINDOWS_RAW_KEYBOARD_EXCLUDE_HOTKEYS :: "SDL_WINDOWS_RAW_KEYBOARD_EXCLUDE_HOTKEYS"
HINT_WINDOWS_FORCE_SEMAPHORE_KERNEL :: "SDL_WINDOWS_FORCE_SEMAPHORE_KERNEL"
HINT_WINDOWS_INTRESOURCE_ICON :: "SDL_WINDOWS_INTRESOURCE_ICON"
HINT_WINDOWS_INTRESOURCE_ICON_SMALL :: "SDL_WINDOWS_INTRESOURCE_ICON_SMALL"

View File

@@ -3,7 +3,7 @@ package sdl3
import "core:c"
main_func :: #type proc(argc: c.int, argv: [^]cstring)
main_func :: #type proc "c" (argc: c.int, argv: [^]cstring) -> c.int
@(default_calling_convention="c", link_prefix="SDL_")
foreign lib {

View File

@@ -1,8 +1,24 @@
package sdl3
import "core:c"
Mutex :: struct {}
RWLock :: struct {}
Semaphore :: struct {}
Condition :: struct {}
InitStatus :: enum c.int {
UNINITIALIZED,
INITIALIZING,
INITIALIZED,
UNINITIALIZING,
}
InitState :: struct {
status: AtomicInt,
thread: ThreadID,
reserved: rawptr,
}
@(default_calling_convention="c", link_prefix="SDL_", require_results)
foreign lib {
@@ -27,4 +43,15 @@ foreign lib {
TryWaitSemaphore :: proc(sem: ^Semaphore) -> bool ---
WaitSemaphore :: proc(sem: ^Semaphore) ---
WaitSemaphoreTimeout :: proc(sem: ^Semaphore, timeout_ms: Sint32) ---
CreateCondition :: proc() -> ^Condition ---
DestroyCondition :: proc(cond: ^Condition) ---
SignalCondition :: proc(cond: ^Condition) ---
BroadcastCondition :: proc(cond: ^Condition) ---
WaitCondition :: proc(cond: ^Condition, mutex: ^Mutex) ---
WaitConditionTimeout :: proc(cond: ^Condition, mutex: ^Mutex, timeout_ms: Sint32) -> bool ---
ShouldInit :: proc(state: ^InitState) -> bool ---
ShouldQuit :: proc(state: ^InitState) -> bool ---
SetInitialized :: proc(state: ^InitState, initialized: bool) ---
}

View File

@@ -75,20 +75,20 @@ DEFINE_PIXELFORMAT :: #force_inline proc "c" (type: PixelType, order: PackedOrde
return PixelFormat(((1 << 28) | (Uint32(type) << 24) | (Uint32(order) << 20) | (Uint32(layout) << 16) | (Uint32(bits) << 8) | (Uint32(bytes) << 0)))
}
@(require_results) PIXELFLAG :: proc "c" (format: PixelFormat) -> Uint32 { return ((Uint32(format) >> 28) & 0x0F) }
@(require_results) PIXELTYPE :: proc "c" (format: PixelFormat) -> PixelType { return PixelType((Uint32(format) >> 24) & 0x0F) }
@(require_results) PIXELORDER :: proc "c" (format: PixelFormat) -> PackedOrder { return PackedOrder((Uint32(format) >> 20) & 0x0F) }
@(require_results) PIXELLAYOUT :: proc "c" (format: PixelFormat) -> PackedLayout { return PackedLayout((Uint32(format) >> 16) & 0x0F) }
@(require_results) PIXELARRAYORDER :: proc "c" (format: PixelFormat) -> ArrayOrder { return ArrayOrder((Uint32(format) >> 20) & 0x0F) }
@(require_results) PIXELFLAG :: #force_inline proc "c" (format: PixelFormat) -> Uint32 { return ((Uint32(format) >> 28) & 0x0F) }
@(require_results) PIXELTYPE :: #force_inline proc "c" (format: PixelFormat) -> PixelType { return PixelType((Uint32(format) >> 24) & 0x0F) }
@(require_results) PIXELORDER :: #force_inline proc "c" (format: PixelFormat) -> PackedOrder { return PackedOrder((Uint32(format) >> 20) & 0x0F) }
@(require_results) PIXELLAYOUT :: #force_inline proc "c" (format: PixelFormat) -> PackedLayout { return PackedLayout((Uint32(format) >> 16) & 0x0F) }
@(require_results) PIXELARRAYORDER :: #force_inline proc "c" (format: PixelFormat) -> ArrayOrder { return ArrayOrder((Uint32(format) >> 20) & 0x0F) }
@(require_results)
BITSPERPIXEL :: proc "c" (format: PixelFormat) -> Uint32 {
BITSPERPIXEL :: #force_inline proc "c" (format: PixelFormat) -> Uint32 {
return ISPIXELFORMAT_FOURCC(format) ? 0 : ((Uint32(format) >> 8) & 0xFF)
}
@(require_results)
ISPIXELFORMAT_INDEXED :: proc "c" (format: PixelFormat) -> bool {
ISPIXELFORMAT_INDEXED :: #force_inline proc "c" (format: PixelFormat) -> bool {
return (!ISPIXELFORMAT_FOURCC(format) &&
((PIXELTYPE(format) == .INDEX1) ||
(PIXELTYPE(format) == .INDEX2) ||
@@ -98,7 +98,7 @@ ISPIXELFORMAT_INDEXED :: proc "c" (format: PixelFormat) -> bool {
@(require_results)
ISPIXELFORMAT_PACKED :: proc "c" (format: PixelFormat) -> bool {
ISPIXELFORMAT_PACKED :: #force_inline proc "c" (format: PixelFormat) -> bool {
return (!ISPIXELFORMAT_FOURCC(format) &&
((PIXELTYPE(format) == .PACKED8) ||
(PIXELTYPE(format) == .PACKED16) ||
@@ -106,7 +106,7 @@ ISPIXELFORMAT_PACKED :: proc "c" (format: PixelFormat) -> bool {
}
@(require_results)
ISPIXELFORMAT_ARRAY :: proc "c" (format: PixelFormat) -> bool {
ISPIXELFORMAT_ARRAY :: #force_inline proc "c" (format: PixelFormat) -> bool {
return (!ISPIXELFORMAT_FOURCC(format) &&
((PIXELTYPE(format) == .ARRAYU8) ||
(PIXELTYPE(format) == .ARRAYU16) ||
@@ -116,21 +116,21 @@ ISPIXELFORMAT_ARRAY :: proc "c" (format: PixelFormat) -> bool {
}
@(require_results)
ISPIXELFORMAT_10BIT :: proc "c" (format: PixelFormat) -> bool {
ISPIXELFORMAT_10BIT :: #force_inline proc "c" (format: PixelFormat) -> bool {
return (!ISPIXELFORMAT_FOURCC(format) &&
((PIXELTYPE(format) == .PACKED32) &&
(PIXELLAYOUT(format) == .LAYOUT_2101010)))
}
@(require_results)
ISPIXELFORMAT_FLOAT :: proc "c" (format: PixelFormat) -> bool {
ISPIXELFORMAT_FLOAT :: #force_inline proc "c" (format: PixelFormat) -> bool {
return (!ISPIXELFORMAT_FOURCC(format) &&
((PIXELTYPE(format) == .ARRAYF16) ||
(PIXELTYPE(format) == .ARRAYF32)))
}
@(require_results)
ISPIXELFORMAT_ALPHA :: proc "c" (format: PixelFormat) -> bool {
ISPIXELFORMAT_ALPHA :: #force_inline proc "c" (format: PixelFormat) -> bool {
return ((ISPIXELFORMAT_PACKED(format) &&
((PIXELORDER(format) == .ARGB) ||
(PIXELORDER(format) == .RGBA) ||
@@ -144,7 +144,7 @@ ISPIXELFORMAT_ALPHA :: proc "c" (format: PixelFormat) -> bool {
}
@(require_results)
ISPIXELFORMAT_FOURCC :: proc "c" (format: PixelFormat) -> bool {
ISPIXELFORMAT_FOURCC :: #force_inline proc "c" (format: PixelFormat) -> bool {
return format != nil && PIXELFLAG(format) != 1
}
@@ -369,63 +369,63 @@ ChromaLocation :: enum c.int {
@(require_results)
DEFINE_COLORSPACE :: proc "c" (type: ColorType, range: ColorRange, primaries: ColorPrimaries, transfer: TransferCharacteristics, matrix_: MatrixCoefficients, chroma: ChromaLocation) -> Colorspace {
DEFINE_COLORSPACE :: #force_inline proc "c" (type: ColorType, range: ColorRange, primaries: ColorPrimaries, transfer: TransferCharacteristics, matrix_: MatrixCoefficients, chroma: ChromaLocation) -> Colorspace {
return Colorspace((Uint32(type) << 28) | (Uint32(range) << 24) | (Uint32(chroma) << 20) |
(Uint32(primaries) << 10) | (Uint32(transfer) << 5) | (Uint32(matrix_) << 0))
}
@(require_results)
COLORSPACETYPE :: proc "c" (cspace: Colorspace) -> ColorType {
COLORSPACETYPE :: #force_inline proc "c" (cspace: Colorspace) -> ColorType {
return ColorType((Uint32(cspace) >> 28) & 0x0F)
}
@(require_results)
COLORSPACERANGE :: proc "c" (cspace: Colorspace) -> ColorRange {
COLORSPACERANGE :: #force_inline proc "c" (cspace: Colorspace) -> ColorRange {
return ColorRange((Uint32(cspace) >> 24) & 0x0F)
}
@(require_results)
COLORSPACECHROMA :: proc "c" (cspace: Colorspace) -> ChromaLocation {
COLORSPACECHROMA :: #force_inline proc "c" (cspace: Colorspace) -> ChromaLocation {
return ChromaLocation((Uint32(cspace) >> 20) & 0x0F)
}
@(require_results)
COLORSPACEPRIMARIES :: proc "c" (cspace: Colorspace) -> ColorPrimaries {
COLORSPACEPRIMARIES :: #force_inline proc "c" (cspace: Colorspace) -> ColorPrimaries {
return ColorPrimaries((Uint32(cspace) >> 10) & 0x1F)
}
@(require_results)
COLORSPACETRANSFER :: proc "c" (cspace: Colorspace) -> TransferCharacteristics {
COLORSPACETRANSFER :: #force_inline proc "c" (cspace: Colorspace) -> TransferCharacteristics {
return TransferCharacteristics((Uint32(cspace) >> 5) & 0x1F)
}
@(require_results)
COLORSPACEMATRIX :: proc "c" (cspace: Colorspace) -> MatrixCoefficients {
COLORSPACEMATRIX :: #force_inline proc "c" (cspace: Colorspace) -> MatrixCoefficients {
return MatrixCoefficients(Uint32(cspace) & 0x1F)
}
@(require_results)
ISCOLORSPACE_MATRIX_BT601 :: proc "c" (cspace: Colorspace) -> bool {
ISCOLORSPACE_MATRIX_BT601 :: #force_inline proc "c" (cspace: Colorspace) -> bool {
return COLORSPACEMATRIX(cspace) == .BT601 || COLORSPACEMATRIX(cspace) == .BT470BG
}
@(require_results)
ISCOLORSPACE_MATRIX_BT709 :: proc "c" (cspace: Colorspace) -> bool {
ISCOLORSPACE_MATRIX_BT709 :: #force_inline proc "c" (cspace: Colorspace) -> bool {
return COLORSPACEMATRIX(cspace) == .BT709
}
@(require_results)
ISCOLORSPACE_MATRIX_BT2020_NCL :: proc "c" (cspace: Colorspace) -> bool {
ISCOLORSPACE_MATRIX_BT2020_NCL :: #force_inline proc "c" (cspace: Colorspace) -> bool {
return COLORSPACEMATRIX(cspace) == .BT2020_NCL
}
@(require_results)
ISCOLORSPACE_LIMITED_RANGE :: proc "c" (cspace: Colorspace) -> bool {
ISCOLORSPACE_LIMITED_RANGE :: #force_inline proc "c" (cspace: Colorspace) -> bool {
return COLORSPACERANGE(cspace) != .FULL
}
@(require_results)
ISCOLORSPACE_FULL_RANGE :: proc "c" (cspace: Colorspace) -> bool {
ISCOLORSPACE_FULL_RANGE :: #force_inline proc "c" (cspace: Colorspace) -> bool {
return COLORSPACERANGE(cspace) == .FULL
}

View File

@@ -24,38 +24,51 @@ RectToFRect :: #force_inline proc "c" (rect: Rect, frect: ^FRect) {
@(require_results)
PointInRect :: proc "c" (p: Point, r: Rect) -> bool {
PointInRect :: #force_inline proc "c" (p: Point, r: Rect) -> bool {
return ( (p.x >= r.x) && (p.x < (r.x + r.w)) &&
(p.y >= r.y) && (p.y < (r.y + r.h)) )
}
@(require_results)
PointInRectFloat :: proc "c" (p: FPoint, r: FRect) -> bool {
PointInRectFloat :: #force_inline proc "c" (p: FPoint, r: FRect) -> bool {
return ( (p.x >= r.x) && (p.x <= (r.x + r.w)) &&
(p.y >= r.y) && (p.y <= (r.y + r.h)) )
}
@(require_results)
RectEmpty :: proc "c" (r: Rect) -> bool {
RectEmpty :: #force_inline proc "c" (r: Rect) -> bool {
return r.w <= 0 || r.h <= 0
}
@(require_results)
RectEqual :: proc "c" (a, b: Rect) -> bool {
RectEqual :: #force_inline proc "c" (a, b: Rect) -> bool {
return a == b
}
@(require_results)
RectsEqualEpsilon :: #force_inline proc "c" (a, b: FRect, epsilon: f32) -> bool {
return abs(a.x - b.x) <= epsilon &&
abs(a.y - b.y) <= epsilon &&
abs(a.w - b.w) <= epsilon &&
abs(a.h - b.h) <= epsilon
}
@(require_results)
RectsEqualFloat :: #force_inline proc "c" (a, b: FRect) -> bool {
return RectsEqualEpsilon(a, b, FLT_EPSILON)
}
@(default_calling_convention="c", link_prefix="SDL_", require_results)
foreign lib {
HasRectIntersection :: proc(#by_ptr A, B: Rect) -> bool ---
GetRectIntersection :: proc(#by_ptr A, B: Rect, result: ^Rect) -> bool ---
GetRectUnion :: proc(#by_ptr A, B: Rect, result: ^Rect) -> bool ---
GetRectEnclosingPoints :: proc(points: [^]Point, count: c.int, #by_ptr clip: Rect, result: ^Rect) -> bool ---
GetRectEnclosingPoints :: proc(points: [^]Point, count: c.int, clip: Maybe(^Rect), result: ^Rect) -> bool ---
GetRectAndLineIntersection :: proc(#by_ptr rect: Rect, X1, Y1, X2, Y2: ^c.int) -> bool ---
HasRectIntersectionFloat :: proc(#by_ptr A, B: FRect) -> bool ---
GetRectIntersectionFloat :: proc(#by_ptr A, B: FRect, result: ^FRect) -> bool ---
GetRectUnionFloat :: proc(#by_ptr A, B: FRect, result: ^FRect) -> bool ---
GetRectEnclosingPointsFloat :: proc(points: [^]FPoint, count: c.int, #by_ptr clip: FRect, result: ^FRect) -> bool ---
GetRectEnclosingPointsFloat :: proc(points: [^]FPoint, count: c.int, clip: Maybe(^FRect), result: ^FRect) -> bool ---
GetRectAndLineIntersectionFloat :: proc(#by_ptr rect: FRect, X1, Y1, X2, Y2: ^f32) -> bool ---
}

View File

@@ -276,5 +276,5 @@ foreign lib {
CreateGPURenderState :: proc(renderer: ^Renderer, #by_ptr createinfo: GPURenderStateCreateInfo) -> ^GPURenderState ---
SetGPURenderStateFragmentUniforms :: proc(state: ^GPURenderState, slot_index: Uint32, data: rawptr, length: Uint32) -> bool ---
SetGPURenderState :: proc(renderer: ^Renderer, state: ^GPURenderState) -> bool ---
DestroyGPURenderState :: proc(renderer: ^Renderer) ---
DestroyGPURenderState :: proc(renderer: ^GPURenderer) ---
}

View File

@@ -6,7 +6,7 @@ import "core:c"
import win32 "core:sys/windows"
WindowsMessageHook :: #type proc(userdata: rawptr, msg: ^win32.MSG) -> bool
WindowsMessageHook :: #type proc "c" (userdata: rawptr, msg: ^win32.MSG) -> bool
@(default_calling_convention="c", link_prefix="SDL_")
foreign lib {
@@ -46,6 +46,11 @@ foreign lib {
RequestAndroidPermissionCallback :: #type proc "c" (userdata: rawptr, permission: cstring, granted: bool)
AndroidExternalStorageFlags :: distinct bit_set[AndroidExternalStorageFlag; Uint32]
AndroidExternalStorageFlag :: enum Uint32 {
Read,
Write,
}
@(default_calling_convention="c", link_prefix="SDL_", require_results)
foreign lib {
@@ -56,7 +61,7 @@ foreign lib {
IsDeXMode :: proc() -> bool ---
SendAndroidBackButton :: proc() ---
GetAndroidInternalStoragePath :: proc() -> cstring ---
GetAndroidExternalStorageState :: proc() -> Uint32 ---
GetAndroidExternalStorageState :: proc() -> AndroidExternalStorageFlags ---
GetAndroidExternalStoragePath :: proc() -> cstring ---
GetAndroidCachePath :: proc() -> cstring ---
RequestAndroidPermission :: proc(permission: cstring, cb: RequestAndroidPermissionCallback, userdata: rawptr) -> bool ---

View File

@@ -151,7 +151,7 @@ EGLSurface :: distinct rawptr
EGLAttrib :: distinct uintptr
EGLint :: distinct c.int
EGLAttribArrayCallback :: #type proc "c" (userdata: rawptr) -> ^EGLint
EGLAttribArrayCallback :: #type proc "c" (userdata: rawptr) -> [^]EGLint
EGLIntArrayCallback :: #type proc "c" (userdata: rawptr, display: EGLDisplay, config: EGLConfig) -> [^]EGLint
GLAttr :: enum c.int {
@@ -256,9 +256,12 @@ GL_CONTEXT_RESET_LOSE_CONTEXT :: GLContextResetNotification{.LOSE_CONTEXT}
PROP_DISPLAY_HDR_ENABLED_BOOLEAN :: "SDL.display.HDR_enabled"
PROP_DISPLAY_KMSDRM_PANEL_ORIENTATION_NUMBER :: "SDL.display.KMSDRM.panel_orientation"
PROP_DISPLAY_WAYLAND_WL_OUTPUT_POINTER :: "SDL.display.wayland.wl_output"
PROP_DISPLAY_WINDOWS_HMONITOR_POINTER :: "SDL.display.windows.hmonitor"
PROP_WINDOW_CREATE_ALWAYS_ON_TOP_BOOLEAN :: "SDL.window.create.always_on_top"
PROP_WINDOW_CREATE_BORDERLESS_BOOLEAN :: "SDL.window.create.borderless"
PROP_WINDOW_CREATE_CONSTRAIN_POPUP_BOOLEAN :: "SDL.window.create.constrain_popup"
PROP_WINDOW_CREATE_FOCUSABLE_BOOLEAN :: "SDL.window.create.focusable"
PROP_WINDOW_CREATE_EXTERNAL_GRAPHICS_CONTEXT_BOOLEAN :: "SDL.window.create.external_graphics_context"
PROP_WINDOW_CREATE_FLAGS_NUMBER :: "SDL.window.create.flags"