Render resource handling for camera

This commit is contained in:
Georg Hagen
2024-08-21 15:09:49 +02:00
parent 2d08b3ab91
commit 6f19758beb
4 changed files with 24 additions and 33 deletions

View File

@@ -213,7 +213,7 @@ namespace OpenVulkano::Vulkan
VulkanCamera* ResourceManager::PrepareCamera(Scene::Camera* camera)
{
const std::unique_lock lock(mutex);
if (!camera->renderCamera)
if (!camera->HasRenderResource())
{
const vk::DeviceSize allocSize = Utils::Align(Scene::Camera::SIZE, uniformBufferAlignment);
const uint32_t imgs = context->swapChain.GetImageCount();
@@ -221,12 +221,10 @@ namespace OpenVulkano::Vulkan
buffer->Map();
UniformBuffer* uBuffer = new UniformBuffer();
uBuffer->Init(std::move(buffer), allocSize, allocSize, GetDescriptorLayoutSet(Scene::Camera::DESCRIPTOR_SET_LAYOUT_BINDING), Scene::Camera::DESCRIPTOR_SET_LAYOUT_BINDING, 1);
VulkanCamera* vkCam = new VulkanCamera();
vkCam->Init(camera, uBuffer);
VulkanCamera* vkCam = new VulkanCamera(camera, uBuffer);
cameras.emplace_back(vkCam);
camera->renderCamera = vkCam;
}
return static_cast<VulkanCamera*>(camera->renderCamera);
return static_cast<VulkanCamera*>(camera->GetRenderResource());
}
UniformBuffer* ResourceManager::CreateUniformBuffer(const DescriptorSetLayoutBinding& binding, size_t size, void* data, uint32_t setId, bool hostVis)

View File

@@ -6,41 +6,34 @@
#pragma once
#include "Base/ICloseable.hpp"
#include "Scene/Camera.hpp"
#include "IRecordable.hpp"
#include "Vulkan/Resources/UniformBuffer.hpp"
namespace OpenVulkano::Vulkan
{
class VulkanCamera : public ICloseable, public IRecordable
class VulkanCamera : public IRenderResource<Scene::Camera>, public IRecordable
{
Scene::Camera* m_camera = nullptr;
UniformBuffer* m_buffer = nullptr;
const Unique<UniformBuffer> m_buffer;
public:
~VulkanCamera() override { if (m_camera) VulkanCamera::Close(); }
VulkanCamera(Scene::Camera* camera, UniformBuffer* uniformBuffer)
: IRenderResource<Scene::Camera>(camera), m_buffer(uniformBuffer)
{}
void Init(Scene::Camera* camera, UniformBuffer* uniformBuffer)
{
m_camera = camera;
m_buffer = uniformBuffer;
}
~VulkanCamera() override = default;
void Record(VulkanDrawContext* context) override
{
m_buffer->Update(m_camera->GetData(), Scene::Camera::SIZE, context->currentImageId);
m_buffer->Update(GetCamera()->GetData(), Scene::Camera::SIZE, context->currentImageId);
m_buffer->Record(context);
}
void Close() override
{
m_camera->renderCamera = nullptr;
m_buffer->Close();
m_camera = nullptr;
delete m_buffer;
}
[[nodiscard]] Scene::Camera* GetCamera() const { return m_camera; }
[[nodiscard]] Scene::Camera* GetCamera() const { return GetOwner(); }
void Release() override
{
/* TODO */
}
};
}

View File

@@ -44,8 +44,8 @@ namespace OpenVulkano::Vulkan
void VulkanDrawContext::SetCamera(Scene::Camera* camera)
{
if (!camera->renderCamera) m_lastCamera = ResourceManager::INSTANCE->PrepareCamera(camera);
else m_lastCamera = static_cast<VulkanCamera*>(camera->renderCamera);
if (!camera->HasRenderResource()) m_lastCamera = ResourceManager::INSTANCE->PrepareCamera(camera);
else m_lastCamera = camera->GetRenderResource();
if (m_lastShader) m_lastCamera->Record(this);
}
}