From 25677679df5a2bbe5466d993b8721dd6a601e762 Mon Sep 17 00:00:00 2001 From: Dominus Iniquitatis Date: Sat, 20 Aug 2022 22:04:41 +0300 Subject: [PATCH] Res: Add TV Mode shader --- res/shaders/tv-mode.shader/manifest.ini | 25 ++++++++++++++ res/shaders/tv-mode.shader/tv.fs | 44 +++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 res/shaders/tv-mode.shader/manifest.ini create mode 100644 res/shaders/tv-mode.shader/tv.fs diff --git a/res/shaders/tv-mode.shader/manifest.ini b/res/shaders/tv-mode.shader/manifest.ini new file mode 100644 index 000000000..b6186d42b --- /dev/null +++ b/res/shaders/tv-mode.shader/manifest.ini @@ -0,0 +1,25 @@ +[shader] +name=TV Mode +author=Dominus Iniquitatis +description=Scanlines along with a subtle blurring. +passes=1 + +[pass.0] +fragmentShader=tv.fs +blend=1 +width=-2 +height=-2 + +[pass.0.uniform.lineBrightness] +type=float +readableName=Line brightness +default=0.75 +min=0.0 +max=1.0 + +[pass.0.uniform.blurring] +type=float +readableName=Blurring +default=1.0 +min=0.0 +max=1.0 diff --git a/res/shaders/tv-mode.shader/tv.fs b/res/shaders/tv-mode.shader/tv.fs new file mode 100644 index 000000000..5aa34efcc --- /dev/null +++ b/res/shaders/tv-mode.shader/tv.fs @@ -0,0 +1,44 @@ +/* + TV Mode Shader + + Copyright (C) 2022 Dominus Iniquitatis - zerosaiko@gmail.com + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +uniform sampler2D tex; +uniform vec2 texSize; +varying vec2 texCoord; + +uniform float lineBrightness; +uniform float blurring; + +void main() +{ + vec4 c = texture2D(tex, texCoord); + vec4 n = texture2D(tex, texCoord + vec2(1.0 / texSize.x * 0.5, 0.0)); + + vec4 color = mix(c, (c + n) / 2.0, blurring); + color.a = c.a; + + if (int(mod(texCoord.t * texSize.y * 2.0, 2.0)) == 0) + { + color.rgb *= lineBrightness; + } + + gl_FragColor = color; +}