Use RenderResource for uniform buffers

This commit is contained in:
Georg Hagen
2024-08-21 10:17:45 +02:00
parent 4ebaa622b4
commit 33c8b74342
5 changed files with 22 additions and 39 deletions

View File

@@ -6,42 +6,31 @@
#pragma once
#include "Base/ICloseable.hpp"
#include "IRecordable.hpp"
#include "Scene/UniformBuffer.hpp"
#include "Vulkan/Resources/UniformBuffer.hpp"
namespace OpenVulkano::Vulkan
{
class VulkanUniformBuffer : public IRecordable, public ICloseable
class VulkanUniformBuffer : public IRenderResource<Scene::UniformBuffer>, public IRecordable
{
public:
Scene::UniformBuffer* uBuffer = nullptr;
UniformBuffer* buffer = nullptr;
Unique<UniformBuffer> buffer = nullptr;
~VulkanUniformBuffer() override
{
if (uBuffer) VulkanUniformBuffer::Close();
}
~VulkanUniformBuffer() override = default;
virtual void Init(Scene::UniformBuffer* uBuffer, UniformBuffer* uniformBuffer)
{
this->uBuffer = uBuffer;
this->buffer = uniformBuffer;
uBuffer->renderBuffer = this;
}
VulkanUniformBuffer(Scene::UniformBuffer* sceneBuffer, UniformBuffer* uniformBuffer)
: IRenderResource<Scene::UniformBuffer>(sceneBuffer), buffer(uniformBuffer)
{}
void Record(VulkanDrawContext* context) override
{
buffer->Record(context);
}
void Close() override
void Release() override
{
if (uBuffer) uBuffer->renderBuffer = nullptr;
delete buffer;
uBuffer = nullptr;
buffer = nullptr;
//TODO
}
};
@@ -49,18 +38,16 @@ namespace OpenVulkano::Vulkan
{
uint32_t lastUpdate = 0;
void Init(Scene::UniformBuffer* buffer, UniformBuffer* uniformBuffer) override
{
VulkanUniformBuffer::Init(buffer, uniformBuffer);
lastUpdate = -1;
}
VulkanUniformBufferDynamic(Scene::UniformBuffer* sceneBuffer, UniformBuffer* uniformBuffer)
: VulkanUniformBuffer(sceneBuffer, uniformBuffer)
{}
void Record(VulkanDrawContext* context) override
{
if(uBuffer->updated) //TODO fix
if(GetOwner()->updated) //TODO fix
{
uBuffer->updated = false;
buffer->Update(uBuffer->data, uBuffer->size, context->currentImageId);
GetOwner()->updated = false;
buffer->Update(GetOwner()->data, GetOwner()->size, context->currentImageId);
}
buffer->Record(context);
}