Multiple thread backends.

This commit is contained in:
Przemysław Grzywacz
2011-06-08 16:54:35 +02:00
parent 09ed781f66
commit 1d5fca6f46
22 changed files with 1208 additions and 132 deletions
+33 -17
View File
@@ -19,6 +19,7 @@
**/
#include "Audio.h"
#include <common/delay.h>
#include <sound/Decoder.h>
@@ -28,8 +29,34 @@ namespace audio
{
namespace openal
{
Audio::PoolThread::PoolThread(Pool* pool)
: pool(pool), finish(false) {
}
void Audio::PoolThread::main()
{
while(true) {
{
thread::Lock lock(mutex);
if (finish) {
return;
}
}
pool->update();
delay(5);
}
}
void Audio::PoolThread::setFinish()
{
thread::Lock lock(mutex);
finish = true;
}
Audio::Audio()
: finish(false)
{
// Passing zero for default device.
device = alcOpenDevice(0);
@@ -67,15 +94,16 @@ namespace openal
// pool must be allocated after AL context.
pool = new Pool();
thread = SDL_CreateThread(Audio::run, (void*)this);
poolThread = new PoolThread(pool);
poolThread->start();
}
Audio::~Audio()
{
finish = true;
SDL_WaitThread(thread, 0);
poolThread->setFinish();
poolThread->wait();
delete poolThread;
delete pool;
alcMakeContextCurrent(0);
@@ -84,18 +112,6 @@ namespace openal
alcCloseDevice(device);
}
int Audio::run(void * d)
{
Audio * instance = (Audio*)d;
while(!instance->finish)
{
instance->pool->update();
SDL_Delay(5);
}
return 0;
}
const char * Audio::getName() const
{