Пример #1
0
/*
 * _alGetDoublev( ALenum param, ALdouble *dv )
 *
 * Non locking version of alGetDoublev
 *
 */
void _alGetDoublev(ALenum param, ALdouble *dv) {
	AL_context *cc;

	cc = _alcDCGetContext();
	if( cc == NULL ) {
		/* no current context, set error and return */
		_alcSetError( ALC_INVALID_CONTEXT );

		return;
	}

	switch( param ) {
		case AL_DOPPLER_FACTOR:
			*dv = cc->doppler_factor;
			break;
		case AL_DOPPLER_VELOCITY:
			*dv = cc->doppler_velocity;
			break;
		default:
			_alDCSetError( AL_ILLEGAL_ENUM );
			break;
	}

	return;
}
Пример #2
0
void
alDistanceModel( ALenum distanceModel )
{
	AL_context *cc = _alcDCGetContext();
	if( cc == NULL ) {
		_alDCSetError( AL_INVALID_OPERATION );
		return;
	}
	_alcDCLockContext();

	switch( distanceModel ) {
	case AL_NONE:
	case AL_INVERSE_DISTANCE:
	case AL_INVERSE_DISTANCE_CLAMPED:
	case AL_LINEAR_DISTANCE:
	case AL_LINEAR_DISTANCE_CLAMPED:
	case AL_EXPONENT_DISTANCE:
	case AL_EXPONENT_DISTANCE_CLAMPED:
		cc->distance_model = distanceModel;
		_alUpdateDistanceModel(cc);
		break;
	default:
		_alDCSetError( AL_INVALID_ENUM );
		break;
	}

	_alcDCUnlockContext();
}
Пример #3
0
/*
 * alGetString( ALenum param )
 *
 * Returns readable string representation of param, or NULL if no string
 * representation is available.
 */
const ALubyte *alGetString( ALenum param ) {
	AL_context *cc;

	static ALubyte extensions[4096];

	/*
	 * First, we check to see if the param corresponds to an
	 * error, in which case we return the value from _alGetErrorString.
	 */
	if(_alIsError(param) == AL_TRUE) {
		return _alGetErrorString(param);
	}

	/*
	 * Next, we check to see if the param corresponds to an alc
	 * error, in which case we return the value from _alcGetErrorString.
	 */
	if( alcIsError( param ) == AL_TRUE ) {
		return _alcGetErrorString( param );
	}

	switch(param) {
		case AL_VENDOR:
			return (const ALubyte *) "J. Valenzuela";
			break;
		case AL_VERSION:
			return (const ALubyte *) LAL_VERSION;
			break;
		case AL_RENDERER:
			return (const ALubyte *) "Software";
			break;
		case AL_EXTENSIONS:
			_alGetExtensionStrings( extensions, sizeof( extensions ) );
			return extensions;
			break;
		case 0xfeedabee:
			return (const ALubyte *) "Mark 12:31";
			break;
		default:
		  break;
	}

	cc = _alcDCGetContext();
	if( cc == NULL ) {
		/* no current context, set error and return */
		_alcSetError( ALC_INVALID_CONTEXT );

		return NULL;
	}
	else
	{
		_alDCSetError( AL_ILLEGAL_ENUM );
	}

	return NULL;
}
Пример #4
0
void
alcSetAudioChannel_LOKI(ALuint channel, ALfloat volume)
{
	AL_context *cc;
	_alcDCLockContext();
	cc = _alcDCGetContext();
	if(cc != NULL) {
		alcDeviceSetAudioChannel_( cc->write_device, channel, volume );
	}
	_alcDCUnlockContext();
}
Пример #5
0
const ALchar*
alGetString( ALenum param )
{
	const ALchar *value;
	static ALchar extensions[1024]; /* TODO: Ugly and not thread-safe! */

	AL_context *cc = _alcDCGetContext();
	if( cc == NULL ) {
		_alDCSetError( AL_INVALID_OPERATION );
		return NULL;
	}
	_alcDCLockContext();

	switch (param) {
	case AL_VERSION:
		value = "1.1";
		break;
	case AL_RENDERER:
		value = "OpenAL Sample Implementation";
		break;
	case AL_VENDOR:
		value = "OpenAL Community";
		break;
	case AL_EXTENSIONS:
		_alGetExtensionStrings( extensions, sizeof( extensions ) );
		value = extensions;
		break;
	case AL_NO_ERROR:
		value = "No Error";
		break;
	case AL_INVALID_NAME:
		value = "Invalid Name";
		break;
	case AL_INVALID_ENUM:
		value = "Invalid Enum";
		break;
	case AL_INVALID_VALUE:
		value = "Invalid Value";
		break;
	case AL_INVALID_OPERATION:
		value = "Invalid Operation";
		break;
	case AL_OUT_OF_MEMORY:
		value = "Out of Memory";
		break;
	default:
		value = NULL;
		_alDCSetError( AL_INVALID_ENUM );
		break;
	}

	_alcDCUnlockContext();
	return value;
}
Пример #6
0
ALfloat
alcGetAudioChannel_LOKI(ALuint channel)
{
	AL_context *cc;
	ALfloat retval = 0.0f;
	_alcDCLockContext();
	cc = _alcDCGetContext();
	if(cc != NULL) {
		retval = alcDeviceGetAudioChannel_( cc->write_device, channel );
	}
	_alcDCUnlockContext();
	return retval;
}
Пример #7
0
/*
 * _alIsEnabled( ALenum param )
 *
 * Non locking version of alIsEnabled.
 *
 * assumes locked context
 */
