Advertisement
spncryn

shdDither

Apr 13th, 2022
3,466
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //////////////////////////////// shdDither.fsh ////////////////////////////////
  2.  
  3. //
  4. // Simple passthrough vertex shader
  5. //
  6. attribute vec3 in_Position;                  // (x,y,z)
  7. //attribute vec3 in_Normal;                  // (x,y,z)     unused in this shader. 
  8. attribute vec4 in_Colour;                    // (r,g,b,a)
  9. attribute vec2 in_TextureCoord;              // (u,v)
  10.  
  11. varying vec2 v_vTexcoord;
  12. varying vec4 v_vColour;
  13.  
  14. void main()
  15. {
  16.     vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0);
  17.     gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos;
  18.    
  19.     v_vColour = in_Colour;
  20.     v_vTexcoord = in_TextureCoord;
  21. }
  22.  
  23. //////////////////////////////// shdDither.vsh ////////////////////////////////
  24. varying vec2 v_vTexcoord;
  25. varying vec4 v_vColour;
  26.  
  27. uniform vec2 texSize;
  28. uniform sampler2D ditherTex;
  29.  
  30. float height = 4.;
  31. vec2 size  = vec2(16, 16);
  32. vec2 tSize = vec2(32, 64);
  33.  
  34. vec2 rSize = size / tSize;
  35.  
  36.  
  37. void main()
  38. {
  39.     float band = floor(texture2D( gm_BaseTexture, v_vTexcoord ).r * 7.);
  40.     vec2 offset = vec2(rSize.x * floor(band / height), rSize.y * mod(band, height));
  41.     vec2 texcoord = vec2( (mod((v_vTexcoord.x * texSize.x), size.x) / (tSize.x * 2.)),
  42.                           (mod((v_vTexcoord.y * texSize.y), size.y) / (tSize.y * 2.)));
  43.     gl_FragColor = texture2D(ditherTex, texcoord + offset);
  44. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement