1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 05:47:35 +00:00

LibGL+LibSoftGPU: Add GL_ADD Texture Environment

This commit is contained in:
Jesse Buhagiar 2022-03-09 21:27:50 +11:00 committed by Andreas Kling
parent e34f199997
commit c9f44c746a
4 changed files with 13 additions and 0 deletions

View file

@ -475,6 +475,8 @@ extern "C" {
#define GL_MODELVIEW_MATRIX 0x0BA6 #define GL_MODELVIEW_MATRIX 0x0BA6
#define GL_PROJECTION_MATRIX 0x0BA7 #define GL_PROJECTION_MATRIX 0x0BA7
#define GL_ADD 0x0104
GLAPI void glBegin(GLenum mode); GLAPI void glBegin(GLenum mode);
GLAPI void glClear(GLbitfield mask); GLAPI void glClear(GLbitfield mask);
GLAPI void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha); GLAPI void glClearColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);

View file

@ -2057,6 +2057,7 @@ void GLContext::gl_tex_env(GLenum target, GLenum pname, GLfloat param)
case GL_MODULATE: case GL_MODULATE:
case GL_REPLACE: case GL_REPLACE:
case GL_DECAL: case GL_DECAL:
case GL_ADD:
m_active_texture_unit->set_env_mode(param_enum); m_active_texture_unit->set_env_mode(param_enum);
m_sampler_config_is_dirty = true; m_sampler_config_is_dirty = true;
break; break;
@ -3013,6 +3014,9 @@ void GLContext::sync_device_sampler_config()
case GL_DECAL: case GL_DECAL:
config.fixed_function_texture_env_mode = GPU::TextureEnvMode::Decal; config.fixed_function_texture_env_mode = GPU::TextureEnvMode::Decal;
break; break;
case GL_ADD:
config.fixed_function_texture_env_mode = GPU::TextureEnvMode::Add;
break;
default: default:
VERIFY_NOT_REACHED(); VERIFY_NOT_REACHED();
} }

View file

@ -34,6 +34,7 @@ enum class TextureEnvMode {
Modulate, Modulate,
Replace, Replace,
Decal, Decal,
Add,
}; };
struct SamplerConfig final { struct SamplerConfig final {

View file

@ -991,6 +991,12 @@ ALWAYS_INLINE void Device::shade_fragments(PixelQuad& quad)
quad.out_color.set_z(mix(quad.out_color.z(), texel.z(), dst_alpha)); quad.out_color.set_z(mix(quad.out_color.z(), texel.z(), dst_alpha));
break; break;
} }
case GPU::TextureEnvMode::Add:
quad.out_color.set_x(quad.out_color.x() + texel.x());
quad.out_color.set_y(quad.out_color.y() + texel.y());
quad.out_color.set_z(quad.out_color.z() + texel.z());
quad.out_color.set_w(quad.out_color.w() * texel.w()); // FIXME: If texture format is `GL_INTENSITY` alpha components must be added (https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glTexEnv.xml)
break;
default: default:
VERIFY_NOT_REACHED(); VERIFY_NOT_REACHED();
} }