josemorval

High level GLSL pseudolanguage framework

Apr 26th, 2021
1,194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.87 KB | None | 0 0
  1. //"High level" GLSL pseudolanguage framework
  2.  
  3. uniform float time;
  4. uniform vec2 resolution;
  5.  
  6.  
  7. uniform sampler2D texture0;
  8. uniform sampler2D texture1;
  9. uniform sampler2D texture2;
  10.  
  11. in VertexData
  12. {
  13.     vec4 v_position;
  14.     vec3 v_normal;
  15.     vec2 v_texcoord;
  16. } inData;
  17.  
  18. out vec4 fragColor;
  19.  
  20. vec2 pow(vec2 q,float gamma){
  21.     q.r = pow(q.r,gamma);
  22.     q.g = pow(q.g,gamma);
  23.     return q;
  24. }
  25.  
  26. vec3 pow(vec3 q,float gamma){
  27.     q.r = pow(q.r,gamma);
  28.     q.g = pow(q.g,gamma);
  29.     q.b = pow(q.b,gamma);
  30.     return q;
  31. }
  32.  
  33. #define canvas void main(void){ vec4 col = vec4(0.,0.,0.,1.); vec4 layers[10]; float t = time; vec2 uv = -1.+2.*inData.v_texcoord;uv.x*=resolution.x/resolution.y;
  34. #define end fragColor = col;}
  35.  
  36. #define background(r,g,b,a) col = vec4(r,g,b,a);
  37. #define reset_uv uv = -1.+2.*inData.v_texcoord; uv.x*=resolution.x/resolution.y;
  38. #define reset_t t = 0.;
  39. #define move(x,y) uv+=vec2(x,y);
  40. #define scale(x,y) uv/=vec2(x,y);
  41. #define rotate(a) uv*=mat2(cos(a),sin(a),-sin(a),cos(a));
  42. #define move_t(a) t+=a;
  43. #define scale_t(a) t*=a;
  44. #define set(a,b) a=b;
  45. #define save_layer(i) layers[i]=col;
  46. #define load_layer(i) col=layers[i];
  47. #define tex(sample,alpha) col=vec4(texture(sample,uv).rgb,alpha);
  48. #define tex_tileable(sample,alpha) col=vec4(texture(sample,mix(fract(uv),1.-fract(uv),mod(floor(uv),2.))+floor(uv)).rgb,alpha);
  49. #define color(r,g,b,a) vec4(r,g,b,a)
  50. #define layers(i) layers[i]
  51. #define lin_gradient clamp(uv.x,0.,1.)
  52. #define rad_gradient 1.-clamp(length(uv),0.,1.)
  53. #define invert col = 1.-col;
  54. #define mixing(a,b,x) col = mix(a,b,x);
  55. #define tint(c) col.rgb*=c;
  56. #define tint_alpha(alpha) col.a*=alpha;
  57. #define power(gamma) col.rgb = pow(col.rgb,gamma);
  58. #define power_alpha(gamma) col.a = pow(col.a,gamma);
  59. #define repeat uv=fract(uv+0.5)-0.5;
  60. #define repeat_index uv=floor(uv+0.5);
  61.  
  62. //Blend modes
  63. #define blend(src,dst) col.rgb = layers[dst].rgb*(1.-layers[src].a)+layers[src].rgb*layers[src].a; col.a =layers[dst].a*(1.-layers[src].a)+layers[src].a;
  64. #define blend_add(src,dst) col.rgb = layers[dst].rgb + layers[src].rgb*layers[src].a; col.a = layers[dst].a;
  65. #define blend_multiply(src,dst) col=layers[src]*layers[dst];
  66. #define blend_darken(src,dst) col =min(layers[src],layers[dst]);
  67. #define blend_lighten(src,dst) col =max(layers[src],layers[dst]);
  68.  
  69. //Show background
  70. #define show_background vec4 bg = vec4(1.,1.,1.,1.); uv*=12.; bg.rgb *= (0.2+0.2*step(fract(0.5*uv.x+0.5*floor(uv.y)),0.5))*(1.-length(0.03*uv)); col = mix(bg,col,col.a);
  71.  
  72. canvas
  73.    
  74.     rotate(0.1*t)
  75.     scale(0.1,0.1)
  76.     repeat_index
  77.     background(0.5*sin(0.2*length(uv)+0.1*uv.x+t),0.,0.,0.2)
  78.     save_layer(1)
  79.    
  80.    
  81.     reset_uv
  82.     rotate(0.1*t)
  83.     scale(0.1,0.1)
  84.     repeat
  85.     scale(0.5*layers(1).x,0.5*layers(1).x)
  86.     background(1.,0.2,0.,0.1)
  87.     tint(rad_gradient)
  88.     tint(10.)
  89.     power(2.)
  90.    
  91.    
  92.     reset_uv
  93.     show_background
  94.      
  95.  
  96. end
Advertisement
Add Comment
Please, Sign In to add comment