diff options
author | Chris Robinson <[email protected]> | 2022-02-10 17:54:27 -0800 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2022-02-10 17:54:27 -0800 |
commit | ac42ac336ef014d6a84328570f665abc1d338315 (patch) | |
tree | adc633affe7d394361223c3fa1f68bded969da80 | |
parent | 804bf06369b82fe649c81a6a52400dc185242867 (diff) |
Don't hide EAX functions behind a context
The standard says a function being returned doesn't necessarily mean it's
usable, and calling them will return failure if called when not usable. The
config option still prevents it from being returned, to better hide it when
disabled globally.
-rw-r--r-- | al/extension.cpp | 118 | ||||
-rw-r--r-- | alc/alc.cpp | 32 |
2 files changed, 28 insertions, 122 deletions
diff --git a/al/extension.cpp b/al/extension.cpp index c442fa05..5dda2a86 100644 --- a/al/extension.cpp +++ b/al/extension.cpp @@ -32,10 +32,6 @@ #include "core/except.h" #include "opthelpers.h" -#ifdef ALSOFT_EAX -#include "eax_globals.h" -#include "eax_x_ram.h" -#endif // ALSOFT_EAX AL_API ALboolean AL_APIENTRY alIsExtensionPresent(const ALchar *extName) START_API_FUNC @@ -47,23 +43,6 @@ START_API_FUNC SETERR_RETURN(context, AL_INVALID_VALUE, AL_FALSE, "NULL pointer"); size_t len{strlen(extName)}; -#ifdef ALSOFT_EAX - if (al::strcasecmp(eax_v2_0_ext_name_1, extName) == 0 || - al::strcasecmp(eax_v2_0_ext_name_2, extName) == 0 || - al::strcasecmp(eax_v3_0_ext_name, extName) == 0 || - al::strcasecmp(eax_v4_0_ext_name, extName) == 0 || - al::strcasecmp(eax_v5_0_ext_name, extName) == 0) - { - const auto is_present = eax_g_is_enabled && context->eax_is_capable(); - return is_present ? AL_TRUE : AL_FALSE; - } - - if (al::strcasecmp(eax_x_ram_ext_name, extName) == 0) - { - const auto is_present = eax_g_is_enabled; - return is_present ? AL_TRUE : AL_FALSE; - } -#endif // ALSOFT_EAX const char *ptr{context->mExtensionList}; while(ptr && *ptr) { @@ -87,75 +66,6 @@ AL_API ALvoid* AL_APIENTRY alGetProcAddress(const ALchar *funcName) START_API_FUNC { if(!funcName) return nullptr; -#ifdef ALSOFT_EAX - if (al::strcasecmp(funcName, eax_eax_set_func_name) == 0) - { - if (!eax_g_is_enabled) - { - return nullptr; - } - - ContextRef context{GetContextRef()}; - - if (!context || !context->eax_is_capable()) - { - return nullptr; - } - - return reinterpret_cast<ALvoid*>(EAXSet); - } - - if (al::strcasecmp(funcName, eax_eax_get_func_name) == 0) - { - if (!eax_g_is_enabled) - { - return nullptr; - } - - ContextRef context{GetContextRef()}; - - if (!context || !context->eax_is_capable()) - { - return nullptr; - } - - return reinterpret_cast<ALvoid*>(EAXGet); - } - - if (al::strcasecmp(funcName, eax_eax_set_buffer_mode_func_name) == 0) - { - if (!eax_g_is_enabled) - { - return nullptr; - } - - ContextRef context{GetContextRef()}; - - if (!context) - { - return nullptr; - } - - return reinterpret_cast<ALvoid*>(EAXSetBufferMode); - } - - if (al::strcasecmp(funcName, eax_eax_get_buffer_mode_func_name) == 0) - { - if (!eax_g_is_enabled) - { - return nullptr; - } - - ContextRef context{GetContextRef()}; - - if (!context) - { - return nullptr; - } - - return reinterpret_cast<ALvoid*>(EAXGetBufferMode); - } -#endif // ALSOFT_EAX return alcGetProcAddress(nullptr, funcName); } END_API_FUNC @@ -164,34 +74,6 @@ AL_API ALenum AL_APIENTRY alGetEnumValue(const ALchar *enumName) START_API_FUNC { if(!enumName) return static_cast<ALenum>(0); -#ifdef ALSOFT_EAX - if (eax_g_is_enabled) - { - struct Descriptor - { - const char* name; - ALenum value; - }; // Descriptor - - constexpr Descriptor descriptors[] = - { - Descriptor{AL_EAX_RAM_SIZE_NAME, AL_EAX_RAM_SIZE}, - Descriptor{AL_EAX_RAM_FREE_NAME, AL_EAX_RAM_FREE}, - - Descriptor{AL_STORAGE_AUTOMATIC_NAME, AL_STORAGE_AUTOMATIC}, - Descriptor{AL_STORAGE_HARDWARE_NAME, AL_STORAGE_HARDWARE}, - Descriptor{AL_STORAGE_ACCESSIBLE_NAME, AL_STORAGE_ACCESSIBLE}, - }; // descriptors - - for (const auto& descriptor : descriptors) - { - if (strcmp(descriptor.name, enumName) == 0) - { - return descriptor.value; - } - } - } -#endif // ALSOFT_EAX return alcGetEnumValue(nullptr, enumName); } END_API_FUNC diff --git a/alc/alc.cpp b/alc/alc.cpp index d6bd005f..6358ad8b 100644 --- a/alc/alc.cpp +++ b/alc/alc.cpp @@ -452,6 +452,13 @@ const struct { DECL(alAuxiliaryEffectSlotPlayvSOFT), DECL(alAuxiliaryEffectSlotStopSOFT), DECL(alAuxiliaryEffectSlotStopvSOFT), +#ifdef ALSOFT_EAX +}, eaxFunctions[] = { + DECL(EAXGet), + DECL(EAXSet), + DECL(EAXGetBufferMode), + DECL(EAXSetBufferMode), +#endif }; #undef DECL @@ -882,6 +889,7 @@ constexpr struct { DECL(AL_STOP_SOURCES_ON_DISCONNECT_SOFT), #ifdef ALSOFT_EAX +}, eaxEnumerations[] = { DECL(AL_EAX_RAM_SIZE), DECL(AL_EAX_RAM_FREE), DECL(AL_STORAGE_AUTOMATIC), @@ -2943,15 +2951,23 @@ START_API_FUNC { DeviceRef dev{VerifyDevice(device)}; alcSetError(dev.get(), ALC_INVALID_VALUE); + return nullptr; } - else +#ifdef ALSOFT_EAX + if(eax_g_is_enabled) { - for(const auto &func : alcFunctions) + for(const auto &func : eaxFunctions) { if(strcmp(func.funcName, funcName) == 0) return func.address; } } +#endif + for(const auto &func : alcFunctions) + { + if(strcmp(func.funcName, funcName) == 0) + return func.address; + } return nullptr; } END_API_FUNC @@ -2964,15 +2980,23 @@ START_API_FUNC { DeviceRef dev{VerifyDevice(device)}; alcSetError(dev.get(), ALC_INVALID_VALUE); + return 0; } - else +#ifdef ALSOFT_EAX + if(eax_g_is_enabled) { - for(const auto &enm : alcEnumerations) + for(const auto &enm : eaxEnumerations) { if(strcmp(enm.enumName, enumName) == 0) return enm.value; } } +#endif + for(const auto &enm : alcEnumerations) + { + if(strcmp(enm.enumName, enumName) == 0) + return enm.value; + } return 0; } |