diff options
author | Julian Eisel <julian@blender.org> | 2021-02-24 13:16:51 +0300 |
---|---|---|
committer | Julian Eisel <julian@blender.org> | 2021-02-24 13:16:51 +0300 |
commit | daf7f423642cad3e807ac35d669a404eac39a640 (patch) | |
tree | 0548194d2379510a69ffb63086583c0e14d8056b /source/blender | |
parent | 0fe25a6232c4f8eacda02e23945ac3d2ad8808ff (diff) |
Fix line width broken for consecutive line draw calls
D9054 did multiple consecutive `immBegin()`/`immEnd()` draw calls to draw
multiple lines at varying thickness. This would only work for the first line,
then they'd all get a 1px thickness (at least on macOS).
Issue was that `wide_line_workaround_end()` called `immBindShader()` directly
to restore the old shader (which the workaround overrides). However this
doesn't set `imm->builtin_shader_bound` which has to be done for the workaround
to work on the next `immBegin()` call. Instead `immBindBuiltinProgram()` can be
called.
Differential Revision: https://developer.blender.org/D10520
Reviewed by: Clément Foucault
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/gpu/intern/gpu_immediate.cc | 8 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_immediate_private.hh | 2 |
2 files changed, 5 insertions, 5 deletions
diff --git a/source/blender/gpu/intern/gpu_immediate.cc b/source/blender/gpu/intern/gpu_immediate.cc index 95718391165..e56dcd16528 100644 --- a/source/blender/gpu/intern/gpu_immediate.cc +++ b/source/blender/gpu/intern/gpu_immediate.cc @@ -166,7 +166,7 @@ static void wide_line_workaround_start(GPUPrimType prim_type) return; } - imm->prev_shader = imm->shader; + imm->prev_builtin_shader = imm->builtin_shader_bound; immUnbindProgram(); @@ -194,15 +194,15 @@ static void wide_line_workaround_start(GPUPrimType prim_type) static void wide_line_workaround_end() { - if (imm->prev_shader) { + if (imm->prev_builtin_shader) { if (GPU_blend_get() == GPU_BLEND_NONE) { /* Restore default. */ immUniform1i("lineSmooth", 1); } immUnbindProgram(); - immBindShader(imm->prev_shader); - imm->prev_shader = nullptr; + immBindBuiltinProgram(imm->prev_builtin_shader); + imm->prev_builtin_shader = GPU_SHADER_TEXT; } } diff --git a/source/blender/gpu/intern/gpu_immediate_private.hh b/source/blender/gpu/intern/gpu_immediate_private.hh index 98399897ea9..382f70eeec4 100644 --- a/source/blender/gpu/intern/gpu_immediate_private.hh +++ b/source/blender/gpu/intern/gpu_immediate_private.hh @@ -58,7 +58,7 @@ class Immediate { /** Wide Line workaround. */ /** Previously bound shader to restore after drawing. */ - GPUShader *prev_shader = NULL; + eGPUBuiltinShader prev_builtin_shader = GPU_SHADER_TEXT; /** Builtin shader index. Used to test if the workaround can be done. */ eGPUBuiltinShader builtin_shader_bound = GPU_SHADER_TEXT; /** Uniform color: Kept here to update the wide-line shader just before #immBegin. */ |