From bc5996bba5f9afecf764f13b837e0fc5dd2ff9ba Mon Sep 17 00:00:00 2001 From: Mathias Paulin <mathias.paulin@irit.fr> Date: Fri, 12 Mar 2021 01:25:51 +0100 Subject: [PATCH] Allow to configure the NodeBasedRenderer after from any functor. --- src/libRender/RadiumNBR/NodeBasedRenderer.cpp | 10 ++++++++-- src/libRender/RadiumNBR/NodeBasedRenderer.hpp | 14 ++++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/libRender/RadiumNBR/NodeBasedRenderer.cpp b/src/libRender/RadiumNBR/NodeBasedRenderer.cpp index a6e4f71..19602c3 100644 --- a/src/libRender/RadiumNBR/NodeBasedRenderer.cpp +++ b/src/libRender/RadiumNBR/NodeBasedRenderer.cpp @@ -22,12 +22,16 @@ using namespace Ra::Engine::Rendering; namespace RadiumNBR { using namespace gl; -static int NodeBasedRendererMagic = 0xFF0F00F0; +int NodeBasedRendererMagic = 0xFF0F00F0; static const GLenum buffers[] = { GL_COLOR_ATTACHMENT0 }; NodeBasedRenderer::NodeBasedRenderer() : Renderer() {} +NodeBasedRenderer::NodeBasedRenderer( std::function<void(NodeBasedRenderer *, int, int)> configurator ) : + Renderer(), + m_configurator{std::move(configurator)} {} + NodeBasedRenderer::~NodeBasedRenderer() = default; bool NodeBasedRenderer::buildRenderTechnique( RenderObject* ro ) const { @@ -106,6 +110,8 @@ void NodeBasedRenderer::initializeInternal() { initBuffers(); for ( const auto& t : m_sharedTextures ) { m_secondaryTextures.insert( { t.first, t.second.get() } ); } + + if ( m_configurator ) { m_configurator( this, m_width, m_height ); } } void NodeBasedRenderer::resizeInternal() { @@ -266,7 +272,7 @@ void NodeBasedRenderer::postProcessInternal( const ViewingParameters& /* renderD // Todo : verify if the ro partition is the good one and that the passes use the right part. void NodeBasedRenderer::updateStepInternal( const ViewingParameters& renderData ) { m_allRenderObjects.clear(); - for ( auto it = m_fancyRenderObjects.begin(); it != m_fancyRenderObjects.end(); ) + for ( auto it = m_fancyRenderObjects.begin(); it != m_fancyRenderObjects.end(); ++it) { m_allRenderObjects.push_back( *it ); } diff --git a/src/libRender/RadiumNBR/NodeBasedRenderer.hpp b/src/libRender/RadiumNBR/NodeBasedRenderer.hpp index 53d1ad7..6514175 100644 --- a/src/libRender/RadiumNBR/NodeBasedRenderer.hpp +++ b/src/libRender/RadiumNBR/NodeBasedRenderer.hpp @@ -2,6 +2,7 @@ #include <RadiumNBR/NodeBasedRendererMacro.hpp> #include <RadiumNBR/RenderPass.hpp> +#include <Core/Resources/Resources.hpp> #include <Engine/Rendering/Renderer.hpp> namespace globjects { @@ -10,10 +11,13 @@ class Framebuffer; namespace RadiumNBR { +/// Todo, put this somewhere else. This is needed to locate resources by cclient applications +extern int NodeBasedRendererMagic; + /** Node based for the Radium Engine * This Renderer is fully configurable, either dynammically or programatically. - * It implements the Ra::Engine::Rendering/Renderer interface and cand be configured by adding - * as many RadiumNBR::RenderPass rendering passes. + * It implements the Ra::Engine::Rendering/Renderer interface and can be configured by adding + * as many RadiumNBR::RenderPass as needed. * * It defines two textures that migh be shared between passes : * - a depth buffer attachable texture @@ -29,6 +33,8 @@ class NodeBasedRenderer_LIBRARY_API NodeBasedRenderer : public Ra::Engine::Rende public: NodeBasedRenderer(); + NodeBasedRenderer( std::function<void(NodeBasedRenderer *, int, int)> configurator ); + ~NodeBasedRenderer() override; [[nodiscard]] std::string getRendererName() const override { return "Configurable Renderer"; } @@ -61,6 +67,7 @@ class NodeBasedRenderer_LIBRARY_API NodeBasedRenderer : public Ra::Engine::Rende virtual void initShaders(); virtual void initBuffers(); + public: inline std::map<std::string, std::shared_ptr<Ra::Engine::Data::Texture>> &sharedTextures() { return m_sharedTextures; } @@ -100,6 +107,9 @@ class NodeBasedRenderer_LIBRARY_API NodeBasedRenderer : public Ra::Engine::Rende /// The default pass int m_defaultPass{-1}; + + /// The configurator functor to use + std::function<void(NodeBasedRenderer *, int, int)> m_configurator; }; } -- GitLab