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

cginternals/khrbinding-generator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

064891e · Apr 16, 2025
Apr 5, 2018
Oct 30, 2024
Aug 7, 2019
Apr 16, 2025
Apr 2, 2025
Mar 10, 2025
Nov 3, 2021
Apr 1, 2018
Apr 1, 2018
Aug 13, 2019
Nov 3, 2021
Mar 1, 2019
Feb 21, 2021
Apr 3, 2018

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