Improve resource handling
This commit is contained in:
@@ -12,6 +12,8 @@
|
||||
|
||||
namespace openVulkanoCpp::Vulkan
|
||||
{
|
||||
ResourceManager* ResourceManager::INSTANCE;
|
||||
|
||||
ResourceManager::ResourceManager() = default;
|
||||
|
||||
ResourceManager::~ResourceManager() noexcept
|
||||
@@ -39,6 +41,8 @@ namespace openVulkanoCpp::Vulkan
|
||||
toFree.resize(buffers);
|
||||
|
||||
transferQueue = this->device.getQueue(context->device->queueIndices.transfer, 0);
|
||||
|
||||
INSTANCE = this;
|
||||
}
|
||||
|
||||
void ResourceManager::Close()
|
||||
@@ -82,17 +86,18 @@ namespace openVulkanoCpp::Vulkan
|
||||
}
|
||||
}
|
||||
|
||||
void ResourceManager::PrepareGeometry(Scene::Geometry* geometry)
|
||||
VulkanGeometry* ResourceManager::PrepareGeometry(Scene::Geometry* geometry)
|
||||
{
|
||||
const std::unique_lock lock(mutex);
|
||||
if(!geometry->renderGeo)
|
||||
{
|
||||
VulkanGeometry* vkGeometry = new VulkanGeometry();
|
||||
ManagedBuffer* vertexBuffer = CreateDeviceOnlyBufferWithData(sizeof(Vertex) * geometry->GetVertexCount(), vk::BufferUsageFlagBits::eVertexBuffer, geometry->GetVertices());
|
||||
ManagedBuffer* indexBuffer = CreateDeviceOnlyBufferWithData(Utils::EnumAsInt(geometry->indexType) * geometry->GetIndexCount(), vk::BufferUsageFlagBits::eIndexBuffer, geometry->GetIndices());
|
||||
vkGeometry->Init(geometry, vertexBuffer->buffer, indexBuffer->buffer);
|
||||
geometry->renderGeo = vkGeometry;
|
||||
VulkanGeometry* vkGeo = new VulkanGeometry(geometry, vertexBuffer, indexBuffer);
|
||||
geometry->renderGeo = vkGeo;
|
||||
return vkGeo;
|
||||
}
|
||||
return dynamic_cast<VulkanGeometry*>(geometry->renderGeo);
|
||||
}
|
||||
|
||||
void ResourceManager::PrepareMaterial(Scene::Material* material)
|
||||
@@ -131,6 +136,13 @@ namespace openVulkanoCpp::Vulkan
|
||||
}
|
||||
}
|
||||
|
||||
ManagedBuffer* ResourceManager::CreateSharedMemoryBuffer(const size_t size)
|
||||
{
|
||||
const std::unique_lock lock(mutex);
|
||||
ManagedBuffer* buffer = CreateBuffer(size, vk::BufferUsageFlagBits::eVertexBuffer, vk::MemoryPropertyFlagBits::eHostCoherent);
|
||||
return buffer;
|
||||
}
|
||||
|
||||
void ResourceManager::RemoveShader(VulkanShader* shader)
|
||||
{
|
||||
Utils::Remove(shaders, shader);
|
||||
|
||||
Reference in New Issue
Block a user