Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/world.c
| Show First 20 Lines • Show All 113 Lines • ▼ Show 20 Lines | World *add_world(Main *bmain, const char *name) | ||||
| wrld = BKE_libblock_alloc(bmain, ID_WO, name); | wrld = BKE_libblock_alloc(bmain, ID_WO, name); | ||||
| BKE_world_init(wrld); | BKE_world_init(wrld); | ||||
| return wrld; | return wrld; | ||||
| } | } | ||||
| World *BKE_world_copy(Main *bmain, const World *wrld) | /** | ||||
| * Only copy internal data of World ID from source to already allocated/initialized destination. | |||||
| * You probably nerver want to use that directly, use id_copy or BKE_id_copy_ex for typical needs. | |||||
| * | |||||
| * WARNING! This function will not handle ID user count! | |||||
| * | |||||
| * \param flag Copying options (see BKE_library.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) | |||||
| { | { | ||||
| World *wrldn; | for (int a = 0; a < MAX_MTEX; a++) { | ||||
| int a; | if (wrld_src->mtex[a]) { | ||||
| wrld_dst->mtex[a] = MEM_dupallocN(wrld_src->mtex[a]); | |||||
| wrldn = BKE_libblock_copy(bmain, &wrld->id); | |||||
| for (a = 0; a < MAX_MTEX; a++) { | |||||
| if (wrld->mtex[a]) { | |||||
| wrldn->mtex[a] = MEM_mallocN(sizeof(MTex), "BKE_world_copy"); | |||||
| memcpy(wrldn->mtex[a], wrld->mtex[a], sizeof(MTex)); | |||||
| id_us_plus((ID *)wrldn->mtex[a]->tex); | |||||
| } | } | ||||
| } | } | ||||
| if (wrld->nodetree) { | if (wrld_src->nodetree) { | ||||
| wrldn->nodetree = ntreeCopyTree(bmain, wrld->nodetree); | BKE_id_copy_ex(bmain, (ID *)wrld_src->nodetree, (ID **)&wrld_dst->nodetree, flag, false); | ||||
| } | } | ||||
| BKE_previewimg_id_copy(&wrldn->id, &wrld->id); | BLI_listbase_clear(&wrld_dst->gpumaterial); | ||||
| BLI_listbase_clear(&wrldn->gpumaterial); | |||||
| BKE_id_copy_ensure_local(bmain, &wrld->id, &wrldn->id); | if ((flag & LIB_ID_COPY_NO_PREVIEW) == 0) { | ||||
| BKE_previewimg_id_copy(&wrld_dst->id, &wrld_src->id); | |||||
| } | |||||
| else { | |||||
| wrld_dst->preview = NULL; | |||||
| } | |||||
| } | |||||
| return wrldn; | World *BKE_world_copy(Main *bmain, const World *wrld) | ||||
| { | |||||
| World *wrld_copy; | |||||
| BKE_id_copy_ex(bmain, &wrld->id, (ID **)&wrld_copy, 0, false); | |||||
| return wrld_copy; | |||||
| } | } | ||||
| World *localize_world(World *wrld) | World *localize_world(World *wrld) | ||||
| { | { | ||||
| /* TODO replace with something like | |||||
| * World *wrld_copy; | |||||
| * BKE_id_copy_ex(bmain, &wrld->id, (ID **)&wrld_copy, LIB_ID_COPY_NO_MAIN | LIB_ID_COPY_NO_PREVIEW | LIB_ID_COPY_NO_USER_REFCOUNT, false); | |||||
| * return wrld_copy; | |||||
| * | |||||
| * ... Once f*** nodes are fully converted to that too :( */ | |||||
| World *wrldn; | World *wrldn; | ||||
| int a; | int a; | ||||
| wrldn = BKE_libblock_copy_nolib(&wrld->id, false); | wrldn = BKE_libblock_copy_nolib(&wrld->id, false); | ||||
| for (a = 0; a < MAX_MTEX; a++) { | for (a = 0; a < MAX_MTEX; a++) { | ||||
| if (wrld->mtex[a]) { | if (wrld->mtex[a]) { | ||||
| wrldn->mtex[a] = MEM_mallocN(sizeof(MTex), "localize_world"); | wrldn->mtex[a] = MEM_mallocN(sizeof(MTex), "localize_world"); | ||||
| Show All 18 Lines | |||||