实现rendertovertexarray时,glReadPixels失败(操作无效)

2024-06-01 03:44:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将顶点数据从纹理复制到顶点缓冲区,然后绘制顶点缓冲区。据我所知,最好的方法是将纹理绑定到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?

Tags: nonebufferarrayext缓冲区tex顶点纹理
1条回答
网友
1楼 · 发布于 2024-06-01 03:44:21

我自己解决了这个问题。在

ReadPixels的最后一个参数用作偏移量而不是指针(在本例中,pyopengl不会自动强制转换),请使用:

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

相关问题 更多 >