@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
for header in glcorearb.h glext.h gl.h ; do
|
||||||
|
./genglvnd.py -registry drafts/GL/gl.xml drafts/GL/$header
|
||||||
|
done
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
// Copyright 2017-2021 The Khronos Group Inc.
|
||||||
|
// SPDX-License-Identifier: CC-BY-4.0
|
||||||
|
|
||||||
|
# OpenGL XML API Registry
|
||||||
|
|
||||||
|
This directory contains the OpenGL, GLX, and WGL XML API registries, in
|
||||||
|
gl.xml, glx.xml, and wgl.xml respectively. They are used to reserve
|
||||||
|
enumerant ranges for vendors working on new extensions, to register
|
||||||
|
extension interfaces when an extension is published, and to generate the
|
||||||
|
Khronos-supplied header files in ../api .
|
||||||
|
|
||||||
|
The canonical versions are always found in the master branch of the github
|
||||||
|
repository at https://github.com/KhronosGroup/OpenGL-Registry
|
||||||
|
|
||||||
|
The 'validate' Makefile target uses the 'jing' tool to confirm that each XML
|
||||||
|
file is structurally valid and conforms to the registry schema in
|
||||||
|
registry.rnc. The schema is described in detail in readme.pdf.
|
||||||
|
|
||||||
|
The 'default' Makefile target generates updated headers in ../api/ from the
|
||||||
|
XML files.
|
||||||
|
|
||||||
|
Note that while there are targets for ../api/{gl.h,glx.h,wgl.h} in
|
||||||
|
genglvnd.py and genheaders.py, these targets are not generated by default
|
||||||
|
and are experimental. At present, you should use the versions of these
|
||||||
|
headers shipped with your OS or IHV SDK.
|
||||||
@@ -0,0 +1,628 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
#
|
||||||
|
# Copyright 2013-2025 The Khronos Group Inc.
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
import sys, time, pdb, string, cProfile
|
||||||
|
from reg import *
|
||||||
|
|
||||||
|
# debug - start header generation in debugger
|
||||||
|
# dump - dump registry after loading
|
||||||
|
# profile - enable Python profiling
|
||||||
|
# protect - whether to use #ifndef protections
|
||||||
|
# registry <filename> - use specified XML registry instead of gl.xml
|
||||||
|
# target - string name of target header, or all targets if None
|
||||||
|
# timeit - time length of registry loading & header generation
|
||||||
|
# validate - validate return & parameter group tags against <group>
|
||||||
|
debug = False
|
||||||
|
dump = False
|
||||||
|
profile = False
|
||||||
|
protect = True
|
||||||
|
target = None
|
||||||
|
timeit = False
|
||||||
|
validate= False
|
||||||
|
# Default input / log files
|
||||||
|
errFilename = None
|
||||||
|
diagFilename = 'diag.txt'
|
||||||
|
regFilename = 'gl.xml'
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
i = 1
|
||||||
|
while (i < len(sys.argv)):
|
||||||
|
arg = sys.argv[i]
|
||||||
|
i = i + 1
|
||||||
|
if (arg == '-debug'):
|
||||||
|
write('Enabling debug (-debug)', file=sys.stderr)
|
||||||
|
debug = True
|
||||||
|
elif (arg == '-dump'):
|
||||||
|
write('Enabling dump (-dump)', file=sys.stderr)
|
||||||
|
dump = True
|
||||||
|
elif (arg == '-noprotect'):
|
||||||
|
write('Disabling inclusion protection in output headers', file=sys.stderr)
|
||||||
|
protect = False
|
||||||
|
elif (arg == '-profile'):
|
||||||
|
write('Enabling profiling (-profile)', file=sys.stderr)
|
||||||
|
profile = True
|
||||||
|
elif (arg == '-registry'):
|
||||||
|
regFilename = sys.argv[i]
|
||||||
|
i = i+1
|
||||||
|
write('Using registry ', regFilename, file=sys.stderr)
|
||||||
|
elif (arg == '-time'):
|
||||||
|
write('Enabling timing (-time)', file=sys.stderr)
|
||||||
|
timeit = True
|
||||||
|
elif (arg == '-validate'):
|
||||||
|
write('Enabling group validation (-validate)', file=sys.stderr)
|
||||||
|
validate = True
|
||||||
|
elif (arg[0:1] == '-'):
|
||||||
|
write('Unrecognized argument:', arg, file=sys.stderr)
|
||||||
|
exit(1)
|
||||||
|
else:
|
||||||
|
target = arg
|
||||||
|
write('Using target', target, file=sys.stderr)
|
||||||
|
|
||||||
|
# Simple timer functions
|
||||||
|
startTime = None
|
||||||
|
def startTimer():
|
||||||
|
global startTime
|
||||||
|
startTime = time.process_time()
|
||||||
|
def endTimer(msg):
|
||||||
|
global startTime
|
||||||
|
endTime = time.process_time()
|
||||||
|
if (timeit):
|
||||||
|
write(msg, endTime - startTime)
|
||||||
|
startTime = None
|
||||||
|
|
||||||
|
# Load & parse registry
|
||||||
|
reg = Registry()
|
||||||
|
|
||||||
|
startTimer()
|
||||||
|
tree = etree.parse(regFilename)
|
||||||
|
endTimer('Time to make ElementTree =')
|
||||||
|
|
||||||
|
startTimer()
|
||||||
|
reg.loadElementTree(tree)
|
||||||
|
endTimer('Time to parse ElementTree =')
|
||||||
|
|
||||||
|
if (validate):
|
||||||
|
reg.validateGroups()
|
||||||
|
|
||||||
|
if (dump):
|
||||||
|
write('***************************************')
|
||||||
|
write('Performing Registry dump to regdump.txt')
|
||||||
|
write('***************************************')
|
||||||
|
reg.dumpReg(filehandle = open('regdump.txt','w'))
|
||||||
|
|
||||||
|
# Turn a list of strings into a regexp string matching exactly those strings
|
||||||
|
def makeREstring(list):
|
||||||
|
return '^(' + '|'.join(list) + ')$'
|
||||||
|
|
||||||
|
# These are "mandatory" OpenGL ES 1 extensions, to
|
||||||
|
# be included in the core GLES/gl.h header.
|
||||||
|
es1CoreList = [
|
||||||
|
'GL_OES_read_format',
|
||||||
|
'GL_OES_compressed_paletted_texture',
|
||||||
|
'GL_OES_point_size_array',
|
||||||
|
'GL_OES_point_sprite'
|
||||||
|
]
|
||||||
|
|
||||||
|
# These are extensions to be included in the libglvnd GL/gl.h header.
|
||||||
|
glVndList = [
|
||||||
|
'GL_ARB_imaging',
|
||||||
|
'GL_ARB_multitexture'
|
||||||
|
]
|
||||||
|
|
||||||
|
# Descriptive names for various regexp patterns used to select
|
||||||
|
# versions and extensions
|
||||||
|
|
||||||
|
allVersions = allExtensions = '.*'
|
||||||
|
noVersions = noExtensions = None
|
||||||
|
gl13Pat = r'1\.[0-3]'
|
||||||
|
gl12andLaterPat = r'1\.[2-9]|[234]\.[0-9]'
|
||||||
|
gles2onlyPat = r'2\.[0-9]'
|
||||||
|
gles2through30Pat = r'2\.[0-9]|3\.0'
|
||||||
|
gles2through31Pat = r'2\.[0-9]|3\.[01]'
|
||||||
|
gles2through32Pat = r'2\.[0-9]|3\.[012]'
|
||||||
|
es1CorePat = makeREstring(es1CoreList)
|
||||||
|
glVndPat = makeREstring(glVndList)
|
||||||
|
|
||||||
|
# Extensions in old glcorearb.h but not yet tagged accordingly in gl.xml
|
||||||
|
glCoreARBPat = None
|
||||||
|
glx13andLaterPat = r'1\.[3-9]'
|
||||||
|
|
||||||
|
# Copyright text prefixing all headers (list of strings).
|
||||||
|
prefixStrings = [
|
||||||
|
'/*',
|
||||||
|
'** Copyright 2013-2025 The Khronos Group Inc.',
|
||||||
|
'** SPDX-' + 'License-Identifier: MIT',
|
||||||
|
'**',
|
||||||
|
'** This header is generated from the Khronos OpenGL / OpenGL ES XML',
|
||||||
|
'** API Registry. The current version of the Registry, generator scripts',
|
||||||
|
'** used to make the header, and the header can be found at',
|
||||||
|
'** https://github.com/KhronosGroup/OpenGL-Registry',
|
||||||
|
'*/',
|
||||||
|
''
|
||||||
|
]
|
||||||
|
|
||||||
|
# glext.h / glcorearb.h define calling conventions inline (no GL *platform.h)
|
||||||
|
glExtPlatformStrings = [
|
||||||
|
'#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)',
|
||||||
|
'#ifndef WIN32_LEAN_AND_MEAN',
|
||||||
|
'#define WIN32_LEAN_AND_MEAN 1',
|
||||||
|
'#endif',
|
||||||
|
'#include <windows.h>',
|
||||||
|
'#endif',
|
||||||
|
'',
|
||||||
|
'#ifndef APIENTRY',
|
||||||
|
'#define APIENTRY',
|
||||||
|
'#endif',
|
||||||
|
'#ifndef APIENTRYP',
|
||||||
|
'#define APIENTRYP APIENTRY *',
|
||||||
|
'#endif',
|
||||||
|
'#ifndef GLAPI',
|
||||||
|
'#define GLAPI extern',
|
||||||
|
'#endif',
|
||||||
|
''
|
||||||
|
]
|
||||||
|
|
||||||
|
glCorearbPlatformStrings = glExtPlatformStrings + [
|
||||||
|
'/* glcorearb.h is for use with OpenGL core profile implementations.',
|
||||||
|
'** It should should be placed in the same directory as gl.h and',
|
||||||
|
'** included as <GL/glcorearb.h>.',
|
||||||
|
'**',
|
||||||
|
'** glcorearb.h includes only APIs in the latest OpenGL core profile',
|
||||||
|
'** implementation together with APIs in newer ARB extensions which ',
|
||||||
|
'** can be supported by the core profile. It does not, and never will',
|
||||||
|
'** include functionality removed from the core profile, such as',
|
||||||
|
'** fixed-function vertex and fragment processing.',
|
||||||
|
'**',
|
||||||
|
'** Do not #include both <GL/glcorearb.h> and either of <GL/gl.h> or',
|
||||||
|
'** <GL/glext.h> in the same source file.',
|
||||||
|
'*/',
|
||||||
|
''
|
||||||
|
]
|
||||||
|
|
||||||
|
# wglext.h needs Windows include
|
||||||
|
wglPlatformStrings = [
|
||||||
|
'#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)',
|
||||||
|
'#define WIN32_LEAN_AND_MEAN 1',
|
||||||
|
'#include <windows.h>',
|
||||||
|
'#endif',
|
||||||
|
'',
|
||||||
|
]
|
||||||
|
|
||||||
|
# Different APIs use different *platform.h files to define calling
|
||||||
|
# conventions
|
||||||
|
glPlatformStrings = [ '#include <GL/glplatform.h>', '' ]
|
||||||
|
gles1PlatformStrings = [ '#include <GLES/glplatform.h>', '' ]
|
||||||
|
gles2PlatformStrings = [ '#include <GLES2/gl2platform.h>', '' ]
|
||||||
|
gles3PlatformStrings = [ '#include <GLES3/gl3platform.h>', '' ]
|
||||||
|
glsc2PlatformStrings = [ '#include <GLSC2/gl2platform.h>', '' ]
|
||||||
|
eglPlatformStrings = [ '#include <EGL/eglplatform.h>', '' ]
|
||||||
|
|
||||||
|
# GLES headers have a small addition to calling convention headers for function pointer typedefs
|
||||||
|
apiEntryPrefixStrings = [
|
||||||
|
'#ifndef GL_APIENTRYP',
|
||||||
|
'#define GL_APIENTRYP GL_APIENTRY*',
|
||||||
|
'#endif',
|
||||||
|
''
|
||||||
|
]
|
||||||
|
|
||||||
|
# Insert generation date in a comment for headers not having *GLEXT_VERSION macros
|
||||||
|
genDateCommentString = [
|
||||||
|
format("/* Generated on date %s */" % time.strftime("%Y%m%d")),
|
||||||
|
''
|
||||||
|
]
|
||||||
|
|
||||||
|
# GL_GLEXT_VERSION is defined only in glext.h and gl2ext.h
|
||||||
|
glextVersionStrings = [
|
||||||
|
format("#define GL_GLEXT_VERSION %s" % time.strftime("%Y%m%d")),
|
||||||
|
''
|
||||||
|
]
|
||||||
|
# WGL_WGLEXT_VERSION is defined only in wglext.h
|
||||||
|
wglextVersionStrings = [
|
||||||
|
format("#define WGL_WGLEXT_VERSION %s" % time.strftime("%Y%m%d")),
|
||||||
|
''
|
||||||
|
]
|
||||||
|
# GLX_GLXEXT_VERSION is defined only in glxext.h
|
||||||
|
glxextVersionStrings = [
|
||||||
|
format("#define GLX_GLXEXT_VERSION %s" % time.strftime("%Y%m%d")),
|
||||||
|
''
|
||||||
|
]
|
||||||
|
# EGL_EGLEXT_VERSION is defined only in eglext.h
|
||||||
|
eglextVersionStrings = [
|
||||||
|
format("#define EGL_EGLEXT_VERSION %s" % time.strftime("%Y%m%d")),
|
||||||
|
''
|
||||||
|
]
|
||||||
|
|
||||||
|
# Defaults for generating re-inclusion protection wrappers (or not)
|
||||||
|
protectFile = protect
|
||||||
|
protectFeature = protect
|
||||||
|
protectProto = protect
|
||||||
|
|
||||||
|
buildList = [
|
||||||
|
# GL API 1.2+ + extensions - GL/glext.h
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = 'drafts/GL/glext.h',
|
||||||
|
apiname = 'gl',
|
||||||
|
profile = 'compatibility',
|
||||||
|
versions = allVersions,
|
||||||
|
emitversions = gl12andLaterPat,
|
||||||
|
defaultExtensions = 'gl', # Default extensions for GL
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + glExtPlatformStrings + glextVersionStrings,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = protectProto,
|
||||||
|
protectProtoStr = 'GL_GLEXT_PROTOTYPES',
|
||||||
|
apicall = 'GLAPI ',
|
||||||
|
apientry = 'APIENTRY ',
|
||||||
|
apientryp = 'APIENTRYP '),
|
||||||
|
# GL compatibility profile through GL 1.3 (for libglvnd) - GL/gl.h
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = 'drafts/GL/gl.h',
|
||||||
|
apiname = 'gl',
|
||||||
|
profile = 'compatibility',
|
||||||
|
versions = allVersions,
|
||||||
|
emitversions = gl13Pat,
|
||||||
|
defaultExtensions = None, # No extensions for gl.h
|
||||||
|
addExtensions = glVndPat,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + glPlatformStrings,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = False, # gl.h always includes prototypes
|
||||||
|
protectProtoStr = 'GL_GLEXT_PROTOTYPES',
|
||||||
|
apicall = 'GLAPI ',
|
||||||
|
apientry = 'APIENTRY ',
|
||||||
|
apientryp = 'APIENTRYP '),
|
||||||
|
# GL core profile + extensions - GL/glcorearb.h
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = 'drafts/GL/glcorearb.h',
|
||||||
|
apiname = 'gl',
|
||||||
|
profile = 'core',
|
||||||
|
versions = allVersions,
|
||||||
|
emitversions = allVersions,
|
||||||
|
defaultExtensions = 'glcore', # Default extensions for GL core profile (only)
|
||||||
|
addExtensions = glCoreARBPat,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + glCorearbPlatformStrings,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = protectProto,
|
||||||
|
protectProtoStr = 'GL_GLEXT_PROTOTYPES',
|
||||||
|
apicall = 'GLAPI ',
|
||||||
|
apientry = 'APIENTRY ',
|
||||||
|
apientryp = 'APIENTRYP '),
|
||||||
|
# GLES 1.x API + mandatory extensions - GLES/gl.h (no function pointers)
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = 'GLES/gl.h',
|
||||||
|
apiname = 'gles1',
|
||||||
|
profile = 'common',
|
||||||
|
versions = allVersions,
|
||||||
|
emitversions = allVersions,
|
||||||
|
defaultExtensions = None, # No default extensions
|
||||||
|
addExtensions = es1CorePat, # Add mandatory ES1 extensions in GLES1/gl.h
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + gles1PlatformStrings + genDateCommentString,
|
||||||
|
genFuncPointers = False,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = False, # Core ES API functions are in the static link libraries
|
||||||
|
protectProtoStr = 'GL_GLEXT_PROTOTYPES',
|
||||||
|
apicall = 'GL_API ',
|
||||||
|
apientry = 'GL_APIENTRY ',
|
||||||
|
apientryp = 'GL_APIENTRYP '),
|
||||||
|
# GLES 1.x extensions - GLES/glext.h
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = 'GLES/glext.h',
|
||||||
|
apiname = 'gles1',
|
||||||
|
profile = 'common',
|
||||||
|
versions = allVersions,
|
||||||
|
emitversions = noVersions,
|
||||||
|
defaultExtensions = 'gles1', # Default extensions for GLES 1
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = es1CorePat, # Remove mandatory ES1 extensions in GLES1/glext.h
|
||||||
|
prefixText = prefixStrings + apiEntryPrefixStrings + genDateCommentString,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = protectProto,
|
||||||
|
protectProtoStr = 'GL_GLEXT_PROTOTYPES',
|
||||||
|
apicall = 'GL_API ',
|
||||||
|
apientry = 'GL_APIENTRY ',
|
||||||
|
apientryp = 'GL_APIENTRYP '),
|
||||||
|
# GLES 2.0 API - GLES2/gl2.h (now with function pointers)
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = 'GLES2/gl2.h',
|
||||||
|
apiname = 'gles2',
|
||||||
|
profile = 'common',
|
||||||
|
versions = gles2onlyPat,
|
||||||
|
emitversions = allVersions,
|
||||||
|
defaultExtensions = None, # No default extensions
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + gles2PlatformStrings + apiEntryPrefixStrings + genDateCommentString,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = protectProto, # Core ES API functions are in the static link libraries
|
||||||
|
protectProtoStr = 'GL_GLEXT_PROTOTYPES',
|
||||||
|
apicall = 'GL_APICALL ',
|
||||||
|
apientry = 'GL_APIENTRY ',
|
||||||
|
apientryp = 'GL_APIENTRYP '),
|
||||||
|
# GLES 3.1 / 3.0 / 2.0 extensions - GLES2/gl2ext.h
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = 'GLES2/gl2ext.h',
|
||||||
|
apiname = 'gles2',
|
||||||
|
profile = 'common',
|
||||||
|
versions = gles2onlyPat,
|
||||||
|
emitversions = None,
|
||||||
|
defaultExtensions = 'gles2', # Default extensions for GLES 2
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + apiEntryPrefixStrings + glextVersionStrings,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = protectProto,
|
||||||
|
protectProtoStr = 'GL_GLEXT_PROTOTYPES',
|
||||||
|
apicall = 'GL_APICALL ',
|
||||||
|
apientry = 'GL_APIENTRY ',
|
||||||
|
apientryp = 'GL_APIENTRYP '),
|
||||||
|
# GLES 3.2 API - GLES3/gl32.h (now with function pointers)
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = 'GLES3/gl32.h',
|
||||||
|
apiname = 'gles2',
|
||||||
|
profile = 'common',
|
||||||
|
versions = gles2through32Pat,
|
||||||
|
emitversions = allVersions,
|
||||||
|
defaultExtensions = None, # No default extensions
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + gles3PlatformStrings + apiEntryPrefixStrings + genDateCommentString,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = protectProto, # Core ES API functions are in the static link libraries
|
||||||
|
protectProtoStr = 'GL_GLEXT_PROTOTYPES',
|
||||||
|
apicall = 'GL_APICALL ',
|
||||||
|
apientry = 'GL_APIENTRY ',
|
||||||
|
apientryp = 'GL_APIENTRYP '),
|
||||||
|
# GLES 3.1 API - GLES3/gl31.h (now with function pointers)
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = 'GLES3/gl31.h',
|
||||||
|
apiname = 'gles2',
|
||||||
|
profile = 'common',
|
||||||
|
versions = gles2through31Pat,
|
||||||
|
emitversions = allVersions,
|
||||||
|
defaultExtensions = None, # No default extensions
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + gles3PlatformStrings + apiEntryPrefixStrings + genDateCommentString,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = protectProto, # Core ES API functions are in the static link libraries
|
||||||
|
protectProtoStr = 'GL_GLEXT_PROTOTYPES',
|
||||||
|
apicall = 'GL_APICALL ',
|
||||||
|
apientry = 'GL_APIENTRY ',
|
||||||
|
apientryp = 'GL_APIENTRYP '),
|
||||||
|
# GLES 3.0 API - GLES3/gl3.h (now with function pointers)
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = 'GLES3/gl3.h',
|
||||||
|
apiname = 'gles2',
|
||||||
|
profile = 'common',
|
||||||
|
versions = gles2through30Pat,
|
||||||
|
emitversions = allVersions,
|
||||||
|
defaultExtensions = None, # No default extensions
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + gles3PlatformStrings + apiEntryPrefixStrings + genDateCommentString,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = protectProto, # Core ES API functions are in the static link libraries
|
||||||
|
protectProtoStr = 'GL_GLEXT_PROTOTYPES',
|
||||||
|
apicall = 'GL_APICALL ',
|
||||||
|
apientry = 'GL_APIENTRY ',
|
||||||
|
apientryp = 'GL_APIENTRYP '),
|
||||||
|
# GLSC 2.0 API - GLSC2/glsc2.h
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = 'GLSC2/glsc2.h',
|
||||||
|
apiname = 'glsc2',
|
||||||
|
profile = 'common',
|
||||||
|
versions = gles2onlyPat,
|
||||||
|
emitversions = allVersions,
|
||||||
|
defaultExtensions = None, # No default extensions
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + glsc2PlatformStrings + apiEntryPrefixStrings + genDateCommentString,
|
||||||
|
genFuncPointers = False,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = False,
|
||||||
|
protectProtoStr = 'GL_GLEXT_PROTOTYPES',
|
||||||
|
apicall = 'GL_APICALL ',
|
||||||
|
apientry = 'GL_APIENTRY ',
|
||||||
|
apientryp = 'GL_APIENTRYP '),
|
||||||
|
# GLSC 2.0 extensions - GLSC2/gl2ext.h
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = 'GLSC2/glsc2ext.h',
|
||||||
|
apiname = 'glsc2',
|
||||||
|
profile = 'common',
|
||||||
|
versions = gles2onlyPat,
|
||||||
|
emitversions = None,
|
||||||
|
defaultExtensions = 'glsc2', # Default extensions for GLSC 2
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + apiEntryPrefixStrings + genDateCommentString,
|
||||||
|
genFuncPointers = False,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = False,
|
||||||
|
protectProtoStr = 'GL_GLEXT_PROTOTYPES',
|
||||||
|
apicall = 'GL_APICALL ',
|
||||||
|
apientry = 'GL_APIENTRY ',
|
||||||
|
apientryp = 'GL_APIENTRYP '),
|
||||||
|
# EGL API - EGL/egl.h (no function pointers, yet @@@)
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = 'EGL/egl.h',
|
||||||
|
apiname = 'egl',
|
||||||
|
profile = None,
|
||||||
|
versions = allVersions,
|
||||||
|
emitversions = allVersions,
|
||||||
|
defaultExtensions = None, # No default extensions
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + eglPlatformStrings + genDateCommentString,
|
||||||
|
genFuncPointers = False,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = False,
|
||||||
|
protectProtoStr = 'EGL_EGLEXT_PROTOTYPES',
|
||||||
|
apicall = 'EGLAPI ',
|
||||||
|
apientry = 'EGLAPIENTRY ',
|
||||||
|
apientryp = 'EGLAPIENTRYP '),
|
||||||
|
# EGL extensions - EGL/eglext.h (no function pointers, yet @@@)
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = 'EGL/eglext.h',
|
||||||
|
apiname = 'egl',
|
||||||
|
profile = None,
|
||||||
|
versions = allVersions,
|
||||||
|
emitversions = None,
|
||||||
|
defaultExtensions = 'egl', # Default extensions for EGL
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + eglPlatformStrings + eglextVersionStrings,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = protectProto,
|
||||||
|
protectProtoStr = 'EGL_EGLEXT_PROTOTYPES',
|
||||||
|
apicall = 'EGLAPI ',
|
||||||
|
apientry = 'EGLAPIENTRY ',
|
||||||
|
apientryp = 'EGLAPIENTRYP '),
|
||||||
|
# GLX 1.* API - GL/glx.h
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = 'GL/glx.h',
|
||||||
|
apiname = 'glx',
|
||||||
|
profile = None,
|
||||||
|
versions = allVersions,
|
||||||
|
emitversions = allVersions,
|
||||||
|
defaultExtensions = None, # No default extensions
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
# add glXPlatformStrings?
|
||||||
|
prefixText = prefixStrings + genDateCommentString,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = protectProto,
|
||||||
|
protectProtoStr = 'GLX_GLXEXT_PROTOTYPES',
|
||||||
|
apicall = '',
|
||||||
|
apientry = '',
|
||||||
|
apientryp = ' *'),
|
||||||
|
# GLX 1.3+ API + extensions - GL/glxext.h (no function pointers, yet @@@)
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = 'GL/glxext.h',
|
||||||
|
apiname = 'glx',
|
||||||
|
profile = None,
|
||||||
|
versions = allVersions,
|
||||||
|
emitversions = glx13andLaterPat,
|
||||||
|
defaultExtensions = 'glx', # Default extensions for GLX
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
# add glXPlatformStrings?
|
||||||
|
prefixText = prefixStrings + glxextVersionStrings,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = protectProto,
|
||||||
|
protectProtoStr = 'GLX_GLXEXT_PROTOTYPES',
|
||||||
|
apicall = '',
|
||||||
|
apientry = '',
|
||||||
|
apientryp = ' *'),
|
||||||
|
# WGL API + extensions - GL/wgl.h (no function pointers, yet @@@)
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = 'GL/wgl.h',
|
||||||
|
apiname = 'wgl',
|
||||||
|
profile = None,
|
||||||
|
versions = allVersions,
|
||||||
|
emitversions = allVersions,
|
||||||
|
defaultExtensions = 'wgl', # Default extensions for WGL
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + wglPlatformStrings + genDateCommentString,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = protectProto,
|
||||||
|
protectProtoStr = 'WGL_WGLEXT_PROTOTYPES',
|
||||||
|
apicall = '',
|
||||||
|
apientry = 'WINAPI ',
|
||||||
|
apientryp = 'WINAPI * '),
|
||||||
|
# WGL extensions - GL/wglext.h (no function pointers, yet @@@)
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = 'GL/wglext.h',
|
||||||
|
apiname = 'wgl',
|
||||||
|
profile = None,
|
||||||
|
versions = allVersions,
|
||||||
|
emitversions = None,
|
||||||
|
defaultExtensions = 'wgl', # Default extensions for WGL
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + wglPlatformStrings + wglextVersionStrings,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = protectProto,
|
||||||
|
protectProtoStr = 'WGL_WGLEXT_PROTOTYPES',
|
||||||
|
apicall = '',
|
||||||
|
apientry = 'WINAPI ',
|
||||||
|
apientryp = 'WINAPI * '),
|
||||||
|
# End of list
|
||||||
|
None
|
||||||
|
]
|
||||||
|
|
||||||
|
# create error/warning & diagnostic files
|
||||||
|
if (errFilename):
|
||||||
|
errWarn = open(errFilename,'w')
|
||||||
|
else:
|
||||||
|
errWarn = sys.stderr
|
||||||
|
diag = open(diagFilename, 'w')
|
||||||
|
|
||||||
|
def genHeaders():
|
||||||
|
# Loop over targets, building each
|
||||||
|
generated = 0
|
||||||
|
for genOpts in buildList:
|
||||||
|
if (genOpts == None):
|
||||||
|
break
|
||||||
|
if (target and target != genOpts.filename):
|
||||||
|
# write('*** Skipping', genOpts.filename)
|
||||||
|
continue
|
||||||
|
write('*** Building', genOpts.filename)
|
||||||
|
generated = generated + 1
|
||||||
|
startTimer()
|
||||||
|
gen = COutputGenerator(errFile=errWarn,
|
||||||
|
warnFile=errWarn,
|
||||||
|
diagFile=diag)
|
||||||
|
reg.setGenerator(gen)
|
||||||
|
reg.apiGen(genOpts)
|
||||||
|
write('** Generated', genOpts.filename)
|
||||||
|
endTimer('Time to generate ' + genOpts.filename + ' =')
|
||||||
|
if (target and generated == 0):
|
||||||
|
write('Failed to generate target:', target)
|
||||||
|
|
||||||
|
if (debug):
|
||||||
|
pdb.run('genHeaders()')
|
||||||
|
elif (profile):
|
||||||
|
import cProfile, pstats
|
||||||
|
cProfile.run('genHeaders()', 'profile.txt')
|
||||||
|
p = pstats.Stats('profile.txt')
|
||||||
|
p.strip_dirs().sort_stats('time').print_stats(50)
|
||||||
|
else:
|
||||||
|
genHeaders()
|
||||||
@@ -0,0 +1,577 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
#
|
||||||
|
# Copyright 2013-2025 The Khronos Group Inc.
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
import sys, time, pdb, string, cProfile
|
||||||
|
from reg import *
|
||||||
|
|
||||||
|
# debug - start header generation in debugger
|
||||||
|
# dump - dump registry after loading
|
||||||
|
# profile - enable Python profiling
|
||||||
|
# protect - whether to use #ifndef protections
|
||||||
|
# registry <filename> - use specified XML registry instead of gl.xml
|
||||||
|
# target - string name of target header, or all targets if None
|
||||||
|
# timeit - time length of registry loading & header generation
|
||||||
|
# validate - validate return & parameter group tags against <group>
|
||||||
|
debug = False
|
||||||
|
dump = False
|
||||||
|
profile = False
|
||||||
|
protect = True
|
||||||
|
target = None
|
||||||
|
timeit = False
|
||||||
|
validate= False
|
||||||
|
# Default input / log files
|
||||||
|
errFilename = None
|
||||||
|
diagFilename = 'diag.txt'
|
||||||
|
regFilename = 'gl.xml'
|
||||||
|
|
||||||
|
# Simple timer functions
|
||||||
|
startTime = None
|
||||||
|
def startTimer():
|
||||||
|
global startTime
|
||||||
|
startTime = time.process_time()
|
||||||
|
def endTimer(msg):
|
||||||
|
global startTime
|
||||||
|
endTime = time.process_time()
|
||||||
|
if (timeit):
|
||||||
|
write(msg, endTime - startTime)
|
||||||
|
startTime = None
|
||||||
|
|
||||||
|
# Turn a list of strings into a regexp string matching exactly those strings
|
||||||
|
def makeREstring(list):
|
||||||
|
return '^(' + '|'.join(list) + ')$'
|
||||||
|
|
||||||
|
# These are "mandatory" OpenGL ES 1 extensions, to
|
||||||
|
# be included in the core GLES/gl.h header.
|
||||||
|
es1CoreList = [
|
||||||
|
'GL_OES_read_format',
|
||||||
|
'GL_OES_compressed_paletted_texture',
|
||||||
|
'GL_OES_point_size_array',
|
||||||
|
'GL_OES_point_sprite'
|
||||||
|
]
|
||||||
|
|
||||||
|
# Descriptive names for various regexp patterns used to select
|
||||||
|
# versions and extensions
|
||||||
|
|
||||||
|
allVersions = allExtensions = '.*'
|
||||||
|
noVersions = noExtensions = None
|
||||||
|
gl12andLaterPat = r'1\.[2-9]|[234]\.[0-9]'
|
||||||
|
gles2onlyPat = r'2\.[0-9]'
|
||||||
|
gles2through30Pat = r'2\.[0-9]|3\.0'
|
||||||
|
gles2through31Pat = r'2\.[0-9]|3\.[01]'
|
||||||
|
gles2through32Pat = r'2\.[0-9]|3\.[012]'
|
||||||
|
es1CorePat = makeREstring(es1CoreList)
|
||||||
|
# Extensions in old glcorearb.h but not yet tagged accordingly in gl.xml
|
||||||
|
glCoreARBPat = None
|
||||||
|
glx13andLaterPat = r'1\.[3-9]'
|
||||||
|
|
||||||
|
# Copyright text prefixing all headers (list of strings).
|
||||||
|
prefixStrings = [
|
||||||
|
'/*',
|
||||||
|
'** Copyright 2013-2025 The Khronos Group Inc.',
|
||||||
|
'** SPDX-' + 'License-Identifier: MIT',
|
||||||
|
'**',
|
||||||
|
'** This header is generated from the Khronos OpenGL / OpenGL ES XML',
|
||||||
|
'** API Registry. The current version of the Registry, generator scripts',
|
||||||
|
'** used to make the header, and the header can be found at',
|
||||||
|
'** https://github.com/KhronosGroup/OpenGL-Registry',
|
||||||
|
'*/',
|
||||||
|
''
|
||||||
|
]
|
||||||
|
|
||||||
|
# glext.h / glcorearb.h define calling conventions inline (no GL *platform.h)
|
||||||
|
glExtPlatformStrings = [
|
||||||
|
'#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)',
|
||||||
|
'#ifndef WIN32_LEAN_AND_MEAN',
|
||||||
|
'#define WIN32_LEAN_AND_MEAN 1',
|
||||||
|
'#endif',
|
||||||
|
'#include <windows.h>',
|
||||||
|
'#endif',
|
||||||
|
'',
|
||||||
|
'#ifndef APIENTRY',
|
||||||
|
'#define APIENTRY',
|
||||||
|
'#endif',
|
||||||
|
'#ifndef APIENTRYP',
|
||||||
|
'#define APIENTRYP APIENTRY *',
|
||||||
|
'#endif',
|
||||||
|
'#ifndef GLAPI',
|
||||||
|
'#define GLAPI extern',
|
||||||
|
'#endif',
|
||||||
|
''
|
||||||
|
]
|
||||||
|
|
||||||
|
glCorearbPlatformStrings = glExtPlatformStrings + [
|
||||||
|
'/* glcorearb.h is for use with OpenGL core profile implementations.',
|
||||||
|
'** It should should be placed in the same directory as gl.h and',
|
||||||
|
'** included as <GL/glcorearb.h>.',
|
||||||
|
'**',
|
||||||
|
'** glcorearb.h includes only APIs in the latest OpenGL core profile',
|
||||||
|
'** implementation together with APIs in newer ARB extensions which ',
|
||||||
|
'** can be supported by the core profile. It does not, and never will',
|
||||||
|
'** include functionality removed from the core profile, such as',
|
||||||
|
'** fixed-function vertex and fragment processing.',
|
||||||
|
'**',
|
||||||
|
'** Do not #include both <GL/glcorearb.h> and either of <GL/gl.h> or',
|
||||||
|
'** <GL/glext.h> in the same source file.',
|
||||||
|
'*/',
|
||||||
|
''
|
||||||
|
]
|
||||||
|
|
||||||
|
# wglext.h needs Windows include
|
||||||
|
wglPlatformStrings = [
|
||||||
|
'#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__)',
|
||||||
|
'#define WIN32_LEAN_AND_MEAN 1',
|
||||||
|
'#include <windows.h>',
|
||||||
|
'#endif',
|
||||||
|
'',
|
||||||
|
]
|
||||||
|
|
||||||
|
# Different APIs use different *platform.h files to define calling
|
||||||
|
# conventions
|
||||||
|
gles1PlatformStrings = [ '#include <GLES/glplatform.h>', '' ]
|
||||||
|
gles2PlatformStrings = [ '#include <GLES2/gl2platform.h>', '' ]
|
||||||
|
gles3PlatformStrings = [ '#include <GLES3/gl3platform.h>', '' ]
|
||||||
|
glsc2PlatformStrings = [ '#include <GLSC2/gl2platform.h>', '' ]
|
||||||
|
eglPlatformStrings = [ '#include <EGL/eglplatform.h>', '' ]
|
||||||
|
|
||||||
|
# GLES headers have a small addition to calling convention headers for function pointer typedefs
|
||||||
|
apiEntryPrefixStrings = [
|
||||||
|
'#ifndef GL_APIENTRYP',
|
||||||
|
'#define GL_APIENTRYP GL_APIENTRY*',
|
||||||
|
'#endif',
|
||||||
|
''
|
||||||
|
]
|
||||||
|
|
||||||
|
# GLES 2/3 core API headers use a different protection mechanism for
|
||||||
|
# prototypes, per bug 14206.
|
||||||
|
glesProtoPrefixStrings = [
|
||||||
|
'#ifndef GL_GLES_PROTOTYPES',
|
||||||
|
'#define GL_GLES_PROTOTYPES 1',
|
||||||
|
'#endif',
|
||||||
|
''
|
||||||
|
]
|
||||||
|
|
||||||
|
# Insert generation date in a comment for headers not having *GLEXT_VERSION macros
|
||||||
|
genDateCommentString = [
|
||||||
|
format('/* Generated on date %s */' % time.strftime('%Y%m%d')),
|
||||||
|
''
|
||||||
|
]
|
||||||
|
|
||||||
|
# GL_GLEXT_VERSION is defined only in glext.h and gl2ext.h
|
||||||
|
glextVersionStrings = [
|
||||||
|
format('#define GL_GLEXT_VERSION %s' % time.strftime('%Y%m%d')),
|
||||||
|
''
|
||||||
|
]
|
||||||
|
# WGL_WGLEXT_VERSION is defined only in wglext.h
|
||||||
|
wglextVersionStrings = [
|
||||||
|
format('#define WGL_WGLEXT_VERSION %s' % time.strftime('%Y%m%d')),
|
||||||
|
''
|
||||||
|
]
|
||||||
|
# GLX_GLXEXT_VERSION is defined only in glxext.h
|
||||||
|
glxextVersionStrings = [
|
||||||
|
format('#define GLX_GLXEXT_VERSION %s' % time.strftime('%Y%m%d')),
|
||||||
|
''
|
||||||
|
]
|
||||||
|
# This is a bad but functional workaround for a structural problem in the scripts
|
||||||
|
# identified in https://github.com/KhronosGroup/OpenGL-Registry/pull/186#issuecomment-416196246
|
||||||
|
glextKHRplatformStrings = [
|
||||||
|
'#include <KHR/khrplatform.h>',
|
||||||
|
''
|
||||||
|
]
|
||||||
|
# EGL_EGLEXT_VERSION is defined only in eglext.h
|
||||||
|
eglextVersionStrings = [
|
||||||
|
format('#define EGL_EGLEXT_VERSION %s' % time.strftime('%Y%m%d')),
|
||||||
|
''
|
||||||
|
]
|
||||||
|
|
||||||
|
# Defaults for generating re-inclusion protection wrappers (or not)
|
||||||
|
protectFile = protect
|
||||||
|
protectFeature = protect
|
||||||
|
protectProto = protect
|
||||||
|
|
||||||
|
buildList = [
|
||||||
|
# GL API 1.2+ + extensions - GL/glext.h
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = '../api/GL/glext.h',
|
||||||
|
apiname = 'gl',
|
||||||
|
profile = 'compatibility',
|
||||||
|
versions = allVersions,
|
||||||
|
emitversions = gl12andLaterPat,
|
||||||
|
defaultExtensions = 'gl', # Default extensions for GL
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + glExtPlatformStrings + glextVersionStrings + glextKHRplatformStrings,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = protectProto,
|
||||||
|
protectProtoStr = 'GL_GLEXT_PROTOTYPES',
|
||||||
|
apicall = 'GLAPI ',
|
||||||
|
apientry = 'APIENTRY ',
|
||||||
|
apientryp = 'APIENTRYP '),
|
||||||
|
# GL core profile + extensions - GL/glcorearb.h
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = '../api/GL/glcorearb.h',
|
||||||
|
apiname = 'gl',
|
||||||
|
profile = 'core',
|
||||||
|
versions = allVersions,
|
||||||
|
emitversions = allVersions,
|
||||||
|
defaultExtensions = 'glcore', # Default extensions for GL core profile (only)
|
||||||
|
addExtensions = glCoreARBPat,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + glCorearbPlatformStrings,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = protectProto,
|
||||||
|
protectProtoStr = 'GL_GLEXT_PROTOTYPES',
|
||||||
|
apicall = 'GLAPI ',
|
||||||
|
apientry = 'APIENTRY ',
|
||||||
|
apientryp = 'APIENTRYP '),
|
||||||
|
# GLES 1.x API + mandatory extensions - GLES/gl.h (no function pointers)
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = '../api/GLES/gl.h',
|
||||||
|
apiname = 'gles1',
|
||||||
|
profile = 'common',
|
||||||
|
versions = allVersions,
|
||||||
|
emitversions = allVersions,
|
||||||
|
defaultExtensions = None, # No default extensions
|
||||||
|
addExtensions = es1CorePat, # Add mandatory ES1 extensions in GLES1/gl.h
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + gles1PlatformStrings + genDateCommentString,
|
||||||
|
genFuncPointers = False,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = False, # Core ES API functions are in the static link libraries
|
||||||
|
protectProtoStr = 'GL_GLEXT_PROTOTYPES',
|
||||||
|
apicall = 'GL_API ',
|
||||||
|
apientry = 'GL_APIENTRY ',
|
||||||
|
apientryp = 'GL_APIENTRYP '),
|
||||||
|
# GLES 1.x extensions - GLES/glext.h
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = '../api/GLES/glext.h',
|
||||||
|
apiname = 'gles1',
|
||||||
|
profile = 'common',
|
||||||
|
versions = allVersions,
|
||||||
|
emitversions = noVersions,
|
||||||
|
defaultExtensions = 'gles1', # Default extensions for GLES 1
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = es1CorePat, # Remove mandatory ES1 extensions in GLES1/glext.h
|
||||||
|
prefixText = prefixStrings + apiEntryPrefixStrings + genDateCommentString,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = protectProto,
|
||||||
|
protectProtoStr = 'GL_GLEXT_PROTOTYPES',
|
||||||
|
apicall = 'GL_API ',
|
||||||
|
apientry = 'GL_APIENTRY ',
|
||||||
|
apientryp = 'GL_APIENTRYP '),
|
||||||
|
# GLES 2.0 API - GLES2/gl2.h (now with function pointers)
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = '../api/GLES2/gl2.h',
|
||||||
|
apiname = 'gles2',
|
||||||
|
profile = 'common',
|
||||||
|
versions = gles2onlyPat,
|
||||||
|
emitversions = allVersions,
|
||||||
|
defaultExtensions = None, # No default extensions
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + gles2PlatformStrings + apiEntryPrefixStrings + glesProtoPrefixStrings + genDateCommentString,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = 'nonzero', # Core ES API functions are in the static link libraries
|
||||||
|
protectProtoStr = 'GL_GLES_PROTOTYPES',
|
||||||
|
apicall = 'GL_APICALL ',
|
||||||
|
apientry = 'GL_APIENTRY ',
|
||||||
|
apientryp = 'GL_APIENTRYP '),
|
||||||
|
# GLES 3.1 / 3.0 / 2.0 extensions - GLES2/gl2ext.h
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = '../api/GLES2/gl2ext.h',
|
||||||
|
apiname = 'gles2',
|
||||||
|
profile = 'common',
|
||||||
|
versions = gles2onlyPat,
|
||||||
|
emitversions = None,
|
||||||
|
defaultExtensions = 'gles2', # Default extensions for GLES 2
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + apiEntryPrefixStrings + glextVersionStrings,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = protectProto,
|
||||||
|
protectProtoStr = 'GL_GLEXT_PROTOTYPES',
|
||||||
|
apicall = 'GL_APICALL ',
|
||||||
|
apientry = 'GL_APIENTRY ',
|
||||||
|
apientryp = 'GL_APIENTRYP '),
|
||||||
|
# GLES 3.2 API - GLES3/gl32.h (now with function pointers)
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = '../api/GLES3/gl32.h',
|
||||||
|
apiname = 'gles2',
|
||||||
|
profile = 'common',
|
||||||
|
versions = gles2through32Pat,
|
||||||
|
emitversions = allVersions,
|
||||||
|
defaultExtensions = None, # No default extensions
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + gles3PlatformStrings + apiEntryPrefixStrings + glesProtoPrefixStrings + genDateCommentString,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = 'nonzero', # Core ES API functions are in the static link libraries
|
||||||
|
protectProtoStr = 'GL_GLES_PROTOTYPES',
|
||||||
|
apicall = 'GL_APICALL ',
|
||||||
|
apientry = 'GL_APIENTRY ',
|
||||||
|
apientryp = 'GL_APIENTRYP '),
|
||||||
|
# GLES 3.1 API - GLES3/gl31.h (now with function pointers)
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = '../api/GLES3/gl31.h',
|
||||||
|
apiname = 'gles2',
|
||||||
|
profile = 'common',
|
||||||
|
versions = gles2through31Pat,
|
||||||
|
emitversions = allVersions,
|
||||||
|
defaultExtensions = None, # No default extensions
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + gles3PlatformStrings + apiEntryPrefixStrings + glesProtoPrefixStrings + genDateCommentString,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = 'nonzero', # Core ES API functions are in the static link libraries
|
||||||
|
protectProtoStr = 'GL_GLES_PROTOTYPES',
|
||||||
|
apicall = 'GL_APICALL ',
|
||||||
|
apientry = 'GL_APIENTRY ',
|
||||||
|
apientryp = 'GL_APIENTRYP '),
|
||||||
|
# GLES 3.0 API - GLES3/gl3.h (now with function pointers)
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = '../api/GLES3/gl3.h',
|
||||||
|
apiname = 'gles2',
|
||||||
|
profile = 'common',
|
||||||
|
versions = gles2through30Pat,
|
||||||
|
emitversions = allVersions,
|
||||||
|
defaultExtensions = None, # No default extensions
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + gles3PlatformStrings + apiEntryPrefixStrings + glesProtoPrefixStrings + genDateCommentString,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = 'nonzero', # Core ES API functions are in the static link libraries
|
||||||
|
protectProtoStr = 'GL_GLES_PROTOTYPES',
|
||||||
|
apicall = 'GL_APICALL ',
|
||||||
|
apientry = 'GL_APIENTRY ',
|
||||||
|
apientryp = 'GL_APIENTRYP '),
|
||||||
|
# GLSC 2.0 API - GLSC2/glsc2.h
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = '../api/GLSC2/glsc2.h',
|
||||||
|
apiname = 'glsc2',
|
||||||
|
profile = 'common',
|
||||||
|
versions = gles2onlyPat,
|
||||||
|
emitversions = allVersions,
|
||||||
|
defaultExtensions = None, # No default extensions
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + glsc2PlatformStrings + apiEntryPrefixStrings + genDateCommentString,
|
||||||
|
genFuncPointers = False,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = False,
|
||||||
|
protectProtoStr = 'GL_GLEXT_PROTOTYPES',
|
||||||
|
apicall = 'GL_APICALL ',
|
||||||
|
apientry = 'GL_APIENTRY ',
|
||||||
|
apientryp = 'GL_APIENTRYP '),
|
||||||
|
# GLSC 2.0 extensions - GLSC2/gl2ext.h
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = '../api/GLSC2/glsc2ext.h',
|
||||||
|
apiname = 'glsc2',
|
||||||
|
profile = 'common',
|
||||||
|
versions = gles2onlyPat,
|
||||||
|
emitversions = None,
|
||||||
|
defaultExtensions = 'glsc2', # Default extensions for GLSC 2
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + apiEntryPrefixStrings + genDateCommentString,
|
||||||
|
genFuncPointers = False,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = False,
|
||||||
|
protectProtoStr = 'GL_GLEXT_PROTOTYPES',
|
||||||
|
apicall = 'GL_APICALL ',
|
||||||
|
apientry = 'GL_APIENTRY ',
|
||||||
|
apientryp = 'GL_APIENTRYP '),
|
||||||
|
# GLX 1.* API - GL/glx.h (experimental)
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = '../api/GL/glx.h',
|
||||||
|
apiname = 'glx',
|
||||||
|
profile = None,
|
||||||
|
versions = allVersions,
|
||||||
|
emitversions = allVersions,
|
||||||
|
defaultExtensions = None, # No default extensions
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
# add glXPlatformStrings?
|
||||||
|
prefixText = prefixStrings + genDateCommentString,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = protectProto,
|
||||||
|
protectProtoStr = 'GLX_GLXEXT_PROTOTYPES',
|
||||||
|
apicall = '',
|
||||||
|
apientry = '',
|
||||||
|
apientryp = ' *'),
|
||||||
|
# GLX 1.3+ API + extensions - GL/glxext.h (no function pointers, yet @@@)
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = '../api/GL/glxext.h',
|
||||||
|
apiname = 'glx',
|
||||||
|
profile = None,
|
||||||
|
versions = allVersions,
|
||||||
|
emitversions = glx13andLaterPat,
|
||||||
|
defaultExtensions = 'glx', # Default extensions for GLX
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
# add glXPlatformStrings?
|
||||||
|
prefixText = prefixStrings + glxextVersionStrings,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = protectProto,
|
||||||
|
protectProtoStr = 'GLX_GLXEXT_PROTOTYPES',
|
||||||
|
apicall = '',
|
||||||
|
apientry = '',
|
||||||
|
apientryp = ' *'),
|
||||||
|
# WGL API + extensions - GL/wgl.h (experimenta; no function pointers, yet @@@)
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = '../api/GL/wgl.h',
|
||||||
|
apiname = 'wgl',
|
||||||
|
profile = None,
|
||||||
|
versions = allVersions,
|
||||||
|
emitversions = allVersions,
|
||||||
|
defaultExtensions = 'wgl', # Default extensions for WGL
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + wglPlatformStrings + genDateCommentString,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = protectProto,
|
||||||
|
protectProtoStr = 'WGL_WGLEXT_PROTOTYPES',
|
||||||
|
apicall = '',
|
||||||
|
apientry = 'WINAPI ',
|
||||||
|
apientryp = 'WINAPI * '),
|
||||||
|
# WGL extensions - GL/wglext.h (no function pointers, yet @@@)
|
||||||
|
CGeneratorOptions(
|
||||||
|
filename = '../api/GL/wglext.h',
|
||||||
|
apiname = 'wgl',
|
||||||
|
profile = None,
|
||||||
|
versions = allVersions,
|
||||||
|
emitversions = None,
|
||||||
|
defaultExtensions = 'wgl', # Default extensions for WGL
|
||||||
|
addExtensions = None,
|
||||||
|
removeExtensions = None,
|
||||||
|
prefixText = prefixStrings + wglPlatformStrings + wglextVersionStrings,
|
||||||
|
genFuncPointers = True,
|
||||||
|
protectFile = protectFile,
|
||||||
|
protectFeature = protectFeature,
|
||||||
|
protectProto = protectProto,
|
||||||
|
protectProtoStr = 'WGL_WGLEXT_PROTOTYPES',
|
||||||
|
apicall = '',
|
||||||
|
apientry = 'WINAPI ',
|
||||||
|
apientryp = 'WINAPI * '),
|
||||||
|
# End of list
|
||||||
|
None
|
||||||
|
]
|
||||||
|
|
||||||
|
def genHeaders():
|
||||||
|
# Loop over targets, building each
|
||||||
|
generated = 0
|
||||||
|
for genOpts in buildList:
|
||||||
|
if (genOpts == None):
|
||||||
|
break
|
||||||
|
if (target and target != genOpts.filename):
|
||||||
|
# write('*** Skipping', genOpts.filename)
|
||||||
|
continue
|
||||||
|
write('*** Building', genOpts.filename)
|
||||||
|
generated = generated + 1
|
||||||
|
startTimer()
|
||||||
|
gen = COutputGenerator(errFile=errWarn,
|
||||||
|
warnFile=errWarn,
|
||||||
|
diagFile=diag)
|
||||||
|
reg.setGenerator(gen)
|
||||||
|
reg.apiGen(genOpts)
|
||||||
|
write('** Generated', genOpts.filename)
|
||||||
|
endTimer('Time to generate ' + genOpts.filename + ' =')
|
||||||
|
if (target and generated == 0):
|
||||||
|
write('Failed to generate target:', target)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
i = 1
|
||||||
|
while (i < len(sys.argv)):
|
||||||
|
arg = sys.argv[i]
|
||||||
|
i = i + 1
|
||||||
|
if (arg == '-debug'):
|
||||||
|
write('Enabling debug (-debug)', file=sys.stderr)
|
||||||
|
debug = True
|
||||||
|
elif (arg == '-dump'):
|
||||||
|
write('Enabling dump (-dump)', file=sys.stderr)
|
||||||
|
dump = True
|
||||||
|
elif (arg == '-noprotect'):
|
||||||
|
write('Disabling inclusion protection in output headers', file=sys.stderr)
|
||||||
|
protect = False
|
||||||
|
elif (arg == '-profile'):
|
||||||
|
write('Enabling profiling (-profile)', file=sys.stderr)
|
||||||
|
profile = True
|
||||||
|
elif (arg == '-registry'):
|
||||||
|
regFilename = sys.argv[i]
|
||||||
|
i = i+1
|
||||||
|
write('Using registry ', regFilename, file=sys.stderr)
|
||||||
|
elif (arg == '-time'):
|
||||||
|
write('Enabling timing (-time)', file=sys.stderr)
|
||||||
|
timeit = True
|
||||||
|
elif (arg == '-validate'):
|
||||||
|
write('Enabling group validation (-validate)', file=sys.stderr)
|
||||||
|
validate = True
|
||||||
|
elif (arg[0:1] == '-'):
|
||||||
|
write('Unrecognized argument:', arg, file=sys.stderr)
|
||||||
|
exit(1)
|
||||||
|
else:
|
||||||
|
target = arg
|
||||||
|
write('Using target', target, file=sys.stderr)
|
||||||
|
|
||||||
|
# Load & parse registry
|
||||||
|
reg = Registry()
|
||||||
|
|
||||||
|
startTimer()
|
||||||
|
tree = etree.parse(regFilename)
|
||||||
|
endTimer('Time to make ElementTree =')
|
||||||
|
|
||||||
|
startTimer()
|
||||||
|
reg.loadElementTree(tree)
|
||||||
|
endTimer('Time to parse ElementTree =')
|
||||||
|
|
||||||
|
if (validate):
|
||||||
|
reg.validateGroups()
|
||||||
|
|
||||||
|
if (dump):
|
||||||
|
write('***************************************')
|
||||||
|
write('Performing Registry dump to regdump.txt')
|
||||||
|
write('***************************************')
|
||||||
|
reg.dumpReg(filehandle = open('regdump.txt','w'))
|
||||||
|
|
||||||
|
# create error/warning & diagnostic files
|
||||||
|
if (errFilename):
|
||||||
|
errWarn = open(errFilename,'w')
|
||||||
|
else:
|
||||||
|
errWarn = sys.stderr
|
||||||
|
diag = open(diagFilename, 'w')
|
||||||
|
|
||||||
|
if (debug):
|
||||||
|
pdb.run('genHeaders()')
|
||||||
|
elif (profile):
|
||||||
|
import cProfile, pstats
|
||||||
|
cProfile.run('genHeaders()', 'profile.txt')
|
||||||
|
p = pstats.Stats('profile.txt')
|
||||||
|
p.strip_dirs().sort_stats('time').print_stats(50)
|
||||||
|
else:
|
||||||
|
genHeaders()
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,729 @@
|
|||||||
|
This is the registry of GLX opcodes, error codes, and event codes. It is
|
||||||
|
very rarely modified since there is almost no interest in supporting GLX
|
||||||
|
with modern OpenGL features, and the work of extending the XML schema to
|
||||||
|
express it is not worthwhile.
|
||||||
|
|
||||||
|
When new GLX protocol is needed for extension specifications, allocate it
|
||||||
|
here and reflect it in the extension specification document as well as, if
|
||||||
|
appropriate, glx.xml.
|
||||||
|
|
||||||
|
Reserved opcode ranges assigned to vendors, and in some cases, opcodes
|
||||||
|
actually assigned within that range are tracked here. Not all opcodes used
|
||||||
|
by vendors are known.
|
||||||
|
|
||||||
|
GLX Opcodes (8 bits)
|
||||||
|
====================
|
||||||
|
1-15 GLX 1.0
|
||||||
|
16 Vendor Private
|
||||||
|
17 Vendor Private with Reply
|
||||||
|
18-20 GLX 1.1
|
||||||
|
21-32 GLX 1.3
|
||||||
|
33 glXSetClientInfoARB (GLX_ARB_create_context)
|
||||||
|
34 glXCreateContextAttribsARB (GLX_ARB_create_context)
|
||||||
|
35 glXSetClientInfo2ARB (GLX_ARB_create_context)
|
||||||
|
|
||||||
|
GLX Vendor Private / Vendor Private with Reply opcodes (32-bits)
|
||||||
|
(first 4 bytes past standard X header)
|
||||||
|
================================================================
|
||||||
|
|
||||||
|
0 255 EXT (various - contact SGI)
|
||||||
|
256 271 HP (originally Compaq)
|
||||||
|
(272-511 unused)
|
||||||
|
512 575 E&S
|
||||||
|
(576-1023 unused)
|
||||||
|
1024 1269 EXT (various - contact SGI)
|
||||||
|
1024 GLX_EXT_import_context
|
||||||
|
1270 1275 NV_register_combiners
|
||||||
|
1276 1280 NV_fence
|
||||||
|
1281 1292 NVIDIA (use TBD; was intended for NV_vertex_program)
|
||||||
|
1293 1308 NV_vertex_program / ARB_vertex_program / ARB_fragment_program
|
||||||
|
1309 NVIDIA (use TBD)
|
||||||
|
1310 1311 NV_fragment_program
|
||||||
|
1312 NV_fence
|
||||||
|
1313 1318 GLX_NV_video_output
|
||||||
|
1319 1320 NV_vertex_program
|
||||||
|
1321 1326 NVIDIA (use TBD)
|
||||||
|
1327 NV_register_combiners2
|
||||||
|
1328 1329 EXT_timer_query
|
||||||
|
1330 1331 GLX_EXT_texture_from_pixmap
|
||||||
|
1332 1339 NV_present_video
|
||||||
|
1340 NVIDIA (use TBD)
|
||||||
|
1341 GLX_NV_delay_before_swap
|
||||||
|
1342 1359 NVIDIA (use TBD)
|
||||||
|
1360 GLX_NV_copy_image
|
||||||
|
1361 1364 NVIDIA (use TBD)
|
||||||
|
1365 1368 NV_gpu_program4
|
||||||
|
1369 1386 NVIDIA (use TBD)
|
||||||
|
1387 1388 GLX_NV_copy_buffer
|
||||||
|
1389 1399 NVIDIA (use TBD)
|
||||||
|
1400 1415 NV_video_capture
|
||||||
|
1416 GLX_EXT_swap_control
|
||||||
|
1417 1420 NVIDIA (use TBD)
|
||||||
|
1421 OES_single_precision (Khronos OpenGL ES 1.0)
|
||||||
|
1422 1428 EXT_framebuffer_object
|
||||||
|
(1429-2047 unused)
|
||||||
|
2048 2064 SUN
|
||||||
|
3000 3999 IBM
|
||||||
|
4096 5151 SGI (4106-5151 unused)
|
||||||
|
4096 SGIS_detail_texture
|
||||||
|
4097 SGIS_sharpen_texture
|
||||||
|
4098 4100 SGI_color_table
|
||||||
|
4101 SGIS_texture_filter4
|
||||||
|
4102 4104 SGIX_instruments
|
||||||
|
4105 SGIX_flush_raster
|
||||||
|
5152 5184 Mesa (unknown use)
|
||||||
|
8192 8207 HP
|
||||||
|
16384 16399 ADD
|
||||||
|
65536 66575 SGI (various GLX extensions)
|
||||||
|
65536 GLX_SGI_swap_control
|
||||||
|
65537 GLX_SGI_make_current_read
|
||||||
|
65538 65539 GLX_SGIX_video_source
|
||||||
|
65540 65542 GLX_SGIX_fbconfig
|
||||||
|
65543 65546 GLX_SGIX_pbuffer
|
||||||
|
65547 GLX_SGIX_swap_group
|
||||||
|
65548 65549 GLX_SGIX_swap_barrier
|
||||||
|
65550 65553 GLX_SGIX_hyperpipe_group
|
||||||
|
65554 GLX_SGIX_query_board_num (internal, for shm)
|
||||||
|
|
||||||
|
OpenGL Single Opcodes (8 Bits)
|
||||||
|
===============================
|
||||||
|
|
||||||
|
167-up Reserved
|
||||||
|
0 146 OpenGL 1.0/1.1 core
|
||||||
|
147 159 OpenGL 1.2 core
|
||||||
|
160 160 ARB_texture_compression
|
||||||
|
161 166 ARB_occlusion_query
|
||||||
|
167 178 ARB_shader_objects
|
||||||
|
179 181 ARB_vertex_shader
|
||||||
|
182 183 EXT_gpu_shader4
|
||||||
|
184 185 NV_vertex_program4
|
||||||
|
186 194 ARB_vertex_buffer_object
|
||||||
|
195 202 OpenGL 2.0 core
|
||||||
|
203 204 EXT_texture_integer
|
||||||
|
205 205 ARB_map_buffer_range
|
||||||
|
206 209 ARB_vertex_array_object
|
||||||
|
210 212 EXT_draw_buffers2
|
||||||
|
213 214 OpenGL 3.0 core
|
||||||
|
215 220 ARB_uniform_buffer_object
|
||||||
|
221 ARB_copy_buffer
|
||||||
|
|
||||||
|
OpenGL Rendering Opcodes (16 Bits)
|
||||||
|
==================================
|
||||||
|
|
||||||
|
0-1007 Reserved to ARB (231-1007 unused)
|
||||||
|
0 191 OpenGL 1.0 core (140 deprecated?)
|
||||||
|
192 194 OpenGL 1.1 core
|
||||||
|
195 196 OpenGL 1.2 core
|
||||||
|
197 213 ARB_multitexture
|
||||||
|
214 219 ARB_texture_compression
|
||||||
|
220 228 ARB_vertex_blend
|
||||||
|
229 ARB_multisample
|
||||||
|
230 ARB_window_pos
|
||||||
|
231 232 ARB_occlusion_query
|
||||||
|
233 ARB_draw_buffers
|
||||||
|
234 ARB_color_buffer_float
|
||||||
|
235 237 ARB_framebuffer_object
|
||||||
|
238 264 ARB_shader_object
|
||||||
|
265 ARB_vertex_shader
|
||||||
|
266 268 ARB_geometry_shader4
|
||||||
|
269 277 EXT_gpu_shader4
|
||||||
|
278 289 NV_vertex_program4
|
||||||
|
290 301 ARB_vertex_buffer_object
|
||||||
|
302 304 ARB_stencil_two_side
|
||||||
|
305 310 OpenGL 2.1 core
|
||||||
|
311 345 ARB_pixel_buffer_object
|
||||||
|
346 347 EXT_texture_integer
|
||||||
|
348 349 NV_conditional_render
|
||||||
|
350 351 ARB_vertex_array_object
|
||||||
|
352 354 EXT_draw_buffers2
|
||||||
|
355 363 OpenGL 3.0 core
|
||||||
|
364 365 NV_primitive_restart
|
||||||
|
366 ARB_uniform_buffer_object
|
||||||
|
367 ARB_texture_buffer_object
|
||||||
|
1008-1023 Reserved to IBM (unknown usage)
|
||||||
|
1024-1039 Reserved to HP (originally Compaq) (unknown usage)
|
||||||
|
1040-2047 Unused
|
||||||
|
2048-3071 Reserved to SGI (2083-3071 unused)
|
||||||
|
2048 2049 SGIS_multisample
|
||||||
|
2050 SGIX_tag_sample_buffer
|
||||||
|
2051 SGIS_detail_texture
|
||||||
|
2052 SGIS_sharpen_texture
|
||||||
|
2053 2056 SGI_color_table
|
||||||
|
2057 2058 SGIS_texture4D
|
||||||
|
2059 SGIX_pixel_texture
|
||||||
|
2060 2063 SGIX_sprite
|
||||||
|
2064 SGIS_texture_filter4
|
||||||
|
2065 2066 EXT_point_parameters/SGIS_point_parameters
|
||||||
|
2067 SGIS_fog_function
|
||||||
|
2068 unused?
|
||||||
|
2069 2070 SGIX_instruments
|
||||||
|
2071 SGIX_reference_plane
|
||||||
|
2072 SGIX_framezoom
|
||||||
|
2073 2076 unused?
|
||||||
|
2077 SGIX_instruments
|
||||||
|
2078 2081 SGIX_list_priority
|
||||||
|
2082 SGIS_texture_color_mask
|
||||||
|
3072-4095 Reserved to ARB (unused)
|
||||||
|
4096-5151 Reserved to EXT (4460-5151 unused)
|
||||||
|
4096 EXT_blend_color/1.2
|
||||||
|
4097 EXT_blend_minmax/1.2
|
||||||
|
4098 EXT_polygon_offset
|
||||||
|
4099 4100 EXT_subtexture
|
||||||
|
4101 4109 EXT_convolution/1.2
|
||||||
|
4110 4113 EXT_histogram/1.2
|
||||||
|
4114 EXT_texture3D/1.2
|
||||||
|
4115 EXT_subtexture/1.2
|
||||||
|
4116 EXT_vertex_array
|
||||||
|
4117 4118 EXT_texture_object/1.1
|
||||||
|
4119 4123 EXT_copy_texture/1.1
|
||||||
|
4124 4125 EXT_fog_coord
|
||||||
|
4126 4133 EXT_secondary_color
|
||||||
|
4134 EXT_blend_func_separate
|
||||||
|
4135 EXT_vertex_weighting
|
||||||
|
4136 4142 NV_register_combiners
|
||||||
|
4143 4144 NV_fence (4144 retired, used to be for FinishFence)
|
||||||
|
4145 4179 NVIDIA (use TBD; was intended for NV_vertex_program)
|
||||||
|
4180 4214 NV_vertex_program
|
||||||
|
4215 4217 ARB_vertex_program
|
||||||
|
4218 4219 NV_fragment_program
|
||||||
|
4220 EXT_stencil_two_side
|
||||||
|
4221 4222 NV_point_sprite
|
||||||
|
4223 EXT_stencil_clear_tag
|
||||||
|
4225 EXT_polygon_offset_clamp
|
||||||
|
4228 EXT_blend_equation_separate
|
||||||
|
4229 EXT_depth_bounds_test
|
||||||
|
4230 4239 ARB_vertex_program
|
||||||
|
4240 4264 NV_half_float
|
||||||
|
4265 4280 NVIDIA (use TBD)
|
||||||
|
4281 4282 EXT_gpu_program_parameters
|
||||||
|
4283 4285 NV_depth_buffer_float
|
||||||
|
4286 4290 NVIDIA (use TBD)
|
||||||
|
4291 NV_copy_image
|
||||||
|
4292 4293 EXT_texture_integer
|
||||||
|
4294 4307 NVIDIA (use TBD)
|
||||||
|
4308 4312 OES_single_precision (Khronos OpenGL ES 1.0)
|
||||||
|
4313 4315 SUN (use TBD)
|
||||||
|
4316 4325 EXT_framebuffer_object
|
||||||
|
4326 4329 ARB_matrix_palette
|
||||||
|
4330 EXT_framebuffer_blit
|
||||||
|
4331 EXT_framebuffer_multisample
|
||||||
|
4332 4347 NVIDIA (use TBD, bug 6720)
|
||||||
|
4348 NV_texture_barrier
|
||||||
|
4349 4459 NVIDIA (use TBD, bug 6720)
|
||||||
|
|
||||||
|
8192-8207 Reserved to HP (unknown usage)
|
||||||
|
16384-16415 Reserved to SUN (unknown usage)
|
||||||
|
24576-24607 Reserved to ADD (unknown usage)
|
||||||
|
|
||||||
|
|
||||||
|
GLX Enumerateds (32 Bits)
|
||||||
|
=========================
|
||||||
|
0x0-0xFF Reserved to EXT (visual attribute names)
|
||||||
|
0x1 0x11 GLX 1.0 (attribute names)
|
||||||
|
0x12 0x1F unused?
|
||||||
|
0x20 GLX_EXT_visual_rating (attribute names)
|
||||||
|
0x21 unused?
|
||||||
|
0x22 0x28 GLX_EXT_visual_info (attribute names)
|
||||||
|
0x1F00-0x1F02 Reserved to ARB (shared with WGL)
|
||||||
|
0x1F00 0x1F02 GLX_AMD_gpu_association
|
||||||
|
0x2070-0x209F Reserved to ARB (shared with WGL)
|
||||||
|
0x2090 0x2094 GLX_ARB_create_context
|
||||||
|
0x2095 GL_ARB_vertex_buffer_object
|
||||||
|
0x2097 0x2098 GLX_ARB_context_flush_control
|
||||||
|
0x20A0-0x219F Reserved to NVIDIA (shared with WGL)
|
||||||
|
0x20B0 GLX_NV_float_buffer
|
||||||
|
0x20B1 GLX_EXT_fbconfig_packed_float
|
||||||
|
0x20B2 GLX_ARB_framebuffer_sRGB (nee EXT)
|
||||||
|
0x20B3 GLX_NV_multisample_coverage
|
||||||
|
0x20B9 GLX_ARB_fbconfig_float
|
||||||
|
0x20C3 0x20CC GLX_NV_video_out
|
||||||
|
0x20CD 0x20CF GLX_NV_video_capture
|
||||||
|
0x20D0 0x20EB GLX_EXT_texture_from_pixmap
|
||||||
|
0x20F0 GLX_NV_present_video
|
||||||
|
0x20F1 0x20F2 GLX_EXT_swap_control
|
||||||
|
0x20F3 GLX_EXT_swap_control_tear
|
||||||
|
0x20F4 GLX_EXT_buffer_age
|
||||||
|
0x20F5 GLX_EXT_stereo_tree
|
||||||
|
0x20F6 GLX_EXT_libglvnd
|
||||||
|
0x20F7 GLX_NV_robustness_video_memory_purge
|
||||||
|
0x21A0-0x21AF Reserved to AMD (shared with WGL)
|
||||||
|
0x21A2 0x21A8 GLX_AMD_gpu_association
|
||||||
|
0x31B3 Reserved to ARB (shared with WGL)
|
||||||
|
0x31B3 GLX_ARB_create_context_no_error
|
||||||
|
0x8000-0x800F Reserved to EXT (0x800E-0x800F unused)
|
||||||
|
0x8000 0x8009 GLX_EXT_visual_info
|
||||||
|
0x800A 0x800C GLX_EXT_import_context
|
||||||
|
0x800D GLX_EXT_visual_rating
|
||||||
|
0x8010-0x803F Reserved to SGI (0x8029-0x803F unused)
|
||||||
|
0x8010 0x8015 GLX_SGIX_fbconfig
|
||||||
|
0x8016 0x8023 GLX_SGIX_pbuffer
|
||||||
|
0x8024 GLX_SGIX_dm_buffer
|
||||||
|
0x8025 GLX_SGIS_blended_overlay
|
||||||
|
0x8026 0x8027 GLX_SGIS_shared_multisample
|
||||||
|
0x8028 GLX_SGIX_visual_select_group
|
||||||
|
0x8030 GLX_SGIX_hyperpipe
|
||||||
|
0x8040-0x804F Reserved to OpenGL ARB
|
||||||
|
0x8040 0x8041 GLX 1.3
|
||||||
|
0x8050-0x805F Reserved to 3Dfx
|
||||||
|
0x8050 0x8051 GLX_3DFX_multisample
|
||||||
|
0x8060-0x806F Reserved to OpenML SIG
|
||||||
|
0x8060 0x8063 GLX_OML_swap_method
|
||||||
|
0x8070-0x816F Reserved to NVIDIA
|
||||||
|
0x8170-0x817F Reserved to SUN
|
||||||
|
0x8180-0x818F Reserved to Intel (0x818F unused)
|
||||||
|
0x8180 0x8182 GLX_INTEL_swap_event
|
||||||
|
0x8183 0x818E GLX_MESA_query_renderer
|
||||||
|
0x8250-0x826F Reserved to ARB (Shared with GL and WGL)
|
||||||
|
0x8252 GLX_ARB_create_context_robustness
|
||||||
|
0x8256 GLX_ARB_create_context_robustness
|
||||||
|
0x8261 GLX_ARB_create_context_robustness
|
||||||
|
0x9126 GLX_ARB_create_context_profile (shared with WGL)
|
||||||
|
|
||||||
|
100000-100011 Reserved to SGI (100002-100011 unused)
|
||||||
|
100000 100001 GLX_SGIS_multisample/GLX_ARB_multisample
|
||||||
|
|
||||||
|
GLX Error Codes
|
||||||
|
===============
|
||||||
|
|
||||||
|
(Extension reservations for vendor extensions should start sufficiently
|
||||||
|
high so they don't interfere with GLX core and GLX ARB extensions.)
|
||||||
|
|
||||||
|
0 GLXBadContext OpenGL ARB (GLX core)
|
||||||
|
1 GLXBadContextState OpenGL ARB (GLX core)
|
||||||
|
2 GLXBadDrawable OpenGL ARB (GLX core)
|
||||||
|
3 GLXBadPixmap OpenGL ARB (GLX core)
|
||||||
|
4 GLXBadContextTag OpenGL ARB (GLX core)
|
||||||
|
5 GLXBadCurrentWindow OpenGL ARB (GLX core)
|
||||||
|
6 GLXBadRenderRequest OpenGL ARB (GLX core)
|
||||||
|
7 GLXBadLargeRequest OpenGL ARB (GLX core)
|
||||||
|
8 GLXUnsupportedPrivateRequest OpenGL ARB (GLX core)
|
||||||
|
9 GLXBadFBConfig OpenGL ARB (GLX core)
|
||||||
|
10 GLXBadPbuffer OpenGL ARB (GLX core)
|
||||||
|
11 GLXBadCurrentDrawable OpenGL ARB (GLX core)
|
||||||
|
12 GLXBadWindow OpenGL ARB (GLX core)
|
||||||
|
13 GLXBadProfileARB OpenGL ARB (GLX_ARB_create_context)
|
||||||
|
|
||||||
|
|
||||||
|
GLX Event Masks
|
||||||
|
===============
|
||||||
|
0x08000000 GLX 1.3 / SGIX_pbuffer
|
||||||
|
0x04000000 Intel (INTEL_swap_event)
|
||||||
|
|
||||||
|
GLX Event Codes
|
||||||
|
===============
|
||||||
|
|
||||||
|
(The X.org/Mesa GLX implementation derived from the SGI Sample
|
||||||
|
Implementation has __GLX_NUMBER_EVENTS == 17, suggesting that vendor
|
||||||
|
events should be allocated downwards from the first free value <= 16
|
||||||
|
(14), and core GLX events allocated upwards).
|
||||||
|
|
||||||
|
0 OpenGL ARB (GLX_PbufferClobber in GLX 1.3)
|
||||||
|
15 Intel (GLX_BufferSwapINTEL)
|
||||||
|
16 SGI (GLX_PbufferClobberSGIX)
|
||||||
|
64 SGI
|
||||||
|
|
||||||
|
GLX protocol encoding for GL >= 2.0
|
||||||
|
===================================
|
||||||
|
|
||||||
|
(This section - this whole file really - should eventually be incorporated
|
||||||
|
in a proper update of the GLX protocol specification.)
|
||||||
|
|
||||||
|
OpenGL 2.0
|
||||||
|
----------
|
||||||
|
|
||||||
|
DeleteShader
|
||||||
|
|
||||||
|
1 CARD8 opcode (X assigned)
|
||||||
|
1 195 GLX opcode
|
||||||
|
2 3 request length
|
||||||
|
4 GLX_CONTEXT_TAG context tag
|
||||||
|
4 CARD32 shader
|
||||||
|
|
||||||
|
IsShader
|
||||||
|
|
||||||
|
1 CARD8 opcode (X assigned)
|
||||||
|
1 196 GLX opcode
|
||||||
|
2 3 request length
|
||||||
|
4 GLX_CONTEXT_TAG context tag
|
||||||
|
4 CARD32 shader
|
||||||
|
=>
|
||||||
|
1 1 reply
|
||||||
|
1 unused
|
||||||
|
2 CARD16 sequence number
|
||||||
|
4 0 reply length
|
||||||
|
4 BOOL32 return value
|
||||||
|
20 unused
|
||||||
|
|
||||||
|
IsProgram
|
||||||
|
|
||||||
|
1 CARD8 opcode (X assigned)
|
||||||
|
1 197 GLX opcode
|
||||||
|
2 3 request length
|
||||||
|
4 GLX_CONTEXT_TAG context tag
|
||||||
|
4 CARD32 program
|
||||||
|
=>
|
||||||
|
1 1 reply
|
||||||
|
1 unused
|
||||||
|
2 CARD16 sequence number
|
||||||
|
4 0 reply length
|
||||||
|
4 BOOL32 return value
|
||||||
|
20 unused
|
||||||
|
|
||||||
|
GetShaderiv
|
||||||
|
|
||||||
|
1 CARD8 opcode (X assigned)
|
||||||
|
1 198 GLX opcode
|
||||||
|
2 4 request length
|
||||||
|
4 GLX_CONTEXT_TAG context tag
|
||||||
|
4 CARD32 program
|
||||||
|
4 CARD32 pname
|
||||||
|
=>
|
||||||
|
1 1 reply
|
||||||
|
1 unused
|
||||||
|
2 CARD16 sequence number
|
||||||
|
4 m reply length, m = (n == 1 ? 0 : n)
|
||||||
|
4 unused
|
||||||
|
4 CARD32 n
|
||||||
|
|
||||||
|
if (n == 1) this follows:
|
||||||
|
|
||||||
|
4 CARD32 params
|
||||||
|
12 unused
|
||||||
|
|
||||||
|
otherwise this follows:
|
||||||
|
|
||||||
|
16 unused
|
||||||
|
n*4 LISTOFCARD32 params
|
||||||
|
|
||||||
|
Note that n may be 0, indicating that a GL error occurred.
|
||||||
|
|
||||||
|
GetProgramiv
|
||||||
|
|
||||||
|
1 CARD8 opcode (X assigned)
|
||||||
|
1 199 GLX opcode
|
||||||
|
2 4 request length
|
||||||
|
4 GLX_CONTEXT_TAG context tag
|
||||||
|
4 CARD32 program
|
||||||
|
4 CARD32 pname
|
||||||
|
=>
|
||||||
|
1 1 reply
|
||||||
|
1 unused
|
||||||
|
2 CARD16 sequence number
|
||||||
|
4 m reply length, m = (n == 1 ? 0 : n)
|
||||||
|
4 unused
|
||||||
|
4 CARD32 n
|
||||||
|
|
||||||
|
if (n == 1) this follows:
|
||||||
|
|
||||||
|
4 CARD32 params
|
||||||
|
12 unused
|
||||||
|
|
||||||
|
otherwise this follows:
|
||||||
|
|
||||||
|
16 unused
|
||||||
|
n*4 LISTofCARD32 params
|
||||||
|
|
||||||
|
Note that n may be 0, indicating that a GL error occurred.
|
||||||
|
|
||||||
|
GetShaderInfoLog
|
||||||
|
|
||||||
|
1 CARD8 opcode (X assigned)
|
||||||
|
1 200 GLX opcode
|
||||||
|
2 4 request length
|
||||||
|
4 GLX_CONTEXT_TAG context tag
|
||||||
|
4 CARD32 shader
|
||||||
|
4 CARD32 bufSize
|
||||||
|
=>
|
||||||
|
1 1 reply
|
||||||
|
1 unused
|
||||||
|
2 CARD16 sequence number
|
||||||
|
4 m reply length, m = (n + p) / 4
|
||||||
|
4 unused
|
||||||
|
4 CARD32 n, n = length + 1
|
||||||
|
16 unused
|
||||||
|
n LISTofBYTE infoLog
|
||||||
|
p unused, p=pad(n)
|
||||||
|
|
||||||
|
Note that n may be 0, indicating that a GL error occurred.
|
||||||
|
|
||||||
|
GetProgramInfoLog
|
||||||
|
|
||||||
|
1 CARD8 opcode (X assigned)
|
||||||
|
1 201 GLX opcode
|
||||||
|
2 4 request length
|
||||||
|
4 GLX_CONTEXT_TAG context tag
|
||||||
|
4 CARD32 program
|
||||||
|
4 CARD32 bufSize
|
||||||
|
=>
|
||||||
|
1 1 reply
|
||||||
|
1 unused
|
||||||
|
2 CARD16 sequence number
|
||||||
|
4 m reply length, m = (n + p) / 4
|
||||||
|
4 unused
|
||||||
|
4 CARD32 n, n = length + 1
|
||||||
|
16 unused
|
||||||
|
n LISTofBYTE infoLog
|
||||||
|
p unused, p=pad(n)
|
||||||
|
|
||||||
|
Note that n may be 0, indicating that a GL error occurred.
|
||||||
|
|
||||||
|
DeleteProgram
|
||||||
|
|
||||||
|
1 CARD8 opcode (X assigned)
|
||||||
|
1 202 GLX opcode
|
||||||
|
2 3 request length
|
||||||
|
4 GLX_CONTEXT_TAG context tag
|
||||||
|
4 CARD32 program
|
||||||
|
|
||||||
|
OpenGL 2.1
|
||||||
|
----------
|
||||||
|
|
||||||
|
UniformMatrix2x3fv
|
||||||
|
|
||||||
|
2 16+4*count*2*3 rendering command length
|
||||||
|
2 305 rendering command opcode
|
||||||
|
4 CARD32 location
|
||||||
|
4 CARD32 count
|
||||||
|
1 BOOL transpose
|
||||||
|
3 unused
|
||||||
|
4*count*2*3 LISTofFLOAT32 value
|
||||||
|
|
||||||
|
If the command is encoded in a glXRenderLarge request, the
|
||||||
|
command opcode and command length fields above are expanded to
|
||||||
|
4 bytes each:
|
||||||
|
|
||||||
|
4 20+4*count*2*2 rendering command length
|
||||||
|
4 305 rendering command opcode
|
||||||
|
|
||||||
|
UniformMatrix3x2fv
|
||||||
|
|
||||||
|
2 16+4*count*3*2 rendering command length
|
||||||
|
2 306 rendering command opcode
|
||||||
|
4 CARD32 location
|
||||||
|
4 CARD32 count
|
||||||
|
1 BOOL transpose
|
||||||
|
3 unused
|
||||||
|
4*count*3*2 LISTofFLOAT32 value
|
||||||
|
|
||||||
|
If the command is encoded in a glXRenderLarge request, the
|
||||||
|
command opcode and command length fields above are expanded to
|
||||||
|
4 bytes each:
|
||||||
|
|
||||||
|
4 20+4*count*3*2 rendering command length
|
||||||
|
4 306 rendering command opcode
|
||||||
|
|
||||||
|
UniformMatrix2x4fv
|
||||||
|
|
||||||
|
2 16+4*count*2*4 rendering command length
|
||||||
|
2 307 rendering command opcode
|
||||||
|
4 CARD32 location
|
||||||
|
4 CARD32 count
|
||||||
|
1 BOOL transpose
|
||||||
|
3 unused
|
||||||
|
4*count*2*4 LISTofFLOAT32 value
|
||||||
|
|
||||||
|
If the command is encoded in a glXRenderLarge request, the
|
||||||
|
command opcode and command length fields above are expanded to
|
||||||
|
4 bytes each:
|
||||||
|
|
||||||
|
4 20+4*count*2*4 rendering command length
|
||||||
|
4 307 rendering command opcode
|
||||||
|
|
||||||
|
UniformMatrix4x2fv
|
||||||
|
|
||||||
|
2 16+4*count*4*2 rendering command length
|
||||||
|
2 308 rendering command opcode
|
||||||
|
4 CARD32 location
|
||||||
|
4 CARD32 count
|
||||||
|
1 BOOL transpose
|
||||||
|
3 unused
|
||||||
|
4*count*4*2 LISTofFLOAT32 value
|
||||||
|
|
||||||
|
If the command is encoded in a glXRenderLarge request, the
|
||||||
|
command opcode and command length fields above are expanded to
|
||||||
|
4 bytes each:
|
||||||
|
|
||||||
|
4 20+4*count*4*2 rendering command length
|
||||||
|
4 308 rendering command opcode
|
||||||
|
|
||||||
|
UniformMatrix3x4fv
|
||||||
|
|
||||||
|
2 16+4*count*3*4 rendering command length
|
||||||
|
2 309 rendering command opcode
|
||||||
|
4 CARD32 location
|
||||||
|
4 CARD32 count
|
||||||
|
1 BOOL transpose
|
||||||
|
3 unused
|
||||||
|
4*count*3*4 LISTofFLOAT32 value
|
||||||
|
|
||||||
|
If the command is encoded in a glXRenderLarge request, the
|
||||||
|
command opcode and command length fields above are expanded to
|
||||||
|
4 bytes each:
|
||||||
|
|
||||||
|
4 20+4*count*3*4 rendering command length
|
||||||
|
4 309 rendering command opcode
|
||||||
|
|
||||||
|
UniformMatrix4x3fv
|
||||||
|
|
||||||
|
2 16+4*count*4*3 rendering command length
|
||||||
|
2 310 rendering command opcode
|
||||||
|
4 CARD32 location
|
||||||
|
4 CARD32 count
|
||||||
|
1 BOOL transpose
|
||||||
|
3 unused
|
||||||
|
4*count*4*3 LISTofFLOAT32 value
|
||||||
|
|
||||||
|
If the command is encoded in a glXRenderLarge request, the
|
||||||
|
command opcode and command length fields above are expanded to
|
||||||
|
4 bytes each:
|
||||||
|
|
||||||
|
4 20+4*count*4*3 rendering command length
|
||||||
|
4 310 rendering command opcode
|
||||||
|
|
||||||
|
OpenGL 3.0
|
||||||
|
----------
|
||||||
|
|
||||||
|
The following rendering commands are sent to the sever as part of a
|
||||||
|
glXRender request:
|
||||||
|
|
||||||
|
BindBufferRange
|
||||||
|
|
||||||
|
2 32 rendering command length
|
||||||
|
2 355 rendering command opcode
|
||||||
|
8 INT64 offset
|
||||||
|
8 INT64 size
|
||||||
|
4 ENUM target
|
||||||
|
4 CARD32 index
|
||||||
|
4 CARD32 buffer
|
||||||
|
|
||||||
|
BindBufferBase
|
||||||
|
|
||||||
|
2 16 rendering command length
|
||||||
|
2 356 rendering command opcode
|
||||||
|
4 ENUM target
|
||||||
|
4 CARD32 index
|
||||||
|
4 CARD32 buffer
|
||||||
|
|
||||||
|
BeginTransformFeedback
|
||||||
|
|
||||||
|
2 8 rendering command length
|
||||||
|
2 357 rendering command opcode
|
||||||
|
4 ENUM primitiveMode
|
||||||
|
|
||||||
|
EndTransformFeedback
|
||||||
|
|
||||||
|
2 4 rendering command length
|
||||||
|
2 358 rendering command opcode
|
||||||
|
|
||||||
|
ClearBufferfi
|
||||||
|
|
||||||
|
2 20 rendering command length
|
||||||
|
2 360 rendering command opcode
|
||||||
|
4 ENUM buffer
|
||||||
|
4 CARD32 drawbuffer
|
||||||
|
4 FLOAT32 depth
|
||||||
|
4 CARD32 stencil
|
||||||
|
|
||||||
|
ClearBufferfv
|
||||||
|
|
||||||
|
2 12+(4*n) rendering command length
|
||||||
|
2 361 rendering command opcode
|
||||||
|
4 ENUM buffer
|
||||||
|
0x1800 n=4 GL_COLOR
|
||||||
|
0x1801 n=1 GL_STENCIL
|
||||||
|
0x1802 n=1 GL_DEPTH
|
||||||
|
else n=0
|
||||||
|
4 CARD32 drawbuffer
|
||||||
|
4*n LISTofFLOAT32 value
|
||||||
|
|
||||||
|
ClearBufferiv
|
||||||
|
|
||||||
|
2 12+(4*n) rendering command length
|
||||||
|
2 362 rendering command opcode
|
||||||
|
4 ENUM buffer
|
||||||
|
0x1800 n=4 GL_COLOR
|
||||||
|
0x1801 n=1 GL_STENCIL
|
||||||
|
0x1802 n=1 GL_DEPTH
|
||||||
|
else n=0
|
||||||
|
4 CARD32 drawbuffer
|
||||||
|
4*n LISTofINT32 value
|
||||||
|
|
||||||
|
ClearBufferuiv
|
||||||
|
|
||||||
|
2 12+(4*n) rendering command length
|
||||||
|
2 363 rendering command opcode
|
||||||
|
4 ENUM buffer
|
||||||
|
0x1800 n=4 GL_COLOR
|
||||||
|
0x1801 n=1 GL_STENCIL
|
||||||
|
0x1802 n=1 GL_DEPTH
|
||||||
|
else n=0
|
||||||
|
4 CARD32 drawbuffer
|
||||||
|
4*n LISTofCARD32 value
|
||||||
|
|
||||||
|
The following rendering commands can be sent in a glXRender
|
||||||
|
or glXRenderLarge request.
|
||||||
|
|
||||||
|
TransformFeedbackVaryings
|
||||||
|
|
||||||
|
2 16+(n*4)+s+p rendering command length
|
||||||
|
2 359 rendering command opcode
|
||||||
|
4 CARD32 program
|
||||||
|
4 INT32 count
|
||||||
|
4 ENUM buffermode
|
||||||
|
n*4 LISTofINT32 lengths[n], n = count
|
||||||
|
s LISTofCHAR varyings, s = sum of all entries in the lengths
|
||||||
|
array
|
||||||
|
p unused, p = pad(s)
|
||||||
|
|
||||||
|
If the command is encoded in a glXRenderLarge request, the command
|
||||||
|
opcode and command length fields are expanded to 4 bytes each.
|
||||||
|
|
||||||
|
4 20+(n*4)+s+p rendering command length
|
||||||
|
4 359 rendering command opcode
|
||||||
|
|
||||||
|
lengths[i] is calculated as strlen(varyings[i]) + 1. The NUL terminator
|
||||||
|
is included when sending the varyings.
|
||||||
|
|
||||||
|
The following single commands are sent to the server as part of a
|
||||||
|
glXSingle request:
|
||||||
|
|
||||||
|
GetTransformFeedbackVarying
|
||||||
|
|
||||||
|
1 CARD8 opcode(X assigned)
|
||||||
|
1 213 GLX opcode
|
||||||
|
2 5 request length
|
||||||
|
4 GLX_CONTEXT_TAG context tag
|
||||||
|
4 CARD32 program
|
||||||
|
4 CARD32 index
|
||||||
|
4 CARD32 bufsize
|
||||||
|
=>
|
||||||
|
1 1 reply
|
||||||
|
1 unused
|
||||||
|
2 CARD16 sequence number
|
||||||
|
4 m reply length, m = (n == 0 ? 0 : (n + p) / 4)
|
||||||
|
4 unused
|
||||||
|
4 n-1 length
|
||||||
|
4 INT32 size
|
||||||
|
4 INT32 type
|
||||||
|
8 unused
|
||||||
|
n LISTofCHAR name, n = strlen(name)+1
|
||||||
|
p unused, p = pad(m)
|
||||||
|
|
||||||
|
GetStringi
|
||||||
|
|
||||||
|
1 CARD8 opcode (X assigned)
|
||||||
|
1 214 GLX opcode
|
||||||
|
2 4 request length
|
||||||
|
4 GLX_CONTEXT_TAG context tag
|
||||||
|
4 ENUM name
|
||||||
|
4 CARD32 index
|
||||||
|
=>
|
||||||
|
1 1 reply
|
||||||
|
1 1 unused
|
||||||
|
2 CARD16 sequence number
|
||||||
|
4 m reply length, m = (n + p) / 4
|
||||||
|
4 unused
|
||||||
|
4 CARD32 n
|
||||||
|
16 unused
|
||||||
|
n STRING8 string
|
||||||
|
p unused, p=pad(n)
|
||||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,289 @@
|
|||||||
|
# Copyright 2013-2020 The Khronos Group Inc.
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
# Relax NG schema for Khronos Registry XML
|
||||||
|
# See https://github.com/KhronosGroup/OpenGL-Registry
|
||||||
|
#
|
||||||
|
# Last modified 2013/06/14
|
||||||
|
# This definition is subject to change (mostly in the form of additions)
|
||||||
|
|
||||||
|
namespace xsd = "http://www.w3.org/2001/XMLSchema-datatypes"
|
||||||
|
|
||||||
|
# Toplevel is a <registry> tag.
|
||||||
|
# May be led by an optional <comment> tag containing e.g. copyrights.
|
||||||
|
start = element registry {
|
||||||
|
(
|
||||||
|
element comment { text } ? |
|
||||||
|
Types * |
|
||||||
|
Kinds * |
|
||||||
|
Groups * |
|
||||||
|
Enums * |
|
||||||
|
Commands * |
|
||||||
|
Feature * |
|
||||||
|
Extensions *
|
||||||
|
) *
|
||||||
|
}
|
||||||
|
|
||||||
|
# <types> defines a group of types
|
||||||
|
Types = element types {
|
||||||
|
Type *
|
||||||
|
}
|
||||||
|
|
||||||
|
# <type> defines a single type. It is usually a C typedef but
|
||||||
|
# may contain arbitrary C code.
|
||||||
|
# name - name of this type, if not present in the <name> tag
|
||||||
|
# api - matches a <feature> api attribute, if present
|
||||||
|
# requires - name of another type definition required by this one
|
||||||
|
# type - "group", if present, indicating a group of values in the
|
||||||
|
# corresponding <enums> definition.
|
||||||
|
# comment - unused
|
||||||
|
# <apientry /> - substitutes for an APIENTRY-style macro on output
|
||||||
|
# <name> - contains typename
|
||||||
|
Type = element type {
|
||||||
|
attribute api { text } ? ,
|
||||||
|
attribute requires { text } ? ,
|
||||||
|
attribute name { TypeName } ? ,
|
||||||
|
attribute type { text } ? ,
|
||||||
|
Comment ? ,
|
||||||
|
text ,
|
||||||
|
element apientry { text } ? ,
|
||||||
|
text ,
|
||||||
|
element name { TypeName } ? ,
|
||||||
|
text
|
||||||
|
}
|
||||||
|
|
||||||
|
# <kinds> defines descriptions for kinds.
|
||||||
|
Kinds = element kinds {
|
||||||
|
Kind *
|
||||||
|
}
|
||||||
|
|
||||||
|
# <kind> defines a description for a single kind.
|
||||||
|
Kind = element kind {
|
||||||
|
Name ,
|
||||||
|
attribute desc { text }
|
||||||
|
}
|
||||||
|
|
||||||
|
# <groups> defines a group of enum groups
|
||||||
|
Groups = element groups {
|
||||||
|
Group *
|
||||||
|
}
|
||||||
|
|
||||||
|
# <group> defines a single enum group. Enums may
|
||||||
|
# be in multiple groups.
|
||||||
|
# name - group name
|
||||||
|
# comment - unused
|
||||||
|
# <enum name=""> - members of the group
|
||||||
|
|
||||||
|
Group = element group {
|
||||||
|
Name ,
|
||||||
|
Comment ? ,
|
||||||
|
element enum { Name } *
|
||||||
|
}
|
||||||
|
|
||||||
|
# <enums> defines a group of enumerants
|
||||||
|
# namespace - identifies a numeric namespace
|
||||||
|
# group - identifies a functional subset of the namespace - same as group=""
|
||||||
|
# start, end - beginning and end of a numeric range in the namespace
|
||||||
|
# vendor - owner of the numeric range
|
||||||
|
# type - "bitmask", if present
|
||||||
|
# comment - unused
|
||||||
|
Enums = element enums {
|
||||||
|
attribute namespace { text } ? ,
|
||||||
|
attribute group { text } ? ,
|
||||||
|
attribute type { text } ? ,
|
||||||
|
attribute start { Integer } ? ,
|
||||||
|
attribute end { Integer } ? ,
|
||||||
|
Vendor ? ,
|
||||||
|
Comment ? ,
|
||||||
|
(Enum | Unused) *
|
||||||
|
}
|
||||||
|
# <enum> defines a single enumerant
|
||||||
|
# value - integer (including hex) value of the enumerant
|
||||||
|
# api - matches a <feature> api attribute, if present
|
||||||
|
# type - "u" (unsigned), "ull" (uint64), or integer if not present
|
||||||
|
# name - enumerant name
|
||||||
|
# group - identifies a functional subset of the namespace
|
||||||
|
# alias - another enumerant this is semantically identical to
|
||||||
|
# comment - unused
|
||||||
|
Enum = element enum {
|
||||||
|
(
|
||||||
|
attribute value { Integer } &
|
||||||
|
attribute api { text } ? &
|
||||||
|
attribute type { TypeSuffix } ? &
|
||||||
|
attribute name { text } &
|
||||||
|
attribute group { text } ? &
|
||||||
|
attribute alias { text } ? &
|
||||||
|
Comment ?
|
||||||
|
)
|
||||||
|
}
|
||||||
|
# <unused> defines a range of enumerants not currently being used
|
||||||
|
# start, end - beginning and end of an unused numeric range
|
||||||
|
# vendor - unused
|
||||||
|
# comment - unused
|
||||||
|
Unused = element unused {
|
||||||
|
attribute start { Integer } ,
|
||||||
|
attribute end { Integer } ? ,
|
||||||
|
Vendor ? ,
|
||||||
|
Comment ?
|
||||||
|
}
|
||||||
|
# <commands> defines a group of commands
|
||||||
|
# namespace - identifies a function namespace
|
||||||
|
Commands = element commands {
|
||||||
|
attribute namespace { text } ? ,
|
||||||
|
Command *
|
||||||
|
}
|
||||||
|
# <command> defines a single command
|
||||||
|
# <proto> is the C function prototype, including the return type
|
||||||
|
# <param> are function parameters, in order
|
||||||
|
# class - type of object name (object handle). Handles with different types are not compatible. So handle created as [class=buffer] can not be passed to [class=shader]
|
||||||
|
# <ptype> is a <type> name, if present
|
||||||
|
# <name> is the function / parameter name
|
||||||
|
# The textual contents of <proto> and <param> should be legal C
|
||||||
|
# for those parts of a function declaration.
|
||||||
|
# <alias> - denotes function aliasing
|
||||||
|
# name - name of aliased function
|
||||||
|
# <vecequiv> - denotes scalar / vector function equivalence
|
||||||
|
# name - name of corresponding vector form, e.g. (glColor3f -> glColor3fv)
|
||||||
|
# <glx> - information about GLX protocol
|
||||||
|
# type - "render", "single", or "vendor" for GLXRender, GLXSingle, GLXVendorPrivate{WithReply}
|
||||||
|
# opcode - numeric opcode of specified type for this function
|
||||||
|
# name - if present, protocol name (defaults to command name)
|
||||||
|
# comment - unused
|
||||||
|
Command = element command {
|
||||||
|
Comment ? ,
|
||||||
|
element proto {
|
||||||
|
attribute group { text } ? ,
|
||||||
|
attribute kind { text } ? ,
|
||||||
|
attribute class { text } ? ,
|
||||||
|
text ,
|
||||||
|
element ptype { TypeName } ? ,
|
||||||
|
text ,
|
||||||
|
element name { text } ,
|
||||||
|
text
|
||||||
|
} ,
|
||||||
|
element param {
|
||||||
|
attribute group { text } ? ,
|
||||||
|
attribute kind { text } ? ,
|
||||||
|
attribute class { text } ? ,
|
||||||
|
attribute len { text } ? ,
|
||||||
|
text ,
|
||||||
|
element ptype { TypeName } ? ,
|
||||||
|
text ,
|
||||||
|
element name { text } ,
|
||||||
|
text
|
||||||
|
} * ,
|
||||||
|
(
|
||||||
|
element alias {
|
||||||
|
Name
|
||||||
|
} ? &
|
||||||
|
element vecequiv {
|
||||||
|
Name
|
||||||
|
} ? &
|
||||||
|
element glx {
|
||||||
|
attribute type { text } ,
|
||||||
|
attribute opcode { xsd:integer } ,
|
||||||
|
Name ? ,
|
||||||
|
Comment ?
|
||||||
|
} *
|
||||||
|
)
|
||||||
|
}
|
||||||
|
# Each <feature> defines the interface of an API version (e.g. OpenGL 1.2)
|
||||||
|
# api - API tag (e.g. 'gl', 'gles2', etc. - used internally, not
|
||||||
|
# neccessarily an actual API name
|
||||||
|
# name - version name (C preprocessor name, e.g. GL_VERSION_4_2)
|
||||||
|
# number - version number, e.g. 4.2
|
||||||
|
# protect - additional #ifdef symbol to place around the feature
|
||||||
|
# <require> / <remove> contains features to require or remove in
|
||||||
|
# this version
|
||||||
|
# profile - only require/remove when generated profile matches
|
||||||
|
# comment - unused
|
||||||
|
Feature = element feature {
|
||||||
|
attribute api { text } ,
|
||||||
|
Name ,
|
||||||
|
attribute number { xsd:float } ,
|
||||||
|
attribute protect { text } ?,
|
||||||
|
Comment ? ,
|
||||||
|
(
|
||||||
|
element require {
|
||||||
|
ProfileName ? ,
|
||||||
|
Comment ? ,
|
||||||
|
InterfaceElement *
|
||||||
|
} |
|
||||||
|
element remove {
|
||||||
|
ProfileName ? ,
|
||||||
|
Comment ? ,
|
||||||
|
InterfaceElement *
|
||||||
|
}
|
||||||
|
) *
|
||||||
|
}
|
||||||
|
Extensions = element extensions {
|
||||||
|
Extension *
|
||||||
|
}
|
||||||
|
# Defines the interface of an API <extension>. Like a <feature>
|
||||||
|
# tag, but with a slightly different api attribute.
|
||||||
|
# api - regexp pattern matching one or more API tags, indicating
|
||||||
|
# which APIs the extension is known to work with. The only
|
||||||
|
# syntax supported is <name>{|<name>}* and each name must
|
||||||
|
# exactly match an API being generated (implicit ^$ surrounding).
|
||||||
|
# In addition, <require> / <remove> tags also support an
|
||||||
|
# api attribute:
|
||||||
|
# api - only require/remove these features for the matching API.
|
||||||
|
# Not a regular expression.
|
||||||
|
Extension = element extension {
|
||||||
|
Name ,
|
||||||
|
attribute protect { text } ?,
|
||||||
|
attribute supported { StringGroup } ? ,
|
||||||
|
Comment ? ,
|
||||||
|
(
|
||||||
|
element require {
|
||||||
|
attribute api { text } ? ,
|
||||||
|
ProfileName ? ,
|
||||||
|
Comment ? ,
|
||||||
|
InterfaceElement *
|
||||||
|
} |
|
||||||
|
element remove {
|
||||||
|
attribute api { text } ? ,
|
||||||
|
ProfileName ? ,
|
||||||
|
Comment ? ,
|
||||||
|
InterfaceElement *
|
||||||
|
}
|
||||||
|
) *
|
||||||
|
}
|
||||||
|
# Contents of a <require> / <remove> tag, defining a group
|
||||||
|
# of features to require or remove.
|
||||||
|
# <type> / <enum> / <command> all have attributes
|
||||||
|
# name - feature name which must match
|
||||||
|
InterfaceElement =
|
||||||
|
element type {
|
||||||
|
Name ,
|
||||||
|
Comment ?
|
||||||
|
} |
|
||||||
|
element enum {
|
||||||
|
Name ,
|
||||||
|
Comment ?
|
||||||
|
} |
|
||||||
|
element command {
|
||||||
|
Name ,
|
||||||
|
Comment ?
|
||||||
|
}
|
||||||
|
|
||||||
|
# Integers are allowed to be either decimal or C-hex (0x[0-9A-F]+), but
|
||||||
|
# XML Schema types don't seem to support hex notation, so we use this
|
||||||
|
# as a placeholder.
|
||||||
|
Integer = text
|
||||||
|
|
||||||
|
# TypeName is an argument/return value C type name
|
||||||
|
TypeName = text
|
||||||
|
|
||||||
|
# TypeSuffix is a C numeric type suffix, e.g. 'u' or 'ull'
|
||||||
|
TypeSuffix = text
|
||||||
|
|
||||||
|
# StringGroup is a regular expression with an implicit
|
||||||
|
# '^(' and ')$' bracketing it.
|
||||||
|
StringGroup = text
|
||||||
|
|
||||||
|
# Repeatedly used attributes
|
||||||
|
ProfileName = attribute profile { text }
|
||||||
|
Vendor = attribute vendor { text }
|
||||||
|
Comment = attribute comment { text }
|
||||||
|
Name = attribute name { text }
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
/*% cc -I. -I../api -I../../../../../registry/trunk/egl/api/ -c % ; rm testesext.o
|
||||||
|
*
|
||||||
|
* Test to make sure gl3.h builds properly.
|
||||||
|
* Will also use SVN internal versions of gl3platform.h
|
||||||
|
* and khrplatform.h (if needed) (via GLES and KHR symlinks into
|
||||||
|
* appropriate parts of the tree).
|
||||||
|
*/
|
||||||
|
#define GL_GLEXT_PROTOTYPES
|
||||||
|
#include "GLES3/gl31.h"
|
||||||
|
#include "GLES2/gl2ext.h"
|
||||||
|
|
||||||
|
#if GL_NV_non_square_matrices != 1
|
||||||
|
#error "No extension GL_NV_non_square_matrices!"
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
/*% /lib/cpp -I../api testglext.c > testglext.i ; cc -c % ; rm testglext.[oi]
|
||||||
|
*/
|
||||||
|
#define GL_GLEXT_LEGACY
|
||||||
|
#include <GL/gl.h>
|
||||||
|
#define GL_GLEXT_PROTOTYPES
|
||||||
|
#include "GL/glext.h"
|
||||||
|
|
||||||
|
#define GLX_GLXEXT_LEGACY
|
||||||
|
#include <GL/glx.h>
|
||||||
|
|
||||||
|
/* Necessary to avoid token redefinition warnings */
|
||||||
|
#undef GLX_SAMPLE_BUFFERS
|
||||||
|
#undef GLX_SAMPLES
|
||||||
|
#undef GLX_FRONT_EXT
|
||||||
|
#undef GLX_BACK_EXT
|
||||||
|
|
||||||
|
#define GLX_GLXEXT_PROTOTYPES
|
||||||
|
#include "GL/glxext.h"
|
||||||
|
|
||||||
|
int VERSION_4_3 = GL_VERSION_4_3;
|
||||||
|
/* These should be the same */
|
||||||
|
int mcsor = GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES;
|
||||||
|
int mciufo = GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS;
|
||||||
|
|
||||||
|
/* See if latest extension is included */
|
||||||
|
int latest_ext = GL_NV_blend_equation_advanced;
|
||||||
|
GLenum latest_enum = GL_CONJOINT_NV;
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
Miscellaneous data about extensions:
|
||||||
|
|
||||||
|
- GLU enumerant reserved values
|
||||||
|
- Information about extension vendors (probably out of date and incomplete)
|
||||||
|
|
||||||
|
GLU Enumerants
|
||||||
|
==============
|
||||||
|
|
||||||
|
Value Range Definition Contact
|
||||||
|
Control (if different)
|
||||||
|
|
||||||
|
100208 SGI
|
||||||
|
|
||||||
|
|
||||||
|
Definition Contact Email
|
||||||
|
Control
|
||||||
|
========== ======= =====
|
||||||
|
OpenGL ARB Jon Leech jon 'at' alumni.caltech.edu
|
||||||
|
Khronos Jon Leech jon 'at' alumni.caltech.edu (OpenML, OpenGL ES)
|
||||||
|
Apple Bob Beretta beretta 'at' apple.com
|
||||||
|
ARM Tom Olson tom.olson 'at' arm.com
|
||||||
|
AMD and ATI Graham Sellers graham.sellers 'at' amd.com
|
||||||
|
ATI/NVIDIA Graham Sellers graham.sellers 'at' amd.com
|
||||||
|
Broadcom Gary Sweet gsweet 'at' broadcom.com
|
||||||
|
HP Andrew Wiltzius andrew.wiltzius 'at' hp.com
|
||||||
|
Imagination Graham Connor gconnor 'at' videologic.com
|
||||||
|
Intel Ian Romanick ian.d.romanick 'at' intel.com
|
||||||
|
Mesa Brian Paul brianp 'at' mesa3d.org
|
||||||
|
Microsoft Dave Aronson daronson 'at' microsoft.com
|
||||||
|
NEC Seiji Uchida uchida 'at' hpc.bs1.fc.nec.co.jp
|
||||||
|
NVIDIA James Jones jajones 'at' nvidia.com
|
||||||
|
S3 Yanjun Zhang YanjunZhang 'at' s3graphics.com
|
||||||
|
Vivante Frido Garritsen TBD
|
||||||
|
Samsung Jeff Vigil j.vigil 'at' samsung.com
|
||||||
|
Qualcomm Ashish Mathur asmathur@qti.qualcomm.com
|
||||||
|
|
||||||
|
Out of business / acquired / unknown:
|
||||||
|
|
||||||
|
3Dfx - Acquired by NVIDIA
|
||||||
|
3Dlabs - Acquired by Creative, refocused on mobile, renamed ZiiLabs
|
||||||
|
ADD - Out of business
|
||||||
|
ATI - Acquired by AMD
|
||||||
|
Compaq - Acquired by HP
|
||||||
|
DEC - Acquired by Compaq, then HP
|
||||||
|
E&S - No longer in the graphics business (sells planetarium displays)
|
||||||
|
HP - No longer in the graphics business (other than as a system integrator)
|
||||||
|
IBM - No longer in the graphics business (other than as a system integrator)
|
||||||
|
Intense3D - Acquired by 3Dlabs
|
||||||
|
Intergraph - Acquired by 3Dlabs. Spinoff of Intense3D.
|
||||||
|
Micron - No longer in the graphics business
|
||||||
|
KPC (Kubota) - Out of business
|
||||||
|
PGI (Pacific Graphics Inc.) - Acquired by Template Graphics Systems
|
||||||
|
Pixelfusion - No longer in the graphics business
|
||||||
|
Rendition - Acquired by Micron
|
||||||
|
SGI (Silicon Graphics Inc.) - Acquired by Silicon Graphics International, then HP
|
||||||
|
SUN - Acquired by Oracle. No longer in the graphics business.
|
||||||
|
XGI - Acquired by Silicon Integrated Systems. No longer in the graphics business.
|
||||||
|
ZiiLabs - Still has a website but appears to be inactive as of 2017-01-12.
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,106 @@
|
|||||||
|
<type>struct <name>_POINTFLOAT</name> {
|
||||||
|
FLOAT x;
|
||||||
|
FLOAT y;
|
||||||
|
};</type>
|
||||||
|
<type>typedef struct _POINTFLOAT <name>POINTFLOAT</name>;</type>
|
||||||
|
<type>typedef struct _POINTFLOAT *<name>PPOINTFLOAT</name>;</type>
|
||||||
|
<type requires="POINTFLOAT">struct <name>_GLYPHMETRICSFLOAT</name> {
|
||||||
|
FLOAT gmfBlackBoxX;
|
||||||
|
FLOAT gmfBlackBoxY;
|
||||||
|
POINTFLOAT gmfptGlyphOrigin;
|
||||||
|
FLOAT gmfCellIncX;
|
||||||
|
FLOAT gmfCellIncY;
|
||||||
|
};</type>
|
||||||
|
<type requires="_GLYPHMETRICSFLOAT">typedef struct _GLYPHMETRICSFLOAT <name>GLYPHMETRICSFLOAT</name>;</type>
|
||||||
|
<type requires="_GLYPHMETRICSFLOAT">typedef struct _GLYPHMETRICSFLOAT *<name>PGLYPHMETRICSFLOAT</name>;</type>
|
||||||
|
|
||||||
|
typedef struct tagPIXELFORMATDESCRIPTOR {
|
||||||
|
WORD nSize;
|
||||||
|
WORD nVersion;
|
||||||
|
DWORD dwFlags;
|
||||||
|
BYTE iPixelType;
|
||||||
|
BYTE cColorBits;
|
||||||
|
BYTE cRedBits;
|
||||||
|
BYTE cRedShift;
|
||||||
|
BYTE cGreenBits;
|
||||||
|
BYTE cGreenShift;
|
||||||
|
BYTE cBlueBits;
|
||||||
|
BYTE cBlueShift;
|
||||||
|
BYTE cAlphaBits;
|
||||||
|
BYTE cAlphaShift;
|
||||||
|
BYTE cAccumBits;
|
||||||
|
BYTE cAccumRedBits;
|
||||||
|
BYTE cAccumGreenBits;
|
||||||
|
BYTE cAccumBlueBits;
|
||||||
|
BYTE cAccumAlphaBits;
|
||||||
|
BYTE cDepthBits;
|
||||||
|
BYTE cStencilBits;
|
||||||
|
BYTE cAuxBuffers;
|
||||||
|
BYTE iLayerType;
|
||||||
|
BYTE bReserved;
|
||||||
|
DWORD dwLayerMask;
|
||||||
|
DWORD dwVisibleMask;
|
||||||
|
DWORD dwDamageMask;
|
||||||
|
} PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESCRIPTOR;
|
||||||
|
|
||||||
|
PFD_DRAW_TO_WINDOW The buffer can draw to a window or device surface.
|
||||||
|
PFD_DRAW_TO_BITMAP The buffer can draw to a memory bitmap.
|
||||||
|
PFD_SUPPORT_GDI The buffer supports GDI drawing. This flag and PFD_DOUBLEBUFFER are mutually exclusive in the current generic implementation.
|
||||||
|
PFD_SUPPORT_OPENGL The buffer supports OpenGL drawing.
|
||||||
|
PFD_GENERIC_ACCELERATED The pixel format is supported by a device driver that accelerates the generic implementation. If this flag is clear and the PFD_GENERIC_FORMAT flag is set, the pixel format is supported by the generic implementation only.
|
||||||
|
PFD_GENERIC_FORMAT The pixel format is supported by the GDI software implementation, which is also known as the generic implementation. If this bit is clear, the pixel format is supported by a device driver or hardware.
|
||||||
|
PFD_NEED_PALETTE The buffer uses RGBA pixels on a palette-managed device. A logical palette is required to achieve the best results for this pixel type. Colors in the palette should be specified according to the values of the cRedBits, cRedShift, cGreenBits, cGreenShift, cBluebits, and cBlueShift members. The palette should be created and realized in the device context before calling wglMakeCurrent.
|
||||||
|
PFD_NEED_SYSTEM_PALETTE Defined in the pixel format descriptors of hardware that supports one hardware palette in 256-color mode only. For such systems to use hardware acceleration, the hardware palette must be in a fixed order (for example, 3-3-2) when in RGBA mode or must match the logical palette when in color-index mode.
|
||||||
|
PFD_DOUBLEBUFFER The buffer is double-buffered. This flag and PFD_SUPPORT_GDI are mutually exclusive in the current generic implementation.
|
||||||
|
PFD_STEREO The buffer is stereoscopic. This flag is not supported in the current generic implementation.
|
||||||
|
PFD_SWAP_LAYER_BUFFERS Indicates whether a device can swap individual layer planes with pixel formats that include double-buffered overlay or underlay planes. Otherwise all layer planes are swapped together as a group. When this flag is set, wglSwapLayerBuffers is supported.
|
||||||
|
PFD_DEPTH_DONTCARE The requested pixel format can either have or not have a depth buffer. To select a pixel format without a depth buffer, you must specify this flag. The requested pixel format can be with or without a depth buffer. Otherwise, only pixel formats with a depth buffer are considered.
|
||||||
|
PFD_DOUBLEBUFFER_DONTCARE The requested pixel format can be either single- or double-buffered.
|
||||||
|
PFD_STEREO_DONTCARE The requested pixel format can be either monoscopic or stereoscopic.
|
||||||
|
PFD_SWAP_COPY Specifies the content of the back buffer in the double-buffered main color plane following a buffer swap. Swapping the color buffers causes the content of the back buffer to be copied to the front buffer. The content of the back buffer is not affected by the swap. PFD_SWAP_COPY is a hint only and might not be provided by a driver.
|
||||||
|
PFD_SWAP_EXCHANGE Specifies the content of the back buffer in the double-buffered main color plane following a buffer swap. Swapping the color buffers causes the exchange of the back buffer's content with the front buffer's content. Following the swap, the back buffer's content contains the front buffer's content before the swap. PFD_SWAP_EXCHANGE is a hint only and might not be provided by a driver.
|
||||||
|
PFD_TYPE_RGBA RGBA pixels. Each pixel has four components in this order: red, green, blue, and alpha.
|
||||||
|
PFD_TYPE_COLORINDEX Color-index pixels. Each pixel uses a color-index value.
|
||||||
|
typedef struct tag_LAYERPLANEDESCRIPTOR {
|
||||||
|
WORD nSize;
|
||||||
|
WORD nVersion;
|
||||||
|
DWORD dwFlags;
|
||||||
|
BYTE iPixelType;
|
||||||
|
BYTE cColorBits;
|
||||||
|
BYTE cRedBits;
|
||||||
|
BYTE cRedShift;
|
||||||
|
BYTE cGreenBits;
|
||||||
|
BYTE cGreenShift;
|
||||||
|
BYTE cBlueBits;
|
||||||
|
BYTE cBlueShift;
|
||||||
|
BYTE cAlphaBits;
|
||||||
|
BYTE cAlphaShift;
|
||||||
|
BYTE cAccumBits;
|
||||||
|
BYTE cAccumRedBits;
|
||||||
|
BYTE cAccumGreenBits;
|
||||||
|
BYTE cAccumBlueBits;
|
||||||
|
BYTE cAccumAlphaBits;
|
||||||
|
BYTE cDepthBits;
|
||||||
|
BYTE cStencilBits;
|
||||||
|
BYTE cAuxBuffers;
|
||||||
|
BYTE iLayerType;
|
||||||
|
BYTE bReserved;
|
||||||
|
COLORREF crTransparent;
|
||||||
|
} LAYERPLANEDESCRIPTOR, *PLAYERPLANEDESCRIPTOR;
|
||||||
|
LPD_SUPPORT_OPENGL The layer plane supports OpenGL drawing.
|
||||||
|
LPD_SUPPORT_GDI The layer plane supports GDI drawing. The current implementation of OpenGL doesn't support this flag.
|
||||||
|
LPD_DOUBLEBUFFER The layer plane is double-buffered. A layer plane can be double-buffered even when the main plane is single-buffered and vice versa.
|
||||||
|
LPD_STEREO The layer plane is stereoscopic. A layer plane can be stereoscopic even when the main plane is monoscopic and vice versa.
|
||||||
|
LPD_SWAP_EXCHANGE In a double-buffered layer plane, swapping the color buffer exchanges the front buffer and back buffer contents. The back buffer then contains the contents of the front buffer before the swap. This flag is a hint only and might not be provided by a driver.
|
||||||
|
LPD_SWAP_COPY In a double-buffered layer plane, swapping the color buffer copies the back buffer contents to the front buffer. The swap does not affect the back buffer contents. This flag is a hint only and might not be provided by a driver.
|
||||||
|
LPD_TRANSPARENT The crTransparent member of this structure contains a transparent color or index value that enables underlying layers to show through this layer. All layer planes, except the lowest-numbered underlay layer, have a transparent color or index.
|
||||||
|
LPD_SHARE_DEPTH The layer plane shares the depth buffer with the main plane.
|
||||||
|
LPD_SHARE_STENCIL The layer plane shares the stencil buffer with the main plane.
|
||||||
|
LPD_SHARE_ACCUM The layer plane shares the accumulation buffer with the main plane.
|
||||||
|
|
||||||
|
iPixelType
|
||||||
|
Specifies the type of pixel data. The following types are defined.
|
||||||
|
Value Meaning
|
||||||
|
LPD_TYPE_RGBA RGBA pixels. Each pixel has four components: red, green, blue, and alpha.
|
||||||
|
LPD_TYPE_COLORINDEX Color-index pixels. Each pixel uses a color-index value.
|
||||||
|
|
||||||
Reference in New Issue
Block a user