MRPT / mrpt

:zap: The Mobile Robot Programming Toolkit (MRPT)
https://docs.mrpt.org/reference/latest/
BSD 3-Clause "New" or "Revised" License
1.94k stars 629 forks source link

Feature: render shadows #1268

Closed jlblancoc closed 1 year ago

jlblancoc commented 1 year ago

Changed apps/libraries

Screenshot from 2023-03-02 00-52-13

jlblancoc commented 1 year ago

TODO: Fix all these detected potential deadlocks:

  Mutex M229819216063133224 acquired here while holding mutex M229537741086421952 in main thread:
    #0 pthread_rwlock_wrlock ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1436 (libtsan.so.2+0x496df)
    #1 __glibcxx_rwlock_wrlock /usr/include/c++/12/shared_mutex:80 (opengl_objects_demo+0x8a992)
    #2 std::__shared_mutex_pthread::lock() /usr/include/c++/12/shared_mutex:193 (opengl_objects_demo+0x8aa1a)
    #3 std::shared_mutex::lock() /usr/include/c++/12/shared_mutex:420 (opengl_objects_demo+0x8aae8)
    #4 std::unique_lock<std::shared_mutex>::lock() /usr/include/c++/12/bits/unique_lock.h:139 (opengl_objects_demo+0x9cddb)
    #5 std::unique_lock<std::shared_mutex>::unique_lock(std::shared_mutex&) /usr/include/c++/12/bits/unique_lock.h:69 (opengl_objects_demo+0x94176)
    #6 mrpt::opengl::CRenderizable::notifyChange() const /home/jlblanco/code/mrpt/libs/opengl/include/mrpt/opengl/CRenderizable.h:381 (opengl_objects_demo+0x8b44f)
    #7 mrpt::opengl::CSetOfTriangles::insertTriangle(mrpt::opengl::TTriangle const&) <null> (libmrpt-maps.so.2.7+0x642de6)

  Mutex M229537741086421952 acquired here while holding mutex M229819216063133224 in thread T12:
    #0 pthread_rwlock_rdlock ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1406 (libtsan.so.2+0x4666f)
    #1 __glibcxx_rwlock_rdlock /usr/include/c++/12/shared_mutex:78 (libmrpt-maps.so.2.7+0x48482c)
    #2 std::__shared_mutex_pthread::lock_shared() /usr/include/c++/12/shared_mutex:229 (libmrpt-maps.so.2.7+0x48486c)
    #3 std::shared_mutex::lock_shared() /usr/include/c++/12/shared_mutex:426 (libmrpt-maps.so.2.7+0x484920)
    #4 std::shared_lock<std::shared_mutex>::shared_lock(std::shared_mutex&) /usr/include/c++/12/shared_mutex:727 (libmrpt-maps.so.2.7+0x48ddc0)
    #5 mrpt::opengl::CRenderizableShaderTriangles::trianglesBoundingBox() const /home/jlblanco/code/mrpt/libs/opengl/src/CRenderizableShaderTriangles.cpp:174 (libmrpt-opengl.so.2.7+0x497f2d)
    #6 mrpt::opengl::CSetOfTriangles::internalBoundingBoxLocal() const /home/jlblanco/code/mrpt/libs/opengl/src/CSetOfTriangles.cpp:188 (libmrpt-opengl.so.2.7+0x4b7cea)
    #7 mrpt::opengl::CRenderizable::getBoundingBoxLocalf() const /home/jlblanco/code/mrpt/libs/opengl/src/CRenderizable.cpp:269 (libmrpt-opengl.so.2.7+0x4898f9)
    #8 mrpt::opengl::CSetOfObjects::internalBoundingBoxLocal() const /home/jlblanco/code/mrpt/libs/opengl/src/CSetOfObjects.cpp:283 (libmrpt-opengl.so.2.7+0x4a1e34)
    #9 mrpt::opengl::CRenderizable::getBoundingBoxLocalf() const /home/jlblanco/code/mrpt/libs/opengl/src/CRenderizable.cpp:269 (libmrpt-opengl.so.2.7+0x4898f9)
    #10 mrpt::opengl::depthAndVisibleInView(mrpt::opengl::CRenderizable const*, mrpt::opengl::TRenderMatrices const&, bool) /home/jlblanco/code/mrpt/libs/opengl/src/RenderQueue.cpp:101 (libmrpt-opengl.so.2.7+0x4fa10b)
    #11 mrpt::opengl::enqueueForRendering(std::deque<std::shared_ptr<mrpt::opengl::CRenderizable>, std::allocator<std::shared_ptr<mrpt::opengl::CRenderizable> > > const&, mrpt::opengl::TRenderMatrices const&, std::map<unsigned char, std::multimap<float, mrpt::opengl::RenderQueueElement, std::less<float>, std::allocator<std::pair<float const, mrpt::opengl::RenderQueueElement> > >, std::less<unsigned char>, std::allocator<std::pair<unsigned char const, std::multimap<float, mrpt::opengl::RenderQueueElement, std::less<float>, std::allocator<std::pair<float const, mrpt::opengl::RenderQueueElement> > > > > >&, bool, bool, mrpt::opengl::RenderQueueStats*) /home/jlblanco/code/mrpt/libs/opengl/src/RenderQueue.cpp:330 (libmrpt-opengl.so.2.7+0x4faff4)
  Write of size 8 at 0x7b5c0000a2a0 by main thread:
    #0 mrpt::poses::CPose3D::operator=(mrpt::poses::CPose3D const&) /home/jlblanco/code/mrpt/libs/poses/include/mrpt/poses/CPose3D.h:79 (opengl_objects_demo+0x8f4b6)
    #1 mrpt::opengl::CRenderizable::setPose(mrpt::poses::CPose3D const&) /home/jlblanco/code/mrpt/libs/opengl/src/CRenderizable.cpp:189 (libmrpt-opengl.so.2.7+0x488f5f)
    #2 TestOpenGLObjects() /home/jlblanco/code/mrpt/samples/opengl_objects_demo/test.cpp:1119 (opengl_objects_demo+0x863ab)
    #3 main /home/jlblanco/code/mrpt/samples/opengl_objects_demo/test.cpp:1156 (opengl_objects_demo+0x892c1)

  Previous read of size 8 at 0x7b5c0000a2a0 by thread T12 (mutexes: write M135524772447596864, write M147633611921206456):
    #0 mrpt::poses::CPose3D::getHomogeneousMatrix(mrpt::math::CMatrixFixed<double, 4ul, 4ul>&) const /home/jlblanco/code/mrpt/libs/poses/src/CPose3D.cpp:824 (libmrpt-poses.so.2.7+0x88ab9f)
    #1 mrpt::math::CMatrixFixed<double, 4ul, 4ul> mrpt::poses::CPoseOrPoint<mrpt::poses::CPose3D, 6ul>::getHomogeneousMatrixVal<mrpt::math::CMatrixFixed<double, 4ul, 4ul> >() const /home/jlblanco/code/mrpt/libs/poses/include/mrpt/poses/CPoseOrPoint.h:280 (libmrpt-maps.so.2.7+0x4a6fc2)
    #2 mrpt::opengl::enqueueForRendering(std::deque<std::shared_ptr<mrpt::opengl::CRenderizable>, std::allocator<std::shared_ptr<mrpt::opengl::CRenderizable> > > const&, mrpt::opengl::TRenderMatrices const&, std::map<unsigned char, std::multimap<float, mrpt::opengl::RenderQueueElement, std::less<float>, std::allocator<std::pair<float const, mrpt::opengl::RenderQueueElement> > >, std::less<unsigned char>, std::allocator<std::pair<unsigned char const, std::multimap<float, mrpt::opengl::RenderQueueElement, std::less<float>, std::allocator<std::pair<float const, mrpt::opengl::RenderQueueElement> > > > > >&, bool, bool, mrpt::opengl::RenderQueueStats*) /home/jlblanco/code/mrpt/libs/opengl/src/RenderQueue.cpp:294 (libmrpt-opengl.so.2.7+0x4fab10)
    #3 mrpt::opengl::Viewport::renderNormalSceneMode(mrpt::opengl::CCamera const*, bool) const /home/jlblanco/code/mrpt/libs/opengl/src/Viewport.cpp:396 (libmrpt-opengl.so.2.7+0x545e65)
  Write of size 1 at 0x7b3800003e18 by thread T12 (mutexes: write M135524772447596864, write M147633611921206456):
    #0 mrpt::opengl::CTextMessageCapable::TListTextMessages::regenerateGLobjects() const /home/jlblanco/code/mrpt/libs/opengl/src/CTextMessageCapable.cpp:37 (libmrpt-opengl.so.2.7+0x4cb2f0)
    #1 mrpt::opengl::Viewport::renderTextMessages() const /home/jlblanco/code/mrpt/libs/opengl/src/Viewport.cpp:477 (libmrpt-opengl.so.2.7+0x546927)
    #2 mrpt::opengl::Viewport::render(int, int, int, int, mrpt::opengl::CCamera const*) const /home/jlblanco/code/mrpt/libs/opengl/src/Viewport.cpp:654 (libmrpt-opengl.so.2.7+0x5479d6)
    #3 mrpt::opengl::Scene::render() const /home/jlblanco/code/mrpt/libs/opengl/src/Scene.cpp:97 (libmrpt-opengl.so.2.7+0x50da40)

  Previous write of size 1 at 0x7b3800003e18 by main thread:
    #0 mrpt::opengl::CTextMessageCapable::updateTextMessage(unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /home/jlblanco/code/mrpt/libs/opengl/src/CTextMessageCapable.cpp:55 (libmrpt-opengl.so.2.7+0x4cb45e)
    #1 mrpt::gui::CDisplayWindow3D::updateTextMessage(unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /home/jlblanco/code/mrpt/libs/gui/include/mrpt/gui/CDisplayWindow3D.h:340 (opengl_objects_demo+0x8cba1)
    #2 TestOpenGLObjects() /home/jlblanco/code/mrpt/samples/opengl_objects_demo/test.cpp:1138 (opengl_objects_demo+0x864ea)
  Write of size 8 at 0x7ffce378ad68 by thread T12 (mutexes: write M135524772447596864):
    #0 mrpt::gui::CDisplayWindow3D::internal_setRenderingFPS(double) /home/jlblanco/code/mrpt/libs/gui/src/CDisplayWindow3D.cpp:787 (libmrpt-gui.so.2.7+0x1437d3)
    #1 mrpt::gui::CMyGLCanvas_DisplayWindow3D::OnPostRenderSwapBuffers(double, wxPaintDC&) /home/jlblanco/code/mrpt/libs/gui/src/CDisplayWindow3D.cpp:210 (libmrpt-gui.so.2.7+0x14075c)
    #2 mrpt::gui::CWxGLCanvasBase::Render() /home/jlblanco/code/mrpt/libs/gui/src/CWxGLCanvasBase.cpp:230 (libmrpt-gui.so.2.7+0x17357f)
    #3 mrpt::gui::CWxGLCanvasBase::OnPaint(wxPaintEvent&) /home/jlblanco/code/mrpt/libs/gui/src/CWxGLCanvasBase.cpp:238 (libmrpt-gui.so.2.7+0x1736c4)
    #4 wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&) <null> (libwx_baseu-3.0.so.0+0x17d17d)
    #5 mrpt::gui::WxSubsystem::wxMainThread() /home/jlblanco/code/mrpt/libs/gui/src/WxSubsystem.cpp:978 (libmrpt-gui.so.2.7+0x17cd02)
    #6 void std::__invoke_impl<void, void (*)()>(std::__invoke_other, void (*&&)()) /usr/include/c++/12/bits/invoke.h:61 (libmrpt-gui.so.2.7+0x18644d)
    #7 std::__invoke_result<void (*)()>::type std::__invoke<void (*)()>(void (*&&)()) /usr/include/c++/12/bits/invoke.h:96 (libmrpt-gui.so.2.7+0x1863a2)
    #8 void std::thread::_Invoker<std::tuple<void (*)()> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/include/c++/12/bits/std_thread.h:252 (libmrpt-gui.so.2.7+0x1862d4)
    #9 std::thread::_Invoker<std::tuple<void (*)()> >::operator()() /usr/include/c++/12/bits/std_thread.h:259 (libmrpt-gui.so.2.7+0x186176)
    #10 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)()> > >::_M_run() /usr/include/c++/12/bits/std_thread.h:210 (libmrpt-gui.so.2.7+0x18594c)
    #11 <null> <null> (libstdc++.so.6+0xdc2b2)

  Previous read of size 8 at 0x7ffce378ad68 by main thread:
    #0 mrpt::gui::CDisplayWindow3D::getRenderingFPS() const /home/jlblanco/code/mrpt/libs/gui/include/mrpt/gui/CDisplayWindow3D.h:345 (opengl_objects_demo+0x8cc4f)
    #1 TestOpenGLObjects() /home/jlblanco/code/mrpt/samples/opengl_objects_demo/test.cpp:1142 (opengl_objects_demo+0x8648e)
    #2 main /home/jlblanco/code/mrpt/samples/opengl_objects_demo/test.cpp:1156 (opengl_objects_demo+0x892c1)

  Location is stack of main thread.
  Write of size 8 at 0x7ffce378ac90 by thread T12 (mutexes: write M135524772447596864):
    #0 mrpt::non_copiable_ptr_basic<void>::operator=(void*) <null> (libmrpt-gui.so.2.7+0x12be0e)
    #1 mrpt::gui::CBaseGUIWindow::notifyChildWindowDestruction() /home/jlblanco/code/mrpt/libs/gui/src/CBaseGUIWindow.cpp:149 (libmrpt-gui.so.2.7+0x128068)
    #2 mrpt::gui::C3DWindowDialog::OnClose(wxCloseEvent&) /home/jlblanco/code/mrpt/libs/gui/src/CDisplayWindow3D.cpp:320 (libmrpt-gui.so.2.7+0x1411d0)
    #3 wxEvtHandler::ProcessEventIfMatchesId(wxEventTableEntryBase const&, wxEvtHandler*, wxEvent&) <null> (libwx_baseu-3.0.so.0+0x17d17d)
    #4 mrpt::gui::WxSubsystem::wxMainThread() /home/jlblanco/code/mrpt/libs/gui/src/WxSubsystem.cpp:978 (libmrpt-gui.so.2.7+0x17cd02)
    #5 void std::__invoke_impl<void, void (*)()>(std::__invoke_other, void (*&&)()) /usr/include/c++/12/bits/invoke.h:61 (libmrpt-gui.so.2.7+0x18644d)
    #6 std::__invoke_result<void (*)()>::type std::__invoke<void (*)()>(void (*&&)()) /usr/include/c++/12/bits/invoke.h:96 (libmrpt-gui.so.2.7+0x1863a2)
    #7 void std::thread::_Invoker<std::tuple<void (*)()> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/include/c++/12/bits/std_thread.h:252 (libmrpt-gui.so.2.7+0x1862d4)
    #8 std::thread::_Invoker<std::tuple<void (*)()> >::operator()() /usr/include/c++/12/bits/std_thread.h:259 (libmrpt-gui.so.2.7+0x186176)
    #9 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)()> > >::_M_run() /usr/include/c++/12/bits/std_thread.h:210 (libmrpt-gui.so.2.7+0x18594c)
    #10 <null> <null> (libstdc++.so.6+0xdc2b2)

  Previous read of size 8 at 0x7ffce378ac90 by main thread:
    #0 mrpt::non_copiable_ptr_basic<void>::operator!=(void const*) const <null> (libmrpt-gui.so.2.7+0x12bf80)
    #1 mrpt::gui::CBaseGUIWindow::isOpen() /home/jlblanco/code/mrpt/libs/gui/src/CBaseGUIWindow.cpp:202 (libmrpt-gui.so.2.7+0x12830d)
    #2 TestOpenGLObjects() /home/jlblanco/code/mrpt/samples/opengl_objects_demo/test.cpp:1111 (opengl_objects_demo+0x86541)
    #3 main /home/jlblanco/code/mrpt/samples/opengl_objects_demo/test.cpp:1156 (opengl_objects_demo+0x892c1)

  Location is stack of main thread.
