Initial commit.

This commit is contained in:
2025-11-14 11:56:14 +01:00
commit ebbb377ce8
2 changed files with 183 additions and 0 deletions

90
renderer.odin Normal file
View File

@@ -0,0 +1,90 @@
package renderer
import "core:fmt"
RENDER_BACKEND_OPENGL :: #config(RENDER_BACKEND_OPENGL, false)
RENDER_BACKEND_VULKAN :: #config(RENDER_BACKEND_VULKAN, false)
RENDER_BACKEND_DIRECTX11 :: #config(RENDER_BACKEND_DIRECTX11, false)
RENDER_BACKEND_METAL :: #config(RENDER_BACKEND_METAL, false)
Renderer :: struct {
api: Renderer_API,
viewport: Viewport,
surface_ptr: rawptr,
backend: rawptr,
}
Viewport :: struct {
x, y, width, height: u16,
}
Renderer_API :: enum {
OpenGL,
Vulkan,
DirectX11,
Metal,
}
create :: proc(surface_ptr: rawptr) -> (^Renderer, bool) {
renderer := new(Renderer)
renderer.surface_ptr = surface_ptr
when RENDER_BACKEND_OPENGL {
if !opengl_init(renderer) {
fmt.printfln("Failed to initialize OpenGL.")
destroy(renderer)
return nil, false
}
}
else {
destroy(renderer)
fmt.printfln("Unhandled backend or no backend selected.")
return nil, false
}
// TODO: SS - Init renderer using 'api'.
return renderer, true
}
set_viewport :: proc(renderer: ^Renderer, x, y, width, height: u16) {
fmt.printfln("Setting viewport to %v:%v, %vx%v.", x, y, width, height)
renderer.viewport = {
x = x,
y = y,
width = width,
height = height,
}
when RENDER_BACKEND_OPENGL {
opengl_viewport_changed(renderer)
}
}
set_clear_color :: proc(renderer: ^Renderer, color: [3]u8) {
when RENDER_BACKEND_OPENGL {
opengl_set_clear_color(renderer, color)
}
}
render_frame :: proc(renderer: ^Renderer) {
}
swap_buffers :: proc(renderer: ^Renderer) {
when RENDER_BACKEND_OPENGL {
opengl_swap_buffers(renderer)
}
}
destroy :: proc(renderer: ^Renderer) {
when RENDER_BACKEND_OPENGL {
opengl_destroy(renderer)
}
free(renderer)
renderer^ = {}
}