diff --git a/3d-viewer/3d_rendering/opengl/3d_model.cpp b/3d-viewer/3d_rendering/opengl/3d_model.cpp index 8cad4339d1..d536c16485 100644 --- a/3d-viewer/3d_rendering/opengl/3d_model.cpp +++ b/3d-viewer/3d_rendering/opengl/3d_model.cpp @@ -483,23 +483,21 @@ void MODEL_3D::Draw( bool aTransparent, float aOpacity, bool aUseSelectedMateria // Sort from back to front std::sort( materialsSorted.begin(), materialsSorted.end(), - [&]( std::pair& a, - std::pair& b ) { - // If A is inside B, then A is rendered first - if( b.first->m_bbox.Inside( a.first->m_bbox ) ) - { - return true; - } - else - { - if( a.first->m_bbox.Inside( b.first->m_bbox ) ) - { - return false; - } - } + [&]( std::pair& a, + std::pair& b ) + { + bool aInsideB = a.first->m_bbox.Inside( b.first->m_bbox ); + bool bInsideA = b.first->m_bbox.Inside( a.first->m_bbox ); - return a.second > b.second; - } ); + // If A is inside B, then A is rendered first + if( aInsideB != bInsideA ) + return bInsideA; + + if( a.second != b.second ) + return a.second > b.second; + + return a.first > b.first; // compare pointers as a last resort + } ); for( const std::pair& mat : materialsSorted ) {