| 1 |
// TV-like effect where bright pixels are larger than dark pixels. |
| 2 |
|
| 3 |
uniform sampler2D tex; |
| 4 |
uniform sampler2D videoTex; |
| 5 |
uniform float minScanline; |
| 6 |
uniform float sizeVariance; |
| 7 |
|
| 8 |
varying vec4 intCoord; |
| 9 |
varying vec4 cornerCoord0; |
| 10 |
varying vec4 cornerCoord1; |
| 11 |
|
| 12 |
vec4 calcCorner(const vec2 texCoord0, |
| 13 |
const vec2 texCoord1, |
| 14 |
const float dist) |
| 15 |
{ |
| 16 |
vec4 col0 = texture2D(tex, texCoord0); |
| 17 |
#if SUPERIMPOSE |
| 18 |
vec4 vid = texture2D(videoTex, texCoord1); |
| 19 |
vec4 col = mix(vid, col0, col0.a); |
| 20 |
#else |
| 21 |
vec4 col = col0; |
| 22 |
#endif |
| 23 |
return col * smoothstep( |
| 24 |
minScanline + sizeVariance * (vec4(1.0) - col), |
| 25 |
vec4(1.0), |
| 26 |
vec4(dist)); |
| 27 |
} |
| 28 |
|
| 29 |
void main() |
| 30 |
{ |
| 31 |
vec4 distComp = fract(intCoord); |
| 32 |
gl_FragColor = mix( |
| 33 |
calcCorner(cornerCoord0.xy, cornerCoord1.xy, distComp.w) + |
| 34 |
calcCorner(cornerCoord0.xw, cornerCoord1.xw, distComp.y), |
| 35 |
calcCorner(cornerCoord0.zy, cornerCoord1.zy, distComp.w) + |
| 36 |
calcCorner(cornerCoord0.zw, cornerCoord1.zw, distComp.y), |
| 37 |
smoothstep(0.0, 1.0, distComp.x)); |
| 38 |
} |