Files
odin-sdl3-static-linking/sdl3/sdl3_video.odin
2025-12-15 12:37:50 -05:00

464 lines
28 KiB
Odin

package sdl3
import "core:c"
DisplayID :: distinct Uint32
WindowID :: distinct Uint32
PROP_GLOBAL_VIDEO_WAYLAND_WL_DISPLAY_POINTER :: "SDL.video.wayland.wl_display"
SystemTheme :: enum c.int {
UNKNOWN, /**< Unknown system theme */
LIGHT, /**< Light colored system theme */
DARK, /**< Dark colored system theme */
}
DisplayModeData :: struct {}
DisplayMode :: struct {
displayID: DisplayID, /**< the display this mode is associated with */
format: PixelFormat, /**< pixel format */
w: c.int, /**< width */
h: c.int, /**< height */
pixel_density: f32, /**< scale converting size to pixels (e.g. a 1920x1080 mode with 2.0 scale would have 3840x2160 pixels) */
refresh_rate: f32, /**< refresh rate (or 0.0f for unspecified) */
refresh_rate_numerator: c.int, /**< precise refresh rate numerator (or 0 for unspecified) */
refresh_rate_denominator: c.int, /**< precise refresh rate denominator */
internal: ^DisplayModeData, /**< Private */
}
DisplayOrientation :: enum c.int {
UNKNOWN, /**< The display orientation can't be determined */
LANDSCAPE, /**< The display is in landscape mode, with the right side up, relative to portrait mode */
LANDSCAPE_FLIPPED, /**< The display is in landscape mode, with the left side up, relative to portrait mode */
PORTRAIT, /**< The display is in portrait mode */
PORTRAIT_FLIPPED, /**< The display is in portrait mode, upside down */
}
Window :: struct {}
WindowFlags :: distinct bit_set[WindowFlag; Uint64]
WindowFlag :: enum Uint64 {
FULLSCREEN = 0,
OPENGL = 1,
OCCLUDED = 2,
HIDDEN = 3,
BORDERLESS = 4,
RESIZABLE = 5,
MINIMIZED = 6,
MAXIMIZED = 7,
MOUSE_GRABBED = 8,
INPUT_FOCUS = 9,
MOUSE_FOCUS = 10,
EXTERNAL = 11,
MODAL = 12,
HIGH_PIXEL_DENSITY = 13,
MOUSE_CAPTURE = 14,
MOUSE_RELATIVE_MODE = 15,
ALWAYS_ON_TOP = 16,
UTILITY = 17,
TOOLTIP = 18,
POPUP_MENU = 19,
KEYBOARD_GRABBED = 20,
VULKAN = 28,
METAL = 29,
TRANSPARENT = 30,
NOT_FOCUSABLE = 31,
}
WINDOW_FULLSCREEN :: WindowFlags{.FULLSCREEN} /**< window is in fullscreen mode */
WINDOW_OPENGL :: WindowFlags{.OPENGL} /**< window usable with OpenGL context */
WINDOW_OCCLUDED :: WindowFlags{.OCCLUDED} /**< window is occluded */
WINDOW_HIDDEN :: WindowFlags{.HIDDEN} /**< window is neither mapped onto the desktop nor shown in the taskbar/dock/window list; SDL_ShowWindow() is required for it to become visible */
WINDOW_BORDERLESS :: WindowFlags{.BORDERLESS} /**< no window decoration */
WINDOW_RESIZABLE :: WindowFlags{.RESIZABLE} /**< window can be resized */
WINDOW_MINIMIZED :: WindowFlags{.MINIMIZED} /**< window is minimized */
WINDOW_MAXIMIZED :: WindowFlags{.MAXIMIZED} /**< window is maximized */
WINDOW_MOUSE_GRABBED :: WindowFlags{.MOUSE_GRABBED} /**< window has grabbed mouse input */
WINDOW_INPUT_FOCUS :: WindowFlags{.INPUT_FOCUS} /**< window has input focus */
WINDOW_MOUSE_FOCUS :: WindowFlags{.MOUSE_FOCUS} /**< window has mouse focus */
WINDOW_EXTERNAL :: WindowFlags{.EXTERNAL} /**< window not created by SDL */
WINDOW_MODAL :: WindowFlags{.MODAL} /**< window is modal */
WINDOW_HIGH_PIXEL_DENSITY :: WindowFlags{.HIGH_PIXEL_DENSITY} /**< window uses high pixel density back buffer if possible */
WINDOW_MOUSE_CAPTURE :: WindowFlags{.MOUSE_CAPTURE} /**< window has mouse captured (unrelated to MOUSE_GRABBED) */
WINDOW_MOUSE_RELATIVE_MODE :: WindowFlags{.MOUSE_RELATIVE_MODE} /**< window has relative mode enabled */
WINDOW_ALWAYS_ON_TOP :: WindowFlags{.ALWAYS_ON_TOP} /**< window should always be above others */
WINDOW_UTILITY :: WindowFlags{.UTILITY} /**< window should be treated as a utility window, not showing in the task bar and window list */
WINDOW_TOOLTIP :: WindowFlags{.TOOLTIP} /**< window should be treated as a tooltip and does not get mouse or keyboard focus, requires a parent window */
WINDOW_POPUP_MENU :: WindowFlags{.POPUP_MENU} /**< window should be treated as a popup menu, requires a parent window */
WINDOW_KEYBOARD_GRABBED :: WindowFlags{.KEYBOARD_GRABBED} /**< window has grabbed keyboard input */
WINDOW_VULKAN :: WindowFlags{.VULKAN} /**< window usable for Vulkan surface */
WINDOW_METAL :: WindowFlags{.METAL} /**< window usable for Metal view */
WINDOW_TRANSPARENT :: WindowFlags{.TRANSPARENT} /**< window with transparent buffer */
WINDOW_NOT_FOCUSABLE :: WindowFlags{.NOT_FOCUSABLE} /**< window should not be focusable */
WINDOWPOS_UNDEFINED_MASK :: 0x1FFF0000
@(require_results)
WINDOWPOS_UNDEFINED_DISPLAY :: proc "c" (X: c.int) -> c.int {
return WINDOWPOS_UNDEFINED_MASK|(X)
}
WINDOWPOS_UNDEFINED :: WINDOWPOS_UNDEFINED_MASK|0
@(require_results)
WINDOWPOS_ISUNDEFINED :: proc "c" (X: c.int) -> bool {
return (Uint32(X)&0xFFFF0000) == WINDOWPOS_UNDEFINED_MASK
}
WINDOWPOS_CENTERED_MASK :: 0x2FFF0000
@(require_results)
WINDOWPOS_CENTERED_DISPLAY :: proc "c" (X: c.int) -> c.int {
return WINDOWPOS_CENTERED_MASK|(X)
}
WINDOWPOS_CENTERED :: WINDOWPOS_CENTERED_MASK|0
@(require_results)
WINDOWPOS_ISCENTERED :: proc "c" (X: c.int) -> bool {
return (Uint32(X)&0xFFFF0000) == WINDOWPOS_CENTERED_MASK
}
FlashOperation :: enum c.int {
CANCEL, /**< Cancel any window flash state */
BRIEFLY, /**< Flash the window briefly to get attention */
UNTIL_FOCUSED, /**< Flash the window until it gets focus */
}
GLContextState :: struct {}
GLContext :: ^GLContextState
EGLDisplay :: distinct rawptr
EGLConfig :: distinct rawptr
EGLSurface :: distinct rawptr
EGLAttrib :: distinct uintptr
EGLint :: distinct c.int
EGLAttribArrayCallback :: #type proc "c" (userdata: rawptr) -> ^EGLint
EGLIntArrayCallback :: #type proc "c" (userdata: rawptr, display: EGLDisplay, config: EGLConfig) -> [^]EGLint
GLAttr :: enum c.int {
RED_SIZE, /**< the minimum number of bits for the red channel of the color buffer; defaults to 8. */
GREEN_SIZE, /**< the minimum number of bits for the green channel of the color buffer; defaults to 8. */
BLUE_SIZE, /**< the minimum number of bits for the blue channel of the color buffer; defaults to 8. */
ALPHA_SIZE, /**< the minimum number of bits for the alpha channel of the color buffer; defaults to 8. */
BUFFER_SIZE, /**< the minimum number of bits for frame buffer size; defaults to 0. */
DOUBLEBUFFER, /**< whether the output is single or double buffered; defaults to double buffering on. */
DEPTH_SIZE, /**< the minimum number of bits in the depth buffer; defaults to 16. */
STENCIL_SIZE, /**< the minimum number of bits in the stencil buffer; defaults to 0. */
ACCUM_RED_SIZE, /**< the minimum number of bits for the red channel of the accumulation buffer; defaults to 0. */
ACCUM_GREEN_SIZE, /**< the minimum number of bits for the green channel of the accumulation buffer; defaults to 0. */
ACCUM_BLUE_SIZE, /**< the minimum number of bits for the blue channel of the accumulation buffer; defaults to 0. */
ACCUM_ALPHA_SIZE, /**< the minimum number of bits for the alpha channel of the accumulation buffer; defaults to 0. */
STEREO, /**< whether the output is stereo 3D; defaults to off. */
MULTISAMPLEBUFFERS, /**< the number of buffers used for multisample anti-aliasing; defaults to 0. */
MULTISAMPLESAMPLES, /**< the number of samples used around the current pixel used for multisample anti-aliasing. */
ACCELERATED_VISUAL, /**< set to 1 to require hardware acceleration, set to 0 to force software rendering; defaults to allow either. */
RETAINED_BACKING, /**< not used (deprecated). */
CONTEXT_MAJOR_VERSION, /**< OpenGL context major version. */
CONTEXT_MINOR_VERSION, /**< OpenGL context minor version. */
CONTEXT_FLAGS, /**< some combination of 0 or more of elements of the SDL_GLContextFlag enumeration; defaults to 0. */
CONTEXT_PROFILE_MASK, /**< type of GL context (Core, Compatibility, ES). See SDL_GLProfile; default value depends on platform. */
SHARE_WITH_CURRENT_CONTEXT, /**< OpenGL context sharing; defaults to 0. */
FRAMEBUFFER_SRGB_CAPABLE, /**< requests sRGB capable visual; defaults to 0. */
CONTEXT_RELEASE_BEHAVIOR, /**< sets context the release behavior. See SDL_GLContextReleaseFlag; defaults to FLUSH. */
CONTEXT_RESET_NOTIFICATION, /**< set context reset notification. See SDL_GLContextResetNotification; defaults to NO_NOTIFICATION. */
CONTEXT_NO_ERROR,
FLOATBUFFERS,
EGL_PLATFORM,
}
GL_RED_SIZE :: GLAttr.RED_SIZE
GL_GREEN_SIZE :: GLAttr.GREEN_SIZE
GL_BLUE_SIZE :: GLAttr.BLUE_SIZE
GL_ALPHA_SIZE :: GLAttr.ALPHA_SIZE
GL_BUFFER_SIZE :: GLAttr.BUFFER_SIZE
GL_DOUBLEBUFFER :: GLAttr.DOUBLEBUFFER
GL_DEPTH_SIZE :: GLAttr.DEPTH_SIZE
GL_STENCIL_SIZE :: GLAttr.STENCIL_SIZE
GL_ACCUM_RED_SIZE :: GLAttr.ACCUM_RED_SIZE
GL_ACCUM_GREEN_SIZE :: GLAttr.ACCUM_GREEN_SIZE
GL_ACCUM_BLUE_SIZE :: GLAttr.ACCUM_BLUE_SIZE
GL_ACCUM_ALPHA_SIZE :: GLAttr.ACCUM_ALPHA_SIZE
GL_STEREO :: GLAttr.STEREO
GL_MULTISAMPLEBUFFERS :: GLAttr.MULTISAMPLEBUFFERS
GL_MULTISAMPLESAMPLES :: GLAttr.MULTISAMPLESAMPLES
GL_ACCELERATED_VISUAL :: GLAttr.ACCELERATED_VISUAL
GL_RETAINED_BACKING :: GLAttr.RETAINED_BACKING
GL_CONTEXT_MAJOR_VERSION :: GLAttr.CONTEXT_MAJOR_VERSION
GL_CONTEXT_MINOR_VERSION :: GLAttr.CONTEXT_MINOR_VERSION
GL_CONTEXT_FLAGS :: GLAttr.CONTEXT_FLAGS
GL_CONTEXT_PROFILE_MASK :: GLAttr.CONTEXT_PROFILE_MASK
GL_SHARE_WITH_CURRENT_CONTEXT :: GLAttr.SHARE_WITH_CURRENT_CONTEXT
GL_FRAMEBUFFER_SRGB_CAPABLE :: GLAttr.FRAMEBUFFER_SRGB_CAPABLE
GL_CONTEXT_RELEASE_BEHAVIOR :: GLAttr.CONTEXT_RELEASE_BEHAVIOR
GL_CONTEXT_RESET_NOTIFICATION :: GLAttr.CONTEXT_RESET_NOTIFICATION
GL_CONTEXT_NO_ERROR :: GLAttr.CONTEXT_NO_ERROR
GL_FLOATBUFFERS :: GLAttr.FLOATBUFFERS
GL_EGL_PLATFORM :: GLAttr.EGL_PLATFORM
GLProfile :: distinct bit_set[GLProfileFlag; Uint32]
GLProfileFlag :: enum Uint32 {
CORE = 0, /**< OpenGL Core Profile context */
COMPATIBILITY = 1, /**< OpenGL Compatibility Profile context */
ES = 2, /**< GLX_CONTEXT_ES2_PROFILE_BIT_EXT */
}
GL_CONTEXT_PROFILE_CORE :: GLProfile{.CORE} /**< OpenGL Core Profile context */
GL_CONTEXT_PROFILE_COMPATIBILITY :: GLProfile{.COMPATIBILITY} /**< OpenGL Compatibility Profile context */
GL_CONTEXT_PROFILE_ES :: GLProfile{.ES} /**< GLX_CONTEXT_ES2_PROFILE_BIT_EXT */
GLContextFlag :: distinct bit_set[GLContextFlagBit; Uint32]
GLContextFlagBit :: enum Uint32 {
DEBUG = 0,
FORWARD_COMPATIBLE = 1,
ROBUST_ACCESS = 2,
RESET_ISOLATION = 3,
}
GL_CONTEXT_DEBUG_FLAG :: GLContextFlag{.DEBUG}
GL_CONTEXT_FORWARD_COMPATIBLE_FLAG :: GLContextFlag{.FORWARD_COMPATIBLE}
GL_CONTEXT_ROBUST_ACCESS_FLAG :: GLContextFlag{.ROBUST_ACCESS}
GL_CONTEXT_RESET_ISOLATION_FLAG :: GLContextFlag{.RESET_ISOLATION}
GLContextReleaseFlag :: distinct bit_set[GLContextReleaseFlagBit; Uint32]
GLContextReleaseFlagBit :: enum Uint32 {
BEHAVIOR_FLUSH = 0,
}
GL_CONTEXT_RELEASE_BEHAVIOR_NONE :: GLContextReleaseFlag{}
GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH :: GLContextReleaseFlag{.BEHAVIOR_FLUSH}
GLContextResetNotification :: distinct bit_set[GLContextResetNotificationFlag; Uint32]
GLContextResetNotificationFlag :: enum Uint32 {
LOSE_CONTEXT = 0,
}
GL_CONTEXT_RESET_NO_NOTIFICATION :: GLContextResetNotification{}
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_WINDOW_CREATE_ALWAYS_ON_TOP_BOOLEAN :: "SDL.window.create.always_on_top"
PROP_WINDOW_CREATE_BORDERLESS_BOOLEAN :: "SDL.window.create.borderless"
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"
PROP_WINDOW_CREATE_FULLSCREEN_BOOLEAN :: "SDL.window.create.fullscreen"
PROP_WINDOW_CREATE_HEIGHT_NUMBER :: "SDL.window.create.height"
PROP_WINDOW_CREATE_HIDDEN_BOOLEAN :: "SDL.window.create.hidden"
PROP_WINDOW_CREATE_HIGH_PIXEL_DENSITY_BOOLEAN :: "SDL.window.create.high_pixel_density"
PROP_WINDOW_CREATE_MAXIMIZED_BOOLEAN :: "SDL.window.create.maximized"
PROP_WINDOW_CREATE_MENU_BOOLEAN :: "SDL.window.create.menu"
PROP_WINDOW_CREATE_METAL_BOOLEAN :: "SDL.window.create.metal"
PROP_WINDOW_CREATE_MINIMIZED_BOOLEAN :: "SDL.window.create.minimized"
PROP_WINDOW_CREATE_MODAL_BOOLEAN :: "SDL.window.create.modal"
PROP_WINDOW_CREATE_MOUSE_GRABBED_BOOLEAN :: "SDL.window.create.mouse_grabbed"
PROP_WINDOW_CREATE_OPENGL_BOOLEAN :: "SDL.window.create.opengl"
PROP_WINDOW_CREATE_PARENT_POINTER :: "SDL.window.create.parent"
PROP_WINDOW_CREATE_RESIZABLE_BOOLEAN :: "SDL.window.create.resizable"
PROP_WINDOW_CREATE_TITLE_STRING :: "SDL.window.create.title"
PROP_WINDOW_CREATE_TRANSPARENT_BOOLEAN :: "SDL.window.create.transparent"
PROP_WINDOW_CREATE_TOOLTIP_BOOLEAN :: "SDL.window.create.tooltip"
PROP_WINDOW_CREATE_UTILITY_BOOLEAN :: "SDL.window.create.utility"
PROP_WINDOW_CREATE_VULKAN_BOOLEAN :: "SDL.window.create.vulkan"
PROP_WINDOW_CREATE_WIDTH_NUMBER :: "SDL.window.create.width"
PROP_WINDOW_CREATE_X_NUMBER :: "SDL.window.create.x"
PROP_WINDOW_CREATE_Y_NUMBER :: "SDL.window.create.y"
PROP_WINDOW_CREATE_COCOA_WINDOW_POINTER :: "SDL.window.create.cocoa.window"
PROP_WINDOW_CREATE_COCOA_VIEW_POINTER :: "SDL.window.create.cocoa.view"
PROP_WINDOW_CREATE_WAYLAND_SURFACE_ROLE_CUSTOM_BOOLEAN :: "SDL.window.create.wayland.surface_role_custom"
PROP_WINDOW_CREATE_WAYLAND_CREATE_EGL_WINDOW_BOOLEAN :: "SDL.window.create.wayland.create_egl_window"
PROP_WINDOW_CREATE_WAYLAND_WL_SURFACE_POINTER :: "SDL.window.create.wayland.wl_surface"
PROP_WINDOW_CREATE_WIN32_HWND_POINTER :: "SDL.window.create.win32.hwnd"
PROP_WINDOW_CREATE_WIN32_PIXEL_FORMAT_HWND_POINTER :: "SDL.window.create.win32.pixel_format_hwnd"
PROP_WINDOW_CREATE_X11_WINDOW_NUMBER :: "SDL.window.create.x11.window"
PROP_WINDOW_SHAPE_POINTER :: "SDL.window.shape"
PROP_WINDOW_HDR_ENABLED_BOOLEAN :: "SDL.window.HDR_enabled"
PROP_WINDOW_SDR_WHITE_LEVEL_FLOAT :: "SDL.window.SDR_white_level"
PROP_WINDOW_HDR_HEADROOM_FLOAT :: "SDL.window.HDR_headroom"
PROP_WINDOW_ANDROID_WINDOW_POINTER :: "SDL.window.android.window"
PROP_WINDOW_ANDROID_SURFACE_POINTER :: "SDL.window.android.surface"
PROP_WINDOW_UIKIT_WINDOW_POINTER :: "SDL.window.uikit.window"
PROP_WINDOW_UIKIT_METAL_VIEW_TAG_NUMBER :: "SDL.window.uikit.metal_view_tag"
PROP_WINDOW_UIKIT_OPENGL_FRAMEBUFFER_NUMBER :: "SDL.window.uikit.opengl.framebuffer"
PROP_WINDOW_UIKIT_OPENGL_RENDERBUFFER_NUMBER :: "SDL.window.uikit.opengl.renderbuffer"
PROP_WINDOW_UIKIT_OPENGL_RESOLVE_FRAMEBUFFER_NUMBER :: "SDL.window.uikit.opengl.resolve_framebuffer"
PROP_WINDOW_KMSDRM_DEVICE_INDEX_NUMBER :: "SDL.window.kmsdrm.dev_index"
PROP_WINDOW_KMSDRM_DRM_FD_NUMBER :: "SDL.window.kmsdrm.drm_fd"
PROP_WINDOW_KMSDRM_GBM_DEVICE_POINTER :: "SDL.window.kmsdrm.gbm_dev"
PROP_WINDOW_COCOA_WINDOW_POINTER :: "SDL.window.cocoa.window"
PROP_WINDOW_COCOA_METAL_VIEW_TAG_NUMBER :: "SDL.window.cocoa.metal_view_tag"
PROP_WINDOW_OPENVR_OVERLAY_ID :: "SDL.window.openvr.overlay_id"
PROP_WINDOW_VIVANTE_DISPLAY_POINTER :: "SDL.window.vivante.display"
PROP_WINDOW_VIVANTE_WINDOW_POINTER :: "SDL.window.vivante.window"
PROP_WINDOW_VIVANTE_SURFACE_POINTER :: "SDL.window.vivante.surface"
PROP_WINDOW_WIN32_HWND_POINTER :: "SDL.window.win32.hwnd"
PROP_WINDOW_WIN32_HDC_POINTER :: "SDL.window.win32.hdc"
PROP_WINDOW_WIN32_INSTANCE_POINTER :: "SDL.window.win32.instance"
PROP_WINDOW_WAYLAND_DISPLAY_POINTER :: "SDL.window.wayland.display"
PROP_WINDOW_WAYLAND_SURFACE_POINTER :: "SDL.window.wayland.surface"
PROP_WINDOW_WAYLAND_VIEWPORT_POINTER :: "SDL.window.wayland.viewport"
PROP_WINDOW_WAYLAND_EGL_WINDOW_POINTER :: "SDL.window.wayland.egl_window"
PROP_WINDOW_WAYLAND_XDG_SURFACE_POINTER :: "SDL.window.wayland.xdg_surface"
PROP_WINDOW_WAYLAND_XDG_TOPLEVEL_POINTER :: "SDL.window.wayland.xdg_toplevel"
PROP_WINDOW_WAYLAND_XDG_TOPLEVEL_EXPORT_HANDLE_STRING :: "SDL.window.wayland.xdg_toplevel_export_handle"
PROP_WINDOW_WAYLAND_XDG_POPUP_POINTER :: "SDL.window.wayland.xdg_popup"
PROP_WINDOW_WAYLAND_XDG_POSITIONER_POINTER :: "SDL.window.wayland.xdg_positioner"
PROP_WINDOW_X11_DISPLAY_POINTER :: "SDL.window.x11.display"
PROP_WINDOW_X11_SCREEN_NUMBER :: "SDL.window.x11.screen"
PROP_WINDOW_X11_WINDOW_NUMBER :: "SDL.window.x11.window"
WINDOW_SURFACE_VSYNC_DISABLED :: 0
WINDOW_SURFACE_VSYNC_ADAPTIVE :: -1
@(default_calling_convention="c", link_prefix="SDL_")
foreign lib {
GetNumVideoDrivers :: proc() -> c.int ---
GetVideoDriver :: proc(index: c.int) -> cstring ---
GetCurrentVideoDriver :: proc() -> cstring ---
GetSystemTheme :: proc() -> SystemTheme ---
GetDisplays :: proc(count: ^c.int) -> [^]DisplayID ---
GetPrimaryDisplay :: proc() -> DisplayID ---
GetDisplayProperties :: proc(displayID: DisplayID) -> PropertiesID ---
GetDisplayName :: proc(displayID: DisplayID) -> cstring ---
GetDisplayBounds :: proc(displayID: DisplayID, rect: ^Rect) -> bool ---
GetDisplayUsableBounds :: proc(displayID: DisplayID, rect: ^Rect) -> bool ---
GetNaturalDisplayOrientation :: proc(displayID: DisplayID) -> DisplayOrientation ---
GetCurrentDisplayOrientation :: proc(displayID: DisplayID) -> DisplayOrientation ---
GetDisplayContentScale :: proc(displayID: DisplayID) -> f32 ---
GetFullscreenDisplayModes :: proc(displayID: DisplayID, count: ^c.int) -> [^]^DisplayMode ---
GetClosestFullscreenDisplayMode :: proc(displayID: DisplayID, w, h: c.int, refresh_rate: f32, include_high_density_modes: bool, closest: ^DisplayMode) -> bool ---
GetDesktopDisplayMode :: proc(displayID: DisplayID) -> ^DisplayMode ---
GetCurrentDisplayMode :: proc(displayID: DisplayID) -> ^DisplayMode ---
GetDisplayForPoint :: proc(#by_ptr point: Point) -> DisplayID ---
GetDisplayForRect :: proc(#by_ptr rect: Rect) -> DisplayID ---
GetDisplayForWindow :: proc(window: ^Window) -> DisplayID ---
GetWindowPixelDensity :: proc(window: ^Window) -> f32 ---
GetWindowDisplayScale :: proc(window: ^Window) -> f32 ---
SetWindowFullscreenMode :: proc(window: ^Window, #by_ptr mode: DisplayMode) -> bool ---
GetWindowFullscreenMode :: proc(window: ^Window) -> ^DisplayMode ---
GetWindowICCProfile :: proc(window: ^Window, size: ^uint) -> rawptr ---
GetWindowPixelFormat :: proc(window: ^Window) -> PixelFormat ---
GetWindows :: proc(count: ^c.int) -> [^]^Window ---
CreateWindow :: proc(title: cstring, w, h: c.int, flags: WindowFlags) -> ^Window ---
CreatePopupWindow :: proc(parent: ^Window, offset_x, offset_y: c.int, w, h: c.int, flags: WindowFlags) -> ^Window ---
CreateWindowWithProperties :: proc(props: PropertiesID) -> ^Window ---
GetWindowID :: proc(window: ^Window) -> WindowID ---
GetWindowFromID :: proc(id: WindowID) -> ^Window ---
GetWindowParent :: proc(window: ^Window) -> ^Window ---
GetWindowProperties :: proc(window: ^Window) -> PropertiesID ---
GetWindowFlags :: proc(window: ^Window) -> WindowFlags ---
SetWindowTitle :: proc(window: ^Window, title: cstring) -> bool ---
GetWindowTitle :: proc(window: ^Window) -> cstring ---
SetWindowIcon :: proc(window: ^Window, icon: ^Surface) -> bool ---
SetWindowPosition :: proc(window: ^Window, x, y: c.int) -> bool ---
GetWindowPosition :: proc(window: ^Window, x, y: ^c.int) -> bool ---
SetWindowSize :: proc(window: ^Window, w, h: c.int) -> bool ---
GetWindowSize :: proc(window: ^Window, w, h: ^c.int) -> bool ---
GetWindowSafeArea :: proc(window: ^Window, rect: ^Rect) -> bool ---
SetWindowAspectRatio :: proc(window: ^Window, min_aspect, max_aspect: f32) -> bool ---
GetWindowAspectRatio :: proc(window: ^Window, min_aspect, max_aspect: ^f32) -> bool ---
GetWindowBordersSize :: proc(window: ^Window, top, left, bottom, right: ^c.int) -> bool ---
GetWindowSizeInPixels :: proc(window: ^Window, w, h: ^c.int) -> bool ---
SetWindowMinimumSize :: proc(window: ^Window, min_w, min_h: c.int) -> bool ---
GetWindowMinimumSize :: proc(window: ^Window, w, h: ^c.int) -> bool ---
SetWindowMaximumSize :: proc(window: ^Window, max_w, max_h: c.int) -> bool ---
GetWindowMaximumSize :: proc(window: ^Window, w, h: ^c.int) -> bool ---
SetWindowBordered :: proc(window: ^Window, bordered: bool) -> bool ---
SetWindowResizable :: proc(window: ^Window, resizable: bool) -> bool ---
SetWindowAlwaysOnTop :: proc(window: ^Window, on_top: bool) -> bool ---
ShowWindow :: proc(window: ^Window) -> bool ---
HideWindow :: proc(window: ^Window) -> bool ---
RaiseWindow :: proc(window: ^Window) -> bool ---
MaximizeWindow :: proc(window: ^Window) -> bool ---
MinimizeWindow :: proc(window: ^Window) -> bool ---
RestoreWindow :: proc(window: ^Window) -> bool ---
SetWindowFullscreen :: proc(window: ^Window, fullscreen: bool) -> bool ---
SyncWindow :: proc(window: ^Window) -> bool ---
WindowHasSurface :: proc(window: ^Window) -> bool ---
GetWindowSurface :: proc(window: ^Window) -> ^Surface ---
SetWindowSurfaceVSync :: proc(window: ^Window, vsync: c.int) -> bool ---
GetWindowSurfaceVSync :: proc(window: ^Window, vsync: ^c.int) -> bool ---
UpdateWindowSurface :: proc(window: ^Window) -> bool ---
UpdateWindowSurfaceRects :: proc(window: ^Window, rects: [^]Rect, numrects: c.int) -> bool ---
DestroyWindowSurface :: proc(window: ^Window) -> bool ---
SetWindowKeyboardGrab :: proc(window: ^Window, grabbed: bool) -> bool ---
SetWindowMouseGrab :: proc(window: ^Window, grabbed: bool) -> bool ---
GetWindowKeyboardGrab :: proc(window: ^Window) -> bool ---
GetWindowMouseGrab :: proc(window: ^Window) -> bool ---
GetGrabbedWindow :: proc() -> ^Window ---
SetWindowMouseRect :: proc(window: ^Window, rect: ^Rect) -> bool ---
GetWindowMouseRect :: proc(window: ^Window) -> ^Rect ---
SetWindowOpacity :: proc(window: ^Window, opacity: f32) -> bool ---
GetWindowOpacity :: proc(window: ^Window) -> f32 ---
SetWindowParent :: proc(window: ^Window, parent: ^Window) -> bool ---
SetWindowModal :: proc(window: ^Window, modal: bool) -> bool ---
SetWindowFocusable :: proc(window: ^Window, focusable: bool) -> bool ---
ShowWindowSystemMenu :: proc(window: ^Window, x, y: c.int) -> bool ---
}
HitTestResult :: enum c.int {
NORMAL, /**< Region is normal. No special properties. */
DRAGGABLE, /**< Region can drag entire window. */
RESIZE_TOPLEFT, /**< Region is the resizable top-left corner border. */
RESIZE_TOP, /**< Region is the resizable top border. */
RESIZE_TOPRIGHT, /**< Region is the resizable top-right corner border. */
RESIZE_RIGHT, /**< Region is the resizable right border. */
RESIZE_BOTTOMRIGHT, /**< Region is the resizable bottom-right corner border. */
RESIZE_BOTTOM, /**< Region is the resizable bottom border. */
RESIZE_BOTTOMLEFT, /**< Region is the resizable bottom-left corner border. */
RESIZE_LEFT, /**< Region is the resizable left border. */
}
HitTest :: #type proc "c" (win: ^Window, area: ^Point, data: rawptr) -> HitTestResult
@(default_calling_convention="c", link_prefix="SDL_")
foreign lib {
SetWindowHitTest :: proc(window: ^Window, callback: HitTest, callback_data: rawptr) -> bool ---
SetWindowShape :: proc(window: ^Window, shape: ^Surface) -> bool ---
FlashWindow :: proc(window: ^Window, operation: FlashOperation) -> bool ---
DestroyWindow :: proc(window: ^Window) ---
ScreenSaverEnabled :: proc() -> bool ---
EnableScreenSaver :: proc() -> bool ---
DisableScreenSaver :: proc() -> bool ---
}
@(default_calling_convention="c", link_prefix="SDL_")
foreign lib {
GL_LoadLibrary :: proc(path: cstring) -> bool ---
GL_GetProcAddress :: proc(procName: cstring) -> FunctionPointer ---
EGL_GetProcAddress :: proc(procName: cstring) -> FunctionPointer ---
GL_UnloadLibrary :: proc() ---
GL_ExtensionSupported :: proc(extension: cstring) -> bool ---
GL_ResetAttributes :: proc() ---
GL_SetAttribute :: proc(attr: GLAttr, value: c.int) -> bool ---
GL_GetAttribute :: proc(attr: GLAttr, value: ^c.int) -> bool ---
GL_CreateContext :: proc(window: ^Window) -> GLContext ---
GL_MakeCurrent :: proc(window: ^Window, ctx: GLContext) -> bool ---
GL_GetCurrentWindow :: proc() -> ^Window ---
GL_GetCurrentContext :: proc() -> GLContext ---
EGL_GetCurrentDisplay :: proc() -> EGLDisplay ---
EGL_GetCurrentConfig :: proc() -> EGLConfig ---
EGL_GetWindowSurface :: proc(window: ^Window) -> EGLSurface ---
EGL_SetAttributeCallbacks :: proc(platformAttribCallback: EGLAttribArrayCallback, surfaceAttribCallback: EGLIntArrayCallback, contextAttribCallback: EGLIntArrayCallback, userdata: rawptr) ---
GL_SetSwapInterval :: proc(interval: c.int) -> bool ---
GL_GetSwapInterval :: proc(interval: ^c.int) -> bool ---
GL_SwapWindow :: proc(window: ^Window) -> bool ---
GL_DestroyContext :: proc(ctx: GLContext) -> bool ---
}
// Used by vendor:OpenGL
gl_set_proc_address :: proc(p: rawptr, name: cstring) {
(^FunctionPointer)(p)^ = GL_GetProcAddress(name)
}