From 4a4a5473b82d1f5b6f654cabac99272bce89854b Mon Sep 17 00:00:00 2001
From: Stijn Buys <ingar@osirion.org>
Date: Sun, 18 May 2008 21:52:13 +0000
Subject: Forgot to add these

---
 src/audio/sources.cc | 43 +++++++++++++++++++++++++++++++++++++++++++
 src/audio/sources.h  | 40 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 83 insertions(+)
 create mode 100644 src/audio/sources.cc
 create mode 100644 src/audio/sources.h

(limited to 'src/audio')

diff --git a/src/audio/sources.cc b/src/audio/sources.cc
new file mode 100644
index 0000000..90a79fa
--- /dev/null
+++ b/src/audio/sources.cc
@@ -0,0 +1,43 @@
+/*
+   audio/sources.cc
+   This file is part of the Osirion project and is distributed under
+   the terms of the GNU General Public License version 2
+*/
+
+#include "audio/sources.h"
+#include "sys/sys.h"
+
+namespace audio
+{
+
+ALuint Sources::sources[MAXSOURCES];
+bool Sources::source_available[MAXSOURCES];
+
+void Sources::init()
+{
+	int error;
+	clear();
+	
+	alGenSources(MAXSOURCES, sources);
+
+	if ((error = alGetError()) != AL_NO_ERROR) {
+		con_warn << "Error " << error << " initializing OpenAL sources!" << std::endl;
+		return;
+	}
+	source_available[0] = true;
+}
+
+void Sources::shutdown()
+{
+	alDeleteSources(MAXSOURCES, sources);
+	clear();
+}
+
+void Sources::clear()
+{
+	memset(sources,0, sizeof(sources));
+	memset(source_available, 0 , sizeof(source_available));
+	
+}
+
+}
diff --git a/src/audio/sources.h b/src/audio/sources.h
new file mode 100644
index 0000000..405b944
--- /dev/null
+++ b/src/audio/sources.h
@@ -0,0 +1,40 @@
+/*
+   audio/source.h
+   This file is part of the Osirion project and is distributed under
+   the terms of the GNU General Public License version 2
+*/
+
+#ifndef __INCLUDED_AUDIO_SOURCES_H__
+#define __INCLUDED_AUDIO_SOURCES_H__
+
+#include "AL/al.h"
+#include "AL/alc.h"
+
+#include <string>
+#include <map>
+
+namespace audio {
+
+const size_t MAXSOURCES		= 128;
+
+/// OpenAL sources wrapper class
+class Sources {
+public:
+	static void init();
+	static void shutdown();
+
+	static bool available(size_t index) { return source_available[index]; }
+
+	/// the sources for user interface sounds
+	static inline ALuint ui() { return sources[0]; }
+
+private:
+	static void clear();
+
+	static ALuint sources[MAXSOURCES];
+	static bool source_available[MAXSOURCES];
+};
+
+}
+
+#endif // __INCLUDED_AUDIO_SOURCES_H__
-- 
cgit v1.2.3