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
This commit is contained in:
parent
0fe25a6232
commit
daf7f42364
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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. */
|
||||
|
|
Loading…
Reference in New Issue