From 049004e6de7139dc2bc74b0a37ffd2f49cea0bec Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Sat, 2 Apr 2022 20:35:39 -0700 Subject: [PATCH] opengl: more funcs --- src/main.zig | 15 +++++++-------- src/opengl/Texture.zig | 35 +++++++++++++++++++++++++++++++++++ src/opengl/draw.zig | 4 ++++ 3 files changed, 46 insertions(+), 8 deletions(-) diff --git a/src/main.zig b/src/main.zig index 34fe82f0d..f5f4b6ebf 100644 --- a/src/main.zig +++ b/src/main.zig @@ -22,7 +22,7 @@ pub fn main() !void { window.setSizeCallback((struct { fn callback(_: glfw.Window, width: i32, height: i32) void { std.log.info("set viewport {} {}", .{ width, height }); - gl.c.glViewport(0, 0, width, height); + try gl.viewport(0, 0, width, height); } }).callback); @@ -46,12 +46,11 @@ pub fn main() !void { defer tex.destroy(); var texbind = try tex.bind(gl.c.GL_TEXTURE_2D); defer texbind.unbind(); - gl.c.glTexParameteri(gl.c.GL_TEXTURE_2D, gl.c.GL_TEXTURE_WRAP_S, gl.c.GL_REPEAT); - gl.c.glTexParameteri(gl.c.GL_TEXTURE_2D, gl.c.GL_TEXTURE_WRAP_T, gl.c.GL_REPEAT); - gl.c.glTexParameteri(gl.c.GL_TEXTURE_2D, gl.c.GL_TEXTURE_MIN_FILTER, gl.c.GL_LINEAR); - gl.c.glTexParameteri(gl.c.GL_TEXTURE_2D, gl.c.GL_TEXTURE_MAG_FILTER, gl.c.GL_LINEAR); - gl.c.glTexImage2D( - gl.c.GL_TEXTURE_2D, + try texbind.parameter(gl.c.GL_TEXTURE_WRAP_S, gl.c.GL_REPEAT); + try texbind.parameter(gl.c.GL_TEXTURE_WRAP_T, gl.c.GL_REPEAT); + try texbind.parameter(gl.c.GL_TEXTURE_MIN_FILTER, gl.c.GL_LINEAR); + try texbind.parameter(gl.c.GL_TEXTURE_MAG_FILTER, gl.c.GL_LINEAR); + try texbind.image2D( 0, gl.c.GL_RGB, imgwidth, @@ -61,7 +60,7 @@ pub fn main() !void { gl.c.GL_UNSIGNED_BYTE, data, ); - gl.c.glGenerateMipmap(gl.c.GL_TEXTURE_2D); + texbind.generateMipmap(); // Create our vertex shader const vs = try gl.Shader.create(gl.c.GL_VERTEX_SHADER); diff --git a/src/opengl/Texture.zig b/src/opengl/Texture.zig index 0a41a49fd..4e57548a5 100644 --- a/src/opengl/Texture.zig +++ b/src/opengl/Texture.zig @@ -13,6 +13,41 @@ pub const Binding = struct { c.glBindTexture(b.target, 0); b.* = undefined; } + + pub fn generateMipmap(b: Binding) void { + c.glGenerateMipmap(b.target); + } + + pub fn parameter(b: Binding, name: c.GLenum, value: anytype) !void { + switch (@TypeOf(value)) { + c.GLint => c.glTexParameteri(b.target, name, value), + else => unreachable, + } + } + + pub fn image2D( + b: Binding, + level: c.GLint, + internal_format: c.GLint, + width: c.GLsizei, + height: c.GLsizei, + border: c.GLint, + format: c.GLenum, + typ: c.GLenum, + data: *const anyopaque, + ) !void { + c.glTexImage2D( + b.target, + level, + internal_format, + width, + height, + border, + format, + typ, + data, + ); + } }; /// Create a single texture. diff --git a/src/opengl/draw.zig b/src/opengl/draw.zig index a87cc70b6..6bfc41b45 100644 --- a/src/opengl/draw.zig +++ b/src/opengl/draw.zig @@ -13,3 +13,7 @@ pub fn drawArrays(mode: c.GLenum, first: c.GLint, count: c.GLsizei) !void { c.glDrawArrays(mode, first, count); try errors.getError(); } + +pub fn viewport(x: c.GLint, y: c.GLint, width: c.GLsizei, height: c.GLsizei) !void { + c.glViewport(x, y, width, height); +}