mirror of
https://github.com/Relintai/sfw.git
synced 2025-03-05 07:32:59 +01:00
Added a new ColoredTextureMaterial2D class. Also made the immediate mode renderer use it. This fixes color modulation.
This commit is contained in:
parent
3ecea44801
commit
3451cd57c4
@ -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 \
|
||||
|
@ -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 \
|
||||
|
@ -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 ^
|
||||
|
@ -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 \
|
||||
|
92
sfw/render_core/colored_texture_material_2d.cpp
Normal file
92
sfw/render_core/colored_texture_material_2d.cpp
Normal 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;
|
||||
}
|
41
sfw/render_core/colored_texture_material_2d.h
Normal file
41
sfw/render_core/colored_texture_material_2d.h
Normal 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
|
@ -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
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user