/* # ______ ____ ___ # | \/ ____| |___| # | | | \ | | #----------------------------------------------------------------------- # Copyright 2022, tyra - https://github.com/h4570/tyra # Licenced under Apache License 2.0 # Sandro Sobczyński */ #pragma once #include "../../loader.hpp" #include "../builder2/mesh_builder2_data.hpp" #include #include "renderer/models/color.hpp" #include "loaders/3d/obj_loader/tiny_obj_loader.hpp" namespace Tyra { /** Class responsible for loading & parsing custom Tyra obj files */ class ObjLoader : public Loader { public: ObjLoader(); ~ObjLoader(); /** Load multiple obj files (dynamic) */ MeshBuilder2Data* load(const char* fullpath, const u16& count, const float& scale, const bool& invertT); inline MeshBuilder2Data* load(const std::string& fullpath, const u16& count, const float& scale, const bool& invertT) { return load(fullpath.c_str(), count, scale, invertT); } private: void addOutputMaterialsAndFrames( MeshBuilder2Data* output, const tinyobj::attrib_t& attrib, const std::vector& shapes, const std::vector& materials, const u16& framesCount); void scan(MeshBuilder2Data* output, const tinyobj::attrib_t& attrib, const std::vector& shapes, const std::vector& materials, const u16& frameIndex); void importFrame(MeshBuilder2Data* output, const tinyobj::attrib_t& attrib, const std::vector& shapes, const std::vector& materials, const u16& frameIndex, const float& scale, const bool& invertY, const u16& count); }; } // namespace Tyra