| Jesse Hall | a42788e | 2014-04-21 15:47:51 -0700 | [diff] [blame] | 1 | #!/usr/bin/env python | 
 | 2 | # | 
| Pablo Ceballos | 4690754 | 2015-10-27 14:00:42 -0700 | [diff] [blame] | 3 | # Copyright (c) 2013-2015 The Khronos Group Inc. | 
| Jesse Hall | a42788e | 2014-04-21 15:47:51 -0700 | [diff] [blame] | 4 | # | 
 | 5 | # Permission is hereby granted, free of charge, to any person obtaining a | 
 | 6 | # copy of this software and/or associated documentation files (the | 
 | 7 | # "Materials"), to deal in the Materials without restriction, including | 
 | 8 | # without limitation the rights to use, copy, modify, merge, publish, | 
 | 9 | # distribute, sublicense, and/or sell copies of the Materials, and to | 
 | 10 | # permit persons to whom the Materials are furnished to do so, subject to | 
 | 11 | # the following conditions: | 
 | 12 | # | 
 | 13 | # The above copyright notice and this permission notice shall be included | 
 | 14 | # in all copies or substantial portions of the Materials. | 
 | 15 | # | 
 | 16 | # THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | 
 | 17 | # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | 
 | 18 | # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | 
 | 19 | # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY | 
 | 20 | # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | 
 | 21 | # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | 
 | 22 | # MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. | 
 | 23 |  | 
 | 24 | import sys, time, pdb, string, cProfile | 
 | 25 | from reg import * | 
 | 26 |  | 
 | 27 | # debug - start header generation in debugger | 
 | 28 | # dump - dump registry after loading | 
 | 29 | # profile - enable Python profiling | 
 | 30 | # protect - whether to use #ifndef protections | 
 | 31 | # registry <filename> - use specified XML registry instead of gl.xml | 
 | 32 | # target - string name of target header, or all targets if None | 
 | 33 | # timeit - time length of registry loading & header generation | 
 | 34 | # validate - validate return & parameter group tags against <group> | 
 | 35 | debug   = False | 
 | 36 | dump    = False | 
 | 37 | profile = False | 
 | 38 | protect = True | 
 | 39 | target  = None | 
 | 40 | timeit  = False | 
 | 41 | validate= False | 
 | 42 | # Default input / log files | 
 | 43 | errFilename = None | 
 | 44 | diagFilename = 'diag.txt' | 
 | 45 | regFilename = 'gl.xml' | 
 | 46 |  | 
 | 47 | if __name__ == '__main__': | 
 | 48 |     i = 1 | 
 | 49 |     while (i < len(sys.argv)): | 
 | 50 |         arg = sys.argv[i] | 
 | 51 |         i = i + 1 | 
 | 52 |         if (arg == '-debug'): | 
 | 53 |             write('Enabling debug (-debug)', file=sys.stderr) | 
 | 54 |             debug = True | 
 | 55 |         elif (arg == '-dump'): | 
 | 56 |             write('Enabling dump (-dump)', file=sys.stderr) | 
 | 57 |             dump = True | 
 | 58 |         elif (arg == '-noprotect'): | 
 | 59 |             write('Disabling inclusion protection in output headers', file=sys.stderr) | 
 | 60 |             protect = False | 
 | 61 |         elif (arg == '-profile'): | 
 | 62 |             write('Enabling profiling (-profile)', file=sys.stderr) | 
 | 63 |             profile = True | 
 | 64 |         elif (arg == '-registry'): | 
 | 65 |             regFilename = sys.argv[i] | 
 | 66 |             i = i+1 | 
 | 67 |             write('Using registry ', regFilename, file=sys.stderr) | 
 | 68 |         elif (arg == '-time'): | 
 | 69 |             write('Enabling timing (-time)', file=sys.stderr) | 
 | 70 |             timeit = True | 
 | 71 |         elif (arg == '-validate'): | 
 | 72 |             write('Enabling group validation (-validate)', file=sys.stderr) | 
 | 73 |             validate = True | 
 | 74 |         elif (arg[0:1] == '-'): | 
 | 75 |             write('Unrecognized argument:', arg, file=sys.stderr) | 
 | 76 |             exit(1) | 
 | 77 |         else: | 
 | 78 |             target = arg | 
 | 79 |             write('Using target', target, file=sys.stderr) | 
 | 80 |  | 
 | 81 | # Simple timer functions | 
 | 82 | startTime = None | 
 | 83 | def startTimer(): | 
 | 84 |     global startTime | 
 | 85 |     startTime = time.clock() | 
 | 86 | def endTimer(msg): | 
 | 87 |     global startTime | 
 | 88 |     endTime = time.clock() | 
 | 89 |     if (timeit): | 
 | 90 |         write(msg, endTime - startTime) | 
 | 91 |         startTime = None | 
 | 92 |  | 
 | 93 | # Load & parse registry | 
 | 94 | reg = Registry() | 
 | 95 |  | 
 | 96 | startTimer() | 
 | 97 | tree = etree.parse(regFilename) | 
 | 98 | endTimer('Time to make ElementTree =') | 
 | 99 |  | 
 | 100 | startTimer() | 
 | 101 | reg.loadElementTree(tree) | 
 | 102 | endTimer('Time to parse ElementTree =') | 
 | 103 |  | 
 | 104 | if (validate): | 
 | 105 |     reg.validateGroups() | 
 | 106 |  | 
 | 107 | if (dump): | 
 | 108 |     write('***************************************') | 
 | 109 |     write('Performing Registry dump to regdump.txt') | 
 | 110 |     write('***************************************') | 
 | 111 |     reg.dumpReg(filehandle = open('regdump.txt','w')) | 
 | 112 |  | 
 | 113 | # Turn a list of strings into a regexp string matching exactly those strings | 
 | 114 | def makeREstring(list): | 
 | 115 |     return '^(' + '|'.join(list) + ')$' | 
 | 116 |  | 
 | 117 | # These are "mandatory" OpenGL ES 1 extensions, to | 
 | 118 | # be included in the core GLES/gl.h header. | 
 | 119 | es1CoreList = [ | 
 | 120 |     'GL_OES_read_format', | 
 | 121 |     'GL_OES_compressed_paletted_texture', | 
 | 122 |     'GL_OES_point_size_array', | 
 | 123 |     'GL_OES_point_sprite' | 
 | 124 | ] | 
 | 125 |  | 
 | 126 | # Descriptive names for various regexp patterns used to select | 
 | 127 | # versions and extensions | 
 | 128 |  | 
 | 129 | allVersions     = allExtensions = '.*' | 
 | 130 | noVersions      = noExtensions = None | 
 | 131 | gl12andLaterPat = '1\.[2-9]|[234]\.[0-9]' | 
 | 132 | gles2onlyPat    = '2\.[0-9]' | 
 | 133 | gles2and30Pat   = '2\.[0-9]|3.0' | 
 | 134 | gles2and30and31Pat    = '2.[0-9]|3.[01]' | 
 | 135 | es1CorePat      = makeREstring(es1CoreList) | 
 | 136 | # Extensions in old glcorearb.h but not yet tagged accordingly in gl.xml | 
 | 137 | glCoreARBPat    = None | 
 | 138 | glx13andLaterPat = '1\.[3-9]' | 
 | 139 |  | 
 | 140 | # Copyright text prefixing all headers (list of strings). | 
 | 141 | prefixStrings = [ | 
 | 142 |     '/*', | 
| Pablo Ceballos | 4690754 | 2015-10-27 14:00:42 -0700 | [diff] [blame] | 143 |     '** Copyright (c) 2013-2015 The Khronos Group Inc.', | 
| Jesse Hall | a42788e | 2014-04-21 15:47:51 -0700 | [diff] [blame] | 144 |     '**', | 
 | 145 |     '** Permission is hereby granted, free of charge, to any person obtaining a', | 
 | 146 |     '** copy of this software and/or associated documentation files (the', | 
 | 147 |     '** "Materials"), to deal in the Materials without restriction, including', | 
 | 148 |     '** without limitation the rights to use, copy, modify, merge, publish,', | 
 | 149 |     '** distribute, sublicense, and/or sell copies of the Materials, and to', | 
 | 150 |     '** permit persons to whom the Materials are furnished to do so, subject to', | 
 | 151 |     '** the following conditions:', | 
 | 152 |     '**', | 
 | 153 |     '** The above copyright notice and this permission notice shall be included', | 
 | 154 |     '** in all copies or substantial portions of the Materials.', | 
 | 155 |     '**', | 
 | 156 |     '** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,', | 
 | 157 |     '** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF', | 
 | 158 |     '** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.', | 
 | 159 |     '** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY', | 
 | 160 |     '** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,', | 
 | 161 |     '** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE', | 
 | 162 |     '** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.', | 
 | 163 |     '*/', | 
 | 164 |     '/*', | 
 | 165 |     '** This header is generated from the Khronos OpenGL / OpenGL ES XML', | 
 | 166 |     '** API Registry. The current version of the Registry, generator scripts', | 
 | 167 |     '** used to make the header, and the header can be found at', | 
 | 168 |     '**   http://www.opengl.org/registry/', | 
 | 169 |     '**', | 
 | 170 |     '** Khronos $' + 'Revision$ on $' + 'Date$', | 
 | 171 |     '*/', | 
 | 172 |     '' | 
 | 173 | ] | 
 | 174 |  | 
 | 175 | # glext.h / glcorearb.h define calling conventions inline (no GL *platform.h) | 
 | 176 | glExtPlatformStrings = [ | 
 | 177 |     '#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)', | 
 | 178 |     '#ifndef WIN32_LEAN_AND_MEAN', | 
 | 179 |     '#define WIN32_LEAN_AND_MEAN 1', | 
 | 180 |     '#endif', | 
 | 181 |     '#include <windows.h>', | 
 | 182 |     '#endif', | 
 | 183 |     '', | 
 | 184 |     '#ifndef APIENTRY', | 
 | 185 |     '#define APIENTRY', | 
 | 186 |     '#endif', | 
 | 187 |     '#ifndef APIENTRYP', | 
 | 188 |     '#define APIENTRYP APIENTRY *', | 
 | 189 |     '#endif', | 
 | 190 |     '#ifndef GLAPI', | 
 | 191 |     '#define GLAPI extern', | 
 | 192 |     '#endif', | 
 | 193 |     '' | 
 | 194 | ] | 
 | 195 |  | 
 | 196 | glCorearbPlatformStrings = glExtPlatformStrings + [ | 
 | 197 |     '/* glcorearb.h is for use with OpenGL core profile implementations.', | 
 | 198 |     '** It should should be placed in the same directory as gl.h and', | 
 | 199 |     '** included as <GL/glcorearb.h>.', | 
 | 200 |     '**', | 
 | 201 |     '** glcorearb.h includes only APIs in the latest OpenGL core profile', | 
 | 202 |     '** implementation together with APIs in newer ARB extensions which ', | 
 | 203 |     '** can be supported by the core profile. It does not, and never will', | 
 | 204 |     '** include functionality removed from the core profile, such as', | 
 | 205 |     '** fixed-function vertex and fragment processing.', | 
 | 206 |     '**', | 
 | 207 |     '** Do not #include both <GL/glcorearb.h> and either of <GL/gl.h> or', | 
 | 208 |     '** <GL/glext.h> in the same source file.', | 
 | 209 |     '*/', | 
 | 210 |     '' | 
 | 211 | ] | 
 | 212 |  | 
 | 213 | # wglext.h needs Windows include | 
 | 214 | wglPlatformStrings = [ | 
 | 215 |     '#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)', | 
 | 216 |     '#define WIN32_LEAN_AND_MEAN 1', | 
 | 217 |     '#include <windows.h>', | 
 | 218 |     '#endif', | 
 | 219 |     '', | 
 | 220 | ] | 
 | 221 |  | 
 | 222 | # GLES 1/2/3 core .h have separate *platform.h files to define calling conventions | 
 | 223 | gles1PlatformStrings = [ '#include <GLES/glplatform.h>', '' ] | 
 | 224 | gles2PlatformStrings = [ '#include <GLES2/gl2platform.h>', '' ] | 
 | 225 | gles3PlatformStrings = [ '#include <GLES3/gl3platform.h>', '' ] | 
 | 226 | eglPlatformStrings   = [ '#include <EGL/eglplatform.h>', '' ] | 
 | 227 |  | 
