From a43f41182dcd361ab3af9871d4a78623f75a94cf Mon Sep 17 00:00:00 2001 From: MihailRis Date: Thu, 12 Feb 2026 22:04:25 +0300 Subject: [PATCH] clamp effect parameters values --- src/audio/AL/ALAudio.cpp | 70 +++++++++++++++++++++++++++---- src/graphics/render/Decorator.cpp | 6 ++- 2 files changed, 67 insertions(+), 9 deletions(-) diff --git a/src/audio/AL/ALAudio.cpp b/src/audio/AL/ALAudio.cpp index 473e5bc49..9c3a57646 100644 --- a/src/audio/AL/ALAudio.cpp +++ b/src/audio/AL/ALAudio.cpp @@ -806,12 +806,68 @@ void ALAudio::setAcoustics(Acoustics acoustics) { glm::max(0.1f, glm::min(acoustics.reverbGain, 0.8f) * (1.0f - glm::min(1.0f, acoustics.reverbAbsorption))) )); - AL_CHECK(alEffectf(reverbEffect, AL_REVERB_REFLECTIONS_DELAY, acoustics.reverbReflectionsDelay)); - AL_CHECK(alEffectf(reverbEffect, AL_REVERB_LATE_REVERB_DELAY, acoustics.reverbLateReflectionsDelay)); - AL_CHECK(alEffectf(reverbEffect, AL_REVERB_DECAY_TIME, std::max(0.1f, acoustics.reverbDecayTime))); - AL_CHECK(alEffectf(reverbEffect, AL_REVERB_ROOM_ROLLOFF_FACTOR, acoustics.reverbRoomRolloff)); - AL_CHECK(alEffectf(reverbEffect, AL_REVERB_REFLECTIONS_GAIN, glm::pow(acoustics.reverbGain, 2.0f))); - AL_CHECK(alEffectf(reverbEffect, AL_REVERB_LATE_REVERB_GAIN, glm::pow(acoustics.reverbGain, 2.0f))); - AL_CHECK(alEffectf(reverbEffect, AL_REVERB_DECAY_HFRATIO, 1.0f - acoustics.reverbAbsorption)); + AL_CHECK(alEffectf( + reverbEffect, + AL_REVERB_REFLECTIONS_DELAY, + glm::clamp( + acoustics.reverbReflectionsDelay, + AL_REVERB_MIN_REFLECTIONS_DELAY, + AL_REVERB_MAX_REFLECTIONS_DELAY + ) + )); + AL_CHECK(alEffectf( + reverbEffect, + AL_REVERB_LATE_REVERB_DELAY, + glm::clamp( + acoustics.reverbLateReflectionsDelay, + AL_REVERB_MIN_LATE_REVERB_DELAY, + AL_REVERB_MAX_LATE_REVERB_DELAY + ) + )); + AL_CHECK(alEffectf( + reverbEffect, + AL_REVERB_DECAY_TIME, + glm::clamp( + acoustics.reverbDecayTime, + AL_REVERB_MIN_DECAY_TIME, + AL_REVERB_MAX_DECAY_TIME + ) + )); + AL_CHECK(alEffectf( + reverbEffect, + AL_REVERB_ROOM_ROLLOFF_FACTOR, + glm::clamp( + acoustics.reverbRoomRolloff, + AL_REVERB_MIN_ROOM_ROLLOFF_FACTOR, + AL_REVERB_MAX_ROOM_ROLLOFF_FACTOR + ) + )); + AL_CHECK(alEffectf( + reverbEffect, + AL_REVERB_REFLECTIONS_GAIN, + glm::clamp( + glm::pow(acoustics.reverbGain, 2.0f), + AL_REVERB_MIN_REFLECTIONS_GAIN, + AL_REVERB_MAX_REFLECTIONS_GAIN + ) + )); + AL_CHECK(alEffectf( + reverbEffect, + AL_REVERB_LATE_REVERB_GAIN, + glm::clamp( + glm::pow(acoustics.reverbGain, 2.0f), + AL_REVERB_MIN_LATE_REVERB_GAIN, + AL_REVERB_MAX_LATE_REVERB_GAIN + ) + )); + AL_CHECK(alEffectf( + reverbEffect, + AL_REVERB_DECAY_HFRATIO, + glm::clamp( + 1.0f - acoustics.reverbAbsorption, + AL_REVERB_MIN_DECAY_HFRATIO, + AL_REVERB_MAX_DECAY_HFRATIO + ) + )); alAuxiliaryEffectSloti(effectSlots[0], AL_EFFECTSLOT_EFFECT, reverbEffect); } diff --git a/src/graphics/render/Decorator.cpp b/src/graphics/render/Decorator.cpp index 29405ef37..b1957c697 100644 --- a/src/graphics/render/Decorator.cpp +++ b/src/graphics/render/Decorator.cpp @@ -141,8 +141,10 @@ void Decorator::updateAcoustics(const Camera& camera) { averageDistance += distance; averageAbsorption += material->soundAbsorption; } - averageDistance /= hit; - averageAbsorption /= hit; + if (hit > 0) { + averageDistance /= hit; + averageAbsorption /= hit; + } float decayTime = 20.0f * (averageDistance / rayLength); float escapeRatio = static_cast(rays - hit) / static_cast(rays);