Browse Source

need to vector model_path etc. through function after all, to avoid static-init problems

David Rose 17 years ago
parent
commit
8639f98ae9

+ 1 - 1
panda/src/audio/audioManager.cxx

@@ -58,7 +58,7 @@ PT(AudioManager) AudioManager::create_AudioManager() {
           "lib"+string(audio_library_name)+".so");
           "lib"+string(audio_library_name)+".so");
       dl_name.to_os_specific();
       dl_name.to_os_specific();
       audio_debug("  dl_name=\""<<dl_name<<"\"");
       audio_debug("  dl_name=\""<<dl_name<<"\"");
-      void* lib = load_dso(plugin_path.get_value(), dl_name);
+      void* lib = load_dso(get_plugin_path().get_value(), dl_name);
       if (!lib) {
       if (!lib) {
         audio_error("  LoadLibrary() failed, will use NullAudioManager");
         audio_error("  LoadLibrary() failed, will use NullAudioManager");
         audio_error("    "<<load_dso_error());
         audio_error("    "<<load_dso_error());

+ 1 - 1
panda/src/display/graphicsPipeSelection.cxx

@@ -403,7 +403,7 @@ load_named_module(const string &name) {
   Filename dlname = Filename::dso_filename("lib" + name + ".so");
   Filename dlname = Filename::dso_filename("lib" + name + ".so");
   display_cat.info()
   display_cat.info()
     << "loading display module: " << dlname.to_os_specific() << endl;
     << "loading display module: " << dlname.to_os_specific() << endl;
-  void *tmp = load_dso(plugin_path.get_value(), dlname);
+  void *tmp = load_dso(get_plugin_path().get_value(), dlname);
   if (tmp == (void *)NULL) {
   if (tmp == (void *)NULL) {
     display_cat.info()
     display_cat.info()
       << "Unable to load: " << load_dso_error() << endl;
       << "Unable to load: " << load_dso_error() << endl;

+ 3 - 3
panda/src/gobj/texturePool.cxx

@@ -946,8 +946,8 @@ report_texture_unreadable(const Filename &filename) const {
       // search path.
       // search path.
       gobj_cat.error()
       gobj_cat.error()
         << "Unable to find texture \"" << filename << "\""
         << "Unable to find texture \"" << filename << "\""
-        << " on texture_path " << texture_path
-        << " or model_path " << model_path <<"\n";
+        << " on texture_path " << get_texture_path()
+        << " or model_path " << get_model_path() <<"\n";
     } else {
     } else {
       // A fully-specified filename is not searched along the path, so
       // A fully-specified filename is not searched along the path, so
       // don't mislead the user with the error message.
       // don't mislead the user with the error message.
@@ -1046,7 +1046,7 @@ load_filters() {
     Filename dlname = Filename::dso_filename("lib" + name + ".so");
     Filename dlname = Filename::dso_filename("lib" + name + ".so");
     gobj_cat->info()
     gobj_cat->info()
       << "loading texture filter: " << dlname.to_os_specific() << endl;
       << "loading texture filter: " << dlname.to_os_specific() << endl;
-    void *tmp = load_dso(plugin_path.get_value(), dlname);
+    void *tmp = load_dso(get_plugin_path().get_value(), dlname);
     if (tmp == (void *)NULL) {
     if (tmp == (void *)NULL) {
       gobj_cat.info()
       gobj_cat.info()
         << "Unable to load: " << load_dso_error() << endl;
         << "Unable to load: " << load_dso_error() << endl;

+ 2 - 1
panda/src/pgraph/loader.cxx

@@ -199,6 +199,7 @@ load_file(const Filename &filename, const LoaderOptions &options) const {
 
 
   if (search) {
   if (search) {
     // Look for the file along the model path.
     // Look for the file along the model path.
+    const ConfigVariableSearchPath &model_path = get_model_path();
     int num_dirs = model_path.get_num_directories();
     int num_dirs = model_path.get_num_directories();
     for (int i = 0; i < num_dirs; ++i) {
     for (int i = 0; i < num_dirs; ++i) {
       Filename pathname(model_path.get_directory(i), this_filename);
       Filename pathname(model_path.get_directory(i), this_filename);
@@ -348,7 +349,7 @@ load_file_types() {
         Filename dlname = Filename::dso_filename("lib" + name + ".so");
         Filename dlname = Filename::dso_filename("lib" + name + ".so");
         loader_cat.info()
         loader_cat.info()
           << "loading file type module: " << name << endl;
           << "loading file type module: " << name << endl;
-        void *tmp = load_dso(plugin_path.get_value(), dlname);
+        void *tmp = load_dso(get_plugin_path().get_value(), dlname);
         if (tmp == (void *)NULL) {
         if (tmp == (void *)NULL) {
           loader_cat.warning()
           loader_cat.warning()
             << "Unable to load " << dlname.to_os_specific()
             << "Unable to load " << dlname.to_os_specific()

+ 1 - 1
panda/src/pgraph/loaderFileTypeRegistry.cxx

@@ -170,7 +170,7 @@ get_type_from_extension(const string &extension) {
 
 
       loader_cat->info()
       loader_cat->info()
         << "loading file type module: " << name << endl;
         << "loading file type module: " << name << endl;
-      void *tmp = load_dso(plugin_path.get_value(), dlname);
+      void *tmp = load_dso(get_plugin_path().get_value(), dlname);
       if (tmp == (void *)NULL) {
       if (tmp == (void *)NULL) {
         loader_cat->warning()
         loader_cat->warning()
           << "Unable to load " << dlname.to_os_specific() << ": " 
           << "Unable to load " << dlname.to_os_specific() << ": " 

+ 36 - 26
panda/src/putil/config_util.cxx

@@ -61,25 +61,6 @@ ConfigVariableEnum<BamTextureMode> bam_texture_mode
  PRC_DESC("Set this to specify how textures should be written into Bam files."
  PRC_DESC("Set this to specify how textures should be written into Bam files."
           "See the panda source or documentation for available options."));
           "See the panda source or documentation for available options."));
 
 
-ConfigVariableSearchPath model_path
-("model-path", 
- PRC_DESC("The default directories to search for all models and general "
-          "files loaded into Panda."));
-
-ConfigVariableSearchPath texture_path
-("texture-path", 
- PRC_DESC("A special directory path to search for textures only.  "
-          "Textures are also searched for along the model-path, so the "
-          "use of texture-path is only useful if you have special "
-          "directories that only contain textures."));
-
-ConfigVariableSearchPath sound_path
-("sound-path", 
- PRC_DESC("The directories to search for sound and music files to be loaded."));
-ConfigVariableSearchPath plugin_path
-("plugin-path", "<auto>",
- PRC_DESC("The directories to search for plugin shared libraries."));
-
 
 
 
 
 ConfigureFn(config_util) {
 ConfigureFn(config_util) {
@@ -96,27 +77,56 @@ ConfigureFn(config_util) {
 //
 //
 // ConfigVariableBool track_memory_usage("track-memory-usage", false);
 // ConfigVariableBool track_memory_usage("track-memory-usage", false);
 
 
-// There is no longer any need for C++ code to call these functions to
-// access the various path variables; instead, new C++ code should
-// just access the path variables directly.
 ConfigVariableSearchPath &
 ConfigVariableSearchPath &
 get_model_path() {
 get_model_path() {
-  return model_path;
+  static ConfigVariableSearchPath *model_path = NULL;
+  if (model_path == NULL) {
+    model_path = new ConfigVariableSearchPath
+      ("model-path", 
+       PRC_DESC("The default directories to search for all models and general "
+                "files loaded into Panda."));
+  }
+
+  return *model_path;
 }
 }
 
 
 ConfigVariableSearchPath &
 ConfigVariableSearchPath &
 get_texture_path() {
 get_texture_path() {
-  return texture_path;
+  static ConfigVariableSearchPath *texture_path = NULL;
+  if (texture_path == NULL) {
+    texture_path = new ConfigVariableSearchPath
+      ("texture-path", 
+       PRC_DESC("A special directory path to search for textures only.  "
+                "Textures are also searched for along the model-path, so the "
+                "use of texture-path is only useful if you have special "
+                "directories that only contain textures."));
+  }
+
+  return *texture_path;
 }
 }
 
 
 ConfigVariableSearchPath &
 ConfigVariableSearchPath &
 get_sound_path() {
 get_sound_path() {
-  return sound_path;
+  static ConfigVariableSearchPath *sound_path = NULL;
+  if (sound_path == NULL) {
+    sound_path = new ConfigVariableSearchPath
+      ("sound-path", 
+       PRC_DESC("The directories to search for sound and music files to be loaded."));
+  }
+
+  return *sound_path;
 }
 }
 
 
 ConfigVariableSearchPath &
 ConfigVariableSearchPath &
 get_plugin_path() {
 get_plugin_path() {
-  return plugin_path;
+  static ConfigVariableSearchPath *plugin_path = NULL;
+  if (plugin_path == NULL) {
+    plugin_path = new ConfigVariableSearchPath
+      ("plugin-path", "<auto>",
+       PRC_DESC("The directories to search for plugin shared libraries."));
+  }
+
+  return *plugin_path;
 }
 }
 
 
 ConfigVariableDouble sleep_precision
 ConfigVariableDouble sleep_precision

+ 0 - 7
panda/src/putil/config_util.h

@@ -39,13 +39,6 @@ NotifyCategoryDecl(bam, EXPCL_PANDA_PUTIL, EXPTP_PANDA_PUTIL);
 extern EXPCL_PANDA_PUTIL ConfigVariableEnum<BamEndian> bam_endian;
 extern EXPCL_PANDA_PUTIL ConfigVariableEnum<BamEndian> bam_endian;
 extern EXPCL_PANDA_PUTIL ConfigVariableEnum<BamTextureMode> bam_texture_mode;
 extern EXPCL_PANDA_PUTIL ConfigVariableEnum<BamTextureMode> bam_texture_mode;
 
 
-extern EXPCL_PANDA_PUTIL ConfigVariableSearchPath model_path;
-extern EXPCL_PANDA_PUTIL ConfigVariableSearchPath texture_path;
-extern EXPCL_PANDA_PUTIL ConfigVariableSearchPath sound_path;
-extern EXPCL_PANDA_PUTIL ConfigVariableSearchPath plugin_path;
-
-// The above variables are also shadowed by these functions, so that
-// they can easily be accessed in the interpreter (e.g. Python).
 BEGIN_PUBLISH
 BEGIN_PUBLISH
 EXPCL_PANDA_PUTIL ConfigVariableSearchPath &get_model_path();
 EXPCL_PANDA_PUTIL ConfigVariableSearchPath &get_model_path();
 EXPCL_PANDA_PUTIL ConfigVariableSearchPath &get_texture_path();
 EXPCL_PANDA_PUTIL ConfigVariableSearchPath &get_texture_path();

+ 2 - 2
panda/src/windisplay/winGraphicsWindow.cxx

@@ -2279,7 +2279,7 @@ get_icon(const Filename &filename) {
   // filename, we can't load a virtual file and we can't use the
   // filename, we can't load a virtual file and we can't use the
   // virtual file system.
   // virtual file system.
   Filename resolved = filename;
   Filename resolved = filename;
-  if (!resolved.resolve_filename(model_path)) {
+  if (!resolved.resolve_filename(get_model_path())) {
     // The filename doesn't exist.
     // The filename doesn't exist.
     windisplay_cat.warning()
     windisplay_cat.warning()
       << "Could not find icon filename " << filename << "\n";
       << "Could not find icon filename " << filename << "\n";
@@ -2326,7 +2326,7 @@ get_cursor(const Filename &filename) {
   // filename, we can't load a virtual file and we can't use the
   // filename, we can't load a virtual file and we can't use the
   // virtual file system.
   // virtual file system.
   Filename resolved = filename;
   Filename resolved = filename;
-  if (!resolved.resolve_filename(model_path)) {
+  if (!resolved.resolve_filename(get_model_path())) {
     // The filename doesn't exist.
     // The filename doesn't exist.
     windisplay_cat.warning()
     windisplay_cat.warning()
       << "Could not find cursor filename " << filename << "\n";
       << "Could not find cursor filename " << filename << "\n";

+ 2 - 2
pandatool/src/egg-palettize/txaFileFilter.cxx

@@ -132,8 +132,8 @@ read_txa_file() {
               "is in effect."));
               "is in effect."));
 
 
   Filename filename = txa_file;
   Filename filename = txa_file;
-  vfs->resolve_filename(filename, texture_path);
-  vfs->resolve_filename(filename, model_path);
+  vfs->resolve_filename(filename, get_texture_path());
+  vfs->resolve_filename(filename, get_model_path());
 
 
   if (!vfs->exists(filename)) {
   if (!vfs->exists(filename)) {
     txafile_cat.warning()
     txafile_cat.warning()