| Pablo Ceballos | 4690754 | 2015-10-27 14:00:42 -0700 | [diff] [blame] | 228 | # GLES headers have a small addition to calling convention headers for function pointer typedefs | 
 | 229 | apiEntryPrefixStrings = [ | 
| Jesse Hall | a42788e | 2014-04-21 15:47:51 -0700 | [diff] [blame] | 230 |     '#ifndef GL_APIENTRYP', | 
 | 231 |     '#define GL_APIENTRYP GL_APIENTRY*', | 
 | 232 |     '#endif', | 
 | 233 |     '' | 
 | 234 | ] | 
 | 235 |  | 
 | 236 | # Insert generation date in a comment for headers not having *GLEXT_VERSION macros | 
 | 237 | genDateCommentString = [ | 
 | 238 |     format("/* Generated on date %s */" % time.strftime("%Y%m%d")), | 
 | 239 |     '' | 
 | 240 | ] | 
 | 241 |  | 
 | 242 | # GL_GLEXT_VERSION is defined only in glext.h | 
 | 243 | glextVersionStrings = [ | 
 | 244 |     format("#define GL_GLEXT_VERSION %s" % time.strftime("%Y%m%d")), | 
 | 245 |     '' | 
 | 246 | ] | 
 | 247 | # WGL_WGLEXT_VERSION is defined only in wglext.h | 
 | 248 | wglextVersionStrings = [ | 
 | 249 |     format("#define WGL_WGLEXT_VERSION %s" % time.strftime("%Y%m%d")), | 
 | 250 |     '' | 
 | 251 | ] | 
 | 252 | # GLX_GLXEXT_VERSION is defined only in glxext.h | 
 | 253 | glxextVersionStrings = [ | 
 | 254 |     format("#define GLX_GLXEXT_VERSION %s" % time.strftime("%Y%m%d")), | 
 | 255 |     '' | 
 | 256 | ] | 
 | 257 | # EGL_EGLEXT_VERSION is defined only in eglext.h | 
 | 258 | eglextVersionStrings = [ | 
 | 259 |     format("#define EGL_EGLEXT_VERSION %s" % time.strftime("%Y%m%d")), | 
 | 260 |     '' | 
 | 261 | ] | 
 | 262 |  | 
 | 263 | # Defaults for generating re-inclusion protection wrappers (or not) | 
 | 264 | protectFile = protect | 
 | 265 | protectFeature = protect | 
 | 266 | protectProto = protect | 
 | 267 |  | 
 | 268 | buildList = [ | 
 | 269 |     # GL API 1.2+ + extensions - GL/glext.h | 
 | 270 |     CGeneratorOptions( | 
 | 271 |         filename          = 'GL/glext.h', | 
 | 272 |         apiname           = 'gl', | 
 | 273 |         profile           = 'compatibility', | 
 | 274 |         versions          = allVersions, | 
 | 275 |         emitversions      = gl12andLaterPat, | 
 | 276 |         defaultExtensions = 'gl',                   # Default extensions for GL | 
 | 277 |         addExtensions     = None, | 
 | 278 |         removeExtensions  = None, | 
 | 279 |         prefixText        = prefixStrings + glExtPlatformStrings + glextVersionStrings, | 
 | 280 |         genFuncPointers   = True, | 
 | 281 |         protectFile       = protectFile, | 
 | 282 |         protectFeature    = protectFeature, | 
 | 283 |         protectProto      = protectProto, | 
 | 284 |         protectProtoStr   = 'GL_GLEXT_PROTOTYPES', | 
 | 285 |         apicall           = 'GLAPI ', | 
 | 286 |         apientry          = 'APIENTRY ', | 
 | 287 |         apientryp         = 'APIENTRYP '), | 
 | 288 |     # GL core profile + extensions - GL/glcorearb.h | 
 | 289 |     CGeneratorOptions( | 
 | 290 |         filename          = 'GL/glcorearb.h', | 
 | 291 |         apiname           = 'gl', | 
 | 292 |         profile           = 'core', | 
 | 293 |         versions          = allVersions, | 
 | 294 |         emitversions      = allVersions, | 
 | 295 |         defaultExtensions = 'glcore',               # Default extensions for GL core profile (only) | 
 | 296 |         addExtensions     = glCoreARBPat, | 
 | 297 |         removeExtensions  = None, | 
 | 298 |         prefixText        = prefixStrings + glCorearbPlatformStrings, | 
 | 299 |         genFuncPointers   = True, | 
 | 300 |         protectFile       = protectFile, | 
 | 301 |         protectFeature    = protectFeature, | 
 | 302 |         protectProto      = protectProto, | 
 | 303 |         protectProtoStr   = 'GL_GLEXT_PROTOTYPES', | 
 | 304 |         apicall           = 'GLAPI ', | 
 | 305 |         apientry          = 'APIENTRY ', | 
 | 306 |         apientryp         = 'APIENTRYP '), | 
 | 307 |     # GLES 1.x API + mandatory extensions - GLES/gl.h (no function pointers) | 
 | 308 |     CGeneratorOptions( | 
 | 309 |         filename          = 'GLES/gl.h', | 
 | 310 |         apiname           = 'gles1', | 
 | 311 |         profile           = 'common', | 
 | 312 |         versions          = allVersions, | 
 | 313 |         emitversions      = allVersions, | 
 | 314 |         defaultExtensions = None,                   # No default extensions | 
 | 315 |         addExtensions     = es1CorePat,             # Add mandatory ES1 extensions in GLES1/gl.h | 
 | 316 |         removeExtensions  = None, | 
 | 317 |         prefixText        = prefixStrings + gles1PlatformStrings + genDateCommentString, | 
 | 318 |         genFuncPointers   = False, | 
 | 319 |         protectFile       = protectFile, | 
 | 320 |         protectFeature    = protectFeature, | 
 | 321 |         protectProto      = False,                  # Core ES API functions are in the static link libraries | 
 | 322 |         protectProtoStr   = 'GL_GLEXT_PROTOTYPES', | 
 | 323 |         apicall           = 'GL_API ', | 
 | 324 |         apientry          = 'GL_APIENTRY ', | 
 | 325 |         apientryp         = 'GL_APIENTRYP '), | 
 | 326 |     # GLES 1.x extensions - GLES/glext.h | 
 | 327 |     CGeneratorOptions( | 
 | 328 |         filename          = 'GLES/glext.h', | 
 | 329 |         apiname           = 'gles1', | 
 | 330 |         profile           = 'common', | 
 | 331 |         versions          = allVersions, | 
 | 332 |         emitversions      = noVersions, | 
 | 333 |         defaultExtensions = 'gles1',                # Default extensions for GLES 1 | 
 | 334 |         addExtensions     = None, | 
 | 335 |         removeExtensions  = es1CorePat,             # Remove mandatory ES1 extensions in GLES1/glext.h | 
| Pablo Ceballos | 4690754 | 2015-10-27 14:00:42 -0700 | [diff] [blame] | 336 |         prefixText        = prefixStrings + apiEntryPrefixStrings + genDateCommentString, | 
| Jesse Hall | a42788e | 2014-04-21 15:47:51 -0700 | [diff] [blame] | 337 |         genFuncPointers   = True, | 
 | 338 |         protectFile       = protectFile, | 
 | 339 |         protectFeature    = protectFeature, | 
 | 340 |         protectProto      = protectProto, | 
 | 341 |         protectProtoStr   = 'GL_GLEXT_PROTOTYPES', | 
 | 342 |         apicall           = 'GL_API ', | 
 | 343 |         apientry          = 'GL_APIENTRY ', | 
 | 344 |         apientryp         = 'GL_APIENTRYP '), | 
| Pablo Ceballos | 4690754 | 2015-10-27 14:00:42 -0700 | [diff] [blame] | 345 |     # GLES 2.0 API - GLES2/gl2.h (now with function pointers) | 
| Jesse Hall | a42788e | 2014-04-21 15:47:51 -0700 | [diff] [blame] | 346 |     CGeneratorOptions( | 
 | 347 |         filename          = 'GLES2/gl2.h', | 
 | 348 |         apiname           = 'gles2', | 
 | 349 |         profile           = 'common', | 
 | 350 |         versions          = gles2onlyPat, | 
 | 351 |         emitversions      = allVersions, | 
 | 352 |         defaultExtensions = None,                   # No default extensions | 
 | 353 |         addExtensions     = None, | 
 | 354 |         removeExtensions  = None, | 
| Pablo Ceballos | 4690754 | 2015-10-27 14:00:42 -0700 | [diff] [blame] | 355 |         prefixText        = prefixStrings + gles2PlatformStrings + apiEntryPrefixStrings + genDateCommentString, | 
 | 356 |         genFuncPointers   = True, | 
| Jesse Hall | a42788e | 2014-04-21 15:47:51 -0700 | [diff] [blame] | 357 |         protectFile       = protectFile, | 
 | 358 |         protectFeature    = protectFeature, | 
| Pablo Ceballos | 4690754 | 2015-10-27 14:00:42 -0700 | [diff] [blame] | 359 |         protectProto      = protectProto,           # Core ES API functions are in the static link libraries | 
| Jesse Hall | a42788e | 2014-04-21 15:47:51 -0700 | [diff] [blame] | 360 |         protectProtoStr   = 'GL_GLEXT_PROTOTYPES', | 
 | 361 |         apicall           = 'GL_APICALL ', | 
 | 362 |         apientry          = 'GL_APIENTRY ', | 
 | 363 |         apientryp         = 'GL_APIENTRYP '), | 
 | 364 |     # GLES 3.1 / 3.0 / 2.0 extensions - GLES2/gl2ext.h | 
 | 365 |     CGeneratorOptions( | 
 | 366 |         filename          = 'GLES2/gl2ext.h', | 
 | 367 |         apiname           = 'gles2', | 
 | 368 |         profile           = 'common', | 
 | 369 |         versions          = gles2onlyPat, | 
 | 370 |         emitversions      = None, | 
 | 371 |         defaultExtensions = 'gles2',                # Default extensions for GLES 2 | 
 | 372 |         addExtensions     = None, | 
 | 373 |         removeExtensions  = None, | 
| Pablo Ceballos | 4690754 | 2015-10-27 14:00:42 -0700 | [diff] [blame] | 374 |         prefixText        = prefixStrings + apiEntryPrefixStrings + genDateCommentString, | 
| Jesse Hall | a42788e | 2014-04-21 15:47:51 -0700 | [diff] [blame] | 375 |         genFuncPointers   = True, | 
 | 376 |         protectFile       = protectFile, | 
 | 377 |         protectFeature    = protectFeature, | 
 | 378 |         protectProto      = protectProto, | 
 | 379 |         protectProtoStr   = 'GL_GLEXT_PROTOTYPES', | 
 | 380 |         apicall           = 'GL_APICALL ', | 
 | 381 |         apientry          = 'GL_APIENTRY ', | 
 | 382 |         apientryp         = 'GL_APIENTRYP '), | 
| Pablo Ceballos | 4690754 | 2015-10-27 14:00:42 -0700 | [diff] [blame] | 383 |     # GLES 3.1 API - GLES3/gl31.h (now with function pointers) | 
| Jesse Hall | a42788e | 2014-04-21 15:47:51 -0700 | [diff] [blame] | 384 |     CGeneratorOptions( | 
 | 385 |         filename          = 'GLES3/gl31.h', | 
 | 386 |         apiname           = 'gles2', | 
 | 387 |         profile           = 'common', | 
 | 388 |         versions          = gles2and30and31Pat, | 
 | 389 |         emitversions      = allVersions, | 
 | 390 |         defaultExtensions = None,                   # No default extensions | 
 | 391 |         addExtensions     = None, | 
 | 392 |         removeExtensions  = None, | 
| Pablo Ceballos | 4690754 | 2015-10-27 14:00:42 -0700 | [diff] [blame] | 393 |         prefixText        = prefixStrings + gles3PlatformStrings + apiEntryPrefixStrings + genDateCommentString, | 
 | 394 |         genFuncPointers   = True, | 
| Jesse Hall | a42788e | 2014-04-21 15:47:51 -0700 | [diff] [blame] | 395 |         protectFile       = protectFile, | 
 | 396 |         protectFeature    = protectFeature, | 
| Pablo Ceballos | 4690754 | 2015-10-27 14:00:42 -0700 | [diff] [blame] | 397 |         protectProto      = protectProto,           # Core ES API functions are in the static link libraries | 
| Jesse Hall | a42788e | 2014-04-21 15:47:51 -0700 | [diff] [blame] | 398 |         protectProtoStr   = 'GL_GLEXT_PROTOTYPES', | 
 | 399 |         apicall           = 'GL_APICALL ', | 
 | 400 |         apientry          = 'GL_APIENTRY ', | 
 | 401 |         apientryp         = 'GL_APIENTRYP '), | 
| Pablo Ceballos | 4690754 | 2015-10-27 14:00:42 -0700 | [diff] [blame] | 402 |     # GLES 3.0 API - GLES3/gl3.h (now with function pointers) | 
| Jesse Hall | a42788e | 2014-04-21 15:47:51 -0700 | [diff] [blame] | 403 |     CGeneratorOptions( | 
 | 404 |         filename          = 'GLES3/gl3.h', | 
 | 405 |         apiname           = 'gles2', | 
 | 406 |         profile           = 'common', | 
 | 407 |         versions          = gles2and30Pat, | 
 | 408 |         emitversions      = allVersions, | 
 | 409 |         defaultExtensions = None,                   # No default extensions | 
 | 410 |         addExtensions     = None, | 
 | 411 |         removeExtensions  = None, | 
| Pablo Ceballos | 4690754 | 2015-10-27 14:00:42 -0700 | [diff] [blame] | 412 |         prefixText        = prefixStrings + gles3PlatformStrings + apiEntryPrefixStrings + genDateCommentString, | 
 | 413 |         genFuncPointers   = True, | 
| Jesse Hall | a42788e | 2014-04-21 15:47:51 -0700 | [diff] [blame] | 414 |         protectFile       = protectFile, | 
 | 415 |         protectFeature    = protectFeature, | 
| Pablo Ceballos | 4690754 | 2015-10-27 14:00:42 -0700 | [diff] [blame] | 416 |         protectProto      = protectProto,           # Core ES API functions are in the static link libraries | 
| Jesse Hall | a42788e | 2014-04-21 15:47:51 -0700 | [diff] [blame] | 417 |         protectProtoStr   = 'GL_GLEXT_PROTOTYPES', | 
 | 418 |         apicall           = 'GL_APICALL ', | 
 | 419 |         apientry          = 'GL_APIENTRY ', | 
 | 420 |         apientryp         = 'GL_APIENTRYP '), | 
 | 421 |     # EGL API - EGL/egl.h (no function pointers, yet @@@) | 
 | 422 |     CGeneratorOptions( | 
 | 423 |         filename          = 'EGL/egl.h', | 
 | 424 |         apiname           = 'egl', | 
 | 425 |         profile           = None, | 
 | 426 |         versions          = allVersions, | 
 | 427 |         emitversions      = allVersions, | 
 | 428 |         defaultExtensions = None,                   # No default extensions | 
 | 429 |         addExtensions     = None, | 
 | 430 |         removeExtensions  = None, | 
 | 431 |         prefixText        = prefixStrings + eglPlatformStrings + genDateCommentString, | 
 | 432 |         genFuncPointers   = False, | 
 | 433 |         protectFile       = protectFile, | 
 | 434 |         protectFeature    = protectFeature, | 
 | 435 |         protectProto      = False, | 
 | 436 |         protectProtoStr   = 'EGL_EGLEXT_PROTOTYPES', | 
 | 437 |         apicall           = 'EGLAPI ', | 
 | 438 |         apientry          = 'EGLAPIENTRY ', | 
 | 439 |         apientryp         = 'EGLAPIENTRYP '), | 
 | 440 |     # EGL extensions - EGL/eglext.h (no function pointers, yet @@@) | 
 | 441 |     CGeneratorOptions( | 
 | 442 |         filename          = 'EGL/eglext.h', | 
 | 443 |         apiname           = 'egl', | 
 | 444 |         profile           = None, | 
 | 445 |         versions          = allVersions, | 
 | 446 |         emitversions      = None, | 
 | 447 |         defaultExtensions = 'egl',                  # Default extensions for EGL | 
 | 448 |         addExtensions     = None, | 
 | 449 |         removeExtensions  = None, | 
 | 450 |         prefixText        = prefixStrings + eglPlatformStrings + eglextVersionStrings, | 
 | 451 |         genFuncPointers   = True, | 
 | 452 |         protectFile       = protectFile, | 
 | 453 |         protectFeature    = protectFeature, | 
 | 454 |         protectProto      = protectProto, | 
 | 455 |         protectProtoStr   = 'EGL_EGLEXT_PROTOTYPES', | 
 | 456 |         apicall           = 'EGLAPI ', | 
 | 457 |         apientry          = 'EGLAPIENTRY ', | 
 | 458 |         apientryp         = 'EGLAPIENTRYP '), | 
 | 459 |     # GLX 1.* API - GL/glx.h | 
 | 460 |     CGeneratorOptions( | 
 | 461 |         filename          = 'GL/glx.h', | 
 | 462 |         apiname           = 'glx', | 
 | 463 |         profile           = None, | 
 | 464 |         versions          = allVersions, | 
 | 465 |         emitversions      = allVersions, | 
 | 466 |         defaultExtensions = None,                   # No default extensions | 
 | 467 |         addExtensions     = None, | 
 | 468 |         removeExtensions  = None, | 
 | 469 |         # add glXPlatformStrings? | 
 | 470 |         prefixText        = prefixStrings + genDateCommentString, | 
 | 471 |         genFuncPointers   = True, | 
 | 472 |         protectFile       = protectFile, | 
 | 473 |         protectFeature    = protectFeature, | 
 | 474 |         protectProto      = protectProto, | 
 | 475 |         protectProtoStr   = 'GLX_GLXEXT_PROTOTYPES', | 
 | 476 |         apicall           = '', | 
 | 477 |         apientry          = '', | 
 | 478 |         apientryp         = ' *'), | 
 | 479 |     # GLX 1.3+ API + extensions - GL/glxext.h (no function pointers, yet @@@) | 
 | 480 |     CGeneratorOptions( | 
 | 481 |         filename          = 'GL/glxext.h', | 
 | 482 |         apiname           = 'glx', | 
 | 483 |         profile           = None, | 
 | 484 |         versions          = allVersions, | 
 | 485 |         emitversions      = glx13andLaterPat, | 
 | 486 |         defaultExtensions = 'glx',                  # Default extensions for GLX | 
 | 487 |         addExtensions     = None, | 
 | 488 |         removeExtensions  = None, | 
 | 489 |         # add glXPlatformStrings? | 
 | 490 |         prefixText        = prefixStrings + glxextVersionStrings, | 
 | 491 |         genFuncPointers   = True, | 
 | 492 |         protectFile       = protectFile, | 
 | 493 |         protectFeature    = protectFeature, | 
 | 494 |         protectProto      = protectProto, | 
 | 495 |         protectProtoStr   = 'GLX_GLXEXT_PROTOTYPES', | 
 | 496 |         apicall           = '', | 
 | 497 |         apientry          = '', | 
 | 498 |         apientryp         = ' *'), | 
 | 499 |     # WGL API + extensions - GL/wgl.h (no function pointers, yet @@@) | 
 | 500 |     CGeneratorOptions( | 
 | 501 |         filename          = 'GL/wgl.h', | 
 | 502 |         apiname           = 'wgl', | 
 | 503 |         profile           = None, | 
 | 504 |         versions          = allVersions, | 
 | 505 |         emitversions      = allVersions, | 
 | 506 |         defaultExtensions = 'wgl',                  # Default extensions for WGL | 
 | 507 |         addExtensions     = None, | 
 | 508 |         removeExtensions  = None, | 
 | 509 |         prefixText        = prefixStrings + wglPlatformStrings + genDateCommentString, | 
 | 510 |         genFuncPointers   = True, | 
 | 511 |         protectFile       = protectFile, | 
 | 512 |         protectFeature    = protectFeature, | 
 | 513 |         protectProto      = protectProto, | 
 | 514 |         protectProtoStr   = 'WGL_WGLEXT_PROTOTYPES', | 
 | 515 |         apicall           = '', | 
 | 516 |         apientry          = 'WINAPI ', | 
 | 517 |         apientryp         = 'WINAPI * '), | 
 | 518 |     # WGL extensions - GL/wglext.h (no function pointers, yet @@@) | 
 | 519 |     CGeneratorOptions( | 
 | 520 |         filename          = 'GL/wglext.h', | 
 | 521 |         apiname           = 'wgl', | 
 | 522 |         profile           = None, | 
 | 523 |         versions          = allVersions, | 
 | 524 |         emitversions      = None, | 
 | 525 |         defaultExtensions = 'wgl',                  # Default extensions for WGL | 
 | 526 |         addExtensions     = None, | 
 | 527 |         removeExtensions  = None, | 
 | 528 |         prefixText        = prefixStrings + wglPlatformStrings + wglextVersionStrings, | 
 | 529 |         genFuncPointers   = True, | 
 | 530 |         protectFile       = protectFile, | 
 | 531 |         protectFeature    = protectFeature, | 
 | 532 |         protectProto      = protectProto, | 
 | 533 |         protectProtoStr   = 'WGL_WGLEXT_PROTOTYPES', | 
 | 534 |         apicall           = '', | 
 | 535 |         apientry          = 'WINAPI ', | 
 | 536 |         apientryp         = 'WINAPI * '), | 
 | 537 |     # End of list | 
 | 538 |     None | 
 | 539 | ] | 
 | 540 |  | 
 | 541 | # create error/warning & diagnostic files | 
 | 542 | if (errFilename): | 
 | 543 |     errWarn = open(errFilename,'w') | 
 | 544 | else: | 
 | 545 |     errWarn = sys.stderr | 
 | 546 | diag = open(diagFilename, 'w') | 
 | 547 |  | 
 | 548 | def genHeaders(): | 
 | 549 |     # Loop over targets, building each | 
 | 550 |     generated = 0 | 
 | 551 |     for genOpts in buildList: | 
 | 552 |         if (genOpts == None): | 
 | 553 |             break | 
 | 554 |         if (target and target != genOpts.filename): | 
 | 555 |             # write('*** Skipping', genOpts.filename) | 
 | 556 |             continue | 
 | 557 |         write('*** Building', genOpts.filename) | 
 | 558 |         generated = generated + 1 | 
 | 559 |         startTimer() | 
 | 560 |         gen = COutputGenerator(errFile=errWarn, | 
 | 561 |                                warnFile=errWarn, | 
 | 562 |                                diagFile=diag) | 
 | 563 |         reg.setGenerator(gen) | 
 | 564 |         reg.apiGen(genOpts) | 
 | 565 |         write('** Generated', genOpts.filename) | 
 | 566 |         endTimer('Time to generate ' + genOpts.filename + ' =') | 
 | 567 |     if (target and generated == 0): | 
 | 568 |         write('Failed to generate target:', target) | 
 | 569 |  | 
 | 570 | if (debug): | 
 | 571 |     pdb.run('genHeaders()') | 
 | 572 | elif (profile): | 
 | 573 |     import cProfile, pstats | 
 | 574 |     cProfile.run('genHeaders()', 'profile.txt') | 
 | 575 |     p = pstats.Stats('profile.txt') | 
 | 576 |     p.strip_dirs().sort_stats('time').print_stats(50) | 
 | 577 | else: | 
 | 578 |     genHeaders() |