From 9f05b3e3a293c312d78250fd414d302ff4997786 Mon Sep 17 00:00:00 2001 From: Georg Hagen Date: Wed, 5 Jun 2024 21:26:46 +0200 Subject: [PATCH] Slight cleanup of VulkanDrawContext and binding the node --- openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp | 3 ++- openVulkanoCpp/Vulkan/Resources/ResourceManager.hpp | 3 ++- .../Vulkan/Scene/SimpleDrawableVulkanEncoder.cpp | 3 +-- openVulkanoCpp/Vulkan/VulkanDrawContext.cpp | 10 ++++++++-- openVulkanoCpp/Vulkan/VulkanDrawContext.hpp | 2 +- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp b/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp index 4da57cd..b8638d0 100644 --- a/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp +++ b/openVulkanoCpp/Vulkan/Resources/ResourceManager.cpp @@ -153,7 +153,7 @@ namespace OpenVulkano::Vulkan } } - void ResourceManager::PrepareNode(Scene::Node* node) + VulkanNode* ResourceManager::PrepareNode(Scene::Node* node) { const std::unique_lock lock(mutex); if (!node->renderNode) @@ -181,6 +181,7 @@ namespace OpenVulkano::Vulkan vkNode->Init(node, uBuffer); node->renderNode = vkNode; } + return static_cast(node->renderNode); } VulkanCamera* ResourceManager::PrepareCamera(Scene::Camera* camera) diff --git a/openVulkanoCpp/Vulkan/Resources/ResourceManager.hpp b/openVulkanoCpp/Vulkan/Resources/ResourceManager.hpp index 35d1c4e..6277af5 100644 --- a/openVulkanoCpp/Vulkan/Resources/ResourceManager.hpp +++ b/openVulkanoCpp/Vulkan/Resources/ResourceManager.hpp @@ -34,6 +34,7 @@ namespace OpenVulkano class VulkanGeometry; class VulkanTexture; class VulkanCamera; + class VulkanNode; class UniformBuffer; class ResourceManager : public ICloseable, public IShaderOwner @@ -80,7 +81,7 @@ namespace OpenVulkano void PrepareMaterial(Scene::Material* material); - void PrepareNode(Scene::Node* node); + VulkanNode* PrepareNode(Scene::Node* node); VulkanTexture* PrepareTexture(Scene::Texture* texture); diff --git a/openVulkanoCpp/Vulkan/Scene/SimpleDrawableVulkanEncoder.cpp b/openVulkanoCpp/Vulkan/Scene/SimpleDrawableVulkanEncoder.cpp index 3d0c892..4f7066f 100644 --- a/openVulkanoCpp/Vulkan/Scene/SimpleDrawableVulkanEncoder.cpp +++ b/openVulkanoCpp/Vulkan/Scene/SimpleDrawableVulkanEncoder.cpp @@ -21,8 +21,7 @@ namespace OpenVulkano::Vulkan renderGeo->RecordBind(drawContext->commandBuffer); for(Node* node : instance->GetNodes()) { - if (!node->renderNode) drawContext->renderer->GetResourceManager().PrepareNode(node); - static_cast(node->renderNode)->Record(drawContext); + drawContext->EncodeNode(node); renderGeo->RecordDraw(drawContext->commandBuffer); } } diff --git a/openVulkanoCpp/Vulkan/VulkanDrawContext.cpp b/openVulkanoCpp/Vulkan/VulkanDrawContext.cpp index 7189144..fca2246 100644 --- a/openVulkanoCpp/Vulkan/VulkanDrawContext.cpp +++ b/openVulkanoCpp/Vulkan/VulkanDrawContext.cpp @@ -8,6 +8,7 @@ #include "Scene/Shader/Shader.hpp" #include "Scene/VulkanShader.hpp" #include "Scene/VulkanCamera.hpp" +#include "Scene/VulkanNode.hpp" namespace OpenVulkano::Vulkan { @@ -31,9 +32,14 @@ namespace OpenVulkano::Vulkan m_lastShader = vkShader; } - void VulkanDrawContext::SetNode(Scene::Node* node) + void VulkanDrawContext::EncodeNode(Scene::Node* node) { - + VulkanNode* vkNode = static_cast(node->renderNode); + if (!vkNode) + { + vkNode = renderer->GetResourceManager().PrepareNode(node); + } + vkNode->Record(this); } void VulkanDrawContext::SetCamera(Scene::Camera* camera) diff --git a/openVulkanoCpp/Vulkan/VulkanDrawContext.hpp b/openVulkanoCpp/Vulkan/VulkanDrawContext.hpp index ebb3ff8..cd0ea87 100644 --- a/openVulkanoCpp/Vulkan/VulkanDrawContext.hpp +++ b/openVulkanoCpp/Vulkan/VulkanDrawContext.hpp @@ -29,7 +29,7 @@ namespace OpenVulkano::Vulkan void EncodeShader(VulkanShader* shader); - void SetNode(Scene::Node* node); + void EncodeNode(Scene::Node* node); void SetCamera(Scene::Camera* camera);