首先检查是否支持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, ¤tMemoryKb);
我还想指出,NVX_gpu_memory_info扩展将其定义为:
GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX
并不是
GL_GPU_MEM_INFO_TOTAL_AVAILABLE_MEM_NVX
注意MEMORYvs的MEM区别。
因此,怀疑您已经定义GL_GPU_MEM_INFO_TOTAL_AVAILABLE_MEM_NVX了自己或利用了其他定义了它的东西。这表明它可能被错误地定义或引用其他东西。