SHOW:
|
|
- or go back to the newest paste.
| 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) * 0.3086 + sat, (1.0 - sat) * 0.3086, (1.0 - sat) * 0.3086, 1.0, |
| 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) * 0.6094, (1.0 - sat) * 0.6094 + sat, (1.0 - sat) * 0.6094, 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) * 0.0820, (1.0 - sat) * 0.0820, (1.0 - sat) * 0.0820 + sat, 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 |