diff --git a/res/layouts/pages/settings_audio.xml.lua b/res/layouts/pages/settings_audio.xml.lua
index c9b4be4b6..37609a900 100644
--- a/res/layouts/pages/settings_audio.xml.lua
+++ b/res/layouts/pages/settings_audio.xml.lua
@@ -24,6 +24,14 @@ function update_setting(x, id, name, postfix)
)
end
+function create_checkbox(id, name, tooltip)
+ tooltip = tooltip or ''
+ document.root:add(string.format(
+ "%s",
+ id, app.str_setting(id), gui.str(tooltip, "settings"), gui.str(name, "settings")
+ ))
+end
+
local initialized = false
function on_open()
@@ -71,4 +79,6 @@ function on_open()
if info then
selectbox.value = info.device_specifier
end
+
+ create_checkbox("audio.acoustic-effects", "Acoustic effects", "audio.acoustic-effects.tooltip")
end
diff --git a/res/layouts/pages/settings_graphics.xml.lua b/res/layouts/pages/settings_graphics.xml.lua
index 3b7f7b13a..b8b9d5497 100644
--- a/res/layouts/pages/settings_graphics.xml.lua
+++ b/res/layouts/pages/settings_graphics.xml.lua
@@ -39,7 +39,7 @@ function on_open()
create_setting("chunks.load-distance", "Load Distance", 1)
create_setting("chunks.load-speed", "Load Speed", 1)
create_setting("graphics.fog-curve", "Fog Curve", 0.1)
-
+
create_checkbox("graphics.backlight", "Backlight", "graphics.backlight.tooltip")
create_checkbox("graphics.soft-lighting", "Soft lighting", "graphics.soft-lighting.tooltip")
create_checkbox("graphics.dense-render", "Dense blocks render", "graphics.dense-render.tooltip")
diff --git a/src/audio/AL/ALAudio.cpp b/src/audio/AL/ALAudio.cpp
index eba10df17..473e5bc49 100644
--- a/src/audio/AL/ALAudio.cpp
+++ b/src/audio/AL/ALAudio.cpp
@@ -481,8 +481,16 @@ bool ALSpeaker::isManuallyStopped() const {
static bool alc_enumeration_ext = false;
-ALAudio::ALAudio(ALCdevice* device, ALCcontext* context, bool useEffects)
- : device(device), context(context), useEffects(useEffects) {
+ALAudio::ALAudio(
+ ALCdevice* device,
+ ALCcontext* context,
+ bool useEffects,
+ const AudioSettings& settings
+)
+ : device(device),
+ context(context),
+ settings(settings),
+ useEffects(useEffects) {
ALCint size;
alcGetIntegerv(device, ALC_ATTRIBUTES_SIZE, 1, &size);
std::vector attrs(size);
@@ -693,7 +701,7 @@ std::unique_ptr ALAudio::openInputDevice(
);
}
-std::unique_ptr ALAudio::create() {
+std::unique_ptr ALAudio::create(const AudioSettings& settings) {
alc_enumeration_ext = alcIsExtensionPresent(nullptr, "ALC_ENUMERATION_EXT");
ALCdevice* device = alcOpenDevice(nullptr);
@@ -722,7 +730,7 @@ std::unique_ptr ALAudio::create() {
logger.info() << "device supports " << sends << " aux sends per source";
logger.info() << "initialized";
- return std::make_unique(device, context, effects);
+ return std::make_unique(device, context, effects, settings);
}
uint ALAudio::getFreeSource() {
@@ -787,6 +795,10 @@ void ALAudio::setAcoustics(Acoustics acoustics) {
if (!useEffects) {
return;
}
+ if (!settings.acousticEffects.get()) {
+ alAuxiliaryEffectSloti(effectSlots[0], AL_EFFECTSLOT_EFFECT, 0);
+ return;
+ }
int reverbEffect = effects[REVERB_EFFECT];
AL_CHECK(alEffectf(
reverbEffect,
diff --git a/src/audio/AL/ALAudio.hpp b/src/audio/AL/ALAudio.hpp
index 6834db0f3..b405d1473 100644
--- a/src/audio/AL/ALAudio.hpp
+++ b/src/audio/AL/ALAudio.hpp
@@ -15,6 +15,8 @@
#include
#include
+struct AudioSettings;
+
namespace audio {
struct ALBuffer;
class ALAudio;
@@ -177,6 +179,8 @@ namespace audio {
uint maxSources = 256;
uint maxEffectSlots = 64;
+ const AudioSettings& settings;
+
bool initEffects();
public:
std::vector effectSlots;
@@ -185,7 +189,12 @@ namespace audio {
bool useEffects;
- ALAudio(ALCdevice* device, ALCcontext* context, bool effects);
+ ALAudio(
+ ALCdevice* device,
+ ALCcontext* context,
+ bool effects,
+ const AudioSettings& settings
+ );
~ALAudio();
uint getFreeSource();
@@ -226,6 +235,6 @@ namespace audio {
return false;
}
- static std::unique_ptr create();
+ static std::unique_ptr create(const AudioSettings& settings);
};
}
diff --git a/src/audio/audio.cpp b/src/audio/audio.cpp
index a45a876f6..6523f76b6 100644
--- a/src/audio/audio.cpp
+++ b/src/audio/audio.cpp
@@ -159,7 +159,7 @@ void audio::initialize(
enabled = enabled && settings.enabled.get();
if (enabled) {
logger.info() << "initializing ALAudio backend";
- backend = ALAudio::create().release();
+ backend = ALAudio::create(settings).release();
}
if (backend == nullptr) {
if (enabled) {
diff --git a/src/io/settings_io.cpp b/src/io/settings_io.cpp
index da0027c4d..8bd8402d8 100644
--- a/src/io/settings_io.cpp
+++ b/src/io/settings_io.cpp
@@ -44,6 +44,7 @@ SettingsHandler::SettingsHandler(EngineSettings& settings) {
builder.add("volume-ambient", &settings.audio.volumeAmbient);
builder.add("volume-music", &settings.audio.volumeMusic);
builder.add("input-device", &settings.audio.inputDevice);
+ builder.add("acoustic-effects", &settings.audio.acousticEffects);
builder.addSection("display");
builder.add("width", &settings.display.width);
diff --git a/src/settings.hpp b/src/settings.hpp
index 0a0754235..ad597f76a 100644
--- a/src/settings.hpp
+++ b/src/settings.hpp
@@ -18,6 +18,8 @@ struct AudioSettings {
NumberSetting volumeMusic {1.0f, 0.0f, 1.0f, setting_format::percent};
StringSetting inputDevice {"auto"};
+
+ FlagSetting acousticEffects {true};
};
struct DisplaySettings {