1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
# EGL-Registry
The EGL-Registry repository contains the EGL API and Extension Registry,
including specifications, reference pages and reference cards, and the
enumerant registry. It is also used as a backing store for the web view of
the registry at https://www.khronos.org/registry/egl/ ; commits to the
master branch of this repository will be reflected there.
In the past, the EGL registry was maintained in a public Subversion
repository. The history in that repository has not been imported to github,
but it is still available at
https://cvs.khronos.org/svn/repos/registry/trunk/public/egl/ .
Interesting files in this repository include:
* index.php - toplevel index page for the web view. This relies on PHP
include files found elsewhere on www.khronos.org and so is not very useful
in isolation.
* registry.tcl - extension number registry. Documents the names and index
numbers assigned to EGL extension specifications.
* api/egl.xml - extension enumerant and API registry. Defines the EGL API,
including extensions, and is used to generate headers. Documents the EGL
enumerant ranges assigned to different vendors.
* api/EGL/ and api/KHR/ - header files used by an EGL implementation.
EGL/eglext.h and EGL/egl.h are generated from egl.xml. The other headers
are handcoded and express OS and window system (platform) dependencies.
* extensions/ - EGL extension specifications, grouped into vendor-specific
subdirectories.
* sdk/ - EGL reference pages and reference cards. There are separate sets
for each API version.
* specs/ - EGL specification documents.
## Reserving EGL Enumerant Ranges
EGL enumerants are documented in api/egl.xml . New ranges can be allocated
by proposing a pull request to master modifying this file, following the
existing examples. Allocate ranges starting at the lowest free values
available (search for "Reservable for future use"). Ranges are not
officially allocated until your pull request is *accepted* into master. At
that point you can use values from your assigned range for API extensions.
## Adding Extension Specifications
Extension specification documents can be added by proposing a pull request
to master, adding the specification .txt file and related changes under
extensions/\<vendor\>/filename.txt. Your pull request must also:
* Allocate an extension number in registry.tcl (follow the existing
```<extension>``` examples, search for "Next free extension number", and use
the lowest available extension number).
* Include that extension number in the extension specification document.
* Define the interfaces introduced by this extension in api/egl.xml,
following the examples of existing extensions. If you have difficulty
doing this, consult the registry schema documentation in the GL registry
at www.khronos.org/registry/gl/; you may also create Issues in the
EGL-Registry repository to request help.
* Verify that the EGL headers regenerate properly after applying your XML
changes. In the api/ directory, you must be able to do the following without
errors:
```
# Validate XML changes
make validate
# Verify headers build and are legal C
make clobber
make
make tests
```
* Finally, add a link from the extensions section of index.php to the
extension document, using the specified extension number, so it shows up
in the web view (this could in principle be generated automatically from
registry.tcl / egl.xml, but isn't at present).
Sometimes extension text files contain inappropriate UTF-8 characters. They
should be restricted to the ASCII subset of UTF-8 at present. They can be
removed using the iconv Linux command-line tool via
iconv -c -f utf-8 -t ascii filename.txt
(see internal Bugzilla issue 16141 for more).
We may transition to an asciidoc-based extension specification format at
some point.
## Build Tools
This section is not complete (see https://github.com/KhronosGroup/EGL-Registry/issues/92).
To validate the XML and build the headers you will need at least GNU make,
'jing' for the 'make validate' step (https://relaxng.org/jclark/jing.html),
and Python 3.5 and the lxml.etree Python library
(https://pypi.org/project/lxml/) for the 'make' step. The 'make tests' step
requires whatever the C and C++ compilers configured for GNU make are,
usually gcc and g++.
All of these components are available prepackaged for major Linux
distributions and for the Windows 10 Debian WSL.
|