aboutsummaryrefslogtreecommitdiffstats
path: root/al/listener.cpp
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2023-11-28 12:51:46 +0100
committerSven Gothel <[email protected]>2023-11-28 12:51:46 +0100
commit1aaf4f070011490bcece50394b9b32dfa593fd9e (patch)
tree17d68284e401a35eea3d3a574d986d446a60763a /al/listener.cpp
parent6e7cee4fa9a8af03f28ca26cd89f8357390dfc90 (diff)
parent571b546f35eead77ce109f8d4dd6c3de3199d573 (diff)
Merge remote-tracking branch 'upstream/master'
Diffstat (limited to 'al/listener.cpp')
-rw-r--r--al/listener.cpp196
1 files changed, 77 insertions, 119 deletions
diff --git a/al/listener.cpp b/al/listener.cpp
index 06d7c370..ea2ebb3f 100644
--- a/al/listener.cpp
+++ b/al/listener.cpp
@@ -33,6 +33,7 @@
#include "almalloc.h"
#include "atomic.h"
#include "core/except.h"
+#include "direct_defs.h"
#include "opthelpers.h"
@@ -68,12 +69,9 @@ inline void CommitAndUpdateProps(ALCcontext *context)
} // namespace
-AL_API void AL_APIENTRY alListenerf(ALenum param, ALfloat value)
-START_API_FUNC
+AL_API DECL_FUNC2(void, alListenerf, ALenum, ALfloat)
+FORCE_ALIGN void AL_APIENTRY alListenerfDirect(ALCcontext *context, ALenum param, ALfloat value) noexcept
{
- ContextRef context{GetContextRef()};
- if(!context) UNLIKELY return;
-
ALlistener &listener = context->mListener;
std::lock_guard<std::mutex> _{context->mPropLock};
switch(param)
@@ -82,28 +80,25 @@ START_API_FUNC
if(!(value >= 0.0f && std::isfinite(value)))
return context->setError(AL_INVALID_VALUE, "Listener gain out of range");
listener.Gain = value;
- UpdateProps(context.get());
+ UpdateProps(context);
break;
case AL_METERS_PER_UNIT:
if(!(value >= AL_MIN_METERS_PER_UNIT && value <= AL_MAX_METERS_PER_UNIT))
return context->setError(AL_INVALID_VALUE, "Listener meters per unit out of range");
listener.mMetersPerUnit = value;
- UpdateProps(context.get());
+ UpdateProps(context);
break;
default:
context->setError(AL_INVALID_ENUM, "Invalid listener float property");
}
}
-END_API_FUNC
-AL_API void AL_APIENTRY alListener3f(ALenum param, ALfloat value1, ALfloat value2, ALfloat value3)
-START_API_FUNC
+AL_API DECL_FUNC4(void, alListener3f, ALenum, ALfloat, ALfloat, ALfloat)
+FORCE_ALIGN void AL_APIENTRY alListener3fDirect(ALCcontext *context, ALenum param, ALfloat value1,
+ ALfloat value2, ALfloat value3) noexcept
{
- ContextRef context{GetContextRef()};
- if(!context) UNLIKELY return;
-
ALlistener &listener = context->mListener;
std::lock_guard<std::mutex> _{context->mPropLock};
switch(param)
@@ -114,7 +109,7 @@ START_API_FUNC
listener.Position[0] = value1;
listener.Position[1] = value2;
listener.Position[2] = value3;
- CommitAndUpdateProps(context.get());
+ CommitAndUpdateProps(context);
break;
case AL_VELOCITY:
@@ -123,40 +118,34 @@ START_API_FUNC
listener.Velocity[0] = value1;
listener.Velocity[1] = value2;
listener.Velocity[2] = value3;
- CommitAndUpdateProps(context.get());
+ CommitAndUpdateProps(context);
break;
default:
context->setError(AL_INVALID_ENUM, "Invalid listener 3-float property");
}
}
-END_API_FUNC
-AL_API void AL_APIENTRY alListenerfv(ALenum param, const ALfloat *values)
-START_API_FUNC
+AL_API DECL_FUNC2(void, alListenerfv, ALenum, const ALfloat*)
+FORCE_ALIGN void AL_APIENTRY alListenerfvDirect(ALCcontext *context, ALenum param,
+ const ALfloat *values) noexcept
{
- if(values)
+ if(!values) UNLIKELY
+ return context->setError(AL_INVALID_VALUE, "NULL pointer");
+
+ switch(param)
{
- switch(param)
- {
- case AL_GAIN:
- case AL_METERS_PER_UNIT:
- alListenerf(param, values[0]);
- return;
+ case AL_GAIN:
+ case AL_METERS_PER_UNIT:
+ alListenerfDirect(context, param, values[0]);
+ return;
- case AL_POSITION:
- case AL_VELOCITY:
- alListener3f(param, values[0], values[1], values[2]);
- return;
- }
+ case AL_POSITION:
+ case AL_VELOCITY:
+ alListener3fDirect(context, param, values[0], values[1], values[2]);
+ return;
}
- ContextRef context{GetContextRef()};
- if(!context) UNLIKELY return;
-
- if(!values) UNLIKELY
- return context->setError(AL_INVALID_VALUE, "NULL pointer");
-
ALlistener &listener = context->mListener;
std::lock_guard<std::mutex> _{context->mPropLock};
switch(param)
@@ -172,22 +161,18 @@ START_API_FUNC
listener.OrientUp[0] = values[3];
listener.OrientUp[1] = values[4];
listener.OrientUp[2] = values[5];
- CommitAndUpdateProps(context.get());
+ CommitAndUpdateProps(context);
break;
default:
context->setError(AL_INVALID_ENUM, "Invalid listener float-vector property");
}
}
-END_API_FUNC
-AL_API void AL_APIENTRY alListeneri(ALenum param, ALint /*value*/)
-START_API_FUNC
+AL_API DECL_FUNC2(void, alListeneri, ALenum, ALint)
+FORCE_ALIGN void AL_APIENTRY alListeneriDirect(ALCcontext *context, ALenum param, ALint /*value*/) noexcept
{
- ContextRef context{GetContextRef()};
- if(!context) UNLIKELY return;
-
std::lock_guard<std::mutex> _{context->mPropLock};
switch(param)
{
@@ -195,23 +180,20 @@ START_API_FUNC
context->setError(AL_INVALID_ENUM, "Invalid listener integer property");
}
}
-END_API_FUNC
-AL_API void AL_APIENTRY alListener3i(ALenum param, ALint value1, ALint value2, ALint value3)
-START_API_FUNC
+AL_API DECL_FUNC4(void, alListener3i, ALenum, ALint, ALint, ALint)
+FORCE_ALIGN void AL_APIENTRY alListener3iDirect(ALCcontext *context, ALenum param, ALint value1,
+ ALint value2, ALint value3) noexcept
{
switch(param)
{
case AL_POSITION:
case AL_VELOCITY:
- alListener3f(param, static_cast<ALfloat>(value1), static_cast<ALfloat>(value2),
- static_cast<ALfloat>(value3));
+ alListener3fDirect(context, param, static_cast<ALfloat>(value1),
+ static_cast<ALfloat>(value2), static_cast<ALfloat>(value3));
return;
}
- ContextRef context{GetContextRef()};
- if(!context) UNLIKELY return;
-
std::lock_guard<std::mutex> _{context->mPropLock};
switch(param)
{
@@ -219,55 +201,48 @@ START_API_FUNC
context->setError(AL_INVALID_ENUM, "Invalid listener 3-integer property");
}
}
-END_API_FUNC
-AL_API void AL_APIENTRY alListeneriv(ALenum param, const ALint *values)
-START_API_FUNC
+AL_API DECL_FUNC2(void, alListeneriv, ALenum, const ALint*)
+FORCE_ALIGN void AL_APIENTRY alListenerivDirect(ALCcontext *context, ALenum param,
+ const ALint *values) noexcept
{
- if(values)
+ if(!values) UNLIKELY
+ return context->setError(AL_INVALID_VALUE, "NULL pointer");
+
+ switch(param)
{
- ALfloat fvals[6];
- switch(param)
- {
- case AL_POSITION:
- case AL_VELOCITY:
- alListener3f(param, static_cast<ALfloat>(values[0]), static_cast<ALfloat>(values[1]),
- static_cast<ALfloat>(values[2]));
- return;
+ case AL_POSITION:
+ case AL_VELOCITY:
+ alListener3fDirect(context, param, static_cast<ALfloat>(values[0]),
+ static_cast<ALfloat>(values[1]), static_cast<ALfloat>(values[2]));
+ return;
- case AL_ORIENTATION:
- fvals[0] = static_cast<ALfloat>(values[0]);
- fvals[1] = static_cast<ALfloat>(values[1]);
- fvals[2] = static_cast<ALfloat>(values[2]);
- fvals[3] = static_cast<ALfloat>(values[3]);
- fvals[4] = static_cast<ALfloat>(values[4]);
- fvals[5] = static_cast<ALfloat>(values[5]);
- alListenerfv(param, fvals);
- return;
- }
+ case AL_ORIENTATION:
+ const ALfloat fvals[6]{
+ static_cast<ALfloat>(values[0]),
+ static_cast<ALfloat>(values[1]),
+ static_cast<ALfloat>(values[2]),
+ static_cast<ALfloat>(values[3]),
+ static_cast<ALfloat>(values[4]),
+ static_cast<ALfloat>(values[5]),
+ };
+ alListenerfvDirect(context, param, fvals);
+ return;
}
- ContextRef context{GetContextRef()};
- if(!context) UNLIKELY return;
-
std::lock_guard<std::mutex> _{context->mPropLock};
- if(!values) UNLIKELY
- context->setError(AL_INVALID_VALUE, "NULL pointer");
- else switch(param)
+ switch(param)
{
default:
context->setError(AL_INVALID_ENUM, "Invalid listener integer-vector property");
}
}
-END_API_FUNC
-AL_API void AL_APIENTRY alGetListenerf(ALenum param, ALfloat *value)
-START_API_FUNC
+AL_API DECL_FUNC2(void, alGetListenerf, ALenum, ALfloat*)
+FORCE_ALIGN void AL_APIENTRY alGetListenerfDirect(ALCcontext *context, ALenum param,
+ ALfloat *value) noexcept
{
- ContextRef context{GetContextRef()};
- if(!context) UNLIKELY return;
-
ALlistener &listener = context->mListener;
std::lock_guard<std::mutex> _{context->mPropLock};
if(!value)
@@ -286,14 +261,11 @@ START_API_FUNC
context->setError(AL_INVALID_ENUM, "Invalid listener float property");
}
}
-END_API_FUNC
-AL_API void AL_APIENTRY alGetListener3f(ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3)
-START_API_FUNC
+AL_API DECL_FUNC4(void, alGetListener3f, ALenum, ALfloat*, ALfloat*, ALfloat*)
+FORCE_ALIGN void AL_APIENTRY alGetListener3fDirect(ALCcontext *context, ALenum param,
+ ALfloat *value1, ALfloat *value2, ALfloat *value3) noexcept
{
- ContextRef context{GetContextRef()};
- if(!context) UNLIKELY return;
-
ALlistener &listener = context->mListener;
std::lock_guard<std::mutex> _{context->mPropLock};
if(!value1 || !value2 || !value3)
@@ -316,27 +288,24 @@ START_API_FUNC
context->setError(AL_INVALID_ENUM, "Invalid listener 3-float property");
}
}
-END_API_FUNC
-AL_API void AL_APIENTRY alGetListenerfv(ALenum param, ALfloat *values)
-START_API_FUNC
+AL_API DECL_FUNC2(void, alGetListenerfv, ALenum, ALfloat*)
+FORCE_ALIGN void AL_APIENTRY alGetListenerfvDirect(ALCcontext *context, ALenum param,
+ ALfloat *values) noexcept
{
switch(param)
{
case AL_GAIN:
case AL_METERS_PER_UNIT:
- alGetListenerf(param, values);
+ alGetListenerfDirect(context, param, values);
return;
case AL_POSITION:
case AL_VELOCITY:
- alGetListener3f(param, values+0, values+1, values+2);
+ alGetListener3fDirect(context, param, values+0, values+1, values+2);
return;
}
- ContextRef context{GetContextRef()};
- if(!context) UNLIKELY return;
-
ALlistener &listener = context->mListener;
std::lock_guard<std::mutex> _{context->mPropLock};
if(!values)
@@ -357,15 +326,11 @@ START_API_FUNC
context->setError(AL_INVALID_ENUM, "Invalid listener float-vector property");
}
}
-END_API_FUNC
-AL_API void AL_APIENTRY alGetListeneri(ALenum param, ALint *value)
-START_API_FUNC
+AL_API DECL_FUNC2(void, alGetListeneri, ALenum, ALint*)
+FORCE_ALIGN void AL_APIENTRY alGetListeneriDirect(ALCcontext *context, ALenum param, ALint *value) noexcept
{
- ContextRef context{GetContextRef()};
- if(!context) UNLIKELY return;
-
std::lock_guard<std::mutex> _{context->mPropLock};
if(!value)
context->setError(AL_INVALID_VALUE, "NULL pointer");
@@ -375,14 +340,11 @@ START_API_FUNC
context->setError(AL_INVALID_ENUM, "Invalid listener integer property");
}
}
-END_API_FUNC
-AL_API void AL_APIENTRY alGetListener3i(ALenum param, ALint *value1, ALint *value2, ALint *value3)
-START_API_FUNC
+AL_API DECL_FUNC4(void, alGetListener3i, ALenum, ALint*, ALint*, ALint*)
+FORCE_ALIGN void AL_APIENTRY alGetListener3iDirect(ALCcontext *context, ALenum param,
+ ALint *value1, ALint *value2, ALint *value3) noexcept
{
- ContextRef context{GetContextRef()};
- if(!context) UNLIKELY return;
-
ALlistener &listener = context->mListener;
std::lock_guard<std::mutex> _{context->mPropLock};
if(!value1 || !value2 || !value3)
@@ -405,22 +367,19 @@ START_API_FUNC
context->setError(AL_INVALID_ENUM, "Invalid listener 3-integer property");
}
}
-END_API_FUNC
-AL_API void AL_APIENTRY alGetListeneriv(ALenum param, ALint* values)
-START_API_FUNC
+AL_API DECL_FUNC2(void, alGetListeneriv, ALenum, ALint*)
+FORCE_ALIGN void AL_APIENTRY alGetListenerivDirect(ALCcontext *context, ALenum param,
+ ALint *values) noexcept
{
switch(param)
{
case AL_POSITION:
case AL_VELOCITY:
- alGetListener3i(param, values+0, values+1, values+2);
+ alGetListener3iDirect(context, param, values+0, values+1, values+2);
return;
}
- ContextRef context{GetContextRef()};
- if(!context) UNLIKELY return;
-
ALlistener &listener = context->mListener;
std::lock_guard<std::mutex> _{context->mPropLock};
if(!values)
@@ -441,4 +400,3 @@ START_API_FUNC
context->setError(AL_INVALID_ENUM, "Invalid listener integer-vector property");
}
}
-END_API_FUNC