Advertisement
Guest User

color_mangler

a guest
Jun 8th, 2019
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.    Color Mangler
  3.    Author: hunterk
  4.    License: Public domain
  5. */
  6.  
  7. #pragma parameter display_gamma "Display Gamma" 2.2 0.0 10.0 0.1
  8. #pragma parameter target_gamma "Target Gamma" 2.2 0.0 10.0 0.1
  9. #pragma parameter sat "Saturation" 1.0 0.0 3.0 0.01
  10. #pragma parameter lum "Luminance" 1.0 0.0 5.0 0.01
  11. #pragma parameter cntrst "Contrast" 1.0 0.0 2.0 0.01
  12. #pragma parameter vignette "Vignette Toggle" 1.0 0.0 1.0 1.0
  13. #pragma parameter hotspot "Hotspot" 0.0 0.0 1.0 0.1
  14. #pragma parameter inner "Inner Ring" 0.35 0.0 1.0 0.01
  15. #pragma parameter outer "Outer Ring" 0.7 0.0 1.0 0.01
  16. #pragma parameter r "Red" 1.0 0.0 2.0 0.01
  17. #pragma parameter g "Green" 1.0 0.0 2.0 0.01
  18. #pragma parameter b "Blue" 1.0 0.0 2.0 0.01
  19. #pragma parameter rg "Red-Green Tint" 0.0 0.0 1.0 0.005
  20. #pragma parameter rb "Red-Blue Tint" 0.0 0.0 1.0 0.005
  21. #pragma parameter gr "Green-Red Tint" 0.0 0.0 1.0 0.005
  22. #pragma parameter gb "Green-Blue Tint" 0.0 0.0 1.0 0.005
  23. #pragma parameter br "Blue-Red Tint" 0.0 0.0 1.0 0.005
  24. #pragma parameter bg "Blue-Green Tint" 0.0 0.0 1.0 0.005
  25. #pragma parameter blr "Black-Red Tint" 0.0 0.0 1.0 0.005
  26. #pragma parameter blg "Black-Green Tint" 0.0 0.0 1.0 0.005
  27. #pragma parameter blb "Black-Blue Tint" 0.0 0.0 1.0 0.005
  28.  
  29.  
  30. #if defined(VERTEX)
  31.  
  32. #if __VERSION__ >= 130
  33. #define COMPAT_VARYING out
  34. #define COMPAT_ATTRIBUTE in
  35. #define COMPAT_TEXTURE texture
  36. #else
  37. #define COMPAT_VARYING varying
  38. #define COMPAT_ATTRIBUTE attribute
  39. #define COMPAT_TEXTURE texture2D
  40. #endif
  41.  
  42. #ifdef GL_ES
  43. #define COMPAT_PRECISION mediump
  44. #else
  45. #define COMPAT_PRECISION
  46. #endif
  47.  
  48. COMPAT_ATTRIBUTE vec4 VertexCoord;
  49. COMPAT_ATTRIBUTE vec4 COLOR;
  50. COMPAT_ATTRIBUTE vec4 TexCoord;
  51. COMPAT_VARYING vec4 COL0;
  52. COMPAT_VARYING vec4 TEX0;
  53.  
  54. uniform mat4 MVPMatrix;
  55. uniform COMPAT_PRECISION int FrameDirection;
  56. uniform COMPAT_PRECISION int FrameCount;
  57. uniform COMPAT_PRECISION vec2 OutputSize;
  58. uniform COMPAT_PRECISION vec2 TextureSize;
  59. uniform COMPAT_PRECISION vec2 InputSize;
  60.  
  61. // compatibility #defines
  62. #define vTexCoord TEX0.xy
  63. #define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
  64. #define OutSize vec4(OutputSize, 1.0 / OutputSize)
  65.  
  66. void main()
  67. {
  68.    gl_Position = MVPMatrix * VertexCoord;
  69.    TEX0.xy = TexCoord.xy;
  70. }
  71.  
  72. #elif defined(FRAGMENT)
  73.  
  74. #ifdef GL_ES
  75. #ifdef GL_FRAGMENT_PRECISION_HIGH
  76. precision highp float;
  77. #else
  78. precision mediump float;
  79. #endif
  80. #define COMPAT_PRECISION mediump
  81. #else
  82. #define COMPAT_PRECISION
  83. #endif
  84.  
  85. #if __VERSION__ >= 130
  86. #define COMPAT_VARYING in
  87. #define COMPAT_TEXTURE texture
  88. out COMPAT_PRECISION vec4 FragColor;
  89. #else
  90. #define COMPAT_VARYING varying
  91. #define FragColor gl_FragColor
  92. #define COMPAT_TEXTURE texture2D
  93. #endif
  94.  
  95. uniform COMPAT_PRECISION int FrameDirection;
  96. uniform COMPAT_PRECISION int FrameCount;
  97. uniform COMPAT_PRECISION vec2 OutputSize;
  98. uniform COMPAT_PRECISION vec2 TextureSize;
  99. uniform COMPAT_PRECISION vec2 InputSize;
  100. uniform sampler2D Texture;
  101. COMPAT_VARYING vec4 TEX0;
  102.  
  103. // compatibility #defines
  104. #define Source Texture
  105. #define vTexCoord TEX0.xy
  106.  
  107. #define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
  108. #define OutSize vec4(OutputSize, 1.0 / OutputSize)
  109.  
  110. #ifdef PARAMETER_UNIFORM
  111. uniform COMPAT_PRECISION float display_gamma;
  112. uniform COMPAT_PRECISION float target_gamma;
  113. uniform COMPAT_PRECISION float sat;
  114. uniform COMPAT_PRECISION float lum;
  115. uniform COMPAT_PRECISION float cntrst;
  116. uniform COMPAT_PRECISION float blr;
  117. uniform COMPAT_PRECISION float blg;
  118. uniform COMPAT_PRECISION float blb;
  119. uniform COMPAT_PRECISION float r;
  120. uniform COMPAT_PRECISION float g;
  121. uniform COMPAT_PRECISION float b;
  122. uniform COMPAT_PRECISION float rg;
  123. uniform COMPAT_PRECISION float rb;
  124. uniform COMPAT_PRECISION float gr;
  125. uniform COMPAT_PRECISION float gb;
  126. uniform COMPAT_PRECISION float br;
  127. uniform COMPAT_PRECISION float bg;
  128. uniform COMPAT_PRECISION float hotspot;
  129. uniform COMPAT_PRECISION float vignette;
  130. uniform COMPAT_PRECISION float inner;
  131. uniform COMPAT_PRECISION float outer;
  132. #else
  133. #define display_gamma 2.2
  134. #define target_gamma 2.2
  135. #define sat 1.0
  136. #define lum 1.0
  137. #define cntrst 1.0
  138. #define blr 0.0
  139. #define blg 0.0
  140. #define blb 0.0
  141. #define r 1.0
  142. #define g 1.0
  143. #define b 1.0
  144. #define rg 0.0
  145. #define rb 0.0
  146. #define gr 0.0
  147. #define gb 0.0
  148. #define br 0.0
  149. #define bg 0.0
  150. #define inner 0.0
  151. #define outer 1.0
  152. #define hotspot 1.0
  153. #define vignette 1.0
  154. #endif
  155.  
  156. void main()
  157. {
  158.  
  159.     vec3 vcolor = COMPAT_TEXTURE(Source, TEX0.xy).rgb;
  160. // a simple calculation for the vignette/hotspot effects
  161.     vec2 mid = vec2(0.49999, 0.49999) * InputSize / TextureSize;
  162.     vec2 middle = TEX0.xy - mid;
  163.     float len = length(middle);
  164.     float vig = smoothstep(inner, outer, len);
  165.  
  166.     vcolor *= (vignette > 0.5) ? (1.0 - vig) : 1.0; // Vignette
  167.     vcolor += ((1.0 - vig) * 0.2) * hotspot; // Hotspot
  168.     vec4 vignetted = vec4(vcolor,1.0);
  169.  
  170.  
  171.    vec4 screen = pow(vignetted, vec4(target_gamma)).rgba;
  172.    vec4 avglum = vec4(0.5);
  173.    screen = mix(screen, avglum, (1.0 - cntrst));
  174.  
  175.                    //  r    g    b  alpha ; alpha does nothing for our purposes
  176.    mat4 color = mat4(  r,  rg,  rb, 0.0,  //red tint
  177.                       gr,   g,  gb, 0.0,  //green tint
  178.                       br,  bg,   b, 0.0,  //blue tint
  179.                      blr, blg, blb, 0.0); //black tint
  180.  
  181.    mat4 adjust = mat4((1.0 - sat_r) * 0.2126 + sat_r, (1.0 - sat_r) * 0.2126, (1.0 - sat_r) * 0.2126, 1.0,
  182.                       (1.0 - sat_g) * 0.7152, (1.0 - sat_g) * 0.7152 + sat_g, (1.0 - sat_g) * 0.7152, 1.0,
  183.                       (1.0 - sat_b) * 0.0722, (1.0 - sat_b) * 0.0722, (1.0 - sat_b) * 0.0722 + sat_b, 1.0,
  184.                       0.0, 0.0, 0.0, 1.0);
  185.    color *= adjust;
  186.    screen = clamp(screen * lum, 0.0, 1.0);
  187.    screen = color * screen;
  188.  
  189.    
  190.     FragColor = pow(screen, vec4(1.0 / display_gamma));
  191.  
  192.  
  193. }
  194. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement