diff --git a/src/mods/VR.hpp b/src/mods/VR.hpp index 8da9f24a..0cf532e7 100644 --- a/src/mods/VR.hpp +++ b/src/mods/VR.hpp @@ -224,6 +224,14 @@ class VR : public Mod { void unhide_crosshair() { m_last_crosshair_hide = std::chrono::steady_clock::now(); } + + void notify_camera_destroyed(RECamera* camera) { + for (auto& existing_camera : m_multipass_cameras) { + if (existing_camera == camera) { + existing_camera = nullptr; + } + } + } void set_multipass_camera(RECamera* camera, uint32_t index) { if (index >= 2) { diff --git a/src/mods/vr/CameraDuplicator.cpp b/src/mods/vr/CameraDuplicator.cpp index e8755dfe..ba10a319 100644 --- a/src/mods/vr/CameraDuplicator.cpp +++ b/src/mods/vr/CameraDuplicator.cpp @@ -36,6 +36,8 @@ void CameraDuplicator::on_pre_application_entry(void* entry, const char* name, s } for (auto camera : cameras_to_remove) { + VR::get()->notify_camera_destroyed((RECamera*)camera); + m_new_cameras.erase((RECamera*)camera); m_old_cameras.erase((RECamera*)camera); m_seen_cameras.erase((RECamera*)camera); @@ -326,6 +328,12 @@ void CameraDuplicator::clone_camera() { m_called_activate = true; m_identified_new_cameras = true; + + // Destroy our existing property jobs so we don't work with stale data + m_getter_setters.clear(); + m_property_jobs.clear(); + m_property_jobs_index = 0; + /*m_identified_new_cameras = false; m_waiting_for_identify = true;