Added a new ColoredTextureMaterial2D class. Also made the immediate mode renderer use it. This fixes color modulation.

This commit is contained in:
Relintai 2025-02-19 16:50:15 +01:00
parent 3ecea44801
commit 3451cd57c4
18 changed files with 194 additions and 3 deletions

View File

@ -82,6 +82,7 @@ ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/font_material.cpp -o s
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/texture_material_2d.cpp -o sfw/render_core/texture_material_2d.o
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/texture_material.cpp -o sfw/render_core/texture_material.o
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/transparent_texture_material.cpp -o sfw/render_core/transparent_texture_material.o
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/colored_texture_material_2d.cpp -o sfw/render_core/colored_texture_material_2d.o
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_immediate/renderer.cpp -o sfw/render_immediate/renderer.o
@ -138,6 +139,7 @@ ccache g++ -Wall -D_REENTRANT -g sfw/core/aabb.o sfw/core/basis.o sfw/core/color
sfw/render_core/colored_material.o sfw/render_core/font_material.o \
sfw/render_core/texture_material_2d.o sfw/render_core/texture_material.o \
sfw/render_core/transparent_texture_material.o \
sfw/render_core/colored_texture_material_2d.o \
sfw/render_immediate/renderer.o \
sfw/render_objects/camera_3d.o sfw/render_objects/object_3d.o sfw/render_objects/mesh_instance_3d.o \
sfw/render_objects/object_2d.o \

View File

@ -93,6 +93,7 @@ clang++ $args -D_REENTRANT -g -Isfw -c sfw/render_core/font_material.cpp -o sfw/
clang++ $args -D_REENTRANT -g -Isfw -c sfw/render_core/texture_material_2d.cpp -o sfw/render_core/texture_material_2d.o
clang++ $args -D_REENTRANT -g -Isfw -c sfw/render_core/texture_material.cpp -o sfw/render_core/texture_material.o
clang++ $args -D_REENTRANT -g -Isfw -c sfw/render_core/transparent_texture_material.cpp -o sfw/render_core/transparent_texture_material.o
clang++ $args -D_REENTRANT -g -Isfw -c sfw/render_core/colored_texture_material_2d.cpp -o sfw/render_core/colored_texture_material_2d.o
clang++ -w -framework cocoa -framework iokit -framework CoreFoundation -framework CoreAudio -framework AudioToolbox -D_REENTRANT -g -Isfw -c sfw/render_core/glfw_impl.m -o sfw/render_core/glfw_impl.o
@ -151,6 +152,7 @@ clang++ $args -D_REENTRANT -g sfw/core/aabb.o sfw/core/basis.o sfw/core/color.o
sfw/render_core/colored_material.o sfw/render_core/font_material.o \
sfw/render_core/texture_material_2d.o sfw/render_core/texture_material.o \
sfw/render_core/transparent_texture_material.o \
sfw/render_core/colored_texture_material_2d.o \
sfw/render_core/glfw_impl.o \
sfw/render_immediate/renderer.o \
sfw/render_objects/camera_3d.o sfw/render_objects/object_3d.o sfw/render_objects/mesh_instance_3d.o \

View File

@ -90,6 +90,7 @@ cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/font_material.cpp /Fo:sfw/ren
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/texture_material_2d.cpp /Fo:sfw/render_core/texture_material_2d.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/texture_material.cpp /Fo:sfw/render_core/texture_material.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/transparent_texture_material.cpp /Fo:sfw/render_core/transparent_texture_material.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_core/colored_texture_material_2d.cpp /Fo:sfw/render_core/colored_texture_material_2d.obj
cl /D_REENTRANT /EHsc /Zi /Isfw /c sfw/render_immediate/renderer.cpp /Fo:sfw/render_immediate/renderer.obj
@ -149,6 +150,7 @@ cl /D_REENTRANT /Zi ^
sfw/render_core/colored_material.obj sfw/render_core/font_material.obj ^
sfw/render_core/texture_material_2d.obj sfw/render_core/texture_material.obj ^
sfw/render_core/transparent_texture_material.obj ^
sfw/render_core/colored_texture_material_2d.obj ^
sfw/render_immediate/renderer.obj ^
sfw/render_objects/camera_3d.obj sfw/render_objects/object_3d.obj sfw/render_objects/mesh_instance_3d.obj ^
sfw/render_objects/object_2d.obj ^

View File

