11 #include "../../Source.h"
12 #include "../../Listener.h"
31 alBuffersAttached(false)
33 alGenSources(1,&alSource);
38 alDeleteSources(1,&alSource);
44 if (!isPlayingImpl()) {
50 ALuint als = getALSource();
62 alSourceStop(alSource);
69 alGetSourcei(
getALSource(), AL_SOURCE_STATE, &state);
70 return (state == AL_PLAYING);
88 Source *source = getSource();
93 if (flags & UPDATE_ATTRIBUTES) {
96 alSourcef(als, AL_REFERENCE_DISTANCE, source->
getRadius());
97 alSourcef(als, AL_ROLLOFF_FACTOR, 1.
f);
99 alSourcef(als, AL_ROLLOFF_FACTOR, 0.
f);
104 alSourcef(als, AL_CONE_INNER_ANGLE,
float(angleRange.
min) *
M_1_PI * 360.f);
105 alSourcef(als, AL_CONE_OUTER_ANGLE,
float(angleRange.
max) *
M_1_PI * 360.f);
106 alSourcef(als, AL_CONE_OUTER_GAIN , 0.
f);
109 alSourcei(als, AL_SOURCE_RELATIVE, source->
isRelative() ? AL_TRUE : AL_FALSE);
111 alSourcei(als, AL_LOOPING, source->
isLooping() ? AL_TRUE : AL_FALSE);
113 if (flags & UPDATE_GAIN) {
115 alSourcef(als, AL_GAIN, source->
getGain());
117 if (flags & UPDATE_LOCATION) {
124 source->
getPosition() - sceneListener.getPosition() );
126 sceneListener.toLocalDirection(
127 source->
getVelocity() - sceneListener.getVelocity()
130 sceneListener.toLocalDirection(
142 if (!alBuffersAttached) {
145 if (!sound->isLoaded())
148 assert(!sound->isStreaming() &&
"OpenALRenderableSource can only handle streaming sounds");
153 alSourcei(alSource, AL_BUFFER, alBuffer);
154 alBuffersAttached =
true;
167 ALuint als = getALSource();
170 ALenum
error = alGetError();
171 if (error == ALC_INVALID_ENUM) {