Add render resouce

This commit is contained in:
Georg Hagen
2024-08-20 23:44:17 +02:00
parent 42f7a96f43
commit 25a0978a57
6 changed files with 164 additions and 32 deletions

View File

@@ -183,7 +183,7 @@ namespace OpenVulkano::Vulkan
VulkanNode* ResourceManager::PrepareNode(Scene::Node* node)
{
const std::unique_lock lock(mutex);
if (!node->renderNode)
if (!node->HasRenderResource())
{
UniformBuffer* uBuffer = new UniformBuffer();
ManagedBuffer::Ptr buffer;
@@ -193,23 +193,22 @@ namespace OpenVulkano::Vulkan
if (node->GetUpdateFrequency() != Scene::UpdateFrequency::Never)
{
frameSize = allocSize;
vkNode = new VulkanNodeDynamic();
vkNode = new VulkanNodeDynamic(node, uBuffer);
const uint32_t imgs = context->swapChain.GetImageCount();
buffer = memPool.CreateBuffer(imgs * allocSize, vk::BufferUsageFlagBits::eUniformBuffer, vk::MemoryPropertyFlagBits::eHostCoherent | vk::MemoryPropertyFlagBits::eHostVisible);
buffer->Map();
}
else
{
vkNode = new VulkanNode();
buffer = CreateDeviceOnlyBufferWithData(Scene::Node::SIZE, vk::BufferUsageFlagBits::eUniformBuffer, &node->worldMat);
vkNode = new VulkanNode(node, uBuffer);
}
uBuffer->Init(std::move(buffer), frameSize, allocSize, GetDescriptorLayoutSet(Scene::Node::DESCRIPTOR_SET_LAYOUT_BINDING), Scene::Node::DESCRIPTOR_SET_LAYOUT_BINDING, 0);
vkNode->Init(node, uBuffer);
node->renderNode = vkNode;
nodes.emplace_back(vkNode);
return vkNode;
}
return static_cast<VulkanNode*>(node->renderNode);
return node->GetRenderResource();
}
VulkanCamera* ResourceManager::PrepareCamera(Scene::Camera* camera)