I'm trying to learn openGL through zig but I ran into this issue where I end up with a seg fault unless I bind the proc threads every frame, my code is
pub const Renderer = struct {
window: ?*c.SDL_Window,
procs: gl.ProcTable,
context: ?*c.struct_SDL_GLContextState,
const Self = Renderer;
pub fn new() !Renderer{
const window = c.SDL_CreateWindow("Voxel Project", 1280, 720, c.SDL_WINDOW_OPENGL);
const context = c.SDL_GL_CreateContext(window);
_ = c.SDL_GL_MakeCurrent(window, context);
var procs: gl.ProcTable = undefined;
if(!procs.init(c.SDL_GL_GetProcAddress)) return error.InitFailed;
gl.makeProcTableCurrent(&procs);
gl.Viewport(0, 0, 1280, 720);
gl.ClearColor(0.2, 0.3, 0.3, 1.0);
gl.Clear(gl.COLOR_BUFFER_BIT);
_ = c.SDL_GL_SwapWindow(window);
return Renderer{
.window = window,
.procs = procs,
.context = context
};
}
pub fn render(self: Renderer) void{
gl.makeProcTableCurrent(&self.procs);
gl.ClearColor(0.2, 0.3, 0.3, 1.0);
gl.Clear(gl.COLOR_BUFFER_BIT);
_ = c.SDL_GL_SwapWindow(self.window);
}
pub fn free(self: Renderer) void{
c.SDL_DestroyWindow(self.window);
_ = c.SDL_GL_DestroyContext(self.context);
gl.makeProcTableCurrent(null);
}
};