Merge branch 'wip'
This commit is contained in:
@@ -19,12 +19,12 @@ namespace OpenVulkano::Vulkan
|
||||
ArBackgroundDrawable* bgDrawable = static_cast<ArBackgroundDrawable*>(instance);
|
||||
bgDrawable->Tick();
|
||||
const Texture* texture = bgDrawable->GetTexture();
|
||||
VulkanTexture* vkTexture = static_cast<VulkanTexture*>(texture->renderTexture);
|
||||
VulkanTexture* vkTexture = texture->GetRenderResource();
|
||||
if (!vkTexture)
|
||||
{
|
||||
vkTexture = drawContext->renderer->GetResourceManager().PrepareTexture(const_cast<Texture*>(texture));
|
||||
}
|
||||
VulkanUniformBuffer* vkBuffer = static_cast<VulkanUniformBuffer*>(bgDrawable->GetBuffer().renderBuffer);
|
||||
VulkanUniformBuffer* vkBuffer = bgDrawable->GetBuffer().GetRenderResource();
|
||||
if (!vkBuffer)
|
||||
{
|
||||
vkBuffer = drawContext->renderer->GetResourceManager().PrepareUniformBuffer(&bgDrawable->GetBuffer());
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
|
||||
#include "Scene/SimpleDrawable.hpp"
|
||||
#include "Scene/Material.hpp"
|
||||
#include "Scene/UniformBuffer.hpp"
|
||||
#include "VulkanGeometry.hpp"
|
||||
#include "VulkanNode.hpp"
|
||||
#include "Vulkan/VulkanDrawContext.hpp"
|
||||
@@ -21,14 +20,13 @@ namespace OpenVulkano::Vulkan
|
||||
{
|
||||
SimpleDrawable* drawable = static_cast<SimpleDrawable*>(instance);
|
||||
Geometry* mesh = drawable->GetMesh();
|
||||
VulkanGeometry* renderGeo = static_cast<VulkanGeometry*>(mesh->renderGeo);
|
||||
VulkanGeometry* renderGeo = mesh->GetRenderResource();
|
||||
if (!renderGeo) renderGeo = drawContext->renderer->GetResourceManager().PrepareGeometry(mesh);
|
||||
renderGeo->RecordBind(drawContext->commandBuffer);
|
||||
|
||||
if (drawable->GetBuffer())
|
||||
{
|
||||
|
||||
VulkanUniformBuffer* vkBuffer = static_cast<VulkanUniformBuffer*>(drawable->GetBuffer()->renderBuffer);
|
||||
VulkanUniformBuffer* vkBuffer = drawable->GetBuffer()->GetRenderResource();
|
||||
if (!vkBuffer)
|
||||
{
|
||||
vkBuffer = drawContext->renderer->GetResourceManager().PrepareUniformBuffer(drawable->GetBuffer());
|
||||
@@ -40,11 +38,11 @@ namespace OpenVulkano::Vulkan
|
||||
{
|
||||
if (Texture* texture = material->texture)
|
||||
{
|
||||
VulkanTexture* renderTexture = static_cast<VulkanTexture*>(texture->renderTexture);
|
||||
VulkanTexture* renderTexture = texture->GetRenderResource();
|
||||
if (!renderTexture)
|
||||
{
|
||||
drawContext->renderer->GetResourceManager().PrepareMaterial(drawable->GetMaterial());
|
||||
renderTexture = static_cast<VulkanTexture*>(texture->renderTexture);
|
||||
renderTexture = texture->GetRenderResource();
|
||||
}
|
||||
renderTexture->Record(drawContext);
|
||||
}
|
||||
|
||||
@@ -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 */
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -13,36 +13,21 @@
|
||||
|
||||
namespace OpenVulkano::Vulkan
|
||||
{
|
||||
class VulkanGeometry final : public ICloseable
|
||||
class VulkanGeometry final : public IRenderResource<Scene::Geometry>
|
||||
{
|
||||
Scene::Geometry* m_geometry;
|
||||
ManagedBuffer::Ptr m_vertexBuffer;
|
||||
ManagedBuffer::Ptr m_indexBuffer;
|
||||
vk::IndexType m_indexType;
|
||||
vk::DeviceSize m_offsets = 0;
|
||||
|
||||
public:
|
||||
VulkanGeometry() : m_geometry(nullptr), m_vertexBuffer(nullptr)
|
||||
, m_indexBuffer(nullptr), m_indexType(vk::IndexType::eUint32)
|
||||
{}
|
||||
|
||||
VulkanGeometry(Scene::Geometry* geo, ManagedBuffer::Ptr& vertexBuffer, ManagedBuffer::Ptr& indexBuffer)
|
||||
: m_geometry(geo), m_vertexBuffer(std::move(vertexBuffer)), m_indexBuffer(std::move(indexBuffer))
|
||||
: IRenderResource<Scene::Geometry>(geo)
|
||||
, m_vertexBuffer(std::move(vertexBuffer)), m_indexBuffer(std::move(indexBuffer))
|
||||
, m_indexType((geo->indexType == Scene::VertexIndexType::UINT16) ? vk::IndexType::eUint16 : vk::IndexType::eUint32)
|
||||
{}
|
||||
|
||||
~VulkanGeometry() override
|
||||
{
|
||||
if (m_vertexBuffer) VulkanGeometry::Close();
|
||||
}
|
||||
|
||||
void Init(Scene::Geometry* geo, ManagedBuffer::Ptr& vertexBuffer, ManagedBuffer::Ptr& indexBuffer)
|
||||
{
|
||||
m_geometry = geo;
|
||||
m_vertexBuffer = std::move(vertexBuffer);
|
||||
m_indexBuffer = std::move(indexBuffer);
|
||||
m_indexType = (geo->indexType == Scene::VertexIndexType::UINT16) ? vk::IndexType::eUint16 : vk::IndexType::eUint32;
|
||||
}
|
||||
~VulkanGeometry() override = default;
|
||||
|
||||
void RecordBind(vk::CommandBuffer& cmdBuffer)
|
||||
{
|
||||
@@ -52,15 +37,13 @@ namespace OpenVulkano::Vulkan
|
||||
|
||||
void RecordDraw(vk::CommandBuffer& cmdBuffer)
|
||||
{
|
||||
if (m_geometry->GetIndexCount()) { cmdBuffer.drawIndexed(m_geometry->GetIndexCount(), 1, 0, 0, 0); }
|
||||
else { cmdBuffer.draw(m_geometry->GetVertexCount(), 1, 0, 0); }
|
||||
if (GetOwner()->GetIndexCount()) { cmdBuffer.drawIndexed(GetOwner()->GetIndexCount(), 1, 0, 0, 0); }
|
||||
else { cmdBuffer.draw(GetOwner()->GetVertexCount(), 1, 0, 0); }
|
||||
}
|
||||
|
||||
void Close() override
|
||||
void Release() override
|
||||
{
|
||||
m_geometry->renderGeo = nullptr;
|
||||
m_vertexBuffer.reset();
|
||||
m_indexBuffer.reset();
|
||||
//TODO
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -6,28 +6,23 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "Base/ICloseable.hpp"
|
||||
#include "Base/Render/RenderResource.hpp"
|
||||
#include "IRecordable.hpp"
|
||||
#include "Scene/Camera.hpp"
|
||||
#include "Vulkan/Resources/UniformBuffer.hpp"
|
||||
|
||||
namespace OpenVulkano::Vulkan
|
||||
{
|
||||
class VulkanNode : public IRecordable, public ICloseable
|
||||
class VulkanNode : public IRenderResource<Scene::Node>, public IRecordable
|
||||
{
|
||||
public:
|
||||
Scene::Node* node = nullptr;
|
||||
UniformBuffer* buffer = nullptr;
|
||||
Unique<UniformBuffer> buffer = nullptr;
|
||||
|
||||
~VulkanNode() override
|
||||
{
|
||||
if (node) VulkanNode::Close();
|
||||
}
|
||||
~VulkanNode() override = default;
|
||||
|
||||
virtual void Init(Scene::Node* node, UniformBuffer* uniformBuffer)
|
||||
VulkanNode(Scene::Node* node, UniformBuffer* uniformBuffer)
|
||||
: IRenderResource<Scene::Node>(node), buffer(uniformBuffer)
|
||||
{
|
||||
this->node = node;
|
||||
this->buffer = uniformBuffer;
|
||||
}
|
||||
|
||||
void Record(VulkanDrawContext* context) override
|
||||
@@ -35,12 +30,9 @@ namespace OpenVulkano::Vulkan
|
||||
buffer->Record(context);
|
||||
}
|
||||
|
||||
void Close() override
|
||||
void Release() override
|
||||
{
|
||||
if (node) node->renderNode = nullptr;
|
||||
delete buffer;
|
||||
node = nullptr;
|
||||
buffer = nullptr;
|
||||
//TODO
|
||||
}
|
||||
};
|
||||
|
||||
@@ -48,18 +40,16 @@ namespace OpenVulkano::Vulkan
|
||||
{
|
||||
//uint32_t lastUpdate = -1;
|
||||
|
||||
void Init(Scene::Node* node, UniformBuffer* uniformBuffer) override
|
||||
{
|
||||
VulkanNode::Init(node, uniformBuffer);
|
||||
//lastUpdate = -1;
|
||||
}
|
||||
VulkanNodeDynamic(Scene::Node* node, UniformBuffer* uniformBuffer)
|
||||
: VulkanNode(node, uniformBuffer)
|
||||
{}
|
||||
|
||||
void Record(VulkanDrawContext* context) override
|
||||
{
|
||||
//if(context->currentImageId != lastUpdate) //TODO fix
|
||||
{
|
||||
//lastUpdate = bufferId;
|
||||
buffer->Update(&node->worldMat, sizeof(Math::Matrix4f), context->currentImageId);
|
||||
buffer->Update(&GetOwner()->worldMat, sizeof(Math::Matrix4f), context->currentImageId);
|
||||
}
|
||||
buffer->Record(context);
|
||||
}
|
||||
|
||||
@@ -17,7 +17,8 @@ namespace OpenVulkano::Vulkan
|
||||
|
||||
VulkanShader::~VulkanShader()
|
||||
{
|
||||
if (shader) Close();
|
||||
if (owner) owner->RemoveShader(this);
|
||||
owner = nullptr;
|
||||
device.destroyPipeline(pipeline);
|
||||
for(auto& shaderModule : shaderModules)
|
||||
{
|
||||
@@ -28,12 +29,9 @@ namespace OpenVulkano::Vulkan
|
||||
device.destroyDescriptorSetLayout(descriptorSetLayout);
|
||||
}
|
||||
|
||||
void VulkanShader::Init(Context* context, Scene::Shader* shader, IShaderOwner* owner)
|
||||
VulkanShader::VulkanShader(Context* context, Scene::Shader* shader, IShaderOwner* owner)
|
||||
: IRenderResource<Scene::Shader>(shader), device(context->device->device), owner(owner), context(context)
|
||||
{
|
||||
this->device = context->device->device;
|
||||
this->shader = shader;
|
||||
this->owner = owner;
|
||||
this->context = context;
|
||||
shaderModules.reserve(shader->shaderPrograms.size());
|
||||
shaderStageCreateInfo.resize(shader->shaderPrograms.size());
|
||||
int i = 0;
|
||||
@@ -45,11 +43,11 @@ namespace OpenVulkano::Vulkan
|
||||
i++;
|
||||
}
|
||||
BuildPipeline();
|
||||
shader->renderShader = this;
|
||||
}
|
||||
|
||||
void VulkanShader::BuildPipeline()
|
||||
{
|
||||
Scene::Shader* shader = GetOwner();
|
||||
std::vector<vk::VertexInputBindingDescription> vertexBindDesc;
|
||||
std::vector<vk::VertexInputAttributeDescription> attributeDescriptions;
|
||||
vertexBindDesc.reserve(shader->vertexInputDescriptions.size());
|
||||
@@ -129,14 +127,6 @@ namespace OpenVulkano::Vulkan
|
||||
context->commandBuffer.bindPipeline(vk::PipelineBindPoint::eGraphics, pipeline);
|
||||
}
|
||||
|
||||
void VulkanShader::Close()
|
||||
{
|
||||
shader->renderShader = nullptr;
|
||||
shader = nullptr;
|
||||
if (owner) owner->RemoveShader(this);
|
||||
owner = nullptr;
|
||||
}
|
||||
|
||||
void VulkanShader::CreatePipelineLayout()
|
||||
{
|
||||
if (!descriptorSetLayouts.empty())
|
||||
@@ -150,6 +140,7 @@ namespace OpenVulkano::Vulkan
|
||||
descriptorSetLayouts.push_back(device.createDescriptorSetLayout({ {}, layoutBindings1.size(), layoutBindings1.data() }));
|
||||
descriptorSetLayouts.push_back(device.createDescriptorSetLayout({ {}, layoutBindings2.size(), layoutBindings2.data() }));
|
||||
|
||||
Scene::Shader* shader = GetOwner();
|
||||
for(const auto& set : shader->descriptorSets)
|
||||
{
|
||||
vk::DescriptorSetLayoutCreateInfo createInfo { {}, static_cast<uint32_t>(set.size()), reinterpret_cast<const vk::DescriptorSetLayoutBinding*>(set.data()) };
|
||||
@@ -159,4 +150,9 @@ namespace OpenVulkano::Vulkan
|
||||
vk::PipelineLayoutCreateInfo plci = {{}, static_cast<uint32_t>(descriptorSetLayouts.size()), descriptorSetLayouts.data(), static_cast<uint32_t>(shader->pushConstantRanges.size()), pcRanges };
|
||||
pipelineLayout = this->device.createPipelineLayout(plci);
|
||||
}
|
||||
|
||||
void VulkanShader::Release()
|
||||
{
|
||||
if (owner) owner->RemoveShader(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,26 +7,20 @@
|
||||
#pragma once
|
||||
|
||||
#include "IRecordable.hpp"
|
||||
#include "Base/ICloseable.hpp"
|
||||
#include "Scene/Shader/Shader.hpp"
|
||||
#include <vulkan/vulkan.hpp>
|
||||
#include <vector>
|
||||
|
||||
namespace OpenVulkano
|
||||
{
|
||||
namespace Scene
|
||||
{
|
||||
class Shader;
|
||||
}
|
||||
|
||||
namespace Vulkan
|
||||
{
|
||||
class Context;
|
||||
class IShaderOwner;
|
||||
|
||||
class VulkanShader final : public ICloseable, public IRecordable
|
||||
class VulkanShader final : public IRenderResource<Scene::Shader>, public IRecordable
|
||||
{
|
||||
public:
|
||||
Scene::Shader* shader = nullptr;
|
||||
vk::Device device;
|
||||
std::vector<vk::ShaderModule> shaderModules; // TODO manage live time somewhere else to allow sharing of shader programs
|
||||
std::vector<vk::PipelineShaderStageCreateInfo> shaderStageCreateInfo;
|
||||
@@ -36,17 +30,15 @@ namespace OpenVulkano
|
||||
IShaderOwner* owner = nullptr;
|
||||
Context* context = nullptr;
|
||||
|
||||
VulkanShader() = default;
|
||||
VulkanShader(Context* context, Scene::Shader* shader, IShaderOwner* owner);
|
||||
|
||||
~VulkanShader() override;
|
||||
|
||||
void Init(Context* context, Scene::Shader* shader, IShaderOwner* owner);
|
||||
|
||||
void Resize();
|
||||
|
||||
void Record(VulkanDrawContext* context) override;
|
||||
|
||||
void Close() override;
|
||||
void Release() override;
|
||||
|
||||
private:
|
||||
void BuildPipeline();
|
||||
|
||||
@@ -16,28 +16,29 @@
|
||||
|
||||
namespace OpenVulkano::Vulkan
|
||||
{
|
||||
class VulkanTexture : public Scene::RenderTexture, public IRecordable, public Image
|
||||
class VulkanTexture : public IRenderResource<Scene::Texture>, public IRecordable, public Image
|
||||
{
|
||||
public:
|
||||
vk::Sampler m_sampler;
|
||||
vk::DescriptorSet m_descriptorSet;
|
||||
|
||||
VulkanTexture() : IRenderResource<Scene::Texture>(nullptr) {}
|
||||
|
||||
virtual void Init(ResourceManager* resManager, Scene::Texture* texture, vk::DescriptorSetLayout* descriptorSetLayout, const DescriptorSetLayoutBinding& binding)
|
||||
{
|
||||
m_texture = texture;
|
||||
Image::Init(resManager->GetContext()->device.get(), texture->format, { texture->resolution.x, texture->resolution.y, texture->resolution.z });
|
||||
resManager->CopyDataToImage(m_texture->size, m_texture->textureBuffer, this);
|
||||
resManager->CopyDataToImage(texture->size, texture->textureBuffer, this);
|
||||
texture->updated = false;
|
||||
|
||||
m_sampler = resManager->CreateSampler(reinterpret_cast<const vk::SamplerCreateInfo&>(*texture->m_samplerConfig));
|
||||
SetDescriptorSet(resManager, descriptorSetLayout, binding);
|
||||
|
||||
texture->renderTexture = this;
|
||||
UpdateAddress(texture);
|
||||
UpdateRenderResource(GetOwnerResource());
|
||||
}
|
||||
|
||||
void InitSharedMem(ResourceManager* resManager, Scene::Texture* texture, vk::DescriptorSetLayout* descriptorSetLayout, const DescriptorSetLayoutBinding& binding)
|
||||
{
|
||||
m_texture = texture;
|
||||
Image::Init(resManager->GetContext()->device.get(), texture->format, { texture->resolution.x, texture->resolution.y, texture->resolution.z }, vk::MemoryPropertyFlagBits::eDeviceLocal | vk::MemoryPropertyFlagBits::eHostVisible);
|
||||
texture->updated = false;
|
||||
texture->textureBuffer = Map();
|
||||
@@ -45,7 +46,8 @@ namespace OpenVulkano::Vulkan
|
||||
m_sampler = resManager->CreateSampler(reinterpret_cast<const vk::SamplerCreateInfo&>(*texture->m_samplerConfig));
|
||||
SetDescriptorSet(resManager, descriptorSetLayout, binding);
|
||||
|
||||
texture->renderTexture = this;
|
||||
UpdateAddress(texture);
|
||||
UpdateRenderResource(GetOwnerResource());
|
||||
}
|
||||
|
||||
virtual ~VulkanTexture() override
|
||||
@@ -55,9 +57,8 @@ namespace OpenVulkano::Vulkan
|
||||
|
||||
void Close() override
|
||||
{
|
||||
ResetRenderResource(GetOwnerResource());
|
||||
Image::Close();
|
||||
if (m_texture) m_texture->renderTexture = nullptr;
|
||||
m_texture = nullptr;
|
||||
}
|
||||
|
||||
void SetDescriptorSet(ResourceManager* resManager, vk::DescriptorSetLayout* descriptorSetLayout, const DescriptorSetLayoutBinding& binding)
|
||||
@@ -75,7 +76,7 @@ namespace OpenVulkano::Vulkan
|
||||
void Record(VulkanDrawContext* context) override
|
||||
{
|
||||
int setId = -1, i = 0;
|
||||
for (const auto& descriptorSet : context->GetShader()->shader->descriptorSets)
|
||||
for (const auto& descriptorSet : context->GetShader()->GetOwner()->descriptorSets)
|
||||
{
|
||||
for (const auto& descriptor : descriptorSet)
|
||||
{
|
||||
@@ -106,6 +107,11 @@ namespace OpenVulkano::Vulkan
|
||||
{
|
||||
context->commandBuffer.bindDescriptorSets(vk::PipelineBindPoint::eGraphics, context->GetShader()->pipelineLayout, setId, 1, &m_descriptorSet, 0, nullptr);
|
||||
}
|
||||
|
||||
void Release() override
|
||||
{
|
||||
//TODO
|
||||
}
|
||||
};
|
||||
|
||||
class VulkanTextureDynamic : public VulkanTexture
|
||||
@@ -118,20 +124,20 @@ namespace OpenVulkano::Vulkan
|
||||
|
||||
void Record(VulkanDrawContext* context) override
|
||||
{
|
||||
if(m_texture->updated)
|
||||
if(GetOwner()->updated)
|
||||
{
|
||||
context->renderer->GetResourceManager().CopyDataToImage(m_texture->size, m_texture->textureBuffer, this);
|
||||
m_texture->updated = false;
|
||||
context->renderer->GetResourceManager().CopyDataToImage(GetOwner()->size, GetOwner()->textureBuffer, this);
|
||||
GetOwner()->updated = false;
|
||||
}
|
||||
VulkanTexture::Record(context);
|
||||
}
|
||||
|
||||
void Record(VulkanDrawContext* context, int setId) override
|
||||
{
|
||||
if(m_texture->updated)
|
||||
if(GetOwner()->updated)
|
||||
{
|
||||
context->renderer->GetResourceManager().CopyDataToImage(m_texture->size, m_texture->textureBuffer, this);
|
||||
m_texture->updated = false;
|
||||
context->renderer->GetResourceManager().CopyDataToImage(GetOwner()->size, GetOwner()->textureBuffer, this);
|
||||
GetOwner()->updated = false;
|
||||
}
|
||||
VulkanTexture::Record(context, setId);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user