[#18257] Workaround for bug in freealut 1.1.0
authorCampbell Barton <ideasman42@gmail.com>
Fri, 6 Feb 2009 16:38:53 +0000 (16:38 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Fri, 6 Feb 2009 16:38:53 +0000 (16:38 +0000)
by Jörg Müller (nexyon)

Since this area is not maintained, I can only say it works on my system (linux/32bit)
And nexyon assured me he checked over this patch well.
Blender using the deprecated function is not great, but nexyon's bugfix would not be available until the next version of freealut so better to work around it by using the new function.

Please test game sounds play back on win32 and Mac, in cases that it worked in the first place.

intern/SoundSystem/openal/SND_OpenALDevice.cpp

index c660e9aecba49c278ae4a7ed93dd33eca13908bf..9ce30f985ac1f0acd47c24238f3fc6a924b34c75 100644 (file)
@@ -235,7 +235,8 @@ SND_OpenALDevice::SND_OpenALDevice()
 
                        if (m_context) {
 #ifdef AL_VERSION_1_1
-               alcMakeContextCurrent((ALCcontext*)m_context);
+                       alcMakeContextCurrent((ALCcontext*)m_context);
+                       alutInitWithoutContext(NULL, NULL); /* in this case we dont want alut to initialize the context, see above */
 #else
                        alcMakeContextCurrent(m_context);
 #endif
@@ -380,6 +381,9 @@ SND_OpenALDevice::~SND_OpenALDevice()
 #else
        if (m_device)
                alcCloseDevice((ALCdevice*) m_device);
+#ifdef AL_VERSION_1_1
+       alutExit();
+#endif
 #endif
 }
 
@@ -437,7 +441,9 @@ SND_WaveSlot* SND_OpenALDevice::LoadSample(const STR_String& name,
                                        alutLoadWAVMemory((char*)memlocation, &sampleformat, &data, &numberofsamples, &samplerate);                             //      openal_2.12
 #else
 #ifdef AL_VERSION_1_1                                  
-                                       alutLoadWAVMemory((ALbyte*)memlocation, &sampleformat, &data, &numberofsamples, &samplerate, &loop);//  openal_2.14+
+                                       float frequency = 0.0f;
+                                       data = alutLoadMemoryFromFileImage(memlocation, size, &sampleformat, &numberofsamples, &frequency);
+                                       samplerate = (int)frequency;
 #else
                                         alutLoadWAVMemory((signed char*)memlocation, &sampleformat, &data, &numberofsamples, &samplerate, &loop);//  openal_2.14+
                                         
@@ -480,7 +486,11 @@ SND_WaveSlot* SND_OpenALDevice::LoadSample(const STR_String& name,
                                }
                                
                                /* and free the original stuff (copy was made in openal) */
+#if defined(OUDE_OPENAL) || defined (__APPLE__) || !defined(AL_VERSION_1_1)
                                alutUnloadWAV(sampleformat, data, numberofsamples, samplerate);
+#else
+                               free(data);
+#endif
                        }
                }
                else