LibGL: Implement glFogi
This commit is contained in:
parent
f55d2a22af
commit
d73cc3d0eb
Notes:
sideshowbarker
2024-07-18 05:17:56 +09:00
Author: https://github.com/Quaker762 Commit: https://github.com/SerenityOS/serenity/commit/d73cc3d0ebf Pull-request: https://github.com/SerenityOS/serenity/pull/9603 Reviewed-by: https://github.com/alimpfard ✅
6 changed files with 27 additions and 0 deletions
|
@ -376,6 +376,7 @@ GLAPI void glDepthFunc(GLenum func);
|
|||
GLAPI void glPolygonMode(GLenum face, GLenum mode);
|
||||
GLAPI void glFogfv(GLenum mode, GLfloat* params);
|
||||
GLAPI void glFogf(GLenum pname, GLfloat param);
|
||||
GLAPI void glFogi(GLenum pname, GLint param);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -79,6 +79,7 @@ public:
|
|||
virtual void gl_polygon_mode(GLenum face, GLenum mode) = 0;
|
||||
virtual void gl_fogfv(GLenum pname, GLfloat* params) = 0;
|
||||
virtual void gl_fogf(GLenum pname, GLfloat params) = 0;
|
||||
virtual void gl_fogi(GLenum pname, GLint param) = 0;
|
||||
|
||||
virtual void present() = 0;
|
||||
};
|
||||
|
|
|
@ -18,3 +18,8 @@ void glFogf(GLenum pname, GLfloat param)
|
|||
{
|
||||
g_gl_context->gl_fogf(pname, param);
|
||||
}
|
||||
|
||||
void glFogi(GLenum pname, GLint param)
|
||||
{
|
||||
g_gl_context->gl_fogi(pname, param);
|
||||
}
|
||||
|
|
|
@ -1783,6 +1783,24 @@ void SoftwareGLContext::gl_fogf(GLenum pname, GLfloat param)
|
|||
m_rasterizer.set_options(options);
|
||||
}
|
||||
|
||||
void SoftwareGLContext::gl_fogi(GLenum pname, GLint param)
|
||||
{
|
||||
RETURN_WITH_ERROR_IF(m_in_draw_state, GL_INVALID_OPERATION);
|
||||
RETURN_WITH_ERROR_IF(!(param == GL_EXP || param == GL_EXP2 || param != GL_LINEAR), GL_INVALID_ENUM);
|
||||
|
||||
auto options = m_rasterizer.options();
|
||||
|
||||
switch (pname) {
|
||||
case GL_FOG_MODE:
|
||||
options.fog_mode = param;
|
||||
break;
|
||||
default:
|
||||
RETURN_WITH_ERROR_IF(true, GL_INVALID_ENUM);
|
||||
}
|
||||
|
||||
m_rasterizer.set_options(options);
|
||||
}
|
||||
|
||||
void SoftwareGLContext::present()
|
||||
{
|
||||
m_rasterizer.blit_to(*m_frontbuffer);
|
||||
|
|
|
@ -89,6 +89,7 @@ public:
|
|||
virtual void gl_polygon_mode(GLenum face, GLenum mode) override;
|
||||
virtual void gl_fogfv(GLenum pname, GLfloat* params) override;
|
||||
virtual void gl_fogf(GLenum pname, GLfloat param) override;
|
||||
virtual void gl_fogi(GLenum pname, GLint param) override;
|
||||
virtual void present() override;
|
||||
|
||||
private:
|
||||
|
|
|
@ -40,6 +40,7 @@ struct RasterizerOptions {
|
|||
0.0f,
|
||||
};
|
||||
GLfloat fog_density { 1.0f };
|
||||
GLenum fog_mode { GL_EXP };
|
||||
};
|
||||
|
||||
class SoftwareRasterizer final {
|
||||
|
|
Loading…
Add table
Reference in a new issue