Sound_Renderer_AL::~Sound_Renderer_AL() {
    alcDestroyContext()(m_context);
    alcCloseDevice()(m_device);

#ifndef _MACOSX
    FreeLibrary(m_openal32);
#endif

    zero_handles();
  }
Exemple #2
0
  Video_DX9::~Video_DX9() {
    destroy_device();

    if(m_d3d)
      m_d3d->Release();

    delete m_d3d_parameters;
    delete m_d3d_capabilities;

    FreeLibrary(m_d3dx9);
    FreeLibrary(m_d3d9);

    zero_handles();
  }
  Sound_Renderer_AL::Sound_Renderer_AL()
    : m_device(0),
    m_context(0),
    m_bgm(0),
    m_bgm_source(0)
  {
#ifndef _MACOSX
#ifdef _WINDOWS
    m_openal32 = LoadLibrary("OpenAL32.dll");
#else
    m_openal32 = LoadLibrary("libopenal.so");
#endif
    if(!m_openal32) {
      std::cerr << "Loading OpenAL32.dll failed." << std::endl;

      throw Sound_Init_Failure();
    }

    g_alBufferData = (alBufferData_fcn)GetProcAddress(m_openal32, "alBufferData");
    g_alcCloseDevice = (alcCloseDevice_fcn)GetProcAddress(m_openal32, "alcCloseDevice");
    g_alcCreateContext = (alcCreateContext_fcn)GetProcAddress(m_openal32, "alcCreateContext");
    g_alcDestroyContext = (alcDestroyContext_fcn)GetProcAddress(m_openal32, "alcDestroyContext");
    g_alIsExtensionPresent = (alIsExtensionPresent_fcn)GetProcAddress(m_openal32, "alIsExtensionPresent");
    g_alcMakeContextCurrent = (alcMakeContextCurrent_fcn)GetProcAddress(m_openal32, "alcMakeContextCurrent");
    g_alcOpenDevice = (alcOpenDevice_fcn)GetProcAddress(m_openal32, "alcOpenDevice");
    g_alDeleteBuffers = (alDeleteBuffers_fcn)GetProcAddress(m_openal32, "alDeleteBuffers");
    g_alDeleteSources = (alDeleteSources_fcn)GetProcAddress(m_openal32, "alDeleteSources");
    g_alGenBuffers = (alGenBuffers_fcn)GetProcAddress(m_openal32, "alGenBuffers");
    g_alGetError = (alGetError_fcn)GetProcAddress(m_openal32, "alGetError");
    g_alGetListenerf = (alGetListenerf_fcn)GetProcAddress(m_openal32, "alGetListenerf");
    g_alGetListenerfv = (alGetListenerfv_fcn)GetProcAddress(m_openal32, "alGetListenerfv");
    g_alGetSourcef = (alGetSourcef_fcn)GetProcAddress(m_openal32, "alGetSourcef");
    g_alGetSourcefv = (alGetSourcefv_fcn)GetProcAddress(m_openal32, "alGetSourcefv");
    g_alGetSourcei = (alGetSourcei_fcn)GetProcAddress(m_openal32, "alGetSourcei");
    g_alGenSources = (alGenSources_fcn)GetProcAddress(m_openal32, "alGenSources");
    g_alListenerf = (alListenerf_fcn)GetProcAddress(m_openal32, "alListenerf");
    g_alListenerfv = (alListenerfv_fcn)GetProcAddress(m_openal32, "alListenerfv");
    g_alSourcef = (alSourcef_fcn)GetProcAddress(m_openal32, "alSourcef");
    g_alSourcefv = (alSourcefv_fcn)GetProcAddress(m_openal32, "alSourcefv");
    g_alSourcei = (alSourcei_fcn)GetProcAddress(m_openal32, "alSourcei");
    g_alSourcePause = (alSourcePause_fcn)GetProcAddress(m_openal32, "alSourcePause");
    g_alSourcePlay = (alSourcePlay_fcn)GetProcAddress(m_openal32, "alSourcePlay");
    g_alSourceStop = (alSourceStop_fcn)GetProcAddress(m_openal32, "alSourceStop");
    if(!g_alBufferData || !g_alcCloseDevice || !g_alcCreateContext || !g_alcDestroyContext ||
       !g_alIsExtensionPresent || !g_alcMakeContextCurrent || !g_alcOpenDevice || !g_alDeleteBuffers ||
       !g_alDeleteSources || !g_alGenBuffers || !g_alGetError || !g_alGetListenerf ||
       !g_alGetListenerfv || !g_alGetSourcef || !g_alGetSourcefv || !g_alGetSourcei ||
       !g_alGenSources || !g_alListenerf || !g_alListenerfv || !g_alSourcef ||
       !g_alSourcefv || !g_alSourcei || !g_alSourcePause || !g_alSourcePlay ||
       !g_alSourceStop)
    {
      std::cerr << "Loading OpenAL32.dll failed." << std::endl;

      zero_handles();
      FreeLibrary(m_openal32);

      throw Sound_Init_Failure();
    }
    
#ifdef _WINDOWS
    m_libvorbisfile = LoadLibrary("libvorbisfile.dll");
#else
    m_libvorbisfile = LoadLibrary("libvorbisfile.so");
#endif
    if(!m_libvorbisfile) {
      std::cerr << "Loading libvorbisfile.dll failed." << std::endl;

      zero_handles();
      FreeLibrary(m_openal32);

      throw Sound_Init_Failure();
    }

    g_ov_clear = (ov_clear_fcn)GetProcAddress(m_libvorbisfile, "ov_clear");
    g_ov_info = (ov_info_fcn)GetProcAddress(m_libvorbisfile, "ov_info");
    g_ov_fopen = (ov_fopen_fcn)GetProcAddress(m_libvorbisfile, "ov_fopen");
    g_ov_pcm_total = (ov_pcm_total_fcn)GetProcAddress(m_libvorbisfile, "ov_pcm_total");
    g_ov_read = (ov_read_fcn)GetProcAddress(m_libvorbisfile, "ov_read");
    if(!g_ov_clear || !g_ov_info || !g_ov_fopen || !g_ov_pcm_total || !g_ov_read) {
      std::cerr << "Loading libvorbisfile.dll failed." << std::endl;

      zero_handles();
      FreeLibrary(m_libvorbisfile);
      FreeLibrary(m_openal32);

      throw Sound_Init_Failure();
    }
#else
    g_alBufferData = (alBufferData_fcn)::alBufferData;
    g_alcCloseDevice = (alcCloseDevice_fcn)::alcCloseDevice;
    g_alcCreateContext = (alcCreateContext_fcn)::alcCreateContext;
    g_alcDestroyContext = (alcDestroyContext_fcn)::alcDestroyContext;
    g_alIsExtensionPresent = (alIsExtensionPresent_fcn)::alIsExtensionPresent;
    g_alcMakeContextCurrent = (alcMakeContextCurrent_fcn)::alcMakeContextCurrent;
    g_alcOpenDevice = (alcOpenDevice_fcn)::alcOpenDevice;
    g_alDeleteBuffers = (alDeleteBuffers_fcn)::alDeleteBuffers;
    g_alDeleteSources = (alDeleteSources_fcn)::alDeleteSources;
    g_alGenBuffers = (alGenBuffers_fcn)::alGenBuffers;
    g_alGetError = (alGetError_fcn)::alGetError;
    g_alGetListenerf = (alGetListenerf_fcn)::alGetListenerf;
    g_alGetListenerfv = (alGetListenerfv_fcn)::alGetListenerfv;
    g_alGetSourcef = (alGetSourcef_fcn)::alGetSourcef;
    g_alGetSourcefv = (alGetSourcefv_fcn)::alGetSourcefv;
    g_alGetSourcei = (alGetSourcei_fcn)::alGetSourcei;
    g_alGenSources = (alGenSources_fcn)::alGenSources;
    g_alListenerf = (alListenerf_fcn)::alListenerf;
    g_alListenerfv = (alListenerfv_fcn)::alListenerfv;
    g_alSourcef = (alSourcef_fcn)::alSourcef;
    g_alSourcefv = (alSourcefv_fcn)::alSourcefv;
    g_alSourcei = (alSourcei_fcn)::alSourcei;
    g_alSourcePause = (alSourcePause_fcn)::alSourcePause;
    g_alSourcePlay = (alSourcePlay_fcn)::alSourcePlay;
    g_alSourceStop = (alSourceStop_fcn)::alSourceStop;

    g_ov_clear = (ov_clear_fcn)::ov_clear;
    g_ov_info = (ov_info_fcn)::ov_info;
    g_ov_fopen = (ov_fopen_fcn)::ov_fopen;
    g_ov_pcm_total = (ov_pcm_total_fcn)::ov_pcm_total;
    g_ov_read = (ov_read_fcn)::ov_read;
#endif

    m_device = alcOpenDevice()(0);
    if(!m_device) {
      zero_handles();
      FreeLibrary(m_libvorbisfile);
      FreeLibrary(m_openal32);

      throw Sound_Init_Failure();
    }

    m_context = alcCreateContext()(m_device, 0);
    if(!m_context) {
      alcCloseDevice()(m_device);

      zero_handles();
      FreeLibrary(m_libvorbisfile);
      FreeLibrary(m_openal32);

      throw Sound_Init_Failure();
    }

    if(!alcMakeContextCurrent()(m_context)) {
      alcDestroyContext()(m_context);
      alcCloseDevice()(m_device);

      zero_handles();
      FreeLibrary(m_libvorbisfile);
      FreeLibrary(m_openal32);

      throw Sound_Init_Failure();
    }

    // Check for Vorbis extension functionality; seems to always fail :(
    alIsExtensionPresent()("AL_EXT_vorbis");
    //cerr << "Valid Audio Formats: " << alutGetMIMETypes(ALUT_LOADER_BUFFER) << std::endl;

    ALfloat listener_position[] = {0.0f, 0.0f, 0.0f};
    ALfloat listener_velocity[] = {0.0f, 0.0f, 0.0f};
    ALfloat listener_forward_and_up[] = {1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f};

    alListenerfv()(AL_POSITION, listener_position);
    alListenerfv()(AL_VELOCITY, listener_velocity);
    alListenerfv()(AL_ORIENTATION, listener_forward_and_up);
  }
