Start the sound manager in a deactived state. This means the code now has to activate it explicitly when desired. A non active state means the update function will no be executed.
This commit is contained in:
@@ -35,8 +35,6 @@
|
||||
|
||||
#if defined(__APPLE__)
|
||||
# include <OpenAL/al.h>
|
||||
#elif defined(_WIN32)
|
||||
# include <al.h>
|
||||
#else
|
||||
# include <AL/al.h>
|
||||
#endif
|
||||
|
||||
@@ -57,6 +57,7 @@ int SGSoundMgr::_alut_init = 0;
|
||||
// constructor
|
||||
SGSoundMgr::SGSoundMgr() :
|
||||
_working(false),
|
||||
_active(false),
|
||||
_changed(true),
|
||||
_volume(0.0),
|
||||
_device(NULL),
|
||||
@@ -162,10 +163,11 @@ void SGSoundMgr::init() {
|
||||
}
|
||||
}
|
||||
|
||||
// suspend the sound manager
|
||||
// stop the sound manager
|
||||
void SGSoundMgr::stop() {
|
||||
if (_working) {
|
||||
_working = false;
|
||||
_active = false;
|
||||
|
||||
// clear any OpenAL buffers before shutting down
|
||||
buffer_map_iterator buffers_current;
|
||||
@@ -177,25 +179,34 @@ void SGSoundMgr::stop() {
|
||||
_buffers.erase( buffers_current );
|
||||
}
|
||||
|
||||
_context = alcGetCurrentContext();
|
||||
_device = alcGetContextsDevice(_context);
|
||||
alcMakeContextCurrent(NULL);
|
||||
alcDestroyContext(_context);
|
||||
alcCloseDevice(_device);
|
||||
}
|
||||
}
|
||||
|
||||
void SGSoundMgr::suspend() {
|
||||
if (_working) {
|
||||
if (_active) {
|
||||
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->suspend();
|
||||
}
|
||||
_active = false;
|
||||
}
|
||||
}
|
||||
|
||||
void SGSoundMgr::resume() {
|
||||
if (!_active) {
|
||||
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->resume();
|
||||
}
|
||||
_active = true;
|
||||
}
|
||||
}
|
||||
|
||||
void SGSoundMgr::bind ()
|
||||
{
|
||||
@@ -222,9 +233,7 @@ void SGSoundMgr::unbind ()
|
||||
|
||||
// run the audio scheduler
|
||||
void SGSoundMgr::update_late( double dt ) {
|
||||
if (_working && dt != 0.0) {
|
||||
alcSuspendContext(_context);
|
||||
|
||||
if (_active) {
|
||||
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 ) {
|
||||
@@ -241,26 +250,10 @@ void SGSoundMgr::update_late( double dt ) {
|
||||
testForALError("update");
|
||||
_changed = false;
|
||||
}
|
||||
alcProcessContext(_context);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
SGSoundMgr::resume ()
|
||||
{
|
||||
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 ) {
|
||||
SGSampleGroup *sgrp = sample_grp_current->second;
|
||||
sgrp->resume();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// add a sampel group, return true if successful
|
||||
// add a sample group, return true if successful
|
||||
bool SGSoundMgr::add( SGSampleGroup *sgrp, const string& refname )
|
||||
{
|
||||
sample_group_map_iterator sample_grp_it = _sample_groups.find( refname );
|
||||
|
||||
@@ -49,10 +49,6 @@
|
||||
# include <OpenAL/al.h>
|
||||
# include <OpenAL/alc.h>
|
||||
# include <OpenAL/alut.h>
|
||||
#elif defined(_WIN32)
|
||||
# include <al.h>
|
||||
# include <alc.h>
|
||||
# include <AL/alut.h>
|
||||
#else
|
||||
# include <AL/al.h>
|
||||
# include <AL/alc.h>
|
||||
@@ -113,6 +109,17 @@ public:
|
||||
*/
|
||||
inline bool is_working() const { return _working; }
|
||||
|
||||
/**
|
||||
* Set the sound manager to a working condition.
|
||||
*/
|
||||
inline void activate() { _active = true; }
|
||||
|
||||
/**
|
||||
* Test is the sound manager is in an active and working condition.
|
||||
* @return true is the sound manager is active
|
||||
*/
|
||||
inline bool is_active() const { return (_working && _active); }
|
||||
|
||||
/**
|
||||
* Register a sample group to the sound manager.
|
||||
* @para sgrp Pointer to a sample group to add
|
||||
@@ -263,6 +270,7 @@ private:
|
||||
static int _alut_init;
|
||||
|
||||
bool _working;
|
||||
bool _active;
|
||||
bool _changed;
|
||||
float _volume;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user