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