2

我在 Ubuntu Natty 上使用 PyOpenGL 3。

我想使用该glDrawElementsBaseVertex功能。

我可以在我的 glxinfo 输出中看到它,所以我知道我的卡有它。

但是,我找不到如何实际调用它。当我import OpenGL.GL得到一个NameError如果我尝试使用它时。(与它不同None)。

4

2 回答 2

5

尝试通过其扩展名导入该函数:

>>> from OpenGL.GL.ARB.draw_elements_base_vertex import *
>>> glDrawElementsBaseVertex
<OpenGL.platform.baseplatform.glDrawElementsBaseVertex object at 0x031D7B30>
于 2011-06-21T11:07:51.843 回答
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)

如果第一个元素是字符串,它将用作替代对象的名称,否则名称取自第一个参数。

于 2011-06-21T11:01:51.910 回答