diff options
Diffstat (limited to 'source/blender/depsgraph/DEG_depsgraph.h')
-rw-r--r-- | source/blender/depsgraph/DEG_depsgraph.h | 91 |
1 files changed, 74 insertions, 17 deletions
diff --git a/source/blender/depsgraph/DEG_depsgraph.h b/source/blender/depsgraph/DEG_depsgraph.h index 59b10b95d49..e05b417f245 100644 --- a/source/blender/depsgraph/DEG_depsgraph.h +++ b/source/blender/depsgraph/DEG_depsgraph.h @@ -65,6 +65,41 @@ struct Main; struct PointerRNA; struct PropertyRNA; +struct RenderEngineType; +struct Scene; +struct SceneLayer; + +typedef enum eEvaluationMode { + DAG_EVAL_VIEWPORT = 0, /* evaluate for OpenGL viewport */ + DAG_EVAL_PREVIEW = 1, /* evaluate for render with preview settings */ + DAG_EVAL_RENDER = 2, /* evaluate for render purposes */ +} eEvaluationMode; + +/* Dependency graph evaluation context + * + * This structure stores all the local dependency graph data, + * which is needed for it's evaluation, + */ +typedef struct EvaluationContext { + eEvaluationMode mode; + float ctime; + + struct SceneLayer *scene_layer; + struct RenderEngineType *engine; +} EvaluationContext; + +/* DagNode->eval_flags */ +enum { + /* Regardless to curve->path animation flag path is to be evaluated anyway, + * to meet dependencies with such a things as curve modifier and other guys + * who're using curve deform, where_on_path and so. + */ + DAG_EVAL_NEED_CURVE_PATH = 1, + /* Scene evaluation would need to have object's data on CPU, + * meaning no GPU shortcuts is allowed. + */ + DAG_EVAL_NEED_CPU = 2, +}; #ifdef __cplusplus extern "C" { @@ -107,25 +142,44 @@ void DEG_graph_on_visible_update(struct Main *bmain, struct Scene *scene); /* Update all dependency graphs when visible scenes/layers changes. */ void DEG_on_visible_update(struct Main *bmain, const bool do_time); -/* Tag node(s) associated with changed data for later updates */ -void DEG_graph_id_tag_update(struct Main *bmain, - Depsgraph *graph, - struct ID *id); -void DEG_graph_data_tag_update(Depsgraph *graph, const struct PointerRNA *ptr); -void DEG_graph_property_tag_update(Depsgraph *graph, const struct PointerRNA *ptr, const struct PropertyRNA *prop); - /* Tag given ID for an update in all the dependency graphs. */ -void DEG_id_tag_update(struct ID *id, short flag); +enum { + /* Object transformation changed, corresponds to OB_RECALC_OB. */ + DEG_TAG_TRANSFORM = (1 << 0), + + /* Object geoemtry changed, corresponds to OB_RECALC_DATA. */ + DEG_TAG_GEOMETRY = (1 << 1), + + /* Time changed and animation is to be re-evaluated, OB_RECALC_TIME. */ + DEG_TAG_TIME = (1 << 2), + + /* Particle system changed. */ + DEG_TAG_PSYSC_REDO = (1 << 3), + DEG_TAG_PSYS_RESET = (1 << 4), + DEG_TAG_PSYS_TYPE = (1 << 5), + DEG_TAG_PSYS_CHILD = (1 << 6), + DEG_TAG_PSYS_PHYS = (1 << 7), + DEG_TAG_PSYS = ((1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7)), + + /* Update copy on write component without flushing down the road. */ + DEG_TAG_COPY_ON_WRITE = (1 << 8), + + /* Tag shading components for update. + * Only parameters of material changed). + */ + DEG_TAG_SHADING_UPDATE = (1 << 9), +}; +void DEG_id_tag_update(struct ID *id, int flag); void DEG_id_tag_update_ex(struct Main *bmain, struct ID *id, - short flag); + int flag); /* Tag given ID type for update. * * Used by all sort of render engines to quickly check if * IDs of a given type need to be checked for update. */ -void DEG_id_type_tag(struct Main *bmain, short idtype); +void DEG_id_type_tag(struct Main *bmain, short id_type); void DEG_ids_clear_recalc(struct Main *bmain); @@ -150,13 +204,19 @@ void DEG_ids_check_recalc(struct Main *bmain, /* Evaluation Context ---------------------------- */ /* Create new evaluation context. */ -struct EvaluationContext *DEG_evaluation_context_new(int mode); +struct EvaluationContext *DEG_evaluation_context_new(eEvaluationMode mode); /* Initialize evaluation context. * Used by the areas which currently overrides the context or doesn't have * access to a proper one. */ -void DEG_evaluation_context_init(struct EvaluationContext *eval_ctx, int mode); +void DEG_evaluation_context_init(struct EvaluationContext *eval_ctx, + eEvaluationMode mode); +void DEG_evaluation_context_init_from_scene(struct EvaluationContext *eval_ctx, + struct Scene *scene, + struct SceneLayer *scene_layer, + struct RenderEngineType *engine, + eEvaluationMode mode); /* Free evaluation context. */ void DEG_evaluation_context_free(struct EvaluationContext *eval_ctx); @@ -170,16 +230,13 @@ void DEG_evaluation_context_free(struct EvaluationContext *eval_ctx); void DEG_evaluate_on_framechange(struct EvaluationContext *eval_ctx, struct Main *bmain, Depsgraph *graph, - float ctime, - const unsigned int layer); + float ctime); /* Data changed recalculation entry point. * < context_type: context to perform evaluation for - * < layers: visible layers bitmask to update the graph for */ void DEG_evaluate_on_refresh_ex(struct EvaluationContext *eval_ctx, - Depsgraph *graph, - const unsigned int layers); + Depsgraph *graph); /* Data changed recalculation entry point. * < context_type: context to perform evaluation for |