Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2020-11-17 03:28:33 +0300
committerClément Foucault <foucault.clem@gmail.com>2020-11-17 03:31:32 +0300
commit82b8c156841f7202a4ca806968a782e517201d81 (patch)
treeeb12ae03e9b7143e283baa8e1296a3e1f3670a4f /source
parent906ff7b8fea8ae077c3d3f39ae2c9a2be08b88e5 (diff)
Fix T81827: MacOS lines that should be thick are green instead
The issue was the use of alpha values of 0 when there were no blending enabled. This patch just disables the smoothing of the wires in this case.
Diffstat (limited to 'source')
-rw-r--r--source/blender/gpu/intern/gpu_immediate.cc9
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_polyline_frag.glsl5
-rw-r--r--source/blender/gpu/shaders/gpu_shader_3D_polyline_geom.glsl7
3 files changed, 17 insertions, 4 deletions
diff --git a/source/blender/gpu/intern/gpu_immediate.cc b/source/blender/gpu/intern/gpu_immediate.cc
index 44c6cac02ca..979b3cbb557 100644
--- a/source/blender/gpu/intern/gpu_immediate.cc
+++ b/source/blender/gpu/intern/gpu_immediate.cc
@@ -180,6 +180,11 @@ static void wide_line_workaround_start(GPUPrimType prim_type)
immUniform2fv("viewportSize", &viewport[2]);
immUniform1f("lineWidth", line_width);
+ if (GPU_blend_get() == GPU_BLEND_NONE) {
+ /* Disable line smoothing when blending is disabled (see T81827). */
+ immUniform1i("lineSmooth", 0);
+ }
+
if (ELEM(polyline_sh,
GPU_SHADER_3D_POLYLINE_CLIPPED_UNIFORM_COLOR,
GPU_SHADER_3D_POLYLINE_UNIFORM_COLOR)) {
@@ -190,6 +195,10 @@ static void wide_line_workaround_start(GPUPrimType prim_type)
static void wide_line_workaround_end(void)
{
if (imm->prev_shader) {
+ if (GPU_blend_get() == GPU_BLEND_NONE) {
+ /* Restore default. */
+ immUniform1i("lineSmooth", 1);
+ }
immUnbindProgram();
immBindShader(imm->prev_shader);
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_polyline_frag.glsl b/source/blender/gpu/shaders/gpu_shader_3D_polyline_frag.glsl
index 9c6b109d659..3ea8f7dbfbe 100644
--- a/source/blender/gpu/shaders/gpu_shader_3D_polyline_frag.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_3D_polyline_frag.glsl
@@ -1,5 +1,6 @@
uniform float lineWidth;
+uniform bool lineSmooth = true;
in vec4 finalColor;
noperspective in float smoothline;
@@ -19,6 +20,8 @@ void main()
}
#endif
fragColor = finalColor;
- fragColor.a *= clamp((lineWidth + SMOOTH_WIDTH) * 0.5 - abs(smoothline), 0.0, 1.0);
+ if (lineSmooth) {
+ fragColor.a *= clamp((lineWidth + SMOOTH_WIDTH) * 0.5 - abs(smoothline), 0.0, 1.0);
+ }
fragColor = blender_srgb_to_framebuffer_space(fragColor);
}
diff --git a/source/blender/gpu/shaders/gpu_shader_3D_polyline_geom.glsl b/source/blender/gpu/shaders/gpu_shader_3D_polyline_geom.glsl
index fd9b7e221e6..70026398937 100644
--- a/source/blender/gpu/shaders/gpu_shader_3D_polyline_geom.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_3D_polyline_geom.glsl
@@ -5,6 +5,7 @@ layout(triangle_strip, max_vertices = 4) out;
uniform vec4 color;
uniform vec2 viewportSize;
uniform float lineWidth;
+uniform bool lineSmooth = true;
#if !defined(UNIFORM)
in vec4 finalColor_g[];
@@ -53,12 +54,12 @@ void do_vertex(const int i, vec4 pos, vec2 ofs)
clip = clip_g[i];
#endif
- smoothline = (lineWidth + SMOOTH_WIDTH) * 0.5;
+ smoothline = (lineWidth + SMOOTH_WIDTH * float(lineSmooth)) * 0.5;
gl_Position = pos;
gl_Position.xy += ofs * pos.w;
EmitVertex();
- smoothline = -(lineWidth + SMOOTH_WIDTH) * 0.5;
+ smoothline = -(lineWidth + SMOOTH_WIDTH * float(lineSmooth)) * 0.5;
gl_Position = pos;
gl_Position.xy -= ofs * pos.w;
EmitVertex();
@@ -77,7 +78,7 @@ void main(void)
vec2 ofs = vec2(-e.y, e.x);
#endif
ofs /= viewportSize.xy;
- ofs *= lineWidth + SMOOTH_WIDTH;
+ ofs *= lineWidth + SMOOTH_WIDTH * float(lineSmooth);
do_vertex(0, p0, ofs);
do_vertex(1, p1, ofs);