diff options
Diffstat (limited to 'src/spvshaders/shader.slang')
| -rw-r--r-- | src/spvshaders/shader.slang | 48 |
1 files changed, 48 insertions, 0 deletions
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<UniformBuffer> 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); +} |
