|
|
@@ -142,6 +142,32 @@ get_states() {
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * Returns a list of all of the "unused" RenderState objects in the state
|
|
|
+ * cache. See get_num_unused_states().
|
|
|
+ */
|
|
|
+PyObject *Extension<RenderState>::
|
|
|
+get_unused_states() {
|
|
|
+ extern struct Dtool_PyTypedObject Dtool_RenderState;
|
|
|
+ if (RenderState::_states == nullptr) {
|
|
|
+ return PyList_New(0);
|
|
|
+ }
|
|
|
+ LightReMutexHolder holder(*RenderState::_states_lock);
|
|
|
|
|
|
+ PyObject *list = PyList_New(0);
|
|
|
+ size_t size = RenderState::_states->get_num_entries();
|
|
|
+ for (size_t si = 0; si < size; ++si) {
|
|
|
+ const RenderState *state = RenderState::_states->get_key(si);
|
|
|
+ if (state->get_cache_ref_count() == state->get_ref_count()) {
|
|
|
+ state->ref();
|
|
|
+ PyObject *a =
|
|
|
+ DTool_CreatePyInstanceTyped((void *)state, Dtool_RenderState,
|
|
|
+ true, true, state->get_type_index());
|
|
|
+ PyList_Append(list, a);
|
|
|
+ Py_DECREF(a);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+}
|
|
|
|
|
|
#endif // HAVE_PYTHON
|