This commit is contained in:
2026-02-03 10:17:28 +01:00
parent 32a6d498b9
commit b80c321e84
2 changed files with 40 additions and 0 deletions

View File

@@ -14,6 +14,7 @@ RENDER_BACKEND_METAL :: #config(RENDER_BACKEND_METAL, false)
Renderer :: struct { Renderer :: struct {
viewport: Viewport, viewport: Viewport,
surface_ptr: rawptr, surface_ptr: rawptr,
vsync: bool,
backend: rawptr, backend: rawptr,
pipeline: Pipeline, pipeline: Pipeline,
@@ -62,6 +63,8 @@ create :: proc(surface_ptr: rawptr) -> (^Renderer, bool) {
return nil, false return nil, false
} }
set_vsync(renderer, true)
{ // Create the fullscreen shaders, material and mesh. { // Create the fullscreen shaders, material and mesh.
fs_vertex_shader, fs_vertex_shader_ok := create_shader(renderer, .Vertex, "fs_vertex.glsl") fs_vertex_shader, fs_vertex_shader_ok := create_shader(renderer, .Vertex, "fs_vertex.glsl")
assert(fs_vertex_shader_ok) assert(fs_vertex_shader_ok)
@@ -114,6 +117,24 @@ set_viewport :: proc(renderer: ^Renderer, x, y, width, height: u16) {
} }
} }
set_vsync :: proc(renderer: ^Renderer, on: bool) {
assert(renderer != nil)
if renderer.vsync == on {
return
}
success := false
when RENDER_BACKEND_OPENGL {
success = opengl_set_vsync(renderer, on)
}
if success {
renderer.vsync = on
}
}
@(private="file") set_clear_color :: proc(renderer: ^Renderer, color: Color) { @(private="file") set_clear_color :: proc(renderer: ^Renderer, color: Color) {
when RENDER_BACKEND_OPENGL { when RENDER_BACKEND_OPENGL {
opengl_set_clear_color(renderer, color) opengl_set_clear_color(renderer, color)

View File

@@ -79,6 +79,13 @@ when RENDER_BACKEND_OPENGL {
}) })
opengl_swap_buffers(renderer) opengl_swap_buffers(renderer)
win.wglSwapIntervalEXT = transmute(win.SwapIntervalEXTType)win.wglGetProcAddress("wglSwapIntervalEXT")
if win.wglSwapIntervalEXT == nil {
opengl_destroy(renderer)
return false
}
return true return true
} }
@@ -90,6 +97,18 @@ when RENDER_BACKEND_OPENGL {
) )
} }
opengl_set_vsync :: proc(renderer: ^Renderer, on: bool) -> bool {
if win.wglSwapIntervalEXT == nil {
fmt.printfln("'wglSwapIntervalEXT' is nil.")
return false
}
// Kommer inte in hit.
win.wglSwapIntervalEXT(on ? 1 : 0)
return true
}
opengl_set_clear_color :: proc(renderer: ^Renderer, color: Color) { opengl_set_clear_color :: proc(renderer: ^Renderer, color: Color) {
r, g, b, a: u8 = max(u8), max(u8), max(u8), max(u8) r, g, b, a: u8 = max(u8), max(u8), max(u8), max(u8)