在Python中调用OpenGL扩展
我在Ubuntu Natty上使用PyOpenGL 3。
我想用一下glDrawElementsBaseVertex
这个函数。
我在glxinfo的输出中看到了这个函数,所以我知道我的显卡支持它。
但是,我找不到怎么真正调用这个函数。当我import OpenGL.GL
的时候,如果我尝试使用这个函数,就会出现NameError
的错误。(这和它是None
不一样。)
2 个回答
1
OpenGL的扩展功能必须由绑定本身提供,PyOpenGL并不支持“链式加载”新的扩展;虽然可以实现这样的功能,但其实没必要花那么多精力去做。
也许你没有正确访问扩展。PyOpenGL的文档里解释了几种方法可以做到这一点。
http://pyopengl.sourceforge.net/documentation/opengl_diffs.html
扩展和条件功能 PyOpenGL支持大多数OpenGL扩展。扩展可以通过导入构造好的扩展包名称,以“正常”的函数指针形式使用,比如:
from OpenGL.GL.ARB.vertex_buffer_object import * buffer = glGenBuffersARB(1)
对于扩展模块,不需要调用初始化函数或类似的东西。如果你愿意,可以调用扩展的“init”函数来获取一个布尔值,表示本地机器是否支持某个扩展,像这样:
if glInitVertexBufferObjectARB(): ...
不过,通常来说,检查你想使用的入口点的布尔值会更清晰:
if (glGenBuffersARB): buffers = glGenBuffersARB( 1 )
通常会有多个入口点实现相同的API,你可能想使用其中可用的实现(可能会有一些优先级)。OpenGL.extensions模块提供了一种简单的机制来支持这一点:
from OpenGL.extensions import alternate glCreateProgram = alternate( 'glCreateProgram', glCreateProgram, glCreateProgramObjectARB) glCreateProgram = alternate( glCreateProgram, glCreateProgramObjectARB)
如果第一个元素是字符串,它将被用作备用对象的名称,否则名称将取自第一个参数。
5
试着通过它的扩展名来导入这个函数:
>>> from OpenGL.GL.ARB.draw_elements_base_vertex import *
>>> glDrawElementsBaseVertex
<OpenGL.platform.baseplatform.glDrawElementsBaseVertex object at 0x031D7B30>