Repository navigation
Port step 1 and the raw data viewer to raylib - #576
Merged
Merged
Conversation
lidar_odometry_step_1 and mandeye_raw_data_viewer now run on raylib + rlImGui instead of GLUT + legacy OpenGL. The GLUT builds are kept as lidar_odometry_step_1_legacy and mandeye_raw_data_viewer_legacy, like step 2 and step 3. Step 3's raylib replacement for <Core/utils.hpp> (same names, camera in raylib_widgets::OrbitCamera) moves into a shared core_raylib_utils library (Core/raylib_utils.hpp), so the ported apps keep their code and only their GL calls change. Step 3 keeps only its session-rendering helpers. New in the shared module: a per-vertex-color point batch (rlgl has no GL_POINTS), draw_ellipse, an ortho-aware reshape, intensity shading matching ScanRenderer's FlatIntensity mode, dropped-file handling, and the Windows taskbar progress (own TU, windows.h clashes with raylib.h). Both apps accept drag and drop (step 1: a data folder starts processing; raw viewer: folders/files load) and shade points by intensity (View menu toggle, on by default). implot_raylib builds ImPlot against imgui_raylib for the raw viewer's IMU plots. Wide lines are drawn 1 px (core profile). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UXL9MhpTVJ1uyhtztVmAoK
- Closing the window while odometry runs asks "Quit anyway?". On yes the run is paused; once step 2 is parked at its pause point (new `parked` flag on compute_step_2) or has finished, the cache is removed and the process ends with std::_Exit, so the detached worker can't crash in the global destructors or read a deleted cache. mainLoop() takes an optional close_requested callback; the close is cancelled through GLFW's own window (glfwGetCurrentContext), not raylib's native GetWindowHandle(). - Opening data (drag & drop, Ctrl+O, menu) first presents a "Loading data" modal, then runs the blocking step 1; drops and Ctrl+O are ignored while a load is pending or a run is in progress. - NDT::Bucket keeps a running mean intensity (display only, fits in existing padding); reference buckets are intensity-shaded with the "Intensity shading" toggle, and indoor buckets are shown by default. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
michalpelka
marked this pull request as draft
October 22, 2026 15:01
Contributor
Author
|
I need to test it on Windows :painful: |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
Author
|
Done, works on Mac and Windows. Will probably work on Linux. |
michalpelka
marked this pull request as ready for review
October 22, 2026 22:42
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
lidar_odometry_step_1andmandeye_raw_data_viewernow run on raylib + rlImGui instead of GLUT + legacy OpenGL. The GLUT builds stay available aslidar_odometry_step_1_legacyandmandeye_raw_data_viewer_legacy, as was done for step 2 and step 3.Port (8203aac)
<Core/utils.hpp>moves into a sharedcore_raylib_utilslibrary (Core/raylib_utils.hpp). The ported apps keep their code; only their GL calls change.GL_POINTSdraw_ellipsewindows.hclashes withraylib.himplot_raylibbuilds ImPlot for the raw viewer's IMU plots.Step 1 follow-ups (fb04077)
parkedflag oncompute_step_2) or finishes, the cache is removed and the process exits withstd::_Exit. This keeps the detached worker from crashing in global destructors or reading a deleted cache.mainLoop()takes an optionalclose_requestedcallback. The close is cancelled through GLFW's own window handle (glfwGetCurrentContext). raylib'sGetWindowHandle()returns the nativeNSWindow*/HWND, and writing the flag through it corrupts memory.NDT::Bucketkeeps a running mean intensity. It is display only, so odometry results are unchanged, and it fits in existing padding, so the struct size is unchanged.Testing
GetWindowHandle()) is fixed in this branch. The quit flow hasn't been re-run since that fix.🤖 Generated with Claude Code