mirror of
https://github.com/Ed94/Odin.git
synced 2026-06-21 05:05:00 -07:00
56 lines
1.1 KiB
Odin
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()
|
|
}
|