pyopengl framebuffer

Опитвам се да работя с обекти на framebuffer в 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.

какво правя грешно Не трябва ли да се инсталират всички необходими библиотеки на framebuffer с двоичните файлове на 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)

връща False

Когато се стартира от файл, той връща 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