#version 430 core layout(location = 0) in vec3 aPos; layout(location = 1) in vec3 aColor; // Campaign V slice V6d: the separate uView/uProjection pair converged into the // pinned GpuPushConstants block's single uViewProjection. Vulkan has no default // uniform block, so a loose uniform cannot exist there at all — a shader either // reads a field of the shared push-constant block or it cannot be expressed. // // The product now happens once on the CPU (DebugLineRenderer.Flush) instead of // once per vertex, so the rounding differs in the last bits. That is why this // convergence is measured on its own: these lines are diagnostic-only geometry, // drawn only when collision wireframes are switched on, so the offline gate // reads nothing but its own ambient noise. uniform mat4 uViewProjection; out vec3 vColor; void main() { vColor = aColor; gl_Position = uViewProjection * vec4(aPos, 1.0); }