Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/audio/sources.cc43
-rw-r--r--src/audio/sources.h40
2 files changed, 83 insertions, 0 deletions
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__