mirror of
https://github.com/hyprwm/hyprlock.git
synced 2025-01-10 05:19:48 +01:00
122 lines
2.6 KiB
C++
122 lines
2.6 KiB
C++
|
#pragma once
|
||
|
|
||
|
#include <string>
|
||
|
|
||
|
inline static constexpr auto ROUNDED_SHADER_FUNC = [](const std::string colorVarName) -> std::string {
|
||
|
return R"#(
|
||
|
|
||
|
// branchless baby!
|
||
|
highp vec2 pixCoord = vec2(gl_FragCoord);
|
||
|
pixCoord -= topLeft + fullSize * 0.5;
|
||
|
pixCoord *= vec2(lessThan(pixCoord, vec2(0.0))) * -2.0 + 1.0;
|
||
|
pixCoord -= fullSize * 0.5 - radius;
|
||
|
pixCoord += vec2(1.0, 1.0) / fullSize; // center the pix dont make it top-left
|
||
|
|
||
|
if (pixCoord.x + pixCoord.y > radius) {
|
||
|
|
||
|
float dist = length(pixCoord);
|
||
|
|
||
|
if (dist > radius + 1.0)
|
||
|
discard;
|
||
|
|
||
|
if (dist > radius - 1.0) {
|
||
|
float dist = length(pixCoord);
|
||
|
|
||
|
float normalized = 1.0 - smoothstep(0.0, 1.0, dist - radius + 0.5);
|
||
|
|
||
|
)#" +
|
||
|
colorVarName + R"#( = )#" + colorVarName + R"#( * normalized;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
)#";
|
||
|
};
|
||
|
|
||
|
inline const std::string QUADVERTSRC = R"#(
|
||
|
uniform mat3 proj;
|
||
|
uniform vec4 color;
|
||
|
attribute vec2 pos;
|
||
|
attribute vec2 texcoord;
|
||
|
attribute vec2 texcoordMatte;
|
||
|
varying vec4 v_color;
|
||
|
varying vec2 v_texcoord;
|
||
|
varying vec2 v_texcoordMatte;
|
||
|
|
||
|
void main() {
|
||
|
gl_Position = vec4(proj * vec3(pos, 1.0), 1.0);
|
||
|
v_color = color;
|
||
|
v_texcoord = texcoord;
|
||
|
v_texcoordMatte = texcoordMatte;
|
||
|
})#";
|
||
|
|
||
|
inline const std::string QUADFRAGSRC = R"#(
|
||
|
precision highp float;
|
||
|
varying vec4 v_color;
|
||
|
|
||
|
uniform vec2 topLeft;
|
||
|
uniform vec2 fullSize;
|
||
|
uniform float radius;
|
||
|
|
||
|
void main() {
|
||
|
|
||
|
vec4 pixColor = v_color;
|
||
|
|
||
|
if (radius > 0.0) {
|
||
|
)#" +
|
||
|
ROUNDED_SHADER_FUNC("pixColor") + R"#(
|
||
|
}
|
||
|
|
||
|
gl_FragColor = pixColor;
|
||
|
})#";
|
||
|
|
||
|
inline const std::string TEXVERTSRC = R"#(
|
||
|
uniform mat3 proj;
|
||
|
attribute vec2 pos;
|
||
|
attribute vec2 texcoord;
|
||
|
varying vec2 v_texcoord;
|
||
|
|
||
|
void main() {
|
||
|
gl_Position = vec4(proj * vec3(pos, 1.0), 1.0);
|
||
|
v_texcoord = texcoord;
|
||
|
})#";
|
||
|
|
||
|
inline const std::string TEXFRAGSRCRGBA = R"#(
|
||
|
precision highp float;
|
||
|
varying vec2 v_texcoord; // is in 0-1
|
||
|
uniform sampler2D tex;
|
||
|
uniform float alpha;
|
||
|
|
||
|
uniform vec2 topLeft;
|
||
|
uniform vec2 fullSize;
|
||
|
uniform float radius;
|
||
|
|
||
|
uniform int discardOpaque;
|
||
|
uniform int discardAlpha;
|
||
|
uniform float discardAlphaValue;
|
||
|
|
||
|
uniform int applyTint;
|
||
|
uniform vec3 tint;
|
||
|
|
||
|
void main() {
|
||
|
|
||
|
vec4 pixColor = texture2D(tex, v_texcoord);
|
||
|
|
||
|
if (discardOpaque == 1 && pixColor[3] * alpha == 1.0)
|
||
|
discard;
|
||
|
|
||
|
if (discardAlpha == 1 && pixColor[3] <= discardAlphaValue)
|
||
|
discard;
|
||
|
|
||
|
if (applyTint == 1) {
|
||
|
pixColor[0] = pixColor[0] * tint[0];
|
||
|
pixColor[1] = pixColor[1] * tint[1];
|
||
|
pixColor[2] = pixColor[2] * tint[2];
|
||
|
}
|
||
|
|
||
|
if (radius > 0.0) {
|
||
|
)#" +
|
||
|
ROUNDED_SHADER_FUNC("pixColor") + R"#(
|
||
|
}
|
||
|
|
||
|
gl_FragColor = pixColor * alpha;
|
||
|
})#";
|