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.
This commit is contained in:
parent
804bf06369
commit
ac42ac336e
118
al/extension.cpp
118
al/extension.cpp
@ -32,10 +32,6 @@
|
|||||||
#include "core/except.h"
|
#include "core/except.h"
|
||||||
#include "opthelpers.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)
|
AL_API ALboolean AL_APIENTRY alIsExtensionPresent(const ALchar *extName)
|
||||||
START_API_FUNC
|
START_API_FUNC
|
||||||
@ -47,23 +43,6 @@ START_API_FUNC
|
|||||||
SETERR_RETURN(context, AL_INVALID_VALUE, AL_FALSE, "NULL pointer");
|
SETERR_RETURN(context, AL_INVALID_VALUE, AL_FALSE, "NULL pointer");
|
||||||
|
|
||||||
size_t len{strlen(extName)};
|
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};
|
const char *ptr{context->mExtensionList};
|
||||||
while(ptr && *ptr)
|
while(ptr && *ptr)
|
||||||
{
|
{
|
||||||
@ -87,75 +66,6 @@ AL_API ALvoid* AL_APIENTRY alGetProcAddress(const ALchar *funcName)
|
|||||||
START_API_FUNC
|
START_API_FUNC
|
||||||
{
|
{
|
||||||
if(!funcName) return nullptr;
|
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);
|
return alcGetProcAddress(nullptr, funcName);
|
||||||
}
|
}
|
||||||
END_API_FUNC
|
END_API_FUNC
|
||||||
@ -164,34 +74,6 @@ AL_API ALenum AL_APIENTRY alGetEnumValue(const ALchar *enumName)
|
|||||||
START_API_FUNC
|
START_API_FUNC
|
||||||
{
|
{
|
||||||
if(!enumName) return static_cast<ALenum>(0);
|
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);
|
return alcGetEnumValue(nullptr, enumName);
|
||||||
}
|
}
|
||||||
END_API_FUNC
|
END_API_FUNC
|
||||||
|
32
alc/alc.cpp
32
alc/alc.cpp
@ -452,6 +452,13 @@ const struct {
|
|||||||
DECL(alAuxiliaryEffectSlotPlayvSOFT),
|
DECL(alAuxiliaryEffectSlotPlayvSOFT),
|
||||||
DECL(alAuxiliaryEffectSlotStopSOFT),
|
DECL(alAuxiliaryEffectSlotStopSOFT),
|
||||||
DECL(alAuxiliaryEffectSlotStopvSOFT),
|
DECL(alAuxiliaryEffectSlotStopvSOFT),
|
||||||
|
#ifdef ALSOFT_EAX
|
||||||
|
}, eaxFunctions[] = {
|
||||||
|
DECL(EAXGet),
|
||||||
|
DECL(EAXSet),
|
||||||
|
DECL(EAXGetBufferMode),
|
||||||
|
DECL(EAXSetBufferMode),
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
#undef DECL
|
#undef DECL
|
||||||
|
|
||||||
@ -882,6 +889,7 @@ constexpr struct {
|
|||||||
DECL(AL_STOP_SOURCES_ON_DISCONNECT_SOFT),
|
DECL(AL_STOP_SOURCES_ON_DISCONNECT_SOFT),
|
||||||
|
|
||||||
#ifdef ALSOFT_EAX
|
#ifdef ALSOFT_EAX
|
||||||
|
}, eaxEnumerations[] = {
|
||||||
DECL(AL_EAX_RAM_SIZE),
|
DECL(AL_EAX_RAM_SIZE),
|
||||||
DECL(AL_EAX_RAM_FREE),
|
DECL(AL_EAX_RAM_FREE),
|
||||||
DECL(AL_STORAGE_AUTOMATIC),
|
DECL(AL_STORAGE_AUTOMATIC),
|
||||||
@ -2943,15 +2951,23 @@ START_API_FUNC
|
|||||||
{
|
{
|
||||||
DeviceRef dev{VerifyDevice(device)};
|
DeviceRef dev{VerifyDevice(device)};
|
||||||
alcSetError(dev.get(), ALC_INVALID_VALUE);
|
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)
|
if(strcmp(func.funcName, funcName) == 0)
|
||||||
return func.address;
|
return func.address;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
for(const auto &func : alcFunctions)
|
||||||
|
{
|
||||||
|
if(strcmp(func.funcName, funcName) == 0)
|
||||||
|
return func.address;
|
||||||
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
END_API_FUNC
|
END_API_FUNC
|
||||||
@ -2964,15 +2980,23 @@ START_API_FUNC
|
|||||||
{
|
{
|
||||||
DeviceRef dev{VerifyDevice(device)};
|
DeviceRef dev{VerifyDevice(device)};
|
||||||
alcSetError(dev.get(), ALC_INVALID_VALUE);
|
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)
|
if(strcmp(enm.enumName, enumName) == 0)
|
||||||
return enm.value;
|
return enm.value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
for(const auto &enm : alcEnumerations)
|
||||||
|
{
|
||||||
|
if(strcmp(enm.enumName, enumName) == 0)
|
||||||
|
return enm.value;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user