mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 06:02:44 +00:00 
			
		
		
		
	LibGL: Fix triangle winding calculation
Since we operate in screen space where y points down we need to reverse what is considered clock wise and what is considered counter clockwise. The rasterizer always expects triangles with a consistent winding order thus swap 2 vertices if necessary to reverse the winding before passing the triangle on to the rasterization stage.
This commit is contained in:
		
							parent
							
								
									220ac5eb02
								
							
						
					
					
						commit
						addbcd42d7
					
				
					 2 changed files with 6 additions and 2 deletions
				
			
		|  | @ -60,7 +60,7 @@ private: | |||
|         start_timer(20); | ||||
| 
 | ||||
|         GL::make_context_current(m_context); | ||||
|         glFrontFace(GL_CW); | ||||
|         glFrontFace(GL_CCW); | ||||
|         glEnable(GL_CULL_FACE); | ||||
|         glEnable(GL_DEPTH_TEST); | ||||
| 
 | ||||
|  |  | |||
|  | @ -246,7 +246,7 @@ void SoftwareGLContext::gl_end() | |||
|             continue; | ||||
| 
 | ||||
|         if (m_cull_faces) { | ||||
|             bool is_front = (m_front_face == GL_CCW ? area > 0 : area < 0); | ||||
|             bool is_front = (m_front_face == GL_CCW ? area < 0 : area > 0); | ||||
| 
 | ||||
|             if (is_front && (m_culled_sides == GL_FRONT || m_culled_sides == GL_FRONT_AND_BACK)) | ||||
|                 continue; | ||||
|  | @ -255,6 +255,10 @@ void SoftwareGLContext::gl_end() | |||
|                 continue; | ||||
|         } | ||||
| 
 | ||||
|         if (area > 0) { | ||||
|             swap(triangle.vertices[0], triangle.vertices[1]); | ||||
|         } | ||||
| 
 | ||||
|         m_rasterizer.submit_triangle(triangle, m_texture_units); | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Stephan Unverwerth
						Stephan Unverwerth