forked from Hartmut/paradiso
all important components are rewired and can be used
This commit is contained in:
parent
296d3add7b
commit
14343e7fd0
5 changed files with 70 additions and 37 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue