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

[librender] BUG FIX : template partial specialization was not effective using GNU-gcc.

parent 7023daa1
Branches
No related tags found
No related merge requests found
...@@ -318,7 +318,7 @@ set(gui_public_headers ...@@ -318,7 +318,7 @@ set(gui_public_headers
) )
set(gui_headers set(gui_headers
RadiumNBR/Gui/RenderGraphEditor/NodeAdapterTemplateInstanciations.hpp
) )
set(gui_inlines set(gui_inlines
......
...@@ -2,16 +2,14 @@ ...@@ -2,16 +2,14 @@
#include <RadiumNBR/Gui/RenderGraphEditor/WidgetFactory.hpp> #include <RadiumNBR/Gui/RenderGraphEditor/WidgetFactory.hpp>
#include <RadiumNBR/Gui/PowerSlider.hpp>
#include <RadiumNBR/Gui/RendererPanel.hpp>
#include <QCheckBox> #include <QCheckBox>
#include <QColorDialog> #include <QColorDialog>
#include <QJsonArray> #include <QJsonArray>
#include <QLabel>
#include <QObject> #include <QObject>
#include <RadiumNBR/Gui/PowerSlider.hpp>
#include <RadiumNBR/Gui/RendererPanel.hpp>
#include <RadiumNBR/NodeGraph/PremadeNodes/Sources/SourceNode.hpp>
#include <filesystem> #include <filesystem>
namespace NodeDataModelTools { namespace NodeDataModelTools {
...@@ -172,44 +170,3 @@ void NlohmannObjectToQJsonObject(const nlohmann::json& data, QJsonObject& p) { ...@@ -172,44 +170,3 @@ void NlohmannObjectToQJsonObject(const nlohmann::json& data, QJsonObject& p) {
} }
} // namespace NodeDataModelTools } // namespace NodeDataModelTools
/** Node adapter methods */
template <>
void NodeAdapterModel<DataNode<NodeTypeRenderObject>>::init() {
m_node = m_renderGraph->getDataNode<NodeTypeRenderObject>();
m_inputsConnected.resize( m_node->getInputs().size() );
checkConnections();
}
template <>
void NodeAdapterModel<DataNode<NodeTypeLight>>::init() {
m_node = m_renderGraph->getDataNode<NodeTypeLight>();
m_inputsConnected.resize( m_node->getInputs().size() );
checkConnections();
}
template <>
void NodeAdapterModel<DataNode<NodeTypeCamera>>::init() {
m_node = m_renderGraph->getDataNode<NodeTypeCamera>();
m_inputsConnected.resize( m_node->getInputs().size() );
checkConnections();
}
template <>
void NodeAdapterModel<DisplaySinkNode>::init() {
m_node = m_renderGraph->getDisplayNode();
m_inputsConnected.resize( m_node->getInputs().size() );
checkConnections();
}
template <>
void NodeAdapterModel<DataNode<NodeTypeRenderObject>>::destroy() {}
template <>
void NodeAdapterModel<DataNode<NodeTypeLight>>::destroy() {}
template <>
void NodeAdapterModel<DataNode<NodeTypeCamera>>::destroy() {}
template <>
void NodeAdapterModel<DisplaySinkNode>::destroy() {}
#pragma once #pragma once
#include <RadiumNBR/NodeBasedRendererMacro.hpp> #include <RadiumNBR/NodeBasedRendererMacro.hpp>
#include <nodes/NodeDataModel>
#include <RadiumNBR/Gui/RenderGraphEditor/ConnectionStatusData.hpp> #include <RadiumNBR/Gui/RenderGraphEditor/ConnectionStatusData.hpp>
#include <RadiumNBR/NodeGraph/RenderGraph.hpp> #include <RadiumNBR/NodeGraph/RenderGraph.hpp>
#include <nodes/NodeDataModel>
#include <iostream> #include <iostream>
namespace NodeDataModelTools { namespace NodeDataModelTools {
......
#pragma once
#include <RadiumNBR/Gui/RenderGraphEditor/NodeAdapterModel.hpp>
/** Node adapter specialized methods */
template <>
void NodeAdapterModel<DataNode<NodeTypeRenderObject>>::init() {
m_node = m_renderGraph->getDataNode<NodeTypeRenderObject>();
m_inputsConnected.resize( m_node->getInputs().size() );
checkConnections();
}
template <>
void NodeAdapterModel<DataNode<NodeTypeLight>>::init() {
m_node = m_renderGraph->getDataNode<NodeTypeLight>();
m_inputsConnected.resize( m_node->getInputs().size() );
checkConnections();
}
template <>
void NodeAdapterModel<DataNode<NodeTypeCamera>>::init() {
m_node = m_renderGraph->getDataNode<NodeTypeCamera>();
m_inputsConnected.resize( m_node->getInputs().size() );
checkConnections();
}
template <>
void NodeAdapterModel<DataNode<NodeTypeRenderObject>>::destroy() {}
template <>
void NodeAdapterModel<DataNode<NodeTypeLight>>::destroy() {}
template <>
void NodeAdapterModel<DataNode<NodeTypeCamera>>::destroy() {}
#if 1
// TODO : understand why ?????
// gcc does not find this is a template partial specialization for DisplaySinkNode :(
// code moved to RenderGraphEditorView.cpp
template <>
void NodeAdapterModel<DisplaySinkNode>::init() {
m_node = m_renderGraph->getDisplayNode();
m_inputsConnected.resize( m_node->getInputs().size() );
checkConnections();
}
template <>
void NodeAdapterModel<DisplaySinkNode>::destroy() {}
#endif
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <nodes/NodeData> #include <nodes/NodeData>
#include <RadiumNBR/NodeBasedRenderer.hpp> #include <RadiumNBR/NodeBasedRenderer.hpp>
#include <RadiumNBR/NodeGraph/RenderGraph.hpp>
#include <RadiumNBR/Gui/RenderGraphEditor/NodeAdapterModel.hpp> #include <RadiumNBR/Gui/RenderGraphEditor/NodeAdapterModel.hpp>
#include <RadiumNBR/Gui/RenderGraphEditor/SourceColorTextureModel.hpp> #include <RadiumNBR/Gui/RenderGraphEditor/SourceColorTextureModel.hpp>
...@@ -15,6 +16,8 @@ ...@@ -15,6 +16,8 @@
#include <RadiumNBR/NodeGraph/PremadeNodes/PremadeNodesIncludes.hpp> #include <RadiumNBR/NodeGraph/PremadeNodes/PremadeNodesIncludes.hpp>
#include <RadiumNBR/Gui/RenderGraphEditor/NodeAdapterTemplateInstanciations.hpp>
RenderGraphEditorView::RenderGraphEditorView( QWidget* parent ) : QWidget( parent, Qt::Window ) { RenderGraphEditorView::RenderGraphEditorView( QWidget* parent ) : QWidget( parent, Qt::Window ) {
QtNodes::ConnectionStyle::setConnectionStyle( QtNodes::ConnectionStyle::setConnectionStyle(
R"( R"(
...@@ -70,6 +73,67 @@ RenderGraphEditorView::RenderGraphEditorView( QWidget* parent ) : QWidget( paren ...@@ -70,6 +73,67 @@ RenderGraphEditorView::RenderGraphEditorView( QWidget* parent ) : QWidget( paren
connectAll(); connectAll();
} }
void RenderGraphEditorView::disconnectAll() {
for ( size_t i = 0; i < connections.size(); i++ )
{ QObject::disconnect( connections[i] ); }
connections.clear();
}
void RenderGraphEditorView::connectAll() {
/*
// This connection is not needed
//connections.push_back(QObject::connect(scene, &QtNodes::FlowScene::nodeHoverLeft,
this, &RenderGraphEditorView::needUpdate));
connections.push_back(QObject::connect(scene, &QtNodes::FlowScene::nodeDeleted, this,
&RenderGraphEditorView::needUpdate)); connections.push_back(QObject::connect(scene,
&QtNodes::FlowScene::connectionCreated, this, &RenderGraphEditorView::needUpdate));
connections.push_back(QObject::connect(scene, &QtNodes::FlowScene::connectionDeleted,
this, &RenderGraphEditorView::needUpdate));
*/
connections.push_back(
QObject::connect( scene, &QtNodes::FlowScene::nodeHoverLeft, [this]() {
std::cout << "QtNodes::FlowScene::nodeHoverLeft\n";
emit needUpdate();
} ) );
connections.push_back( QObject::connect( scene, &QtNodes::FlowScene::nodeDeleted, [this]() {
std::cout << "QtNodes::FlowScene::nodeDeleted\n";
emit needUpdate();
} ) );
connections.push_back(
QObject::connect( scene, &QtNodes::FlowScene::connectionCreated, [this]() {
std::cout << "QtNodes::FlowScene::connectionCreated\n";
emit needUpdate();
} ) );
connections.push_back(
QObject::connect( scene, &QtNodes::FlowScene::connectionDeleted, [this]() {
std::cout << "QtNodes::FlowScene::connectionDeleted\n";
emit needUpdate();
} ) );
}
void RenderGraphEditorView::setGraph( RenderGraph* rg) {
currentGraph = rg;
auto editorRegistry = NodeGraphQtEditor::initializeNodeRegistry( currentGraph );
scene->setRegistry( editorRegistry );
}
#if 0
// TODO : understand why this is problematic with gcc (and not with clang)
// Moved here from NodeAdapterModel.cpp
template <>
void NodeAdapterModel<DisplaySinkNode>::init() {
m_node = m_renderGraph->getDisplayNode();
m_inputsConnected.resize( m_node->getInputs().size() );
checkConnections();
}
template <>
void NodeAdapterModel<DisplaySinkNode>::destroy() {}
#endif
namespace NodeGraphQtEditor { namespace NodeGraphQtEditor {
template <typename T> template <typename T>
...@@ -78,7 +142,9 @@ class NodeCreator ...@@ -78,7 +142,9 @@ class NodeCreator
public: public:
explicit NodeCreator( RenderGraph* renderGraph ) : m_renderGraph( renderGraph ) {} explicit NodeCreator( RenderGraph* renderGraph ) : m_renderGraph( renderGraph ) {}
std::unique_ptr<T> operator()() { return std::make_unique<T>( m_renderGraph ); } std::unique_ptr<T> operator()() {
return std::make_unique<T>( m_renderGraph );
}
private: private:
RenderGraph* m_renderGraph; RenderGraph* m_renderGraph;
...@@ -94,6 +160,9 @@ std::shared_ptr<DataModelRegistry> initializeNodeRegistry( RenderGraph* renderGr ...@@ -94,6 +160,9 @@ std::shared_ptr<DataModelRegistry> initializeNodeRegistry( RenderGraph* renderGr
ret->registerModel<NodeAdapterModel<DataNode<NodeTypeCamera>>>( ret->registerModel<NodeAdapterModel<DataNode<NodeTypeCamera>>>(
NodeCreator<NodeAdapterModel<DataNode<NodeTypeCamera>>>( renderGraph ), "Data" ); NodeCreator<NodeAdapterModel<DataNode<NodeTypeCamera>>>( renderGraph ), "Data" );
ret->registerModel<NodeAdapterModel<DisplaySinkNode>>(
NodeCreator<NodeAdapterModel<DisplaySinkNode>>( renderGraph ), "Sinks" );
ret->registerModel<NodeAdapterModel<FilterROByTypeNode>>( ret->registerModel<NodeAdapterModel<FilterROByTypeNode>>(
NodeCreator<NodeAdapterModel<FilterROByTypeNode>>( renderGraph ), "Filters" ); NodeCreator<NodeAdapterModel<FilterROByTypeNode>>( renderGraph ), "Filters" );
ret->registerModel<NodeAdapterModel<FilterROByNameNode>>( ret->registerModel<NodeAdapterModel<FilterROByNameNode>>(
...@@ -145,10 +214,6 @@ std::shared_ptr<DataModelRegistry> initializeNodeRegistry( RenderGraph* renderGr ...@@ -145,10 +214,6 @@ std::shared_ptr<DataModelRegistry> initializeNodeRegistry( RenderGraph* renderGr
ret->registerModel<NodeAdapterModel<DepthTextureNode>>( ret->registerModel<NodeAdapterModel<DepthTextureNode>>(
NodeCreator<NodeAdapterModel<DepthTextureNode>>( renderGraph ), "Sources" ); NodeCreator<NodeAdapterModel<DepthTextureNode>>( renderGraph ), "Sources" );
ret->registerModel<NodeAdapterModel<DisplaySinkNode>>(
NodeCreator<NodeAdapterModel<DisplaySinkNode>>( renderGraph ), "Sinks" );
ret->registerModel<NodeAdapterModel<DifferenceNode>>( ret->registerModel<NodeAdapterModel<DifferenceNode>>(
NodeCreator<NodeAdapterModel<DifferenceNode>>( renderGraph ), "Compositing" ); NodeCreator<NodeAdapterModel<DifferenceNode>>( renderGraph ), "Compositing" );
ret->registerModel<NodeAdapterModel<SumNode>>( ret->registerModel<NodeAdapterModel<SumNode>>(
......
...@@ -10,8 +10,8 @@ ...@@ -10,8 +10,8 @@
namespace RadiumNBR { namespace RadiumNBR {
class NodeBasedRenderer; class NodeBasedRenderer;
} }
// TODO, why is this class outside of any namespace ? // TODO, why is this class outside of any namespace ?
class RenderGraph; class RenderGraph;
...@@ -25,46 +25,10 @@ class NodeBasedRenderer_LIBRARY_API RenderGraphEditorView : public QWidget ...@@ -25,46 +25,10 @@ class NodeBasedRenderer_LIBRARY_API RenderGraphEditorView : public QWidget
public: public:
explicit RenderGraphEditorView( QWidget* parent ); explicit RenderGraphEditorView( QWidget* parent );
void disconnectAll() { void disconnectAll();
for ( size_t i = 0; i < connections.size(); i++ ) void connectAll();
{ QObject::disconnect( connections[i] ); }
connections.clear(); void setGraph( RenderGraph* rg);
}
void connectAll() {
/*
// This connection is not needed
//connections.push_back(QObject::connect(scene, &QtNodes::FlowScene::nodeHoverLeft,
this, &RenderGraphEditorView::needUpdate));
connections.push_back(QObject::connect(scene, &QtNodes::FlowScene::nodeDeleted, this,
&RenderGraphEditorView::needUpdate)); connections.push_back(QObject::connect(scene,
&QtNodes::FlowScene::connectionCreated, this, &RenderGraphEditorView::needUpdate));
connections.push_back(QObject::connect(scene, &QtNodes::FlowScene::connectionDeleted,
this, &RenderGraphEditorView::needUpdate));
*/
connections.push_back(
QObject::connect( scene, &QtNodes::FlowScene::nodeHoverLeft, [this]() {
std::cout << "QtNodes::FlowScene::nodeHoverLeft\n";
emit needUpdate();
} ) );
connections.push_back( QObject::connect( scene, &QtNodes::FlowScene::nodeDeleted, [this]() {
std::cout << "QtNodes::FlowScene::nodeDeleted\n";
emit needUpdate();
} ) );
connections.push_back(
QObject::connect( scene, &QtNodes::FlowScene::connectionCreated, [this]() {
std::cout << "QtNodes::FlowScene::connectionCreated\n";
emit needUpdate();
} ) );
connections.push_back(
QObject::connect( scene, &QtNodes::FlowScene::connectionDeleted, [this]() {
std::cout << "QtNodes::FlowScene::connectionDeleted\n";
emit needUpdate();
} ) );
}
public slots: public slots:
bool eventFilter( QObject* object, QEvent* event ) { bool eventFilter( QObject* object, QEvent* event ) {
...@@ -77,16 +41,20 @@ class NodeBasedRenderer_LIBRARY_API RenderGraphEditorView : public QWidget ...@@ -77,16 +41,20 @@ class NodeBasedRenderer_LIBRARY_API RenderGraphEditorView : public QWidget
void needUpdate(); void needUpdate();
public: public:
QMenuBar* menuBar{ nullptr }; QMenuBar* menuBar{ nullptr };
QAction* newAction{ nullptr }; QAction* newAction{ nullptr };
QAction* openAction{ nullptr }; QAction* openAction{ nullptr };
QAction* saveAction{ nullptr }; QAction* saveAction{ nullptr };
QAction* saveAsAction{ nullptr }; QAction* saveAsAction{ nullptr };
std::vector<QMetaObject::Connection> connections;
// TODO, put all these as private data
QtNodes::FlowScene* scene{ nullptr }; QtNodes::FlowScene* scene{ nullptr };
QtNodes::FlowView* view{ nullptr }; QtNodes::FlowView* view{ nullptr };
RadiumNBR::NodeBasedRenderer* current{ nullptr }; private:
RenderGraph* currentGraph{ nullptr };
std::vector<QMetaObject::Connection> connections;
}; };
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment