实现渲染到顶点数组,glReadPixels失败(无效操作) [英] Implementing render-to-vertex-array, glReadPixels fails (invalid operation)

查看:320
本文介绍了实现渲染到顶点数组,glReadPixels失败(无效操作)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to copy vertex data from a texture to a vertex buffer, and then draw the vertex buffer. As far as I know the best way to do this is to bind the texture to a fbo, and use glReadPixels to copy it to a vbo. However, I can't seem to get this working: glReadPixels fails with the error "invalid operation".

欢迎更正,示例和替代方法. :)

Corrections, examples and alternate methods welcome. :)

以下是相关代码:

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?

推荐答案

我自己已经解决了该问题.

I've solved the issue myself.

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

The last argument to ReadPixels is used as an offset instead of a pointer in this case, and is not automatically cast by pyopengl, use:

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

这篇关于实现渲染到顶点数组,glReadPixels失败(无效操作)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