From 5513044d61b4817fa1830bc3ea8278e206c4d684 Mon Sep 17 00:00:00 2001 From: duck Date: Fri, 28 Mar 2025 01:02:56 +0500 Subject: [PATCH] Shader compile step --- assets/shaders/basic.frag | 8 ++++++++ assets/shaders/basic.vert | 8 ++++++++ build.zig | 15 +++++++++++++++ build.zig.zon | 1 + src/graphics.zig | 1 + 5 files changed, 33 insertions(+) create mode 100644 assets/shaders/basic.frag create mode 100644 assets/shaders/basic.vert create mode 100644 src/graphics.zig diff --git a/assets/shaders/basic.frag b/assets/shaders/basic.frag new file mode 100644 index 0000000..87c5d51 --- /dev/null +++ b/assets/shaders/basic.frag @@ -0,0 +1,8 @@ +#version 450 + +layout(location = 0) in vec2 fragCoord; +layout(location = 0) out vec4 fragColor; + +void main() { + fragColor = vec4(fragCoord, 0.0, 1.0); +} diff --git a/assets/shaders/basic.vert b/assets/shaders/basic.vert new file mode 100644 index 0000000..11b0e06 --- /dev/null +++ b/assets/shaders/basic.vert @@ -0,0 +1,8 @@ +#version 450 + +layout(location = 0) in vec2 inCoord; +layout(location = 0) out vec2 outCoord; + +void main() { + outCoord = inCoord; +} diff --git a/build.zig b/build.zig index 6cd6441..7524b70 100644 --- a/build.zig +++ b/build.zig @@ -1,5 +1,10 @@ const std = @import("std"); +const SHADERS: []const struct { file: []const u8, stage: []const u8 } = &.{ + .{ .file = "basic", .stage = "vert" }, + .{ .file = "basic", .stage = "frag" }, +}; + pub fn build(b: *std.Build) void { const target = b.standardTargetOptions(.{}); const optimize = b.standardOptimizeOption(.{}); @@ -14,6 +19,16 @@ pub fn build(b: *std.Build) void { exe.linkLibC(); exe.linkSystemLibrary("SDL3"); + inline for (SHADERS) |shader| { + const glslc = b.addSystemCommand(&.{"glslc"}); + glslc.addArg("-fshader-stage=" ++ shader.stage); + glslc.addFileArg(b.path("assets/shaders/" ++ shader.file ++ "." ++ shader.stage)); + glslc.addArg("-o"); + const filename = shader.file ++ "_" ++ shader.stage ++ ".spv"; + const shader_artifact = glslc.addOutputFileArg(filename); + b.getInstallStep().dependOn(&b.addInstallFileWithDir(shader_artifact, .prefix, filename).step); + } + const run_cmd = b.addRunArtifact(exe); run_cmd.step.dependOn(b.getInstallStep()); if (b.args) |args| { diff --git a/build.zig.zon b/build.zig.zon index 3cd4506..006535f 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -6,5 +6,6 @@ "build.zig", "build.zig.zon", "src", + "assets", }, } diff --git a/src/graphics.zig b/src/graphics.zig new file mode 100644 index 0000000..5c17d7d --- /dev/null +++ b/src/graphics.zig @@ -0,0 +1 @@ +const sdl = @import("sdl.zig");