forked from AuroraMiddleware/gtk
cde933ebd9
We were emitting the box and not the shadow box as the rectangle. So we didn't draw any shadows. Oops.
56 lines
1.6 KiB
GLSL
56 lines
1.6 KiB
GLSL
#version 420 core
|
|
|
|
#include "clip.vert.glsl"
|
|
|
|
layout(location = 0) in vec4 inOutline;
|
|
layout(location = 1) in vec4 inOutlineCornerWidths;
|
|
layout(location = 2) in vec4 inOutlineCornerHeights;
|
|
layout(location = 3) in vec4 inColor;
|
|
layout(location = 4) in vec2 inOffset;
|
|
layout(location = 5) in float inSpread;
|
|
layout(location = 6) in float inBlurRadius;
|
|
|
|
layout(location = 0) out vec2 outPos;
|
|
layout(location = 1) out flat vec4 outOutline;
|
|
layout(location = 2) out flat vec4 outOutlineCornerWidths;
|
|
layout(location = 3) out flat vec4 outOutlineCornerHeights;
|
|
layout(location = 4) out flat vec4 outColor;
|
|
layout(location = 5) out flat vec2 outOffset;
|
|
layout(location = 6) out flat float outSpread;
|
|
layout(location = 7) out flat float outBlurRadius;
|
|
|
|
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) };
|
|
|
|
float radius_pixels(float radius) {
|
|
return radius * (3.0 * sqrt(2 * 3.141592653589793) / 4) * 1.5;
|
|
}
|
|
|
|
void main() {
|
|
vec4 rect = inOutline;
|
|
float spread = inSpread + radius_pixels(inBlurRadius);
|
|
rect += vec4(inOffset - spread, vec2(2 * spread));
|
|
|
|
clip (inOutline);
|
|
|
|
vec2 pos = rect.xy + rect.zw * offsets[gl_VertexIndex];
|
|
gl_Position = push.mvp * vec4 (pos, 0.0, 1.0);
|
|
outPos = pos;
|
|
|
|
outOutline = inOutline;
|
|
outOutlineCornerWidths = inOutlineCornerWidths;
|
|
outOutlineCornerHeights = inOutlineCornerHeights;
|
|
outColor = inColor;
|
|
outOffset = inOffset;
|
|
outSpread = inSpread;
|
|
outBlurRadius = inBlurRadius;
|
|
}
|