undo my attempts at configuring the attenuation model per-source, after closer inspection OpenAL doesn't support what I was trying to do :(
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@11421 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
60aff6dd1b
commit
9f909b4c26
@ -38,7 +38,6 @@
|
|||||||
|
|
||||||
SFXBuffer::SFXBuffer(const std::string& file,
|
SFXBuffer::SFXBuffer(const std::string& file,
|
||||||
bool positional,
|
bool positional,
|
||||||
ALuint rolloffType,
|
|
||||||
float rolloff,
|
float rolloff,
|
||||||
float gain)
|
float gain)
|
||||||
{
|
{
|
||||||
@ -51,7 +50,6 @@ SFXBuffer::SFXBuffer(const std::string& file,
|
|||||||
m_rolloff = rolloff;
|
m_rolloff = rolloff;
|
||||||
m_positional = positional;
|
m_positional = positional;
|
||||||
m_gain = gain;
|
m_gain = gain;
|
||||||
m_rolloffType = rolloffType;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
@ -65,21 +63,10 @@ SFXBuffer::SFXBuffer(const std::string& file,
|
|||||||
m_positional = false;
|
m_positional = false;
|
||||||
m_loaded = false;
|
m_loaded = false;
|
||||||
m_file = file;
|
m_file = file;
|
||||||
m_rolloffType = AL_INVERSE_DISTANCE_CLAMPED;
|
|
||||||
|
|
||||||
node->get("rolloff", &m_rolloff );
|
node->get("rolloff", &m_rolloff );
|
||||||
node->get("positional", &m_positional );
|
node->get("positional", &m_positional );
|
||||||
node->get("volume", &m_gain );
|
node->get("volume", &m_gain );
|
||||||
|
|
||||||
std::string rolloffType;
|
|
||||||
node->get("rolloff_type", &rolloffType);
|
|
||||||
|
|
||||||
if (rolloffType == "inverse")
|
|
||||||
m_rolloffType = AL_INVERSE_DISTANCE_CLAMPED;
|
|
||||||
else if (rolloffType == "linear")
|
|
||||||
m_rolloffType = AL_LINEAR_DISTANCE_CLAMPED;
|
|
||||||
else if (rolloffType != "")
|
|
||||||
fprintf(stderr, "[SfxBuffer] Unknown rolloff type '%s'\n", rolloffType.c_str());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
|
@ -55,7 +55,6 @@ private:
|
|||||||
bool m_positional;
|
bool m_positional;
|
||||||
float m_rolloff;
|
float m_rolloff;
|
||||||
float m_gain;
|
float m_gain;
|
||||||
ALuint m_rolloffType;
|
|
||||||
|
|
||||||
bool loadVorbisBuffer(const std::string &name, ALuint buffer);
|
bool loadVorbisBuffer(const std::string &name, ALuint buffer);
|
||||||
|
|
||||||
@ -63,7 +62,6 @@ public:
|
|||||||
|
|
||||||
SFXBuffer(const std::string& file,
|
SFXBuffer(const std::string& file,
|
||||||
bool positional,
|
bool positional,
|
||||||
ALuint rolloffType,
|
|
||||||
float rolloff,
|
float rolloff,
|
||||||
float gain);
|
float gain);
|
||||||
|
|
||||||
@ -100,9 +98,6 @@ public:
|
|||||||
std::string getFileName() const { return m_file; }
|
std::string getFileName() const { return m_file; }
|
||||||
|
|
||||||
void setPositional(bool positional) { m_positional = positional; }
|
void setPositional(bool positional) { m_positional = positional; }
|
||||||
|
|
||||||
ALuint getRolloffType() const { return m_rolloffType; }
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -184,12 +184,11 @@ void SFXManager::loadSfx()
|
|||||||
SFXBuffer* SFXManager::addSingleSfx(const std::string &sfx_name,
|
SFXBuffer* SFXManager::addSingleSfx(const std::string &sfx_name,
|
||||||
const std::string &sfx_file,
|
const std::string &sfx_file,
|
||||||
bool positional,
|
bool positional,
|
||||||
ALuint rolloff_type,
|
|
||||||
float rolloff,
|
float rolloff,
|
||||||
float gain)
|
float gain)
|
||||||
{
|
{
|
||||||
|
|
||||||
SFXBuffer* buffer = new SFXBuffer(sfx_file, positional, rolloff_type, rolloff, gain);
|
SFXBuffer* buffer = new SFXBuffer(sfx_file, positional, rolloff, gain);
|
||||||
|
|
||||||
m_all_sfx_types[sfx_name] = buffer;
|
m_all_sfx_types[sfx_name] = buffer;
|
||||||
|
|
||||||
@ -250,7 +249,6 @@ SFXBuffer* SFXManager::loadSingleSfx(const XMLNode* node,
|
|||||||
|
|
||||||
return addSingleSfx(sfx_name, full_path,
|
return addSingleSfx(sfx_name, full_path,
|
||||||
tmpbuffer.isPositional(),
|
tmpbuffer.isPositional(),
|
||||||
tmpbuffer.getRolloffType(),
|
|
||||||
tmpbuffer.getRolloff(),
|
tmpbuffer.getRolloff(),
|
||||||
tmpbuffer.getGain());
|
tmpbuffer.getGain());
|
||||||
|
|
||||||
|
@ -109,7 +109,6 @@ public:
|
|||||||
SFXBuffer* addSingleSfx(const std::string &sfx_name,
|
SFXBuffer* addSingleSfx(const std::string &sfx_name,
|
||||||
const std::string &filename,
|
const std::string &filename,
|
||||||
bool positional,
|
bool positional,
|
||||||
ALuint rolloff_type,
|
|
||||||
float rolloff,
|
float rolloff,
|
||||||
float gain);
|
float gain);
|
||||||
|
|
||||||
|
@ -44,7 +44,6 @@ SFXOpenAL::SFXOpenAL(SFXBuffer* buffer, bool positional, float gain) : SFXBase()
|
|||||||
m_defaultGain = gain;
|
m_defaultGain = gain;
|
||||||
m_loop = false;
|
m_loop = false;
|
||||||
m_gain = -1.0f;
|
m_gain = -1.0f;
|
||||||
m_rolloffType = buffer->getRolloffType();
|
|
||||||
|
|
||||||
// Don't initialise anything else if the sfx manager was not correctly
|
// Don't initialise anything else if the sfx manager was not correctly
|
||||||
// initialised. First of all the initialisation will not work, and it
|
// initialised. First of all the initialisation will not work, and it
|
||||||
@ -86,17 +85,7 @@ bool SFXOpenAL::init()
|
|||||||
alSource3f(m_soundSource, AL_VELOCITY, 0.0, 0.0, 0.0);
|
alSource3f(m_soundSource, AL_VELOCITY, 0.0, 0.0, 0.0);
|
||||||
alSource3f(m_soundSource, AL_DIRECTION, 0.0, 0.0, 0.0);
|
alSource3f(m_soundSource, AL_DIRECTION, 0.0, 0.0, 0.0);
|
||||||
|
|
||||||
alDistanceModel(m_rolloffType);
|
alSourcef (m_soundSource, AL_ROLLOFF_FACTOR, m_soundBuffer->getRolloff());
|
||||||
|
|
||||||
if (m_rolloffType == AL_INVERSE_DISTANCE_CLAMPED)
|
|
||||||
{
|
|
||||||
alSourcef (m_soundSource, AL_ROLLOFF_FACTOR, m_soundBuffer->getRolloff());
|
|
||||||
}
|
|
||||||
else if (m_rolloffType == AL_LINEAR_DISTANCE_CLAMPED)
|
|
||||||
{
|
|
||||||
alSourcef (m_soundSource, AL_MAX_DISTANCE, m_soundBuffer->getRolloff());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (m_gain < 0.0f)
|
if (m_gain < 0.0f)
|
||||||
{
|
{
|
||||||
@ -242,8 +231,9 @@ void SFXOpenAL::position(const Vec3 &position)
|
|||||||
if (!m_positional)
|
if (!m_positional)
|
||||||
{
|
{
|
||||||
// in multiplayer, all sounds are positional, so in this case don't bug users with
|
// in multiplayer, all sounds are positional, so in this case don't bug users with
|
||||||
// an error messageif (race_manager->getNumLocalPlayers() > 1)
|
// an error message if (race_manager->getNumLocalPlayers() > 1)
|
||||||
if (race_manager->getNumLocalPlayers() == 1)
|
// (note that 0 players is also possible, in cutscenes)
|
||||||
|
if (race_manager->getNumLocalPlayers() < 2)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "WARNING, position called on non-positional SFX\n");
|
fprintf(stderr, "WARNING, position called on non-positional SFX\n");
|
||||||
}
|
}
|
||||||
|
@ -43,8 +43,6 @@ private:
|
|||||||
bool m_positional;
|
bool m_positional;
|
||||||
float m_defaultGain;
|
float m_defaultGain;
|
||||||
|
|
||||||
int m_rolloffType;
|
|
||||||
|
|
||||||
/** The OpenAL source contains this info, but if audio is disabled initially then
|
/** The OpenAL source contains this info, but if audio is disabled initially then
|
||||||
the sound source won't be created and we'll be left with no clue when enabling
|
the sound source won't be created and we'll be left with no clue when enabling
|
||||||
sounds later */
|
sounds later */
|
||||||
|
@ -135,20 +135,9 @@ TrackObject::TrackObject(const XMLNode &xml_node)
|
|||||||
|
|
||||||
xml_node.get("conditions", &m_trigger_condition);
|
xml_node.get("conditions", &m_trigger_condition);
|
||||||
|
|
||||||
ALuint rolloffType = AL_INVERSE_DISTANCE_CLAMPED;
|
|
||||||
std::string rolloffTypeStr;
|
|
||||||
xml_node.get("rolloff_type", &rolloffTypeStr );
|
|
||||||
|
|
||||||
float rolloff_distance = 10.0f;
|
float rolloff_distance = 10.0f;
|
||||||
xml_node.get("distance", &rolloff_distance );
|
xml_node.get("distance", &rolloff_distance );
|
||||||
|
|
||||||
if (rolloffTypeStr == "inverse")
|
|
||||||
rolloffType = AL_INVERSE_DISTANCE_CLAMPED;
|
|
||||||
else if (rolloffTypeStr == "linear")
|
|
||||||
rolloffType = AL_LINEAR_DISTANCE_CLAMPED;
|
|
||||||
else if (rolloffTypeStr != "")
|
|
||||||
fprintf(stderr, "[TrackObject] Unknown rolloff type '%s'\n", rolloffTypeStr.c_str());
|
|
||||||
|
|
||||||
// first try track dir, then global dir
|
// first try track dir, then global dir
|
||||||
std::string soundfile = file_manager->getModelFile(sound);
|
std::string soundfile = file_manager->getModelFile(sound);
|
||||||
if (!file_manager->fileExists(soundfile))
|
if (!file_manager->fileExists(soundfile))
|
||||||
@ -156,16 +145,9 @@ TrackObject::TrackObject(const XMLNode &xml_node)
|
|||||||
soundfile = file_manager->getSFXFile(sound);
|
soundfile = file_manager->getSFXFile(sound);
|
||||||
}
|
}
|
||||||
|
|
||||||
float rolloff_param = 1.0f;
|
|
||||||
if (rolloffType == AL_INVERSE_DISTANCE_CLAMPED)
|
|
||||||
rolloff_param = rolloff;
|
|
||||||
else if (rolloffType == AL_LINEAR_DISTANCE_CLAMPED)
|
|
||||||
rolloff_param = rolloff_distance;
|
|
||||||
|
|
||||||
SFXBuffer* buffer = new SFXBuffer(soundfile,
|
SFXBuffer* buffer = new SFXBuffer(soundfile,
|
||||||
true /* positional */,
|
true /* positional */,
|
||||||
rolloffType,
|
rolloff,
|
||||||
rolloff_param,
|
|
||||||
volume);
|
volume);
|
||||||
buffer->load();
|
buffer->load();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user