diff options
author | Michael Möller <mmoeller> | 2021-01-29 19:07:27 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2021-01-29 19:08:46 +0300 |
commit | 5d215d522541e32b9e33e92f836d2cf8eb6080c2 (patch) | |
tree | 0f125c5e246df237fbfa8790f08612212acc9fbf | |
parent | b3fc88554468eb91fac3c2afb9387e599e6db507 (diff) |
EEVEE: Fix GPUNodeLink memory leak for displacement nodes using SHD_SPACE_WORLD
When the displacement space is set to SHD_SPACE_WORLD, the GLSL method
"node_displacement_world" is used instead of the "node_displacement_object" method. The two GLSL methods:
```
void node_displacement_object(
float height, float midlevel, float scale, vec3 N, mat4 obmat, out vec3 result)
{
N = (vec4(N, 0.0) * obmat).xyz;
result = (height - midlevel) * scale * normalize(N);
result = (obmat * vec4(result, 0.0)).xyz;
}
void node_displacement_world(float height, float midlevel, float scale, vec3 N, out vec3 result)
{
result = (height - midlevel) * scale * normalize(N);
}
```
In contrast to the "node_displacement_object" method, the "node_displacement_world"
does not require an "obmat" parameter. Attempting to still pass "GPU_builtin(GPU_OBJECT_MATRIX)"
as additional parameter will result in a memory leak. The "GPUNodeLink" allocated in
the "GPU_builtin" method will never get released.
Fixes T83941 Memory leak when using the Displacement shader node in Eevee with the displacement
space set to "World Space"
-rw-r--r-- | source/blender/nodes/shader/nodes/node_shader_displacement.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/source/blender/nodes/shader/nodes/node_shader_displacement.c b/source/blender/nodes/shader/nodes/node_shader_displacement.c index 649aad370c0..e7deef23428 100644 --- a/source/blender/nodes/shader/nodes/node_shader_displacement.c +++ b/source/blender/nodes/shader/nodes/node_shader_displacement.c @@ -65,8 +65,7 @@ static int gpu_shader_displacement(GPUMaterial *mat, mat, node, "node_displacement_object", in, out, GPU_builtin(GPU_OBJECT_MATRIX)); } - return GPU_stack_link( - mat, node, "node_displacement_world", in, out, GPU_builtin(GPU_OBJECT_MATRIX)); + return GPU_stack_link(mat, node, "node_displacement_world", in, out); } /* node type definition */ |