我正在使用PyOpenGL(python3.5)编写一个应用程序,但得到一个OpenGL错误。具体来说,这是一个关于glReadPixels的错误(err:1282,description=b“无效操作”)。见下表:
File "/usr/lib/python3/dist-packages/OpenGL/GL/images.py", line 371, in glReadPixels
imageData
File "/usr/lib/python3/dist-packages/OpenGL/error.py", line 232, in glCheckError
baseOperation = baseOperation,
OpenGL.error.GLError: GLError(
err = 1282,
description = b'invalid operation',
baseOperation = glReadPixels,
cArguments = (
0,
0,
1640,
1232,
GL_RGBA,
GL_UNSIGNED_BYTE,
array([[[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
...,
[0, 0, 0, 0],
[0, 0, ...,
)
)
我在运行不同操作系统(Mac-OSX、OpenSUSE、Arch-Linux……)的各种笔记本电脑和台式机上运行了完全相同的程序,没有任何问题,最近还将其移植到了Raspberry pi3(运行Raspbian Stretch)。这就是问题发生的地方。正在运行的代码如下。。。你知道吗
glEnableClientState(GL_VERTEX_ARRAY)
glColor4f(1.0, 1.0, 1.0, 1.0)
glLineWidth(4)
self.vbo.bind()
glVertexPointer(3, GL_FLOAT, 0, self.vbo)
vertex_count = int(len(self.all_vertices) / 3)
glDrawArrays(GL_LINES, 0, vertex_count)
self.vbo.unbind()
glDeleteBuffers(1, [self.vbo])
glDeleteBuffers(1, GLuint(self.vbo))
glDisableClientState(GL_VERTEX_ARRAY)
glPopMatrix()
glPopMatrix()
glFlush()
x, y, width, height = glGetIntegerv(GL_VIEWPORT)
glPixelStorei(GL_PACK_ALIGNMENT, 1)
data = glReadPixels(x,
y,
width,
height,
GL_RGBA,
GL_UNSIGNED_BYTE)
image = Image.frombytes("RGBA", (width, height), data)
image = image.transpose(Image.FLIP_TOP_BOTTOM)
data = None
image.save(output_file, 'PNG')
我使用不同的函数为每个迭代创建VBO:
self.all_vertices = np.array(self.all_vertices, dtype='float32')
size = ADT.arrayByteCount(self.all_vertices)
self.vbo = glvbo.VBO(self.all_vertices,
usage=GL_STATIC_DRAW,
target=GL_ARRAY_BUFFER,
size=size)
使这个错误更令人费解的是,在错误发生之前,它已经成功地在循环中运行了上述代码25次,输出了25个png。我不知道为什么,但是在循环的第26次迭代中,它突然抛出了这个错误。一开始我认为这可能是Pi的资源问题,但是用htop检查一切似乎都很好。你知道吗
如果有人能提出任何建议,我将不胜感激!你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