From 334e8d2f7d6db8598980d809c2035fd5a02a4353 Mon Sep 17 00:00:00 2001
From: jpbl <jpbl>
Date: Wed, 11 Jan 2006 19:12:14 +0000
Subject: [PATCH] OpenAL compiling fixes

---
 src/audio/Makefile.am             |  6 +-----
 src/audio/OpenAL/Device.hpp       |  1 +
 src/audio/OpenAL/Makefile.am      |  3 ++-
 src/audio/OpenAL/NullDevice.cpp   |  4 ++++
 src/audio/OpenAL/NullDevice.hpp   |  1 +
 src/audio/OpenAL/OpenALDevice.cpp | 23 +++++++++++++++++++++--
 src/audio/OpenAL/OpenALDevice.hpp |  1 +
 src/audio/OpenAL/OpenALLayer.cpp  | 13 -------------
 src/audio/OpenAL/OpenALLayer.hpp  |  3 ---
 9 files changed, 31 insertions(+), 24 deletions(-)

diff --git a/src/audio/Makefile.am b/src/audio/Makefile.am
index cbfb5d282e..d0fe8c8ee3 100644
--- a/src/audio/Makefile.am
+++ b/src/audio/Makefile.am
@@ -1,8 +1,4 @@
-if MAINTENER_CODE
-maintener_directories = OpenAL
-endif
-
-SUBDIRS = gsm pacpp ${maintener_directories}
+SUBDIRS = gsm pacpp OpenAL
 
 noinst_LTLIBRARIES = libaudio.la
 
diff --git a/src/audio/OpenAL/Device.hpp b/src/audio/OpenAL/Device.hpp
index 751f380d58..143d2ff491 100644
--- a/src/audio/OpenAL/Device.hpp
+++ b/src/audio/OpenAL/Device.hpp
@@ -39,6 +39,7 @@ namespace SFLAudio
      * the load is successfull.
      */
     virtual bool load() = 0;
+    virtual void unload() = 0;
 
     /**
      * This will create a context for the device.
diff --git a/src/audio/OpenAL/Makefile.am b/src/audio/OpenAL/Makefile.am
index 2da160d1ef..bdd8d3d9ae 100644
--- a/src/audio/OpenAL/Makefile.am
+++ b/src/audio/OpenAL/Makefile.am
@@ -1,3 +1,4 @@
+if MAINTENER_CODE
 noinst_PROGRAMS = example01 example02
 noinst_LTLIBRARIES = libsflaudio.la
 
@@ -26,5 +27,5 @@ LDADD = libsflaudio.la $(PORTAUDIO_LIBS) -lopenal ../pacpp/source/portaudiocpp/l
 
 example01_SOURCES = example01.cpp
 example02_SOURCES = example02.cpp
-
+endif
 
diff --git a/src/audio/OpenAL/NullDevice.cpp b/src/audio/OpenAL/NullDevice.cpp
index f48417fb10..cef84a8de2 100644
--- a/src/audio/OpenAL/NullDevice.cpp
+++ b/src/audio/OpenAL/NullDevice.cpp
@@ -42,6 +42,10 @@ SFLAudio::NullDevice::load()
   return true;
 }
 
+void 
+SFLAudio::NullDevice::unload()
+{}
+
 bool
 SFLAudio::NullDevice::isNull() 
 {
diff --git a/src/audio/OpenAL/NullDevice.hpp b/src/audio/OpenAL/NullDevice.hpp
index d783518adf..43387038ed 100644
--- a/src/audio/OpenAL/NullDevice.hpp
+++ b/src/audio/OpenAL/NullDevice.hpp
@@ -32,6 +32,7 @@ namespace SFLAudio
     Context *createContext();
 
     virtual bool load();
+    virtual void unload();
     bool isNull();
   };
 }
diff --git a/src/audio/OpenAL/OpenALDevice.cpp b/src/audio/OpenAL/OpenALDevice.cpp
index 0389e9cc2f..87d6234f0e 100644
--- a/src/audio/OpenAL/OpenALDevice.cpp
+++ b/src/audio/OpenAL/OpenALDevice.cpp
@@ -18,6 +18,7 @@
  *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
+#include <iostream>
 #include <AL/al.h>
 #include <AL/alc.h>
 
@@ -30,16 +31,34 @@ SFLAudio::OpenALDevice::OpenALDevice()
   : mDevice(0)
 {}
 
+SFLAudio::OpenALDevice::~OpenALDevice()
+{
+  unload();
+}
+
+void
+SFLAudio::OpenALDevice::unload() {
+  if(mDevice) {
+    alcCloseDevice(mDevice);
+    mDevice = 0;
+  }
+}
+
+
 bool
 SFLAudio::OpenALDevice::load() {
-  OpenALLayer::clearError(); 
   mDevice = alcOpenDevice(0);
-  OpenALLayer::assertError();
+  ALenum error = alcGetError(mDevice);
+  if (error != AL_NO_ERROR) {
+    std::cerr << "OpenAL::alcOpenDevice: " << alGetString(error) << std::endl;
+    unload();
+  }
 
   if(mDevice != 0) {
     const ALCchar *device = alcGetString(mDevice, ALC_DEVICE_SPECIFIER);
     setName(device);
   }
+
   return mDevice;
 }
 
diff --git a/src/audio/OpenAL/OpenALDevice.hpp b/src/audio/OpenAL/OpenALDevice.hpp
index 4701d53df5..33693d421f 100644
--- a/src/audio/OpenAL/OpenALDevice.hpp
+++ b/src/audio/OpenAL/OpenALDevice.hpp
@@ -31,6 +31,7 @@ namespace SFLAudio
   public:
     OpenALDevice();
     virtual bool load();
+    virtual void unload();
     virtual Context *createContext();
 
   private:
diff --git a/src/audio/OpenAL/OpenALLayer.cpp b/src/audio/OpenAL/OpenALLayer.cpp
index a3977a675f..bc530a2af4 100644
--- a/src/audio/OpenAL/OpenALLayer.cpp
+++ b/src/audio/OpenAL/OpenALLayer.cpp
@@ -74,17 +74,4 @@ SFLAudio::OpenALLayer::openDevice(const std::string &)
   return new NullDevice();
 }
 
-void
-SFLAudio::OpenALLayer::assertError()
-{
-  ALenum error;
-  if ((error = alGetError()) != AL_NO_ERROR) {
-    std::cerr << "OpenAL::alcOpenDevice: " << alGetString(error) << std::endl;
-  }
-}
 
-void
-SFLAudio::OpenALLayer::clearError()
-{
-  alGetError();
-}
diff --git a/src/audio/OpenAL/OpenALLayer.hpp b/src/audio/OpenAL/OpenALLayer.hpp
index ecea6ab510..1a04b027f0 100644
--- a/src/audio/OpenAL/OpenALLayer.hpp
+++ b/src/audio/OpenAL/OpenALLayer.hpp
@@ -33,9 +33,6 @@ namespace SFLAudio
     virtual std::list< std::string > getDevicesNames();
     virtual Device *openDevice();
     virtual Device *openDevice(const std::string &name);
-
-    static void clearError();
-    static void assertError();
   };
 }
 
-- 
GitLab