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:
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user