]> git.pld-linux.org Git - packages/pcl.git/commitdiff
- more vtkOpenGL2 fixes
authorJan Rękorajski <baggins@pld-linux.org>
Thu, 26 Jan 2017 19:52:35 +0000 (20:52 +0100)
committerJan Rękorajski <baggins@pld-linux.org>
Thu, 26 Jan 2017 19:52:35 +0000 (20:52 +0100)
vtkOpenGL2.patch

index 21a2ead06c19481e91ed63643016212c06cde910..169d23eee0408fac5f05fe350cc38fc5a65c8729 100644 (file)
@@ -1,3 +1,58 @@
+From d0efc67fa0d5f3fb3fb99990a6b2a1967a93c229 Mon Sep 17 00:00:00 2001
+From: Sergey Alexandrov <alexandrov88@gmail.com>
+Date: Sat, 13 Feb 2016 13:31:54 +0100
+Subject: [PATCH] Add CMake variable and C++ macro
+ VTK_RENDERING_BACKEND_OPENGL_VERSION
+
+These can be used at configuration and compilation times to adjust for
+the currently used backend.
+---
+ CMakeLists.txt  | 12 +++++++++++-
+ pcl_config.h.in |  4 ++++
+ 2 files changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 36fc4c9..e5fd763 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -361,7 +361,12 @@ option(WITH_VTK "Build VTK-Visualizations" TRUE)
+ if(WITH_VTK AND NOT ANDROID)
+   find_package(VTK)
+   if(VTK_FOUND)
+-    message(STATUS "VTK_MAJOR_VERSION ${VTK_MAJOR_VERSION}")
++    if(NOT DEFINED VTK_RENDERING_BACKEND)
++      # On old VTK versions this variable does not exist. In this case it is
++      # safe to assume OpenGL backend
++      set(VTK_RENDERING_BACKEND "OpenGL")
++    endif()
++    message(STATUS "VTK_MAJOR_VERSION ${VTK_MAJOR_VERSION}, rendering backend: ${VTK_RENDERING_BACKEND}")
+     if (PCL_SHARED_LIBS OR
+         (NOT (PCL_SHARED_LIBS) AND NOT (VTK_BUILD_SHARED_LIBS)))
+       set(VTK_FOUND TRUE)
+@@ -377,6 +382,11 @@ if(WITH_VTK AND NOT ANDROID)
+           option (VTK_USE_COCOA "Use Cocoa for VTK render windows" ON)
+           MARK_AS_ADVANCED (VTK_USE_COCOA)
+       endif (APPLE)
++      if(${VTK_RENDERING_BACKEND} STREQUAL "OpenGL")
++        set(VTK_RENDERING_BACKEND_OPENGL_VERSION "1")
++      elseif(${VTK_RENDERING_BACKEND} STREQUAL "OpenGL2")
++        set(VTK_RENDERING_BACKEND_OPENGL_VERSION "2")
++      endif()
+       set(HAVE_VTK ON)
+     else ()
+       set(VTK_FOUND OFF)
+diff --git a/pcl_config.h.in b/pcl_config.h.in
+index e4b10b0..3c25a06 100644
+--- a/pcl_config.h.in
++++ b/pcl_config.h.in
+@@ -71,3 +71,7 @@
+ /* Address the cases where on MacOS and OpenGL and GLUT are not frameworks */
+ #cmakedefine OPENGL_IS_A_FRAMEWORK
+ #cmakedefine GLUT_IS_A_FRAMEWORK
++
++/* Version of OpenGL used by VTK as rendering backend */
++#define VTK_RENDERING_BACKEND_OPENGL_VERSION ${VTK_RENDERING_BACKEND_OPENGL_VERSION}
++
 From 9cfb00970f7d46f1732149d4c50ba3646f038b6c Mon Sep 17 00:00:00 2001
 From: Sergey Alexandrov <alexandrov88@gmail.com>
 Date: Thu, 11 Feb 2016 22:19:01 +0100
@@ -63,3 +118,226 @@ index dc91674..007c251 100644
        PCL_WARN ("[PCLVisualizer::addTextureMesh] Your GPU doesn't support multi texturing. "
                  "Will use first one only!\n");
  
