mirror of
https://github.com/RGBCube/serenity
synced 2025-06-23 19:42:07 +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 };
|
||||||
|
if (axis.length() > 0.f)
|
||||||
axis.normalize();
|
axis.normalize();
|
||||||
auto rotation_mat = Gfx::rotation_matrix(axis, static_cast<float>(angle * M_PI * 2 / 360));
|
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