Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/object/object_bake.c
| Show First 20 Lines • Show All 91 Lines • ▼ Show 20 Lines | |||||
| typedef struct MultiresBakerJobData { | typedef struct MultiresBakerJobData { | ||||
| struct MultiresBakerJobData *next, *prev; | struct MultiresBakerJobData *next, *prev; | ||||
| /* material aligned image array (for per-face bake image) */ | /* material aligned image array (for per-face bake image) */ | ||||
| struct { | struct { | ||||
| Image **array; | Image **array; | ||||
| int len; | int len; | ||||
| } ob_image; | } ob_image; | ||||
| DerivedMesh *lores_dm, *hires_dm; | DerivedMesh *lores_dm, *hires_dm; | ||||
| bool simple; | |||||
| int lvl, tot_lvl; | int lvl, tot_lvl; | ||||
| ListBase images; | ListBase images; | ||||
| } MultiresBakerJobData; | } MultiresBakerJobData; | ||||
| /* data passing to multires-baker job */ | /* data passing to multires-baker job */ | ||||
| typedef struct { | typedef struct { | ||||
| Scene *scene; | Scene *scene; | ||||
| ListBase data; | ListBase data; | ||||
| ▲ Show 20 Lines • Show All 133 Lines • ▼ Show 20 Lines | static DerivedMesh *multiresbake_create_loresdm(Scene *scene, Object *ob, int *lvl) | ||||
| cddm->release(cddm); | cddm->release(cddm); | ||||
| *lvl = mmd->lvl; | *lvl = mmd->lvl; | ||||
| return dm; | return dm; | ||||
| } | } | ||||
| static DerivedMesh *multiresbake_create_hiresdm(Scene *scene, Object *ob, int *lvl, bool *simple) | static DerivedMesh *multiresbake_create_hiresdm(Scene *scene, Object *ob, int *lvl) | ||||
| { | { | ||||
| Mesh *me = (Mesh *)ob->data; | Mesh *me = (Mesh *)ob->data; | ||||
| MultiresModifierData *mmd = get_multires_modifier(scene, ob, 0); | MultiresModifierData *mmd = get_multires_modifier(scene, ob, 0); | ||||
| MultiresModifierData tmp_mmd = *mmd; | MultiresModifierData tmp_mmd = *mmd; | ||||
| DerivedMesh *cddm = CDDM_from_mesh(me); | DerivedMesh *cddm = CDDM_from_mesh(me); | ||||
| DerivedMesh *dm; | DerivedMesh *dm; | ||||
| DM_set_only_copy(cddm, &CD_MASK_BAREMESH); | DM_set_only_copy(cddm, &CD_MASK_BAREMESH); | ||||
| /* TODO: DM_set_only_copy wouldn't set mask for loop and poly data, | /* TODO: DM_set_only_copy wouldn't set mask for loop and poly data, | ||||
| * but we really need BAREMESH only to save lots of memory | * but we really need BAREMESH only to save lots of memory | ||||
| */ | */ | ||||
| CustomData_set_only_copy(&cddm->loopData, CD_MASK_BAREMESH.lmask); | CustomData_set_only_copy(&cddm->loopData, CD_MASK_BAREMESH.lmask); | ||||
| CustomData_set_only_copy(&cddm->polyData, CD_MASK_BAREMESH.pmask); | CustomData_set_only_copy(&cddm->polyData, CD_MASK_BAREMESH.pmask); | ||||
| *lvl = mmd->totlvl; | *lvl = mmd->totlvl; | ||||
| *simple = mmd->simple != 0; | |||||
| tmp_mmd.lvl = mmd->totlvl; | tmp_mmd.lvl = mmd->totlvl; | ||||
| tmp_mmd.sculptlvl = mmd->totlvl; | tmp_mmd.sculptlvl = mmd->totlvl; | ||||
| dm = multires_make_derived_from_derived(cddm, &tmp_mmd, scene, ob, 0); | dm = multires_make_derived_from_derived(cddm, &tmp_mmd, scene, ob, 0); | ||||
| cddm->release(cddm); | cddm->release(cddm); | ||||
| return dm; | return dm; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 105 Lines • ▼ Show 20 Lines | CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { | ||||
| bkr.threads = BKE_scene_num_threads(scene); | bkr.threads = BKE_scene_num_threads(scene); | ||||
| bkr.user_scale = (scene->r.bake_flag & R_BAKE_USERSCALE) ? scene->r.bake_user_scale : -1.0f; | bkr.user_scale = (scene->r.bake_flag & R_BAKE_USERSCALE) ? scene->r.bake_user_scale : -1.0f; | ||||
| // bkr.reports= op->reports; | // bkr.reports= op->reports; | ||||
| /* create low-resolution DM (to bake to) and hi-resolution DM (to bake from) */ | /* create low-resolution DM (to bake to) and hi-resolution DM (to bake from) */ | ||||
| bkr.ob_image.array = bake_object_image_get_array(ob); | bkr.ob_image.array = bake_object_image_get_array(ob); | ||||
| bkr.ob_image.len = ob->totcol; | bkr.ob_image.len = ob->totcol; | ||||
| bkr.hires_dm = multiresbake_create_hiresdm(scene, ob, &bkr.tot_lvl, &bkr.simple); | bkr.hires_dm = multiresbake_create_hiresdm(scene, ob, &bkr.tot_lvl); | ||||
| bkr.lores_dm = multiresbake_create_loresdm(scene, ob, &bkr.lvl); | bkr.lores_dm = multiresbake_create_loresdm(scene, ob, &bkr.lvl); | ||||
| RE_multires_bake_images(&bkr); | RE_multires_bake_images(&bkr); | ||||
| MEM_freeN(bkr.ob_image.array); | MEM_freeN(bkr.ob_image.array); | ||||
| BLI_freelistN(&bkr.image); | BLI_freelistN(&bkr.image); | ||||
| Show All 38 Lines | CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { | ||||
| multires_flush_sculpt_updates(ob); | multires_flush_sculpt_updates(ob); | ||||
| data = MEM_callocN(sizeof(MultiresBakerJobData), "multiresBaker derivedMesh_data"); | data = MEM_callocN(sizeof(MultiresBakerJobData), "multiresBaker derivedMesh_data"); | ||||
| data->ob_image.array = bake_object_image_get_array(ob); | data->ob_image.array = bake_object_image_get_array(ob); | ||||
| data->ob_image.len = ob->totcol; | data->ob_image.len = ob->totcol; | ||||
| /* create low-resolution DM (to bake to) and hi-resolution DM (to bake from) */ | /* create low-resolution DM (to bake to) and hi-resolution DM (to bake from) */ | ||||
| data->hires_dm = multiresbake_create_hiresdm(scene, ob, &data->tot_lvl, &data->simple); | data->hires_dm = multiresbake_create_hiresdm(scene, ob, &data->tot_lvl); | ||||
| data->lores_dm = multiresbake_create_loresdm(scene, ob, &lvl); | data->lores_dm = multiresbake_create_loresdm(scene, ob, &lvl); | ||||
| data->lvl = lvl; | data->lvl = lvl; | ||||
| BLI_addtail(&bkj->data, data); | BLI_addtail(&bkj->data, data); | ||||
| } | } | ||||
| CTX_DATA_END; | CTX_DATA_END; | ||||
| } | } | ||||
| Show All 33 Lines | for (data = bkj->data.first; data; data = data->next) { | ||||
| bkr.ob_image.array = data->ob_image.array; | bkr.ob_image.array = data->ob_image.array; | ||||
| bkr.ob_image.len = data->ob_image.len; | bkr.ob_image.len = data->ob_image.len; | ||||
| /* create low-resolution DM (to bake to) and hi-resolution DM (to bake from) */ | /* create low-resolution DM (to bake to) and hi-resolution DM (to bake from) */ | ||||
| bkr.lores_dm = data->lores_dm; | bkr.lores_dm = data->lores_dm; | ||||
| bkr.hires_dm = data->hires_dm; | bkr.hires_dm = data->hires_dm; | ||||
| bkr.tot_lvl = data->tot_lvl; | bkr.tot_lvl = data->tot_lvl; | ||||
| bkr.lvl = data->lvl; | bkr.lvl = data->lvl; | ||||
| bkr.simple = data->simple; | |||||
| /* needed for proper progress bar */ | /* needed for proper progress bar */ | ||||
| bkr.tot_obj = tot_obj; | bkr.tot_obj = tot_obj; | ||||
| bkr.baked_objects = baked_objects; | bkr.baked_objects = baked_objects; | ||||
| bkr.stop = stop; | bkr.stop = stop; | ||||
| bkr.do_update = do_update; | bkr.do_update = do_update; | ||||
| bkr.progress = progress; | bkr.progress = progress; | ||||
| ▲ Show 20 Lines • Show All 151 Lines • Show Last 20 Lines | |||||