aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2010-03-23 21:05:29 -0700
committerChris Robinson <[email protected]>2010-03-23 21:05:29 -0700
commit702c62c9a241e5103e4e60fb451a1ed2fefe14f8 (patch)
tree8a63d4672398d074de6befe18d79458135921d11
parent661059bf0f6fb03eed305207d935cb5bcbdfab27 (diff)
Use a global handle to store the process-wide context
-rw-r--r--Alc/ALc.c34
-rw-r--r--OpenAL32/Include/alMain.h1
2 files changed, 8 insertions, 27 deletions
diff --git a/Alc/ALc.c b/Alc/ALc.c
index 0dacbd2a..e7590686 100644
--- a/Alc/ALc.c
+++ b/Alc/ALc.c
@@ -209,6 +209,8 @@ static ALCuint g_ulContextCount = 0;
// Thread-local current context
static tls_type LocalContext;
+// Process-wide current context
+static ALCcontext *GlobalContext;
// Context Error
static ALCenum g_eLastContextError = ALC_NO_ERROR;
@@ -597,11 +599,8 @@ ALCcontext *GetContextSuspended(void)
pContext = NULL;
}
if(!pContext)
- {
- pContext = g_pContextList;
- while(pContext && !pContext->InUse)
- pContext = pContext->next;
- }
+ pContext = GlobalContext;
+
if(pContext)
SuspendContext(pContext);
@@ -636,7 +635,6 @@ static ALvoid InitContext(ALCcontext *pContext)
//Validate pContext
pContext->LastError = AL_NO_ERROR;
- pContext->InUse = AL_FALSE;
pContext->Suspended = AL_FALSE;
//Set globals
@@ -659,7 +657,6 @@ static ALCvoid ExitContext(ALCcontext *pContext)
{
//Invalidate context
pContext->LastError = AL_NO_ERROR;
- pContext->InUse = AL_FALSE;
}
///////////////////////////////////////////////////////
@@ -1399,6 +1396,9 @@ ALC_API ALCvoid ALC_APIENTRY alcDestroyContext(ALCcontext *context)
SuspendContext(NULL);
+ if(context == GlobalContext)
+ GlobalContext = NULL;
+
for(i = 0;i < Device->NumContexts-1;i++)
{
if(Device->Contexts[i] == context)
@@ -1512,7 +1512,6 @@ ALC_API ALCdevice* ALC_APIENTRY alcGetContextsDevice(ALCcontext *pContext)
*/
ALC_API ALCboolean ALC_APIENTRY alcMakeContextCurrent(ALCcontext *context)
{
- ALCcontext *ALContext;
ALboolean bReturn = AL_TRUE;
SuspendContext(NULL);
@@ -1520,24 +1519,7 @@ ALC_API ALCboolean ALC_APIENTRY alcMakeContextCurrent(ALCcontext *context)
// context must be a valid Context or NULL
if(context == NULL || IsContext(context))
{
- ALContext = g_pContextList;
- while(ALContext && !ALContext->InUse)
- ALContext = ALContext->next;
-
- if(ALContext != NULL)
- {
- SuspendContext(ALContext);
- ALContext->InUse=AL_FALSE;
- ProcessContext(ALContext);
- }
-
- if((ALContext=context) != NULL && ALContext->Device)
- {
- SuspendContext(ALContext);
- ALContext->InUse=AL_TRUE;
- ProcessContext(ALContext);
- }
-
+ GlobalContext = context;
tls_set(LocalContext, NULL);
}
else
diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h
index 58c5ef6a..aea2b50e 100644
--- a/OpenAL32/Include/alMain.h
+++ b/OpenAL32/Include/alMain.h
@@ -312,7 +312,6 @@ struct ALCcontext_struct
struct ALdatabuffer *SampleSink;
ALenum LastError;
- ALboolean InUse;
ALboolean Suspended;