【发布时间】:2011-11-30 07:44:01
【问题描述】:
如何在 C++ 中获取 OpenGL 使用的总内存(以字节为单位)?
我正在构建一个 OpenGL 应用程序,使用的总内存似乎在增加,我可以获得有关我自己创建的变量和对象使用的总内存的信息,但不能保证 OpenGL 使用了多少内存变量、对象和纹理等。那么是否有可能获得 OpenGL 在 C++ 中使用的总内存(以字节为单位)?
【问题讨论】:
标签: c++ windows visual-c++ memory opengl
如何在 C++ 中获取 OpenGL 使用的总内存(以字节为单位)?
我正在构建一个 OpenGL 应用程序,使用的总内存似乎在增加,我可以获得有关我自己创建的变量和对象使用的总内存的信息,但不能保证 OpenGL 使用了多少内存变量、对象和纹理等。那么是否有可能获得 OpenGL 在 C++ 中使用的总内存(以字节为单位)?
【问题讨论】:
标签: c++ windows visual-c++ memory opengl
一般来说,你不会。 OpenGL 最终是一种硬件抽象。而 OpenGL 根本不提供获取此类信息的方法。
有一些特定于供应商的扩展可以让您提出问题,但您得到的结果取决于架构。 AMD 硬件提供ATI_meminfo extension。它将内存分解为对象类型:缓冲区对象、纹理和渲染缓冲区。
NVIDIA 提供了实验性扩展 NVX_gpu_memory_info。注册表中没有关于如何使用它的信息,所以我无法将您链接到任何内容。
无论如何,了解 GPU 正在使用什么的最有效方法就是自己跟踪它。始终使用internal image formats with sizes;这意味着您可以很好地估计纹理占用的内存量。缓冲区对象等也是如此。
您不会得到确切的数字,因为填充、对齐等可能会让您感到困惑。但你会得到相当不错的东西。
【讨论】: