8dcb8601a2
Hopefully this is the first and last time we have to do this.
44 lines
No EOL
3 KiB
Text
44 lines
No EOL
3 KiB
Text
The generated XML files follow this schema.
|
|
|
|
<signatures>
|
|
<function name="[function name]" extension="[Core|extension]" profile="[profile name]" category="[category]" version="[1.0|1.1|2.0|...]">
|
|
<returns type="[typename]" />
|
|
<param type="[typename]" name="[parameter name]" />
|
|
<param type="[typename]*" name="[parameter name]" count="[array size]/>
|
|
</function>
|
|
<enum name="[enum name]">
|
|
<token name="[token name]" value="[token value]" />
|
|
</enum>
|
|
</signatures>
|
|
|
|
<overrides>
|
|
<!-- Todo -->
|
|
</overrides>
|
|
|
|
|
|
Notes
|
|
|
|
Functions:
|
|
- [function name] should not contain a prefix, i.e. BufferData instead of glBufferData.
|
|
- [extension] must be set to "Core" if this is not an extension method. Otherwise, it must be set to extension name in CamelCase. For example, method MapBufferOES should set extension="Oes".
|
|
- [profile name] can be used to discriminate between different profiles of the same spec (for example "full" and "lite" for ES1.1). This attribute is not used at this point.
|
|
- [category] should be set to the correct function category. This is typically defined for extension methods (e.g. TexImage3DOES belongs to category GL_OES_texture_3D). If the category is unknown, this should be set to the same value as the "version" attribute below.
|
|
- [version] must be set to the correct spec version. OpenGL|ES and OpenCL distribute different header files for each spec version, so this can be set to a constant value (e.g. 1.0 for ES1.0). On the other hand, OpenGL and OpenAL distribute a single file that contains functions from all versions.
|
|
|
|
The extension attribute is used by the generator to distinguish between core and extension methods (the first use plain DllImports, while the latter are only converted to delegates).
|
|
|
|
The category and version attributes are used by the generator to match enum parameters. An enum parameter may either define an exact type or may be a generic enum (GLenum). In the last case, category and version are used to find a matching enum. If no match exists, the enum "All" will be used.
|
|
|
|
Parameter typenames are translated to C# as follows: [typename] -> gl.tm -> csharp.tm. The gl.tm typemap file is shipped by Khronos and matches GL types to C types (this file should not be edited). The csharp.tm typemap file is handwritten and maps C types to C# types (this file may be edited).
|
|
|
|
Typenames that resolve to csharp strings or string arrays are treated specially by the generator for the purposes of marshalling. For this reason, byte* parameters that contain ASCII strings should be overriden by char* or CharPointer parameters.
|
|
|
|
|
|
Enums:
|
|
- [enum name] should be a valid C# enum name in CamelCase.
|
|
- [token name] should be a valid C# enum token in ALL_CAPS. The generator will translate this to camel case.
|
|
- [enum value] may be a hex or dec number, or a string that refers to a different enum token. The generator will recursively resolve token references and will parse the final values to ensure they are well-formed numbers.
|
|
|
|
|
|
Overrides:
|
|
Todo |