Complete rework of the sample

Simplified, added comments and only use single buffers to show best practices
This commit is contained in:
Sascha Willems 2024-01-06 16:47:11 +01:00
parent f5cddbd207
commit eff719099a
7 changed files with 435 additions and 626 deletions

View file

@ -1,4 +1,5 @@
// Copyright 2020 Google LLC
// Copyright 2023 Sascha Willems
struct VSInput
{
@ -10,10 +11,9 @@ struct VSInput
struct UBO
{
float4x4 projection;
float4x4 model;
float4x4 normal;
float4x4 view;
float3 lightpos;
float4 lightpos;
float4x4 model[3];
};
cbuffer ubo : register(b0) { UBO ubo; }
@ -27,15 +27,15 @@ struct VSOutput
[[vk::location(3)]] float3 LightVec : TEXCOORD2;
};
VSOutput main(VSInput input)
VSOutput main(VSInput input, uint InstanceIndex : SV_InstanceID)
{
VSOutput output = (VSOutput)0;
output.Normal = normalize(mul((float4x3)ubo.normal, input.Normal).xyz);
output.Normal = normalize(mul((float3x3)transpose(ubo.model[InstanceIndex]), input.Normal).xyz);
output.Color = input.Color;
float4x4 modelView = mul(ubo.view, ubo.model);
float4x4 modelView = mul(ubo.view, ubo.model[InstanceIndex]);
float4 pos = mul(modelView, input.Pos);
output.EyePos = mul(modelView, pos).xyz;
float4 lightPos = mul(float4(ubo.lightpos, 1.0), modelView);
float4 lightPos = mul(float4(ubo.lightpos.xyz, 1.0), modelView);
output.LightVec = normalize(lightPos.xyz - output.EyePos);
output.Pos = mul(ubo.projection, pos);
return output;

Binary file not shown.