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
27 static const ALchar alVendor
[] = "OpenAL Community";
28 static const ALchar alVersion
[] = "1.1";
29 static const ALchar alRenderer
[] = "OpenAL Soft";
32 static const ALchar alNoError
[] = "No Error";
33 static const ALchar alErrInvalidName
[] = "Invalid Name";
34 static const ALchar alErrInvalidEnum
[] = "Invalid Enum";
35 static const ALchar alErrInvalidValue
[] = "Invalid Value";
36 static const ALchar alErrInvalidOp
[] = "Invalid Operation";
37 static const ALchar alErrOutOfMemory
[] = "Out of Memory";
39 ALAPI ALvoid ALAPIENTRY
alEnable(ALenum capability
)
43 Context
=alcGetCurrentContext();
46 SuspendContext(Context
);
51 alSetError(AL_INVALID_ENUM
);
55 ProcessContext(Context
);
60 alSetError(AL_INVALID_OPERATION
);
64 ALAPI ALvoid ALAPIENTRY
alDisable(ALenum capability
)
68 Context
=alcGetCurrentContext();
71 SuspendContext(Context
);
76 alSetError(AL_INVALID_ENUM
);
80 ProcessContext(Context
);
85 alSetError(AL_INVALID_OPERATION
);
89 ALAPI ALboolean ALAPIENTRY
alIsEnabled(ALenum capability
)
92 ALboolean value
=AL_FALSE
;
94 Context
=alcGetCurrentContext();
97 SuspendContext(Context
);
102 alSetError(AL_INVALID_ENUM
);
106 ProcessContext(Context
);
111 alSetError(AL_INVALID_OPERATION
);
117 ALAPI ALboolean ALAPIENTRY
alGetBoolean(ALenum pname
)
120 ALboolean value
=AL_FALSE
;
122 Context
=alcGetCurrentContext();
125 SuspendContext(Context
);
129 case AL_DOPPLER_FACTOR
:
130 if (Context
->DopplerFactor
!= 0.0f
)
134 case AL_DOPPLER_VELOCITY
:
135 if (Context
->DopplerVelocity
!= 0.0f
)
139 case AL_DISTANCE_MODEL
:
140 if (Context
->DistanceModel
== AL_INVERSE_DISTANCE_CLAMPED
)
144 case AL_SPEED_OF_SOUND
:
145 if (Context
->flSpeedOfSound
!= 0.0f
)
150 alSetError(AL_INVALID_ENUM
);
154 ProcessContext(Context
);
159 alSetError(AL_INVALID_OPERATION
);
165 ALAPI ALdouble ALAPIENTRY
alGetDouble(ALenum pname
)
168 ALdouble value
= 0.0;
170 Context
=alcGetCurrentContext();
173 SuspendContext(Context
);
177 case AL_DOPPLER_FACTOR
:
178 value
= (double)Context
->DopplerFactor
;
181 case AL_DOPPLER_VELOCITY
:
182 value
= (double)Context
->DopplerVelocity
;
185 case AL_DISTANCE_MODEL
:
186 value
= (double)Context
->DistanceModel
;
189 case AL_SPEED_OF_SOUND
:
190 value
= (double)Context
->flSpeedOfSound
;
194 alSetError(AL_INVALID_ENUM
);
198 ProcessContext(Context
);
203 alSetError(AL_INVALID_OPERATION
);
209 ALAPI ALfloat ALAPIENTRY
alGetFloat(ALenum pname
)
212 ALfloat value
= 0.0f
;
214 Context
=alcGetCurrentContext();
217 SuspendContext(Context
);
221 case AL_DOPPLER_FACTOR
:
222 value
= Context
->DopplerFactor
;
225 case AL_DOPPLER_VELOCITY
:
226 value
= Context
->DopplerVelocity
;
229 case AL_DISTANCE_MODEL
:
230 value
= (float)Context
->DistanceModel
;
233 case AL_SPEED_OF_SOUND
:
234 value
= Context
->flSpeedOfSound
;
238 alSetError(AL_INVALID_ENUM
);
242 ProcessContext(Context
);
247 alSetError(AL_INVALID_OPERATION
);
253 ALAPI ALint ALAPIENTRY
alGetInteger(ALenum pname
)
258 Context
=alcGetCurrentContext();
261 SuspendContext(Context
);
265 case AL_DOPPLER_FACTOR
:
266 value
= (ALint
)Context
->DopplerFactor
;
269 case AL_DOPPLER_VELOCITY
:
270 value
= (ALint
)Context
->DopplerVelocity
;
273 case AL_DISTANCE_MODEL
:
274 value
= (ALint
)Context
->DistanceModel
;
277 case AL_SPEED_OF_SOUND
:
278 value
= (ALint
)Context
->flSpeedOfSound
;
282 alSetError(AL_INVALID_ENUM
);
286 ProcessContext(Context
);
291 alSetError(AL_INVALID_OPERATION
);
297 ALAPI ALvoid ALAPIENTRY
alGetBooleanv(ALenum pname
,ALboolean
*data
)
301 Context
=alcGetCurrentContext();
304 SuspendContext(Context
);
310 case AL_DOPPLER_FACTOR
:
311 *data
= (ALboolean
)((Context
->DopplerFactor
!= 0.0f
) ? AL_TRUE
: AL_FALSE
);
314 case AL_DOPPLER_VELOCITY
:
315 *data
= (ALboolean
)((Context
->DopplerVelocity
!= 0.0f
) ? AL_TRUE
: AL_FALSE
);
318 case AL_DISTANCE_MODEL
:
319 *data
= (ALboolean
)((Context
->DistanceModel
== AL_INVERSE_DISTANCE_CLAMPED
) ? AL_TRUE
: AL_FALSE
);
322 case AL_SPEED_OF_SOUND
:
323 *data
= (ALboolean
)((Context
->flSpeedOfSound
!= 0.0f
) ? AL_TRUE
: AL_FALSE
);
327 alSetError(AL_INVALID_ENUM
);
333 // data is a NULL pointer
334 alSetError(AL_INVALID_VALUE
);
337 ProcessContext(Context
);
342 alSetError(AL_INVALID_OPERATION
);
348 ALAPI ALvoid ALAPIENTRY
alGetDoublev(ALenum pname
,ALdouble
*data
)
352 Context
=alcGetCurrentContext();
355 SuspendContext(Context
);
361 case AL_DOPPLER_FACTOR
:
362 *data
= (double)Context
->DopplerFactor
;
365 case AL_DOPPLER_VELOCITY
:
366 *data
= (double)Context
->DopplerVelocity
;
369 case AL_DISTANCE_MODEL
:
370 *data
= (double)Context
->DistanceModel
;
373 case AL_SPEED_OF_SOUND
:
374 *data
= (double)Context
->flSpeedOfSound
;
378 alSetError(AL_INVALID_ENUM
);
384 // data is a NULL pointer
385 alSetError(AL_INVALID_VALUE
);
388 ProcessContext(Context
);
393 alSetError(AL_INVALID_OPERATION
);
399 ALAPI ALvoid ALAPIENTRY
alGetFloatv(ALenum pname
,ALfloat
*data
)
403 Context
=alcGetCurrentContext();
406 SuspendContext(Context
);
412 case AL_DOPPLER_FACTOR
:
413 *data
= Context
->DopplerFactor
;
416 case AL_DOPPLER_VELOCITY
:
417 *data
= Context
->DopplerVelocity
;
420 case AL_DISTANCE_MODEL
:
421 *data
= (float)Context
->DistanceModel
;
424 case AL_SPEED_OF_SOUND
:
425 *data
= Context
->flSpeedOfSound
;
429 alSetError(AL_INVALID_ENUM
);
435 // data is a NULL pointer
436 alSetError(AL_INVALID_VALUE
);
439 ProcessContext(Context
);
444 alSetError(AL_INVALID_OPERATION
);
450 ALAPI ALvoid ALAPIENTRY
alGetIntegerv(ALenum pname
,ALint
*data
)
454 Context
=alcGetCurrentContext();
457 SuspendContext(Context
);
463 case AL_DOPPLER_FACTOR
:
464 *data
= (ALint
)Context
->DopplerFactor
;
467 case AL_DOPPLER_VELOCITY
:
468 *data
= (ALint
)Context
->DopplerVelocity
;
471 case AL_DISTANCE_MODEL
:
472 *data
= (ALint
)Context
->DistanceModel
;
475 case AL_SPEED_OF_SOUND
:
476 *data
= (ALint
)Context
->flSpeedOfSound
;
480 alSetError(AL_INVALID_ENUM
);
486 // data is a NULL pointer
487 alSetError(AL_INVALID_VALUE
);
490 ProcessContext(Context
);
495 alSetError(AL_INVALID_OPERATION
);
501 ALAPI
const ALchar
* ALAPIENTRY
alGetString(ALenum pname
)
504 ALCcontext
*pContext
;
506 pContext
= alcGetCurrentContext();
509 alSetError(AL_INVALID_OPERATION
);
513 SuspendContext(pContext
);
530 value
=pContext
->ExtensionList
;//alExtensions;
537 case AL_INVALID_NAME
:
538 value
=alErrInvalidName
;
541 case AL_INVALID_ENUM
:
542 value
=alErrInvalidEnum
;
545 case AL_INVALID_VALUE
:
546 value
=alErrInvalidValue
;
549 case AL_INVALID_OPERATION
:
550 value
=alErrInvalidOp
;
553 case AL_OUT_OF_MEMORY
:
554 value
=alErrOutOfMemory
;
559 alSetError(AL_INVALID_ENUM
);
563 ProcessContext(pContext
);
568 ALAPI ALvoid ALAPIENTRY
alDopplerFactor(ALfloat value
)
572 Context
=alcGetCurrentContext();
575 SuspendContext(Context
);
578 Context
->DopplerFactor
= value
;
580 alSetError(AL_INVALID_VALUE
);
582 ProcessContext(Context
);
587 alSetError(AL_INVALID_OPERATION
);
593 ALAPI ALvoid ALAPIENTRY
alDopplerVelocity(ALfloat value
)
597 Context
=alcGetCurrentContext();
600 SuspendContext(Context
);
603 Context
->DopplerVelocity
=value
;
605 alSetError(AL_INVALID_VALUE
);
607 ProcessContext(Context
);
612 alSetError(AL_INVALID_OPERATION
);
618 ALAPI ALvoid ALAPIENTRY
alSpeedOfSound(ALfloat flSpeedOfSound
)
620 ALCcontext
*pContext
;
622 pContext
= alcGetCurrentContext();
625 SuspendContext(pContext
);
627 if (flSpeedOfSound
> 0.0f
)
628 pContext
->flSpeedOfSound
= flSpeedOfSound
;
630 alSetError(AL_INVALID_VALUE
);
632 ProcessContext(pContext
);
636 alSetError(AL_INVALID_OPERATION
);
642 ALAPI ALvoid ALAPIENTRY
alDistanceModel(ALenum value
)
646 Context
=alcGetCurrentContext();
649 SuspendContext(Context
);
654 case AL_INVERSE_DISTANCE
:
655 case AL_INVERSE_DISTANCE_CLAMPED
:
656 case AL_LINEAR_DISTANCE
:
657 case AL_LINEAR_DISTANCE_CLAMPED
:
658 case AL_EXPONENT_DISTANCE
:
659 case AL_EXPONENT_DISTANCE_CLAMPED
:
660 Context
->DistanceModel
= value
;
664 alSetError(AL_INVALID_VALUE
);
668 ProcessContext(Context
);
673 alSetError(AL_INVALID_OPERATION
);