Files
Odin/vendor/wgpu/example/os_glfw.odin
T
2024-06-12 17:22:02 +02:00

56 lines
1.1 KiB
Odin

//+build !js
package vendor_wgpu_example_triangle
import "core:time"
import "vendor:glfw"
import "vendor:wgpu"
import "vendor:wgpu/glfwglue"
OS :: struct {
window: glfw.WindowHandle,
}
os_init :: proc(os: ^OS) {
if !glfw.Init() {
panic("[glfw] init failure")
}
glfw.WindowHint(glfw.CLIENT_API, glfw.NO_API)
os.window = glfw.CreateWindow(960, 540, "WGPU Native Triangle", nil, nil)
glfw.SetFramebufferSizeCallback(os.window, size_callback)
}
os_run :: proc(os: ^OS) {
dt: f32
for !glfw.WindowShouldClose(os.window) {
start := time.tick_now()
glfw.PollEvents()
frame(dt)
dt = f32(time.duration_seconds(time.tick_since(start)))
}
finish()
glfw.DestroyWindow(os.window)
glfw.Terminate()
}
os_get_render_bounds :: proc(os: ^OS) -> (width, height: u32) {
iw, ih := glfw.GetWindowSize(os.window)
return u32(iw), u32(ih)
}
os_get_surface :: proc(os: ^OS, instance: wgpu.Instance) -> wgpu.Surface {
return glfwglue.GetSurface(instance, os.window)
}
@(private="file")
size_callback :: proc "c" (window: glfw.WindowHandle, width, height: i32) {
resize()
}