我正在使用 OpenGL 制作 2D 游戏。我关心的是纹理内存消耗。 2D 游戏使用的纹理内存比 3D 游戏多几个数量级,其中大部分来自动画帧和背景。
显然,程序可以分配的纹理内存是有限制的,但是是什么决定了这个限制呢?该限制是来自程序可用的通用内存,还是受到 GPU 上可用视频内存的限制?它可以使用交换空间吗?当视频内存耗尽时会发生什么?
最佳答案
OpenGL的内存模型非常抽象。直到2.1版本为止,有两种内存:快速“服务器”内存和慢速“客户端”内存。但没有任何限制可以以任何方式查询。当 OpenGL 实现耗尽“服务器”(=GPU) 内存时,它可能会开始交换或只是报告“内存不足”错误。
OpenGL-3 取消了(大部分情况下,OpenGL-4 完成了这项工作)两种不同类型的内存。只有“内存”,限制是相当任意的,并且取决于程序运行的 OpenGL 实现(= GPU + 驱动程序)。所有 OpenGL 实现都完全能够交换暂时未使用的纹理。因此,唯一会遇到内存不足的情况是尝试创建非常大的纹理。事实上,最新的 GPU 能够根据需要交换部分纹理。事情会变得很慢,但继续工作。
Obviously there's a limit to how much texture memory a program can allocate, but what determines that limit?
系统 OpenGL 实现的详细信息以及取决于该系统中安装的内存量。
关于c++ - 使用 OpenGL 分配的纹理内存受什么限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25100110/