diff options
author | Chris Robinson <[email protected]> | 2015-10-02 23:54:30 -0700 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2015-10-03 19:59:21 -0700 |
commit | aa10068ca20c2241c8d80627a5be3aeb39efcea2 (patch) | |
tree | cfe254301c5cb0f93940e790709aaf5f5b96e1ea | |
parent | 0fcd497796639a8af916dcfb0c61c67c1e76c6aa (diff) |
Add methods to enumerate and query device HRTFs
Currently just returns a dummy entry.
-rw-r--r-- | Alc/ALc.c | 123 | ||||
-rw-r--r-- | OpenAL32/Include/alMain.h | 4 |
2 files changed, 91 insertions, 36 deletions
@@ -162,6 +162,7 @@ static const ALCfunction alcFunctions[] = { DECL(alcGetInteger64vSOFT), + DECL(alcGetStringiSOFT), DECL(alcResetDeviceSOFT), DECL(alEnable), @@ -389,6 +390,8 @@ static const ALCenums enumeration[] = { DECL(ALC_HRTF_REQUIRED_SOFT), DECL(ALC_HRTF_HEADPHONES_DETECTED_SOFT), DECL(ALC_HRTF_UNSUPPORTED_FORMAT_SOFT), + DECL(ALC_NUM_HRTF_SPECIFIER_SOFT), + DECL(ALC_HRTF_SPECIFIER_SOFT), DECL(ALC_NO_ERROR), DECL(ALC_INVALID_DEVICE), @@ -2662,6 +2665,17 @@ ALC_API const ALCchar* ALC_APIENTRY alcGetString(ALCdevice *Device, ALCenum para } break; + case ALC_HRTF_SPECIFIER_SOFT: + if(!VerifyDevice(Device)) + alcSetError(NULL, ALC_INVALID_DEVICE); + else + { + LockLists(); + value = (Device->Hrtf ? "Preset 0" : ""); + UnlockLists(); + } + break; + default: Device = VerifyDevice(Device); alcSetError(Device, ALC_INVALID_ENUM); @@ -2868,6 +2882,10 @@ static ALCsizei GetIntegerv(ALCdevice *device, ALCenum param, ALCsizei size, ALC values[0] = device->Hrtf_Status; return 1; + case ALC_NUM_HRTF_SPECIFIER_SOFT: + values[0] = 1; + return 1; + default: alcSetError(device, ALC_INVALID_ENUM); return 0; @@ -3279,42 +3297,6 @@ ALC_API ALCdevice* ALC_APIENTRY alcGetContextsDevice(ALCcontext *Context) } -/* alcResetDeviceSOFT - * - * Resets the given device output, using the specified attribute list. - */ -ALC_API ALCboolean ALC_APIENTRY alcResetDeviceSOFT(ALCdevice *device, const ALCint *attribs) -{ - ALCenum err; - - LockLists(); - if(!(device=VerifyDevice(device)) || device->Type == Capture || !device->Connected) - { - UnlockLists(); - alcSetError(device, ALC_INVALID_DEVICE); - if(device) ALCdevice_DecRef(device); - return ALC_FALSE; - } - - if((err=UpdateDeviceParams(device, attribs)) != ALC_NO_ERROR) - { - UnlockLists(); - alcSetError(device, err); - if(err == ALC_INVALID_DEVICE) - { - V0(device->Backend,lock)(); - aluHandleDisconnect(device); - V0(device->Backend,unlock)(); - } - ALCdevice_DecRef(device); - return ALC_FALSE; - } - UnlockLists(); - ALCdevice_DecRef(device); - - return ALC_TRUE; -} - /* alcOpenDevice * * Opens the named device. @@ -3982,3 +3964,72 @@ ALC_API void ALC_APIENTRY alcDeviceResumeSOFT(ALCdevice *device) } if(device) ALCdevice_DecRef(device); } + + +/************************************************ + * ALC HRTF functions + ************************************************/ + +/* alcGetStringiSOFT + * + * Gets a string parameter at the given index. + */ +ALC_API const ALCchar* ALC_APIENTRY alcGetStringiSOFT(ALCdevice *device, ALenum paramName, ALsizei index) +{ + const ALCchar *str = NULL; + + if(!(device=VerifyDevice(device)) || device->Type == Capture) + alcSetError(device, ALC_INVALID_DEVICE); + else switch(paramName) + { + case ALC_HRTF_SPECIFIER_SOFT: + if(index < 0 || index > 0) + alcSetError(device, ALC_INVALID_VALUE); + else + str = "Preset 0"; + break; + + default: + alcSetError(device, ALC_INVALID_ENUM); + break; + } + if(device) ALCdevice_DecRef(device); + + return str; +} + +/* alcResetDeviceSOFT + * + * Resets the given device output, using the specified attribute list. + */ +ALC_API ALCboolean ALC_APIENTRY alcResetDeviceSOFT(ALCdevice *device, const ALCint *attribs) +{ + ALCenum err; + + LockLists(); + if(!(device=VerifyDevice(device)) || device->Type == Capture || !device->Connected) + { + UnlockLists(); + alcSetError(device, ALC_INVALID_DEVICE); + if(device) ALCdevice_DecRef(device); + return ALC_FALSE; + } + + if((err=UpdateDeviceParams(device, attribs)) != ALC_NO_ERROR) + { + UnlockLists(); + alcSetError(device, err); + if(err == ALC_INVALID_DEVICE) + { + V0(device->Backend,lock)(); + aluHandleDisconnect(device); + V0(device->Backend,unlock)(); + } + ALCdevice_DecRef(device); + return ALC_FALSE; + } + UnlockLists(); + ALCdevice_DecRef(device); + + return ALC_TRUE; +} diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h index 17ce9122..5051baf7 100644 --- a/OpenAL32/Include/alMain.h +++ b/OpenAL32/Include/alMain.h @@ -50,8 +50,12 @@ #define ALC_HRTF_REQUIRED_SOFT 0x0003 #define ALC_HRTF_HEADPHONES_DETECTED_SOFT 0x0004 #define ALC_HRTF_UNSUPPORTED_FORMAT_SOFT 0x0005 +#define ALC_NUM_HRTF_SPECIFIER_SOFT 0x1994 +#define ALC_HRTF_SPECIFIER_SOFT 0x1995 +typedef const ALCchar* (ALC_APIENTRY*LPALCGETSTRINGISOFT)(ALCdevice *device, ALenum paramName, ALsizei index); typedef ALCboolean (ALC_APIENTRY*LPALCRESETDEVICESOFT)(ALCdevice *device, const ALCint *attribs); #ifdef AL_ALEXT_PROTOTYPES +ALC_API const ALCchar* ALC_APIENTRY alcGetStringiSOFT(ALCdevice *device, ALenum paramName, ALsizei index); ALC_API ALCboolean ALC_APIENTRY alcResetDeviceSOFT(ALCdevice *device, const ALCint *attribs); #endif #endif |