From 64760d0a35aa9a010facf4cb3a040aac925ac785 Mon Sep 17 00:00:00 2001 From: Jared Miller Date: Tue, 16 Dec 2025 09:26:11 -0500 Subject: [PATCH] Embed shaders at build time --- {shaders => src/shaders}/blur.fs | 0 {shaders => src/shaders}/entity.frag | 0 {shaders => src/shaders}/entity.vert | 0 src/ssbo_renderer.zig | 53 +++------------------------- 4 files changed, 4 insertions(+), 49 deletions(-) rename {shaders => src/shaders}/blur.fs (100%) rename {shaders => src/shaders}/entity.frag (100%) rename {shaders => src/shaders}/entity.vert (100%) diff --git a/shaders/blur.fs b/src/shaders/blur.fs similarity index 100% rename from shaders/blur.fs rename to src/shaders/blur.fs diff --git a/shaders/entity.frag b/src/shaders/entity.frag similarity index 100% rename from shaders/entity.frag rename to src/shaders/entity.frag diff --git a/shaders/entity.vert b/src/shaders/entity.vert similarity index 100% rename from shaders/entity.vert rename to src/shaders/entity.vert diff --git a/src/ssbo_renderer.zig b/src/ssbo_renderer.zig index 9444945..e4b5225 100644 --- a/src/ssbo_renderer.zig +++ b/src/ssbo_renderer.zig @@ -8,37 +8,9 @@ const sandbox = @import("sandbox.zig"); const SCREEN_WIDTH = sandbox.SCREEN_WIDTH; const SCREEN_HEIGHT = sandbox.SCREEN_HEIGHT; -fn loadShaderFile(path: []const u8) ?[:0]const u8 { - const file = std.fs.cwd().openFile(path, .{}) catch |err| { - std.debug.print("ssbo: failed to open {s}: {}\n", .{ path, err }); - return null; - }; - defer file.close(); - - const stat = file.stat() catch |err| { - std.debug.print("ssbo: failed to stat {s}: {}\n", .{ path, err }); - return null; - }; - - const buf = std.heap.page_allocator.allocSentinel(u8, stat.size, 0) catch |err| { - std.debug.print("ssbo: failed to allocate for {s}: {}\n", .{ path, err }); - return null; - }; - - const bytes_read = file.readAll(buf) catch |err| { - std.debug.print("ssbo: failed to read {s}: {}\n", .{ path, err }); - std.heap.page_allocator.free(buf); - return null; - }; - - if (bytes_read != stat.size) { - std.debug.print("ssbo: incomplete read of {s}\n", .{path}); - std.heap.page_allocator.free(buf); - return null; - } - - return buf; -} +// shaders embedded at build time +const vert_source = @embedFile("shaders/entity.vert"); +const frag_source = @embedFile("shaders/entity.frag"); pub const SsboRenderer = struct { shader_id: u32, @@ -71,21 +43,6 @@ pub const SsboRenderer = struct { return null; }; - // load shaders from files at runtime - const vert_source = loadShaderFile("shaders/entity.vert") orelse { - std.debug.print("ssbo: failed to load vertex shader\n", .{}); - std.heap.page_allocator.free(gpu_buffer); - return null; - }; - defer std.heap.page_allocator.free(vert_source); - - const frag_source = loadShaderFile("shaders/entity.frag") orelse { - std.debug.print("ssbo: failed to load fragment shader\n", .{}); - std.heap.page_allocator.free(gpu_buffer); - return null; - }; - defer std.heap.page_allocator.free(frag_source); - const shader_id = rl.gl.rlLoadShaderCode(vert_source, frag_source); if (shader_id == 0) { std.debug.print("ssbo: failed to compile shaders\n", .{}); @@ -152,8 +109,6 @@ pub const SsboRenderer = struct { // unbind VAO _ = rl.gl.rlEnableVertexArray(0); - std.debug.print("ssbo: initialized (shader={}, vao={}, vbo={}, ssbo={})\n", .{ shader_id, vao_id, vbo_id, ssbo_id }); - return .{ .shader_id = shader_id, .vao_id = vao_id, @@ -200,7 +155,7 @@ pub const SsboRenderer = struct { const screen_size = [2]f32{ @floatFromInt(SCREEN_WIDTH), @floatFromInt(SCREEN_HEIGHT) }; rl.gl.rlSetUniform(self.screen_size_loc, &screen_size, @intFromEnum(rl.gl.rlShaderUniformDataType.rl_shader_uniform_vec2), 1); - // bind texture - try different order + // bind texture rl.gl.rlActiveTextureSlot(0); rl.gl.rlEnableTexture(self.circle_texture_id); // use rlSetUniform with int type instead of rlSetUniformSampler