mirror of
https://github.com/odin-lang/Odin.git
synced 2026-06-14 14:23:43 +00:00
221 lines
10 KiB
Odin
221 lines
10 KiB
Odin
package glfw_bindings
|
|
|
|
import "core:c"
|
|
import vk "vendor:vulkan"
|
|
|
|
GLFW_SHARED :: #config(GLFW_SHARED, ODIN_OS != .Windows && ODIN_OS != .Darwin)
|
|
|
|
when ODIN_OS == .Windows {
|
|
when GLFW_SHARED {
|
|
foreign import glfw {
|
|
"../lib/glfw3dll.lib",
|
|
"system:user32.lib",
|
|
"system:gdi32.lib",
|
|
"system:shell32.lib",
|
|
}
|
|
} else {
|
|
foreign import glfw {
|
|
"../lib/glfw3_mt.lib",
|
|
"system:user32.lib",
|
|
"system:gdi32.lib",
|
|
"system:shell32.lib",
|
|
}
|
|
}
|
|
} else when ODIN_OS == .Darwin {
|
|
when GLFW_SHARED {
|
|
foreign import glfw {
|
|
"system:glfw",
|
|
"system:Cocoa.framework",
|
|
"system:IOKit.framework",
|
|
"system:OpenGL.framework",
|
|
}
|
|
} else {
|
|
foreign import glfw {
|
|
"../lib/darwin/libglfw3.a",
|
|
"system:Cocoa.framework",
|
|
"system:IOKit.framework",
|
|
"system:OpenGL.framework",
|
|
}
|
|
}
|
|
} else {
|
|
when GLFW_SHARED {
|
|
foreign import glfw "system:glfw"
|
|
} else {
|
|
@(private)
|
|
LIBGLFW3 :: "../lib/libglfw3.a"
|
|
when !#exists(LIBGLFW3) {
|
|
#panic("Could not find the static glfw library, add it at \"" + ODIN_ROOT + "vendor/glfw/lib/\"`")
|
|
}
|
|
|
|
foreign import glfw { LIBGLFW3 }
|
|
}
|
|
}
|
|
|
|
#assert(size_of(c.int) == size_of(b32))
|
|
|
|
/*** Functions ***/
|
|
@(default_calling_convention="c", link_prefix="glfw")
|
|
foreign glfw {
|
|
Init :: proc() -> b32 ---
|
|
Terminate :: proc() ---
|
|
|
|
InitHint :: proc(hint, value: c.int) ---
|
|
|
|
InitAllocator :: proc(#by_ptr allocator: Allocator) ---
|
|
|
|
InitVulkanLoader :: proc(loader: vk.ProcGetInstanceProcAddr) ---
|
|
|
|
GetVersion :: proc(major, minor, rev: ^c.int) ---
|
|
GetError :: proc(description: ^cstring) -> c.int ---
|
|
|
|
GetPrimaryMonitor :: proc() -> MonitorHandle ---
|
|
GetMonitors :: proc(count: ^c.int) -> [^]MonitorHandle ---
|
|
GetMonitorPos :: proc(monitor: MonitorHandle, xpos, ypos: ^c.int) ---
|
|
GetMonitorWorkarea :: proc(monitor: MonitorHandle, xpos, ypos, width, height: ^c.int) ---
|
|
GetMonitorPhysicalSize :: proc(monitor: MonitorHandle, widthMM, heightMM: ^c.int) ---
|
|
GetMonitorContentScale :: proc(monitor: MonitorHandle, xscale, yscale: ^f32) ---
|
|
|
|
SetMonitorUserPointer :: proc(monitor: MonitorHandle, pointer: rawptr) ---
|
|
GetMonitorUserPointer :: proc(monitor: MonitorHandle) -> rawptr ---
|
|
|
|
GetVideoMode :: proc(monitor: MonitorHandle) -> ^VidMode ---
|
|
SetGamma :: proc(monitor: MonitorHandle, gamma: f32) ---
|
|
GetGammaRamp :: proc(monitor: MonitorHandle) -> ^GammaRamp ---
|
|
SetGammaRamp :: proc(monitor: MonitorHandle, ramp: ^GammaRamp) ---
|
|
|
|
CreateWindow :: proc(width, height: c.int, title: cstring, monitor: MonitorHandle, share: WindowHandle) -> WindowHandle ---
|
|
DestroyWindow :: proc(window: WindowHandle) ---
|
|
|
|
WindowHint :: proc(hint, value: c.int) ---
|
|
DefaultWindowHints :: proc() ---
|
|
WindowHintString :: proc(hint: c.int, value: cstring) ---
|
|
WindowShouldClose :: proc(window: WindowHandle) -> b32 ---
|
|
|
|
SwapInterval :: proc(interval: c.int) ---
|
|
SwapBuffers :: proc(window: WindowHandle) ---
|
|
|
|
SetWindowTitle :: proc(window: WindowHandle, title: cstring) ---
|
|
SetWindowIcon :: proc(window: WindowHandle, count: c.int, images: [^]Image) ---
|
|
SetWindowPos :: proc(window: WindowHandle, xpos, ypos: c.int) ---
|
|
SetWindowSizeLimits :: proc(window: WindowHandle, minwidth, minheight, maxwidth, maxheight: c.int) ---
|
|
SetWindowAspectRatio :: proc(window: WindowHandle, numer, denom: c.int) ---
|
|
SetWindowSize :: proc(window: WindowHandle, width, height: c.int) ---
|
|
GetWindowPos :: proc(window: WindowHandle, xpos, ypos: ^c.int) ---
|
|
GetWindowSize :: proc(window: WindowHandle, width, height: ^c.int) ---
|
|
GetFramebufferSize :: proc(window: WindowHandle, width, height: ^c.int) ---
|
|
GetWindowFrameSize :: proc(window: WindowHandle, left, top, right, bottom: ^c.int) ---
|
|
|
|
GetWindowContentScale :: proc(window: WindowHandle, xscale, yscale: ^f32) ---
|
|
GetWindowOpacity :: proc(window: WindowHandle) -> f32 ---
|
|
SetWindowOpacity :: proc(window: WindowHandle, opacity: f32) ---
|
|
|
|
GetVersionString :: proc() -> cstring ---
|
|
GetMonitorName :: proc(monitor: MonitorHandle) -> cstring ---
|
|
GetClipboardString :: proc(window: WindowHandle) -> cstring ---
|
|
GetVideoModes :: proc(monitor: MonitorHandle, count: ^c.int) -> [^]VidMode ---
|
|
GetKey :: proc(window: WindowHandle, key: c.int) -> c.int ---
|
|
GetKeyName :: proc(key, scancode: c.int) -> cstring ---
|
|
SetWindowShouldClose :: proc(window: WindowHandle, value: b32) ---
|
|
GetWindowTitle :: proc(window: WindowHandle) -> cstring ---
|
|
JoystickPresent :: proc(joy: c.int) -> b32 ---
|
|
GetJoystickName :: proc(joy: c.int) -> cstring ---
|
|
GetKeyScancode :: proc(key: c.int) -> c.int ---
|
|
|
|
IconifyWindow :: proc(window: WindowHandle) ---
|
|
RestoreWindow :: proc(window: WindowHandle) ---
|
|
MaximizeWindow :: proc(window: WindowHandle) ---
|
|
ShowWindow :: proc(window: WindowHandle) ---
|
|
HideWindow :: proc(window: WindowHandle) ---
|
|
FocusWindow :: proc(window: WindowHandle) ---
|
|
|
|
RequestWindowAttention :: proc(window: WindowHandle) ---
|
|
|
|
GetWindowMonitor :: proc(window: WindowHandle) -> MonitorHandle ---
|
|
SetWindowMonitor :: proc(window: WindowHandle, monitor: MonitorHandle, xpos, ypos, width, height, refresh_rate: c.int) ---
|
|
GetWindowAttrib :: proc(window: WindowHandle, attrib: c.int) -> c.int ---
|
|
SetWindowUserPointer :: proc(window: WindowHandle, pointer: rawptr) ---
|
|
GetWindowUserPointer :: proc(window: WindowHandle) -> rawptr ---
|
|
|
|
SetWindowAttrib :: proc(window: WindowHandle, attrib, value: c.int) ---
|
|
|
|
PollEvents :: proc() ---
|
|
WaitEvents :: proc() ---
|
|
WaitEventsTimeout :: proc(timeout: f64) ---
|
|
PostEmptyEvent :: proc() ---
|
|
|
|
RawMouseMotionSupported :: proc() -> b32 ---
|
|
GetInputMode :: proc(window: WindowHandle, mode: c.int) -> c.int ---
|
|
SetInputMode :: proc(window: WindowHandle, mode, value: c.int) ---
|
|
|
|
GetMouseButton :: proc(window: WindowHandle, button: c.int) -> c.int ---
|
|
GetCursorPos :: proc(window: WindowHandle, xpos, ypos: ^f64) ---
|
|
SetCursorPos :: proc(window: WindowHandle, xpos, ypos: f64) ---
|
|
|
|
CreateCursor :: proc(image: ^Image, xhot, yhot: c.int) -> CursorHandle ---
|
|
DestroyCursor :: proc(cursor: CursorHandle) ---
|
|
SetCursor :: proc(window: WindowHandle, cursor: CursorHandle) ---
|
|
CreateStandardCursor :: proc(shape: c.int) -> CursorHandle ---
|
|
|
|
GetJoystickAxes :: proc(joy: c.int, count: ^c.int) -> [^]f32 ---
|
|
GetJoystickButtons :: proc(joy: c.int, count: ^c.int) -> [^]u8 ---
|
|
GetJoystickHats :: proc(jid: c.int, count: ^c.int) -> [^]u8 ---
|
|
GetJoystickGUID :: proc(jid: c.int) -> cstring ---
|
|
SetJoystickUserPointer :: proc(jid: c.int, pointer: rawptr) ---
|
|
GetJoystickUserPointer :: proc(jid: c.int) -> rawptr ---
|
|
JoystickIsGamepad :: proc(jid: c.int) -> b32 ---
|
|
UpdateGamepadMappings :: proc(str: cstring) -> b32 ---
|
|
GetGamepadName :: proc(jid: c.int) -> cstring ---
|
|
GetGamepadState :: proc(jid: c.int, state: ^GamepadState) -> b32 ---
|
|
|
|
SetClipboardString :: proc(window: WindowHandle, str: cstring) ---
|
|
|
|
SetTime :: proc(time: f64) ---
|
|
GetTime :: proc() -> f64 ---
|
|
GetTimerValue :: proc() -> u64 ---
|
|
GetTimerFrequency :: proc() -> u64 ---
|
|
|
|
MakeContextCurrent :: proc(window: WindowHandle) ---
|
|
GetCurrentContext :: proc() -> WindowHandle ---
|
|
GetProcAddress :: proc(name: cstring) -> rawptr ---
|
|
ExtensionSupported :: proc(extension: cstring) -> b32 ---
|
|
|
|
VulkanSupported :: proc() -> b32 ---
|
|
GetRequiredInstanceExtensions :: proc(count: ^u32) -> [^]cstring ---
|
|
GetInstanceProcAddress :: proc(instance: vk.Instance, procname: cstring) -> rawptr ---
|
|
GetPhysicalDevicePresentationSupport :: proc(instance: vk.Instance, device: vk.PhysicalDevice, queuefamily: u32) -> b32 ---
|
|
CreateWindowSurface :: proc(instance: vk.Instance, window: WindowHandle, allocator: ^vk.AllocationCallbacks, surface: ^vk.SurfaceKHR) -> vk.Result ---
|
|
|
|
SetWindowIconifyCallback :: proc(window: WindowHandle, cbfun: WindowIconifyProc) -> WindowIconifyProc ---
|
|
SetWindowRefreshCallback :: proc(window: WindowHandle, cbfun: WindowRefreshProc) -> WindowRefreshProc ---
|
|
SetWindowFocusCallback :: proc(window: WindowHandle, cbfun: WindowFocusProc) -> WindowFocusProc ---
|
|
SetWindowCloseCallback :: proc(window: WindowHandle, cbfun: WindowCloseProc) -> WindowCloseProc ---
|
|
SetWindowSizeCallback :: proc(window: WindowHandle, cbfun: WindowSizeProc) -> WindowSizeProc ---
|
|
SetWindowPosCallback :: proc(window: WindowHandle, cbfun: WindowPosProc) -> WindowPosProc ---
|
|
SetFramebufferSizeCallback :: proc(window: WindowHandle, cbfun: FramebufferSizeProc) -> FramebufferSizeProc ---
|
|
SetDropCallback :: proc(window: WindowHandle, cbfun: DropProc) -> DropProc ---
|
|
SetWindowMaximizeCallback :: proc(window: WindowHandle, cbfun: WindowMaximizeProc) -> WindowMaximizeProc ---
|
|
SetWindowContentScaleCallback :: proc(window: WindowHandle, cbfun: WindowContentScaleProc) -> WindowContentScaleProc ---
|
|
|
|
SetKeyCallback :: proc(window: WindowHandle, cbfun: KeyProc) -> KeyProc ---
|
|
SetMouseButtonCallback :: proc(window: WindowHandle, cbfun: MouseButtonProc) -> MouseButtonProc ---
|
|
SetCursorPosCallback :: proc(window: WindowHandle, cbfun: CursorPosProc) -> CursorPosProc ---
|
|
SetScrollCallback :: proc(window: WindowHandle, cbfun: ScrollProc) -> ScrollProc ---
|
|
SetCharCallback :: proc(window: WindowHandle, cbfun: CharProc) -> CharProc ---
|
|
SetCharModsCallback :: proc(window: WindowHandle, cbfun: CharModsProc) -> CharModsProc ---
|
|
SetCursorEnterCallback :: proc(window: WindowHandle, cbfun: CursorEnterProc) -> CursorEnterProc ---
|
|
|
|
SetMonitorCallback :: proc(cbfun: MonitorProc) -> MonitorProc ---
|
|
SetJoystickCallback :: proc(cbfun: JoystickProc) -> JoystickProc ---
|
|
|
|
SetErrorCallback :: proc(cbfun: ErrorProc) -> ErrorProc ---
|
|
|
|
// Functions added in 3.4, Linux links against system glfw so we define these as weak to be able
|
|
// to check at runtime if they are available.
|
|
|
|
@(linkage="strong" when ODIN_OS == .Windows else "weak")
|
|
GetPlatform :: proc() -> c.int ---
|
|
@(linkage="strong" when ODIN_OS == .Windows else "weak")
|
|
PlatformSupported :: proc(platform: c.int) -> b32 ---
|
|
}
|
|
|