mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 02:27:43 +00:00
LibGL+LibSoftGPU: Enumize material front/back face selection
This commit is contained in:
parent
64dfb3a28f
commit
3609ffc450
5 changed files with 24 additions and 16 deletions
|
@ -17,6 +17,7 @@
|
||||||
#include <LibGfx/Painter.h>
|
#include <LibGfx/Painter.h>
|
||||||
#include <LibGfx/Vector4.h>
|
#include <LibGfx/Vector4.h>
|
||||||
#include <LibSoftGPU/Device.h>
|
#include <LibSoftGPU/Device.h>
|
||||||
|
#include <LibSoftGPU/Enums.h>
|
||||||
|
|
||||||
using AK::dbgln;
|
using AK::dbgln;
|
||||||
|
|
||||||
|
@ -3089,9 +3090,8 @@ void SoftwareGLContext::sync_light_state()
|
||||||
m_rasterizer.set_light_state(light_id, light);
|
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;
|
SoftGPU::Material material;
|
||||||
auto const& current_material_state = m_material_states.at(material_id);
|
|
||||||
|
|
||||||
material.ambient = current_material_state.ambient;
|
material.ambient = current_material_state.ambient;
|
||||||
material.diffuse = current_material_state.diffuse;
|
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.diffuse_color_index = current_material_state.diffuse_color_index;
|
||||||
material.specular_color_index = current_material_state.specular_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()
|
void SoftwareGLContext::sync_device_texcoord_config()
|
||||||
|
@ -3261,14 +3263,14 @@ void SoftwareGLContext::gl_materialf(GLenum face, GLenum pname, GLfloat param)
|
||||||
|
|
||||||
switch (face) {
|
switch (face) {
|
||||||
case GL_FRONT:
|
case GL_FRONT:
|
||||||
m_material_states.at(MaterialFace::Front).shininess = param;
|
m_material_states[Face::Front].shininess = param;
|
||||||
break;
|
break;
|
||||||
case GL_BACK:
|
case GL_BACK:
|
||||||
m_material_states.at(MaterialFace::Back).shininess = param;
|
m_material_states[Face::Back].shininess = param;
|
||||||
break;
|
break;
|
||||||
case GL_FRONT_AND_BACK:
|
case GL_FRONT_AND_BACK:
|
||||||
m_material_states.at(MaterialFace::Front).shininess = param;
|
m_material_states[Face::Front].shininess = param;
|
||||||
m_material_states.at(MaterialFace::Back).shininess = param;
|
m_material_states[Face::Back].shininess = param;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
VERIFY_NOT_REACHED();
|
VERIFY_NOT_REACHED();
|
||||||
|
@ -3310,14 +3312,14 @@ void SoftwareGLContext::gl_materialfv(GLenum face, GLenum pname, GLfloat const*
|
||||||
|
|
||||||
switch (face) {
|
switch (face) {
|
||||||
case GL_FRONT:
|
case GL_FRONT:
|
||||||
update_material(m_material_states.at(MaterialFace::Front), pname, params);
|
update_material(m_material_states[Face::Front], pname, params);
|
||||||
break;
|
break;
|
||||||
case GL_BACK:
|
case GL_BACK:
|
||||||
update_material(m_material_states.at(MaterialFace::Back), pname, params);
|
update_material(m_material_states[Face::Back], pname, params);
|
||||||
break;
|
break;
|
||||||
case GL_FRONT_AND_BACK:
|
case GL_FRONT_AND_BACK:
|
||||||
update_material(m_material_states.at(MaterialFace::Front), pname, params);
|
update_material(m_material_states[Face::Front], pname, params);
|
||||||
update_material(m_material_states.at(MaterialFace::Back), pname, params);
|
update_material(m_material_states[Face::Back], pname, params);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ struct ContextParameter {
|
||||||
} value;
|
} value;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum MaterialFace : u8 {
|
enum Face {
|
||||||
Front = 0,
|
Front = 0,
|
||||||
Back = 1,
|
Back = 1,
|
||||||
};
|
};
|
||||||
|
|
|
@ -1143,9 +1143,9 @@ void Device::set_light_state(unsigned int light_id, Light const& light)
|
||||||
m_lights.at(light_id) = 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)
|
void Device::set_raster_position(RasterPosition const& raster_position)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2021, Stephan Unverwerth <s.unverwerth@serenityos.org>
|
* Copyright (c) 2021, Stephan Unverwerth <s.unverwerth@serenityos.org>
|
||||||
|
* Copyright (c) 2022, Jelle Raaijmakers <jelle@gmta.nl>
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-2-Clause
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -118,7 +119,7 @@ public:
|
||||||
|
|
||||||
void set_sampler_config(unsigned, SamplerConfig const&);
|
void set_sampler_config(unsigned, SamplerConfig const&);
|
||||||
void set_light_state(unsigned, Light 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; }
|
RasterPosition raster_position() const { return m_raster_position; }
|
||||||
void set_raster_position(RasterPosition const& raster_position);
|
void set_raster_position(RasterPosition const& raster_position);
|
||||||
|
|
|
@ -58,6 +58,11 @@ enum class DepthTestFunction {
|
||||||
Greater,
|
Greater,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum Face {
|
||||||
|
Front = 0,
|
||||||
|
Back = 1,
|
||||||
|
};
|
||||||
|
|
||||||
enum FogMode {
|
enum FogMode {
|
||||||
Linear,
|
Linear,
|
||||||
Exp,
|
Exp,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue