fekalnigtacko/src/gfx/shader_sources.cpp
2026-05-23 18:28:22 +02:00

125 lines
2.0 KiB
C++

#include "shader_sources.hpp"
#include "shader_common.hpp"
// Zdrojove kody shaderu
static const char* const s_srcs[] = {
// SS_SOLID_VERT
SHADER_HEADER
R"GLSL(
layout (location = 0) in vec3 a_pos;
layout (location = 2) in vec4 a_color;
uniform mat4 u_view_proj;
uniform vec4 u_color;
out vec4 v_color;
void main() {
gl_Position = u_view_proj * vec4(a_pos, 1.0);
v_color = a_color * u_color;
}
)GLSL",
// SS_SOLID_FRAG
SHADER_HEADER
R"GLSL(
in vec4 v_color;
layout (location = 0) out vec4 o_color;
void main() {
o_color = v_color;
}
)GLSL",
// SS_HUD_VERT
SHADER_HEADER
R"GLSL(
layout (location = 0) in vec3 a_pos;
layout (location = 2) in vec4 a_color;
layout (location = 3) in vec2 a_uv;
uniform mat3 u_model;
out vec4 v_color;
out vec2 v_uv;
void main() {
vec3 pos2d = u_model * vec3(a_pos.xy, 1.0);
gl_Position = vec4(pos2d.xy, 0.0, 1.0);
v_color = a_color;
v_uv = a_uv;
}
)GLSL",
// SS_HUD_FRAG
SHADER_HEADER
R"GLSL(
in vec4 v_color;
in vec2 v_uv;
uniform sampler2D u_tex;
layout (location = 0) out vec4 o_color;
void main() {
o_color = texture(u_tex, v_uv);
o_color *= v_color;
}
)GLSL",
// SS_BEAM_VERT
SHADER_HEADER
R"GLSL(
layout (location = 0) in vec3 a_pos;
// instance
layout (location = 2) in vec4 a_color;
layout (location = 10) in vec3 a_p0;
layout (location = 11) in vec3 a_p1;
layout (location = 12) in float a_radius;
uniform mat4 u_view_proj;
uniform vec3 u_camera;
out vec4 v_color;
void main() {
vec3 p = mix(a_p0, a_p1, a_pos.y);
vec3 seg_dir = a_p1 - a_p0;
vec3 cam_dir = u_camera - p;
vec3 cross_dir = normalize(cross(seg_dir, cam_dir));
p += cross_dir * a_radius * (a_pos.x - 0.5) * 2.0;
gl_Position = u_view_proj * vec4(p, 1.0);
v_color = a_color;
}
)GLSL",
// SS_BEAM_FRAG
SHADER_HEADER
R"GLSL(
in vec4 v_color;
layout (location = 0) out vec4 o_color;
void main() {
o_color = v_color;
}
)GLSL",
};
// Vrati zdrojovy kod shaderu
const char* gfx::ShaderSources::Get(ShaderSource ss) {
return s_srcs[ss];
}