فهرست منبع

pgraph: Fix assertion error in get_num_unused_states()

Fixes #1172
rdb 4 سال پیش
والد
کامیت
1415ccca61
2فایلهای تغییر یافته به همراه17 افزوده شده و 0 حذف شده
  1. 9 0
      panda/src/pgraph/renderState.cxx
  2. 8 0
      panda/src/pgraph/transformState.cxx

+ 9 - 0
panda/src/pgraph/renderState.cxx

@@ -752,6 +752,14 @@ get_num_unused_states() {
   for (size_t si = 0; si < size; ++si) {
     const RenderState *state = _states->get_key(si);
 
+    std::pair<StateCount::iterator, bool> ir =
+      state_count.insert(StateCount::value_type(state, 1));
+    if (!ir.second) {
+      // If the above insert operation fails, then it's already in the
+      // cache; increment its value.
+      (*(ir.first)).second++;
+    }
+
     size_t i;
     size_t cache_size = state->_composition_cache.get_num_entries();
     for (i = 0; i < cache_size; ++i) {
@@ -1865,6 +1873,7 @@ init_states() {
   // is declared globally, and lives forever.
   RenderState *state = new RenderState;
   state->local_object();
+  state->cache_ref_only();
   state->_saved_entry = _states->store(state, nullptr);
   _empty_state = state;
 }

+ 8 - 0
panda/src/pgraph/transformState.cxx

@@ -1025,6 +1025,14 @@ get_num_unused_states() {
   for (size_t si = 0; si < size; ++si) {
     const TransformState *state = _states->get_key(si);
 
+    std::pair<StateCount::iterator, bool> ir =
+      state_count.insert(StateCount::value_type(state, 1));
+    if (!ir.second) {
+      // If the above insert operation fails, then it's already in the
+      // cache; increment its value.
+      (*(ir.first)).second++;
+    }
+
     size_t i;
     size_t cache_size = state->_composition_cache.get_num_entries();
     for (i = 0; i < cache_size; ++i) {