Skip to content

Commit

Permalink
LibGL: Implement glGetIntegerv
Browse files Browse the repository at this point in the history
  • Loading branch information
Quaker762 authored and awesomekling committed Aug 17, 2021
1 parent 0b67369 commit 8ad42e6
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 0 deletions.
3 changes: 3 additions & 0 deletions Userland/Libraries/LibGL/GL/gl.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ extern "C" {

// Alpha blending
#define GL_BLEND 0x0BE2
#define GL_BLEND_SRC_ALPHA 0x0302
#define GL_BLEND_DST_ALPHA 0x0304

// Utility
#define GL_VENDOR 0x1F00
Expand Down Expand Up @@ -358,6 +360,7 @@ GLAPI void glBindTexture(GLenum target, GLuint texture);
GLAPI void glActiveTexture(GLenum texture);
GLAPI void glGetFloatv(GLenum pname, GLfloat* params);
GLAPI void glGetBooleanv(GLenum pname, GLboolean* data);
GLAPI void glGetIntegerv(GLenum pname, GLint* data);
GLAPI void glDepthMask(GLboolean flag);
GLAPI void glEnableClientState(GLenum cap);
GLAPI void glDisableClientState(GLenum cap);
Expand Down
1 change: 1 addition & 0 deletions Userland/Libraries/LibGL/GLContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ class GLContext {
virtual void gl_draw_elements(GLenum mode, GLsizei count, GLenum type, const void* indices) = 0;
virtual void gl_color_mask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) = 0;
virtual void gl_get_booleanv(GLenum pname, GLboolean* data) = 0;
virtual void gl_get_integerv(GLenum pname, GLint* data) = 0;

virtual void present() = 0;
};
Expand Down
5 changes: 5 additions & 0 deletions Userland/Libraries/LibGL/GLUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,11 @@ void glGetBooleanv(GLenum pname, GLboolean* data)
g_gl_context->gl_get_booleanv(pname, data);
}

void glGetIntegerv(GLenum pname, GLint* data)
{
g_gl_context->gl_get_integerv(pname, data);
}

void glDepthMask(GLboolean flag)
{
g_gl_context->gl_depth_mask(flag);
Expand Down
18 changes: 18 additions & 0 deletions Userland/Libraries/LibGL/SoftwareGLContext.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1416,6 +1416,24 @@ void SoftwareGLContext::gl_get_booleanv(GLenum pname, GLboolean* data)
}
}

void SoftwareGLContext::gl_get_integerv(GLenum pname, GLint* data)
{
RETURN_WITH_ERROR_IF(m_in_draw_state, GL_INVALID_OPERATION);

switch (pname) {
case GL_BLEND_SRC_ALPHA:
*data = m_blend_source_factor;
break;
case GL_BLEND_DST_ALPHA:
*data = m_blend_destination_factor;
break;
default:
// According to the Khronos docs, we always return GL_INVALID_ENUM if we encounter a non-accepted value
// for `pname`
RETURN_WITH_ERROR_IF(true, GL_INVALID_ENUM);
}
}

void SoftwareGLContext::gl_depth_mask(GLboolean flag)
{
APPEND_TO_CALL_LIST_AND_RETURN_IF_NEEDED(gl_depth_mask, flag);
Expand Down
1 change: 1 addition & 0 deletions Userland/Libraries/LibGL/SoftwareGLContext.h
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ class SoftwareGLContext : public GLContext {
virtual void gl_draw_elements(GLenum mode, GLsizei count, GLenum type, const void* indices) override;
virtual void gl_color_mask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) override;
virtual void gl_get_booleanv(GLenum pname, GLboolean* data) override;
virtual void gl_get_integerv(GLenum pname, GLint* data) override;
virtual void present() override;

private:
Expand Down

0 comments on commit 8ad42e6

Please sign in to comment.