Jelajahi Sumber

LibGL+LibSoftGPU: Add `GL_MAX_LIGHTS` to get_context_parameter

This is required to allow lighting to work properly in the GL. We
currently have the maximum number of lights in the software GL context
set to 8, as this is the minimum that OpenGL mandates according to the
spec.
Jesse Buhagiar 3 tahun lalu
induk
melakukan
192befa84b

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

@@ -98,6 +98,8 @@ Optional<ContextParameter> SoftwareGLContext::get_context_parameter(GLenum name)
         return ContextParameter { .type = GL_INT, .value = { .integer_value = sizeof(float) * 8 } };
     case GL_LIGHTING:
         return ContextParameter { .type = GL_BOOL, .is_capability = true, .value = { .boolean_value = m_lighting_enabled } };
+    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:
         return ContextParameter { .type = GL_INT, .value = { .integer_value = MODELVIEW_MATRIX_STACK_LIMIT } };
     case GL_MAX_PROJECTION_STACK_DEPTH:

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

@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2021, Stephan Unverwerth <s.unverwerth@serenityos.org>
+ * Copyright (c) 2021-2022, Jesse Buhagiar <jooster669@gmail.com>
  *
  * SPDX-License-Identifier: BSD-2-Clause
  */

+ 1 - 0
Userland/Libraries/LibSoftGPU/Config.h

@@ -17,6 +17,7 @@ namespace SoftGPU {
 static constexpr bool ENABLE_STATISTICS_OVERLAY = false;
 static constexpr int NUM_SAMPLERS = 32;
 static constexpr int SUBPIXEL_BITS = 5;
+static constexpr int NUM_LIGHTS = 8;
 
 // See: https://www.khronos.org/opengl/wiki/Common_Mistakes#Texture_edge_color_problem
 // FIXME: make this dynamically configurable through ConfigServer

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

@@ -476,7 +476,8 @@ DeviceInfo Device::info() const
     return {
         .vendor_name = "SerenityOS",
         .device_name = "SoftGPU",
-        .num_texture_units = NUM_SAMPLERS
+        .num_texture_units = NUM_SAMPLERS,
+        .num_lights = NUM_LIGHTS
     };
 }
 

+ 1 - 0
Userland/Libraries/LibSoftGPU/DeviceInfo.h

@@ -14,6 +14,7 @@ struct DeviceInfo final {
     String vendor_name;
     String device_name;
     unsigned num_texture_units;
+    unsigned num_lights;
 };
 
 }