Advertisement
Guest User

gdapt-pass0-stripes.glsl

a guest
Mar 23rd, 2019
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.37 KB | None | 0 0
  1. /*
  2. Genesis Dithering and Pseudo Transparency Shader v1.3 - Pass 0
  3. by Sp00kyFox, 2014
  4.  
  5. Neighbor anaylsis via dot product of the difference vectors.
  6.  
  7. */
  8.  
  9. // Parameter lines go here:
  10. #pragma parameter MODE "GDAPT Monochrome Analysis" 0.0 0.0 1.0 1.0
  11. #pragma parameter PWR "GDAPT Color Metric Exp" 2.0 0.0 10.0 0.1
  12.  
  13. #if defined(VERTEX)
  14.  
  15. #if __VERSION__ >= 130
  16. #define COMPAT_VARYING out
  17. #define COMPAT_ATTRIBUTE in
  18. #define COMPAT_TEXTURE texture
  19. #else
  20. #define COMPAT_VARYING varying
  21. #define COMPAT_ATTRIBUTE attribute
  22. #define COMPAT_TEXTURE texture2D
  23. #endif
  24.  
  25. #ifdef GL_ES
  26. #define COMPAT_PRECISION mediump
  27. #else
  28. #define COMPAT_PRECISION
  29. #endif
  30.  
  31. COMPAT_ATTRIBUTE vec4 VertexCoord;
  32. COMPAT_ATTRIBUTE vec4 COLOR;
  33. COMPAT_ATTRIBUTE vec4 TexCoord;
  34. COMPAT_VARYING vec4 COL0;
  35. COMPAT_VARYING vec4 TEX0;
  36. COMPAT_VARYING vec2 t1;
  37.  
  38. vec4 _oPosition1;
  39. uniform mat4 MVPMatrix;
  40. uniform COMPAT_PRECISION int FrameDirection;
  41. uniform COMPAT_PRECISION int FrameCount;
  42. uniform COMPAT_PRECISION vec2 OutputSize;
  43. uniform COMPAT_PRECISION vec2 TextureSize;
  44. uniform COMPAT_PRECISION vec2 InputSize;
  45.  
  46. #define vTexCoord TEX0.xy
  47. #define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
  48. #define outsize vec4(OutputSize, 1.0 / OutputSize)
  49.  
  50. void main()
  51. {
  52. gl_Position = MVPMatrix * VertexCoord;
  53. COL0 = COLOR;
  54. TEX0.xy = TexCoord.xy;
  55. t1 = 1.0 / SourceSize.xy;
  56. }
  57.  
  58. #elif defined(FRAGMENT)
  59.  
  60. #if __VERSION__ >= 130
  61. #define COMPAT_VARYING in
  62. #define COMPAT_TEXTURE texture
  63. out vec4 FragColor;
  64. #else
  65. #define COMPAT_VARYING varying
  66. #define FragColor gl_FragColor
  67. #define COMPAT_TEXTURE texture2D
  68. #endif
  69.  
  70. #ifdef GL_ES
  71. #ifdef GL_FRAGMENT_PRECISION_HIGH
  72. precision highp float;
  73. #else
  74. precision mediump float;
  75. #endif
  76. #define COMPAT_PRECISION mediump
  77. #else
  78. #define COMPAT_PRECISION
  79. #endif
  80.  
  81. uniform COMPAT_PRECISION int FrameDirection;
  82. uniform COMPAT_PRECISION int FrameCount;
  83. uniform COMPAT_PRECISION vec2 OutputSize;
  84. uniform COMPAT_PRECISION vec2 TextureSize;
  85. uniform COMPAT_PRECISION vec2 InputSize;
  86. uniform sampler2D Texture;
  87. COMPAT_VARYING vec4 TEX0;
  88. COMPAT_VARYING vec2 t1;
  89.  
  90. // compatibility #defines
  91. #define Source Texture
  92. #define vTexCoord TEX0.xy
  93.  
  94. #define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
  95. #define outsize vec4(OutputSize, 1.0 / OutputSize)
  96.  
  97. #ifdef PARAMETER_UNIFORM
  98. // All parameter floats need to have COMPAT_PRECISION in front of them
  99. uniform COMPAT_PRECISION float MODE;
  100. uniform COMPAT_PRECISION float PWR;
  101. #else
  102. #define MODE 0.0
  103. #define PWR 2.0
  104. #endif
  105.  
  106. #define dotfix(x,y) clamp(dot(x,y), 0.0, 1.0) // NVIDIA Fix
  107. #define TEX(dx,dy) COMPAT_TEXTURE(Source, vTexCoord+vec2((dx),(dy))*t1).xyz
  108.  
  109. // Reference: http://www.compuphase.com/cmetric.htm
  110. COMPAT_PRECISION float eq(vec3 A, vec3 B)
  111. {
  112. vec3 diff = A-B;
  113. float ravg = (A.x + B.x) * 0.5;
  114.  
  115. diff *= diff * vec3(2.0 + ravg, 4.0, 3.0 - ravg);
  116.  
  117. return pow( smoothstep(3.0, 0.0, sqrt(diff.x + diff.y + diff.z)), PWR );
  118. }
  119.  
  120. void main()
  121. {
  122. vec3 C = TEX( 0, 0);
  123. vec3 L = TEX(-1, 0);
  124. vec3 R = TEX( 1, 0);
  125. vec3 U = TEX( 0,-1);
  126. vec3 D = TEX( 0, 1);
  127.  
  128. float tag = 0.0;
  129.  
  130. if(MODE > 0.5){
  131. tag = ((L == R) && (C != L)) ? 1.0 : 0.0;
  132. }
  133. else{
  134. tag = dotfix(normalize(C-L), normalize(C-R)) * eq(L,R);
  135. }
  136.  
  137. tag = ((L == R) && (U == D) && (L == U)) ? 0.0 : tag;
  138.  
  139. FragColor = vec4(C, tag);
  140. }
  141. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement