00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "config_egg2pg.h"
00016
00017 #include "dconfig.h"
00018 #include "loaderFileTypeEgg.h"
00019 #include "loaderFileTypeRegistry.h"
00020 #include "configVariableManager.h"
00021 #include "configVariableCore.h"
00022 #include "eggRenderState.h"
00023
00024 ConfigureDef(config_egg2pg);
00025 NotifyCategoryDef(egg2pg, "");
00026
00027 ConfigVariableDouble egg_normal_scale
00028 ("egg-normal-scale", 1.0);
00029 ConfigVariableBool egg_show_normals
00030 ("egg-show-normals", false);
00031
00032 ConfigVariableEnum<CoordinateSystem> egg_coordinate_system
00033 ("egg-coordinate-system", CS_default);
00034
00035 ConfigVariableBool egg_ignore_mipmaps
00036 ("egg-ignore-mipmaps", false);
00037 ConfigVariableBool egg_ignore_filters
00038 ("egg-ignore-filters", false);
00039 ConfigVariableBool egg_ignore_decals
00040 ("egg-ignore-decals", false);
00041 ConfigVariableBool egg_flatten
00042 ("egg-flatten", true,
00043 PRC_DESC("This is normally true to flatten out useless nodes after loading "
00044 "an egg file. Set it false if you want to see the complete "
00045 "and true hierarchy as the egg loader created it (although the "
00046 "extra nodes may have a small impact on render performance)."));
00047
00048 ConfigVariableDouble egg_flatten_radius
00049 ("egg-flatten-radius", 0.0,
00050 PRC_DESC("This specifies the minimum cull radius in the egg file. Nodes "
00051 "whose bounding volume is smaller than this radius will be "
00052 "flattened tighter than nodes larger than this radius, to "
00053 "reduce the node count even further. The idea is that small "
00054 "objects will not need to have their individual components "
00055 "culled separately, but large environments should. This allows "
00056 "the user to specify what should be considered \"small\". Set "
00057 "it to 0.0 to disable this feature."));
00058
00059 ConfigVariableBool egg_unify
00060 ("egg-unify", true,
00061 PRC_DESC("When this is true, then in addition to flattening the scene graph "
00062 "nodes, the egg loader will also combine as many Geoms as "
00063 "possible within "
00064 "a given node into a single Geom. This has theoretical performance "
00065 "benefits, especially on higher-end graphics cards, but it also "
00066 "slightly slows down egg loading."));
00067
00068 ConfigVariableBool egg_combine_geoms
00069 ("egg-combine-geoms", false,
00070 PRC_DESC("Set this true to combine sibling GeomNodes into a single GeomNode, "
00071 "when possible. This usually shouldn't be necessary, since the "
00072 "egg loader does a pretty good job of combining these by itself."));
00073
00074 ConfigVariableBool egg_rigid_geometry
00075 ("egg-rigid-geometry", false,
00076 PRC_DESC("Set this true to create rigid pieces of an animated character as "
00077 "separate static nodes, or false to leave these in with the parent "
00078 "node as vertex-animated geometry. Setting this true means less "
00079 "geometry has to be vertex-animated, but there will tend to be "
00080 "more separate pieces."));
00081
00082 ConfigVariableBool egg_flat_shading
00083 ("egg-flat-shading", false,
00084 PRC_DESC("Set this true to allow the egg loader to create geometry with the "
00085 "ShadeModelAttrib::M_flat attribute set. It will do this only "
00086 "for geometry that has per-polygon normals and/or colors. This "
00087 "allows the egg loader to avoid duplicating vertices when they "
00088 "are shared between connected polygons with different normals or "
00089 "colors, but it prevents the flat-shaded geometry from being "
00090 "combined with any adjacent smooth-shaded geometry (for instance, "
00091 "as the result of a flatten_strong operation). It is false by "
00092 "default, since flat-shaded geometry is rare; but you may wish "
00093 "to set it true if your scene largely or entirely consists of "
00094 "flat-shaded polygons."));
00095
00096 ConfigVariableBool egg_flat_colors
00097 ("egg-flat-colors", true,
00098 PRC_DESC("Set this true to allow the egg loader to create geometry with the "
00099 "ColorAttrib::T_flat attribute set: that is, geometry that uses "
00100 "the scene graph color instead of per-vertex color. Normally Panda "
00101 "will do this as an optimization for Geoms whose vertices are all "
00102 "the same color, or all white. This allows the removal of the "
00103 "color attribute from the vertices where it is not necessary to "
00104 "specify colors per-vertex. If this is false, the color attribute "
00105 "will always be specified per-vertex, even if all vertices have the "
00106 "same value."));
00107
00108 ConfigVariableBool egg_load_old_curves
00109 ("egg-load-old-curves", true,
00110 PRC_DESC("When this is true, a <NurbsCurve> entry appearing in an egg file "
00111 "will load as a NurbsCurve or ClassicNurbsCurve object (see below). "
00112 "When this is false, it will load a RopeNode instead, which uses the "
00113 "new NurbsCurveEvaluator interface."));
00114
00115
00116 ConfigVariableBool egg_load_classic_nurbs_curves
00117 ("egg-load-classic-nurbs-curves", false,
00118 PRC_DESC("When this is true (and the above is also true), a <NurbsCurve> "
00119 "entry appearing in an egg file will load a ClassicNurbsCurve object "
00120 "instead of the default, a NurbsCurve object. This only makes a "
00121 "difference when the NURBS++ library is available, in which case the "
00122 "default, NurbsCurve, is actually a NurbsPPCurve object."));
00123
00124
00125 ConfigVariableBool egg_accept_errors
00126 ("egg-accept-errors", true,
00127 PRC_DESC("When this is true, certain kinds of recoverable errors (not syntax "
00128 "errors) in an egg file will be allowed and ignored when an egg file "
00129 "is loaded. When it is false, only perfectly pristine egg files may "
00130 "be loaded."));
00131
00132
00133 ConfigVariableBool egg_suppress_hidden
00134 ("egg-suppress-hidden", false,
00135 PRC_DESC("When this is true, objects flagged as \"hidden\" with the visibility "
00136 "scalar are not created at all. When false, these objects are "
00137 "created, but initially stashed."));
00138
00139
00140 ConfigVariableEnum<EggRenderMode::AlphaMode> egg_alpha_mode
00141 ("egg-alpha-mode", EggRenderMode::AM_blend,
00142 PRC_DESC("Specifies the alpha mode to apply when the alpha specification "
00143 "\"on\" appears in the egg file (or when a primitive is implicitly "
00144 "transparent, because of a <RGBA> that involves a non-unity alpha, "
00145 "or because of a four-channel texture."));
00146
00147 ConfigVariableInt egg_max_vertices
00148 ("egg-max-vertices", 65535,
00149 PRC_DESC("Specifies the maximum number of vertices that will be "
00150 "added to any one GeomVertexData by the egg loader."));
00151
00152 ConfigVariableInt egg_max_indices
00153 ("egg-max-indices", 65535,
00154 PRC_DESC("Specifies the maximum number of vertex indices that will be "
00155 "added to any one GeomPrimitive by the egg loader."));
00156
00157 ConfigVariableBool egg_emulate_bface
00158 ("egg-emulate-bface", true,
00159 PRC_DESC("When this is true, the bface flag applied to a polygon will "
00160 "cause two different polygons to be created, back-to-back. When "
00161 "it is false, a single polygon will be created with the two_sided "
00162 "flag set on it."));
00163
00164 ConfigVariableBool egg_preload_simple_textures
00165 ("egg-preload-simple-textures", true,
00166 PRC_DESC("This specifies whether the egg loader will generate simple "
00167 "texture images for each texture loaded. This supercedes the "
00168 "preload-simple-textures global default, for egg files. In "
00169 "fact, the egg loader will generate simple texture images if "
00170 "either this or preload-simple-textures is true."));
00171
00172 ConfigVariableDouble egg_vertex_membership_quantize
00173 ("egg-vertex-membership-quantize", 0.1,
00174 PRC_DESC("Specifies the nearest amount to round each vertex joint "
00175 "membership value when loading an egg file. This affects animated "
00176 "egg files only. There is a substantial runtime "
00177 "performance advantage for reducing trivial differences in joint "
00178 "membership. Set this to 0 to leave joint membership as it is."));
00179
00180 ConfigVariableInt egg_vertex_max_num_joints
00181 ("egg-vertex-max-num-joints", 4,
00182 PRC_DESC("Specifies the maximum number of distinct joints that are allowed "
00183 "to control any one vertex. If a vertex requests assignment to "
00184 "more than this number of joints, the joints with the lesser membership "
00185 "value are ignored. Set this to -1 to allow any number of joints."));
00186
00187 ConfigVariableBool egg_implicit_alpha_binary
00188 ("egg-implicit-alpha-binary", false,
00189 PRC_DESC("If this is true, then a <Scalar> alpha value appearing in an egg "
00190 "file that appears to specify only a binary (0 or 1) value for alpha "
00191 "will automatically be downgraded to alpha type \"binary\" instead of "
00192 "whatever appears in the egg file."));
00193
00194 ConfigureFn(config_egg2pg) {
00195 init_libegg2pg();
00196 }
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206 void
00207 init_libegg2pg() {
00208 static bool initialized = false;
00209 if (initialized) {
00210 return;
00211 }
00212 initialized = true;
00213
00214
00215
00216
00217
00218 ConfigVariableManager *cv_mgr = ConfigVariableManager::get_global_ptr();
00219 cv_mgr->make_variable_template
00220 ("egg-object-type-*",
00221 ConfigVariableCore::VT_string, "",
00222 "Defines egg syntax for the named object type.",
00223 ConfigVariableCore::F_dynamic);
00224
00225 EggRenderState::init_type();
00226 LoaderFileTypeEgg::init_type();
00227
00228 LoaderFileTypeRegistry *reg = LoaderFileTypeRegistry::get_global_ptr();
00229
00230 reg->register_type(new LoaderFileTypeEgg);
00231 }