@ -82,6 +82,7 @@ ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/font_material.cpp -o s
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/texture_material_2d.cpp -o sfw/render_core/texture_material_2d.o
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/texture_material.cpp -o sfw/render_core/texture_material.o
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/transparent_texture_material.cpp -o sfw/render_core/transparent_texture_material.o
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_core/colored_texture_material_2d.cpp -o sfw/render_core/colored_texture_material_2d.o
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_immediate/renderer.cpp -o sfw/render_immediate/renderer.o
@ -139,6 +140,7 @@ ccache g++ -Wall \
sfw/render_core/colored_material.o sfw/render_core/font_material.o \
sfw/render_core/texture_material_2d.o sfw/render_core/texture_material.o \
sfw/render_core/transparent_texture_material.o \
sfw/render_core/colored_texture_material_2d.o \
sfw/render_immediate/renderer.o \
sfw/render_objects/camera_3d.o sfw/render_objects/object_3d.o sfw/render_objects/mesh_instance_3d.o \
sfw/render_objects/object_2d.o \

View File

@ -0,0 +1,92 @@
//--STRIP
#include "colored_texture_material_2d.h"
#include "render_core/3rd_glad.h"
//--STRIP
void ColoredTextureMaterial2D::bind_uniforms() {
set_uniform(projection_matrix_location, RenderState::projection_matrix_2d);
set_uniform(model_view_matrix_location, RenderState::model_view_matrix_2d);
if (texture.is_valid()) {
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texture->get_gl_texture());
glUniform1i(texture_location, 0);
}
}
void ColoredTextureMaterial2D::setup_uniforms() {
projection_matrix_location = get_uniform("u_proj_matrix");
model_view_matrix_location = get_uniform("u_model_view_matrix");
texture_location = get_uniform("u_texture");
}
void ColoredTextureMaterial2D::unbind() {
glDisable(GL_TEXTURE_2D);
}
void ColoredTextureMaterial2D::setup_state() {
glEnable(GL_TEXTURE_2D);
}
String ColoredTextureMaterial2D::get_vertex_shader_source() {
static const char *vertex_shader_source[] = {
#if defined(__APPLE__)
#else
"#version 100\n"
"precision mediump float;\n"
#endif
"uniform mat4 u_proj_matrix;\n"
"uniform mat4 u_model_view_matrix;\n"
"\n"
"attribute vec4 a_position;\n"
"attribute vec2 a_uv;\n"
"attribute vec4 a_color;\n"
"\n"
"varying vec4 v_color;\n"
"varying vec2 v_uv;\n"
"\n"
"void main() {\n"
" v_uv = a_uv;\n"
" v_color = a_color;\n"
" gl_Position = u_proj_matrix * u_model_view_matrix * a_position;\n"
"}"
};
return String(*vertex_shader_source);
}
String ColoredTextureMaterial2D::get_fragment_shader_source() {
static const char *fragment_shader_source[] = {
#ifndef __APPLE__
"#version 100\n"
"#ifdef GL_ES\n"
" precision mediump float;\n"
"#endif\n"
#endif
"\n"
"uniform sampler2D u_texture;\n"
"\n"
"varying vec4 v_color;\n"
"varying vec2 v_uv;\n"
"\n"
"void main() {\n"
" vec4 col = texture2D(u_texture, v_uv);\n"
"\n"
" if (col.a < 0.1) {\n"
" discard;\n"
" }\n"
"\n"
" gl_FragColor = col * v_color;\n"
"}"
};
return String(*fragment_shader_source);
}
ColoredTextureMaterial2D::ColoredTextureMaterial2D() {
projection_matrix_location = 0;
model_view_matrix_location = 0;
texture_location = 0;
}

View File

@ -0,0 +1,41 @@
//--STRIP
#ifndef COLORED_TEXTURE_MATERIAL_2D_H
#define COLORED_TEXTURE_MATERIAL_2D_H
//--STRIP
//--STRIP
#include "render_core/material.h"
#include "render_core/texture.h"
#include "render_core/render_state.h"
//--STRIP
class ColoredTextureMaterial2D : public Material {
SFW_OBJECT(ColoredTextureMaterial2D, Material);
public:
int get_material_id() {
return 8;
}
void bind_uniforms();
void setup_uniforms();
void unbind();
void setup_state();
String get_vertex_shader_source();
String get_fragment_shader_source();
ColoredTextureMaterial2D();
int32_t projection_matrix_location;
int32_t model_view_matrix_location;
int32_t texture_location;
Ref<Texture> texture;
};
//--STRIP
#endif // COLORED_TEXTURE_MATERIAL_2D_H
//--STRIP

View File

