From cfc46b3c9c7a631843f1cb61060804e7baf2c6a7 Mon Sep 17 00:00:00 2001 From: Matthew Bries Date: Sun, 19 Jan 2020 21:04:35 -0600 Subject: [PATCH 01/11] Get something testable --- mapviz/include/mapviz/map_canvas.h | 3 +- mapviz/src/map_canvas.cpp | 47 +++++++++++++++++------------- 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/mapviz/include/mapviz/map_canvas.h b/mapviz/include/mapviz/map_canvas.h index e209d9aa..d3a0c214 100644 --- a/mapviz/include/mapviz/map_canvas.h +++ b/mapviz/include/mapviz/map_canvas.h @@ -40,6 +40,7 @@ // QT libraries #include +#include #include #include #include @@ -54,7 +55,7 @@ namespace mapviz { - class MapCanvas : public QGLWidget + class MapCanvas : public QGLWidget, protected QGLFunctions { Q_OBJECT diff --git a/mapviz/src/map_canvas.cpp b/mapviz/src/map_canvas.cpp index 651d5676..1a4c0518 100644 --- a/mapviz/src/map_canvas.cpp +++ b/mapviz/src/map_canvas.cpp @@ -28,9 +28,9 @@ // ***************************************************************************** -#include -#include -#include +//#include +//#include +//#include #include @@ -96,7 +96,7 @@ MapCanvas::~MapCanvas() { if(pixel_buffer_size_ != 0) { - glDeleteBuffersARB(2, pixel_buffer_ids_); + glDeleteBuffers(2, pixel_buffer_ids_); } } @@ -105,6 +105,10 @@ void MapCanvas::InitializeTf(boost::shared_ptr tf) tf_ = tf; } +void* (*glMapBuffer)(GLenum target, GLenum buffer); + +void (*glUnmapBuffer)(GLenum target); + void MapCanvas::InitializePixelBuffers() { if(has_pixel_buffers_) @@ -115,15 +119,15 @@ void MapCanvas::InitializePixelBuffers() { if (pixel_buffer_size_ != 0) { - glDeleteBuffersARB(2, pixel_buffer_ids_); + glDeleteBuffers(2, pixel_buffer_ids_); } - glGenBuffersARB(2, pixel_buffer_ids_); - glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pixel_buffer_ids_[0]); - glBufferDataARB(GL_PIXEL_PACK_BUFFER_ARB, buffer_size, 0, GL_STREAM_READ_ARB); - glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pixel_buffer_ids_[1]); - glBufferDataARB(GL_PIXEL_PACK_BUFFER_ARB, buffer_size, 0, GL_STREAM_READ_ARB); - glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0); + glGenBuffers(2, pixel_buffer_ids_); + glBindBuffer(GL_PIXEL_PACK_BUFFER, pixel_buffer_ids_[0]); + glBufferData(GL_PIXEL_PACK_BUFFER, buffer_size, 0, GL_STREAM_READ); + glBindBuffer(GL_PIXEL_PACK_BUFFER, pixel_buffer_ids_[1]); + glBufferData(GL_PIXEL_PACK_BUFFER, buffer_size, 0, GL_STREAM_READ); + glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); pixel_buffer_size_ = buffer_size; } @@ -132,16 +136,19 @@ void MapCanvas::InitializePixelBuffers() void MapCanvas::initializeGL() { - GLenum err = glewInit(); - if (GLEW_OK != err) + //GLenum err = glewInit(); + if (false)//GLEW_OK != err) { - ROS_ERROR("Error: %s\n", glewGetErrorString(err)); + //ROS_ERROR("Error: %s\n", glewGetErrorString(err)); } else { // Check if pixel buffers are available for asynchronous capturing std::string extensions = (const char*)glGetString(GL_EXTENSIONS); - has_pixel_buffers_ = extensions.find("GL_ARB_pixel_buffer_object") != std::string::npos; + has_pixel_buffers_ = false;//extensions.find("GL_ARB_pixel_buffer_object") != std::string::npos; + + // now load the extension... + //glMapBuffer = glXGetProcAddress("glMapBuffer"); } glClearColor(0.58f, 0.56f, 0.5f, 1); @@ -192,19 +199,19 @@ void MapCanvas::CaptureFrame(bool force) pixel_buffer_index_ = (pixel_buffer_index_ + 1) % 2; int32_t next_index = (pixel_buffer_index_ + 1) % 2; - glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pixel_buffer_ids_[pixel_buffer_index_]); + glBindBuffer(GL_PIXEL_PACK_BUFFER, pixel_buffer_ids_[pixel_buffer_index_]); glReadPixels(0, 0, width(), height(), GL_BGRA, GL_UNSIGNED_BYTE, 0); - glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pixel_buffer_ids_[next_index]); - GLubyte* data = reinterpret_cast(glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY_ARB)); + glBindBuffer(GL_PIXEL_PACK_BUFFER, pixel_buffer_ids_[next_index]); + GLubyte* data = reinterpret_cast(glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY)); if(data) { capture_buffer_.resize(pixel_buffer_size_); memcpy(&capture_buffer_[0], data, pixel_buffer_size_); - glUnmapBufferARB(GL_PIXEL_PACK_BUFFER_ARB); + glUnmapBuffer(GL_PIXEL_PACK_BUFFER); } - glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0); + glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); } else { From a570c62cf34d0f5ad22eae81238b4bfac0bb542a Mon Sep 17 00:00:00 2001 From: Matthew Bries Date: Sun, 19 Jan 2020 21:12:36 -0600 Subject: [PATCH 02/11] Remove the others --- mapviz_plugins/include/mapviz_plugins/pointcloud2_plugin.h | 3 ++- mapviz_plugins/src/occupancy_grid_plugin.cpp | 2 +- mapviz_plugins/src/pointcloud2_plugin.cpp | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/mapviz_plugins/include/mapviz_plugins/pointcloud2_plugin.h b/mapviz_plugins/include/mapviz_plugins/pointcloud2_plugin.h index 6d68a34f..cc471884 100644 --- a/mapviz_plugins/include/mapviz_plugins/pointcloud2_plugin.h +++ b/mapviz_plugins/include/mapviz_plugins/pointcloud2_plugin.h @@ -39,6 +39,7 @@ #include // QT libraries +#include #include #include #include @@ -51,7 +52,7 @@ namespace mapviz_plugins { - class PointCloud2Plugin : public mapviz::MapvizPlugin + class PointCloud2Plugin : public mapviz::MapvizPlugin, protected QGLFunctions { Q_OBJECT diff --git a/mapviz_plugins/src/occupancy_grid_plugin.cpp b/mapviz_plugins/src/occupancy_grid_plugin.cpp index 906d03d7..033dd198 100644 --- a/mapviz_plugins/src/occupancy_grid_plugin.cpp +++ b/mapviz_plugins/src/occupancy_grid_plugin.cpp @@ -27,7 +27,7 @@ // // ***************************************************************************** -#include +//#include #include #include diff --git a/mapviz_plugins/src/pointcloud2_plugin.cpp b/mapviz_plugins/src/pointcloud2_plugin.cpp index c200abd7..4a8d201d 100644 --- a/mapviz_plugins/src/pointcloud2_plugin.cpp +++ b/mapviz_plugins/src/pointcloud2_plugin.cpp @@ -27,7 +27,7 @@ // // ***************************************************************************** -#include +//#include #include // C++ standard libraries From 68dcafbcf631cd9148d4dbf09ca23dfe544d7ae4 Mon Sep 17 00:00:00 2001 From: Matthew Bries Date: Sun, 19 Jan 2020 21:28:40 -0600 Subject: [PATCH 03/11] Fix tile_map --- tile_map/src/texture_cache.cpp | 11 ++++++----- tile_map/src/tile_map_view.cpp | 7 ++++--- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/tile_map/src/texture_cache.cpp b/tile_map/src/texture_cache.cpp index 38b13b3c..48325407 100644 --- a/tile_map/src/texture_cache.cpp +++ b/tile_map/src/texture_cache.cpp @@ -33,12 +33,13 @@ #include -#include -#include -#include +//#include +//#include +//#include #include +#include #include #include @@ -109,8 +110,8 @@ namespace tile_map ROS_ERROR("FAILED TO CREATE TEXTURE"); GLenum err = glGetError(); - const GLubyte *errString = gluErrorString(err); - ROS_ERROR("GL ERROR(%u): %s", err, errString); + //const GLubyte *errString = gluErrorString(err); + ROS_ERROR("GL ERROR(%u): %s", err, "unknown"); return texture; } diff --git a/tile_map/src/tile_map_view.cpp b/tile_map/src/tile_map_view.cpp index 8356a7ca..47edaeec 100644 --- a/tile_map/src/tile_map_view.cpp +++ b/tile_map/src/tile_map_view.cpp @@ -33,9 +33,10 @@ #include -#include -#include -#include +//#include +//#include +//#include +#include #include From 59e53d497add38e8c711476c34954800a2b30e46 Mon Sep 17 00:00:00 2001 From: "P. J. Reed" Date: Mon, 20 Jan 2020 10:36:36 -0600 Subject: [PATCH 04/11] Add ARM64 Kinetic and Melodic CI builds --- .travis.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.travis.yml b/.travis.yml index 36b819d5..2306963f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,9 +12,13 @@ jobs: - stage: build-shadow-fixed env: ROS_DISTRO="kinetic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros-shadow-fixed/ubuntu - env: ROS_DISTRO="melodic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros-shadow-fixed/ubuntu + - env: ROS_DISTRO="kinetic" INJECT_QEMU=aarch64 DOCKER_BASE_IMAGE='arm64v8/ros:kinetic' ROS_REPOSITORY_PATH=http://packages.ros.org/ros-shadow-fixed/ubuntu + - env: ROS_DISTRO="melodic" INJECT_QEMU=aarch64 DOCKER_BASE_IMAGE='arm64v8/ros:melodic' ROS_REPOSITORY_PATH=http://packages.ros.org/ros-shadow-fixed/ubuntu - stage: build-released env: ROS_DISTRO="kinetic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu - env: ROS_DISTRO="melodic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu + - env: ROS_DISTRO="kinetic" INJECT_QEMU=aarch64 DOCKER_BASE_IMAGE='arm64v8/ros:kinetic' ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu + - env: ROS_DISTRO="melodic" INJECT_QEMU=aarch64 DOCKER_BASE_IMAGE='arm64v8/ros:melodic' ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu - stage: lint sudo: false install: pip install --user -q catkin-lint @@ -23,6 +27,8 @@ jobs: allow_failures: - env: ROS_DISTRO="kinetic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu - env: ROS_DISTRO="melodic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu + - env: ROS_DISTRO="kinetic" INJECT_QEMU=aarch64 DOCKER_BASE_IMAGE='arm64v8/ros:kinetic' ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu + - env: ROS_DISTRO="melodic" INJECT_QEMU=aarch64 DOCKER_BASE_IMAGE='arm64v8/ros:melodic' ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu - env: JOB="catkin_lint" matrix: allow_failures: @@ -30,5 +36,6 @@ matrix: install: - git clone https://github.com/ros-industrial/industrial_ci.git .ci_config script: + - sudo apt-get install qemu-user-static - source .ci_config/travis.sh # - source ./travis.sh # Enable this when you have a package-local script From 927a7797af76e8cb58aba3efcab0e98f87448500 Mon Sep 17 00:00:00 2001 From: "P. J. Reed" Date: Mon, 20 Jan 2020 10:36:36 -0600 Subject: [PATCH 05/11] Add ARM64 Kinetic and Melodic CI builds --- .travis.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.travis.yml b/.travis.yml index 36b819d5..2306963f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,9 +12,13 @@ jobs: - stage: build-shadow-fixed env: ROS_DISTRO="kinetic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros-shadow-fixed/ubuntu - env: ROS_DISTRO="melodic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros-shadow-fixed/ubuntu + - env: ROS_DISTRO="kinetic" INJECT_QEMU=aarch64 DOCKER_BASE_IMAGE='arm64v8/ros:kinetic' ROS_REPOSITORY_PATH=http://packages.ros.org/ros-shadow-fixed/ubuntu + - env: ROS_DISTRO="melodic" INJECT_QEMU=aarch64 DOCKER_BASE_IMAGE='arm64v8/ros:melodic' ROS_REPOSITORY_PATH=http://packages.ros.org/ros-shadow-fixed/ubuntu - stage: build-released env: ROS_DISTRO="kinetic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu - env: ROS_DISTRO="melodic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu + - env: ROS_DISTRO="kinetic" INJECT_QEMU=aarch64 DOCKER_BASE_IMAGE='arm64v8/ros:kinetic' ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu + - env: ROS_DISTRO="melodic" INJECT_QEMU=aarch64 DOCKER_BASE_IMAGE='arm64v8/ros:melodic' ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu - stage: lint sudo: false install: pip install --user -q catkin-lint @@ -23,6 +27,8 @@ jobs: allow_failures: - env: ROS_DISTRO="kinetic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu - env: ROS_DISTRO="melodic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu + - env: ROS_DISTRO="kinetic" INJECT_QEMU=aarch64 DOCKER_BASE_IMAGE='arm64v8/ros:kinetic' ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu + - env: ROS_DISTRO="melodic" INJECT_QEMU=aarch64 DOCKER_BASE_IMAGE='arm64v8/ros:melodic' ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu - env: JOB="catkin_lint" matrix: allow_failures: @@ -30,5 +36,6 @@ matrix: install: - git clone https://github.com/ros-industrial/industrial_ci.git .ci_config script: + - sudo apt-get install qemu-user-static - source .ci_config/travis.sh # - source ./travis.sh # Enable this when you have a package-local script From 0d420df74182abd64c8ad1615961073b065b8ff3 Mon Sep 17 00:00:00 2001 From: "P. J. Reed" Date: Mon, 20 Jan 2020 15:36:58 -0600 Subject: [PATCH 06/11] Use native ARM64 builds instead of qemu --- .travis.yml | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2306963f..6c397e16 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,26 +9,36 @@ notifications: on_failure: always jobs: include: - - stage: build-shadow-fixed + - stage: build env: ROS_DISTRO="kinetic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros-shadow-fixed/ubuntu + arch: amd64 + - env: ROS_DISTRO="kinetic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros-shadow-fixed/ubuntu + arch: arm64 - env: ROS_DISTRO="melodic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros-shadow-fixed/ubuntu - - env: ROS_DISTRO="kinetic" INJECT_QEMU=aarch64 DOCKER_BASE_IMAGE='arm64v8/ros:kinetic' ROS_REPOSITORY_PATH=http://packages.ros.org/ros-shadow-fixed/ubuntu - - env: ROS_DISTRO="melodic" INJECT_QEMU=aarch64 DOCKER_BASE_IMAGE='arm64v8/ros:melodic' ROS_REPOSITORY_PATH=http://packages.ros.org/ros-shadow-fixed/ubuntu - - stage: build-released - env: ROS_DISTRO="kinetic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu + arch: amd64 + - env: ROS_DISTRO="melodic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros-shadow-fixed/ubuntu + arch: arm64 + - env: ROS_DISTRO="kinetic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu + arch: amd64 + - env: ROS_DISTRO="kinetic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu + arch: arm64 + - env: ROS_DISTRO="melodic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu + arch: amd64 - env: ROS_DISTRO="melodic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu - - env: ROS_DISTRO="kinetic" INJECT_QEMU=aarch64 DOCKER_BASE_IMAGE='arm64v8/ros:kinetic' ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu - - env: ROS_DISTRO="melodic" INJECT_QEMU=aarch64 DOCKER_BASE_IMAGE='arm64v8/ros:melodic' ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu - - stage: lint + arch: arm64 + - env: JOB="catkin_lint" sudo: false install: pip install --user -q catkin-lint script: catkin_lint -W2 --explain . - env: JOB="catkin_lint" allow_failures: - env: ROS_DISTRO="kinetic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu + arch: amd64 + - env: ROS_DISTRO="kinetic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu + arch: arm64 + - env: ROS_DISTRO="melodic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu + arch: amd64 - env: ROS_DISTRO="melodic" ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu - - env: ROS_DISTRO="kinetic" INJECT_QEMU=aarch64 DOCKER_BASE_IMAGE='arm64v8/ros:kinetic' ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu - - env: ROS_DISTRO="melodic" INJECT_QEMU=aarch64 DOCKER_BASE_IMAGE='arm64v8/ros:melodic' ROS_REPOSITORY_PATH=http://packages.ros.org/ros/ubuntu + arch: arm64 - env: JOB="catkin_lint" matrix: allow_failures: @@ -36,6 +46,4 @@ matrix: install: - git clone https://github.com/ros-industrial/industrial_ci.git .ci_config script: - - sudo apt-get install qemu-user-static - source .ci_config/travis.sh -# - source ./travis.sh # Enable this when you have a package-local script From 56d55a3c404da49969eacceb3fdf62a4d5193fe8 Mon Sep 17 00:00:00 2001 From: Matt Bries Date: Thu, 23 Jan 2020 12:39:15 -0600 Subject: [PATCH 07/11] Fix melodic --- mapviz/include/mapviz/map_canvas.h | 4 ++++ mapviz/include/mapviz/mapviz_plugin.h | 4 ++++ multires_image/CMakeLists.txt | 1 + multires_image/src/QGLMap.cpp | 2 ++ multires_image/src/multires_view.cpp | 2 ++ multires_image/src/tile.cpp | 1 + multires_image/src/tile_view.cpp | 2 ++ tile_map/include/tile_map/tile_map_view.h | 4 +++- tile_map/src/tile_map_view.cpp | 5 +---- 9 files changed, 20 insertions(+), 5 deletions(-) diff --git a/mapviz/include/mapviz/map_canvas.h b/mapviz/include/mapviz/map_canvas.h index d3a0c214..9b90b502 100644 --- a/mapviz/include/mapviz/map_canvas.h +++ b/mapviz/include/mapviz/map_canvas.h @@ -53,6 +53,10 @@ #include +#ifdef __aarch64__ +#include +#endif + namespace mapviz { class MapCanvas : public QGLWidget, protected QGLFunctions diff --git a/mapviz/include/mapviz/mapviz_plugin.h b/mapviz/include/mapviz/mapviz_plugin.h index 92ce2cce..5fb2d0c1 100644 --- a/mapviz/include/mapviz/mapviz_plugin.h +++ b/mapviz/include/mapviz/mapviz_plugin.h @@ -52,6 +52,10 @@ #include "stopwatch.h" +#ifdef __aarch64__ +#include +#endif + namespace mapviz { class MapvizPlugin : public QObject diff --git a/multires_image/CMakeLists.txt b/multires_image/CMakeLists.txt index e1b5fc25..b700d1f2 100644 --- a/multires_image/CMakeLists.txt +++ b/multires_image/CMakeLists.txt @@ -95,6 +95,7 @@ target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES} ${Boost_LIBRARIES} ${Qt_LIBRARIES} + ${OPENGL_gl_LIBRARY} ${GLU_LIBRARY} ) diff --git a/multires_image/src/QGLMap.cpp b/multires_image/src/QGLMap.cpp index 065c0568..331f19b6 100644 --- a/multires_image/src/QGLMap.cpp +++ b/multires_image/src/QGLMap.cpp @@ -29,6 +29,8 @@ #include +#include + // C++ standard libraries #include diff --git a/multires_image/src/multires_view.cpp b/multires_image/src/multires_view.cpp index 6ea9cd15..512f2d84 100644 --- a/multires_image/src/multires_view.cpp +++ b/multires_image/src/multires_view.cpp @@ -33,6 +33,8 @@ #include #include +#include + #include #include diff --git a/multires_image/src/tile.cpp b/multires_image/src/tile.cpp index ac736996..a0c3c4f5 100644 --- a/multires_image/src/tile.cpp +++ b/multires_image/src/tile.cpp @@ -36,6 +36,7 @@ #include // QT libraries +#include #include #include diff --git a/multires_image/src/tile_view.cpp b/multires_image/src/tile_view.cpp index d566961b..7a5110bf 100644 --- a/multires_image/src/tile_view.cpp +++ b/multires_image/src/tile_view.cpp @@ -29,6 +29,8 @@ #include +#include + // C++ standard libraries #include #include diff --git a/tile_map/include/tile_map/tile_map_view.h b/tile_map/include/tile_map/tile_map_view.h index bb23cad9..9fa16a4e 100644 --- a/tile_map/include/tile_map/tile_map_view.h +++ b/tile_map/include/tile_map/tile_map_view.h @@ -39,6 +39,8 @@ #include +#include + namespace tile_map { class TileSource; @@ -58,7 +60,7 @@ namespace tile_map std::vector points_t; }; - class TileMapView + class TileMapView: protected QGLFunctions { public: TileMapView(); diff --git a/tile_map/src/tile_map_view.cpp b/tile_map/src/tile_map_view.cpp index 47edaeec..0ea85741 100644 --- a/tile_map/src/tile_map_view.cpp +++ b/tile_map/src/tile_map_view.cpp @@ -33,10 +33,7 @@ #include -//#include -//#include -//#include -#include +#include #include From ff4582ac7fe17c5b5525aa0056b7e25f026cbb27 Mon Sep 17 00:00:00 2001 From: Matt Bries Date: Fri, 24 Jan 2020 17:28:01 -0600 Subject: [PATCH 08/11] Remove commented out lines --- mapviz/src/map_canvas.cpp | 5 ----- mapviz_plugins/src/occupancy_grid_plugin.cpp | 2 -- mapviz_plugins/src/pointcloud2_plugin.cpp | 1 - tile_map/src/texture_cache.cpp | 4 ---- 4 files changed, 12 deletions(-) diff --git a/mapviz/src/map_canvas.cpp b/mapviz/src/map_canvas.cpp index 1a4c0518..f738b1c1 100644 --- a/mapviz/src/map_canvas.cpp +++ b/mapviz/src/map_canvas.cpp @@ -27,11 +27,6 @@ // // ***************************************************************************** - -//#include -//#include -//#include - #include // C++ standard libraries diff --git a/mapviz_plugins/src/occupancy_grid_plugin.cpp b/mapviz_plugins/src/occupancy_grid_plugin.cpp index 033dd198..e7f42aef 100644 --- a/mapviz_plugins/src/occupancy_grid_plugin.cpp +++ b/mapviz_plugins/src/occupancy_grid_plugin.cpp @@ -27,8 +27,6 @@ // // ***************************************************************************** -//#include - #include #include diff --git a/mapviz_plugins/src/pointcloud2_plugin.cpp b/mapviz_plugins/src/pointcloud2_plugin.cpp index 4a8d201d..3ef7caf7 100644 --- a/mapviz_plugins/src/pointcloud2_plugin.cpp +++ b/mapviz_plugins/src/pointcloud2_plugin.cpp @@ -27,7 +27,6 @@ // // ***************************************************************************** -//#include #include // C++ standard libraries diff --git a/tile_map/src/texture_cache.cpp b/tile_map/src/texture_cache.cpp index 48325407..81526251 100644 --- a/tile_map/src/texture_cache.cpp +++ b/tile_map/src/texture_cache.cpp @@ -33,10 +33,6 @@ #include -//#include -//#include -//#include - #include #include From 083fee472b635b0098dc7fa55634ed06938d83c8 Mon Sep 17 00:00:00 2001 From: Matt Bries Date: Fri, 24 Jan 2020 17:34:22 -0600 Subject: [PATCH 09/11] Resolve remaining issues --- mapviz/src/map_canvas.cpp | 59 ++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 25 deletions(-) diff --git a/mapviz/src/map_canvas.cpp b/mapviz/src/map_canvas.cpp index f738b1c1..7c6094d8 100644 --- a/mapviz/src/map_canvas.cpp +++ b/mapviz/src/map_canvas.cpp @@ -33,6 +33,12 @@ #include #include +#ifndef __aarch64__ +#include +#include +#include +#endif + namespace mapviz { @@ -89,10 +95,12 @@ MapCanvas::MapCanvas(QWidget* parent) : MapCanvas::~MapCanvas() { +#ifndef __aarch64__ if(pixel_buffer_size_ != 0) { - glDeleteBuffers(2, pixel_buffer_ids_); + glDeleteBuffersARB(2, pixel_buffer_ids_); } +#endif } void MapCanvas::InitializeTf(boost::shared_ptr tf) @@ -100,12 +108,9 @@ void MapCanvas::InitializeTf(boost::shared_ptr tf) tf_ = tf; } -void* (*glMapBuffer)(GLenum target, GLenum buffer); - -void (*glUnmapBuffer)(GLenum target); - void MapCanvas::InitializePixelBuffers() { +#ifndef __aarch64__ if(has_pixel_buffers_) { int32_t buffer_size = width() * height() * 4; @@ -114,37 +119,39 @@ void MapCanvas::InitializePixelBuffers() { if (pixel_buffer_size_ != 0) { - glDeleteBuffers(2, pixel_buffer_ids_); + glDeleteBuffersARB(2, pixel_buffer_ids_); } - glGenBuffers(2, pixel_buffer_ids_); - glBindBuffer(GL_PIXEL_PACK_BUFFER, pixel_buffer_ids_[0]); - glBufferData(GL_PIXEL_PACK_BUFFER, buffer_size, 0, GL_STREAM_READ); - glBindBuffer(GL_PIXEL_PACK_BUFFER, pixel_buffer_ids_[1]); - glBufferData(GL_PIXEL_PACK_BUFFER, buffer_size, 0, GL_STREAM_READ); - glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); + glGenBuffersARB(2, pixel_buffer_ids_); + glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pixel_buffer_ids_[0]); + glBufferDataARB(GL_PIXEL_PACK_BUFFER_ARB, buffer_size, 0, GL_STREAM_READ_ARB); + glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pixel_buffer_ids_[1]); + glBufferDataARB(GL_PIXEL_PACK_BUFFER_ARB, buffer_size, 0, GL_STREAM_READ_ARB); + glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0); pixel_buffer_size_ = buffer_size; } } +#endif } void MapCanvas::initializeGL() { - //GLenum err = glewInit(); - if (false)//GLEW_OK != err) +#ifndef __aarch64__ + GLenum err = glewInit(); + if (GLEW_OK != err) { - //ROS_ERROR("Error: %s\n", glewGetErrorString(err)); + ROS_ERROR("Error: %s\n", glewGetErrorString(err)); } else { // Check if pixel buffers are available for asynchronous capturing std::string extensions = (const char*)glGetString(GL_EXTENSIONS); - has_pixel_buffers_ = false;//extensions.find("GL_ARB_pixel_buffer_object") != std::string::npos; - - // now load the extension... - //glMapBuffer = glXGetProcAddress("glMapBuffer"); + has_pixel_buffers_ = extensions.find("GL_ARB_pixel_buffer_object") != std::string::npos; } +#else + has_pixel_buffers_ = false; +#endif glClearColor(0.58f, 0.56f, 0.5f, 1); if (enable_antialiasing_) @@ -187,6 +194,7 @@ void MapCanvas::CaptureFrame(bool force) // Ensure the pixel size is actually 4 glPixelStorei(GL_PACK_ALIGNMENT, 4); +#ifndef __aarch64__ if (has_pixel_buffers_ && !force) { InitializePixelBuffers(); @@ -194,21 +202,22 @@ void MapCanvas::CaptureFrame(bool force) pixel_buffer_index_ = (pixel_buffer_index_ + 1) % 2; int32_t next_index = (pixel_buffer_index_ + 1) % 2; - glBindBuffer(GL_PIXEL_PACK_BUFFER, pixel_buffer_ids_[pixel_buffer_index_]); - glReadPixels(0, 0, width(), height(), GL_BGRA, GL_UNSIGNED_BYTE, 0); - glBindBuffer(GL_PIXEL_PACK_BUFFER, pixel_buffer_ids_[next_index]); - GLubyte* data = reinterpret_cast(glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY)); + glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pixel_buffer_ids_[pixel_buffer_index_]); + glReadPixelsARB(0, 0, width(), height(), GL_BGRA, GL_UNSIGNED_BYTE, 0); + glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pixel_buffer_ids_[next_index]); + GLubyte* data = reinterpret_cast(glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY_ARB)); if(data) { capture_buffer_.resize(pixel_buffer_size_); memcpy(&capture_buffer_[0], data, pixel_buffer_size_); - glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + glUnmapBufferARB(GL_PIXEL_PACK_BUFFER_ARB); } - glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); + glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0); } else +#endif { int32_t buffer_size = width() * height() * 4; capture_buffer_.clear(); From b990af2a91cfcadb1536c0b46c49751fae02dd88 Mon Sep 17 00:00:00 2001 From: Matt Bries Date: Fri, 24 Jan 2020 17:36:20 -0600 Subject: [PATCH 10/11] Again --- mapviz/src/map_canvas.cpp | 2 +- tile_map/src/texture_cache.cpp | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/mapviz/src/map_canvas.cpp b/mapviz/src/map_canvas.cpp index 7c6094d8..dd915d36 100644 --- a/mapviz/src/map_canvas.cpp +++ b/mapviz/src/map_canvas.cpp @@ -203,7 +203,7 @@ void MapCanvas::CaptureFrame(bool force) int32_t next_index = (pixel_buffer_index_ + 1) % 2; glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pixel_buffer_ids_[pixel_buffer_index_]); - glReadPixelsARB(0, 0, width(), height(), GL_BGRA, GL_UNSIGNED_BYTE, 0); + glReadPixels(0, 0, width(), height(), GL_BGRA, GL_UNSIGNED_BYTE, 0); glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pixel_buffer_ids_[next_index]); GLubyte* data = reinterpret_cast(glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY_ARB)); if(data) diff --git a/tile_map/src/texture_cache.cpp b/tile_map/src/texture_cache.cpp index 81526251..8abd777b 100644 --- a/tile_map/src/texture_cache.cpp +++ b/tile_map/src/texture_cache.cpp @@ -106,8 +106,7 @@ namespace tile_map ROS_ERROR("FAILED TO CREATE TEXTURE"); GLenum err = glGetError(); - //const GLubyte *errString = gluErrorString(err); - ROS_ERROR("GL ERROR(%u): %s", err, "unknown"); + ROS_ERROR("GL ERROR(%u)", err); return texture; } From 5ac660472c80b1f7364b0083d38339a4aae4b3b4 Mon Sep 17 00:00:00 2001 From: Matthew Bries Date: Mon, 27 Jan 2020 09:29:09 -0600 Subject: [PATCH 11/11] Fix AMD64 build --- mapviz/include/mapviz/map_canvas.h | 6 +++++- mapviz/src/map_canvas.cpp | 12 ++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/mapviz/include/mapviz/map_canvas.h b/mapviz/include/mapviz/map_canvas.h index 9b90b502..c0d5d425 100644 --- a/mapviz/include/mapviz/map_canvas.h +++ b/mapviz/include/mapviz/map_canvas.h @@ -40,7 +40,6 @@ // QT libraries #include -#include #include #include #include @@ -54,12 +53,17 @@ #include #ifdef __aarch64__ +#include #include #endif namespace mapviz { +#ifdef __aarch64__ class MapCanvas : public QGLWidget, protected QGLFunctions +#else + class MapCanvas : public QGLWidget +#endif { Q_OBJECT diff --git a/mapviz/src/map_canvas.cpp b/mapviz/src/map_canvas.cpp index dd915d36..ef9964f7 100644 --- a/mapviz/src/map_canvas.cpp +++ b/mapviz/src/map_canvas.cpp @@ -27,18 +27,18 @@ // // ***************************************************************************** -#include - -// C++ standard libraries -#include -#include - #ifndef __aarch64__ #include #include #include #endif +#include + +// C++ standard libraries +#include +#include + namespace mapviz {