57 lines
1.4 KiB
GLSL
57 lines
1.4 KiB
GLSL
#version 460
|
|
|
|
#extension GL_GOOGLE_include_directive : require
|
|
|
|
#include "gui.layout"
|
|
|
|
layout (location = 0) in vec2 in_dst_start;
|
|
layout (location = 1) in vec2 in_dst_end;
|
|
layout (location = 2) in vec2 in_src_start;
|
|
layout (location = 3) in vec2 in_src_end;
|
|
layout (location = 4) in vec4 in_col;
|
|
|
|
layout (location = 0) out struct FragDataOut {
|
|
vec4 color;
|
|
vec2 uv;
|
|
} FragData;
|
|
|
|
vec2 Vertices[4] = vec2[4](
|
|
vec2(-1.0, +1.0),
|
|
vec2(-1.0, -1.0),
|
|
vec2(+1.0, +1.0),
|
|
vec2(+1.0, -1.0)
|
|
);
|
|
|
|
vec2 rotate(vec2 coords, float theta)
|
|
{
|
|
return mat2(cos(theta), sin(theta), -sin(theta), cos(theta)) * coords;
|
|
}
|
|
|
|
void main()
|
|
{
|
|
ivec2 tex_size = textureSize(sampler2D(SpriteAtlas, SamplerNearest), 0);
|
|
|
|
vec2 dst_half_size = (in_dst_end - in_dst_start) / 2;
|
|
vec2 dst_center = (in_dst_end + in_dst_start) / 2;
|
|
vec2 dst_pos = (Vertices[gl_VertexIndex] * dst_half_size + dst_center);
|
|
|
|
vec2 src_half_size = (in_src_end - in_src_start) / 2;
|
|
vec2 src_center = (in_src_end + in_src_start) / 2;
|
|
vec2 src_pos = (Vertices[gl_VertexIndex] * src_half_size + src_center);
|
|
|
|
vec2 uvs[4] = vec2[4](
|
|
vec2(in_src_start.x, in_src_start.y),
|
|
vec2(in_src_start.x, in_src_end.y),
|
|
vec2(in_src_end.x, in_src_start.y),
|
|
vec2(in_src_end.x, in_src_end.y)
|
|
);
|
|
|
|
FragData.color = in_col;
|
|
FragData.uv = uvs[gl_VertexIndex] / tex_size;
|
|
|
|
gl_Position = vec4(2 * dst_pos.x / PC.res.x - 1,
|
|
2 * dst_pos.y / PC.res.y - 1,
|
|
0,
|
|
1);
|
|
}
|