Renderer: Add RenderPassCache
This commit is contained in:
61
include/Nazara/Renderer/RenderPassCache.inl
Normal file
61
include/Nazara/Renderer/RenderPassCache.inl
Normal file
@@ -0,0 +1,61 @@
|
||||
// Copyright (C) 2020 Jérôme Leclercq
|
||||
// This file is part of the "Nazara Engine - Utility module"
|
||||
// For conditions of distribution and use, see copyright notice in Config.hpp
|
||||
|
||||
#include <Nazara/Renderer/RenderPassCache.hpp>
|
||||
#include <cassert>
|
||||
#include <Nazara/Renderer/Debug.hpp>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
inline RenderPassCache::RenderPassCache(RenderDevice& device) :
|
||||
m_device(device)
|
||||
{
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
std::size_t RenderPassCache::Hasher::operator()(const T& key) const
|
||||
{
|
||||
return operator()(ToRenderPassData(key));
|
||||
}
|
||||
|
||||
template<typename T1, typename T2>
|
||||
inline bool RenderPassCache::EqualityChecker::operator()(const T1& lhs, const T2& rhs) const
|
||||
{
|
||||
return operator()(ToRenderPassData(lhs), ToRenderPassData(rhs));
|
||||
}
|
||||
|
||||
inline auto RenderPassCache::ToRenderPassData(const Key& key)
|
||||
{
|
||||
return std::visit([&](auto&& arg)
|
||||
{
|
||||
return ToRenderPassData(arg);
|
||||
}, key);
|
||||
}
|
||||
|
||||
inline auto RenderPassCache::ToRenderPassData(const std::shared_ptr<RenderPass>& renderPass) -> RenderPassData
|
||||
{
|
||||
const auto& attachments = renderPass->GetAttachments();
|
||||
const auto& subpassDeps = renderPass->GetSubpassDependencies();
|
||||
const auto& subpassDesc = renderPass->GetSubpassDescriptions();
|
||||
|
||||
RenderPassData data;
|
||||
data.attachmentCount = attachments.size();
|
||||
data.attachments = attachments.data();
|
||||
|
||||
data.dependencyCount = subpassDeps.size();
|
||||
data.subpassDependencies = subpassDeps.data();
|
||||
|
||||
data.descriptionCount = subpassDesc.size();
|
||||
data.subpassDescriptions = subpassDesc.data();
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
inline auto RenderPassCache::ToRenderPassData(const RenderPassData& renderPassData) -> const RenderPassData&
|
||||
{
|
||||
return renderPassData;
|
||||
}
|
||||
}
|
||||
|
||||
#include <Nazara/Renderer/DebugOff.hpp>
|
||||
Reference in New Issue
Block a user