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
30 static const ALchar alVendor
[] = "OpenAL Community";
31 static const ALchar alVersion
[] = "1.1 ALSOFT "ALSOFT_VERSION
;
32 static const ALchar alRenderer
[] = "OpenAL Soft";
35 static const ALchar alNoError
[] = "No Error";
36 static const ALchar alErrInvalidName
[] = "Invalid Name";
37 static const ALchar alErrInvalidEnum
[] = "Invalid Enum";
38 static const ALchar alErrInvalidValue
[] = "Invalid Value";
39 static const ALchar alErrInvalidOp
[] = "Invalid Operation";
40 static const ALchar alErrOutOfMemory
[] = "Out of Memory";
42 ALAPI ALvoid ALAPIENTRY
alEnable(ALenum capability
)
46 Context
=alcGetCurrentContext();
49 SuspendContext(Context
);
54 alSetError(AL_INVALID_ENUM
);
58 ProcessContext(Context
);
63 alSetError(AL_INVALID_OPERATION
);
67 ALAPI ALvoid ALAPIENTRY
alDisable(ALenum capability
)
71 Context
=alcGetCurrentContext();
74 SuspendContext(Context
);
79 alSetError(AL_INVALID_ENUM
);
83 ProcessContext(Context
);
88 alSetError(AL_INVALID_OPERATION
);
92 ALAPI ALboolean ALAPIENTRY
alIsEnabled(ALenum capability
)
95 ALboolean value
=AL_FALSE
;
97 Context
=alcGetCurrentContext();
100 SuspendContext(Context
);
105 alSetError(AL_INVALID_ENUM
);
109 ProcessContext(Context
);
114 alSetError(AL_INVALID_OPERATION
);
120 ALAPI ALboolean ALAPIENTRY
alGetBoolean(ALenum pname
)
123 ALboolean value
=AL_FALSE
;
125 Context
=alcGetCurrentContext();
128 SuspendContext(Context
);
132 case AL_DOPPLER_FACTOR
:
133 if (Context
->DopplerFactor
!= 0.0f
)
137 case AL_DOPPLER_VELOCITY
:
138 if (Context
->DopplerVelocity
!= 0.0f
)
142 case AL_DISTANCE_MODEL
:
143 if (Context
->DistanceModel
== AL_INVERSE_DISTANCE_CLAMPED
)
147 case AL_SPEED_OF_SOUND
:
148 if (Context
->flSpeedOfSound
!= 0.0f
)
153 alSetError(AL_INVALID_ENUM
);
157 ProcessContext(Context
);
162 alSetError(AL_INVALID_OPERATION
);
168 ALAPI ALdouble ALAPIENTRY
alGetDouble(ALenum pname
)
171 ALdouble value
= 0.0;
173 Context
=alcGetCurrentContext();
176 SuspendContext(Context
);
180 case AL_DOPPLER_FACTOR
:
181 value
= (double)Context
->DopplerFactor
;
184 case AL_DOPPLER_VELOCITY
:
185 value
= (double)Context
->DopplerVelocity
;
188 case AL_DISTANCE_MODEL
:
189 value
= (double)Context
->DistanceModel
;
192 case AL_SPEED_OF_SOUND
:
193 value
= (double)Context
->flSpeedOfSound
;
197 alSetError(AL_INVALID_ENUM
);
201 ProcessContext(Context
);
206 alSetError(AL_INVALID_OPERATION
);
212 ALAPI ALfloat ALAPIENTRY
alGetFloat(ALenum pname
)
215 ALfloat value
= 0.0f
;
217 Context
=alcGetCurrentContext();
220 SuspendContext(Context
);
224 case AL_DOPPLER_FACTOR
:
225 value
= Context
->DopplerFactor
;
228 case AL_DOPPLER_VELOCITY
:
229 value
= Context
->DopplerVelocity
;
232 case AL_DISTANCE_MODEL
:
233 value
= (float)Context
->DistanceModel
;
236 case AL_SPEED_OF_SOUND
:
237 value
= Context
->flSpeedOfSound
;
241 alSetError(AL_INVALID_ENUM
);
245 ProcessContext(Context
);
250 alSetError(AL_INVALID_OPERATION
);
256 ALAPI ALint ALAPIENTRY
alGetInteger(ALenum pname
)
261 Context
=alcGetCurrentContext();
264 SuspendContext(Context
);
268 case AL_DOPPLER_FACTOR
:
269 value
= (ALint
)Context
->DopplerFactor
;
272 case AL_DOPPLER_VELOCITY
:
273 value
= (ALint
)Context
->DopplerVelocity
;
276 case AL_DISTANCE_MODEL
:
277 value
= (ALint
)Context
->DistanceModel
;
280 case AL_SPEED_OF_SOUND
:
281 value
= (ALint
)Context
->flSpeedOfSound
;
285 alSetError(AL_INVALID_ENUM
);
289 ProcessContext(Context
);
294 alSetError(AL_INVALID_OPERATION
);
300 ALAPI ALvoid ALAPIENTRY
alGetBooleanv(ALenum pname
,ALboolean
*data
)
304 Context
=alcGetCurrentContext();
307 SuspendContext(Context
);
313 case AL_DOPPLER_FACTOR
:
314 *data
= (ALboolean
)((Context
->DopplerFactor
!= 0.0f
) ? AL_TRUE
: AL_FALSE
);
317 case AL_DOPPLER_VELOCITY
:
318 *data
= (ALboolean
)((Context
->DopplerVelocity
!= 0.0f
) ? AL_TRUE
: AL_FALSE
);
321 case AL_DISTANCE_MODEL
:
322 *data
= (ALboolean
)((Context
->DistanceModel
== AL_INVERSE_DISTANCE_CLAMPED
) ? AL_TRUE
: AL_FALSE
);
325 case AL_SPEED_OF_SOUND
:
326 *data
= (ALboolean
)((Context
->flSpeedOfSound
!= 0.0f
) ? AL_TRUE
: AL_FALSE
);
330 alSetError(AL_INVALID_ENUM
);
336 // data is a NULL pointer
337 alSetError(AL_INVALID_VALUE
);
340 ProcessContext(Context
);
345 alSetError(AL_INVALID_OPERATION
);
351 ALAPI ALvoid ALAPIENTRY
alGetDoublev(ALenum pname
,ALdouble
*data
)
355 Context
=alcGetCurrentContext();
358 SuspendContext(Context
);
364 case AL_DOPPLER_FACTOR
:
365 *data
= (double)Context
->DopplerFactor
;
368 case AL_DOPPLER_VELOCITY
:
369 *data
= (double)Context
->DopplerVelocity
;
372 case AL_DISTANCE_MODEL
:
373 *data
= (double)Context
->DistanceModel
;
376 case AL_SPEED_OF_SOUND
:
377 *data
= (double)Context
->flSpeedOfSound
;
381 alSetError(AL_INVALID_ENUM
);
387 // data is a NULL pointer
388 alSetError(AL_INVALID_VALUE
);
391 ProcessContext(Context
);
396 alSetError(AL_INVALID_OPERATION
);
402 ALAPI ALvoid ALAPIENTRY
alGetFloatv(ALenum pname
,ALfloat
*data
)
406 Context
=alcGetCurrentContext();
409 SuspendContext(Context
);
415 case AL_DOPPLER_FACTOR
:
416 *data
= Context
->DopplerFactor
;
419 case AL_DOPPLER_VELOCITY
:
420 *data
= Context
->DopplerVelocity
;
423 case AL_DISTANCE_MODEL
:
424 *data
= (float)Context
->DistanceModel
;
427 case AL_SPEED_OF_SOUND
:
428 *data
= Context
->flSpeedOfSound
;
432 alSetError(AL_INVALID_ENUM
);
438 // data is a NULL pointer
439 alSetError(AL_INVALID_VALUE
);
442 ProcessContext(Context
);
447 alSetError(AL_INVALID_OPERATION
);
453 ALAPI ALvoid ALAPIENTRY
alGetIntegerv(ALenum pname
,ALint
*data
)
457 Context
=alcGetCurrentContext();
460 SuspendContext(Context
);
466 case AL_DOPPLER_FACTOR
:
467 *data
= (ALint
)Context
->DopplerFactor
;
470 case AL_DOPPLER_VELOCITY
:
471 *data
= (ALint
)Context
->DopplerVelocity
;
474 case AL_DISTANCE_MODEL
:
475 *data
= (ALint
)Context
->DistanceModel
;
478 case AL_SPEED_OF_SOUND
:
479 *data
= (ALint
)Context
->flSpeedOfSound
;
483 alSetError(AL_INVALID_ENUM
);
489 // data is a NULL pointer
490 alSetError(AL_INVALID_VALUE
);
493 ProcessContext(Context
);
498 alSetError(AL_INVALID_OPERATION
);
504 ALAPI
const ALchar
* ALAPIENTRY
alGetString(ALenum pname
)
507 ALCcontext
*pContext
;
509 pContext
= alcGetCurrentContext();
512 alSetError(AL_INVALID_OPERATION
);
516 SuspendContext(pContext
);
533 value
=pContext
->ExtensionList
;//alExtensions;
540 case AL_INVALID_NAME
:
541 value
=alErrInvalidName
;
544 case AL_INVALID_ENUM
:
545 value
=alErrInvalidEnum
;
548 case AL_INVALID_VALUE
:
549 value
=alErrInvalidValue
;
552 case AL_INVALID_OPERATION
:
553 value
=alErrInvalidOp
;
556 case AL_OUT_OF_MEMORY
:
557 value
=alErrOutOfMemory
;
562 alSetError(AL_INVALID_ENUM
);
566 ProcessContext(pContext
);
571 ALAPI ALvoid ALAPIENTRY
alDopplerFactor(ALfloat value
)
575 Context
=alcGetCurrentContext();
578 SuspendContext(Context
);
581 Context
->DopplerFactor
= value
;
583 alSetError(AL_INVALID_VALUE
);
585 ProcessContext(Context
);
590 alSetError(AL_INVALID_OPERATION
);
596 ALAPI ALvoid ALAPIENTRY
alDopplerVelocity(ALfloat value
)
600 Context
=alcGetCurrentContext();
603 SuspendContext(Context
);
606 Context
->DopplerVelocity
=value
;
608 alSetError(AL_INVALID_VALUE
);
610 ProcessContext(Context
);
615 alSetError(AL_INVALID_OPERATION
);
621 ALAPI ALvoid ALAPIENTRY
alSpeedOfSound(ALfloat flSpeedOfSound
)
623 ALCcontext
*pContext
;
625 pContext
= alcGetCurrentContext();
628 SuspendContext(pContext
);
630 if (flSpeedOfSound
> 0.0f
)
631 pContext
->flSpeedOfSound
= flSpeedOfSound
;
633 alSetError(AL_INVALID_VALUE
);
635 ProcessContext(pContext
);
639 alSetError(AL_INVALID_OPERATION
);
645 ALAPI ALvoid ALAPIENTRY
alDistanceModel(ALenum value
)
650 Context
=alcGetCurrentContext();
653 SuspendContext(Context
);
658 case AL_INVERSE_DISTANCE
:
659 case AL_INVERSE_DISTANCE_CLAMPED
:
660 case AL_LINEAR_DISTANCE
:
661 case AL_LINEAR_DISTANCE_CLAMPED
:
662 case AL_EXPONENT_DISTANCE
:
663 case AL_EXPONENT_DISTANCE_CLAMPED
:
664 Context
->DistanceModel
= value
;
665 for(Source
= Context
->Source
;Source
!= NULL
;Source
= Source
->next
)
666 Source
->DistanceModel
= value
;
670 alSetError(AL_INVALID_VALUE
);
674 ProcessContext(Context
);
679 alSetError(AL_INVALID_OPERATION
);