Move alext functions out of qal.h

Functions from extensions shouldn't be hardcoded, instead make them optional
This commit is contained in:
smallmodel 2025-03-24 21:57:03 +01:00
parent 50e3aa1f61
commit 382b6b3ade
No known key found for this signature in database
GPG key ID: A96F163ED4891440
3 changed files with 44 additions and 33 deletions

View file

@ -88,9 +88,6 @@ LPALGETBUFFERI qalGetBufferi;
LPALDOPPLERFACTOR qalDopplerFactor;
LPALSPEEDOFSOUND qalSpeedOfSound;
LPALDISTANCEMODEL qalDistanceModel;
#ifdef AL_SOFT_source_resampler
LPALGETSTRINGISOFT qalGetStringiSOFT;
#endif
LPALCCREATECONTEXT qalcCreateContext;
LPALCMAKECONTEXTCURRENT qalcMakeContextCurrent;
@ -212,9 +209,6 @@ qboolean QAL_Init(const char *libname)
qalDopplerFactor = GPA("alDopplerFactor");
qalSpeedOfSound = GPA("alSpeedOfSound");
qalDistanceModel = GPA("alDistanceModel");
#ifdef AL_SOFT_source_resampler
qalGetStringiSOFT = GPA("alGetStringiSOFT");
#endif
qalcCreateContext = GPA("alcCreateContext");
qalcMakeContextCurrent = GPA("alcMakeContextCurrent");

View file

@ -135,9 +135,6 @@ extern LPALGETBUFFERIV qalGetBufferiv;
extern LPALDOPPLERFACTOR qalDopplerFactor;
extern LPALSPEEDOFSOUND qalSpeedOfSound;
extern LPALDISTANCEMODEL qalDistanceModel;
#ifdef AL_SOFT_source_resampler
extern LPALGETSTRINGISOFT qalGetStringiSOFT;
#endif
extern LPALCCREATECONTEXT qalcCreateContext;
extern LPALCMAKECONTEXTCURRENT qalcMakeContextCurrent;

View file

@ -128,6 +128,13 @@ static ALuint S_OPENAL_Format(float width, int channels);
# define ALDRIVER_DEFAULT "libopenal.so.1"
#endif
//
// alext
//
#ifdef AL_SOFT_source_resampler
LPALGETSTRINGISOFT qalGetStringiSOFT;
#endif
/*
==============
__alDieIfError
@ -268,8 +275,6 @@ static bool S_OPENAL_InitContext()
{
const char *dev;
int attrlist[10];
size_t i;
size_t numResamplers;
Com_DPrintf("OpenAL: Context initialization\n");
@ -427,23 +432,6 @@ static bool S_OPENAL_InitContext()
qalcMakeContextCurrent(al_context_id);
alDieIfError();
#ifdef AL_SOFT_source_resampler
al_default_resampler_index = qalGetInteger(AL_DEFAULT_RESAMPLER_SOFT);
alDieIfError();
al_resampler_index = al_default_resampler_index;
numResamplers = qalGetInteger(AL_NUM_RESAMPLERS_SOFT);
alDieIfError();
for (i = 0; i < numResamplers; i++) {
const ALchar* resamplerName = qalGetStringiSOFT(AL_RESAMPLER_NAME_SOFT, i);
if (Q_stristr(resamplerName, "spline")) {
Com_Printf("OpenAL: Using %s as the resampler.\n", resamplerName);
al_resampler_index = i;
break;
}
}
#endif
Com_Printf("AL_VENDOR: %s\n", qalGetString(AL_VENDOR));
alDieIfError();
@ -472,11 +460,7 @@ S_OPENAL_InitExtensions
*/
static bool S_OPENAL_InitExtensions()
{
ima4_ext = qalIsExtensionPresent("AL_EXT_IMA4");
soft_block_align = qalIsExtensionPresent("AL_SOFT_block_alignment");
return true;
/*
extensions_table_t extensions_table[4] = {
"alutLoadMP3_LOKI",
(void **)&_alutLoadMP3_LOKI,
@ -488,6 +472,17 @@ static bool S_OPENAL_InitExtensions()
(void **)&_alReverbDelay_LOKI,
true
};
*/
extensions_table_t extensions_table[] = {
#ifdef AL_SOFT_source_resampler
extensions_table_t {
"alGetStringiSOFT", (void **)&qalGetStringiSOFT,
false, },
#endif
extensions_table_t {NULL, NULL, NULL}
};
extensions_table_t *i;
for (i = extensions_table; i->funcname; ++i) {
@ -510,6 +505,9 @@ static bool S_OPENAL_InitExtensions()
Com_Printf("...found.\n");
}
ima4_ext = qalIsExtensionPresent("AL_EXT_IMA4");
soft_block_align = qalIsExtensionPresent("AL_SOFT_block_alignment");
qalGetError();
return true;
}
@ -630,6 +628,28 @@ qboolean S_OPENAL_Init()
qalListenerf(AL_GAIN, al_current_volume);
alDieIfError();
#ifdef AL_SOFT_source_resampler
if (qalGetStringiSOFT) {
size_t numResamplers;
size_t i;
al_default_resampler_index = qalGetInteger(AL_DEFAULT_RESAMPLER_SOFT);
alDieIfError();
al_resampler_index = al_default_resampler_index;
numResamplers = qalGetInteger(AL_NUM_RESAMPLERS_SOFT);
alDieIfError();
for (i = 0; i < numResamplers; i++) {
const ALchar *resamplerName = qalGetStringiSOFT(AL_RESAMPLER_NAME_SOFT, i);
if (Q_stristr(resamplerName, "spline")) {
Com_Printf("OpenAL: Using %s as the resampler.\n", resamplerName);
al_resampler_index = i;
break;
}
}
}
#endif
for (i = 0; i < MAX_SOUNDSYSTEM_CHANNELS_3D; i++) {
if (!S_OPENAL_InitChannel(i, &openal.chan_3D[i])) {
return false;