From c99fb897380295addca0069950f277a960cd5a0b Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Fri, 14 Oct 2022 09:18:33 -0700 Subject: [PATCH] new opengl function calls for stage2 --- src/Window.zig | 5 ++++- src/opengl/glad.zig | 8 ++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Window.zig b/src/Window.zig index b17d060f7..5053e7457 100644 --- a/src/Window.zig +++ b/src/Window.zig @@ -191,7 +191,10 @@ pub fn create(alloc: Allocator, loop: libuv.Loop, config: *const Config) !*Windo try glfw.swapInterval(1); // Load OpenGL bindings - const version = try gl.glad.load(glfw.getProcAddress); + const version = try gl.glad.load(switch (builtin.zig_backend) { + .stage1 => glfw.getProcAddress, + else => &glfw.getProcAddress, + }); log.info("loaded OpenGL {}.{}", .{ gl.glad.versionMajor(version), gl.glad.versionMinor(version), diff --git a/src/opengl/glad.zig b/src/opengl/glad.zig index d2396f27f..d87380191 100644 --- a/src/opengl/glad.zig +++ b/src/opengl/glad.zig @@ -1,13 +1,17 @@ +const std = @import("std"); const c = @import("c.zig"); /// Initialize Glad. This is guaranteed to succeed if no errors are returned. /// The getProcAddress param is an anytype so that we can accept multiple /// forms of the function depending on what we're interfacing with. pub fn load(getProcAddress: anytype) !c_int { + const GlProc = std.meta.FnPtr(fn () callconv(.C) void); + const GlfwFn = std.meta.FnPtr(fn ([*:0]const u8) callconv(.C) ?GlProc); + const res = switch (@TypeOf(getProcAddress)) { // glfw - fn ([*:0]const u8) callconv(.C) ?fn () callconv(.C) void => c.gladLoadGL(@ptrCast( - fn ([*c]const u8) callconv(.C) ?fn () callconv(.C) void, + GlfwFn => c.gladLoadGL(@ptrCast( + std.meta.FnPtr(fn ([*c]const u8) callconv(.C) ?GlProc), getProcAddress, )),