Small refactor
This commit is contained in:
@@ -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; }
|
||||
|
||||
Reference in New Issue
Block a user