From 4b9ddbc2607b35d04b538bda664ed5d479266af8 Mon Sep 17 00:00:00 2001 From: ksuprynowicz Date: Wed, 22 May 2024 02:50:28 +0200 Subject: [PATCH 1/2] Fixed locale problems with cgltf.h --- libraries/model-serializers/src/GLTFSerializer.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/libraries/model-serializers/src/GLTFSerializer.h b/libraries/model-serializers/src/GLTFSerializer.h index 5d31a5618a4..1999ba71cf4 100644 --- a/libraries/model-serializers/src/GLTFSerializer.h +++ b/libraries/model-serializers/src/GLTFSerializer.h @@ -14,6 +14,19 @@ #ifndef hifi_GLTFSerializer_h #define hifi_GLTFSerializer_h +#include + +inline float atof_locale_independent(char *str) { + //TODO: Once we have C++17 we can use std::from_chars + std::istringstream streamToParse(str); + streamToParse.imbue(std::locale("C")); + float value = 0.0f; + streamToParse >> value; + return value; +} + +#define CGLTF_ATOF(str) atof_locale_independent(str) + #include "cgltf.h" #include From 1ba6026a8510c46ecdf1975e9c3a5c9135916ddc Mon Sep 17 00:00:00 2001 From: ksuprynowicz Date: Wed, 22 May 2024 22:16:22 +0200 Subject: [PATCH 2/2] Added error message to float parser --- .../model-serializers/src/GLTFSerializer.h | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/libraries/model-serializers/src/GLTFSerializer.h b/libraries/model-serializers/src/GLTFSerializer.h index 1999ba71cf4..203bae47d58 100644 --- a/libraries/model-serializers/src/GLTFSerializer.h +++ b/libraries/model-serializers/src/GLTFSerializer.h @@ -16,12 +16,20 @@ #include -inline float atof_locale_independent(char *str) { +#include +#include +#include +#include + +static float atof_locale_independent(char *str) { //TODO: Once we have C++17 we can use std::from_chars std::istringstream streamToParse(str); streamToParse.imbue(std::locale("C")); - float value = 0.0f; - streamToParse >> value; + float value; + if(!(streamToParse >> value)) { + qDebug(modelformat) << "cgltf: Cannot parse float from string: " << str; + return 0.0f; + } return value; } @@ -29,11 +37,6 @@ inline float atof_locale_independent(char *str) { #include "cgltf.h" -#include -#include -#include -#include - class GLTFSerializer : public QObject, public HFMSerializer { Q_OBJECT