什么是纹理内存,随OpenGL一起分配,受限于?

Ann*_*inn 2 c++ memory opengl textures

我正在用OpenGL制作2D游戏。我关心的是纹理内存消耗。2D游戏比3D游戏使用更多的纹理存储量,其中大部分来自动画帧和背景。

显然,程序可以分配多少纹理内存是有限制的,但是由什么决定该限制呢?限制是来自程序的可用常规内存,还是受GPU上可用的视频内存限制?它可以完全使用交换空间吗?显存耗尽时会发生什么?

dat*_*olf 5

OpenGL的内存模型非常抽象。在包括2.1在内的版本中,有两种类型的内存:快速的“服务器”内存和慢速的“客户端”内存。但是没有任何可以查询的限制。当OpenGL实现耗尽“服务器”(= GPU)内存时,它可能会开始交换或仅报告“内存不足”错误。

OpenGL-3放弃了两种不同类型的内存(大多数情况下,OpenGL-4完成了该工作)。只是“内存”,其限制是任意的,并取决于程序在其上运行的OpenGL实现(= GPU +驱动程序)。所有OpenGL实现都完美地交换了一段时间不使用的纹理。因此,遇到内存不足情况的唯一情况是尝试创建非常大的纹理。实际上,最新的GPU能够根据需要交换部分纹理。事情会变慢,但是会继续工作。

显然,程序可以分配多少纹理内存是有限制的,但是由什么决定该限制呢?

系统的OpenGL实现的详细信息,并取决于该系统中安装的内存量。