mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 23:17:45 +00:00
LibGL+LibGPU+LibSoftGPU: Implement and expose glClipPlane
This commit implements glClipPlane and its supporting calls, backed by new support for user-defined clip planes in the software GPU clipper. This fixes some visual bugs seen in the Quake III port, in which mirrors would only reflect correctly from close distances.
This commit is contained in:
parent
bc2f738a84
commit
0836912a6d
14 changed files with 193 additions and 63 deletions
|
@ -52,6 +52,8 @@ Optional<ContextParameter> GLContext::get_context_parameter(GLenum name)
|
|||
return ContextParameter { .type = GL_BOOL, .is_capability = true, .value = { .boolean_value = m_lighting_enabled } };
|
||||
case GL_LINE_SMOOTH:
|
||||
return ContextParameter { .type = GL_BOOL, .is_capability = true, .value = { .boolean_value = m_line_smooth } };
|
||||
case GL_MAX_CLIP_PLANES:
|
||||
return ContextParameter { .type = GL_INT, .value = { .integer_value = static_cast<GLint>(m_device_info.max_clip_planes) } };
|
||||
case GL_MAX_LIGHTS:
|
||||
return ContextParameter { .type = GL_INT, .value = { .integer_value = static_cast<GLint>(m_device_info.num_lights) } };
|
||||
case GL_MAX_MODELVIEW_STACK_DEPTH:
|
||||
|
@ -169,6 +171,17 @@ void GLContext::gl_disable(GLenum capability)
|
|||
bool update_rasterizer_options = false;
|
||||
|
||||
switch (capability) {
|
||||
case GL_CLIP_PLANE0:
|
||||
case GL_CLIP_PLANE1:
|
||||
case GL_CLIP_PLANE2:
|
||||
case GL_CLIP_PLANE3:
|
||||
case GL_CLIP_PLANE4:
|
||||
case GL_CLIP_PLANE5: {
|
||||
auto plane_idx = static_cast<size_t>(capability) - GL_CLIP_PLANE0;
|
||||
m_clip_plane_attributes.enabled &= ~(1 << plane_idx);
|
||||
m_clip_planes_dirty = true;
|
||||
break;
|
||||
}
|
||||
case GL_COLOR_MATERIAL:
|
||||
m_color_material_enabled = false;
|
||||
break;
|
||||
|
@ -308,6 +321,17 @@ void GLContext::gl_enable(GLenum capability)
|
|||
bool update_rasterizer_options = false;
|
||||
|
||||
switch (capability) {
|
||||
case GL_CLIP_PLANE0:
|
||||
case GL_CLIP_PLANE1:
|
||||
case GL_CLIP_PLANE2:
|
||||
case GL_CLIP_PLANE3:
|
||||
case GL_CLIP_PLANE4:
|
||||
case GL_CLIP_PLANE5: {
|
||||
auto plane_idx = static_cast<size_t>(capability) - GL_CLIP_PLANE0;
|
||||
m_clip_plane_attributes.enabled |= (1 << plane_idx);
|
||||
m_clip_planes_dirty = true;
|
||||
break;
|
||||
}
|
||||
case GL_COLOR_MATERIAL:
|
||||
m_color_material_enabled = true;
|
||||
break;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue