From e84ec8e4ac74b14926d11f152a300b62b2169067 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Wed, 20 Oct 2021 23:50:23 +0200 Subject: [PATCH] Proof of concept --- include/Nazara/Graphics/ElementRenderer.hpp | 5 +- include/Nazara/Graphics/Material.hpp | 2 +- include/Nazara/Graphics/Material.inl | 14 +- include/Nazara/Graphics/MaterialPass.hpp | 2 + include/Nazara/Graphics/MaterialSettings.hpp | 3 + include/Nazara/Graphics/MaterialSettings.inl | 10 + include/Nazara/Graphics/RenderSpriteChain.hpp | 4 +- include/Nazara/Graphics/RenderSpriteChain.inl | 8 +- include/Nazara/Graphics/RenderSubmesh.hpp | 12 +- include/Nazara/Graphics/RenderSubmesh.inl | 30 +-- .../Nazara/Graphics/SpriteChainRenderer.hpp | 5 +- include/Nazara/Graphics/SubmeshRenderer.hpp | 25 ++- include/Nazara/Graphics/ViewerInstance.hpp | 4 +- include/Nazara/Graphics/ViewerInstance.inl | 4 +- src/Nazara/Graphics/BasicMaterial.cpp | 4 + src/Nazara/Graphics/ElementRenderer.cpp | 2 +- src/Nazara/Graphics/ForwardFramePipeline.cpp | 52 +++--- src/Nazara/Graphics/MaterialPass.cpp | 46 +++++ src/Nazara/Graphics/Model.cpp | 4 +- .../Resources/Shaders/basic_material.nzsl | 12 +- .../Resources/Shaders/depth_material.nzsl | 12 +- src/Nazara/Graphics/Sprite.cpp | 4 +- src/Nazara/Graphics/SpriteChainRenderer.cpp | 63 +++++-- src/Nazara/Graphics/SubmeshRenderer.cpp | 174 ++++++++++++++---- src/Nazara/Graphics/TextSprite.cpp | 4 +- 25 files changed, 366 insertions(+), 139 deletions(-) diff --git a/include/Nazara/Graphics/ElementRenderer.hpp b/include/Nazara/Graphics/ElementRenderer.hpp index 656ef354b..ea35a47b9 100644 --- a/include/Nazara/Graphics/ElementRenderer.hpp +++ b/include/Nazara/Graphics/ElementRenderer.hpp @@ -19,6 +19,7 @@ namespace Nz class CommandBufferBuilder; class RenderElement; class RenderFrame; + class ViewerInstance; struct ElementRendererData; class NAZARA_GRAPHICS_API ElementRenderer @@ -28,8 +29,8 @@ namespace Nz virtual ~ElementRenderer(); virtual std::unique_ptr InstanciateData() = 0; - virtual void Prepare(ElementRendererData& rendererData, RenderFrame& currentFrame, const Pointer* elements, std::size_t elementCount); - virtual void Render(ElementRendererData& rendererData, CommandBufferBuilder& commandBuffer, const Pointer* elements, std::size_t elementCount) = 0; + virtual void Prepare(const ViewerInstance& viewerInstance, ElementRendererData& rendererData, RenderFrame& currentFrame, const Pointer* elements, std::size_t elementCount); + virtual void Render(const ViewerInstance& viewerInstance, ElementRendererData& rendererData, CommandBufferBuilder& commandBuffer, const Pointer* elements, std::size_t elementCount) = 0; virtual void Reset(ElementRendererData& rendererData, RenderFrame& currentFrame); }; diff --git a/include/Nazara/Graphics/Material.hpp b/include/Nazara/Graphics/Material.hpp index 0f1a9ecae..24eb79c71 100644 --- a/include/Nazara/Graphics/Material.hpp +++ b/include/Nazara/Graphics/Material.hpp @@ -22,7 +22,7 @@ namespace Nz inline void AddPass(std::size_t passIndex, std::shared_ptr pass); inline void AddPass(std::string passName, std::shared_ptr pass); - inline MaterialPass* GetPass(std::size_t passIndex) const; + inline const std::shared_ptr& GetPass(std::size_t passIndex) const; inline bool HasPass(std::size_t passIndex) const; diff --git a/include/Nazara/Graphics/Material.inl b/include/Nazara/Graphics/Material.inl index a72b2838c..d45d8de43 100644 --- a/include/Nazara/Graphics/Material.inl +++ b/include/Nazara/Graphics/Material.inl @@ -21,17 +21,23 @@ namespace Nz return AddPass(registry.GetPassIndex(passName), std::move(pass)); } - inline MaterialPass* Material::GetPass(std::size_t passIndex) const + inline const std::shared_ptr& Material::GetPass(std::size_t passIndex) const { if (passIndex >= m_passes.size()) - return nullptr; + { + static std::shared_ptr dummy; + return dummy; + } - return m_passes[passIndex].get(); + return m_passes[passIndex]; } inline bool Material::HasPass(std::size_t passIndex) const { - return GetPass(passIndex) != nullptr; + if (passIndex >= m_passes.size()) + return false; + + return m_passes[passIndex] != nullptr; } inline void Material::RemovePass(std::size_t passIndex) diff --git a/include/Nazara/Graphics/MaterialPass.hpp b/include/Nazara/Graphics/MaterialPass.hpp index 230b8ed29..2fd2104b4 100644 --- a/include/Nazara/Graphics/MaterialPass.hpp +++ b/include/Nazara/Graphics/MaterialPass.hpp @@ -52,6 +52,8 @@ namespace Nz inline void EnsurePipelineUpdate() const; + void FillShaderBinding(std::vector& bindings) const; + inline RendererComparison GetDepthCompareFunc() const; inline BlendEquation GetBlendAlphaModeEquation() const; inline BlendEquation GetBlendColorModeEquation() const; diff --git a/include/Nazara/Graphics/MaterialSettings.hpp b/include/Nazara/Graphics/MaterialSettings.hpp index 969c5fce8..3978bcc3b 100644 --- a/include/Nazara/Graphics/MaterialSettings.hpp +++ b/include/Nazara/Graphics/MaterialSettings.hpp @@ -39,6 +39,7 @@ namespace Nz inline const Builder& GetBuilderData() const; inline const std::vector