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