Renderer: Refactor transient resources (allow access at any time)

This commit is contained in:
SirLynix
2023-07-21 08:51:39 +02:00
committed by Jérôme Leclercq
parent de68033a0e
commit 4db5b59ec9
21 changed files with 265 additions and 240 deletions

View File

@@ -19,6 +19,14 @@ namespace Nz
{
}
inline void RenderFrame::Execute(const FunctionRef<void(CommandBufferBuilder& builder)>& callback, QueueTypeFlags queueTypeFlags)
{
if NAZARA_UNLIKELY(!m_image)
throw std::runtime_error("frame is either invalid or has already been presented");
return m_image->Execute(callback, queueTypeFlags);
}
inline std::size_t RenderFrame::GetFramebufferIndex() const
{
return m_framebufferIndex;
@@ -29,6 +37,14 @@ namespace Nz
return m_size;
}
inline UploadPool& RenderFrame::GetUploadPool()
{
if NAZARA_UNLIKELY(!m_image)
throw std::runtime_error("frame is either invalid or has already been presented");
return m_image->GetUploadPool();
}
inline bool RenderFrame::IsFramebufferInvalidated() const
{
return m_framebufferInvalidation;
@@ -37,18 +53,39 @@ namespace Nz
template<typename T>
void RenderFrame::PushForRelease(T&& value)
{
return PushReleaseCallback([v = std::forward<T>(value)] {});
if NAZARA_UNLIKELY(!m_image)
throw std::runtime_error("frame is either invalid or has already been presented");
m_image->PushForRelease(std::forward<T>(value));
}
template<typename F>
void RenderFrame::PushReleaseCallback(F&& releaseCallback)
{
if (!m_image)
if NAZARA_UNLIKELY(!m_image)
throw std::runtime_error("frame is either invalid or has already been presented");
m_image->PushReleaseCallback(std::forward<F>(releaseCallback));
}
inline void RenderFrame::Present()
{
if NAZARA_UNLIKELY(!m_image)
throw std::runtime_error("frame is either invalid or has already been presented");
m_image->Present();
m_image = nullptr;
}
inline void RenderFrame::SubmitCommandBuffer(CommandBuffer* commandBuffer, QueueTypeFlags queueTypeFlags)
{
if NAZARA_UNLIKELY(!m_image)
throw std::runtime_error("frame is either invalid or has already been presented");
m_image->SubmitCommandBuffer(commandBuffer, queueTypeFlags);
}
inline RenderFrame::operator bool()
{
return m_image != nullptr;