diff --git a/src/libRender/RadiumNBR/NodeBasedRenderer.cpp b/src/libRender/RadiumNBR/NodeBasedRenderer.cpp index e9f71a3efdd5b9b16827654f2f3bab5bc6f62cd0..27a1679c3c0ade2621b835632d18faf9e317e995 100644 --- a/src/libRender/RadiumNBR/NodeBasedRenderer.cpp +++ b/src/libRender/RadiumNBR/NodeBasedRenderer.cpp @@ -164,7 +164,7 @@ void NodeBasedRenderer::resizeInternal() { #ifdef PASSES_LOG if ( m_postprocessFbo->checkStatus() != GL_FRAMEBUFFER_COMPLETE ) { - LOG( logERROR ) << "FBO Error (AdvancedRenderer::m_postprocessFbo) : " + LOG( Ra::Core::Utils::logERROR ) << "FBO Error (NodeBasedRenderer::m_postprocessFbo) : " << m_postprocessFbo->checkStatus(); } #endif @@ -281,11 +281,11 @@ void NodeBasedRenderer::uiInternal( const ViewingParameters& renderData ) { } void NodeBasedRenderer::postProcessInternal( const ViewingParameters& /* renderData */ ) { - if (m_colorTexture) { + if (true/*m_colorTexture*/) { m_postprocessFbo->bind(); - GL_ASSERT( glDrawBuffers( 1, buffers ) ); - + //GL_ASSERT( glDrawBuffers( 1, buffers ) ); + GL_ASSERT( glDrawBuffer(GL_COLOR_ATTACHMENT0) ); GL_ASSERT( glDisable( GL_DEPTH_TEST ) ); GL_ASSERT( glDepthMask( GL_FALSE ) ); @@ -316,6 +316,7 @@ void NodeBasedRenderer::updateStepInternal( const ViewingParameters& renderData if ( m_originalRenderGraph.m_recompile ) { + std::cerr << "NodeBasedRenderer::updateStepInternal :Recompiling Graph\n"; compileRenderGraph(); m_originalRenderGraph.m_recompile = false; } @@ -345,8 +346,8 @@ void NodeBasedRenderer::setDisplayNode( DisplaySinkNode* displayNode ) { void NodeBasedRenderer::observeDisplaySink( const std::vector<NodeTypeTexture*>& graphOutput ) { // TODO : find a way to make the renderer observable to manage ouput texture in the applicaiton // gui if needed - // std::cout << "NodeBasedRenderer::observeDisplaySink - connected textures (" - // << graphOutput.size() << ") : \n"; + std::cout << "NodeBasedRenderer::observeDisplaySink - connected textures (" + << graphOutput.size() << ") : \n"; /* for ( const auto t : graphOutput ) { @@ -380,11 +381,6 @@ void NodeBasedRenderer::observeDisplaySink( const std::vector<NodeTypeTexture*>& } } } - else - { - m_colorTexture = m_fancyTexture.get(); - colorTextureSet = true; - } if ( !colorTextureSet ) { diff --git a/src/libRender/RadiumNBR/NodeGraph/Node.cpp b/src/libRender/RadiumNBR/NodeGraph/Node.cpp index a29aab822df5939975335666e3f07d00fdc42c92..1a5787cee473a5f90614760acf43847e5bb570f7 100644 --- a/src/libRender/RadiumNBR/NodeGraph/Node.cpp +++ b/src/libRender/RadiumNBR/NodeGraph/Node.cpp @@ -5,13 +5,14 @@ using namespace Ra::Core::Utils; bool Node::s_uuidGeneratorInitialized {false}; uuids::uuid_random_generator* Node::s_uidGenerator{nullptr}; + void Node::createUuidGenerator() { std::random_device rd; auto seed_data = std::array<int, std::mt19937::state_size> {}; std::generate(std::begin(seed_data), std::end(seed_data), std::ref(rd)); std::seed_seq seq(std::begin(seed_data), std::end(seed_data)); - std::mt19937 generator(seq); - s_uidGenerator = new uuids::uuid_random_generator(generator); + auto generator = new std::mt19937(seq); + s_uidGenerator = new uuids::uuid_random_generator(*generator); s_uuidGeneratorInitialized = true; } @@ -25,9 +26,8 @@ void Node::generateUuid() { /// Gets the UUID of the node as a string std::string Node::getUuid() const { if ( m_uuid.is_nil() ) { - // generates the uuid (need to remove const attribute ... + // generates the uuid (need to remove const attribute) ... const_cast<Node*>(this)->generateUuid(); - std::string guuid = "{" + uuids::to_string(m_uuid) + "}"; } std::string struuid = "{" + uuids::to_string(m_uuid) + "}"; return struuid; diff --git a/src/libRender/RadiumNBR/NodeGraph/PremadeNodes/RenderPasses/SimpleNode.cpp b/src/libRender/RadiumNBR/NodeGraph/PremadeNodes/RenderPasses/SimpleNode.cpp index c147361e69f2e4dbfa9e38e64ac9567ab64dacd6..7ed953fffc14748264e758e59b0cf2a864694476 100644 --- a/src/libRender/RadiumNBR/NodeGraph/PremadeNodes/RenderPasses/SimpleNode.cpp +++ b/src/libRender/RadiumNBR/NodeGraph/PremadeNodes/RenderPasses/SimpleNode.cpp @@ -14,7 +14,7 @@ SimpleNode::SimpleNode( const std::string& name ) : Node( name, getTypename() ) auto portInL = new PortIn<std::vector<NodeTypeLight>>( "inLights", this ); addInput( portInL ); - Ra::Engine::Data::TextureParameters colorTexParams = { "Color Texture", + Ra::Engine::Data::TextureParameters colorTexParams = { "Simple Color image", gl::GL_TEXTURE_2D, 1, 1, @@ -30,10 +30,10 @@ SimpleNode::SimpleNode( const std::string& name ) : Node( name, getTypename() ) nullptr }; m_colorTexture = new Ra::Engine::Data::Texture( colorTexParams ); - auto portOutColorTex = new PortOut<NodeTypeTexture>( "Color Texture", this ); + auto portOutColorTex = new PortOut<NodeTypeTexture>( "Color image", this ); addOutput( portOutColorTex, m_colorTexture ); - Ra::Engine::Data::TextureParameters depthTexParams = { "Depth Texture", + Ra::Engine::Data::TextureParameters depthTexParams = { "Simple Depth image", gl::GL_TEXTURE_2D, 1, 1, @@ -49,13 +49,14 @@ SimpleNode::SimpleNode( const std::string& name ) : Node( name, getTypename() ) nullptr }; m_depthTexture = new Ra::Engine::Data::Texture( depthTexParams ); - auto portOutDepthTex = new PortOut<NodeTypeTexture>( "Depth Texture", this ); + auto portOutDepthTex = new PortOut<NodeTypeTexture>( "Depth image", this ); addOutput( portOutDepthTex, m_depthTexture ); } void SimpleNode::init() { m_framebuffer = new globjects::Framebuffer(); + float blankAO[4] = { 1.f, 1.f, 1.f, 1.f }; Ra::Engine::Data::TextureParameters texParams; texParams.target = gl::GL_TEXTURE_2D; @@ -70,7 +71,7 @@ void SimpleNode::init() { texParams.texels = &blankAO; m_blankAO = new Ra::Engine::Data::Texture( texParams ); m_blankAO->initializeGL(); - +/* m_nodeState = new globjects::State(globjects::State::DeferredMode); m_nodeState->enable( gl::GL_DEPTH_TEST ); m_nodeState->depthMask( gl::GL_TRUE ); @@ -78,7 +79,7 @@ void SimpleNode::init() { m_nodeState->colorMask( gl::GL_TRUE, gl::GL_TRUE, gl::GL_TRUE, gl::GL_TRUE ); m_nodeState->blendFunc( gl::GL_ONE, gl::GL_ONE ); m_nodeState->disable( gl::GL_BLEND ); - +*/ } void SimpleNode::update() {} @@ -106,15 +107,21 @@ void SimpleNode::execute() { auto& lights = inputLight->getData(); m_framebuffer->bind(); - m_framebuffer->attachTexture( gl::GL_DEPTH_ATTACHMENT, m_depthTexture->texture() ); - m_framebuffer->attachTexture( gl::GL_COLOR_ATTACHMENT0, m_colorTexture->texture() ); + const gl::GLenum buffers[] = { gl::GL_COLOR_ATTACHMENT0 }; gl::glDrawBuffers( 1, buffers ); - auto currentState = globjects::State::currentState(); - m_nodeState->apply(); - float clearBlack[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; + //auto currentState = globjects::State::currentState(); + //m_nodeState->apply(); + + gl::glEnable( gl::GL_DEPTH_TEST ); + gl::glDepthMask( gl::GL_TRUE ); + gl::glDepthFunc( gl::GL_LEQUAL ); + gl::glColorMask( gl::GL_TRUE, gl::GL_TRUE, gl::GL_TRUE, gl::GL_TRUE ); + gl::glDisable( gl::GL_BLEND ); + + float clearBlack[4] = { 0.0f, 1.0f, 0.0f, 0.0f }; float clearDepth = 1.0f; gl::glClearBufferfv( gl::GL_COLOR, 0, clearBlack ); gl::glClearBufferfv( gl::GL_DEPTH, 0, &clearDepth ); @@ -130,15 +137,18 @@ void SimpleNode::execute() { for ( const auto& ro : renderObjects ) { ro->render( inPassParams, cameras[0], m_idx ); } if (first_light) { + //break; first_light = false; gl::glEnable( gl::GL_BLEND ); + gl::glBlendFunc( gl::GL_ONE, gl::GL_ONE ); + gl::glDepthMask( gl::GL_FALSE ); } } } + gl::glDisable( gl::GL_BLEND ); + gl::glDepthMask( gl::GL_TRUE ); + //currentState->apply(); - currentState->apply(); - m_framebuffer->detach( gl::GL_DEPTH_ATTACHMENT ); - m_framebuffer->detach( gl::GL_COLOR_ATTACHMENT0 ); m_framebuffer->unbind(); } @@ -149,8 +159,13 @@ void SimpleNode::destroy() { } void SimpleNode::resize( uint32_t width, uint32_t height ) { + std::cout << "SimpleNode::resize\n"; m_colorTexture->resize( width, height ); m_depthTexture->resize( width, height ); + m_framebuffer->bind(); + m_framebuffer->attachTexture( gl::GL_DEPTH_ATTACHMENT, m_depthTexture->texture() ); + m_framebuffer->attachTexture( gl::GL_COLOR_ATTACHMENT0, m_colorTexture->texture() ); + m_framebuffer->unbind(); } void SimpleNode::buildRenderTechnique( const Ra::Engine::Rendering::RenderObject* ro,