gpt4 book ai didi

c++ - 如何使用 Qt 的 native OpenGL 获取我的总 GPU 内存?

转载 作者:行者123 更新时间:2023-11-28 01:50:18 24 4
gpt4 key购买 nike

我正在尝试使用 native Qt 的 OpenGL 从我的视频卡中获取 GPU 内存总量,我尝试了数百种方法,但没有一种有效。这是我目前拥有的:

  QOpenGLContext context;
context.create();
QOffscreenSurface surface;
surface.setFormat(context.format());
surface.create();
QOpenGLFunctions func;
context.makeCurrent(&surface);
func.initializeOpenGLFunctions();
GLint total_mem_kb = 0;
func.glGetIntegerv(GL_GPU_MEM_INFO_TOTAL_AVAILABLE_MEM_NVX,&total_mem_kb);
qDebug()<<total_mem_kb;

问题是变量total_mem_kb一直是0,它没有得到glGetIntegerv里面的值。通过运行这段代码,我得到 0。可能是什么问题?你能给我一个提示吗?

最佳答案

首先检查 NVX_gpu_memory_info 是否支持扩展。

请注意,该扩展至少需要 OpenGL 2.0。

GLint count;
glGetIntegerv(GL_NUM_EXTENSIONS, &count);

for (GLint i = 0; i < count; ++i)
{
const char *extension = (const char*)glGetStringi(GL_EXTENSIONS, i);
if (!strcmp(extension, "GL_NVX_gpu_memory_info"))
printf("%d: %s\n", i, extension);
}

我知道您刚才说您有 Nvidia 显卡,但这并不能保证默认支持。此外,如果您有集成显卡,请确保您实际使用的是专用显卡。

如果您有 Nvidia GeForce 显卡,那么下面的结果应该类似于“Nvidia”和“GeForce”。

glGetString(GL_VENDOR);
glGetString(GL_RENDERER);

如果它返回除“Nvidia”以外的任何内容,那么您需要打开 Nvidia 控制面板并将首选显卡设置为您的 Nvidia 显卡。


在您确认它是 Nvidia 显卡并且该扩展程序受支持之后。然后你可以尝试获取总的和当前的可用内存:

GLint totalMemoryKb = 0;
glGetIntegerv(GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX, &totalMemoryKb);

GLint currentMemoryKb = 0;
glGetIntegerv(GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX, &currentMemoryKb);

我还想指出 NVX_gpu_memory_info扩展将其定义为:

GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX

不是

GL_GPU_MEM_INFO_TOTAL_AVAILABLE_MEM_NVX

注意 MEMORYMEM 的区别。

因此怀疑您自己定义了 GL_GPU_MEM_INFO_TOTAL_AVAILABLE_MEM_NVX 或利用了定义它的其他东西。这表明它可能被错误定义或引用其他内容。

关于c++ - 如何使用 Qt 的 native OpenGL 获取我的总 GPU 内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43267640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com