diff --git a/src/libRender/RadiumNBR/NodeBasedRenderer.cpp b/src/libRender/RadiumNBR/NodeBasedRenderer.cpp index a6e4f718a92ce74181c0e86f708601eee28007cd..19602c3f2a1dcbaa051176221dacbc0865403526 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 53d1ad7a17050ac9147d2bf41f20b5e57d49b474..6514175e23160e7087e342bde1cd8e30ea7c9dc1 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; }; }