Merge branch 'master' into blender2.8

This commit is contained in:
Sergey Sharybin 2018-03-16 11:17:45 +01:00
commit 5baf0de6e7
15 changed files with 148 additions and 88 deletions

@ -77,6 +77,8 @@
#include "atomic_ops.h"
#include "DEG_depsgraph.h"
/* ***************************************** */
/* AnimData API */
@ -2879,15 +2881,13 @@ void BKE_animsys_evaluate_all_animation(Main *main, Scene *scene, float ctime)
/* ************** */
/* Evaluation API */
#define DEBUG_PRINT if (G.debug & G_DEBUG_DEPSGRAPH_EVAL) printf
void BKE_animsys_eval_animdata(const EvaluationContext *eval_ctx, ID *id)
{
AnimData *adt = BKE_animdata_from_id(id);
Scene *scene = NULL; /* XXX: this is only needed for flushing RNA updates,
* which should get handled as part of the dependency graph instead...
*/
DEBUG_PRINT("%s on %s, time=%f\n\n", __func__, id->name, (double)eval_ctx->ctime);
DEG_debug_print_eval_time(__func__, id->name, id, eval_ctx->ctime);
BKE_animsys_evaluate_animdata(scene, id, adt, eval_ctx->ctime, ADT_RECALC_ANIM);
}
@ -2920,11 +2920,8 @@ void BKE_animsys_eval_driver(const EvaluationContext *eval_ctx,
fcu = find_driver_from_evaluated_id(id, fcu);
DEBUG_PRINT("%s on %s (%s[%d])\n",
__func__,
id->name,
fcu->rna_path,
fcu->array_index);
DEG_debug_print_eval_subdata_index(
__func__, id->name, id, "fcu", fcu->rna_path, fcu, fcu->array_index);
RNA_id_pointer_create(id, &id_ptr);
@ -2957,5 +2954,3 @@ void BKE_animsys_eval_driver(const EvaluationContext *eval_ctx,
}
}
}
#undef DEBUG_PRINT

