mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-20 09:49:15 +03:00
LibGL+LibSoftGPU: Enumize material front/back face selection
This commit is contained in:
parent
64dfb3a28f
commit
3609ffc450
Notes:
sideshowbarker
2024-07-17 20:42:57 +09:00
Author: https://github.com/gmta Commit: https://github.com/SerenityOS/serenity/commit/3609ffc4508 Pull-request: https://github.com/SerenityOS/serenity/pull/11960 Reviewed-by: https://github.com/Quaker762 ✅
@ -17,6 +17,7 @@
|
||||
#include <LibGfx/Painter.h>
|
||||
#include <LibGfx/Vector4.h>
|
||||
#include <LibSoftGPU/Device.h>
|
||||
#include <LibSoftGPU/Enums.h>
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -41,7 +41,7 @@ struct ContextParameter {
|
||||
} value;
|
||||
};
|
||||
|
||||
enum MaterialFace : u8 {
|
||||
enum Face {
|
||||
Front = 0,
|
||||
Back = 1,
|
||||
};
|
||||
|
@ -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)
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2021, Stephan Unverwerth <s.unverwerth@serenityos.org>
|
||||
* Copyright (c) 2022, Jelle Raaijmakers <jelle@gmta.nl>
|
||||
*
|
||||
* 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);
|
||||
|
@ -58,6 +58,11 @@ enum class DepthTestFunction {
|
||||
Greater,
|
||||
};
|
||||
|
||||
enum Face {
|
||||
Front = 0,
|
||||
Back = 1,
|
||||
};
|
||||
|
||||
enum FogMode {
|
||||
Linear,
|
||||
Exp,
|
||||
|
Loading…
Reference in New Issue
Block a user