OXYGENHUB
◆ main openmsx / share / shaders / tv.frag
989 B · last changed chore(): initial commit 1 month ago source blame history raw
e8555c89 Andy McCall 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
}