我正在寻找一些JOGL类/方法/示例来检索总可用GPU内存和当前可用GPU内存的大小。
我知道它可以使用OpenGl (JOGL Java文档)。
您发布的链接使用NVidia专有扩展。然而,考虑到现代gpu的运作方式,知道还有多少"内存"是绝对无用的。为什么?
因为OpenGL总是在抽象内存模型上操作。单个数据对象(纹理,vbo)可能太大而无法容纳到GPU的工作内存中,但除了系统内存(CPU RAM)之外,您可以拥有多少纹理和vbo实际上没有限制。OpenGL总是按需交换内容。
自从能够集成mmu的OpenGL-4/DirectX-11 gpu出现以来,甚至数据对象大小的概念也变得毫无意义。今天的gpu支持稀疏数据对象。在现代GPU上,你可以分配几千像素宽和高的纹理,并且只需要稀疏地填充数据。因此,即使只有一个纹理对象被绑定,它的一部分可能会在系统内存中休眠,而其他部分则在GPU工作内存中。
旧的OpenGL实际上有函数来查询纹理是否加载到快速内存中。但是随着GPU和系统RAM之间的界限消失,那些不再有意义的东西随后被删除了。
有效地GPU RAM现在是一个缓存,你应该这样对待它。除了非常特殊的应用程序,您几乎不会在运行时查询CPU缓存的大小。