mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-04-26 23:05:38 +00:00
Initial commit
added libraries: opus flac libsndfile updated: libvorbis libogg openal - Everything works as expected for now. Bare in mind libsndfile needed the check for whether or not it could find the xiph libraries removed in order for this to work.
This commit is contained in:
parent
05a083ca6f
commit
a745fc3757
1954 changed files with 431332 additions and 21037 deletions
|
|
@ -21,6 +21,20 @@
|
|||
#include "core/devformat.h"
|
||||
|
||||
|
||||
namespace al {
|
||||
|
||||
backend_exception::backend_exception(backend_error code, const char *msg, ...) : mErrorCode{code}
|
||||
{
|
||||
std::va_list args;
|
||||
va_start(args, msg);
|
||||
setMessage(msg, args);
|
||||
va_end(args);
|
||||
}
|
||||
backend_exception::~backend_exception() = default;
|
||||
|
||||
} // namespace al
|
||||
|
||||
|
||||
bool BackendBase::reset()
|
||||
{ throw al::backend_exception{al::backend_error::DeviceError, "Invalid BackendBase call"}; }
|
||||
|
||||
|
|
@ -54,7 +68,7 @@ ClockLatency BackendBase::getClockLatency()
|
|||
|
||||
void BackendBase::setDefaultWFXChannelOrder()
|
||||
{
|
||||
mDevice->RealOut.ChannelIndex.fill(INVALID_CHANNEL_INDEX);
|
||||
mDevice->RealOut.ChannelIndex.fill(InvalidChannelIndex);
|
||||
|
||||
switch(mDevice->FmtChans)
|
||||
{
|
||||
|
|
@ -98,6 +112,30 @@ void BackendBase::setDefaultWFXChannelOrder()
|
|||
mDevice->RealOut.ChannelIndex[SideLeft] = 6;
|
||||
mDevice->RealOut.ChannelIndex[SideRight] = 7;
|
||||
break;
|
||||
case DevFmtX714:
|
||||
mDevice->RealOut.ChannelIndex[FrontLeft] = 0;
|
||||
mDevice->RealOut.ChannelIndex[FrontRight] = 1;
|
||||
mDevice->RealOut.ChannelIndex[FrontCenter] = 2;
|
||||
mDevice->RealOut.ChannelIndex[LFE] = 3;
|
||||
mDevice->RealOut.ChannelIndex[BackLeft] = 4;
|
||||
mDevice->RealOut.ChannelIndex[BackRight] = 5;
|
||||
mDevice->RealOut.ChannelIndex[SideLeft] = 6;
|
||||
mDevice->RealOut.ChannelIndex[SideRight] = 7;
|
||||
mDevice->RealOut.ChannelIndex[TopFrontLeft] = 8;
|
||||
mDevice->RealOut.ChannelIndex[TopFrontRight] = 9;
|
||||
mDevice->RealOut.ChannelIndex[TopBackLeft] = 10;
|
||||
mDevice->RealOut.ChannelIndex[TopBackRight] = 11;
|
||||
break;
|
||||
case DevFmtX3D71:
|
||||
mDevice->RealOut.ChannelIndex[FrontLeft] = 0;
|
||||
mDevice->RealOut.ChannelIndex[FrontRight] = 1;
|
||||
mDevice->RealOut.ChannelIndex[FrontCenter] = 2;
|
||||
mDevice->RealOut.ChannelIndex[LFE] = 3;
|
||||
mDevice->RealOut.ChannelIndex[Aux0] = 4;
|
||||
mDevice->RealOut.ChannelIndex[Aux1] = 5;
|
||||
mDevice->RealOut.ChannelIndex[SideLeft] = 6;
|
||||
mDevice->RealOut.ChannelIndex[SideRight] = 7;
|
||||
break;
|
||||
case DevFmtAmbi3D:
|
||||
break;
|
||||
}
|
||||
|
|
@ -105,7 +143,7 @@ void BackendBase::setDefaultWFXChannelOrder()
|
|||
|
||||
void BackendBase::setDefaultChannelOrder()
|
||||
{
|
||||
mDevice->RealOut.ChannelIndex.fill(INVALID_CHANNEL_INDEX);
|
||||
mDevice->RealOut.ChannelIndex.fill(InvalidChannelIndex);
|
||||
|
||||
switch(mDevice->FmtChans)
|
||||
{
|
||||
|
|
@ -127,6 +165,30 @@ void BackendBase::setDefaultChannelOrder()
|
|||
mDevice->RealOut.ChannelIndex[SideLeft] = 6;
|
||||
mDevice->RealOut.ChannelIndex[SideRight] = 7;
|
||||
return;
|
||||
case DevFmtX714:
|
||||
mDevice->RealOut.ChannelIndex[FrontLeft] = 0;
|
||||
mDevice->RealOut.ChannelIndex[FrontRight] = 1;
|
||||
mDevice->RealOut.ChannelIndex[BackLeft] = 2;
|
||||
mDevice->RealOut.ChannelIndex[BackRight] = 3;
|
||||
mDevice->RealOut.ChannelIndex[FrontCenter] = 4;
|
||||
mDevice->RealOut.ChannelIndex[LFE] = 5;
|
||||
mDevice->RealOut.ChannelIndex[SideLeft] = 6;
|
||||
mDevice->RealOut.ChannelIndex[SideRight] = 7;
|
||||
mDevice->RealOut.ChannelIndex[TopFrontLeft] = 8;
|
||||
mDevice->RealOut.ChannelIndex[TopFrontRight] = 9;
|
||||
mDevice->RealOut.ChannelIndex[TopBackLeft] = 10;
|
||||
mDevice->RealOut.ChannelIndex[TopBackRight] = 11;
|
||||
break;
|
||||
case DevFmtX3D71:
|
||||
mDevice->RealOut.ChannelIndex[FrontLeft] = 0;
|
||||
mDevice->RealOut.ChannelIndex[FrontRight] = 1;
|
||||
mDevice->RealOut.ChannelIndex[Aux0] = 2;
|
||||
mDevice->RealOut.ChannelIndex[Aux1] = 3;
|
||||
mDevice->RealOut.ChannelIndex[FrontCenter] = 4;
|
||||
mDevice->RealOut.ChannelIndex[LFE] = 5;
|
||||
mDevice->RealOut.ChannelIndex[SideLeft] = 6;
|
||||
mDevice->RealOut.ChannelIndex[SideRight] = 7;
|
||||
return;
|
||||
|
||||
/* Same as WFX order */
|
||||
case DevFmtMono:
|
||||
|
|
@ -138,57 +200,3 @@ void BackendBase::setDefaultChannelOrder()
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
void BackendBase::setChannelOrderFromWFXMask(uint chanmask)
|
||||
{
|
||||
static constexpr uint x51{SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER
|
||||
| SPEAKER_LOW_FREQUENCY | SPEAKER_SIDE_LEFT | SPEAKER_SIDE_RIGHT};
|
||||
static constexpr uint x51rear{SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | SPEAKER_FRONT_CENTER
|
||||
| SPEAKER_LOW_FREQUENCY | SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT};
|
||||
/* Swap a 5.1 mask using the back channels for one with the sides. */
|
||||
if(chanmask == x51rear) chanmask = x51;
|
||||
|
||||
auto get_channel = [](const DWORD chanbit) noexcept -> al::optional<Channel>
|
||||
{
|
||||
switch(chanbit)
|
||||
{
|
||||
case SPEAKER_FRONT_LEFT: return al::make_optional(FrontLeft);
|
||||
case SPEAKER_FRONT_RIGHT: return al::make_optional(FrontRight);
|
||||
case SPEAKER_FRONT_CENTER: return al::make_optional(FrontCenter);
|
||||
case SPEAKER_LOW_FREQUENCY: return al::make_optional(LFE);
|
||||
case SPEAKER_BACK_LEFT: return al::make_optional(BackLeft);
|
||||
case SPEAKER_BACK_RIGHT: return al::make_optional(BackRight);
|
||||
case SPEAKER_FRONT_LEFT_OF_CENTER: break;
|
||||
case SPEAKER_FRONT_RIGHT_OF_CENTER: break;
|
||||
case SPEAKER_BACK_CENTER: return al::make_optional(BackCenter);
|
||||
case SPEAKER_SIDE_LEFT: return al::make_optional(SideLeft);
|
||||
case SPEAKER_SIDE_RIGHT: return al::make_optional(SideRight);
|
||||
case SPEAKER_TOP_CENTER: return al::make_optional(TopCenter);
|
||||
case SPEAKER_TOP_FRONT_LEFT: return al::make_optional(TopFrontLeft);
|
||||
case SPEAKER_TOP_FRONT_CENTER: return al::make_optional(TopFrontCenter);
|
||||
case SPEAKER_TOP_FRONT_RIGHT: return al::make_optional(TopFrontRight);
|
||||
case SPEAKER_TOP_BACK_LEFT: return al::make_optional(TopBackLeft);
|
||||
case SPEAKER_TOP_BACK_CENTER: return al::make_optional(TopBackCenter);
|
||||
case SPEAKER_TOP_BACK_RIGHT: return al::make_optional(TopBackRight);
|
||||
}
|
||||
WARN("Unhandled WFX channel bit 0x%lx\n", chanbit);
|
||||
return al::nullopt;
|
||||
};
|
||||
|
||||
const uint numchans{mDevice->channelsFromFmt()};
|
||||
uint idx{0};
|
||||
while(chanmask)
|
||||
{
|
||||
const int bit{al::countr_zero(chanmask)};
|
||||
const uint mask{1u << bit};
|
||||
chanmask &= ~mask;
|
||||
|
||||
if(auto label = get_channel(mask))
|
||||
{
|
||||
mDevice->RealOut.ChannelIndex[*label] = idx;
|
||||
if(++idx == numchans) break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue