engine/src/util/gltf_loader.cpp

75 lines
1.6 KiB
C++
Raw Normal View History

2023-10-02 11:54:37 +00:00
#include "util/gltf_loader.h"
#include "log.h"
#include "util/files.h"
2023-11-28 12:50:55 +00:00
#include "libs/tiny_gltf.h"
#include "components/mesh_renderable.h"
namespace tg = tinygltf;
2023-10-02 11:54:37 +00:00
namespace engine::util {
engine::Entity LoadGLTF(Scene& scene, const std::string& path, bool isStatic)
{
2023-11-28 12:50:55 +00:00
tg::TinyGLTF loader;
tg::Model model;
std::string err, warn;
loader.SetParseStrictness(tg::ParseStrictness::Strict);
const bool success = loader.LoadBinaryFromFile(&model, &err, &warn, path);
if (!warn.empty()) {
LOG_WARN("glTF Loader: {}", warn);
}
if (!err.empty()) {
LOG_ERROR("glTF Loader: {}", err);
}
if (!success) {
throw std::runtime_error("Failed to load glTF file!");
}
LOG_INFO("Loaded glTF model, contains {} scenes", model.scenes.size());
// test model loading
if (model.scenes.size() < 1) {
throw std::runtime_error("Need at least 1 scene");
}
int scene_index = 0;
if (model.defaultScene != -1) scene_index = model.defaultScene;
tg::Scene& s = model.scenes.at(scene_index);
if (s.nodes.size() < 1) {
throw std::runtime_error("Need at least 1 node in the scene");
}
const tg::Node& node = model.nodes.at(s.nodes[0]);
const Entity e = scene.CreateEntity("test_node", 0);
//const tg::Mesh& gt_mesh = model.meshes.at(0);
//std::vector<uint32_t> indices;
//model.buffers[0].
//auto mesh = std::make_unique<Mesh>(scene.app()->renderer()->GetDevice(), vertices, indices);
//auto mr = scene.AddComponent<MeshRenderableComponent>(e);
2023-10-02 11:54:37 +00:00
2023-11-28 12:50:55 +00:00
// if (node.mesh)
2023-10-02 11:54:37 +00:00
return static_cast<Entity>(0u);
}
} // namespace engine::util