aboutsummaryrefslogtreecommitdiffstats
path: root/OpenAL32
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2011-08-31 00:33:33 -0700
committerChris Robinson <[email protected]>2011-08-31 00:33:33 -0700
commitab0b5d98902665603384f7744dd759cd33db007f (patch)
treea0cb2055639f38426a87f92a1efac0ca73282510 /OpenAL32
parent23f576360c3abc6e4ce0d27c2361715e7169baeb (diff)
Hold the context lock only as needed when handling the listener
Diffstat (limited to 'OpenAL32')
-rw-r--r--OpenAL32/Include/alListener.h4
-rw-r--r--OpenAL32/alListener.c254
2 files changed, 138 insertions, 120 deletions
diff --git a/OpenAL32/Include/alListener.h b/OpenAL32/Include/alListener.h
index 467193e3..2bda3197 100644
--- a/OpenAL32/Include/alListener.h
+++ b/OpenAL32/Include/alListener.h
@@ -13,8 +13,8 @@ typedef struct ALlistener_struct
ALfloat Velocity[3];
ALfloat Forward[3];
ALfloat Up[3];
- ALfloat Gain;
- ALfloat MetersPerUnit;
+ volatile ALfloat Gain;
+ volatile ALfloat MetersPerUnit;
} ALlistener;
#ifdef __cplusplus
diff --git a/OpenAL32/alListener.c b/OpenAL32/alListener.c
index b68e6641..346e250a 100644
--- a/OpenAL32/alListener.c
+++ b/OpenAL32/alListener.c
@@ -28,87 +28,91 @@
AL_API ALvoid AL_APIENTRY alListenerf(ALenum eParam, ALfloat flValue)
{
- ALCcontext *pContext;
+ ALCcontext *Context;
- pContext = GetLockedContext();
- if(!pContext) return;
+ Context = GetContextRef();
+ if(!Context) return;
switch(eParam)
{
case AL_GAIN:
if(flValue >= 0.0f && isfinite(flValue))
{
- pContext->Listener.Gain = flValue;
- pContext->UpdateSources = AL_TRUE;
+ Context->Listener.Gain = flValue;
+ Context->UpdateSources = AL_TRUE;
}
else
- alSetError(pContext, AL_INVALID_VALUE);
+ alSetError(Context, AL_INVALID_VALUE);
break;
case AL_METERS_PER_UNIT:
if(flValue > 0.0f && isfinite(flValue))
{
- pContext->Listener.MetersPerUnit = flValue;
- pContext->UpdateSources = AL_TRUE;
+ Context->Listener.MetersPerUnit = flValue;
+ Context->UpdateSources = AL_TRUE;
}
else
- alSetError(pContext, AL_INVALID_VALUE);
+ alSetError(Context, AL_INVALID_VALUE);
break;
default:
- alSetError(pContext, AL_INVALID_ENUM);
+ alSetError(Context, AL_INVALID_ENUM);
break;
}
- UnlockContext(pContext);
+ ALCcontext_DecRef(Context);
}
AL_API ALvoid AL_APIENTRY alListener3f(ALenum eParam, ALfloat flValue1, ALfloat flValue2, ALfloat flValue3)
{
- ALCcontext *pContext;
+ ALCcontext *Context;
- pContext = GetLockedContext();
- if(!pContext) return;
+ Context = GetContextRef();
+ if(!Context) return;
switch(eParam)
{
case AL_POSITION:
if(isfinite(flValue1) && isfinite(flValue2) && isfinite(flValue3))
{
- pContext->Listener.Position[0] = flValue1;
- pContext->Listener.Position[1] = flValue2;
- pContext->Listener.Position[2] = flValue3;
- pContext->UpdateSources = AL_TRUE;
+ LockContext(Context);
+ Context->Listener.Position[0] = flValue1;
+ Context->Listener.Position[1] = flValue2;
+ Context->Listener.Position[2] = flValue3;
+ Context->UpdateSources = AL_TRUE;
+ UnlockContext(Context);
}
else
- alSetError(pContext, AL_INVALID_VALUE);
+ alSetError(Context, AL_INVALID_VALUE);
break;
case AL_VELOCITY:
if(isfinite(flValue1) && isfinite(flValue2) && isfinite(flValue3))
{
- pContext->Listener.Velocity[0] = flValue1;
- pContext->Listener.Velocity[1] = flValue2;
- pContext->Listener.Velocity[2] = flValue3;
- pContext->UpdateSources = AL_TRUE;
+ LockContext(Context);
+ Context->Listener.Velocity[0] = flValue1;
+ Context->Listener.Velocity[1] = flValue2;
+ Context->Listener.Velocity[2] = flValue3;
+ Context->UpdateSources = AL_TRUE;
+ UnlockContext(Context);
}
else
- alSetError(pContext, AL_INVALID_VALUE);
+ alSetError(Context, AL_INVALID_VALUE);
break;
default:
- alSetError(pContext, AL_INVALID_ENUM);
+ alSetError(Context, AL_INVALID_ENUM);
break;
}
- UnlockContext(pContext);
+ ALCcontext_DecRef(Context);
}
AL_API ALvoid AL_APIENTRY alListenerfv(ALenum eParam, const ALfloat *pflValues)
{
- ALCcontext *pContext;
+ ALCcontext *Context;
if(pflValues)
{
@@ -126,8 +130,8 @@ AL_API ALvoid AL_APIENTRY alListenerfv(ALenum eParam, const ALfloat *pflValues)
}
}
- pContext = GetLockedContext();
- if(!pContext) return;
+ Context = GetContextRef();
+ if(!Context) return;
if(pflValues)
{
@@ -138,54 +142,56 @@ AL_API ALvoid AL_APIENTRY alListenerfv(ALenum eParam, const ALfloat *pflValues)
isfinite(pflValues[2]) && isfinite(pflValues[3]) &&
isfinite(pflValues[4]) && isfinite(pflValues[5]))
{
+ LockContext(Context);
// AT then UP
- pContext->Listener.Forward[0] = pflValues[0];
- pContext->Listener.Forward[1] = pflValues[1];
- pContext->Listener.Forward[2] = pflValues[2];
- pContext->Listener.Up[0] = pflValues[3];
- pContext->Listener.Up[1] = pflValues[4];
- pContext->Listener.Up[2] = pflValues[5];
- pContext->UpdateSources = AL_TRUE;
+ Context->Listener.Forward[0] = pflValues[0];
+ Context->Listener.Forward[1] = pflValues[1];
+ Context->Listener.Forward[2] = pflValues[2];
+ Context->Listener.Up[0] = pflValues[3];
+ Context->Listener.Up[1] = pflValues[4];
+ Context->Listener.Up[2] = pflValues[5];
+ Context->UpdateSources = AL_TRUE;
+ UnlockContext(Context);
}
else
- alSetError(pContext, AL_INVALID_VALUE);
+ alSetError(Context, AL_INVALID_VALUE);
break;
default:
- alSetError(pContext, AL_INVALID_ENUM);
+ alSetError(Context, AL_INVALID_ENUM);
break;
}
}
else
- alSetError(pContext, AL_INVALID_VALUE);
+ alSetError(Context, AL_INVALID_VALUE);
- UnlockContext(pContext);
+ ALCcontext_DecRef(Context);
}
AL_API ALvoid AL_APIENTRY alListeneri(ALenum eParam, ALint lValue)
{
- ALCcontext *pContext;
+ ALCcontext *Context;
(void)lValue;
- pContext = GetLockedContext();
- if(!pContext) return;
+ Context = GetContextRef();
+ if(!Context) return;
switch(eParam)
{
default:
- alSetError(pContext, AL_INVALID_ENUM);
+ alSetError(Context, AL_INVALID_ENUM);
break;
}
- UnlockContext(pContext);
+ ALCcontext_DecRef(Context);
}
AL_API void AL_APIENTRY alListener3i(ALenum eParam, ALint lValue1, ALint lValue2, ALint lValue3)
{
- ALCcontext *pContext;
+ ALCcontext *Context;
switch(eParam)
{
@@ -195,23 +201,23 @@ AL_API void AL_APIENTRY alListener3i(ALenum eParam, ALint lValue1, ALint lValue2
return;
}
- pContext = GetLockedContext();
- if(!pContext) return;
+ Context = GetContextRef();
+ if(!Context) return;
switch(eParam)
{
default:
- alSetError(pContext, AL_INVALID_ENUM);
+ alSetError(Context, AL_INVALID_ENUM);
break;
}
- UnlockContext(pContext);
+ ALCcontext_DecRef(Context);
}
AL_API void AL_APIENTRY alListeneriv( ALenum eParam, const ALint* plValues )
{
- ALCcontext *pContext;
+ ALCcontext *Context;
ALfloat flValues[6];
if(plValues)
@@ -235,94 +241,98 @@ AL_API void AL_APIENTRY alListeneriv( ALenum eParam, const ALint* plValues )
}
}
- pContext = GetLockedContext();
- if(!pContext) return;
+ Context = GetContextRef();
+ if(!Context) return;
if(plValues)
{
switch(eParam)
{
default:
- alSetError(pContext, AL_INVALID_ENUM);
+ alSetError(Context, AL_INVALID_ENUM);
break;
}
}
else
- alSetError(pContext, AL_INVALID_VALUE);
+ alSetError(Context, AL_INVALID_VALUE);
- UnlockContext(pContext);
+ ALCcontext_DecRef(Context);
}
AL_API ALvoid AL_APIENTRY alGetListenerf(ALenum eParam, ALfloat *pflValue)
{
- ALCcontext *pContext;
+ ALCcontext *Context;
- pContext = GetLockedContext();
- if(!pContext) return;
+ Context = GetContextRef();
+ if(!Context) return;
if(pflValue)
{
switch(eParam)
{
case AL_GAIN:
- *pflValue = pContext->Listener.Gain;
+ *pflValue = Context->Listener.Gain;
break;
case AL_METERS_PER_UNIT:
- *pflValue = pContext->Listener.MetersPerUnit;
+ *pflValue = Context->Listener.MetersPerUnit;
break;
default:
- alSetError(pContext, AL_INVALID_ENUM);
+ alSetError(Context, AL_INVALID_ENUM);
break;
}
}
else
- alSetError(pContext, AL_INVALID_VALUE);
+ alSetError(Context, AL_INVALID_VALUE);
- UnlockContext(pContext);
+ ALCcontext_DecRef(Context);
}
AL_API ALvoid AL_APIENTRY alGetListener3f(ALenum eParam, ALfloat *pflValue1, ALfloat *pflValue2, ALfloat *pflValue3)
{
- ALCcontext *pContext;
+ ALCcontext *Context;
- pContext = GetLockedContext();
- if(!pContext) return;
+ Context = GetContextRef();
+ if(!Context) return;
if(pflValue1 && pflValue2 && pflValue3)
{
switch(eParam)
{
case AL_POSITION:
- *pflValue1 = pContext->Listener.Position[0];
- *pflValue2 = pContext->Listener.Position[1];
- *pflValue3 = pContext->Listener.Position[2];
+ LockContext(Context);
+ *pflValue1 = Context->Listener.Position[0];
+ *pflValue2 = Context->Listener.Position[1];
+ *pflValue3 = Context->Listener.Position[2];
+ UnlockContext(Context);
break;
case AL_VELOCITY:
- *pflValue1 = pContext->Listener.Velocity[0];
- *pflValue2 = pContext->Listener.Velocity[1];
- *pflValue3 = pContext->Listener.Velocity[2];
+ LockContext(Context);
+ *pflValue1 = Context->Listener.Velocity[0];
+ *pflValue2 = Context->Listener.Velocity[1];
+ *pflValue3 = Context->Listener.Velocity[2];
+ UnlockContext(Context);
break;
default:
- alSetError(pContext, AL_INVALID_ENUM);
+ alSetError(Context, AL_INVALID_ENUM);
break;
}
}
else
- alSetError(pContext, AL_INVALID_VALUE);
+ alSetError(Context, AL_INVALID_VALUE);
- UnlockContext(pContext);
+ ALCcontext_DecRef(Context);
}
AL_API ALvoid AL_APIENTRY alGetListenerfv(ALenum eParam, ALfloat *pflValues)
{
- ALCcontext *pContext;
+ ALCcontext *Context;
switch(eParam)
{
@@ -337,96 +347,102 @@ AL_API ALvoid AL_APIENTRY alGetListenerfv(ALenum eParam, ALfloat *pflValues)
return;
}
- pContext = GetLockedContext();
- if(!pContext) return;
+ Context = GetContextRef();
+ if(!Context) return;
if(pflValues)
{
switch(eParam)
{
case AL_ORIENTATION:
+ LockContext(Context);
// AT then UP
- pflValues[0] = pContext->Listener.Forward[0];
- pflValues[1] = pContext->Listener.Forward[1];
- pflValues[2] = pContext->Listener.Forward[2];
- pflValues[3] = pContext->Listener.Up[0];
- pflValues[4] = pContext->Listener.Up[1];
- pflValues[5] = pContext->Listener.Up[2];
+ pflValues[0] = Context->Listener.Forward[0];
+ pflValues[1] = Context->Listener.Forward[1];
+ pflValues[2] = Context->Listener.Forward[2];
+ pflValues[3] = Context->Listener.Up[0];
+ pflValues[4] = Context->Listener.Up[1];
+ pflValues[5] = Context->Listener.Up[2];
+ UnlockContext(Context);
break;
default:
- alSetError(pContext, AL_INVALID_ENUM);
+ alSetError(Context, AL_INVALID_ENUM);
break;
}
}
else
- alSetError(pContext, AL_INVALID_VALUE);
+ alSetError(Context, AL_INVALID_VALUE);
- UnlockContext(pContext);
+ ALCcontext_DecRef(Context);
}
AL_API ALvoid AL_APIENTRY alGetListeneri(ALenum eParam, ALint *plValue)
{
- ALCcontext *pContext;
+ ALCcontext *Context;
- pContext = GetLockedContext();
- if(!pContext) return;
+ Context = GetContextRef();
+ if(!Context) return;
if(plValue)
{
switch(eParam)
{
default:
- alSetError(pContext, AL_INVALID_ENUM);
+ alSetError(Context, AL_INVALID_ENUM);
break;
}
}
else
- alSetError(pContext, AL_INVALID_VALUE);
+ alSetError(Context, AL_INVALID_VALUE);
- UnlockContext(pContext);
+ ALCcontext_DecRef(Context);
}
AL_API void AL_APIENTRY alGetListener3i(ALenum eParam, ALint *plValue1, ALint *plValue2, ALint *plValue3)
{
- ALCcontext *pContext;
+ ALCcontext *Context;
- pContext = GetLockedContext();
- if(!pContext) return;
+ Context = GetContextRef();
+ if(!Context) return;
if(plValue1 && plValue2 && plValue3)
{
switch (eParam)
{
case AL_POSITION:
- *plValue1 = (ALint)pContext->Listener.Position[0];
- *plValue2 = (ALint)pContext->Listener.Position[1];
- *plValue3 = (ALint)pContext->Listener.Position[2];
+ LockContext(Context);
+ *plValue1 = (ALint)Context->Listener.Position[0];
+ *plValue2 = (ALint)Context->Listener.Position[1];
+ *plValue3 = (ALint)Context->Listener.Position[2];
+ UnlockContext(Context);
break;
case AL_VELOCITY:
- *plValue1 = (ALint)pContext->Listener.Velocity[0];
- *plValue2 = (ALint)pContext->Listener.Velocity[1];
- *plValue3 = (ALint)pContext->Listener.Velocity[2];
+ LockContext(Context);
+ *plValue1 = (ALint)Context->Listener.Velocity[0];
+ *plValue2 = (ALint)Context->Listener.Velocity[1];
+ *plValue3 = (ALint)Context->Listener.Velocity[2];
+ UnlockContext(Context);
break;
default:
- alSetError(pContext, AL_INVALID_ENUM);
+ alSetError(Context, AL_INVALID_ENUM);
break;
}
}
else
- alSetError(pContext, AL_INVALID_VALUE);
+ alSetError(Context, AL_INVALID_VALUE);
- UnlockContext(pContext);
+ ALCcontext_DecRef(Context);
}
AL_API void AL_APIENTRY alGetListeneriv(ALenum eParam, ALint* plValues)
{
- ALCcontext *pContext;
+ ALCcontext *Context;
switch(eParam)
{
@@ -436,30 +452,32 @@ AL_API void AL_APIENTRY alGetListeneriv(ALenum eParam, ALint* plValues)
return;
}
- pContext = GetLockedContext();
- if(!pContext) return;
+ Context = GetContextRef();
+ if(!Context) return;
if(plValues)
{
switch(eParam)
{
case AL_ORIENTATION:
+ LockContext(Context);
// AT then UP
- plValues[0] = (ALint)pContext->Listener.Forward[0];
- plValues[1] = (ALint)pContext->Listener.Forward[1];
- plValues[2] = (ALint)pContext->Listener.Forward[2];
- plValues[3] = (ALint)pContext->Listener.Up[0];
- plValues[4] = (ALint)pContext->Listener.Up[1];
- plValues[5] = (ALint)pContext->Listener.Up[2];
+ plValues[0] = (ALint)Context->Listener.Forward[0];
+ plValues[1] = (ALint)Context->Listener.Forward[1];
+ plValues[2] = (ALint)Context->Listener.Forward[2];
+ plValues[3] = (ALint)Context->Listener.Up[0];
+ plValues[4] = (ALint)Context->Listener.Up[1];
+ plValues[5] = (ALint)Context->Listener.Up[2];
+ UnlockContext(Context);
break;
default:
- alSetError(pContext, AL_INVALID_ENUM);
+ alSetError(Context, AL_INVALID_ENUM);
break;
}
}
else
- alSetError(pContext, AL_INVALID_VALUE);
+ alSetError(Context, AL_INVALID_VALUE);
- UnlockContext(pContext);
+ ALCcontext_DecRef(Context);
}