我用OpenGL制作2D游戏。我关心的是纹理内存消耗。 2D游戏比3D游戏使用几个数量级的纹理内存,其中大部分来自动画帧和背景。
显然,程序可以分配多少纹理内存是有限制的,但是什么决定了这个限制?限制是否来自可用的一般内存到程序,还是受限于GPU上可用的视频内存量?它可以使用交换空间吗?当视频内存耗尽时会发生什么?
答案 0 :(得分:4)
OpenGL的内存模型非常抽象。包括2.1在内的版本有两种内存快速“服务器”内存和慢速“客户端”内存。但是没有任何限制可以以任何方式进行查询。当OpenGL实现耗尽“服务器”(= GPU)内存时,它可能会开始交换或只报告“内存不足”错误。
OpenGL-3凭借两种不同的内存消失了(主要是OpenGL-4完成了这项工作)。只有“内存”,限制是非常随意的,取决于程序运行的OpenGL实现(= GPU +驱动程序)。所有OpenGL实现都完全能够交换一段时间内未使用的纹理。所以你遇到内存不足的唯一情况就是尝试创建一个非常大的纹理。事实上,最新的GPU实际上能够根据需要交换和传出部分纹理。事情会变慢,但继续工作。
显然,程序可以分配多少纹理内存是有限制的,但是什么决定了这个限制?
系统的OpenGL实现细节,具体取决于该系统中安装的内存量。