Skip to content
Snippets Groups Projects
Commit bc5996bb authored by Mathias Paulin's avatar Mathias Paulin :speech_balloon:
Browse files

Allow to configure the NodeBasedRenderer after from any functor.

parent 94cb1c80
Branches
No related tags found
No related merge requests found
...@@ -22,12 +22,16 @@ using namespace Ra::Engine::Rendering; ...@@ -22,12 +22,16 @@ using namespace Ra::Engine::Rendering;
namespace RadiumNBR { namespace RadiumNBR {
using namespace gl; using namespace gl;
static int NodeBasedRendererMagic = 0xFF0F00F0; int NodeBasedRendererMagic = 0xFF0F00F0;
static const GLenum buffers[] = { GL_COLOR_ATTACHMENT0 }; static const GLenum buffers[] = { GL_COLOR_ATTACHMENT0 };
NodeBasedRenderer::NodeBasedRenderer() : Renderer() {} NodeBasedRenderer::NodeBasedRenderer() : Renderer() {}
NodeBasedRenderer::NodeBasedRenderer( std::function<void(NodeBasedRenderer *, int, int)> configurator ) :
Renderer(),
m_configurator{std::move(configurator)} {}
NodeBasedRenderer::~NodeBasedRenderer() = default; NodeBasedRenderer::~NodeBasedRenderer() = default;
bool NodeBasedRenderer::buildRenderTechnique( RenderObject* ro ) const { bool NodeBasedRenderer::buildRenderTechnique( RenderObject* ro ) const {
...@@ -106,6 +110,8 @@ void NodeBasedRenderer::initializeInternal() { ...@@ -106,6 +110,8 @@ void NodeBasedRenderer::initializeInternal() {
initBuffers(); initBuffers();
for ( const auto& t : m_sharedTextures ) for ( const auto& t : m_sharedTextures )
{ m_secondaryTextures.insert( { t.first, t.second.get() } ); } { m_secondaryTextures.insert( { t.first, t.second.get() } ); }
if ( m_configurator ) { m_configurator( this, m_width, m_height ); }
} }
void NodeBasedRenderer::resizeInternal() { void NodeBasedRenderer::resizeInternal() {
...@@ -266,7 +272,7 @@ void NodeBasedRenderer::postProcessInternal( const ViewingParameters& /* renderD ...@@ -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. // Todo : verify if the ro partition is the good one and that the passes use the right part.
void NodeBasedRenderer::updateStepInternal( const ViewingParameters& renderData ) { void NodeBasedRenderer::updateStepInternal( const ViewingParameters& renderData ) {
m_allRenderObjects.clear(); 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 ); m_allRenderObjects.push_back( *it );
} }
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
#include <RadiumNBR/NodeBasedRendererMacro.hpp> #include <RadiumNBR/NodeBasedRendererMacro.hpp>
#include <RadiumNBR/RenderPass.hpp> #include <RadiumNBR/RenderPass.hpp>
#include <Core/Resources/Resources.hpp>
#include <Engine/Rendering/Renderer.hpp> #include <Engine/Rendering/Renderer.hpp>
namespace globjects { namespace globjects {
...@@ -10,10 +11,13 @@ class Framebuffer; ...@@ -10,10 +11,13 @@ class Framebuffer;
namespace RadiumNBR { 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 /** Node based for the Radium Engine
* This Renderer is fully configurable, either dynammically or programatically. * This Renderer is fully configurable, either dynammically or programatically.
* It implements the Ra::Engine::Rendering/Renderer interface and cand be configured by adding * It implements the Ra::Engine::Rendering/Renderer interface and can be configured by adding
* as many RadiumNBR::RenderPass rendering passes. * as many RadiumNBR::RenderPass as needed.
* *
* It defines two textures that migh be shared between passes : * It defines two textures that migh be shared between passes :
* - a depth buffer attachable texture * - a depth buffer attachable texture
...@@ -29,6 +33,8 @@ class NodeBasedRenderer_LIBRARY_API NodeBasedRenderer : public Ra::Engine::Rende ...@@ -29,6 +33,8 @@ class NodeBasedRenderer_LIBRARY_API NodeBasedRenderer : public Ra::Engine::Rende
public: public:
NodeBasedRenderer(); NodeBasedRenderer();
NodeBasedRenderer( std::function<void(NodeBasedRenderer *, int, int)> configurator );
~NodeBasedRenderer() override; ~NodeBasedRenderer() override;
[[nodiscard]] std::string getRendererName() const override { return "Configurable Renderer"; } [[nodiscard]] std::string getRendererName() const override { return "Configurable Renderer"; }
...@@ -61,6 +67,7 @@ class NodeBasedRenderer_LIBRARY_API NodeBasedRenderer : public Ra::Engine::Rende ...@@ -61,6 +67,7 @@ class NodeBasedRenderer_LIBRARY_API NodeBasedRenderer : public Ra::Engine::Rende
virtual void initShaders(); virtual void initShaders();
virtual void initBuffers(); virtual void initBuffers();
public:
inline std::map<std::string, std::shared_ptr<Ra::Engine::Data::Texture>> &sharedTextures() { inline std::map<std::string, std::shared_ptr<Ra::Engine::Data::Texture>> &sharedTextures() {
return m_sharedTextures; return m_sharedTextures;
} }
...@@ -100,6 +107,9 @@ class NodeBasedRenderer_LIBRARY_API NodeBasedRenderer : public Ra::Engine::Rende ...@@ -100,6 +107,9 @@ class NodeBasedRenderer_LIBRARY_API NodeBasedRenderer : public Ra::Engine::Rende
/// The default pass /// The default pass
int m_defaultPass{-1}; int m_defaultPass{-1};
/// The configurator functor to use
std::function<void(NodeBasedRenderer *, int, int)> m_configurator;
}; };
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment