aboutsummaryrefslogtreecommitdiffstats
path: root/router/router.h
diff options
context:
space:
mode:
Diffstat (limited to 'router/router.h')
-rw-r--r--router/router.h197
1 files changed, 197 insertions, 0 deletions
diff --git a/router/router.h b/router/router.h
new file mode 100644
index 00000000..32a91dcb
--- /dev/null
+++ b/router/router.h
@@ -0,0 +1,197 @@
+#ifndef ROUTER_ROUTER_H
+#define ROUTER_ROUTER_H
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <winnt.h>
+
+#include <stdio.h>
+
+#include "AL/alc.h"
+#include "AL/al.h"
+#include "AL/alext.h"
+#include "atomic.h"
+#include "rwlock.h"
+#include "threads.h"
+
+
+#ifndef UNUSED
+#if defined(__cplusplus)
+#define UNUSED(x)
+#elif defined(__GNUC__)
+#define UNUSED(x) UNUSED_##x __attribute__((unused))
+#elif defined(__LCLINT__)
+#define UNUSED(x) /*@unused@*/ x
+#else
+#define UNUSED(x) x
+#endif
+#endif
+
+#define MAKE_ALC_VER(major, minor) (((major)<<8) | (minor))
+
+typedef struct DriverIface {
+ WCHAR Name[32];
+ HMODULE Module;
+ int ALCVer;
+
+ LPALCCREATECONTEXT alcCreateContext;
+ LPALCMAKECONTEXTCURRENT alcMakeContextCurrent;
+ LPALCPROCESSCONTEXT alcProcessContext;
+ LPALCSUSPENDCONTEXT alcSuspendContext;
+ LPALCDESTROYCONTEXT alcDestroyContext;
+ LPALCGETCURRENTCONTEXT alcGetCurrentContext;
+ LPALCGETCONTEXTSDEVICE alcGetContextsDevice;
+ LPALCOPENDEVICE alcOpenDevice;
+ LPALCCLOSEDEVICE alcCloseDevice;
+ LPALCGETERROR alcGetError;
+ LPALCISEXTENSIONPRESENT alcIsExtensionPresent;
+ LPALCGETPROCADDRESS alcGetProcAddress;
+ LPALCGETENUMVALUE alcGetEnumValue;
+ LPALCGETSTRING alcGetString;
+ LPALCGETINTEGERV alcGetIntegerv;
+ LPALCCAPTUREOPENDEVICE alcCaptureOpenDevice;
+ LPALCCAPTURECLOSEDEVICE alcCaptureCloseDevice;
+ LPALCCAPTURESTART alcCaptureStart;
+ LPALCCAPTURESTOP alcCaptureStop;
+ LPALCCAPTURESAMPLES alcCaptureSamples;
+
+ PFNALCSETTHREADCONTEXTPROC alcSetThreadContext;
+ PFNALCGETTHREADCONTEXTPROC alcGetThreadContext;
+
+ LPALENABLE alEnable;
+ LPALDISABLE alDisable;
+ LPALISENABLED alIsEnabled;
+ LPALGETSTRING alGetString;
+ LPALGETBOOLEANV alGetBooleanv;
+ LPALGETINTEGERV alGetIntegerv;
+ LPALGETFLOATV alGetFloatv;
+ LPALGETDOUBLEV alGetDoublev;
+ LPALGETBOOLEAN alGetBoolean;
+ LPALGETINTEGER alGetInteger;
+ LPALGETFLOAT alGetFloat;
+ LPALGETDOUBLE alGetDouble;
+ LPALGETERROR alGetError;
+ LPALISEXTENSIONPRESENT alIsExtensionPresent;
+ LPALGETPROCADDRESS alGetProcAddress;
+ LPALGETENUMVALUE alGetEnumValue;
+ LPALLISTENERF alListenerf;
+ LPALLISTENER3F alListener3f;
+ LPALLISTENERFV alListenerfv;
+ LPALLISTENERI alListeneri;
+ LPALLISTENER3I alListener3i;
+ LPALLISTENERIV alListeneriv;
+ LPALGETLISTENERF alGetListenerf;
+ LPALGETLISTENER3F alGetListener3f;
+ LPALGETLISTENERFV alGetListenerfv;
+ LPALGETLISTENERI alGetListeneri;
+ LPALGETLISTENER3I alGetListener3i;
+ LPALGETLISTENERIV alGetListeneriv;
+ LPALGENSOURCES alGenSources;
+ LPALDELETESOURCES alDeleteSources;
+ LPALISSOURCE alIsSource;
+ LPALSOURCEF alSourcef;
+ LPALSOURCE3F alSource3f;
+ LPALSOURCEFV alSourcefv;
+ LPALSOURCEI alSourcei;
+ LPALSOURCE3I alSource3i;
+ LPALSOURCEIV alSourceiv;
+ LPALGETSOURCEF alGetSourcef;
+ LPALGETSOURCE3F alGetSource3f;
+ LPALGETSOURCEFV alGetSourcefv;
+ LPALGETSOURCEI alGetSourcei;
+ LPALGETSOURCE3I alGetSource3i;
+ LPALGETSOURCEIV alGetSourceiv;
+ LPALSOURCEPLAYV alSourcePlayv;
+ LPALSOURCESTOPV alSourceStopv;
+ LPALSOURCEREWINDV alSourceRewindv;
+ LPALSOURCEPAUSEV alSourcePausev;
+ LPALSOURCEPLAY alSourcePlay;
+ LPALSOURCESTOP alSourceStop;
+ LPALSOURCEREWIND alSourceRewind;
+ LPALSOURCEPAUSE alSourcePause;
+ LPALSOURCEQUEUEBUFFERS alSourceQueueBuffers;
+ LPALSOURCEUNQUEUEBUFFERS alSourceUnqueueBuffers;
+ LPALGENBUFFERS alGenBuffers;
+ LPALDELETEBUFFERS alDeleteBuffers;
+ LPALISBUFFER alIsBuffer;
+ LPALBUFFERF alBufferf;
+ LPALBUFFER3F alBuffer3f;
+ LPALBUFFERFV alBufferfv;
+ LPALBUFFERI alBufferi;
+ LPALBUFFER3I alBuffer3i;
+ LPALBUFFERIV alBufferiv;
+ LPALGETBUFFERF alGetBufferf;
+ LPALGETBUFFER3F alGetBuffer3f;
+ LPALGETBUFFERFV alGetBufferfv;
+ LPALGETBUFFERI alGetBufferi;
+ LPALGETBUFFER3I alGetBuffer3i;
+ LPALGETBUFFERIV alGetBufferiv;
+ LPALBUFFERDATA alBufferData;
+ LPALDOPPLERFACTOR alDopplerFactor;
+ LPALDOPPLERVELOCITY alDopplerVelocity;
+ LPALSPEEDOFSOUND alSpeedOfSound;
+ LPALDISTANCEMODEL alDistanceModel;
+} DriverIface;
+
+extern DriverIface *DriverList;
+extern int DriverListSize;
+
+extern altss_t ThreadCtxDriver;
+typedef ATOMIC(DriverIface*) atomic_DriverIfacePtr;
+extern atomic_DriverIfacePtr CurrentCtxDriver;
+
+
+typedef struct PtrIntMap {
+ ALvoid **keys;
+ /* Shares memory with keys. */
+ ALint *values;
+
+ ALsizei size;
+ ALsizei capacity;
+ RWLock lock;
+} PtrIntMap;
+#define PTRINTMAP_STATIC_INITIALIZE { NULL, NULL, 0, 0, RWLOCK_STATIC_INITIALIZE }
+
+void InitPtrIntMap(PtrIntMap *map);
+void ResetPtrIntMap(PtrIntMap *map);
+ALenum InsertPtrIntMapEntry(PtrIntMap *map, ALvoid *key, ALint value);
+ALint RemovePtrIntMapKey(PtrIntMap *map, ALvoid *key);
+ALint LookupPtrIntMapKey(PtrIntMap *map, ALvoid *key);
+
+
+void InitALC(void);
+void ReleaseALC(void);
+
+
+enum LogLevel {
+ LogLevel_None = 0,
+ LogLevel_Error = 1,
+ LogLevel_Warn = 2,
+ LogLevel_Trace = 3,
+};
+extern enum LogLevel LogLevel;
+extern FILE *LogFile;
+
+#define TRACE(...) do { \
+ if(LogLevel >= LogLevel_Trace) \
+ { \
+ fprintf(LogFile, "AL Router (II): " __VA_ARGS__); \
+ fflush(LogFile); \
+ } \
+} while(0)
+#define WARN(...) do { \
+ if(LogLevel >= LogLevel_Warn) \
+ { \
+ fprintf(LogFile, "AL Router (WW): " __VA_ARGS__); \
+ fflush(LogFile); \
+ } \
+} while(0)
+#define ERR(...) do { \
+ if(LogLevel >= LogLevel_Error) \
+ { \
+ fprintf(LogFile, "AL Router (EE): " __VA_ARGS__); \
+ fflush(LogFile); \
+ } \
+} while(0)
+
+#endif /* ROUTER_ROUTER_H */