VSYNC
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user