10 ATOMIC(DriverIface
*) CurrentCtxDriver
= ATOMIC_INIT_STATIC(NULL
);
12 #define DECL_THUNK1(R,n,T1) AL_API R AL_APIENTRY n(T1 a) \
13 { return ATOMIC_LOAD(&CurrentCtxDriver, almemory_order_acquire)->n(a); }
14 #define DECL_THUNK2(R,n,T1,T2) AL_API R AL_APIENTRY n(T1 a, T2 b) \
15 { return ATOMIC_LOAD(&CurrentCtxDriver, almemory_order_acquire)->n(a, b); }
16 #define DECL_THUNK3(R,n,T1,T2,T3) AL_API R AL_APIENTRY n(T1 a, T2 b, T3 c) \
17 { return ATOMIC_LOAD(&CurrentCtxDriver, almemory_order_acquire)->n(a, b, c); }
18 #define DECL_THUNK4(R,n,T1,T2,T3,T4) AL_API R AL_APIENTRY n(T1 a, T2 b, T3 c, T4 d) \
19 { return ATOMIC_LOAD(&CurrentCtxDriver, almemory_order_acquire)->n(a, b, c, d); }
20 #define DECL_THUNK5(R,n,T1,T2,T3,T4,T5) AL_API R AL_APIENTRY n(T1 a, T2 b, T3 c, T4 d, T5 e) \
21 { return ATOMIC_LOAD(&CurrentCtxDriver, almemory_order_acquire)->n(a, b, c, d, e); }
24 /* Ugly hack for some apps calling alGetError without a current context, and
25 * expecting it to be AL_NO_ERROR.
27 AL_API ALenum AL_APIENTRY
alGetError(void)
29 DriverIface
*iface
= ATOMIC_LOAD(&CurrentCtxDriver
, almemory_order_acquire
);
30 if(iface
) return iface
->alGetError();
35 DECL_THUNK1(void, alDopplerFactor
, ALfloat
)
36 DECL_THUNK1(void, alDopplerVelocity
, ALfloat
)
37 DECL_THUNK1(void, alSpeedOfSound
, ALfloat
)
38 DECL_THUNK1(void, alDistanceModel
, ALenum
)
40 DECL_THUNK1(void, alEnable
, ALenum
)
41 DECL_THUNK1(void, alDisable
, ALenum
)
42 DECL_THUNK1(ALboolean
, alIsEnabled
, ALenum
)
44 DECL_THUNK1(const ALchar
*, alGetString
, ALenum
)
45 DECL_THUNK2(void, alGetBooleanv
, ALenum
, ALboolean
*)
46 DECL_THUNK2(void, alGetIntegerv
, ALenum
, ALint
*)
47 DECL_THUNK2(void, alGetFloatv
, ALenum
, ALfloat
*)
48 DECL_THUNK2(void, alGetDoublev
, ALenum
, ALdouble
*)
49 DECL_THUNK1(ALboolean
, alGetBoolean
, ALenum
)
50 DECL_THUNK1(ALint
, alGetInteger
, ALenum
)
51 DECL_THUNK1(ALfloat
, alGetFloat
, ALenum
)
52 DECL_THUNK1(ALdouble
, alGetDouble
, ALenum
)
54 DECL_THUNK1(ALboolean
, alIsExtensionPresent
, const ALchar
*)
55 DECL_THUNK1(void*, alGetProcAddress
, const ALchar
*)
56 DECL_THUNK1(ALenum
, alGetEnumValue
, const ALchar
*)
58 DECL_THUNK2(void, alListenerf
, ALenum
, ALfloat
)
59 DECL_THUNK4(void, alListener3f
, ALenum
, ALfloat
, ALfloat
, ALfloat
)
60 DECL_THUNK2(void, alListenerfv
, ALenum
, const ALfloat
*)
61 DECL_THUNK2(void, alListeneri
, ALenum
, ALint
)
62 DECL_THUNK4(void, alListener3i
, ALenum
, ALint
, ALint
, ALint
)
63 DECL_THUNK2(void, alListeneriv
, ALenum
, const ALint
*)
64 DECL_THUNK2(void, alGetListenerf
, ALenum
, ALfloat
*)
65 DECL_THUNK4(void, alGetListener3f
, ALenum
, ALfloat
*, ALfloat
*, ALfloat
*)
66 DECL_THUNK2(void, alGetListenerfv
, ALenum
, ALfloat
*)
67 DECL_THUNK2(void, alGetListeneri
, ALenum
, ALint
*)
68 DECL_THUNK4(void, alGetListener3i
, ALenum
, ALint
*, ALint
*, ALint
*)
69 DECL_THUNK2(void, alGetListeneriv
, ALenum
, ALint
*)
71 DECL_THUNK2(void, alGenSources
, ALsizei
, ALuint
*)
72 DECL_THUNK2(void, alDeleteSources
, ALsizei
, const ALuint
*)
73 DECL_THUNK1(ALboolean
, alIsSource
, ALuint
)
74 DECL_THUNK3(void, alSourcef
, ALuint
, ALenum
, ALfloat
)
75 DECL_THUNK5(void, alSource3f
, ALuint
, ALenum
, ALfloat
, ALfloat
, ALfloat
)
76 DECL_THUNK3(void, alSourcefv
, ALuint
, ALenum
, const ALfloat
*)
77 DECL_THUNK3(void, alSourcei
, ALuint
, ALenum
, ALint
)
78 DECL_THUNK5(void, alSource3i
, ALuint
, ALenum
, ALint
, ALint
, ALint
)
79 DECL_THUNK3(void, alSourceiv
, ALuint
, ALenum
, const ALint
*)
80 DECL_THUNK3(void, alGetSourcef
, ALuint
, ALenum
, ALfloat
*)
81 DECL_THUNK5(void, alGetSource3f
, ALuint
, ALenum
, ALfloat
*, ALfloat
*, ALfloat
*)
82 DECL_THUNK3(void, alGetSourcefv
, ALuint
, ALenum
, ALfloat
*)
83 DECL_THUNK3(void, alGetSourcei
, ALuint
, ALenum
, ALint
*)
84 DECL_THUNK5(void, alGetSource3i
, ALuint
, ALenum
, ALint
*, ALint
*, ALint
*)
85 DECL_THUNK3(void, alGetSourceiv
, ALuint
, ALenum
, ALint
*)
86 DECL_THUNK2(void, alSourcePlayv
, ALsizei
, const ALuint
*)
87 DECL_THUNK2(void, alSourceStopv
, ALsizei
, const ALuint
*)
88 DECL_THUNK2(void, alSourceRewindv
, ALsizei
, const ALuint
*)
89 DECL_THUNK2(void, alSourcePausev
, ALsizei
, const ALuint
*)
90 DECL_THUNK1(void, alSourcePlay
, ALuint
)
91 DECL_THUNK1(void, alSourceStop
, ALuint
)
92 DECL_THUNK1(void, alSourceRewind
, ALuint
)
93 DECL_THUNK1(void, alSourcePause
, ALuint
)
94 DECL_THUNK3(void, alSourceQueueBuffers
, ALuint
, ALsizei
, const ALuint
*)
95 DECL_THUNK3(void, alSourceUnqueueBuffers
, ALuint
, ALsizei
, ALuint
*)
97 DECL_THUNK2(void, alGenBuffers
, ALsizei
, ALuint
*)
98 DECL_THUNK2(void, alDeleteBuffers
, ALsizei
, const ALuint
*)
99 DECL_THUNK1(ALboolean
, alIsBuffer
, ALuint
)
100 DECL_THUNK3(void, alBufferf
, ALuint
, ALenum
, ALfloat
)
101 DECL_THUNK5(void, alBuffer3f
, ALuint
, ALenum
, ALfloat
, ALfloat
, ALfloat
)
102 DECL_THUNK3(void, alBufferfv
, ALuint
, ALenum
, const ALfloat
*)
103 DECL_THUNK3(void, alBufferi
, ALuint
, ALenum
, ALint
)
104 DECL_THUNK5(void, alBuffer3i
, ALuint
, ALenum
, ALint
, ALint
, ALint
)
105 DECL_THUNK3(void, alBufferiv
, ALuint
, ALenum
, const ALint
*)
106 DECL_THUNK3(void, alGetBufferf
, ALuint
, ALenum
, ALfloat
*)
107 DECL_THUNK5(void, alGetBuffer3f
, ALuint
, ALenum
, ALfloat
*, ALfloat
*, ALfloat
*)
108 DECL_THUNK3(void, alGetBufferfv
, ALuint
, ALenum
, ALfloat
*)
109 DECL_THUNK3(void, alGetBufferi
, ALuint
, ALenum
, ALint
*)
110 DECL_THUNK5(void, alGetBuffer3i
, ALuint
, ALenum
, ALint
*, ALint
*, ALint
*)
111 DECL_THUNK3(void, alGetBufferiv
, ALuint
, ALenum
, ALint
*)
112 DECL_THUNK5(void, alBufferData
, ALuint
, ALenum
, const ALvoid
*, ALsizei
, ALsizei
)