Small refactor

This commit is contained in:
Georg Hagen
2024-08-21 10:17:09 +02:00
parent 25a0978a57
commit 4ebaa622b4

View File

@@ -12,35 +12,35 @@
namespace OpenVulkano
{
class RenderResource;
class RenderResourcePtr;
class IRenderResourceHelper
{
friend class RenderResource;
friend class RenderResourcePtr;
protected:
void UpdateRenderResource(RenderResource& resource);
void UpdateRenderResource(RenderResourcePtr& resource);
void ResetRenderResource(RenderResource& resource);
void ResetRenderResource(RenderResourcePtr& resource);
virtual void Release() = 0;
};
template <class T>
concept Renderable = std::is_convertible_v<T, RenderResource&>;
concept Renderable = std::is_convertible_v<T, RenderResourcePtr&>;
class RenderResource final
class RenderResourcePtr final
{
friend class IRenderResourceHelper;
IRenderResourceHelper* renderObject = nullptr;
public:
RenderResource() = default;
RenderResource(const RenderResource& ignored) { /* Do not copy, copy will be created by renderer */ }
RenderResource(RenderResource&& move) : renderObject(move.renderObject) { move.renderObject = nullptr; }
RenderResourcePtr() = default;
RenderResourcePtr(const RenderResourcePtr& ignored) { /* Do not copy, copy will be created by renderer */ }
RenderResourcePtr(RenderResourcePtr&& move) : renderObject(move.renderObject) { move.renderObject = nullptr; }
~RenderResource()
~RenderResourcePtr()
{
Release();
}
@@ -61,12 +61,12 @@ namespace OpenVulkano
operator bool() const { return renderObject; }
};
inline void IRenderResourceHelper::UpdateRenderResource(RenderResource& resource)
inline void IRenderResourceHelper::UpdateRenderResource(RenderResourcePtr& resource)
{
resource.renderObject = this;
}
inline void IRenderResourceHelper::ResetRenderResource(RenderResource& resource)
inline void IRenderResourceHelper::ResetRenderResource(RenderResourcePtr& resource)
{
resource.renderObject = nullptr;
}
@@ -87,11 +87,14 @@ namespace OpenVulkano
IRenderResource(IRenderResource<API_INDEPENDENT_CLASS>&& move)
: m_owner(move.m_owner)
{
if (m_owner) UpdateRenderResource(GetOwnerResource());
if (m_owner)
{
UpdateRenderResource(GetOwnerResource());
}
move.m_owner = nullptr;
}
RenderResource& GetOwnerResource() { return static_cast<RenderResource&>(*m_owner); }
RenderResourcePtr& GetOwnerResource() { return static_cast<RenderResourcePtr&>(*m_owner); }
public:
virtual ~IRenderResource()
@@ -116,7 +119,7 @@ namespace OpenVulkano
template <class T>
class RenderResourceHolder
{
RenderResource renderResource;
RenderResourcePtr renderResource;
protected:
RenderResourceHolder() = default;
@@ -131,9 +134,9 @@ namespace OpenVulkano
~RenderResourceHolder() = default;
public:
operator RenderResource&() { return renderResource; }
operator RenderResourcePtr&() { return renderResource; }
RenderResource& GetRenderResource() { return renderResource; }
RenderResourcePtr& GetRenderResource() { return renderResource; }
template<Renderable RT>
operator RT() const { return renderResource; }