Files
sophia/engine/src/assets/pools/mesh_pool.cpp
T
2026-09-09 11:36:07 -07:00

42 lines
1.1 KiB
C++

#include "assets/pools/mesh_pool.hpp"
#include <sophia/util/assert.hpp>
namespace sophia {
MeshPool::MeshPool(Device& device) : device{device} {}
MeshPool::~MeshPool() = default;
MeshHandle MeshPool::create(const Mesh::Builder& builder) {
auto mesh = std::make_unique<Mesh>(device, builder);
if (!freeList.empty()) {
MeshHandle handle = freeList.back();
freeList.pop_back();
meshes[handle] = std::move(mesh);
return handle;
}
meshes.push_back(std::move(mesh));
return static_cast<MeshHandle>(meshes.size() - 1);
}
const Mesh& MeshPool::get(MeshHandle handle) const {
SOPHIA_ASSERT(handle < meshes.size(), "invalid MeshHandle:", handle);
SOPHIA_ASSERT(meshes[handle] != nullptr,
"MeshHandle refers to a released mesh:", handle);
return *meshes[handle];
}
void MeshPool::release(MeshHandle handle) {
SOPHIA_ASSERT(handle < meshes.size(), "invalid MeshHandle:", handle);
SOPHIA_ASSERT(meshes[handle] != nullptr,
"MeshHandle already released:", handle);
meshes[handle].reset();
freeList.push_back(handle);
}
} // namespace sophia