diff --git a/panda/src/audio/audioManager.cxx b/panda/src/audio/audioManager.cxx index d40fb62018..8fa5a259a9 100644 --- a/panda/src/audio/audioManager.cxx +++ b/panda/src/audio/audioManager.cxx @@ -31,17 +31,17 @@ TypeHandle AudioManager::_type_handle; namespace { - PT(AudioManager) create_NullAudioManger() { - audio_debug("create_NullAudioManger()"); + AudioManager *create_NullAudioManager() { + audio_debug("create_NullAudioManager()"); return new NullAudioManager(); } } Create_AudioManager_proc* AudioManager::_create_AudioManager - =create_NullAudioManger; + =create_NullAudioManager; void AudioManager::register_AudioManager_creator(Create_AudioManager_proc* proc) { - nassertv(_create_AudioManager==create_NullAudioManger); + nassertv(_create_AudioManager==create_NullAudioManager); _create_AudioManager=proc; } @@ -50,37 +50,46 @@ void AudioManager::register_AudioManager_creator(Create_AudioManager_proc* proc) // Factory method for getting a platform specific AudioManager: PT(AudioManager) AudioManager::create_AudioManager() { audio_debug("create_AudioManager()\n audio_library_name=\""<is_valid()) { - am = create_NullAudioManger(); + if (!am->is_exact_type(NullAudioManager::get_class_type()) && !am->is_valid()) { + audio_error(" " << am->get_type() << " is not valid, will use NullAudioManager"); + am = create_NullAudioManager(); } return am; } diff --git a/panda/src/audio/audioManager.h b/panda/src/audio/audioManager.h index adc80ffea3..6a03a95bdb 100644 --- a/panda/src/audio/audioManager.h +++ b/panda/src/audio/audioManager.h @@ -21,7 +21,7 @@ #include "filterProperties.h" #include "movieAudio.h" -typedef PT(AudioManager) Create_AudioManager_proc(); +typedef AudioManager *Create_AudioManager_proc(); class EXPCL_PANDA_AUDIO AudioManager : public TypedReferenceCount { diff --git a/panda/src/audiotraits/config_fmodAudio.cxx b/panda/src/audiotraits/config_fmodAudio.cxx index 7f93b7c91f..5262edc76f 100644 --- a/panda/src/audiotraits/config_fmodAudio.cxx +++ b/panda/src/audiotraits/config_fmodAudio.cxx @@ -15,8 +15,8 @@ #include "pandabase.h" #ifdef HAVE_FMODEX //[ - #include "config_fmodAudio.h" +#include "audioManager.h" #include "fmodAudioManager.h" #include "fmodAudioSound.h" #include "pandaSystem.h" @@ -39,15 +39,13 @@ ConfigureFn(config_fmodAudio) { //////////////////////////////////////////////////////////////////// void init_libFmodAudio() { + cerr << "init_libFmodAudio\n"; static bool initialized = false; if (initialized) { return; } initialized = true; - - AudioManager::register_AudioManager_creator(Create_AudioManager); - FmodAudioManager::init_type(); FmodAudioSound::init_type(); @@ -57,4 +55,16 @@ init_libFmodAudio() { ps->set_system_tag("audio", "implementation", "FMOD"); } +//////////////////////////////////////////////////////////////////// +// Function: get_audio_manager_func_fmod_audio +// Description: This function is called when the dynamic library is +// loaded; it should return the Create_AudioManager +// function appropriate to create a FmodAudioManager. +/////////////////////////////////////////////////////////////////// +Create_AudioManager_proc * +get_audio_manager_func_fmod_audio() { + init_libFmodAudio(); + return &Create_FmodAudioManager; +} + #endif //] diff --git a/panda/src/audiotraits/config_fmodAudio.h b/panda/src/audiotraits/config_fmodAudio.h index 30af2c54a2..94d2ef874a 100644 --- a/panda/src/audiotraits/config_fmodAudio.h +++ b/panda/src/audiotraits/config_fmodAudio.h @@ -20,11 +20,13 @@ #ifdef HAVE_FMODEX //[ #include "notifyCategoryProxy.h" #include "dconfig.h" +#include "audioManager.h" ConfigureDecl(config_fmodAudio, EXPCL_FMOD_AUDIO, EXPTP_FMOD_AUDIO); NotifyCategoryDecl(fmodAudio, EXPCL_FMOD_AUDIO, EXPTP_FMOD_AUDIO); extern EXPCL_FMOD_AUDIO void init_libFmodAudio(); +extern "C" EXPCL_FMOD_AUDIO Create_AudioManager_proc *get_audio_manager_func_fmod_audio(); #endif //] diff --git a/panda/src/audiotraits/config_milesAudio.cxx b/panda/src/audiotraits/config_milesAudio.cxx index 5bd06f0f1f..4a0795599f 100644 --- a/panda/src/audiotraits/config_milesAudio.cxx +++ b/panda/src/audiotraits/config_milesAudio.cxx @@ -77,9 +77,6 @@ init_libMilesAudio() { return; } initialized = true; - - AudioManager::register_AudioManager_creator(Create_AudioManager); - MilesAudioManager::init_type(); MilesAudioSound::init_type(); MilesAudioSample::init_type(); @@ -92,4 +89,16 @@ init_libMilesAudio() { ps->set_system_tag("audio", "implementation", "Miles"); } +//////////////////////////////////////////////////////////////////// +// Function: get_audio_manager_func_miles_audio +// Description: This function is called when the dynamic library is +// loaded; it should return the Create_AudioManager +// function appropriate to create a MilesAudioManager. +/////////////////////////////////////////////////////////////////// +Create_AudioManager_proc * +get_audio_manager_func_miles_audio() { + init_libMilesAudio(); + return &Create_MilesAudioManager; +} + #endif //] diff --git a/panda/src/audiotraits/config_milesAudio.h b/panda/src/audiotraits/config_milesAudio.h index 4a0dbbf571..5a2ec1cd36 100644 --- a/panda/src/audiotraits/config_milesAudio.h +++ b/panda/src/audiotraits/config_milesAudio.h @@ -22,6 +22,7 @@ #include "configVariableBool.h" #include "configVariableInt.h" #include "dconfig.h" +#include "audioManager.h" ConfigureDecl(config_milesAudio, EXPCL_MILES_AUDIO, EXPTP_MILES_AUDIO); NotifyCategoryDecl(milesAudio, EXPCL_MILES_AUDIO, EXPTP_MILES_AUDIO); @@ -32,7 +33,7 @@ extern ConfigVariableInt miles_audio_preload_threshold; extern ConfigVariableBool miles_audio_panda_threads; extern EXPCL_MILES_AUDIO void init_libMilesAudio(); - +extern "C" EXPCL_MILES_AUDIO Create_AudioManager_proc *get_audio_manager_func_miles_audio(); #endif //] #endif // CONFIG_MILESAUDIO_H diff --git a/panda/src/audiotraits/config_openalAudio.cxx b/panda/src/audiotraits/config_openalAudio.cxx index fa9aa43eef..7aade3721b 100644 --- a/panda/src/audiotraits/config_openalAudio.cxx +++ b/panda/src/audiotraits/config_openalAudio.cxx @@ -45,9 +45,6 @@ init_libOpenALAudio() { } initialized = true; - - AudioManager::register_AudioManager_creator(Create_AudioManager); - OpenALAudioManager::init_type(); OpenALAudioSound::init_type(); @@ -57,4 +54,16 @@ init_libOpenALAudio() { ps->set_system_tag("audio", "implementation", "OpenAL"); } +//////////////////////////////////////////////////////////////////// +// Function: get_audio_manager_func_openal_audio +// Description: This function is called when the dynamic library is +// loaded; it should return the Create_AudioManager +// function appropriate to create an OpenALAudioManager. +/////////////////////////////////////////////////////////////////// +Create_AudioManager_proc * +get_audio_manager_func_openal_audio() { + init_libOpenALAudio(); + return &Create_OpenALAudioManager; +} + #endif //] diff --git a/panda/src/audiotraits/config_openalAudio.h b/panda/src/audiotraits/config_openalAudio.h index c5ffce5c5c..3f556d7acd 100644 --- a/panda/src/audiotraits/config_openalAudio.h +++ b/panda/src/audiotraits/config_openalAudio.h @@ -20,11 +20,13 @@ #ifdef HAVE_OPENAL //[ #include "notifyCategoryProxy.h" #include "dconfig.h" +#include "audioManager.h" ConfigureDecl(config_openalAudio, EXPCL_OPENAL_AUDIO, EXPTP_OPENAL_AUDIO); NotifyCategoryDecl(openalAudio, EXPCL_OPENAL_AUDIO, EXPTP_OPENAL_AUDIO); extern EXPCL_OPENAL_AUDIO void init_libOpenALAudio(); +extern "C" EXPCL_OPENAL_AUDIO Create_AudioManager_proc *get_audio_manager_func_openal_audio(); #endif //] diff --git a/panda/src/audiotraits/fmodAudioManager.cxx b/panda/src/audiotraits/fmodAudioManager.cxx index 95afae4203..4d9fd85848 100644 --- a/panda/src/audiotraits/fmodAudioManager.cxx +++ b/panda/src/audiotraits/fmodAudioManager.cxx @@ -67,11 +67,12 @@ void fmod_audio_errcheck(const char *context, FMOD_RESULT result) { } //////////////////////////////////////////////////////////////////// -// Function: Create_AudioManager +// Function: Create_FmodAudioManager // Access: Private // Description: Factory Function //////////////////////////////////////////////////////////////////// -PT(AudioManager) Create_AudioManager() { +AudioManager *Create_FmodAudioManager() { + audio_debug("Create_FmodAudioManager()"); return new FmodAudioManager; } diff --git a/panda/src/audiotraits/fmodAudioManager.h b/panda/src/audiotraits/fmodAudioManager.h index fa12a579cd..98539b4d97 100644 --- a/panda/src/audiotraits/fmodAudioManager.h +++ b/panda/src/audiotraits/fmodAudioManager.h @@ -238,7 +238,7 @@ private: }; -EXPCL_FMOD_AUDIO PT(AudioManager) Create_AudioManager(); +EXPCL_FMOD_AUDIO AudioManager *Create_FmodAudioManager(); #endif //] diff --git a/panda/src/audiotraits/milesAudioManager.cxx b/panda/src/audiotraits/milesAudioManager.cxx index 10878f1519..23fdff57b6 100644 --- a/panda/src/audiotraits/milesAudioManager.cxx +++ b/panda/src/audiotraits/milesAudioManager.cxx @@ -35,8 +35,8 @@ TypeHandle MilesAudioManager::_type_handle; -PT(AudioManager) Create_AudioManager() { - audio_debug("Create_AudioManager() Miles."); +AudioManager *Create_MilesAudioManager() { + audio_debug("Create_MilesAudioManager()"); return new MilesAudioManager(); } diff --git a/panda/src/audiotraits/milesAudioManager.h b/panda/src/audiotraits/milesAudioManager.h index e976796f29..7a557d6e4d 100644 --- a/panda/src/audiotraits/milesAudioManager.h +++ b/panda/src/audiotraits/milesAudioManager.h @@ -176,7 +176,7 @@ private: friend class MilesAudioStream; }; -EXPCL_MILES_AUDIO PT(AudioManager) Create_AudioManager(); +EXPCL_MILES_AUDIO AudioManager *Create_MilesAudioManager(); #endif //] diff --git a/panda/src/audiotraits/openalAudioManager.cxx b/panda/src/audiotraits/openalAudioManager.cxx index 4a58ae5b6a..c45bf74077 100644 --- a/panda/src/audiotraits/openalAudioManager.cxx +++ b/panda/src/audiotraits/openalAudioManager.cxx @@ -61,11 +61,12 @@ void alc_audio_errcheck(const char *context,ALCdevice* device) { } //////////////////////////////////////////////////////////////////// -// Function: Create_AudioManager +// Function: Create_OpenALAudioManager // Access: Private // Description: Factory Function //////////////////////////////////////////////////////////////////// -PT(AudioManager) Create_AudioManager() { +AudioManager *Create_OpenALAudioManager() { + audio_debug("Create_OpenALAudioManager()"); return new OpenALAudioManager; } diff --git a/panda/src/audiotraits/openalAudioManager.h b/panda/src/audiotraits/openalAudioManager.h index a0d343c5a9..25d45d532a 100644 --- a/panda/src/audiotraits/openalAudioManager.h +++ b/panda/src/audiotraits/openalAudioManager.h @@ -242,7 +242,7 @@ private: }; -EXPCL_OPENAL_AUDIO PT(AudioManager) Create_AudioManager(); +EXPCL_OPENAL_AUDIO AudioManager *Create_AudioManager(); #endif //]