From 3609ffc4508f65349f28fca2bad816e771f1df9e Mon Sep 17 00:00:00 2001 From: Jelle Raaijmakers Date: Sun, 16 Jan 2022 02:09:27 +0100 Subject: [PATCH] LibGL+LibSoftGPU: Enumize material front/back face selection --- .../Libraries/LibGL/SoftwareGLContext.cpp | 26 ++++++++++--------- Userland/Libraries/LibGL/SoftwareGLContext.h | 2 +- Userland/Libraries/LibSoftGPU/Device.cpp | 4 +-- Userland/Libraries/LibSoftGPU/Device.h | 3 ++- Userland/Libraries/LibSoftGPU/Enums.h | 5 ++++ 5 files changed, 24 insertions(+), 16 deletions(-) diff --git a/Userland/Libraries/LibGL/SoftwareGLContext.cpp b/Userland/Libraries/LibGL/SoftwareGLContext.cpp index 690b025d3b5..e17af897edc 100644 --- a/Userland/Libraries/LibGL/SoftwareGLContext.cpp +++ b/Userland/Libraries/LibGL/SoftwareGLContext.cpp @@ -17,6 +17,7 @@ #include #include #include +#include using AK::dbgln; @@ -3089,9 +3090,8 @@ void SoftwareGLContext::sync_light_state() m_rasterizer.set_light_state(light_id, light); } - for (auto material_id = 0u; material_id < 2u; material_id++) { + auto update_material_state = [&](SoftGPU::Face face, SoftGPU::Material const& current_material_state) { SoftGPU::Material material; - auto const& current_material_state = m_material_states.at(material_id); material.ambient = current_material_state.ambient; material.diffuse = current_material_state.diffuse; @@ -3103,8 +3103,10 @@ void SoftwareGLContext::sync_light_state() material.diffuse_color_index = current_material_state.diffuse_color_index; material.specular_color_index = current_material_state.specular_color_index; - m_rasterizer.set_material_state(material_id, material); - } + m_rasterizer.set_material_state(face, material); + }; + update_material_state(SoftGPU::Face::Front, m_material_states[Face::Front]); + update_material_state(SoftGPU::Face::Back, m_material_states[Face::Back]); } void SoftwareGLContext::sync_device_texcoord_config() @@ -3261,14 +3263,14 @@ void SoftwareGLContext::gl_materialf(GLenum face, GLenum pname, GLfloat param) switch (face) { case GL_FRONT: - m_material_states.at(MaterialFace::Front).shininess = param; + m_material_states[Face::Front].shininess = param; break; case GL_BACK: - m_material_states.at(MaterialFace::Back).shininess = param; + m_material_states[Face::Back].shininess = param; break; case GL_FRONT_AND_BACK: - m_material_states.at(MaterialFace::Front).shininess = param; - m_material_states.at(MaterialFace::Back).shininess = param; + m_material_states[Face::Front].shininess = param; + m_material_states[Face::Back].shininess = param; break; default: VERIFY_NOT_REACHED(); @@ -3310,14 +3312,14 @@ void SoftwareGLContext::gl_materialfv(GLenum face, GLenum pname, GLfloat const* switch (face) { case GL_FRONT: - update_material(m_material_states.at(MaterialFace::Front), pname, params); + update_material(m_material_states[Face::Front], pname, params); break; case GL_BACK: - update_material(m_material_states.at(MaterialFace::Back), pname, params); + update_material(m_material_states[Face::Back], pname, params); break; case GL_FRONT_AND_BACK: - update_material(m_material_states.at(MaterialFace::Front), pname, params); - update_material(m_material_states.at(MaterialFace::Back), pname, params); + update_material(m_material_states[Face::Front], pname, params); + update_material(m_material_states[Face::Back], pname, params); break; } diff --git a/Userland/Libraries/LibGL/SoftwareGLContext.h b/Userland/Libraries/LibGL/SoftwareGLContext.h index 05211c9b3be..e2175e3ac50 100644 --- a/Userland/Libraries/LibGL/SoftwareGLContext.h +++ b/Userland/Libraries/LibGL/SoftwareGLContext.h @@ -41,7 +41,7 @@ struct ContextParameter { } value; }; -enum MaterialFace : u8 { +enum Face { Front = 0, Back = 1, }; diff --git a/Userland/Libraries/LibSoftGPU/Device.cpp b/Userland/Libraries/LibSoftGPU/Device.cpp index f512363ef80..b2f3c1bd66e 100644 --- a/Userland/Libraries/LibSoftGPU/Device.cpp +++ b/Userland/Libraries/LibSoftGPU/Device.cpp @@ -1143,9 +1143,9 @@ void Device::set_light_state(unsigned int light_id, Light const& light) m_lights.at(light_id) = light; } -void Device::set_material_state(unsigned int material_id, Material const& material) +void Device::set_material_state(Face face, Material const& material) { - m_materials.at(material_id) = material; + m_materials[face] = material; } void Device::set_raster_position(RasterPosition const& raster_position) diff --git a/Userland/Libraries/LibSoftGPU/Device.h b/Userland/Libraries/LibSoftGPU/Device.h index 362ea7c1f56..fc38e2cebbf 100644 --- a/Userland/Libraries/LibSoftGPU/Device.h +++ b/Userland/Libraries/LibSoftGPU/Device.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2021, Stephan Unverwerth + * Copyright (c) 2022, Jelle Raaijmakers * * SPDX-License-Identifier: BSD-2-Clause */ @@ -118,7 +119,7 @@ public: void set_sampler_config(unsigned, SamplerConfig const&); void set_light_state(unsigned, Light const&); - void set_material_state(unsigned, Material const&); + void set_material_state(Face, Material const&); RasterPosition raster_position() const { return m_raster_position; } void set_raster_position(RasterPosition const& raster_position); diff --git a/Userland/Libraries/LibSoftGPU/Enums.h b/Userland/Libraries/LibSoftGPU/Enums.h index de7c8d2b114..38f5fa08fe4 100644 --- a/Userland/Libraries/LibSoftGPU/Enums.h +++ b/Userland/Libraries/LibSoftGPU/Enums.h @@ -58,6 +58,11 @@ enum class DepthTestFunction { Greater, }; +enum Face { + Front = 0, + Back = 1, +}; + enum FogMode { Linear, Exp,