Merge pull request 'Slight cleanup of VulkanDrawContext and binding the node' (#37) from VulkanDrawContext_cleanup into master

Reviewed-on: https://git.madvoxel.net/OpenVulkano/OpenVulkano/pulls/37
Reviewed-by: TymurStrelchyk <tymur.strelchyk.ext@madvoxel.com>
This commit is contained in:
Georg Hagen
2024-06-06 14:26:34 +02:00
5 changed files with 14 additions and 7 deletions

View File

@@ -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); const std::unique_lock lock(mutex);
if (!node->renderNode) if (!node->renderNode)
@@ -181,6 +181,7 @@ namespace OpenVulkano::Vulkan
vkNode->Init(node, uBuffer); vkNode->Init(node, uBuffer);
node->renderNode = vkNode; node->renderNode = vkNode;
} }
return static_cast<VulkanNode*>(node->renderNode);
} }
VulkanCamera* ResourceManager::PrepareCamera(Scene::Camera* camera) VulkanCamera* ResourceManager::PrepareCamera(Scene::Camera* camera)

View File

@@ -34,6 +34,7 @@ namespace OpenVulkano
class VulkanGeometry; class VulkanGeometry;
class VulkanTexture; class VulkanTexture;
class VulkanCamera; class VulkanCamera;
class VulkanNode;
class UniformBuffer; class UniformBuffer;
class ResourceManager : public ICloseable, public IShaderOwner class ResourceManager : public ICloseable, public IShaderOwner
@@ -80,7 +81,7 @@ namespace OpenVulkano
void PrepareMaterial(Scene::Material* material); void PrepareMaterial(Scene::Material* material);
void PrepareNode(Scene::Node* node); VulkanNode* PrepareNode(Scene::Node* node);
VulkanTexture* PrepareTexture(Scene::Texture* texture); VulkanTexture* PrepareTexture(Scene::Texture* texture);

View File

@@ -21,8 +21,7 @@ namespace OpenVulkano::Vulkan
renderGeo->RecordBind(drawContext->commandBuffer); renderGeo->RecordBind(drawContext->commandBuffer);
for(Node* node : instance->GetNodes()) for(Node* node : instance->GetNodes())
{ {
if (!node->renderNode) drawContext->renderer->GetResourceManager().PrepareNode(node); drawContext->EncodeNode(node);
static_cast<VulkanNode*>(node->renderNode)->Record(drawContext);
renderGeo->RecordDraw(drawContext->commandBuffer); renderGeo->RecordDraw(drawContext->commandBuffer);
} }
} }

View File

@@ -8,6 +8,7 @@
#include "Scene/Shader/Shader.hpp" #include "Scene/Shader/Shader.hpp"
#include "Scene/VulkanShader.hpp" #include "Scene/VulkanShader.hpp"
#include "Scene/VulkanCamera.hpp" #include "Scene/VulkanCamera.hpp"
#include "Scene/VulkanNode.hpp"
namespace OpenVulkano::Vulkan namespace OpenVulkano::Vulkan
{ {
@@ -31,9 +32,14 @@ namespace OpenVulkano::Vulkan
m_lastShader = vkShader; m_lastShader = vkShader;
} }
void VulkanDrawContext::SetNode(Scene::Node* node) void VulkanDrawContext::EncodeNode(Scene::Node* node)
{ {
VulkanNode* vkNode = static_cast<VulkanNode*>(node->renderNode);
if (!vkNode)
{
vkNode = renderer->GetResourceManager().PrepareNode(node);
}
vkNode->Record(this);
} }
void VulkanDrawContext::SetCamera(Scene::Camera* camera) void VulkanDrawContext::SetCamera(Scene::Camera* camera)

View File

@@ -29,7 +29,7 @@ namespace OpenVulkano::Vulkan
void EncodeShader(VulkanShader* shader); void EncodeShader(VulkanShader* shader);
void SetNode(Scene::Node* node); void EncodeNode(Scene::Node* node);
void SetCamera(Scene::Camera* camera); void SetCamera(Scene::Camera* camera);