python - 实现渲染到顶点数组,glReadPixels 失败(无效操作)

标签 python opengl vbo pyopengl glreadpixels

我正在尝试将顶点数据从纹理复制到顶点缓冲区,然后绘制顶点缓冲区。据我所知,最好的方法是将纹理绑定(bind)到 fbo,然后使用 glReadPixels 将其复制到 vbo。但是,我似乎无法正常工作:glReadPixels 失败并显示错误“无效操作”。

欢迎更正、示例和替代方法。 :)

相关代码如下:

glEnable(GL_TEXTURE_2D)

w, h = 32, 32

vbo = glGenBuffers(1)
glBindBuffer(GL_ARRAY_BUFFER, vbo)
glBufferData(GL_ARRAY_BUFFER, sizeof(c_float)*w*h*4, None, GL_STREAM_COPY)
glBindBuffer(GL_ARRAY_BUFFER, 0)

fbo = glGenFramebuffersEXT(1)
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo)

tex = glGenTextures(1)
glBindTexture(GL_TEXTURE_2D, tex)
# tex params here
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, w, h, 0, GL_RGBA, GL_FLOAT, None)
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, tex, 0)

assert glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) == 36053

glReadBuffer(GL_COLOR_ATTACHMENT0_EXT)
glBindBuffer(GL_PIXEL_PACK_BUFFER, vbo)
glReadPixels(0, 0, w, h, GL_RGBA, GL_FLOAT, None) # invalid operation?

最佳答案

我自己解决了这个问题。

在这种情况下,ReadPixels 的最后一个参数用作偏移量而不是指针,并且不会由 pyopengl 自动转换,使用:

glReadPixels(0, 0, w, h, GL_RGBA, GL_FLOAT, c_void_p(0)) # works!

关于python - 实现渲染到顶点数组,glReadPixels 失败(无效操作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5755478/

相关文章:

python - 如何制作windows的数据框?

python - MNIST图像预测模型

python - 错误异常处理python程序

c++ - QOpenGLWidget 和 glReadPixels 以及深度缓冲区

python - 如何使用 VBO 和 Pyglet 更新数据

c++ - 使用 OpenGL VBO 绘制数千个多边形

c++ - OpenGL 绘制顶点缓冲区对象

python - 使用特定字典初始化从类构建的对象

python - 错误绘制的八边形(随机)- 添加了新测试

java - OpenGL 旋转相机