swirl_f.glsl 784 B

1234567891011121314151617181920212223242526272829303132333435
  1. // Scene buffer
  2. uniform sampler2D tex0;
  3. uniform float rt_w = 1280;
  4. uniform float rt_h = 720;
  5. // Swirl effect parameters
  6. uniform float radius = 400.0;
  7. uniform float angle = 0.3;
  8. uniform vec2 center = vec2(800.0, 300.0);
  9. vec4 PostFX(sampler2D tex, vec2 uv)
  10. {
  11. vec2 texSize = vec2(rt_w, rt_h);
  12. vec2 tc = uv * texSize;
  13. tc -= center;
  14. float dist = length(tc);
  15. if (dist < radius)
  16. {
  17. float percent = (radius - dist) / radius;
  18. float theta = percent * percent * angle * 8.0;
  19. float s = sin(theta);
  20. float c = cos(theta);
  21. tc = vec2(dot(tc, vec2(c, -s)), dot(tc, vec2(s, c)));
  22. }
  23. tc += center;
  24. vec3 color = texture2D(tex0, tc / texSize).rgb;
  25. return vec4(color, 1.0);
  26. }
  27. void main (void)
  28. {
  29. vec2 uv = gl_TexCoord[0].st;
  30. gl_FragColor = PostFX(tex0, uv);
  31. }