summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibGL
diff options
context:
space:
mode:
authorStephan Unverwerth <s.unverwerth@gmx.de>2021-05-20 23:20:23 +0200
committerAndreas Kling <kling@serenityos.org>2021-05-20 23:29:56 +0200
commiteed0bcaf420c6250e767d6ef8da12736021e3f06 (patch)
tree780bb59b6727a203c31819439b5a9458bd9624fe /Userland/Libraries/LibGL
parent2a16c8bdb8b285209950a4e26b3eee1d95ec1a7a (diff)
downloadserenity-eed0bcaf420c6250e767d6ef8da12736021e3f06.zip
LibGL: Implement glHint()
Diffstat (limited to 'Userland/Libraries/LibGL')
-rw-r--r--Userland/Libraries/LibGL/GL/gl.h14
-rw-r--r--Userland/Libraries/LibGL/GLContext.h1
-rw-r--r--Userland/Libraries/LibGL/GLUtils.cpp9
-rw-r--r--Userland/Libraries/LibGL/SoftwareGLContext.cpp30
-rw-r--r--Userland/Libraries/LibGL/SoftwareGLContext.h4
5 files changed, 55 insertions, 3 deletions
diff --git a/Userland/Libraries/LibGL/GL/gl.h b/Userland/Libraries/LibGL/GL/gl.h
index 899ba5335d..46408e70f6 100644
--- a/Userland/Libraries/LibGL/GL/gl.h
+++ b/Userland/Libraries/LibGL/GL/gl.h
@@ -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
}
diff --git a/Userland/Libraries/LibGL/GLContext.h b/Userland/Libraries/LibGL/GLContext.h
index 68cfe60f29..46b120610f 100644
--- a/Userland/Libraries/LibGL/GLContext.h
+++ b/Userland/Libraries/LibGL/GLContext.h
@@ -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;
};
diff --git a/Userland/Libraries/LibGL/GLUtils.cpp b/Userland/Libraries/LibGL/GLUtils.cpp
index d3f37c1ce7..d5f217862c 100644
--- a/Userland/Libraries/LibGL/GLUtils.cpp
+++ b/Userland/Libraries/LibGL/GLUtils.cpp
@@ -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);
}
diff --git a/Userland/Libraries/LibGL/SoftwareGLContext.cpp b/Userland/Libraries/LibGL/SoftwareGLContext.cpp
index 8e65c9f70e..7c84dea98a 100644
--- a/Userland/Libraries/LibGL/SoftwareGLContext.cpp
+++ b/Userland/Libraries/LibGL/SoftwareGLContext.cpp
@@ -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);
diff --git a/Userland/Libraries/LibGL/SoftwareGLContext.h b/Userland/Libraries/LibGL/SoftwareGLContext.h
index dcfe95fcd3..8ea205be08 100644
--- a/Userland/Libraries/LibGL/SoftwareGLContext.h
+++ b/Userland/Libraries/LibGL/SoftwareGLContext.h
@@ -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>;