Sound_Renderer_AL::~Sound_Renderer_AL() { alcDestroyContext()(m_context); alcCloseDevice()(m_device); #ifndef _MACOSX FreeLibrary(m_openal32); #endif zero_handles(); }
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); }
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(); } }