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

LibGL+LibGPU: Implement glPointSize

This commit is contained in:
Jelle Raaijmakers 2022-05-08 01:41:30 +02:00 committed by Linus Groh
parent ac3e46b97d
commit 0dcb23ee96
6 changed files with 25 additions and 4 deletions

View file

@ -78,6 +78,8 @@ Optional<ContextParameter> GLContext::get_context_parameter(GLenum name)
return ContextParameter { .type = GL_INT, .value = { .integer_value = 0 } };
case GL_PACK_SWAP_BYTES:
return ContextParameter { .type = GL_BOOL, .value = { .boolean_value = false } };
case GL_POINT_SIZE:
return ContextParameter { .type = GL_DOUBLE, .value = { .double_value = static_cast<GLdouble>(m_point_size) } };
case GL_POLYGON_OFFSET_FILL:
return ContextParameter { .type = GL_BOOL, .is_capability = true, .value = { .boolean_value = m_depth_offset_enabled } };
case GL_RED_BITS:

View file

@ -301,6 +301,7 @@ extern "C" {
// Points
#define GL_POINT_SMOOTH 0x0B10
#define GL_POINT_SIZE 0x0B11
#define GL_POINT_SIZE_MIN_EXT 0x8126
#define GL_POINT_SIZE_MAX_EXT 0x8127
#define GL_DISTANCE_ATTENUATION_EXT 0x8129

View file

@ -673,8 +673,7 @@ void glPixelStorei(GLenum pname, GLint param)
void glPointSize(GLfloat size)
{
// FIXME: implement
dbgln_if(GL_DEBUG, "glPointSize({}): unimplemented", size);
g_gl_context->gl_point_size(size);
}
void glPolygonMode(GLenum face, GLenum mode)

View file

@ -1192,6 +1192,18 @@ void GLContext::gl_rect(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
gl_end();
}
void GLContext::gl_point_size(GLfloat size)
{
APPEND_TO_CALL_LIST_AND_RETURN_IF_NEEDED(gl_point_size, size);
RETURN_WITH_ERROR_IF(size <= 0.f, GL_INVALID_VALUE);
m_point_size = size;
auto rasterizer_options = m_rasterizer->options();
rasterizer_options.point_size = size;
m_rasterizer->set_options(rasterizer_options);
}
void GLContext::present()
{
m_rasterizer->blit_color_buffer_to(*m_frontbuffer);

View file

@ -199,6 +199,7 @@ public:
void gl_clip_plane(GLenum plane, GLdouble const* equation);
void gl_array_element(GLint i);
void gl_copy_tex_sub_image_2d(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);
void gl_point_size(GLfloat size);
private:
void sync_device_config();
@ -442,7 +443,8 @@ private:
decltype(&GLContext::gl_get_light),
decltype(&GLContext::gl_clip_plane),
decltype(&GLContext::gl_array_element),
decltype(&GLContext::gl_copy_tex_sub_image_2d)>;
decltype(&GLContext::gl_copy_tex_sub_image_2d),
decltype(&GLContext::gl_point_size)>;
using ExtraSavedArguments = Variant<
FloatMatrix4x4>;
@ -481,7 +483,11 @@ private:
GLsizei m_unpack_row_length { 0 };
u8 m_unpack_alignment { 4 };
float m_line_width { 1.0f };
// Point drawing configuration
float m_point_size { 1.f };
// Line drawing configuration
float m_line_width { 1.f };
// Lighting configuration
bool m_lighting_enabled { false };

View file

@ -38,6 +38,7 @@ struct RasterizerOptions {
bool fog_enabled { false };
float fog_start { 0.0f };
float fog_end { 1.0f };
float point_size { 1.f };
bool scissor_enabled { false };
bool normalization_enabled { false };
Gfx::IntRect scissor_box;