15 #include "config_pgraph.h" 17 #include "alphaTestAttrib.h" 18 #include "audioVolumeAttrib.h" 19 #include "auxBitplaneAttrib.h" 20 #include "antialiasAttrib.h" 21 #include "auxSceneData.h" 22 #include "billboardEffect.h" 24 #include "clipPlaneAttrib.h" 25 #include "colorAttrib.h" 26 #include "colorBlendAttrib.h" 27 #include "colorScaleAttrib.h" 28 #include "colorWriteAttrib.h" 29 #include "compassEffect.h" 30 #include "cullFaceAttrib.h" 32 #include "cullBinAttrib.h" 33 #include "cullResult.h" 34 #include "cullTraverser.h" 35 #include "cullableObject.h" 36 #include "decalEffect.h" 37 #include "depthOffsetAttrib.h" 38 #include "depthTestAttrib.h" 39 #include "depthWriteAttrib.h" 40 #include "findApproxLevelEntry.h" 42 #include "fogAttrib.h" 43 #include "geomDrawCallbackData.h" 45 #include "geomTransformer.h" 48 #include "lightAttrib.h" 49 #include "lightRampAttrib.h" 51 #include "loaderFileType.h" 52 #include "loaderFileTypeBam.h" 53 #include "loaderFileTypeRegistry.h" 54 #include "materialAttrib.h" 55 #include "modelFlattenRequest.h" 56 #include "modelLoadRequest.h" 57 #include "modelSaveRequest.h" 58 #include "modelNode.h" 59 #include "modelRoot.h" 61 #include "nodePathComponent.h" 62 #include "pandaNode.h" 63 #include "paramNodePath.h" 64 #include "planeNode.h" 65 #include "polylightEffect.h" 66 #include "polylightNode.h" 67 #include "portalNode.h" 68 #include "occluderEffect.h" 69 #include "occluderNode.h" 70 #include "portalClipper.h" 71 #include "renderAttrib.h" 72 #include "renderEffect.h" 73 #include "renderEffects.h" 74 #include "renderModeAttrib.h" 75 #include "renderState.h" 76 #include "rescaleNormalAttrib.h" 77 #include "sceneSetup.h" 78 #include "scissorAttrib.h" 79 #include "scissorEffect.h" 80 #include "shadeModelAttrib.h" 81 #include "shaderInput.h" 82 #include "shaderAttrib.h" 84 #include "showBoundsEffect.h" 85 #include "stencilAttrib.h" 86 #include "stateMunger.h" 87 #include "texMatrixAttrib.h" 88 #include "texProjectorEffect.h" 89 #include "textureAttrib.h" 90 #include "texGenAttrib.h" 91 #include "transformState.h" 92 #include "transparencyAttrib.h" 96 ConfigureDef(config_pgraph);
97 NotifyCategoryDef(pgraph,
"");
98 NotifyCategoryDef(loader,
"");
99 NotifyCategoryDef(portal,
"");
101 ConfigureFn(config_pgraph) {
106 (
"fake-view-frustum-cull",
false,
107 PRC_DESC(
"Set this true to cause culling to be performed by rendering the " 108 "object in red wireframe, rather than actually culling it. This " 109 "helps make culling errors obvious. This variable only has an " 110 "effect when Panda is not compiled for a release build."));
113 (
"clip-plane-cull",
true,
114 PRC_DESC(
"This is normally true; set it false to disable culling of objects " 115 "that are completely behind one or more clip planes (primarily " 116 "useful for debugging) This also disables the use of occluders."));
119 (
"allow-portal-cull",
false,
120 PRC_DESC(
"Set this true to enable portal clipping. This will enable the " 121 "renderer to cull more objects that are clipped if not in the " 122 "current list of portals. This is still somewhat experimental."));
125 (
"debug-portal-cull",
false,
126 PRC_DESC(
"Set this true to enable debug visualization during portal clipping." 127 "(You first need to enable portal culling, using the allow-portal-cull" 131 (
"show-occluder-volumes",
false,
132 PRC_DESC(
"Set this true to enable debug visualization of the volumes used " 133 "to cull objects behind an occluder."));
136 (
"unambiguous-graph",
false,
137 PRC_DESC(
"Set this true to make ambiguous path warning messages generate an " 138 "assertion failure instead of just a warning (which can then be " 139 "trapped with assert-abort)."));
142 (
"detect-graph-cycles",
true,
143 PRC_DESC(
"Set this true to attempt to detect cycles in the scene graph " 144 "(e.g. a node which is its own parent) as soon as they are " 145 "made. This has no effect in NDEBUG mode."));
148 (
"no-unsupported-copy",
false,
149 PRC_DESC(
"Set this true to make an attempt to copy an unsupported type " 150 "generate an assertion failure instead of just a warning (which " 151 "can then be trapped with assert-abort)."));
154 (
"allow-unrelated-wrt",
true,
155 PRC_DESC(
"Set this true to allow unrelated NodePaths (that is, nodes which " 156 "have no common ancestor) to be adjusted relative to each other. If " 157 "true, these will be treated as if they had a common node above " 158 "their top nodes."));
161 (
"paranoid-compose",
false,
162 PRC_DESC(
"Set this true to double-check the componentwise transform compose " 163 "(or invert) operation against the equivalent matrix-based " 164 "operation. This has no effect if NDEBUG is defined."));
167 (
"compose-componentwise",
true,
168 PRC_DESC(
"Set this true to perform componentwise compose and invert " 169 "operations when possible. If this is false, the compositions " 170 "are always computed by matrix."));
173 (
"paranoid-const",
false,
174 PRC_DESC(
"Set this true to double-check that nothing is inappropriately " 175 "modifying the supposedly const structures like RenderState, " 176 "RenderAttrib, TransformState, and RenderEffect. This has no effect " 177 "if NDEBUG is defined."));
180 (
"auto-break-cycles",
true,
181 PRC_DESC(
"Set this true to automatically detect and break reference-count " 182 "cycles in the TransformState and RenderState caches. When this " 183 "is false, you must explicitly call TransformState.clear_cache() " 184 "from time to time to prevent gradual memory bloat."));
187 (
"garbage-collect-states",
true,
188 PRC_DESC(
"Set this true to defer destruction of TransformState and " 189 "RenderState objects until the end of the frame (or whenever " 190 "TransformState::garbage_collect() and RenderState::garbage_collect() " 191 "are called). This is a particularly useful thing to do when " 192 "using multiple threads, because it improves parallelization."));
195 (
"garbage-collect-states-rate", 1.0,
196 PRC_DESC(
"The fraction of the total number of TransformStates " 197 "(or RenderStates, or whatever) that are processed with " 198 "each garbage collection step. Setting this smaller than " 199 "1.0 will collect fewer states each frame, which may require " 200 "less processing time, but risks getting unstable cache " 201 "performance if states accumulate faster than they can be " 205 (
"transform-cache",
true,
206 PRC_DESC(
"Set this true to enable the cache of TransformState objects. " 207 "Using the cache saves time computing transforms and inverse " 208 "transforms, but imposes some overhead for maintaining the " 212 (
"state-cache",
true,
213 PRC_DESC(
"Set this true to enable the cache of RenderState objects, " 214 "similar to the TransformState cache controlled via " 215 "transform-cache."));
218 (
"uniquify-transforms",
true,
219 PRC_DESC(
"Set this true to ensure that equivalent TransformStates " 220 "are pointerwise equal. This may improve caching performance, " 221 "but also adds additional overhead to maintain the cache, " 222 "including the need to check for a composition cycle in " 226 (
"uniquify-states",
true,
227 PRC_DESC(
"Set this true to ensure that equivalent RenderStates " 228 "are pointerwise equal. This may improve caching performance, " 229 "but also adds additional overhead to maintain the cache, " 230 "including the need to check for a composition cycle in " 234 (
"uniquify-attribs",
true,
235 PRC_DESC(
"Set this true to ensure that equivalent RenderAttribs " 236 "are pointerwise equal. This may improve caching performance, " 237 "but also adds additional overhead to maintain the cache, " 238 "including the need to check for a composition cycle in " 242 (
"retransform-sprites",
true,
243 PRC_DESC(
"To render sprite-based particle effects, Panda must convert " 244 "the sprite points from object space into clip space, and compute " 245 "the corners of the quads in clip space. When this variable is " 246 "false, the resulting quads are then sent to the graphics " 247 "hardware in clip space. When this is true, the quads are " 248 "re-transformed back into the original object space, which is " 249 "necessary in order for fog to work correctly on the sprites."));
252 (
"depth-offset-decals",
true,
253 PRC_DESC(
"Set this true to allow decals to be implemented via the advanced " 254 "depth offset feature, if supported, instead of via the traditional " 255 "(and slower) two-pass approach. This is currently the only method " 256 "by which decals are implemented in Panda3D, and as such, this " 257 "setting is ignored."));
260 (
"max-collect-vertices", 65534,
261 PRC_DESC(
"Specifies the maximum number of vertices that are allowed to be " 262 "accumulated into any one GeomVertexData structure as a result " 263 "of collecting objects together during a flatten operation. " 264 "This prevents the accidental generation of large vertex buffers " 265 "from lots of smaller vertex buffers, while not " 266 "imposing a limit on the original size of any one " 267 "GeomVertexData structure."));
270 (
"max-collect-indices", 65535,
271 PRC_DESC(
"Specifies the maximum number of vertex indices that are allowed " 272 "to be accumulated into any one GeomPrimitive as a result " 273 "of collecting objects together during a flatten operation. " 274 "This prevents the accidental generation of large index buffers " 275 "from lots of smaller index buffers, while not " 276 "imposing a limit on the original size of any one " 280 (
"premunge-data",
true,
281 PRC_DESC(
"Set this true to preconvert vertex data at model load time to " 282 "match the data requirements of the current GSG. For instance, " 283 "color columns are pre-converted to match OpenGL or DirectX " 284 "encoding requirements, as appropriate. When this is false, the " 285 "data will be munged at render time instead."));
288 (
"preserve-geom-nodes",
false,
289 PRC_DESC(
"This specifies the default value for the \"preserved\" flag on " 290 "every GeomNode created. When this is true, GeomNodes will not " 291 "be flattened, so setting this true effectively disables the " 292 "use of flatten to combine GeomNodes."));
295 (
"flatten-geoms",
true,
296 PRC_DESC(
"When this is true (the default), NodePath::flatten_strong() and " 297 "flatten_medium() will attempt to combine multiple Geoms into " 298 "as few Geoms as possible, by combing GeomVertexDatas and then " 299 "unifying. Setting this false disables this behavior, so that " 300 "NodePath flatten operations will only reduce nodes. This affects " 301 "only the NodePath interfaces; you may still make the lower-level " 302 "SceneGraphReducer calls directly."));
306 PRC_DESC(
"Specifies an upper limit on the maximum number of lenses " 307 "and the maximum lens index number) that may be associated with " 308 "a single LensNode. There is no technical reason for this " 309 "limitation, but very large numbers are probably a mistake, so " 310 "this can be used as a simple sanity check. Set it larger or " 311 "smaller to suit your needs."));
314 (
"default-antialias-enable",
false,
315 PRC_DESC(
"Set this true to enable the M_auto antialiasing mode for all " 316 "nodes by default."));
319 (
"polylight-info",
false,
320 PRC_DESC(
"Set this true to view some info statements regarding the polylight. " 321 "It is helpful for debugging."));
324 (
"show-vertex-animation",
false,
325 PRC_DESC(
"Set this true to flash any objects whose vertices are animated " 326 "by Panda on the CPU (flash red) or by hardware (flash blue). " 327 "This only has effect when NDEBUG is not defined."));
330 (
"show-transparency",
false,
331 PRC_DESC(
"Set this true to flash any objects that are rendered in " 332 "some transparency mode. The color chosen is based on the " 333 "particular transparency mode in effect. This only has effect " 334 "when NDEBUG is not defined."));
338 PRC_DESC(
"Set this false to disable TransparencyAttrib::M_dual altogether " 339 "(and use M_alpha in its place)."));
342 (
"m-dual-opaque",
true,
343 PRC_DESC(
"Set this false to disable just the opaque part of M_dual."));
346 (
"m-dual-transparent",
true,
347 PRC_DESC(
"Set this false to disable just the transparent part of M_dual."));
350 (
"m-dual-flash",
false,
351 PRC_DESC(
"Set this true to flash any objects that use M_dual, for debugging."));
355 PRC_DESC(
"List the model loader modules that Panda will automatically " 356 "import when a new, unknown model type is loaded. This may be " 357 "either the name of a module, or a space-separate list of filename " 358 "extensions, followed by the name of the module."));
361 (
"default-model-extension",
"",
362 PRC_DESC(
"This specifies the filename extension (with leading dot) that " 363 "should be assumed if an attempt is made to load a filename that " 364 "has no extension. This is primarily designed to support legacy " 365 "code that used the now-deprecated implicit-extension feature of " 366 "Panda's loader; new code should probably give the correct name " 367 "for each model file they intend to load."));
370 (
"allow-live-flatten",
true,
371 PRC_DESC(
"Set this true to allow the use of flatten_strong() or any " 372 "variant on a node that is attached to a live scene graph node, " 373 "or false to disallow this. Flattening a live scene graph node " 374 "can cause problems when threading is enabled. This variable " 375 "only has an effect when Panda is not compiled for a release " 388 static bool initialized =
false;
394 AlphaTestAttrib::init_type();
395 AntialiasAttrib::init_type();
396 AudioVolumeAttrib::init_type();
397 AuxBitplaneAttrib::init_type();
398 AuxSceneData::init_type();
399 BillboardEffect::init_type();
401 ClipPlaneAttrib::init_type();
402 ColorAttrib::init_type();
403 ColorBlendAttrib::init_type();
404 ColorScaleAttrib::init_type();
405 ColorWriteAttrib::init_type();
406 CompassEffect::init_type();
407 CullFaceAttrib::init_type();
408 CullBin::init_type();
409 CullBinAttrib::init_type();
410 CullResult::init_type();
411 CullTraverser::init_type();
412 CullableObject::init_type();
413 DecalEffect::init_type();
414 DepthOffsetAttrib::init_type();
415 DepthTestAttrib::init_type();
416 DepthWriteAttrib::init_type();
417 FindApproxLevelEntry::init_type();
419 FogAttrib::init_type();
420 GeomDrawCallbackData::init_type();
421 GeomNode::init_type();
422 GeomTransformer::init_type();
423 LensNode::init_type();
425 LightAttrib::init_type();
426 LightRampAttrib::init_type();
428 LoaderFileType::init_type();
429 LoaderFileTypeBam::init_type();
430 MaterialAttrib::init_type();
431 ModelFlattenRequest::init_type();
432 ModelLoadRequest::init_type();
433 ModelSaveRequest::init_type();
434 ModelNode::init_type();
435 ModelRoot::init_type();
436 NodePath::init_type();
437 NodePathComponent::init_type();
438 PandaNode::init_type();
439 PandaNodePipelineReader::init_type();
440 ParamNodePath::init_type();
441 PlaneNode::init_type();
442 PolylightNode::init_type();
443 PolylightEffect::init_type();
444 PortalNode::init_type();
445 OccluderEffect::init_type();
446 OccluderNode::init_type();
447 PortalClipper::init_type();
448 RenderAttrib::init_type();
449 RenderEffect::init_type();
450 RenderEffects::init_type();
451 RenderModeAttrib::init_type();
452 RenderState::init_type();
453 RescaleNormalAttrib::init_type();
454 SceneSetup::init_type();
455 ScissorAttrib::init_type();
456 ScissorEffect::init_type();
457 ShadeModelAttrib::init_type();
458 ShaderInput::init_type();
459 ShaderAttrib::init_type();
460 ShowBoundsEffect::init_type();
461 StateMunger::init_type();
462 StencilAttrib::init_type();
463 TexMatrixAttrib::init_type();
464 TexProjectorEffect::init_type();
465 TextureAttrib::init_type();
466 TexGenAttrib::init_type();
467 TransformState::init_type();
468 TransparencyAttrib::init_type();
470 AlphaTestAttrib::register_with_read_factory();
471 AntialiasAttrib::register_with_read_factory();
472 AudioVolumeAttrib::register_with_read_factory();
473 AuxBitplaneAttrib::register_with_read_factory();
474 BillboardEffect::register_with_read_factory();
479 ColorBlendAttrib::register_with_read_factory();
483 CullFaceAttrib::register_with_read_factory();
485 DepthOffsetAttrib::register_with_read_factory();
489 FogAttrib::register_with_read_factory();
493 LightRampAttrib::register_with_read_factory();
494 MaterialAttrib::register_with_read_factory();
501 OccluderEffect::register_with_read_factory();
504 RenderModeAttrib::register_with_read_factory();
507 ScissorAttrib::register_with_read_factory();
508 ScissorEffect::register_with_read_factory();
509 ShadeModelAttrib::register_with_read_factory();
510 ShaderInput::register_with_read_factory();
511 ShaderAttrib::register_with_read_factory();
514 TexMatrixAttrib::register_with_read_factory();
515 TexProjectorEffect::register_with_read_factory();
516 TextureAttrib::register_with_read_factory();
518 TransformState::register_with_read_factory();
519 TransparencyAttrib::register_with_read_factory();
524 TransformState::init_states();
static void register_with_read_factory()
Tells the BamReader how to create objects of type PlaneNode.
static void register_with_read_factory()
Tells the BamReader how to create objects of type ModelRoot.
static void register_with_read_factory()
Tells the BamReader how to create objects of type ShowBoundsEffect.
static void register_with_read_factory()
Tells the BamReader how to create objects of type ModelNode.
static void register_with_read_factory()
Tells the BamReader how to create objects of type DepthWriteAttrib.
static void register_with_read_factory()
Tells the BamReader how to create objects of type Shader.
static void register_with_read_factory()
Tells the BamReader how to create objects of type Fog.
static void register_with_read_factory()
Tells the BamReader how to create objects of type Camera.
static void register_with_read_factory()
Tells the BamReader how to create objects of type OccluderNode.
This is a convenience class to specialize ConfigVariable as a boolean type.
static LoaderFileTypeRegistry * get_global_ptr()
Returns a pointer to the global LoaderFileTypeRegistry object.
static void init_states()
Make sure the global _states map is allocated.
static void init_attribs()
Make sure the global _attribs map is allocated.
static void register_with_read_factory()
Tells the BamReader how to create objects of type RenderState.
static void register_with_read_factory()
Tells the BamReader how to create objects of type PolylightNode.
This class is similar to ConfigVariable, but it reports its value as a list of strings.
static void register_with_read_factory()
Tells the BamReader how to create objects of type PandaNode.
This defines the Loader interface to read Bam files.
static void register_with_read_factory()
Tells the BamReader how to create objects of type DepthTestAttrib.
static void register_with_read_factory()
Tells the BamReader how to create objects of type PortalNode.
void register_type(LoaderFileType *type)
Defines a new LoaderFileType in the universe.
static void register_with_read_factory()
Tells the BamReader how to create objects of type CullBinAttrib.
This is a convenience class to specialize ConfigVariable as a floating-point type.
static void register_with_read_factory()
Tells the BamReader how to create objects of type LensNode.
This is a convenience class to specialize ConfigVariable as a string type.
static void register_with_read_factory()
Tells the BamReader how to create objects of type TexGenAttrib.
static void register_with_read_factory()
Tells the BamReader how to create objects of type ColorWriteAttrib.
static void register_with_read_factory()
Tells the BamReader how to create objects of type RenderEffects.
static void register_with_read_factory()
Tells the BamReader how to create objects of type ColorScaleAttrib.
static void register_with_read_factory()
Tells the BamReader how to create objects of type CompassEffect.
This class maintains the set of all known LoaderFileTypes in the universe.
static void register_with_read_factory()
Tells the BamReader how to create objects of type GeomNode.
static void register_with_read_factory()
Tells the BamReader how to create objects of type DecalEffect.
static void register_with_read_factory()
Tells the BamReader how to create objects of type ColorAttrib.
This is a convenience class to specialize ConfigVariable as an integer type.
static void register_with_read_factory()
Tells the BamReader how to create objects of type ClipPlaneAttrib.
static void register_with_read_factory()
Tells the BamReader how to create objects of type LightAttrib.
static void register_with_read_factory()
Tells the BamReader how to create objects of type RescaleNormalAttrib.
static void init_states()
Make sure the global _states map is allocated.