Maurdekye

Pastel Soften

May 24th, 2018
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #ifdef GL_FRAGMENT_PRECISION_HIGH
  2. precision highp float;
  3. #else
  4. precision mediump float;
  5. #endif
  6.  
  7. uniform vec2 resolution;
  8. uniform vec2 cameraAddent;
  9. uniform mat2 cameraOrientation;
  10. uniform samplerExternalOES cameraBack;
  11. uniform sampler2D backbuffer;
  12. uniform int pointerCount;
  13. uniform vec2 touch;
  14.  
  15. vec3 at_cam(vec2 offset)
  16. {
  17.     vec2 uv = (gl_FragCoord.xy + offset) / resolution.xy;
  18.     vec2 st = cameraAddent + uv * cameraOrientation;
  19.     return texture2D(cameraBack, st).rgb;
  20. }
  21.  
  22. vec3 at_back(vec2 offset)
  23. {
  24.     vec2 uv = (gl_FragCoord.xy + offset) / resolution.xy;
  25.     return texture2D(backbuffer, uv).rgb;
  26. }
  27.  
  28. void main(void) {
  29.  
  30.   const int layers = 8;
  31.   const int range = 5;
  32.  
  33.   float lyf = float(layers-1);
  34.     const int hlist_size = layers;
  35.     vec2 tuv = touch / resolution.xy;
  36.  
  37.     float final;
  38.   if (pointerCount == 0) {
  39.     final = at_back(vec2(0)).r;
  40.   } else if (tuv.y > 0.3) {
  41.     float hlist[hlist_size];
  42.     for (int i = 0; i < hlist_size; i++)
  43.       hlist[i] = 0.0;
  44.     final = at_back(vec2(0)).r;
  45.     int greatest = int(final*lyf);
  46.     for (int dx = -range; dx <= range; dx++) {
  47.         for(int dy = -range; dy <= range; dy++) {
  48.             vec2 delta = vec2(dx, dy);
  49.             if (delta == vec2(0))
  50.               continue;
  51.             float value = at_back(delta).r;
  52.             int hash = int(value*lyf);
  53.             hlist[hash] += exp(1.0-length(delta));
  54.             if(hlist[hash] > hlist[greatest]) {
  55.                 greatest = hash;
  56.                 final = value;
  57.             }
  58.         }
  59.     }
  60.   } else {
  61.     vec3 cam = at_cam(vec2(0));
  62.     float lum = (cam.r + cam.g + cam.b) / 3.0;
  63.     final = floor(lum*(lyf-1.0))/(lyf-1.0);
  64.   }
  65.  
  66.     gl_FragColor = vec4(vec3(final), 1);
  67. }
Advertisement
Add Comment
Please, Sign In to add comment