mirror of
https://github.com/RGBCube/serenity
synced 2025-07-24 11:37:41 +00:00
LibGL: Implement glFogi
This commit is contained in:
parent
f55d2a22af
commit
d73cc3d0eb
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 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);
|
GLAPI void glFogf(GLenum pname, GLfloat param);
|
||||||
|
GLAPI void glFogi(GLenum pname, GLint param);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,6 +79,7 @@ public:
|
||||||
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 gl_fogf(GLenum pname, GLfloat params) = 0;
|
||||||
|
virtual void gl_fogi(GLenum pname, GLint param) = 0;
|
||||||
|
|
||||||
virtual void present() = 0;
|
virtual void present() = 0;
|
||||||
};
|
};
|
||||||
|
|
|
@ -18,3 +18,8 @@ void glFogf(GLenum pname, GLfloat param)
|
||||||
{
|
{
|
||||||
g_gl_context->gl_fogf(pname, 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);
|
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()
|
void SoftwareGLContext::present()
|
||||||
{
|
{
|
||||||
m_rasterizer.blit_to(*m_frontbuffer);
|
m_rasterizer.blit_to(*m_frontbuffer);
|
||||||
|
|
|
@ -89,6 +89,7 @@ public:
|
||||||
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 gl_fogf(GLenum pname, GLfloat param) override;
|
||||||
|
virtual void gl_fogi(GLenum pname, GLint param) override;
|
||||||
virtual void present() override;
|
virtual void present() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -40,6 +40,7 @@ struct RasterizerOptions {
|
||||||
0.0f,
|
0.0f,
|
||||||
};
|
};
|
||||||
GLfloat fog_density { 1.0f };
|
GLfloat fog_density { 1.0f };
|
||||||
|
GLenum fog_mode { GL_EXP };
|
||||||
};
|
};
|
||||||
|
|
||||||
class SoftwareRasterizer final {
|
class SoftwareRasterizer final {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue