Jelajahi Sumber

LibSoftGPU: Remove OpenGL type for culled side selection

Replaces the GLenum in RasterizerConfig, that selects the triangle sides
to be culled, with two booleans.
Stephan Unverwerth 3 tahun lalu
induk
melakukan
1904be0370

+ 2 - 1
Userland/Libraries/LibGL/SoftwareGLContext.cpp

@@ -917,7 +917,8 @@ void SoftwareGLContext::gl_cull_face(GLenum cull_mode)
     m_culled_sides = cull_mode;
 
     auto rasterizer_options = m_rasterizer.options();
-    rasterizer_options.culled_sides = cull_mode;
+    rasterizer_options.cull_back = cull_mode == GL_BACK || cull_mode == GL_FRONT_AND_BACK;
+    rasterizer_options.cull_front = cull_mode == GL_FRONT || cull_mode == GL_FRONT_AND_BACK;
     m_rasterizer.set_options(rasterizer_options);
 }
 

+ 2 - 2
Userland/Libraries/LibSoftGPU/Device.cpp

@@ -636,10 +636,10 @@ void Device::draw_primitives(GLenum primitive_type, FloatMatrix4x4 const& transf
         if (m_options.enable_culling) {
             bool is_front = (m_options.front_face == WindingOrder::CounterClockwise ? area < 0 : area > 0);
 
-            if (is_front && (m_options.culled_sides == GL_FRONT || m_options.culled_sides == GL_FRONT_AND_BACK))
+            if (!is_front && m_options.cull_back)
                 continue;
 
-            if (!is_front && (m_options.culled_sides == GL_BACK || m_options.culled_sides == GL_FRONT_AND_BACK))
+            if (is_front && m_options.cull_front)
                 continue;
         }
 

+ 2 - 1
Userland/Libraries/LibSoftGPU/Device.h

@@ -84,7 +84,8 @@ struct RasterizerOptions {
     float depth_offset_constant { 0 };
     bool enable_culling { false };
     WindingOrder front_face { WindingOrder::CounterClockwise };
-    GLenum culled_sides { GL_BACK };
+    bool cull_back { true };
+    bool cull_front { false };
 };
 
 inline static constexpr size_t const num_samplers = 32;