aboutsummaryrefslogtreecommitdiff
path: root/src/spvshaders/shader.slang
diff options
context:
space:
mode:
Diffstat (limited to 'src/spvshaders/shader.slang')
-rw-r--r--src/spvshaders/shader.slang48
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);
+}