Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2011-12-30 13:23:06 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-12-30 13:23:06 +0400
commit50ca81154e5ead104723ba137942e92cb860ace8 (patch)
tree31c1c97893da5d6eec3d1cdc6af0f400e911391d /source/blender/editors/object/object_bake.c
parent7ee3da151d781bd3bac69958bb7d5d6b5cde125e (diff)
parent6d965f4493871c9bd4550939b8263d0c509b7c41 (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.c28
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);