我在GLES2和EGL中使用PyOpenGL写了一些代码,我需要使用glReadPixels函数,除了最后一个参数必须是一个ctypes unsigned char buffer,我不知道如何创建。
这里是C代码。
unsigned char* buffer = malloc(width * height * 4);
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
相当于Python的代码是什么?
我使用的是GLES2而不是GL,因此。buffer = glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE)
不工作。
当我尝试 buffer = glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE)
我得到以下错误。
buffer = glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE)
File "/home/fa/berryconda3/lib/python3.6/site-packages/OpenGL/platform/baseplatform.py", line 415, in __call__
return self( *args, **named )
TypeError: this function takes at least 7 arguments (6 given)
创建一个适当大小的字节缓冲区。
buffer_size = width * height * 4
buffer = (GLbyte * buffer_size)()
把缓冲区传给glReadPixels。
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer)
这和使用 ctypes.c_byte
:
import ctypes
buffer_size = width * height * 4
buffer = (ctypes.c_byte * buffer_size)()
或者创建一个适当大小的numpy缓冲区。
import numpy
buffer = numpy.empty(width * height * 4, "uint8")
把缓冲区的大小 glReadPixels
:
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer)