diff options
author | Dave Parks <davep@lindenlab.com> | 2024-06-10 16:57:31 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-10 16:57:31 -0500 |
commit | 4522f33d2bad2cc0f67e10a0b0ad3cc7c1b43fbd (patch) | |
tree | f2e020507f3240208e8d0b105f7e100a1e7aaf36 /indra/newview/gltf/asset.cpp | |
parent | 4705362a332a2347510c81c8d00a1f607ad88af8 (diff) |
#1677 Add GLTF extensions serialization and support for KHR_materials_unlit (#1686)
Diffstat (limited to 'indra/newview/gltf/asset.cpp')
-rw-r--r-- | indra/newview/gltf/asset.cpp | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/indra/newview/gltf/asset.cpp b/indra/newview/gltf/asset.cpp index 7d379c2528..a4efb25860 100644 --- a/indra/newview/gltf/asset.cpp +++ b/indra/newview/gltf/asset.cpp @@ -39,10 +39,15 @@ using namespace LL::GLTF; using namespace boost::json; + namespace LL { namespace GLTF { + static std::unordered_set<std::string> ExtensionsSupported = { + "KHR_materials_unlit" + }; + Material::AlphaMode gltf_alpha_mode_to_enum(const std::string& alpha_mode) { if (alpha_mode == "OPAQUE") @@ -382,6 +387,22 @@ void Asset::update() bool Asset::prep() { + // check required extensions and fail if not supported + bool unsupported = false; + for (auto& extension : mExtensionsRequired) + { + if (ExtensionsSupported.find(extension) == ExtensionsSupported.end()) + { + LL_WARNS() << "Unsupported extension: " << extension << LL_ENDL; + unsupported = true; + } + } + + if (unsupported) + { + return false; + } + // do buffers first as other resources depend on them for (auto& buffer : mBuffers) { @@ -600,6 +621,8 @@ const Asset& Asset::operator=(const Value& src) copy(obj, "accessors", mAccessors); copy(obj, "animations", mAnimations); copy(obj, "skins", mSkins); + copy(obj, "extensionsUsed", mExtensionsUsed); + copy(obj, "extensionsRequired", mExtensionsRequired); } return *this; @@ -628,6 +651,8 @@ void Asset::serialize(object& dst) const write(mAccessors, "accessors", dst); write(mAnimations, "animations", dst); write(mSkins, "skins", dst); + write(mExtensionsUsed, "extensionsUsed", dst); + write(mExtensionsRequired, "extensionsRequired", dst); } bool Asset::save(const std::string& filename) @@ -979,6 +1004,17 @@ bool Material::PbrMetallicRoughness::operator!=(const Material::PbrMetallicRough return !(*this == rhs); } +const Material::Unlit& Material::Unlit::operator=(const Value& src) +{ + mPresent = true; + return *this; +} + +void Material::Unlit::serialize(object& dst) const +{ + // no members and object has already been created, nothing to do +} + void Material::serialize(object& dst) const { write(mName, "name", dst); @@ -990,6 +1026,7 @@ void Material::serialize(object& dst) const write(mAlphaMode, "alphaMode", dst, Material::AlphaMode::OPAQUE); write(mAlphaCutoff, "alphaCutoff", dst, 0.5f); write(mDoubleSided, "doubleSided", dst, false); + write_extensions(dst, &mUnlit, "KHR_materials_unlit"); } const Material& Material::operator=(const Value& src) @@ -1005,6 +1042,8 @@ const Material& Material::operator=(const Value& src) copy(src, "alphaMode", mAlphaMode); copy(src, "alphaCutoff", mAlphaCutoff); copy(src, "doubleSided", mDoubleSided); + copy_extensions(src, + "KHR_materials_unlit", &mUnlit ); } return *this; } @@ -1027,7 +1066,6 @@ const Mesh& Mesh::operator=(const Value& src) } return *this; - } bool Mesh::prep(Asset& asset) |