如何在C++中获取OpenGL使用的总内存(以字节为单位)?

jon*_*ham 8 c++ memory windows opengl visual-c++

如何在C++中获取OpenGL使用的总内存(以字节为单位)?

我正在构建一个OpenGL应用程序并且使用的总内存似乎正在上升,我可以获取有关我自己创建的变量和对象所使用的总内存的信息,但无法保证OpenGL为其变量和对象使用了多少内存&texture等.那么有可能获得OpenGL在C++中使用的总内存(以字节为单位)吗?

Nic*_*las 7

一般来说,你没有.OpenGL最终是一种硬件抽象.而OpenGL根本无法提供获取此类信息的方法.

有特定于供应商的扩展可以为您提供询问方式,但您获得的内容取决于架构.AMD硬件提供ATI_meminfo扩展.它将内存分解为对象类型:缓冲区对象,纹理和渲染缓冲区.

NVIDIA提供实验性扩展NVX_gpu_memory_info.注册表中没有关于如何使用它的信息,因此我无法将您链接到任何内容.

在任何情况下,了解GPU使用的最有效方法是自己跟踪它.始终使用大小的内部图像格式 ; 这意味着您可以计算出纹理占用多少内存的非常好的估计.缓冲对象等也是如此.

您将无法获得确切的数字,因为填充,对齐等可能会让您感到困惑.但是你会得到相当不错的东西.

  • @Paul:mipmapped纹理占用没有mipmap的纹理的33%(除非它是1D或3D纹理). (2认同)