Exemple #4
0
  Video_DX9::Video_DX9()
    : m_d3d_capabilities(0),
    m_d3d_parameters(0),
    m_d3d(0),
    m_d3d_device(0),
    m_matrix_stack(0),
    m_textured(false),
    m_fvf_3d(false),
    m_render_target(0),
    m_render_to_surface(0),
    m_back_buffer(0)
  {
    m_d3d9 = LoadLibrary("d3d9.dll");
    if(!m_d3d9) {
      std::cerr << "Loading d3d9.dll failed." << std::endl;

      throw Video_Init_Failure();
    }
    
    g_Direct3DCreate9 = (Direct3DCreate9_fcn)GetProcAddress(m_d3d9, "Direct3DCreate9");
    if(!g_Direct3DCreate9) {
      std::cerr << "Loading d3d9.dll failed." << std::endl;

      FreeLibrary(m_d3d9);

      zero_handles();

      throw Video_Init_Failure();
    }

    m_d3dx9 = LoadLibrary("D3DX9_43.dll");
    if(!m_d3dx9) m_d3dx9 = LoadLibrary("D3DX9_42.dll");
    if(!m_d3dx9) m_d3dx9 = LoadLibrary("D3DX9_41.dll");
    if(!m_d3dx9) m_d3dx9 = LoadLibrary("D3DX9_40.dll");
    if(!m_d3dx9) m_d3dx9 = LoadLibrary("D3DX9_39.dll");
    if(!m_d3dx9) m_d3dx9 = LoadLibrary("D3DX9_38.dll");
    if(!m_d3dx9) m_d3dx9 = LoadLibrary("D3DX9_37.dll");
    if(!m_d3dx9) m_d3dx9 = LoadLibrary("d3dx9_36.dll");
    if(!m_d3dx9) m_d3dx9 = LoadLibrary("d3dx9_35.dll");
    if(!m_d3dx9) m_d3dx9 = LoadLibrary("d3dx9_34.dll");
    if(!m_d3dx9) m_d3dx9 = LoadLibrary("d3dx9_33.dll");
    if(!m_d3dx9) m_d3dx9 = LoadLibrary("d3dx9_32.dll");
    if(!m_d3dx9) m_d3dx9 = LoadLibrary("d3dx9_31.dll");
    if(!m_d3dx9) m_d3dx9 = LoadLibrary("d3dx9_30.dll");
    if(!m_d3dx9) m_d3dx9 = LoadLibrary("d3dx9_29.dll");
    if(!m_d3dx9) m_d3dx9 = LoadLibrary("d3dx9_28.dll");
    if(!m_d3dx9) m_d3dx9 = LoadLibrary("d3dx9_27.dll");
    if(!m_d3dx9) m_d3dx9 = LoadLibrary("d3dx9_26.dll");
    if(!m_d3dx9) m_d3dx9 = LoadLibrary("d3dx9_25.dll");
    if(!m_d3dx9) m_d3dx9 = LoadLibrary("d3dx9_24.dll");
    if(!m_d3dx9) {
      std::cerr << "Loading d3dx9.dll failed." << std::endl;

      FreeLibrary(m_d3d9);

      zero_handles();

      throw Video_Init_Failure();
    }

    g_D3DXCreateRenderToSurface = (D3DXCreateRenderToSurface_fcn)GetProcAddress(m_d3dx9, "D3DXCreateRenderToSurface");
    g_D3DXCreateTexture = (D3DXCreateTexture_fcn)GetProcAddress(m_d3dx9, "D3DXCreateTexture");
    g_D3DXFilterTexture = (D3DXFilterTexture_fcn)GetProcAddress(m_d3dx9, "D3DXFilterTexture");
    g_D3DXCreateMatrixStack = (D3DXCreateMatrixStack_fcn)GetProcAddress(m_d3dx9, "D3DXCreateMatrixStack");
    if(!g_D3DXCreateRenderToSurface || !g_D3DXCreateTexture ||
       !g_D3DXFilterTexture || !g_D3DXCreateMatrixStack)
    {
      std::cerr << "Loading d3dx9.dll failed." << std::endl;

      FreeLibrary(m_d3dx9);
      FreeLibrary(m_d3d9);

      zero_handles();

      throw Video_Init_Failure();
    }

    m_d3d = Direct3DCreate9()(D3D_SDK_VERSION);
    if(!m_d3d) {
      FreeLibrary(m_d3dx9);
      FreeLibrary(m_d3d9);

      zero_handles();

      throw Video_Init_Failure();
    }

    try {
      init();
    }
    catch(...) {
      delete m_d3d_parameters;
      delete m_d3d_capabilities;

      FreeLibrary(m_d3dx9);
      FreeLibrary(m_d3d9);

      zero_handles();

      throw Video_Init_Failure();
    }
  }