// Plasma Generator // HMS MediaEngine – Generator (GLES, Raspberry Pi). ES 2.0: texture2D, gl_FragColor, Schleifen mit konstanter Höchstgrenze. #version 100 precision mediump float; uniform vec2 u_resolution; uniform float u_time_seconds; uniform float u_delta_seconds; uniform float u_frame_index; uniform float u_layer_opacity; uniform float u_audio_rms; uniform float u_audio_peak; uniform float u_audio_bass; uniform float u_audio_mid; uniform float u_audio_treble; uniform float u_audio_beat; uniform float4 param_color_a; uniform float4 param_color_b; uniform float param_scale; uniform float param_stretch_x; uniform float param_stretch_y; uniform float param_distance; uniform float param_phase; uniform float param_speed; uniform float param_seed; uniform float u_quality_samples; varying vec2 v_uv; float hash21(vec2 p) { p = fract(p * vec2(123.34, 456.21)); p += dot(p, p + 45.32); return fract(p.x * p.y); } void main() { vec2 p = (v_uv - 0.5) * param_scale; p.x *= param_stretch_x; p.y *= param_stretch_y; float t = u_time_seconds * param_speed + param_phase; float terms = clamp(u_quality_samples, 1.0, 8.0); float v = 0.0; for (int i = 0; i < 8; i++) { if (float(i) >= terms) { break; } float fi = float(i + 1); v += sin(p.x * fi + t * fi * 0.5 + param_seed) * sin(p.y * fi * 1.3 - t * fi * 0.3 + param_seed * 2.0); v += sin(length(p) * fi * 0.7 + t * 0.8 + param_seed); } v /= terms; v = v * 0.5 + 0.5; float d = length(p) * param_distance; v += 0.5 + 0.5 * sin(d * 3.0 - t * 1.5 + param_seed); v = clamp(v, 0.0, 1.0); vec3 col = mix(param_color_a.rgb, param_color_b.rgb, v); gl_FragColor = vec4(col * u_layer_opacity, u_layer_opacity); }