From c9ea02445edca2e91aec440ffde5967f03d06fe5 Mon Sep 17 00:00:00 2001 From: rdb Date: Sun, 18 Sep 2016 11:31:04 +0200 Subject: [PATCH] Fix state attribs at primitive level in bam2egg; also prevent duplication of state attribs at primitive level if possible --- panda/src/egg/eggPrimitive.I | 2 ++ panda/src/egg2pg/eggSaver.cxx | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/panda/src/egg/eggPrimitive.I b/panda/src/egg/eggPrimitive.I index 68ba3de1e3..d849d23882 100644 --- a/panda/src/egg/eggPrimitive.I +++ b/panda/src/egg/eggPrimitive.I @@ -27,6 +27,7 @@ INLINE EggPrimitive:: EggPrimitive(const EggPrimitive ©) : EggNode(copy), EggAttributes(copy), + EggRenderMode(copy), _textures(copy._textures), _material(copy._material), _bface(copy._bface) @@ -42,6 +43,7 @@ INLINE EggPrimitive &EggPrimitive:: operator = (const EggPrimitive ©) { EggNode::operator = (copy); EggAttributes::operator = (copy); + EggRenderMode::operator = (copy); copy_vertices(copy); _textures = copy._textures; _material = copy._material; diff --git a/panda/src/egg2pg/eggSaver.cxx b/panda/src/egg2pg/eggSaver.cxx index 97f564ae9b..bce14af761 100644 --- a/panda/src/egg2pg/eggSaver.cxx +++ b/panda/src/egg2pg/eggSaver.cxx @@ -640,6 +640,15 @@ convert_geom_node(GeomNode *node, const WorkingNodePath &node_path, CPT(RenderState) geom_state = node->get_geom_state(i); CPT(RenderState) geom_net_state = net_state->compose(geom_state); + // If there is only one Geom, and the node has no state, apply the state + // attributes from the Geom to the group instead, so that we don't end up + // duplicating it for a lot of primitives. + if (num_geoms == 1 && node->get_num_children() == 0 && egg_parent == egg_group && + !geom_state->is_empty() && node->get_state()->is_empty()) { + apply_state_properties(egg_group, geom_state); + geom_state = RenderState::make_empty(); + } + const Geom *geom = node->get_geom(i); int num_primitives = geom->get_num_primitives(); for (int j = 0; j < num_primitives; ++j) {