Skip to content

cginternals/khrbinding-generator

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published