Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
emscripten-core
GitHub Repository: emscripten-core/emscripten
Path: blob/main/system/lib/al.c
4150 views
1
/*
2
* Copyright 2017 The Emscripten Authors. All rights reserved.
3
* Emscripten is available under two separate licenses, the MIT license and the
4
* University of Illinois/NCSA Open Source License. Both these licenses can be
5
* found in the LICENSE file.
6
*/
7
8
// AL proc address retrieval
9
10
#include <string.h>
11
#include <stdlib.h>
12
#include <emscripten.h>
13
#include <emscripten/console.h>
14
15
#include <AL/alc.h>
16
#include <AL/al.h>
17
18
19
// ALC extensions
20
void emscripten_alcDevicePauseSOFT(ALCdevice *device);
21
void emscripten_alcDeviceResumeSOFT(ALCdevice *device);
22
const ALCchar *emscripten_alcGetStringiSOFT(ALCdevice *device, ALCenum paramName, ALCsizei index);
23
ALCboolean emscripten_alcResetDeviceSOFT(ALCdevice *device, const ALCint *attrList);
24
25
26
void* alcGetProcAddress(ALCdevice *device, const ALCchar *name) {
27
// Validate the input.
28
if (EM_ASM_INT({
29
if (!$0) {
30
AL.alcErr = 0xA004 /* ALC_INVALID_VALUE */;
31
return 1;
32
}
33
}, name)) {
34
return NULL;
35
}
36
37
// Base API
38
if (!strcmp(name, "alcCreateContext")) { return alcCreateContext; }
39
else if (!strcmp(name, "alcMakeContextCurrent")) { return alcMakeContextCurrent; }
40
else if (!strcmp(name, "alcProcessContext")) { return alcProcessContext; }
41
else if (!strcmp(name, "alcSuspendContext")) { return alcSuspendContext; }
42
else if (!strcmp(name, "alcDestroyContext")) { return alcDestroyContext; }
43
else if (!strcmp(name, "alcGetCurrentContext")) { return alcGetCurrentContext; }
44
else if (!strcmp(name, "alcGetContextsDevice")) { return alcGetContextsDevice; }
45
else if (!strcmp(name, "alcOpenDevice")) { return alcOpenDevice; }
46
else if (!strcmp(name, "alcCloseDevice")) { return alcCloseDevice; }
47
else if (!strcmp(name, "alcGetError")) { return alcGetError; }
48
else if (!strcmp(name, "alcIsExtensionPresent")) { return alcIsExtensionPresent; }
49
else if (!strcmp(name, "alcGetProcAddress")) { return alcGetProcAddress; }
50
else if (!strcmp(name, "alcGetEnumValue")) { return alcGetEnumValue; }
51
else if (!strcmp(name, "alcGetString")) { return alcGetString; }
52
else if (!strcmp(name, "alcGetIntegerv")) { return alcGetIntegerv; }
53
else if (!strcmp(name, "alcCaptureOpenDevice")) { return alcCaptureOpenDevice; }
54
else if (!strcmp(name, "alcCaptureCloseDevice")) { return alcCaptureCloseDevice; }
55
else if (!strcmp(name, "alcCaptureStart")) { return alcCaptureStart; }
56
else if (!strcmp(name, "alcCaptureStop")) { return alcCaptureStop; }
57
else if (!strcmp(name, "alcCaptureSamples")) { return alcCaptureSamples; }
58
59
// Extensions
60
else if (!strcmp(name, "alcDevicePauseSOFT")) { return emscripten_alcDevicePauseSOFT; }
61
else if (!strcmp(name, "alcDeviceResumeSOFT")) { return emscripten_alcDeviceResumeSOFT; }
62
else if (!strcmp(name, "alcGetStringiSOFT")) { return emscripten_alcGetStringiSOFT; }
63
else if (!strcmp(name, "alcResetDeviceSOFT")) { return emscripten_alcResetDeviceSOFT; }
64
65
emscripten_errf("bad name in alcGetProcAddress: %s", name);
66
return 0;
67
}
68
69
70
void* alGetProcAddress(const ALchar *name) {
71
// Validate the state and the input.
72
if (EM_ASM_INT({
73
if (!AL.currentCtx) {
74
err("alGetProcAddress() called without a valid context");
75
return 1;
76
}
77
if (!$0) {
78
AL.currentCtx.err = 0xA003 /* AL_INVALID_VALUE */;
79
return 1;
80
}
81
}, name)) {
82
return NULL;
83
}
84
85
// Base API
86
if (!strcmp(name, "alDopplerFactor")) { return alDopplerFactor; }
87
else if (!strcmp(name, "alDopplerVelocity")) { return alDopplerVelocity; }
88
else if (!strcmp(name, "alSpeedOfSound")) { return alSpeedOfSound; }
89
else if (!strcmp(name, "alDistanceModel")) { return alDistanceModel; }
90
else if (!strcmp(name, "alEnable")) { return alEnable; }
91
else if (!strcmp(name, "alDisable")) { return alDisable; }
92
else if (!strcmp(name, "alIsEnabled")) { return alIsEnabled; }
93
else if (!strcmp(name, "alGetString")) { return alGetString; }
94
else if (!strcmp(name, "alGetBooleanv")) { return alGetBooleanv; }
95
else if (!strcmp(name, "alGetIntegerv")) { return alGetIntegerv; }
96
else if (!strcmp(name, "alGetFloatv")) { return alGetFloatv; }
97
else if (!strcmp(name, "alGetDoublev")) { return alGetDoublev; }
98
else if (!strcmp(name, "alGetBoolean")) { return alGetBoolean; }
99
else if (!strcmp(name, "alGetInteger")) { return alGetInteger; }
100
else if (!strcmp(name, "alGetFloat")) { return alGetFloat; }
101
else if (!strcmp(name, "alGetDouble")) { return alGetDouble; }
102
else if (!strcmp(name, "alGetError")) { return alGetError; }
103
else if (!strcmp(name, "alIsExtensionPresent")) { return alIsExtensionPresent; }
104
else if (!strcmp(name, "alGetProcAddress")) { return alGetProcAddress; }
105
else if (!strcmp(name, "alGetEnumValue")) { return alGetEnumValue; }
106
else if (!strcmp(name, "alListenerf")) { return alListenerf; }
107
else if (!strcmp(name, "alListener3f")) { return alListener3f; }
108
else if (!strcmp(name, "alListenerfv")) { return alListenerfv; }
109
else if (!strcmp(name, "alListeneri")) { return alListeneri; }
110
else if (!strcmp(name, "alListener3i")) { return alListener3i; }
111
else if (!strcmp(name, "alListeneriv")) { return alListeneriv; }
112
else if (!strcmp(name, "alGetListenerf")) { return alGetListenerf; }
113
else if (!strcmp(name, "alGetListener3f")) { return alGetListener3f; }
114
else if (!strcmp(name, "alGetListenerfv")) { return alGetListenerfv; }
115
else if (!strcmp(name, "alGetListeneri")) { return alGetListeneri; }
116
else if (!strcmp(name, "alGetListener3i")) { return alGetListener3i; }
117
else if (!strcmp(name, "alGetListeneriv")) { return alGetListeneriv; }
118
else if (!strcmp(name, "alGenSources")) { return alGenSources; }
119
else if (!strcmp(name, "alDeleteSources")) { return alDeleteSources; }
120
else if (!strcmp(name, "alIsSource")) { return alIsSource; }
121
else if (!strcmp(name, "alSourcef")) { return alSourcef; }
122
else if (!strcmp(name, "alSource3f")) { return alSource3f; }
123
else if (!strcmp(name, "alSourcefv")) { return alSourcefv; }
124
else if (!strcmp(name, "alSourcei")) { return alSourcei; }
125
else if (!strcmp(name, "alSource3i")) { return alSource3i; }
126
else if (!strcmp(name, "alSourceiv")) { return alSourceiv; }
127
else if (!strcmp(name, "alGetSourcef")) { return alGetSourcef; }
128
else if (!strcmp(name, "alGetSource3f")) { return alGetSource3f; }
129
else if (!strcmp(name, "alGetSourcefv")) { return alGetSourcefv; }
130
else if (!strcmp(name, "alGetSourcei")) { return alGetSourcei; }
131
else if (!strcmp(name, "alGetSource3i")) { return alGetSource3i; }
132
else if (!strcmp(name, "alGetSourceiv")) { return alGetSourceiv; }
133
else if (!strcmp(name, "alSourcePlayv")) { return alSourcePlayv; }
134
else if (!strcmp(name, "alSourceStopv")) { return alSourceStopv; }
135
else if (!strcmp(name, "alSourceRewindv")) { return alSourceRewindv; }
136
else if (!strcmp(name, "alSourcePausev")) { return alSourcePausev; }
137
else if (!strcmp(name, "alSourcePlay")) { return alSourcePlay; }
138
else if (!strcmp(name, "alSourceStop")) { return alSourceStop; }
139
else if (!strcmp(name, "alSourceRewind")) { return alSourceRewind; }
140
else if (!strcmp(name, "alSourcePause")) { return alSourcePause; }
141
else if (!strcmp(name, "alSourceQueueBuffers")) { return alSourceQueueBuffers; }
142
else if (!strcmp(name, "alSourceUnqueueBuffers")) { return alSourceUnqueueBuffers; }
143
else if (!strcmp(name, "alGenBuffers")) { return alGenBuffers; }
144
else if (!strcmp(name, "alDeleteBuffers")) { return alDeleteBuffers; }
145
else if (!strcmp(name, "alIsBuffer")) { return alIsBuffer; }
146
else if (!strcmp(name, "alBufferData")) { return alBufferData; }
147
else if (!strcmp(name, "alBufferf")) { return alBufferf; }
148
else if (!strcmp(name, "alBuffer3f")) { return alBuffer3f; }
149
else if (!strcmp(name, "alBufferfv")) { return alBufferfv; }
150
else if (!strcmp(name, "alBufferi")) { return alBufferi; }
151
else if (!strcmp(name, "alBuffer3i")) { return alBuffer3i; }
152
else if (!strcmp(name, "alBufferiv")) { return alBufferiv; }
153
else if (!strcmp(name, "alGetBufferf")) { return alGetBufferf; }
154
else if (!strcmp(name, "alGetBuffer3f")) { return alGetBuffer3f; }
155
else if (!strcmp(name, "alGetBufferfv")) { return alGetBufferfv; }
156
else if (!strcmp(name, "alGetBufferi")) { return alGetBufferi; }
157
else if (!strcmp(name, "alGetBuffer3i")) { return alGetBuffer3i; }
158
else if (!strcmp(name, "alGetBufferiv")) { return alGetBufferiv; }
159
160
// Extensions
161
162
emscripten_errf("bad name in alGetProcAddress: %s", name);
163
return 0;
164
}
165
166