aboutsummaryrefslogtreecommitdiff
path: root/adapters/fparkan-render-vulkan/shaders
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-11-01 06:49:51 +0300
committerValentin Popov <valentin@popov.link>2026-11-01 06:49:51 +0300
commit0f8b14abbf73a43402644c9acd0750bf25a79e98 (patch)
tree757099fc012659d54d7124223f823a47064630d7 /adapters/fparkan-render-vulkan/shaders
parent6d15bc20060cb98ab99351ef1731fc85a84746d9 (diff)
downloadfparkan-0f8b14abbf73a43402644c9acd0750bf25a79e98.tar.xz
fparkan-0f8b14abbf73a43402644c9acd0750bf25a79e98.zip
fix(render): use native shifted water reflection camera
Diffstat (limited to 'adapters/fparkan-render-vulkan/shaders')
-rw-r--r--adapters/fparkan-render-vulkan/shaders/triangle.frag15
-rw-r--r--adapters/fparkan-render-vulkan/shaders/triangle.frag.spvbin14512 -> 14716 bytes
2 files changed, 9 insertions, 6 deletions
diff --git a/adapters/fparkan-render-vulkan/shaders/triangle.frag b/adapters/fparkan-render-vulkan/shaders/triangle.frag
index 5d10152..2c71278 100644
--- a/adapters/fparkan-render-vulkan/shaders/triangle.frag
+++ b/adapters/fparkan-render-vulkan/shaders/triangle.frag
@@ -82,12 +82,15 @@ void main() {
vec2 bump_uv = plane_uv * frame.embm_wave.y + frame.embm_wave.x;
vec2 duv = max(vec2(-1.0), (texture(embm_bump, bump_uv).rg * 255.0 - 128.0) / 127.0);
vec2 displacement = duv * frame.embm_wave.zw;
- // shortcut: convert native map-UV displacement to the current mirror projection;
- // replace this projection when accepting the original shifted reflection camera.
- vec3 displaced_world = in_world_position - vec3(displacement.yx * span, 0.0);
- vec4 displaced_clip = frame.clip_from_world * vec4(displaced_world, 1.0);
- if (displaced_clip.w > 0.000001) {
- reflection_uv = displaced_clip.xy / displaced_clip.w * 0.5 + 0.5;
+ if ((mode & 128) != 0) {
+ reflection_uv = plane_uv + displacement;
+ } else {
+ // shortcut: non-perspective API cameras retain the projective mirror fallback.
+ vec3 displaced_world = in_world_position - vec3(displacement.yx * span, 0.0);
+ vec4 displaced_clip = frame.clip_from_world * vec4(displaced_world, 1.0);
+ if (displaced_clip.w > 0.000001) {
+ reflection_uv = displaced_clip.xy / displaced_clip.w * 0.5 + 0.5;
+ }
}
vec3 rgb = texture(reflection_color, reflection_uv).rgb * in_base_diffuse + in_base_specular;
out_color = vec4(mix(rgb * in_color, frame.fog_color.rgb, in_fog_factor), material.diffuse_alpha);
diff --git a/adapters/fparkan-render-vulkan/shaders/triangle.frag.spv b/adapters/fparkan-render-vulkan/shaders/triangle.frag.spv
index de3ace6..6deef9d 100644
--- a/adapters/fparkan-render-vulkan/shaders/triangle.frag.spv
+++ b/adapters/fparkan-render-vulkan/shaders/triangle.frag.spv
Binary files differ