From daf7f423642cad3e807ac35d669a404eac39a640 Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Wed, 24 Feb 2021 11:16:51 +0100 Subject: Fix line width broken for consecutive line draw calls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- source/blender/gpu/intern/gpu_immediate.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'source/blender/gpu/intern/gpu_immediate.cc') 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; } } -- cgit v1.2.3