aboutsummaryrefslogtreecommitdiff
path: root/adapters/fparkan-render-vulkan/shaders/triangle.vert
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-10-18 06:28:16 +0300
committerValentin Popov <valentin@popov.link>2026-10-18 06:28:16 +0300
commitc77c078efee9ece70c3f82793ed002f82a95eb85 (patch)
tree2e12bd0f82dcf2a1b728b3a00e8477414d6fb90f /adapters/fparkan-render-vulkan/shaders/triangle.vert
parentd97c8d40bfbae097435f10e46ecad5431504c729 (diff)
downloadfparkan-c77c078efee9ece70c3f82793ed002f82a95eb85.tar.xz
fparkan-c77c078efee9ece70c3f82793ed002f82a95eb85.zip
fix: preserve native sky sprite screen depth
Diffstat (limited to 'adapters/fparkan-render-vulkan/shaders/triangle.vert')
-rw-r--r--adapters/fparkan-render-vulkan/shaders/triangle.vert9
1 files changed, 6 insertions, 3 deletions
diff --git a/adapters/fparkan-render-vulkan/shaders/triangle.vert b/adapters/fparkan-render-vulkan/shaders/triangle.vert
index 201c31a..83a1751 100644
--- a/adapters/fparkan-render-vulkan/shaders/triangle.vert
+++ b/adapters/fparkan-render-vulkan/shaders/triangle.vert
@@ -232,9 +232,10 @@ void main() {
out_uv = in_uv;
out_detail_uv = in_detail_uv;
out_overlay_alpha = in_overlay_alpha;
- out_fog_factor = native_fog_factor(in_position);
int mode = int(round(material.material_mode));
int combiner_mode = mode & 3;
+ bool screen_tl = (mode & 8) != 0;
+ out_fog_factor = screen_tl ? 0.0 : native_fog_factor(in_position);
if (combiner_mode == 0) {
LightingTerms base_terms = native_material_lighting(
in_position,
@@ -262,12 +263,14 @@ void main() {
out_overlay_diffuse = vec3(1.0);
out_overlay_specular = vec3(0.0);
}
- vec4 clip_position = frame.clip_from_world * vec4(in_position, 1.0);
+ vec4 clip_position = screen_tl
+ ? vec4(in_position, 1.0)
+ : frame.clip_from_world * vec4(in_position, 1.0);
// Sky far-depth is a Vulkan projection choice for layers authored around
// the camera. Keep world positions, normals, and UVs intact while placing
// the resulting primitive at the far depth; this does not assert native
// D3D depth-bit equivalence.
- if ((mode & 4) != 0) {
+ if ((mode & 4) != 0 && !screen_tl) {
clip_position.z = clip_position.w;
}
gl_Position = clip_position;