Make scene statistics to respect locked interface
Interface is being locked when some destructive operations are called from non-main thread. This was causing crash with particles in T60065.
This commit is contained in:
parent
cb69a039e7
commit
704b336899
|
@ -27,8 +27,10 @@
|
|||
#ifndef __ED_INFO_H__
|
||||
#define __ED_INFO_H__
|
||||
|
||||
struct Main;
|
||||
|
||||
/* info_stats.c */
|
||||
void ED_info_stats_clear(struct ViewLayer *view_layer);
|
||||
const char *ED_info_stats_string(struct Scene *scene, struct ViewLayer *view_layer);
|
||||
const char *ED_info_stats_string(struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer);
|
||||
|
||||
#endif /* __ED_INFO_H__ */
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#include "DNA_mesh_types.h"
|
||||
#include "DNA_meta_types.h"
|
||||
#include "DNA_scene_types.h"
|
||||
#include "DNA_windowmanager_types.h"
|
||||
|
||||
#include "BLI_listbase.h"
|
||||
#include "BLI_math.h"
|
||||
|
@ -52,6 +53,7 @@
|
|||
#include "BKE_displist.h"
|
||||
#include "BKE_key.h"
|
||||
#include "BKE_layer.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_paint.h"
|
||||
#include "BKE_particle.h"
|
||||
#include "BKE_editmesh.h"
|
||||
|
@ -597,8 +599,15 @@ void ED_info_stats_clear(ViewLayer *view_layer)
|
|||
}
|
||||
}
|
||||
|
||||
const char *ED_info_stats_string(Scene *scene, ViewLayer *view_layer)
|
||||
const char *ED_info_stats_string(Main *bmain, Scene *scene, ViewLayer *view_layer)
|
||||
{
|
||||
/* Loopin through dependency graph when interface is locked in not safe.
|
||||
* Thew interface is marked as locked when jobs wants to modify the
|
||||
* dependency graph. */
|
||||
wmWindowManager *wm = bmain->wm.first;
|
||||
if (wm->is_interface_locked) {
|
||||
return "";
|
||||
}
|
||||
Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
|
||||
if (!view_layer->stats) {
|
||||
stats_update(depsgraph, view_layer);
|
||||
|
|
|
@ -691,6 +691,11 @@ static void rna_Scene_volume_set(PointerRNA *ptr, float value)
|
|||
BKE_sound_set_scene_volume(scene, value);
|
||||
}
|
||||
|
||||
static const char *rna_Scene_statistics_string_get(Scene *scene, Main *bmain, ViewLayer *view_layer)
|
||||
{
|
||||
return ED_info_stats_string(bmain, scene, view_layer);
|
||||
}
|
||||
|
||||
static void rna_Scene_framelen_update(Main *UNUSED(bmain), Scene *scene, PointerRNA *UNUSED(ptr))
|
||||
{
|
||||
scene->r.framelen = (float)scene->r.framapto / (float)scene->r.images;
|
||||
|
@ -6633,7 +6638,8 @@ void RNA_def_scene(BlenderRNA *brna)
|
|||
RNA_def_property_float_funcs(prop, NULL, "rna_Scene_volume_set", NULL);
|
||||
|
||||
/* Statistics */
|
||||
func = RNA_def_function(srna, "statistics", "ED_info_stats_string");
|
||||
func = RNA_def_function(srna, "statistics", "rna_Scene_statistics_string_get");
|
||||
RNA_def_function_flag(func, FUNC_USE_MAIN);
|
||||
parm = RNA_def_pointer(func, "view_layer", "ViewLayer", "", "Active layer");
|
||||
RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
|
||||
parm = RNA_def_string(func, "statistics", NULL, 0, "Statistics", "");
|
||||
|
|
Loading…
Reference in New Issue