Generating bindings - jeske/opentk GitHub Wiki
This is a rough overview of the binding generation process.
- Convert.exe converts .spec files into a custom xml file, called signatures.xml.
- The generator loads signatures.xml, overrides.xml and gl.tm into a custom in-memory representation.
- The generator then applies a number of hard-coded rules. These include stripping the prefixes and suffixes of functions, escaping for tokens that start with digits, generation of safe/unsafe overloads for functions taking pointers and handling of CLS-compliance.
- Finally, it generates compilable code for C# or C++.
Several command-line switches can influence the generation process: GL vs ES, namespaces, generated code.
What is the best way for you to proceed depends on (a) the amount of functions you wish to add, and (b) whether these functions are available in the old .spec files or the new xml format.
If you only wish to add a handful of functions, the easiest approach might be to define them by hand at the bottom of the signatures.xml file, which can be found under Source/Bind/Specifications/GL2. The format is relatively simple:
<function name="VertexPointer" extension="Core"
category="VERSION_1_1_DEPRECATED" version="1.1" deprecated="3.1">
<returns type="void" />
<param name="size" type="Int32" flow="in" />
<param name="type" type="VertexPointerType" flow="in" />
<param name="stride" type="SizeI" flow="in" />
<param name="pointer" type="Void*" flow="in" />
</function>
In this case, VertexPointerType is an enumeration that must be defined in either signatures.xml or overrides.xml. If this enumeration is not found, the generator will fall back to the "All" enumeration, which is equivalent to the non-typesafe GLenum used in the regular C headers.
If you wish to bind a significant amount of functions, such as a whole new OpenGL version, then your best bet is to execute the Converter utility to generate a new signatures.xml file from the latest spec:
cd Binaries/OpenTK/Debug
wget https://cvs.khronos.org/svn/repos/ogl/trunk/doc/registry/public/oldspecs/gl.spec
Convert.exe -p=gl -v=4.3 -o=../../../Source/Bind/Specifications/GL2 gl.spec
Bind.exe
Now you can recompile OpenTK and take a look at the generated specs - the new functions should be there. If they use enums, these will probably appear as "All". You can use overrides.xml to define type-safe enums and improve the generated API.