panda3d/panda/src/putil/config_util.cxx

202 lines
6.7 KiB
C++

// Filename: config_util.cxx
// Created by: cary (04Jan00)
//
////////////////////////////////////////////////////////////////////
//
// PANDA 3D SOFTWARE
// Copyright (c) Carnegie Mellon University. All rights reserved.
//
// All use of this software is subject to the terms of the revised BSD
// license. You should have received a copy of this license along
// with this source code in a file named "LICENSE."
//
////////////////////////////////////////////////////////////////////
#include "config_util.h"
#include "animInterface.h"
#include "bamCacheIndex.h"
#include "bamCacheRecord.h"
#include "bamReader.h"
#include "bamReaderParam.h"
#include "bitArray.h"
#include "bitMask.h"
#include "buttonHandle.h"
#include "cachedTypedWritableReferenceCount.h"
#include "callbackData.h"
#include "callbackObject.h"
#include "clockObject.h"
#include "configurable.h"
#include "copyOnWriteObject.h"
#include "cPointerCallbackObject.h"
#include "datagram.h"
#include "doubleBitMask.h"
#include "factoryParam.h"
#include "namable.h"
#include "nodeCachedReferenceCount.h"
#include "pythonCallbackObject.h"
#include "referenceCount.h"
#include "sparseArray.h"
#include "typedObject.h"
#include "typedReferenceCount.h"
#include "typedWritable.h"
#include "typedWritableReferenceCount.h"
#include "writableConfigurable.h"
#include "writableParam.h"
#include "keyboardButton.h"
#include "mouseButton.h"
#include "dconfig.h"
ConfigureDef(config_util);
NotifyCategoryDef(util, "");
NotifyCategoryDef(bam, util_cat);
ConfigVariableEnum<BamEndian> bam_endian
("bam-endian", BE_native,
PRC_DESC("The default endianness to use for writing major numeric data "
"tables to bam files. This does not affect all numbers written "
"to bam files, only those for which the individual object was "
"designed to support this flag. The default is \"native\"; you "
"may set it to \"littleendian\" or \"bigendian\" to target a "
"particular platform."));
ConfigVariableEnum<BamTextureMode> bam_texture_mode
("bam-texture-mode", BTM_relative,
PRC_DESC("Set this to specify how textures should be written into Bam files."
"See the panda source or documentation for available options."));
ConfigureFn(config_util) {
init_libputil();
}
// Set this true to enable tracking of ReferenceCount pointer
// allocation/deallcation via the MemoryUsage object. This is
// primarily useful for detecting memory leaks. It has no effect when
// compiling in NDEBUG mode.
//
// This variable is no longer defined here; instead, it's a member of
// MemoryUsage.
//
// ConfigVariableBool track_memory_usage("track-memory-usage", false);
ConfigVariableSearchPath &
get_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 &
get_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
("sleep-precision", 0.01,
PRC_DESC("This is the accuracy within which we can expect select() to "
"return precisely. That is, if we use select() to request a "
"timeout of 1.0 seconds, we can expect to actually sleep for "
"somewhere between 1.0 and 1.0 + sleep-precision seconds."));
ConfigVariableBool preload_textures
("preload-textures", true,
PRC_DESC("When this is true, texture images are loaded from disk as soon "
"as the Texture is created from the TexturePool. When this is "
"false, the Texture is created immediately, but the image data "
"is not loaded from disk until the Texture is actually rendered "
"(or otherwise prepared) on the GSG. This can help reduce "
"wasted memory from Textures that are created but never used "
"to render."));
ConfigVariableBool preload_simple_textures
("preload-simple-textures", false,
PRC_DESC("When this is true, every texture image will have a simple "
"image generated for it at load time. (Normally, textures "
"get a simple image at egg2bam time.) This slows the initial "
"loading time of textures, but allows you to take advantage "
"of gsg::set_incomplete_render() to load textures on-the-fly "
"in a sub-thread. It's not generally necessary if you are "
"loading bam files that were generated via egg2bam."));
////////////////////////////////////////////////////////////////////
// Function: init_libputil
// Description: Initializes the library. This must be called at
// least once before any of the functions or classes in
// this library can be used. Normally it will be
// called by the static initializers and need not be
// called explicitly, but special cases exist.
////////////////////////////////////////////////////////////////////
void
init_libputil() {
static bool initialized = false;
if (initialized) {
return;
}
initialized = true;
AnimInterface::init_type();
BamCacheIndex::init_type();
BamCacheRecord::init_type();
BamReaderParam::init_type();
BitArray::init_type();
BitMask32::init_type();
BitMask64::init_type();
ButtonHandle::init_type();
CPointerCallbackObject::init_type();
CachedTypedWritableReferenceCount::init_type();
CallbackData::init_type();
CallbackObject::init_type();
ClockObject::init_type();
Configurable::init_type();
CopyOnWriteObject::init_type();
Datagram::init_type();
DoubleBitMaskNative::init_type();
FactoryParam::init_type();
Namable::init_type();
NodeCachedReferenceCount::init_type();
#ifdef HAVE_PYTHON
PythonCallbackObject::init_type();
#endif
QuadBitMaskNative::init_type();
ReferenceCount::init_type();
SparseArray::init_type();
TypedObject::init_type();
TypedReferenceCount::init_type();
TypedWritable::init_type();
TypedWritableReferenceCount::init_type();
WritableConfigurable::init_type();
WritableParam::init_type();
KeyboardButton::init_keyboard_buttons();
MouseButton::init_mouse_buttons();
register_type(BamReader::_remove_flag, "remove");
BamCacheIndex::register_with_read_factory();
BamCacheRecord::register_with_read_factory();
// Initialize the num_bits_on table, for BitMask::get_num_on_bits().
for (int bit = 0; bit < 16; ++bit) {
int w = (1 << bit);
for (int i = 0; i < w; ++i) {
num_bits_on[i + w] = num_bits_on[i] + 1;
}
}
}