From e96b1035364122178d5fcec7cf4d4bab7c8cb051 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 6 Mar 2020 11:51:17 +0100 Subject: Cleanup: move camera, lights, world to IDTypeInfo --- source/blender/blenkernel/intern/camera.c | 45 ++++++++++++++++++------ source/blender/blenkernel/intern/idtype.c | 33 +++++++++++++++++ source/blender/blenkernel/intern/lib_id.c | 32 +++++++---------- source/blender/blenkernel/intern/lib_id_delete.c | 8 ++--- source/blender/blenkernel/intern/light.c | 37 +++++++++++++++---- source/blender/blenkernel/intern/lightprobe.c | 40 +++++++++++++++------ source/blender/blenkernel/intern/world.c | 39 +++++++++++++++----- 7 files changed, 174 insertions(+), 60 deletions(-) (limited to 'source/blender/blenkernel/intern') diff --git a/source/blender/blenkernel/intern/camera.c b/source/blender/blenkernel/intern/camera.c index e21e093517e..d2829bc1cd6 100644 --- a/source/blender/blenkernel/intern/camera.c +++ b/source/blender/blenkernel/intern/camera.c @@ -40,6 +40,7 @@ #include "BKE_animsys.h" #include "BKE_camera.h" +#include "BKE_idtype.h" #include "BKE_object.h" #include "BKE_layer.h" #include "BKE_lib_id.h" @@ -47,14 +48,17 @@ #include "BKE_scene.h" #include "BKE_screen.h" +#include "BLT_translation.h" + #include "DEG_depsgraph_query.h" #include "MEM_guardedalloc.h" /****************************** Camera Datablock *****************************/ -void BKE_camera_init(Camera *cam) +static void camera_init_data(ID *id) { + Camera *cam = (Camera *)id; BLI_assert(MEMCMP_STRUCT_AFTER_IS_ZERO(cam, id)); MEMCPY_STRUCT_AFTER(cam, DNA_struct_default_get(Camera), id); @@ -66,7 +70,7 @@ void *BKE_camera_add(Main *bmain, const char *name) cam = BKE_libblock_alloc(bmain, ID_CA, name, 0); - BKE_camera_init(cam); + camera_init_data(&cam->id); return cam; } @@ -81,11 +85,13 @@ void *BKE_camera_add(Main *bmain, const char *name) * * \param flag: Copying options (see BKE_lib_id.h's LIB_ID_COPY_... flags for more). */ -void BKE_camera_copy_data(Main *UNUSED(bmain), - Camera *cam_dst, - const Camera *cam_src, - const int UNUSED(flag)) +static void camera_copy_data(Main *UNUSED(bmain), + ID *id_dst, + const ID *id_src, + const int UNUSED(flag)) { + Camera *cam_dst = (Camera *)id_dst; + const Camera *cam_src = (const Camera *)id_src; BLI_duplicatelist(&cam_dst->bg_images, &cam_src->bg_images); } @@ -96,19 +102,36 @@ Camera *BKE_camera_copy(Main *bmain, const Camera *cam) return cam_copy; } -void BKE_camera_make_local(Main *bmain, Camera *cam, const int flags) +static void camera_make_local(Main *bmain, ID *id, const int flags) { - BKE_lib_id_make_local_generic(bmain, &cam->id, flags); + BKE_lib_id_make_local_generic(bmain, id, flags); } /** Free (or release) any data used by this camera (does not free the camera itself). */ -void BKE_camera_free(Camera *ca) +static void camera_free_data(ID *id) { - BLI_freelistN(&ca->bg_images); + Camera *cam = (Camera *)id; + BLI_freelistN(&cam->bg_images); - BKE_animdata_free((ID *)ca, false); + BKE_animdata_free(id, false); } +IDTypeInfo IDType_ID_CA = { + .id_code = ID_CA, + .id_filter = FILTER_ID_CA, + .main_listbase_index = INDEX_ID_CA, + .struct_size = sizeof(Camera), + .name = "Camera", + .name_plural = "cameras", + .translation_context = BLT_I18NCONTEXT_ID_CAMERA, + .flags = 0, + + .init_data = camera_init_data, + .copy_data = camera_copy_data, + .free_data = camera_free_data, + .make_local = camera_make_local, +}; + /******************************** Camera Usage *******************************/ /* get the camera's dof value, takes the dof object into account */ diff --git a/source/blender/blenkernel/intern/idtype.c b/source/blender/blenkernel/intern/idtype.c index 1453234d577..2193ff2165c 100644 --- a/source/blender/blenkernel/intern/idtype.c +++ b/source/blender/blenkernel/intern/idtype.c @@ -54,6 +54,39 @@ static void id_type_init(void) INIT_TYPE(ID_SCE); INIT_TYPE(ID_LI); INIT_TYPE(ID_OB); + // INIT_TYPE(ID_ME); + // INIT_TYPE(ID_CU); + // INIT_TYPE(ID_MB); + // INIT_TYPE(ID_MA); + // INIT_TYPE(ID_TE); + // INIT_TYPE(ID_IM); + // INIT_TYPE(ID_LT); + INIT_TYPE(ID_LA); + INIT_TYPE(ID_CA); + // INIT_TYPE(ID_IP); + // INIT_TYPE(ID_KE); + INIT_TYPE(ID_WO); + // INIT_TYPE(ID_SCR); + // INIT_TYPE(ID_VF); + // INIT_TYPE(ID_TXT); + // INIT_TYPE(ID_SPK); + // INIT_TYPE(ID_SO); + // INIT_TYPE(ID_GR); + // INIT_TYPE(ID_AR); + // INIT_TYPE(ID_AC); + // INIT_TYPE(ID_NT); + // INIT_TYPE(ID_BR); + // INIT_TYPE(ID_PA); + // INIT_TYPE(ID_GD); + // INIT_TYPE(ID_WM); + // INIT_TYPE(ID_MC); + // INIT_TYPE(ID_MSK); + // INIT_TYPE(ID_LS); + // INIT_TYPE(ID_PAL); + // INIT_TYPE(ID_PC); + // INIT_TYPE(ID_CF); + // INIT_TYPE(ID_WS); + INIT_TYPE(ID_LP); #undef INIT_TYPE } diff --git a/source/blender/blenkernel/intern/lib_id.c b/source/blender/blenkernel/intern/lib_id.c index b66007ceac4..01d6bb1077d 100644 --- a/source/blender/blenkernel/intern/lib_id.c +++ b/source/blender/blenkernel/intern/lib_id.c @@ -508,14 +508,10 @@ bool BKE_lib_id_make_local(Main *bmain, ID *id, const bool test, const int flags } return true; case ID_LA: - if (!test) { - BKE_light_make_local(bmain, (Light *)id, flags); - } + BLI_assert(0); return true; case ID_CA: - if (!test) { - BKE_camera_make_local(bmain, (Camera *)id, flags); - } + BLI_assert(0); return true; case ID_SPK: if (!test) { @@ -523,14 +519,10 @@ bool BKE_lib_id_make_local(Main *bmain, ID *id, const bool test, const int flags } return true; case ID_LP: - if (!test) { - BKE_lightprobe_make_local(bmain, (LightProbe *)id, flags); - } + BLI_assert(0); return true; case ID_WO: - if (!test) { - BKE_world_make_local(bmain, (World *)id, flags); - } + BLI_assert(0); return true; case ID_VF: if (!test) { @@ -753,22 +745,22 @@ bool BKE_id_copy_ex(Main *bmain, const ID *id, ID **r_newid, const int flag) BKE_lattice_copy_data(bmain, (Lattice *)*r_newid, (Lattice *)id, flag); break; case ID_LA: - BKE_light_copy_data(bmain, (Light *)*r_newid, (Light *)id, flag); + BLI_assert(0); break; case ID_SPK: BKE_speaker_copy_data(bmain, (Speaker *)*r_newid, (Speaker *)id, flag); break; case ID_LP: - BKE_lightprobe_copy_data(bmain, (LightProbe *)*r_newid, (LightProbe *)id, flag); + BLI_assert(0); break; case ID_CA: - BKE_camera_copy_data(bmain, (Camera *)*r_newid, (Camera *)id, flag); + BLI_assert(0); break; case ID_KE: BKE_key_copy_data(bmain, (Key *)*r_newid, (Key *)id, flag); break; case ID_WO: - BKE_world_copy_data(bmain, (World *)*r_newid, (World *)id, flag); + BLI_assert(0); break; case ID_TXT: BKE_text_copy_data(bmain, (Text *)*r_newid, (Text *)id, flag); @@ -1374,19 +1366,19 @@ void BKE_libblock_init_empty(ID *id) BKE_lattice_init((Lattice *)id); break; case ID_LA: - BKE_light_init((Light *)id); + BLI_assert(0); break; case ID_SPK: BKE_speaker_init((Speaker *)id); break; case ID_LP: - BKE_lightprobe_init((LightProbe *)id); + BLI_assert(0); break; case ID_CA: - BKE_camera_init((Camera *)id); + BLI_assert(0); break; case ID_WO: - BKE_world_init((World *)id); + BLI_assert(0); break; case ID_SCR: /* Nothing to do. */ diff --git a/source/blender/blenkernel/intern/lib_id_delete.c b/source/blender/blenkernel/intern/lib_id_delete.c index e311dd2ef03..7d5f5c55ead 100644 --- a/source/blender/blenkernel/intern/lib_id_delete.c +++ b/source/blender/blenkernel/intern/lib_id_delete.c @@ -167,10 +167,10 @@ void BKE_libblock_free_datablock(ID *id, const int UNUSED(flag)) BKE_lattice_free((Lattice *)id); break; case ID_LA: - BKE_light_free((Light *)id); + BLI_assert(0); break; case ID_CA: - BKE_camera_free((Camera *)id); + BLI_assert(0); break; case ID_IP: /* Deprecated. */ BKE_ipo_free((Ipo *)id); @@ -179,7 +179,7 @@ void BKE_libblock_free_datablock(ID *id, const int UNUSED(flag)) BKE_key_free((Key *)id); break; case ID_WO: - BKE_world_free((World *)id); + BLI_assert(0); break; case ID_SCR: BKE_screen_free((bScreen *)id); @@ -194,7 +194,7 @@ void BKE_libblock_free_datablock(ID *id, const int UNUSED(flag)) BKE_speaker_free((Speaker *)id); break; case ID_LP: - BKE_lightprobe_free((LightProbe *)id); + BLI_assert(0); break; case ID_SO: BKE_sound_free((bSound *)id); diff --git a/source/blender/blenkernel/intern/light.c b/source/blender/blenkernel/intern/light.c index 7f8626df409..d37e0af1ce2 100644 --- a/source/blender/blenkernel/intern/light.c +++ b/source/blender/blenkernel/intern/light.c @@ -40,13 +40,17 @@ #include "BKE_animsys.h" #include "BKE_colortools.h" #include "BKE_icons.h" +#include "BKE_idtype.h" #include "BKE_light.h" #include "BKE_lib_id.h" #include "BKE_main.h" #include "BKE_node.h" -void BKE_light_init(Light *la) +#include "BLT_translation.h" + +static void light_init_data(ID *id) { + Light *la = (Light *)id; BLI_assert(MEMCMP_STRUCT_AFTER_IS_ZERO(la, id)); MEMCPY_STRUCT_AFTER(la, DNA_struct_default_get(Light), id); @@ -61,7 +65,7 @@ Light *BKE_light_add(Main *bmain, const char *name) la = BKE_libblock_alloc(bmain, ID_LA, name, 0); - BKE_light_init(la); + light_init_data(&la->id); return la; } @@ -76,8 +80,10 @@ Light *BKE_light_add(Main *bmain, const char *name) * * \param flag: Copying options (see BKE_lib_id.h's LIB_ID_COPY_... flags for more). */ -void BKE_light_copy_data(Main *bmain, Light *la_dst, const Light *la_src, const int flag) +static void light_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int flag) { + Light *la_dst = (Light *)id_dst; + const Light *la_src = (const Light *)id_src; /* We always need allocation of our private ID data. */ const int flag_private_id_data = flag & ~LIB_ID_CREATE_NO_ALLOCATE; @@ -129,14 +135,15 @@ Light *BKE_light_localize(Light *la) return lan; } -void BKE_light_make_local(Main *bmain, Light *la, const int flags) +static void light_make_local(Main *bmain, ID *id, const int flags) { - BKE_lib_id_make_local_generic(bmain, &la->id, flags); + BKE_lib_id_make_local_generic(bmain, id, flags); } -void BKE_light_free(Light *la) +static void light_free_data(ID *id) { - BKE_animdata_free((ID *)la, false); + Light *la = (Light *)id; + BKE_animdata_free(&la->id, false); BKE_curvemapping_free(la->curfalloff); @@ -151,3 +158,19 @@ void BKE_light_free(Light *la) BKE_icon_id_delete(&la->id); la->id.icon_id = 0; } + +IDTypeInfo IDType_ID_LA = { + .id_code = ID_LA, + .id_filter = FILTER_ID_LA, + .main_listbase_index = INDEX_ID_LA, + .struct_size = sizeof(Light), + .name = "Light", + .name_plural = "lights", + .translation_context = BLT_I18NCONTEXT_ID_LIGHT, + .flags = 0, + + .init_data = light_init_data, + .copy_data = light_copy_data, + .free_data = light_free_data, + .make_local = light_make_local, +}; diff --git a/source/blender/blenkernel/intern/lightprobe.c b/source/blender/blenkernel/intern/lightprobe.c index 55e7b90d8cf..f360edfbf54 100644 --- a/source/blender/blenkernel/intern/lightprobe.c +++ b/source/blender/blenkernel/intern/lightprobe.c @@ -30,12 +30,16 @@ #include "BLI_utildefines.h" #include "BKE_animsys.h" +#include "BKE_idtype.h" #include "BKE_lib_id.h" #include "BKE_lightprobe.h" #include "BKE_main.h" -void BKE_lightprobe_init(LightProbe *probe) +#include "BLT_translation.h" + +static void lightprobe_init_data(ID *id) { + LightProbe *probe = (LightProbe *)id; BLI_assert(MEMCMP_STRUCT_AFTER_IS_ZERO(probe, id)); MEMCPY_STRUCT_AFTER(probe, DNA_struct_default_get(LightProbe), id); @@ -71,7 +75,7 @@ void *BKE_lightprobe_add(Main *bmain, const char *name) probe = BKE_libblock_alloc(bmain, ID_LP, name, 0); - BKE_lightprobe_init(probe); + lightprobe_init_data(&probe->id); return probe; } @@ -86,10 +90,10 @@ void *BKE_lightprobe_add(Main *bmain, const char *name) * * \param flag: Copying options (see BKE_lib_id.h's LIB_ID_COPY_... flags for more). */ -void BKE_lightprobe_copy_data(Main *UNUSED(bmain), - LightProbe *UNUSED(probe_dst), - const LightProbe *UNUSED(probe_src), - const int UNUSED(flag)) +static void lightprobe_copy_data(Main *UNUSED(bmain), + ID *UNUSED(id_dst), + const ID *UNUSED(id_src), + const int UNUSED(flag)) { /* Nothing to do here. */ } @@ -101,12 +105,28 @@ LightProbe *BKE_lightprobe_copy(Main *bmain, const LightProbe *probe) return probe_copy; } -void BKE_lightprobe_make_local(Main *bmain, LightProbe *probe, const int flags) +static void lightprobe_make_local(Main *bmain, ID *id, const int flags) { - BKE_lib_id_make_local_generic(bmain, &probe->id, flags); + BKE_lib_id_make_local_generic(bmain, id, flags); } -void BKE_lightprobe_free(LightProbe *probe) +static void lightprobe_free_data(ID *id) { - BKE_animdata_free((ID *)probe, false); + BKE_animdata_free(id, false); } + +IDTypeInfo IDType_ID_LP = { + .id_code = ID_LP, + .id_filter = FILTER_ID_LP, + .main_listbase_index = INDEX_ID_LP, + .struct_size = sizeof(LightProbe), + .name = "LightProbe", + .name_plural = "lightprobes", + .translation_context = BLT_I18NCONTEXT_ID_LIGHTPROBE, + .flags = 0, + + .init_data = lightprobe_init_data, + .copy_data = lightprobe_copy_data, + .free_data = lightprobe_free_data, + .make_local = lightprobe_make_local, +}; diff --git a/source/blender/blenkernel/intern/world.c b/source/blender/blenkernel/intern/world.c index f8ba4e3085e..398e53d6cda 100644 --- a/source/blender/blenkernel/intern/world.c +++ b/source/blender/blenkernel/intern/world.c @@ -37,11 +37,14 @@ #include "BKE_animsys.h" #include "BKE_icons.h" +#include "BKE_idtype.h" #include "BKE_lib_id.h" #include "BKE_main.h" #include "BKE_node.h" #include "BKE_world.h" +#include "BLT_translation.h" + #include "DRW_engine.h" #include "DEG_depsgraph.h" @@ -49,11 +52,12 @@ #include "GPU_material.h" /** Free (or release) any data used by this world (does not free the world itself). */ -void BKE_world_free(World *wrld) +static void world_free_data(ID *id) { - BKE_animdata_free((ID *)wrld, false); + World *wrld = (World *)id; + BKE_animdata_free(id, false); - DRW_drawdata_free((ID *)wrld); + DRW_drawdata_free(id); /* is no lib link block, but world extension */ if (wrld->nodetree) { @@ -68,8 +72,9 @@ void BKE_world_free(World *wrld) BKE_previewimg_free(&wrld->preview); } -void BKE_world_init(World *wrld) +static void world_init_data(ID *id) { + World *wrld = (World *)id; BLI_assert(MEMCMP_STRUCT_AFTER_IS_ZERO(wrld, id)); MEMCPY_STRUCT_AFTER(wrld, DNA_struct_default_get(World), id); @@ -81,7 +86,7 @@ World *BKE_world_add(Main *bmain, const char *name) wrld = BKE_libblock_alloc(bmain, ID_WO, name, 0); - BKE_world_init(wrld); + world_init_data(&wrld->id); return wrld; } @@ -96,8 +101,10 @@ World *BKE_world_add(Main *bmain, const char *name) * * \param flag: Copying options (see BKE_lib_id.h's LIB_ID_COPY_... flags for more). */ -void BKE_world_copy_data(Main *bmain, World *wrld_dst, const World *wrld_src, const int flag) +static void world_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int flag) { + World *wrld_dst = (World *)id_dst; + const World *wrld_src = (const World *)id_src; /* We always need allocation of our private ID data. */ const int flag_private_id_data = flag & ~LIB_ID_CREATE_NO_ALLOCATE; @@ -154,11 +161,27 @@ World *BKE_world_localize(World *wrld) return wrldn; } -void BKE_world_make_local(Main *bmain, World *wrld, const int flags) +static void world_make_local(Main *bmain, ID *id, const int flags) { - BKE_lib_id_make_local_generic(bmain, &wrld->id, flags); + BKE_lib_id_make_local_generic(bmain, id, flags); } +IDTypeInfo IDType_ID_WO = { + .id_code = ID_WO, + .id_filter = FILTER_ID_WO, + .main_listbase_index = INDEX_ID_WO, + .struct_size = sizeof(World), + .name = "World", + .name_plural = "worlds", + .translation_context = BLT_I18NCONTEXT_ID_WORLD, + .flags = 0, + + .init_data = world_init_data, + .copy_data = world_copy_data, + .free_data = world_free_data, + .make_local = world_make_local, +}; + void BKE_world_eval(struct Depsgraph *depsgraph, World *world) { DEG_debug_print_eval(depsgraph, __func__, world->id.name, world); -- cgit v1.2.3