1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 02:17:34 +00:00

LibGL: Implement glHint()

This commit is contained in:
Stephan Unverwerth 2021-05-20 23:20:23 +02:00 committed by Andreas Kling
parent 2a16c8bdb8
commit eed0bcaf42
5 changed files with 55 additions and 3 deletions

View file

@ -92,6 +92,19 @@ extern "C" {
#define GL_CW 0x0900
#define GL_CCW 0x0901
// Hint enums
#define GL_DONT_CARE 0x1100
#define GL_FASTEST 0x1101
#define GL_NICEST 0x1102
#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50
#define GL_POINT_SMOOTH_HINT 0x0C51
#define GL_LINE_SMOOTH_HINT 0x0C52
#define GL_POLYGON_SMOOTH_HINT 0x0C53
#define GL_FOG_HINT 0x0C54
#define GL_GENERATE_MIPMAP_HINT 0x8192
#define GL_TEXTURE_COMPRESSION_HINT 0x84EF
// Listing enums
#define GL_COMPILE 0x1300
#define GL_COMPILE_AND_EXECUTE 0x1301
@ -190,6 +203,7 @@ GLAPI void glFinish();
GLAPI void glBlendFunc(GLenum sfactor, GLenum dfactor);
GLAPI void glShadeModel(GLenum mode);
GLAPI void glAlphaFunc(GLenum func, GLclampf ref);
GLAPI void glHint(GLenum target, GLenum mode);
#ifdef __cplusplus
}

View file

@ -52,6 +52,7 @@ public:
virtual void gl_blend_func(GLenum src_factor, GLenum dst_factor) = 0;
virtual void gl_shade_model(GLenum mode) = 0;
virtual void gl_alpha_func(GLenum func, GLclampf ref) = 0;
virtual void gl_hint(GLenum target, GLenum mode) = 0;
virtual void present() = 0;
};

View file

@ -62,10 +62,15 @@ GLenum glGetError()
void glFlush()
{
return g_gl_context->gl_flush();
g_gl_context->gl_flush();
}
void glFinish()
{
return g_gl_context->gl_finish();
g_gl_context->gl_finish();
}
void glHint(GLenum target, GLenum mode)
{
g_gl_context->gl_hint(target, mode);
}

View file

@ -979,6 +979,36 @@ void SoftwareGLContext::gl_alpha_func(GLenum func, GLclampf ref)
m_rasterizer.set_options(options);
}
void SoftwareGLContext::gl_hint(GLenum target, GLenum mode)
{
APPEND_TO_CALL_LIST_AND_RETURN_IF_NEEDED(gl_hint, target, mode);
if (m_in_draw_state) {
m_error = GL_INVALID_OPERATION;
return;
}
if (target != GL_PERSPECTIVE_CORRECTION_HINT
&& target != GL_POINT_SMOOTH_HINT
&& target != GL_LINE_SMOOTH_HINT
&& target != GL_POLYGON_SMOOTH_HINT
&& target != GL_FOG_HINT
&& target != GL_GENERATE_MIPMAP_HINT
&& target != GL_TEXTURE_COMPRESSION_HINT) {
m_error = GL_INVALID_ENUM;
return;
}
if (mode != GL_DONT_CARE
&& mode != GL_FASTEST
&& mode != GL_NICEST) {
m_error = GL_INVALID_ENUM;
return;
}
// According to the spec implementors are free to ignore glHint. So we do.
}
void SoftwareGLContext::present()
{
m_rasterizer.blit_to(*m_frontbuffer);

View file

@ -58,6 +58,7 @@ public:
virtual void gl_blend_func(GLenum src_factor, GLenum dst_factor) override;
virtual void gl_shade_model(GLenum mode) override;
virtual void gl_alpha_func(GLenum func, GLclampf ref) override;
virtual void gl_hint(GLenum target, GLenum mode) override;
virtual void present() override;
@ -170,7 +171,8 @@ private:
decltype(&SoftwareGLContext::gl_call_list),
decltype(&SoftwareGLContext::gl_blend_func),
decltype(&SoftwareGLContext::gl_shade_model),
decltype(&SoftwareGLContext::gl_alpha_func)>;
decltype(&SoftwareGLContext::gl_alpha_func),
decltype(&SoftwareGLContext::gl_hint)>;
using ExtraSavedArguments = Variant<
FloatMatrix4x4>;