pyopengl кадровый буфер

Я пытаюсь работать с объектами кадрового буфера в PyOpenGL и нашел несколько учебных пособий, чтобы научиться. Я работаю на машине WinXP с Python 2.7.3 и только что установил бинарные дистрибутивы PyOpenGL 3.0.2 и PyOpenGL-accelerate 3.0.2. Однако в самом начале я сталкиваюсь с проблемой, в том смысле, что я получаю сообщение об ошибке, что функции fbo, похоже, не существуют. Вот шаги, чтобы воссоздать мою проблему:

Импорт модулей:

from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GL.framebufferobjects import *

Теперь у меня должны быть доступны объекты/функции фреймбуфера.

print glGenFramebuffers
print glBindFramebuffer

показывает

<OpenGL.extensions.glGenFramebuffers object at 0x03172260>
<OpenGL.extensions.glBindFramebuffer object at 0x03172120>

Однако, если я попытаюсь вызвать (создать экземпляр) этого объекта, как указано в руководстве, с помощью:

fbo = glGenFramebuffers(1)
glBindFramebuffer(GL_FRAMEBUFFER, fbo )

Я получаю сообщение об ошибке:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "latebind.pyx", line 31, in OpenGL_accelerate.latebind.LateBind.__call__ (src\latebind.c:645)
  File "C:\Python27\lib\site-packages\OpenGL\extensions.py", line 189, in finalise
    self.__name__,
OpenGL.error.NullFunctionError: Attempt to call an undefined alternate function (glGenFramebuffers, glGenFramebuffersEXT), check for bool(glGenFramebuffers) before calling

с использованием

bool(glGenFramebuffers)

действительно возвращает False.

Что я делаю не так? Разве все необходимые библиотеки кадрового буфера не должны быть установлены вместе с двоичными файлами PyOpenGL (-accelerate)?

Заранее спасибо всем, кто может мне помочь.

РЕДАКТИРОВАТЬ: я только что нашел https://stackoverflow.com/questions/12953134/problems-with-frame-buffer-objects-fbos-in-pyopengl с похожей проблемой, но без решения


person Daniel Schreij    schedule 15.11.2012    source источник


Ответы (1)


По-видимому, приведенный выше код не демонстрирует такого поведения и хорошо работает, если вы запускаете его из файла. Я попробовал приведенные выше команды в консоли, а затем

bool(glGenFramebuffers)

возвращает ложь

При запуске из файла возвращает True и все работает нормально. Кроме того, вам, похоже, не нужно включать

from OpenGL.GL.framebufferobjects import *

в более новых версиях PyOpenGL (>= 3.0.2), так как у вас также есть доступ к объектам Framebuffer без него

person Daniel Schreij    schedule 15.11.2012
comment
Причина этого, вероятно, в том, что вам нужно создать контекст OpenGL (т. е. открыть окно OpenGL и запустить основной цикл переполнения), прежде чем вы сможете что-либо делать с объектами FrameBuffer. Я был пойман на этом несколько раз. - person Nathaniel; 10.06.2013