From 7536dd705d121ed3a49b7e4b05af88fd241d1674 Mon Sep 17 00:00:00 2001 From: vimene Date: Sun, 15 Feb 2026 15:11:49 +0100 Subject: more improvements in builds setup - moved slang shaders to spvshaders to separate software and hardware shaders - split Makefile.am into Makefile.am, src/Makefile.am and src/spvshaders/Makefile.am - build shaders as DATA primary, instead of both PROGRAMS and SCRIPTS, which greatly simplifies building. Before that, we had to first build them as PROGRAMS, and then copy them as SCRIPTS to remove executable extensions (i.e. ".exe" for Windows) - changed final executable dir from enginedir to bindir, which makes automake see it as an exec instead of data - compute relative paths from C++, which makes it possible to change dirs arbitrarily when running make while still having a relocatable executable - updated README.md to reflect changes in dirs - use AX_COMPARE_VERSION() to simplify checking if Vulkan headers version is correct - factored out most of paths computation in engine::path_utils::Paths --- src/spvshaders/shader.slang | 48 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/spvshaders/shader.slang (limited to 'src/spvshaders/shader.slang') diff --git a/src/spvshaders/shader.slang b/src/spvshaders/shader.slang new file mode 100644 index 0000000..245df4b --- /dev/null +++ b/src/spvshaders/shader.slang @@ -0,0 +1,48 @@ +struct VertexInput { + float3 pos; + float3 normal; + float2 uv; +}; + +struct UniformBuffer { + float4x4 model, view, proj, inv_view; +}; + +ConstantBuffer ubo; + +struct VertexOutput { + float4 pos : SV_Position; + float3 world_loc; + float3 normal; + float2 uv; +}; + +[shader("vertex")] +VertexOutput vert_main(VertexInput vi) { + VertexOutput vo; + float4 world_loc = mul(ubo.model, float4(vi.pos, 1.)); + vo.pos = mul(ubo.proj, mul(ubo.view, world_loc)); + vo.world_loc = world_loc.xyz; + vo.normal = mul(ubo.model, float4(vi.normal, 0.)).xyz; + vo.uv = vi.uv; + return vo; +} + +Sampler2D texture; + +[shader("fragment")] +float4 frag_main(VertexOutput vo) : SV_Target { + // float3 u = vo.world_loc - (ubo.inv_view * float4(0., 0., 0., 1.)).xyz; + // float u_len_sq = dot(u, u); + // u = normalize(u); + // float attenuation = dot(mul(ubo.inv_view, float4(0., 0., -1., 0.)).xyz, u); + // if (attenuation < .7) attenuation = 0.f; + // else if (attenuation > .8) attenuation = 1.; + // else attenuation = (attenuation - .7) / .1; + // float light = -dot(vo.normal, u) / u_len_sq; + // if (light < 0.) light = 0.; + // float final_light = .003 + light * attenuation * .8 * .997; + // if (final_light > 1.) final_light = 1.; + // return float4(final_light, final_light, final_light, 1.); + return float4(texture.Sample(vo.uv).rgb, 1.f); +} -- cgit v1.2.3