[Bf-blender-cvs] [9d4ed6d03b6] master: Fix T59984: Drivers don't update values in UI or show proper errors

Joshua Leung noreply at git.blender.org
Tue Jan 8 13:42:35 CET 2019


Commit: 9d4ed6d03b6910b5239c2f17b3559987330f9652
Author: Joshua Leung
Date:   Fri Jan 4 14:57:09 2019 +1300
Branches: master
https://developer.blender.org/rB9d4ed6d03b6910b5239c2f17b3559987330f9652

Fix T59984: Drivers don't update values in UI or show proper errors

We now perform COW -> original data flushing for all the debug values + error
status flags on Drivers/DriverVariables/DriverTargets, as these are only set
when errors are encountered when evaluating drivers.

===================================================================

M	source/blender/blenkernel/intern/anim_sys.c

===================================================================

diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c
index 2019554996c..c5a21342dc0 100644
--- a/source/blender/blenkernel/intern/anim_sys.c
+++ b/source/blender/blenkernel/intern/anim_sys.c
@@ -3484,11 +3484,34 @@ void BKE_animsys_eval_driver(Depsgraph *depsgraph,
 
 			PathResolvedRNA anim_rna;
 			if (animsys_store_rna_setting(&id_ptr, fcu->rna_path, fcu->array_index, &anim_rna)) {
+				/* Evaluate driver, and write results to COW-domain destination */
 				const float ctime = DEG_get_ctime(depsgraph);
 				const float curval = evaluate_fcurve_driver(&anim_rna, fcu, driver_orig, ctime);
 				ok = animsys_write_rna_setting(&anim_rna, curval);
+
+				/* Flush results & status codes to original data for UI (T59984) */
 				if (ok && DEG_is_active(depsgraph)) {
 					animsys_write_orig_anim_rna(&id_ptr, fcu->rna_path, fcu->array_index, curval);
+
+					/* curval is displayed in the UI, and flag contains error-status codes */
+					driver_orig->curval = fcu->driver->curval;
+					driver_orig->flag = fcu->driver->flag;
+
+					DriverVar *dvar_orig = driver_orig->variables.first;
+					DriverVar *dvar = fcu->driver->variables.first;
+					for (;
+					     dvar_orig && dvar;
+					     dvar_orig = dvar_orig->next, dvar = dvar->next)
+					{
+						DriverTarget *dtar_orig = &dvar_orig->targets[0];
+						DriverTarget *dtar = &dvar->targets[0];
+						for (int i = 0; i < MAX_DRIVER_TARGETS; i++, dtar_orig++, dtar++) {
+							dtar_orig->flag = dtar->flag;
+						}
+
+						dvar_orig->curval = dvar->curval;
+						dvar_orig->flag = dvar->flag;
+					}
 				}
 			}



More information about the Bf-blender-cvs mailing list