all important components are rewired and can be used

This commit is contained in:
Hartmut Seichter 2023-07-01 16:07:28 +02:00
parent 296d3add7b
commit 14343e7fd0
5 changed files with 70 additions and 37 deletions

View file

@ -18,36 +18,56 @@
void setup_shaders(paradiso::Shader& shader) {
const auto unlit_v = R"(
#version 330 core
#version 400 core
layout (location = 0) in vec3 vertices;
layout (location = 1) in vec3 normals;
layout (location = 2) in vec2 texture_coords;
// pivot der sprite
uniform vec2 pivot = vec2( 0.0, 0.0 );
// scale
uniform vec2 scale = vec2( 1.0, 1.0 );
// rotation
uniform float rotation = 0.2;
vec4 pivot_3d = vec4( pivot , 0.0, 1.0 );
// wir sind natuerlich in homogenenen 3D Koordinaten unterwegs
mat4 mm = mat4(
vec4( scale.x, 0.0, 0.0, 0.0),
vec4( 0.0, scale.y, 0.0, 0.0),
vec4( 0.0, 0.0, 1.0, 0.0),
vec4( pivot, 0.0, 1.0)
);
out vec2 tex_c;
float sir = sin(rotation);
float cor = cos(rotation);
mat4 mr = mat4(
vec4( cor, sir, 0.0, 0.0),
vec4(-sir, cor, 0.0, 0.0),
vec4( 0.0, 0.0, 1.0, 0.0),
vec4( 0.0, 0.0, 0.0, 1.0)
);
out vec2 tex_c; // das hier reicht die texturkoordinaten durch
void main() {
tex_c = texture_coords;
gl_Position = vec4(vertices, 1.0) + pivot_3d;
tex_c = texture_coords; // umstaendlich aber notwendig
gl_Position = mm * mr * vec4(vertices, 1.0); // unsere eigentliche shader position
}
)";
const auto unlit_f = R"(
#version 330 core
#version 400 core
uniform vec4 color = vec4(1.0, 0.0, 0.0, 1.0);
uniform sampler2D tex_color;
uniform sampler2D tex_color; // hier ist unsere sprite textur (bitmap)
in vec2 tex_c;
in vec2 tex_c; // da sind die texturkoordinaten wieder
out vec4 frag_color;
out vec4 frag_color; // das hier wird der output (pixelwert/fragment)
void main() {
frag_color = texture(tex_color,tex_c); // * color;
frag_color = texture(tex_color,tex_c);
})";
shader.set_source(paradiso::Shader::Type::Vertex, unlit_v);
@ -111,6 +131,10 @@ auto main() -> int {
sprite.pivot.x() -= 0.1f;
} else if (key == 'D') {
sprite.pivot.x() += 0.1f;
} else if (key == 'P') {
sprite.scale *= 0.9;
} else if (key == 'R') {
sprite.rotation += 0.1;
}
});
@ -136,8 +160,10 @@ auto main() -> int {
// hier wird das eigentliche löschen des vorherigen Inhalts ausgelöst
ctx.clear();
// wir setzen den pivot der sprite über den shader
// wir setzen die daten der sprite über den shader
shader.set_uniform("pivot", sprite.pivot);
shader.set_uniform("scale", sprite.scale);
shader.set_uniform("rotation", sprite.rotation);
// Ein `renderer` kann nur mit einer Sprite verwendet werden!
// Aber ein Shader kann man für mehrere Sprite-Renderer Kombis verwenden