aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Alc/ALc.c2
-rw-r--r--OpenAL32/Include/alMain.h2
-rw-r--r--OpenAL32/alAuxEffectSlot.c3
-rw-r--r--alsoftrc.sample5
4 files changed, 10 insertions, 2 deletions
diff --git a/Alc/ALc.c b/Alc/ALc.c
index 574de769..943201f6 100644
--- a/Alc/ALc.c
+++ b/Alc/ALc.c
@@ -479,6 +479,8 @@ static ALvoid InitContext(ALCcontext *pContext)
pContext->lNumStereoSources = 1;
pContext->lNumMonoSources = pContext->Device->MaxNoOfSources - pContext->lNumStereoSources;
+ pContext->AuxiliaryEffectSlotMax = GetConfigValueInt(NULL, "slots", 4);
+
pContext->ExtensionList = "AL_EXTX_buffer_sub_data AL_EXT_EXPONENT_DISTANCE AL_EXT_FLOAT32 AL_EXT_IMA4 AL_EXT_LINEAR_DISTANCE AL_EXT_MCFORMATS AL_EXT_OFFSET AL_EXTX_source_distance_model AL_LOKI_quadriphonic";
level = GetConfigValueInt(NULL, "cf_level", 0);
diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h
index 68b176e4..66102b8b 100644
--- a/OpenAL32/Include/alMain.h
+++ b/OpenAL32/Include/alMain.h
@@ -194,6 +194,8 @@ struct ALCcontext_struct
struct ALeffectslot *AuxiliaryEffectSlot;
ALuint AuxiliaryEffectSlotCount;
+ // Maximum number of slots that can be created
+ ALuint AuxiliaryEffectSlotMax;
ALenum LastError;
ALboolean InUse;
diff --git a/OpenAL32/alAuxEffectSlot.c b/OpenAL32/alAuxEffectSlot.c
index 65db34b3..85a7c6ee 100644
--- a/OpenAL32/alAuxEffectSlot.c
+++ b/OpenAL32/alAuxEffectSlot.c
@@ -50,8 +50,7 @@ ALvoid AL_APIENTRY alGenAuxiliaryEffectSlots(ALsizei n, ALuint *effectslots)
if (n > 0)
{
- /* NOTE: We only support one slot currently */
- if(n == 1 && Context->AuxiliaryEffectSlotCount == 0)
+ if(Context->AuxiliaryEffectSlotCount+n <= Context->AuxiliaryEffectSlotMax)
{
// Check that enough memory has been allocted in the 'effectslots' array for n Effect Slots
if (!IsBadWritePtr((void*)effectslots, n * sizeof(ALuint)))
diff --git a/alsoftrc.sample b/alsoftrc.sample
index 438eba4a..8408ab78 100644
--- a/alsoftrc.sample
+++ b/alsoftrc.sample
@@ -67,6 +67,11 @@ excludefx = # Sets which effects to exclude, preventing apps from using them.
# reverb
# Default is empty (all available effects enabled)
+slots = 4 # Sets the maximum number of Auxiliary Effect Slots an app can
+ # create. A slot can use a non-negligible amount of CPU time if an
+ # effect is set on it even if no sources are feeding it, so this may
+ # help when apps use more than the system can handle. Default is 4
+
layout_STEREO = # Sets the speaker layout when using stereo output. Values are
# specified in degrees, where 0 is straight in front, negative
# goes left, and positive goes right. The values must define a