Complete rework of the sample
Simplified, added comments and only use single buffers to show best practices
This commit is contained in:
parent
f5cddbd207
commit
eff719099a
7 changed files with 435 additions and 626 deletions
|
|
@ -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.
Loading…
Add table
Add a link
Reference in a new issue