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

LibGL: Implement glFogf

This commit is contained in:
Jesse Buhagiar 2021-08-25 01:17:28 +10:00 committed by Ali Mohammad Pur
parent 7f1cd54b80
commit f55d2a22af
6 changed files with 27 additions and 0 deletions

View file

@ -375,6 +375,7 @@ GLAPI void glDepthRange(GLdouble nearVal, GLdouble farVal);
GLAPI void glDepthFunc(GLenum func); GLAPI void glDepthFunc(GLenum func);
GLAPI void glPolygonMode(GLenum face, GLenum mode); GLAPI void glPolygonMode(GLenum face, GLenum mode);
GLAPI void glFogfv(GLenum mode, GLfloat* params); GLAPI void glFogfv(GLenum mode, GLfloat* params);
GLAPI void glFogf(GLenum pname, GLfloat param);
#ifdef __cplusplus #ifdef __cplusplus
} }

View file

@ -78,6 +78,7 @@ public:
virtual void gl_depth_func(GLenum func) = 0; virtual void gl_depth_func(GLenum func) = 0;
virtual void gl_polygon_mode(GLenum face, GLenum mode) = 0; virtual void gl_polygon_mode(GLenum face, GLenum mode) = 0;
virtual void gl_fogfv(GLenum pname, GLfloat* params) = 0; virtual void gl_fogfv(GLenum pname, GLfloat* params) = 0;
virtual void gl_fogf(GLenum pname, GLfloat params) = 0;
virtual void present() = 0; virtual void present() = 0;
}; };

View file

@ -13,3 +13,8 @@ void glFogfv(GLenum pname, GLfloat* params)
{ {
g_gl_context->gl_fogfv(pname, params); g_gl_context->gl_fogfv(pname, params);
} }
void glFogf(GLenum pname, GLfloat param)
{
g_gl_context->gl_fogf(pname, param);
}

View file

@ -1765,6 +1765,24 @@ void SoftwareGLContext::gl_fogfv(GLenum pname, GLfloat* params)
m_rasterizer.set_options(options); m_rasterizer.set_options(options);
} }
void SoftwareGLContext::gl_fogf(GLenum pname, GLfloat param)
{
RETURN_WITH_ERROR_IF(m_in_draw_state, GL_INVALID_OPERATION);
RETURN_WITH_ERROR_IF(param < 0.0f, GL_INVALID_VALUE);
auto options = m_rasterizer.options();
switch (pname) {
case GL_FOG_DENSITY:
options.fog_density = param;
break;
default:
RETURN_WITH_ERROR_IF(true, GL_INVALID_ENUM);
}
m_rasterizer.set_options(options);
}
void SoftwareGLContext::present() void SoftwareGLContext::present()
{ {
m_rasterizer.blit_to(*m_frontbuffer); m_rasterizer.blit_to(*m_frontbuffer);

View file

@ -88,6 +88,7 @@ public:
virtual void gl_depth_func(GLenum func) override; virtual void gl_depth_func(GLenum func) override;
virtual void gl_polygon_mode(GLenum face, GLenum mode) override; virtual void gl_polygon_mode(GLenum face, GLenum mode) override;
virtual void gl_fogfv(GLenum pname, GLfloat* params) override; virtual void gl_fogfv(GLenum pname, GLfloat* params) override;
virtual void gl_fogf(GLenum pname, GLfloat param) override;
virtual void present() override; virtual void present() override;
private: private:

View file

@ -39,6 +39,7 @@ struct RasterizerOptions {
0.0f, 0.0f,
0.0f, 0.0f,
}; };
GLfloat fog_density { 1.0f };
}; };
class SoftwareRasterizer final { class SoftwareRasterizer final {