New object API function : BKE_object_eval_reset()

This restores the object->data to a non-modifier evaluated state.

So this allow us to change evaluated object modifier stack directly and
get BKE_mesh_new_from_object() for the evalauted object.
This commit is contained in:
Dalai Felinto
2018-12-14 08:40:33 -02:00
parent 10508338d8
commit dc4c1be1a4
3 changed files with 17 additions and 2 deletions

View File

@@ -221,6 +221,10 @@ void BKE_object_tfm_protected_restore(
const ObjectTfmProtectedChannels *obtfm,
const short protectflag);
void BKE_object_eval_reset(
struct Object *ob_eval);
/* Dependency graph evaluation callbacks. */
void BKE_object_eval_local_transform(
struct Depsgraph *depsgraph,

View File

@@ -69,6 +69,18 @@
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
/**
* Restore the object->data to a non-modifier evaluated state.
*
* Some changes done directly in evaluated object require them to be reset
* before being re-evaluated.
* For example, we need to call this before BKE_mesh_new_from_object(),
* in case we removed/added modifiers in the evaluated object.
**/
void BKE_object_eval_reset(Object *ob_eval)
{
BKE_object_free_derived_caches(ob_eval);
}
void BKE_object_eval_local_transform(Depsgraph *depsgraph, Object *ob)
{

View File

@@ -844,8 +844,7 @@ static int bake(
md = md_next;
}
/* We need to restore object->data to a non-modifier-evaluated state. */
BKE_object_free_derived_caches(ob_low_eval);
BKE_object_eval_reset(ob_low_eval);
me_cage = bake_mesh_new_from_object(depsgraph, bmain, scene, ob_low_eval);
RE_bake_pixels_populate(me_cage, pixel_array_low, num_pixels, &bake_images, uv_layer);
}