forked from AuroraMiddleware/gtk
6bec7aae89
Instead of having 3 different shaders for the different clipping versions, just have one shader and use a preprocessor define to use different clip functions. That preprocessor define is set in the Makefile. Also use foo.frag and foo.vert as the file extensions instead of using foo.frag.glsl and foo.vert.glsl, as that's what glslc suggests as extension.
35 lines
910 B
GLSL
35 lines
910 B
GLSL
#version 420 core
|
|
|
|
#include "clip.vert.glsl"
|
|
|
|
layout(location = 0) in vec4 inRect;
|
|
layout(location = 1) in vec4 inTexRect;
|
|
|
|
layout(location = 0) out vec2 outPos;
|
|
layout(location = 1) out vec2 outTexCoord;
|
|
|
|
out gl_PerVertex {
|
|
vec4 gl_Position;
|
|
};
|
|
|
|
vec2 offsets[6] = { vec2(0.0, 0.0),
|
|
vec2(1.0, 0.0),
|
|
vec2(0.0, 1.0),
|
|
vec2(0.0, 1.0),
|
|
vec2(1.0, 0.0),
|
|
vec2(1.0, 1.0) };
|
|
|
|
void main() {
|
|
vec4 rect = clip (inRect);
|
|
vec2 pos = rect.xy + rect.zw * offsets[gl_VertexIndex];
|
|
gl_Position = push.mvp * vec4 (pos, 0.0, 1.0);
|
|
|
|
outPos = pos;
|
|
|
|
vec4 texrect = vec4((rect.xy - inRect.xy) / inRect.zw,
|
|
rect.zw / inRect.zw);
|
|
texrect = vec4(inTexRect.xy + inTexRect.zw * texrect.xy,
|
|
inTexRect.zw * texrect.zw);
|
|
outTexCoord = texrect.xy + texrect.zw * offsets[gl_VertexIndex];
|
|
}
|