fix: remove MaterialInstance from SceneManager storage when destroyed
This commit is contained in:
@@ -578,6 +578,7 @@ namespace thermion
|
||||
_engine->destroy(materialInstance);
|
||||
}
|
||||
|
||||
|
||||
// TODO - free geometry?
|
||||
_textures.clear();
|
||||
_assets.clear();
|
||||
@@ -2503,8 +2504,12 @@ namespace thermion
|
||||
materialInstance->setParameter(property, filament::math::float4{value.x, value.y, value.z, value.w});
|
||||
}
|
||||
|
||||
void SceneManager::destroy(MaterialInstance *instance)
|
||||
void SceneManager::destroy(filament::MaterialInstance *instance)
|
||||
{
|
||||
auto it = std::find(_materialInstances.begin(), _materialInstances.end(), instance);
|
||||
if(it != _materialInstances.end()) {
|
||||
_materialInstances.erase(it);
|
||||
}
|
||||
_engine->destroy(instance);
|
||||
}
|
||||
|
||||
|
||||
@@ -130,4 +130,11 @@ extern "C"
|
||||
{
|
||||
return ((SceneManager *)sceneManager)->createGeometry(vertices, static_cast<uint32_t>(numVertices), normals, static_cast<uint32_t>(numNormals), uvs, static_cast<uint32_t>(numUvs), indices, static_cast<uint32_t>(numIndices), (filament::RenderableManager::PrimitiveType)primitiveType, reinterpret_cast<MaterialInstance *>(materialInstance), keepData);
|
||||
}
|
||||
|
||||
EMSCRIPTEN_KEEPALIVE void SceneManager_destroyMaterialInstance(TSceneManager *sceneManager, TMaterialInstance *instance)
|
||||
{
|
||||
((SceneManager *)sceneManager)->destroy(reinterpret_cast<MaterialInstance *>(instance));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user