Initial commit of WhisperVoice
This commit is contained in:
87
src/ui/qml/gradient_blobs.frag
Normal file
87
src/ui/qml/gradient_blobs.frag
Normal file
@@ -0,0 +1,87 @@
|
||||
#version 440
|
||||
|
||||
layout(location = 0) in vec2 qt_TexCoord0;
|
||||
layout(location = 0) out vec4 fragColor;
|
||||
|
||||
layout(std140, binding = 0) uniform buf {
|
||||
mat4 qt_Matrix;
|
||||
float qt_Opacity;
|
||||
float time;
|
||||
};
|
||||
|
||||
// Smooth noise function
|
||||
float noise(vec2 p) {
|
||||
return fract(sin(dot(p, vec2(12.9898, 78.233))) * 43758.5453);
|
||||
}
|
||||
|
||||
// Smooth interpolation
|
||||
float smoothNoise(vec2 p) {
|
||||
vec2 i = floor(p);
|
||||
vec2 f = fract(p);
|
||||
f = f * f * (3.0 - 2.0 * f); // Smoothstep
|
||||
|
||||
float a = noise(i);
|
||||
float b = noise(i + vec2(1.0, 0.0));
|
||||
float c = noise(i + vec2(0.0, 1.0));
|
||||
float d = noise(i + vec2(1.0, 1.0));
|
||||
|
||||
return mix(mix(a, b, f.x), mix(c, d, f.x), f.y);
|
||||
}
|
||||
|
||||
// Fractal Brownian Motion
|
||||
float fbm(vec2 p) {
|
||||
float value = 0.0;
|
||||
float amplitude = 0.5;
|
||||
for (int i = 0; i < 4; i++) {
|
||||
value += amplitude * smoothNoise(p);
|
||||
p *= 2.0;
|
||||
amplitude *= 0.5;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
// HSV to RGB conversion
|
||||
vec3 hsv2rgb(vec3 c) {
|
||||
vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
|
||||
vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
|
||||
return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
|
||||
}
|
||||
|
||||
void main() {
|
||||
vec2 uv = qt_TexCoord0;
|
||||
float t = time * 0.05;
|
||||
|
||||
// Multiple moving blobs
|
||||
vec2 p1 = uv * 3.0 + vec2(t * 0.3, t * 0.2);
|
||||
vec2 p2 = uv * 2.5 + vec2(-t * 0.4, t * 0.3);
|
||||
vec2 p3 = uv * 4.0 + vec2(t * 0.2, -t * 0.25);
|
||||
|
||||
float blob1 = fbm(p1);
|
||||
float blob2 = fbm(p2);
|
||||
float blob3 = fbm(p3);
|
||||
|
||||
// Combine blobs
|
||||
float combined = (blob1 + blob2 + blob3) / 3.0;
|
||||
|
||||
// Live hue shifting - slowly cycle through hues over time
|
||||
float hueShift = time * 0.02; // Slow hue rotation
|
||||
|
||||
// Create colors using HSV with shifting hue
|
||||
vec3 color1 = hsv2rgb(vec3(fract(0.75 + hueShift), 0.6, 0.35)); // Purple range
|
||||
vec3 color2 = hsv2rgb(vec3(fract(0.85 + hueShift), 0.7, 0.35)); // Magenta range
|
||||
vec3 color3 = hsv2rgb(vec3(fract(0.55 + hueShift), 0.7, 0.35)); // Blue range
|
||||
vec3 color4 = hsv2rgb(vec3(fract(0.08 + hueShift), 0.7, 0.35)); // Orange range
|
||||
vec3 color5 = hsv2rgb(vec3(fract(0.50 + hueShift), 0.6, 0.30)); // Teal range
|
||||
|
||||
// Mix colors based on blob values for visible multi-color effect
|
||||
vec3 color = mix(color1, color2, blob1);
|
||||
color = mix(color, color3, blob2);
|
||||
color = mix(color, color4, blob3);
|
||||
color = mix(color, color5, combined);
|
||||
|
||||
// Moderate brightness for visible but dark background accent
|
||||
float brightness = 0.25 + combined * 0.25;
|
||||
color *= brightness;
|
||||
|
||||
fragColor = vec4(color, qt_Opacity);
|
||||
}
|
||||
Reference in New Issue
Block a user