From: ehofman Date: Sun, 18 Oct 2009 13:44:38 +0000 (+0000) Subject: Start the sound manager in a deactived state. This means the code now has to activate... X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=7287509feff5372057cbfda468c841fa0a8cdef6;p=simgear.git 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. --- diff --git a/simgear/sound/sample_group.hxx b/simgear/sound/sample_group.hxx index e98596c3..a4e7b653 100644 --- a/simgear/sound/sample_group.hxx +++ b/simgear/sound/sample_group.hxx @@ -35,8 +35,6 @@ #if defined(__APPLE__) # include -#elif defined(_WIN32) -# include #else # include #endif diff --git a/simgear/sound/soundmgr_openal.cxx b/simgear/sound/soundmgr_openal.cxx index 45bd022f..22c486da 100644 --- a/simgear/sound/soundmgr_openal.cxx +++ b/simgear/sound/soundmgr_openal.cxx @@ -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 ); diff --git a/simgear/sound/soundmgr_openal.hxx b/simgear/sound/soundmgr_openal.hxx index 3b4572be..1c05024d 100644 --- a/simgear/sound/soundmgr_openal.hxx +++ b/simgear/sound/soundmgr_openal.hxx @@ -49,10 +49,6 @@ # include # include # include -#elif defined(_WIN32) -# include -# include -# include #else # include # include @@ -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;