From 0abb7df09be1579b450e852686050183a1ccffdf Mon Sep 17 00:00:00 2001 From: Jelle Raaijmakers Date: Sun, 8 May 2022 01:43:43 +0200 Subject: [PATCH] LibGL+LibGPU: Implement `GL_LINE_SMOOTH` context parameter --- Userland/Libraries/LibGL/ContextParameter.cpp | 12 ++++++++++++ Userland/Libraries/LibGL/GL/gl.h | 1 + Userland/Libraries/LibGL/GLContext.h | 1 + Userland/Libraries/LibGPU/RasterizerOptions.h | 1 + 4 files changed, 15 insertions(+) diff --git a/Userland/Libraries/LibGL/ContextParameter.cpp b/Userland/Libraries/LibGL/ContextParameter.cpp index 566b93feb1..1b702a2f19 100644 --- a/Userland/Libraries/LibGL/ContextParameter.cpp +++ b/Userland/Libraries/LibGL/ContextParameter.cpp @@ -50,6 +50,8 @@ Optional GLContext::get_context_parameter(GLenum name) return ContextParameter { .type = GL_INT, .value = { .integer_value = sizeof(float) * 8 } }; case GL_LIGHTING: return ContextParameter { .type = GL_BOOL, .is_capability = true, .value = { .boolean_value = m_lighting_enabled } }; + case GL_LINE_SMOOTH: + return ContextParameter { .type = GL_BOOL, .is_capability = true, .value = { .boolean_value = m_line_smooth } }; case GL_MAX_LIGHTS: return ContextParameter { .type = GL_INT, .value = { .integer_value = static_cast(m_device_info.num_lights) } }; case GL_MAX_MODELVIEW_STACK_DEPTH: @@ -213,6 +215,11 @@ void GLContext::gl_disable(GLenum capability) m_light_states.at(capability - GL_LIGHT0).is_enabled = false; m_light_state_is_dirty = true; break; + case GL_LINE_SMOOTH: + m_line_smooth = false; + rasterizer_options.line_smooth = false; + update_rasterizer_options = true; + break; case GL_NORMALIZE: m_normalize = false; rasterizer_options.normalization_enabled = false; @@ -347,6 +354,11 @@ void GLContext::gl_enable(GLenum capability) m_light_states.at(capability - GL_LIGHT0).is_enabled = true; m_light_state_is_dirty = true; break; + case GL_LINE_SMOOTH: + m_line_smooth = true; + rasterizer_options.line_smooth = true; + update_rasterizer_options = true; + break; case GL_NORMALIZE: m_normalize = true; rasterizer_options.normalization_enabled = true; diff --git a/Userland/Libraries/LibGL/GL/gl.h b/Userland/Libraries/LibGL/GL/gl.h index 896526dcdd..7f1a7522bf 100644 --- a/Userland/Libraries/LibGL/GL/gl.h +++ b/Userland/Libraries/LibGL/GL/gl.h @@ -60,6 +60,7 @@ extern "C" { #define GL_COLOR_BUFFER_BIT 0x04000 // Enable capabilities +#define GL_LINE_SMOOTH 0x0B20 #define GL_POLYGON_MODE 0x0B40 #define GL_POLYGON_SMOOTH 0x0B41 #define GL_POLYGON_STIPPLE 0x0B42 diff --git a/Userland/Libraries/LibGL/GLContext.h b/Userland/Libraries/LibGL/GLContext.h index a6c82a15e6..9dc1f6c413 100644 --- a/Userland/Libraries/LibGL/GLContext.h +++ b/Userland/Libraries/LibGL/GLContext.h @@ -488,6 +488,7 @@ private: float m_point_size { 1.f }; // Line drawing configuration + bool m_line_smooth { false }; float m_line_width { 1.f }; // Lighting configuration diff --git a/Userland/Libraries/LibGPU/RasterizerOptions.h b/Userland/Libraries/LibGPU/RasterizerOptions.h index d74d7e912a..cd7cb3563c 100644 --- a/Userland/Libraries/LibGPU/RasterizerOptions.h +++ b/Userland/Libraries/LibGPU/RasterizerOptions.h @@ -38,6 +38,7 @@ struct RasterizerOptions { bool fog_enabled { false }; float fog_start { 0.0f }; float fog_end { 1.0f }; + bool line_smooth { false }; bool point_smooth { false }; float point_size { 1.f }; bool scissor_enabled { false };