openal.c 39 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172
  1. #define HL_NAME(n) openal_##n
  2. #include <hl.h>
  3. #undef _GUID
  4. #ifdef OPENAL_STATIC
  5. #define AL_LIBTYPE_STATIC
  6. #define AL_ALEXT_PROTOTYPES
  7. #endif
  8. #if defined(__APPLE__) && !defined(openal_soft)
  9. #include <OpenAL/al.h>
  10. #include <OpenAL/alc.h>
  11. #else
  12. #include <AL/al.h>
  13. #include <AL/alc.h>
  14. #include <AL/alext.h>
  15. #endif
  16. // ----------------------------------------------------------------------------
  17. // ALC
  18. // ----------------------------------------------------------------------------
  19. #ifndef OPENAL_STATIC
  20. #define ALC_IMPORT(fun, t) t fun
  21. #include "ALCImports.h"
  22. #undef ALC_IMPORT
  23. #endif
  24. // Context management
  25. HL_PRIM ALCcontext* HL_NAME(alc_create_context)(ALCdevice *device, vbyte *attrlist) {
  26. return alcCreateContext(device, (ALCint*)attrlist);
  27. }
  28. HL_PRIM bool HL_NAME(alc_make_context_current)(ALCcontext *context) {
  29. return alcMakeContextCurrent(context) == ALC_TRUE;
  30. }
  31. HL_PRIM void HL_NAME(alc_process_context)(ALCcontext *context) {
  32. alcProcessContext(context);
  33. }
  34. HL_PRIM void HL_NAME(alc_suspend_context)(ALCcontext *context) {
  35. alcSuspendContext(context);
  36. }
  37. HL_PRIM void HL_NAME(alc_destroy_context)(ALCcontext *context) {
  38. alcDestroyContext(context);
  39. }
  40. HL_PRIM ALCcontext* HL_NAME(alc_get_current_context)() {
  41. return alcGetCurrentContext();
  42. }
  43. HL_PRIM ALCdevice* HL_NAME(alc_get_contexts_device)(ALCcontext *context) {
  44. return alcGetContextsDevice(context);
  45. }
  46. // Device management
  47. HL_PRIM ALCdevice* HL_NAME(alc_open_device)(vbyte *devicename) {
  48. return alcOpenDevice((char*)devicename);
  49. }
  50. HL_PRIM bool HL_NAME(alc_close_device)(ALCdevice *device) {
  51. return alcCloseDevice(device) == ALC_TRUE;
  52. }
  53. // Error support
  54. HL_PRIM int HL_NAME(alc_get_error)(ALCdevice *device) {
  55. return alcGetError(device);
  56. }
  57. // Extension support
  58. #define ALC_IMPORT(fun,t) fun = (t)alcGetProcAddress(device,#fun)
  59. HL_PRIM void HL_NAME(alc_load_extensions)(ALCdevice *device) {
  60. #ifndef OPENAL_STATIC
  61. # include "ALCImports.h"
  62. #endif
  63. }
  64. HL_PRIM bool HL_NAME(alc_is_extension_present)(ALCdevice *device, vbyte *extname) {
  65. return alcIsExtensionPresent(device, (char*)extname) == ALC_TRUE;
  66. }
  67. HL_PRIM int HL_NAME(alc_get_enum_value)(ALCdevice *device, vbyte *enumname) {
  68. return alcGetEnumValue(device, (char*)enumname);
  69. }
  70. // Query function
  71. HL_PRIM vbyte* HL_NAME(alc_get_string)(ALCdevice *device, int param) {
  72. return (vbyte*)alcGetString(device, param);
  73. }
  74. HL_PRIM void HL_NAME(alc_get_integerv)(ALCdevice *device, int param, int size, vbyte *values) {
  75. alcGetIntegerv(device, param, size, (ALCint*)values);
  76. }
  77. // Capture function
  78. HL_PRIM ALCdevice* HL_NAME(alc_capture_open_device)(vbyte *devicename, int frequency, int format, int buffersize) {
  79. return alcCaptureOpenDevice((char*)devicename, (ALCuint)frequency, format, buffersize);
  80. }
  81. HL_PRIM bool HL_NAME(alc_capture_close_device)(ALCdevice *device) {
  82. return alcCaptureCloseDevice(device) == ALC_TRUE;
  83. }
  84. HL_PRIM void HL_NAME(alc_capture_start)(ALCdevice *device) {
  85. alcCaptureStart(device);
  86. }
  87. HL_PRIM void HL_NAME(alc_capture_stop)(ALCdevice *device) {
  88. alcCaptureStop(device);
  89. }
  90. HL_PRIM void HL_NAME(alc_capture_samples)(ALCdevice *device, vbyte *buffer, int samples) {
  91. alcCaptureSamples(device, buffer, samples);
  92. }
  93. #define TDEVICE _ABSTRACT(alc_device)
  94. #define TCONTEXT _ABSTRACT(alc_context)
  95. DEFINE_PRIM(TCONTEXT, alc_create_context, TDEVICE _BYTES);
  96. DEFINE_PRIM(_BOOL, alc_make_context_current, TCONTEXT);
  97. DEFINE_PRIM(_VOID, alc_process_context, TCONTEXT);
  98. DEFINE_PRIM(_VOID, alc_suspend_context, TCONTEXT);
  99. DEFINE_PRIM(_VOID, alc_destroy_context, TCONTEXT);
  100. DEFINE_PRIM(TCONTEXT, alc_get_current_context, _NO_ARG);
  101. DEFINE_PRIM(TDEVICE, alc_get_contexts_device, TCONTEXT);
  102. DEFINE_PRIM(TDEVICE, alc_open_device, _BYTES);
  103. DEFINE_PRIM(_BOOL, alc_close_device, TDEVICE);
  104. DEFINE_PRIM(_I32, alc_get_error, TDEVICE);
  105. DEFINE_PRIM(_VOID, alc_load_extensions, TDEVICE);
  106. DEFINE_PRIM(_BOOL, alc_is_extension_present, TDEVICE _BYTES);
  107. DEFINE_PRIM(_I32, alc_get_enum_value, TDEVICE _BYTES);
  108. DEFINE_PRIM(_BYTES, alc_get_string, TDEVICE _I32);
  109. DEFINE_PRIM(_VOID, alc_get_integerv, TDEVICE _I32 _I32 _BYTES);
  110. DEFINE_PRIM(TDEVICE, alc_capture_open_device, _BYTES _I32 _I32 _I32);
  111. DEFINE_PRIM(_BOOL, alc_capture_close_device, TDEVICE);
  112. DEFINE_PRIM(_VOID, alc_capture_start, TDEVICE);
  113. DEFINE_PRIM(_VOID, alc_capture_stop, TDEVICE);
  114. DEFINE_PRIM(_VOID, alc_capture_samples, TDEVICE _BYTES _I32);
  115. // ----------------------------------------------------------------------------
  116. // AL
  117. // ----------------------------------------------------------------------------
  118. #ifndef OPENAL_STATIC
  119. #define AL_IMPORT(fun, t) t fun
  120. #include "ALImports.h"
  121. #undef AL_IMPORT
  122. #endif
  123. HL_PRIM void HL_NAME(al_doppler_factor)(float value) {
  124. alDopplerFactor(value);
  125. }
  126. HL_PRIM void HL_NAME(al_doppler_velocity)(float value) {
  127. alDopplerVelocity(value);
  128. }
  129. HL_PRIM void HL_NAME(al_speed_of_sound)(float value) {
  130. alSpeedOfSound(value);
  131. }
  132. HL_PRIM void HL_NAME(al_distance_model)(int value) {
  133. alDistanceModel(value);
  134. }
  135. // Renderer State management
  136. HL_PRIM void HL_NAME(al_enable)(int capability) {
  137. alEnable(capability);
  138. }
  139. HL_PRIM void HL_NAME(al_disable)(int capability) {
  140. alDisable(capability);
  141. }
  142. HL_PRIM bool HL_NAME(al_is_enabled)(int capability) {
  143. return alIsEnabled(capability) == AL_TRUE;
  144. }
  145. // State retrieval
  146. HL_PRIM void HL_NAME(al_get_booleanv)(int param, vbyte *values) {
  147. alGetBooleanv(param, (ALboolean*)values);
  148. }
  149. HL_PRIM void HL_NAME(al_get_integerv)(int param, vbyte *values) {
  150. alGetIntegerv(param, (ALint*)values);
  151. }
  152. HL_PRIM void HL_NAME(al_get_floatv)(int param, vbyte *values) {
  153. alGetFloatv(param, (ALfloat*)values);
  154. }
  155. HL_PRIM void HL_NAME(al_get_doublev)(int param, vbyte *values) {
  156. alGetDoublev(param, (ALdouble*)values);
  157. }
  158. HL_PRIM vbyte *HL_NAME(al_get_string)(int param) {
  159. return (vbyte*)alGetString(param);
  160. }
  161. HL_PRIM bool HL_NAME(al_get_boolean)(int param) {
  162. return alGetBoolean(param) == AL_TRUE;
  163. }
  164. HL_PRIM int HL_NAME(al_get_integer)(int param) {
  165. return alGetInteger(param);
  166. }
  167. HL_PRIM float HL_NAME(al_get_float)(int param) {
  168. return alGetFloat(param);
  169. }
  170. HL_PRIM double HL_NAME(al_get_double)(int param) {
  171. return alGetDouble(param);
  172. }
  173. // Error retrieval
  174. HL_PRIM int HL_NAME(al_get_error)() {
  175. return alGetError();
  176. }
  177. // Extension support
  178. #define AL_IMPORT(fun,t) fun = (t)alGetProcAddress(#fun)
  179. HL_PRIM void HL_NAME(al_load_extensions)() {
  180. #ifndef OPENAL_STATIC
  181. # include "ALImports.h"
  182. #endif
  183. }
  184. HL_PRIM bool HL_NAME(al_is_extension_present)(vbyte *extname) {
  185. return alIsExtensionPresent((char*)extname) == AL_TRUE;
  186. }
  187. HL_PRIM int HL_NAME(al_get_enum_value)(vbyte *ename) {
  188. return alGetEnumValue((char*)ename);
  189. }
  190. // Set Listener parameters
  191. HL_PRIM void HL_NAME(al_listenerf)(int param, float value) {
  192. alListenerf(param, value);
  193. }
  194. HL_PRIM void HL_NAME(al_listener3f)(int param, float value1, float value2, float value3) {
  195. alListener3f(param, value1, value2, value3);
  196. }
  197. HL_PRIM void HL_NAME(al_listenerfv)(int param, vbyte *values) {
  198. alListenerfv(param, (ALfloat*)values);
  199. }
  200. HL_PRIM void HL_NAME(al_listeneri)(int param, int value) {
  201. alListeneri(param, value);
  202. }
  203. HL_PRIM void HL_NAME(al_listener3i)(int param, int value1, int value2, int value3) {
  204. alListener3i(param, value1, value2, value3);
  205. }
  206. HL_PRIM void HL_NAME(al_listeneriv)(int param, vbyte *values) {
  207. alListeneriv(param, (ALint*)values);
  208. }
  209. // Get Listener parameters
  210. HL_PRIM float HL_NAME(al_get_listenerf)(int param) {
  211. float value;
  212. alGetListenerf(param, &value);
  213. return value;
  214. }
  215. HL_PRIM void HL_NAME(al_get_listener3f)(int param, float *value1, float *value2, float *value3) {
  216. alGetListener3f(param, value1, value2, value3);
  217. }
  218. HL_PRIM void HL_NAME(al_get_listenerfv)(int param, vbyte *values) {
  219. alGetListenerfv(param, (ALfloat*)values);
  220. }
  221. HL_PRIM int HL_NAME(al_get_listeneri)(int param) {
  222. int value;
  223. alGetListeneri(param, &value);
  224. return value;
  225. }
  226. HL_PRIM void HL_NAME(al_get_listener3i)(int param, int *value1, int *value2, int *value3) {
  227. alGetListener3i(param, value1, value2, value3);
  228. }
  229. HL_PRIM void HL_NAME(al_get_listeneriv)(int param, vbyte *values) {
  230. alGetListeneriv(param, (ALint*)values);
  231. }
  232. // Source management
  233. HL_PRIM void HL_NAME(al_gen_sources)(int n, vbyte *sources) {
  234. alGenSources(n, (ALuint*)sources);
  235. }
  236. HL_PRIM void HL_NAME(al_delete_sources)(int n, vbyte *sources) {
  237. alDeleteSources(n, (ALuint*)sources);
  238. }
  239. HL_PRIM bool HL_NAME(al_is_source)(unsigned source) {
  240. return alIsSource(source) == AL_TRUE;
  241. }
  242. // Set Source parameters
  243. HL_PRIM void HL_NAME(al_sourcef)(unsigned source, int param, float value) {
  244. alSourcef(source, param, value);
  245. }
  246. HL_PRIM void HL_NAME(al_source3f)(unsigned source, int param, float value1, float value2, float value3) {
  247. alSource3f(source, param, value1, value2, value3);
  248. }
  249. HL_PRIM void HL_NAME(al_sourcefv)(unsigned source, int param, vbyte *values) {
  250. alSourcefv(source, param, (ALfloat*)values);
  251. }
  252. HL_PRIM void HL_NAME(al_sourcei)(unsigned source, int param, int value) {
  253. alSourcei(source, param, value);
  254. }
  255. HL_PRIM void HL_NAME(al_source3i)(unsigned source, int param, int value1, int value2, int value3) {
  256. alSource3i(source, param, value1, value2, value3);
  257. }
  258. HL_PRIM void HL_NAME(al_sourceiv)(unsigned source, int param, vbyte *values) {
  259. alSourceiv(source, param, (ALint*)values);
  260. }
  261. // Get Source parameters
  262. HL_PRIM float HL_NAME(al_get_sourcef)(unsigned source, int param) {
  263. float value;
  264. alGetSourcef(source, param, &value);
  265. return value;
  266. }
  267. HL_PRIM void HL_NAME(al_get_source3f)(unsigned source, int param, float *value1, float *value2, float *value3) {
  268. alGetSource3f(source, param, value1, value2, value3);
  269. }
  270. HL_PRIM void HL_NAME(al_get_sourcefv)(unsigned source, int param, vbyte *values) {
  271. alGetSourcefv(source, param, (ALfloat*)values);
  272. }
  273. HL_PRIM int HL_NAME(al_get_sourcei)(unsigned source, int param) {
  274. int value;
  275. alGetSourcei(source, param, &value);
  276. return value;
  277. }
  278. HL_PRIM void HL_NAME(al_get_source3i)(unsigned source, int param, int *value1, int *value2, int *value3) {
  279. alGetSource3i(source, param, value1, value2, value3);
  280. }
  281. HL_PRIM void HL_NAME(al_get_sourceiv)(unsigned source, int param, vbyte *values) {
  282. alGetSourceiv(source, param, (ALint*)values);
  283. }
  284. // Source controls
  285. HL_PRIM void HL_NAME(al_source_playv)(int n, vbyte *sources) {
  286. alSourcePlayv(n, (ALuint*)sources);
  287. }
  288. HL_PRIM void HL_NAME(al_source_stopv)(int n, vbyte *sources) {
  289. alSourceStopv(n, (ALuint*)sources);
  290. }
  291. HL_PRIM void HL_NAME(al_source_rewindv)(int n, vbyte *sources) {
  292. alSourceRewindv(n, (ALuint*)sources);
  293. }
  294. HL_PRIM void HL_NAME(al_source_pausev)(int n, vbyte *sources) {
  295. alSourcePausev(n, (ALuint*)sources);
  296. }
  297. HL_PRIM void HL_NAME(al_source_play)(unsigned source) {
  298. alSourcePlay(source);
  299. }
  300. HL_PRIM void HL_NAME(al_source_stop)(unsigned source) {
  301. alSourceStop(source);
  302. }
  303. HL_PRIM void HL_NAME(al_source_rewind)(unsigned source) {
  304. alSourceRewind(source);
  305. }
  306. HL_PRIM void HL_NAME(al_source_pause)(unsigned source) {
  307. alSourcePause(source);
  308. }
  309. // Queue buffers onto a source
  310. HL_PRIM void HL_NAME(al_source_queue_buffers)(unsigned source, int nb, vbyte *buffers) {
  311. alSourceQueueBuffers(source, nb, (ALuint*)buffers);
  312. }
  313. HL_PRIM void HL_NAME(al_source_unqueue_buffers)(unsigned source, int nb, vbyte *buffers) {
  314. alSourceUnqueueBuffers(source, nb, (ALuint*)buffers);
  315. }
  316. // Buffer management
  317. HL_PRIM void HL_NAME(al_gen_buffers)(int n, vbyte *buffers) {
  318. alGenBuffers(n, (ALuint*)buffers);
  319. }
  320. HL_PRIM void HL_NAME(al_delete_buffers)(int n, vbyte *buffers) {
  321. alDeleteBuffers(n, (ALuint*)buffers);
  322. }
  323. HL_PRIM bool HL_NAME(al_is_buffer)(unsigned buffer) {
  324. return alIsBuffer(buffer) == AL_TRUE;
  325. }
  326. HL_PRIM void HL_NAME(al_buffer_data)(unsigned buffer, int format, vbyte *data, int size, int freq) {
  327. alBufferData(buffer, format, data, size, freq);
  328. }
  329. // Set Buffer parameters
  330. HL_PRIM void HL_NAME(al_bufferf)(unsigned buffer, int param, float value) {
  331. alBufferf(buffer, param, value);
  332. }
  333. HL_PRIM void HL_NAME(al_buffer3f)(unsigned buffer, int param, float value1, float value2, float value3) {
  334. alBuffer3f(buffer, param, value1, value2, value3);
  335. }
  336. HL_PRIM void HL_NAME(al_bufferfv)(unsigned buffer, int param, vbyte *values) {
  337. alBufferfv(buffer, param, (ALfloat*)values);
  338. }
  339. HL_PRIM void HL_NAME(al_bufferi)(unsigned buffer, int param, int value) {
  340. alBufferi(buffer, param, value);
  341. }
  342. HL_PRIM void HL_NAME(al_buffer3i)(unsigned buffer, int param, int value1, int value2, int value3) {
  343. alBuffer3i(buffer, param, value1, value2, value3);
  344. }
  345. HL_PRIM void HL_NAME(al_bufferiv)(unsigned buffer, int param, vbyte *values) {
  346. alBufferiv(buffer, param, (ALint*)values);
  347. }
  348. // Get Buffer parameters
  349. HL_PRIM float HL_NAME(al_get_bufferf)(unsigned buffer, int param) {
  350. float value;
  351. alGetBufferf(buffer, param, &value);
  352. return value;
  353. }
  354. HL_PRIM void HL_NAME(al_get_buffer3f)(unsigned buffer, int param, float *value1, float *value2, float *value3) {
  355. alGetBuffer3f(buffer, param, value1, value2, value3);
  356. }
  357. HL_PRIM void HL_NAME(al_get_bufferfv)(unsigned buffer, int param, vbyte *values) {
  358. alGetBufferfv(buffer, param, (ALfloat*)values);
  359. }
  360. HL_PRIM int HL_NAME(al_get_bufferi)(unsigned buffer, int param) {
  361. int value;
  362. alGetBufferi(buffer, param, &value);
  363. return value;
  364. }
  365. HL_PRIM void HL_NAME(al_get_buffer3i)(unsigned buffer, int param, int *value1, int *value2, int *value3) {
  366. alGetBuffer3i(buffer, param, value1, value2, value3);
  367. }
  368. HL_PRIM void HL_NAME(al_get_bufferiv)(unsigned buffer, int param, vbyte *values) {
  369. alGetBufferiv(buffer, param, (ALint*)values);
  370. }
  371. DEFINE_PRIM(_VOID, al_doppler_factor , _F32);
  372. DEFINE_PRIM(_VOID, al_doppler_velocity, _F32);
  373. DEFINE_PRIM(_VOID, al_speed_of_sound , _F32);
  374. DEFINE_PRIM(_VOID, al_distance_model , _I32);
  375. DEFINE_PRIM(_VOID, al_enable, _I32);
  376. DEFINE_PRIM(_VOID, al_disable, _I32);
  377. DEFINE_PRIM(_BOOL, al_is_enabled, _I32);
  378. DEFINE_PRIM(_VOID, al_get_booleanv, _I32 _BYTES);
  379. DEFINE_PRIM(_VOID, al_get_integerv, _I32 _BYTES);
  380. DEFINE_PRIM(_VOID, al_get_floatv, _I32 _BYTES);
  381. DEFINE_PRIM(_VOID, al_get_doublev, _I32 _BYTES);
  382. DEFINE_PRIM(_BYTES, al_get_string, _I32);
  383. DEFINE_PRIM(_BOOL, al_get_boolean, _I32);
  384. DEFINE_PRIM(_I32, al_get_integer, _I32);
  385. DEFINE_PRIM(_F32, al_get_float, _I32);
  386. DEFINE_PRIM(_F64, al_get_double, _I32);
  387. DEFINE_PRIM(_I32, al_get_error, _NO_ARG);
  388. DEFINE_PRIM(_VOID, al_load_extensions, _NO_ARG);
  389. DEFINE_PRIM(_BOOL, al_is_extension_present, _BYTES);
  390. DEFINE_PRIM(_I32, al_get_enum_value, _BYTES);
  391. DEFINE_PRIM(_VOID, al_listenerf, _I32 _F32);
  392. DEFINE_PRIM(_VOID, al_listener3f, _I32 _F32 _F32 _F32);
  393. DEFINE_PRIM(_VOID, al_listenerfv, _I32 _BYTES);
  394. DEFINE_PRIM(_VOID, al_listeneri, _I32 _I32);
  395. DEFINE_PRIM(_VOID, al_listener3i, _I32 _I32 _I32 _I32);
  396. DEFINE_PRIM(_VOID, al_listeneriv, _I32 _BYTES);
  397. DEFINE_PRIM(_F32, al_get_listenerf, _I32);
  398. DEFINE_PRIM(_VOID, al_get_listener3f, _I32 _REF(_F32) _REF(_F32) _REF(_F32));
  399. DEFINE_PRIM(_VOID, al_get_listenerfv, _I32 _BYTES);
  400. DEFINE_PRIM(_I32, al_get_listeneri, _I32);
  401. DEFINE_PRIM(_VOID, al_get_listener3i, _I32 _REF(_I32) _REF(_I32) _REF(_I32));
  402. DEFINE_PRIM(_VOID, al_get_listeneriv, _I32 _BYTES);
  403. DEFINE_PRIM(_VOID, al_gen_sources, _I32 _BYTES);
  404. DEFINE_PRIM(_VOID, al_delete_sources, _I32 _BYTES);
  405. DEFINE_PRIM(_BOOL, al_is_source, _I32);
  406. DEFINE_PRIM(_VOID, al_sourcef, _I32 _I32 _F32);
  407. DEFINE_PRIM(_VOID, al_source3f, _I32 _I32 _F32 _F32 _F32);
  408. DEFINE_PRIM(_VOID, al_sourcefv, _I32 _I32 _BYTES);
  409. DEFINE_PRIM(_VOID, al_sourcei, _I32 _I32 _I32);
  410. DEFINE_PRIM(_VOID, al_source3i, _I32 _I32 _I32 _I32 _I32);
  411. DEFINE_PRIM(_VOID, al_sourceiv, _I32 _I32 _BYTES);
  412. DEFINE_PRIM(_F32, al_get_sourcef, _I32 _I32);
  413. DEFINE_PRIM(_VOID, al_get_source3f, _I32 _I32 _REF(_F32) _REF(_F32) _REF(_F32));
  414. DEFINE_PRIM(_VOID, al_get_sourcefv, _I32 _I32 _BYTES);
  415. DEFINE_PRIM(_I32, al_get_sourcei, _I32 _I32);
  416. DEFINE_PRIM(_VOID, al_get_source3i, _I32 _I32 _REF(_I32) _REF(_I32) _REF(_I32));
  417. DEFINE_PRIM(_VOID, al_get_sourceiv, _I32 _I32 _BYTES);
  418. DEFINE_PRIM(_VOID, al_source_playv, _I32 _BYTES);
  419. DEFINE_PRIM(_VOID, al_source_stopv, _I32 _BYTES);
  420. DEFINE_PRIM(_VOID, al_source_rewindv, _I32 _BYTES);
  421. DEFINE_PRIM(_VOID, al_source_pausev, _I32 _BYTES);
  422. DEFINE_PRIM(_VOID, al_source_play, _I32);
  423. DEFINE_PRIM(_VOID, al_source_stop, _I32);
  424. DEFINE_PRIM(_VOID, al_source_rewind, _I32);
  425. DEFINE_PRIM(_VOID, al_source_pause, _I32);
  426. DEFINE_PRIM(_VOID, al_source_queue_buffers, _I32 _I32 _BYTES);
  427. DEFINE_PRIM(_VOID, al_source_unqueue_buffers, _I32 _I32 _BYTES);
  428. DEFINE_PRIM(_VOID, al_gen_buffers, _I32 _BYTES);
  429. DEFINE_PRIM(_VOID, al_delete_buffers, _I32 _BYTES);
  430. DEFINE_PRIM(_BOOL, al_is_buffer, _I32);
  431. DEFINE_PRIM(_VOID, al_buffer_data, _I32 _I32 _BYTES _I32 _I32);
  432. DEFINE_PRIM(_VOID, al_bufferf, _I32 _I32 _F32);
  433. DEFINE_PRIM(_VOID, al_buffer3f, _I32 _I32 _F32 _F32 _F32);
  434. DEFINE_PRIM(_VOID, al_bufferfv, _I32 _I32 _BYTES);
  435. DEFINE_PRIM(_VOID, al_bufferi, _I32 _I32 _I32);
  436. DEFINE_PRIM(_VOID, al_buffer3i, _I32 _I32 _I32 _I32 _I32);
  437. DEFINE_PRIM(_VOID, al_bufferiv, _I32 _I32 _BYTES);
  438. DEFINE_PRIM(_F32, al_get_bufferf, _I32 _I32);
  439. DEFINE_PRIM(_VOID, al_get_buffer3f, _I32 _I32 _REF(_F32) _REF(_F32) _REF(_F32));
  440. DEFINE_PRIM(_VOID, al_get_bufferfv, _I32 _I32 _BYTES);
  441. DEFINE_PRIM(_I32, al_get_bufferi, _I32 _I32);
  442. DEFINE_PRIM(_VOID, al_get_buffer3i, _I32 _I32 _REF(_I32) _REF(_I32) _REF(_I32));
  443. DEFINE_PRIM(_VOID, al_get_bufferiv, _I32 _I32 _BYTES);
  444. // ----------------------------------------------------------------------------
  445. // EXTENSIONS
  446. // ----------------------------------------------------------------------------
  447. #define CHECK_EXT(fun) if(fun == NULL) hl_error("Unsupported extension function")
  448. // ----------------------------------------------------------------------------
  449. #ifdef ALC_EXT_thread_local_context
  450. // ----------------------------------------------------------------------------
  451. HL_PRIM bool HL_NAME(alc_set_thread_context)(ALCcontext *context) {
  452. CHECK_EXT(alcSetThreadContext);
  453. return alcSetThreadContext(context) == ALC_TRUE;
  454. }
  455. HL_PRIM ALCcontext* HL_NAME(alc_get_thread_context)() {
  456. CHECK_EXT(alcGetThreadContext);
  457. return alcGetThreadContext();
  458. }
  459. DEFINE_PRIM(_BOOL, alc_set_thread_context, TCONTEXT);
  460. DEFINE_PRIM(TCONTEXT, alc_get_thread_context, _NO_ARG);
  461. #endif
  462. // ----------------------------------------------------------------------------
  463. #ifdef ALC_SOFT_loopback
  464. // ----------------------------------------------------------------------------
  465. HL_PRIM ALCdevice* HL_NAME(alc_loopback_open_device_soft)(vbyte *devicename) {
  466. CHECK_EXT(alcLoopbackOpenDeviceSOFT);
  467. return alcLoopbackOpenDeviceSOFT((char*)devicename);
  468. }
  469. HL_PRIM bool HL_NAME(alc_is_render_format_supported_soft)(ALCdevice *device, int freq, int channels, int type) {
  470. CHECK_EXT(alcIsRenderFormatSupportedSOFT);
  471. return alcIsRenderFormatSupportedSOFT(device, freq, channels, type) == ALC_TRUE;
  472. }
  473. HL_PRIM void HL_NAME(alc_render_samples_soft)(ALCdevice *device, vbyte *buffer, int samples) {
  474. CHECK_EXT(alcRenderSamplesSOFT);
  475. alcRenderSamplesSOFT(device, buffer, samples);
  476. }
  477. DEFINE_PRIM(TDEVICE, alc_loopback_open_device_soft, _BYTES);
  478. DEFINE_PRIM(_BOOL, alc_is_render_format_supported_soft, TDEVICE _I32 _I32 _I32);
  479. DEFINE_PRIM(_VOID, alc_render_samples_soft, TDEVICE _BYTES _I32);
  480. #endif
  481. // ----------------------------------------------------------------------------
  482. #ifdef ALC_SOFT_pause_device
  483. // ----------------------------------------------------------------------------
  484. HL_PRIM void HL_NAME(alc_device_pause_soft)(ALCdevice *device) {
  485. CHECK_EXT(alcDevicePauseSOFT);
  486. alcDevicePauseSOFT(device);
  487. }
  488. HL_PRIM void HL_NAME(alc_device_resume_soft)(ALCdevice *device) {
  489. CHECK_EXT(alcDeviceResumeSOFT);
  490. alcDeviceResumeSOFT(device);
  491. }
  492. DEFINE_PRIM(_VOID, alc_device_pause_soft, TDEVICE);
  493. DEFINE_PRIM(_VOID, alc_device_resume_soft, TDEVICE);
  494. #endif
  495. // ----------------------------------------------------------------------------
  496. #ifdef ALC_SOFT_HRTF
  497. // ----------------------------------------------------------------------------
  498. HL_PRIM vbyte* HL_NAME(alc_get_stringi_soft)(ALCdevice *device, int param, int index) {
  499. CHECK_EXT(alcGetStringiSOFT);
  500. return (vbyte*)alcGetStringiSOFT(device, param, index);
  501. }
  502. HL_PRIM bool HL_NAME(alc_reset_device_soft)(ALCdevice *device, vbyte *attribs) {
  503. CHECK_EXT(alcResetDeviceSOFT);
  504. return alcResetDeviceSOFT(device, (ALCint*)attribs) == ALC_TRUE;
  505. }
  506. DEFINE_PRIM(_BYTES, alc_get_stringi_soft, TDEVICE _I32 _I32);
  507. DEFINE_PRIM(_BOOL, alc_reset_device_soft, TDEVICE _BYTES);
  508. #endif
  509. // ----------------------------------------------------------------------------
  510. #ifdef ALC_SOFT_device_clock
  511. // ----------------------------------------------------------------------------
  512. HL_PRIM void HL_NAME(alc_get_integer64v_soft)(ALCdevice *device, int param, int index, vbyte *values) {
  513. CHECK_EXT(alcGetInteger64vSOFT);
  514. alcGetInteger64vSOFT(device, param, index, (ALCint64SOFT*)values);
  515. }
  516. DEFINE_PRIM(_VOID, alc_get_integer64v_soft, TDEVICE _I32 _I32 _BYTES);
  517. #endif
  518. // ----------------------------------------------------------------------------
  519. #ifdef ALC_SOFT_reopen_device
  520. // ----------------------------------------------------------------------------
  521. HL_PRIM bool HL_NAME(alc_reopen_device_soft)(ALCdevice *device, vbyte *deviceName, vbyte *attribs) {
  522. CHECK_EXT(alcReopenDeviceSOFT);
  523. return alcReopenDeviceSOFT(device, deviceName, (ALCint*)attribs);
  524. }
  525. DEFINE_PRIM(_BOOL, alc_reopen_device_soft, TDEVICE _BYTES _BYTES);
  526. #endif
  527. // ----------------------------------------------------------------------------
  528. #ifdef AL_EXT_STATIC_BUFFER
  529. // ----------------------------------------------------------------------------
  530. HL_PRIM void HL_NAME(al_buffer_data_static)(unsigned buffer, int format, vbyte *data, int len, int freq) {
  531. CHECK_EXT(alBufferDataStatic);
  532. alBufferDataStatic(buffer, format, data, len, freq);
  533. }
  534. DEFINE_PRIM(_VOID, al_buffer_data_static, _I32 _I32 _BYTES _I32 _I32);
  535. #endif
  536. // ----------------------------------------------------------------------------
  537. #ifdef AL_SOFT_buffer_sub_data
  538. // ----------------------------------------------------------------------------
  539. HL_PRIM void HL_NAME(al_buffer_sub_data_soft)(unsigned buffer, int format, vbyte *data, int offset, int length) {
  540. CHECK_EXT(alBufferSubDataSOFT);
  541. alBufferSubDataSOFT(buffer, format, data, offset, length);
  542. }
  543. DEFINE_PRIM(_VOID, al_buffer_sub_data_soft, _I32 _I32 _BYTES _I32 _I32);
  544. #endif
  545. // ----------------------------------------------------------------------------
  546. #ifdef AL_EXT_FOLDBACK
  547. // ----------------------------------------------------------------------------
  548. HL_PRIM void HL_NAME(al_request_foldback_start)(int mode, int count, int length, vbyte *mem, vclosure *callback) {
  549. CHECK_EXT(alRequestFoldbackStart);
  550. if( callback->hasValue ) hl_error("Cannot set foldback on closure callback");
  551. alRequestFoldbackStart(mode, count, length, (ALfloat*)mem, (LPALFOLDBACKCALLBACK)callback->fun);
  552. }
  553. HL_PRIM void HL_NAME(al_request_foldback_stop)() {
  554. CHECK_EXT(alRequestFoldbackStop);
  555. alRequestFoldbackStop();
  556. }
  557. DEFINE_PRIM(_VOID, al_request_foldback_start, _I32 _I32 _I32 _BYTES _FUN(_VOID, _I32 _I32));
  558. DEFINE_PRIM(_VOID, al_request_foldback_stop, _NO_ARG);
  559. #endif
  560. // ----------------------------------------------------------------------------
  561. #ifdef AL_SOFT_buffer_samples
  562. // ----------------------------------------------------------------------------
  563. HL_PRIM void HL_NAME(al_buffer_samples_soft)(unsigned buffer, int samplerate, int internatlformat, int samples, int channels, int type, vbyte *data) {
  564. CHECK_EXT(alBufferSamplesSOFT);
  565. alBufferSamplesSOFT(buffer, samplerate, internatlformat, samples, channels, type, data);
  566. }
  567. HL_PRIM void HL_NAME(al_buffer_sub_samples_soft)(unsigned buffer, int offset, int samples, int channels, int type, vbyte *data) {
  568. CHECK_EXT(alBufferSubSamplesSOFT);
  569. alBufferSubSamplesSOFT(buffer, offset, samples, channels, type, data);
  570. }
  571. HL_PRIM void HL_NAME(al_get_buffer_samples_soft)(unsigned buffer, int offset, int samples, int channels, int type, vbyte *data) {
  572. CHECK_EXT(alGetBufferSamplesSOFT);
  573. alGetBufferSamplesSOFT(buffer, offset, samples, channels, type, data);
  574. }
  575. HL_PRIM bool HL_NAME(al_is_buffer_format_supported_soft)(int format) {
  576. CHECK_EXT(alIsBufferFormatSupportedSOFT);
  577. return alIsBufferFormatSupportedSOFT(format) == AL_TRUE;
  578. }
  579. DEFINE_PRIM(_VOID, al_buffer_samples_soft, _I32 _I32 _I32 _I32 _I32 _I32 _BYTES);
  580. DEFINE_PRIM(_VOID, al_buffer_sub_samples_soft, _I32 _I32 _I32 _I32 _I32 _BYTES);
  581. DEFINE_PRIM(_VOID, al_get_buffer_samples_soft, _I32 _I32 _I32 _I32 _I32 _BYTES);
  582. DEFINE_PRIM(_BOOL, al_is_buffer_format_supported_soft, _I32);
  583. #endif
  584. // ----------------------------------------------------------------------------
  585. #ifdef AL_SOFT_source_latency
  586. // ----------------------------------------------------------------------------
  587. HL_PRIM void HL_NAME(al_sourced_soft)(unsigned source, int param, double value) {
  588. CHECK_EXT(alSourcedSOFT);
  589. alSourcedSOFT(source, param, value);
  590. }
  591. HL_PRIM void HL_NAME(al_source3d_soft)(unsigned source, int param, double value1, double value2, double value3) {
  592. CHECK_EXT(alSource3dSOFT);
  593. alSource3dSOFT(source, param, value1, value2, value3);
  594. }
  595. HL_PRIM void HL_NAME(al_sourcedv_soft)(unsigned source, int param, vbyte *values) {
  596. CHECK_EXT(alSourcedvSOFT);
  597. alSourcedvSOFT(source, param, (ALdouble*)values);
  598. }
  599. HL_PRIM double HL_NAME(al_get_sourced_soft)(unsigned source, int param) {
  600. double value;
  601. CHECK_EXT(alGetSourcedSOFT);
  602. alGetSourcedSOFT(source, param, &value);
  603. return value;
  604. }
  605. HL_PRIM void HL_NAME(al_get_source3d_soft)(unsigned source, int param, double *value1, double *value2, double *value3) {
  606. CHECK_EXT(alGetSource3dSOFT);
  607. alGetSource3dSOFT(source, param, value1, value2, value3);
  608. }
  609. HL_PRIM void HL_NAME(al_get_sourcedv_soft)(unsigned source, int param, vbyte *values) {
  610. CHECK_EXT(alGetSourcedvSOFT);
  611. alGetSourcedvSOFT(source, param, (ALdouble*)values);
  612. }
  613. #define I64_COMBINE(hi, lo) (((ALint64SOFT)hi) << 32) | lo
  614. #define I64_HI(v) v >> 32
  615. #define I64_LO(v) v & 0xFFFFFFFF;
  616. HL_PRIM void HL_NAME(al_sourcei64_soft)(unsigned source, int param, int valueHi, int valueLo) {
  617. CHECK_EXT(alSourcei64SOFT);
  618. alSourcei64SOFT(source, param, I64_COMBINE(valueHi, valueLo));
  619. }
  620. HL_PRIM void HL_NAME(al_source3i64_soft)(unsigned source, int param,
  621. int value1Hi, int value1Lo, int value2Hi, int value2Lo, int value3Hi, int value3Lo) {
  622. CHECK_EXT(alSource3i64SOFT);
  623. alSource3i64SOFT(source, param,
  624. I64_COMBINE(value1Hi, value1Lo),
  625. I64_COMBINE(value2Hi, value2Lo),
  626. I64_COMBINE(value3Hi, value3Lo));
  627. }
  628. HL_PRIM void HL_NAME(al_sourcei64v_soft)(unsigned source, int param, vbyte *values) {
  629. CHECK_EXT(alSourcei64vSOFT);
  630. alSourcei64vSOFT(source, param, (ALint64SOFT*)values);
  631. }
  632. HL_PRIM void HL_NAME(al_get_sourcei64_soft)(unsigned source, int param, int *valueHi, int *valueLo) {
  633. ALint64SOFT value;
  634. CHECK_EXT(alGetSourcei64SOFT);
  635. alGetSourcei64SOFT(source, param, &value);
  636. *valueHi = I64_HI(value);
  637. *valueLo = I64_LO(value);
  638. }
  639. HL_PRIM void HL_NAME(al_get_source3i64_soft)(unsigned source, int param,
  640. int *value1Hi, int *value1Lo, int *value2Hi, int *value2Lo, int *value3Hi, int *value3Lo) {
  641. ALint64SOFT value1, value2, value3;
  642. CHECK_EXT(alGetSource3i64SOFT);
  643. alGetSource3i64SOFT(source, param, &value1, &value2, &value3);
  644. *value1Hi = I64_HI(value1);
  645. *value1Lo = I64_LO(value1);
  646. *value2Hi = I64_HI(value2);
  647. *value2Lo = I64_LO(value2);
  648. *value3Hi = I64_HI(value3);
  649. *value3Lo = I64_LO(value3);
  650. }
  651. HL_PRIM void HL_NAME(al_get_sourcei64v_soft)(unsigned source, int param, vbyte *values) {
  652. CHECK_EXT(alGetSourcei64vSOFT);
  653. alGetSourcei64vSOFT(source, param, (ALint64SOFT*)values);
  654. }
  655. DEFINE_PRIM(_VOID, al_sourced_soft, _I32 _I32 _F64);
  656. DEFINE_PRIM(_VOID, al_source3d_soft, _I32 _I32 _F64 _F64 _F64);
  657. DEFINE_PRIM(_VOID, al_sourcedv_soft, _I32 _I32 _BYTES);
  658. DEFINE_PRIM(_F64, al_get_sourced_soft, _I32 _I32);
  659. DEFINE_PRIM(_VOID, al_get_source3d_soft, _I32 _I32 _REF(_F64) _REF(_F64) _REF(_F64));
  660. DEFINE_PRIM(_VOID, al_get_sourcedv_soft, _I32 _I32 _BYTES);
  661. DEFINE_PRIM(_VOID, al_sourcei64_soft, _I32 _I32 _I32 _I32);
  662. DEFINE_PRIM(_VOID, al_source3i64_soft, _I32 _I32 _I32 _I32 _I32 _I32 _I32 _I32);
  663. DEFINE_PRIM(_VOID, al_sourcei64v_soft, _I32 _I32 _BYTES);
  664. DEFINE_PRIM(_VOID, al_get_sourcei64_soft, _I32 _I32 _REF(_I32) _REF(_I32));
  665. DEFINE_PRIM(_VOID, al_get_source3i64_soft, _I32 _I32 _REF(_I32) _REF(_I32) _REF(_I32) _REF(_I32) _REF(_I32) _REF(_I32));
  666. DEFINE_PRIM(_VOID, al_get_sourcei64v_soft, _I32 _I32 _BYTES);
  667. #endif
  668. // ----------------------------------------------------------------------------
  669. #ifdef AL_SOFT_deferred_updates
  670. // ----------------------------------------------------------------------------
  671. HL_PRIM void HL_NAME(al_defer_updates_soft)() {
  672. CHECK_EXT(alDeferUpdatesSOFT);
  673. alDeferUpdatesSOFT();
  674. }
  675. HL_PRIM void HL_NAME(al_process_updates_soft)() {
  676. CHECK_EXT(alProcessUpdatesSOFT);
  677. alProcessUpdatesSOFT();
  678. }
  679. DEFINE_PRIM(_VOID, al_defer_updates_soft, _NO_ARG);
  680. DEFINE_PRIM(_VOID, al_process_updates_soft, _NO_ARG);
  681. #endif
  682. // ----------------------------------------------------------------------------
  683. #ifdef AL_SOFT_source_resampler
  684. // ----------------------------------------------------------------------------
  685. HL_PRIM vbyte* HL_NAME(al_get_stringi_soft)(int param, int index) {
  686. CHECK_EXT(alGetStringiSOFT);
  687. return (vbyte*)alGetStringiSOFT(param, index);
  688. }
  689. DEFINE_PRIM(_BYTES, al_get_stringi_soft, _I32 _I32);
  690. #endif
  691. // ----------------------------------------------------------------------------
  692. #ifdef AL_SOFT_events
  693. // ----------------------------------------------------------------------------
  694. HL_PRIM void HL_NAME(al_event_control_soft)(int count, int *types, bool enable) {
  695. CHECK_EXT(alEventControlSOFT);
  696. alEventControlSOFT(count, types, enable);
  697. }
  698. HL_PRIM void HL_NAME(al_event_callback_soft)(vclosure *callback, void *userParam) {
  699. CHECK_EXT(alEventCallbackSOFT);
  700. if( callback->hasValue ) hl_error("Cannot set closure callback");
  701. alEventCallbackSOFT((ALEVENTPROCSOFT)callback->fun, userParam);
  702. }
  703. HL_PRIM vbyte* HL_NAME(al_get_pointer_soft)(int param) {
  704. CHECK_EXT(alGetPointerSOFT);
  705. return (vbyte*)alGetPointerSOFT(param);
  706. }
  707. HL_PRIM void HL_NAME(al_get_pointerv_soft)(int param, void **values) {
  708. CHECK_EXT(alGetPointervSOFT);
  709. alGetPointervSOFT(param, values);
  710. }
  711. DEFINE_PRIM(_VOID, al_event_control_soft, _I32 _REF(_I32) _BOOL);
  712. DEFINE_PRIM(_VOID, al_event_callback_soft, _FUN(_VOID, _I32 _I32 _I32 _I32 _BYTES _DYN) _DYN);
  713. DEFINE_PRIM(_DYN, al_get_pointer_soft, _I32);
  714. DEFINE_PRIM(_VOID, al_get_pointerv_soft, _I32 _REF(_DYN));
  715. #endif
  716. // ----------------------------------------------------------------------------
  717. #ifdef AL_SOFT_callback_buffer
  718. // ----------------------------------------------------------------------------
  719. HL_PRIM void HL_NAME(al_buffer_callback_soft)(int buffer, int format, int freq, vclosure *callback, void *userptr) {
  720. CHECK_EXT(alBufferCallbackSOFT);
  721. if( callback->hasValue ) hl_error("Cannot set closure callback");
  722. alBufferCallbackSOFT(buffer, format, freq, (ALBUFFERCALLBACKTYPESOFT)callback->fun, userptr);
  723. }
  724. HL_PRIM void HL_NAME(al_get_buffer_ptr_soft)(int buffer, int param, void **ptr) {
  725. CHECK_EXT(alGetBufferPtrSOFT);
  726. alGetBufferPtrSOFT(buffer, param, ptr);
  727. }
  728. HL_PRIM void HL_NAME(al_get_buffer3_ptr_soft)(int buffer, int param, void **ptr0, void **ptr1, void **ptr2) {
  729. CHECK_EXT(alGetBuffer3PtrSOFT);
  730. alGetBuffer3PtrSOFT(buffer, param, ptr0, ptr1, ptr2);
  731. }
  732. HL_PRIM void HL_NAME(al_get_buffer_ptrv_soft)(int buffer, int param, void **ptr) {
  733. CHECK_EXT(alGetBufferPtrvSOFT);
  734. alGetBufferPtrvSOFT(buffer, param, ptr);
  735. }
  736. DEFINE_PRIM(_VOID, al_buffer_callback_soft, _I32 _I32 _I32 _FUN(_I32, _DYN _BYTES _I32) _DYN);
  737. DEFINE_PRIM(_VOID, al_get_buffer_ptr_soft, _I32 _I32 _REF(_DYN));
  738. DEFINE_PRIM(_VOID, al_get_buffer3_ptr_soft, _I32 _I32 _REF(_DYN) _REF(_DYN) _REF(_DYN));
  739. DEFINE_PRIM(_VOID, al_get_buffer_ptrv_soft, _I32 _I32 _REF(_DYN));
  740. #endif
  741. // ----------------------------------------------------------------------------
  742. #ifdef AL_SOFT_source_start_delay
  743. // ----------------------------------------------------------------------------
  744. HL_PRIM void HL_NAME(al_source_play_at_time_soft)(int source, int start_time_hi, int start_time_lo) {
  745. CHECK_EXT(alSourcePlayAtTimeSOFT);
  746. alSourcePlayAtTimeSOFT(source, I64_COMBINE(start_time_hi, start_time_lo));
  747. }
  748. HL_PRIM void HL_NAME(al_source_play_at_timev_soft)(int n, vbyte *sources, int start_time_hi, int start_time_lo) {
  749. CHECK_EXT(alSourcePlayAtTimevSOFT);
  750. alSourcePlayAtTimevSOFT(n, (ALuint*)sources, I64_COMBINE(start_time_hi, start_time_lo));
  751. }
  752. DEFINE_PRIM(_VOID, al_source_play_at_time_soft, _I32 _I32 _I32);
  753. DEFINE_PRIM(_VOID, al_source_play_at_timev_soft, _I32 _BYTES _I32 _I32);
  754. #endif
  755. // ----------------------------------------------------------------------------
  756. #ifdef ALC_EXT_EFX
  757. // ----------------------------------------------------------------------------
  758. HL_PRIM void HL_NAME(al_gen_effects)(int n, vbyte *effects) {
  759. alGenEffects(n, (ALuint*)effects);
  760. }
  761. HL_PRIM void HL_NAME(al_delete_effects)(int n, vbyte *effects) {
  762. alDeleteEffects(n, (ALuint*)effects);
  763. }
  764. HL_PRIM bool HL_NAME(al_is_effect)(unsigned effect) {
  765. return alIsEffect(effect) == AL_TRUE;
  766. }
  767. HL_PRIM void HL_NAME(al_effecti)(unsigned effect, int param, int iValue) {
  768. alEffecti(effect, param, iValue);
  769. }
  770. HL_PRIM void HL_NAME(al_effectiv)(unsigned effect, int param, vbyte *piValues) {
  771. alEffectiv(effect, param, (ALint*)piValues);
  772. }
  773. HL_PRIM void HL_NAME(al_effectf)(unsigned effect, int param, float flValue) {
  774. alEffectf(effect, param, flValue);
  775. }
  776. HL_PRIM void HL_NAME(al_effectfv)(unsigned effect, int param, vbyte *pflValues) {
  777. alEffectfv(effect, param, (ALfloat*)pflValues);
  778. }
  779. HL_PRIM int HL_NAME(al_get_effecti)(unsigned effect, int param) {
  780. int value;
  781. alGetEffecti(effect, param, &value);
  782. return value;
  783. }
  784. HL_PRIM void HL_NAME(al_get_effectiv)(unsigned effect, int param, vbyte *piValues) {
  785. alGetEffectiv(effect, param, (ALint*)piValues);
  786. }
  787. HL_PRIM float HL_NAME(al_get_effectf)(unsigned effect, int param) {
  788. float value;
  789. alGetEffectf(effect, param, &value);
  790. return value;
  791. }
  792. HL_PRIM void HL_NAME(al_get_effectfv)(unsigned effect, int param, vbyte *pflValues) {
  793. alGetEffectfv(effect, param, (ALfloat*)pflValues);
  794. }
  795. DEFINE_PRIM(_VOID, al_gen_effects, _I32 _BYTES);
  796. DEFINE_PRIM(_VOID, al_delete_effects, _I32 _BYTES);
  797. DEFINE_PRIM(_BOOL, al_is_effect, _I32);
  798. DEFINE_PRIM(_VOID, al_effecti, _I32 _I32 _I32);
  799. DEFINE_PRIM(_VOID, al_effectiv, _I32 _I32 _BYTES);
  800. DEFINE_PRIM(_VOID, al_effectf, _I32 _I32 _F32);
  801. DEFINE_PRIM(_VOID, al_effectfv, _I32 _I32 _BYTES);
  802. DEFINE_PRIM(_I32, al_get_effecti, _I32 _I32);
  803. DEFINE_PRIM(_VOID, al_get_effectiv, _I32 _I32 _BYTES);
  804. DEFINE_PRIM(_F32, al_get_effectf, _I32 _I32);
  805. DEFINE_PRIM(_VOID, al_get_effectfv, _I32 _I32 _BYTES);
  806. // ----------------------------------------------------------------------------
  807. HL_PRIM void HL_NAME(al_gen_filters)(int n, vbyte *filters) {
  808. alGenFilters(n, (ALuint*)filters);
  809. }
  810. HL_PRIM void HL_NAME(al_delete_filters)(int n, vbyte *filters) {
  811. alDeleteFilters(n, (ALuint*)filters);
  812. }
  813. HL_PRIM bool HL_NAME(al_is_filter)(unsigned filter) {
  814. return alIsFilter(filter) == AL_TRUE;
  815. }
  816. HL_PRIM void HL_NAME(al_filteri)(unsigned filter, int param, int iValue) {
  817. alFilteri(filter, param, iValue);
  818. }
  819. HL_PRIM void HL_NAME(al_filteriv)(unsigned filter, int param, vbyte *piValues) {
  820. alFilteriv(filter, param, (ALint*)piValues);
  821. }
  822. HL_PRIM void HL_NAME(al_filterf)(unsigned filter, int param, float flValue) {
  823. alFilterf(filter, param, flValue);
  824. }
  825. HL_PRIM void HL_NAME(al_filterfv)(unsigned filter, int param, vbyte *pflValues) {
  826. alFilterfv(filter, param, (ALfloat*)pflValues);
  827. }
  828. HL_PRIM int HL_NAME(al_get_filteri)(unsigned filter, int param) {
  829. int value;
  830. alGetFilteri(filter, param, &value);
  831. return value;
  832. }
  833. HL_PRIM void HL_NAME(al_get_filteriv)(unsigned filter, int param, vbyte *piValues) {
  834. alGetFilteriv(filter, param, (ALint*)piValues);
  835. }
  836. HL_PRIM float HL_NAME(al_get_filterf)(unsigned filter, int param) {
  837. float value;
  838. alGetFilterf(filter, param, &value);
  839. return value;
  840. }
  841. HL_PRIM void HL_NAME(al_get_filterfv)(unsigned filter, int param, vbyte *pflValues) {
  842. alGetFilterfv(filter, param, (ALfloat*)pflValues);
  843. }
  844. DEFINE_PRIM(_VOID, al_gen_filters, _I32 _BYTES);
  845. DEFINE_PRIM(_VOID, al_delete_filters, _I32 _BYTES);
  846. DEFINE_PRIM(_BOOL, al_is_filter, _I32);
  847. DEFINE_PRIM(_VOID, al_filteri, _I32 _I32 _I32);
  848. DEFINE_PRIM(_VOID, al_filteriv, _I32 _I32 _BYTES);
  849. DEFINE_PRIM(_VOID, al_filterf, _I32 _I32 _F32);
  850. DEFINE_PRIM(_VOID, al_filterfv, _I32 _I32 _BYTES);
  851. DEFINE_PRIM(_I32, al_get_filteri, _I32 _I32);
  852. DEFINE_PRIM(_VOID, al_get_filteriv, _I32 _I32 _BYTES);
  853. DEFINE_PRIM(_F32, al_get_filterf, _I32 _I32);
  854. DEFINE_PRIM(_VOID, al_get_filterfv, _I32 _I32 _BYTES);
  855. // ----------------------------------------------------------------------------
  856. HL_PRIM void HL_NAME(al_gen_auxiliary_effect_slots)(int n, vbyte *effectslots) {
  857. alGenAuxiliaryEffectSlots(n, (ALuint*)effectslots);
  858. }
  859. HL_PRIM void HL_NAME(al_delete_auxiliary_effect_slots)(int n, vbyte *effectslots) {
  860. alDeleteAuxiliaryEffectSlots(n, (ALuint*)effectslots);
  861. }
  862. HL_PRIM bool HL_NAME(al_is_auxiliary_effect_slot)(unsigned effectslot) {
  863. return alIsAuxiliaryEffectSlot(effectslot) == AL_TRUE;
  864. }
  865. HL_PRIM void HL_NAME(al_auxiliary_effect_sloti)(unsigned effectslot, int param, int iValue) {
  866. alAuxiliaryEffectSloti(effectslot, param, iValue);
  867. }
  868. HL_PRIM void HL_NAME(al_auxiliary_effect_slotiv)(unsigned effectslot, int param, vbyte *piValues) {
  869. alAuxiliaryEffectSlotiv(effectslot, param, (ALint*)piValues);
  870. }
  871. HL_PRIM void HL_NAME(al_auxiliary_effect_slotf)(unsigned effectslot, int param, float flValue) {
  872. alAuxiliaryEffectSlotf(effectslot, param, flValue);
  873. }
  874. HL_PRIM void HL_NAME(al_auxiliary_effect_slotfv)(unsigned effectslot, int param, vbyte *pflValues) {
  875. alAuxiliaryEffectSlotfv(effectslot, param, (ALfloat*)pflValues);
  876. }
  877. HL_PRIM int HL_NAME(al_get_auxiliary_effect_sloti)(unsigned effectslot, int param) {
  878. int value;
  879. alGetAuxiliaryEffectSloti(effectslot, param, &value);
  880. return value;
  881. }
  882. HL_PRIM void HL_NAME(al_get_auxiliary_effect_slotiv)(unsigned effectslot, int param, vbyte *piValues) {
  883. alGetAuxiliaryEffectSlotiv(effectslot, param, (ALint*)piValues);
  884. }
  885. HL_PRIM float HL_NAME(al_get_auxiliary_effect_slotf)(unsigned effectslot, int param) {
  886. float value;
  887. alGetAuxiliaryEffectSlotf(effectslot, param, &value);
  888. return value;
  889. }
  890. HL_PRIM void HL_NAME(al_get_auxiliary_effect_slotfv)(unsigned effectslot, int param, vbyte *pflValues) {
  891. alGetAuxiliaryEffectSlotfv(effectslot, param, (ALfloat*)pflValues);
  892. }
  893. DEFINE_PRIM(_VOID, al_gen_auxiliary_effect_slots, _I32 _BYTES);
  894. DEFINE_PRIM(_VOID, al_delete_auxiliary_effect_slots, _I32 _BYTES);
  895. DEFINE_PRIM(_BOOL, al_is_auxiliary_effect_slot, _I32);
  896. DEFINE_PRIM(_VOID, al_auxiliary_effect_sloti, _I32 _I32 _I32);
  897. DEFINE_PRIM(_VOID, al_auxiliary_effect_slotiv, _I32 _I32 _BYTES);
  898. DEFINE_PRIM(_VOID, al_auxiliary_effect_slotf, _I32 _I32 _F32);
  899. DEFINE_PRIM(_VOID, al_auxiliary_effect_slotfv, _I32 _I32 _BYTES);
  900. DEFINE_PRIM(_I32, al_get_auxiliary_effect_sloti, _I32 _I32);
  901. DEFINE_PRIM(_VOID, al_get_auxiliary_effect_slotiv, _I32 _I32 _BYTES);
  902. DEFINE_PRIM(_F32, al_get_auxiliary_effect_slotf, _I32 _I32);
  903. DEFINE_PRIM(_VOID, al_get_auxiliary_effect_slotfv, _I32 _I32 _BYTES);
  904. #endif