diff options
Diffstat (limited to 'source/blender/draw/engines/workbench/shaders/workbench_transparent_accum_frag.glsl')
-rw-r--r-- | source/blender/draw/engines/workbench/shaders/workbench_transparent_accum_frag.glsl | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_transparent_accum_frag.glsl b/source/blender/draw/engines/workbench/shaders/workbench_transparent_accum_frag.glsl index 213279b1913..cd5ac21688c 100644 --- a/source/blender/draw/engines/workbench/shaders/workbench_transparent_accum_frag.glsl +++ b/source/blender/draw/engines/workbench/shaders/workbench_transparent_accum_frag.glsl @@ -6,7 +6,7 @@ #pragma BLENDER_REQUIRE(workbench_world_light_lib.glsl) /* Special function only to be used with calculate_transparent_weight(). */ -float linear_zdepth(float depth, vec4 viewvecs[2], mat4 proj_mat) +float linear_zdepth(float depth, mat4 proj_mat) { if (proj_mat[3][3] == 0.0) { float d = 2.0 * depth - 1.0; @@ -14,7 +14,8 @@ float linear_zdepth(float depth, vec4 viewvecs[2], mat4 proj_mat) } else { /* Return depth from near plane. */ - return depth * viewvecs[1].z; + float z_delta = -2.0 / proj_mat[2][2]; + return depth * z_delta; } } @@ -24,7 +25,7 @@ float linear_zdepth(float depth, vec4 viewvecs[2], mat4 proj_mat) */ float calculate_transparent_weight(void) { - float z = linear_zdepth(gl_FragCoord.z, drw_view.viewvecs, drw_view.winmat); + float z = linear_zdepth(gl_FragCoord.z, drw_view.winmat); #if 0 /* Eq 10 : Good for surfaces with varying opacity (like particles) */ float a = min(1.0, alpha * 10.0) + 0.01; |