aboutsummaryrefslogtreecommitdiffstats
path: root/al/effects/convolution.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'al/effects/convolution.cpp')
-rw-r--r--al/effects/convolution.cpp34
1 files changed, 30 insertions, 4 deletions
diff --git a/al/effects/convolution.cpp b/al/effects/convolution.cpp
index 8e850fd3..9c091e53 100644
--- a/al/effects/convolution.cpp
+++ b/al/effects/convolution.cpp
@@ -1,6 +1,8 @@
#include "config.h"
+#include <cmath>
+
#include "AL/al.h"
#include "alc/inprogext.h"
@@ -36,12 +38,25 @@ void Convolution_setParamf(EffectProps* /*props*/, ALenum param, float /*val*/)
param};
}
}
-void Convolution_setParamfv(EffectProps *props, ALenum param, const float *vals)
+void Convolution_setParamfv(EffectProps *props, ALenum param, const float *values)
{
switch(param)
{
+ case AL_CONVOLUTION_ORIENTATION_SOFT:
+ if(!(std::isfinite(values[0]) && std::isfinite(values[1]) && std::isfinite(values[2])
+ && std::isfinite(values[3]) && std::isfinite(values[4]) && std::isfinite(values[5])))
+ throw effect_exception{AL_INVALID_VALUE, "Property 0x%04x value out of range", param};
+
+ props->Convolution.OrientAt[0] = values[0];
+ props->Convolution.OrientAt[1] = values[1];
+ props->Convolution.OrientAt[2] = values[2];
+ props->Convolution.OrientUp[0] = values[3];
+ props->Convolution.OrientUp[1] = values[4];
+ props->Convolution.OrientUp[2] = values[5];
+ break;
+
default:
- Convolution_setParamf(props, param, vals[0]);
+ Convolution_setParamf(props, param, values[0]);
}
}
@@ -71,18 +86,29 @@ void Convolution_getParamf(const EffectProps* /*props*/, ALenum param, float* /*
param};
}
}
-void Convolution_getParamfv(const EffectProps *props, ALenum param, float *vals)
+void Convolution_getParamfv(const EffectProps *props, ALenum param, float *values)
{
switch(param)
{
+ case AL_CONVOLUTION_ORIENTATION_SOFT:
+ values[0] = props->Convolution.OrientAt[0];
+ values[1] = props->Convolution.OrientAt[1];
+ values[2] = props->Convolution.OrientAt[2];
+ values[3] = props->Convolution.OrientUp[0];
+ values[4] = props->Convolution.OrientUp[1];
+ values[5] = props->Convolution.OrientUp[2];
+ break;
+
default:
- Convolution_getParamf(props, param, vals);
+ Convolution_getParamf(props, param, values);
}
}
EffectProps genDefaultProps() noexcept
{
EffectProps props{};
+ props.Convolution.OrientAt = {0.0f, 0.0f, -1.0f};
+ props.Convolution.OrientUp = {0.0f, 1.0f, 0.0f};
return props;
}