mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 22:47:29 -06:00
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:
parent
87d3f6fd22
commit
96ca3b1417
6 changed files with 66 additions and 8 deletions
|
@ -18,6 +18,7 @@ vertex41core =
|
|||
in highp vec2 a_line_dim; // line width and thickness
|
||||
in highp float a_extruder;
|
||||
in highp float a_line_type;
|
||||
in highp float a_vertex_index;
|
||||
|
||||
out lowp vec4 v_color;
|
||||
|
||||
|
@ -26,7 +27,8 @@ vertex41core =
|
|||
out lowp vec2 v_line_dim;
|
||||
out highp int v_extruder;
|
||||
out highp mat4 v_extruder_opacity;
|
||||
out float v_line_type;
|
||||
out highp float v_line_type;
|
||||
out highp float v_index;
|
||||
|
||||
out lowp vec4 f_color;
|
||||
out highp vec3 f_vertex;
|
||||
|
@ -47,6 +49,7 @@ vertex41core =
|
|||
v_line_dim = a_line_dim;
|
||||
v_extruder = int(a_extruder);
|
||||
v_line_type = a_line_type;
|
||||
v_index = a_vertex_index;
|
||||
v_extruder_opacity = u_extruder_opacity;
|
||||
|
||||
// for testing without geometry shader
|
||||
|
@ -67,6 +70,8 @@ geometry41core =
|
|||
uniform int u_show_skin;
|
||||
uniform int u_show_infill;
|
||||
|
||||
uniform highp vec2 u_drawRange;
|
||||
|
||||
layout(lines) in;
|
||||
layout(triangle_strip, max_vertices = 26) out;
|
||||
|
||||
|
@ -77,6 +82,7 @@ geometry41core =
|
|||
in int v_extruder[];
|
||||
in mat4 v_extruder_opacity[];
|
||||
in float v_line_type[];
|
||||
in float v_index[];
|
||||
|
||||
out vec4 f_color;
|
||||
out vec3 f_normal;
|
||||
|
@ -106,6 +112,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;
|
||||
}
|
||||
|
@ -268,12 +278,15 @@ 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_normalMatrix = normal_matrix
|
||||
u_lightPosition = light_0_position
|
||||
u_drawRange = draw_range
|
||||
|
||||
[attributes]
|
||||
a_vertex = vertex
|
||||
|
@ -284,3 +297,4 @@ a_line_dim = line_dim
|
|||
a_extruder = extruder
|
||||
a_material_color = material_color
|
||||
a_line_type = line_type
|
||||
a_vertex_index = vertex_index
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue