Add FPS counter, VSync toggle, shader metadata system, and multi-pass infrastructure
- FPS counter in window title (updates every 500ms) - F4 key toggles VSync on/off - Shader metadata: Name and Author from comments - iChannel metadata parsing for multi-pass support - Base structures: ShaderBuffer, ShaderPass - FBO/texture management functions - Updated all 11 shaders with Name/Author metadata 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
73
shaders/remember.frag.glsl
Normal file
73
shaders/remember.frag.glsl
Normal file
@@ -0,0 +1,73 @@
|
||||
// Name: Remember
|
||||
// Author: diatribes
|
||||
// URL: https://www.shadertoy.com/view/tXSBDK
|
||||
#version 330 core
|
||||
precision highp float;
|
||||
|
||||
out vec4 FragColor;
|
||||
in vec2 vUV;
|
||||
uniform vec2 iResolution;
|
||||
uniform float iTime;
|
||||
|
||||
// fuzzy brain
|
||||
|
||||
// Hash function to replace iChannel0 texture noise
|
||||
float hash12(vec2 p) {
|
||||
vec3 p3 = fract(vec3(p.xyx) * .1031);
|
||||
p3 += dot(p3, p3.yzx + 33.33);
|
||||
return fract((p3.x + p3.y) * p3.z);
|
||||
}
|
||||
|
||||
void mainImage(out vec4 o, vec2 u) {
|
||||
|
||||
vec3 q,p = vec3(iResolution.xy, iResolution.x / iResolution.y);
|
||||
|
||||
float i = 0.0, s,
|
||||
// start the ray at a small random distance,
|
||||
// this will reduce banding
|
||||
// Replaced texelFetch(iChannel0, ...) with hash function
|
||||
d = .125 * hash12(u),
|
||||
t = iTime * .1;
|
||||
|
||||
// scale coords
|
||||
u = (u+u-p.xy)/p.y;
|
||||
if (abs(u.y) > .8) { o = vec4(0); return; }
|
||||
|
||||
// Initialize output color (out parameter must be initialized before use)
|
||||
o = vec4(0.0);
|
||||
|
||||
for(; i<64.; i++) {
|
||||
|
||||
// shorthand for standard raymarch sample, then move forward:
|
||||
// p = ro + rd * d, p.z + t
|
||||
q = p = vec3(u * d, d + t*5.);
|
||||
p.xy *= mat2(cos(.1*p.z+.1*t+vec4(0,33,11,0)));
|
||||
|
||||
q.xz = cos(q.xz);
|
||||
p.z = cos(p.z) ;
|
||||
// turbulence
|
||||
for (s = 1.; s++ <6.;
|
||||
q += sin(.6*t+p.zxy*.6),
|
||||
p += sin(t+t+p.yzx*s)*.6);
|
||||
|
||||
// distance to spheres
|
||||
d += s = .02 + abs(min(length(p+3.*sin(p.z*.5))-4., length(q-2.*sin(p.z*.4))-6.))*.2;
|
||||
|
||||
// color: 1.+cos so we don't go negative, cos(d+vec4(6,4,2,0)) samples from the palette
|
||||
// divide by s for form and distance
|
||||
// Clamp only the first term to prevent extreme overflow, leave second term free
|
||||
vec4 brightTerm = min(.01*vec4(6,2,1,0)/max(length(u*sin(t+t+t)), 0.001), vec4(50.0));
|
||||
o += brightTerm + 1. / s * length(u);
|
||||
|
||||
}
|
||||
|
||||
// tonemap and divide brightness
|
||||
o = tanh(max(o /6e2 + dot(u,u)*.35, 0.));
|
||||
}
|
||||
|
||||
void main() {
|
||||
vec2 fragCoordPixels = vUV * iResolution;
|
||||
vec4 outColor;
|
||||
mainImage(outColor, fragCoordPixels);
|
||||
FragColor = outColor;
|
||||
}
|
||||
Reference in New Issue
Block a user