SceneGraphReducer

Inheritance:

Methods of SceneGraphReducer:

applyAttribs
void SceneGraphReducer::apply_attribs(PandaNode *node, int attrib_types = ((~ 0)));

Description: Walks the scene graph, accumulating attribs of the indicated types, applying them to the vertices, and removing them from the scene graph. This has a performance optimization benefit in itself, but is especially useful to pave the way for a call to flatten() and greatly improve the effectiveness of the flattening operation.
Multiply instanced geometry is duplicated before the attribs are applied.
Of course, this operation does make certain dynamic operations impossible.
Description: This flavor of apply_attribs() can be called recursively from within another flatten process (e.g. from PandaNode::apply_attribs_to_vertices()). The parameters were presumably received from a parent SceneGraphReducer object.

collectVertexData
int SceneGraphReducer::collect_vertex_data(PandaNode *root, int collect_bits = ((~ 0)));

Description: Collects all different GeomVertexData blocks that have compatible formats at this node and below into a single, unified block (or at least multiple larger blocks). This is intended to reduce rendering overhead incurred by switching vertex buffers.
The set of bits passed in collect_bits indicates which properties are used to differentiate GeomVertexData blocks. If it is 0, then more blocks will be combined together than if it is nonzero.

flatten
int SceneGraphReducer::flatten(PandaNode *root, int combine_siblings_bits);

Description: Simplifies the graph by removing unnecessary nodes and nodes.
In general, a node (and its parent node) is a candidate for removal if the node has no siblings and the node has no special properties.
If combine_siblings_bits is nonzero, some sibling nodes (according to the bits set in combine_siblings_bits) may also be collapsed into a single node. This will further reduce scene graph complexity, sometimes substantially, at the cost of reduced spatial separation.
Returns the number of nodes removed from the graph.

getCombineRadius
float SceneGraphReducer::get_combine_radius(void) const;

Description: Returns the radius that is used in conjunction with CS_within_radius. See set_combine_radius().

makeNonindexed
int SceneGraphReducer::make_nonindexed(PandaNode *root, int nonindexed_bits = ((~ 0)));

Description: Converts indexed geometry to nonindexed geometry at the indicated node and below, by duplicating vertices where necessary. The parameter nonindexed_bits is a union of bits defined in SceneGraphReducer::MakeNonindexed, which specifes which types of geometry to avoid making nonindexed.

setCombineRadius
void SceneGraphReducer::set_combine_radius(float combine_radius);

Description: Specifies the radius that is used in conjunction with CS_within_radius to decide whether a subgraph's siblings should be combined into a single node or not.
If the CS_within_radius bit is included in the combine_siblings_bits parameter passed to flatten, than any nodes whose bounding volume is smaller than the indicated radius will be combined together (as if CS_other were set).

unify
void SceneGraphReducer::unify(PandaNode *root);

Description: Calls unify() on every GeomNode at this level and below.