if (_free_sources.size() == 0) {
SG_LOG(SG_GENERAL, SG_ALERT, "Unable to grab any OpenAL sources!");
}
+}
- sample_group_map_iterator sample_grp_current = _sample_groups.begin();
- sample_group_map_iterator sample_grp_end = _sample_groups.end();
- for ( ; sample_grp_current != sample_grp_end; ++sample_grp_current ) {
- SGSampleGroup *sgrp = sample_grp_current->second;
- sgrp->activate();
+void SGSoundMgr::activate() {
+ if ( _working ) {
+ _active = true;
+ sample_group_map_iterator sample_grp_current = _sample_groups.begin();
+ sample_group_map_iterator sample_grp_end = _sample_groups.end();
+ for ( ; sample_grp_current != sample_grp_end; ++sample_grp_current ) {
+ SGSampleGroup *sgrp = sample_grp_current->second;
+ sgrp->activate();
+ }
}
}
}
void SGSoundMgr::suspend() {
- if (_active) {
+ if (_working) {
sample_group_map_iterator sample_grp_current = _sample_groups.begin();
sample_group_map_iterator sample_grp_end = _sample_groups.end();
for ( ; sample_grp_current != sample_grp_end; ++sample_grp_current ) {
}
void SGSoundMgr::resume() {
- if (!_active) {
+ if (_working) {
sample_group_map_iterator sample_grp_current = _sample_groups.begin();
sample_group_map_iterator sample_grp_end = _sample_groups.end();
for ( ; sample_grp_current != sample_grp_end; ++sample_grp_current ) {
// delete free sources
for (unsigned int i=0; i<_free_sources.size(); i++) {
- ALuint source = _free_sources.at( i );
+ ALuint source = _free_sources[i];
alDeleteSources( 1 , &source );
}
return false;
}
- if (_working) sgrp->activate();
+ if (_active) sgrp->activate();
_sample_groups[refname] = sgrp;
return true;
return false;
}
- _sample_groups.erase( refname );
+ _sample_groups.erase( sample_grp_it );
return true;
}
alSourceStop( source );
testForALError("release source");
- _free_sources.push_back(source);
- _sources_in_use.erase(it, it+1);
+ alSourcei( source, AL_BUFFER, 0 );
+ _free_sources.push_back( source );
+ _sources_in_use.erase( it );
}
}
buffer_it->second.refctr--;
if (buffer_it->second.refctr == 0) {
ALuint buffer = buffer_it->second.id;
- _buffers.erase( sample_name );
alDeleteBuffers(1, &buffer);
+ _buffers.erase( buffer_it );
testForALError("release buffer");
}
}