1#ifndef OE_SCENE_LOADER_GLTF_EXTENSIONS_H
2#define OE_SCENE_LOADER_GLTF_EXTENSIONS_H
112 template <
typename ...ExtensionTypes>
124 template <
typename T,
typename... Args>
127 _extensions.emplace(name, std::in_place_type<T>, std::forward<Args>(args)...);
138 void applyOnAsset(
const std::string& name,
Node& root_node,
const nlohmann::json& extension_data,
const bool pre_load)
142 if (_extensions.count(name))
144 std::visit([&root_node, &extension_data, &pre_load](
auto& extension)
147 extension.applyOnAssetPreload(root_node, extension_data);
149 extension.applyOnAssetPostload(root_node, extension_data);
151 }, _extensions.at(name));
162 void applyOnNode(
const std::string& name,
Node& node,
const nlohmann::json& extension_data)
166 if (_extensions.count(name))
168 std::visit([&node, &extension_data](
auto& extension)
170 extension.applyOnNode(node, extension_data);
171 }, _extensions.at(name));
184 if (_extensions.count(name))
186 std::visit([&material, &extension_data](
auto& extension)
188 extension.applyOnMaterial(material, extension_data);
189 }, _extensions.at(name));
194 std::unordered_map<std::string, std::variant<ExtensionTypes...>> _extensions;
Render agnostic material.
Definition material.h:26
glTF custom extension manager
Definition gltf_extensions.h:114
void applyOnNode(const std::string &name, Node &node, const nlohmann::json &extension_data)
Apply a specific extension on a node with the provided data.
Definition gltf_extensions.h:162
void addExtension(const std::string &name, Args &&... args)
Add a new extension.
Definition gltf_extensions.h:125
void applyOnMaterial(const std::string &name, Material &material, const nlohmann::json &extension_data)
Apply a specific extension on a material with the provided data.
Definition gltf_extensions.h:182
void applyOnAsset(const std::string &name, Node &root_node, const nlohmann::json &extension_data, const bool pre_load)
Apply a specific extension on an asset with the provided data.
Definition gltf_extensions.h:138
Base class to handle glTF extensions.
Definition gltf_extensions.h:17
void applyOnNode(scene::Node &node, const nlohmann::json &extension_data)
Apply the extension on a node.
Definition gltf_extensions.h:65
void applyOnAssetPostload(scene::Node &root_node, const nlohmann::json &extension_data)
Apply the extension on the asset (postload)
Definition gltf_extensions.h:49
void applyOnAssetPreload(scene::Node &root_node, const nlohmann::json &extension_data)
Apply the extension on the asset (preload)
Definition gltf_extensions.h:30
void applyOnMaterial(scene::Material &material, const nlohmann::json &extension_data)
Apply the extension on a material.
Definition gltf_extensions.h:81
Helpers and classes related to glTF models.
Definition gltf_extensions.h:7