Cleanup shader handling
This commit is contained in:
@@ -61,10 +61,7 @@ namespace openVulkanoCpp::Vulkan
|
||||
device.freeCommandBuffers(cmdPools[i], 1, &cmdBuffers[i]);
|
||||
device.destroyCommandPool(cmdPools[i]);
|
||||
}
|
||||
for (auto shader : shaders)
|
||||
{
|
||||
shader->Close();
|
||||
}
|
||||
shaders.clear();
|
||||
cmdBuffers = nullptr;
|
||||
cmdPools = nullptr;
|
||||
device = nullptr;
|
||||
@@ -88,7 +85,7 @@ namespace openVulkanoCpp::Vulkan
|
||||
|
||||
void ResourceManager::Resize()
|
||||
{
|
||||
for (auto shader : shaders)
|
||||
for (auto& shader : shaders)
|
||||
{
|
||||
shader->Resize();
|
||||
}
|
||||
@@ -173,7 +170,12 @@ namespace openVulkanoCpp::Vulkan
|
||||
|
||||
void ResourceManager::RemoveShader(VulkanShader* shader)
|
||||
{
|
||||
Utils::Remove(shaders, shader);
|
||||
const std::unique_lock lock(mutex);
|
||||
std::vector<std::unique_ptr<VulkanShader>>::iterator object =
|
||||
find_if(shaders.begin(), shaders.end(),
|
||||
[&](auto& obj){ return obj.get() == shader; }
|
||||
);
|
||||
shaders.erase(object);
|
||||
}
|
||||
|
||||
void ResourceManager::FreeBuffer(ManagedBuffer* buffer)
|
||||
@@ -267,9 +269,10 @@ namespace openVulkanoCpp::Vulkan
|
||||
|
||||
VulkanShader* ResourceManager::CreateShader(Scene::Shader* shader)
|
||||
{
|
||||
const std::unique_lock lock(mutex);
|
||||
VulkanShader* vkShader = new VulkanShader();
|
||||
vkShader->Init(context, shader, this);
|
||||
shaders.push_back(vkShader);
|
||||
shaders.emplace_back(vkShader);
|
||||
return vkShader;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user