mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 18:27:35 +00:00
LibGL: Implement glGetDoublev
This commit is contained in:
parent
6d4a5a40a0
commit
40724a426f
5 changed files with 61 additions and 40 deletions
|
@ -1442,38 +1442,6 @@ void SoftwareGLContext::gl_active_texture(GLenum texture)
|
|||
m_active_texture_unit = &m_texture_units.at(texture - GL_TEXTURE0);
|
||||
}
|
||||
|
||||
void SoftwareGLContext::gl_get_floatv(GLenum pname, GLfloat* params)
|
||||
{
|
||||
RETURN_WITH_ERROR_IF(m_in_draw_state, GL_INVALID_OPERATION);
|
||||
|
||||
auto flatten_and_assign_matrix = [¶ms](const FloatMatrix4x4& matrix) {
|
||||
auto elements = matrix.elements();
|
||||
|
||||
for (size_t i = 0; i < 4; ++i) {
|
||||
for (size_t j = 0; j < 4; ++j) {
|
||||
params[i * 4 + j] = elements[i][j];
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
switch (pname) {
|
||||
case GL_MODELVIEW_MATRIX:
|
||||
if (m_current_matrix_mode == GL_MODELVIEW)
|
||||
flatten_and_assign_matrix(m_model_view_matrix);
|
||||
else {
|
||||
if (m_model_view_matrix_stack.is_empty())
|
||||
flatten_and_assign_matrix(FloatMatrix4x4::identity());
|
||||
else
|
||||
flatten_and_assign_matrix(m_model_view_matrix_stack.last());
|
||||
}
|
||||
break;
|
||||
default:
|
||||
// FIXME: Because glQuake only requires GL_MODELVIEW_MATRIX, that is the only parameter
|
||||
// that we currently support. More parameters should be supported.
|
||||
RETURN_WITH_ERROR_IF(true, GL_INVALID_ENUM);
|
||||
}
|
||||
}
|
||||
|
||||
void SoftwareGLContext::gl_get_booleanv(GLenum pname, GLboolean* data)
|
||||
{
|
||||
RETURN_WITH_ERROR_IF(m_in_draw_state, GL_INVALID_OPERATION);
|
||||
|
@ -1510,6 +1478,48 @@ void SoftwareGLContext::gl_get_booleanv(GLenum pname, GLboolean* data)
|
|||
}
|
||||
}
|
||||
|
||||
void SoftwareGLContext::gl_get_doublev(GLenum pname, GLdouble* params)
|
||||
{
|
||||
get_floating_point(pname, params);
|
||||
}
|
||||
|
||||
void SoftwareGLContext::gl_get_floatv(GLenum pname, GLfloat* params)
|
||||
{
|
||||
get_floating_point(pname, params);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void SoftwareGLContext::get_floating_point(GLenum pname, T* params)
|
||||
{
|
||||
RETURN_WITH_ERROR_IF(m_in_draw_state, GL_INVALID_OPERATION);
|
||||
|
||||
auto flatten_and_assign_matrix = [¶ms](const FloatMatrix4x4& matrix) {
|
||||
auto elements = matrix.elements();
|
||||
|
||||
for (size_t i = 0; i < 4; ++i) {
|
||||
for (size_t j = 0; j < 4; ++j) {
|
||||
params[i * 4 + j] = static_cast<T>(elements[i][j]);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
switch (pname) {
|
||||
case GL_MODELVIEW_MATRIX:
|
||||
if (m_current_matrix_mode == GL_MODELVIEW)
|
||||
flatten_and_assign_matrix(m_model_view_matrix);
|
||||
else {
|
||||
if (m_model_view_matrix_stack.is_empty())
|
||||
flatten_and_assign_matrix(FloatMatrix4x4::identity());
|
||||
else
|
||||
flatten_and_assign_matrix(m_model_view_matrix_stack.last());
|
||||
}
|
||||
break;
|
||||
default:
|
||||
dbgln_if(GL_DEBUG, "FIXME: unimplemented floating point parameter {:#x}", pname);
|
||||
RETURN_WITH_ERROR_IF(true, GL_INVALID_ENUM);
|
||||
}
|
||||
}
|
||||
|
||||
void SoftwareGLContext::gl_get_integerv(GLenum pname, GLint* data)
|
||||
{
|
||||
RETURN_WITH_ERROR_IF(m_in_draw_state, GL_INVALID_OPERATION);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue