29
29
AL_API ALvoid AL_APIENTRY alListenerf(ALenum eParam, ALfloat flValue)
32
ALboolean updateAll = AL_FALSE;
34
pContext = GetContextSuspended();
33
Context = GetContextRef();
39
if(flValue >= 0.0f && isfinite(flValue))
42
pContext->Listener.Gain = flValue;
41
Context->Listener.Gain = flValue;
42
Context->UpdateSources = AL_TRUE;
46
alSetError(pContext, AL_INVALID_VALUE);
45
alSetError(Context, AL_INVALID_VALUE);
49
48
case AL_METERS_PER_UNIT:
49
if(flValue > 0.0f && isfinite(flValue))
52
pContext->Listener.MetersPerUnit = flValue;
51
Context->Listener.MetersPerUnit = flValue;
52
Context->UpdateSources = AL_TRUE;
56
alSetError(pContext, AL_INVALID_VALUE);
55
alSetError(Context, AL_INVALID_VALUE);
60
alSetError(pContext, AL_INVALID_ENUM);
59
alSetError(Context, AL_INVALID_ENUM);
64
// Force updating the sources for these parameters, since even head-
65
// relative sources are affected
69
for(pos = 0;pos < pContext->SourceMap.size;pos++)
71
ALsource *source = pContext->SourceMap.array[pos].value;
72
source->NeedsUpdate = AL_TRUE;
76
ProcessContext(pContext);
63
ALCcontext_DecRef(Context);
80
67
AL_API ALvoid AL_APIENTRY alListener3f(ALenum eParam, ALfloat flValue1, ALfloat flValue2, ALfloat flValue3)
83
ALboolean updateWorld = AL_FALSE;
85
pContext = GetContextSuspended();
71
Context = GetContextRef();
91
pContext->Listener.Position[0] = flValue1;
92
pContext->Listener.Position[1] = flValue2;
93
pContext->Listener.Position[2] = flValue3;
94
updateWorld = AL_TRUE;
77
if(isfinite(flValue1) && isfinite(flValue2) && isfinite(flValue3))
80
Context->Listener.Position[0] = flValue1;
81
Context->Listener.Position[1] = flValue2;
82
Context->Listener.Position[2] = flValue3;
83
Context->UpdateSources = AL_TRUE;
84
UnlockContext(Context);
87
alSetError(Context, AL_INVALID_VALUE);
98
pContext->Listener.Velocity[0] = flValue1;
99
pContext->Listener.Velocity[1] = flValue2;
100
pContext->Listener.Velocity[2] = flValue3;
101
updateWorld = AL_TRUE;
91
if(isfinite(flValue1) && isfinite(flValue2) && isfinite(flValue3))
94
Context->Listener.Velocity[0] = flValue1;
95
Context->Listener.Velocity[1] = flValue2;
96
Context->Listener.Velocity[2] = flValue3;
97
Context->UpdateSources = AL_TRUE;
98
UnlockContext(Context);
101
alSetError(Context, AL_INVALID_VALUE);
105
alSetError(pContext, AL_INVALID_ENUM);
105
alSetError(Context, AL_INVALID_ENUM);
112
for(pos = 0;pos < pContext->SourceMap.size;pos++)
114
ALsource *source = pContext->SourceMap.array[pos].value;
115
if(!source->bHeadRelative)
116
source->NeedsUpdate = AL_TRUE;
120
ProcessContext(pContext);
109
ALCcontext_DecRef(Context);
124
113
AL_API ALvoid AL_APIENTRY alListenerfv(ALenum eParam, const ALfloat *pflValues)
126
ALCcontext *pContext;
127
ALboolean updateWorld = AL_FALSE;
129
pContext = GetContextSuspended();
130
if(!pContext) return;
137
122
case AL_METERS_PER_UNIT:
138
123
alListenerf(eParam, pflValues[0]);
141
126
case AL_POSITION:
142
127
case AL_VELOCITY:
143
128
alListener3f(eParam, pflValues[0], pflValues[1], pflValues[2]);
133
Context = GetContextRef();
146
140
case AL_ORIENTATION:
148
pContext->Listener.Forward[0] = pflValues[0];
149
pContext->Listener.Forward[1] = pflValues[1];
150
pContext->Listener.Forward[2] = pflValues[2];
151
pContext->Listener.Up[0] = pflValues[3];
152
pContext->Listener.Up[1] = pflValues[4];
153
pContext->Listener.Up[2] = pflValues[5];
154
updateWorld = AL_TRUE;
141
if(isfinite(pflValues[0]) && isfinite(pflValues[1]) &&
142
isfinite(pflValues[2]) && isfinite(pflValues[3]) &&
143
isfinite(pflValues[4]) && isfinite(pflValues[5]))
145
ALfloat U[3], V[3], N[3];
156
/* Build and normalize right-vector */
157
aluCrossproduct(N, V, U);
160
LockContext(Context);
161
Context->Listener.Forward[0] = pflValues[0];
162
Context->Listener.Forward[1] = pflValues[1];
163
Context->Listener.Forward[2] = pflValues[2];
164
Context->Listener.Up[0] = pflValues[3];
165
Context->Listener.Up[1] = pflValues[4];
166
Context->Listener.Up[2] = pflValues[5];
167
Context->Listener.Matrix[0][0] = U[0];
168
Context->Listener.Matrix[0][1] = V[0];
169
Context->Listener.Matrix[0][2] = -N[0];
170
Context->Listener.Matrix[0][3] = 0.0f;
171
Context->Listener.Matrix[1][0] = U[1];
172
Context->Listener.Matrix[1][1] = V[1];
173
Context->Listener.Matrix[1][2] = -N[1];
174
Context->Listener.Matrix[1][3] = 0.0f;
175
Context->Listener.Matrix[2][0] = U[2];
176
Context->Listener.Matrix[2][1] = V[2];
177
Context->Listener.Matrix[2][2] = -N[2];
178
Context->Listener.Matrix[2][3] = 0.0f;
179
Context->Listener.Matrix[3][0] = 0.0f;
180
Context->Listener.Matrix[3][1] = 0.0f;
181
Context->Listener.Matrix[3][2] = 0.0f;
182
Context->Listener.Matrix[3][3] = 1.0f;
183
Context->UpdateSources = AL_TRUE;
184
UnlockContext(Context);
187
alSetError(Context, AL_INVALID_VALUE);
158
alSetError(pContext, AL_INVALID_ENUM);
191
alSetError(Context, AL_INVALID_ENUM);
163
alSetError(pContext, AL_INVALID_VALUE);
168
for(pos = 0;pos < pContext->SourceMap.size;pos++)
170
ALsource *source = pContext->SourceMap.array[pos].value;
171
if(!source->bHeadRelative)
172
source->NeedsUpdate = AL_TRUE;
176
ProcessContext(pContext);
196
alSetError(Context, AL_INVALID_VALUE);
198
ALCcontext_DecRef(Context);
180
202
AL_API ALvoid AL_APIENTRY alListeneri(ALenum eParam, ALint lValue)
182
ALCcontext *pContext;
186
pContext = GetContextSuspended();
187
if(!pContext) return;
208
Context = GetContextRef();
192
alSetError(pContext, AL_INVALID_ENUM);
214
alSetError(Context, AL_INVALID_ENUM);
196
ProcessContext(pContext);
218
ALCcontext_DecRef(Context);
200
222
AL_API void AL_APIENTRY alListener3i(ALenum eParam, ALint lValue1, ALint lValue2, ALint lValue3)
202
ALCcontext *pContext;
204
pContext = GetContextSuspended();
205
if(!pContext) return;
209
228
case AL_POSITION:
210
229
case AL_VELOCITY:
211
230
alListener3f(eParam, (ALfloat)lValue1, (ALfloat)lValue2, (ALfloat)lValue3);
234
Context = GetContextRef();
215
alSetError(pContext, AL_INVALID_ENUM);
240
alSetError(Context, AL_INVALID_ENUM);
219
ProcessContext(pContext);
244
ALCcontext_DecRef(Context);
223
248
AL_API void AL_APIENTRY alListeneriv( ALenum eParam, const ALint* plValues )
225
ALCcontext *pContext;
226
251
ALfloat flValues[6];
228
pContext = GetContextSuspended();
229
if(!pContext) return;
235
257
case AL_POSITION:
236
258
case AL_VELOCITY:
237
flValues[0] = (ALfloat)plValues[0];
238
flValues[1] = (ALfloat)plValues[1];
239
flValues[2] = (ALfloat)plValues[2];
240
alListenerfv(eParam, flValues);
259
alListener3f(eParam, (ALfloat)plValues[0], (ALfloat)plValues[1], (ALfloat)plValues[2]);
243
262
case AL_ORIENTATION:
244
263
flValues[0] = (ALfloat)plValues[0];
248
267
flValues[4] = (ALfloat)plValues[4];
249
268
flValues[5] = (ALfloat)plValues[5];
250
269
alListenerfv(eParam, flValues);
274
Context = GetContextRef();
254
alSetError(pContext, AL_INVALID_ENUM);
282
alSetError(Context, AL_INVALID_ENUM);
259
alSetError(pContext, AL_INVALID_VALUE);
287
alSetError(Context, AL_INVALID_VALUE);
261
ProcessContext(pContext);
289
ALCcontext_DecRef(Context);
265
293
AL_API ALvoid AL_APIENTRY alGetListenerf(ALenum eParam, ALfloat *pflValue)
267
ALCcontext *pContext;
269
pContext = GetContextSuspended();
270
if(!pContext) return;
297
Context = GetContextRef();
277
*pflValue = pContext->Listener.Gain;
305
*pflValue = Context->Listener.Gain;
280
308
case AL_METERS_PER_UNIT:
281
*pflValue = pContext->Listener.MetersPerUnit;
309
*pflValue = Context->Listener.MetersPerUnit;
285
alSetError(pContext, AL_INVALID_ENUM);
313
alSetError(Context, AL_INVALID_ENUM);
290
alSetError(pContext, AL_INVALID_VALUE);
318
alSetError(Context, AL_INVALID_VALUE);
292
ProcessContext(pContext);
320
ALCcontext_DecRef(Context);
296
324
AL_API ALvoid AL_APIENTRY alGetListener3f(ALenum eParam, ALfloat *pflValue1, ALfloat *pflValue2, ALfloat *pflValue3)
298
ALCcontext *pContext;
300
pContext = GetContextSuspended();
301
if(!pContext) return;
328
Context = GetContextRef();
303
331
if(pflValue1 && pflValue2 && pflValue3)
307
335
case AL_POSITION:
308
*pflValue1 = pContext->Listener.Position[0];
309
*pflValue2 = pContext->Listener.Position[1];
310
*pflValue3 = pContext->Listener.Position[2];
336
LockContext(Context);
337
*pflValue1 = Context->Listener.Position[0];
338
*pflValue2 = Context->Listener.Position[1];
339
*pflValue3 = Context->Listener.Position[2];
340
UnlockContext(Context);
313
343
case AL_VELOCITY:
314
*pflValue1 = pContext->Listener.Velocity[0];
315
*pflValue2 = pContext->Listener.Velocity[1];
316
*pflValue3 = pContext->Listener.Velocity[2];
344
LockContext(Context);
345
*pflValue1 = Context->Listener.Velocity[0];
346
*pflValue2 = Context->Listener.Velocity[1];
347
*pflValue3 = Context->Listener.Velocity[2];
348
UnlockContext(Context);
320
alSetError(pContext, AL_INVALID_ENUM);
352
alSetError(Context, AL_INVALID_ENUM);
325
alSetError(pContext, AL_INVALID_VALUE);
357
alSetError(Context, AL_INVALID_VALUE);
327
ProcessContext(pContext);
359
ALCcontext_DecRef(Context);
331
363
AL_API ALvoid AL_APIENTRY alGetListenerfv(ALenum eParam, ALfloat *pflValues)
333
ALCcontext *pContext;
335
pContext = GetContextSuspended();
336
if(!pContext) return;
370
case AL_METERS_PER_UNIT:
371
alGetListenerf(eParam, pflValues);
376
alGetListener3f(eParam, pflValues+0, pflValues+1, pflValues+2);
380
Context = GetContextRef();
343
pflValues[0] = pContext->Listener.Gain;
346
case AL_METERS_PER_UNIT:
347
pflValues[0] = pContext->Listener.MetersPerUnit;
351
pflValues[0] = pContext->Listener.Position[0];
352
pflValues[1] = pContext->Listener.Position[1];
353
pflValues[2] = pContext->Listener.Position[2];
357
pflValues[0] = pContext->Listener.Velocity[0];
358
pflValues[1] = pContext->Listener.Velocity[1];
359
pflValues[2] = pContext->Listener.Velocity[2];
362
387
case AL_ORIENTATION:
388
LockContext(Context);
364
pflValues[0] = pContext->Listener.Forward[0];
365
pflValues[1] = pContext->Listener.Forward[1];
366
pflValues[2] = pContext->Listener.Forward[2];
367
pflValues[3] = pContext->Listener.Up[0];
368
pflValues[4] = pContext->Listener.Up[1];
369
pflValues[5] = pContext->Listener.Up[2];
390
pflValues[0] = Context->Listener.Forward[0];
391
pflValues[1] = Context->Listener.Forward[1];
392
pflValues[2] = Context->Listener.Forward[2];
393
pflValues[3] = Context->Listener.Up[0];
394
pflValues[4] = Context->Listener.Up[1];
395
pflValues[5] = Context->Listener.Up[2];
396
UnlockContext(Context);
373
alSetError(pContext, AL_INVALID_ENUM);
400
alSetError(Context, AL_INVALID_ENUM);
378
alSetError(pContext, AL_INVALID_VALUE);
405
alSetError(Context, AL_INVALID_VALUE);
380
ProcessContext(pContext);
407
ALCcontext_DecRef(Context);
384
411
AL_API ALvoid AL_APIENTRY alGetListeneri(ALenum eParam, ALint *plValue)
386
ALCcontext *pContext;
388
pContext = GetContextSuspended();
389
if(!pContext) return;
415
Context = GetContextRef();
396
alSetError(pContext, AL_INVALID_ENUM);
423
alSetError(Context, AL_INVALID_ENUM);
401
alSetError(pContext, AL_INVALID_VALUE);
428
alSetError(Context, AL_INVALID_VALUE);
403
ProcessContext(pContext);
430
ALCcontext_DecRef(Context);
407
434
AL_API void AL_APIENTRY alGetListener3i(ALenum eParam, ALint *plValue1, ALint *plValue2, ALint *plValue3)
409
ALCcontext *pContext;
411
pContext = GetContextSuspended();
412
if(!pContext) return;
438
Context = GetContextRef();
414
441
if(plValue1 && plValue2 && plValue3)
418
445
case AL_POSITION:
419
*plValue1 = (ALint)pContext->Listener.Position[0];
420
*plValue2 = (ALint)pContext->Listener.Position[1];
421
*plValue3 = (ALint)pContext->Listener.Position[2];
446
LockContext(Context);
447
*plValue1 = (ALint)Context->Listener.Position[0];
448
*plValue2 = (ALint)Context->Listener.Position[1];
449
*plValue3 = (ALint)Context->Listener.Position[2];
450
UnlockContext(Context);
424
453
case AL_VELOCITY:
425
*plValue1 = (ALint)pContext->Listener.Velocity[0];
426
*plValue2 = (ALint)pContext->Listener.Velocity[1];
427
*plValue3 = (ALint)pContext->Listener.Velocity[2];
454
LockContext(Context);
455
*plValue1 = (ALint)Context->Listener.Velocity[0];
456
*plValue2 = (ALint)Context->Listener.Velocity[1];
457
*plValue3 = (ALint)Context->Listener.Velocity[2];
458
UnlockContext(Context);
431
alSetError(pContext, AL_INVALID_ENUM);
462
alSetError(Context, AL_INVALID_ENUM);
436
alSetError(pContext, AL_INVALID_VALUE);
467
alSetError(Context, AL_INVALID_VALUE);
438
ProcessContext(pContext);
469
ALCcontext_DecRef(Context);
442
473
AL_API void AL_APIENTRY alGetListeneriv(ALenum eParam, ALint* plValues)
444
ALCcontext *pContext;
446
pContext = GetContextSuspended();
447
if(!pContext) return;
481
alGetListener3i(eParam, plValues+0, plValues+1, plValues+2);
485
Context = GetContextRef();
454
plValues[0] = (ALint)pContext->Listener.Position[0];
455
plValues[1] = (ALint)pContext->Listener.Position[1];
456
plValues[2] = (ALint)pContext->Listener.Position[2];
460
plValues[0] = (ALint)pContext->Listener.Velocity[0];
461
plValues[1] = (ALint)pContext->Listener.Velocity[1];
462
plValues[2] = (ALint)pContext->Listener.Velocity[2];
465
492
case AL_ORIENTATION:
493
LockContext(Context);
467
plValues[0] = (ALint)pContext->Listener.Forward[0];
468
plValues[1] = (ALint)pContext->Listener.Forward[1];
469
plValues[2] = (ALint)pContext->Listener.Forward[2];
470
plValues[3] = (ALint)pContext->Listener.Up[0];
471
plValues[4] = (ALint)pContext->Listener.Up[1];
472
plValues[5] = (ALint)pContext->Listener.Up[2];
495
plValues[0] = (ALint)Context->Listener.Forward[0];
496
plValues[1] = (ALint)Context->Listener.Forward[1];
497
plValues[2] = (ALint)Context->Listener.Forward[2];
498
plValues[3] = (ALint)Context->Listener.Up[0];
499
plValues[4] = (ALint)Context->Listener.Up[1];
500
plValues[5] = (ALint)Context->Listener.Up[2];
501
UnlockContext(Context);
476
alSetError(pContext, AL_INVALID_ENUM);
505
alSetError(Context, AL_INVALID_ENUM);
481
alSetError(pContext, AL_INVALID_VALUE);
510
alSetError(Context, AL_INVALID_VALUE);
483
ProcessContext(pContext);
512
ALCcontext_DecRef(Context);