因此,我正在开发一个python程序,在这个程序中,我设置了一个(屏幕外)窗口来绘制,然后每次迭代我都更新内容,并使用glReadPixels将窗口上的内容转换成PNG图像。你知道吗
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
from PIL import Image,ImageDraw,ImageOps
class someclass:
initialized = False
def initialize(self):
glutInit(sys.argv)
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB)
glutInitWindowSize(self.width, self.height)
glutCreateWindow(b"OpenGL Offscreen")
glutHideWindow()
self.initialized = True
def new_frame(self):
if not self.initialized:
self.initialize()
glClearColor(*(self.background.getfloat()), 1.0)
glColor(0.0, 1.0, 0.0)
gluOrtho2D(-1.0, 1.0, -1.0, 1.0)
glViewport(0, 0, self.width, self.height)
glClear(GL_COLOR_BUFFER_BIT)
self.handlers(None)
glFlush()
glPixelStorei(GL_PACK_ALIGNMENT, 1)
data = glReadPixels(0, 0, self.width, self.height, GL_RGBA, GL_UNSIGNED_BYTE)
currentimage = Image.frombytes("RGBA", (self.width, self.height), data)
currentimage = ImageOps.flip(currentimage)
currentimage.convert('RGB').resize((self.width//self.scale,self.height//self.scale), Image.ANTIALIAS).save("something.png","PNG")
每次交互都会调用新的\u frame()函数。新的\u frame函数第一次调用initialize函数。这段代码运行良好,除了一件事:经过大约40次迭代后,memry的使用变得疯狂。每次迭代都会增加大约50-100MB(在我的系统监视器中可以看到),直到某个时候我使用了所有的ram。所以我开始做一些测试,通过注释掉代码等。问题似乎是对glReadPixels()的调用。当它被注释掉时,程序不会消耗越来越多的内存。有人知道一个替代方案,一个解决方案或者一个好的策略来解决它吗?我真的不知道我能做些什么来阻止它的发生。如果你想自己测试代码,我也可以发布github链接。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