OpenGL接口的实现

看见 OpenGL Interface 有关公众可见模块的详细信息,请参阅。

看见 ctypes Wrapper Generation 其中一些模块的详细信息已生成。

CTYPE链接

大多数函数都链接到libGL.so(Linux)、opengl32.dll(Windows)或OpenGL.framework(OS X)。 pyglet.gl.lib 提供一些帮助器类型,然后为适当的平台导入链接器函数: pyglet.gl.lib_aglpyglet.gl.lib_glxpyglet.gl.lib_wgl

在任何平台上,都需要执行以下步骤来链接导入过程中的每个功能:

  1. 查看相应的库(例如libGL.so、opengl32.dll等)。使用 cdllwindll

  2. 如果未找到,请调用 wglGetProcAddressglxGetProcAddress 以尝试动态解析函数的地址。在OS X上,跳过这一步。

  3. 在Windows上,如果尚未创建上下文,则此操作将失败。创建并返回代理对象 WGLFunctionProxy 它将在该对象为 __call__ 是啊。

    代理对象缓存其结果,以便后续调用只有一个额外的函数调用开销。

  4. 如果仍未找到该函数(在导入或代理调用期间),则该函数将被替换为 MissingFunction (定义见 pyglet.gl.lib ),这引发了一个例外。异常消息详细说明了函数的名称,以及它所需的扩展或OpenGL版本的名称(可选)。

    我们目前在不同的模块中包含了OpenGL 4.6中的所有函数和枚举。 gl.g 公开核心API和 gl_compat.py 显示兼容性配置文件(不推荐使用)。

    可在中找到包含哪些扩展模块 gengl.py

要访问链接功能,请导入 pyglet.gl.lib 并使用以下选项之一 link_AGLlink_GLXlink_WGLlink_GL 。这就是生成的模块所做的事情。

缺少扩展

缺少的扩展可添加到 extensions 列在 gengl.py