diff --git a/Source/visualiser/OutputFragmentShader.glsl b/Source/visualiser/OutputFragmentShader.glsl index acffe07b..3837aff6 100644 --- a/Source/visualiser/OutputFragmentShader.glsl +++ b/Source/visualiser/OutputFragmentShader.glsl @@ -7,6 +7,7 @@ uniform sampler2D uTexture3; //screen uniform sampler2D uTexture4; //reflection uniform sampler2D uTexture5; //screen glow uniform float uExposure; +uniform float uOverexposure; uniform float uLineSaturation; uniform float uScreenSaturation; uniform float uNoise; @@ -76,7 +77,7 @@ void main() { light += uGlow * 0.3 * scatter.g * (2.0 + 1.0 * screen.g + 0.5 * screen.r); float tlight = 1.0-pow(2.0, -uExposure*light); float tlight2 = tlight * tlight * tlight; - gl_FragColor.rgb = mix(uColour, vec3(1.0), 0.3+tlight2*tlight2*0.5) * tlight; + gl_FragColor.rgb = mix(uColour, vec3(1.0), 0.3+tlight2*tlight2*uOverexposure) * tlight; gl_FragColor.rgb = desaturate(gl_FragColor.rgb, 1.0 - uLineSaturation); if (uRealScreen > 0.5) { // this isn't how light works, but it looks cool diff --git a/Source/visualiser/VisualiserComponent.cpp b/Source/visualiser/VisualiserComponent.cpp index 1f2bc89a..6d0f3fae 100644 --- a/Source/visualiser/VisualiserComponent.cpp +++ b/Source/visualiser/VisualiserComponent.cpp @@ -1176,9 +1176,17 @@ void VisualiserComponent::drawCRT() { #if SOSCI_FEATURES outputShader->setUniform("uScreenSaturation", (float) settings.getScreenSaturation()); outputShader->setUniform("uHueShift", (float) settings.getScreenHue() / 360.0f); +<<<<<<< Updated upstream #else outputShader->setUniform("uScreenSaturation", 1.0f); outputShader->setUniform("uHueShift", 0.0f); +======= + outputShader->setUniform("uOverexposure", (float) settings.getOverexposure()); +#else + outputShader->setUniform("uScreenSaturation", 1.0f); + outputShader->setUniform("uHueShift", 0.0f); + outputShader->setUniform("uOverexposure", 0.5f); +>>>>>>> Stashed changes #endif outputShader->setUniform("uNoise", (float) settings.getNoise()); outputShader->setUniform("uRandom", juce::Random::getSystemRandom().nextFloat()); diff --git a/Source/visualiser/VisualiserSettings.h b/Source/visualiser/VisualiserSettings.h index 2a74b3be..b9c7d5cf 100644 --- a/Source/visualiser/VisualiserSettings.h +++ b/Source/visualiser/VisualiserSettings.h @@ -120,6 +120,17 @@ public: "Controls how quickly the image disappears after glowing brightly. Closely related to persistence.", "afterglow", VERSION_HINT, 1.5, 0.0, 5.0 +<<<<<<< Updated upstream +======= + ) + ); + std::shared_ptr overexposureEffect = std::make_shared( + new EffectParameter( + "Overexposure", + "Controls at which point the line becomes overexposed and clips, turning white.", + "overexposure", + VERSION_HINT, 0.5, 0.0, 1.0 +>>>>>>> Stashed changes ) ); std::shared_ptr stereoEffectApplication = std::make_shared(); @@ -275,6 +286,10 @@ public: afterglowEffect, screenSaturationEffect, screenHueEffect, +<<<<<<< Updated upstream +======= + overexposureEffect, +>>>>>>> Stashed changes #endif }; std::vector> audioEffects = { @@ -368,6 +383,10 @@ public: double getAfterglow() { return parameters.afterglowEffect->getActualValue(); } + + double getOverexposure() { + return parameters.overexposureEffect->getActualValue(); + } bool isFlippedVertical() { return parameters.flipVertical->getBoolValue(); @@ -445,6 +464,10 @@ private: std::make_shared(*parameters.glowEffect), #if SOSCI_FEATURES std::make_shared(*parameters.afterglowEffect), +<<<<<<< Updated upstream +======= + std::make_shared(*parameters.overexposureEffect), +>>>>>>> Stashed changes #else std::make_shared(*parameters.ambientEffect), #endif