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;
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 );
}
......
......@@ -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;
};
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment