Add simdjson 32-bit float helper to simplify parsing.
Some checks failed
CMake on multiple platforms / build (Release, cl, cl, windows-latest) (push) Has been cancelled
CMake on multiple platforms / build (Release, clang, clang++, macos-latest) (push) Has been cancelled
CMake on multiple platforms / build (Release, clang, clang++, ubuntu-latest) (push) Has been cancelled
CMake on multiple platforms / build (Release, gcc, g++, ubuntu-latest) (push) Has been cancelled

Implemented KRMaterial::TransformedTexture::parse()
This commit is contained in:
2026-04-19 13:50:46 -07:00
parent d1d98c079f
commit e723948d6a
3 changed files with 33 additions and 24 deletions

View File

@@ -55,6 +55,16 @@ const hydra::AABB getXMLAttribute(const std::string& base_name, ::tinyxml2::XMLE
namespace simdjson { namespace simdjson {
// 32-bit float simdjson deserialization helper
template <typename simdjson_value>
auto tag_invoke(deserialize_tag, simdjson_value &val, float& ret)
{
double doubleRet = ret;
auto error = val.get(doubleRet);
ret = static_cast<float>(doubleRet);
return error;
}
template <typename builder_type> template <typename builder_type>
void tag_invoke(serialize_tag, builder_type& builder, const hydra::Vector2& vec) void tag_invoke(serialize_tag, builder_type& builder, const hydra::Vector2& vec)
{ {

View File

@@ -58,8 +58,10 @@ void tag_invoke(serialize_tag, builder_type& builder, const KRMaterial::Transfor
builder.end_object(); builder.end_object();
} }
template <typename simdjson_value> } // namespace simdjson
auto tag_invoke(deserialize_tag, simdjson_value &val, KRMaterial::TransformedTexture& map) {
simdjson::error_code KRMaterial::TransformedTexture::parse(simdjson::ondemand::value &val)
{
ondemand::object obj; ondemand::object obj;
auto error = val.get_object().get(obj); auto error = val.get_object().get(obj);
if (error) { if (error) {
@@ -70,25 +72,23 @@ auto tag_invoke(deserialize_tag, simdjson_value &val, KRMaterial::TransformedTex
if ((error = obj["texture"].get_string().get(textureName))) { if ((error = obj["texture"].get_string().get(textureName))) {
return error; return error;
} }
map.texture.set(textureName); texture.set(textureName);
if ((error = obj["offset"].get(map.offset))) { if ((error = obj["offset"].get(offset))) {
return error; return error;
} }
if ((error = obj["scale"].get(map.scale))) { if ((error = obj["scale"].get(scale))) {
return error; return error;
} }
double v; if ((error = obj["rotation"].get(rotation))) {
if ((error = obj["rotation"].get(v))) {
return error; return error;
} }
map.rotation = v;
return simdjson::SUCCESS; return simdjson::SUCCESS;
} }
} // namespace simdjson
KRMaterial::KRMaterial(KRContext& context, const char* name) KRMaterial::KRMaterial(KRContext& context, const char* name)
: KRResource(context, name) : KRResource(context, name)
@@ -143,26 +143,20 @@ KRMaterial::KRMaterial(KRContext& context, std::string name, mimir::Block* data)
// TODO - Report and handle error // TODO - Report and handle error
} }
double doubleVal = 0.5f; error = jsonRoot["alphaCutoff"].get(m_alphaCutoff);
error = jsonRoot["alphaCutoff"].get(doubleVal);
if (error != simdjson::EMPTY) { if (error != simdjson::EMPTY) {
// TODO - Report and handle error // TODO - Report and handle error
} }
m_alphaCutoff = doubleVal;
doubleVal = 1.5f; error = jsonRoot["ior"].get(m_ior);
error = jsonRoot["ior"].get(doubleVal);
if (error != simdjson::EMPTY) { if (error != simdjson::EMPTY) {
// TODO - Report and handle error // TODO - Report and handle error
} }
m_ior = doubleVal;
doubleVal = 0.f; error = jsonRoot["dispersion"].get(m_dispersion);
error = jsonRoot["dispersion"].get(doubleVal);
if (error != simdjson::EMPTY) { if (error != simdjson::EMPTY) {
// TODO - Report and handle error // TODO - Report and handle error
} }
m_dispersion = doubleVal;
m_shadingModel = KRMATERIAL_SHADING_MODEL_PBR; m_shadingModel = KRMATERIAL_SHADING_MODEL_PBR;
std::string_view shadingModelText; std::string_view shadingModelText;
@@ -179,13 +173,17 @@ KRMaterial::KRMaterial(KRContext& context, std::string name, mimir::Block* data)
// TODO - Report and handle error // TODO - Report and handle error
} }
/* simdjson::ondemand::object baseColorObj;
simdjson::dom::object baseColorObj;
error = jsonRoot["baseColor"].get_object().get(baseColorObj); error = jsonRoot["baseColor"].get_object().get(baseColorObj);
if (error == simdjson::SUCCESS) { if (error == simdjson::SUCCESS) {
simdjson::ondemand::value mapVal;
error = baseColorObj["map"].get<TransformedTexture>().get(m_baseColorTexture); error = baseColorObj["map"].get(mapVal);
if (error != simdjson::EMPTY) { if (error == simdjson::SUCCESS) {
error = m_baseColorTexture.parse(mapVal);
if (error != simdjson::EMPTY) {
// TODO - Report and handle error
}
} else if (error != simdjson::EMPTY) {
// TODO - Report and handle error // TODO - Report and handle error
} }
error = baseColorObj["factor"].get<Vector4>().get(m_baseColorFactor); error = baseColorObj["factor"].get<Vector4>().get(m_baseColorFactor);
@@ -195,7 +193,6 @@ KRMaterial::KRMaterial(KRContext& context, std::string name, mimir::Block* data)
} else if (error != simdjson::EMPTY) { } else if (error != simdjson::EMPTY) {
// TODO - Report and handle error // TODO - Report and handle error
} }
*/
} }

View File

@@ -82,6 +82,8 @@ public:
: texture{ usage } : texture{ usage }
{ {
} }
simdjson::error_code parse(simdjson::ondemand::value &val);
}; };
KRMaterial(KRContext& context, const char* szName); KRMaterial(KRContext& context, const char* szName);