codecov[bot] commented 1 year ago

Codecov Report

Merging #1268 (2b2b217) into develop (86dcea1) will increase coverage by 0.06%. The diff coverage is 59.15%.

:exclamation: Current head 2b2b217 differs from pull request most recent head 043ce1c. Consider uploading reports for the commit 043ce1c to get more accurate results

Impacted file tree graph

@@             Coverage Diff             @@
##           develop    #1268      +/-   ##
===========================================
+ Coverage    39.08%   39.14%   +0.06%     
===========================================
  Files         1262     1263       +1     
  Lines       109441   109665     +224     
===========================================
+ Hits         42777    42931     +154     
- Misses       66664    66734      +70     
Impacted Files Coverage Δ
libs/core/include/mrpt/core/WorkerThreadsPool.h 86.66% <ø> (ø)
libs/gui/include/mrpt/gui/CBaseGUIWindow.h 0.00% <ø> (ø)
libs/gui/include/mrpt/gui/CDisplayWindow3D.h 0.00% <ø> (ø)
libs/gui/src/CBaseGUIWindow.cpp 0.00% <0.00%> (ø)
libs/gui/src/CDisplayWindow.cpp 0.00% <0.00%> (ø)
libs/gui/src/CDisplayWindow3D.cpp 0.00% <0.00%> (ø)
libs/gui/src/CDisplayWindowPlots.cpp 0.00% <0.00%> (ø)
libs/hwdrivers/src/CSkeletonTracker.cpp 0.00% <0.00%> (ø)
libs/maps/src/opengl/CAngularObservationMesh.cpp 19.65% <0.00%> (ø)
libs/opengl/include/mrpt/opengl/CAssimpModel.h 0.00% <ø> (ø)
... and 65 more

Continue to review full report at Codecov.

Legend - Click here to learn more Δ = absolute <relative> (impact), ø = not affected, ? = missing data Powered by Codecov. Last update 86dcea1...043ce1c. Read the comment docs.