From: James Turner Date: Fri, 7 Dec 2012 20:26:24 +0000 (-0500) Subject: Work on making OpenAL a compile-time option. X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=24d2431522f424cc8db6cce7d6bddd69469c5b83;p=simgear.git Work on making OpenAL a compile-time option. ENABLE_SOUND=0 now works when configuring SimGear, and libSimGearScene can be linked without OpenAL. However, more testing of FlightGear in this mode is needed before it's officially supported! --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 2cea7e40..4ab61911 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -177,6 +177,7 @@ else() if (ENABLE_SOUND) find_package(OpenAL REQUIRED) + message(STATUS "Sound support: ENABLED") endif(ENABLE_SOUND) find_package(OpenSceneGraph 3.0.0 REQUIRED osgText osgSim osgDB osgParticle osgGA osgUtil) diff --git a/simgear/sound/CMakeLists.txt b/simgear/sound/CMakeLists.txt index cc1b45cc..cbedeed6 100644 --- a/simgear/sound/CMakeLists.txt +++ b/simgear/sound/CMakeLists.txt @@ -21,7 +21,7 @@ set(SOURCES simgear_scene_component(sound sound "${SOURCES}" "${HEADERS}") -if(ENABLE_TESTS) +if(ENABLE_TESTS AND ENABLE_SOUND) if (SIMGEAR_SHARED) set(SOUND_TEST_LIBS SimGearScene) @@ -45,4 +45,4 @@ create_test(openal_test1) create_test(openal_test2) create_test(openal_test3) create_test(openal_test4) -endif(ENABLE_TESTS) +endif() diff --git a/simgear/sound/readwav.cxx b/simgear/sound/readwav.cxx index 3afd61b3..d23ed8cf 100644 --- a/simgear/sound/readwav.cxx +++ b/simgear/sound/readwav.cxx @@ -284,13 +284,14 @@ ALvoid* loadWAVFromFile(const SGPath& path, ALenum& format, ALsizei& size, ALflo ALuint createBufferFromFile(const SGPath& path) { + ALuint buffer = -1; +#ifdef ENABLE_SOUND ALenum format; ALsizei size; ALfloat sampleFrequency; ALvoid* data = loadWAVFromFile(path, format, size, sampleFrequency); assert(data); - ALuint buffer; alGenBuffers(1, &buffer); if (alGetError() != AL_NO_ERROR) { free(data); @@ -303,7 +304,7 @@ ALuint createBufferFromFile(const SGPath& path) free(data); throw sg_io_exception("OpenAL setting buffer data failed", sg_location(path.str())); } - +#endif return buffer; } diff --git a/simgear/sound/soundmgr_openal.cxx b/simgear/sound/soundmgr_openal.cxx index 3446727d..1a16eed7 100644 --- a/simgear/sound/soundmgr_openal.cxx +++ b/simgear/sound/soundmgr_openal.cxx @@ -148,8 +148,9 @@ SGSoundMgr::~SGSoundMgr() { } // initialize the sound manager -void SGSoundMgr::init() { - +void SGSoundMgr::init() +{ +#ifdef ENABLE_SOUND if (is_working()) { SG_LOG( SG_SOUND, SG_ALERT, "Oops, OpenAL sound manager is already initialized." ); @@ -247,10 +248,12 @@ void SGSoundMgr::init() { if (d->_free_sources.empty()) { SG_LOG(SG_SOUND, SG_ALERT, "Unable to grab any OpenAL sources!"); } +#endif } void SGSoundMgr::reinit() { +#ifndef ENABLE_SOUND bool was_active = _active; if (was_active) @@ -263,9 +266,12 @@ void SGSoundMgr::reinit() if (was_active) resume(); +#endif } -void SGSoundMgr::activate() { +void SGSoundMgr::activate() +{ +#ifdef ENABLE_SOUND if ( is_working() ) { _active = true; @@ -276,11 +282,13 @@ void SGSoundMgr::activate() { sgrp->activate(); } } +#endif } // stop the sound manager -void SGSoundMgr::stop() { - +void SGSoundMgr::stop() +{ +#ifdef ENABLE_SOUND // first stop all sample groups sample_group_map_iterator sample_grp_current = d->_sample_groups.begin(); sample_group_map_iterator sample_grp_end = d->_sample_groups.end(); @@ -319,9 +327,12 @@ void SGSoundMgr::stop() { _renderer = "unknown"; _vendor = "unknown"; } +#endif } -void SGSoundMgr::suspend() { +void SGSoundMgr::suspend() +{ +#ifdef ENABLE_SOUND if (is_working()) { sample_group_map_iterator sample_grp_current = d->_sample_groups.begin(); sample_group_map_iterator sample_grp_end = d->_sample_groups.end(); @@ -331,9 +342,12 @@ void SGSoundMgr::suspend() { } _active = false; } +#endif } -void SGSoundMgr::resume() { +void SGSoundMgr::resume() +{ +#ifdef ENABLE_SOUND if (is_working()) { sample_group_map_iterator sample_grp_current = d->_sample_groups.begin(); sample_group_map_iterator sample_grp_end = d->_sample_groups.end(); @@ -343,10 +357,13 @@ void SGSoundMgr::resume() { } _active = true; } +#endif } // run the audio scheduler -void SGSoundMgr::update( double dt ) { +void SGSoundMgr::update( double dt ) +{ +#ifdef ENABLE_SOUND if (_active) { alcSuspendContext(d->_context); @@ -389,6 +406,7 @@ if (isNaN(_velocity.data())) printf("NaN in listener velocity\n"); alcProcessContext(d->_context); } +#endif } // add a sample group, return true if successful @@ -486,6 +504,7 @@ void SGSoundMgr::release_source( unsigned int source ) it = std::find(d->_sources_in_use.begin(), d->_sources_in_use.end(), source); if ( it != d->_sources_in_use.end() ) { + #ifdef ENABLE_SOUND ALint result; alGetSourcei( source, AL_SOURCE_STATE, &result ); @@ -495,6 +514,7 @@ void SGSoundMgr::release_source( unsigned int source ) alSourcei( source, AL_BUFFER, 0 ); // detach the associated buffer testForALError("release_source"); + #endif d->_free_sources.push_back( source ); d->_sources_in_use.erase( it ); } @@ -503,7 +523,7 @@ void SGSoundMgr::release_source( unsigned int source ) unsigned int SGSoundMgr::request_buffer(SGSoundSample *sample) { ALuint buffer = NO_BUFFER; - +#ifdef ENABLE_SOUND if ( !sample->is_valid_buffer() ) { // sample was not yet loaded or removed again string sample_name = sample->get_sample_name(); @@ -562,7 +582,7 @@ unsigned int SGSoundMgr::request_buffer(SGSoundSample *sample) else { buffer = sample->get_buffer(); } - +#endif return buffer; } @@ -580,8 +600,10 @@ void SGSoundMgr::release_buffer(SGSoundSample *sample) sample->no_valid_buffer(); buffer_it->second.refctr--; if (buffer_it->second.refctr == 0) { +#ifdef ENABLE_SOUND ALuint buffer = buffer_it->second.id; alDeleteBuffers(1, &buffer); +#endif d->_buffers.erase( buffer_it ); testForALError("release buffer"); } @@ -623,6 +645,7 @@ bool SGSoundMgr::load(const string &samplepath, void **dbuf, int *fmt, vector SGSoundMgr::get_available_devices() { vector devices; +#ifdef ENABLE_SOUND const ALCchar *s; if (alcIsExtensionPresent(NULL, "ALC_enumerate_all_EXT") == AL_TRUE) { @@ -642,7 +665,7 @@ vector SGSoundMgr::get_available_devices() } devices.push_back(ptr); } - +#endif return devices; } @@ -659,17 +682,20 @@ bool SGSoundMgr::testForError(void *p, string s) bool SGSoundMgr::testForALError(string s) { +#ifdef ENABLE_SOUND ALenum error = alGetError(); if (error != AL_NO_ERROR) { SG_LOG( SG_SOUND, SG_ALERT, "AL Error (sound manager): " << alGetString(error) << " at " << s); return true; } +#endif return false; } bool SGSoundMgr::testForALCError(string s) { +#ifdef ENABLE_SOUND ALCenum error; error = alcGetError(d->_device); if (error != ALC_NO_ERROR) { @@ -678,6 +704,7 @@ bool SGSoundMgr::testForALCError(string s) << s); return true; } +#endif return false; }