[Bf-blender-cvs] [1f47e3b49cd] temp-T95933-object-mode-curve-selection: Viewport size aware.

Jeroen Bakker noreply at git.blender.org
Fri Jul 1 13:19:40 CEST 2022


Commit: 1f47e3b49cd7be838b8d730912d05c6e87897cf6
Author: Jeroen Bakker
Date:   Fri Jul 1 13:19:27 2022 +0200
Branches: temp-T95933-object-mode-curve-selection
https://developer.blender.org/rB1f47e3b49cd7be838b8d730912d05c6e87897cf6

Viewport size aware.

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

M	source/blender/draw/engines/overlay/shaders/overlay_outline_prepass_curves_vert.glsl

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

diff --git a/source/blender/draw/engines/overlay/shaders/overlay_outline_prepass_curves_vert.glsl b/source/blender/draw/engines/overlay/shaders/overlay_outline_prepass_curves_vert.glsl
index 6b57cb27169..8dc240996ed 100644
--- a/source/blender/draw/engines/overlay/shaders/overlay_outline_prepass_curves_vert.glsl
+++ b/source/blender/draw/engines/overlay/shaders/overlay_outline_prepass_curves_vert.glsl
@@ -45,23 +45,24 @@ void main()
                                  thickness,
                                  thick_time);
 
-  vec4 pos_ndc = point_world_to_ndc(world_pos);
+  vec4 pos_ndc;
 
   if (hairThicknessRes > 1) {
     if (thick_time == 0.0) {
-      float thick_time = ((gl_VertexID % hairThicknessRes) == 0 ? -1.0 : 1.0) * 0.0001;
+      float thick_time = ((gl_VertexID % hairThicknessRes) == 0 ? -1.0 : 1.0) * 0.00001;
       world_pos = center_world_pos + binor * thick_time;
     }
-    vec3 pos_view = point_world_to_view(world_pos);
-    vec3 orig_pos_view = point_world_to_view(center_world_pos);
-    vec3 d = pos_view - orig_pos_view;
-    /* TODO: make screen size aware. */
-    float distance = length(d.xy);
-    if (distance < 0.0001) {
-      distance = 0.0001;
-    }
-    pos_view = orig_pos_view + distance * normalize(d);
-    pos_ndc = point_view_to_ndc(pos_view);
+    pos_ndc = point_world_to_ndc(world_pos);
+    vec4 orig_pos_ndc = point_world_to_ndc(center_world_pos);
+    vec4 d = pos_ndc - orig_pos_ndc;
+    float distance = max(length(d.xy),
+                         (drw_view.viewport_size_inverse.x * drw_view.wininv[0][0] +
+                          drw_view.viewport_size_inverse.y * drw_view.wininv[1][1]) /
+                             2.0);
+    pos_ndc = orig_pos_ndc + distance * normalize(d);
+  }
+  else {
+    pos_ndc = point_world_to_ndc(world_pos);
   }
 
   gl_Position = pos_ndc;



More information about the Bf-blender-cvs mailing list