+From c50c65b042828cfa18765eef7876f896a40a6d1b Mon Sep 17 00:00:00 2001
+From: Sergey Alexandrov <alexandrov88@gmail.com>
+Date: Sat, 13 Feb 2016 13:59:47 +0100
+Subject: [PATCH] Conditionally compile code that uses
+ vtkVertexBufferObjectMapper
+
+This mapper is a performance optimization that is only needed when
+OpenGL backend is used. The modern OpenGL2 backend uses vertex buffer
+objects transparently for us.
+---
+ outofcore/src/visualization/outofcore_cloud.cpp | 14 ++++++++++++--
+ visualization/CMakeLists.txt                    | 18 ++++++++++++++----
+ visualization/src/interactor_style.cpp          |  6 ++++++
+ visualization/src/pcl_visualizer.cpp            | 15 ++++++++++++++-
+ 4 files changed, 46 insertions(+), 7 deletions(-)
+
+diff --git a/outofcore/src/visualization/outofcore_cloud.cpp b/outofcore/src/visualization/outofcore_cloud.cpp
+index eaf490c..b08d30e 100644
+--- a/outofcore/src/visualization/outofcore_cloud.cpp
++++ b/outofcore/src/visualization/outofcore_cloud.cpp
+@@ -21,7 +21,10 @@
+ // PCL - visualziation
+ #include <pcl/visualization/common/common.h>
++
++#if VTK_RENDERING_BACKEND_OPENGL_VERSION < 2
+ #include <pcl/visualization/vtk/vtkVertexBufferObjectMapper.h>
++#endif
+ // VTK
+ #include <vtkVersion.h>
+@@ -251,11 +254,18 @@ OutofcoreCloud::render (vtkRenderer* renderer)
+         {
+           vtkSmartPointer<vtkActor> cloud_actor = vtkSmartPointer<vtkActor>::New ();
+-          vtkSmartPointer<vtkVertexBufferObjectMapper> mapper = vtkSmartPointer<vtkVertexBufferObjectMapper>::New ();
+-
+           CloudDataCacheItem *cloud_data_cache_item = &cloud_data_cache.get(pcd_file);
++#if VTK_RENDERING_BACKEND_OPENGL_VERSION < 2
++          vtkSmartPointer<vtkVertexBufferObjectMapper> mapper = vtkSmartPointer<vtkVertexBufferObjectMapper>::New ();
+           mapper->SetInput (cloud_data_cache_item->item);
++#else
++          vtkSmartPointer<vtkDataSetMapper> mapper = vtkSmartPointer<vtkDataSetMapper>::New ();
++          // Usually we choose between SetInput and SetInputData based on VTK version. But OpenGL ≥ 2 automatically
++          // means VTK version is ≥ 6.3
++          mapper->SetInputData (cloud_data_cache_item->item);
++#endif
++
+           cloud_actor->SetMapper (mapper);
+           cloud_actor->GetProperty ()->SetColor (0.0, 0.0, 1.0);
+           cloud_actor->GetProperty ()->SetPointSize (1);
+diff --git a/visualization/CMakeLists.txt b/visualization/CMakeLists.txt
+index 26bfd7c..940fc8e 100644
+--- a/visualization/CMakeLists.txt
++++ b/visualization/CMakeLists.txt
+@@ -50,8 +50,6 @@ if(build)
+         src/common/float_image_utils.cpp
+         src/vtk/pcl_image_canvas_source_2d.cpp
+         src/vtk/pcl_context_item.cpp
+-        src/vtk/vtkVertexBufferObject.cxx
+-        src/vtk/vtkVertexBufferObjectMapper.cxx
+         src/vtk/vtkRenderWindowInteractorFix.cpp
+         )
+     if("${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" VERSION_LESS "5.6")
+@@ -67,6 +65,13 @@ if(build)
+             )
+     endif("${VTK_MAJOR_VERSION}.${VTK_MINOR_VERSION}" VERSION_GREATER "5.6")
++    if(VTK_RENDERING_BACKEND_OPENGL_VERSION VERSION_LESS 2)
++      list(APPEND srcs
++        "src/vtk/vtkVertexBufferObject.cxx"
++        "src/vtk/vtkVertexBufferObjectMapper.cxx"
++      )
++    endif()
++
+     set(incs 
+         "include/pcl/${SUBSYS_NAME}/eigen.h"
+         "include/pcl/${SUBSYS_NAME}/boost.h"
+@@ -127,11 +132,16 @@ if(build)
+     set(vtk_incs 
+         "include/pcl/${SUBSYS_NAME}/vtk/pcl_image_canvas_source_2d.h"
+         "include/pcl/${SUBSYS_NAME}/vtk/pcl_context_item.h"
+-        "include/pcl/${SUBSYS_NAME}/vtk/vtkVertexBufferObject.h"
+         "include/pcl/${SUBSYS_NAME}/vtk/vtkRenderWindowInteractorFix.h"
+-        "include/pcl/${SUBSYS_NAME}/vtk/vtkVertexBufferObjectMapper.h"
+         )
++    if(VTK_RENDERING_BACKEND_OPENGL_VERSION VERSION_LESS 2)
++      list(APPEND vtk_incs
++        "include/pcl/${SUBSYS_NAME}/vtk/vtkVertexBufferObject.h"
++        "include/pcl/${SUBSYS_NAME}/vtk/vtkVertexBufferObjectMapper.h"
++      )
++    endif()
++
+     # on apple, a workaround is used for the cocoa render window interactor
+     if(APPLE)
+       list(APPEND srcs
+diff --git a/visualization/src/interactor_style.cpp b/visualization/src/interactor_style.cpp
+index 9e9fdaf..f443b6b 100644
+--- a/visualization/src/interactor_style.cpp
++++ b/visualization/src/interactor_style.cpp
+@@ -64,7 +64,9 @@
+ #include <vtkPointPicker.h>
+ #include <vtkAreaPicker.h>
++#if VTK_RENDERING_BACKEND_OPENGL_VERSION < 2
+ #include <pcl/visualization/vtk/vtkVertexBufferObjectMapper.h>
++#endif
+ #define ORIENT_MODE 0
+ #define SELECT_MODE 1
+@@ -660,6 +662,7 @@ pcl::visualization::PCLVisualizerInteractorStyle::OnKeyDown ()
+         data->SetPoints (points);
+         data->SetVerts (vertices);
+         // Modify the mapper
++#if VTK_RENDERING_BACKEND_OPENGL_VERSION < 2
+         if (use_vbos_)
+         {
+           vtkVertexBufferObjectMapper* mapper = static_cast<vtkVertexBufferObjectMapper*>(act->actor->GetMapper ());
+@@ -668,6 +671,7 @@ pcl::visualization::PCLVisualizerInteractorStyle::OnKeyDown ()
+           act->actor->SetMapper (mapper);
+         }
+         else
++#endif
+         {
+           vtkPolyDataMapper* mapper = static_cast<vtkPolyDataMapper*>(act->actor->GetMapper ());
+ #if VTK_MAJOR_VERSION < 6
+@@ -704,6 +708,7 @@ pcl::visualization::PCLVisualizerInteractorStyle::OnKeyDown ()
+         vtkPolyData *data = static_cast<vtkPolyData*>(act->actor->GetMapper ()->GetInput ());
+         data->GetPointData ()->SetScalars (scalars);
+         // Modify the mapper
++#if VTK_RENDERING_BACKEND_OPENGL_VERSION < 2
+         if (use_vbos_)
+         {
+           vtkVertexBufferObjectMapper* mapper = static_cast<vtkVertexBufferObjectMapper*>(act->actor->GetMapper ());
+@@ -714,6 +719,7 @@ pcl::visualization::PCLVisualizerInteractorStyle::OnKeyDown ()
+           act->actor->SetMapper (mapper);
+         }
+         else
++#endif
+         {
+           vtkPolyDataMapper* mapper = static_cast<vtkPolyDataMapper*>(act->actor->GetMapper ());
+           mapper->SetScalarRange (minmax);
+diff --git a/visualization/src/pcl_visualizer.cpp b/visualization/src/pcl_visualizer.cpp
+index 007c251..40e516c 100644
+--- a/visualization/src/pcl_visualizer.cpp
++++ b/visualization/src/pcl_visualizer.cpp
+@@ -63,9 +63,12 @@
+ #include <vtkPointPicker.h>
+ #include <pcl/visualization/boost.h>
+-#include <pcl/visualization/vtk/vtkVertexBufferObjectMapper.h>
+ #include <pcl/visualization/vtk/vtkRenderWindowInteractorFix.h>
++#if VTK_RENDERING_BACKEND_OPENGL_VERSION < 2
++#include <pcl/visualization/vtk/vtkVertexBufferObjectMapper.h>
++#endif
++
+ #include <vtkPolyLine.h>
+ #include <vtkPolyDataMapper.h>
+ #include <vtkRenderWindow.h>
+@@ -1079,6 +1082,7 @@ pcl::visualization::PCLVisualizer::createActorFromVTKDataSet (const vtkSmartPoin
+   if (!actor)
+     actor = vtkSmartPointer<vtkLODActor>::New ();
++#if VTK_RENDERING_BACKEND_OPENGL_VERSION < 2
+   if (use_vbos_)
+   {
+     vtkSmartPointer<vtkVertexBufferObjectMapper> mapper = vtkSmartPointer<vtkVertexBufferObjectMapper>::New ();
+@@ -1111,6 +1115,7 @@ pcl::visualization::PCLVisualizer::createActorFromVTKDataSet (const vtkSmartPoin
+     actor->SetMapper (mapper);
+   }
+   else
++#endif
+   {
+     vtkSmartPointer<vtkDataSetMapper> mapper = vtkSmartPointer<vtkDataSetMapper>::New ();
+ #if VTK_MAJOR_VERSION < 6
+@@ -1157,6 +1162,7 @@ pcl::visualization::PCLVisualizer::createActorFromVTKDataSet (const vtkSmartPoin
+   if (!actor)
+     actor = vtkSmartPointer<vtkActor>::New ();
++#if VTK_RENDERING_BACKEND_OPENGL_VERSION < 2
+   if (use_vbos_)
+   {
+     vtkSmartPointer<vtkVertexBufferObjectMapper> mapper = vtkSmartPointer<vtkVertexBufferObjectMapper>::New ();
+@@ -1189,6 +1195,7 @@ pcl::visualization::PCLVisualizer::createActorFromVTKDataSet (const vtkSmartPoin
+     actor->SetMapper (mapper);
+   }
+   else
++#endif
+   {
+     vtkSmartPointer<vtkDataSetMapper> mapper = vtkSmartPointer<vtkDataSetMapper>::New ();
+ #if VTK_MAJOR_VERSION < 6
+@@ -2771,6 +2778,7 @@ pcl::visualization::PCLVisualizer::updateColorHandlerIndex (const std::string &i
+   vtkPolyData *data = static_cast<vtkPolyData*>(am_it->second.actor->GetMapper ()->GetInput ());
+   data->GetPointData ()->SetScalars (scalars);
+   // Modify the mapper
++#if VTK_RENDERING_BACKEND_OPENGL_VERSION < 2
+   if (use_vbos_)
+   {
+     vtkVertexBufferObjectMapper* mapper = static_cast<vtkVertexBufferObjectMapper*>(am_it->second.actor->GetMapper ());
+@@ -2785,6 +2793,7 @@ pcl::visualization::PCLVisualizer::updateColorHandlerIndex (const std::string &i
+     //style_->setCloudActorMap (cloud_actor_map_);
+   }
+   else
++#endif
+   {
+     vtkPolyDataMapper* mapper = static_cast<vtkPolyDataMapper*>(am_it->second.actor->GetMapper ());
+     mapper->SetScalarRange (minmax);
+@@ -4296,8 +4305,12 @@ pcl::visualization::PCLVisualizer::resetStoppedFlag ()
+ void
+ pcl::visualization::PCLVisualizer::setUseVbos (bool use_vbos)
+ {
++#if VTK_RENDERING_BACKEND_OPENGL_VERSION < 2
+   use_vbos_ = use_vbos;
+   style_->setUseVbos (use_vbos_);
++#else
++  PCL_WARN ("[PCLVisualizer::setUseVbos] Has no effect when OpenGL version is ≥ 2\n");
++#endif
+ }
+ //////////////////////////////////////////////////////////////////////////////////////////////
This page took 0.20125 seconds and 4 git commands to generate.