From 1c20c460e0e50c13701f7faebeae7e0342713a12 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Wed, 4 Oct 2017 02:39:36 -0700 Subject: [PATCH] Add support for AL_SOFT_source_spatialize --- include/AL/alure2.h | 10 ++++++++++ src/context.cpp | 5 +++-- src/context.h | 1 + src/source.cpp | 15 ++++++++++++++- src/source.h | 4 ++++ 5 files changed, 32 insertions(+), 3 deletions(-) diff --git a/include/AL/alure2.h b/include/AL/alure2.h index b7df6e4..a405e53 100644 --- a/include/AL/alure2.h +++ b/include/AL/alure2.h @@ -737,6 +737,13 @@ public: bool isInUse() const; }; + +enum class Spatialize { + Off = AL_FALSE, + On = AL_TRUE, + Auto = 0x0002 /* AL_AUTO_SOFT */ +}; + class ALSource; class ALURE_API Source { friend class ALContext; @@ -944,6 +951,9 @@ public: void setStereoAngles(ALfloat leftAngle, ALfloat rightAngle); std::pair getStereoAngles() const; + void set3DSpatialize(Spatialize spatialize); + Spatialize get3DSpatialize() const; + void setAirAbsorptionFactor(ALfloat factor); ALfloat getAirAbsorptionFactor() const; diff --git a/src/context.cpp b/src/context.cpp index 4e2239f..dac159d 100644 --- a/src/context.cpp +++ b/src/context.cpp @@ -230,8 +230,9 @@ static const struct { { EXT_MULAW_MCFORMATS, "AL_EXT_MULAW_MCFORMATS", LoadNothing }, { EXT_MULAW_BFORMAT, "AL_EXT_MULAW_BFORMAT", LoadNothing }, - { SOFT_loop_points, "AL_SOFT_loop_points", LoadNothing }, - { SOFT_source_latency, "AL_SOFT_source_latency", LoadSourceLatency }, + { SOFT_loop_points, "AL_SOFT_loop_points", LoadNothing }, + { SOFT_source_latency, "AL_SOFT_source_latency", LoadSourceLatency }, + { SOFT_source_spatialize, "AL_SOFT_source_spatialize", LoadNothing }, { EXT_disconnect, "ALC_EXT_disconnect", LoadNothing }, diff --git a/src/context.h b/src/context.h index 3f86281..b400acc 100644 --- a/src/context.h +++ b/src/context.h @@ -41,6 +41,7 @@ enum ALExtension { SOFT_loop_points, SOFT_source_latency, + SOFT_source_spatialize, EXT_disconnect, diff --git a/src/source.cpp b/src/source.cpp index f665911..bbc123d 100644 --- a/src/source.cpp +++ b/src/source.cpp @@ -199,10 +199,11 @@ void ALSource::resetProperties() mRolloffFactor = 1.0f; mRoomRolloffFactor = 0.0f; mDopplerFactor = 1.0f; + mAirAbsorptionFactor = 0.0f; mRadius = 0.0f; mStereoAngles[0] = F_PI / 6.0f; mStereoAngles[1] = -F_PI / 6.0f; - mAirAbsorptionFactor = 0.0f; + mSpatialize = Spatialize::Auto; mLooping = false; mRelative = false; mDryGainHFAuto = true; @@ -255,6 +256,8 @@ void ALSource::applyProperties(bool looping, ALuint offset) const alSourcef(mId, AL_SOURCE_RADIUS, mRadius); if(mContext->hasExtension(EXT_STEREO_ANGLES)) alSourcefv(mId, AL_STEREO_ANGLES, mStereoAngles); + if(mContext->hasExtension(SOFT_source_spatialize)) + alSourcei(mId, AL_SOURCE_SPATIALIZE_SOFT, (ALint)mSpatialize); alSourcei(mId, AL_SOURCE_RELATIVE, mRelative ? AL_TRUE : AL_FALSE); if(mContext->hasExtension(EXT_EFX)) { @@ -973,6 +976,14 @@ void ALSource::setStereoAngles(ALfloat leftAngle, ALfloat rightAngle) mStereoAngles[1] = rightAngle; } +void ALSource::set3DSpatialize(Spatialize spatialize) +{ + CheckContext(mContext); + if(mId != 0 && mContext->hasExtension(SOFT_source_spatialize)) + alSourcei(mId, AL_SOURCE_SPATIALIZE_SOFT, (ALint)spatialize); + mSpatialize = spatialize; +} + void ALSource::setRelative(bool relative) { CheckContext(mContext); @@ -1256,6 +1267,8 @@ DECL_THUNK1(void, Source, setRadius,, ALfloat) DECL_THUNK0(ALfloat, Source, getRadius, const) DECL_THUNK2(void, Source, setStereoAngles,, ALfloat, ALfloat) DECL_THUNK0(ALfloatPair, Source, getStereoAngles, const) +DECL_THUNK1(void, Source, set3DSpatialize,, Spatialize) +DECL_THUNK0(Spatialize, Source, get3DSpatialize, const) DECL_THUNK1(void, Source, setAirAbsorptionFactor,, ALfloat) DECL_THUNK0(ALfloat, Source, getAirAbsorptionFactor, const) DECL_THUNK3(void, Source, setGainAuto,, bool, bool, bool) diff --git a/src/source.h b/src/source.h index f072f98..4aad761 100644 --- a/src/source.h +++ b/src/source.h @@ -60,6 +60,7 @@ class ALSource { ALfloat mAirAbsorptionFactor; ALfloat mRadius; ALfloat mStereoAngles[2]; + Spatialize mSpatialize; bool mLooping : 1; bool mRelative : 1; bool mDryGainHFAuto : 1; @@ -172,6 +173,9 @@ public: std::pair getStereoAngles() const { return std::make_pair(mStereoAngles[0], mStereoAngles[1]); } + void set3DSpatialize(Spatialize spatialize); + Spatialize get3DSpatialize() const { return mSpatialize; } + void setAirAbsorptionFactor(ALfloat factor); ALfloat getAirAbsorptionFactor() const { return mAirAbsorptionFactor; } -- 2.11.4.GIT