1#ifndef OE_SCENE_LOADER_GLTF_EXTENSIONS_H
2#define OE_SCENE_LOADER_GLTF_EXTENSIONS_H
4#include "../node_ptr.h"
5#include "../material.h"
6#include "../../lib/json.hpp"
114 template <
typename ...ExtensionTypes>
126 template <
typename T,
typename... Args>
129 _extensions.emplace(name, std::in_place_type<T>, std::forward<Args>(args)...);
140 void applyOnAsset(
const std::string& name,
NodePtr root_node,
const nlohmann::json& extension_data,
const bool pre_load)
144 if (_extensions.count(name))
146 std::visit([&root_node, &extension_data, &pre_load](
auto& extension)
149 extension.applyOnAssetPreload(root_node, extension_data);
151 extension.applyOnAssetPostload(root_node, extension_data);
153 }, _extensions.at(name));
168 if (_extensions.count(name))
170 std::visit([&node, &extension_data](
auto& extension)
172 extension.applyOnNode(node, extension_data);
173 }, _extensions.at(name));
186 if (_extensions.count(name))
188 std::visit([&material, &extension_data](
auto& extension)
190 extension.applyOnMaterial(material, extension_data);
191 }, _extensions.at(name));
196 std::unordered_map<std::string, std::variant<ExtensionTypes...>> _extensions;
Render agnostic material.
Definition material.h:90
glTF custom extension manager
Definition gltf_extensions.h:116
void addExtension(const std::string &name, Args &&... args)
Add a new extension.
Definition gltf_extensions.h:127
void applyOnNode(const std::string &name, NodePtr node, const nlohmann::json &extension_data)
Apply a specific extension on a node with the provided data.
Definition gltf_extensions.h:164
void applyOnAsset(const std::string &name, NodePtr 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:140
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:184
Base class to handle glTF extensions.
Definition gltf_extensions.h:19
void applyOnNode(scene::NodePtr node, const nlohmann::json &extension_data)
Apply the extension on a node.
Definition gltf_extensions.h:67
void applyOnAssetPreload(scene::NodePtr root_node, const nlohmann::json &extension_data)
Apply the extension on the asset (preload)
Definition gltf_extensions.h:32
void applyOnAssetPostload(scene::NodePtr root_node, const nlohmann::json &extension_data)
Apply the extension on the asset (postload)
Definition gltf_extensions.h:51
void applyOnMaterial(scene::Material &material, const nlohmann::json &extension_data)
Apply the extension on a material.
Definition gltf_extensions.h:83
Helpers and classes related to glTF models.
Definition gltf_extensions.h:9
Wrapper to a node reference to use pointers to node even if the actual node moves in memory.
Definition node_ptr.h:19