Add render resource handling for geometry
This commit is contained in:
@@ -45,8 +45,8 @@ namespace OpenVulkano
|
||||
|
||||
public:
|
||||
RenderResourcePtr() = default;
|
||||
RenderResourcePtr(const RenderResourcePtr& ignored) { /* Do not copy, copy will be created by renderer */ }
|
||||
RenderResourcePtr(RenderResourcePtr&& move) : renderObject(move.renderObject) { move.renderObject = nullptr; }
|
||||
RenderResourcePtr(const RenderResourcePtr& ignored) noexcept { /* Do not copy, copy will be created by renderer */ }
|
||||
RenderResourcePtr(RenderResourcePtr&& move) noexcept : renderObject(move.renderObject) { move.renderObject = nullptr; }
|
||||
|
||||
~RenderResourcePtr()
|
||||
{
|
||||
@@ -67,6 +67,14 @@ namespace OpenVulkano
|
||||
operator T() { return static_cast<T>(renderObject); }
|
||||
|
||||
operator bool() const { return renderObject; }
|
||||
|
||||
RenderResourcePtr& operator =(RenderResourcePtr&& move) noexcept
|
||||
{
|
||||
if (renderObject) renderObject->Release();
|
||||
renderObject = move.renderObject;
|
||||
move.renderObject = nullptr;
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
|
||||
inline void IRenderResourceHelper::UpdateRenderResource(RenderResourcePtr* resource)
|
||||
@@ -94,7 +102,7 @@ namespace OpenVulkano
|
||||
|
||||
IRenderResource(const IRenderResource<API_INDEPENDENT_CLASS>& copy) = delete;
|
||||
|
||||
IRenderResource(IRenderResource<API_INDEPENDENT_CLASS>&& move)
|
||||
IRenderResource(IRenderResource<API_INDEPENDENT_CLASS>&& move) noexcept
|
||||
: m_owner(move.m_owner)
|
||||
{
|
||||
if (m_owner)
|
||||
@@ -139,8 +147,8 @@ namespace OpenVulkano
|
||||
|
||||
protected:
|
||||
RenderResourceHolder() = default;
|
||||
RenderResourceHolder(const RenderResourceHolder& ignored) {}
|
||||
RenderResourceHolder(RenderResourceHolder&& move)
|
||||
RenderResourceHolder(const RenderResourceHolder& ignored) noexcept {}
|
||||
RenderResourceHolder(RenderResourceHolder&& move) noexcept
|
||||
: renderResource(std::move(move.renderResource))
|
||||
{
|
||||
if (IRenderResource<T>* renderRes = renderResource)
|
||||
@@ -158,5 +166,20 @@ namespace OpenVulkano
|
||||
operator RT() const { return renderResource; }
|
||||
|
||||
bool HasRenderResource() const { return renderResource; }
|
||||
|
||||
RenderResourceHolder& operator =(RenderResourceHolder&& move) noexcept
|
||||
{
|
||||
renderResource = std::move(move.renderResource);
|
||||
if (IRenderResource<T>* renderRes = renderResource)
|
||||
renderRes->UpdateAddress(static_cast<T*>(this));
|
||||
return *this;
|
||||
}
|
||||
|
||||
void Swap(RenderResourceHolder& other) noexcept
|
||||
{
|
||||
RenderResourceHolder tmp(std::move(*this));
|
||||
*this = std::move(other);
|
||||
other = std::move(tmp);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user