@ -11,7 +11,7 @@
#include "render_core/mesh.h"
#include "render_core/texture.h"
#include "render_core/texture_material.h"
#include "render_core/texture_material_2d.h"
#include "render_core/colored_texture_material_2d.h"
#include "render_core/render_state.h"
//--STRIP

View File

@ -24,6 +24,7 @@ class ColorMaterial2D;
class TextureMaterial;
class ColorMaterial;
class ColoredMaterial;
class ColoredTextureMaterial2D;
class Renderer : public Object {
SFW_OBJECT(Renderer, Object);
@ -141,7 +142,7 @@ private:
Ref<Mesh> _3d_mesh;
Ref<Mesh> _font_mesh;
Ref<TextureMaterial2D> _texture_material_2d;
Ref<ColoredTextureMaterial2D> _texture_material_2d;
Ref<FontMaterial> _font_material;
Ref<ColorMaterial2D> _color_material_2d;

View File

@ -618,6 +618,10 @@
//#includes own header
//--STRIP
{{FILE:sfw/render_core/transparent_texture_material.cpp}}
//--STRIP
//#includes own header
//--STRIP
{{FILE:sfw/render_core/colored_texture_material_2d.cpp}}
//--STRIP
//#include "render_core/image.h"

View File

@ -714,7 +714,12 @@
//#include "render_core/render_state.h"
//--STRIP
{{FILE:sfw/render_core/transparent_texture_material.h}}
//--STRIP
//#include "render_core/material.h"
//#include "render_core/texture.h"
//#include "render_core/render_state.h"
//--STRIP
{{FILE:sfw/render_core/colored_texture_material_2d.h}}
//--STRIP
//#include "core/color.h"

View File

@ -619,6 +619,10 @@
//#includes own header
//--STRIP
{{FILE:sfw/render_core/transparent_texture_material.cpp}}
//--STRIP
//#includes own header
//--STRIP
{{FILE:sfw/render_core/colored_texture_material_2d.cpp}}
//--STRIP
//#include "render_core/image.h"

View File

@ -715,6 +715,12 @@
//#include "render_core/render_state.h"
//--STRIP
{{FILE:sfw/render_core/transparent_texture_material.h}}
//--STRIP
//#include "render_core/material.h"
//#include "render_core/texture.h"
//#include "render_core/render_state.h"
//--STRIP
{{FILE:sfw/render_core/colored_texture_material_2d.h}}
//--STRIP

View File

@ -618,6 +618,10 @@
//#includes own header
//--STRIP
{{FILE:sfw/render_core/transparent_texture_material.cpp}}
//--STRIP
//#includes own header
//--STRIP
{{FILE:sfw/render_core/colored_texture_material_2d.cpp}}
//--STRIP
//#include "render_core/image.h"

View File

@ -714,6 +714,12 @@
//#include "render_core/render_state.h"
//--STRIP
{{FILE:sfw/render_core/transparent_texture_material.h}}
//--STRIP
//#include "render_core/material.h"
//#include "render_core/texture.h"
//#include "render_core/render_state.h"
//--STRIP
{{FILE:sfw/render_core/colored_texture_material_2d.h}}
//--STRIP

View File

@ -618,6 +618,10 @@
//#includes own header
//--STRIP
{{FILE:sfw/render_core/transparent_texture_material.cpp}}
//--STRIP
//#includes own header
//--STRIP
{{FILE:sfw/render_core/colored_texture_material_2d.cpp}}
//--STRIP
//#include "render_core/image.h"

View File

@ -714,6 +714,12 @@
//#include "render_core/render_state.h"
//--STRIP
{{FILE:sfw/render_core/transparent_texture_material.h}}
//--STRIP
//#include "render_core/material.h"
//#include "render_core/texture.h"
//#include "render_core/render_state.h"
//--STRIP
{{FILE:sfw/render_core/colored_texture_material_2d.h}}
//--STRIP

View File

@ -618,6 +618,10 @@
//#includes own header
//--STRIP
{{FILE:sfw/render_core/transparent_texture_material.cpp}}
//--STRIP
//#includes own header
//--STRIP
{{FILE:sfw/render_core/colored_texture_material_2d.cpp}}
//--STRIP
//#include "render_core/image.h"

View File

@ -714,6 +714,12 @@
//#include "render_core/render_state.h"
//--STRIP
{{FILE:sfw/render_core/transparent_texture_material.h}}
//--STRIP
//#include "render_core/material.h"
//#include "render_core/texture.h"
//#include "render_core/render_state.h"
//--STRIP
{{FILE:sfw/render_core/colored_texture_material_2d.h}}
//--STRIP