#pragma once #include #include #include #include #include #include #include #include #include #include "GeometrySceneAsset.hpp" #include "Log.hpp" namespace thermion { class GeometrySceneAssetBuilder { public: GeometrySceneAssetBuilder(filament::Engine *engine); GeometrySceneAssetBuilder &vertices(const float *vertices, uint32_t count); GeometrySceneAssetBuilder &normals(const float *normals, uint32_t count); GeometrySceneAssetBuilder &uvs(const float *uvs, uint32_t count); GeometrySceneAssetBuilder &indices(const uint16_t *indices, uint32_t count); GeometrySceneAssetBuilder &materials(filament::MaterialInstance **materials, size_t materialInstanceCount); GeometrySceneAssetBuilder &primitiveType(filament::RenderableManager::PrimitiveType type); std::unique_ptr build(); private: Box computeBoundingBox(); std::pair createBuffers(); bool validate() const; filament::Engine *mEngine = nullptr; std::vector *mVertices = new std::vector(); std::vector *mNormals = new std::vector(); std::vector *mUVs = new std::vector(); std::vector *mIndices = new std::vector; filament::MaterialInstance **mMaterialInstances = nullptr; size_t mMaterialInstanceCount = 0; filament::gltfio::MaterialProvider *mMaterialProvider = nullptr; filament::RenderableManager::PrimitiveType mPrimitiveType = filament::RenderableManager::PrimitiveType::TRIANGLES; }; } // namespace thermion