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
112 lines
2.7 KiB
C++
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
|