我在 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)如果第一个元素是字符串,它将用作替代对象的名称,否则名称取自第一个参数。