diff --git a/openVulkanoCpp/Base/Render/RenderResource.hpp b/openVulkanoCpp/Base/Render/RenderResource.hpp index 13503e9..78141e6 100644 --- a/openVulkanoCpp/Base/Render/RenderResource.hpp +++ b/openVulkanoCpp/Base/Render/RenderResource.hpp @@ -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 - concept Renderable = std::is_convertible_v; + concept Renderable = std::is_convertible_v; - 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&& 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(*m_owner); } + RenderResourcePtr& GetOwnerResource() { return static_cast(*m_owner); } public: virtual ~IRenderResource() @@ -116,7 +119,7 @@ namespace OpenVulkano template 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 operator RT() const { return renderResource; }