Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory 确定可用视频存储器_Memory_Opengl - Fatal编程技术网

Memory 确定可用视频存储器

Memory 确定可用视频存储器,memory,opengl,Memory,Opengl,在开发OpenGL程序时,是否有一种方法可以从系统中查询出有多少兆字节可用于存储纹理等 还是现在的标准方法只是分配内存而忘记一切?OpenGL没有提供这些信息。坦率地说,这并没有什么好处,因为今天我们有多任务操作系统。如果需要,OpenGL驱动程序负责在系统内存中交换纹理数据 OpenGL能为您做的就是告诉您,您上传的纹理是否仍然驻留在快速内存中。该函数称为“眩光纹理Resident”。您可以使用此功能逐步将内容上载到GPU,直到您填满GPU的内存。但请记住,你不是GPU的唯一用户。尽管官方立场

在开发OpenGL程序时,是否有一种方法可以从系统中查询出有多少兆字节可用于存储纹理等


还是现在的标准方法只是分配内存而忘记一切?

OpenGL没有提供这些信息。坦率地说,这并没有什么好处,因为今天我们有多任务操作系统。如果需要,OpenGL驱动程序负责在系统内存中交换纹理数据


OpenGL能为您做的就是告诉您,您上传的纹理是否仍然驻留在快速内存中。该函数称为“眩光纹理Resident”。您可以使用此功能逐步将内容上载到GPU,直到您填满GPU的内存。但请记住,你不是GPU的唯一用户。

尽管官方立场仍然是“你不需要知道,你不想知道,而且无论如何也帮不了你”,但幸运的是,最近至少有两个IHV显示了更多的洞察力,并提供了查询该信息的扩展:

这些扩展的一个优点是它们有一个最小的公分母,这正是大多数人所需要的,您不需要查询扩展支持或做任何特殊的事情,因为它们都通过
glGetIntegerv
工作

在最简单的情况下,您只需将一个由4个整数组成的数组初始化为零(或在扩展不起作用的情况下您将假定的某个最小默认值),然后调用
glGetIntegerv
两次(分别使用
GPU\u MEMORY\u INFO\u CURRENT\u AVAILABLE\u VIDMEM\u NVX
TEXTURE\u FREE\u MEMORY\u ATI
),最后调用
glGetError
清除错误状态
glGetIntegerv
不会在指向的内存出现故障时修改它,也不会崩溃或发生任何其他不好的事情——它只是将错误状态设置为
GL\u INVALID\u ENUM

两个扩展都在第一个数组位置返回一个值,ATI扩展也在其他3个数组位置返回一些值


n、 b.:
眩光纹理Resident
在主流硬件上已经有近十年不受支持了,其支持方式与纹理优先级相同。通常的说法是驱动程序编写者比您知道得多。

我没有使用JOGL,所以我不知道,但在GL2和GL3接口的文档中至少有一个合理的解释:“支持本规范制定时定义的大多数[sic]扩展”。这分别意味着2004年9月和2008年8月,不包括上述两次延期(2009年3月和12月)。因此,如果您使用这两个接口中的一个,这将是一个合理的解释(另一个解释是您的图形驱动程序实际上不支持扩展)。无论如何,您并不真正需要“支持”扩展。如上所述,它们使用
glGetIntegerv
——只需使用常量(在规范文件中)。它会起作用,也不会起作用。选择一个合理的默认值,这是你能得到的最好的结果。是的,你是对的,它通过传递十六进制值来工作。。感谢Damon,+1这已经有很长一段时间了,但它目前仍在nVidia Titan上工作。非常有用,谢谢!对于Mesa@GLX,也有。只需将其添加到此处,以便其他访问此处的人知道:
glartexturesresident
在核心配置文件中被弃用,因此在现代OpenGL程序中使用它们是不谨慎的。