首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt 6 OpenGL中的角度问题

Qt 6 OpenGL中的角度问题
EN

Stack Overflow用户
提问于 2022-01-20 01:37:19
回答 1查看 804关注 0票数 1

Qt 6已经删除了支持。 for 夹角作为他们的OpenGL后端。现在,我仍然希望在Qt中使用and,因为我希望运行自定义的OpenGL代码,这些代码在Windows上被转换成Vulkan和Direct3D。我尝试在我的Qt 6应用程序中使用角度,但没有成功。我试过的是:

根据指令(角度生成指令) )从源文件构建角度(在Linux上)。

将生成的libGLESv2.so和libEGL.so文件复制到应用程序目录中。然后,在我的CMakeFiles.txt中,我添加了:

代码语言:javascript
复制
find_library(libGLESv2 GLESv2)
find_library(libEGL EGL)
target_link_libraries(MyApp PRIVATE ${libGLESv2} ${libEGL})

然后在我的主文件中添加了

代码语言:javascript
复制
QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);
QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL);

我的项目链接和构建良好,但角度后端似乎没有任何影响。看来,Qt仍然在使用标准的OpenGL实现,而不是ANGLE提供的实现(在设置上下文时,运行QOpenGLContext::currentContext()->hasExtension("EGL_ANGLE_platform_angle")返回false )。

使用QT_LOGGING_RULES=qt.qpa.gl=true,日志显示:

qt.qpa.gl:基于以下优先级("xcb_glx“、"xcb_egl")选择Xcb gl-- qt.qpa.gl: Xcb GLX gl--集成创建了qt.qpa.gl: xcb GLX gl--集成成功初始化了qt.qpa.gl:在FBConfig/可视化选择之前被请求的格式: QSurfaceFormat(version 3.0,options QFlagsQSurfaceFormat::FormatOption(),depthBufferSize 24,redBufferSize 8,greenBufferSize 8,blueBufferSize 8,alphaBufferSize -1,stencilBufferSize 8,samples 1,swapBehavior QSurfaceFormat::DoubleBuffer,swapInterval 1,colorSpace QSurfaceFormat::DefaultColorSpace,profile QSurfaceFormat::NoProfile)

如何正确设置Qt以依赖角度?

EN

回答 1

Stack Overflow用户

发布于 2022-01-29 09:29:39

好吧,

当我要求一个可构建的项目来重现这个问题时,我并不是指没有导致问题的CMakeLists.txt的源代码片段。我花了4个小时试图复制你的环境盲。没有人使用Qt 6,因为它很可怕。

第一个问题是你不能“复制”libs。GLES libs

EGL库

后抄

构建和运行时系统需要它的一系列链接。当您复制时,因为您获得了多个相同文件的副本,而不是一个带有一串链接的副本,所以丢失了该副本。如果要使用这些库,则需要从安装的位置或原始构建位置使用它们。

我想向你证明这个解决方案,而不是直接告诉你,但我遇到了同样的问题,98.5%的开发人员在安装靠近Qt的Android时会遇到同样的问题。

我想让您看看用于CMakeLists.txt的WaylandGUI文件,并不是因为它是一个精彩的示例,而是因为您了解了如何使用message()来转储cmake变量。这是排除cmake问题时的“默认调试器”。

您没有正确地使用find_library()

library.html

如果您安装了您构建的角度库,find_library就有50/50的可能会找到它。您需要转储cmake变量来查看它的位置和找到了什么,并且需要message()。

特别是阅读CMAKE_PREFIX_PATH和find_library()的PATHS选项。如果文档看起来像mud一样清晰,那么您就可以在CMAKE_PREFIX_PATH上讨论这个问题了。

图书馆-自定义图书馆位置

您需要知道的另一个命令是ldd。真正令人震惊的是,有多少人在Linux上开发时不知道这个命令。

从较高的概念级别来看,ldd所做的是告诉您加载程序在运行可执行文件时将使用的每个库,至少从初始加载的角度来看是这样。可执行文件本身可以强制在运行时加载其他库。当可执行文件在启动前死亡时,可以使用ldd跟踪无法找到的库(或库使用的库)。

在您的特殊情况下,ldd将告诉您在链接期间使用了哪些GLES和EGL库。默认情况下,find_library()首先查找“常见位置”,这不是本地构建目录。您遇到的问题是您试图替换链接中现有的系统库。下面是关于如何在find_library()中使用提示等方面的find_library()。

如果不能复制您的构建环境,并且没有一个完整的可构建的示例来复制这个问题,我将无法提供进一步的帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70779840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档