mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 20:18:12 +00:00
LibGL: Implement fog in GL_LINEAR
mode
The `GL_LINEAR` param was erroneously not picked up on. Also implement support for `GL_FOG_START` and `GL_FOG_END`, and make sure that the `gl_fog*` family of functions are optionally registered with the active list.
This commit is contained in:
parent
5e01ca29c5
commit
9bc8587c0d
2 changed files with 15 additions and 6 deletions
|
@ -2374,16 +2374,14 @@ void SoftwareGLContext::gl_polygon_offset(GLfloat factor, GLfloat units)
|
|||
|
||||
void SoftwareGLContext::gl_fogfv(GLenum pname, GLfloat* params)
|
||||
{
|
||||
APPEND_TO_CALL_LIST_AND_RETURN_IF_NEEDED(gl_fogfv, pname, params);
|
||||
RETURN_WITH_ERROR_IF(m_in_draw_state, GL_INVALID_OPERATION);
|
||||
|
||||
auto options = m_rasterizer.options();
|
||||
|
||||
switch (pname) {
|
||||
case GL_FOG_COLOR:
|
||||
// Set rasterizer options fog color
|
||||
// NOTE: We purposefully don't check for `nullptr` here (as with other calls). The spec states nothing
|
||||
// about us checking for such things. If the programmer does so and hits SIGSEGV, that's on them.
|
||||
options.fog_color = FloatVector4 { params[0], params[1], params[2], params[3] };
|
||||
options.fog_color = { params[0], params[1], params[2], params[3] };
|
||||
break;
|
||||
default:
|
||||
RETURN_WITH_ERROR_IF(true, GL_INVALID_ENUM);
|
||||
|
@ -2394,6 +2392,7 @@ void SoftwareGLContext::gl_fogfv(GLenum pname, GLfloat* params)
|
|||
|
||||
void SoftwareGLContext::gl_fogf(GLenum pname, GLfloat param)
|
||||
{
|
||||
APPEND_TO_CALL_LIST_AND_RETURN_IF_NEEDED(gl_fogf, pname, param);
|
||||
RETURN_WITH_ERROR_IF(m_in_draw_state, GL_INVALID_OPERATION);
|
||||
RETURN_WITH_ERROR_IF(param < 0.0f, GL_INVALID_VALUE);
|
||||
|
||||
|
@ -2403,6 +2402,12 @@ void SoftwareGLContext::gl_fogf(GLenum pname, GLfloat param)
|
|||
case GL_FOG_DENSITY:
|
||||
options.fog_density = param;
|
||||
break;
|
||||
case GL_FOG_END:
|
||||
options.fog_end = param;
|
||||
break;
|
||||
case GL_FOG_START:
|
||||
options.fog_start = param;
|
||||
break;
|
||||
default:
|
||||
RETURN_WITH_ERROR_IF(true, GL_INVALID_ENUM);
|
||||
}
|
||||
|
@ -2412,8 +2417,9 @@ void SoftwareGLContext::gl_fogf(GLenum pname, GLfloat param)
|
|||
|
||||
void SoftwareGLContext::gl_fogi(GLenum pname, GLint param)
|
||||
{
|
||||
APPEND_TO_CALL_LIST_AND_RETURN_IF_NEEDED(gl_fogi, pname, 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);
|
||||
RETURN_WITH_ERROR_IF(param != GL_LINEAR && param != GL_EXP && param != GL_EXP2, GL_INVALID_ENUM);
|
||||
|
||||
auto options = m_rasterizer.options();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue