router.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. #ifndef ROUTER_ROUTER_H
  2. #define ROUTER_ROUTER_H
  3. #define WIN32_LEAN_AND_MEAN
  4. #include <windows.h>
  5. #include <winnt.h>
  6. #include <stdio.h>
  7. #include "AL/alc.h"
  8. #include "AL/al.h"
  9. #include "AL/alext.h"
  10. #include "atomic.h"
  11. #include "rwlock.h"
  12. #include "threads.h"
  13. #ifndef UNUSED
  14. #if defined(__cplusplus)
  15. #define UNUSED(x)
  16. #elif defined(__GNUC__)
  17. #define UNUSED(x) UNUSED_##x __attribute__((unused))
  18. #elif defined(__LCLINT__)
  19. #define UNUSED(x) /*@unused@*/ x
  20. #else
  21. #define UNUSED(x) x
  22. #endif
  23. #endif
  24. #define MAKE_ALC_VER(major, minor) (((major)<<8) | (minor))
  25. typedef struct DriverIface {
  26. WCHAR Name[32];
  27. HMODULE Module;
  28. int ALCVer;
  29. LPALCCREATECONTEXT alcCreateContext;
  30. LPALCMAKECONTEXTCURRENT alcMakeContextCurrent;
  31. LPALCPROCESSCONTEXT alcProcessContext;
  32. LPALCSUSPENDCONTEXT alcSuspendContext;
  33. LPALCDESTROYCONTEXT alcDestroyContext;
  34. LPALCGETCURRENTCONTEXT alcGetCurrentContext;
  35. LPALCGETCONTEXTSDEVICE alcGetContextsDevice;
  36. LPALCOPENDEVICE alcOpenDevice;
  37. LPALCCLOSEDEVICE alcCloseDevice;
  38. LPALCGETERROR alcGetError;
  39. LPALCISEXTENSIONPRESENT alcIsExtensionPresent;
  40. LPALCGETPROCADDRESS alcGetProcAddress;
  41. LPALCGETENUMVALUE alcGetEnumValue;
  42. LPALCGETSTRING alcGetString;
  43. LPALCGETINTEGERV alcGetIntegerv;
  44. LPALCCAPTUREOPENDEVICE alcCaptureOpenDevice;
  45. LPALCCAPTURECLOSEDEVICE alcCaptureCloseDevice;
  46. LPALCCAPTURESTART alcCaptureStart;
  47. LPALCCAPTURESTOP alcCaptureStop;
  48. LPALCCAPTURESAMPLES alcCaptureSamples;
  49. PFNALCSETTHREADCONTEXTPROC alcSetThreadContext;
  50. PFNALCGETTHREADCONTEXTPROC alcGetThreadContext;
  51. LPALENABLE alEnable;
  52. LPALDISABLE alDisable;
  53. LPALISENABLED alIsEnabled;
  54. LPALGETSTRING alGetString;
  55. LPALGETBOOLEANV alGetBooleanv;
  56. LPALGETINTEGERV alGetIntegerv;
  57. LPALGETFLOATV alGetFloatv;
  58. LPALGETDOUBLEV alGetDoublev;
  59. LPALGETBOOLEAN alGetBoolean;
  60. LPALGETINTEGER alGetInteger;
  61. LPALGETFLOAT alGetFloat;
  62. LPALGETDOUBLE alGetDouble;
  63. LPALGETERROR alGetError;
  64. LPALISEXTENSIONPRESENT alIsExtensionPresent;
  65. LPALGETPROCADDRESS alGetProcAddress;
  66. LPALGETENUMVALUE alGetEnumValue;
  67. LPALLISTENERF alListenerf;
  68. LPALLISTENER3F alListener3f;
  69. LPALLISTENERFV alListenerfv;
  70. LPALLISTENERI alListeneri;
  71. LPALLISTENER3I alListener3i;
  72. LPALLISTENERIV alListeneriv;
  73. LPALGETLISTENERF alGetListenerf;
  74. LPALGETLISTENER3F alGetListener3f;
  75. LPALGETLISTENERFV alGetListenerfv;
  76. LPALGETLISTENERI alGetListeneri;
  77. LPALGETLISTENER3I alGetListener3i;
  78. LPALGETLISTENERIV alGetListeneriv;
  79. LPALGENSOURCES alGenSources;
  80. LPALDELETESOURCES alDeleteSources;
  81. LPALISSOURCE alIsSource;
  82. LPALSOURCEF alSourcef;
  83. LPALSOURCE3F alSource3f;
  84. LPALSOURCEFV alSourcefv;
  85. LPALSOURCEI alSourcei;
  86. LPALSOURCE3I alSource3i;
  87. LPALSOURCEIV alSourceiv;
  88. LPALGETSOURCEF alGetSourcef;
  89. LPALGETSOURCE3F alGetSource3f;
  90. LPALGETSOURCEFV alGetSourcefv;
  91. LPALGETSOURCEI alGetSourcei;
  92. LPALGETSOURCE3I alGetSource3i;
  93. LPALGETSOURCEIV alGetSourceiv;
  94. LPALSOURCEPLAYV alSourcePlayv;
  95. LPALSOURCESTOPV alSourceStopv;
  96. LPALSOURCEREWINDV alSourceRewindv;
  97. LPALSOURCEPAUSEV alSourcePausev;
  98. LPALSOURCEPLAY alSourcePlay;
  99. LPALSOURCESTOP alSourceStop;
  100. LPALSOURCEREWIND alSourceRewind;
  101. LPALSOURCEPAUSE alSourcePause;
  102. LPALSOURCEQUEUEBUFFERS alSourceQueueBuffers;
  103. LPALSOURCEUNQUEUEBUFFERS alSourceUnqueueBuffers;
  104. LPALGENBUFFERS alGenBuffers;
  105. LPALDELETEBUFFERS alDeleteBuffers;
  106. LPALISBUFFER alIsBuffer;
  107. LPALBUFFERF alBufferf;
  108. LPALBUFFER3F alBuffer3f;
  109. LPALBUFFERFV alBufferfv;
  110. LPALBUFFERI alBufferi;
  111. LPALBUFFER3I alBuffer3i;
  112. LPALBUFFERIV alBufferiv;
  113. LPALGETBUFFERF alGetBufferf;
  114. LPALGETBUFFER3F alGetBuffer3f;
  115. LPALGETBUFFERFV alGetBufferfv;
  116. LPALGETBUFFERI alGetBufferi;
  117. LPALGETBUFFER3I alGetBuffer3i;
  118. LPALGETBUFFERIV alGetBufferiv;
  119. LPALBUFFERDATA alBufferData;
  120. LPALDOPPLERFACTOR alDopplerFactor;
  121. LPALDOPPLERVELOCITY alDopplerVelocity;
  122. LPALSPEEDOFSOUND alSpeedOfSound;
  123. LPALDISTANCEMODEL alDistanceModel;
  124. } DriverIface;
  125. extern DriverIface *DriverList;
  126. extern int DriverListSize;
  127. extern altss_t ThreadCtxDriver;
  128. typedef ATOMIC(DriverIface*) atomic_DriverIfacePtr;
  129. extern atomic_DriverIfacePtr CurrentCtxDriver;
  130. typedef struct PtrIntMap {
  131. ALvoid **keys;
  132. /* Shares memory with keys. */
  133. ALint *values;
  134. ALsizei size;
  135. ALsizei capacity;
  136. RWLock lock;
  137. } PtrIntMap;
  138. #define PTRINTMAP_STATIC_INITIALIZE { NULL, NULL, 0, 0, RWLOCK_STATIC_INITIALIZE }
  139. void InitPtrIntMap(PtrIntMap *map);
  140. void ResetPtrIntMap(PtrIntMap *map);
  141. ALenum InsertPtrIntMapEntry(PtrIntMap *map, ALvoid *key, ALint value);
  142. ALint RemovePtrIntMapKey(PtrIntMap *map, ALvoid *key);
  143. ALint LookupPtrIntMapKey(PtrIntMap *map, ALvoid *key);
  144. void InitALC(void);
  145. void ReleaseALC(void);
  146. enum LogLevel {
  147. LogLevel_None = 0,
  148. LogLevel_Error = 1,
  149. LogLevel_Warn = 2,
  150. LogLevel_Trace = 3,
  151. };
  152. extern enum LogLevel LogLevel;
  153. extern FILE *LogFile;
  154. #define TRACE(...) do { \
  155. if(LogLevel >= LogLevel_Trace) \
  156. { \
  157. fprintf(LogFile, "AL Router (II): " __VA_ARGS__); \
  158. fflush(LogFile); \
  159. } \
  160. } while(0)
  161. #define WARN(...) do { \
  162. if(LogLevel >= LogLevel_Warn) \
  163. { \
  164. fprintf(LogFile, "AL Router (WW): " __VA_ARGS__); \
  165. fflush(LogFile); \
  166. } \
  167. } while(0)
  168. #define ERR(...) do { \
  169. if(LogLevel >= LogLevel_Error) \
  170. { \
  171. fprintf(LogFile, "AL Router (EE): " __VA_ARGS__); \
  172. fflush(LogFile); \
  173. } \
  174. } while(0)
  175. #endif /* ROUTER_ROUTER_H */