@@ -641,7 +641,7 @@ struct BoundingBoxDrawCallback : public virtual osg::Drawable::DrawCallback
641641
642642 uint64_t rendered_bounding_boxes = 0 ;
643643 for (uint16_t m_id = 0 ; m_id < _plugin->getSettings ().models .size (); ++m_id) {
644- if (!_plugin ->isModelVisible (m_id))
644+ if (!_renderer ->isModelVisible (m_id))
645645 continue ;
646646 const lamure::model_t model_id = controller->deduce_model_id (std::to_string (m_id));
647647 lamure::ren::cut& cut = cuts->get_cut (context_id, renderInfo.getState ()->getContextID (), model_id);
@@ -759,7 +759,7 @@ struct PointsDrawCallback : public virtual osg::Drawable::DrawCallback
759759
760760 if (database->num_models () == 0 ) { _renderer->endFrame (); before.restore (); return ; }
761761 for (lamure::model_t model_id = 0 ; model_id < settings.models .size (); ++model_id) {
762- if (!_plugin ->isModelVisible (static_cast <std::size_t >(model_id)))
762+ if (!_renderer ->isModelVisible (static_cast <std::size_t >(model_id)))
763763 continue ;
764764 lamure::model_t m_id = controller->deduce_model_id (std::to_string (model_id));
765765 const auto &trafo = _plugin->getModelInfo ().model_transformations [m_id];
@@ -861,7 +861,7 @@ struct PointsDrawCallback : public virtual osg::Drawable::DrawCallback
861861 glBindTexture (GL_TEXTURE_2D , texture);
862862 };
863863
864- // --- PASS 1: Depth pre-pass (depth-only, kreisförmiges discard im FS)
864+ // --- PASS 1: Depth pre-pass (depth-only, kreisfoermiges discard im FS)
865865 glBindFramebuffer (GL_FRAMEBUFFER , target.fbo );
866866 glViewport (0 , 0 , vpWidth, vpHeight);
867867 glDrawBuffer (GL_NONE );
@@ -890,7 +890,7 @@ struct PointsDrawCallback : public virtual osg::Drawable::DrawCallback
890890 if (_renderer->getSurfelPass1Shader ().projection_matrix_loc >= 0 ) glUniformMatrix4fv (_renderer->getSurfelPass1Shader ().projection_matrix_loc , 1 , GL_FALSE , projection_matrix.data_array );
891891 if (_renderer->getSurfelPass1Shader ().use_aniso_loc >= 0 ) glUniform1i (_renderer->getSurfelPass1Shader ().use_aniso_loc , useAnisoThisPass ? 1 : 0 );
892892 for (uint16_t m_id = 0 ; m_id < s.models .size (); ++m_id) {
893- if (!_plugin ->isModelVisible (m_id))
893+ if (!_renderer ->isModelVisible (m_id))
894894 continue ;
895895
896896 const lamure::model_t model_id = controller->deduce_model_id (std::to_string (m_id));
@@ -937,7 +937,7 @@ struct PointsDrawCallback : public virtual osg::Drawable::DrawCallback
937937 // Tiefe aus Pass 1
938938 bindTexture2DToUnit (0 , target.depth_texture );
939939
940- // Globale Uniforms für VS/GS/FS
940+ // Globale Uniforms fuer VS/GS/FS
941941 if (_renderer->getSurfelPass2Shader ().viewport_loc >= 0 ) glUniform2f (_renderer->getSurfelPass2Shader ().viewport_loc , viewport.x , viewport.y );
942942 if (_renderer->getSurfelPass2Shader ().max_radius_loc >= 0 ) glUniform1f (_renderer->getSurfelPass2Shader ().max_radius_loc , s.max_radius );
943943 if (_renderer->getSurfelPass2Shader ().min_radius_loc >= 0 ) glUniform1f (_renderer->getSurfelPass2Shader ().min_radius_loc , s.min_radius );
@@ -962,7 +962,7 @@ struct PointsDrawCallback : public virtual osg::Drawable::DrawCallback
962962 const bool needNodeUniforms = (showRadiusDeviationDebug || showAccuracyDebug);
963963
964964 for (uint16_t m_id = 0 ; m_id < s.models .size (); ++m_id) {
965- if (!_plugin ->isModelVisible (m_id))
965+ if (!_renderer ->isModelVisible (m_id))
966966 continue ;
967967 const lamure::model_t model_id = controller->deduce_model_id (std::to_string (m_id));
968968 lamure::ren::cut &cut = cuts->get_cut (context_id, renderInfo.getState ()->getContextID (), model_id);
@@ -1042,7 +1042,7 @@ struct PointsDrawCallback : public virtual osg::Drawable::DrawCallback
10421042 // ================= SINGLE-PASS RENDER PATH =================
10431043 _renderer->setFrameUniforms (projection_matrix, viewport);
10441044 for (uint16_t model_id = 0 ; model_id < _plugin->getSettings ().models .size (); ++model_id) {
1045- if (!_plugin ->isModelVisible (model_id))
1045+ if (!_renderer ->isModelVisible (model_id))
10461046 continue ;
10471047 const lamure::model_t m_id = controller->deduce_model_id (std::to_string (model_id));
10481048 lamure::ren::cut& cut = cuts->get_cut (context_id, renderInfo.getState ()->getContextID (), m_id);
@@ -1665,18 +1665,19 @@ bool LamureRenderer::isModelVisible(std::size_t modelIndex) const
16651665 return false ;
16661666
16671667 osg::Node* node = it_node->second .get ();
1668- if (!node || node->getNumParents () == 0 )
1668+ if (!node || node->getNodeMask () == 0 )
16691669 return false ;
16701670
1671- osg::Node* current = node;
1672- while (current) {
1673- if (current->getNodeMask () == 0 )
1674- return false ;
1675- if (current->getNumParents () == 0 )
1676- break ;
1677- current = current->getParent (0 );
1671+ const unsigned int parentCount = node->getNumParents ();
1672+ if (parentCount == 0 )
1673+ return false ;
1674+
1675+ for (unsigned int i = 0 ; i < parentCount; ++i) {
1676+ osg::Node* parent = node->getParent (i);
1677+ if (parent && parent->getNodeMask () != 0 )
1678+ return true ;
16781679 }
1679- return true ;
1680+ return false ;
16801681}
16811682
16821683void LamureRenderer::setFrameUniforms (const scm::math::mat4& projection_matrix, const scm::math::vec2& viewport) {
0 commit comments