Fix hot reload for gl

This commit is contained in:
sergeypdev 2024-02-04 21:39:21 +04:00
parent 9945fa5b40
commit f227d4cedd
2 changed files with 23 additions and 14 deletions

1
init.lua Normal file
View File

@ -0,0 +1 @@
vim.opt.makeprg = 'zig.exe build'

View File

@ -49,20 +49,11 @@ fn game_init_window_err(global_allocator: std.mem.Allocator) !void {
const context = c.SDL_GL_CreateContext(window); const context = c.SDL_GL_CreateContext(window);
try gl.load(null, struct { // var majorVer: gl.GLint = 0;
fn getProcAddress(ctx: @TypeOf(null), proc: [:0]const u8) ?gl.FunctionPointer { // var minorVer: gl.GLint = 0;
_ = ctx; // gl.getIntegerv(gl.MAJOR_VERSION, &majorVer);
return @ptrCast(c.SDL_GL_GetProcAddress(proc)); // gl.getIntegerv(gl.MINOR_VERSION, &minorVer);
} // std.log.debug("OpenGL Version: {}.{}", .{ majorVer, minorVer });
}.getProcAddress);
gl.viewport(0, 0, DEFAULT_WIDTH, DEFAULT_HEIGHT);
var majorVer: gl.GLint = 0;
var minorVer: gl.GLint = 0;
gl.getIntegerv(gl.MAJOR_VERSION, &majorVer);
gl.getIntegerv(gl.MINOR_VERSION, &minorVer);
std.log.debug("OpenGL Version: {}.{}", .{ majorVer, minorVer });
g_init = try global_allocator.create(InitMemory); g_init = try global_allocator.create(InitMemory);
g_init_exists = true; g_init_exists = true;
@ -83,6 +74,18 @@ export fn game_init_window(global_allocator: *std.mem.Allocator) void {
}; };
} }
fn loadGL() void {
gl.load(null, struct {
fn getProcAddress(ctx: @TypeOf(null), proc: [:0]const u8) ?gl.FunctionPointer {
_ = ctx;
return @ptrCast(c.SDL_GL_GetProcAddress(proc));
}
}.getProcAddress) catch |err| {
std.log.debug("Failed to load gl funcs {}\n", .{err});
@panic("gl.load");
};
}
export fn game_init(global_allocator: *std.mem.Allocator) void { export fn game_init(global_allocator: *std.mem.Allocator) void {
std.log.debug("game_init\n", .{}); std.log.debug("game_init\n", .{});
g_mem = global_allocator.create(GameMemory) catch @panic("OOM"); g_mem = global_allocator.create(GameMemory) catch @panic("OOM");
@ -90,6 +93,10 @@ export fn game_init(global_allocator: *std.mem.Allocator) void {
.global_allocator = global_allocator.*, .global_allocator = global_allocator.*,
}; };
loadGL();
gl.viewport(0, 0, g_init.width, g_init.height);
gl.genBuffers(1, &g_mem.triangle_vbo); gl.genBuffers(1, &g_mem.triangle_vbo);
gl.genVertexArrays(1, &g_mem.triangle_vao); gl.genVertexArrays(1, &g_mem.triangle_vao);
@ -209,6 +216,7 @@ export fn game_hot_reload(init_memory: ?*anyopaque, gmemory: ?*anyopaque) void {
if (init_memory) |init_mem| { if (init_memory) |init_mem| {
g_init = @alignCast(@ptrCast(init_mem)); g_init = @alignCast(@ptrCast(init_mem));
g_init_exists = true; g_init_exists = true;
loadGL();
} }
if (gmemory) |gmem| { if (gmemory) |gmem| {
g_mem = @alignCast(@ptrCast(gmem)); g_mem = @alignCast(@ptrCast(gmem));