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();
41 pContext
->Listener
.Gain
= flValue
;
42 pContext
->UpdateSources
= AL_TRUE
;
45 alSetError(pContext
, AL_INVALID_VALUE
);
48 case AL_METERS_PER_UNIT
:
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 pContext
->Listener
.Position
[0] = flValue1
;
78 pContext
->Listener
.Position
[1] = flValue2
;
79 pContext
->Listener
.Position
[2] = flValue3
;
80 pContext
->UpdateSources
= AL_TRUE
;
84 pContext
->Listener
.Velocity
[0] = flValue1
;
85 pContext
->Listener
.Velocity
[1] = flValue2
;
86 pContext
->Listener
.Velocity
[2] = flValue3
;
87 pContext
->UpdateSources
= AL_TRUE
;
91 alSetError(pContext
, AL_INVALID_ENUM
);
95 UnlockContext(pContext
);
99 AL_API ALvoid AL_APIENTRY
alListenerfv(ALenum eParam
, const ALfloat
*pflValues
)
101 ALCcontext
*pContext
;
108 case AL_METERS_PER_UNIT
:
109 alListenerf(eParam
, pflValues
[0]);
114 alListener3f(eParam
, pflValues
[0], pflValues
[1], pflValues
[2]);
119 pContext
= GetLockedContext();
120 if(!pContext
) return;
128 pContext
->Listener
.Forward
[0] = pflValues
[0];
129 pContext
->Listener
.Forward
[1] = pflValues
[1];
130 pContext
->Listener
.Forward
[2] = pflValues
[2];
131 pContext
->Listener
.Up
[0] = pflValues
[3];
132 pContext
->Listener
.Up
[1] = pflValues
[4];
133 pContext
->Listener
.Up
[2] = pflValues
[5];
134 pContext
->UpdateSources
= AL_TRUE
;
138 alSetError(pContext
, AL_INVALID_ENUM
);
143 alSetError(pContext
, AL_INVALID_VALUE
);
145 UnlockContext(pContext
);
149 AL_API ALvoid AL_APIENTRY
alListeneri(ALenum eParam
, ALint lValue
)
151 ALCcontext
*pContext
;
155 pContext
= GetLockedContext();
156 if(!pContext
) return;
161 alSetError(pContext
, AL_INVALID_ENUM
);
165 UnlockContext(pContext
);
169 AL_API
void AL_APIENTRY
alListener3i(ALenum eParam
, ALint lValue1
, ALint lValue2
, ALint lValue3
)
171 ALCcontext
*pContext
;
177 alListener3f(eParam
, (ALfloat
)lValue1
, (ALfloat
)lValue2
, (ALfloat
)lValue3
);
181 pContext
= GetLockedContext();
182 if(!pContext
) return;
187 alSetError(pContext
, AL_INVALID_ENUM
);
191 UnlockContext(pContext
);
195 AL_API
void AL_APIENTRY
alListeneriv( ALenum eParam
, const ALint
* plValues
)
197 ALCcontext
*pContext
;
200 pContext
= GetLockedContext();
201 if(!pContext
) return;
209 flValues
[0] = (ALfloat
)plValues
[0];
210 flValues
[1] = (ALfloat
)plValues
[1];
211 flValues
[2] = (ALfloat
)plValues
[2];
212 alListenerfv(eParam
, flValues
);
216 flValues
[0] = (ALfloat
)plValues
[0];
217 flValues
[1] = (ALfloat
)plValues
[1];
218 flValues
[2] = (ALfloat
)plValues
[2];
219 flValues
[3] = (ALfloat
)plValues
[3];
220 flValues
[4] = (ALfloat
)plValues
[4];
221 flValues
[5] = (ALfloat
)plValues
[5];
222 alListenerfv(eParam
, flValues
);
226 alSetError(pContext
, AL_INVALID_ENUM
);
231 alSetError(pContext
, AL_INVALID_VALUE
);
233 UnlockContext(pContext
);
237 AL_API ALvoid AL_APIENTRY
alGetListenerf(ALenum eParam
, ALfloat
*pflValue
)
239 ALCcontext
*pContext
;
241 pContext
= GetLockedContext();
242 if(!pContext
) return;
249 *pflValue
= pContext
->Listener
.Gain
;
252 case AL_METERS_PER_UNIT
:
253 *pflValue
= pContext
->Listener
.MetersPerUnit
;
257 alSetError(pContext
, AL_INVALID_ENUM
);
262 alSetError(pContext
, AL_INVALID_VALUE
);
264 UnlockContext(pContext
);
268 AL_API ALvoid AL_APIENTRY
alGetListener3f(ALenum eParam
, ALfloat
*pflValue1
, ALfloat
*pflValue2
, ALfloat
*pflValue3
)
270 ALCcontext
*pContext
;
272 pContext
= GetLockedContext();
273 if(!pContext
) return;
275 if(pflValue1
&& pflValue2
&& pflValue3
)
280 *pflValue1
= pContext
->Listener
.Position
[0];
281 *pflValue2
= pContext
->Listener
.Position
[1];
282 *pflValue3
= pContext
->Listener
.Position
[2];
286 *pflValue1
= pContext
->Listener
.Velocity
[0];
287 *pflValue2
= pContext
->Listener
.Velocity
[1];
288 *pflValue3
= pContext
->Listener
.Velocity
[2];
292 alSetError(pContext
, AL_INVALID_ENUM
);
297 alSetError(pContext
, AL_INVALID_VALUE
);
299 UnlockContext(pContext
);
303 AL_API ALvoid AL_APIENTRY
alGetListenerfv(ALenum eParam
, ALfloat
*pflValues
)
305 ALCcontext
*pContext
;
310 case AL_METERS_PER_UNIT
:
311 alGetListenerf(eParam
, pflValues
);
316 alGetListener3f(eParam
, pflValues
+0, pflValues
+1, pflValues
+2);
320 pContext
= GetLockedContext();
321 if(!pContext
) return;
329 pflValues
[0] = pContext
->Listener
.Forward
[0];
330 pflValues
[1] = pContext
->Listener
.Forward
[1];
331 pflValues
[2] = pContext
->Listener
.Forward
[2];
332 pflValues
[3] = pContext
->Listener
.Up
[0];
333 pflValues
[4] = pContext
->Listener
.Up
[1];
334 pflValues
[5] = pContext
->Listener
.Up
[2];
338 alSetError(pContext
, AL_INVALID_ENUM
);
343 alSetError(pContext
, AL_INVALID_VALUE
);
345 UnlockContext(pContext
);
349 AL_API ALvoid AL_APIENTRY
alGetListeneri(ALenum eParam
, ALint
*plValue
)
351 ALCcontext
*pContext
;
353 pContext
= GetLockedContext();
354 if(!pContext
) return;
361 alSetError(pContext
, AL_INVALID_ENUM
);
366 alSetError(pContext
, AL_INVALID_VALUE
);
368 UnlockContext(pContext
);
372 AL_API
void AL_APIENTRY
alGetListener3i(ALenum eParam
, ALint
*plValue1
, ALint
*plValue2
, ALint
*plValue3
)
374 ALCcontext
*pContext
;
376 pContext
= GetLockedContext();
377 if(!pContext
) return;
379 if(plValue1
&& plValue2
&& plValue3
)
384 *plValue1
= (ALint
)pContext
->Listener
.Position
[0];
385 *plValue2
= (ALint
)pContext
->Listener
.Position
[1];
386 *plValue3
= (ALint
)pContext
->Listener
.Position
[2];
390 *plValue1
= (ALint
)pContext
->Listener
.Velocity
[0];
391 *plValue2
= (ALint
)pContext
->Listener
.Velocity
[1];
392 *plValue3
= (ALint
)pContext
->Listener
.Velocity
[2];
396 alSetError(pContext
, AL_INVALID_ENUM
);
401 alSetError(pContext
, AL_INVALID_VALUE
);
403 UnlockContext(pContext
);
407 AL_API
void AL_APIENTRY
alGetListeneriv(ALenum eParam
, ALint
* plValues
)
409 ALCcontext
*pContext
;
415 alGetListener3i(eParam
, plValues
+0, plValues
+1, plValues
+2);
419 pContext
= GetLockedContext();
420 if(!pContext
) return;
428 plValues
[0] = (ALint
)pContext
->Listener
.Forward
[0];
429 plValues
[1] = (ALint
)pContext
->Listener
.Forward
[1];
430 plValues
[2] = (ALint
)pContext
->Listener
.Forward
[2];
431 plValues
[3] = (ALint
)pContext
->Listener
.Up
[0];
432 plValues
[4] = (ALint
)pContext
->Listener
.Up
[1];
433 plValues
[5] = (ALint
)pContext
->Listener
.Up
[2];
437 alSetError(pContext
, AL_INVALID_ENUM
);
442 alSetError(pContext
, AL_INVALID_VALUE
);
444 UnlockContext(pContext
);