[Bf-blender-cvs] [82b8c156841] blender-v2.91-release: Fix T81827: MacOS lines that should be thick are green instead

Clément Foucault noreply at git.blender.org
Tue Nov 17 01:31:45 CET 2020


Commit: 82b8c156841f7202a4ca806968a782e517201d81
Author: Clément Foucault
Date:   Tue Nov 17 01:28:33 2020 +0100
Branches: blender-v2.91-release
https://developer.blender.org/rB82b8c156841f7202a4ca806968a782e517201d81

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.

===================================================================

M	source/blender/gpu/intern/gpu_immediate.cc
M	source/blender/gpu/shaders/gpu_shader_3D_polyline_frag.glsl
M	source/blender/gpu/shaders/gpu_shader_3D_polyline_geom.glsl

===================================================================

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);



More information about the Bf-blender-cvs mailing list