2 * OpenAL cross platform audio library
3 * Copyright (C) 1999-2000 by authors.
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
18 * Or go to http://www.gnu.org/copyleft/lgpl.html
26 #include "alListener.h"
29 AL_API ALvoid AL_APIENTRY
alListenerf(ALenum eParam
, ALfloat flValue
)
33 pContext
= GetLockedContext();
39 if(flValue
>= 0.0f
&& isfinite(flValue
))
41 pContext
->Listener
.Gain
= flValue
;
42 pContext
->UpdateSources
= AL_TRUE
;
45 alSetError(pContext
, AL_INVALID_VALUE
);
48 case AL_METERS_PER_UNIT
:
49 if(flValue
> 0.0f
&& isfinite(flValue
))
51 pContext
->Listener
.MetersPerUnit
= flValue
;
52 pContext
->UpdateSources
= AL_TRUE
;
55 alSetError(pContext
, AL_INVALID_VALUE
);
59 alSetError(pContext
, AL_INVALID_ENUM
);
63 UnlockContext(pContext
);
67 AL_API ALvoid AL_APIENTRY
alListener3f(ALenum eParam
, ALfloat flValue1
, ALfloat flValue2
, ALfloat flValue3
)
71 pContext
= GetLockedContext();
77 if(isfinite(flValue1
) && isfinite(flValue2
) && isfinite(flValue3
))
79 pContext
->Listener
.Position
[0] = flValue1
;
80 pContext
->Listener
.Position
[1] = flValue2
;
81 pContext
->Listener
.Position
[2] = flValue3
;
82 pContext
->UpdateSources
= AL_TRUE
;
85 alSetError(pContext
, AL_INVALID_VALUE
);
89 if(isfinite(flValue1
) && isfinite(flValue2
) && isfinite(flValue3
))
91 pContext
->Listener
.Velocity
[0] = flValue1
;
92 pContext
->Listener
.Velocity
[1] = flValue2
;
93 pContext
->Listener
.Velocity
[2] = flValue3
;
94 pContext
->UpdateSources
= AL_TRUE
;
97 alSetError(pContext
, AL_INVALID_VALUE
);
101 alSetError(pContext
, AL_INVALID_ENUM
);
105 UnlockContext(pContext
);
109 AL_API ALvoid AL_APIENTRY
alListenerfv(ALenum eParam
, const ALfloat
*pflValues
)
111 ALCcontext
*pContext
;
118 case AL_METERS_PER_UNIT
:
119 alListenerf(eParam
, pflValues
[0]);
124 alListener3f(eParam
, pflValues
[0], pflValues
[1], pflValues
[2]);
129 pContext
= GetLockedContext();
130 if(!pContext
) return;
137 if(isfinite(pflValues
[0]) && isfinite(pflValues
[1]) &&
138 isfinite(pflValues
[2]) && isfinite(pflValues
[3]) &&
139 isfinite(pflValues
[4]) && isfinite(pflValues
[5]))
142 pContext
->Listener
.Forward
[0] = pflValues
[0];
143 pContext
->Listener
.Forward
[1] = pflValues
[1];
144 pContext
->Listener
.Forward
[2] = pflValues
[2];
145 pContext
->Listener
.Up
[0] = pflValues
[3];
146 pContext
->Listener
.Up
[1] = pflValues
[4];
147 pContext
->Listener
.Up
[2] = pflValues
[5];
148 pContext
->UpdateSources
= AL_TRUE
;
151 alSetError(pContext
, AL_INVALID_VALUE
);
155 alSetError(pContext
, AL_INVALID_ENUM
);
160 alSetError(pContext
, AL_INVALID_VALUE
);
162 UnlockContext(pContext
);
166 AL_API ALvoid AL_APIENTRY
alListeneri(ALenum eParam
, ALint lValue
)
168 ALCcontext
*pContext
;
172 pContext
= GetLockedContext();
173 if(!pContext
) return;
178 alSetError(pContext
, AL_INVALID_ENUM
);
182 UnlockContext(pContext
);
186 AL_API
void AL_APIENTRY
alListener3i(ALenum eParam
, ALint lValue1
, ALint lValue2
, ALint lValue3
)
188 ALCcontext
*pContext
;
194 alListener3f(eParam
, (ALfloat
)lValue1
, (ALfloat
)lValue2
, (ALfloat
)lValue3
);
198 pContext
= GetLockedContext();
199 if(!pContext
) return;
204 alSetError(pContext
, AL_INVALID_ENUM
);
208 UnlockContext(pContext
);
212 AL_API
void AL_APIENTRY
alListeneriv( ALenum eParam
, const ALint
* plValues
)
214 ALCcontext
*pContext
;
223 alListener3f(eParam
, plValues
[0], plValues
[1], plValues
[2]);
227 flValues
[0] = (ALfloat
)plValues
[0];
228 flValues
[1] = (ALfloat
)plValues
[1];
229 flValues
[2] = (ALfloat
)plValues
[2];
230 flValues
[3] = (ALfloat
)plValues
[3];
231 flValues
[4] = (ALfloat
)plValues
[4];
232 flValues
[5] = (ALfloat
)plValues
[5];
233 alListenerfv(eParam
, flValues
);
238 pContext
= GetLockedContext();
239 if(!pContext
) return;
246 alSetError(pContext
, AL_INVALID_ENUM
);
251 alSetError(pContext
, AL_INVALID_VALUE
);
253 UnlockContext(pContext
);
257 AL_API ALvoid AL_APIENTRY
alGetListenerf(ALenum eParam
, ALfloat
*pflValue
)
259 ALCcontext
*pContext
;
261 pContext
= GetLockedContext();
262 if(!pContext
) return;
269 *pflValue
= pContext
->Listener
.Gain
;
272 case AL_METERS_PER_UNIT
:
273 *pflValue
= pContext
->Listener
.MetersPerUnit
;
277 alSetError(pContext
, AL_INVALID_ENUM
);
282 alSetError(pContext
, AL_INVALID_VALUE
);
284 UnlockContext(pContext
);
288 AL_API ALvoid AL_APIENTRY
alGetListener3f(ALenum eParam
, ALfloat
*pflValue1
, ALfloat
*pflValue2
, ALfloat
*pflValue3
)
290 ALCcontext
*pContext
;
292 pContext
= GetLockedContext();
293 if(!pContext
) return;
295 if(pflValue1
&& pflValue2
&& pflValue3
)
300 *pflValue1
= pContext
->Listener
.Position
[0];
301 *pflValue2
= pContext
->Listener
.Position
[1];
302 *pflValue3
= pContext
->Listener
.Position
[2];
306 *pflValue1
= pContext
->Listener
.Velocity
[0];
307 *pflValue2
= pContext
->Listener
.Velocity
[1];
308 *pflValue3
= pContext
->Listener
.Velocity
[2];
312 alSetError(pContext
, AL_INVALID_ENUM
);
317 alSetError(pContext
, AL_INVALID_VALUE
);
319 UnlockContext(pContext
);
323 AL_API ALvoid AL_APIENTRY
alGetListenerfv(ALenum eParam
, ALfloat
*pflValues
)
325 ALCcontext
*pContext
;
330 case AL_METERS_PER_UNIT
:
331 alGetListenerf(eParam
, pflValues
);
336 alGetListener3f(eParam
, pflValues
+0, pflValues
+1, pflValues
+2);
340 pContext
= GetLockedContext();
341 if(!pContext
) return;
349 pflValues
[0] = pContext
->Listener
.Forward
[0];
350 pflValues
[1] = pContext
->Listener
.Forward
[1];
351 pflValues
[2] = pContext
->Listener
.Forward
[2];
352 pflValues
[3] = pContext
->Listener
.Up
[0];
353 pflValues
[4] = pContext
->Listener
.Up
[1];
354 pflValues
[5] = pContext
->Listener
.Up
[2];
358 alSetError(pContext
, AL_INVALID_ENUM
);
363 alSetError(pContext
, AL_INVALID_VALUE
);
365 UnlockContext(pContext
);
369 AL_API ALvoid AL_APIENTRY
alGetListeneri(ALenum eParam
, ALint
*plValue
)
371 ALCcontext
*pContext
;
373 pContext
= GetLockedContext();
374 if(!pContext
) return;
381 alSetError(pContext
, AL_INVALID_ENUM
);
386 alSetError(pContext
, AL_INVALID_VALUE
);
388 UnlockContext(pContext
);
392 AL_API
void AL_APIENTRY
alGetListener3i(ALenum eParam
, ALint
*plValue1
, ALint
*plValue2
, ALint
*plValue3
)
394 ALCcontext
*pContext
;
396 pContext
= GetLockedContext();
397 if(!pContext
) return;
399 if(plValue1
&& plValue2
&& plValue3
)
404 *plValue1
= (ALint
)pContext
->Listener
.Position
[0];
405 *plValue2
= (ALint
)pContext
->Listener
.Position
[1];
406 *plValue3
= (ALint
)pContext
->Listener
.Position
[2];
410 *plValue1
= (ALint
)pContext
->Listener
.Velocity
[0];
411 *plValue2
= (ALint
)pContext
->Listener
.Velocity
[1];
412 *plValue3
= (ALint
)pContext
->Listener
.Velocity
[2];
416 alSetError(pContext
, AL_INVALID_ENUM
);
421 alSetError(pContext
, AL_INVALID_VALUE
);
423 UnlockContext(pContext
);
427 AL_API
void AL_APIENTRY
alGetListeneriv(ALenum eParam
, ALint
* plValues
)
429 ALCcontext
*pContext
;
435 alGetListener3i(eParam
, plValues
+0, plValues
+1, plValues
+2);
439 pContext
= GetLockedContext();
440 if(!pContext
) return;
448 plValues
[0] = (ALint
)pContext
->Listener
.Forward
[0];
449 plValues
[1] = (ALint
)pContext
->Listener
.Forward
[1];
450 plValues
[2] = (ALint
)pContext
->Listener
.Forward
[2];
451 plValues
[3] = (ALint
)pContext
->Listener
.Up
[0];
452 plValues
[4] = (ALint
)pContext
->Listener
.Up
[1];
453 plValues
[5] = (ALint
)pContext
->Listener
.Up
[2];
457 alSetError(pContext
, AL_INVALID_ENUM
);
462 alSetError(pContext
, AL_INVALID_VALUE
);
464 UnlockContext(pContext
);