Panda3D
config_pgraph.cxx
Go to the documentation of this file.
1 /**
2  * PANDA 3D SOFTWARE
3  * Copyright (c) Carnegie Mellon University. All rights reserved.
4  *
5  * All use of this software is subject to the terms of the revised BSD
6  * license. You should have received a copy of this license along
7  * with this source code in a file named "LICENSE."
8  *
9  * @file config_pgraph.cxx
10  * @author drose
11  * @date 2002-02-21
12  */
13 
14 #include "config_pgraph.h"
15 
16 #include "alphaTestAttrib.h"
17 #include "audioVolumeAttrib.h"
18 #include "auxBitplaneAttrib.h"
19 #include "antialiasAttrib.h"
20 #include "auxSceneData.h"
21 #include "billboardEffect.h"
22 #include "camera.h"
23 #include "clipPlaneAttrib.h"
24 #include "colorAttrib.h"
25 #include "colorBlendAttrib.h"
26 #include "colorScaleAttrib.h"
27 #include "colorWriteAttrib.h"
28 #include "compassEffect.h"
29 #include "cullFaceAttrib.h"
30 #include "cullBin.h"
31 #include "cullBinAttrib.h"
32 #include "cullResult.h"
33 #include "cullTraverser.h"
34 #include "cullableObject.h"
35 #include "decalEffect.h"
36 #include "depthOffsetAttrib.h"
37 #include "depthTestAttrib.h"
38 #include "depthWriteAttrib.h"
39 #include "findApproxLevelEntry.h"
40 #include "fog.h"
41 #include "fogAttrib.h"
42 #include "geomDrawCallbackData.h"
43 #include "geomNode.h"
44 #include "geomTransformer.h"
45 #include "lensNode.h"
46 #include "light.h"
47 #include "lightAttrib.h"
48 #include "lightRampAttrib.h"
49 #include "loader.h"
50 #include "loaderFileType.h"
51 #include "loaderFileTypeBam.h"
52 #include "loaderFileTypeRegistry.h"
53 #include "logicOpAttrib.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"
60 #include "nodePath.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 "shaderAttrib.h"
82 #include "shader.h"
83 #include "showBoundsEffect.h"
84 #include "stencilAttrib.h"
85 #include "stateMunger.h"
86 #include "texMatrixAttrib.h"
87 #include "texProjectorEffect.h"
88 #include "textureAttrib.h"
89 #include "texGenAttrib.h"
90 #include "transformState.h"
91 #include "transparencyAttrib.h"
92 
93 #include "dconfig.h"
94 
95 #if !defined(CPPPARSER) && !defined(LINK_ALL_STATIC) && !defined(BUILDING_PANDA_PGRAPH)
96  #error Buildsystem error: BUILDING_PANDA_PGRAPH not defined
97 #endif
98 
99 ConfigureDef(config_pgraph);
100 NotifyCategoryDef(pgraph, "");
101 NotifyCategoryDef(loader, "");
102 NotifyCategoryDef(portal, "");
103 
104 ConfigureFn(config_pgraph) {
105  init_libpgraph();
106 }
107 
108 ConfigVariableBool fake_view_frustum_cull
109 ("fake-view-frustum-cull", false,
110  PRC_DESC("Set this true to cause culling to be performed by rendering the "
111  "object in red wireframe, rather than actually culling it. This "
112  "helps make culling errors obvious. This variable only has an "
113  "effect when Panda is not compiled for a release build."));
114 
115 ConfigVariableBool clip_plane_cull
116 ("clip-plane-cull", true,
117  PRC_DESC("This is normally true; set it false to disable culling of objects "
118  "that are completely behind one or more clip planes (primarily "
119  "useful for debugging) This also disables the use of occluders."));
120 
121 ConfigVariableBool allow_portal_cull
122 ("allow-portal-cull", false,
123  PRC_DESC("Set this true to enable portal clipping. This will enable the "
124  "renderer to cull more objects that are clipped if not in the "
125  "current list of portals. This is still somewhat experimental."));
126 
127 ConfigVariableBool debug_portal_cull
128 ("debug-portal-cull", false,
129  PRC_DESC("Set this true to enable debug visualization during portal clipping."
130  "(You first need to enable portal culling, using the allow-portal-cull"
131  "variable.)"));
132 
133 ConfigVariableBool show_occluder_volumes
134 ("show-occluder-volumes", false,
135  PRC_DESC("Set this true to enable debug visualization of the volumes used "
136  "to cull objects behind an occluder."));
137 
138 ConfigVariableBool unambiguous_graph
139 ("unambiguous-graph", false,
140  PRC_DESC("Set this true to make ambiguous path warning messages generate an "
141  "assertion failure instead of just a warning (which can then be "
142  "trapped with assert-abort)."));
143 
144 ConfigVariableBool detect_graph_cycles
145 ("detect-graph-cycles", true,
146  PRC_DESC("Set this true to attempt to detect cycles in the scene graph "
147  "(e.g. a node which is its own parent) as soon as they are "
148  "made. This has no effect in NDEBUG mode."));
149 
150 ConfigVariableBool no_unsupported_copy
151 ("no-unsupported-copy", false,
152  PRC_DESC("Set this true to make an attempt to copy an unsupported type "
153  "generate an assertion failure instead of just a warning (which "
154  "can then be trapped with assert-abort)."));
155 
156 ConfigVariableBool allow_unrelated_wrt
157 ("allow-unrelated-wrt", true,
158  PRC_DESC("Set this true to allow unrelated NodePaths (that is, nodes which "
159  "have no common ancestor) to be adjusted relative to each other. If "
160  "true, these will be treated as if they had a common node above "
161  "their top nodes."));
162 
163 ConfigVariableBool paranoid_compose
164 ("paranoid-compose", false,
165  PRC_DESC("Set this true to double-check the componentwise transform compose "
166  "(or invert) operation against the equivalent matrix-based "
167  "operation. This has no effect if NDEBUG is defined."));
168 
169 ConfigVariableBool compose_componentwise
170 ("compose-componentwise", true,
171  PRC_DESC("Set this true to perform componentwise compose and invert "
172  "operations when possible. If this is false, the compositions "
173  "are always computed by matrix."));
174 
175 ConfigVariableBool paranoid_const
176 ("paranoid-const", false,
177  PRC_DESC("Set this true to double-check that nothing is inappropriately "
178  "modifying the supposedly const structures like RenderState, "
179  "RenderAttrib, TransformState, and RenderEffect. This has no effect "
180  "if NDEBUG is defined."));
181 
182 ConfigVariableBool auto_break_cycles
183 ("auto-break-cycles", true,
184  PRC_DESC("Set this true to automatically detect and break reference-count "
185  "cycles in the TransformState and RenderState caches. When this "
186  "is false, you must explicitly call TransformState.clear_cache() "
187  "from time to time to prevent gradual memory bloat."));
188 
189 ConfigVariableBool garbage_collect_states
190 ("garbage-collect-states", true,
191  PRC_DESC("Set this true to defer destruction of TransformState and "
192  "RenderState objects until the end of the frame (or whenever "
193  "TransformState::garbage_collect() and RenderState::garbage_collect() "
194  "are called). This is a particularly useful thing to do when "
195  "using multiple threads, because it improves parallelization."));
196 
197 ConfigVariableDouble garbage_collect_states_rate
198 ("garbage-collect-states-rate", 1.0,
199  PRC_DESC("The fraction of the total number of TransformStates "
200  "(or RenderStates, or whatever) that are processed with "
201  "each garbage collection step. Setting this smaller than "
202  "1.0 will collect fewer states each frame, which may require "
203  "less processing time, but risks getting unstable cache "
204  "performance if states accumulate faster than they can be "
205  "cleaned up."));
206 
207 ConfigVariableBool transform_cache
208 ("transform-cache", true,
209  PRC_DESC("Set this true to enable the cache of TransformState objects. "
210  "Using the cache saves time computing transforms and inverse "
211  "transforms, but imposes some overhead for maintaining the "
212  "cache itself."));
213 
214 ConfigVariableBool state_cache
215 ("state-cache", true,
216  PRC_DESC("Set this true to enable the cache of RenderState objects, "
217  "similar to the TransformState cache controlled via "
218  "transform-cache."));
219 
220 ConfigVariableBool uniquify_transforms
221 ("uniquify-transforms", true,
222  PRC_DESC("Set this true to ensure that equivalent TransformStates "
223  "are pointerwise equal. This may improve caching performance, "
224  "but also adds additional overhead to maintain the cache, "
225  "including the need to check for a composition cycle in "
226  "the cache."));
227 
228 ConfigVariableBool uniquify_states
229 ("uniquify-states", true,
230  PRC_DESC("Set this true to ensure that equivalent RenderStates "
231  "are pointerwise equal. This may improve caching performance, "
232  "but also adds additional overhead to maintain the cache, "
233  "including the need to check for a composition cycle in "
234  "the cache. It is highly recommended to keep this on."));
235 
236 ConfigVariableBool uniquify_attribs
237 ("uniquify-attribs", true,
238  PRC_DESC("Set this true to ensure that equivalent RenderAttribs "
239  "are pointerwise equal. This may improve caching performance, "
240  "but also adds additional overhead to maintain the cache, "
241  "including the need to check for a composition cycle in "
242  "the cache."));
243 
244 ConfigVariableBool retransform_sprites
245 ("retransform-sprites", true,
246  PRC_DESC("To render sprite-based particle effects, Panda must convert "
247  "the sprite points from object space into clip space, and compute "
248  "the corners of the quads in clip space. When this variable is "
249  "false, the resulting quads are then sent to the graphics "
250  "hardware in clip space. When this is true, the quads are "
251  "re-transformed back into the original object space, which is "
252  "necessary in order for fog to work correctly on the sprites."));
253 
254 ConfigVariableBool depth_offset_decals
255 ("depth-offset-decals", true,
256  PRC_DESC("Set this true to allow decals to be implemented via the advanced "
257  "depth offset feature, if supported, instead of via the traditional "
258  "(and slower) two-pass approach. This is currently the only method "
259  "by which decals are implemented in Panda3D, and as such, this "
260  "setting is ignored."));
261 
262 ConfigVariableInt max_collect_vertices
263 ("max-collect-vertices", 65534,
264  PRC_DESC("Specifies the maximum number of vertices that are allowed to be "
265  "accumulated into any one GeomVertexData structure as a result "
266  "of collecting objects together during a flatten operation. "
267  "This prevents the accidental generation of large vertex buffers "
268  "from lots of smaller vertex buffers, while not "
269  "imposing a limit on the original size of any one "
270  "GeomVertexData structure."));
271 
272 ConfigVariableInt max_collect_indices
273 ("max-collect-indices", 65535,
274  PRC_DESC("Specifies the maximum number of vertex indices that are allowed "
275  "to be accumulated into any one GeomPrimitive as a result "
276  "of collecting objects together during a flatten operation. "
277  "This prevents the accidental generation of large index buffers "
278  "from lots of smaller index buffers, while not "
279  "imposing a limit on the original size of any one "
280  "GeomPrimitive."));
281 
282 ConfigVariableBool premunge_data
283 ("premunge-data", true,
284  PRC_DESC("Set this true to preconvert vertex data at model load time to "
285  "match the data requirements of the current GSG. For instance, "
286  "color columns are pre-converted to match OpenGL or DirectX "
287  "encoding requirements, as appropriate. When this is false, the "
288  "data will be munged at render time instead."));
289 
290 ConfigVariableBool preserve_geom_nodes
291 ("preserve-geom-nodes", false,
292  PRC_DESC("This specifies the default value for the \"preserved\" flag on "
293  "every GeomNode created. When this is true, GeomNodes will not "
294  "be flattened, so setting this true effectively disables the "
295  "use of flatten to combine GeomNodes."));
296 
297 ConfigVariableBool flatten_geoms
298 ("flatten-geoms", true,
299  PRC_DESC("When this is true (the default), NodePath::flatten_strong() and "
300  "flatten_medium() will attempt to combine multiple Geoms into "
301  "as few Geoms as possible, by combing GeomVertexDatas and then "
302  "unifying. Setting this false disables this behavior, so that "
303  "NodePath flatten operations will only reduce nodes. This affects "
304  "only the NodePath interfaces; you may still make the lower-level "
305  "SceneGraphReducer calls directly."));
306 
307 ConfigVariableInt max_lenses
308 ("max-lenses", 100,
309  PRC_DESC("Specifies an upper limit on the maximum number of lenses "
310  "and the maximum lens index number) that may be associated with "
311  "a single LensNode. There is no technical reason for this "
312  "limitation, but very large numbers are probably a mistake, so "
313  "this can be used as a simple sanity check. Set it larger or "
314  "smaller to suit your needs."));
315 
316 ConfigVariableBool polylight_info
317 ("polylight-info", false,
318  PRC_DESC("Set this true to view some info statements regarding the polylight. "
319  "It is helpful for debugging."));
320 
321 ConfigVariableBool show_vertex_animation
322 ("show-vertex-animation", false,
323  PRC_DESC("Set this true to flash any objects whose vertices are animated "
324  "by Panda on the CPU (flash red) or by hardware (flash blue). "
325  "This only has effect when NDEBUG is not defined."));
326 
327 ConfigVariableBool show_transparency
328 ("show-transparency", false,
329  PRC_DESC("Set this true to flash any objects that are rendered in "
330  "some transparency mode. The color chosen is based on the "
331  "particular transparency mode in effect. This only has effect "
332  "when NDEBUG is not defined."));
333 
334 ConfigVariableBool m_dual
335 ("m-dual", true,
336  PRC_DESC("Set this false to disable TransparencyAttrib::M_dual altogether "
337  "(and use M_alpha in its place)."));
338 
339 ConfigVariableBool m_dual_opaque
340 ("m-dual-opaque", true,
341  PRC_DESC("Set this false to disable just the opaque part of M_dual."));
342 
343 ConfigVariableBool m_dual_transparent
344 ("m-dual-transparent", true,
345  PRC_DESC("Set this false to disable just the transparent part of M_dual."));
346 
347 ConfigVariableBool m_dual_flash
348 ("m-dual-flash", false,
349  PRC_DESC("Set this true to flash any objects that use M_dual, for debugging."));
350 
351 ConfigVariableList load_file_type
352 ("load-file-type",
353  PRC_DESC("List the model loader modules that Panda will automatically "
354  "import when a new, unknown model type is loaded. This may be "
355  "either the name of a module, or a space-separate list of filename "
356  "extensions, followed by the name of the module."));
357 
358 ConfigVariableString default_model_extension
359 ("default-model-extension", "",
360  PRC_DESC("This specifies the filename extension (with leading dot) that "
361  "should be assumed if an attempt is made to load a filename that "
362  "has no extension. This is primarily designed to support legacy "
363  "code that used the now-deprecated implicit-extension feature of "
364  "Panda's loader; new code should probably give the correct name "
365  "for each model file they intend to load."));
366 
367 ConfigVariableBool allow_live_flatten
368 ("allow-live-flatten", true,
369  PRC_DESC("Set this true to allow the use of flatten_strong() or any "
370  "variant on a node that is attached to a live scene graph node, "
371  "or false to disallow this. Flattening a live scene graph node "
372  "can cause problems when threading is enabled. This variable "
373  "only has an effect when Panda is not compiled for a release "
374  "build."));
375 
376 ConfigVariableBool filled_wireframe_apply_shader
377 ("filled-wireframe-apply-shader", false,
378  PRC_DESC("Set this true to apply any shader configured on nodes onto the "
379  "filled wireframe overlay. The wireframe color is multiplied with "
380  "the result of the fragment shader. This is helpful when the shader "
381  "alters the position of the vertices and makes the overlay wrong."));
382 
383 /**
384  * Initializes the library. This must be called at least once before any of
385  * the functions or classes in this library can be used. Normally it will be
386  * called by the static initializers and need not be called explicitly, but
387  * special cases exist.
388  */
389 void
391  static bool initialized = false;
392  if (initialized) {
393  return;
394  }
395  initialized = true;
396 
397  AlphaTestAttrib::init_type();
398  AntialiasAttrib::init_type();
399  AudioVolumeAttrib::init_type();
400  AuxBitplaneAttrib::init_type();
401  AuxSceneData::init_type();
402  BillboardEffect::init_type();
403  Camera::init_type();
404  ClipPlaneAttrib::init_type();
405  ColorAttrib::init_type();
406  ColorBlendAttrib::init_type();
407  ColorScaleAttrib::init_type();
408  ColorWriteAttrib::init_type();
409  CompassEffect::init_type();
410  CullFaceAttrib::init_type();
411  CullBin::init_type();
412  CullBinAttrib::init_type();
413  CullResult::init_type();
414  CullTraverser::init_type();
415  CullableObject::init_type();
416  DecalEffect::init_type();
417  DepthOffsetAttrib::init_type();
418  DepthTestAttrib::init_type();
419  DepthWriteAttrib::init_type();
420  FindApproxLevelEntry::init_type();
421  Fog::init_type();
422  FogAttrib::init_type();
423  GeomDrawCallbackData::init_type();
424  GeomNode::init_type();
425  GeomTransformer::init_type();
426  LensNode::init_type();
427  Light::init_type();
428  LightAttrib::init_type();
429  LightRampAttrib::init_type();
430  Loader::init_type();
431  LoaderFileType::init_type();
432  LoaderFileTypeBam::init_type();
433  LogicOpAttrib::init_type();
434  MaterialAttrib::init_type();
435  ModelFlattenRequest::init_type();
436  ModelLoadRequest::init_type();
437  ModelSaveRequest::init_type();
438  ModelNode::init_type();
439  ModelRoot::init_type();
440  NodePath::init_type();
441  NodePathComponent::init_type();
442  PandaNode::init_type();
443  PandaNodePipelineReader::init_type();
444  ParamNodePath::init_type();
445  PlaneNode::init_type();
446  PolylightNode::init_type();
447  PolylightEffect::init_type();
448  PortalNode::init_type();
449  OccluderEffect::init_type();
450  OccluderNode::init_type();
451  PortalClipper::init_type();
452  RenderAttrib::init_type();
453  RenderEffect::init_type();
454  RenderEffects::init_type();
455  RenderModeAttrib::init_type();
456  RenderState::init_type();
457  RescaleNormalAttrib::init_type();
458  SceneSetup::init_type();
459  ScissorAttrib::init_type();
460  ScissorEffect::init_type();
461  ShadeModelAttrib::init_type();
462  ShaderAttrib::init_type();
463  ShowBoundsEffect::init_type();
464  StateMunger::init_type();
465  StencilAttrib::init_type();
466  TexMatrixAttrib::init_type();
467  TexProjectorEffect::init_type();
468  TextureAttrib::init_type();
469  TexGenAttrib::init_type();
470  TransformState::init_type();
471  TransparencyAttrib::init_type();
472 
474  AntialiasAttrib::register_with_read_factory();
475  AudioVolumeAttrib::register_with_read_factory();
477  BillboardEffect::register_with_read_factory();
486  CullFaceAttrib::register_with_read_factory();
488  DepthOffsetAttrib::register_with_read_factory();
506  OccluderEffect::register_with_read_factory();
509  RenderModeAttrib::register_with_read_factory();
512  ScissorAttrib::register_with_read_factory();
513  ScissorEffect::register_with_read_factory();
514  ShadeModelAttrib::register_with_read_factory();
515  ShaderAttrib::register_with_read_factory();
517  TexMatrixAttrib::register_with_read_factory();
518  TexProjectorEffect::register_with_read_factory();
519  TextureAttrib::register_with_read_factory();
521  TransformState::register_with_read_factory();
523 
524  // By initializing the _states map up front, we also guarantee that the
525  // _states_lock mutex gets created before we spawn any threads (assuming no
526  // one is creating threads at static init time).
527  TransformState::init_states();
530 
532 
535 }
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
static void register_with_read_factory()
Tells the BamReader how to create objects of type AlphaTestAttrib.
static void register_with_read_factory()
Tells the BamReader how to create objects of type AuxBitplaneAttrib.
static void register_with_read_factory()
Tells the BamReader how to create objects of type Camera.
Definition: camera.cxx:262
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 ColorAttrib.
static void register_with_read_factory()
Tells the BamReader how to create objects of type ColorBlendAttrib.
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 ColorWriteAttrib.
static void register_with_read_factory()
Tells the BamReader how to create objects of type CompassEffect.
This is a convenience class to specialize ConfigVariable as a boolean type.
This is a convenience class to specialize ConfigVariable as a floating- point type.
This is a convenience class to specialize ConfigVariable as an integer type.
This class is similar to ConfigVariable, but it reports its value as a list of strings.
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 CullBinAttrib.
static void register_with_read_factory()
Tells the BamReader how to create objects of type DecalEffect.
Definition: decalEffect.cxx:62
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 DepthWriteAttrib.
static void register_with_read_factory()
Tells the BamReader how to create objects of type FogAttrib.
Definition: fogAttrib.cxx:107
static void register_with_read_factory()
Tells the BamReader how to create objects of type Fog.
Definition: fog.cxx:182
static void register_with_read_factory()
Tells the BamReader how to create objects of type GeomNode.
Definition: geomNode.cxx:978
static void register_with_read_factory()
Tells the BamReader how to create objects of type LensNode.
Definition: lensNode.cxx:209
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 LightRampAttrib.
This defines the Loader interface to read Bam files.
This class maintains the set of all known LoaderFileTypes in the universe.
void register_type(LoaderFileType *type)
Defines a new LoaderFileType in the universe.
static LoaderFileTypeRegistry * get_global_ptr()
Returns a pointer to the global LoaderFileTypeRegistry object.
static void register_with_read_factory()
Tells the BamReader how to create objects of type LogicOpAttrib.
static void register_with_read_factory()
Tells the BamReader how to create objects of type MaterialAttrib.
static void register_with_read_factory()
Tells the BamReader how to create objects of type ModelNode.
Definition: modelNode.cxx:133
static void register_with_read_factory()
Tells the BamReader how to create objects of type ModelRoot.
Definition: modelRoot.cxx:33
static void register_with_read_factory()
Tells the BamReader how to create objects of type OccluderNode.
static void register_with_read_factory()
Tells the BamReader how to create objects of type PandaNode.
Definition: pandaNode.cxx:3574
static void register_with_read_factory()
Tells the BamReader how to create objects of type ParamValue.
static void register_with_read_factory()
Tells the BamReader how to create objects of type PlaneNode.
Definition: planeNode.cxx:263
static void register_with_read_factory()
Tells the BamReader how to create objects of type PolylightNode.
static void register_with_read_factory()
Tells the BamReader how to create objects of type PortalNode.
Definition: portalNode.cxx:396
static void init_attribs()
Make sure the global _attribs map is allocated.
static void init_states()
Make sure the global _states map is allocated.
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 RenderState.
static void init_states()
Make sure the global _states map is allocated.
static void register_with_read_factory()
Tells the BamReader how to create objects of type RescaleNormalAttrib.
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 TexGenAttrib.
static void register_with_read_factory()
Tells the BamReader how to create objects of type TransparencyAttrib.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
void init_libpgraph()
Initializes the library.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.