Qt 5.5 和 OpenGL:检索设备信息

Posted

技术标签:

【中文标题】Qt 5.5 和 OpenGL:检索设备信息【英文标题】:Qt 5.5 and OpenGL: Retrieving device info 【发布时间】:2015-09-03 23:06:09 【问题描述】:

我编写了一个 Qt 5.5 应用程序,它以 QOpenGLWidget 的形式使用 OpenGL。现在我想要它,以便用户可以从应用程序中查看他们的设备信息。我的意思是这样的:

卡的名称,例如“GT 640” 供应商 GPU 总内存 驱动版本 扩展列表

到目前为止,我自己一直找不到任何相关的功能。虽然我知道这可以通过调用 OpenGL 来完成,但我更愿意将所有代码保持在相对较高的级别。我发现this 2004 年的非常旧的帖子指出 Qt 没有此功能,但也许时代已经改变?

【问题讨论】:

Total GPU Memory 和 Driver Version 很粗略,但其他三件事很容易得到。我已经围绕 AMD、NV 和 Intel 的专有 API 完成了我的工作,以获得提到的前两件事,您可能必须自己做。 【参考方案1】:

卡名:没有跨平台获取方式。它可能作为glGetString(GL_RENDERER) 的一部分返回,例如在 NVIDIA 上我得到

GeForce GTX 980 PCIe/SSE2

供应商:glGetString(GL_VENDOR)

英伟达公司

总 GPU 内存:绝对不能跨平台。 NVIDIA 使用GL_NVX_gpu_memory_info,AMD/ATI 使用AMD_gpu_association(取决于平台)或GL_ATI_meminfo。请注意,知道 VRAM 的数量几乎是没有用的,您将尝试创建的任何特定对象都有几个子限制(最大 VBO 大小、最大纹理大小、纹理级别大小、渲染缓冲区大小......)。

李>

驱动程序版本:绝对不是跨平台的,可能包含在 glGetString(GL_VERSION) 的一部分中(最后允许特定于供应商的信息),否则您将需要再次使用平台-具体:

4.5.0 英伟达 346.87

扩展列表:使用 Qt、QOpenGLContext::extensions()hasExtension(),以及解析的函数指针助手(getProcAddress()QOpenGLFunctionsQOpenGLVersionFunctions 等)。任何其他 GL 解析器(例如 GLEW)都有等效的方法。而且您想要使用解析器,而不是再次使用特定平台...

【讨论】:

我已经在我的 PC Ubuntu18.04、Qt5.13 上试过了。以上几行的输出如:0x6ffffd2c31bc0 等。它们看起来像是显卡的地址。你能详细解释一下这些线条吗?

以上是关于Qt 5.5 和 OpenGL:检索设备信息的主要内容,如果未能解决你的问题,请参考以下文章

Qt 5.5 QOpenGLWidget链接错误未链接任何openGL调用

OpenGL学习之路——安装

Qt 使用自带的OpenGL模块开发程序

QT5提示can not find -lGL的解决方法

qt编译OpenGL

Opengl glclipdistance vs glclipplane