#ifndef UNLIT_MATERIAL_PROVIDER_HPP #define UNLIT_MATERIAL_PROVIDER_HPP #include #include #include #include #include #include #include #include namespace thermion_filament { class UnlitMaterialProvider : public filament::gltfio::MaterialProvider { private: filament::Material* mUnlitMaterial; const filament::Material* mMaterials[1]; filament::Engine* mEngine; public: UnlitMaterialProvider(filament::Engine* engine, const void* const data, const size_t size) : mEngine(engine) { mUnlitMaterial = filament::Material::Builder() .package(data, size) .build(*engine); mMaterials[0] = mUnlitMaterial; } ~UnlitMaterialProvider() { mEngine->destroy(mUnlitMaterial); } filament::MaterialInstance* createMaterialInstance(filament::gltfio::MaterialKey* config, filament::gltfio::UvMap* uvmap, const char* label = "unlit", const char* extras = nullptr) override { auto instance = mUnlitMaterial->createInstance(); return instance; } filament::Material* getMaterial(filament::gltfio::MaterialKey* config, filament::gltfio::UvMap* uvmap, const char* label = "unlit") override { return mUnlitMaterial; } const filament::Material* const* getMaterials() const noexcept override { return mMaterials; } size_t getMaterialsCount() const noexcept override { return 1; } void destroyMaterials() override { // Materials are destroyed in the destructor } bool needsDummyData(filament::VertexAttribute attrib) const noexcept override { // For unlit material, we don't need dummy data for any attribute return false; } }; } // namespace thermion_filament #endif // UNLIT_MATERIAL_PROVIDER_HPP