diff --git a/autogen/lua_definitions/constants.lua b/autogen/lua_definitions/constants.lua index 1209e9a0c..0d4414670 100644 --- a/autogen/lua_definitions/constants.lua +++ b/autogen/lua_definitions/constants.lua @@ -2982,7 +2982,8 @@ SHADER_FLAG_CONTRAST = 3 --- @type ShaderFlag SHADER_FLAG_EXPOSURE = 4 --- @type ShaderFlag SHADER_FLAG_DITHERING = 5 --- @type ShaderFlag SHADER_FLAG_POSTERIZATION = 6 --- @type ShaderFlag -SHADER_FLAG_MAX = 7 --- @type ShaderFlag +SHADER_FLAG_SCANLINES = 7 --- @type ShaderFlag +SHADER_FLAG_MAX = 8 --- @type ShaderFlag --- @alias ShaderFlag --- | `SHADER_FLAG_HUE` @@ -2992,6 +2993,7 @@ SHADER_FLAG_MAX = 7 --- @type ShaderFlag --- | `SHADER_FLAG_EXPOSURE` --- | `SHADER_FLAG_DITHERING` --- | `SHADER_FLAG_POSTERIZATION` +--- | `SHADER_FLAG_SCANLINES` --- | `SHADER_FLAG_MAX` --- @type integer diff --git a/docs/lua/constants.md b/docs/lua/constants.md index 42b541fa6..190d1738c 100644 --- a/docs/lua/constants.md +++ b/docs/lua/constants.md @@ -1340,7 +1340,8 @@ | SHADER_FLAG_EXPOSURE | 4 | | SHADER_FLAG_DITHERING | 5 | | SHADER_FLAG_POSTERIZATION | 6 | -| SHADER_FLAG_MAX | 7 | +| SHADER_FLAG_SCANLINES | 7 | +| SHADER_FLAG_MAX | 8 | [:arrow_up_small:](#) diff --git a/src/pc/gfx/gfx_opengl.c b/src/pc/gfx/gfx_opengl.c index 08f36676c..84d82b084 100644 --- a/src/pc/gfx/gfx_opengl.c +++ b/src/pc/gfx/gfx_opengl.c @@ -506,6 +506,12 @@ static struct ShaderProgram *gfx_opengl_create_and_load_new_shader(struct ColorC append_line(fs_buf, &fs_len, "int levels = int(uShaderFlagValues[6]);"); append_line(fs_buf, &fs_len, "texel.rgb = floor(texel.rgb * levels) / levels;"); append_line(fs_buf, &fs_len, "}"); + + // scan lines + append_line(fs_buf, &fs_len, "if (uShaderFlags[7] == 1) {"); + append_line(fs_buf, &fs_len, "float scan = sin(gl_FragCoord.y * 1.5) * 0.04;"); + append_line(fs_buf, &fs_len, "texel.rgb -= scan * uShaderFlagValues[7];"); + append_line(fs_buf, &fs_len, "}"); } if (opt_fog) { diff --git a/src/pc/gfx/gfx_pc.c b/src/pc/gfx/gfx_pc.c index 4f8f1fbb5..c166cf71c 100644 --- a/src/pc/gfx/gfx_pc.c +++ b/src/pc/gfx/gfx_pc.c @@ -126,7 +126,7 @@ Color gFogColor = { 0xFF, 0xFF, 0xFF }; f32 gFogIntensity = 1; int gShaderFlags[SHADER_FLAG_MAX] = { 0 }; -f32 gDefaultShaderFlagValues[SHADER_FLAG_MAX] = { 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 8.0f }; +f32 gDefaultShaderFlagValues[SHADER_FLAG_MAX] = { 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 8.0f, 1.0f }; f32 gShaderFlagValues[SHADER_FLAG_MAX] = { 0 }; bool gShaderFlagsScreen = false; diff --git a/src/pc/gfx/gfx_pc.h b/src/pc/gfx/gfx_pc.h index f3047988c..649c8c95e 100644 --- a/src/pc/gfx/gfx_pc.h +++ b/src/pc/gfx/gfx_pc.h @@ -12,6 +12,7 @@ enum ShaderFlag { SHADER_FLAG_EXPOSURE, SHADER_FLAG_DITHERING, SHADER_FLAG_POSTERIZATION, + SHADER_FLAG_SCANLINES, SHADER_FLAG_MAX }; diff --git a/src/pc/lua/smlua_constants_autogen.c b/src/pc/lua/smlua_constants_autogen.c index 7ac920737..a1be787a3 100644 --- a/src/pc/lua/smlua_constants_autogen.c +++ b/src/pc/lua/smlua_constants_autogen.c @@ -1547,7 +1547,8 @@ char gSmluaConstants[] = "" "SHADER_FLAG_EXPOSURE=4\n" "SHADER_FLAG_DITHERING=5\n" "SHADER_FLAG_POSTERIZATION=6\n" -"SHADER_FLAG_MAX=7\n" +"SHADER_FLAG_SCANLINES=7\n" +"SHADER_FLAG_MAX=8\n" "GRAPH_RENDER_ACTIVE=(1 << 0)\n" "GRAPH_RENDER_CHILDREN_FIRST=(1 << 1)\n" "GRAPH_RENDER_BILLBOARD=(1 << 2)\n"