Untitled
Anonymous
plain_text
02/19/2026 12:52 AM
4.0 KB
14
Indexable
#version 120
#define GAMMA_IN(color) pow(color, vec4(InputGamma))
#define GAMMA_OUT(color) pow(color, vec4(1.0 / OutputGamma))
#define texCoord v_texCoord
#if defined(VERTEX)
#if __VERSION__ >= 130
#define OUT out
#define IN in
#define tex2D texture
#else
#define OUT varying
#define IN attribute
#define tex2D texture2D
#endif
IN vec4 a_position;
IN vec4 Color;
IN vec2 TexCoord;
OUT vec4 color;
OUT vec2 texCoord;
uniform vec2 rubyOutputSize;
uniform vec2 rubyTextureSize;
uniform vec2 rubyInputSize;
void main()
{
gl_Position = a_position;
v_texCoord = vec2(a_position.x + 1.0, 1.0 - a_position.y) * 0.5
* rubyInputSize / rubyTextureSize;
}
#elif defined(FRAGMENT)
#if __VERSION__ >= 130
#define IN in
out vec4 FragColor;
#else
#define IN varying
#define FragColor gl_FragColor
#endif
#ifdef GL_ES
precision mediump float;
#endif
uniform vec2 rubyOutputSize;
uniform vec2 rubyTextureSize;
uniform vec2 rubyInputSize;
uniform sampler2D s_p;
IN vec2 texCoord;
#define BEAM_PROFILE 0.0
#define BEAM_MIN_WIDTH 0.86
#define BEAM_MAX_WIDTH 1.0
#define SCANLINES_STRENGTH 0.58
#define COLOR_BOOST 1.25
#define HFILTER_SHARPNESS 1.0
#define PHOSPHOR_LAYOUT 4.0
#define MASK_INTENSITY 0.5
#define CRT_ANTI_RINGING 1.0
#define InputGamma 2.4
#define OutputGamma 2.2
#define VSCANLINES 0.0
float B = 1.0 - HFILTER_SHARPNESS;
float C = HFILTER_SHARPNESS * 0.5;
mat4 invX = mat4(
(-B - 6.0*C)/6.0, (12.0 - 9.0*B - 6.0*C)/6.0, -(12.0 - 9.0*B - 6.0*C)/6.0, (B + 6.0*C)/6.0,
(3.0*B + 12.0*C)/6.0, (-18.0 + 12.0*B + 6.0*C)/6.0, (18.0 - 15.0*B - 12.0*C)/6.0, -C,
(-3.0*B - 6.0*C)/6.0, 0.0, (3.0*B + 6.0*C)/6.0, 0.0,
B/6.0, (6.0 - 2.0*B)/6.0, B/6.0, 0.0
);
void main()
{
vec2 dx = vec2(1.0 / rubyTextureSize.x, 0.0);
vec2 dy = vec2(0.0, 1.0 / rubyTextureSize.y);
vec2 pix = texCoord * rubyTextureSize - vec2(0.5);
vec2 tc = (floor(pix) + vec2(0.5)) / rubyTextureSize;
vec2 fp = fract(pix);
vec4 c00 = GAMMA_IN(tex2D(s_p, tc - dx - dy));
vec4 c01 = GAMMA_IN(tex2D(s_p, tc - dy));
vec4 c02 = GAMMA_IN(tex2D(s_p, tc + dx - dy));
vec4 c03 = GAMMA_IN(tex2D(s_p, tc + 2.0*dx - dy));
vec4 c10 = GAMMA_IN(tex2D(s_p, tc - dx));
vec4 c11 = GAMMA_IN(tex2D(s_p, tc));
vec4 c12 = GAMMA_IN(tex2D(s_p, tc + dx));
vec4 c13 = GAMMA_IN(tex2D(s_p, tc + 2.0*dx));
mat4 m0 = mat4(c00, c01, c02, c03);
mat4 m1 = mat4(c10, c11, c12, c13);
vec4 lobes = vec4(fp.x*fp.x*fp.x, fp.x*fp.x, fp.x, 1.0);
vec4 col0 = m0 * (invX * lobes);
vec4 col1 = m1 * (invX * lobes);
float d0 = exp(-pow(fp.y * SCANLINES_STRENGTH, 2.0));
float d1 = exp(-pow((1.0 - fp.y) * SCANLINES_STRENGTH, 2.0));
vec4 color = COLOR_BOOST * (col0 * d0 + col1 * d1);
// ===== IBM 5151 GREEN PHOSPHOR (MONOCHROME) =====
float lum = dot(color.rgb, vec3(0.299, 0.587, 0.114));
vec3 green = vec3(0.0, lum * 1.15, 0.0);
FragColor = GAMMA_OUT(vec4(green, 1.0));
}
#endifEditor is loading...
Leave a Comment