ALboolean _alIsEnabled( ALenum param ) {
	AL_context *cc;

	cc = _alcDCGetContext();
	if( cc == NULL ) {
		return AL_FALSE;
	}

	switch( param ) {
		default:
			_alDCSetError( AL_ILLEGAL_ENUM );
			break;
	}

	return AL_FALSE;
}
Пример #8
0
/*
 * _alDisable( ALenum param )
 *
 * Disables the attribute specified by param.
 *
 * If param is not a valid attribute, AL_ILLEGAL_ENUM is set.
 *
 * assumes locked context
 */
void _alDisable( ALenum param ) {
	AL_context *cc;

	cc = _alcDCGetContext();
	if(cc == NULL) {
		return;
	}

	switch( param ) {
		default:
			_alDCSetError( AL_ILLEGAL_ENUM );
			break;
	}

	return;
}
Пример #9
0
void
alDisable( ALenum param )
{
	AL_context *cc = _alcDCGetContext();
	if( cc == NULL ) {
		_alDCSetError( AL_INVALID_OPERATION );
		return;
	}
	_alcDCLockContext();

	switch (param) {
	default:
		_alDCSetError( AL_INVALID_ENUM );
		break;
	}

	_alcDCUnlockContext();
}
Пример #10
0
ALboolean
alIsEnabled( ALenum param )
{
	AL_context *cc = _alcDCGetContext();
	if( cc == NULL ) {
		_alDCSetError( AL_INVALID_OPERATION );
		return AL_FALSE;
	}
	_alcDCLockContext();

	switch (param) {
	default:
		_alDCSetError( AL_INVALID_ENUM );
		break;
	}

	_alcDCUnlockContext();
	return AL_FALSE;
}
Пример #11
0
void
alSpeedOfSound( ALfloat value )
{
	AL_context *cc = _alcDCGetContext();
	if( cc == NULL ) {
		_alDCSetError( AL_INVALID_OPERATION );
		return;
	}
	_alcDCLockContext();

	if( value <= 0.0f ) {
		_alDCSetError( AL_INVALID_VALUE );
		_alcDCUnlockContext();
		return;
	}
	cc->speed_of_sound = value;

	_alcDCUnlockContext();
}
Пример #12
0
void
alDopplerVelocity( ALfloat value )
{
	AL_context *cc = _alcDCGetContext();
	if( cc == NULL ) {
		_alDCSetError( AL_INVALID_OPERATION );
		return;
	}
	_alcDCLockContext();

	if( value <= 0.0f ) {
		_alDCSetError( AL_INVALID_VALUE );
		_alcDCUnlockContext();
		return;
	}
	cc->doppler_velocity = value;

	_alcDCUnlockContext();
}
Пример #13
0
/*
 * Assumes locked context.
 */
void _alPropagationSpeed(ALfloat value) {
	AL_context *cc;
	ALboolean inrange;

	inrange = _alCheckRangef(value,
				 MIN_PROPAGATION_SPEED,
				 MAX_PROPAGATION_SPEED);
	if(inrange == AL_FALSE) {
		_alDCSetError(AL_INVALID_VALUE);
		return;
	}

	cc = _alcDCGetContext();
	if(cc == NULL) {
		return;
	}

	cc->propagation_speed = value;

	return;
}
Пример #14
0
/*
 * _alGetIntegerv( ALenum param, ALint *iv )
 *
 * Non locking version of alGetIntegerv
 */
void _alGetIntegerv(UNUSED(ALenum param), UNUSED(ALint *iv)) {
	AL_context *cc;

	cc = _alcDCGetContext();
	if( cc == NULL ) {
		/* no current context, set error and return */
		_alcSetError( ALC_INVALID_CONTEXT );

		return;
	}

	switch( param ) {
		case AL_DISTANCE_MODEL:
			*iv = cc->distance_model;
			break;
		default:
			_alDCSetError( AL_ILLEGAL_ENUM );
			break;
	}

	return;
}
Пример #15
0
/*
 * alGetError( void )
 *
 * Returns the most recent error generated in the AL state machine.
 */
ALenum alGetError( void ) {
	AL_context *cc;
	int index;

	_alcDCLockContext();

	cc = _alcDCGetContext();

	if(cc == NULL)
		return 0;

	index = index2ErrorNo(cc->alErrorIndex);

	/*
	 * In deference to the new spec, GetError clears the error
	 * after reading it.
	 */
	cc->alErrorIndex = 0;
	
	_alcDCUnlockContext();

	return index;
}