diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-12-30 13:23:06 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-12-30 13:23:06 +0400 |
commit | 50ca81154e5ead104723ba137942e92cb860ace8 (patch) | |
tree | 31c1c97893da5d6eec3d1cdc6af0f400e911391d /source/blender/editors/object/object_bake.c | |
parent | 7ee3da151d781bd3bac69958bb7d5d6b5cde125e (diff) | |
parent | 6d965f4493871c9bd4550939b8263d0c509b7c41 (diff) |
svn merge ^/trunk/blender -r42973:42991
Diffstat (limited to 'source/blender/editors/object/object_bake.c')
-rw-r--r-- | source/blender/editors/object/object_bake.c | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/source/blender/editors/object/object_bake.c b/source/blender/editors/object/object_bake.c index 16198e9e50e..c3c3f91e37d 100644 --- a/source/blender/editors/object/object_bake.c +++ b/source/blender/editors/object/object_bake.c @@ -997,9 +997,6 @@ static DerivedMesh *multiresbake_create_loresdm(Scene *scene, Object *ob, int *l *lvl= mmd->lvl; if(*lvl==0) { - - /* BMESH_TODO, baking from level zero currently doesnt give correct results */ - DerivedMesh *tmp_dm= CDDM_from_mesh(me, ob); dm= CDDM_copy(tmp_dm, 0); tmp_dm->release(tmp_dm); @@ -1062,6 +1059,7 @@ static int multiresbake_image_exec_locked(bContext *C, wmOperator *op) { Object *ob; Scene *scene= CTX_data_scene(C); + int objects_baked= 0; if(!multiresbake_check(C, op)) return OPERATOR_CANCELLED; @@ -1092,6 +1090,10 @@ static int multiresbake_image_exec_locked(bContext *C, wmOperator *op) /* create low-resolution DM (to bake to) and hi-resolution DM (to bake from) */ bkr.lores_dm= multiresbake_create_loresdm(scene, ob, &bkr.lvl); + + if(!bkr.lores_dm) + continue; + bkr.hires_dm= multiresbake_create_hiresdm(scene, ob, &bkr.tot_lvl, &bkr.simple); multiresbake_start(&bkr); @@ -1100,9 +1102,14 @@ static int multiresbake_image_exec_locked(bContext *C, wmOperator *op) bkr.lores_dm->release(bkr.lores_dm); bkr.hires_dm->release(bkr.hires_dm); + + objects_baked++; } CTX_DATA_END; + if(!objects_baked) + BKE_report(op->reports, RPT_ERROR, "No objects found to bake from"); + return OPERATOR_FINISHED; } @@ -1120,13 +1127,21 @@ static void init_multiresbake_job(bContext *C, MultiresBakeJob *bkj) CTX_DATA_BEGIN(C, Base*, base, selected_editable_bases) { MultiresBakerJobData *data; + DerivedMesh *lores_dm; + int lvl; ob= base->object; multires_force_update(ob); + lores_dm = multiresbake_create_loresdm(scene, ob, &lvl); + if(!lores_dm) + continue; + data= MEM_callocN(sizeof(MultiresBakerJobData), "multiresBaker derivedMesh_data"); - data->lores_dm = multiresbake_create_loresdm(scene, ob, &data->lvl); + data->lores_dm = lores_dm; + data->lvl = lvl; data->hires_dm = multiresbake_create_hiresdm(scene, ob, &data->tot_lvl, &data->simple); + BLI_addtail(&bkj->data, data); } CTX_DATA_END; @@ -1209,6 +1224,11 @@ static int multiresbake_image_exec(bContext *C, wmOperator *op) bkr= MEM_callocN(sizeof(MultiresBakeJob), "MultiresBakeJob data"); init_multiresbake_job(C, bkr); + if(!bkr->data.first) { + BKE_report(op->reports, RPT_ERROR, "No objects found to bake from"); + return OPERATOR_CANCELLED; + } + /* setup job */ steve= WM_jobs_get(CTX_wm_manager(C), CTX_wm_window(C), scene, "Multires Bake", WM_JOB_EXCL_RENDER|WM_JOB_PRIORITY|WM_JOB_PROGRESS); WM_jobs_customdata(steve, bkr, multiresbake_freejob); |