renderer: disable multi-buffering for OpenGL

Frames are sequential for OpenGL since the completion handler always
calls `glFinish`, so the extra buffers do nothing but waste memory.
This commit is contained in:
Qwerasd
2025-06-17 16:34:05 -06:00
parent 371d62a82c
commit ac2eef9aeb
2 changed files with 13 additions and 2 deletions

View File

@@ -29,6 +29,10 @@ pub const imagepkg = @import("opengl/image.zig");
pub const custom_shader_target: shadertoy.Target = .glsl;
/// Because OpenGL's frame completion is always
/// sync, we have no need for multi-buffering.
pub const swap_chain_count = 1;
const log = std.log.scoped(.opengl);
/// We require at least OpenGL 4.3

View File

@@ -204,8 +204,15 @@ pub fn Renderer(comptime GraphicsAPI: type) type {
// If this is one then we don't do any double+ buffering at all.
// This is comptime because there isn't a good reason to change
// this at runtime and there is a lot of complexity to support it.
// For comptime, this is useful for debugging.
const buf_count = 3;
const buf_count = count: {
if (@hasDecl(GraphicsAPI, "swap_chain_count")) {
break :count GraphicsAPI.swap_chain_count;
}
// Default to triple buffering if
// graphics API has no preference.
break :count 3;
};
/// `buf_count` structs that can hold the
/// data needed by the GPU to draw a frame.