Browse Source

Add draw-range behaviour to legacy-mode shaders.

Remco Burema 3 years ago
parent
commit
51c5572f0f
2 changed files with 28 additions and 0 deletions
  1. 14 0
      plugins/SimulationView/layers.shader
  2. 14 0
      plugins/SimulationView/layers_shadow.shader

+ 14 - 0
plugins/SimulationView/layers.shader

@@ -13,9 +13,11 @@ vertex =
     attribute highp vec4 a_vertex;
     attribute lowp vec4 a_color;
     attribute lowp vec4 a_material_color;
+    attribute highp float a_vertex_index;
 
     varying lowp vec4 v_color;
     varying float v_line_type;
+    varying highp float v_vertex_index;
 
     void main()
     {
@@ -28,6 +30,7 @@ vertex =
         }
 
         v_line_type = a_line_type;
+        v_vertex_index = a_vertex_index;
     }
 
 fragment =
@@ -40,14 +43,21 @@ fragment =
     #endif // GL_ES
     varying lowp vec4 v_color;
     varying float v_line_type;
+    varying highp float v_vertex_index;
 
     uniform int u_show_travel_moves;
     uniform int u_show_helpers;
     uniform int u_show_skin;
     uniform int u_show_infill;
 
+    uniform highp vec2 u_drawRange;
+
     void main()
     {
+        if (u_drawRange.x >= 0 && u_drawRange.y >= 0 && (v_vertex_index < u_drawRange.x || v_vertex_index > u_drawRange.y))
+        {
+            discard;
+        }
         if ((u_show_travel_moves == 0) && (v_line_type >= 7.5) && (v_line_type <= 9.5)) {  // actually, 8 and 9
             // discard movements
             discard;
@@ -88,10 +98,13 @@ u_show_helpers = 1
 u_show_skin = 1
 u_show_infill = 1
 
+u_drawRange = [-1, -1]
+
 [bindings]
 u_modelMatrix = model_matrix
 u_viewMatrix = view_matrix
 u_projectionMatrix = projection_matrix
+u_drawRange = draw_range
 
 [attributes]
 a_vertex = vertex
@@ -99,3 +112,4 @@ a_color = color
 a_extruder = extruder
 a_line_type = line_type
 a_material_color = material_color
+a_vertex_index = vertex_index

+ 14 - 0
plugins/SimulationView/layers_shadow.shader

@@ -13,9 +13,11 @@ vertex =
     attribute highp vec4 a_vertex;
     attribute lowp vec4 a_color;
     attribute lowp vec4 a_material_color;
+    attribute highp float a_vertex_index;
 
     varying lowp vec4 v_color;
     varying float v_line_type;
+    varying highp float v_vertex_index;
 
     void main()
     {
@@ -28,6 +30,7 @@ vertex =
         // }
 
         v_line_type = a_line_type;
+        v_vertex_index = a_vertex_index;
     }
 
 fragment =
@@ -40,14 +43,21 @@ fragment =
     #endif // GL_ES
     varying lowp vec4 v_color;
     varying float v_line_type;
+    varying highp float v_vertex_index;
 
     uniform int u_show_travel_moves;
     uniform int u_show_helpers;
     uniform int u_show_skin;
     uniform int u_show_infill;
 
+    uniform highp vec2 u_drawRange;
+
     void main()
     {
+        if (u_drawRange.x >= 0 && u_drawRange.y >= 0 && (v_vertex_index < u_drawRange.x || v_vertex_index > u_drawRange.y))
+        {
+            discard;
+        }
         if ((u_show_travel_moves == 0) && (v_line_type >= 7.5) && (v_line_type <= 9.5))
         {  // actually, 8 and 9
             // discard movements
@@ -92,10 +102,13 @@ u_show_helpers = 1
 u_show_skin = 1
 u_show_infill = 1
 
+u_drawRange = [-1, -1]
+
 [bindings]
 u_modelMatrix = model_matrix
 u_viewMatrix = view_matrix
 u_projectionMatrix = projection_matrix
+u_drawRange = draw_range
 
 [attributes]
 a_vertex = vertex
@@ -103,3 +116,4 @@ a_color = color
 a_extruder = extruder
 a_line_type = line_type
 a_material_color = material_color
+a_vertex_index = vertex_index