Просмотр исходного кода

LibGL: Implement `GL_STENCIL_TEST`

Only the state is implemented; not the rasterization phase.
Jelle Raaijmakers 3 лет назад
Родитель
Сommit
729349ce78

+ 1 - 0
Userland/Libraries/LibGL/GL/gl.h

@@ -57,6 +57,7 @@ extern "C" {
 #define GL_CULL_FACE 0x0B44
 #define GL_FOG 0x0B60
 #define GL_DEPTH_TEST 0x0B71
+#define GL_STENCIL_TEST 0x0B90
 #define GL_POLYGON_OFFSET_FILL 0x8037
 
 // Alpha testing

+ 11 - 0
Userland/Libraries/LibGL/SoftwareGLContext.cpp

@@ -574,6 +574,9 @@ void SoftwareGLContext::gl_enable(GLenum capability)
         rasterizer_options.scissor_enabled = true;
         update_rasterizer_options = true;
         break;
+    case GL_STENCIL_TEST:
+        m_stencil_test_enabled = true;
+        break;
     case GL_TEXTURE_1D:
         m_active_texture_unit->set_texture_1d_enabled(true);
         break;
@@ -630,6 +633,9 @@ void SoftwareGLContext::gl_disable(GLenum capability)
         rasterizer_options.scissor_enabled = false;
         update_rasterizer_options = true;
         break;
+    case GL_STENCIL_TEST:
+        m_stencil_test_enabled = false;
+        break;
     case GL_TEXTURE_1D:
         m_active_texture_unit->set_texture_1d_enabled(false);
         break;
@@ -669,6 +675,8 @@ GLboolean SoftwareGLContext::gl_is_enabled(GLenum capability)
         return rasterizer_options.fog_enabled;
     case GL_SCISSOR_TEST:
         return rasterizer_options.scissor_enabled;
+    case GL_STENCIL_TEST:
+        return m_stencil_test_enabled;
     }
 
     RETURN_VALUE_WITH_ERROR_IF(true, GL_INVALID_ENUM, 0);
@@ -1554,6 +1562,9 @@ void SoftwareGLContext::gl_get_booleanv(GLenum pname, GLboolean* data)
     case GL_CULL_FACE:
         *data = m_cull_faces ? GL_TRUE : GL_FALSE;
         break;
+    case GL_STENCIL_TEST:
+        *data = m_stencil_test_enabled ? GL_TRUE : GL_FALSE;
+        break;
     case GL_TEXTURE_1D:
         *data = m_active_texture_unit->texture_1d_enabled() ? GL_TRUE : GL_FALSE;
         break;

+ 2 - 0
Userland/Libraries/LibGL/SoftwareGLContext.h

@@ -164,6 +164,8 @@ private:
     GLenum m_alpha_test_func = GL_ALWAYS;
     GLclampf m_alpha_test_ref_value = 0;
 
+    bool m_stencil_test_enabled { false };
+
     GLenum m_current_read_buffer = GL_BACK;
     GLenum m_current_draw_buffer = GL_BACK;