mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 22:02:44 +00:00 
			
		
		
		
	LibGL: Only normalize in glRotate* if possible
				
					
				
			Vectors of length 0 cannot be normalized, so prevent dividing by zero in the `glRotate*` API. This fixes the skybox rendering of Quake2.
This commit is contained in:
		
							parent
							
								
									2362cc2943
								
							
						
					
					
						commit
						5d0a64bfde
					
				
					 2 changed files with 6 additions and 5 deletions
				
			
		|  | @ -594,15 +594,16 @@ void GLContext::gl_mult_matrix(FloatMatrix4x4 const& matrix) | ||||||
|         VERIFY_NOT_REACHED(); |         VERIFY_NOT_REACHED(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void GLContext::gl_rotate(GLdouble angle, GLdouble x, GLdouble y, GLdouble z) | void GLContext::gl_rotate(GLfloat angle, GLfloat x, GLfloat y, GLfloat z) | ||||||
| { | { | ||||||
|     APPEND_TO_CALL_LIST_AND_RETURN_IF_NEEDED(gl_rotate, angle, x, y, z); |     APPEND_TO_CALL_LIST_AND_RETURN_IF_NEEDED(gl_rotate, angle, x, y, z); | ||||||
| 
 | 
 | ||||||
|     RETURN_WITH_ERROR_IF(m_in_draw_state, GL_INVALID_OPERATION); |     RETURN_WITH_ERROR_IF(m_in_draw_state, GL_INVALID_OPERATION); | ||||||
| 
 | 
 | ||||||
|     FloatVector3 axis = { (float)x, (float)y, (float)z }; |     FloatVector3 axis = { x, y, z }; | ||||||
|     axis.normalize(); |     if (axis.length() > 0.f) | ||||||
|     auto rotation_mat = Gfx::rotation_matrix(axis, static_cast<float>(angle * M_PI * 2 / 360)); |         axis.normalize(); | ||||||
|  |     auto rotation_mat = Gfx::rotation_matrix(axis, angle * static_cast<float>(M_PI * 2 / 360)); | ||||||
| 
 | 
 | ||||||
|     if (m_current_matrix_mode == GL_MODELVIEW) |     if (m_current_matrix_mode == GL_MODELVIEW) | ||||||
|         m_model_view_matrix = m_model_view_matrix * rotation_mat; |         m_model_view_matrix = m_model_view_matrix * rotation_mat; | ||||||
|  |  | ||||||
|  | @ -70,7 +70,7 @@ public: | ||||||
|     void gl_push_matrix(); |     void gl_push_matrix(); | ||||||
|     void gl_pop_matrix(); |     void gl_pop_matrix(); | ||||||
|     void gl_mult_matrix(FloatMatrix4x4 const& matrix); |     void gl_mult_matrix(FloatMatrix4x4 const& matrix); | ||||||
|     void gl_rotate(GLdouble angle, GLdouble x, GLdouble y, GLdouble z); |     void gl_rotate(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); | ||||||
|     void gl_scale(GLdouble x, GLdouble y, GLdouble z); |     void gl_scale(GLdouble x, GLdouble y, GLdouble z); | ||||||
|     void gl_translate(GLdouble x, GLdouble y, GLdouble z); |     void gl_translate(GLdouble x, GLdouble y, GLdouble z); | ||||||
|     void gl_vertex(GLdouble x, GLdouble y, GLdouble z, GLdouble w); |     void gl_vertex(GLdouble x, GLdouble y, GLdouble z, GLdouble w); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Jelle Raaijmakers
						Jelle Raaijmakers