shaders
shaders
<shader name="FFGColorCorrection">
<parameters>
<param name="ActiveIn" type="float" />
<param name="ShadRGB_Wgt" type="vec4" />
<param name="MidRGB_Wgt" type="vec4" />
<param name="HighRGB_Wgt" type="vec4" />
<param name="RGB" type="vec3" />
<param name="ContrLightSat_Legacy" type="vec4" />
<param name="Levels" type="vec3" />
<param name="ColBoostSelection" type="vec4" />
<param name="ColBoostRGBSat" type="vec4" />
</parameters>
<vertex><![CDATA[attribute vec3 Position;
attribute vec4 Color;
attribute vec2 TexCoord;
attribute vec4 RenderData;
attribute float Scale;
ShadRGBOut = ShadRGB_Wgt.rgb;
MidRGBOut = MidRGB_Wgt.rgb;
HighRGBOut = HighRGB_Wgt.rgb;
ShadW = ShadRGB_Wgt.w;
MidW = MidRGB_Wgt.w;
HighW = HighRGB_Wgt.w;
RGBOut = RGB;
ContrastOut = ContrLightSat_Legacy.x;
LightnessOut = ContrLightSat_Legacy.y;
SaturationOut = ContrLightSat_Legacy.z;
UseLegacyCL = ContrLightSat_Legacy.w;
LevelsMin = Levels.x;
LevelsMax = Levels.y;
Gamma = Levels.z;
ColBoostSelStart = ColBoostSelection.x;
ColBoostSelFeather = ColBoostSelection.z;
ColBoostSelEndShifted = ColBoostSelection.y;
ColBoostSelEndShifted += -ColBoostSelStart + ColBoostSelFeather; //shift hue so
the start of the range is at 0
if (ColBoostSelEndShifted < 0.) ColBoostSelEndShifted += 1.;
ColBoostSelSatStart = ColBoostSelection.w;
ColBoostRGB = ColBoostRGBSat.rgb;
ColBoostSat = ColBoostRGBSat.a;
#define DEBUG_BEFORE_AFTER 2
#define DEBUG_GRAYSCALE 3
#define DEBUG_SHADOWS 4
#define DEBUG_MIDTONES 5
#define DEBUG_HIGHLIGHTS 6
#define DEBUG_CHECK_ARRAYS 7
#define DEBUG_COL_BOOST_CHECK 8
varying float Time;
varying vec4 Color0;
varying vec2 TexCoord0;
varying vec4 RenderDataOut;
varying float ScaleOut;
vec3 rgb2hsv(vec3 c)
{
vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));
vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));
#ifdef USE_ARRAYS
float getColBoost(vec3 c) {
vec3 hsv = rgb2hsv(c);
float hues = hsv.x -ColBoostSelStart + ColBoostSelFeather; // shift hue so the
start of the range is at 0
if (hues < 0.) hues += 1.;
void main()
{
if (ActiveOut < 0.0001) { //immediately exit if shaders off
gl_FragColor = texture2D(Texture0, TexCoord0.xy);
} else {
vec4 FColor = texture2D(Texture0, TexCoord0);
if (iactive < 3)
gl_FragColor = Color.rgbr * ZeroOne.yyyx + ZeroOne.xxxy; //
optimization as found in
https://www.khronos.org/opengl/wiki/GLSL_Optimizations#Assignment_with_MAD
else if (iactive == DEBUG_COL_BOOST_CHECK) // Color boost check
gl_FragColor = vec4(vec3(colBoost), 1.);
else if (iactive == DEBUG_CHECK_ARRAYS) // array support check
#ifdef USE_ARRAYS
gl_FragColor = Color.rgbr * ZeroOne.xyxx + ZeroOne.xxxy;
#else
gl_FragColor = Color.rgbr * ZeroOne.yxxx + ZeroOne.xxxy;
#endif
else if (iactive == DEBUG_HIGHLIGHTS) // highlights
gl_FragColor = vec4(vec3(highMult), 1.);
else if (iactive == DEBUG_MIDTONES) // MIDTONES
gl_FragColor = vec4(vec3(midMult), 1.);
else if (iactive == DEBUG_SHADOWS) // Shadows
gl_FragColor = vec4(vec3(shadMult), 1.);
else if (iactive == DEBUG_GRAYSCALE) // greyscale
gl_FragColor = vec4(vec3(avgRGB), 1.);
}
else {
gl_FragColor = FColor;
}
}
}
]]></fragment>
</shader>
<shader name="BoilerMirror">
<parameters>
<param name="ActiveIn" type="float" />
<param name="IsPaused" type="float" />
<param name="TextureSize" type="vec2" />
<param name="Ratio" type="vec4" />
<param name="Time" type="float" />
<param name="Amount" type="float" />
<param name="PixelationAmount" type="float" />
</parameters>
<vertex><![CDATA[
attribute vec3 Position;
attribute vec4 Color;
attribute vec2 TexCoord;
attribute vec4 RenderData;
attribute float Scale;
void main(void){
RenderDataOut = RenderData;
ScaleOut = Scale;
Color0 = Color;
TexCoord0 = TexCoord;
ActiveOut = ActiveIn;
IsPaused0 = IsPaused;
TextureSize0 = TextureSize;
Ratio0 = Ratio;
Time0 = Time;
Amount0 = Amount;
PixelationAmount0 = PixelationAmount;
void main(void)
{
if (ActiveOut >= 0.0001) {
float time = Time0 * 6.28318530718 * 0.5;
float amount = Amount0+0.1;