@ -50,7 +50,7 @@
#include "BKE_global.h"
#include "BKE_main.h"
#define DEBUG_PRINT if (G.debug & G_DEBUG_DEPSGRAPH_EVAL) printf
#include "DEG_depsgraph.h"
/* ********************** SPLINE IK SOLVER ******************* */
@ -566,7 +566,7 @@ void BKE_pose_eval_init(const struct EvaluationContext *UNUSED(eval_ctx),
{
bPoseChannel *pchan;
DEBUG_PRINT("%s on %s\n", __func__, ob->id.name);
DEG_debug_print_eval(__func__, ob->id.name, ob);
BLI_assert(ob->type == OB_ARMATURE);
@ -588,7 +588,7 @@ void BKE_pose_eval_init_ik(const struct EvaluationContext *eval_ctx,
Object *ob,
bPose *UNUSED(pose))
{
DEBUG_PRINT("%s on %s\n", __func__, ob->id.name);
DEG_debug_print_eval(__func__, ob->id.name, ob);
BLI_assert(ob->type == OB_ARMATURE);
const float ctime = BKE_scene_frame_get(scene); /* not accurate... */
bArmature *arm = (bArmature *)ob->data;
@ -609,7 +609,8 @@ void BKE_pose_eval_bone(const struct EvaluationContext *eval_ctx,
Object *ob,
bPoseChannel *pchan)
{
DEBUG_PRINT("%s on %s pchan %s\n", __func__, ob->id.name, pchan->name);
DEG_debug_print_eval_subdata(
__func__, ob->id.name, ob, "pchan", pchan->name, pchan);
BLI_assert(ob->type == OB_ARMATURE);
bArmature *arm = (bArmature *)ob->data;
if (arm->edbo || (arm->flag & ARM_RESTPOS)) {
@ -644,7 +645,8 @@ void BKE_pose_constraints_evaluate(const struct EvaluationContext *eval_ctx,
Object *ob,
bPoseChannel *pchan)
{
DEBUG_PRINT("%s on %s pchan %s\n", __func__, ob->id.name, pchan->name);
DEG_debug_print_eval_subdata(
__func__, ob->id.name, ob, "pchan", pchan->name, pchan);
bArmature *arm = (bArmature *)ob->data;
if (arm->flag & ARM_RESTPOS) {
return;
@ -664,7 +666,7 @@ void BKE_pose_bone_done(const struct EvaluationContext *UNUSED(eval_ctx),
bPoseChannel *pchan)
{
float imat[4][4];
DEBUG_PRINT("%s on pchan %s\n", __func__, pchan->name);
DEG_debug_print_eval(__func__, pchan->name, pchan);
if (pchan->bone) {
invert_m4_m4(imat, pchan->bone->arm_mat);
mul_m4_m4m4(pchan->chan_mat, pchan->pose_mat, imat);
@ -676,7 +678,8 @@ void BKE_pose_iktree_evaluate(const struct EvaluationContext *eval_ctx,
Object *ob,
bPoseChannel *rootchan)
{
DEBUG_PRINT("%s on %s pchan %s\n", __func__, ob->id.name, rootchan->name);
DEG_debug_print_eval_subdata(
__func__, ob->id.name, ob, "rootchan", rootchan->name, rootchan);
BLI_assert(ob->type == OB_ARMATURE);
const float ctime = BKE_scene_frame_get(scene); /* not accurate... */
bArmature *arm = (bArmature *)ob->data;
@ -690,8 +693,10 @@ void BKE_pose_splineik_evaluate(const struct EvaluationContext *eval_ctx,
Scene *scene,
Object *ob,
bPoseChannel *rootchan)
{
DEBUG_PRINT("%s on %s pchan %s\n", __func__, ob->id.name, rootchan->name);
DEG_debug_print_eval_subdata(
__func__, ob->id.name, ob, "rootchan", rootchan->name, rootchan);
BLI_assert(ob->type == OB_ARMATURE);
const float ctime = BKE_scene_frame_get(scene); /* not accurate... */
bArmature *arm = (bArmature *)ob->data;
@ -707,7 +712,7 @@ void BKE_pose_eval_flush(const struct EvaluationContext *UNUSED(eval_ctx),
bPose *UNUSED(pose))
{
float ctime = BKE_scene_frame_get(scene); /* not accurate... */
DEBUG_PRINT("%s on %s\n", __func__, ob->id.name);
DEG_debug_print_eval(__func__, ob->id.name, ob);
BLI_assert(ob->type == OB_ARMATURE);
/* 6. release the IK tree */
@ -717,7 +722,7 @@ void BKE_pose_eval_flush(const struct EvaluationContext *UNUSED(eval_ctx),
void BKE_pose_eval_proxy_copy(const struct EvaluationContext *UNUSED(eval_ctx), Object *ob)
{
BLI_assert(ID_IS_LINKED(ob) && ob->proxy_from != NULL);
DEBUG_PRINT("%s on %s\n", __func__, ob->id.name);
DEG_debug_print_eval(__func__, ob->id.name, ob);
if (BKE_pose_copy_result(ob->pose, ob->proxy_from->pose) == false) {
printf("Proxy copy error, lib Object: %s proxy Object: %s\n",
ob->id.name + 2, ob->proxy_from->id.name + 2);

@ -5258,9 +5258,7 @@ void BKE_curve_rect_from_textbox(const struct Curve *cu, const struct TextBox *t
void BKE_curve_eval_geometry(const EvaluationContext *UNUSED(eval_ctx),
Curve *curve)
{
if (G.debug & G_DEBUG_DEPSGRAPH_EVAL) {
printf("%s on %s\n", __func__, curve->id.name);
}
DEG_debug_print_eval(__func__, curve->id.name, curve);
if (curve->bb == NULL || (curve->bb->flag & BOUNDBOX_DIRTY)) {
BKE_curve_texspace_calc(curve);
}

@ -55,7 +55,7 @@
#include "BKE_object.h"
#include "BKE_scene.h"
#define DEBUG_PRINT if (G.debug & G_DEBUG_DEPSGRAPH_EVAL) printf
#include "DEG_depsgraph.h"
/** Free (or release) any data used by this group (does not free the group itself). */
void BKE_group_free(Group *group)
@ -403,7 +403,7 @@ static void group_eval_layer_collections(
void BKE_group_eval_view_layers(const struct EvaluationContext *eval_ctx,
Group *group)
{
DEBUG_PRINT("%s on %s (%p)\n", __func__, group->id.name, group);
DEG_debug_print_eval(__func__, group->id.name, group);
BKE_layer_eval_layer_collection_pre(eval_ctx, &group->id, group->view_layer);
group_eval_layer_collections(eval_ctx,
group,

@ -57,8 +57,6 @@
#include "MEM_guardedalloc.h"
#define DEBUG_PRINT if (G.debug & G_DEBUG_DEPSGRAPH_EVAL) printf
/* prototype */
struct EngineSettingsCB_Type;
static void layer_collections_sync_flags(ListBase *layer_collections_dst, const ListBase *layer_collections_src);
@ -2245,7 +2243,7 @@ static void idproperty_reset(IDProperty **props, IDProperty *props_ref)
void BKE_layer_eval_layer_collection_pre(const struct EvaluationContext *UNUSED(eval_ctx),
ID *owner_id, ViewLayer *view_layer)
{
DEBUG_PRINT("%s on %s (%p)\n", __func__, view_layer->name, view_layer);
DEG_debug_print_eval(__func__, view_layer->name, view_layer);
Scene *scene = (GS(owner_id->name) == ID_SCE) ? (Scene *)owner_id : NULL;
for (Base *base = view_layer->object_bases.first; base != NULL; base = base->next) {
@ -2289,14 +2287,17 @@ void BKE_layer_eval_layer_collection(const EvaluationContext *eval_ctx,
LayerCollection *layer_collection,
LayerCollection *parent_layer_collection)
{
DEBUG_PRINT("%s on %s (%p) [%s], parent %s (%p) [%s]\n",
__func__,
layer_collection->scene_collection->name,
layer_collection->scene_collection,
collection_type_lookup[layer_collection->scene_collection->type],
(parent_layer_collection != NULL) ? parent_layer_collection->scene_collection->name : "NONE",
(parent_layer_collection != NULL) ? parent_layer_collection->scene_collection : NULL,
(parent_layer_collection != NULL) ? collection_type_lookup[parent_layer_collection->scene_collection->type] : "");
if (G.debug & G_DEBUG_DEPSGRAPH_EVAL) {
/* TODO)sergey): Try to make it more generic and handled by depsgraph messaging. */
printf("%s on %s (%p) [%s], parent %s (%p) [%s]\n",
__func__,
layer_collection->scene_collection->name,
layer_collection->scene_collection,
collection_type_lookup[layer_collection->scene_collection->type],
(parent_layer_collection != NULL) ? parent_layer_collection->scene_collection->name : "NONE",
(parent_layer_collection != NULL) ? parent_layer_collection->scene_collection : NULL,
(parent_layer_collection != NULL) ? collection_type_lookup[parent_layer_collection->scene_collection->type] : "");
}
BLI_assert(layer_collection != parent_layer_collection);
/* visibility */
@ -2345,7 +2346,7 @@ void BKE_layer_eval_layer_collection(const EvaluationContext *eval_ctx,
void BKE_layer_eval_layer_collection_post(const struct EvaluationContext *UNUSED(eval_ctx),
ViewLayer *view_layer)
{
DEBUG_PRINT("%s on %s (%p)\n", __func__, view_layer->name, view_layer);
DEG_debug_print_eval(__func__, view_layer->name, view_layer);
/* if base is not selectabled, clear select */
for (Base *base = view_layer->object_bases.first; base; base = base->next) {
if ((base->flag & BASE_SELECTABLED) == 0) {

@ -47,7 +47,6 @@
#include "DEG_depsgraph.h"
unsigned int BKE_mask_spline_resolution(MaskSpline *spline, int width, int height)
{
float max_segment = 0.01f;
@ -898,11 +897,9 @@ void BKE_mask_layer_evaluate_deform(MaskLayer *masklay, const float ctime)
}
}
#define DEBUG_PRINT if (G.debug & G_DEBUG_DEPSGRAPH_EVAL) printf
void BKE_mask_eval_animation(struct EvaluationContext *eval_ctx, Mask *mask)
{
DEBUG_PRINT("%s on %s (%p)\n", __func__, mask->id.name, mask);
DEG_debug_print_eval(__func__, mask->id.name, mask);
for (MaskLayer *mask_layer = mask->masklayers.first;
mask_layer != NULL;
mask_layer = mask_layer->next)
@ -913,7 +910,7 @@ void BKE_mask_eval_animation(struct EvaluationContext *eval_ctx, Mask *mask)
void BKE_mask_eval_update(struct EvaluationContext *eval_ctx, Mask *mask)
{
DEBUG_PRINT("%s on %s (%p)\n", __func__, mask->id.name, mask);
DEG_debug_print_eval(__func__, mask->id.name, mask);
for (MaskLayer *mask_layer = mask->masklayers.first;
mask_layer != NULL;
mask_layer = mask_layer->next)

@ -72,6 +72,7 @@
#include "BKE_editmesh.h"
#include "BKE_font.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_build.h"
#include "GPU_material.h"
@ -1774,9 +1775,7 @@ bool BKE_object_material_edit_image_set(Object *ob, short mat_nr, Image *image)
void BKE_material_eval(const struct EvaluationContext *UNUSED(eval_ctx), Material *material)
{
if (G.debug & G_DEBUG_DEPSGRAPH_EVAL) {
printf("%s on %s (%p)\n", __func__, material->id.name, material);
}
DEG_debug_print_eval(__func__, material->id.name, material);
if ((BLI_listbase_is_empty(&material->gpumaterial) == false)) {
GPU_material_uniform_buffer_tag_dirty(&material->gpumaterial);
}

@ -2670,9 +2670,7 @@ Mesh *BKE_mesh_new_from_object(
void BKE_mesh_eval_geometry(const EvaluationContext *UNUSED(eval_ctx),
Mesh *mesh)
{
if (G.debug & G_DEBUG_DEPSGRAPH_EVAL) {
printf("%s on %s\n", __func__, mesh->id.name);
}
DEG_debug_print_eval(__func__, mesh->id.name, mesh);
if (mesh->bb == NULL || (mesh->bb->flag & BOUNDBOX_DIRTY)) {
BKE_mesh_texspace_calc(mesh);
}

@ -73,12 +73,12 @@
#include "IMB_imbuf.h"
#include "IMB_moviecache.h"
#include "DEG_depsgraph.h"
#ifdef WITH_OPENEXR
# include "intern/openexr/openexr_multi.h"
#endif
#define DEBUG_PRINT if (G.debug & G_DEBUG_DEPSGRAPH_EVAL) printf
/*********************** movieclip buffer loaders *************************/
static int sequence_guess_offset(const char *full_name, int head_len, unsigned short numlen)
@ -1611,6 +1611,6 @@ bool BKE_movieclip_put_frame_if_possible(MovieClip *clip,
void BKE_movieclip_eval_update(struct EvaluationContext *UNUSED(eval_ctx), MovieClip *clip)
{
DEBUG_PRINT("%s on %s (%p)\n", __func__, clip->id.name, clip);
DEG_debug_print_eval(__func__, clip->id.name, clip);
BKE_tracking_dopesheet_tag_update(&clip->tracking);
}

@ -75,6 +75,8 @@
#include "NOD_shader.h"
#include "NOD_texture.h"
#include "DEG_depsgraph.h"
#define NODE_DEFAULT_MAX_WIDTH 700
/* Fallback types for undefined tree, nodes, sockets */
@ -3871,8 +3873,6 @@ void BKE_nodetree_shading_params_eval(const struct EvaluationContext *UNUSED(eva
bNodeTree *ntree_dst,
const bNodeTree *ntree_src)
{
if (G.debug & G_DEBUG_DEPSGRAPH_EVAL) {
printf("%s on %s (%p)\n", __func__, ntree_src->id.name, ntree_dst);
}
DEG_debug_print_eval(__func__, ntree_src->id.name, ntree_dst);
BKE_nodetree_copy_default_values(ntree_dst, ntree_src);
}

@ -65,12 +65,11 @@
#include "MEM_guardedalloc.h"
#include "DEG_depsgraph.h"
#define DEBUG_PRINT if (G.debug & G_DEBUG_DEPSGRAPH_EVAL) printf
void BKE_object_eval_local_transform(const EvaluationContext *UNUSED(eval_ctx),
Object *ob)
{
DEBUG_PRINT("%s on %s (%p)\n", __func__, ob->id.name, ob);
DEG_debug_print_eval(__func__, ob->id.name, ob);
/* calculate local matrix */
BKE_object_to_mat4(ob, ob->obmat);
@ -88,7 +87,7 @@ void BKE_object_eval_parent(const EvaluationContext *UNUSED(eval_ctx),
float tmat[4][4];
float locmat[4][4];
DEBUG_PRINT("%s on %s (%p)\n", __func__, ob->id.name, ob);
DEG_debug_print_eval(__func__, ob->id.name, ob);
/* get local matrix (but don't calculate it, as that was done already!) */
// XXX: redundant?
@ -117,7 +116,7 @@ void BKE_object_eval_constraints(const EvaluationContext *eval_ctx,
bConstraintOb *cob;
float ctime = BKE_scene_frame_get(scene);
DEBUG_PRINT("%s on %s (%p)\n", __func__, ob->id.name, ob);
DEG_debug_print_eval(__func__, ob->id.name, ob);
/* evaluate constraints stack */
/* TODO: split this into:
@ -135,7 +134,7 @@ void BKE_object_eval_constraints(const EvaluationContext *eval_ctx,
void BKE_object_eval_done(const EvaluationContext *UNUSED(eval_ctx), Object *ob)
{
DEBUG_PRINT("%s on %s (%p)\n", __func__, ob->id.name, ob);
DEG_debug_print_eval(__func__, ob->id.name, ob);
/* Set negative scale flag in object. */
if (is_negative_m4(ob->obmat)) ob->transflag |= OB_NEG_SCALE;
@ -305,7 +304,7 @@ void BKE_object_eval_uber_data(const EvaluationContext *eval_ctx,
Scene *scene,
Object *ob)
{
DEBUG_PRINT("%s on %s (%p)\n", __func__, ob->id.name, ob);
DEG_debug_print_eval(__func__, ob->id.name, ob);
BLI_assert(ob->type != OB_ARMATURE);
BKE_object_handle_data_update(eval_ctx, scene, ob);
@ -383,7 +382,7 @@ void BKE_object_eval_cloth(const EvaluationContext *UNUSED(eval_ctx),
Scene *scene,
Object *object)
{
DEBUG_PRINT("%s on %s (%p)\n", __func__, object->id.name, object);
DEG_debug_print_eval(__func__, object->id.name, object);
BKE_ptcache_object_reset(scene, object, PTCACHE_RESET_DEPSGRAPH);
}
@ -406,7 +405,7 @@ void BKE_object_eval_transform_all(const EvaluationContext *eval_ctx,
void BKE_object_eval_update_shading(const EvaluationContext *UNUSED(eval_ctx),
Object *object)
{
DEBUG_PRINT("%s on %s (%p)\n", __func__, object->id.name, object);
DEG_debug_print_eval(__func__, object->id.name, object);
if (object->type == OB_MESH) {
BKE_mesh_batch_cache_dirty(object->data, BKE_MESH_BATCH_DIRTY_SHADING);
}
@ -415,7 +414,7 @@ void BKE_object_eval_update_shading(const EvaluationContext *UNUSED(eval_ctx),
void BKE_object_data_select_update(const EvaluationContext *UNUSED(eval_ctx),
struct ID *object_data)
{
DEBUG_PRINT("%s on %s (%p)\n", __func__, object_data->name, object_data);
DEG_debug_print_eval(__func__, object_data->name, object_data);
switch (GS(object_data->name)) {
case ID_ME:
BKE_mesh_batch_cache_dirty((Mesh *)object_data,
@ -437,7 +436,7 @@ void BKE_object_data_select_update(const EvaluationContext *UNUSED(eval_ctx),
void BKE_object_eval_flush_base_flags(const EvaluationContext *UNUSED(eval_ctx),
Object *object, Base *base, bool is_from_set)
{
DEBUG_PRINT("%s on %s (%p)\n", __func__, object->id.name, object);
DEG_debug_print_eval(__func__, object->id.name, object);
/* Make sure we have the base collection settings is already populated.
* This will fail when BKE_layer_eval_layer_collection_pre hasn't run yet.

@ -95,6 +95,7 @@
#include "PIL_time.h"
#include "RE_shader_ext.h"
#include "DEG_depsgraph.h"
/* fluid sim particle import */
#ifdef WITH_MOD_FLUID
@ -4419,18 +4420,14 @@ void BKE_particlesystem_id_loop(ParticleSystem *psys, ParticleSystemIDFunc func,
void BKE_particle_system_settings_eval(const struct EvaluationContext *UNUSED(eval_ctx),
ParticleSystem *psys)
{
if (G.debug & G_DEBUG_DEPSGRAPH_EVAL) {
printf("%s on %s (%p)\n", __func__, psys->name, psys);
}
DEG_debug_print_eval(__func__, psys->name, psys);
psys->recalc |= psys->part->recalc;
}
void BKE_particle_system_settings_recalc_clear(struct EvaluationContext *UNUSED(eval_ctx),
ParticleSettings *particle_settings)
{
if (G.debug & G_DEBUG_DEPSGRAPH_EVAL) {
printf("%s on %s (%p)\n", __func__, particle_settings->id.name, particle_settings);
}
DEG_debug_print_eval(__func__, particle_settings->id.name, particle_settings);
particle_settings->recalc = 0;
}
@ -4438,8 +4435,6 @@ void BKE_particle_system_eval_init(const struct EvaluationContext *UNUSED(eval_c
Scene *scene,
Object *ob)
{
if (G.debug & G_DEBUG_DEPSGRAPH_EVAL) {
printf("%s on %s (%p)\n", __func__, ob->id.name, ob);
}
DEG_debug_print_eval(__func__, ob->id.name, ob);
BKE_ptcache_object_reset(scene, ob, PTCACHE_RESET_DEPSGRAPH);
}

@ -66,6 +66,8 @@
#include "BKE_rigidbody.h"
#include "BKE_scene.h"
#include "DEG_depsgraph.h"
/* ************************************** */
/* Memory Management */
@ -1688,11 +1690,7 @@ void BKE_rigidbody_rebuild_sim(const struct EvaluationContext *eval_ctx,
Scene *scene)
{
float ctime = BKE_scene_frame_get(scene);
if (G.debug & G_DEBUG_DEPSGRAPH_EVAL) {
printf("%s at %f\n", __func__, ctime);
}
DEG_debug_print_eval_time(__func__, scene->id.name, scene, ctime);
/* rebuild sim data (i.e. after resetting to start of timeline) */
if (BKE_scene_check_rigidbody_active(scene)) {
BKE_rigidbody_rebuild_world(eval_ctx, scene, ctime);
@ -1703,11 +1701,7 @@ void BKE_rigidbody_eval_simulation(const struct EvaluationContext *eval_ctx,
Scene *scene)
{
float ctime = BKE_scene_frame_get(scene);
if (G.debug & G_DEBUG_DEPSGRAPH_EVAL) {
printf("%s at %f\n", __func__, ctime);
}
DEG_debug_print_eval_time(__func__, scene->id.name, scene, ctime);
/* evaluate rigidbody sim */
if (BKE_scene_check_rigidbody_active(scene)) {
BKE_rigidbody_do_simulation(eval_ctx, scene, ctime);
@ -1720,11 +1714,7 @@ void BKE_rigidbody_object_sync_transforms(const struct EvaluationContext *UNUSED
{
RigidBodyWorld *rbw = scene->rigidbody_world;
float ctime = BKE_scene_frame_get(scene);
if (G.debug & G_DEBUG_DEPSGRAPH_EVAL) {
printf("%s on %s\n", __func__, ob->id.name);
}
DEG_debug_print_eval_time(__func__, ob->id.name, ob, ctime);
/* read values pushed into RBO from sim/cache... */
BKE_rigidbody_sync_transforms(rbw, ob, ctime);
}

@ -280,6 +280,32 @@ typedef void (*DEG_EditorUpdateSceneCb)(
void DEG_editors_set_update_cb(DEG_EditorUpdateIDCb id_func,
DEG_EditorUpdateSceneCb scene_func);
/* Evaluation Debug ------------------------------ */
void DEG_debug_print_eval(const char* function_name,
const char* object_name,
const void* object_address);
void DEG_debug_print_eval_subdata(const char *function_name,
const char *object_name,
const void *object_address,
const char *subdata_comment,
const char *subdata_name,
const void *subdata_address);
void DEG_debug_print_eval_subdata_index(const char *function_name,
const char *object_name,
const void *object_address,
const char *subdata_comment,
const char *subdata_name,
const void *subdata_address,
const int subdata_index);
void DEG_debug_print_eval_time(const char* function_name,
const char* object_name,
const void* object_address,
float time);
#ifdef __cplusplus
} /* extern "C" */
#endif

@ -553,3 +553,60 @@ void DEG_editors_set_update_cb(DEG_EditorUpdateIDCb id_func,
DEG::deg_editor_update_id_cb = id_func;
DEG::deg_editor_update_scene_cb = scene_func;
}
void DEG_debug_print_eval(const char *function_name,
const char *object_name,
const void *object_address)
{
if ((G.debug & G_DEBUG_DEPSGRAPH_EVAL) == 0) {
return;
}
printf("%s on %s (%p)\n", function_name, object_name, object_address);
}
void DEG_debug_print_eval_subdata(const char *function_name,
const char *object_name,
const void *object_address,
const char *subdata_comment,
const char *subdata_name,
const void *subdata_address)
{
if ((G.debug & G_DEBUG_DEPSGRAPH_EVAL) == 0) {
return;
}
printf("%s on %s (%p) %s %s (%p)\n",
function_name,
object_name, object_address,
subdata_comment,
subdata_name, subdata_address);
}
void DEG_debug_print_eval_subdata_index(const char *function_name,
const char *object_name,
const void *object_address,
const char *subdata_comment,
const char *subdata_name,
const void *subdata_address,
const int subdata_index)
{
if ((G.debug & G_DEBUG_DEPSGRAPH_EVAL) == 0) {
return;
}
printf("%s on %s (%p) %s %s[%d] (%p)\n",
function_name,
object_name, object_address,
subdata_comment,
subdata_name, subdata_index, subdata_address);
}
void DEG_debug_print_eval_time(const char *function_name,
const char *object_name,
const void *object_address,
float time)
{
if ((G.debug & G_DEBUG_DEPSGRAPH_EVAL) == 0) {
return;
}
printf("%s on %s (%p) at time %f\n",
function_name, object_name, object_address, time);
}