[Bf-blender-cvs] [fc288d39702] master: Cleanup: Move scene.c to C++
Hans Goudey
noreply at git.blender.org
Mon Mar 28 22:53:28 CEST 2022
Commit: fc288d39702aad7c37693800141b19feaf677515
Author: Hans Goudey
Date: Mon Mar 28 15:53:19 2022 -0500
Branches: master
https://developer.blender.org/rBfc288d39702aad7c37693800141b19feaf677515
Cleanup: Move scene.c to C++
This is meant to allow using C++ data structures in this file
as a performance improvement. Particularly `Vector` instead
of `ListBase` for `duplilist`. This change builds and passes
tests on all platforms on the buildbot.
===================================================================
M source/blender/blenkernel/BKE_lib_id.h
M source/blender/blenkernel/CMakeLists.txt
R090 source/blender/blenkernel/intern/scene.c source/blender/blenkernel/intern/scene.cc
M source/blender/makesdna/DNA_scene_types.h
M source/blender/render/intern/render_result.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_lib_id.h b/source/blender/blenkernel/BKE_lib_id.h
index 040be8d1280..c3122758a72 100644
--- a/source/blender/blenkernel/BKE_lib_id.h
+++ b/source/blender/blenkernel/BKE_lib_id.h
@@ -515,7 +515,7 @@ void BKE_main_id_flag_listbase(struct ListBase *lb, int flag, bool value);
void BKE_main_id_flag_all(struct Main *bmain, int flag, bool value);
/**
- * Next to indirect usage in `readfile.c/writefile.c` also in `editobject.c`, `scene.c`.
+ * Next to indirect usage in `readfile.c/writefile.c` also in `editobject.c`, `scene.cc`.
*/
void BKE_main_id_newptr_and_tag_clear(struct Main *bmain);
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index 97e11450e67..0c1601eeece 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -247,7 +247,7 @@ set(SRC
intern/preferences.c
intern/report.c
intern/rigidbody.c
- intern/scene.c
+ intern/scene.cc
intern/screen.c
intern/shader_fx.c
intern/shrinkwrap.c
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.cc
similarity index 90%
rename from source/blender/blenkernel/intern/scene.c
rename to source/blender/blenkernel/intern/scene.cc
index b98c82e365e..cebe4482eb7 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.cc
@@ -8,9 +8,9 @@
/* Allow using deprecated functionality for .blend file I/O. */
#define DNA_DEPRECATED_ALLOW
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
+#include <cstddef>
+#include <cstdio>
+#include <cstring>
#include "MEM_guardedalloc.h"
@@ -183,11 +183,11 @@ static void scene_init_data(ID *id)
/* multiview - stereo */
BKE_scene_add_render_view(scene, STEREO_LEFT_NAME);
- srv = scene->r.views.first;
+ srv = static_cast<SceneRenderView *>(scene->r.views.first);
BLI_strncpy(srv->suffix, STEREO_LEFT_SUFFIX, sizeof(srv->suffix));
BKE_scene_add_render_view(scene, STEREO_RIGHT_NAME);
- srv = scene->r.views.last;
+ srv = static_cast<SceneRenderView *>(scene->r.views.last);
BLI_strncpy(srv->suffix, STEREO_RIGHT_SUFFIX, sizeof(srv->suffix));
BKE_sound_reset_scene_runtime(scene);
@@ -218,14 +218,14 @@ static void scene_init_data(ID *id)
/* Master Collection */
scene->master_collection = BKE_collection_master_add();
- BKE_view_layer_add(scene, "ViewLayer", NULL, VIEWLAYER_ADD_NEW);
+ BKE_view_layer_add(scene, "ViewLayer", nullptr, VIEWLAYER_ADD_NEW);
}
static void scene_copy_markers(Scene *scene_dst, const Scene *scene_src, const int flag)
{
BLI_duplicatelist(&scene_dst->markers, &scene_src->markers);
LISTBASE_FOREACH (TimeMarker *, marker, &scene_dst->markers) {
- if (marker->prop != NULL) {
+ if (marker->prop != nullptr) {
marker->prop = IDP_CopyProperty_ex(marker->prop, flag);
}
}
@@ -240,9 +240,9 @@ static void scene_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int
/* We always need allocation of our private ID data. */
const int flag_private_id_data = flag & ~LIB_ID_CREATE_NO_ALLOCATE;
- scene_dst->ed = NULL;
- scene_dst->depsgraph_hash = NULL;
- scene_dst->fps_info = NULL;
+ scene_dst->ed = nullptr;
+ scene_dst->depsgraph_hash = nullptr;
+ scene_dst->fps_info = nullptr;
/* Master Collection */
if (scene_src->master_collection) {
@@ -254,8 +254,8 @@ static void scene_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int
/* View Layers */
BLI_duplicatelist(&scene_dst->view_layers, &scene_src->view_layers);
- for (ViewLayer *view_layer_src = scene_src->view_layers.first,
- *view_layer_dst = scene_dst->view_layers.first;
+ for (ViewLayer *view_layer_src = static_cast<ViewLayer *>(scene_src->view_layers.first),
+ *view_layer_dst = static_cast<ViewLayer *>(scene_dst->view_layers.first);
view_layer_src;
view_layer_src = view_layer_src->next, view_layer_dst = view_layer_dst->next) {
BKE_view_layer_copy_data(scene_dst, scene_src, view_layer_dst, view_layer_src, flag_subdata);
@@ -299,7 +299,8 @@ static void scene_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int
/* make a private copy of the avicodecdata */
if (scene_src->r.avicodecdata) {
- scene_dst->r.avicodecdata = MEM_dupallocN(scene_src->r.avicodecdata);
+ scene_dst->r.avicodecdata = static_cast<AviCodecData *>(
+ MEM_dupallocN(scene_src->r.avicodecdata));
scene_dst->r.avicodecdata->lpFormat = MEM_dupallocN(scene_dst->r.avicodecdata->lpFormat);
scene_dst->r.avicodecdata->lpParms = MEM_dupallocN(scene_dst->r.avicodecdata->lpParms);
}
@@ -312,7 +313,7 @@ static void scene_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int
/* Copy sequencer, this is local data! */
if (scene_src->ed) {
- scene_dst->ed = MEM_callocN(sizeof(*scene_dst->ed), __func__);
+ scene_dst->ed = MEM_cnew<Editing>(__func__);
scene_dst->ed->seqbasep = &scene_dst->ed->seqbase;
SEQ_sequence_base_dupli_recursive(scene_src,
scene_dst,
@@ -326,7 +327,7 @@ static void scene_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int
BKE_previewimg_id_copy(&scene_dst->id, &scene_src->id);
}
else {
- scene_dst->preview = NULL;
+ scene_dst->preview = nullptr;
}
BKE_scene_copy_data_eevee(scene_dst, scene_src);
@@ -335,7 +336,7 @@ static void scene_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int
static void scene_free_markers(Scene *scene, bool do_id_user)
{
LISTBASE_FOREACH_MUTABLE (TimeMarker *, marker, &scene->markers) {
- if (marker->prop != NULL) {
+ if (marker->prop != nullptr) {
IDP_FreePropertyContent_ex(marker->prop, do_id_user);
MEM_freeN(marker->prop);
}
@@ -357,22 +358,22 @@ static void scene_free_data(ID *id)
if (scene->nodetree) {
ntreeFreeEmbeddedTree(scene->nodetree);
MEM_freeN(scene->nodetree);
- scene->nodetree = NULL;
+ scene->nodetree = nullptr;
}
if (scene->rigidbody_world) {
/* Prevent rigidbody freeing code to follow other IDs pointers, this should never be allowed
* nor necessary from here, and with new undo code, those pointers may be fully invalid or
* worse, pointing to data actually belonging to new BMain! */
- scene->rigidbody_world->constraints = NULL;
- scene->rigidbody_world->group = NULL;
+ scene->rigidbody_world->constraints = nullptr;
+ scene->rigidbody_world->group = nullptr;
BKE_rigidbody_free_world(scene);
}
if (scene->r.avicodecdata) {
free_avicodecdata(scene->r.avicodecdata);
MEM_freeN(scene->r.avicodecdata);
- scene->r.avicodecdata = NULL;
+ scene->r.avicodecdata = nullptr;
}
scene_free_markers(scene, do_id_user);
@@ -380,7 +381,7 @@ static void scene_free_data(ID *id)
BLI_freelistN(&scene->r.views);
BKE_toolsettings_free(scene->toolsettings);
- scene->toolsettings = NULL;
+ scene->toolsettings = nullptr;
BKE_scene_free_depsgraph_hash(scene);
@@ -395,10 +396,7 @@ static void scene_free_data(ID *id)
BKE_previewimg_free(&scene->preview);
BKE_curvemapping_free_data(&scene->r.mblur_shutter_curve);
- for (ViewLayer *view_layer = scene->view_layers.first, *view_layer_next; view_layer;
- view_layer = view_layer_next) {
- view_layer_next = view_layer->next;
-
+ LISTBASE_FOREACH_MUTABLE (ViewLayer *, view_layer, &scene->view_layers) {
BLI_remlink(&scene->view_layers, view_layer);
BKE_view_layer_free_ex(view_layer, do_id_user);
}
@@ -412,21 +410,21 @@ static void scene_free_data(ID *id)
BKE_collection_free_data(scene->master_collection);
BKE_libblock_free_data_py(&scene->master_collection->id);
MEM_freeN(scene->master_collection);
- scene->master_collection = NULL;
+ scene->master_collection = nullptr;
}
if (scene->eevee.light_cache_data) {
EEVEE_lightcache_free(scene->eevee.light_cache_data);
- scene->eevee.light_cache_data = NULL;
+ scene->eevee.light_cache_data = nullptr;
}
if (scene->display.shading.prop) {
IDP_FreeProperty(scene->display.shading.prop);
- scene->display.shading.prop = NULL;
+ scene->display.shading.prop = nullptr;
}
/* These are freed on doversion. */
- BLI_assert(scene->layer_properties == NULL);
+ BLI_assert(scene->layer_properties == nullptr);
}
static void scene_foreach_rigidbodyworldSceneLooper(struct RigidBodyWorld *UNUSED(rbw),
@@ -443,14 +441,14 @@ static void scene_foreach_rigidbodyworldSceneLooper(struct RigidBodyWorld *UNUSE
* This code is shared by both the regular `foreach_id` looper, and the code trying to restore or
* preserve ID pointers like brushes across undo-steps.
*/
-typedef enum eSceneForeachUndoPreserveProcess {
+enum eSceneForeachUndoPreserveProcess {
/* Undo when preserving tool-settings from old scene, we also want to try to preserve that ID
* pointer from its old scene's value. */
SCENE_FOREACH_UNDO_RESTORE,
/* Undo when preserving tool-settings from old scene, we want to keep the new value of that ID
* pointer. */
SCENE_FOREACH_UNDO_NO_RESTORE,
-} eSceneForeachUndoPreserveProcess;
+};
static void scene_foreach_toolsettings_id_pointer_process(
ID **id_p,
@@ -464,9 +462,10 @@ static void scene_foreach_toolsettings_id_pointer_process(
ID *id_old = *id_old_p;
/* Old data has not been remapped to new values of the pointers, if we want to keep the old
* pointer here we need its new address. */
- ID *id_old_new = id_old != NULL ? BLO_read_get_new_id_address(reader, id_old->lib, id_old) :
- NULL;
- if (id_old_new != NULL) {
+ ID *id_old_new = id_old != nullptr ?
+ BLO_read_get_new_id_address(reader, id_old->lib, id_old) :
+ nullptr;
+ if (id_old_new != nullptr) {
BLI_assert(ELEM(id_old, id_old_new, id_old_new->orig_id));
*id_old_p = id_old_new;
if (cb_flag & IDWALK_CB_USER) {
@@ -489,7 +488,7 @@ static void scene_foreach_toolsettings_id_pointer_process(
/* Special handling is needed
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list