bool DelayExpired() {
while ( /*created && !badError &&*/ !terminated) {
ALint state = AL_PLAYING;
ALint processed = 0;
alureSleep(0.01f);
if ( !source || source.state!=playing ) continue;
alGetError();
alGetSourcei(source.id, AL_SOURCE_STATE, &state);
alGetSourcei(source.id, AL_BUFFERS_PROCESSED, &processed);
// printf( "Processed: %d\n", processed );
// printf( "I: %s", alureGetErrorString());
if(processed > 0)
{
ALuint *bufs=new ALuint[usesBuffers];
ALsizei filled;
alSourceUnqueueBuffers(source.id, processed, bufs);
filled = alureBufferDataFromStream(stream, processed, bufs);
if(filled <= 0) {
if(loop) {
alureRewindStream(stream);
filled = alureBufferDataFromStream(stream, processed, bufs);
if(filled <= 0) {
printf( "ALUREStream:DelayExpiredinThread:Bad error when attempting to loop.\n" );
badError=true;
((GuiApplication)__thisModule).Lock(); OnError(); ((GuiApplication)__thisModule).Unlock();
delete bufs;
return false;
}
} else if(state != AL_PLAYING) {
((GuiApplication)__thisModule).Lock(); OnComplete(); ((GuiApplication)__thisModule).Unlock();
delete bufs;
return false;
}
}
alSourceQueueBuffers(source.id, filled, bufs);
delete bufs;
}
if(state != AL_PLAYING) { alSourcePlay(source.id); }
((GuiApplication)__thisModule).Lock(); BetweenFrames(); ((GuiApplication)__thisModule).Unlock();
}
// this.timer.delay = (1.0f/refreshRate);
// this.timer.Start();
return true;
}