OpenGL接口的实现
看见 OpenGL Interface 有关公众可见模块的详细信息,请参阅。
看见 ctypes Wrapper Generation 其中一些模块的详细信息已生成。
CTYPE链接
大多数函数都链接到libGL.so(Linux)、opengl32.dll(Windows)或OpenGL.framework(OS X)。 pyglet.gl.lib
提供一些帮助器类型,然后为适当的平台导入链接器函数: pyglet.gl.lib_agl
, pyglet.gl.lib_glx
, pyglet.gl.lib_wgl
。
在任何平台上,都需要执行以下步骤来链接导入过程中的每个功能:
查看相应的库(例如libGL.so、opengl32.dll等)。使用
cdll
或windll
。如果未找到,请调用
wglGetProcAddress
或glxGetProcAddress
以尝试动态解析函数的地址。在OS X上,跳过这一步。在Windows上,如果尚未创建上下文,则此操作将失败。创建并返回代理对象
WGLFunctionProxy
它将在该对象为__call__
是啊。代理对象缓存其结果,以便后续调用只有一个额外的函数调用开销。
如果仍未找到该函数(在导入或代理调用期间),则该函数将被替换为
MissingFunction
(定义见pyglet.gl.lib
),这引发了一个例外。异常消息详细说明了函数的名称,以及它所需的扩展或OpenGL版本的名称(可选)。我们目前在不同的模块中包含了OpenGL 4.6中的所有函数和枚举。
gl.g
公开核心API和gl_compat.py
显示兼容性配置文件(不推荐使用)。可在中找到包含哪些扩展模块
gengl.py
。
要访问链接功能,请导入 pyglet.gl.lib
并使用以下选项之一 link_AGL
, link_GLX
, link_WGL
或 link_GL
。这就是生成的模块所做的事情。
缺少扩展
缺少的扩展可添加到 extensions
列在 gengl.py
。