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:
auria 2012-07-22 19:20:41 +00:00
parent 60aff6dd1b
commit 9f909b4c26
7 changed files with 6 additions and 57 deletions

View File

@ -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());
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------

View File

@ -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; }
}; };

View File

@ -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());

View File

@ -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);

View File

@ -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");
} }

View File

@ -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 */

View File

@ -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();