#include "shared.h"
struct ScenePush {
float4x4 viewProj; // 0
Texture2D.Handle tex; // 64
SamplerState.Handle samp; // 72
float4 lightDir; // 80, xyz = direction TO light, w unused
};
[vk::push_constant]
ScenePush pc;
struct VSIn {
[[vk::location(0)]]
float3 pos;
[[vk::location(1)]]
float3 normal;
[[vk::location(2)]]
float2 uv;
};
struct VSOut {
float4 pos : SV_Position;
float3 normal : NORMAL;
float2 uv : TEXCOORD;
};
[shader("vertex")]
VSOut vsMain(VSIn input) {
VSOut o;
o.pos = mul(float4(input.pos, 1.0), pc.viewProj);
o.normal = input.normal;
o.uv = input.uv;
return o;
}
[shader("fragment")]
float4 fsMain(VSOut input) : SV_Target {
float4 albedo = pc.tex.SampleLevel(pc.samp, input.uv, 0.0);
float ndl = saturate(dot(normalize(input.normal), normalize(pc.lightDir.xyz)));
return float4(albedo.rgb * (0.2 + 0.8 * ndl), 1.0);
}