VaKeR CYBER ARMY
Logo of a company Server : Apache/2.4.41 (Ubuntu)
System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Directory :  /usr/share/emscripten/tests/freealut/src/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //usr/share/emscripten/tests/freealut/src/alutInit.c
#include "alutInternal.h"

static enum
{
  Unintialized,                 /* ALUT has not been initialized yet or has been de-initialised */
  ALUTDeviceAndContext,         /* alutInit has been called successfully */
  ExternalDeviceAndContext      /* alutInitWithoutContext has been called */
} initialisationState = Unintialized;

/*
 * Note: alutContext contains something valid only when initialisationState
 * contains ALUTDeviceAndContext.
 */
static ALCcontext *alutContext;

ALboolean _alutSanityCheck(void)
{
  ALCcontext *context;

  if (initialisationState == Unintialized)
  {
    _alutSetError(ALUT_ERROR_INVALID_OPERATION);
    return AL_FALSE;
  }

  context = alcGetCurrentContext();
  if (context == NULL)
  {
    _alutSetError(ALUT_ERROR_NO_CURRENT_CONTEXT);
    return AL_FALSE;
  }

  if (alGetError() != AL_NO_ERROR)
  {
    _alutSetError(ALUT_ERROR_AL_ERROR_ON_ENTRY);
    return AL_FALSE;
  }

  if (alcGetError(alcGetContextsDevice(context)) != ALC_NO_ERROR)
  {
    _alutSetError(ALUT_ERROR_ALC_ERROR_ON_ENTRY);
    return AL_FALSE;
  }

  return AL_TRUE;
}

ALboolean alutInit(int *argcp, char **argv)
{
  ALCdevice *device;
  ALCcontext *context;

  if (initialisationState != Unintialized)
  {
    _alutSetError(ALUT_ERROR_INVALID_OPERATION);
    return AL_FALSE;
  }

  if ((argcp == NULL) != (argv == NULL))
  {
    _alutSetError(ALUT_ERROR_INVALID_VALUE);
    return AL_FALSE;
  }

  device = alcOpenDevice(NULL);
  if (device == NULL)
  {
    _alutSetError(ALUT_ERROR_OPEN_DEVICE);
    return AL_FALSE;
  }

  context = alcCreateContext(device, NULL);
  if (context == NULL)
  {
    alcCloseDevice(device);
    _alutSetError(ALUT_ERROR_CREATE_CONTEXT);
    return AL_FALSE;
  }

  if (!alcMakeContextCurrent(context))
  {
    alcDestroyContext(context);
    alcCloseDevice(device);
    _alutSetError(ALUT_ERROR_MAKE_CONTEXT_CURRENT);
    return AL_FALSE;
  }

  initialisationState = ALUTDeviceAndContext;
  alutContext = context;
  return AL_TRUE;
}

ALboolean alutInitWithoutContext(int *argcp, char **argv)
{
  if (initialisationState != Unintialized)
  {
    _alutSetError(ALUT_ERROR_INVALID_OPERATION);
    return AL_FALSE;
  }

  if ((argcp == NULL) != (argv == NULL))
  {
    _alutSetError(ALUT_ERROR_INVALID_VALUE);
    return AL_FALSE;
  }

  initialisationState = ExternalDeviceAndContext;
  return AL_TRUE;
}

ALboolean alutExit(void)
{
  ALCdevice *device;

  if (initialisationState == Unintialized)
  {
    _alutSetError(ALUT_ERROR_INVALID_OPERATION);
    return AL_FALSE;
  }

  if (initialisationState == ExternalDeviceAndContext)
  {
    initialisationState = Unintialized;
    return AL_TRUE;
  }

  if (!_alutSanityCheck())
  {
    return AL_FALSE;
  }

  if (!alcMakeContextCurrent(NULL))
  {
    _alutSetError(ALUT_ERROR_MAKE_CONTEXT_CURRENT);
    return AL_FALSE;
  }

  device = alcGetContextsDevice(alutContext);
  alcDestroyContext(alutContext);
  if (alcGetError(device) != ALC_NO_ERROR)
  {
    _alutSetError(ALUT_ERROR_DESTROY_CONTEXT);
    return AL_FALSE;
  }

  if (!alcCloseDevice(device))
  {
    _alutSetError(ALUT_ERROR_CLOSE_DEVICE);
    return AL_FALSE;
  }

  initialisationState = Unintialized;
  return AL_TRUE;
}

VaKeR 2022