diff options
author | Philipp Oeser <info@graphics-engineer.com> | 2018-11-19 17:24:32 +0300 |
---|---|---|
committer | Philipp Oeser <info@graphics-engineer.com> | 2018-11-21 18:34:32 +0300 |
commit | cec83e92e6160adf1e39e0173c77743cb1ff1be7 (patch) | |
tree | 1ff09e025d910d63af6f0716cc26e4f015e56d29 /source | |
parent | d3e686d61eb93aed5487c4037d7675cf811039a1 (diff) |
Fix T57884: Triangle count is incorrect when above around 2 billion
Maniphest Tasks: T57884
Differential Revision: https://developer.blender.org/D3962
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenlib/BLI_string.h | 2 | ||||
-rw-r--r-- | source/blender/blenlib/intern/string.c | 48 | ||||
-rw-r--r-- | source/blender/editors/space_info/info_stats.c | 18 |
3 files changed, 46 insertions, 22 deletions
diff --git a/source/blender/blenlib/BLI_string.h b/source/blender/blenlib/BLI_string.h index eef4e0647aa..2fb8f045841 100644 --- a/source/blender/blenlib/BLI_string.h +++ b/source/blender/blenlib/BLI_string.h @@ -33,6 +33,7 @@ */ #include <stdarg.h> +#include <inttypes.h> #ifdef __cplusplus extern "C" { @@ -71,6 +72,7 @@ char *BLI_sprintfN(const char *__restrict format, ...) ATTR_WARN_UNUSED_RESULT A size_t BLI_strescape(char *__restrict dst, const char *__restrict src, const size_t maxncpy) ATTR_NONNULL(); size_t BLI_str_format_int_grouped(char dst[16], int num) ATTR_NONNULL(); +size_t BLI_str_format_uint64_grouped(char dst[16], uint64_t num) ATTR_NONNULL(); void BLI_str_format_byte_unit(char dst[15], long long int size, const bool base_10) ATTR_NONNULL(); int BLI_strcaseeq(const char *a, const char *b) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(); diff --git a/source/blender/blenlib/intern/string.c b/source/blender/blenlib/intern/string.c index 938728aa4bb..3deab9b2ae9 100644 --- a/source/blender/blenlib/intern/string.c +++ b/source/blender/blenlib/intern/string.c @@ -35,6 +35,7 @@ #include <stdlib.h> #include <stdarg.h> #include <ctype.h> +#include <inttypes.h> #include "MEM_guardedalloc.h" @@ -975,24 +976,13 @@ size_t BLI_str_partition_ex( return end ? (size_t)(end - str) : strlen(str); } -/** - * Format ints with decimal grouping. - * 1000 -> 1,000 - * - * \param dst The resulting string - * \param num Number to format - * \return The length of \a dst - */ -size_t BLI_str_format_int_grouped(char dst[16], int num) +size_t BLI_str_format_int_grouped_ex(char src[16], char dst[16], int num_len) { - char src[16]; char *p_src = src; char *p_dst = dst; const char separator = ','; - int num_len, commas; - - num_len = sprintf(src, "%d", num); + int commas; if (*p_src == '-') { *p_dst++ = *p_src++; @@ -1011,6 +1001,38 @@ size_t BLI_str_format_int_grouped(char dst[16], int num) } /** + * Format ints with decimal grouping. + * 1000 -> 1,000 + * + * \param dst The resulting string + * \param num Number to format + * \return The length of \a dst + */ +size_t BLI_str_format_int_grouped(char dst[16], int num) +{ + char src[16]; + int num_len = sprintf(src, "%d", num); + + return BLI_str_format_int_grouped_ex(src, dst, num_len); +} + +/** + * Format uint64_t with decimal grouping. + * 1000 -> 1,000 + * + * \param dst The resulting string + * \param num Number to format + * \return The length of \a dst + */ +size_t BLI_str_format_uint64_grouped(char dst[16], uint64_t num) +{ + char src[16]; + int num_len = sprintf(src, "%"PRIu64"",num); + + return BLI_str_format_int_grouped_ex(src, dst, num_len); +} + +/** * Format a size in bytes using binary units. * 1000 -> 1 KB * Number of decimal places grows with the used unit (e.g. 1.5 MB, 1.55 GB, 1.545 TB). diff --git a/source/blender/editors/space_info/info_stats.c b/source/blender/editors/space_info/info_stats.c index 1848a22a619..c842ac07eef 100644 --- a/source/blender/editors/space_info/info_stats.c +++ b/source/blender/editors/space_info/info_stats.c @@ -70,14 +70,14 @@ #define MAX_INFO_NUM_LEN 16 typedef struct SceneStats { - int totvert, totvertsel; - int totedge, totedgesel; - int totface, totfacesel; - int totbone, totbonesel; - int totobj, totobjsel; - int totlamp, totlampsel; - int tottri; - int totgplayer, totgpframe, totgpstroke, totgppoint; + uint64_t totvert, totvertsel; + uint64_t totedge, totedgesel; + uint64_t totface, totfacesel; + uint64_t totbone, totbonesel; + uint64_t totobj, totobjsel; + uint64_t totlamp, totlampsel; + uint64_t tottri; + uint64_t totgplayer, totgpframe, totgpstroke, totgppoint; char infostr[MAX_INFO_LEN]; } SceneStats; @@ -450,7 +450,7 @@ static void stats_string(ViewLayer *view_layer) /* Generate formatted numbers */ #define SCENE_STATS_FMT_INT(_id) \ - BLI_str_format_int_grouped(stats_fmt._id, stats->_id) + BLI_str_format_uint64_grouped(stats_fmt._id, stats->_id) SCENE_STATS_FMT_INT(totvert); SCENE_STATS_FMT_INT(totvertsel); |