125 lines
2.0 KiB
C++
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];
|
|
}
|