mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-21 05:37:52 -06:00
Rewrote the OpenGL object rendering to indexed triangle / quad sets
for lower memory consumption. Rewrote the print path 3D preview to generate these indexed triangle / quad sets, possibly with at least as possible duplication of vertices, with a crease angle of 45 degrees, leading to maximum 8% overshoots at the corners.
This commit is contained in:
parent
e7a920fe16
commit
d18e10c7c9
6 changed files with 414 additions and 566 deletions
|
@ -1254,20 +1254,20 @@ sub draw_volumes {
|
|||
glPushMatrix();
|
||||
glTranslatef(@{$volume->origin});
|
||||
glCullFace(GL_BACK);
|
||||
my $qverts_cnt = $volume->qverts_to_render_cnt;
|
||||
if ($qverts_cnt) {
|
||||
glVertexPointer_c(3, GL_FLOAT, 0, $volume->qverts_to_render_ptr);
|
||||
glNormalPointer_c(GL_FLOAT, 0, $volume->qnorms_to_render_ptr);
|
||||
glDrawArrays(GL_QUADS, 0, $qverts_cnt / 3);
|
||||
if ($volume->indexed) {
|
||||
my $quads_cnt = $volume->indexed_quads_to_render_cnt;
|
||||
my $triangles_cnt = $volume->indexed_triangles_to_render_cnt;
|
||||
if ($quads_cnt + $triangles_cnt > 0) {
|
||||
glInterleavedArrays_c(GL_N3F_V3F, 0, $volume->triangles_to_render_ptr);
|
||||
glDrawElements_c(GL_QUADS, $quads_cnt, GL_UNSIGNED_INT, $volume->quad_indices_to_render_ptr ) if ($quads_cnt);
|
||||
glDrawElements_c(GL_TRIANGLES, $triangles_cnt, GL_UNSIGNED_INT, $volume->triangle_indices_to_render_ptr) if ($triangles_cnt);
|
||||
glInterleavedArrays_c(GL_N3F_V3F, 0, 0);
|
||||
}
|
||||
} elsif (! $volume->empty) {
|
||||
glInterleavedArrays_c(GL_N3F_V3F, 0, $volume->triangles_to_render_ptr);
|
||||
glDrawArrays(GL_TRIANGLES, 0, $volume->triangles_to_render_cnt);
|
||||
glInterleavedArrays_c(GL_N3F_V3F, 0, 0);
|
||||
}
|
||||
my $tverts_cnt = $volume->tverts_to_render_cnt;
|
||||
if ($tverts_cnt) {
|
||||
glVertexPointer_c(3, GL_FLOAT, 0, $volume->tverts_to_render_ptr);
|
||||
glNormalPointer_c(GL_FLOAT, 0, $volume->tnorms_to_render_ptr);
|
||||
glDrawArrays(GL_TRIANGLES, 0, $tverts_cnt / 3);
|
||||
}
|
||||
glVertexPointer_c(3, GL_FLOAT, 0, 0);
|
||||
glNormalPointer_c(GL_FLOAT, 0, 0);
|
||||
glPopMatrix();
|
||||
|
||||
if ($shader_active) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue