Skip to content

A Python generator for the Khronos APIs OpenGL, OpenGL ES, OpenGL SC, and EGL

License

Notifications You must be signed in to change notification settings

EllAyling/khrbinding-generator

 
 

Repository files navigation

KHR Binding C++ Generator

Process

  1. Load XML from Khronos repository
  2. Generate C++ API binding from XML

Preconfigured Profiles

Currently available profiles for loading and generating (in subdirectory profiles):

  • gl.json for the OpenGL API (results are deployed in glbinding)
  • gles.json for the OpenGL ES API (results are deployed in glesbinding)
  • glsc.json for the OpenGL SC API (results are deployed in glscbinding)
  • egl.json for the EGL API (results are deployed in eglbinding)

Examples

Load XML from Khronos repository

python3 update.py -p "profiles/gl.json"
python3 update.py -p "profiles/gles.json"
python3 update.py -p "profiles/glsc.json"
python3 update.py -p "profiles/egl.json"
python3 update.py -p "profiles/vk.json"

Generate C++ API binding from XML

python3 generate.py -p "profiles/gl.json" -d "../glbinding/source"
python3 generate.py -p "profiles/gles.json" -d "../glesbinding/source"
python3 generate.py -p "profiles/glsc.json" -d "../glscbinding/source"
python3 generate.py -p "profiles/egl.json" -d "../eglbinding/source"
python3 generate.py -p "profiles/vk.json" -d "../vkbinding/source"

Profile Documentation

A profile file is a JSON file with a flat layout, although semantic groups are intended. The currently supported tags are:

  • API specification
    • sourceUrl: The url to download the API specification
    • sourceFile: The intermediate file name to store the API specification
    • apiIdentifier: For multi-API specification files, specifies the one API to select
  • Code Generation
    • bindingNamespace: The identifier for the subdirectories and C++ binding namespace
    • baseNamespace: The C++ namespace for the generated API
    • coreProfileSince: The version of core profile introduction (e.g., 3.2 for OpenGL)
    • multiContext: Set to true if the API supports multiple contexts
    • booleanWidth: The width of a boolean in this API (may be either 8 or 32)

More options are subject to future development. Ideas and requirements are welcomed.

Example profile gl.json

{
  "": "API specification",
  "apiIdentifier": "gl",
  "sourceUrl": "https://raw.githubusercontent.com/KhronosGroup/OpenGL-Registry/master/xml/gl.xml",
  "sourceFile": "gl.xml",

  "": "Code Generation",
  "bindingNamespace": "glbinding",
  "baseNamespace": "gl",
  "coreProfileSince": "3.2",
  "multiContext": true,
  "booleanWidth": 8
}

Dependencies

  • Python 3
    • jinja2

About

A Python generator for the Khronos APIs OpenGL, OpenGL ES, OpenGL SC, and EGL

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 59.7%
  • Python 38.0%
  • Smarty 2.0%
  • C 0.3%