Add an extension to change a buffer's unpack ambisonic order

master
Chris Robinson 2020-04-04 03:10:01 -07:00
parent fc906c97f5
commit a0b7638d63
3 changed files with 21 additions and 0 deletions

View File

@ -1190,6 +1190,13 @@ START_API_FUNC
albuf->AmbiScaling = value;
break;
case AL_UNPACK_AMBISONIC_ORDER_SOFT:
if UNLIKELY(value < 1 || value > 14)
context->setError(AL_INVALID_VALUE, "Invalid unpack ambisonic order %d", value);
else
albuf->UnpackAmbiOrder = static_cast<ALuint>(value);
break;
default:
context->setError(AL_INVALID_ENUM, "Invalid buffer integer property 0x%04x", param);
}
@ -1227,6 +1234,7 @@ START_API_FUNC
case AL_PACK_BLOCK_ALIGNMENT_SOFT:
case AL_AMBISONIC_LAYOUT_SOFT:
case AL_AMBISONIC_SCALING_SOFT:
case AL_UNPACK_AMBISONIC_ORDER_SOFT:
alBufferi(buffer, param, values[0]);
return;
}
@ -1386,6 +1394,10 @@ START_API_FUNC
*value = albuf->AmbiScaling;
break;
case AL_UNPACK_AMBISONIC_ORDER_SOFT:
*value = static_cast<int>(albuf->UnpackAmbiOrder);
break;
default:
context->setError(AL_INVALID_ENUM, "Invalid buffer integer property 0x%04x", param);
}
@ -1428,6 +1440,7 @@ START_API_FUNC
case AL_PACK_BLOCK_ALIGNMENT_SOFT:
case AL_AMBISONIC_LAYOUT_SOFT:
case AL_AMBISONIC_SCALING_SOFT:
case AL_UNPACK_AMBISONIC_ORDER_SOFT:
alGetBufferi(buffer, param, values);
return;
}

View File

@ -795,6 +795,8 @@ constexpr struct {
DECL(AL_BUFFER_CALLBACK_FUNCTION_SOFT),
DECL(AL_BUFFER_CALLBACK_USER_PARAM_SOFT),
DECL(AL_UNPACK_AMBISONIC_ORDER_SOFT),
};
#undef DECL
@ -839,6 +841,7 @@ constexpr ALchar alExtList[] =
"AL_EXT_STEREO_ANGLES "
"AL_LOKI_quadriphonic "
"AL_SOFT_bformat_ex "
"AL_SOFTX_bformat_hoa "
"AL_SOFT_block_alignment "
"AL_SOFTX_callback_buffer "
"AL_SOFT_deferred_updates "

View File

@ -94,6 +94,11 @@ AL_API void AL_APIENTRY alGetBufferPtrvSOFT(ALuint buffer, ALenum param, ALvoid
#endif
#endif
#ifndef AL_SOFT_bformat_hoa
#define AL_SOFT_bformat_hoa
#define AL_UNPACK_AMBISONIC_ORDER_SOFT 0x200F
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif