我在低内存条件下在glReadPixels()上遇到来自OpenGL的“内存不足”错误。我正在为一个程序编写一个插件,该程序具有针对这种情况的强大堆机制,但我不知道是否或如何使用OpenGL将其用于应用程序内存管理。在Mac OS [不是X]的类似问题上通过这个[虽然过时的]主题引起了我甚至可能的想法:http://lists.apple.com/archives/Mac-opengl/2001/Sep/msg00042.html
我正在使用Windows XP,并在多个NVidia卡上看过它。我也对我可能能够转发给用户的任何解决方案感兴趣(线程提到“增加虚拟内存”)。
谢谢,肖恩
答案 0 :(得分:1)
我非常确定不会从glReadPixels引发内存不足错误(事实上glReadPixels本身不会分配内存)。
错误可能是由分配缓冲区对象或纹理的其他例程引起的。一旦检测到内存不足错误,就应该释放所有非强制性缓冲区对象(纹理,纹理mipmap,很少使用的缓冲区对象),以便分配一个新的缓冲区对象,保存glReadPixels返回的数据。
答案 1 :(得分:0)
没有更具体的细节,很难说。最终,OpenGL将在需要分配时与本机操作系统进行通信。因此,如果没有别的,您可以随时替换(或挂钩)进程的默认CRT /堆分配器,并让它从插件主机中“更健壮”的堆管理器中获取块。