LibGL: Implement glFogi

This commit is contained in:
Jesse Buhagiar 2021-08-25 01:21:54 +10:00 committed by Ali Mohammad Pur
parent f55d2a22af
commit d73cc3d0eb
Notes: sideshowbarker 2024-07-18 05:17:56 +09:00
6 changed files with 27 additions and 0 deletions

View file

@ -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
}

View file

@ -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;
};

View file

@ -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);
}

View file

@ -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);

View file

@ -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:

View file

@ -40,6 +40,7 @@ struct RasterizerOptions {
0.0f,
};
GLfloat fog_density { 1.0f };
GLenum fog_mode { GL_EXP };
};
class SoftwareRasterizer final {