Сейчас MeshRegistry, TextureRegistry и т.д. работают по неудачной схеме (для наглядности ниже рассмотрим MeshRegistry):
- при регистрации нового ассета создается новый
handleValue
handleValue соответствует индексу слота в _meshAssets
- lookup по хэндлу идет за
O(1) напрямую по индексу
Unload() только сбрасывает MeshData в nullptr, но не удаляет сам слот и не освобождает индекс
- новые ассеты всегда добавляются в конец массива
При сценариях с асинхронной подгрузкой/отгрузкой сцен такой подход приводит к накоплению пустых слотов. Поэтому нужно его переписать на подход, когда у нас переиспользуются освобождённые индексы в _meshAssets.
Пока без самой идеи реализации, её допишем сюда позже, как будем приступать к самой реализации.
Сейчас
MeshRegistry,TextureRegistryи т.д. работают по неудачной схеме (для наглядности ниже рассмотримMeshRegistry):handleValuehandleValueсоответствует индексу слота в_meshAssetsO(1)напрямую по индексуUnload()только сбрасываетMeshDataвnullptr, но не удаляет сам слот и не освобождает индексПри сценариях с асинхронной подгрузкой/отгрузкой сцен такой подход приводит к накоплению пустых слотов. Поэтому нужно его переписать на подход, когда у нас переиспользуются освобождённые индексы в
_meshAssets.Пока без самой идеи реализации, её допишем сюда позже, как будем приступать к самой реализации.