1 #ifndef ROUTER_ROUTER_H
2 #define ROUTER_ROUTER_H
4 #define WIN32_LEAN_AND_MEAN
23 #define MAKE_ALC_VER(major, minor) (((major)<<8) | (minor))
27 HMODULE Module
{nullptr};
29 std::once_flag InitOnceCtx
{};
31 LPALCCREATECONTEXT alcCreateContext
{nullptr};
32 LPALCMAKECONTEXTCURRENT alcMakeContextCurrent
{nullptr};
33 LPALCPROCESSCONTEXT alcProcessContext
{nullptr};
34 LPALCSUSPENDCONTEXT alcSuspendContext
{nullptr};
35 LPALCDESTROYCONTEXT alcDestroyContext
{nullptr};
36 LPALCGETCURRENTCONTEXT alcGetCurrentContext
{nullptr};
37 LPALCGETCONTEXTSDEVICE alcGetContextsDevice
{nullptr};
38 LPALCOPENDEVICE alcOpenDevice
{nullptr};
39 LPALCCLOSEDEVICE alcCloseDevice
{nullptr};
40 LPALCGETERROR alcGetError
{nullptr};
41 LPALCISEXTENSIONPRESENT alcIsExtensionPresent
{nullptr};
42 LPALCGETPROCADDRESS alcGetProcAddress
{nullptr};
43 LPALCGETENUMVALUE alcGetEnumValue
{nullptr};
44 LPALCGETSTRING alcGetString
{nullptr};
45 LPALCGETINTEGERV alcGetIntegerv
{nullptr};
46 LPALCCAPTUREOPENDEVICE alcCaptureOpenDevice
{nullptr};
47 LPALCCAPTURECLOSEDEVICE alcCaptureCloseDevice
{nullptr};
48 LPALCCAPTURESTART alcCaptureStart
{nullptr};
49 LPALCCAPTURESTOP alcCaptureStop
{nullptr};
50 LPALCCAPTURESAMPLES alcCaptureSamples
{nullptr};
52 PFNALCSETTHREADCONTEXTPROC alcSetThreadContext
{nullptr};
53 PFNALCGETTHREADCONTEXTPROC alcGetThreadContext
{nullptr};
55 LPALENABLE alEnable
{nullptr};
56 LPALDISABLE alDisable
{nullptr};
57 LPALISENABLED alIsEnabled
{nullptr};
58 LPALGETSTRING alGetString
{nullptr};
59 LPALGETBOOLEANV alGetBooleanv
{nullptr};
60 LPALGETINTEGERV alGetIntegerv
{nullptr};
61 LPALGETFLOATV alGetFloatv
{nullptr};
62 LPALGETDOUBLEV alGetDoublev
{nullptr};
63 LPALGETBOOLEAN alGetBoolean
{nullptr};
64 LPALGETINTEGER alGetInteger
{nullptr};
65 LPALGETFLOAT alGetFloat
{nullptr};
66 LPALGETDOUBLE alGetDouble
{nullptr};
67 LPALGETERROR alGetError
{nullptr};
68 LPALISEXTENSIONPRESENT alIsExtensionPresent
{nullptr};
69 LPALGETPROCADDRESS alGetProcAddress
{nullptr};
70 LPALGETENUMVALUE alGetEnumValue
{nullptr};
71 LPALLISTENERF alListenerf
{nullptr};
72 LPALLISTENER3F alListener3f
{nullptr};
73 LPALLISTENERFV alListenerfv
{nullptr};
74 LPALLISTENERI alListeneri
{nullptr};
75 LPALLISTENER3I alListener3i
{nullptr};
76 LPALLISTENERIV alListeneriv
{nullptr};
77 LPALGETLISTENERF alGetListenerf
{nullptr};
78 LPALGETLISTENER3F alGetListener3f
{nullptr};
79 LPALGETLISTENERFV alGetListenerfv
{nullptr};
80 LPALGETLISTENERI alGetListeneri
{nullptr};
81 LPALGETLISTENER3I alGetListener3i
{nullptr};
82 LPALGETLISTENERIV alGetListeneriv
{nullptr};
83 LPALGENSOURCES alGenSources
{nullptr};
84 LPALDELETESOURCES alDeleteSources
{nullptr};
85 LPALISSOURCE alIsSource
{nullptr};
86 LPALSOURCEF alSourcef
{nullptr};
87 LPALSOURCE3F alSource3f
{nullptr};
88 LPALSOURCEFV alSourcefv
{nullptr};
89 LPALSOURCEI alSourcei
{nullptr};
90 LPALSOURCE3I alSource3i
{nullptr};
91 LPALSOURCEIV alSourceiv
{nullptr};
92 LPALGETSOURCEF alGetSourcef
{nullptr};
93 LPALGETSOURCE3F alGetSource3f
{nullptr};
94 LPALGETSOURCEFV alGetSourcefv
{nullptr};
95 LPALGETSOURCEI alGetSourcei
{nullptr};
96 LPALGETSOURCE3I alGetSource3i
{nullptr};
97 LPALGETSOURCEIV alGetSourceiv
{nullptr};
98 LPALSOURCEPLAYV alSourcePlayv
{nullptr};
99 LPALSOURCESTOPV alSourceStopv
{nullptr};
100 LPALSOURCEREWINDV alSourceRewindv
{nullptr};
101 LPALSOURCEPAUSEV alSourcePausev
{nullptr};
102 LPALSOURCEPLAY alSourcePlay
{nullptr};
103 LPALSOURCESTOP alSourceStop
{nullptr};
104 LPALSOURCEREWIND alSourceRewind
{nullptr};
105 LPALSOURCEPAUSE alSourcePause
{nullptr};
106 LPALSOURCEQUEUEBUFFERS alSourceQueueBuffers
{nullptr};
107 LPALSOURCEUNQUEUEBUFFERS alSourceUnqueueBuffers
{nullptr};
108 LPALGENBUFFERS alGenBuffers
{nullptr};
109 LPALDELETEBUFFERS alDeleteBuffers
{nullptr};
110 LPALISBUFFER alIsBuffer
{nullptr};
111 LPALBUFFERF alBufferf
{nullptr};
112 LPALBUFFER3F alBuffer3f
{nullptr};
113 LPALBUFFERFV alBufferfv
{nullptr};
114 LPALBUFFERI alBufferi
{nullptr};
115 LPALBUFFER3I alBuffer3i
{nullptr};
116 LPALBUFFERIV alBufferiv
{nullptr};
117 LPALGETBUFFERF alGetBufferf
{nullptr};
118 LPALGETBUFFER3F alGetBuffer3f
{nullptr};
119 LPALGETBUFFERFV alGetBufferfv
{nullptr};
120 LPALGETBUFFERI alGetBufferi
{nullptr};
121 LPALGETBUFFER3I alGetBuffer3i
{nullptr};
122 LPALGETBUFFERIV alGetBufferiv
{nullptr};
123 LPALBUFFERDATA alBufferData
{nullptr};
124 LPALDOPPLERFACTOR alDopplerFactor
{nullptr};
125 LPALDOPPLERVELOCITY alDopplerVelocity
{nullptr};
126 LPALSPEEDOFSOUND alSpeedOfSound
{nullptr};
127 LPALDISTANCEMODEL alDistanceModel
{nullptr};
129 /* Functions to load after first context creation. */
130 LPALGENFILTERS alGenFilters
{nullptr};
131 LPALDELETEFILTERS alDeleteFilters
{nullptr};
132 LPALISFILTER alIsFilter
{nullptr};
133 LPALFILTERF alFilterf
{nullptr};
134 LPALFILTERFV alFilterfv
{nullptr};
135 LPALFILTERI alFilteri
{nullptr};
136 LPALFILTERIV alFilteriv
{nullptr};
137 LPALGETFILTERF alGetFilterf
{nullptr};
138 LPALGETFILTERFV alGetFilterfv
{nullptr};
139 LPALGETFILTERI alGetFilteri
{nullptr};
140 LPALGETFILTERIV alGetFilteriv
{nullptr};
141 LPALGENEFFECTS alGenEffects
{nullptr};
142 LPALDELETEEFFECTS alDeleteEffects
{nullptr};
143 LPALISEFFECT alIsEffect
{nullptr};
144 LPALEFFECTF alEffectf
{nullptr};
145 LPALEFFECTFV alEffectfv
{nullptr};
146 LPALEFFECTI alEffecti
{nullptr};
147 LPALEFFECTIV alEffectiv
{nullptr};
148 LPALGETEFFECTF alGetEffectf
{nullptr};
149 LPALGETEFFECTFV alGetEffectfv
{nullptr};
150 LPALGETEFFECTI alGetEffecti
{nullptr};
151 LPALGETEFFECTIV alGetEffectiv
{nullptr};
152 LPALGENAUXILIARYEFFECTSLOTS alGenAuxiliaryEffectSlots
{nullptr};
153 LPALDELETEAUXILIARYEFFECTSLOTS alDeleteAuxiliaryEffectSlots
{nullptr};
154 LPALISAUXILIARYEFFECTSLOT alIsAuxiliaryEffectSlot
{nullptr};
155 LPALAUXILIARYEFFECTSLOTF alAuxiliaryEffectSlotf
{nullptr};
156 LPALAUXILIARYEFFECTSLOTFV alAuxiliaryEffectSlotfv
{nullptr};
157 LPALAUXILIARYEFFECTSLOTI alAuxiliaryEffectSloti
{nullptr};
158 LPALAUXILIARYEFFECTSLOTIV alAuxiliaryEffectSlotiv
{nullptr};
159 LPALGETAUXILIARYEFFECTSLOTF alGetAuxiliaryEffectSlotf
{nullptr};
160 LPALGETAUXILIARYEFFECTSLOTFV alGetAuxiliaryEffectSlotfv
{nullptr};
161 LPALGETAUXILIARYEFFECTSLOTI alGetAuxiliaryEffectSloti
{nullptr};
162 LPALGETAUXILIARYEFFECTSLOTIV alGetAuxiliaryEffectSlotiv
{nullptr};
165 DriverIface(T
&& name
, HMODULE mod
)
166 : Name(std::forward
<T
>(name
)), Module(mod
)
175 using DriverIfacePtr
= std::unique_ptr
<DriverIface
>;
177 inline std::vector
<DriverIfacePtr
> DriverList
;
179 inline thread_local DriverIface
*ThreadCtxDriver
{};
180 inline std::atomic
<DriverIface
*> CurrentCtxDriver
{};
182 inline DriverIface
*GetThreadDriver() noexcept
{ return ThreadCtxDriver
; }
183 inline void SetThreadDriver(DriverIface
*driver
) noexcept
{ ThreadCtxDriver
= driver
; }
186 enum class eLogLevel
{
192 extern eLogLevel LogLevel
;
193 extern gsl::owner
<std::FILE*> LogFile
;
195 #define TRACE(...) do { \
196 if(LogLevel >= eLogLevel::Trace) \
198 std::FILE *file{LogFile ? LogFile : stderr}; \
199 fprintf(file, "AL Router (II): " __VA_ARGS__); \
203 #define WARN(...) do { \
204 if(LogLevel >= eLogLevel::Warn) \
206 std::FILE *file{LogFile ? LogFile : stderr}; \
207 fprintf(file, "AL Router (WW): " __VA_ARGS__); \
211 #define ERR(...) do { \
212 if(LogLevel >= eLogLevel::Error) \
214 std::FILE *file{LogFile ? LogFile : stderr}; \
215 fprintf(file, "AL Router (EE): " __VA_ARGS__); \
220 #endif /* ROUTER_ROUTER_H */