• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

src/audio/src/util/alutInit.cpp

Go to the documentation of this file.
00001 #include "alutInternal.h"
00002 
00003 static enum
00004 {
00005   Unintialized,                 /* ALUT has not been initialized yet or has been de-initialised */
00006   ALUTDeviceAndContext,         /* alutInit has been called successfully */
00007   ExternalDeviceAndContext      /* alutInitWithoutContext has been called */
00008 } initialisationState = Unintialized;
00009 
00010 /*
00011  * Note: alutContext contains something valid only when initialisationState
00012  * contains ALUTDeviceAndContext.
00013  */
00014 static ALCcontext *alutContext;
00015 
00016 ALboolean
00017 _alutSanityCheck (void)
00018 {
00019   ALCcontext *context;
00020 
00021   if (initialisationState == Unintialized)
00022     {
00023       _alutSetError (ALUT_ERROR_INVALID_OPERATION);
00024       return AL_FALSE;
00025     }
00026 
00027   context = alcGetCurrentContext ();
00028   if (context == NULL)
00029     {
00030       _alutSetError (ALUT_ERROR_NO_CURRENT_CONTEXT);
00031       return AL_FALSE;
00032     }
00033 
00034   if (alGetError () != AL_NO_ERROR)
00035     {
00036       _alutSetError (ALUT_ERROR_AL_ERROR_ON_ENTRY);
00037       return AL_FALSE;
00038     }
00039 
00040   if (alcGetError (alcGetContextsDevice (context)) != ALC_NO_ERROR)
00041     {
00042       _alutSetError (ALUT_ERROR_ALC_ERROR_ON_ENTRY);
00043       return AL_FALSE;
00044     }
00045 
00046   return AL_TRUE;
00047 }
00048 
00049 ALboolean
00050 alutInit(ALCdevice* device, ALCcontext* context)
00051 {
00052   if (initialisationState != Unintialized)
00053     {
00054       _alutSetError (ALUT_ERROR_INVALID_OPERATION);
00055       return AL_FALSE;
00056     }
00057 
00058   if (device == NULL)
00059   {
00060           _alutSetError (ALUT_ERROR_OPEN_DEVICE);
00061           return AL_FALSE;
00062   }
00063 
00064   if (context == NULL)
00065   {
00066           _alutSetError (ALUT_ERROR_CREATE_CONTEXT);
00067           return AL_FALSE;
00068   }
00069 
00070   initialisationState = ALUTDeviceAndContext;
00071   alutContext = context;
00072   return AL_TRUE;
00073 }
00074 
00075 ALboolean
00076 alutInitWithoutContext (int *argcp, char **argv)
00077 {
00078   if (initialisationState != Unintialized)
00079     {
00080       _alutSetError (ALUT_ERROR_INVALID_OPERATION);
00081       return AL_FALSE;
00082     }
00083 
00084   if ((argcp == NULL) != (argv == NULL))
00085     {
00086       _alutSetError (ALUT_ERROR_INVALID_VALUE);
00087       return AL_FALSE;
00088     }
00089 
00090   initialisationState = ExternalDeviceAndContext;
00091   return AL_TRUE;
00092 }
00093 
00094 ALboolean
00095 alutExit (void)
00096 {
00097   if (initialisationState == Unintialized)
00098     {
00099       _alutSetError (ALUT_ERROR_INVALID_OPERATION);
00100       return AL_FALSE;
00101     }
00102 
00103   if (initialisationState == ExternalDeviceAndContext)
00104     {
00105       initialisationState = Unintialized;
00106       return AL_TRUE;
00107     }
00108 
00109   if (!_alutSanityCheck ())
00110     {
00111       return AL_FALSE;
00112     }
00113 
00114   if (!alcMakeContextCurrent (NULL))
00115     {
00116       _alutSetError (ALUT_ERROR_MAKE_CONTEXT_CURRENT);
00117       return AL_FALSE;
00118     }
00119 
00120   initialisationState = Unintialized;
00121   return AL_TRUE;
00122 }

Generated on Fri Jun 18 2010 17:48:39 for Cannonball by  doxygen 1.7.0