Simplify OpenAL backend

This commit is contained in:
UnknownShadow200 2018-09-08 10:11:03 +10:00
parent 630a43bea2
commit 53475ce993
2 changed files with 36 additions and 62 deletions

View File

@ -19,11 +19,8 @@ namespace SharpWave {
this.volume = volume; this.volume = volume;
if (source == uint.MaxValue) return; if (source == uint.MaxValue) return;
lock (contextLock) { AL.alSourcef(source, ALSourcef.Gain, volume);
MakeContextCurrent(); CheckError("SetVolume");
AL.alSourcef(source, ALSourcef.Gain, volume);
CheckError("SetVolume");
}
} }
public override void Create(int numBuffers) { public override void Create(int numBuffers) {
@ -38,27 +35,23 @@ namespace SharpWave {
lock (contextLock) { lock (contextLock) {
if (context == IntPtr.Zero) CreateContext(); if (context == IntPtr.Zero) CreateContext();
contextRefs++; contextRefs++;
MakeContextCurrent();
AL.alDistanceModel(ALDistanceModel.None);
CheckError("DistanceModel");
} }
AL.alDistanceModel(ALDistanceModel.None);
CheckError("DistanceModel");
Console.WriteLine("al context:" + context); Console.WriteLine("al context:" + context);
} }
public override bool IsCompleted(int index) { public override bool IsCompleted(int index) {
int processed = 0; int processed = 0;
uint buffer = 0; uint buffer = 0;
lock (contextLock) {
MakeContextCurrent();
AL.alGetSourcei(source, ALGetSourcei.BuffersProcessed, &processed); AL.alGetSourcei(source, ALGetSourcei.BuffersProcessed, &processed);
CheckError("GetSources"); CheckError("GetSources");
if (processed == 0) return completed[index]; if (processed == 0) return completed[index];
AL.alSourceUnqueueBuffers(source, 1, &buffer); AL.alSourceUnqueueBuffers(source, 1, &buffer);
CheckError("SourceUnqueueBuffers"); CheckError("SourceUnqueueBuffers");
}
for (int i = 0; i < NumBuffers; i++) { for (int i = 0; i < NumBuffers; i++) {
if (bufferIDs[i] == buffer) completed[i] = true; if (bufferIDs[i] == buffer) completed[i] = true;
@ -73,11 +66,8 @@ namespace SharpWave {
} }
int state = 0; int state = 0;
lock (contextLock) { AL.alGetSourcei(source, ALGetSourcei.SourceState, &state);
MakeContextCurrent(); return state != (int)ALSourceState.Playing;
AL.alGetSourcei(source, ALGetSourcei.SourceState, &state);
return state != (int)ALSourceState.Playing;
}
} }
public override void BufferData(int index, AudioChunk chunk) { public override void BufferData(int index, AudioChunk chunk) {
@ -85,24 +75,18 @@ namespace SharpWave {
uint buffer = bufferIDs[index]; uint buffer = bufferIDs[index];
completed[index] = false; completed[index] = false;
lock (contextLock) { AL.alBufferData(buffer, dataFormat, (IntPtr)data,
MakeContextCurrent(); chunk.Length, Format.SampleRate);
AL.alBufferData(buffer, dataFormat, (IntPtr)data, CheckError("BufferData");
chunk.Length, Format.SampleRate);
CheckError("BufferData");
AL.alSourceQueueBuffers(source, 1, &buffer); AL.alSourceQueueBuffers(source, 1, &buffer);
CheckError("QueueBuffers"); CheckError("QueueBuffers");
}
} }
} }
public override void Play() { public override void Play() {
lock (contextLock) { AL.alSourcePlay(source);
MakeContextCurrent(); CheckError("SourcePlay");
AL.alSourcePlay(source);
CheckError("SourcePlay");
}
} }
void CheckError(string location) { void CheckError(string location) {
@ -124,16 +108,13 @@ namespace SharpWave {
if (source == uint.MaxValue) return; if (source == uint.MaxValue) return;
uint sourceU = source; uint sourceU = source;
fixed (uint* buffers = bufferIDs) { AL.alDeleteSources(1, &sourceU);
lock (contextLock) { source = uint.MaxValue;
MakeContextCurrent(); CheckError("DeleteSources");
AL.alDeleteSources(1, &sourceU);
source = uint.MaxValue;
CheckError("DeleteSources");
AL.alDeleteBuffers(NumBuffers, buffers); fixed (uint* buffers = bufferIDs) {
CheckError("DeleteBuffers"); AL.alDeleteBuffers(NumBuffers, buffers);
} CheckError("DeleteBuffers");
} }
} }
@ -147,15 +128,12 @@ namespace SharpWave {
uint sourceU = 0; uint sourceU = 0;
fixed (uint* buffers = bufferIDs) { fixed (uint* buffers = bufferIDs) {
lock (contextLock) { AL.alGenSources(1, &sourceU);
MakeContextCurrent(); source = sourceU;
AL.alGenSources(1, &sourceU); CheckError("GenSources");
source = sourceU;
CheckError("GenSources");
AL.alGenBuffers(NumBuffers, buffers); AL.alGenBuffers(NumBuffers, buffers);
CheckError("GenBuffers"); CheckError("GenBuffers");
}
} }
if (volume != 1) SetVolume(volume); if (volume != 1) SetVolume(volume);
@ -192,7 +170,7 @@ namespace SharpWave {
} }
CheckContextErrors(); CheckContextErrors();
MakeContextCurrent(); AL.alcMakeContextCurrent(context);
CheckContextErrors(); CheckContextErrors();
} }
@ -212,10 +190,6 @@ namespace SharpWave {
} }
} }
static void MakeContextCurrent() {
AL.alcMakeContextCurrent(context);
}
static void DestroyContext() { static void DestroyContext() {
if (device == IntPtr.Zero) return; if (device == IntPtr.Zero) return;
AL.alcMakeContextCurrent(IntPtr.Zero); AL.alcMakeContextCurrent(IntPtr.Zero);