Files
test2/source/blender/depsgraph/intern/eval/deg_eval_runtime_backup.cc
Lukas Tönne 5c57e24fea Cleanup: GPv3: Remove unused BKE functions from GPv2
Removes unused GPv2 functions in blenkernel.

Notes:
-  Functions for layer masks are still in use, but annotations never
  have layer masks in the first place. Would be good to remove the data
  structures so we can remove the functions too.
- Some multi-frame edit functions are also still nominally used, but
multi-frame editing is not an active feature for annotations. This
  should also be removed.

Pull Request: https://projects.blender.org/blender/blender/pulls/128709
2024-10-09 10:27:45 +02:00

112 lines
2.7 KiB
C++

/* SPDX-FileCopyrightText: 2017 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
/** \file
* \ingroup depsgraph
*/
#include "intern/eval/deg_eval_runtime_backup.h"
#include "intern/eval/deg_eval_copy_on_write.h"
#include "BLI_utildefines.h"
#include "DRW_engine.hh"
namespace blender::deg {
RuntimeBackup::RuntimeBackup(const Depsgraph *depsgraph)
: have_backup(false),
id_data({nullptr}),
animation_backup(depsgraph),
scene_backup(depsgraph),
sound_backup(depsgraph),
object_backup(depsgraph),
drawdata_ptr(nullptr),
movieclip_backup(depsgraph),
volume_backup(depsgraph)
{
drawdata_backup.first = drawdata_backup.last = nullptr;
}
void RuntimeBackup::init_from_id(ID *id)
{
if (!deg_eval_copy_is_expanded(id)) {
return;
}
have_backup = true;
/* Clear, so freeing the expanded data doesn't touch this Python reference. */
id_data.py_instance = id->py_instance;
id->py_instance = nullptr;
animation_backup.init_from_id(id);
const ID_Type id_type = GS(id->name);
switch (id_type) {
case ID_OB:
object_backup.init_from_object(reinterpret_cast<Object *>(id));
break;
case ID_SCE:
scene_backup.init_from_scene(reinterpret_cast<Scene *>(id));
break;
case ID_SO:
sound_backup.init_from_sound(reinterpret_cast<bSound *>(id));
break;
case ID_MC:
movieclip_backup.init_from_movieclip(reinterpret_cast<MovieClip *>(id));
break;
case ID_VO:
volume_backup.init_from_volume(reinterpret_cast<Volume *>(id));
break;
default:
break;
}
/* Note that we never free GPU draw data from here since that's not
* safe for threading and draw data is likely to be re-used. */
drawdata_ptr = DRW_drawdatalist_from_id(id);
if (drawdata_ptr != nullptr) {
drawdata_backup = *drawdata_ptr;
drawdata_ptr->first = drawdata_ptr->last = nullptr;
}
}
void RuntimeBackup::restore_to_id(ID *id)
{
if (!have_backup) {
return;
}
id->py_instance = id_data.py_instance;
animation_backup.restore_to_id(id);
const ID_Type id_type = GS(id->name);
switch (id_type) {
case ID_OB:
object_backup.restore_to_object(reinterpret_cast<Object *>(id));
break;
case ID_SCE:
scene_backup.restore_to_scene(reinterpret_cast<Scene *>(id));
break;
case ID_SO:
sound_backup.restore_to_sound(reinterpret_cast<bSound *>(id));
break;
case ID_MC:
movieclip_backup.restore_to_movieclip(reinterpret_cast<MovieClip *>(id));
break;
case ID_VO:
volume_backup.restore_to_volume(reinterpret_cast<Volume *>(id));
break;
default:
break;
}
if (drawdata_ptr != nullptr) {
*drawdata_ptr = drawdata_backup;
}
}
} // namespace blender::deg