Handle render-range in shader.

Instead of re-uploading the mesh each time the range changes, handle the range in the shaders with the new draw-range parameters. This does however, mean the range has to be in vertices, not in elements. This necessitates some changes to the simulation-view, and some added bits deeper in the base code. Mainly, since each time the type of a line changes, there is an extra vertex, there needs to be a type-change count available to get from 'paths' to range indices.
This commit is contained in:
Remco Burema 2021-07-25 22:26:59 +02:00
parent 87d3f6fd22
commit 96ca3b1417
6 changed files with 66 additions and 8 deletions

View file

@ -25,6 +25,7 @@ vertex41core =
in highp float a_extruder;
in highp float a_prev_line_type;
in highp float a_line_type;
in highp float a_vertex_index;
in highp float a_feedrate;
in highp float a_thickness;
@ -35,8 +36,9 @@ vertex41core =
out lowp vec2 v_line_dim;
out highp int v_extruder;
out highp mat4 v_extruder_opacity;
out float v_prev_line_type;
out float v_line_type;
out highp float v_prev_line_type;
out highp float v_line_type;
out highp float v_index;
out lowp vec4 f_color;
out highp vec3 f_vertex;
@ -114,6 +116,7 @@ vertex41core =
v_extruder = int(a_extruder);
v_prev_line_type = a_prev_line_type;
v_line_type = a_line_type;
v_index = a_vertex_index;
v_extruder_opacity = u_extruder_opacity;
// for testing without geometry shader
@ -137,6 +140,8 @@ geometry41core =
uniform int u_show_infill;
uniform int u_show_starts;
uniform highp vec2 u_drawRange;
layout(lines) in;
layout(triangle_strip, max_vertices = 40) out;
@ -148,6 +153,7 @@ geometry41core =
in mat4 v_extruder_opacity[];
in float v_prev_line_type[];
in float v_line_type[];
in float v_index[];
out vec4 f_color;
out vec3 f_normal;
@ -177,6 +183,10 @@ geometry41core =
float size_x;
float size_y;
if (u_drawRange[0] >= 0 && u_drawRange[1] >= 0 && (v_index[0] < u_drawRange[0] || v_index[0] >= u_drawRange[1]))
{
return;
}
if ((v_extruder_opacity[0][int(mod(v_extruder[0], 4))][v_extruder[0] / 4] == 0.0) && (v_line_type[0] != 8) && (v_line_type[0] != 9)) {
return;
}
@ -374,12 +384,15 @@ u_max_feedrate = 1
u_min_thickness = 0
u_max_thickness = 1
u_drawRange = [-1, -1]
[bindings]
u_modelMatrix = model_matrix
u_viewMatrix = view_matrix
u_projectionMatrix = projection_matrix
u_normalMatrix = normal_matrix
u_lightPosition = light_0_position
u_drawRange = draw_range
[attributes]
a_vertex = vertex
@ -392,3 +405,4 @@ a_prev_line_type = prev_line_type
a_line_type = line_type
a_feedrate = feedrate
a_thickness = thickness
a_vertex_index = vertex_index