Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKester Maddock <Christopher.Maddock.1@uni.massey.ac.nz>2004-07-26 15:54:10 +0400
committerKester Maddock <Christopher.Maddock.1@uni.massey.ac.nz>2004-07-26 15:54:10 +0400
commit8a520165016f399002b03ec096be878a18aa3302 (patch)
tree7bfbfcf0693023854c9d932916f433ed9feebe6b
parentf64c5cacf707d7a1ef36b45ea4f5569a732802f6 (diff)
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.
-rw-r--r--intern/SoundSystem/intern/SND_DeviceManager.cpp3
-rw-r--r--intern/SoundSystem/openal/SND_OpenALDevice.cpp19
-rw-r--r--intern/SoundSystem/openal/SND_OpenALDevice.h1
-rw-r--r--source/blender/src/editsound.c6
-rw-r--r--source/blender/src/space.c4
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();