aboutsummaryrefslogtreecommitdiffstats
path: root/OpenAL32
diff options
context:
space:
mode:
Diffstat (limited to 'OpenAL32')
-rw-r--r--OpenAL32/Include/alMain.h5
-rw-r--r--OpenAL32/Include/alSource.h1
-rw-r--r--OpenAL32/alExtension.c1
-rw-r--r--OpenAL32/alSource.c17
4 files changed, 24 insertions, 0 deletions
diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h
index 3264d5ed..ebf1b20e 100644
--- a/OpenAL32/Include/alMain.h
+++ b/OpenAL32/Include/alMain.h
@@ -93,6 +93,11 @@ AL_API ALboolean AL_APIENTRY alIsBufferFormatSupportedSOFT(ALenum format);
#endif
#endif
+#ifndef AL_SOFT_non_virtual_channels
+#define AL_SOFT_non_virtual_channels 1
+#define AL_VIRTUAL_CHANNELS_SOFT 0x1033
+#endif
+
#if defined(HAVE_STDINT_H)
#include <stdint.h>
diff --git a/OpenAL32/Include/alSource.h b/OpenAL32/Include/alSource.h
index 9cbd7f54..8afe8281 100644
--- a/OpenAL32/Include/alSource.h
+++ b/OpenAL32/Include/alSource.h
@@ -46,6 +46,7 @@ typedef struct ALsource
ALboolean bHeadRelative;
ALboolean bLooping;
ALenum DistanceModel;
+ ALboolean VirtualChannels;
resampler_t Resampler;
diff --git a/OpenAL32/alExtension.c b/OpenAL32/alExtension.c
index eb0f46a8..ebb2e252 100644
--- a/OpenAL32/alExtension.c
+++ b/OpenAL32/alExtension.c
@@ -75,6 +75,7 @@ static const ALenums enumeration[] = {
{ "AL_STREAMING", AL_STREAMING },
{ "AL_UNDETERMINED", AL_UNDETERMINED },
{ "AL_METERS_PER_UNIT", AL_METERS_PER_UNIT },
+ { "AL_VIRTUAL_CHANNELS_SOFT", AL_VIRTUAL_CHANNELS_SOFT },
// Source EFX Properties
{ "AL_DIRECT_FILTER", AL_DIRECT_FILTER },
diff --git a/OpenAL32/alSource.c b/OpenAL32/alSource.c
index e91206eb..a1319005 100644
--- a/OpenAL32/alSource.c
+++ b/OpenAL32/alSource.c
@@ -680,6 +680,16 @@ AL_API ALvoid AL_APIENTRY alSourcei(ALuint source,ALenum eParam,ALint lValue)
alSetError(pContext, AL_INVALID_VALUE);
break;
+ case AL_VIRTUAL_CHANNELS_SOFT:
+ if(lValue == AL_TRUE || lValue == AL_FALSE)
+ {
+ Source->VirtualChannels = lValue;
+ Source->NeedsUpdate = AL_TRUE;
+ }
+ else
+ alSetError(pContext, AL_INVALID_VALUE);
+ break;
+
case AL_DISTANCE_MODEL:
if(lValue == AL_NONE ||
lValue == AL_INVERSE_DISTANCE ||
@@ -801,6 +811,7 @@ AL_API void AL_APIENTRY alSourceiv(ALuint source, ALenum eParam, const ALint* pl
case AL_AUXILIARY_SEND_FILTER_GAIN_AUTO:
case AL_AUXILIARY_SEND_FILTER_GAINHF_AUTO:
case AL_DISTANCE_MODEL:
+ case AL_VIRTUAL_CHANNELS_SOFT:
alSourcei(source, eParam, plValues[0]);
return;
@@ -1149,6 +1160,10 @@ AL_API ALvoid AL_APIENTRY alGetSourcei(ALuint source, ALenum eParam, ALint *plVa
*plValue = (ALint)Source->DopplerFactor;
break;
+ case AL_VIRTUAL_CHANNELS_SOFT:
+ *plValue = Source->VirtualChannels;
+ break;
+
case AL_DISTANCE_MODEL:
*plValue = Source->DistanceModel;
break;
@@ -1245,6 +1260,7 @@ AL_API void AL_APIENTRY alGetSourceiv(ALuint source, ALenum eParam, ALint* plVal
case AL_AUXILIARY_SEND_FILTER_GAIN_AUTO:
case AL_AUXILIARY_SEND_FILTER_GAINHF_AUTO:
case AL_DISTANCE_MODEL:
+ case AL_VIRTUAL_CHANNELS_SOFT:
alGetSourcei(source, eParam, plValues);
return;
@@ -1807,6 +1823,7 @@ static ALvoid InitSourceParams(ALsource *Source)
Source->AirAbsorptionFactor = 0.0f;
Source->RoomRolloffFactor = 0.0f;
Source->DopplerFactor = 1.0f;
+ Source->VirtualChannels = AL_TRUE;
Source->DistanceModel = AL_INVERSE_DISTANCE_CLAMPED;