OpenGL:超出纹理内存?

时间:2012-12-04 21:31:18

标签: opengl memory-leaks textures

我正在使用OpenGL编写一个小游戏(通过JOGL在Java中编写,但我认为不重要),最近我收到了一些关于人们得到OpenGL错误“1285”的错误报告,这似乎表明“内存不足”。我在创建新纹理后检查glGetError时就抓住了这个,这让我觉得我的纹理内存不足了。

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

这是OpenGL驱动程序普遍接受的做法,尽管有规格吗?尽管有规格,但只有一些司机这样做吗?如果我在glTexImage2D之后发现此错误,是否需要注意删除暂时未使用的纹理?或者我可能在这里看到一些完全不同的东西,OpenGL的错误报告并没有简明扼要地传达给我?

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

1 个答案:

答案 0 :(得分:1)

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

OpenGL,即实现,必须保留所有数据对象的副本,以便它可以按需交换它们。但是那些副本,他们需要你的过程的地址空间。如果您的进程环境执行了大量的分配/解除分配,这是Java的本质(为几乎所有内容创建一个对象),可能会发生地址空间碎片到位,无法再分配更大的chuck

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