summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Userland/Libraries/LibGL/SoftwareGLContext.cpp31
-rw-r--r--Userland/Libraries/LibSoftGPU/Device.cpp16
-rw-r--r--Userland/Libraries/LibSoftGPU/Device.h13
3 files changed, 50 insertions, 10 deletions
diff --git a/Userland/Libraries/LibGL/SoftwareGLContext.cpp b/Userland/Libraries/LibGL/SoftwareGLContext.cpp
index e17f0661e1..dcf8225779 100644
--- a/Userland/Libraries/LibGL/SoftwareGLContext.cpp
+++ b/Userland/Libraries/LibGL/SoftwareGLContext.cpp
@@ -2130,7 +2130,36 @@ void SoftwareGLContext::gl_depth_func(GLenum func)
GL_INVALID_ENUM);
auto options = m_rasterizer.options();
- options.depth_func = func;
+
+ switch (func) {
+ case GL_NEVER:
+ options.depth_func = SoftGPU::DepthTestFunction::Never;
+ break;
+ case GL_ALWAYS:
+ options.depth_func = SoftGPU::DepthTestFunction::Always;
+ break;
+ case GL_LESS:
+ options.depth_func = SoftGPU::DepthTestFunction::Less;
+ break;
+ case GL_LEQUAL:
+ options.depth_func = SoftGPU::DepthTestFunction::LessOrEqual;
+ break;
+ case GL_EQUAL:
+ options.depth_func = SoftGPU::DepthTestFunction::Equal;
+ break;
+ case GL_NOTEQUAL:
+ options.depth_func = SoftGPU::DepthTestFunction::NotEqual;
+ break;
+ case GL_GEQUAL:
+ options.depth_func = SoftGPU::DepthTestFunction::GreaterOrEqual;
+ break;
+ case GL_GREATER:
+ options.depth_func = SoftGPU::DepthTestFunction::Greater;
+ break;
+ default:
+ VERIFY_NOT_REACHED();
+ }
+
m_rasterizer.set_options(options);
}
diff --git a/Userland/Libraries/LibSoftGPU/Device.cpp b/Userland/Libraries/LibSoftGPU/Device.cpp
index d5ddcd36b7..71b00eb70d 100644
--- a/Userland/Libraries/LibSoftGPU/Device.cpp
+++ b/Userland/Libraries/LibSoftGPU/Device.cpp
@@ -285,26 +285,26 @@ static void rasterize_triangle(const RasterizerOptions& options, Gfx::Bitmap& re
bool pass = false;
switch (options.depth_func) {
- case GL_ALWAYS:
+ case DepthTestFunction::Always:
pass = true;
break;
- case GL_NEVER:
+ case DepthTestFunction::Never:
pass = false;
break;
- case GL_GREATER:
+ case DepthTestFunction::Greater:
pass = z > *depth;
break;
- case GL_GEQUAL:
+ case DepthTestFunction::GreaterOrEqual:
pass = z >= *depth;
break;
- case GL_NOTEQUAL:
+ case DepthTestFunction::NotEqual:
#ifdef __SSE__
pass = z != *depth;
#else
pass = bit_cast<u32>(z) != bit_cast<u32>(*depth);
#endif
break;
- case GL_EQUAL:
+ case DepthTestFunction::Equal:
#ifdef __SSE__
pass = z == *depth;
#else
@@ -322,10 +322,10 @@ static void rasterize_triangle(const RasterizerOptions& options, Gfx::Bitmap& re
pass = bit_cast<u32>(z) == bit_cast<u32>(*depth);
#endif
break;
- case GL_LEQUAL:
+ case DepthTestFunction::LessOrEqual:
pass = z <= *depth;
break;
- case GL_LESS:
+ case DepthTestFunction::Less:
pass = z < *depth;
break;
}
diff --git a/Userland/Libraries/LibSoftGPU/Device.h b/Userland/Libraries/LibSoftGPU/Device.h
index 01f90a0f33..281600439e 100644
--- a/Userland/Libraries/LibSoftGPU/Device.h
+++ b/Userland/Libraries/LibSoftGPU/Device.h
@@ -51,6 +51,17 @@ enum class BlendFactor {
SrcAlphaSaturate,
};
+enum class DepthTestFunction {
+ Never,
+ Always,
+ Less,
+ LessOrEqual,
+ Equal,
+ NotEqual,
+ GreaterOrEqual,
+ Greater,
+};
+
enum class WindingOrder {
Clockwise,
CounterClockwise,
@@ -69,7 +80,7 @@ struct RasterizerOptions {
u32 color_mask { 0xffffffff };
float depth_min { 0 };
float depth_max { 1 };
- GLenum depth_func { GL_LESS };
+ DepthTestFunction depth_func { DepthTestFunction::Less };
GLenum polygon_mode { GL_FILL };
FloatVector4 fog_color { 0.0f, 0.0f, 0.0f, 0.0f };
float fog_density { 1.0f };