mirror of
https://github.com/ZDoom/qzdoom-gpl.git
synced 2024-11-18 01:51:40 +00:00
Use structs to store available extensions
This commit is contained in:
parent
0f234fb36d
commit
42fdc3c059
2 changed files with 21 additions and 17 deletions
|
@ -555,8 +555,7 @@ static void LoadALFunc(const char *name, T *x)
|
||||||
{ *x = reinterpret_cast<T>(alGetProcAddress(name)); }
|
{ *x = reinterpret_cast<T>(alGetProcAddress(name)); }
|
||||||
|
|
||||||
OpenALSoundRenderer::OpenALSoundRenderer()
|
OpenALSoundRenderer::OpenALSoundRenderer()
|
||||||
: Device(NULL), Context(NULL), SrcDistanceModel(false), SFXPaused(0),
|
: Device(NULL), Context(NULL), SFXPaused(0), PrevEnvironment(NULL), EnvSlot(0)
|
||||||
PrevEnvironment(NULL), EnvSlot(0)
|
|
||||||
{
|
{
|
||||||
EnvFilters[0] = EnvFilters[1] = 0;
|
EnvFilters[0] = EnvFilters[1] = 0;
|
||||||
|
|
||||||
|
@ -592,8 +591,6 @@ OpenALSoundRenderer::OpenALSoundRenderer()
|
||||||
DPrintf(" ALC Version: "TEXTCOLOR_BLUE"%d.%d\n", major, minor);
|
DPrintf(" ALC Version: "TEXTCOLOR_BLUE"%d.%d\n", major, minor);
|
||||||
DPrintf(" ALC Extensions: "TEXTCOLOR_ORANGE"%s\n", alcGetString(Device, ALC_EXTENSIONS));
|
DPrintf(" ALC Extensions: "TEXTCOLOR_ORANGE"%s\n", alcGetString(Device, ALC_EXTENSIONS));
|
||||||
|
|
||||||
DisconnectNotify = alcIsExtensionPresent(Device, "ALC_EXT_disconnect");
|
|
||||||
|
|
||||||
std::vector<ALCint> attribs;
|
std::vector<ALCint> attribs;
|
||||||
if(*snd_samplerate > 0)
|
if(*snd_samplerate > 0)
|
||||||
{
|
{
|
||||||
|
@ -627,13 +624,15 @@ OpenALSoundRenderer::OpenALSoundRenderer()
|
||||||
DPrintf(" Version: "TEXTCOLOR_ORANGE"%s\n", alGetString(AL_VERSION));
|
DPrintf(" Version: "TEXTCOLOR_ORANGE"%s\n", alGetString(AL_VERSION));
|
||||||
DPrintf(" Extensions: "TEXTCOLOR_ORANGE"%s\n", alGetString(AL_EXTENSIONS));
|
DPrintf(" Extensions: "TEXTCOLOR_ORANGE"%s\n", alGetString(AL_EXTENSIONS));
|
||||||
|
|
||||||
SrcDistanceModel = alIsExtensionPresent("AL_EXT_source_distance_model");
|
ALC.EXT_EFX = alcIsExtensionPresent(Device, "ALC_EXT_EFX");
|
||||||
LoopPoints = alIsExtensionPresent("AL_SOFT_loop_points");
|
ALC.EXT_disconnect = alcIsExtensionPresent(Device, "ALC_EXT_disconnect");;
|
||||||
|
AL.EXT_source_distance_model = alIsExtensionPresent("AL_EXT_source_distance_model");
|
||||||
|
AL.SOFT_loop_points = alIsExtensionPresent("AL_SOFT_loop_points");
|
||||||
|
|
||||||
alDopplerFactor(0.5f);
|
alDopplerFactor(0.5f);
|
||||||
alSpeedOfSound(343.3f * 96.0f);
|
alSpeedOfSound(343.3f * 96.0f);
|
||||||
alDistanceModel(AL_INVERSE_DISTANCE);
|
alDistanceModel(AL_INVERSE_DISTANCE);
|
||||||
if(SrcDistanceModel)
|
if(AL.EXT_source_distance_model)
|
||||||
alEnable(AL_SOURCE_DISTANCE_MODEL);
|
alEnable(AL_SOURCE_DISTANCE_MODEL);
|
||||||
|
|
||||||
ALenum err = getALError();
|
ALenum err = getALError();
|
||||||
|
@ -676,7 +675,7 @@ OpenALSoundRenderer::OpenALSoundRenderer()
|
||||||
DPrintf(" Allocated "TEXTCOLOR_BLUE"%zu"TEXTCOLOR_NORMAL" sources\n", Sources.size());
|
DPrintf(" Allocated "TEXTCOLOR_BLUE"%zu"TEXTCOLOR_NORMAL" sources\n", Sources.size());
|
||||||
|
|
||||||
WasInWater = false;
|
WasInWater = false;
|
||||||
if(*snd_efx && alcIsExtensionPresent(Device, "ALC_EXT_EFX"))
|
if(*snd_efx && ALC.EXT_EFX)
|
||||||
{
|
{
|
||||||
// EFX function pointers
|
// EFX function pointers
|
||||||
#define LOAD_FUNC(x) (LoadALFunc(#x, &x))
|
#define LOAD_FUNC(x) (LoadALFunc(#x, &x))
|
||||||
|
@ -920,7 +919,7 @@ SoundHandle OpenALSoundRenderer::LoadSoundRaw(BYTE *sfxdata, int length, int fre
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
if((loopstart > 0 || loopend > 0) && LoopPoints)
|
if((loopstart > 0 || loopend > 0) && AL.SOFT_loop_points)
|
||||||
{
|
{
|
||||||
if(loopstart < 0)
|
if(loopstart < 0)
|
||||||
loopstart = 0;
|
loopstart = 0;
|
||||||
|
@ -1176,7 +1175,7 @@ FISoundChannel *OpenALSoundRenderer::StartSound3D(SoundHandle sfx, SoundListener
|
||||||
{
|
{
|
||||||
if(rolloff->RolloffType == ROLLOFF_Log)
|
if(rolloff->RolloffType == ROLLOFF_Log)
|
||||||
{
|
{
|
||||||
if(SrcDistanceModel)
|
if(AL.EXT_source_distance_model)
|
||||||
alSourcei(source, AL_DISTANCE_MODEL, AL_INVERSE_DISTANCE);
|
alSourcei(source, AL_DISTANCE_MODEL, AL_INVERSE_DISTANCE);
|
||||||
alSourcef(source, AL_REFERENCE_DISTANCE, rolloff->MinDistance/distscale);
|
alSourcef(source, AL_REFERENCE_DISTANCE, rolloff->MinDistance/distscale);
|
||||||
alSourcef(source, AL_MAX_DISTANCE, (1000.f+rolloff->MinDistance)/distscale);
|
alSourcef(source, AL_MAX_DISTANCE, (1000.f+rolloff->MinDistance)/distscale);
|
||||||
|
@ -1184,7 +1183,7 @@ FISoundChannel *OpenALSoundRenderer::StartSound3D(SoundHandle sfx, SoundListener
|
||||||
manualGain = false;
|
manualGain = false;
|
||||||
gain = 1.f;
|
gain = 1.f;
|
||||||
}
|
}
|
||||||
else if(rolloff->RolloffType == ROLLOFF_Linear && SrcDistanceModel)
|
else if(rolloff->RolloffType == ROLLOFF_Linear && AL.EXT_source_distance_model)
|
||||||
{
|
{
|
||||||
alSourcei(source, AL_DISTANCE_MODEL, AL_LINEAR_DISTANCE);
|
alSourcei(source, AL_DISTANCE_MODEL, AL_LINEAR_DISTANCE);
|
||||||
alSourcef(source, AL_REFERENCE_DISTANCE, rolloff->MinDistance/distscale);
|
alSourcef(source, AL_REFERENCE_DISTANCE, rolloff->MinDistance/distscale);
|
||||||
|
@ -1196,7 +1195,7 @@ FISoundChannel *OpenALSoundRenderer::StartSound3D(SoundHandle sfx, SoundListener
|
||||||
}
|
}
|
||||||
if(manualGain)
|
if(manualGain)
|
||||||
{
|
{
|
||||||
if(SrcDistanceModel)
|
if(AL.EXT_source_distance_model)
|
||||||
alSourcei(source, AL_DISTANCE_MODEL, AL_NONE);
|
alSourcei(source, AL_DISTANCE_MODEL, AL_NONE);
|
||||||
if((chanflags&SNDF_AREA) && rolloff->MinDistance < 32.f)
|
if((chanflags&SNDF_AREA) && rolloff->MinDistance < 32.f)
|
||||||
alSourcef(source, AL_REFERENCE_DISTANCE, 32.f/distscale);
|
alSourcef(source, AL_REFERENCE_DISTANCE, 32.f/distscale);
|
||||||
|
@ -1532,7 +1531,7 @@ void OpenALSoundRenderer::UpdateSounds()
|
||||||
foreach(SoundStream*, stream, Streams)
|
foreach(SoundStream*, stream, Streams)
|
||||||
(*stream)->IsEnded();
|
(*stream)->IsEnded();
|
||||||
|
|
||||||
if(DisconnectNotify)
|
if(ALC.EXT_disconnect)
|
||||||
{
|
{
|
||||||
ALCint connected = ALC_TRUE;
|
ALCint connected = ALC_TRUE;
|
||||||
alcGetIntegerv(Device, ALC_CONNECTED, 1, &connected);
|
alcGetIntegerv(Device, ALC_CONNECTED, 1, &connected);
|
||||||
|
|
|
@ -122,6 +122,15 @@ public:
|
||||||
virtual FString GatherStats();
|
virtual FString GatherStats();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
struct {
|
||||||
|
bool EXT_EFX;
|
||||||
|
bool EXT_disconnect;
|
||||||
|
} ALC;
|
||||||
|
struct {
|
||||||
|
bool EXT_source_distance_model;
|
||||||
|
bool SOFT_loop_points;
|
||||||
|
} AL;
|
||||||
|
|
||||||
// EFX Extension function pointer variables. Loaded after context creation
|
// EFX Extension function pointer variables. Loaded after context creation
|
||||||
// if EFX is supported. These pointers may be context- or device-dependant,
|
// if EFX is supported. These pointers may be context- or device-dependant,
|
||||||
// thus can't be static
|
// thus can't be static
|
||||||
|
@ -170,10 +179,6 @@ private:
|
||||||
ALCdevice *Device;
|
ALCdevice *Device;
|
||||||
ALCcontext *Context;
|
ALCcontext *Context;
|
||||||
|
|
||||||
bool LoopPoints;
|
|
||||||
bool SrcDistanceModel;
|
|
||||||
bool DisconnectNotify;
|
|
||||||
|
|
||||||
std::vector<ALuint> Sources;
|
std::vector<ALuint> Sources;
|
||||||
|
|
||||||
ALfloat SfxVolume;
|
ALfloat SfxVolume;
|
||||||
|
|
Loading…
Reference in a new issue