为什么 osgEarth 不使用 Qt 构建?
Why is osgEarth not building with Qt?
我正在尝试使用 Quarts 构建 osgEarth。官网说明如下:
Point the QT_QMAKE_EXECUTABLE CMake variable to the qmake.exe you want
to use and CMake will populate all the other QT variables.
很好。我执行以下操作:
cmake -D QT_QMAKE_EXECUTABLE=/Users/garbart/Qt/5.10.0/clang_64/bin/qmake CMakeLists.txt
make
并得到以下错误:
[ 19%] Built target osgEarth
[ 25%] Built target osgEarthSymbology
[ 32%] Built target osgEarthFeatures
[ 35%] Built target osgEarthAnnotation
[ 44%] Built target osgEarthUtil
[ 44%] Building CXX object src/osgEarthQt/CMakeFiles/osgEarthQt5.dir/ViewerWidget.cpp.o
In file included from /Users/garbart/Desktop/osgearth-master/src/osgEarthQt/ViewerWidget.cpp:31:
In file included from /Users/garbart/Qt/5.10.0/clang_64/lib/QtGui.framework/Headers/QtGui:45:
In file included from /Users/garbart/Qt/5.10.0/clang_64/lib/QtGui.framework/Headers/qopenglcontext.h:61:
/Users/garbart/Qt/5.10.0/clang_64/lib/QtGui.framework/Headers/qopenglversionfunctions.h:1089:23: error:
unknown type name 'GLDEBUGPROC'
QT_OPENGL_DECLARE(QT_OPENGL_4_3_FUNCTIONS);
^
In file included from /Users/garbart/Desktop/osgearth-master/src/osgEarthQt/ViewerWidget.cpp:31:
In file included from /Users/garbart/Qt/5.10.0/clang_64/lib/QtGui.framework/Headers/QtGui:47:
/Users/garbart/Qt/5.10.0/clang_64/lib/QtGui.framework/Headers/qopenglextrafunctions.h:472:33: error:
unknown type name 'GLDEBUGPROC'
void glDebugMessageCallback(GLDEBUGPROC callback, const void *userParam);
^
/Users/garbart/Qt/5.10.0/clang_64/lib/QtGui.framework/Headers/qopenglextrafunctions.h:758:23: error:
unknown type name 'GLDEBUGPROC'
QT_OPENGL_DECLARE(QT_OPENGL_EXTRA_FUNCTIONS)
^
/Users/garbart/Qt/5.10.0/clang_64/lib/QtGui.framework/Headers/qopenglextrafunctions.h:2213:59: error:
unknown type name 'GLDEBUGPROC'
inline void QOpenGLExtraFunctions::glDebugMessageCallback(GLDEBUGPROC ca...
^
4 errors generated.
make[2]: *** [src/osgEarthQt/CMakeFiles/osgEarthQt5.dir/ViewerWidget.cpp.o] Error 1
make[1]: *** [src/osgEarthQt/CMakeFiles/osgEarthQt5.dir/all] Error 2
make: *** [all] Error 2
QT 5.10.0
osgEarth 2.10
- 首先安装Qt。
- 安装最新的openscengraph并确保其正常工作。
- 然后安装最新的osgEarth。
请按顺序正确执行。
这就是我构建 OSG、osgQt 和 osgEarth 的方式。
获取OSG,配置并构建:
git clone --branch OpenSceneGraph-3.6.2 https://github.com/openscenegraph/OpenSceneGraph.git
mkdir osg-build
cd osg-build
cmake ../OpenSceneGraph
make
sudo make install
获取osgQt,配置并构建:
git clone https://github.com/openscenegraph/osgQt.git
mkdir osgqt-build
cd osgqt-build
cmake ../osgQt -DCMAKE_PREFIX_PATH=/opt/Qt/5.6.3/gcc_64/lib/cmake
make
sudo make install
这最后一步可能无法构建,因为 osgQt 没有跟上 OSG 的步伐。
您需要编辑 CMakeLists.txt
并设置用于查找 Qt 和 OSG 的目录路径。 CMakeLists.txt
还硬引用了特定版本的 OSG,这将需要修改。关于这些问题的列表已经进行了相当多的讨论,因此在您阅读本文时可能已经对这些问题进行了排序。
git clone https://github.com/gwaldron/osgearth.git
mkdir osgearth-build
cd osgearth-build
cmake ../osgearth -DCMAKE_PREFIX_PATH=/opt/Qt/5.6.3/gcc_64/lib/cmake
使用具有以下设置的 ccmake .
配置构建:
OSGEARTH_QT_BUILD ON
OSGEARTH_QT_BUILD_LEGACY_WIDGE ON
构建并安装:
make
sudo make install
注意:Qt 5.11 应该也可以。
2020 年 6 月 2 日更新
osgQt 存储库自从我原来的 post 以来发生了很大变化。
这意味着 osgEarth 2.10 Qt 将不会使用 osgQt 构建。您可能需要使用 Qt4 标签。
较新版本的 osgEarth 不再支持任何 Qt。
用于将 OSG/osgEarth 与 Qt 集成的方法充其量只是一种妥协。
我建议创建一个单独的 OpenGL 上下文,OSG/osgEarth 用于渲染到屏幕外缓冲区(两个需要一个用于绘制,而另一个正在显示)。然后,Qt3D 使用不同的 OpenGL 上下文显示屏幕外缓冲区。
这是一种更明智的方法,因为这将允许 OSG/osgEarth 使用多个线程。
目前 Qt 和 OSG/osgEarth 正在共享 OpenGL 上下文。
起点如下post[https://embeddeddevelop.blogspot.com/2017/06/integrating-opengl-and-qtpainter.html](免责声明我的博客)。
我正在尝试使用 Quarts 构建 osgEarth。官网说明如下:
Point the QT_QMAKE_EXECUTABLE CMake variable to the qmake.exe you want to use and CMake will populate all the other QT variables.
很好。我执行以下操作:
cmake -D QT_QMAKE_EXECUTABLE=/Users/garbart/Qt/5.10.0/clang_64/bin/qmake CMakeLists.txt
make
并得到以下错误:
[ 19%] Built target osgEarth
[ 25%] Built target osgEarthSymbology
[ 32%] Built target osgEarthFeatures
[ 35%] Built target osgEarthAnnotation
[ 44%] Built target osgEarthUtil
[ 44%] Building CXX object src/osgEarthQt/CMakeFiles/osgEarthQt5.dir/ViewerWidget.cpp.o
In file included from /Users/garbart/Desktop/osgearth-master/src/osgEarthQt/ViewerWidget.cpp:31:
In file included from /Users/garbart/Qt/5.10.0/clang_64/lib/QtGui.framework/Headers/QtGui:45:
In file included from /Users/garbart/Qt/5.10.0/clang_64/lib/QtGui.framework/Headers/qopenglcontext.h:61:
/Users/garbart/Qt/5.10.0/clang_64/lib/QtGui.framework/Headers/qopenglversionfunctions.h:1089:23: error:
unknown type name 'GLDEBUGPROC'
QT_OPENGL_DECLARE(QT_OPENGL_4_3_FUNCTIONS);
^
In file included from /Users/garbart/Desktop/osgearth-master/src/osgEarthQt/ViewerWidget.cpp:31:
In file included from /Users/garbart/Qt/5.10.0/clang_64/lib/QtGui.framework/Headers/QtGui:47:
/Users/garbart/Qt/5.10.0/clang_64/lib/QtGui.framework/Headers/qopenglextrafunctions.h:472:33: error:
unknown type name 'GLDEBUGPROC'
void glDebugMessageCallback(GLDEBUGPROC callback, const void *userParam);
^
/Users/garbart/Qt/5.10.0/clang_64/lib/QtGui.framework/Headers/qopenglextrafunctions.h:758:23: error:
unknown type name 'GLDEBUGPROC'
QT_OPENGL_DECLARE(QT_OPENGL_EXTRA_FUNCTIONS)
^
/Users/garbart/Qt/5.10.0/clang_64/lib/QtGui.framework/Headers/qopenglextrafunctions.h:2213:59: error:
unknown type name 'GLDEBUGPROC'
inline void QOpenGLExtraFunctions::glDebugMessageCallback(GLDEBUGPROC ca...
^
4 errors generated.
make[2]: *** [src/osgEarthQt/CMakeFiles/osgEarthQt5.dir/ViewerWidget.cpp.o] Error 1
make[1]: *** [src/osgEarthQt/CMakeFiles/osgEarthQt5.dir/all] Error 2
make: *** [all] Error 2
QT 5.10.0 osgEarth 2.10
- 首先安装Qt。
- 安装最新的openscengraph并确保其正常工作。
- 然后安装最新的osgEarth。
请按顺序正确执行。
这就是我构建 OSG、osgQt 和 osgEarth 的方式。
获取OSG,配置并构建:
git clone --branch OpenSceneGraph-3.6.2 https://github.com/openscenegraph/OpenSceneGraph.git
mkdir osg-build
cd osg-build
cmake ../OpenSceneGraph
make
sudo make install
获取osgQt,配置并构建:
git clone https://github.com/openscenegraph/osgQt.git
mkdir osgqt-build
cd osgqt-build
cmake ../osgQt -DCMAKE_PREFIX_PATH=/opt/Qt/5.6.3/gcc_64/lib/cmake
make
sudo make install
这最后一步可能无法构建,因为 osgQt 没有跟上 OSG 的步伐。
您需要编辑 CMakeLists.txt
并设置用于查找 Qt 和 OSG 的目录路径。 CMakeLists.txt
还硬引用了特定版本的 OSG,这将需要修改。关于这些问题的列表已经进行了相当多的讨论,因此在您阅读本文时可能已经对这些问题进行了排序。
git clone https://github.com/gwaldron/osgearth.git
mkdir osgearth-build
cd osgearth-build
cmake ../osgearth -DCMAKE_PREFIX_PATH=/opt/Qt/5.6.3/gcc_64/lib/cmake
使用具有以下设置的 ccmake .
配置构建:
OSGEARTH_QT_BUILD ON
OSGEARTH_QT_BUILD_LEGACY_WIDGE ON
构建并安装:
make
sudo make install
注意:Qt 5.11 应该也可以。
2020 年 6 月 2 日更新
osgQt 存储库自从我原来的 post 以来发生了很大变化。
这意味着 osgEarth 2.10 Qt 将不会使用 osgQt 构建。您可能需要使用 Qt4 标签。
较新版本的 osgEarth 不再支持任何 Qt。
用于将 OSG/osgEarth 与 Qt 集成的方法充其量只是一种妥协。
我建议创建一个单独的 OpenGL 上下文,OSG/osgEarth 用于渲染到屏幕外缓冲区(两个需要一个用于绘制,而另一个正在显示)。然后,Qt3D 使用不同的 OpenGL 上下文显示屏幕外缓冲区。
这是一种更明智的方法,因为这将允许 OSG/osgEarth 使用多个线程。
目前 Qt 和 OSG/osgEarth 正在共享 OpenGL 上下文。
起点如下post[https://embeddeddevelop.blogspot.com/2017/06/integrating-opengl-and-qtpainter.html](免责声明我的博客)。