From 8a520165016f399002b03ec096be878a18aa3302 Mon Sep 17 00:00:00 2001 From: Kester Maddock Date: Mon, 26 Jul 2004 11:54:10 +0000 Subject: Let the game engine manage it's own sound scene. This is to fix bug 1415 (Patch from Peter den Bak) http://projects.blender.org/tracker/index.php?func=detail&aid=1415&group_id=9&atid=125 Also release the OpenAL device & context. These were leaked before, and would cause an assertion. --- intern/SoundSystem/intern/SND_DeviceManager.cpp | 3 +++ intern/SoundSystem/openal/SND_OpenALDevice.cpp | 19 ++++++++++++++++--- intern/SoundSystem/openal/SND_OpenALDevice.h | 1 + source/blender/src/editsound.c | 6 ++---- source/blender/src/space.c | 4 ++-- 5 files changed, 24 insertions(+), 9 deletions(-) diff --git a/intern/SoundSystem/intern/SND_DeviceManager.cpp b/intern/SoundSystem/intern/SND_DeviceManager.cpp index d6f23ff5de4..37487686d71 100644 --- a/intern/SoundSystem/intern/SND_DeviceManager.cpp +++ b/intern/SoundSystem/intern/SND_DeviceManager.cpp @@ -78,6 +78,9 @@ void SND_DeviceManager::Unsubscribe() delete m_instance; m_instance = NULL; } + + if (m_subscriptions < 0) + m_subscriptions = 0; } diff --git a/intern/SoundSystem/openal/SND_OpenALDevice.cpp b/intern/SoundSystem/openal/SND_OpenALDevice.cpp index 9bdfeb73844..dfac8333a33 100644 --- a/intern/SoundSystem/openal/SND_OpenALDevice.cpp +++ b/intern/SoundSystem/openal/SND_OpenALDevice.cpp @@ -205,6 +205,8 @@ ALvoid alutUnloadWAV(ALenum format,ALvoid *data,ALsizei size,ALsizei freq) SND_OpenALDevice::SND_OpenALDevice() + : m_context(NULL), + m_device(NULL) { /* Removed the functionality for checking if noaudio was provided on */ /* the commandline. */ @@ -229,6 +231,7 @@ SND_OpenALDevice::SND_OpenALDevice() if (m_context) { alcMakeContextCurrent(m_context); m_audio = true; + m_device = dev; } } @@ -302,13 +305,16 @@ void SND_OpenALDevice::MakeCurrent() const SND_OpenALDevice::~SND_OpenALDevice() { if (m_context) { - alcMakeContextCurrent(m_context); - + MakeCurrent(); + if (m_buffersinitialized) alDeleteBuffers(NUM_BUFFERS, m_buffers); if (m_sourcesinitialized) alDeleteSources(NUM_SOURCES, m_sources); + + alcDestroyContext(m_context); + m_context = NULL; } // let's see if we used the cd. if not, just leave it alone @@ -323,6 +329,13 @@ SND_OpenALDevice::~SND_OpenALDevice() if (m_cdrom) delete m_cdrom; #endif +#ifdef OUDE_OPENAL + if (m_audio) + alutExit(); +#else + if (m_device) + alcCloseDevice((ALCdevice*) m_device); +#endif } @@ -570,7 +583,7 @@ void SND_OpenALDevice::StopObject(int id) const alSourcefv(m_sources[id], AL_POSITION, obpos); alSourcefv(m_sources[id], AL_VELOCITY, obvel); - + alSourcef(m_sources[id], AL_GAIN, 1.0); alSourcef(m_sources[id], AL_PITCH, 1.0); alSourcei(m_sources[id], AL_LOOPING, AL_FALSE); diff --git a/intern/SoundSystem/openal/SND_OpenALDevice.h b/intern/SoundSystem/openal/SND_OpenALDevice.h index 4f20580c2f3..4cd386cd48d 100644 --- a/intern/SoundSystem/openal/SND_OpenALDevice.h +++ b/intern/SoundSystem/openal/SND_OpenALDevice.h @@ -95,6 +95,7 @@ public: private: void* m_context; + void* m_device; unsigned int m_buffers[NUM_BUFFERS]; unsigned int m_sources[NUM_SOURCES]; diff --git a/source/blender/src/editsound.c b/source/blender/src/editsound.c index b9695881068..b409804a9f8 100644 --- a/source/blender/src/editsound.c +++ b/source/blender/src/editsound.c @@ -514,7 +514,7 @@ int sound_get_filetype_from_header(bSound* sound, PackedFile* pf) { filetype = SAMPLE_OGG_VORBIS; } - else if ((!memcmp(buffer, "ID3", 3)) || (!memcmp(buffer, "ÿû", 2))) + else if ((!memcmp(buffer, "ID3", 3)) || (!memcmp(buffer, "", 2))) { filetype = SAMPLE_MP3; } @@ -1015,9 +1015,6 @@ void sound_init_audio(void) SYS_SystemHandle hSystem = NULL; if(ghSoundScene==NULL) { - - printf("sound init audio\n"); - hSystem = SYS_GetSystem(); noaudio = SYS_GetCommandLineInt(hSystem,"noaudio",0); @@ -1043,5 +1040,6 @@ void sound_exit_audio(void) if(ghSoundScene) { SND_DeleteScene(ghSoundScene); SND_ReleaseDevice(); + ghSoundScene = NULL; } } diff --git a/source/blender/src/space.c b/source/blender/src/space.c index d13ec81b4ba..0f80a21c79a 100644 --- a/source/blender/src/space.c +++ b/source/blender/src/space.c @@ -456,9 +456,9 @@ void start_game(void) scene_cfra_store= save_and_reset_all_scene_cfra(); - /* sound init is save, only handles once */ - sound_init_audio(); + /* game engine will do its own sounds. */ sound_stop_all_sounds(); + sound_exit_audio(); /* Before jumping into Ketsji, we configure some settings. */ space_set_commmandline_options(); -- cgit v1.2.3