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
31 #elif defined(HAVE_OPENAL_AL_H)
32 #include <OpenAL/al.h>
33 #include <OpenAL/alc.h>
38 #include "wine/debug.h"
40 WINE_DEFAULT_DEBUG_CHANNEL(openal32
);
42 static ALCboolean (ALC_APIENTRY
*alcSetThreadContext
)(ALCcontext
*context
);
43 static ALCcontext
* (ALC_APIENTRY
*alcGetThreadContext
)(ALCvoid
);
45 static ALboolean loaded_procs
;
47 static ALvoid (AL_APIENTRY
*alBufferDataStatic
)(const ALuint bid
, ALenum format
, const ALvoid
* data
, ALsizei size
, ALsizei freq
);
48 static ALvoid (AL_APIENTRY
*alGenFilters
)(ALsizei n
, ALuint
* filters
);
49 static ALvoid (AL_APIENTRY
*alDeleteFilters
)(ALsizei n
, const ALuint
* filters
);
50 static ALboolean (AL_APIENTRY
*alIsFilter
)(ALuint fid
);
51 static ALvoid (AL_APIENTRY
*alFilterf
)(ALuint fid
, ALenum param
, ALfloat value
);
52 static ALvoid (AL_APIENTRY
*alFilterfv
)(ALuint fid
, ALenum param
, const ALfloat
* values
);
53 static ALvoid (AL_APIENTRY
*alFilteri
)(ALuint fid
, ALenum param
, ALint value
);
54 static ALvoid (AL_APIENTRY
*alFilteriv
)(ALuint fid
, ALenum param
, const ALint
* values
);
55 static ALvoid (AL_APIENTRY
*alGetFilterf
)(ALuint fid
, ALenum param
, ALfloat
* value
);
56 static ALvoid (AL_APIENTRY
*alGetFilterfv
)(ALuint fid
, ALenum param
, ALfloat
* values
);
57 static ALvoid (AL_APIENTRY
*alGetFilteri
)(ALuint fid
, ALenum param
, ALint
* value
);
58 static ALvoid (AL_APIENTRY
*alGetFilteriv
)(ALuint fid
, ALenum param
, ALint
* values
);
59 static ALvoid (AL_APIENTRY
*alGenEffects
)(ALsizei n
, ALuint
* effects
);
60 static ALvoid (AL_APIENTRY
*alDeleteEffects
)(ALsizei n
, const ALuint
* effects
);
61 static ALboolean (AL_APIENTRY
*alIsEffect
)(ALuint eid
);
62 static ALvoid (AL_APIENTRY
*alEffectf
)(ALuint eid
, ALenum param
, ALfloat value
);
63 static ALvoid (AL_APIENTRY
*alEffectfv
)(ALuint eid
, ALenum param
, const ALfloat
* values
);
64 static ALvoid (AL_APIENTRY
*alEffecti
)(ALuint eid
, ALenum param
, ALint value
);
65 static ALvoid (AL_APIENTRY
*alEffectiv
)(ALuint eid
, ALenum param
, const ALint
* values
);
66 static ALvoid (AL_APIENTRY
*alGetEffectf
)(ALuint eid
, ALenum param
, ALfloat
* value
);
67 static ALvoid (AL_APIENTRY
*alGetEffectfv
)(ALuint eid
, ALenum param
, ALfloat
* values
);
68 static ALvoid (AL_APIENTRY
*alGetEffecti
)(ALuint eid
, ALenum param
, ALint
* value
);
69 static ALvoid (AL_APIENTRY
*alGetEffectiv
)(ALuint eid
, ALenum param
, ALint
* values
);
70 static ALvoid (AL_APIENTRY
*alGenAuxiliaryEffectSlots
)(ALsizei n
, ALuint
* slots
);
71 static ALvoid (AL_APIENTRY
*alDeleteAuxiliaryEffectSlots
)(ALsizei n
, const ALuint
* slots
);
72 static ALboolean (AL_APIENTRY
*alIsAuxiliaryEffectSlot
)(ALuint sid
);
73 static ALvoid (AL_APIENTRY
*alAuxiliaryEffectSlotf
)(ALuint sid
, ALenum param
, ALfloat value
);
74 static ALvoid (AL_APIENTRY
*alAuxiliaryEffectSlotfv
)(ALuint sid
, ALenum param
, const ALfloat
* values
);
75 static ALvoid (AL_APIENTRY
*alAuxiliaryEffectSloti
)(ALuint sid
, ALenum param
, ALint value
);
76 static ALvoid (AL_APIENTRY
*alAuxiliaryEffectSlotiv
)(ALuint sid
, ALenum param
, const ALint
* values
);
77 static ALvoid (AL_APIENTRY
*alGetAuxiliaryEffectSlotf
)(ALuint sid
, ALenum param
, ALfloat
* value
);
78 static ALvoid (AL_APIENTRY
*alGetAuxiliaryEffectSlotfv
)(ALuint sid
, ALenum param
, ALfloat
* values
);
79 static ALvoid (AL_APIENTRY
*alGetAuxiliaryEffectSloti
)(ALuint sid
, ALenum param
, ALint
* value
);
80 static ALvoid (AL_APIENTRY
*alGetAuxiliaryEffectSlotiv
)(ALuint sid
, ALenum param
, ALint
* values
);
82 extern ALCvoid
* CDECL
wine_alcGetProcAddress(ALCdevice
*, const ALCchar
*);
83 extern ALvoid
* CDECL
wine_alGetProcAddress(const ALchar
*);
85 static CRITICAL_SECTION openal_cs
;
86 static CRITICAL_SECTION_DEBUG openal_cs_debug
=
89 {&openal_cs_debug
.ProcessLocksList
,
90 &openal_cs_debug
.ProcessLocksList
},
91 0, 0, {(DWORD_PTR
)(__FILE__
": openal_cs")}
93 static CRITICAL_SECTION openal_cs
= {&openal_cs_debug
, -1, 0, 0, 0, 0};
95 /***********************************************************************
96 * OpenAL initialisation routine
98 BOOL WINAPI
DllMain( HINSTANCE hinst
, DWORD reason
, LPVOID reserved
)
102 case DLL_WINE_PREATTACH
:
103 return FALSE
; /* prefer native version */
104 case DLL_PROCESS_ATTACH
:
105 DisableThreadLibraryCalls(hinst
);
106 #define LOADFUNC(x) x = alcGetProcAddress(NULL, #x)
107 LOADFUNC(alcSetThreadContext
);
108 LOADFUNC(alcGetThreadContext
);
111 case DLL_PROCESS_DETACH
:
113 DeleteCriticalSection(&openal_cs
);
120 static void LoadProcs(void)
122 #define LOADFUNC(x) x = alGetProcAddress(#x)
123 LOADFUNC(alBufferDataStatic
);
124 LOADFUNC(alGenFilters
);
125 LOADFUNC(alDeleteFilters
);
126 LOADFUNC(alIsFilter
);
128 LOADFUNC(alFilterfv
);
130 LOADFUNC(alFilteriv
);
131 LOADFUNC(alGetFilterf
);
132 LOADFUNC(alGetFilterfv
);
133 LOADFUNC(alGetFilteri
);
134 LOADFUNC(alGetFilteriv
);
135 LOADFUNC(alGenEffects
);
136 LOADFUNC(alDeleteEffects
);
137 LOADFUNC(alIsEffect
);
139 LOADFUNC(alEffectfv
);
141 LOADFUNC(alEffectiv
);
142 LOADFUNC(alGetEffectf
);
143 LOADFUNC(alGetEffectfv
);
144 LOADFUNC(alGetEffecti
);
145 LOADFUNC(alGetEffectiv
);
146 LOADFUNC(alGenAuxiliaryEffectSlots
);
147 LOADFUNC(alDeleteAuxiliaryEffectSlots
);
148 LOADFUNC(alIsAuxiliaryEffectSlot
);
149 LOADFUNC(alAuxiliaryEffectSlotf
);
150 LOADFUNC(alAuxiliaryEffectSlotfv
);
151 LOADFUNC(alAuxiliaryEffectSloti
);
152 LOADFUNC(alAuxiliaryEffectSlotiv
);
153 LOADFUNC(alGetAuxiliaryEffectSlotf
);
154 LOADFUNC(alGetAuxiliaryEffectSlotfv
);
155 LOADFUNC(alGetAuxiliaryEffectSloti
);
156 LOADFUNC(alGetAuxiliaryEffectSlotiv
);
160 /***********************************************************************
161 * OpenAL thunk routines
164 /* OpenAL ALC 1.0 functions */
165 ALCcontext
* CDECL
wine_alcCreateContext(ALCdevice
*device
, const ALCint
* attrlist
)
167 return alcCreateContext(device
, attrlist
);
170 ALCboolean CDECL
wine_alcMakeContextCurrent(ALCcontext
*context
)
172 EnterCriticalSection(&openal_cs
);
173 if(alcMakeContextCurrent(context
) == ALC_FALSE
)
175 WARN("Failed to make context %p current\n", context
);
176 LeaveCriticalSection(&openal_cs
);
180 if(context
&& !loaded_procs
)
182 loaded_procs
= AL_TRUE
;
185 LeaveCriticalSection(&openal_cs
);
190 ALvoid CDECL
wine_alcProcessContext(ALCcontext
*context
)
192 alcProcessContext(context
);
195 ALvoid CDECL
wine_alcSuspendContext(ALCcontext
*context
)
197 alcSuspendContext(context
);
200 ALvoid CDECL
wine_alcDestroyContext(ALCcontext
*context
)
202 alcDestroyContext(context
);
205 ALCcontext
* CDECL
wine_alcGetCurrentContext(ALCvoid
)
207 return alcGetCurrentContext();
210 ALCdevice
* CDECL
wine_alcGetContextsDevice(ALCcontext
*context
)
212 return alcGetContextsDevice(context
);
215 ALCdevice
* CDECL
wine_alcOpenDevice(const ALCchar
*devicename
)
217 if(devicename
!= NULL
&& (strcmp(devicename
, "DirectSound3D") == 0 ||
218 strcmp(devicename
, "DirectSound") == 0 ||
219 strcmp(devicename
, "Generic Hardware") == 0 ||
220 strcmp(devicename
, "Generic Software") == 0)) {
223 return alcOpenDevice(devicename
);
226 ALCboolean CDECL
wine_alcCloseDevice(ALCdevice
*device
)
228 return alcCloseDevice(device
);
231 ALCenum CDECL
wine_alcGetError(ALCdevice
*device
)
233 return alcGetError(device
);
236 ALCboolean CDECL
wine_alcIsExtensionPresent(ALCdevice
*device
, const ALCchar
*extname
)
238 return alcIsExtensionPresent(device
, extname
);
241 ALCenum CDECL
wine_alcGetEnumValue(ALCdevice
*device
, const ALCchar
*enumname
)
243 return alcGetEnumValue(device
, enumname
);
246 const ALCchar
* CDECL
wine_alcGetString(ALCdevice
*device
, ALCenum param
)
248 return alcGetString(device
, param
);
251 ALvoid CDECL
wine_alcGetIntegerv(ALCdevice
*device
, ALCenum param
, ALCsizei size
, ALCint
*dest
)
253 alcGetIntegerv(device
, param
, size
, dest
);
257 /* OpenAL 1.0 functions */
258 ALvoid CDECL
wine_alEnable(ALenum capability
)
260 alEnable(capability
);
263 ALvoid CDECL
wine_alDisable(ALenum capability
)
265 alDisable(capability
);
268 ALboolean CDECL
wine_alIsEnabled(ALenum capability
)
270 return alIsEnabled(capability
);
273 const ALchar
* CDECL
wine_alGetString(ALenum param
)
275 return alGetString(param
);
278 ALvoid CDECL
wine_alGetBooleanv(ALenum param
, ALboolean
* data
)
280 alGetBooleanv(param
, data
);
283 ALvoid CDECL
wine_alGetIntegerv(ALenum param
, ALint
* data
)
285 alGetIntegerv(param
, data
);
288 ALvoid CDECL
wine_alGetFloatv(ALenum param
, ALfloat
* data
)
290 alGetFloatv(param
, data
);
293 ALvoid CDECL
wine_alGetDoublev(ALenum param
, ALdouble
* data
)
295 alGetDoublev(param
, data
);
298 ALboolean CDECL
wine_alGetBoolean(ALenum param
)
300 return alGetBoolean(param
);
303 ALint CDECL
wine_alGetInteger(ALenum param
)
305 return alGetInteger(param
);
308 ALfloat CDECL
wine_alGetFloat(ALenum param
)
310 return alGetFloat(param
);
313 ALdouble CDECL
wine_alGetDouble(ALenum param
)
315 return alGetDouble(param
);
318 ALenum CDECL
wine_alGetError(ALvoid
)
323 ALboolean CDECL
wine_alIsExtensionPresent(const ALchar
* extname
)
325 return alIsExtensionPresent(extname
);
328 ALenum CDECL
wine_alGetEnumValue(const ALchar
* ename
)
330 return alGetEnumValue(ename
);
333 ALvoid CDECL
wine_alListenerf(ALenum param
, ALfloat value
)
335 alListenerf(param
, value
);
338 ALvoid CDECL
wine_alListener3f(ALenum param
, ALfloat value1
, ALfloat value2
, ALfloat value3
)
340 alListener3f(param
, value1
, value2
, value3
);
343 ALvoid CDECL
wine_alListenerfv(ALenum param
, const ALfloat
* values
)
345 alListenerfv(param
, values
);
348 ALvoid CDECL
wine_alListeneri(ALenum param
, ALint value
)
350 alListeneri(param
, value
);
353 ALvoid CDECL
wine_alGetListenerf(ALenum param
, ALfloat
* value
)
355 alGetListenerf(param
, value
);
358 ALvoid CDECL
wine_alGetListener3f(ALenum param
, ALfloat
*value1
, ALfloat
*value2
, ALfloat
*value3
)
360 alGetListener3f(param
, value1
, value2
, value3
);
363 ALvoid CDECL
wine_alGetListenerfv(ALenum param
, ALfloat
* values
)
365 alGetListenerfv(param
, values
);
368 ALvoid CDECL
wine_alGetListeneri(ALenum param
, ALint
* value
)
370 alGetListeneri(param
, value
);
373 ALvoid CDECL
wine_alGetListeneriv(ALenum param
, ALint
* values
)
375 alGetListeneriv(param
, values
);
378 ALvoid CDECL
wine_alGenSources(ALsizei n
, ALuint
* sources
)
380 alGenSources(n
, sources
);
383 ALvoid CDECL
wine_alDeleteSources(ALsizei n
, const ALuint
* sources
)
385 alDeleteSources(n
, sources
);
388 ALboolean CDECL
wine_alIsSource(ALuint sid
)
390 return alIsSource(sid
);
393 ALvoid CDECL
wine_alSourcef(ALuint sid
, ALenum param
, ALfloat value
)
395 alSourcef(sid
, param
, value
);
398 ALvoid CDECL
wine_alSource3f(ALuint sid
, ALenum param
, ALfloat value1
, ALfloat value2
, ALfloat value3
)
400 alSource3f(sid
, param
, value1
, value2
, value3
);
403 ALvoid CDECL
wine_alSourcefv(ALuint sid
, ALenum param
, const ALfloat
* values
)
405 alSourcefv(sid
, param
, values
);
408 ALvoid CDECL
wine_alSourcei(ALuint sid
, ALenum param
, ALint value
)
410 alSourcei(sid
, param
, value
);
413 ALvoid CDECL
wine_alGetSourcef(ALuint sid
, ALenum param
, ALfloat
* value
)
415 alGetSourcef(sid
, param
, value
);
418 ALvoid CDECL
wine_alGetSource3f(ALuint sid
, ALenum param
, ALfloat
* value1
, ALfloat
* value2
, ALfloat
* value3
)
420 alGetSource3f(sid
, param
, value1
, value2
, value3
);
423 ALvoid CDECL
wine_alGetSourcefv(ALuint sid
, ALenum param
, ALfloat
* values
)
425 alGetSourcefv(sid
, param
, values
);
428 ALvoid CDECL
wine_alGetSourcei(ALuint sid
, ALenum param
, ALint
* value
)
430 alGetSourcei(sid
, param
, value
);
433 ALvoid CDECL
wine_alGetSourceiv(ALuint sid
, ALenum param
, ALint
* values
)
435 alGetSourceiv(sid
, param
, values
);
438 ALvoid CDECL
wine_alSourcePlayv(ALsizei ns
, const ALuint
*sids
)
440 alSourcePlayv(ns
, sids
);
443 ALvoid CDECL
wine_alSourceStopv(ALsizei ns
, const ALuint
*sids
)
445 alSourceStopv(ns
, sids
);
448 ALvoid CDECL
wine_alSourceRewindv(ALsizei ns
, const ALuint
*sids
)
450 alSourceRewindv(ns
, sids
);
453 ALvoid CDECL
wine_alSourcePausev(ALsizei ns
, const ALuint
*sids
)
455 alSourcePausev(ns
, sids
);
458 ALvoid CDECL
wine_alSourcePlay(ALuint sid
)
463 ALvoid CDECL
wine_alSourceStop(ALuint sid
)
468 ALvoid CDECL
wine_alSourceRewind(ALuint sid
)
473 ALvoid CDECL
wine_alSourcePause(ALuint sid
)
478 ALvoid CDECL
wine_alSourceQueueBuffers(ALuint sid
, ALsizei numEntries
, const ALuint
*bids
)
480 alSourceQueueBuffers(sid
, numEntries
, bids
);
483 ALvoid CDECL
wine_alSourceUnqueueBuffers(ALuint sid
, ALsizei numEntries
, ALuint
*bids
)
485 alSourceUnqueueBuffers(sid
, numEntries
, bids
);
488 ALvoid CDECL
wine_alGenBuffers(ALsizei n
, ALuint
* buffers
)
490 alGenBuffers(n
, buffers
);
493 ALvoid CDECL
wine_alDeleteBuffers(ALsizei n
, const ALuint
* buffers
)
495 alDeleteBuffers(n
, buffers
);
498 ALboolean CDECL
wine_alIsBuffer(ALuint bid
)
500 return alIsBuffer(bid
);
503 ALvoid CDECL
wine_alBufferData(ALuint bid
, ALenum format
, const ALvoid
* data
, ALsizei size
, ALsizei freq
)
505 alBufferData(bid
, format
, data
, size
, freq
);
508 static ALvoid CDECL
wine_alBufferDataStatic(const ALuint bid
, ALenum format
, const ALvoid
* data
, ALsizei size
, ALsizei freq
)
510 alBufferDataStatic(bid
, format
, data
, size
, freq
);
513 ALvoid CDECL
wine_alGetBufferf(ALuint bid
, ALenum param
, ALfloat
* value
)
515 alGetBufferf(bid
, param
, value
);
518 ALvoid CDECL
wine_alGetBufferfv(ALuint bid
, ALenum param
, ALfloat
* values
)
520 alGetBufferfv(bid
, param
, values
);
523 ALvoid CDECL
wine_alGetBufferi(ALuint bid
, ALenum param
, ALint
* value
)
525 alGetBufferi(bid
, param
, value
);
528 ALvoid CDECL
wine_alGetBufferiv(ALuint bid
, ALenum param
, ALint
* values
)
530 alGetBufferiv(bid
, param
, values
);
533 ALvoid CDECL
wine_alDopplerFactor(ALfloat value
)
535 alDopplerFactor(value
);
538 ALvoid CDECL
wine_alDopplerVelocity(ALfloat value
)
540 alDopplerVelocity(value
);
543 ALvoid CDECL
wine_alDistanceModel(ALenum distanceModel
)
545 alDistanceModel(distanceModel
);
549 /* OpenAL ALC 1.1 functions */
550 ALCdevice
* CDECL
wine_alcCaptureOpenDevice(const ALCchar
*devicename
, ALCuint frequency
, ALCenum format
, ALCsizei buffersize
)
552 return alcCaptureOpenDevice(devicename
, frequency
, format
, buffersize
);
555 ALCboolean CDECL
wine_alcCaptureCloseDevice(ALCdevice
*device
)
557 return alcCaptureCloseDevice(device
);
560 ALCvoid CDECL
wine_alcCaptureStart(ALCdevice
*device
)
562 alcCaptureStart(device
);
565 ALCvoid CDECL
wine_alcCaptureStop(ALCdevice
*device
)
567 alcCaptureStop(device
);
570 ALCvoid CDECL
wine_alcCaptureSamples(ALCdevice
*device
, ALCvoid
*buffer
, ALCsizei samples
)
572 alcCaptureSamples(device
, buffer
, samples
);
575 /* OpenAL 1.1 functions */
576 ALvoid CDECL
wine_alListener3i(ALenum param
, ALint value1
, ALint value2
, ALint value3
)
578 alListener3i(param
, value1
, value2
, value3
);
581 ALvoid CDECL
wine_alListeneriv(ALenum param
, const ALint
* values
)
583 alListeneriv(param
, values
);
586 ALvoid CDECL
wine_alGetListener3i(ALenum param
, ALint
*value1
, ALint
*value2
, ALint
*value3
)
588 alGetListener3i(param
, value1
, value2
, value3
);
591 ALvoid CDECL
wine_alSource3i(ALuint sid
, ALenum param
, ALint value1
, ALint value2
, ALint value3
)
593 alSource3i(sid
, param
, value1
, value2
, value3
);
596 ALvoid CDECL
wine_alSourceiv(ALuint sid
, ALenum param
, const ALint
* values
)
598 alSourceiv(sid
, param
, values
);
601 ALvoid CDECL
wine_alGetSource3i(ALuint sid
, ALenum param
, ALint
* value1
, ALint
* value2
, ALint
* value3
)
603 alGetSource3i(sid
, param
, value1
, value2
, value3
);
606 ALvoid CDECL
wine_alBufferf(ALuint bid
, ALenum param
, ALfloat value
)
608 alBufferf(bid
, param
, value
);
611 ALvoid CDECL
wine_alBuffer3f(ALuint bid
, ALenum param
, ALfloat value1
, ALfloat value2
, ALfloat value3
)
613 alBuffer3f(bid
, param
, value1
, value2
, value3
);
616 ALvoid CDECL
wine_alBufferfv(ALuint bid
, ALenum param
, const ALfloat
* values
)
618 alBufferfv(bid
, param
, values
);
621 ALvoid CDECL
wine_alBufferi(ALuint bid
, ALenum param
, ALint value
)
623 alBufferi(bid
, param
, value
);
626 ALvoid CDECL
wine_alBuffer3i(ALuint bid
, ALenum param
, ALint value1
, ALint value2
, ALint value3
)
628 alBuffer3i(bid
, param
, value1
, value2
, value3
);
631 ALvoid CDECL
wine_alBufferiv(ALuint bid
, ALenum param
, const ALint
* values
)
633 alBufferiv(bid
, param
, values
);
636 ALvoid CDECL
wine_alGetBuffer3f(ALuint bid
, ALenum param
, ALfloat
* value1
, ALfloat
* value2
, ALfloat
* value3
)
638 alGetBuffer3f(bid
, param
, value1
, value2
, value3
);
641 ALvoid CDECL
wine_alGetBuffer3i(ALuint bid
, ALenum param
, ALint
* value1
, ALint
* value2
, ALint
* value3
)
643 alGetBuffer3i(bid
, param
, value1
, value2
, value3
);
646 ALvoid CDECL
wine_alSpeedOfSound(ALfloat value
)
648 alSpeedOfSound(value
);
651 /* OpenAL EFX extension functions */
652 static ALvoid CDECL
wine_alGenFilters(ALsizei n
, ALuint
* filters
)
654 alGenFilters(n
, filters
);
657 static ALvoid CDECL
wine_alDeleteFilters(ALsizei n
, const ALuint
* filters
)
659 alDeleteFilters(n
, filters
);
662 static ALboolean CDECL
wine_alIsFilter(ALuint fid
)
664 return alIsFilter(fid
);
667 static ALvoid CDECL
wine_alFilterf(ALuint fid
, ALenum param
, ALfloat value
)
669 alFilterf(fid
, param
, value
);
672 static ALvoid CDECL
wine_alFilterfv(ALuint fid
, ALenum param
, const ALfloat
* values
)
674 alFilterfv(fid
, param
, values
);
677 static ALvoid CDECL
wine_alFilteri(ALuint fid
, ALenum param
, ALint value
)
679 alFilteri(fid
, param
, value
);
682 static ALvoid CDECL
wine_alFilteriv(ALuint fid
, ALenum param
, const ALint
* values
)
684 alFilteriv(fid
, param
, values
);
687 static ALvoid CDECL
wine_alGetFilterf(ALuint fid
, ALenum param
, ALfloat
* value
)
689 alGetFilterf(fid
, param
, value
);
692 static ALvoid CDECL
wine_alGetFilterfv(ALuint fid
, ALenum param
, ALfloat
* values
)
694 alGetFilterfv(fid
, param
, values
);
697 static ALvoid CDECL
wine_alGetFilteri(ALuint fid
, ALenum param
, ALint
* value
)
699 alGetFilteri(fid
, param
, value
);
702 static ALvoid CDECL
wine_alGetFilteriv(ALuint fid
, ALenum param
, ALint
* values
)
704 alGetFilteriv(fid
, param
, values
);
708 static ALvoid CDECL
wine_alGenEffects(ALsizei n
, ALuint
* effects
)
710 alGenEffects(n
, effects
);
713 static ALvoid CDECL
wine_alDeleteEffects(ALsizei n
, const ALuint
* effects
)
715 alDeleteEffects(n
, effects
);
718 static ALboolean CDECL
wine_alIsEffect(ALuint eid
)
720 return alIsEffect(eid
);
723 static ALvoid CDECL
wine_alEffectf(ALuint eid
, ALenum param
, ALfloat value
)
725 alEffectf(eid
, param
, value
);
728 static ALvoid CDECL
wine_alEffectfv(ALuint eid
, ALenum param
, const ALfloat
* values
)
730 alEffectfv(eid
, param
, values
);
733 static ALvoid CDECL
wine_alEffecti(ALuint eid
, ALenum param
, ALint value
)
735 alEffecti(eid
, param
, value
);
738 static ALvoid CDECL
wine_alEffectiv(ALuint eid
, ALenum param
, const ALint
* values
)
740 alEffectiv(eid
, param
, values
);
743 static ALvoid CDECL
wine_alGetEffectf(ALuint eid
, ALenum param
, ALfloat
* value
)
745 alGetEffectf(eid
, param
, value
);
748 static ALvoid CDECL
wine_alGetEffectfv(ALuint eid
, ALenum param
, ALfloat
* values
)
750 alGetEffectfv(eid
, param
, values
);
753 static ALvoid CDECL
wine_alGetEffecti(ALuint eid
, ALenum param
, ALint
* value
)
755 alGetEffecti(eid
, param
, value
);
758 static ALvoid CDECL
wine_alGetEffectiv(ALuint eid
, ALenum param
, ALint
* values
)
760 alGetEffectiv(eid
, param
, values
);
764 static ALvoid CDECL
wine_alGenAuxiliaryEffectSlots(ALsizei n
, ALuint
* slots
)
766 alGenAuxiliaryEffectSlots(n
, slots
);
769 static ALvoid CDECL
wine_alDeleteAuxiliaryEffectSlots(ALsizei n
, const ALuint
* slots
)
771 alDeleteAuxiliaryEffectSlots(n
, slots
);
774 static ALboolean CDECL
wine_alIsAuxiliaryEffectSlot(ALuint sid
)
776 return alIsAuxiliaryEffectSlot(sid
);
779 static ALvoid CDECL
wine_alAuxiliaryEffectSlotf(ALuint sid
, ALenum param
, ALfloat value
)
781 alAuxiliaryEffectSlotf(sid
, param
, value
);
784 static ALvoid CDECL
wine_alAuxiliaryEffectSlotfv(ALuint sid
, ALenum param
, const ALfloat
* values
)
786 alAuxiliaryEffectSlotfv(sid
, param
, values
);
789 static ALvoid CDECL
wine_alAuxiliaryEffectSloti(ALuint sid
, ALenum param
, ALint value
)
791 alAuxiliaryEffectSloti(sid
, param
, value
);
794 static ALvoid CDECL
wine_alAuxiliaryEffectSlotiv(ALuint sid
, ALenum param
, const ALint
* values
)
796 alAuxiliaryEffectSlotiv(sid
, param
, values
);
799 static ALvoid CDECL
wine_alGetAuxiliaryEffectSlotf(ALuint sid
, ALenum param
, ALfloat
* value
)
801 alGetAuxiliaryEffectSlotf(sid
, param
, value
);
804 static ALvoid CDECL
wine_alGetAuxiliaryEffectSlotfv(ALuint sid
, ALenum param
, ALfloat
* values
)
806 alGetAuxiliaryEffectSlotfv(sid
, param
, values
);
809 static ALvoid CDECL
wine_alGetAuxiliaryEffectSloti(ALuint sid
, ALenum param
, ALint
* value
)
811 alGetAuxiliaryEffectSloti(sid
, param
, value
);
814 static ALvoid CDECL
wine_alGetAuxiliaryEffectSlotiv(ALuint sid
, ALenum param
, ALint
* values
)
816 alGetAuxiliaryEffectSlotiv(sid
, param
, values
);
820 /* Thread-local context functions */
821 static ALCboolean CDECL
wine_alcSetThreadContext(ALCcontext
*context
)
823 EnterCriticalSection(&openal_cs
);
824 if(alcSetThreadContext(context
) == ALC_FALSE
)
826 WARN("Failed to make context %p current\n", context
);
827 LeaveCriticalSection(&openal_cs
);
831 if(context
&& !loaded_procs
)
833 loaded_procs
= AL_TRUE
;
836 LeaveCriticalSection(&openal_cs
);
841 static ALCcontext
* CDECL
wine_alcGetThreadContext(ALCvoid
)
843 return alcGetThreadContext();
851 static const struct FuncList ALCFuncs
[] = {
852 { "alcCreateContext", wine_alcCreateContext
},
853 { "alcMakeContextCurrent", wine_alcMakeContextCurrent
},
854 { "alcProcessContext", wine_alcProcessContext
},
855 { "alcSuspendContext", wine_alcSuspendContext
},
856 { "alcDestroyContext", wine_alcDestroyContext
},
857 { "alcGetCurrentContext", wine_alcGetCurrentContext
},
858 { "alcGetContextsDevice", wine_alcGetContextsDevice
},
859 { "alcOpenDevice", wine_alcOpenDevice
},
860 { "alcCloseDevice", wine_alcCloseDevice
},
861 { "alcGetError", wine_alcGetError
},
862 { "alcIsExtensionPresent", wine_alcIsExtensionPresent
},
863 { "alcGetProcAddress", wine_alcGetProcAddress
},
864 { "alcGetEnumValue", wine_alcGetEnumValue
},
865 { "alcGetString", wine_alcGetString
},
866 { "alcGetIntegerv", wine_alcGetIntegerv
},
867 { "alcCaptureOpenDevice", wine_alcCaptureOpenDevice
},
868 { "alcCaptureCloseDevice", wine_alcCaptureCloseDevice
},
869 { "alcCaptureStart", wine_alcCaptureStart
},
870 { "alcCaptureStop", wine_alcCaptureStop
},
871 { "alcCaptureSamples", wine_alcCaptureSamples
},
872 { "alcSetThreadContext", wine_alcSetThreadContext
},
873 { "alcGetThreadContext", wine_alcGetThreadContext
},
876 static const struct FuncList ALFuncs
[] = {
877 { "alEnable", wine_alEnable
},
878 { "alDisable", wine_alDisable
},
879 { "alIsEnabled", wine_alIsEnabled
},
880 { "alGetString", wine_alGetString
},
881 { "alGetBooleanv", wine_alGetBooleanv
},
882 { "alGetIntegerv", wine_alGetIntegerv
},
883 { "alGetFloatv", wine_alGetFloatv
},
884 { "alGetDoublev", wine_alGetDoublev
},
885 { "alGetBoolean", wine_alGetBoolean
},
886 { "alGetInteger", wine_alGetInteger
},
887 { "alGetFloat", wine_alGetFloat
},
888 { "alGetDouble", wine_alGetDouble
},
889 { "alGetError", wine_alGetError
},
890 { "alIsExtensionPresent", wine_alIsExtensionPresent
},
891 { "alGetProcAddress", wine_alGetProcAddress
},
892 { "alGetEnumValue", wine_alGetEnumValue
},
893 { "alListenerf", wine_alListenerf
},
894 { "alListener3f", wine_alListener3f
},
895 { "alListenerfv", wine_alListenerfv
},
896 { "alListeneri", wine_alListeneri
},
897 { "alListener3i", wine_alListener3i
},
898 { "alListeneriv", wine_alListeneriv
},
899 { "alGetListenerf", wine_alGetListenerf
},
900 { "alGetListener3f", wine_alGetListener3f
},
901 { "alGetListenerfv", wine_alGetListenerfv
},
902 { "alGetListeneri", wine_alGetListeneri
},
903 { "alGetListener3i", wine_alGetListener3i
},
904 { "alGetListeneriv", wine_alGetListeneriv
},
905 { "alGenSources", wine_alGenSources
},
906 { "alDeleteSources", wine_alDeleteSources
},
907 { "alIsSource", wine_alIsSource
},
908 { "alSourcef", wine_alSourcef
},
909 { "alSource3f", wine_alSource3f
},
910 { "alSourcefv", wine_alSourcefv
},
911 { "alSourcei", wine_alSourcei
},
912 { "alSource3i", wine_alSource3i
},
913 { "alSourceiv", wine_alSourceiv
},
914 { "alGetSourcef", wine_alGetSourcef
},
915 { "alGetSource3f", wine_alGetSource3f
},
916 { "alGetSourcefv", wine_alGetSourcefv
},
917 { "alGetSourcei", wine_alGetSourcei
},
918 { "alGetSource3i", wine_alGetSource3i
},
919 { "alGetSourceiv", wine_alGetSourceiv
},
920 { "alSourcePlayv", wine_alSourcePlayv
},
921 { "alSourceStopv", wine_alSourceStopv
},
922 { "alSourceRewindv", wine_alSourceRewindv
},
923 { "alSourcePausev", wine_alSourcePausev
},
924 { "alSourcePlay", wine_alSourcePlay
},
925 { "alSourceStop", wine_alSourceStop
},
926 { "alSourceRewind", wine_alSourceRewind
},
927 { "alSourcePause", wine_alSourcePause
},
928 { "alSourceQueueBuffers", wine_alSourceQueueBuffers
},
929 { "alSourceUnqueueBuffers", wine_alSourceUnqueueBuffers
},
930 { "alGenBuffers", wine_alGenBuffers
},
931 { "alDeleteBuffers", wine_alDeleteBuffers
},
932 { "alIsBuffer", wine_alIsBuffer
},
933 { "alBufferData", wine_alBufferData
},
934 { "alBufferDataStatic", wine_alBufferDataStatic
},
935 { "alBufferf", wine_alBufferf
},
936 { "alBuffer3f", wine_alBuffer3f
},
937 { "alBufferfv", wine_alBufferfv
},
938 { "alBufferi", wine_alBufferi
},
939 { "alBuffer3i", wine_alBuffer3i
},
940 { "alBufferiv", wine_alBufferiv
},
941 { "alGetBufferf", wine_alGetBufferf
},
942 { "alGetBuffer3f", wine_alGetBuffer3f
},
943 { "alGetBufferfv", wine_alGetBufferfv
},
944 { "alGetBufferi", wine_alGetBufferi
},
945 { "alGetBuffer3i", wine_alGetBuffer3i
},
946 { "alGetBufferiv", wine_alGetBufferiv
},
947 { "alDopplerFactor", wine_alDopplerFactor
},
948 { "alDopplerVelocity", wine_alDopplerVelocity
},
949 { "alSpeedOfSound", wine_alSpeedOfSound
},
950 { "alDistanceModel", wine_alDistanceModel
},
952 { "alGenFilters", wine_alGenFilters
},
953 { "alDeleteFilters", wine_alDeleteFilters
},
954 { "alIsFilter", wine_alIsFilter
},
955 { "alFilterf", wine_alFilterf
},
956 { "alFilterfv", wine_alFilterfv
},
957 { "alFilteri", wine_alFilteri
},
958 { "alFilteriv", wine_alFilteriv
},
959 { "alGetFilterf", wine_alGetFilterf
},
960 { "alGetFilterfv", wine_alGetFilterfv
},
961 { "alGetFilteri", wine_alGetFilteri
},
962 { "alGetFilteriv", wine_alGetFilteriv
},
964 { "alGenEffects", wine_alGenEffects
},
965 { "alDeleteEffects", wine_alDeleteEffects
},
966 { "alIsEffect", wine_alIsEffect
},
967 { "alEffectf", wine_alEffectf
},
968 { "alEffectfv", wine_alEffectfv
},
969 { "alEffecti", wine_alEffecti
},
970 { "alEffectiv", wine_alEffectiv
},
971 { "alGetEffectf", wine_alGetEffectf
},
972 { "alGetEffectfv", wine_alGetEffectfv
},
973 { "alGetEffecti", wine_alGetEffecti
},
974 { "alGetEffectiv", wine_alGetEffectiv
},
976 { "alGenAuxiliaryEffectSlots", wine_alGenAuxiliaryEffectSlots
},
977 { "alDeleteAuxiliaryEffectSlots",wine_alDeleteAuxiliaryEffectSlots
},
978 { "alIsAuxiliaryEffectSlot", wine_alIsAuxiliaryEffectSlot
},
979 { "alAuxiliaryEffectSlotf", wine_alAuxiliaryEffectSlotf
},
980 { "alAuxiliaryEffectSlotfv", wine_alAuxiliaryEffectSlotfv
},
981 { "alAuxiliaryEffectSloti", wine_alAuxiliaryEffectSloti
},
982 { "alAuxiliaryEffectSlotiv", wine_alAuxiliaryEffectSlotiv
},
983 { "alGetAuxiliaryEffectSlotf", wine_alGetAuxiliaryEffectSlotf
},
984 { "alGetAuxiliaryEffectSlotfv", wine_alGetAuxiliaryEffectSlotfv
},
985 { "alGetAuxiliaryEffectSloti", wine_alGetAuxiliaryEffectSloti
},
986 { "alGetAuxiliaryEffectSlotiv", wine_alGetAuxiliaryEffectSlotiv
},
992 ALCvoid
* CDECL
wine_alcGetProcAddress(ALCdevice
*device
, const ALCchar
*funcname
)
997 /* Make sure the host implementation has the requested function */
998 proc
= alcGetProcAddress(device
, funcname
);
1002 for(i
= 0;ALCFuncs
[i
].name
;i
++)
1004 if(strcmp(funcname
, ALCFuncs
[i
].name
) == 0)
1005 return ALCFuncs
[i
].proc
;
1007 FIXME("Could not find function in list: %s\n", funcname
);
1012 ALvoid
* CDECL
wine_alGetProcAddress(const ALchar
* funcname
)
1017 /* Make sure the host implementation has the requested function. This will
1018 * also set the last AL error properly if the function should not be
1019 * returned (eg. no current context). */
1020 proc
= alGetProcAddress(funcname
);
1024 for(i
= 0;ALFuncs
[i
].name
;i
++)
1026 if(strcmp(funcname
, ALFuncs
[i
].name
) == 0)
1027 return ALFuncs
[i
].proc
;
1029 FIXME("Could not find function in list: %s\n", funcname
);