ctypes Wrapper Generation¶
The following modules in pyglet are entirely (or mostly) generated from one or more C header files:
- pyglet.gl.gl
- pyglet.gl.gl_compat
- pyglet.gl.agl
- pyglet.gl.glext_abi
- pyglet.gl.glext_nv
- pyglet.gl.glx
- pyglet.gl.glxext_abi
- pyglet.gl.glxext_nv
- pyglet.gl.wgl
- pyglet.gl.wglext_abi
- pyglet.gl.wglext_nv
- pyglet.window.xlib.xlib
- pyglet.window.xlib.xinerama
The wrapping framework is in tools/wraptypes
, and pyglet-specialised batch
scripts are tools/genwrappers.py
(generates xlib wrappers) and
tools/gengl.py
(generates gl wrappers).
Generating GL wrappers (new version)¶
The new gengl.py
script only generates the following modules:
gl.py
: OpenGL 4.6 core profile enums and functions. All deprecated enums and functions are not included.gl_compat.py
: OpenGL 4.6 compatibility profile with all enums and functions all the way back to OpenGL 1.0.
Running the script:
# Fetch latest gl.xml from Khronos github and generate new modules python tools/gengl.py python tools/gengl.py –source url
# Read the local gl.xml version python tools/gengl.py –source local
The old gengl.py
script also handled agl, wgl and glx.
The section below is still present for historical reasons
and the old script is still around in the tools directory.
Generating GL wrappers (old version)¶
This process needs to be followed when the wraptypes is updated, the header files are updated (e.g., a new release of the operating system), or the GL extensions are updated. Each file can only be generated a a specific platform.
Before beginning, remove the file tools/.gengl.cache
if it exists. This
merely caches header files so they don’t need to be repeatedly downloaded (but
you’d prefer to use the most recent uncached copies if you’re reading this,
presumably).
On Linux, generate pyglet.gl.gl
, pyglet.gl.glext_abi
and
pyglet.gl.glext_nv
(the complete user-visible GL
package):
python tools/gengl.py gl glext_abi glext_nv
The header files for pyglet.gl.gl
are located in
/usr/include/GL
. Ensure your Linux distribution has recent versions
of these files (unfortunately they do not seem to be accessible outside of a
distribution or OS).
The header files for pyglet.glext_abi
and pyglet.glext_nv
are
downloaded from http://www.opengl.org and http://developer.nvidia.com,
respectively.
On Linux still, generate pyglet.gl.glx
, pyglet.gl.glxext_abi
and
pyglet.gl.glxext_nv
:
python tools/gengl.py glx glxext_abi glxext_nv
The header file for pyglet.gl.glx
is in /usr/include/GL
, and
is expected to depend on X11 header files from /usr/include/X11
.
glext_abi
and glext_nv
header files are downloaded from the above
websites.
On OS X, generate pyglet.gl.agl
:
python tools/gengl.py agl
Watch a movie while you wait – it uses virtually every header file on the
system. Expect to see one syntax error in PictUtils.h
line 67, it is
unimportant.
On Windows XP, generate pyglet.gl.wgl
, pyglet.gl.wglext_abi
and
pyglet.gl.wglext_nv
:
python tools/gengl.py wgl wglext_abi wglext_nv
You do not need to have a development environment installed on Windows.
pyglet.gl.wgl
is generated from tools/wgl.h
, which is a hand-coded
header file containing the prototypes and constants for WGL and its
dependencies. In a real development environment you would find these mostly
in WinGDI.h
, but wraptypes is not quite sophisticated enough to parse
Windows system headers (see below for what needs implementing). It is
extremely unlikely this header will ever need to change (excepting a bug fix).
The headers for pyglet.gl.wglext_abi
and pyglet.gl.wglext_nv
are
downloaded from the same websites as for GL and GLX.
Generated GL wrappers¶
Each generated file contains a pair of markers # BEGIN GENERATED CONTENT
and # END GENERATED CONTENT
which are searched for when replacing the
file. If either marker is missing or corrupt, the file will not be modified.
This allows for custom content around the generated content. Only glx.py
makes use of this, to include some additional enumerators that are not
generated by default.
If a generating process is interrupted (either you get sick of it, or it crashes), it will leave a partially-complete file written, which will not include both markers. It is up to you to restore the file or otherwise reinsert the markers.
Generating Xlib wrappers¶
On Linux with the Xinerama extension installed (doesn’t have to be in use, just available), run:
python tools/genwrappers.py
This generates pyglet.window.xlib.xlib
and
pyglet.window.xlib.xinerama
.
Note that this process, as well as the generated modules, depend on
pyglet.gl.glx
. So, you should always run this after the above GL
generation.