Add render resource handling for geometry

This commit is contained in:
Georg Hagen
2024-08-21 14:33:45 +02:00
parent b13c1c54ae
commit 2d08b3ab91
6 changed files with 59 additions and 68 deletions

View File

@@ -20,13 +20,12 @@ 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 = drawable->GetBuffer()->GetRenderResource();
if (!vkBuffer)
{

View File

@@ -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
}
};
}