2 * OpenAL32.dll thunk. Wraps Win32 OpenAL function calls around a native
5 * Copyright 2007 Nick Burns (adger44@hotmail.com)
6 * Copyright 2007,2009 Chris Robinson
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
30 #include "wine/debug.h"
37 WINE_DEFAULT_DEBUG_CHANNEL(openal32
);
45 static const struct FuncList ALCFuncs
[];
46 static const struct FuncList ALFuncs
[];
49 /***********************************************************************
50 * OpenAL initialisation routine
52 BOOL WINAPI
DllMain( HINSTANCE hinst
, DWORD reason
, LPVOID reserved
)
56 case DLL_PROCESS_ATTACH
:
57 DisableThreadLibraryCalls(hinst
);
65 /***********************************************************************
66 * OpenAL thunk routines
69 /* OpenAL ALC 1.0 functions */
70 ALCcontext
* CDECL
wine_alcCreateContext(ALCdevice
*device
, const ALCint
* attrlist
)
72 return alcCreateContext(device
, attrlist
);
75 ALCboolean CDECL
wine_alcMakeContextCurrent(ALCcontext
*context
)
77 return alcMakeContextCurrent(context
);
80 ALvoid CDECL
wine_alcProcessContext(ALCcontext
*context
)
82 alcProcessContext(context
);
85 ALvoid CDECL
wine_alcSuspendContext(ALCcontext
*context
)
87 alcSuspendContext(context
);
90 ALvoid CDECL
wine_alcDestroyContext(ALCcontext
*context
)
92 alcDestroyContext(context
);
95 ALCcontext
* CDECL
wine_alcGetCurrentContext(ALCvoid
)
97 return alcGetCurrentContext();
100 ALCdevice
* CDECL
wine_alcGetContextsDevice(ALCcontext
*context
)
102 return alcGetContextsDevice(context
);
105 ALCdevice
* CDECL
wine_alcOpenDevice(const ALCchar
*devicename
)
107 return alcOpenDevice(devicename
);
110 ALCboolean CDECL
wine_alcCloseDevice(ALCdevice
*device
)
112 return alcCloseDevice(device
);
115 ALCenum CDECL
wine_alcGetError(ALCdevice
*device
)
117 return alcGetError(device
);
120 ALCboolean CDECL
wine_alcIsExtensionPresent(ALCdevice
*device
, const ALCchar
*extname
)
122 return alcIsExtensionPresent(device
, extname
);
125 ALCvoid
* CDECL
wine_alcGetProcAddress(ALCdevice
*device
, const ALCchar
*funcname
)
130 /* Make sure the host implementation has the requested function */
131 proc
= alcGetProcAddress(device
, funcname
);
135 for(i
= 0;ALCFuncs
[i
].name
;i
++)
137 if(strcmp(funcname
, ALCFuncs
[i
].name
) == 0)
138 return ALCFuncs
[i
].proc
;
140 FIXME("Could not find function in list: %s\n", funcname
);
144 ALCenum CDECL
wine_alcGetEnumValue(ALCdevice
*device
, const ALCchar
*enumname
)
146 return alcGetEnumValue(device
, enumname
);
149 const ALCchar
* CDECL
wine_alcGetString(ALCdevice
*device
, ALCenum param
)
151 return alcGetString(device
, param
);
154 ALvoid CDECL
wine_alcGetIntegerv(ALCdevice
*device
, ALCenum param
, ALCsizei size
, ALCint
*dest
)
156 return alcGetIntegerv(device
, param
, size
, dest
);
160 /* OpenAL 1.0 functions */
161 ALvoid CDECL
wine_alEnable(ALenum capability
)
163 alEnable(capability
);
166 ALvoid CDECL
wine_alDisable(ALenum capability
)
168 alDisable(capability
);
171 ALboolean CDECL
wine_alIsEnabled(ALenum capability
)
173 return alIsEnabled(capability
);
176 const ALchar
* CDECL
wine_alGetString(ALenum param
)
178 return alGetString(param
);
181 ALvoid CDECL
wine_alGetBooleanv(ALenum param
, ALboolean
* data
)
183 alGetBooleanv(param
, data
);
186 ALvoid CDECL
wine_alGetIntegerv(ALenum param
, ALint
* data
)
188 alGetIntegerv(param
, data
);
191 ALvoid CDECL
wine_alGetFloatv(ALenum param
, ALfloat
* data
)
193 alGetFloatv(param
, data
);
196 ALvoid CDECL
wine_alGetDoublev(ALenum param
, ALdouble
* data
)
198 alGetDoublev(param
, data
);
201 ALboolean CDECL
wine_alGetBoolean(ALenum param
)
203 return alGetBoolean(param
);
206 ALint CDECL
wine_alGetInteger(ALenum param
)
208 return alGetInteger(param
);
211 ALfloat CDECL
wine_alGetFloat(ALenum param
)
213 return alGetFloat(param
);
216 ALdouble CDECL
wine_alGetDouble(ALenum param
)
218 return alGetDouble(param
);
221 ALenum CDECL
wine_alGetError(ALvoid
)
226 ALboolean CDECL
wine_alIsExtensionPresent(const ALchar
* extname
)
228 return alIsExtensionPresent(extname
);
231 ALvoid
* CDECL
wine_alGetProcAddress(const ALchar
* funcname
)
236 /* Make sure the host implementation has the requested function. This will
237 * also set the last AL error properly if the function should not be
238 * returned (eg. no current context). */
239 proc
= alGetProcAddress(funcname
);
243 for(i
= 0;ALFuncs
[i
].name
;i
++)
245 if(strcmp(funcname
, ALFuncs
[i
].name
) == 0)
246 return ALFuncs
[i
].proc
;
248 FIXME("Could not find function in list: %s\n", funcname
);
252 ALenum CDECL
wine_alGetEnumValue(const ALchar
* ename
)
254 return alGetEnumValue(ename
);
257 ALvoid CDECL
wine_alListenerf(ALenum param
, ALfloat value
)
259 alListenerf(param
, value
);
262 ALvoid CDECL
wine_alListener3f(ALenum param
, ALfloat value1
, ALfloat value2
, ALfloat value3
)
264 alListener3f(param
, value1
, value2
, value3
);
267 ALvoid CDECL
wine_alListenerfv(ALenum param
, const ALfloat
* values
)
269 alListenerfv(param
, values
);
272 ALvoid CDECL
wine_alListeneri(ALenum param
, ALint value
)
274 alListeneri(param
, value
);
277 ALvoid CDECL
wine_alGetListenerf(ALenum param
, ALfloat
* value
)
279 alGetListenerf(param
, value
);
282 ALvoid CDECL
wine_alGetListener3f(ALenum param
, ALfloat
*value1
, ALfloat
*value2
, ALfloat
*value3
)
284 alGetListener3f(param
, value1
, value2
, value3
);
287 ALvoid CDECL
wine_alGetListenerfv(ALenum param
, ALfloat
* values
)
289 alGetListenerfv(param
, values
);
292 ALvoid CDECL
wine_alGetListeneri(ALenum param
, ALint
* value
)
294 alGetListeneri(param
, value
);
297 ALvoid CDECL
wine_alGetListeneriv(ALenum param
, ALint
* values
)
299 alGetListeneriv(param
, values
);
302 ALvoid CDECL
wine_alGenSources(ALsizei n
, ALuint
* sources
)
304 alGenSources(n
, sources
);
307 ALvoid CDECL
wine_alDeleteSources(ALsizei n
, const ALuint
* sources
)
309 alDeleteSources(n
, sources
);
312 ALboolean CDECL
wine_alIsSource(ALuint sid
)
314 return alIsSource(sid
);
317 ALvoid CDECL
wine_alSourcef(ALuint sid
, ALenum param
, ALfloat value
)
319 alSourcef(sid
, param
, value
);
322 ALvoid CDECL
wine_alSource3f(ALuint sid
, ALenum param
, ALfloat value1
, ALfloat value2
, ALfloat value3
)
324 alSource3f(sid
, param
, value1
, value2
, value3
);
327 ALvoid CDECL
wine_alSourcefv(ALuint sid
, ALenum param
, const ALfloat
* values
)
329 alSourcefv(sid
, param
, values
);
332 ALvoid CDECL
wine_alSourcei(ALuint sid
, ALenum param
, ALint value
)
334 alSourcei(sid
, param
, value
);
337 ALvoid CDECL
wine_alGetSourcef(ALuint sid
, ALenum param
, ALfloat
* value
)
339 alGetSourcef(sid
, param
, value
);
342 ALvoid CDECL
wine_alGetSource3f(ALuint sid
, ALenum param
, ALfloat
* value1
, ALfloat
* value2
, ALfloat
* value3
)
344 alGetSource3f(sid
, param
, value1
, value2
, value3
);
347 ALvoid CDECL
wine_alGetSourcefv(ALuint sid
, ALenum param
, ALfloat
* values
)
349 alGetSourcefv(sid
, param
, values
);
352 ALvoid CDECL
wine_alGetSourcei(ALuint sid
, ALenum param
, ALint
* value
)
354 alGetSourcei(sid
, param
, value
);
357 ALvoid CDECL
wine_alGetSourceiv(ALuint sid
, ALenum param
, ALint
* values
)
359 alGetSourceiv(sid
, param
, values
);
362 ALvoid CDECL
wine_alSourcePlayv(ALsizei ns
, const ALuint
*sids
)
364 alSourcePlayv(ns
, sids
);
367 ALvoid CDECL
wine_alSourceStopv(ALsizei ns
, const ALuint
*sids
)
369 alSourceStopv(ns
, sids
);
372 ALvoid CDECL
wine_alSourceRewindv(ALsizei ns
, const ALuint
*sids
)
374 alSourceRewindv(ns
, sids
);
377 ALvoid CDECL
wine_alSourcePausev(ALsizei ns
, const ALuint
*sids
)
379 alSourcePausev(ns
, sids
);
382 ALvoid CDECL
wine_alSourcePlay(ALuint sid
)
387 ALvoid CDECL
wine_alSourceStop(ALuint sid
)
392 ALvoid CDECL
wine_alSourceRewind(ALuint sid
)
397 ALvoid CDECL
wine_alSourcePause(ALuint sid
)
402 ALvoid CDECL
wine_alSourceQueueBuffers(ALuint sid
, ALsizei numEntries
, const ALuint
*bids
)
404 alSourceQueueBuffers(sid
, numEntries
, bids
);
407 ALvoid CDECL
wine_alSourceUnqueueBuffers(ALuint sid
, ALsizei numEntries
, ALuint
*bids
)
409 alSourceUnqueueBuffers(sid
, numEntries
, bids
);
412 ALvoid CDECL
wine_alGenBuffers(ALsizei n
, ALuint
* buffers
)
414 alGenBuffers(n
, buffers
);
417 ALvoid CDECL
wine_alDeleteBuffers(ALsizei n
, const ALuint
* buffers
)
419 alDeleteBuffers(n
, buffers
);
422 ALboolean CDECL
wine_alIsBuffer(ALuint bid
)
424 return alIsBuffer(bid
);
427 ALvoid CDECL
wine_alBufferData(ALuint bid
, ALenum format
, const ALvoid
* data
, ALsizei size
, ALsizei freq
)
429 alBufferData(bid
, format
, data
, size
, freq
);
432 ALvoid CDECL
wine_alGetBufferf(ALuint bid
, ALenum param
, ALfloat
* value
)
434 alGetBufferf(bid
, param
, value
);
437 ALvoid CDECL
wine_alGetBufferfv(ALuint bid
, ALenum param
, ALfloat
* values
)
439 alGetBufferfv(bid
, param
, values
);
442 ALvoid CDECL
wine_alGetBufferi(ALuint bid
, ALenum param
, ALint
* value
)
444 alGetBufferi(bid
, param
, value
);
447 ALvoid CDECL
wine_alGetBufferiv(ALuint bid
, ALenum param
, ALint
* values
)
449 alGetBufferiv(bid
, param
, values
);
452 ALvoid CDECL
wine_alDopplerFactor(ALfloat value
)
454 alDopplerFactor(value
);
457 ALvoid CDECL
wine_alDopplerVelocity(ALfloat value
)
459 alDopplerVelocity(value
);
462 ALvoid CDECL
wine_alDistanceModel(ALenum distanceModel
)
464 alDistanceModel(distanceModel
);
468 /* OpenAL ALC 1.1 functions */
469 ALCdevice
* CDECL
wine_alcCaptureOpenDevice(const ALCchar
*devicename
, ALCuint frequency
, ALCenum format
, ALCsizei buffersize
)
471 return alcCaptureOpenDevice(devicename
, frequency
, format
, buffersize
);
474 ALCboolean CDECL
wine_alcCaptureCloseDevice(ALCdevice
*device
)
476 return alcCaptureCloseDevice(device
);
479 ALCvoid CDECL
wine_alcCaptureStart(ALCdevice
*device
)
481 alcCaptureStart(device
);
484 ALCvoid CDECL
wine_alcCaptureStop(ALCdevice
*device
)
486 alcCaptureStop(device
);
489 ALCvoid CDECL
wine_alcCaptureSamples(ALCdevice
*device
, ALCvoid
*buffer
, ALCsizei samples
)
491 alcCaptureSamples(device
, buffer
, samples
);
494 /* OpenAL 1.1 functions */
495 ALvoid CDECL
wine_alListener3i(ALenum param
, ALint value1
, ALint value2
, ALint value3
)
497 alListener3i(param
, value1
, value2
, value3
);
500 ALvoid CDECL
wine_alListeneriv(ALenum param
, const ALint
* values
)
502 alListeneriv(param
, values
);
505 ALvoid CDECL
wine_alGetListener3i(ALenum param
, ALint
*value1
, ALint
*value2
, ALint
*value3
)
507 alGetListener3i(param
, value1
, value2
, value3
);
510 ALvoid CDECL
wine_alSource3i(ALuint sid
, ALenum param
, ALint value1
, ALint value2
, ALint value3
)
512 alSource3i(sid
, param
, value1
, value2
, value3
);
515 ALvoid CDECL
wine_alSourceiv(ALuint sid
, ALenum param
, const ALint
* values
)
517 alSourceiv(sid
, param
, values
);
520 ALvoid CDECL
wine_alGetSource3i(ALuint sid
, ALenum param
, ALint
* value1
, ALint
* value2
, ALint
* value3
)
522 alGetSource3i(sid
, param
, value1
, value2
, value3
);
525 ALvoid CDECL
wine_alBufferf(ALuint bid
, ALenum param
, ALfloat value
)
527 alBufferf(bid
, param
, value
);
530 ALvoid CDECL
wine_alBuffer3f(ALuint bid
, ALenum param
, ALfloat value1
, ALfloat value2
, ALfloat value3
)
532 alBuffer3f(bid
, param
, value1
, value2
, value3
);
535 ALvoid CDECL
wine_alBufferfv(ALuint bid
, ALenum param
, const ALfloat
* values
)
537 alBufferfv(bid
, param
, values
);
540 ALvoid CDECL
wine_alBufferi(ALuint bid
, ALenum param
, ALint value
)
542 alBufferi(bid
, param
, value
);
545 ALvoid CDECL
wine_alBuffer3i(ALuint bid
, ALenum param
, ALint value1
, ALint value2
, ALint value3
)
547 alBuffer3i(bid
, param
, value1
, value2
, value3
);
550 ALvoid CDECL
wine_alBufferiv(ALuint bid
, ALenum param
, const ALint
* values
)
552 alBufferiv(bid
, param
, values
);
555 ALvoid CDECL
wine_alGetBuffer3f(ALuint bid
, ALenum param
, ALfloat
* value1
, ALfloat
* value2
, ALfloat
* value3
)
557 alGetBuffer3f(bid
, param
, value1
, value2
, value3
);
560 ALvoid CDECL
wine_alGetBuffer3i(ALuint bid
, ALenum param
, ALint
* value1
, ALint
* value2
, ALint
* value3
)
562 alGetBuffer3i(bid
, param
, value1
, value2
, value3
);
565 ALvoid CDECL
wine_alSpeedOfSound(ALfloat value
)
567 alSpeedOfSound(value
);
570 static const struct FuncList ALCFuncs
[] = {
571 { "alcCreateContext", wine_alcCreateContext
},
572 { "alcMakeContextCurrent", wine_alcMakeContextCurrent
},
573 { "alcProcessContext", wine_alcProcessContext
},
574 { "alcSuspendContext", wine_alcSuspendContext
},
575 { "alcDestroyContext", wine_alcDestroyContext
},
576 { "alcGetCurrentContext", wine_alcGetCurrentContext
},
577 { "alcGetContextsDevice", wine_alcGetContextsDevice
},
578 { "alcOpenDevice", wine_alcOpenDevice
},
579 { "alcCloseDevice", wine_alcCloseDevice
},
580 { "alcGetError", wine_alcGetError
},
581 { "alcIsExtensionPresent", wine_alcIsExtensionPresent
},
582 { "alcGetProcAddress", wine_alcGetProcAddress
},
583 { "alcGetEnumValue", wine_alcGetEnumValue
},
584 { "alcGetString", wine_alcGetString
},
585 { "alcGetIntegerv", wine_alcGetIntegerv
},
586 { "alcCaptureOpenDevice", wine_alcCaptureOpenDevice
},
587 { "alcCaptureCloseDevice", wine_alcCaptureCloseDevice
},
588 { "alcCaptureStart", wine_alcCaptureStart
},
589 { "alcCaptureStop", wine_alcCaptureStop
},
590 { "alcCaptureSamples", wine_alcCaptureSamples
},
593 static const struct FuncList ALFuncs
[] = {
594 { "alEnable", wine_alEnable
},
595 { "alDisable", wine_alDisable
},
596 { "alIsEnabled", wine_alIsEnabled
},
597 { "alGetString", wine_alGetString
},
598 { "alGetBooleanv", wine_alGetBooleanv
},
599 { "alGetIntegerv", wine_alGetIntegerv
},
600 { "alGetFloatv", wine_alGetFloatv
},
601 { "alGetDoublev", wine_alGetDoublev
},
602 { "alGetBoolean", wine_alGetBoolean
},
603 { "alGetInteger", wine_alGetInteger
},
604 { "alGetFloat", wine_alGetFloat
},
605 { "alGetDouble", wine_alGetDouble
},
606 { "alGetError", wine_alGetError
},
607 { "alIsExtensionPresent", wine_alIsExtensionPresent
},
608 { "alGetProcAddress", wine_alGetProcAddress
},
609 { "alGetEnumValue", wine_alGetEnumValue
},
610 { "alListenerf", wine_alListenerf
},
611 { "alListener3f", wine_alListener3f
},
612 { "alListenerfv", wine_alListenerfv
},
613 { "alListeneri", wine_alListeneri
},
614 { "alListener3i", wine_alListener3i
},
615 { "alListeneriv", wine_alListeneriv
},
616 { "alGetListenerf", wine_alGetListenerf
},
617 { "alGetListener3f", wine_alGetListener3f
},
618 { "alGetListenerfv", wine_alGetListenerfv
},
619 { "alGetListeneri", wine_alGetListeneri
},
620 { "alGetListener3i", wine_alGetListener3i
},
621 { "alGetListeneriv", wine_alGetListeneriv
},
622 { "alGenSources", wine_alGenSources
},
623 { "alDeleteSources", wine_alDeleteSources
},
624 { "alIsSource", wine_alIsSource
},
625 { "alSourcef", wine_alSourcef
},
626 { "alSource3f", wine_alSource3f
},
627 { "alSourcefv", wine_alSourcefv
},
628 { "alSourcei", wine_alSourcei
},
629 { "alSource3i", wine_alSource3i
},
630 { "alSourceiv", wine_alSourceiv
},
631 { "alGetSourcef", wine_alGetSourcef
},
632 { "alGetSource3f", wine_alGetSource3f
},
633 { "alGetSourcefv", wine_alGetSourcefv
},
634 { "alGetSourcei", wine_alGetSourcei
},
635 { "alGetSource3i", wine_alGetSource3i
},
636 { "alGetSourceiv", wine_alGetSourceiv
},
637 { "alSourcePlayv", wine_alSourcePlayv
},
638 { "alSourceStopv", wine_alSourceStopv
},
639 { "alSourceRewindv", wine_alSourceRewindv
},
640 { "alSourcePausev", wine_alSourcePausev
},
641 { "alSourcePlay", wine_alSourcePlay
},
642 { "alSourceStop", wine_alSourceStop
},
643 { "alSourceRewind", wine_alSourceRewind
},
644 { "alSourcePause", wine_alSourcePause
},
645 { "alSourceQueueBuffers", wine_alSourceQueueBuffers
},
646 { "alSourceUnqueueBuffers", wine_alSourceUnqueueBuffers
},
647 { "alGenBuffers", wine_alGenBuffers
},
648 { "alDeleteBuffers", wine_alDeleteBuffers
},
649 { "alIsBuffer", wine_alIsBuffer
},
650 { "alBufferData", wine_alBufferData
},
651 { "alBufferf", wine_alBufferf
},
652 { "alBuffer3f", wine_alBuffer3f
},
653 { "alBufferfv", wine_alBufferfv
},
654 { "alBufferi", wine_alBufferi
},
655 { "alBuffer3i", wine_alBuffer3i
},
656 { "alBufferiv", wine_alBufferiv
},
657 { "alGetBufferf", wine_alGetBufferf
},
658 { "alGetBuffer3f", wine_alGetBuffer3f
},
659 { "alGetBufferfv", wine_alGetBufferfv
},
660 { "alGetBufferi", wine_alGetBufferi
},
661 { "alGetBuffer3i", wine_alGetBuffer3i
},
662 { "alGetBufferiv", wine_alGetBufferiv
},
663 { "alDopplerFactor", wine_alDopplerFactor
},
664 { "alDopplerVelocity", wine_alDopplerVelocity
},
665 { "alSpeedOfSound", wine_alSpeedOfSound
},
666 { "alDistanceModel", wine_alDistanceModel
},