Initial changes for Vulkan

This commit is contained in:
James Seibel
2026-05-11 21:56:53 -05:00
parent b674f49600
commit 269f2c30fd
3 changed files with 35 additions and 11 deletions
@@ -28,9 +28,32 @@ layout (std140) uniform fragUniformBlock
vec3 calcViewPosition(float fragmentDepth, mat4 invMvmProj)
{
// normalized device coordinates
vec4 ndc = vec4(TexCoord.xy, fragmentDepth, 1.0);
vec4 ndc = vec4(
TexCoord.x, // UV [0,1]
TexCoord.y,
fragmentDepth, // depth [0,1]
1.0
);
// AKA: remap the [0,1] UV coordinates and depth value
// into the [-1,1] positions used by
// the NDC cube rendering stage
ndc.xyz = ndc.xyz * 2.0 - 1.0;
vec4 eyeCoord = invMvmProj * ndc;
return eyeCoord.xyz / eyeCoord.w;
}
// TODO vulkan
vec3 calcReversedZViewPosition(float fragmentDepth, mat4 invMvmProj)
{
// Vulkan NDC: xy in [-1,+1], z already in [0,1] — don't remap z
vec4 ndc = vec4(
TexCoord.x * 2.0 - 1.0, // UV [0,1] -> NDC [-1,+1]
TexCoord.y * 2.0 - 1.0,
fragmentDepth, // no remapping needed, this depth is already in the [0,1] range
1.0 // w=1 placeholder for matrix multiplication
);
vec4 eyeCoord = invMvmProj * ndc;
return eyeCoord.xyz / eyeCoord.w;
}
@@ -71,12 +94,13 @@ void main()
{
fragColor = vec4(combinedMcDhColor.rgb, 0.0);
}
// a fragment depth of "1" means the fragment wasn't drawn to,
// we only want to fade vanilla rendered objects, not to the sky or LODs
else if (mcFragmentDepth < 1.0)
// // a fragment depth of "1" means the fragment wasn't drawn to,
// // we only want to fade vanilla rendered objects, not to the sky or LODs
// else if (mcFragmentDepth < 1.0)
else if (mcFragmentDepth > 0)
{
// fade based on distance from the camera
vec3 mcVertexWorldPos = calcViewPosition(mcFragmentDepth, uMcInvMvmProj);
vec3 mcVertexWorldPos = calcReversedZViewPosition(mcFragmentDepth, uMcInvMvmProj);
float mcFragmentDistance = length(mcVertexWorldPos.xzy);
@@ -1,7 +1,6 @@
#version 150 core
in vec2 vPosition;
in vec4 vColor;
out vec4 fColor;
out vec2 TexCoord;
@@ -113,12 +113,13 @@ void main()
float fadeDistance = uFadeDistanceInBlocks;
if (distanceFromCamera < fadeDistance)
{
#ifdef GL_ARB_derivative_control
// Get higher precision derivatives when available
vec3 viewNormal = cross(dFdxFine(viewPos.xyz), dFdyFine(viewPos.xyz));
#else
// TODO vulkan
// #ifdef GL_ARB_derivative_control
// // Get higher precision derivatives when available
// vec3 viewNormal = cross(dFdxFine(viewPos.xyz), dFdyFine(viewPos.xyz));
// #else
vec3 viewNormal = cross(dFdx(viewPos.xyz), dFdy(viewPos.xyz));
#endif
// #endif
viewNormal = normalize(viewNormal);
occlusion = GetSpiralOcclusion(TexCoord, viewPos, viewNormal);