mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 12:11:15 -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
	
	 bubnikv
						bubnikv