mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 02:17:34 +00:00
LibGL: Implement glHint()
This commit is contained in:
parent
2a16c8bdb8
commit
eed0bcaf42
5 changed files with 55 additions and 3 deletions
|
@ -92,6 +92,19 @@ extern "C" {
|
||||||
#define GL_CW 0x0900
|
#define GL_CW 0x0900
|
||||||
#define GL_CCW 0x0901
|
#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
|
// Listing enums
|
||||||
#define GL_COMPILE 0x1300
|
#define GL_COMPILE 0x1300
|
||||||
#define GL_COMPILE_AND_EXECUTE 0x1301
|
#define GL_COMPILE_AND_EXECUTE 0x1301
|
||||||
|
@ -190,6 +203,7 @@ GLAPI void glFinish();
|
||||||
GLAPI void glBlendFunc(GLenum sfactor, GLenum dfactor);
|
GLAPI void glBlendFunc(GLenum sfactor, GLenum dfactor);
|
||||||
GLAPI void glShadeModel(GLenum mode);
|
GLAPI void glShadeModel(GLenum mode);
|
||||||
GLAPI void glAlphaFunc(GLenum func, GLclampf ref);
|
GLAPI void glAlphaFunc(GLenum func, GLclampf ref);
|
||||||
|
GLAPI void glHint(GLenum target, GLenum mode);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,7 @@ public:
|
||||||
virtual void gl_blend_func(GLenum src_factor, GLenum dst_factor) = 0;
|
virtual void gl_blend_func(GLenum src_factor, GLenum dst_factor) = 0;
|
||||||
virtual void gl_shade_model(GLenum mode) = 0;
|
virtual void gl_shade_model(GLenum mode) = 0;
|
||||||
virtual void gl_alpha_func(GLenum func, GLclampf ref) = 0;
|
virtual void gl_alpha_func(GLenum func, GLclampf ref) = 0;
|
||||||
|
virtual void gl_hint(GLenum target, GLenum mode) = 0;
|
||||||
|
|
||||||
virtual void present() = 0;
|
virtual void present() = 0;
|
||||||
};
|
};
|
||||||
|
|
|
@ -62,10 +62,15 @@ GLenum glGetError()
|
||||||
|
|
||||||
void glFlush()
|
void glFlush()
|
||||||
{
|
{
|
||||||
return g_gl_context->gl_flush();
|
g_gl_context->gl_flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
void glFinish()
|
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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -979,6 +979,36 @@ void SoftwareGLContext::gl_alpha_func(GLenum func, GLclampf ref)
|
||||||
m_rasterizer.set_options(options);
|
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()
|
void SoftwareGLContext::present()
|
||||||
{
|
{
|
||||||
m_rasterizer.blit_to(*m_frontbuffer);
|
m_rasterizer.blit_to(*m_frontbuffer);
|
||||||
|
|
|
@ -58,6 +58,7 @@ public:
|
||||||
virtual void gl_blend_func(GLenum src_factor, GLenum dst_factor) override;
|
virtual void gl_blend_func(GLenum src_factor, GLenum dst_factor) override;
|
||||||
virtual void gl_shade_model(GLenum mode) override;
|
virtual void gl_shade_model(GLenum mode) override;
|
||||||
virtual void gl_alpha_func(GLenum func, GLclampf ref) override;
|
virtual void gl_alpha_func(GLenum func, GLclampf ref) override;
|
||||||
|
virtual void gl_hint(GLenum target, GLenum mode) override;
|
||||||
|
|
||||||
virtual void present() override;
|
virtual void present() override;
|
||||||
|
|
||||||
|
@ -170,7 +171,8 @@ private:
|
||||||
decltype(&SoftwareGLContext::gl_call_list),
|
decltype(&SoftwareGLContext::gl_call_list),
|
||||||
decltype(&SoftwareGLContext::gl_blend_func),
|
decltype(&SoftwareGLContext::gl_blend_func),
|
||||||
decltype(&SoftwareGLContext::gl_shade_model),
|
decltype(&SoftwareGLContext::gl_shade_model),
|
||||||
decltype(&SoftwareGLContext::gl_alpha_func)>;
|
decltype(&SoftwareGLContext::gl_alpha_func),
|
||||||
|
decltype(&SoftwareGLContext::gl_hint)>;
|
||||||
|
|
||||||
using ExtraSavedArguments = Variant<
|
using ExtraSavedArguments = Variant<
|
||||||
FloatMatrix4x4>;
|
FloatMatrix4x4>;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue