diff --git a/panda/src/chan/animBundleNode.cxx b/panda/src/chan/animBundleNode.cxx index f6fab7a110..7b5286ff82 100644 --- a/panda/src/chan/animBundleNode.cxx +++ b/panda/src/chan/animBundleNode.cxx @@ -68,6 +68,19 @@ find_anim_bundle(PandaNode *root) { return nullptr; } +/** + * + */ +void AnimBundleNode:: +output(std::ostream &out) const { + PandaNode::output(out); + if (_bundle != nullptr) { + out << " ("; + _bundle->output(out); + out << ")"; + } +} + /** * Tells the BamReader how to create objects of type AnimBundleNode. */ diff --git a/panda/src/chan/animBundleNode.h b/panda/src/chan/animBundleNode.h index 6152d37707..2a334036ab 100644 --- a/panda/src/chan/animBundleNode.h +++ b/panda/src/chan/animBundleNode.h @@ -49,6 +49,8 @@ private: PT(AnimBundle) _bundle; public: + virtual void output(std::ostream &out) const; + static void register_with_read_factory(); virtual void write_datagram(BamWriter* manager, Datagram &me); virtual int complete_pointers(TypedWritable **p_list, diff --git a/panda/src/mathutil/triangulator.cxx b/panda/src/mathutil/triangulator.cxx index fabfe31147..da29f022be 100644 --- a/panda/src/mathutil/triangulator.cxx +++ b/panda/src/mathutil/triangulator.cxx @@ -2185,6 +2185,8 @@ triangulate_single_polygon(int nvert, int posmax, int side) { endv = mchain[posmax].vnum; } + int num_triangles = 0; + while ((v != endv) || (ri > 1)) { // cerr << " v = " << v << " ri = " << ri << " rc = " << rc.size() << " @@ -2199,8 +2201,13 @@ triangulate_single_polygon(int nvert, int posmax, int side) { vert[rc[ri]].pt); if ( crossResult >= 0 ) /* could be convex corner or straight */ { - if ( crossResult > 0) /* convex corner: cut it off */ + if (crossResult > 0) { /* convex corner: cut it off */ _result.push_back(Triangle(this, rc[ri - 1], rc[ri], v)); + if (++num_triangles >= nvert - 2) { + // We can't generate more than this number of triangles. + return; + } + } /* else : perfectly straight, will be abandoned anyway */ ri--; rc.pop_back();