Graphics: Add support for multi-viewer rendering (a bit hacky)

This commit is contained in:
Jérôme Leclercq
2021-11-13 20:08:03 +01:00
parent 342c053faa
commit ecd1e43890
8 changed files with 80 additions and 36 deletions

View File

@@ -26,6 +26,7 @@
namespace Nz
{
class RenderFrame;
class RenderTarget;
class NAZARA_GRAPHICS_API ForwardFramePipeline : public FramePipeline
{
@@ -99,6 +100,7 @@ namespace Nz
std::unordered_map<AbstractViewer*, ViewerData> m_viewers;
std::unordered_map<MaterialPass*, MaterialData> m_materials;
std::unordered_map<WorldInstancePtr, std::unordered_map<const InstancedRenderable*, RenderableData>> m_renderables;
std::unordered_map<const RenderTarget*, std::vector<const ViewerData*>> m_viewerPerTarget;
std::unordered_set<AbstractViewer*> m_invalidatedViewerInstances;
std::unordered_set<MaterialPass*> m_invalidatedMaterials;
std::unordered_set<WorldInstance*> m_invalidatedWorldInstances;

View File

@@ -31,12 +31,11 @@ namespace Nz
~FrameGraph() = default;
inline std::size_t AddAttachment(FramePassAttachment attachment);
inline void AddBackbufferOutput(std::size_t backbufferOutput);
inline FramePass& AddPass(std::string name);
BakedFrameGraph Bake();
inline void SetBackbufferOutput(std::size_t backbufferOutput);
FrameGraph& operator=(const FrameGraph&) = delete;
FrameGraph& operator=(FrameGraph&&) noexcept = default;
@@ -86,7 +85,6 @@ namespace Nz
struct WorkData
{
std::size_t backbufferResourceIndex;
std::vector<std::shared_ptr<RenderPass>> renderPasses;
std::vector<PhysicalPassData> physicalPasses;
std::vector<TextureData> textures;
@@ -109,7 +107,7 @@ namespace Nz
void ReorderPasses();
void TraverseGraph(std::size_t passIndex);
std::optional<std::size_t> m_backbufferOutput;
std::vector<std::size_t> m_backbufferOutputs;
std::vector<FramePass> m_framePasses;
std::vector<FramePassAttachment> m_attachments;
WorkData m_pending;

View File

@@ -16,16 +16,16 @@ namespace Nz
return id;
}
inline void FrameGraph::AddBackbufferOutput(std::size_t backbufferOutput)
{
m_backbufferOutputs.push_back(backbufferOutput);
}
inline FramePass& FrameGraph::AddPass(std::string name)
{
std::size_t id = m_framePasses.size();
return m_framePasses.emplace_back(*this, id, std::move(name));
}
inline void FrameGraph::SetBackbufferOutput(std::size_t backbufferOutput)
{
m_backbufferOutput = backbufferOutput;
}
}
#include <Nazara/Graphics/DebugOff.hpp>