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,
bool positional,
ALuint rolloffType,
float rolloff,
float gain)
{
@ -51,7 +50,6 @@ SFXBuffer::SFXBuffer(const std::string& file,
m_rolloff = rolloff;
m_positional = positional;
m_gain = gain;
m_rolloffType = rolloffType;
}
//----------------------------------------------------------------------------
@ -65,21 +63,10 @@ SFXBuffer::SFXBuffer(const std::string& file,
m_positional = false;
m_loaded = false;
m_file = file;
m_rolloffType = AL_INVERSE_DISTANCE_CLAMPED;
node->get("rolloff", &m_rolloff );
node->get("positional", &m_positional );
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;
float m_rolloff;
float m_gain;
ALuint m_rolloffType;
bool loadVorbisBuffer(const std::string &name, ALuint buffer);
@ -63,7 +62,6 @@ public:
SFXBuffer(const std::string& file,
bool positional,
ALuint rolloffType,
float rolloff,
float gain);
@ -100,9 +98,6 @@ public:
std::string getFileName() const { return m_file; }
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,
const std::string &sfx_file,
bool positional,
ALuint rolloff_type,
float rolloff,
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;
@ -250,7 +249,6 @@ SFXBuffer* SFXManager::loadSingleSfx(const XMLNode* node,
return addSingleSfx(sfx_name, full_path,
tmpbuffer.isPositional(),
tmpbuffer.getRolloffType(),
tmpbuffer.getRolloff(),
tmpbuffer.getGain());

View File

@ -109,7 +109,6 @@ public:
SFXBuffer* addSingleSfx(const std::string &sfx_name,
const std::string &filename,
bool positional,
ALuint rolloff_type,
float rolloff,
float gain);

View File

@ -44,7 +44,6 @@ SFXOpenAL::SFXOpenAL(SFXBuffer* buffer, bool positional, float gain) : SFXBase()
m_defaultGain = gain;
m_loop = false;
m_gain = -1.0f;
m_rolloffType = buffer->getRolloffType();
// Don't initialise anything else if the sfx manager was not correctly
// 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_DIRECTION, 0.0, 0.0, 0.0);
alDistanceModel(m_rolloffType);
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());
}
alSourcef (m_soundSource, AL_ROLLOFF_FACTOR, m_soundBuffer->getRolloff());
if (m_gain < 0.0f)
{
@ -242,8 +231,9 @@ void SFXOpenAL::position(const Vec3 &position)
if (!m_positional)
{
// in multiplayer, all sounds are positional, so in this case don't bug users with
// an error messageif (race_manager->getNumLocalPlayers() > 1)
if (race_manager->getNumLocalPlayers() == 1)
// an error message 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");
}

View File

@ -43,8 +43,6 @@ private:
bool m_positional;
float m_defaultGain;
int m_rolloffType;
/** 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
sounds later */

View File

@ -135,20 +135,9 @@ TrackObject::TrackObject(const XMLNode &xml_node)
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;
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
std::string soundfile = file_manager->getModelFile(sound);
if (!file_manager->fileExists(soundfile))
@ -156,16 +145,9 @@ TrackObject::TrackObject(const XMLNode &xml_node)
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,
true /* positional */,
rolloffType,
rolloff_param,
rolloff,
volume);
buffer->load();