mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-11-02 20:51:23 -07:00 
			
		
		
		
	Use glDrawArrays()
This commit is contained in:
		
							parent
							
								
									fc1a23f5b0
								
							
						
					
					
						commit
						228c84ddc1
					
				
					 1 changed files with 49 additions and 6 deletions
				
			
		| 
						 | 
				
			
			@ -136,12 +136,32 @@ sub draw_mesh {
 | 
			
		|||
    my $self = shift;
 | 
			
		||||
    
 | 
			
		||||
    my $mesh = $self->mesh;
 | 
			
		||||
    $mesh->align_to_origin;
 | 
			
		||||
    glBegin(GL_TRIANGLES);
 | 
			
		||||
    for my $facet (@{$mesh->facets}) {
 | 
			
		||||
        glVertex3f( map 0.1 * $_, @{ $mesh->vertices->[$_] } ) for @$facet;
 | 
			
		||||
    }
 | 
			
		||||
    glEnd();
 | 
			
		||||
    
 | 
			
		||||
    #glEnable(GL_CULL_FACE);
 | 
			
		||||
    glEnableClientState(GL_VERTEX_ARRAY);
 | 
			
		||||
    #glEnableClientState(GL_NORMAL_ARRAY);
 | 
			
		||||
    
 | 
			
		||||
    my @verts = map 0.1 * $_, map @{ $mesh->vertices->[$_] }, map @$_, @{$mesh->facets};
 | 
			
		||||
    my $verts = OpenGL::Array->new_list(GL_FLOAT, @verts);
 | 
			
		||||
    
 | 
			
		||||
    #my @norms = map @$_, map {my $f = $_; Slic3r::Geometry::triangle_normal(map $mesh->vertices->[$_], @$f) } @{$mesh->facets};
 | 
			
		||||
    #my $norms = OpenGL::Array->new_list(GL_FLOAT, @norms);
 | 
			
		||||
    
 | 
			
		||||
    #my @inv_norms = map @$_, map {my $f = $_; Slic3r::Geometry::triangle_normal(reverse map $mesh->vertices->[$_], @$f) } @{$mesh->facets};
 | 
			
		||||
    #my $inv_norms = OpenGL::Array->new_list(GL_FLOAT, @inv_norms);
 | 
			
		||||
    
 | 
			
		||||
    glVertexPointer_p(3, $verts);
 | 
			
		||||
    
 | 
			
		||||
    #glCullFace(GL_BACK);
 | 
			
		||||
    #glNormalPointer_p($norms);
 | 
			
		||||
    glDrawArrays(GL_TRIANGLES, 0, scalar @verts);
 | 
			
		||||
    
 | 
			
		||||
    #glCullFace(GL_FRONT);
 | 
			
		||||
    #glNormalPointer_p($inv_norms);
 | 
			
		||||
    #glDrawArrays(GL_TRIANGLES, 0, scalar @verts);
 | 
			
		||||
    
 | 
			
		||||
    #glDisableClientState(GL_NORMAL_ARRAY);
 | 
			
		||||
    glDisableClientState(GL_VERTEX_ARRAY);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
sub InitGL {
 | 
			
		||||
| 
						 | 
				
			
			@ -151,9 +171,32 @@ sub InitGL {
 | 
			
		|||
    return unless $self->GetContext;
 | 
			
		||||
    $self->init( 1 );
 | 
			
		||||
 
 | 
			
		||||
    $self->mesh->align_to_origin;
 | 
			
		||||
 
 | 
			
		||||
    glDisable( GL_LIGHTING );
 | 
			
		||||
    glDepthFunc( GL_LESS );
 | 
			
		||||
    glEnable( GL_DEPTH_TEST );
 | 
			
		||||
    
 | 
			
		||||
    if (0) {
 | 
			
		||||
        # Settings for our light.
 | 
			
		||||
        my @Light_Ambient  = ( 0.1, 0.1, 0.1, 1.0 );
 | 
			
		||||
        my @Light_Diffuse  = ( 1.2, 1.2, 1.2, 1.0 );
 | 
			
		||||
        my @Light_Position = ( 2.0, 2.0, 0.0, 1.0 );
 | 
			
		||||
    
 | 
			
		||||
        
 | 
			
		||||
            # Enables Smooth Color Shading; try GL_FLAT for (lack of) fun.
 | 
			
		||||
          glShadeModel(GL_SMOOTH);
 | 
			
		||||
        
 | 
			
		||||
          # Set up a light, turn it on.
 | 
			
		||||
          glLightfv_p(GL_LIGHT1, GL_POSITION, @Light_Position);
 | 
			
		||||
          glLightfv_p(GL_LIGHT1, GL_AMBIENT,  @Light_Ambient);
 | 
			
		||||
          glLightfv_p(GL_LIGHT1, GL_DIFFUSE,  @Light_Diffuse);
 | 
			
		||||
          glEnable(GL_LIGHT1);
 | 
			
		||||
          
 | 
			
		||||
          # A handy trick -- have surface material mirror the color.
 | 
			
		||||
        glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);
 | 
			
		||||
        glEnable(GL_COLOR_MATERIAL);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
sub Render {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue