Fix OpenAL backend on macOS
OpenALStream was querying the backend for AL_EXT_float32 support (which suceeds), but AL_FORMAT_STEREO_FLOAT32 was defined incorrectly. Also changes OpenALStream to query for AL_EXT_MCFORMATS (multichannel support) rather than hard-coding that it doesn't work on macOS.
This commit is contained in:
parent
c07058a4ad
commit
3bfebf396a
|
@ -159,13 +159,14 @@ void OpenALStream::SoundLoop()
|
|||
{
|
||||
Common::SetCurrentThreadName("Audio thread - openal");
|
||||
|
||||
bool surround_capable = SConfig::GetInstance().bDPL2Decoder;
|
||||
bool float32_capable = false;
|
||||
bool fixed32_capable = false;
|
||||
bool float32_capable = alIsExtensionPresent("AL_EXT_float32") != 0;
|
||||
bool surround_capable =
|
||||
SConfig::GetInstance().bDPL2Decoder && alIsExtensionPresent("AL_EXT_MCFORMATS");
|
||||
|
||||
#if defined(__APPLE__)
|
||||
surround_capable = false;
|
||||
#endif
|
||||
// As there is no extension to check for 32-bit fixed point support
|
||||
// and we know that only a X-Fi with hardware OpenAL supports it,
|
||||
// we just check if one is being used.
|
||||
bool fixed32_capable = strstr(alGetString(AL_RENDERER), "X-Fi") != nullptr;
|
||||
|
||||
u32 ulFrequency = m_mixer->GetSampleRate();
|
||||
numBuffers = SConfig::GetInstance().iLatency + 2; // OpenAL requires a minimum of two buffers
|
||||
|
@ -173,15 +174,6 @@ void OpenALStream::SoundLoop()
|
|||
memset(uiBuffers, 0, numBuffers * sizeof(ALuint));
|
||||
uiSource = 0;
|
||||
|
||||
if (alIsExtensionPresent("AL_EXT_float32"))
|
||||
float32_capable = true;
|
||||
|
||||
// As there is no extension to check for 32-bit fixed point support
|
||||
// and we know that only a X-Fi with hardware OpenAL supports it,
|
||||
// we just check if one is being used.
|
||||
if (strstr(alGetString(AL_RENDERER), "X-Fi"))
|
||||
fixed32_capable = true;
|
||||
|
||||
// Clear error state before querying or else we get false positives.
|
||||
ALenum err = alGetError();
|
||||
|
||||
|
|
|
@ -42,19 +42,23 @@
|
|||
#define FRAME_SURROUND_INT32 SURROUND_CHANNELS* SIZE_INT32
|
||||
#endif
|
||||
|
||||
#if defined(__APPLE__)
|
||||
// OS X does not have the alext AL_FORMAT_STEREO_FLOAT32, AL_FORMAT_STEREO32,
|
||||
// AL_FORMAT_51CHN32 and AL_FORMAT_51CHN16 yet.
|
||||
#define AL_FORMAT_STEREO_FLOAT32 0
|
||||
#define AL_FORMAT_STEREO32 0
|
||||
#define AL_FORMAT_51CHN32 0
|
||||
#define AL_FORMAT_51CHN16 0
|
||||
#elif defined(_WIN32)
|
||||
// From AL_EXT_float32
|
||||
#ifndef AL_FORMAT_STEREO_FLOAT32
|
||||
#define AL_FORMAT_STEREO_FLOAT32 0x10011
|
||||
#endif
|
||||
|
||||
// From AL_EXT_MCFORMATS
|
||||
#ifndef AL_FORMAT_51CHN16
|
||||
#define AL_FORMAT_51CHN16 0x120B
|
||||
#endif
|
||||
#ifndef AL_FORMAT_51CHN32
|
||||
#define AL_FORMAT_51CHN32 0x120C
|
||||
#endif
|
||||
|
||||
// Only X-Fi on Windows supports the alext AL_FORMAT_STEREO32 alext for now,
|
||||
// but it is not documented or in "OpenAL/include/al.h".
|
||||
#ifndef AL_FORMAT_STEREO32
|
||||
#define AL_FORMAT_STEREO32 0x1203
|
||||
#else
|
||||
#define AL_FORMAT_STEREO32 0
|
||||
#endif
|
||||
|
||||
class OpenALStream final : public SoundStream
|
||||
|
|
Loading…
Reference in New Issue