Dam*_*mon 43
虽然官方的立场仍然是"你不需要知道,你不想知道,但它无论如何也无济于事",幸运的是至少有两个IHV最近表现出更多的洞察力,并提供查询信息的扩展:
关于这些扩展的一个好处是它们具有最小公分母,这正是大多数人所需要的,并且您不需要查询扩展支持或执行任何特殊操作,因为它们都可以通过glGetIntegerv
.
在最简单的情况下,您可以将4个整数的数组初始化为零(或者在扩展不起作用的情况下,您将假设的某个最小默认值),然后调用glGetIntegerv
两次(分别使用GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX
和TEXTURE_FREE_MEMORY_ATI
),最后调用glGetError
以清除错误状态.glGetIntegerv
如果指向内存失败,它不会修改它,也不会崩溃或任何其他坏事 - 它只是将错误状态设置为GL_INVALID_ENUM
.
两个扩展都在第一个数组位置返回一个值,ATI也返回另一个值中的一些值.
nb:glAreTexturesResident
在主流硬件上已经有近十年没有得到支持,就像纹理优先级一样.常见的口头禅是驱动程序作者无论如何都比你更了解.
dat*_*olf 14
OpenGL不会向您提供此信息.坦率地说:只有少数好处,因为今天我们拥有多任务操作系统.如果有需要,OpenGL驱动程序负责将纹理数据交换到系统内存或从系统内存交换.
如果您上传的纹理仍然驻留在快速内存中,OpenGL可以为您做什么.该函数称为"glAreTexturesResident".您可以使用它逐渐将内容上传到GPU,直到您填满GPU的内存.但请记住,您不是GPU的唯一用户.