Cleanup: sculpt mode checks when calculating stats

Sculpting dynamic topology used to code-path for counting object
then never used the result.

Match object mode checks in string access & drawing.
This commit is contained in:
Campbell Barton 2021-06-16 16:56:17 +10:00
parent 3385c04598
commit 4b36c5b1a7
1 changed files with 22 additions and 24 deletions

View File

@ -344,7 +344,7 @@ static void stats_object_edit(Object *obedit, SceneStats *stats)
}
}
static void stats_object_pose(Object *ob, SceneStats *stats)
static void stats_object_pose(const Object *ob, SceneStats *stats)
{
if (ob->pose) {
bArmature *arm = ob->data;
@ -361,16 +361,13 @@ static void stats_object_pose(Object *ob, SceneStats *stats)
}
}
static bool stats_is_object_dynamic_topology_sculpt(Object *ob)
static bool stats_is_object_dynamic_topology_sculpt(const Object *ob)
{
if (ob == NULL) {
return false;
}
const eObjectMode object_mode = ob->mode;
return ((object_mode & OB_MODE_SCULPT) && ob->sculpt && ob->sculpt->bm);
BLI_assert(ob->mode & OB_MODE_SCULPT);
return (ob->sculpt && ob->sculpt->bm);
}
static void stats_object_sculpt(Object *ob, SceneStats *stats)
static void stats_object_sculpt(const Object *ob, SceneStats *stats)
{
SculptSession *ss = ob->sculpt;
@ -399,20 +396,20 @@ static void stats_object_sculpt(Object *ob, SceneStats *stats)
static void stats_update(Depsgraph *depsgraph, ViewLayer *view_layer, View3D *v3d_local)
{
SceneStats stats = {0};
Object *ob = OBACT(view_layer);
Object *obedit = OBEDIT_FROM_VIEW_LAYER(view_layer);
const Object *ob = OBACT(view_layer);
const Object *obedit = OBEDIT_FROM_VIEW_LAYER(view_layer);
if (obedit) {
/* Edit Mode */
/* Edit Mode. */
FOREACH_OBJECT_BEGIN (view_layer, ob_iter) {
if (ob_iter->base_flag & BASE_VISIBLE_VIEWLAYER) {
if (ob_iter->mode == OB_MODE_EDIT) {
if (ob_iter->mode & OB_MODE_EDIT) {
stats_object_edit(ob_iter, &stats);
stats.totobjsel++;
}
else {
/* Skip hidden objects in local view that are not in edit-mode,
* an exception for edit-mode, in other modes these would be considered hidden. */
* an exception for edit-mode, in most other modes these would be considered hidden. */
if ((v3d_local && !BKE_object_is_visible_in_viewport(v3d_local, ob_iter))) {
continue;
}
@ -423,15 +420,22 @@ static void stats_update(Depsgraph *depsgraph, ViewLayer *view_layer, View3D *v3
FOREACH_OBJECT_END;
}
else if (ob && (ob->mode & OB_MODE_POSE)) {
/* Pose Mode */
/* Pose Mode. */
stats_object_pose(ob, &stats);
}
else if (stats_is_object_dynamic_topology_sculpt(ob)) {
/* Dynamic topology. Do not count all vertices, dynamic topology stats are initialized later as
* part of sculpt stats. */
else if (ob && (ob->mode & OB_MODE_SCULPT)) {
/* Sculpt Mode. */
if (stats_is_object_dynamic_topology_sculpt(ob)) {
/* Dynamic topology. Do not count all vertices,
* dynamic topology stats are initialized later as part of sculpt stats. */
}
else {
/* When dynamic topology is not enabled both sculpt stats and scene stats are collected. */
stats_object_sculpt(ob, &stats);
}
}
else {
/* Objects */
/* Objects. */
GSet *objects_gset = BLI_gset_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, __func__);
DEG_OBJECT_ITER_FOR_RENDER_ENGINE_BEGIN (depsgraph, ob_iter) {
stats_object(ob_iter, v3d_local, &stats, objects_gset);
@ -440,12 +444,6 @@ static void stats_update(Depsgraph *depsgraph, ViewLayer *view_layer, View3D *v3
BLI_gset_free(objects_gset, NULL);
}
if (ob && (ob->mode & OB_MODE_SCULPT)) {
/* Sculpt Mode. When dynamic topology is not enabled both sculpt stats and scene stats are
* collected. */
stats_object_sculpt(ob, &stats);
}
if (v3d_local) {
BLI_assert(v3d_local->localvd != NULL);
if (v3d_local->runtime.local_stats == NULL) {