OpenGL:纹理内存不足



我正在使用OpenGL编写一个小游戏(通过JOGL以Java编写,但我认为这无关紧要),最近我收到了一些错误报告,称人们收到OpenGL错误"1285",这似乎表明"内存不足"。我在创建新纹理后检查glGetError时发现了这一点,这让我感觉纹理内存不足。

然而,这让我有点惊讶。OpenGL不是应该为我管理纹理内存吗,必要时在GPU和进程内存之间交换纹理?当然,glTexImage2D的规范不包括任何"内存不足"错误作为任何可能的错误条件。

这是OpenGL驱动程序的普遍接受的做法吗?是否只有一些司机不顾规范这么做?如果在glTexImage2D之后出现此错误,是否需要注意删除一段时间未使用的纹理?或者我可能在这里看到了OpenGL的错误报告没有非常简洁地传达给我的其他东西?

编辑:为了获得更多信息,不幸的是,我自己无法调试这个问题,因为我没有得到它。从人们发给我的报告中,绝大多数受此影响的人似乎都在使用英特尔卡,但我也发现了一些nVidia卡(甚至是680)。

这只是猜测,但您的程序可能会受到地址空间碎片的影响。如果是这种情况,那么在Java运行时中运行确实很重要。

OpenGL,即实现,必须保留所有数据对象的副本,以便根据需要交换它们。但是这些副本,它们需要您流程的地址空间。如果您的流程环境进行了大量的分配/释放,这正是Java的本质(为几乎所有东西创建一个对象),那么您的地址空间可能会变得支离破碎,无法再分配更大的chuck。

需要检查的几点:您的程序是在32位JRE还是64位JRE上运行。如果它是一个32位的可执行文件,请尝试使用64位JRE会发生什么。如果这些问题在64位环境中消失,而在32位环境中的同一台机器上,它们仍然存在,那么肯定是地址空间碎片问题。

最新更新