57 lines
1.1 KiB
Odin
57 lines
1.1 KiB
Odin
package engine
|
|
|
|
import "core:fmt"
|
|
import sdl "vendor:sdl3"
|
|
|
|
App :: struct {
|
|
window: ^sdl.Window,
|
|
renderer: ^sdl.Renderer,
|
|
}
|
|
|
|
init :: proc(app: ^App, title: cstring, width, height: i32) -> bool {
|
|
if !sdl.Init({.VIDEO}) {
|
|
fmt.eprintfln("SDL_Init failed: %s", sdl.GetError())
|
|
return false
|
|
}
|
|
|
|
if !sdl.CreateWindowAndRenderer(title, width, height, {}, &app.window, &app.renderer) {
|
|
fmt.eprintfln("CreateWindowAndRenderer failed: %s", sdl.GetError())
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
shutdown :: proc(app: ^App) {
|
|
if app.renderer != nil do sdl.DestroyRenderer(app.renderer)
|
|
if app.window != nil do sdl.DestroyWindow(app.window)
|
|
|
|
sdl.Quit()
|
|
app^ = {}
|
|
}
|
|
|
|
pump_events :: proc() -> bool {
|
|
event: sdl.Event
|
|
|
|
for sdl.PollEvent(&event) {
|
|
if event.type == .QUIT {
|
|
return false
|
|
}
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
begin_frame :: proc(app: ^App, r: u8 = 30, g: u8 = 30, b: u8 = 40, a: u8 = 255) {
|
|
sdl.SetRenderDrawColor(app.renderer, r, g, b, a)
|
|
sdl.RenderClear(app.renderer)
|
|
}
|
|
|
|
end_frame :: proc(app: ^App) {
|
|
sdl.RenderPresent(app.renderer)
|
|
}
|
|
|
|
renderer :: proc(app: ^App) -> ^sdl.Renderer {
|
|
return app.renderer
|
|
}
|