98 if (mesh_eval ==
nullptr) {
102 int totvert, totedge, totface, totloop;
106 if (
const std::unique_ptr<SubdivCCG> &subdiv_ccg = mesh_eval->
runtime->subdiv_ccg) {
109 else if (subsurf_runtime_data && subsurf_runtime_data->
resolution != 0) {
194 stats->
totgplayer += grease_pencil->layers().size();
281 a = nu->pntsu * nu->pntsv;
349 if (ss ==
nullptr || pbvh ==
nullptr) {
353 switch (pbvh->
type()) {
355 const Mesh &mesh = *
static_cast<const Mesh *
>(ob->
data);
382 memset(stats, 0x0,
sizeof(*stats));
447 if (view_layer != view_layer_test) {
467 if (*stats_p ==
nullptr) {
470 if (wm->
runtime->is_interface_locked) {
481#define SCENE_STATS_FMT_INT(_id) BLI_str_format_uint64_grouped(stats_fmt->_id, stats->_id)
511#undef SCENE_STATS_FMT_INT
548 IFACE_(
"Verts:%s/%s | Edges:%s/%s | Faces:%s/%s | Tris:%s"),
561 IFACE_(
"Joints:%s/%s | Bones:%s/%s"),
583 IFACE_(
"Layers:%s | Frames:%s | Strokes:%s | Points:%s"),
594 IFACE_(
"Verts:%s | Tris:%s"),
602 IFACE_(
"Verts:%s | Faces:%s"),
611 IFACE_(
"Verts:%s | Faces:%s | Tris:%s"),
621 IFACE_(
" | Objects:%s/%s"),
630 const char statusbar_flag)
634 static char info[256];
635 int len =
sizeof(info);
642 if (
format_stats(bmain, scene, view_layer,
nullptr, &stats_fmt)) {
652 const int relative_current_frame = (scene->r.cfra - scene->r.sfra) + 1;
653 const int frame_count = (scene->r.efra - scene->r.sfra) + 1;
656 timecode,
sizeof(timecode), -2,
FRA2TIME(frame_count),
FPS,
U.timecode_style);
660 IFACE_(
"Duration: %s (Frame %i/%i)"),
662 relative_current_frame,
678 int gpu_free_mem_kb, gpu_tot_mem_kb;
680 float gpu_total_gb = gpu_tot_mem_kb / 1048576.0f;
681 float gpu_free_gb = gpu_free_mem_kb / 1048576.0f;
685 if (gpu_free_mem_kb && gpu_tot_mem_kb) {
689 IFACE_(
"VRAM: %.1f/%.1f GiB"),
690 gpu_total_gb - gpu_free_gb,
737 SNPRINTF(values, (value2) ?
"%s / %s" :
"%s", value1, value2);
746 if (!
format_stats(bmain, scene, view_layer, v3d_local, &stats_fmt)) {
772 char labels[MAX_LABELS_COUNT][64];
787 int longest_label = 0;
788 for (
int i = 0; i < MAX_LABELS_COUNT; ++i) {
789 longest_label =
max_ii(longest_label,
BLF_width(font_id, labels[i],
sizeof(labels[i])));
793 int col2 = x + longest_label + (0.5f *
U.widget_unit);
796 *y -= (0.6f * height);
798 bool any_objects = !
STREQ(&stats_fmt.
totobj[0],
"0");
804 else if (any_objects) {
805 stats_row(col1, labels[OBJ], col2, stats_fmt.
totobj,
nullptr, y, height);
807 stats_row(col1, labels[VERTS], col2, stats_fmt.
totvert,
nullptr, y, height);
808 stats_row(col1, labels[EDGES], col2, stats_fmt.
totedge,
nullptr, y, height);
809 stats_row(col1, labels[FACES], col2, stats_fmt.
totface,
nullptr, y, height);
810 stats_row(col1, labels[TRIS], col2, stats_fmt.
tottri,
nullptr, y, height);
815 stats_row(col1, labels[OBJ], col2, stats_fmt.
totobj,
nullptr, y, height);
830 stats_row(col1, labels[TRIS], col2, stats_fmt.
tottri,
nullptr, y, height);
843 stats_row(col1, labels[TRIS], col2, stats_fmt.
tottri,
nullptr, y, height);
Blender kernel action and pose functionality.
bool BKE_pose_is_bonecoll_visible(const bArmature *arm, const bPoseChannel *pchan) ATTR_WARN_UNUSED_RESULT
const char * BKE_blender_version_string_compact(void)
const char * BKE_collection_ui_name_get(Collection *collection)
ListBase * BKE_curve_editNurbs_get(Curve *cu)
Low-level operations for curves.
BMEditMesh * BKE_editmesh_from_object(Object *ob)
Return the BMEditMesh for a given object.
Low-level operations for grease pencil.
KeyBlock * BKE_keyblock_from_object(Object *ob)
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
LayerCollection * BKE_view_layer_active_collection_get(ViewLayer *view_layer)
#define FOREACH_OBJECT_END
#define FOREACH_OBJECT_BEGIN(scene, view_layer, _instance)
Object * BKE_view_layer_active_object_get(const ViewLayer *view_layer)
bool BKE_object_is_visible_in_viewport(const View3D *v3d, const Object *ob)
Object * BKE_view_layer_edit_object_get(const ViewLayer *view_layer)
General operations, lookup, etc. for blender objects.
Mesh * BKE_object_get_evaluated_mesh_no_subsurf(const Object *object_eval)
A BVH for high poly meshes.
int BKE_pbvh_get_grid_num_verts(const Object &object)
int BKE_pbvh_get_grid_num_faces(const Object &object)
Depsgraph * BKE_scene_ensure_depsgraph(Main *bmain, Scene *scene, ViewLayer *view_layer)
void BKE_subdiv_ccg_topology_counters(const SubdivCCG &subdiv_ccg, int &r_num_vertices, int &r_num_edges, int &r_num_faces, int &r_num_loops)
float BLF_width(int fontid, const char *str, size_t str_len, ResultBLF *r_info=nullptr) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2)
void BLF_draw_default(float x, float y, float z, const char *str, size_t str_len) ATTR_NONNULL()
unsigned int BLI_ghashutil_ptrhash(const void *key)
GSet * BLI_gset_new(GSetHashFP hashfp, GSetCmpFP cmpfp, const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
bool BLI_ghashutil_ptrcmp(const void *a, const void *b)
void BLI_gset_free(GSet *gs, GSetKeyFreeFP keyfreefp)
bool BLI_gset_add(GSet *gs, void *key)
#define LISTBASE_FOREACH(type, var, list)
MINLINE int max_ii(int a, int b)
MINLINE int poly_to_tri_count(int poly_count, int corner_count)
#define BLI_STR_FORMAT_INT64_BYTE_UNIT_SIZE
#define SNPRINTF(dst, format,...)
void BLI_str_format_byte_unit(char dst[BLI_STR_FORMAT_INT64_BYTE_UNIT_SIZE], long long int bytes, bool base_10) ATTR_NONNULL(1)
#define BLI_STR_FORMAT_UINT64_GROUPED_SIZE
size_t BLI_snprintf_rlen(char *__restrict dst, size_t dst_maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
char char size_t BLI_strncpy_rlen(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
#define STRNCPY_UTF8(dst, src)
size_t BLI_timecode_string_from_time(char *str, size_t maxncpy, int brevity_level, float time_seconds, double fps, short timecode_style) ATTR_NONNULL()
#define ENUM_OPERATORS(_type, _max)
#define DEG_OBJECT_ITER_BEGIN(settings_, instance_)
#define DEG_OBJECT_ITER_END
#define DEG_OBJECT_ITER_FOR_RENDER_ENGINE_FLAGS
@ BASE_ENABLED_AND_VISIBLE_IN_DEFAULT_VIEWPORT
#define BASE_SELECTED(v3d, base)
#define OBEDIT_FROM_OBACT(ob)
@ STATUSBAR_SHOW_SCENE_DURATION
void GPU_mem_stats_get(int *r_totalmem, int *r_freemem)
bool GPU_mem_stats_supported()
Read Guarded memory(de)allocation.
const Depsgraph * depsgraph
#define SCENE_STATS_FMT_INT(_id)
static void stats_row(int col1, const char *key, int col2, const char *value1, const char *value2, int *y, int height)
static void stats_object_sculpt(const Object *ob, SceneStats *stats)
static void get_stats_string(char *info, int len, size_t *ofs, const Scene *scene, ViewLayer *view_layer, SceneStatsFmt *stats_fmt)
const char * ED_info_statusbar_string_ex(Main *bmain, Scene *scene, ViewLayer *view_layer, const char statusbar_flag)
const char * ED_info_statusbar_string(Main *bmain, Scene *scene, ViewLayer *view_layer)
const char * ED_info_statistics_string(Main *bmain, Scene *scene, ViewLayer *view_layer)
static void stats_update(Depsgraph *depsgraph, const Scene *scene, ViewLayer *view_layer, View3D *v3d_local, SceneStats *stats)
void ED_info_stats_clear(wmWindowManager *wm, ViewLayer *view_layer)
static void stats_object_pose(const Object *ob, SceneStats *stats)
static void stats_object(Object *ob, const View3D *v3d_local, SceneStats *stats, GSet *objects_gset)
static bool format_stats(Main *bmain, Scene *scene, ViewLayer *view_layer, View3D *v3d_local, SceneStatsFmt *stats_fmt)
static void stats_object_edit(Object *obedit, SceneStats *stats)
static bool stats_is_object_dynamic_topology_sculpt(const Object *ob)
static bool stats_mesheval(const Mesh *mesh_eval, bool is_selected, SceneStats *stats)
void ED_info_draw_stats(Main *bmain, Scene *scene, ViewLayer *view_layer, View3D *v3d_local, int x, int *y, int height)
void *(* MEM_mallocN)(size_t len, const char *str)
size_t(* MEM_get_memory_in_use)(void)
pbvh::Tree * pbvh_get(Object &object)
_W64 unsigned int uintptr_t
unsigned __int64 uint64_t
blender::Array< std::array< BMLoop *, 3 > > looptris
struct EditLatt * editlatt
struct Collection * collection
MeshRuntimeHandle * runtime
struct SculptSession * sculpt
char totobj[BLI_STR_FORMAT_UINT64_GROUPED_SIZE]
char totvertsel[BLI_STR_FORMAT_UINT64_GROUPED_SIZE]
char totedgesel[BLI_STR_FORMAT_UINT64_GROUPED_SIZE]
char totgpstroke[BLI_STR_FORMAT_UINT64_GROUPED_SIZE]
char totvert[BLI_STR_FORMAT_UINT64_GROUPED_SIZE]
char totfacesel[BLI_STR_FORMAT_UINT64_GROUPED_SIZE]
char totlamp[BLI_STR_FORMAT_UINT64_GROUPED_SIZE]
char totface[BLI_STR_FORMAT_UINT64_GROUPED_SIZE]
char totfacesculpt[BLI_STR_FORMAT_UINT64_GROUPED_SIZE]
char tottri[BLI_STR_FORMAT_UINT64_GROUPED_SIZE]
char totgplayer[BLI_STR_FORMAT_UINT64_GROUPED_SIZE]
char totbonesel[BLI_STR_FORMAT_UINT64_GROUPED_SIZE]
char totgpframe[BLI_STR_FORMAT_UINT64_GROUPED_SIZE]
char totlampsel[BLI_STR_FORMAT_UINT64_GROUPED_SIZE]
char totedge[BLI_STR_FORMAT_UINT64_GROUPED_SIZE]
char totbone[BLI_STR_FORMAT_UINT64_GROUPED_SIZE]
char tottrisel[BLI_STR_FORMAT_UINT64_GROUPED_SIZE]
char totobjsel[BLI_STR_FORMAT_UINT64_GROUPED_SIZE]
char totvertsculpt[BLI_STR_FORMAT_UINT64_GROUPED_SIZE]
char totgppoint[BLI_STR_FORMAT_UINT64_GROUPED_SIZE]
struct SceneStats * local_stats
struct SceneStats * stats
WindowManagerRuntimeHandle * runtime
ViewLayer * WM_window_get_active_view_layer(const wmWindow *win)
bScreen * WM_window_get_active_screen(const wmWindow *win)