我在 Ubuntu Natty 上使用 PyOpenGL 3。
我想使用该glDrawElementsBaseVertex
功能。
我可以在我的 glxinfo 输出中看到它,所以我知道我的卡有它。
但是,我找不到如何实际调用它。当我import OpenGL.GL
得到一个NameError
如果我尝试使用它时。(与它不同None
)。
我在 Ubuntu Natty 上使用 PyOpenGL 3。
我想使用该glDrawElementsBaseVertex
功能。
我可以在我的 glxinfo 输出中看到它,所以我知道我的卡有它。
但是,我找不到如何实际调用它。当我import OpenGL.GL
得到一个NameError
如果我尝试使用它时。(与它不同None
)。
尝试通过其扩展名导入该函数:
>>> from OpenGL.GL.ARB.draw_elements_base_vertex import *
>>> glDrawElementsBaseVertex
<OpenGL.platform.baseplatform.glDrawElementsBaseVertex object at 0x031D7B30>
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)
如果第一个元素是字符串,它将用作替代对象的名称,否则名称取自第一个参数。