diff options
author | Chris Robinson <[email protected]> | 2023-10-12 06:28:12 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2023-10-12 06:28:12 -0700 |
commit | d1acb001a5c4779d382838fb02660ba9aa10e4cc (patch) | |
tree | 82e342ed8f445d86041d5fd315063a146eed0bc2 /al | |
parent | 8dad679dd05a8bbd9efd6b4bd2f35fb902133d28 (diff) |
Add an orientation property for convolution reverb
Only affects ambisonic (B-Format and UHJ) formats
Diffstat (limited to 'al')
-rw-r--r-- | al/effects/convolution.cpp | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/al/effects/convolution.cpp b/al/effects/convolution.cpp index a9426ce4..494950b7 100644 --- a/al/effects/convolution.cpp +++ b/al/effects/convolution.cpp @@ -36,12 +36,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_REVERB_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,12 +84,21 @@ 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_REVERB_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); } } |