summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_shader_gen.cpp
diff options
context:
space:
mode:
authorJannik Vogel <email@jannikvogel.de>2016-03-30 19:27:04 +0200
committerJannik Vogel <email@jannikvogel.de>2016-05-10 08:58:52 +0200
commitfc9cc21024bff71d98e0106c9d0fd0476ab3c17e (patch)
tree24e0cce21a87dc1074d57982efc06af6da01e663 /src/video_core/renderer_opengl/gl_shader_gen.cpp
parentPica: Implement W-Buffer in SW rasterizer (diff)
downloadyuzu-fc9cc21024bff71d98e0106c9d0fd0476ab3c17e.tar
yuzu-fc9cc21024bff71d98e0106c9d0fd0476ab3c17e.tar.gz
yuzu-fc9cc21024bff71d98e0106c9d0fd0476ab3c17e.tar.bz2
yuzu-fc9cc21024bff71d98e0106c9d0fd0476ab3c17e.tar.lz
yuzu-fc9cc21024bff71d98e0106c9d0fd0476ab3c17e.tar.xz
yuzu-fc9cc21024bff71d98e0106c9d0fd0476ab3c17e.tar.zst
yuzu-fc9cc21024bff71d98e0106c9d0fd0476ab3c17e.zip
Diffstat (limited to 'src/video_core/renderer_opengl/gl_shader_gen.cpp')
-rw-r--r--src/video_core/renderer_opengl/gl_shader_gen.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_gen.cpp b/src/video_core/renderer_opengl/gl_shader_gen.cpp
index 0890adb12..0c3153e8f 100644
--- a/src/video_core/renderer_opengl/gl_shader_gen.cpp
+++ b/src/video_core/renderer_opengl/gl_shader_gen.cpp
@@ -540,6 +540,7 @@ layout (std140) uniform shader_data {
vec4 const_color[NUM_TEV_STAGES];
vec4 tev_combiner_buffer_color;
int alphatest_ref;
+ float depth_scale;
float depth_offset;
vec3 lighting_global_ambient;
LightSrc light_src[NUM_LIGHTS];
@@ -581,7 +582,15 @@ vec4 secondary_fragment_color = vec4(0.0);
}
out += "color = last_tex_env_out;\n";
- out += "gl_FragDepth = gl_FragCoord.z + depth_offset;\n}";
+
+ out += "float z_over_w = 1.0 - gl_FragCoord.z * 2.0;\n";
+ out += "float depth = z_over_w * depth_scale + depth_offset;\n";
+ if (state.depthmap_enable == Pica::Regs::DepthBuffering::WBuffering) {
+ out += "depth /= gl_FragCoord.w;\n";
+ }
+ out += "gl_FragDepth = depth;\n";
+
+ out += "}";
return out;
}