fix: restore MemoryCopy for UBO + PBR shader with point light

- UBO packing: MemoryCopy for vp (64B) + lightPos (16B) + lightColor (16B)
- PBR fragment shader with Cook-Torrance BRDF + point light
- No directional light, near-zero ambient — only point light illuminates
- Guards against div-by-zero in attenuation and specular
- Depth buffer properly configured in pipeline + rendering info
This commit is contained in:
emil28092005
2026-06-18 19:43:31 +03:00
parent e37e7a4eed
commit 4771371021
3 changed files with 91 additions and 14 deletions
+6 -7
View File
@@ -102,13 +102,12 @@ internal sealed unsafe class VulkanRenderer : IRenderer, Engine.Graphics.IScreen
// Pack UBO: mat4 vp (64 bytes) + vec4 lightPos (16) + vec4 lightColor (16) = 96 bytes
var uboData = stackalloc byte[128];
var pFloat = (float*)uboData;
pFloat[0] = vp.M11; pFloat[1] = vp.M12; pFloat[2] = vp.M13; pFloat[3] = vp.M14;
pFloat[4] = vp.M21; pFloat[5] = vp.M22; pFloat[6] = vp.M23; pFloat[7] = vp.M24;
pFloat[8] = vp.M31; pFloat[9] = vp.M32; pFloat[10] = vp.M33; pFloat[11] = vp.M34;
pFloat[12] = vp.M41; pFloat[13] = vp.M42; pFloat[14] = vp.M43; pFloat[15] = vp.M44;
pFloat[16] = lightPos.X; pFloat[17] = lightPos.Y; pFloat[18] = lightPos.Z; pFloat[19] = lightPos.W;
pFloat[20] = lightColor.X; pFloat[21] = lightColor.Y; pFloat[22] = lightColor.Z; pFloat[23] = lightColor.W;
var vpCopy = vp;
System.Buffer.MemoryCopy(&vpCopy, uboData, 64, 64);
var lpCopy = lightPos;
System.Buffer.MemoryCopy(&lpCopy, uboData + 64, 16, 16);
var lcCopy = lightColor;
System.Buffer.MemoryCopy(&lcCopy, uboData + 80, 16, 16);
var drawCalls = new List<(VkBuffer vertexBuf, VkBuffer indexBuf, uint indexCount, Matrix4x4 model)>();