Реализация рендеринга в массив вершин, glReadPixels не работает (недопустимая операция) - PullRequest
3 голосов
/ 22 апреля 2011

Я пытаюсь скопировать данные вершины из текстуры в буфер вершин, а затем нарисовать буфер вершин.Насколько я знаю, лучший способ сделать это - привязать текстуру к 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?

1 Ответ

1 голос
/ 25 мая 2011

Я решил проблему сам.

Последний аргумент ReadPixels в этом случае используется в качестве смещения вместо указателя и не приводится автоматически pyopengl, используйте:

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