From 242d4a972b4cd2f1522e5e3c2f691761149328eb Mon Sep 17 00:00:00 2001 From: josch Date: Sun, 23 Nov 2008 21:07:47 +0100 Subject: [PATCH] initial version --- extract.py | 409 + hr.py | 51 + lib/__init__.py | 0 lib/h3m.py | 596 + lib/interface.py | 38 + lib/mapset.py | 382 + lib/mapview.py | 335 + lib/window.py | 52 + pyglet/__init__.py | 363 + pyglet/app/__init__.py | 297 + pyglet/app/carbon.py | 144 + pyglet/app/win32.py | 106 + pyglet/app/xlib.py | 99 + pyglet/clock.py | 948 ++ pyglet/com.py | 154 + pyglet/event.py | 435 + pyglet/font/__init__.py | 695 ++ pyglet/font/base.py | 442 + pyglet/font/carbon.py | 438 + pyglet/font/freetype.py | 354 + pyglet/font/freetype_lib.py | 427 + pyglet/font/ttf.py | 635 + pyglet/font/win32.py | 574 + pyglet/gl/__init__.py | 507 + pyglet/gl/agl.py | 452 + pyglet/gl/gl.py | 2156 ++++ pyglet/gl/gl_info.py | 196 + pyglet/gl/glext_arb.py | 9349 ++++++++++++++ pyglet/gl/glext_missing.py | 127 + pyglet/gl/glext_nv.py | 10240 ++++++++++++++++ pyglet/gl/glu.py | 494 + pyglet/gl/glu_info.py | 160 + pyglet/gl/glx.py | 587 + pyglet/gl/glx_info.py | 143 + pyglet/gl/glxext_arb.py | 756 ++ pyglet/gl/glxext_mesa.py | 45 + pyglet/gl/glxext_nv.py | 901 ++ pyglet/gl/lib.py | 144 + pyglet/gl/lib_agl.py | 74 + pyglet/gl/lib_glx.py | 92 + pyglet/gl/lib_wgl.py | 153 + pyglet/gl/wgl.py | 374 + pyglet/gl/wgl_info.py | 71 + pyglet/gl/wglext_arb.py | 811 ++ pyglet/gl/wglext_nv.py | 909 ++ pyglet/graphics/__init__.py | 721 ++ pyglet/graphics/allocation.py | 390 + pyglet/graphics/vertexattribute.py | 506 + pyglet/graphics/vertexbuffer.py | 597 + pyglet/graphics/vertexdomain.py | 778 ++ pyglet/image/__init__.py | 2501 ++++ pyglet/image/atlas.py | 259 + pyglet/image/codecs/__init__.py | 231 + pyglet/image/codecs/bmp.py | 359 + pyglet/image/codecs/dds.py | 238 + pyglet/image/codecs/gdiplus.py | 273 + pyglet/image/codecs/gdkpixbuf2.py | 165 + pyglet/image/codecs/gif.py | 169 + pyglet/image/codecs/pil.py | 110 + pyglet/image/codecs/png.py | 110 + pyglet/image/codecs/pypng.py | 1092 ++ pyglet/image/codecs/quicktime.py | 287 + pyglet/image/codecs/s3tc.py | 386 + pyglet/info.py | 191 + pyglet/lib.py | 303 + pyglet/media/__init__.py | 1404 +++ pyglet/media/avbin.py | 477 + pyglet/media/drivers/__init__.py | 34 + pyglet/media/drivers/alsa/__init__.py | 301 + pyglet/media/drivers/alsa/asound.py | 9673 +++++++++++++++ pyglet/media/drivers/directsound/__init__.py | 394 + .../media/drivers/directsound/lib_dsound.py | 408 + pyglet/media/drivers/openal/__init__.py | 360 + pyglet/media/drivers/openal/lib_alc.py | 286 + pyglet/media/drivers/openal/lib_openal.py | 655 + pyglet/media/drivers/silent.py | 158 + pyglet/media/procedural.py | 181 + pyglet/media/riff.py | 249 + pyglet/resource.py | 685 ++ pyglet/sprite.py | 568 + pyglet/text/__init__.py | 505 + pyglet/text/caret.py | 591 + pyglet/text/document.py | 731 ++ pyglet/text/formats/__init__.py | 40 + pyglet/text/formats/attributed.py | 139 + pyglet/text/formats/html.py | 364 + pyglet/text/formats/plaintext.py | 47 + pyglet/text/formats/structured.py | 261 + pyglet/text/layout.py | 2390 ++++ pyglet/text/runlist.py | 418 + pyglet/window/__init__.py | 1682 +++ pyglet/window/carbon/__init__.py | 1366 +++ pyglet/window/carbon/constants.py | 525 + pyglet/window/carbon/quartzkey.py | 270 + pyglet/window/carbon/types.py | 159 + pyglet/window/event.py | 177 + pyglet/window/key.py | 407 + pyglet/window/mouse.py | 67 + pyglet/window/win32/__init__.py | 1191 ++ pyglet/window/win32/constants.py | 4986 ++++++++ pyglet/window/win32/types.py | 223 + pyglet/window/win32/winkey.py | 237 + pyglet/window/xlib/__init__.py | 1506 +++ pyglet/window/xlib/cursorfont.py | 120 + pyglet/window/xlib/xinerama.py | 112 + pyglet/window/xlib/xlib.py | 5485 +++++++++ pyglet/window/xlib/xsync.py | 471 + 107 files changed, 86684 insertions(+) create mode 100644 extract.py create mode 100644 hr.py create mode 100644 lib/__init__.py create mode 100644 lib/h3m.py create mode 100644 lib/interface.py create mode 100644 lib/mapset.py create mode 100644 lib/mapview.py create mode 100644 lib/window.py create mode 100644 pyglet/__init__.py create mode 100644 pyglet/app/__init__.py create mode 100644 pyglet/app/carbon.py create mode 100644 pyglet/app/win32.py create mode 100644 pyglet/app/xlib.py create mode 100644 pyglet/clock.py create mode 100644 pyglet/com.py create mode 100644 pyglet/event.py create mode 100644 pyglet/font/__init__.py create mode 100644 pyglet/font/base.py create mode 100644 pyglet/font/carbon.py create mode 100644 pyglet/font/freetype.py create mode 100644 pyglet/font/freetype_lib.py create mode 100644 pyglet/font/ttf.py create mode 100644 pyglet/font/win32.py create mode 100644 pyglet/gl/__init__.py create mode 100644 pyglet/gl/agl.py create mode 100644 pyglet/gl/gl.py create mode 100644 pyglet/gl/gl_info.py create mode 100644 pyglet/gl/glext_arb.py create mode 100644 pyglet/gl/glext_missing.py create mode 100644 pyglet/gl/glext_nv.py create mode 100644 pyglet/gl/glu.py create mode 100644 pyglet/gl/glu_info.py create mode 100644 pyglet/gl/glx.py create mode 100644 pyglet/gl/glx_info.py create mode 100644 pyglet/gl/glxext_arb.py create mode 100644 pyglet/gl/glxext_mesa.py create mode 100644 pyglet/gl/glxext_nv.py create mode 100644 pyglet/gl/lib.py create mode 100644 pyglet/gl/lib_agl.py create mode 100644 pyglet/gl/lib_glx.py create mode 100644 pyglet/gl/lib_wgl.py create mode 100755 pyglet/gl/wgl.py create mode 100644 pyglet/gl/wgl_info.py create mode 100644 pyglet/gl/wglext_arb.py create mode 100644 pyglet/gl/wglext_nv.py create mode 100644 pyglet/graphics/__init__.py create mode 100644 pyglet/graphics/allocation.py create mode 100644 pyglet/graphics/vertexattribute.py create mode 100644 pyglet/graphics/vertexbuffer.py create mode 100644 pyglet/graphics/vertexdomain.py create mode 100644 pyglet/image/__init__.py create mode 100644 pyglet/image/atlas.py create mode 100644 pyglet/image/codecs/__init__.py create mode 100644 pyglet/image/codecs/bmp.py create mode 100644 pyglet/image/codecs/dds.py create mode 100644 pyglet/image/codecs/gdiplus.py create mode 100644 pyglet/image/codecs/gdkpixbuf2.py create mode 100644 pyglet/image/codecs/gif.py create mode 100644 pyglet/image/codecs/pil.py create mode 100644 pyglet/image/codecs/png.py create mode 100644 pyglet/image/codecs/pypng.py create mode 100644 pyglet/image/codecs/quicktime.py create mode 100644 pyglet/image/codecs/s3tc.py create mode 100644 pyglet/info.py create mode 100644 pyglet/lib.py create mode 100644 pyglet/media/__init__.py create mode 100644 pyglet/media/avbin.py create mode 100644 pyglet/media/drivers/__init__.py create mode 100644 pyglet/media/drivers/alsa/__init__.py create mode 100644 pyglet/media/drivers/alsa/asound.py create mode 100644 pyglet/media/drivers/directsound/__init__.py create mode 100644 pyglet/media/drivers/directsound/lib_dsound.py create mode 100644 pyglet/media/drivers/openal/__init__.py create mode 100644 pyglet/media/drivers/openal/lib_alc.py create mode 100644 pyglet/media/drivers/openal/lib_openal.py create mode 100644 pyglet/media/drivers/silent.py create mode 100644 pyglet/media/procedural.py create mode 100644 pyglet/media/riff.py create mode 100644 pyglet/resource.py create mode 100644 pyglet/sprite.py create mode 100644 pyglet/text/__init__.py create mode 100644 pyglet/text/caret.py create mode 100644 pyglet/text/document.py create mode 100644 pyglet/text/formats/__init__.py create mode 100644 pyglet/text/formats/attributed.py create mode 100644 pyglet/text/formats/html.py create mode 100644 pyglet/text/formats/plaintext.py create mode 100644 pyglet/text/formats/structured.py create mode 100644 pyglet/text/layout.py create mode 100644 pyglet/text/runlist.py create mode 100644 pyglet/window/__init__.py create mode 100644 pyglet/window/carbon/__init__.py create mode 100644 pyglet/window/carbon/constants.py create mode 100644 pyglet/window/carbon/quartzkey.py create mode 100644 pyglet/window/carbon/types.py create mode 100644 pyglet/window/event.py create mode 100644 pyglet/window/key.py create mode 100644 pyglet/window/mouse.py create mode 100644 pyglet/window/win32/__init__.py create mode 100644 pyglet/window/win32/constants.py create mode 100644 pyglet/window/win32/types.py create mode 100644 pyglet/window/win32/winkey.py create mode 100644 pyglet/window/xlib/__init__.py create mode 100644 pyglet/window/xlib/cursorfont.py create mode 100644 pyglet/window/xlib/xinerama.py create mode 100644 pyglet/window/xlib/xlib.py create mode 100644 pyglet/window/xlib/xsync.py diff --git a/extract.py b/extract.py new file mode 100644 index 0000000..832f8fe --- /dev/null +++ b/extract.py @@ -0,0 +1,409 @@ +#!/usr/bin/python +""" + homm3lodextract - extract data from heroes of might and magic 3 lod + archives and convert pcx images and def animations to png + images + + copyright 2008 - Johannes 'josch' Schauer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +""" + +import zlib, os +import struct +import sys + +import Image, ImageDraw + +def read_frame_3(width, height, data): + length = height*width/32 #length of scanline + #UNSIGNED short here!! + offsets = struct.unpack("%dH"%length, data[:length*2]) + offsets += (len(data),) + + raw = "" + for i in xrange(len(offsets)-1): + line = data[offsets[i]:offsets[i+1]] + pos = 0 + while pos < len(line): + count = ord(line[pos]) + if 0x00 <= count <= 0x1F: #empty + raw += '\x00'*(count+1) + pos +=1 + elif 0x20 <= count <= 0x3F: #light shadow + raw += '\x01'*(count-31) + pos +=1 + elif 0x40 <= count <= 0x5F: #only used in Tshre.def and AvGnoll.def + raw += '\x02'*(count-63) + pos +=1 + elif 0x60 <= count <= 0x7F: #only used in Tshre.def + raw += '\x03'*(count-95) + pos +=1 + elif 0x80 <= count <= 0x9F: #strong shadow + raw += '\x04'*(count-127) + pos +=1 + elif 0xA0 <= count <= 0xBF: #replaced by player color + raw += '\x05'*(count-159) + pos +=1 + elif 0xE0 <= count <= 0xFF: #normal colors + raw += line[pos+1:pos+count-222] + pos += count-222 + else: + raise Exception("%02X"%count) + return raw + +def read_frame_1(width, height, data): + try: + offsets = struct.unpack("%di"%height, data[:height*4]) + except: + #this failes for SGTWMTB.def + print "cannot read scanline offses" + return None + offsets += (len(data),) + + raw = "" + for i in xrange(len(offsets)-1): + line = data[offsets[i]:offsets[i+1]] + pos = 0 + while pos < len(line): + try: + count = ord(line[pos+1])+1 + except IndexError: + #this failes for SGTWMTA.def, SGTWMTB.def + print "cannot read scanline" + return None + if ord(line[pos]) is 0xFF: + raw+=line[pos+2:pos+2+count] + pos+=2+count + else: + raw+=line[pos]*count + pos+=2 + return raw + +def save_frame(path, num, data, palette, width, height, fname): + (data_size, frame_type, fwidth, fheight, img_width, img_height, offset_x, + offset_y) = struct.unpack("8i", data[0:32]) + + #this only does not match in OVSLOT.def + if width != fwidth: + print "frame width %d does not match def width %d"%(fwidth, width) + if height != fheight: + print "frame height %d does not match def height %d"%(fheight, height) + data = data[32:32+data_size] + + if frame_type is 0: + #type 0 is raw indexed image data + buffer = data + elif frame_type is 1: + buffer = read_frame_1(img_width, img_height, data) + elif frame_type is 2: + #this is seldomly used and seems to decode fine using type3 + buffer = read_frame_3(img_width, img_height, data) + elif frame_type is 3: + buffer = read_frame_3(img_width, img_height, data) + else: + raise Exception("frame type %d not supported"%frame_type) + + if buffer is not None: + im = Image.new("P", (fwidth, fheight), 0x00) + im.paste( + Image.frombuffer( + 'RGB', + (img_width, img_height), + buffer, + 'raw', 'P', 0, 1), + (offset_x, offset_y)) + + if fname == "clrrvr.def": + path = os.path.join(path, "%d"%num) + if not os.path.exists(path): + os.makedirs(path) + for i in xrange(12): + im.putpalette(palette[:189*3] + +palette[201*3-i*3:201*3] + +palette[189*3:201*3-i*3] + +palette[201*3:]) + im2 = im.convert("RGBA") + data = im2.load() + for x in xrange(im.size[0]): + for y in xrange(im.size[1]): + if data[x, y] == (0, 255, 255, 255): + data[x, y] = (0, 0, 0, 0) + if os.path.exists(os.path.join(path, "%d.png"%i)): + print "overwriting %s" % os.path.join(path, "%d.png"%i) + im2.save(os.path.join(path, "%d.png"%i), "PNG") + elif fname == "lavrvr.def": + path = os.path.join(path, "%d"%num) + if not os.path.exists(path): + os.makedirs(path) + for i in xrange(9): + im.putpalette(palette[:240*3] + +palette[249*3-i*3:249*3] + +palette[240*3:249*3-i*3] + +palette[249*3:]) + im2 = im.convert("RGBA") + data = im2.load() + for x in xrange(im.size[0]): + for y in xrange(im.size[1]): + if data[x, y] == (0, 255, 255, 255): + data[x, y] = (0, 0, 0, 0) + if os.path.exists(os.path.join(path, "%d.png"%i)): + print "overwriting %s" % os.path.join(path, "%d.png"%i) + im2.save(os.path.join(path, "%d.png"%i), "PNG") + elif fname == "mudrvr.def": + path = os.path.join(path, "%d"%num) + if not os.path.exists(path): + os.makedirs(path) + for i in xrange(12): + im.putpalette(palette[:228*3] + +palette[240*3-i*3:240*3] + +palette[228*3:240*3-i*3] + +palette[240*3:]) + im2 = im.convert("RGBA") + data = im2.load() + for x in xrange(im.size[0]): + for y in xrange(im.size[1]): + if data[x, y] == (0, 255, 255, 255): + data[x, y] = (0, 0, 0, 0) + if os.path.exists(os.path.join(path, "%d.png"%i)): + print "overwriting %s" % os.path.join(path, "%d.png"%i) + im2.save(os.path.join(path, "%d.png"%i), "PNG") + elif fname == "watrtl.def": + path = os.path.join(path, "%d"%num) + if not os.path.exists(path): + os.makedirs(path) + for i in xrange(12): + im.putpalette(palette[:229*3] + +palette[241*3-i*3:241*3] + +palette[229*3:241*3-i*3] + +palette[241*3:242*3] + +palette[254*3-i*3:254*3] + +palette[242*3:254*3-i*3] + +palette[254*3:]) + if os.path.exists(os.path.join(path, "%d.png"%i)): + print "overwriting %s" % os.path.join(path, "%d.png"%i) + im.convert("RGBA").save(os.path.join(path, "%d.png"%i), "PNG") + else: + im.putpalette(palette) + im = im.convert("RGBA") + data = im.load() + for x in xrange(im.size[0]): + for y in xrange(im.size[1]): + if data[x, y] == (0, 255, 255, 255): + data[x, y] = (0, 0, 0, 0) + elif data[x, y] == (255, 150, 255, 255): + data[x, y] = (0, 0, 0, 64) + elif data[x, y] == (255, 151, 255, 255): + data[x, y] = (0, 0, 0, 64) + elif data[x, y] == (255, 0, 255, 255): + data[x, y] = (0, 0, 0, 128) + if os.path.exists(os.path.join(path, "%d.png"%num)): + print "overwriting %s" % os.path.join(path, "%d.png"%num) + im.save(os.path.join(path, "%d.png"%num), "PNG") + else: + print "invalid frame" + +def save_file(fid, name, ftype, data): + if not os.path.exists(os.path.join("data", ftype)): + os.makedirs(os.path.join("data", ftype)) + if os.path.exists(os.path.join("data", ftype, name)): + print "overwriting %s" % os.path.join("data", ftype, name) + file = open(os.path.join("data", ftype, name), "w") + file.write(data) + file.close() + +def lod_extract(filename): + lod = open(filename) + if lod.read(4) != "LOD\x00": + raise Exception("not an LOD archive") + (version, files_count) = struct.unpack("2i", lod.read(8)) + print "Version: %d, File Count: %d"%(version, files_count) #RoE: 200, AB: 500 + + for fid in xrange(files_count): + lod.seek(92+(fid*32)) + name = lod.read(16).split('\x00')[0].lower() + (offset, size_orig, ftype, size_comp) = \ + struct.unpack("4i", lod.read(16)) + lod.seek(offset) + + if size_comp: + pcx = zlib.decompress(lod.read(size_comp)) + else: + pcx = lod.read(size_orig) + + if ftype == 1: #h3c file + print fid, name, ftype + save_file(fid, name, "campaigns", pcx) + elif ftype == 2: #txt file + print fid, name, ftype + save_file(fid, name, "txt", pcx) + elif ftype == 16: #pcx palette image + (size, width, height) = struct.unpack("3i", pcx[:12]) + print fid, name, width, height + + if not os.path.exists(os.path.join("data", "pcx_palette")): + os.makedirs(os.path.join("data", "pcx_palette")) + + im = Image.frombuffer('RGB', (width, height), pcx[12:size+12], + 'raw', 'P', 0, 1) + im.putpalette(pcx[12+size:12+size+3*256]) + if os.path.exists(os.path.join("data", "pcx_palette", name)): + print "overwriting %s" % os.path.join("data", "pcx_palette", name) + im.save(os.path.join("data", "pcx_palette", name), "PNG") + elif ftype == 17: #pcx rgb image + (size, width, height) = struct.unpack("3i", pcx[:12]) + print fid, name, width, height + + if not os.path.exists(os.path.join("data", "pcx_rgb")): + os.makedirs(os.path.join("data", "pcx_rgb")) + + im = Image.frombuffer('RGB', (width, height), pcx[12:size+12], + 'raw', 'RGB', 0, 1) + if os.path.exists(os.path.join("data", "pcx_rgb", name)): + print "overwriting %s" % os.path.join("data", "pcx_rgb", name) + im.save(os.path.join("data", "pcx_rgb", name), "PNG") + elif ftype in (64, 65, 66, 67, 68, 69, 70, 71, 73,): #def animation + #in 0.2% of all def files the internal def type does not match the + #type given in the lod archive header but tests show that in this + #case the type given in the def file is more important + (ftype, width, height, sequences_count) = \ + struct.unpack("4i", pcx[0:16]) + palette = pcx[16:784] + + print fid, name, ftype + + #all def sequences are thrown into the same folder + #there are no 65 def types - only 65 file types + if ftype == 64: + parent = os.path.join("data", "combat_spells", name) + elif ftype == 66: + parent = os.path.join("data", "combat_creatures", name) + elif ftype == 67: + parent = os.path.join("data", "advmap_objects", name) + elif ftype == 68: + parent = os.path.join("data", "advmap_heroes", name) + elif ftype == 69: + parent = os.path.join("data", "advmap_tiles", name) + elif ftype == 70: + parent = os.path.join("data", "cursors", name) + elif ftype == 71: + parent = os.path.join("data", "interface", name) + elif ftype == 73: + parent = os.path.join("data", "combat_heroes", name) + else: + raise NotImplementedError + + if not os.path.exists(parent): + os.makedirs(parent) + + pos = 784 + for i in xrange(sequences_count): + (index, length, unkown1, unkown2) = \ + struct.unpack("4i", pcx[pos:pos+16]) + pos+=16 + + folder = parent + #create subfolder for defs with more than one sequence + if sequences_count > 1: + folder = os.path.join(parent, str(i)) + + if not os.path.exists(folder): + os.makedirs(folder) + + pos+=13*length #read filenames + + offsets = struct.unpack("%di"%length, pcx[pos:pos+4*length]) + pos+=4*length + + lengths = [] + for j in xrange(length): + lengths.append(struct.unpack("i", pcx[offsets[j]:offsets[j]+4])[0]) + + for j in xrange(length): + data = pcx[offsets[j]:offsets[j]+32+lengths[j]] + save_frame(folder, j, data, palette, width, height, name) + + elif ftype == 79: #msk file + print fid, name, ftype + save_file(fid, name, "msk", pcx) + elif ftype == 80: #fnt file + print fid, name, ftype + save_file(fid, name, "fonts", pcx) + elif ftype == 96: #pal file + print fid, name, ftype + save_file(fid, name, "palettes", pcx) + else: + raise Exception("type of %s not supported: %d"%(name, ftype)) + lod.close() + +def snd_extract(filename): + lod = open(filename) + (files_count,) = struct.unpack("i", lod.read(4)) + print files_count + + if not os.path.exists(os.path.join("data", "sounds")): + os.makedirs(os.path.join("data", "sounds")) + + for fid in xrange(files_count): + lod.seek(4+(fid*48)) + filename = '.'.join([lod.read(40).split('\x00', 1)[0], "wav"]) + (offset, size) = struct.unpack("ii", lod.read(8)) + lod.seek(offset) + wav = open(os.path.join("data", "sounds", filename), "w") + wav.write(lod.read(size)) + wav.close() + + lod.close() + +def vid_extract(filename): + lod = open(filename) + (files_count,) = struct.unpack("i", lod.read(4)) + print files_count + + offsets = [] + files = [] + for fid in xrange(files_count): + lod.seek(4+(fid*44)) + files.append(lod.read(40).rstrip('\x00')) + offsets.append(struct.unpack("i", lod.read(4))[0]) + offsets.append(os.stat(filename)[6]) + + if not os.path.exists(os.path.join("data", "videos")): + os.makedirs(os.path.join("data", "videos")) + + for i in xrange(len(offsets)-1): + print files[i] + lod.seek(offsets[i]) + vid = open(os.path.join("data", "videos", files[i]), "w") + vid.write(lod.read(offsets[i+1]-offsets[i])) + vid.close() + lod.close() + + +def main(args): + path = "." + if len(args) > 1: + path = args[1] + lod_extract(os.path.join(path, "H3bitmap.lod")) + lod_extract(os.path.join(path, "H3ab_bmp.lod")) + lod_extract(os.path.join(path, "H3sprite.lod")) + lod_extract(os.path.join(path, "H3ab_spr.lod")) + snd_extract(os.path.join(path, "Heroes3.snd")) + snd_extract(os.path.join(path, "H3ab_ahd.snd")) + vid_extract(os.path.join(path, "VIDEO.VID")) + vid_extract(os.path.join(path, "H3ab_ahd.vid")) + + +if __name__ == '__main__': + sys.exit(main(sys.argv)) diff --git a/hr.py b/hr.py new file mode 100644 index 0000000..fc03a9a --- /dev/null +++ b/hr.py @@ -0,0 +1,51 @@ +#!/usr/bin/env python +""" + heroes renaissance + copyright 2008 - Johannes 'josch' Schauer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +""" + +import pyglet +from lib.mapset import * +from lib.interface import * +from lib.mapview import * +from lib.window import Window + +class LoadScreen(object): + def __init__(self, window): + self.window = window + self.label = pyglet.text.Label('', + font_name="Linux Libertine", + font_size=28, + x=self.window.width-10, y=10, + anchor_x='right', anchor_y='bottom') + self.label.text = "INITIATING MAPSET..." + mapset = MapSet("Deluge") + self.label.text = "INITIATING MAPVIEW..." + mapview = MapView(mapset, self.window) + interface = Interface(self.window) + self.window.pop_handlers() + self.window.push_handlers(mapview) + self.window.push_handlers(interface) + self.window.push_handlers(self.window.keys) + +if __name__ == '__main__': + pyglet.gl.glBlendFunc(pyglet.gl.GL_SRC_ALPHA, + pyglet.gl.GL_ONE_MINUS_SRC_ALPHA) + window = Window() + window.push_handlers(LoadScreen(window)) + img = pyglet.resource.image("data/cursors/cradvntr.def/0.png") + window.set_mouse_cursor(pyglet.window.ImageMouseCursor(img, 0, 40)) + pyglet.app.run() diff --git a/lib/__init__.py b/lib/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lib/h3m.py b/lib/h3m.py new file mode 100644 index 0000000..3cb8405 --- /dev/null +++ b/lib/h3m.py @@ -0,0 +1,596 @@ +#!/usr/bin/env python +""" + heroes renaissance + copyright 2008 - Johannes 'josch' Schauer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +""" + +import gzip +import struct +import pyglet + +def extract(filename): + h3m_data = gzip.open(filename) + map_data = {} + #read general info + (map_data["version"], ) = struct.unpack(" 0: + map_data[color]["heroes"] = {} + for i in xrange(map_data[color]["heroes_count"]): + (map_data[color]["heroes"]["portrait"], ) = struct.unpack(" 0: + map_data["commands"] = struct.unpack("<8B", h3m_data.read(8)) + + #Free Heroes + h3m_data.read(20) #free heroes + h3m_data.read(4) #junk + (map_data["heroes_count"], ) = struct.unpack(" 0: + map_data["free_heroes"] = [] + for i in xrange(map_data["heroes_count"]): + (hero_id, ) = struct.unpack(" 0: + map_data["rumors"] = [] + for i in xrange(map_data["rumor_count"]): + (name_length, ) = struct.unpack(" 0: + for i in xrange(knapsack_count): + (knapsackID, ) = struct.unpack(" 0: + for i in xrange(eventQuantity): + (length, ) = struct.unpack(" 0: + for i in xrange(secSkills): + (skill_id, skill_lvl) = struct.unpack(" 0: + for i in xrange(artefacts): + (artID, ) = struct.unpack(" 0: + for i in xrange(spells): + (spellID, ) = struct.unpack(" 0: + for i in xrange(monsters): + (guard_id, guard_count) = struct.unpack(" 0: + for i in xrange(secSkills): + (skill_id, skill_lvl) = struct.unpack(" 0: + for i in xrange(artefacts): + (artID, ) = struct.unpack(" 0: + for i in xrange(spells): + (spellID, ) = struct.unpack(" 0: + for i in xrange(monsters): + (guard_id, guard_count) = struct.unpack(" + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +""" + +import pyglet + +IF_BOTTOM = 48 +IF_RIGHT = 200 +IF_TOP = IF_LEFT = 8 + +class Interface(object): + def __init__(self, window): + self.window = window + + def on_mouse_motion(self, x, y, dx, dy): + if IF_LEFT < x < (self.window.width-IF_RIGHT): + pass + else: + return pyglet.event.EVENT_HANDLED + if IF_BOTTOM < y < (self.window.height-IF_TOP): + pass + else: + return pyglet.event.EVENT_HANDLED diff --git a/lib/mapset.py b/lib/mapset.py new file mode 100644 index 0000000..2ef74f6 --- /dev/null +++ b/lib/mapset.py @@ -0,0 +1,382 @@ +#!/usr/bin/env python +""" + heroes renaissance + copyright 2008 - Johannes 'josch' Schauer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +""" + +import pyglet +from ctypes import create_string_buffer, memmove +from lib import h3m +import os + +class OrderedTextureGroup(pyglet.graphics.Group): + def __init__(self, order, texture, parent=None): + super(OrderedTextureGroup, self).__init__(parent) + self.texture = texture + self.order = order + + def set_state(self): + pyglet.gl.glEnable(self.texture.target) + pyglet.gl.glBindTexture(self.texture.target, self.texture.id) + + def unset_state(self): + pyglet.gl.glDisable(self.texture.target) + + def __hash__(self): + return hash((self.order, self.texture.target, self.texture.id, + self.parent)) + + def __eq__(self, other): + return (self.__class__ is other.__class__ and + self.order == other.order and + self.texture.target == other.texture.target and + self.texture.id == other.texture.id and + self.parent == self.parent) + + def __repr__(self): + return '%s(id=%d)' % (self.__class__.__name__, self.order, + self.texture.id) + + def __cmp__(self, other): + if isinstance(other, OrderedTextureGroup): + return cmp(self.order, other.order) + return -1 + +class Animation(object): + def __init__(self, tex_region, frames, flip_x=False, flip_y=False): + self.texgroup = tex_region.group + if flip_x or flip_y: + self.tex = tex_region.get_transform(flip_x=flip_x, flip_y=flip_y) + else: + self.tex = tex_region + self.__frames = [] + for img in frames: + data_pitch = abs(img._current_pitch) + buf = create_string_buffer(len(img._current_data)) + memmove(buf, img._current_data, len(img._current_data)) + data = buf.raw + rows = [data[i:i + abs(data_pitch)] for i in + xrange(len(img._current_data)-abs(data_pitch), + -1, -abs(data_pitch))] + self.__frames.append(''.join(rows)) + self.__animation = 0 + self.width = self.tex.width + self.height = self.tex.height + self.__hash = hash(self.__frames[0]) + + def next_frame(self): + self.__animation = (self.__animation + 1) % len(self.__frames) + return self.__frames[self.__animation] + + @property + def tex_coords(self): + return self.tex.tex_coords + + @property + def group(self): + return self.texgroup + + def __hash__(self): + return self.__hash + + def __eq__(self, other): + return self.__hash == other.__hash + +class MapSet(object): + def load_map_object(self, file, order=0): + image = pyglet.image.load(None, file=pyglet.resource.file(file)) + try: + texture_region = self.current_atlas.add(image) + except pyglet.image.atlas.AllocatorException: + self.current_atlas = pyglet.image.atlas.TextureAtlas(1024, 1024) + texture_region = self.current_atlas.add(image) + group = OrderedTextureGroup(order, self.current_atlas.texture) + + if group not in self.groups: + self.groups.append(group) + + texture_region.group = self.groups.index(group) + return texture_region + + def __init__(self, map_name): + h3m_data = h3m.extract(os.path.join(pyglet.resource._default_loader._script_home,"maps","%s.h3m" % map_name)) + edge_map = [[] for i in xrange(len(h3m_data["upper_terrain"])+16)] + for num in xrange(len(edge_map)): + if num < 7 or num > len(edge_map)-8: + line = [] + line.extend([[-1, 0+(i-1)%4+4*(num%4), 0, 0, 0, 0, 0] for i in xrange(len(h3m_data["upper_terrain"][0])+18)]) + elif num == 7: + line = [] + line.extend([[-1, 0+(i-1)%4+4*(num%4), 0, 0, 0, 0, 0] for i in xrange(8)]) + line.append([-1, 16, 0, 0, 0, 0, 0]) + line.extend([[-1, 20+i%4, 0, 0, 0, 0, 0] for i in xrange(len(h3m_data["upper_terrain"][0]))]) + line.append([-1, 17, 0, 0, 0, 0, 0]) + line.extend([[-1, 0+(i-1)%4+4*(num%4), 0, 0, 0, 0, 0] for i in xrange(8)]) + elif num == len(edge_map)-8: + line = [] + line.extend([[-1, 0+(i-1)%4+4*(num%4), 0, 0, 0, 0, 0] for i in xrange(8)]) + line.append([-1, 19, 0, 0, 0, 0, 0]) + line.extend([[-1, 28+i%4, 0, 0, 0, 0, 0] for i in xrange(len(h3m_data["upper_terrain"][0]))]) + line.append([-1, 18, 0, 0, 0, 0, 0]) + line.extend([[-1, 0+(i-1)%4+4*(num%4), 0, 0, 0, 0, 0] for i in xrange(8)]) + else: + line = [] + line.extend([[-1, 0+(i-1)%4+4*(num%4), 0, 0, 0, 0, 0] for i in xrange(8)]) + line.append([-1, 32+num%4, 0, 0, 0, 0, 0]) + line.extend(h3m_data["upper_terrain"][num-8]) + line.append([-1, 24+num%4, 0, 0, 0, 0, 0]) + line.extend([[-1, 0+(i-1)%4+4*(num%4), 0, 0, 0, 0, 0] for i in xrange(8)]) + edge_map[num] = line + h3m_data["upper_terrain"] = edge_map + + self.width = len(h3m_data["upper_terrain"][0]) + self.height = len(h3m_data["upper_terrain"]) + + self.current_atlas = pyglet.image.atlas.TextureAtlas(1024, 1024) + + self.groups = [] + + self.__tiles = {} + tile_textures = {} + for y, line in enumerate(h3m_data["upper_terrain"]): + for x, tile in enumerate(line): + if tile[0] == -1: #edge + if "edg" not in tile_textures.keys(): + tile_textures["edg"] = [self.load_map_object('data/advmap_tiles/edg.def/%d.png'%i, 100) for i in xrange(36)] + self.__tiles[x,y] = [tile_textures["edg"][tile[1]]] + elif tile[0] == 0: #dirt + if "dirttl" not in tile_textures.keys(): + tile_textures["dirttl"] = [self.load_map_object('data/advmap_tiles/dirttl.def/%d.png'%i, 0) for i in xrange(46)] + flip_x = bool(tile[6] & 1) + flip_y = bool(tile[6] & 2) + if flip_x or flip_y: + new = tile_textures["dirttl"][tile[1]].get_transform(flip_x=flip_x, flip_y=flip_y) + new.group = tile_textures["dirttl"][tile[1]].group + self.__tiles[x,y] = [new] + else: + self.__tiles[x,y] = [tile_textures["dirttl"][tile[1]]] + elif tile[0] == 1: #sand + if "sandtl" not in tile_textures.keys(): + tile_textures["sandtl"] = [self.load_map_object('data/advmap_tiles/sandtl.def/%d.png'%i, 0) for i in xrange(24)] + self.__tiles[x,y] = [tile_textures["sandtl"][tile[1]]] + elif tile[0] == 2: #grass + if "grastl" not in tile_textures.keys(): + tile_textures["grastl"] = [self.load_map_object('data/advmap_tiles/grastl.def/%d.png'%i, 0) for i in xrange(79)] + flip_x = bool(tile[6] & 1) + flip_y = bool(tile[6] & 2) + if flip_x or flip_y: + new = tile_textures["grastl"][tile[1]].get_transform(flip_x=flip_x, flip_y=flip_y) + new.group = tile_textures["grastl"][tile[1]].group + self.__tiles[x,y] = [new] + else: + self.__tiles[x,y] = [tile_textures["grastl"][tile[1]]] + elif tile[0] == 3: #snow + if "snowtl" not in tile_textures.keys(): + tile_textures["snowtl"] = [self.load_map_object('data/advmap_tiles/snowtl.def/%d.png'%i, 0) for i in xrange(79)] + flip_x = bool(tile[6] & 1) + flip_y = bool(tile[6] & 2) + if flip_x or flip_y: + new = tile_textures["snowtl"][tile[1]].get_transform(flip_x=flip_x, flip_y=flip_y) + new.group = tile_textures["snowtl"][tile[1]].group + self.__tiles[x,y] = [new] + else: + self.__tiles[x,y] = [tile_textures["snowtl"][tile[1]]] + elif tile[0] == 4: #swamp + if "swmptl" not in tile_textures.keys(): + tile_textures["swmptl"] = [self.load_map_object('data/advmap_tiles/swmptl.def/%d.png'%i, 0) for i in xrange(79)] + flip_x = bool(tile[6] & 1) + flip_y = bool(tile[6] & 2) + if flip_x or flip_y: + new = tile_textures["swmptl"][tile[1]].get_transform(flip_x=flip_x, flip_y=flip_y) + new.group = tile_textures["swmptl"][tile[1]].group + self.__tiles[x,y] = [new] + else: + self.__tiles[x,y] = [tile_textures["swmptl"][tile[1]]] + elif tile[0] == 5: #rough + if "rougtl" not in tile_textures.keys(): + tile_textures["rougtl"] = [self.load_map_object('data/advmap_tiles/rougtl.def/%d.png'%i, 0) for i in xrange(79)] + flip_x = bool(tile[6] & 1) + flip_y = bool(tile[6] & 2) + if flip_x or flip_y: + new = tile_textures["rougtl"][tile[1]].get_transform(flip_x=flip_x, flip_y=flip_y) + new.group = tile_textures["rougtl"][tile[1]].group + self.__tiles[x,y] = [new] + else: + self.__tiles[x,y] = [tile_textures["rougtl"][tile[1]]] + elif tile[0] == 7: #lava + if "lavatl" not in tile_textures.keys(): + tile_textures["lavatl"] = [self.load_map_object('data/advmap_tiles/lavatl.def/%d.png'%i, 0) for i in xrange(79)] + flip_x = bool(tile[6] & 1) + flip_y = bool(tile[6] & 2) + if flip_x or flip_y: + new = tile_textures["lavatl"][tile[1]].get_transform(flip_x=flip_x, flip_y=flip_y) + new.group = tile_textures["lavatl"][tile[1]].group + self.__tiles[x,y] = [new] + else: + self.__tiles[x,y] = [tile_textures["lavatl"][tile[1]]] + elif tile[0] == 8: #water 12 anims + if "watrtl" not in tile_textures.keys(): + textures = [self.load_map_object('data/advmap_tiles/watrtl.def/%d/0.png'%i, 0) for i in xrange(33)] + images = [[pyglet.image.load(None, file=pyglet.resource.file('data/advmap_tiles/watrtl.def/%d/%d.png'%(i,j))) for j in xrange(12)] for i in xrange(33)] + tile_textures["watrtl"] = { + (0,0):[Animation(texture, images[i]) for i, texture in enumerate(textures)], + (1,0):[Animation(texture, images[i], flip_x=True) for i, texture in enumerate(textures)], + (0,1):[Animation(texture, images[i], flip_y=True) for i, texture in enumerate(textures)], + (1,1):[Animation(texture, images[i], flip_x=True, flip_y=True) for i, texture in enumerate(textures)], + } + flip_x = (tile[6]>>0)&1 + flip_y = (tile[6]>>1)&1 + self.__tiles[x,y] = [tile_textures["watrtl"][flip_x, flip_y][tile[1]]] + elif tile[0] == 9: #rock + if "rocktl" not in tile_textures.keys(): + tile_textures["rocktl"] = [self.load_map_object('data/advmap_tiles/rocktl.def/%d.png'%i, 0) for i in xrange(48)] + self.__tiles[x,y] = [tile_textures["rocktl"][tile[1]]] + else: + raise NotImplementedError + + if tile[2] == 0: #no river + pass + elif tile[2] == 1: #clrrvr 12 anims + if "clrrvr" not in tile_textures.keys(): + textures = [self.load_map_object('data/advmap_tiles/clrrvr.def/%d/0.png'%i, 1) for i in xrange(13)] + images = [[pyglet.image.load(None, file=pyglet.resource.file('data/advmap_tiles/clrrvr.def/%d/%d.png'%(i,j))) for j in xrange(12)] for i in xrange(13)] + tile_textures["clrrvr"] = { + (0,0):[Animation(texture, images[i]) for i, texture in enumerate(textures)], + (1,0):[Animation(texture, images[i], flip_x=True) for i, texture in enumerate(textures)], + (0,1):[Animation(texture, images[i], flip_y=True) for i, texture in enumerate(textures)], + (1,1):[Animation(texture, images[i], flip_x=True, flip_y=True) for i, texture in enumerate(textures)], + } + flip_x = (tile[6]>>2)&1 + flip_y = (tile[6]>>3)&1 + self.__tiles[x,y].append(tile_textures["clrrvr"][flip_x, flip_y][tile[3]]) + elif tile[2] == 2: #icyrvr + if "icyrvr" not in tile_textures.keys(): + tile_textures["icyrvr"] = [self.load_map_object('data/advmap_tiles/icyrvr.def/%d.png'%i, 1) for i in xrange(13)] + flip_x = bool(tile[6] & 4) + flip_y = bool(tile[6] & 8) + if flip_x or flip_y: + new = tile_textures["icyrvr"][tile[3]].get_transform(flip_x=flip_x, flip_y=flip_y) + new.group = tile_textures["icyrvr"][tile[3]].group + self.__tiles[x, y].append(new) + else: + self.__tiles[x, y].append(tile_textures["icyrvr"][tile[3]]) + elif tile[2] == 3: #mudrvr + if "mudrvr" not in tile_textures.keys(): + textures = [self.load_map_object('data/advmap_tiles/mudrvr.def/%d/0.png'%i, 1) for i in xrange(13)] + images = [[pyglet.image.load(None, file=pyglet.resource.file('data/advmap_tiles/clrrvr.def/%d/%d.png'%(i,j))) for j in xrange(12)] for i in xrange(13)] + tile_textures["mudrvr"] = { + (0,0):[Animation(texture, images[i]) for i, texture in enumerate(textures)], + (1,0):[Animation(texture, images[i], flip_x=True) for i, texture in enumerate(textures)], + (0,1):[Animation(texture, images[i], flip_y=True) for i, texture in enumerate(textures)], + (1,1):[Animation(texture, images[i], flip_x=True, flip_y=True) for i, texture in enumerate(textures)], + } + flip_x = (tile[6]>>2)&1 + flip_y = (tile[6]>>3)&1 + self.__tiles[x,y].append(tile_textures["mudrvr"][flip_x, flip_y][tile[3]]) + elif tile[2] == 4: #lavrvr + if "lavrvr" not in tile_textures.keys(): + textures = [self.load_map_object('data/advmap_tiles/lavrvr.def/%d/0.png'%i, 1) for i in xrange(13)] + images = [[pyglet.image.load(None, file=pyglet.resource.file('data/advmap_tiles/clrrvr.def/%d/%d.png'%(i,j))) for j in xrange(9)] for i in xrange(13)] + tile_textures["lavrvr"] = { + (0,0):[Animation(texture, images[i]) for i, texture in enumerate(textures)], + (1,0):[Animation(texture, images[i], flip_x=True) for i, texture in enumerate(textures)], + (0,1):[Animation(texture, images[i], flip_y=True) for i, texture in enumerate(textures)], + (1,1):[Animation(texture, images[i], flip_x=True, flip_y=True) for i, texture in enumerate(textures)], + } + flip_x = (tile[6]>>2)&1 + flip_y = (tile[6]>>3)&1 + self.__tiles[x,y].append(tile_textures["lavrvr"][flip_x, flip_y][tile[3]]) + else: + raise NotImplementedError, tile[2] + + if tile[4] == 0: #no road + pass + elif tile[4] == 1: #dirtrd + if "dirtrd" not in tile_textures.keys(): + tile_textures["dirtrd"] = [self.load_map_object('data/advmap_tiles/dirtrd.def/%d.png'%i, 1) for i in xrange(17)] + flip_x = bool(tile[6] & 16) + flip_y = bool(tile[6] & 32) + if flip_x or flip_y: + new = tile_textures["dirtrd"][tile[5]].get_transform(flip_x=flip_x, flip_y=flip_y) + new.group = tile_textures["dirtrd"][tile[5]].group + self.__tiles[x, y].append(new) + else: + self.__tiles[x, y].append(tile_textures["dirtrd"][tile[5]]) + elif tile[4] == 2: #gravrd + if "gravrd" not in tile_textures.keys(): + tile_textures["gravrd"] = [self.load_map_object('data/advmap_tiles/gravrd.def/%d.png'%i, 1) for i in xrange(17)] + flip_x = bool(tile[6] & 16) + flip_y = bool(tile[6] & 32) + if flip_x or flip_y: + new = tile_textures["gravrd"][tile[5]].get_transform(flip_x=flip_x, flip_y=flip_y) + new.group = tile_textures["gravrd"][tile[5]].group + self.__tiles[x, y].append(new) + else: + self.__tiles[x, y].append(tile_textures["gravrd"][tile[5]]) + elif tile[4] == 3: #cobbrd + if "cobbrd" not in tile_textures.keys(): + tile_textures["cobbrd"] = [self.load_map_object('data/advmap_tiles/cobbrd.def/%d.png'%i, 1) for i in xrange(17)] + flip_x = bool(tile[6] & 16) + flip_y = bool(tile[6] & 32) + if flip_x or flip_y: + new = tile_textures["cobbrd"][tile[5]].get_transform(flip_x=flip_x, flip_y=flip_y) + new.group = tile_textures["cobbrd"][tile[5]].group + self.__tiles[x, y].append(new) + else: + self.__tiles[x, y].append(tile_textures["cobbrd"][tile[5]]) + else: + raise NotImplementedError, tile[4] + + images = [] + for order, obj in enumerate(h3m_data["objects"]): + imgs = [] + i = 0 + while 1: + imgs.append(pyglet.image.load(None, file=pyglet.resource.file("data/advmap_objects/" + obj["filename"] + "/%d.png"%i))) + i += 1 + if "data/advmap_objects/" + obj["filename"] + "/%d.png" % i not in pyglet.resource._default_loader._index.keys(): + break; + images.append((imgs, order)) + + self.objects = [] + for imgs in sorted(images, key=lambda i:i[0][0].height, reverse=True): + try: + texture = self.current_atlas.add(imgs[0][0]) + except pyglet.image.atlas.AllocatorException: + self.current_atlas = pyglet.image.atlas.TextureAtlas(1024, 1024) + texture = self.current_atlas.add(imgs[0][0]) + group = OrderedTextureGroup(2, self.current_atlas.texture) + if group not in self.groups: + self.groups.append(group) + group = self.groups.index(group) + texture.group = group + self.objects.append((Animation(texture, imgs[0]), imgs[1])) + + self.objects = [i[0] for i in sorted(self.objects, key=lambda i:i[1])] + + self.tunedobj = {} + for obj in [i for i in h3m_data["tunedobj"] if i["z"]==0]: + self.__tiles[obj["x"] + 9,obj["y"] + 8].append(self.objects[obj["id"]]) + + def get_tiles(self, tiles_x, tiles_y, div_x, div_y): + for y in xrange(tiles_y - 1, -6, -1): + y1 = y * 32 + for x in xrange(tiles_x + 5 - 1, -1, -1): + for obj in self.__tiles.get((x - div_x, div_y - y), []): + x1 = x * 32 - obj.width + 32 + x2 = x1 + obj.width + y2 = y1 + obj.height + yield obj, [x1, y1, x2, y1, x2, y2, x1, y2] diff --git a/lib/mapview.py b/lib/mapview.py new file mode 100644 index 0000000..d3c0e32 --- /dev/null +++ b/lib/mapview.py @@ -0,0 +1,335 @@ +#!/usr/bin/env python +""" + heroes renaissance + copyright 2008 - Johannes 'josch' Schauer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +""" + +import pyglet +from lib.interface import * +from lib.mapset import * + +class MapView(object): + def __init__(self, mapset, window): + self.window = window + self.mapset = mapset + self._first_time_init() + self._init_view() + # mouse position + self.label = pyglet.text.Label('', + font_name="", + font_size=36, + bold=True, + color=(128, 128, 128, 128), + x=self.window.width - 10, y=0, + anchor_x='right', anchor_y='bottom') + pyglet.clock.schedule_interval(self.animate_water, 1/6.0) + pyglet.clock.schedule_interval(self.update, 1/60.0) + + def _first_time_init(self): + self.tile_size = 32 + # size of the viewport + self.vp_width = self.window.width-IF_RIGHT-IF_LEFT + self.vp_height = self.window.height-IF_BOTTOM-IF_TOP + # center map + self.x = (self.mapset.width * self.tile_size - self.vp_width + + self.tile_size) // 2 + self.y = (self.mapset.height * self.tile_size - self.vp_height + + self.tile_size) // 2 + self.mouse_x = self.mouse_dx = 0 + self.mouse_y = self.mouse_dy = 0 + + def _init_view(self): + # initiate new batch + self.batch = pyglet.graphics.Batch() + # initiate new vertex list + self.vl_objects = [None for value in self.mapset.groups] + # size of the viewport + self.vp_width = self.window.width - IF_RIGHT - IF_LEFT + self.vp_height = self.window.height - IF_BOTTOM - IF_TOP + # center map when viewport is too large, else check if map still fills + # whole viewport and if not adjust position accordingly + self.center_x = False + if self.mapset.width * self.tile_size < self.vp_width: + # center the map in x direction + self.center_x = True + self.x = (self.mapset.width * self.tile_size - self.vp_width) // 2 + elif self.x > self.tile_size * self.mapset.width - self.vp_width: + # move map back to the right + self.x = self.tile_size * self.mapset.width - self.vp_width + elif self.x < 0: + # move map to the left + self.x = 0 + self.center_y = False + if self.mapset.height * self.tile_size < self.vp_height: + # center the map in y direction + self.center_y = True + self.y = (self.mapset.height * self.tile_size - + self.vp_height) // 2 + elif self.y > self.tile_size * self.mapset.height - self.vp_height: + # move map up + self.y = self.tile_size * self.mapset.height - self.vp_height + elif self.y < 0: + # move map down + self.y = 0 + # tiles to be drawn with the current viewport size + self.tiles_x = min((self.vp_width // self.tile_size) + 2, + self.mapset.width) + self.tiles_y = min((self.vp_height // self.tile_size) + 2, + self.mapset.height) + # undrawn map size in pixels + self.undrawn_x = self.tile_size * (self.mapset.width - self.tiles_x) + self.undrawn_y = self.tile_size * (self.mapset.height - self.tiles_y) + # reset mouse or keyboard movement + self.dx = 0 + self.dy = 0 + # calculate modulo pixel position of the map + if self.x - self.tile_size > self.undrawn_x: + # dont go right beyond map borders + mod_x = self.tile_size - self.x + self.undrawn_x + elif self.x > 0: + # calculate modulo of current position and tile_size + mod_x = (self.tile_size - self.x) % self.tile_size + else: + # dont go left beyond map borders + mod_x = self.tile_size - self.x + if self.y - self.tile_size > self.undrawn_y: + # dont go up beyond map borders + mod_y = self.tile_size - self.y + self.undrawn_y + elif self.y > 0: + # calculate modulo of current position and tile_size + mod_y = (self.tile_size - self.y) % self.tile_size + else: + # dont go down beyond map borders + mod_y = self.tile_size - self.y + # calculate tile position of the map, turn y coordinates upside down + self.div_x = (self.tile_size - self.x - mod_x) // self.tile_size + self.div_y = (self.tile_size - self.y - mod_y) // self.tile_size + \ + self.mapset.height - 1 + # update vertex lists with the gathered information + self.update_vertex_lists() + # update current current position that is to be glTranslated + # XXX: dont ask me why i have to add 1/4 and 3/2 but when i do not + # there are black borders when zooming out + # plz explain wtf is going on there + self.view_x = mod_x - self.tile_size - (self.tile_size - 32) // 4 + self.view_y = mod_y - self.tile_size - ((self.tile_size - 32) * 3) // 2 + + def on_draw(self): + pyglet.gl.glClear(pyglet.gl.GL_COLOR_BUFFER_BIT) + pyglet.gl.glPushMatrix() + pyglet.gl.glTranslatef(self.view_x+IF_LEFT, self.view_y+IF_BOTTOM, 0) + pyglet.gl.glScalef(self.tile_size/32.0, self.tile_size/32.0, 0.0) + self.batch.draw() + pyglet.gl.glPopMatrix() + pyglet.gl.glLoadIdentity() + pyglet.gl.glEnable(pyglet.gl.GL_BLEND) + pyglet.gl.glColor4f(1, 0, 1, 1) + pyglet.gl.glRectf(0, 0, self.window.width, IF_BOTTOM) + pyglet.gl.glRectf(self.window.width-IF_RIGHT, 0, self.window.width, self.window.height) + pyglet.gl.glRectf(0, self.window.height-IF_TOP, self.window.width, self.window.height) + pyglet.gl.glRectf(0, 0, IF_LEFT, self.window.height) + self.label.draw() + + def _move(self, dx, dy): + # new map position + new_x = self.x - dx + new_y = self.y - dy + # only update textures and vertices when necessary + retex = False + # if x or y jump is too big, adjust new position accordingly + if new_x < 0: + # move map to the left + new_x = 0 + retex = True + if new_x > self.tile_size * self.mapset.width - self.vp_width: + # move map to the right + new_x = self.tile_size * self.mapset.width - self.vp_width + retex = True + if new_y < 0: + # move map down + new_y = 0 + retex = True + if new_y > self.tile_size * self.mapset.height - self.vp_height: + # move map up + new_y = self.tile_size * self.mapset.height - self.vp_height + retex = True + # find out how many steps and pixels we have to move and wether we have + # to retex + if new_x - self.tile_size > self.undrawn_x: + # we are at the right border + mod_x = self.tile_size - new_x + self.undrawn_x + # only retex if the last position was not at the border + if self.x - self.tile_size <= self.undrawn_x: + retex = True + elif new_x > 0: + # normal movement: calculate the amount of steps and the modulo + div_x, mod_x = divmod(self.tile_size - new_x, self.tile_size) + # only retex if the number of moved steps is not equal to last + if div_x != (self.tile_size - self.x) // self.tile_size: + retex = True + else: + # we are at the left border + mod_x = self.tile_size - new_x + if new_y - self.tile_size > self.undrawn_y: + # we are at the top + mod_y = self.tile_size - new_y + self.undrawn_y + # only retex if the last position was not at the border + if self.y - self.tile_size <= self.undrawn_y: + retex = True + elif new_y > 0: + # normal movement: calculate the amount of steps and the modulo + div_y, mod_y = divmod(self.tile_size - new_y, self.tile_size) + # only retex if the number of moved steps is not equal to last + if div_y != (self.tile_size - self.y) // self.tile_size: + retex = True + else: + # we are at the bottom + mod_y = self.tile_size - new_y + # if we have to update vertices and textures + if retex: + # calculate the current position on the tilemap + self.div_x = (self.tile_size - new_x - mod_x) // \ + self.tile_size + self.div_y = (self.tile_size - new_y - mod_y) // \ + self.tile_size + self.mapset.height - 1 + self.update_vertex_lists() + # update position if not centered + # XXX: dont ask me why i have to add 1/4 and 3/2 but when i do not + # there are black borders when zooming out + # plz explain wtf is going on there + if not self.center_x: + self.view_x = mod_x-self.tile_size-(self.tile_size-32)//4 + self.x = new_x + if not self.center_y: + self.view_y = mod_y-self.tile_size-((self.tile_size-32)*3)//2 + self.y = new_y + + def update_vertex_lists(self): + # initiate lists of vertex lists, vertices, texture coords, vertices + # counts and map objects for each group + vertices = [[] for value in self.mapset.groups] + tex_coords = [[] for value in self.mapset.groups] + count = [0 for value in self.mapset.groups] + self.cur_objects = [[] for value in self.mapset.groups] + # for each tile in the viewport, update the list of the specific group + for obj, coords in self.mapset.get_tiles(self.tiles_x, self.tiles_y, + self.div_x, self.div_y): + tex_coords[obj.group].extend(obj.tex_coords) + vertices[obj.group].extend(coords) + count[obj.group]+=4 + if isinstance(obj, Animation): + self.cur_objects[obj.group].append(obj) + for i, group in enumerate(self.mapset.groups): + if count[i] == 0: + if self.vl_objects[i] is None: + # let the vertex list be None + pass + else: + # there was a vertex list but now no more - delete it + self.vl_objects[i].delete() + self.vl_objects[i] = None + else: + if self.vl_objects[i] is None: + # there was no vertex list but ther now is one - create it + self.vl_objects[i] = self.batch.add(count[i], + pyglet.gl.GL_QUADS, + group, + ('v2i', vertices[i]), + ('t3f', tex_coords[i]), + ('c4B', (255,255,255,255)*count[i])) + else: + # there already is a vertex list - resize and refill + self.vl_objects[i].resize(count[i]) + self.vl_objects[i].tex_coords = tex_coords[i] + self.vl_objects[i].vertices = vertices[i] + self.vl_objects[i].colors = (255,255,255,255)*count[i] + # make object list unique + self.cur_objects[i] = list(set(self.cur_objects[i])) + + def update(self, dt): + try: + if self.window.keys[pyglet.window.key.LCTRL] and \ + any([self.window.keys[pyglet.window.key.UP], + self.window.keys[pyglet.window.key.DOWN], + self.window.keys[pyglet.window.key.LEFT], + self.window.keys[pyglet.window.key.RIGHT]]): + + if self.window.keys[pyglet.window.key.LEFT]: + x = 1 + elif self.window.keys[pyglet.window.key.RIGHT]: + x = -1 + else: + x = 0 + + if self.window.keys[pyglet.window.key.UP]: + y = -1 + elif self.window.keys[pyglet.window.key.DOWN]: + y = 1 + else: + y = 0 + self.dx += x*8 + self.dy += y*8 + elif self.window.keys[pyglet.window.key.PLUS] and \ + self.tile_size < 32: + self.tile_size+=8 + self._init_view() + elif self.window.keys[pyglet.window.key.MINUS] and \ + self.tile_size > 16: + self.tile_size-=8 + self._init_view() + except KeyError: + pass + if self.dx or self.dy: + self._move(self.dx, self.dy) + self.dx = 0 + self.dy = 0 + # mouse position: + if self.mouse_x != self.mouse_dx or self.mouse_y != self.mouse_dy: + self.mouse_x = self.mouse_dx + self.mouse_y = self.mouse_dy + x = (self.mouse_x-IF_LEFT-self.view_x + -(self.tile_size-32)//4)//self.tile_size + y = (self.mouse_y-IF_BOTTOM-self.view_y + -((self.tile_size-32)*3)//2)//self.tile_size + self.label.text = "%03d %03d"%(x-self.div_x, self.div_y-y) + + def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers): + self.dx += dx + self.dy += dy + self.mouse_dx = x + self.mouse_dy = y + return pyglet.event.EVENT_HANDLED + + def on_mouse_motion(self, x, y, dx, dy): + self.mouse_dx = x + self.mouse_dy = y + return pyglet.event.EVENT_HANDLED + + def on_resize(self, width, height): + self._init_view() + + def animate_water(self, dt): + for i, group in enumerate(self.mapset.groups): + if len(self.cur_objects[i]) > 0: + pyglet.gl.glBindTexture(self.cur_objects[i][0].tex.target, + self.cur_objects[i][0].tex.id) + for obj in self.cur_objects[i]: + pyglet.gl.glTexSubImage2D(obj.tex.owner.target, + obj.tex.owner.level, + obj.tex.x, obj.tex.y, + obj.tex.width, obj.tex.height, + pyglet.gl.GL_RGBA, pyglet.gl.GL_UNSIGNED_BYTE, + obj.next_frame()) diff --git a/lib/window.py b/lib/window.py new file mode 100644 index 0000000..bb97b48 --- /dev/null +++ b/lib/window.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python +""" + heroes renaissance + copyright 2008 - Johannes 'josch' Schauer + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +""" + +import pyglet + +class Window(pyglet.window.Window): + def __init__(self, *args, **kwargs): + super(Window, self).__init__(1280, 1024, resizable=True, vsync=False) + self.keys = pyglet.window.key.KeyStateHandler() + self.push_handlers(self.keys) + self.fps = pyglet.clock.ClockDisplay() + pyglet.clock.schedule(lambda dt: None) + + def on_draw(self): + self.fps.draw() + + def on_key_press(self, symbol, modifiers): + if symbol == pyglet.window.key.F11: + self.set_fullscreen(fullscreen=not self.fullscreen) + elif symbol == pyglet.window.key.P: + pyglet.image.get_buffer_manager().get_color_buffer().save( + 'screenshot.png', encoder=PNGRGBEncoder()) + +class PNGRGBEncoder(pyglet.image.codecs.ImageEncoder): + def encode(self, image, file, filename): + import Image + image = image.get_image_data() + format = image.format + pitch = -(image.width * len(format)) + pil_image = Image.fromstring( + format, (image.width, image.height), image.get_data(format, pitch)) + try: + #.convert('P', palette=Image.WEB) + pil_image.convert("RGB").save(file) + except Exception, e: + raise ImageEncodeException(e) diff --git a/pyglet/__init__.py b/pyglet/__init__.py new file mode 100644 index 0000000..7493817 --- /dev/null +++ b/pyglet/__init__.py @@ -0,0 +1,363 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''pyglet is a cross-platform games and multimedia package. + +Detailed documentation is available at http://www.pyglet.org +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: __init__.py 2284 2008-10-04 02:29:50Z Alex.Holkner $' + +import os +import sys + +_is_epydoc = hasattr(sys, 'is_epydoc') and sys.is_epydoc + +#: The release version of this pyglet installation. +#: +#: Valid only if pyglet was installed from a source or binary distribution +#: (i.e. not in a checked-out copy from SVN). +#: +#: Use setuptools if you need to check for a specific release version, e.g.:: +#: +#: >>> import pyglet +#: >>> from pkg_resources import parse_version +#: >>> parse_version(pyglet.version) >= parse_version('1.1') +#: True +#: +version = '1.1.2' + +def _require_ctypes_version(version): + # Check ctypes version + import ctypes + req = [int(i) for i in version.split('.')] + have = [int(i) for i in ctypes.__version__.split('.')] + if not tuple(have) >= tuple(req): + raise ImportError('pyglet requires ctypes %s or later.' % version) +_require_ctypes_version('1.0.0') + +_enable_optimisations = not __debug__ +if getattr(sys, 'frozen', None): + _enable_optimisations = True + +#: Global dict of pyglet options. To change an option from its default, you +#: must import ``pyglet`` before any sub-packages. For example:: +#: +#: import pyglet +#: pyglet.options['debug_gl'] = False +#: +#: The default options can be overridden from the OS environment. The +#: corresponding environment variable for each option key is prefaced by +#: ``PYGLET_``. For example, in Bash you can set the ``debug_gl`` option with:: +#: +#: PYGLET_DEBUG_GL=True; export PYGLET_DEBUG_GL +#: +#: For options requiring a tuple of values, separate each value with a comma. +#: +#: The non-development options are: +#: +#: audio +#: A sequence of the names of audio modules to attempt to load, in +#: order of preference. Valid driver names are: +#: +#: * directsound, the Windows DirectSound audio module (Windows only) +#: * alsa, the ALSA audio module (Linux only) +#: * openal, the OpenAL audio module +#: * silent, no audio +#: debug_lib +#: If True, prints the path of each dynamic library loaded. +#: debug_gl +#: If True, all calls to OpenGL functions are checked afterwards for +#: errors using ``glGetError``. This will severely impact performance, +#: but provides useful exceptions at the point of failure. By default, +#: this option is enabled if ``__debug__`` is (i.e., if Python was not run +#: with the -O option). It is disabled by default when pyglet is "frozen" +#: within a py2exe or py2app library archive. +#: shadow_window +#: By default, pyglet creates a hidden window with a GL context when +#: pyglet.gl is imported. This allows resources to be loaded before +#: the application window is created, and permits GL objects to be +#: shared between windows even after they've been closed. You can +#: disable the creation of the shadow window by setting this option to +#: False. Recommended for advanced devlopers only. +#: +#: **Since:** pyglet 1.1 +#: vsync +#: If set, the `pyglet.window.Window.vsync` property is ignored, and +#: this option overrides it (to either force vsync on or off). If unset, +#: or set to None, the `pyglet.window.Window.vsync` property behaves +#: as documented. +#: xsync +#: If set (the default), pyglet will attempt to synchronise the drawing of +#: double-buffered windows to the border updates of the X11 window +#: manager. This improves the appearance of the window during resize +#: operations. This option only affects double-buffered windows on +#: X11 servers supporting the Xsync extension with a window manager +#: that implements the _NET_WM_SYNC_REQUEST protocol. +#: +#: **Since:** pyglet 1.1 +#: +options = { + 'audio': ('directsound', 'openal', 'alsa', 'silent'), + 'font': ('gdiplus', 'win32'), # ignored outside win32; win32 is deprecated + 'debug_font': False, + 'debug_gl': not _enable_optimisations, + 'debug_gl_trace': False, + 'debug_gl_trace_args': False, + 'debug_graphics_batch': False, + 'debug_lib': False, + 'debug_media': False, + 'debug_texture': False, + 'debug_trace': False, + 'debug_trace_args': False, + 'debug_trace_depth': 1, + 'debug_trace_flush': True, + 'debug_win32': False, + 'debug_x11': False, + 'graphics_vbo': True, + 'shadow_window': True, + 'vsync': None, + 'xsync': True, +} + +_option_types = { + 'audio': tuple, + 'font': tuple, + 'debug_font': bool, + 'debug_gl': bool, + 'debug_gl_trace': bool, + 'debug_gl_trace_args': bool, + 'debug_graphics_batch': bool, + 'debug_lib': bool, + 'debug_media': bool, + 'debug_texture': bool, + 'debug_trace': bool, + 'debug_trace_args': bool, + 'debug_trace_depth': int, + 'debug_trace_flush': bool, + 'debug_win32': bool, + 'debug_x11': bool, + 'graphics_vbo': bool, + 'shadow_window': bool, + 'vsync': bool, + 'xsync': bool, +} + +def _read_environment(): + '''Read defaults for options from environment''' + for key in options: + env = 'PYGLET_%s' % key.upper() + try: + value = os.environ['PYGLET_%s' % key.upper()] + if _option_types[key] is tuple: + options[key] = value.split(',') + elif _option_types[key] is bool: + options[key] = value in ('true', 'TRUE', 'True', '1') + elif _option_types[key] is int: + options[key] = int(value) + except KeyError: + pass +_read_environment() + +if sys.platform == 'cygwin': + # This hack pretends that the posix-like ctypes provides windows + # functionality. COM does not work with this hack, so there is no + # DirectSound support. + import ctypes + ctypes.windll = ctypes.cdll + ctypes.oledll = ctypes.cdll + ctypes.WINFUNCTYPE = ctypes.CFUNCTYPE + ctypes.HRESULT = ctypes.c_long + +# Call tracing +# ------------ + +_trace_filename_abbreviations = {} + +def _trace_repr(value, size=40): + value = repr(value) + if len(value) > size: + value = value[:size//2-2] + '...' + value[-size//2-1:] + return value + +def _trace_frame(frame, indent): + from pyglet import lib + import os + if frame.f_code is lib._TraceFunction.__call__.func_code: + is_ctypes = True + func = frame.f_locals['self']._func + name = func.__name__ + location = '[ctypes]' + else: + is_ctypes = False + code = frame.f_code + name = code.co_name + path = code.co_filename + line = code.co_firstlineno + + try: + filename = _trace_filename_abbreviations[path] + except KeyError: + # Trim path down + dir = '' + path, filename = os.path.split(path) + while len(dir + filename) < 30: + filename = os.path.join(dir, filename) + path, dir = os.path.split(path) + if not dir: + filename = os.path.join('', filename) + break + else: + filename = os.path.join('...', filename) + _trace_filename_abbreviations[path] = filename + + location = '(%s:%d)' % (filename, line) + + if indent: + name = 'Called from %s' % name + print '%s%s %s' % (indent, name, location) + + if _trace_args: + if is_ctypes: + args = [_trace_repr(arg) for arg in frame.f_locals['args']] + print ' %sargs=(%s)' % (indent, ', '.join(args)) + else: + for argname in code.co_varnames[:code.co_argcount]: + try: + argvalue = _trace_repr(frame.f_locals[argname]) + print ' %s%s=%s' % (indent, argname, argvalue) + except: + pass + + if _trace_flush: + sys.stdout.flush() + +def _trace_func(frame, event, arg): + if event == 'call': + indent = '' + for i in range(_trace_depth): + _trace_frame(frame, indent) + indent += ' ' + frame = frame.f_back + if not frame: + break + + elif event == 'exception': + (exception, value, traceback) = arg + print 'First chance exception raised:', repr(exception) + +def _install_trace(): + sys.setprofile(_trace_func) + +_trace_args = options['debug_trace_args'] +_trace_depth = options['debug_trace_depth'] +_trace_flush = options['debug_trace_flush'] +if options['debug_trace']: + _install_trace() + +# Lazy loading +# ------------ + +class _ModuleProxy(object): + _module = None + + def __init__(self, name): + self.__dict__['_module_name'] = name + + def __getattr__(self, name): + try: + return getattr(self._module, name) + except AttributeError: + if self._module is not None: + raise + + import_name = 'pyglet.%s' % self._module_name + __import__(import_name) + module = sys.modules[import_name] + object.__setattr__(self, '_module', module) + globals()[self._module_name] = module + return getattr(module, name) + + def __setattr__(self, name, value): + try: + setattr(self._module, name, value) + except AttributeError: + if self._module is not None: + raise + + import_name = 'pyglet.%s' % self._module_name + __import__(import_name) + module = sys.modules[import_name] + object.__setattr__(self, '_module', module) + globals()[self._module_name] = module + setattr(module, name, value) + +if not _is_epydoc: + app = _ModuleProxy('app') + clock = _ModuleProxy('clock') + com = _ModuleProxy('com') + event = _ModuleProxy('event') + font = _ModuleProxy('font') + gl = _ModuleProxy('gl') + graphics = _ModuleProxy('graphics') + image = _ModuleProxy('image') + lib = _ModuleProxy('lib') + media = _ModuleProxy('media') + resource = _ModuleProxy('resource') + sprite = _ModuleProxy('sprite') + text = _ModuleProxy('text') + window = _ModuleProxy('window') + +# Fool py2exe, py2app into including all top-level modules (doesn't understand +# lazy loading) +if False: + import app + import clock + import com + import event + import font + import gl + import graphics + import image + import lib + import media + import resource + import sprite + import text + import window + +# Hack around some epydoc bug that causes it to think pyglet.window is None. +if _is_epydoc: + import window diff --git a/pyglet/app/__init__.py b/pyglet/app/__init__.py new file mode 100644 index 0000000..53d9b1e --- /dev/null +++ b/pyglet/app/__init__.py @@ -0,0 +1,297 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''Application-wide functionality. + +Most applications need only call `run` after creating one or more windows +to begin processing events. For example, a simple application consisting of +one window is:: + + from pyglet import app + from pyglet import window + + win = window.Window() + app.run() + +To handle events on the main event loop, instantiate it manually. The +following example exits the application as soon as any window is closed (the +default policy is to wait until all windows are closed):: + + event_loop = app.EventLoop() + + @event_loop.event + def on_window_close(window): + event_loop.exit() + +:since: pyglet 1.1 +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: __init__.py 2140 2008-07-27 04:15:52Z Alex.Holkner $' + +import sys +import weakref + +from pyglet import clock +from pyglet import event + +_is_epydoc = hasattr(sys, 'is_epydoc') and sys.is_epydoc + +class WeakSet(object): + '''Set of objects, referenced weakly. + + Adding an object to this set does not prevent it from being garbage + collected. Upon being garbage collected, the object is automatically + removed from the set. + ''' + def __init__(self): + self._dict = weakref.WeakKeyDictionary() + + def add(self, value): + self._dict[value] = True + + def remove(self, value): + del self._dict[value] + + def __iter__(self): + for key in self._dict.keys(): + yield key + + def __contains__(self, other): + return other in self._dict + + def __len__(self): + return len(self._dict) + +#: Set of all open displays. Instances of `Display` are automatically added +#: to this set upon construction. The set uses weak references, so displays +#: are removed from the set when they are no longer referenced. +#: +#: :type: `WeakSet` +displays = WeakSet() + +#: Set of all open windows (including invisible windows). Instances of +#: `Window` are automatically added to this set upon construction. The set +#: uses weak references, so windows are removed from the set when they are no +#: longer referenced or are closed explicitly. +#: +#: :type: `WeakSet` +windows = WeakSet() + + +class BaseEventLoop(event.EventDispatcher): + '''The main run loop of the application. + + Calling `run` begins the application event loop, which processes + operating system events, calls `pyglet.clock.tick` to call scheduled + functions and calls `pyglet.window.Window.on_draw` and + `pyglet.window.Window.flip` to update window contents. + + Applications can subclass `EventLoop` and override certain methods + to integrate another framework's run loop, or to customise processing + in some other way. You should not in general override `run`, as + this method contains platform-specific code that ensures the application + remains responsive to the user while keeping CPU usage to a minimum. + ''' + + #: Flag indicating if the event loop will exit in the next iteration. + #: This is + has_exit = False + + def run(self): + '''Begin processing events, scheduled functions and window updates. + + This method returns when `has_exit` is set to True. + + Developers are discouraged from overriding this method, as the + implementation is platform-specific. + ''' + raise NotImplementedError('abstract') + + def _setup(self): + global event_loop + event_loop = self + + # Disable event queuing for dispatch_events + from pyglet.window import Window + Window._enable_event_queue = False + + # Dispatch pending events + for window in windows: + window.switch_to() + window.dispatch_pending_events() + + def _idle_chance(self): + '''If timeout has expired, manually force an idle loop. + + Called by window that have blocked the event loop (e.g. during + resizing). + ''' + + def idle(self): + '''Called during each iteration of the event loop. + + The method is called immediately after any window events (i.e., after + any user input). The method can return a duration after which + the idle method will be called again. The method may be called + earlier if the user creates more input events. The method + can return `None` to only wait for user events. + + For example, return ``1.0`` to have the idle method called every + second, or immediately after any user events. + + The default implementation dispatches the + `pyglet.window.Window.on_draw` event for all windows and uses + `pyglet.clock.tick` and `pyglet.clock.get_sleep_time` on the default + clock to determine the return value. + + This method should be overridden by advanced users only. To have + code execute at regular intervals, use the + `pyglet.clock.schedule` methods. + + :rtype: float + :return: The number of seconds before the idle method should + be called again, or `None` to block for user input. + ''' + dt = clock.tick(True) + + # Redraw all windows + for window in windows: + if window.invalid: + window.switch_to() + window.dispatch_event('on_draw') + window.flip() + + # Update timout + return clock.get_sleep_time(True) + + def exit(self): + '''Safely exit the event loop at the end of the current iteration. + + This method is convenience for setting `has_exit` to ``True``. + ''' + self.has_exit = True + + def on_window_close(self, window): + '''Default window close handler.''' + if not windows: + self.exit() + + if _is_epydoc: + def on_window_close(window): + '''A window was closed. + + This event is dispatched when a window is closed. It is not + dispatched if the window's close button was pressed but the + window did not close. + + The default handler calls `exit` if no more windows are open. You + can override this handler to base your application exit on some + other policy. + + :event: + ''' + + def on_enter(): + '''The event loop is about to begin. + + This is dispatched when the event loop is prepared to enter + the main run loop, and represents the last chance for an + application to initialise itself. + + :event: + ''' + + def on_exit(): + '''The event loop is about to exit. + + After dispatching this event, the `run` method returns (the + application may not actually exit if you have more code + following the `run` invocation). + + :event: + ''' + +BaseEventLoop.register_event_type('on_window_close') +BaseEventLoop.register_event_type('on_enter') +BaseEventLoop.register_event_type('on_exit') + +#: The global event loop. Set to the correct instance when an `EventLoop` is +#: started. +#: +#: :type: `EventLoop` +event_loop = None + +def run(): + '''Begin processing events, scheduled functions and window updates. + + This is a convenience function, equivalent to:: + + EventLoop().run() + + ''' + EventLoop().run() + +def exit(): + '''Exit the application event loop. + + Causes the application event loop to finish, if an event loop is currently + running. The application may not necessarily exit (for example, there may + be additional code following the `run` invocation). + + This is a convenience function, equivalent to:: + + event_loop.exit() + + ''' + if event_loop: + event_loop.exit() + +if _is_epydoc: + EventLoop = BaseEventLoop + EventLoop.__name__ = 'EventLoop' + del BaseEventLoop +else: + # Permit cyclic import. + import pyglet + pyglet.app = sys.modules[__name__] + + if sys.platform == 'darwin': + from pyglet.app.carbon import CarbonEventLoop as EventLoop + elif sys.platform in ('win32', 'cygwin'): + from pyglet.app.win32 import Win32EventLoop as EventLoop + else: + from pyglet.app.xlib import XlibEventLoop as EventLoop + + diff --git a/pyglet/app/carbon.py b/pyglet/app/carbon.py new file mode 100644 index 0000000..0ad5c04 --- /dev/null +++ b/pyglet/app/carbon.py @@ -0,0 +1,144 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +''' +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: $' + +import ctypes + +from pyglet.app import windows, BaseEventLoop +from pyglet.window.carbon import carbon, types, constants, _oscheck + +EventLoopTimerProc = ctypes.CFUNCTYPE(None, ctypes.c_void_p, ctypes.c_void_p) +kEventDurationForever = ctypes.c_double(constants.kEventDurationForever) + +class CarbonEventLoop(BaseEventLoop): + def run(self): + self._setup() + + e = ctypes.c_void_p() + event_dispatcher = carbon.GetEventDispatcherTarget() + self._event_loop = event_loop = carbon.GetMainEventLoop() + event_queue = carbon.GetMainEventQueue() + self._timer = timer = ctypes.c_void_p() + idle_event_proc = EventLoopTimerProc(self._timer_proc) + carbon.InstallEventLoopTimer(event_loop, + ctypes.c_double(0.1), #? + kEventDurationForever, + idle_event_proc, + None, + ctypes.byref(timer)) + + self._force_idle = False + self._allow_polling = True + + self.dispatch_event('on_enter') + + while not self.has_exit: + if self._force_idle: + duration = 0 + else: + duration = kEventDurationForever + if carbon.ReceiveNextEvent(0, None, duration, + True, ctypes.byref(e)) == 0: + carbon.SendEventToEventTarget(e, event_dispatcher) + carbon.ReleaseEvent(e) + + # Manual idle event + if carbon.GetNumEventsInQueue(event_queue) == 0 or self._force_idle: + self._force_idle = False + self._timer_proc(timer, None, False) + + carbon.RemoveEventLoopTimer(self._timer) + self.dispatch_event('on_exit') + + def _stop_polling(self): + carbon.SetEventLoopTimerNextFireTime(self._timer, ctypes.c_double(0.0)) + + def _enter_blocking(self): + carbon.SetEventLoopTimerNextFireTime(self._timer, ctypes.c_double(0.0)) + self._allow_polling = False + + def _exit_blocking(self): + self._allow_polling = True + + def _timer_proc(self, timer, data, in_events=True): + allow_polling = True + + for window in windows: + # Check for live resizing + if window._resizing is not None: + allow_polling = False + old_width, old_height = window._resizing + rect = types.Rect() + carbon.GetWindowBounds(window._window, + constants.kWindowContentRgn, + ctypes.byref(rect)) + width = rect.right - rect.left + height = rect.bottom - rect.top + if width != old_width or height != old_height: + window._resizing = width, height + window.switch_to() + window.dispatch_event('on_resize', width, height) + + # Check for live dragging + if window._dragging: + allow_polling = False + + # Check for deferred recreate + if window._recreate_deferred: + if in_events: + # Break out of ReceiveNextEvent so it can be processed + # in next iteration. + carbon.QuitEventLoop(self._event_loop) + self._force_idle = True + else: + # Do it now. + window._recreate_immediate() + + sleep_time = self.idle() + + if sleep_time is None: + sleep_time = constants.kEventDurationForever + elif sleep_time < 0.01 and allow_polling and self._allow_polling: + # Switch event loop to polling. + if in_events: + carbon.QuitEventLoop(self._event_loop) + self._force_idle = True + sleep_time = constants.kEventDurationForever + carbon.SetEventLoopTimerNextFireTime(timer, ctypes.c_double(sleep_time)) + diff --git a/pyglet/app/win32.py b/pyglet/app/win32.py new file mode 100644 index 0000000..f8fb4cc --- /dev/null +++ b/pyglet/app/win32.py @@ -0,0 +1,106 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +# $Id:$ + +__docformat__ = 'restructuredtext' +__version__ = '$Id: $' + +import ctypes +import time + +from pyglet.app import windows, BaseEventLoop +from pyglet.window.win32 import _user32, types, constants + +class Win32EventLoop(BaseEventLoop): + def run(self): + self._setup() + + self._timer_proc = types.TIMERPROC(self._timer_func) + self._timer = timer = _user32.SetTimer(0, 0, 0, self._timer_proc) + self._polling = False + self._allow_polling = True + msg = types.MSG() + + self.dispatch_event('on_enter') + + while not self.has_exit: + if self._polling: + while _user32.PeekMessageW(ctypes.byref(msg), + 0, 0, 0, constants.PM_REMOVE): + _user32.TranslateMessage(ctypes.byref(msg)) + _user32.DispatchMessageW(ctypes.byref(msg)) + self._timer_func(0, 0, timer, 0) + else: + _user32.GetMessageW(ctypes.byref(msg), 0, 0, 0) + _user32.TranslateMessage(ctypes.byref(msg)) + _user32.DispatchMessageW(ctypes.byref(msg)) + + # Manual idle event + msg_types = \ + _user32.GetQueueStatus(constants.QS_ALLINPUT) & 0xffff0000 + if (msg.message != constants.WM_TIMER and + not msg_types & ~(constants.QS_TIMER<<16)): + self._timer_func(0, 0, timer, 0) + + self.dispatch_event('on_exit') + + def _idle_chance(self): + if (self._next_idle_time is not None and + self._next_idle_time <= time.time()): + self._timer_func(0, 0, self._timer, 0) + + def _timer_func(self, hwnd, msg, timer, t): + sleep_time = self.idle() + + if sleep_time is None: + # Block indefinitely + millis = constants.USER_TIMER_MAXIMUM + self._next_idle_time = None + self._polling = False + _user32.SetTimer(0, timer, millis, self._timer_proc) + elif sleep_time < 0.01 and self._allow_polling: + # Degenerate to polling + millis = constants.USER_TIMER_MAXIMUM + self._next_idle_time = 0. + if not self._polling: + self._polling = True + _user32.SetTimer(0, timer, millis, self._timer_proc) + else: + # Block until timer + # XXX hack to avoid oversleep; needs to be api + sleep_time = max(sleep_time - 0.01, 0) + millis = int(sleep_time * 1000) + self._next_idle_time = time.time() + sleep_time + self._polling = False + _user32.SetTimer(0, timer, millis, self._timer_proc) diff --git a/pyglet/app/xlib.py b/pyglet/app/xlib.py new file mode 100644 index 0000000..09ab83d --- /dev/null +++ b/pyglet/app/xlib.py @@ -0,0 +1,99 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +''' +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: xlib.py 2045 2008-05-01 16:59:49Z Alex.Holkner $' + +import select +import weakref + +from pyglet.app import displays, windows, BaseEventLoop +from pyglet.window.xlib import xlib + +class XlibEventLoop(BaseEventLoop): + def run(self): + self._setup() + + e = xlib.XEvent() + t = 0 + sleep_time = 0. + + self.dispatch_event('on_enter') + + while not self.has_exit: + # Check for already pending events + for display in displays: + if xlib.XPending(display._display): + pending_displays = (display,) + break + else: + # None found; select on all file descriptors or timeout + iwtd = self.get_select_files() + pending_displays, _, _ = select.select(iwtd, (), (), sleep_time) + + # Dispatch platform events + for display in pending_displays: + while xlib.XPending(display._display): + xlib.XNextEvent(display._display, e) + + # Key events are filtered by the xlib window event + # handler so they get a shot at the prefiltered event. + if e.xany.type not in (xlib.KeyPress, xlib.KeyRelease): + if xlib.XFilterEvent(e, e.xany.window): + continue + try: + window = display._window_map[e.xany.window] + except KeyError: + continue + + window.dispatch_platform_event(e) + + # Dispatch resize events + for window in windows: + if window._needs_resize: + window.switch_to() + window.dispatch_event('on_resize', + window._width, window._height) + window.dispatch_event('on_expose') + window._needs_resize = False + + sleep_time = self.idle() + + self.dispatch_event('on_exit') + + def get_select_files(self): + return list(displays) diff --git a/pyglet/clock.py b/pyglet/clock.py new file mode 100644 index 0000000..260e116 --- /dev/null +++ b/pyglet/clock.py @@ -0,0 +1,948 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''Precise framerate calculation, scheduling and framerate limiting. + +Measuring time +============== + +The `tick` and `get_fps` functions can be used in conjunction to fulfil most +games' basic requirements:: + + from pylet import clock + while True: + dt = clock.tick() + # ... update and render ... + print 'FPS is %f' % clock.get_fps() + +The ``dt`` value returned gives the number of seconds (as a float) since the +last "tick". + +The `get_fps` function averages the framerate over a sliding window of +approximately 1 second. (You can calculate the instantaneous framerate by +taking the reciprocal of ``dt``). + +Always remember to `tick` the clock! + +Limiting frame-rate +=================== + +The framerate can be limited:: + + clock.set_fps_limit(60) + +This causes `clock` to sleep during each `tick` in an attempt to keep the +number of ticks (frames) per second below 60. + +The implementation uses platform-dependent high-resolution sleep functions +to achieve better accuracy with busy-waiting than would be possible using +just the `time` module. + +Scheduling +========== + +You can schedule a function to be called every time the clock is ticked:: + + def callback(dt): + print '%f seconds since last callback' % dt + + clock.schedule(callback) + +The `schedule_interval` method causes a function to be called every "n" +seconds:: + + clock.schedule_interval(callback, .5) # called twice a second + +The `schedule_once` method causes a function to be called once "n" seconds +in the future:: + + clock.schedule_once(callback, 5) # called in 5 seconds + +All of the `schedule` methods will pass on any additional args or keyword args +you specify ot the callback function:: + + def animate(dt, velocity, sprite): + sprite.position += dt * velocity + + clock.schedule(animate, velocity=5.0, sprite=alien) + +You can cancel a function scheduled with any of these methods using +`unschedule`:: + + clock.unschedule(animate) + +Displaying FPS +============== + +The ClockDisplay class provides a simple FPS counter. You should create +an instance of ClockDisplay once during the application's start up:: + + fps_display = clock.ClockDisplay() + +Call draw on the ClockDisplay object for each frame:: + + fps_display.draw() + +There are several options to change the font, color and text displayed +within the __init__ method. + +Using multiple clocks +===================== + +The clock functions are all relayed to an instance of `Clock` which is +initalised with the module. You can get this instance to use directly:: + + clk = clock.get_default() + +You can also replace the default clock with your own: + + myclk = clock.Clock() + clock.set_default(myclk) + +Each clock maintains its own set of scheduled functions and FPS +limiting/measurement. Each clock must be "ticked" separately. + +Multiple and derived clocks potentially allow you to separate "game-time" and +"wall-time", or to synchronise your clock to an audio or video stream instead +of the system clock. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: clock.py 2298 2008-10-06 09:13:09Z Alex.Holkner $' + +import time +import sys +import operator +import ctypes +import ctypes.util + +import pyglet.lib + +if sys.platform in ('win32', 'cygwin'): + # Win32 Sleep function is only 10-millisecond resolution, so instead + # use a waitable timer object, which has up to 100-nanosecond resolution + # (hardware and implementation dependent, of course). + _kernel32 = ctypes.windll.kernel32 + class _ClockBase(object): + def __init__(self): + self._timer = _kernel32.CreateWaitableTimerA(ctypes.c_void_p(), + True, ctypes.c_void_p()) + + def sleep(self, microseconds): + delay = ctypes.c_longlong(int(-microseconds * 10)) + _kernel32.SetWaitableTimer(self._timer, ctypes.byref(delay), + 0, ctypes.c_void_p(), ctypes.c_void_p(), False) + _kernel32.WaitForSingleObject(self._timer, 0xffffffff) + +else: + _c = pyglet.lib.load_library('c', darwin='/usr/lib/libc.dylib') + _c.usleep.argtypes = [ctypes.c_ulong] + + class _ClockBase(object): + def sleep(self, microseconds): + _c.usleep(int(microseconds)) + +class _ScheduledItem(object): + __slots__ = ['func', 'args', 'kwargs'] + def __init__(self, func, args, kwargs): + self.func = func + self.args = args + self.kwargs = kwargs + +class _ScheduledIntervalItem(object): + __slots__ = ['func', 'interval', 'last_ts', 'next_ts', + 'args', 'kwargs'] + def __init__(self, func, interval, last_ts, next_ts, args, kwargs): + self.func = func + self.interval = interval + self.last_ts = last_ts + self.next_ts = next_ts + self.args = args + self.kwargs = kwargs + +def _dummy_schedule_func(*args, **kwargs): + '''Dummy function that does nothing, placed onto zombie scheduled items + to ensure they have no side effect if already queued inside tick() method. + ''' + pass + +class Clock(_ClockBase): + '''Class for calculating and limiting framerate, and for calling scheduled + functions. + ''' + + #: The minimum amount of time in seconds this clock will attempt to sleep + #: for when framerate limiting. Higher values will increase the + #: accuracy of the limiting but also increase CPU usage while + #: busy-waiting. Lower values mean the process sleeps more often, but is + #: prone to over-sleep and run at a potentially lower or uneven framerate + #: than desired. + MIN_SLEEP = 0.005 + + #: The amount of time in seconds this clock subtracts from sleep values + #: to compensate for lazy operating systems. + SLEEP_UNDERSHOOT = MIN_SLEEP - 0.001 + + # List of functions to call every tick. + _schedule_items = None + + # List of schedule interval items kept in sort order. + _schedule_interval_items = None + + # If True, a sleep(0) is inserted on every tick. + _force_sleep = False + + def __init__(self, fps_limit=None, time_function=time.time): + '''Initialise a Clock, with optional framerate limit and custom + time function. + + :Parameters: + `fps_limit` : float + If not None, the maximum allowable framerate. Defaults + to None. Deprecated in pyglet 1.1. + `time_function` : function + Function to return the elapsed time of the application, + in seconds. Defaults to time.time, but can be replaced + to allow for easy time dilation effects or game pausing. + + ''' + + super(Clock, self).__init__() + self.time = time_function + self.next_ts = self.time() + self.last_ts = None + self.times = [] + + self.set_fps_limit(fps_limit) + self.cumulative_time = 0 + + self._schedule_items = [] + self._schedule_interval_items = [] + + def tick(self, poll=False): + '''Signify that one frame has passed. + + This will call any scheduled functions that have elapsed. + + :Parameters: + `poll` : bool + If True, the function will call any scheduled functions + but will not sleep or busy-wait for any reason. Recommended + for advanced applications managing their own sleep timers + only. + + Since pyglet 1.1. + + :rtype: float + :return: The number of seconds since the last "tick", or 0 if this was + the first frame. + ''' + if poll: + if self.period_limit: + self.next_ts = self.next_ts + self.period_limit + else: + if self.period_limit: + self._limit() + + if self._force_sleep: + self.sleep(0) + + ts = self.time() + if self.last_ts is None: + delta_t = 0 + else: + delta_t = ts - self.last_ts + self.times.insert(0, delta_t) + if len(self.times) > self.window_size: + self.cumulative_time -= self.times.pop() + self.cumulative_time += delta_t + self.last_ts = ts + + # Call functions scheduled for every frame + # Dupe list just in case one of the items unchedules itself + for item in list(self._schedule_items): + item.func(delta_t, *item.args, **item.kwargs) + + # Call all scheduled interval functions and reschedule for future. + need_resort = False + # Dupe list just in case one of the items unchedules itself + for item in list(self._schedule_interval_items): + if item.next_ts > ts: + break + item.func(ts - item.last_ts, *item.args, **item.kwargs) + if item.interval: + # Try to keep timing regular, even if overslept this time; + # but don't schedule in the past (which could lead to + # infinitely-worsing error). + item.next_ts = item.last_ts + item.interval + item.last_ts = ts + if item.next_ts <= ts: + if ts - item.next_ts < 0.05: + # Only missed by a little bit, keep the same schedule + item.next_ts = ts + item.interval + else: + # Missed by heaps, do a soft reschedule to avoid + # lumping everything together. + item.next_ts = self._get_soft_next_ts(ts, item.interval) + # Fake last_ts to avoid repeatedly over-scheduling in + # future. Unfortunately means the next reported dt is + # incorrect (looks like interval but actually isn't). + item.last_ts = item.next_ts - item.interval + need_resort = True + else: + item.next_ts = None + + # Remove finished one-shots. + self._schedule_interval_items = \ + [item for item in self._schedule_interval_items \ + if item.next_ts is not None] + + if need_resort: + # TODO bubble up changed items might be faster + self._schedule_interval_items.sort(key=lambda a: a.next_ts) + + return delta_t + + def _limit(self): + '''Sleep until the next frame is due. Called automatically by + `tick` if a framerate limit has been set. + + This method uses several heuristics to determine whether to + sleep or busy-wait (or both). + ''' + ts = self.time() + # Sleep to just before the desired time + sleeptime = self.get_sleep_time(False) + while sleeptime - self.SLEEP_UNDERSHOOT > self.MIN_SLEEP: + self.sleep(1000000 * (sleeptime - self.SLEEP_UNDERSHOOT)) + sleeptime = self.get_sleep_time(False) + + # Busy-loop CPU to get closest to the mark + sleeptime = self.next_ts - self.time() + while sleeptime > 0: + sleeptime = self.next_ts - self.time() + + if sleeptime < -2 * self.period_limit: + # Missed the time by a long shot, let's reset the clock + # print >> sys.stderr, 'Step %f' % -sleeptime + self.next_ts = ts + 2 * self.period_limit + else: + # Otherwise keep the clock steady + self.next_ts = self.next_ts + self.period_limit + + def get_sleep_time(self, sleep_idle): + '''Get the time until the next item is scheduled. + + This method considers all scheduled items and the current + ``fps_limit``, if any. + + Applications can choose to continue receiving updates at the + maximum framerate during idle time (when no functions are scheduled), + or they can sleep through their idle time and allow the CPU to + switch to other processes or run in low-power mode. + + If `sleep_idle` is ``True`` the latter behaviour is selected, and + ``None`` will be returned if there are no scheduled items. + + Otherwise, if `sleep_idle` is ``False``, a sleep time allowing + the maximum possible framerate (considering ``fps_limit``) will + be returned; or an earlier time if a scheduled function is ready. + + :Parameters: + `sleep_idle` : bool + If True, the application intends to sleep through its idle + time; otherwise it will continue ticking at the maximum + frame rate allowed. + + :rtype: float + :return: Time until the next scheduled event in seconds, or ``None`` + if there is no event scheduled. + + :since: pyglet 1.1 + ''' + if self._schedule_items or not sleep_idle: + if not self.period_limit: + return 0. + else: + wake_time = self.next_ts + if self._schedule_interval_items: + wake_time = min(wake_time, + self._schedule_interval_items[0].next_ts) + return max(wake_time - self.time(), 0.) + + if self._schedule_interval_items: + return max(self._schedule_interval_items[0].next_ts - self.time(), + 0) + + return None + + def set_fps_limit(self, fps_limit): + '''Set the framerate limit. + + The framerate limit applies only when a function is scheduled + for every frame. That is, the framerate limit can be exceeded by + scheduling a function for a very small period of time. + + :Parameters: + `fps_limit` : float + Maximum frames per second allowed, or None to disable + limiting. + + :deprecated: Use `pyglet.app.run` and `schedule_interval` instead. + ''' + if not fps_limit: + self.period_limit = None + else: + self.period_limit = 1. / fps_limit + self.window_size = fps_limit or 60 + + def get_fps_limit(self): + '''Get the framerate limit. + + :rtype: float + :return: The framerate limit previously set in the constructor or + `set_fps_limit`, or None if no limit was set. + ''' + if self.period_limit: + return 1. / self.period_limit + else: + return 0 + + def get_fps(self): + '''Get the average FPS of recent history. + + The result is the average of a sliding window of the last "n" frames, + where "n" is some number designed to cover approximately 1 second. + + :rtype: float + :return: The measured frames per second. + ''' + if not self.cumulative_time: + return 0 + return len(self.times) / self.cumulative_time + + def schedule(self, func, *args, **kwargs): + '''Schedule a function to be called every frame. + + The function should have a prototype that includes ``dt`` as the + first argument, which gives the elapsed time, in seconds, since the + last clock tick. Any additional arguments given to this function + are passed on to the callback:: + + def callback(dt, *args, **kwargs): + pass + + :Parameters: + `func` : function + The function to call each frame. + ''' + item = _ScheduledItem(func, args, kwargs) + self._schedule_items.append(item) + + def _schedule_item(self, func, last_ts, next_ts, interval, *args, **kwargs): + item = _ScheduledIntervalItem( + func, interval, last_ts, next_ts, args, kwargs) + + # Insert in sort order + for i, other in enumerate(self._schedule_interval_items): + if other.next_ts > next_ts: + self._schedule_interval_items.insert(i, item) + break + else: + self._schedule_interval_items.append(item) + + def schedule_interval(self, func, interval, *args, **kwargs): + '''Schedule a function to be called every `interval` seconds. + + Specifying an interval of 0 prevents the function from being + called again (see `schedule` to call a function as often as possible). + + The callback function prototype is the same as for `schedule`. + + :Parameters: + `func` : function + The function to call when the timer lapses. + `interval` : float + The number of seconds to wait between each call. + + ''' + last_ts = self.last_ts or self.next_ts + + # Schedule from now, unless now is sufficiently close to last_ts, in + # which case use last_ts. This clusters together scheduled items that + # probably want to be scheduled together. The old (pre 1.1.1) + # behaviour was to always use self.last_ts, and not look at ts. The + # new behaviour is needed because clock ticks can now be quite + # irregular, and span several seconds. + ts = self.time() + if ts - last_ts > 0.2: + last_ts = ts + + next_ts = last_ts + interval + self._schedule_item(func, last_ts, next_ts, interval, *args, **kwargs) + + def schedule_interval_soft(self, func, interval, *args, **kwargs): + '''Schedule a function to be called every `interval` seconds, + beginning at a time that does not coincide with other scheduled + events. + + This method is similar to `schedule_interval`, except that the + clock will move the interval out of phase with other scheduled + functions so as to distribute CPU more load evenly over time. + + This is useful for functions that need to be called regularly, + but not relative to the initial start time. `pyglet.media` + does this for scheduling audio buffer updates, which need to occur + regularly -- if all audio updates are scheduled at the same time + (for example, mixing several tracks of a music score, or playing + multiple videos back simultaneously), the resulting load on the + CPU is excessive for those intervals but idle outside. Using + the soft interval scheduling, the load is more evenly distributed. + + Soft interval scheduling can also be used as an easy way to schedule + graphics animations out of phase; for example, multiple flags + waving in the wind. + + :since: pyglet 1.1 + + :Parameters: + `func` : function + The function to call when the timer lapses. + `interval` : float + The number of seconds to wait between each call. + + ''' + last_ts = self.last_ts or self.next_ts + + # See schedule_interval + ts = self.time() + if ts - last_ts > 0.2: + last_ts = ts + + next_ts = self._get_soft_next_ts(last_ts, interval) + last_ts = next_ts - interval + self._schedule_item(func, last_ts, next_ts, interval, *args, **kwargs) + + def _get_soft_next_ts(self, last_ts, interval): + def taken(ts, e): + '''Return True if the given time has already got an item + scheduled nearby. + ''' + for item in self._schedule_interval_items: + if abs(item.next_ts - ts) <= e: + return True + elif item.next_ts > ts + e: + return False + return False + + # Binary division over interval: + # + # 0 interval + # |--------------------------| + # 5 3 6 2 7 4 8 1 Order of search + # + # i.e., first scheduled at interval, + # then at interval/2 + # then at interval/4 + # then at interval*3/4 + # then at ... + # + # Schedule is hopefully then evenly distributed for any interval, + # and any number of scheduled functions. + + next_ts = last_ts + interval + if not taken(next_ts, interval / 4): + return next_ts + + dt = interval + divs = 1 + while True: + next_ts = last_ts + for i in range(divs - 1): + next_ts += dt + if not taken(next_ts, dt / 4): + return next_ts + dt /= 2 + divs *= 2 + + # Avoid infinite loop in pathological case + if divs > 16: + return next_ts + + def schedule_once(self, func, delay, *args, **kwargs): + '''Schedule a function to be called once after `delay` seconds. + + The callback function prototype is the same as for `schedule`. + + :Parameters: + `func` : function + The function to call when the timer lapses. + `delay` : float + The number of seconds to wait before the timer lapses. + ''' + last_ts = self.last_ts or self.next_ts + + # See schedule_interval + ts = self.time() + if ts - last_ts > 0.2: + last_ts = ts + + next_ts = last_ts + delay + self._schedule_item(func, last_ts, next_ts, 0, *args, **kwargs) + + def unschedule(self, func): + '''Remove a function from the schedule. + + If the function appears in the schedule more than once, all occurances + are removed. If the function was not scheduled, no error is raised. + + :Parameters: + `func` : function + The function to remove from the schedule. + + ''' + # First replace zombie items' func with a dummy func that does + # nothing, in case the list has already been cloned inside tick(). + # (Fixes issue 326). + for item in self._schedule_items: + if item.func == func: + item.func = _dummy_schedule_func + + for item in self._schedule_interval_items: + if item.func == func: + item.func = _dummy_schedule_func + + # Now remove matching items from both schedule lists. + self._schedule_items = \ + [item for item in self._schedule_items \ + if item.func is not _dummy_schedule_func] + + self._schedule_interval_items = \ + [item for item in self._schedule_interval_items \ + if item.func is not _dummy_schedule_func] + +# Default clock. +_default = Clock() + +def set_default(default): + '''Set the default clock to use for all module-level functions. + + By default an instance of `Clock` is used. + + :Parameters: + `default` : `Clock` + The default clock to use. + ''' + global _default + _default = default + +def get_default(): + '''Return the `Clock` instance that is used by all module-level + clock functions. + + :rtype: `Clock` + :return: The default clock. + ''' + return _default + +def tick(poll=False): + '''Signify that one frame has passed on the default clock. + + This will call any scheduled functions that have elapsed. + + :Parameters: + `poll` : bool + If True, the function will call any scheduled functions + but will not sleep or busy-wait for any reason. Recommended + for advanced applications managing their own sleep timers + only. + + Since pyglet 1.1. + + :rtype: float + :return: The number of seconds since the last "tick", or 0 if this was the + first frame. + ''' + + return _default.tick(poll) + +def get_sleep_time(sleep_idle): + '''Get the time until the next item is scheduled on the default clock. + + See `Clock.get_sleep_time` for details. + + :Parameters: + `sleep_idle` : bool + If True, the application intends to sleep through its idle + time; otherwise it will continue ticking at the maximum + frame rate allowed. + + :rtype: float + :return: Time until the next scheduled event in seconds, or ``None`` + if there is no event scheduled. + + :since: pyglet 1.1 + ''' + return _default.get_sleep_time(sleep_idle) + +def get_fps(): + '''Return the current measured FPS of the default clock. + + :rtype: float + ''' + return _default.get_fps() + +def set_fps_limit(fps_limit): + '''Set the framerate limit for the default clock. + + :Parameters: + `fps_limit` : float + Maximum frames per second allowed, or None to disable + limiting. + + :deprecated: Use `pyglet.app.run` and `schedule_interval` instead. + ''' + _default.set_fps_limit(fps_limit) + +def get_fps_limit(): + '''Get the framerate limit for the default clock. + + :return: The framerate limit previously set by `set_fps_limit`, or None if + no limit was set. + + ''' + return _default.get_fps_limit() + +def schedule(func, *args, **kwargs): + '''Schedule 'func' to be called every frame on the default clock. + + The arguments passed to func are ``dt``, followed by any ``*args`` and + ``**kwargs`` given here. + + :Parameters: + `func` : function + The function to call each frame. + ''' + _default.schedule(func, *args, **kwargs) + +def schedule_interval(func, interval, *args, **kwargs): + '''Schedule 'func' to be called every 'interval' seconds on the default + clock. + + The arguments passed to 'func' are 'dt' (time since last function call), + followed by any ``*args`` and ``**kwargs`` given here. + + :Parameters: + `func` : function + The function to call when the timer lapses. + `interval` : float + The number of seconds to wait between each call. + + ''' + _default.schedule_interval(func, interval, *args, **kwargs) + +def schedule_interval_soft(func, interval, *args, **kwargs): + '''Schedule 'func' to be called every 'interval' seconds on the default + clock, beginning at a time that does not coincide with other scheduled + events. + + The arguments passed to 'func' are 'dt' (time since last function call), + followed by any ``*args`` and ``**kwargs`` given here. + + :see: `Clock.schedule_interval_soft` + + :since: pyglet 1.1 + + :Parameters: + `func` : function + The function to call when the timer lapses. + `interval` : float + The number of seconds to wait between each call. + + ''' + _default.schedule_interval_soft(func, interval, *args, **kwargs) + +def schedule_once(func, delay, *args, **kwargs): + '''Schedule 'func' to be called once after 'delay' seconds (can be + a float) on the default clock. The arguments passed to 'func' are + 'dt' (time since last function call), followed by any ``*args`` and + ``**kwargs`` given here. + + If no default clock is set, the func is queued and will be scheduled + on the default clock as soon as it is created. + + :Parameters: + `func` : function + The function to call when the timer lapses. + `delay` : float + The number of seconds to wait before the timer lapses. + + ''' + _default.schedule_once(func, delay, *args, **kwargs) + +def unschedule(func): + '''Remove 'func' from the default clock's schedule. No error + is raised if the func was never scheduled. + + :Parameters: + `func` : function + The function to remove from the schedule. + + ''' + _default.unschedule(func) + +class ClockDisplay(object): + '''Display current clock values, such as FPS. + + This is a convenience class for displaying diagnostics such as the + framerate. See the module documentation for example usage. + + :Ivariables: + `label` : `pyglet.font.Text` + The label which is displayed. + + ''' + + def __init__(self, + font=None, + interval=0.25, + format='%(fps).2f', + color=(.5, .5, .5, .5), + clock=None): + '''Create a ClockDisplay. + + All parameters are optional. By default, a large translucent + font will be used to display the FPS to two decimal places. + + :Parameters: + `font` : `pyglet.font.Font` + The font to format text in. + `interval` : float + The number of seconds between updating the display. + `format` : str + A format string describing the format of the text. This + string is modulated with the dict ``{'fps' : fps}``. + `color` : 4-tuple of float + The color, including alpha, passed to ``glColor4f``. + `clock` : `Clock` + The clock which determines the time. If None, the default + clock is used. + + ''' + + if clock is None: + clock = _default + self.clock = clock + self.clock.schedule_interval(self.update_text, interval) + + if not font: + from pyglet.font import load as load_font + font = load_font('', 36, bold=True) + + import pyglet.font + self.label = pyglet.font.Text(font, '', color=color, x=10, y=10) + + self.format = format + + def unschedule(self): + '''Remove the display from its clock's schedule. + + `ClockDisplay` uses `Clock.schedule_interval` to periodically update + its display label. Even if the ClockDisplay is not being used any + more, its update method will still be scheduled, which can be a + resource drain. Call this method to unschedule the update method + and allow the ClockDisplay to be garbage collected. + + :since: pyglet 1.1 + ''' + self.clock.unschedule(self.update_text) + + def update_text(self, dt=0): + '''Scheduled method to update the label text.''' + fps = self.clock.get_fps() + self.label.text = self.format % {'fps': fps} + + def draw(self): + '''Method called each frame to render the label.''' + self.label.draw() + +def test_clock(): + import sys + import getopt + test_seconds = 1 + test_fps = 60 + show_fps = False + options, args = getopt.getopt(sys.argv[1:], 'vht:f:', + ['time=', 'fps=', 'help']) + for key, value in options: + if key in ('-t', '--time'): + test_seconds = float(value) + elif key in ('-f', '--fps'): + test_fps = float(value) + elif key in ('-v'): + show_fps = True + elif key in ('-h', '--help'): + print ('Usage: clock.py \n' + '\n' + 'Options:\n' + ' -t --time Number of seconds to run for.\n' + ' -f --fps Target FPS.\n' + '\n' + 'Tests the clock module by measuring how close we can\n' + 'get to the desired FPS by sleeping and busy-waiting.') + sys.exit(0) + + set_fps_limit(test_fps) + start = time.time() + + # Add one because first frame has no update interval. + n_frames = int(test_seconds * test_fps + 1) + + print 'Testing %f FPS for %f seconds...' % (test_fps, test_seconds) + for i in xrange(n_frames): + tick() + if show_fps: + print get_fps() + total_time = time.time() - start + total_error = total_time - test_seconds + print 'Total clock error: %f secs' % total_error + print 'Total clock error / secs: %f secs/secs' % \ + (total_error / test_seconds) + + # Not fair to add the extra frame in this calc, since no-one's interested + # in the startup situation. + print 'Average FPS: %f' % ((n_frames - 1) / total_time) + +if __name__ == '__main__': + test_clock() diff --git a/pyglet/com.py b/pyglet/com.py new file mode 100644 index 0000000..43335bd --- /dev/null +++ b/pyglet/com.py @@ -0,0 +1,154 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +# $Id:$ + +'''Minimal Windows COM interface. + +Allows pyglet to use COM interfaces on Windows without comtypes. Unlike +comtypes, this module does not provide property interfaces, read typelibs, +nice-ify return values or permit Python implementations of COM interfaces. We +don't need anything that sophisticated to work with DirectX. + +All interfaces should derive from IUnknown (defined in this module). The +Python COM interfaces are actually pointers to the implementation (take note +when translating methods that take an interface as argument). + +Interfaces can define methods:: + + class IDirectSound8(com.IUnknown): + _methods_ = [ + ('CreateSoundBuffer', com.STDMETHOD()), + ('GetCaps', com.STDMETHOD(LPDSCAPS)), + ... + ] + +Only use STDMETHOD or METHOD for the method types (not ordinary ctypes +function types). The 'this' pointer is bound automatically... e.g., call:: + + device = IDirectSound8() + DirectSoundCreate8(None, ctypes.byref(device), None) + + caps = DSCAPS() + device.GetCaps(caps) + +Because STDMETHODs use HRESULT as the return type, there is no need to check +the return value. + +Don't forget to manually manage memory... call Release() when you're done with +an interface. +''' + +import ctypes +import sys + +if sys.platform != 'win32': + raise ImportError('pyglet.com requires a Windows build of Python') + +class GUID(ctypes.Structure): + _fields_ = [ + ('Data1', ctypes.c_ulong), + ('Data2', ctypes.c_ushort), + ('Data3', ctypes.c_ushort), + ('Data4', ctypes.c_ubyte * 8) + ] + + def __init__(self, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8): + self.Data1 = l + self.Data2 = w1 + self.Data3 = w2 + self.Data4[:] = (b1, b2, b3, b4, b5, b6, b7, b8) + +LPGUID = ctypes.POINTER(GUID) +IID = GUID +REFIID = ctypes.POINTER(IID) + +class METHOD(object): + '''COM method.''' + def __init__(self, restype, *args): + self.restype = restype + self.argtypes = args + + def get_field(self): + return ctypes.WINFUNCTYPE(self.restype, *self.argtypes) + +class STDMETHOD(METHOD): + '''COM method with HRESULT return value.''' + def __init__(self, *args): + super(STDMETHOD, self).__init__(ctypes.HRESULT, *args) + +class COMMethodInstance(object): + '''Binds a COM interface method.''' + def __init__(self, name, i, method): + self.name = name + self.i = i + self.method = method + + def __get__(self, obj, tp): + if obj is not None: + return lambda *args: \ + self.method.get_field()(self.i, self.name)(obj, *args) + raise AttributeError() + +class COMInterface(ctypes.Structure): + '''Dummy struct to serve as the type of all COM pointers.''' + _fields_ = [ + ('lpVtbl', ctypes.c_void_p), + ] + +class InterfaceMetaclass(type(ctypes.POINTER(COMInterface))): + '''Creates COM interface pointers.''' + def __new__(cls, name, bases, dct): + methods = [] + for base in bases[::-1]: + methods.extend(base.__dict__.get('_methods_', ())) + methods.extend(dct.get('_methods_', ())) + + for i, (n, method) in enumerate(methods): + dct[n] = COMMethodInstance(n, i, method) + + dct['_type_'] = COMInterface + + return super(InterfaceMetaclass, cls).__new__(cls, name, bases, dct) + +class Interface(ctypes.POINTER(COMInterface)): + '''Base COM interface pointer.''' + __metaclass__ = InterfaceMetaclass + +class IUnknown(Interface): + _methods_ = [ + ('QueryInterface', STDMETHOD(REFIID, ctypes.c_void_p)), + ('AddRef', METHOD(ctypes.c_int)), + ('Release', METHOD(ctypes.c_int)) + ] + diff --git a/pyglet/event.py b/pyglet/event.py new file mode 100644 index 0000000..ca3a87c --- /dev/null +++ b/pyglet/event.py @@ -0,0 +1,435 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''Event dispatch framework. + +All objects that produce events in pyglet implement `EventDispatcher`, +providing a consistent interface for registering and manipulating event +handlers. A commonly used event dispatcher is `pyglet.window.Window`. + +Event types +=========== + +For each event dispatcher there is a set of events that it dispatches; these +correspond with the type of event handlers you can attach. Event types are +identified by their name, for example, ''on_resize''. If you are creating a +new class which implements `EventDispatcher`, you must call +`EventDispatcher.register_event_type` for each event type. + +Attaching event handlers +======================== + +An event handler is simply a function or method. You can attach an event +handler by setting the appropriate function on the instance:: + + def on_resize(width, height): + # ... + dispatcher.on_resize = on_resize + +There is also a convenience decorator that reduces typing:: + + @dispatcher.event + def on_resize(width, height): + # ... + +You may prefer to subclass and override the event handlers instead:: + + class MyDispatcher(DispatcherClass): + def on_resize(self, width, height): + # ... + +Event handler stack +=================== + +When attaching an event handler to a dispatcher using the above methods, it +replaces any existing handler (causing the original handler to no longer be +called). Each dispatcher maintains a stack of event handlers, allowing you to +insert an event handler "above" the existing one rather than replacing it. + +There are two main use cases for "pushing" event handlers: + +* Temporarily intercepting the events coming from the dispatcher by pushing a + custom set of handlers onto the dispatcher, then later "popping" them all + off at once. +* Creating "chains" of event handlers, where the event propogates from the + top-most (most recently added) handler to the bottom, until a handler + takes care of it. + +Use `EventDispatcher.push_handlers` to create a new level in the stack and +attach handlers to it. You can push several handlers at once:: + + dispatcher.push_handlers(on_resize, on_key_press) + +If your function handlers have different names to the events they handle, use +keyword arguments:: + + dispatcher.push_handlers(on_resize=my_resize, + on_key_press=my_key_press) + +After an event handler has processed an event, it is passed on to the +next-lowest event handler, unless the handler returns `EVENT_HANDLED`, which +prevents further propogation. + +To remove all handlers on the top stack level, use +`EventDispatcher.pop_handlers`. + +Note that any handlers pushed onto the stack have precedence over the +handlers set directly on the instance (for example, using the methods +described in the previous section), regardless of when they were set. +For example, handler ``foo`` is called before handler ``bar`` in the following +example:: + + dispatcher.push_handlers(on_resize=foo) + dispatcher.on_resize = bar + +Dispatching events +================== + +pyglet uses a single-threaded model for all application code. Event +handlers are only ever invoked as a result of calling +EventDispatcher.dispatch_events`. + +It is up to the specific event dispatcher to queue relevant events until they +can be dispatched, at which point the handlers are called in the order the +events were originally generated. + +This implies that your application runs with a main loop that continously +updates the application state and checks for new events:: + + while True: + dispatcher.dispatch_events() + # ... additional per-frame processing + +Not all event dispatchers require the call to ``dispatch_events``; check with +the particular class documentation. + +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: event.py 1824 2008-02-28 09:22:01Z Alex.Holkner $' + +import inspect + +EVENT_HANDLED = True +EVENT_UNHANDLED = None + +class EventException(Exception): + '''An exception raised when an event handler could not be attached. + ''' + pass + +class EventDispatcher(object): + '''Generic event dispatcher interface. + + See the module docstring for usage. + ''' + # Placeholder empty stack; real stack is created only if needed + _event_stack = () + + @classmethod + def register_event_type(cls, name): + '''Register an event type with the dispatcher. + + Registering event types allows the dispatcher to validate event + handler names as they are attached, and to search attached objects for + suitable handlers. + + :Parameters: + `name` : str + Name of the event to register. + + ''' + if not hasattr(cls, 'event_types'): + cls.event_types = [] + cls.event_types.append(name) + return name + + def push_handlers(self, *args, **kwargs): + '''Push a level onto the top of the handler stack, then attach zero or + more event handlers. + + If keyword arguments are given, they name the event type to attach. + Otherwise, a callable's `__name__` attribute will be used. Any other + object may also be specified, in which case it will be searched for + callables with event names. + ''' + # Create event stack if necessary + if type(self._event_stack) is tuple: + self._event_stack = [] + + # Place dict full of new handlers at beginning of stack + self._event_stack.insert(0, {}) + self.set_handlers(*args, **kwargs) + + def _get_handlers(self, args, kwargs): + '''Implement handler matching on arguments for set_handlers and + remove_handlers. + ''' + for object in args: + if inspect.isroutine(object): + # Single magically named function + name = object.__name__ + if name not in self.event_types: + raise EventException('Unknown event "%s"' % name) + yield name, object + else: + # Single instance with magically named methods + for name in dir(object): + if name in self.event_types: + yield name, getattr(object, name) + for name, handler in kwargs.items(): + # Function for handling given event (no magic) + if name not in self.event_types: + raise EventException('Unknown event "%s"' % name) + yield name, handler + + def set_handlers(self, *args, **kwargs): + '''Attach one or more event handlers to the top level of the handler + stack. + + See `push_handlers` for the accepted argument types. + ''' + # Create event stack if necessary + if type(self._event_stack) is tuple: + self._event_stack = [{}] + + for name, handler in self._get_handlers(args, kwargs): + self.set_handler(name, handler) + + def set_handler(self, name, handler): + '''Attach a single event handler. + + :Parameters: + `name` : str + Name of the event type to attach to. + `handler` : callable + Event handler to attach. + + ''' + # Create event stack if necessary + if type(self._event_stack) is tuple: + self._event_stack = [{}] + + self._event_stack[0][name] = handler + + def pop_handlers(self): + '''Pop the top level of event handlers off the stack. + ''' + assert self._event_stack and 'No handlers pushed' + + del self._event_stack[0] + + def remove_handlers(self, *args, **kwargs): + '''Remove event handlers from the event stack. + + See `push_handlers` for the accepted argument types. All handlers + are removed from the first stack frame that contains any of the given + handlers. No error is raised if any handler does not appear in that + frame, or if no stack frame contains any of the given handlers. + + If the stack frame is empty after removing the handlers, it is + removed from the stack. Note that this interferes with the expected + symmetry of `push_handlers` and `pop_handlers`. + ''' + handlers = list(self._get_handlers(args, kwargs)) + + # Find the first stack frame containing any of the handlers + def find_frame(): + for frame in self._event_stack: + for name, handler in handlers: + try: + if frame[name] == handler: + return frame + except KeyError: + pass + frame = find_frame() + + # No frame matched; no error. + if not frame: + return + + # Remove each handler from the frame. + for name, handler in handlers: + try: + if frame[name] == handler: + del frame[name] + except KeyError: + pass + + # Remove the frame if it's empty. + if not frame: + self._event_stack.remove(frame) + + def remove_handler(self, name, handler): + '''Remove a single event handler. + + The given event handler is removed from the first handler stack frame + it appears in. The handler must be the exact same callable as passed + to `set_handler`, `set_handlers` or `push_handlers`; and the name + must match the event type it is bound to. + + No error is raised if the event handler is not set. + + :Parameters: + `name` : str + Name of the event type to remove. + `handler` : callable + Event handler to remove. + ''' + for frame in self._event_stack: + try: + if frame[name] is handler: + del frame[name] + break + except KeyError: + pass + + def dispatch_event(self, event_type, *args): + '''Dispatch a single event to the attached handlers. + + The event is propogated to all handlers from from the top of the stack + until one returns `EVENT_HANDLED`. This method should be used only by + `EventDispatcher` implementors; applications should call + the ``dispatch_events`` method. + + :Parameters: + `event_type` : str + Name of the event. + `args` : sequence + Arguments to pass to the event handler. + + ''' + assert event_type in self.event_types + + # Search handler stack for matching event handlers + for frame in list(self._event_stack): + handler = frame.get(event_type, None) + if handler: + try: + if handler(*args): + return + except TypeError: + self._raise_dispatch_exception(event_type, args, handler) + + + # Check instance for an event handler + if hasattr(self, event_type): + try: + getattr(self, event_type)(*args) + except TypeError: + self._raise_dispatch_exception( + event_type, args, getattr(self, event_type)) + + def _raise_dispatch_exception(self, event_type, args, handler): + # A common problem in applications is having the wrong number of + # arguments in an event handler. This is caught as a TypeError in + # dispatch_event but the error message is obfuscated. + # + # Here we check if there is indeed a mismatch in argument count, + # and construct a more useful exception message if so. If this method + # doesn't find a problem with the number of arguments, the error + # is re-raised as if we weren't here. + + n_args = len(args) + + # Inspect the handler + handler_args, handler_varargs, _, handler_defaults = \ + inspect.getargspec(handler) + n_handler_args = len(handler_args) + + # Remove "self" arg from handler if it's a bound method + if inspect.ismethod(handler) and handler.im_self: + n_handler_args -= 1 + + # Allow *args varargs to overspecify arguments + if handler_varargs: + n_handler_args = max(n_handler_args, n_args) + + # Allow default values to overspecify arguments + if (n_handler_args > n_args and + handler_defaults and + n_handler_args - len(handler_defaults) <= n_args): + n_handler_args = n_args + + if n_handler_args != n_args: + if inspect.isfunction(handler) or inspect.ismethod(handler): + descr = '%s at %s:%d' % ( + handler.func_name, + handler.func_code.co_filename, + handler.func_code.co_firstlineno) + else: + descr = repr(handler) + + raise TypeError( + '%s event was dispatched with %d arguments, but ' + 'handler %s has an incompatible function signature' % + (event_type, len(args), descr)) + else: + raise + + def event(self, *args): + '''Function decorator for an event handler. + + Usage:: + + win = window.Window() + + @win.event + def on_resize(self, width, height): + # ... + + or:: + + @win.event('on_resize') + def foo(self, width, height): + # ... + + ''' + if len(args) == 0: # @window.event() + def decorator(func): + name = func.__name__ + self.set_handler(name, func) + return func + return decorator + elif inspect.isroutine(args[0]): # @window.event + func = args[0] + name = func.__name__ + self.set_handler(name, func) + return args[0] + elif type(args[0]) in (str, unicode): # @window.event('on_resize') + name = args[0] + def decorator(func): + self.set_handler(name, func) + return func + return decorator diff --git a/pyglet/font/__init__.py b/pyglet/font/__init__.py new file mode 100644 index 0000000..53309d5 --- /dev/null +++ b/pyglet/font/__init__.py @@ -0,0 +1,695 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''Load fonts and render text. + +This is a fairly-low level interface to text rendering. Obtain a font using +`load`:: + + from pyglet import font + arial = font.load('Arial', 14, bold=True, italic=False) + +pyglet will load any system-installed fonts. You can add additional fonts +(for example, from your program resources) using `add_file` or +`add_directory`. + +Obtain a list of `Glyph` objects for a string of text using the `Font` +object:: + + text = 'Hello, world!' + glyphs = arial.get_glyphs(text) + +The most efficient way to render these glyphs is with a `GlyphString`:: + + glyph_string = GlyphString(text, glyphs) + glyph_string.draw() + +There are also a variety of methods in both `Font` and +`GlyphString` to facilitate word-wrapping. + +A convenient way to render a string of text is with a `Text`:: + + text = Text(font, text) + text.draw() + +See the `pyglet.font.base` module for documentation on the base classes used +by this package. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: __init__.py 2136 2008-07-24 00:50:15Z Alex.Holkner $' + +import sys +import os +import math +import weakref + +import pyglet +from pyglet.gl import * +from pyglet import gl +from pyglet import image +from pyglet import window + +class GlyphString(object): + '''An immutable string of glyphs that can be rendered quickly. + + This class is ideal for quickly rendering single or multi-line strings + of text that use the same font. To wrap text using a glyph string, + call `get_break_index` to find the optimal breakpoint for each line, + the repeatedly call `draw` for each breakpoint. + + :deprecated: Use `pyglet.text.layout` classes. + ''' + + def __init__(self, text, glyphs, x=0, y=0): + '''Create a glyph string. + + The `text` string is used to determine valid breakpoints; all glyphs + must have already been determined using + `pyglet.font.base.Font.get_glyphs`. The string + will be positioned with the baseline of the left-most glyph at the + given coordinates. + + :Parameters: + `text` : str or unicode + String to represent. + `glyphs` : list of `pyglet.font.base.Glyph` + Glyphs representing `text`. + `x` : float + X coordinate of the left-side bearing of the left-most glyph. + `y` : float + Y coordinate of the baseline. + + ''' + # Create an interleaved array in GL_T2F_V3F format and determine + # state changes required. + + lst = [] + texture = None + self.text = text + self.states = [] + self.cumulative_advance = [] # for fast post-string breaking + state_from = 0 + state_length = 0 + for i, glyph in enumerate(glyphs): + if glyph.owner != texture: + if state_length: + self.states.append((state_from, state_length, texture)) + texture = glyph.owner + state_from = i + state_length = 0 + state_length += 1 + t = glyph.tex_coords + lst += [t[0], t[1], t[2], 1., + x + glyph.vertices[0], y + glyph.vertices[1], 0., 1., + t[3], t[4], t[5], 1., + x + glyph.vertices[2], y + glyph.vertices[1], 0., 1., + t[6], t[7], t[8], 1., + x + glyph.vertices[2], y + glyph.vertices[3], 0., 1., + t[9], t[10], t[11], 1., + x + glyph.vertices[0], y + glyph.vertices[3], 0., 1.] + x += glyph.advance + self.cumulative_advance.append(x) + self.states.append((state_from, state_length, texture)) + + self.array = (c_float * len(lst))(*lst) + self.width = x + + def get_break_index(self, from_index, width): + '''Find a breakpoint within the text for a given width. + + Returns a valid breakpoint after `from_index` so that the text + between `from_index` and the breakpoint fits within `width` pixels. + + This method uses precomputed cumulative glyph widths to give quick + answer, and so is much faster than + `pyglet.font.base.Font.get_glyphs_for_width`. + + :Parameters: + `from_index` : int + Index of text to begin at, or 0 for the beginning of the + string. + `width` : float + Maximum width to use. + + :rtype: int + :return: the index of text which will be used as the breakpoint, or + `from_index` if there is no valid breakpoint. + ''' + to_index = from_index + if from_index >= len(self.text): + return from_index + if from_index: + width += self.cumulative_advance[from_index-1] + for i, (c, w) in enumerate( + zip(self.text[from_index:], + self.cumulative_advance[from_index:])): + if c in u'\u0020\u200b': + to_index = i + from_index + 1 + if c == '\n': + return i + from_index + 1 + if w > width: + return to_index + return to_index + + def get_subwidth(self, from_index, to_index): + '''Return the width of a slice of this string. + + :Parameters: + `from_index` : int + The start index of the string to measure. + `to_index` : int + The end index (exclusive) of the string to measure. + + :rtype: float + ''' + if to_index <= from_index: + return 0 + width = self.cumulative_advance[to_index-1] + if from_index: + width -= self.cumulative_advance[from_index-1] + return width + + def draw(self, from_index=0, to_index=None): + '''Draw a region of the glyph string. + + Assumes texture state is enabled. To enable the texture state:: + + from pyglet.gl import * + glEnable(GL_TEXTURE_2D) + + :Parameters: + `from_index` : int + Start index of text to render. + `to_index` : int + End index (exclusive) of text to render. + + ''' + if from_index >= len(self.text) or \ + from_index == to_index or \ + not self.text: + return + + # XXX Safe to assume all required textures will use same blend state I + # think. (otherwise move this into loop) + self.states[0][2].apply_blend_state() + + if from_index: + glPushMatrix() + glTranslatef(-self.cumulative_advance[from_index-1], 0, 0) + if to_index is None: + to_index = len(self.text) + + glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT) + glInterleavedArrays(GL_T4F_V4F, 0, self.array) + for state_from, state_length, texture in self.states: + if state_from + state_length < from_index: + continue + state_from = max(state_from, from_index) + state_length = min(state_length, to_index - state_from) + if state_length <= 0: + break + glBindTexture(GL_TEXTURE_2D, texture.id) + glDrawArrays(GL_QUADS, state_from * 4, state_length * 4) + glPopClientAttrib() + + if from_index: + glPopMatrix() + +class _TextZGroup(pyglet.graphics.Group): + z = 0 + + def set_state(self): + glTranslatef(0, 0, self.z) + + def unset_state(self): + glTranslatef(0, 0, -self.z) + +class Text(object): + '''Simple displayable text. + + This is a convenience class for rendering strings of text. It takes + care of caching the vertices so the text can be rendered every frame with + little performance penalty. + + Text can be word-wrapped by specifying a `width` to wrap into. If the + width is not specified, it gives the width of the text as laid out. + + :Ivariables: + `x` : int + X coordinate of the text + `y` : int + Y coordinate of the text + + :deprecated: Use `pyglet.text.Label`. + ''' + + # Alignment constants + + #: Align the left edge of the text to the given X coordinate. + LEFT = 'left' + #: Align the horizontal center of the text to the given X coordinate. + CENTER = 'center' + #: Align the right edge of the text to the given X coordinate. + RIGHT = 'right' + #: Align the bottom of the descender of the final line of text with the + #: given Y coordinate. + BOTTOM = 'bottom' + #: Align the baseline of the first line of text with the given Y + #: coordinate. + BASELINE = 'baseline' + #: Align the top of the ascender of the first line of text with the given + #: Y coordinate. + TOP = 'top' + + # None: no multiline + # 'width': multiline, wrapped to width + # 'multiline': multiline, no wrap + _wrap = None + + # Internal bookkeeping for wrap only. + _width = None + + def __init__(self, font, text='', x=0, y=0, z=0, color=(1,1,1,1), + width=None, halign=LEFT, valign=BASELINE): + '''Create displayable text. + + :Parameters: + `font` : `Font` + Font to render the text in. + `text` : str + Initial string to render. + `x` : float + X coordinate of the left edge of the text. + `y` : float + Y coordinate of the baseline of the text. If the text is + word-wrapped, this refers to the first line of text. + `z` : float + Z coordinate of the text plane. + `color` : 4-tuple of float + Color to render the text in. Alpha values can be specified + in the fourth component. + `width` : float + Width to limit the rendering to. Text will be word-wrapped + if necessary. + `halign` : str + Alignment of the text. See `Text.halign` for details. + `valign` : str + Controls positioning of the text based off the y coordinate. + One of BASELINE, BOTTOM, CENTER or TOP. Defaults to BASELINE. + ''' + multiline = False + if width is not None: + self._width = width + self._wrap = 'width' + multiline = True + elif '\n' in text: + self._wrap = 'multiline' + multiline = True + + self._group = _TextZGroup() + self._document = pyglet.text.decode_text(text) + self._layout = pyglet.text.layout.TextLayout(self._document, + width=width, + multiline=multiline, + dpi=font.dpi, + group=self._group) + + self._layout.begin_update() + if self._wrap == 'multiline': + self._document.set_style(0, len(text), dict(wrap=False)) + self.font = font + self.color = color + self._x = x + self.y = y + self.z = z + self.width = width + self.halign = halign + self.valign = valign + self._update_layout_halign() + self._layout.end_update() + + def _get_font(self): + return self._font + + def _set_font(self, font): + self._font = font + self._layout.begin_update() + self._document.set_style(0, len(self._document.text), { + 'font_name': font.name, + 'font_size': font.size, + 'bold': font.bold, + 'italic': font.italic, + }) + self._layout._dpi = font.dpi + self._layout.end_update() + + font = property(_get_font, _set_font) + + def _get_color(self): + color = self._document.get_style('color') + if color is None: + return (1., 1., 1., 1.) + return tuple([c/255. for c in color]) + + def _set_color(self, color): + color = [int(c * 255) for c in color] + self._document.set_style(0, len(self._document.text), { + 'color': color, + }) + + color = property(_get_color, _set_color) + + def _update_layout_halign(self): + if self._layout.multiline: + # TextLayout has a different interpretation of halign that doesn't + # consider the width to be a special factor; here we emulate the + # old behaviour by fudging the layout x value. + if self._layout.anchor_x == 'left': + self._layout.x = self.x + elif self._layout.anchor_x == 'center': + self._layout.x = self.x + self._layout.width - \ + self._layout.content_width // 2 + elif self._layout.anchor_x == 'right': + self._layout.x = self.x + 2 * self._layout.width - \ + self._layout.content_width + else: + self._layout.x = self.x + + def _get_x(self): + return self._x + + def _set_x(self, x): + self._x = x + self._update_layout_halign() + + x = property(_get_x, _set_x) + + def _get_y(self): + return self._layout.y + + def _set_y(self, y): + self._layout.y = y + + y = property(_get_y, _set_y) + + def _get_z(self): + return self._group.z + + def _set_z(self, z): + self._group.z = z + + z = property(_get_z, _set_z) + + def _update_wrap(self): + if self._width is not None: + self._wrap = 'width' + elif '\n' in self.text: + self._wrap = 'multiline' + + self._layout.begin_update() + if self._wrap == None: + self._layout.multiline = False + elif self._wrap == 'width': + self._layout.multiline = True + self._layout.width = self._width + self._document.set_style(0, len(self.text), dict(wrap=True)) + elif self._wrap == 'multiline': + self._layout.multiline = True + self._document.set_style(0, len(self.text), dict(wrap=False)) + self._update_layout_halign() + self._layout.end_update() + + def _get_width(self): + if self._wrap == 'width': + return self._layout.width + else: + return self._layout.content_width + + def _set_width(self, width): + self._width = width + self._update_wrap() + + width = property(_get_width, _set_width, + doc='''Width of the text. + + When set, this enables word-wrapping to the specified width. + Otherwise, the width of the text as it will be rendered can be + determined. + + :type: float + ''') + + def _get_height(self): + return self._layout.content_height + + height = property(_get_height, + doc='''Height of the text. + + This property is the ascent minus the descent of the font, unless + there is more than one line of word-wrapped text, in which case + the height takes into account the line leading. Read-only. + + :type: float + ''') + + def _get_text(self): + return self._document.text + + def _set_text(self, text): + self._document.text = text + self._update_wrap() + + text = property(_get_text, _set_text, + doc='''Text to render. + + The glyph vertices are only recalculated as needed, so multiple + changes to the text can be performed with no performance penalty. + + :type: str + ''') + + def _get_halign(self): + return self._layout.anchor_x + + def _set_halign(self, halign): + self._layout.anchor_x = halign + self._update_layout_halign() + + halign = property(_get_halign, _set_halign, + doc='''Horizontal alignment of the text. + + The text is positioned relative to `x` and `width` according to this + property, which must be one of the alignment constants `LEFT`, + `CENTER` or `RIGHT`. + + :type: str + ''') + + def _get_valign(self): + return self._layout.anchor_y + + def _set_valign(self, valign): + self._layout.anchor_y = valign + + valign = property(_get_valign, _set_valign, + doc='''Vertical alignment of the text. + + The text is positioned relative to `y` according to this property, + which must be one of the alignment constants `BOTTOM`, `BASELINE`, + `CENTER` or `TOP`. + + :type: str + ''') + + def _get_leading(self): + return self._document.get_style('leading') or 0 + + def _set_leading(self, leading): + self._document.set_style(0, len(self._document.text), { + 'leading': leading, + }) + + leading = property(_get_leading, _set_leading, + doc='''Vertical space between adjacent lines, in pixels. + + :type: int + ''') + + def _get_line_height(self): + return self._font.ascent - self._font.descent + self.leading + + def _set_line_height(self, line_height): + self.leading = line_height - (self._font.ascent - self._font.descent) + + line_height = property(_get_line_height, _set_line_height, + doc='''Vertical distance between adjacent baselines, in pixels. + + :type: int + ''') + + def draw(self): + self._layout.draw() + +if not getattr(sys, 'is_epydoc', False): + if sys.platform == 'darwin': + from pyglet.font.carbon import CarbonFont + _font_class = CarbonFont + elif sys.platform in ('win32', 'cygwin'): + if pyglet.options['font'][0] == 'win32': + from pyglet.font.win32 import Win32Font + _font_class = Win32Font + elif pyglet.options['font'][0] == 'gdiplus': + from pyglet.font.win32 import GDIPlusFont + _font_class = GDIPlusFont + else: + assert False, 'Unknown font driver' + else: + from pyglet.font.freetype import FreeTypeFont + _font_class = FreeTypeFont + +def load(name=None, size=None, bold=False, italic=False, dpi=None): + '''Load a font for rendering. + + :Parameters: + `name` : str, or list of str + Font family, for example, "Times New Roman". If a list of names + is provided, the first one matching a known font is used. If no + font can be matched to the name(s), a default font is used. In + pyglet 1.1, the name may be omitted. + `size` : float + Size of the font, in points. The returned font may be an exact + match or the closest available. In pyglet 1.1, the size may be + omitted, and defaults to 12pt. + `bold` : bool + If True, a bold variant is returned, if one exists for the given + family and size. + `italic` : bool + If True, an italic variant is returned, if one exists for the given + family and size. + `dpi` : float + The assumed resolution of the display device, for the purposes of + determining the pixel size of the font. Defaults to 96. + + :rtype: `Font` + ''' + # Arbitrary default size + if size is None: + size = 12 + + if dpi is None: + dpi = 96 + + # Find first matching name + if type(name) in (tuple, list): + for n in name: + if _font_class.have_font(n): + name = n + break + else: + name = None + + # Locate or create font cache + shared_object_space = gl.current_context.object_space + if not hasattr(shared_object_space, 'pyglet_font_font_cache'): + shared_object_space.pyglet_font_font_cache = \ + weakref.WeakValueDictionary() + shared_object_space.pyglet_font_font_hold = [] + font_cache = shared_object_space.pyglet_font_font_cache + font_hold = shared_object_space.pyglet_font_font_hold + + # Look for font name in font cache + descriptor = (name, size, bold, italic, dpi) + if descriptor in font_cache: + return font_cache[descriptor] + + # Not in cache, create from scratch + font = _font_class(name, size, bold=bold, italic=italic, dpi=dpi) + + # Save parameters for new-style layout classes to recover + font.name = name + font.size = size + font.bold = bold + font.italic = italic + font.dpi = dpi + + # Cache font in weak-ref dictionary to avoid reloading while still in use + font_cache[descriptor] = font + + # Hold onto refs of last three loaded fonts to prevent them being + # collected if momentarily dropped. + del font_hold[3:] + font_hold.insert(0, font) + + return font + +def add_file(font): + '''Add a font to pyglet's search path. + + In order to load a font that is not installed on the system, you must + call this method to tell pyglet that it exists. You can supply + either a filename or any file-like object. + + The font format is platform-dependent, but is typically a TrueType font + file containing a single font face. Note that to load this file after + adding it you must specify the face name to `load`, not the filename. + + :Parameters: + `font` : str or file + Filename or file-like object to load fonts from. + + ''' + if type(font) in (str, unicode): + font = open(font, 'rb') + if hasattr(font, 'read'): + font = font.read() + _font_class.add_font_data(font) + + +def add_directory(dir): + '''Add a directory of fonts to pyglet's search path. + + This function simply calls `add_file` for each file with a ``.ttf`` + extension in the given directory. Subdirectories are not searched. + + :Parameters: + `dir` : str + Directory that contains font files. + + ''' + import os + for file in os.listdir(dir): + if file[-4:].lower() == '.ttf': + add_file(os.path.join(dir, file)) + diff --git a/pyglet/font/base.py b/pyglet/font/base.py new file mode 100644 index 0000000..75b4df5 --- /dev/null +++ b/pyglet/font/base.py @@ -0,0 +1,442 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''Abstract classes used by pyglet.font implementations. + +These classes should not be constructed directly. Instead, use the functions +in `pyglet.font` to obtain platform-specific instances. You can use these +classes as a documented interface to the concrete classes. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: base.py 2278 2008-09-23 12:18:50Z Alex.Holkner $' + +import unicodedata + +from pyglet.gl import * +from pyglet import image + +_other_grapheme_extend = \ + map(unichr, [0x09be, 0x09d7, 0x0be3, 0x0b57, 0x0bbe, 0x0bd7, 0x0cc2, + 0x0cd5, 0x0cd6, 0x0d3e, 0x0d57, 0x0dcf, 0x0ddf, 0x200c, + 0x200d, 0xff9e, 0xff9f]) # skip codepoints above U+10000 +_logical_order_exception = \ + map(unichr, range(0xe40, 0xe45) + range(0xec0, 0xec4)) + +_grapheme_extend = lambda c, cc: \ + cc in ('Me', 'Mn') or c in _other_grapheme_extend + +_CR = u'\u000d' +_LF = u'\u000a' +_control = lambda c, cc: cc in ('ZI', 'Zp', 'Cc', 'Cf') and not \ + c in map(unichr, [0x000d, 0x000a, 0x200c, 0x200d]) +_extend = lambda c, cc: _grapheme_extend(c, cc) or \ + c in map(unichr, [0xe30, 0xe32, 0xe33, 0xe45, 0xeb0, 0xeb2, 0xeb3]) +_prepend = lambda c, cc: c in _logical_order_exception +_spacing_mark = lambda c, cc: cc == 'Mc' and c not in _other_grapheme_extend + +def _grapheme_break(left, right): + # GB1 + if left is None: + return True + + # GB2 not required, see end of get_grapheme_clusters + + # GB3 + if left == _CR and right == LF: + return False + + left_cc = unicodedata.category(left) + + # GB4 + if _control(left, left_cc): + return True + + right_cc = unicodedata.category(right) + + # GB5 + if _control(right, right_cc): + return True + + # GB6, GB7, GB8 not implemented + + # GB9 + if _extend(right, right_cc): + return False + + # GB9a + if _spacing_mark(right, right_cc): + return False + + # GB9b + if _prepend(left, left_cc): + return False + + # GB10 + return True + +def get_grapheme_clusters(text): + '''Implements Table 2 of UAX #29: Grapheme Cluster Boundaries. + + Does not currently implement Hangul syllable rules. + + :Parameters: + `text` : unicode + String to cluster. + + :since: pyglet 1.1.2 + + :rtype: List of `unicode` + :return: List of Unicode grapheme clusters + ''' + clusters = [] + cluster = '' + left = None + for right in text: + if cluster and _grapheme_break(left, right): + clusters.append(cluster) + cluster = '' + elif cluster: + # Add a zero-width space to keep len(clusters) == len(text) + clusters.append(u'\u200b') + cluster += right + left = right + + # GB2 + if cluster: + clusters.append(cluster) + return clusters + +class Glyph(image.TextureRegion): + '''A single glyph located within a larger texture. + + Glyphs are drawn most efficiently using the higher level APIs, for example + `GlyphString`. + + :Ivariables: + `advance` : int + The horizontal advance of this glyph, in pixels. + `vertices` : (int, int, int, int) + The vertices of this glyph, with (0,0) originating at the + left-side bearing at the baseline. + + ''' + + advance = 0 + vertices = (0, 0, 0, 0) + + def set_bearings(self, baseline, left_side_bearing, advance): + '''Set metrics for this glyph. + + :Parameters: + `baseline` : int + Distance from the bottom of the glyph to its baseline; + typically negative. + `left_side_bearing` : int + Distance to add to the left edge of the glyph. + `advance` : int + Distance to move the horizontal advance to the next glyph. + + ''' + self.advance = advance + self.vertices = ( + left_side_bearing, + -baseline, + left_side_bearing + self.width, + -baseline + self.height) + + def draw(self): + '''Debug method. + + Use the higher level APIs for performance and kerning. + ''' + glBindTexture(GL_TEXTURE_2D, self.owner.id) + glBegin(GL_QUADS) + self.draw_quad_vertices() + glEnd() + + def draw_quad_vertices(self): + '''Debug method. + + Use the higher level APIs for performance and kerning. + ''' + glTexCoord3f(*self.tex_coords[:3]) + glVertex2f(self.vertices[0], self.vertices[1]) + glTexCoord3f(*self.tex_coords[3:6]) + glVertex2f(self.vertices[2], self.vertices[1]) + glTexCoord3f(*self.tex_coords[6:9]) + glVertex2f(self.vertices[2], self.vertices[3]) + glTexCoord3f(*self.tex_coords[9:12]) + glVertex2f(self.vertices[0], self.vertices[3]) + + def get_kerning_pair(self, right_glyph): + '''Not implemented. + ''' + return 0 + +class GlyphTextureAtlas(image.Texture): + '''A texture within which glyphs can be drawn. + ''' + region_class = Glyph + x = 0 + y = 0 + line_height = 0 + + def apply_blend_state(self): + '''Set the OpenGL blend state for the glyphs in this texture. + ''' + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) + glEnable(GL_BLEND) + + def fit(self, image): + '''Place `image` within this texture. + + :Parameters: + `image` : `pyglet.image.AbstractImage` + Image to place within the texture. + + :rtype: `Glyph` + :return: The glyph representing the image from this texture, or None + if the image doesn't fit. + ''' + if self.x + image.width > self.width: + self.x = 0 + self.y += self.line_height + self.line_height = 0 + if self.y + image.height > self.height: + return None + + self.line_height = max(self.line_height, image.height) + region = self.get_region( + self.x, self.y, image.width, image.height) + if image.width > 0: + region.blit_into(image, 0, 0, 0) + self.x += image.width + 1 + return region + +class GlyphRenderer(object): + '''Abstract class for creating glyph images. + ''' + def __init__(self, font): + pass + + def render(self, text): + raise NotImplementedError('Subclass must override') + +class FontException(Exception): + '''Generic exception related to errors from the font module. Typically + these relate to invalid font data.''' + pass + +class Font(object): + '''Abstract font class able to produce glyphs. + + To construct a font, use `pyglet.font.load`, which will instantiate the + platform-specific font class. + + Internally, this class is used by the platform classes to manage the set + of textures into which glyphs are written. + + :Ivariables: + `ascent` : int + Maximum ascent above the baseline, in pixels. + `descent` : int + Maximum descent below the baseline, in pixels. Usually negative. + ''' + texture_width = 256 + texture_height = 256 + texture_internalformat = GL_ALPHA + + # These should also be set by subclass when known + ascent = 0 + descent = 0 + + glyph_renderer_class = GlyphRenderer + texture_class = GlyphTextureAtlas + + def __init__(self): + self.textures = [] + self.glyphs = {} + + @classmethod + def add_font_data(cls, data): + '''Add font data to the font loader. + + This is a class method and affects all fonts loaded. Data must be + some byte string of data, for example, the contents of a TrueType font + file. Subclasses can override this method to add the font data into + the font registry. + + There is no way to instantiate a font given the data directly, you + must use `pyglet.font.load` specifying the font name. + ''' + pass + + @classmethod + def have_font(cls, name): + '''Determine if a font with the given name is installed. + + :Parameters: + `name` : str + Name of a font to search for + + :rtype: bool + ''' + return True + + def create_glyph(self, image): + '''Create a glyph using the given image. + + This is used internally by `Font` subclasses to add glyph data + to the font. Glyphs are packed within large textures maintained by + `Font`. This method inserts the image into a font texture and returns + a glyph reference; it is up to the subclass to add metadata to the + glyph. + + Applications should not use this method directly. + + :Parameters: + `image` : `pyglet.image.AbstractImage` + The image to write to the font texture. + + :rtype: `Glyph` + ''' + glyph = None + for texture in self.textures: + glyph = texture.fit(image) + if glyph: + break + if not glyph: + if image.width > self.texture_width or \ + image.height > self.texture_height: + texture = self.texture_class.create_for_size(GL_TEXTURE_2D, + image.width * 2, image.height * 2, + self.texture_internalformat) + self.texture_width = texture.width + self.texture_height = texture.height + else: + texture = self.texture_class.create_for_size(GL_TEXTURE_2D, + self.texture_width, self.texture_height, + self.texture_internalformat) + self.textures.insert(0, texture) + glyph = texture.fit(image) + return glyph + + def get_glyphs(self, text): + '''Create and return a list of Glyphs for `text`. + + If any characters do not have a known glyph representation in this + font, a substitution will be made. + + :Parameters: + `text` : str or unicode + Text to render. + + :rtype: list of `Glyph` + ''' + glyph_renderer = None + glyphs = [] # glyphs that are committed. + for c in get_grapheme_clusters(unicode(text)): + # Get the glyph for 'c'. Hide tabs (Windows and Linux render + # boxes) + if c == '\t': + c = ' ' + if c not in self.glyphs: + if not glyph_renderer: + glyph_renderer = self.glyph_renderer_class(self) + self.glyphs[c] = glyph_renderer.render(c) + glyphs.append(self.glyphs[c]) + return glyphs + + + def get_glyphs_for_width(self, text, width): + '''Return a list of glyphs for `text` that fit within the given width. + + If the entire text is larger than 'width', as much as possible will be + used while breaking after a space or zero-width space character. If a + newline is enountered in text, only text up to that newline will be + used. If no break opportunities (newlines or spaces) occur within + `width`, the text up to the first break opportunity will be used (this + will exceed `width`). If there are no break opportunities, the entire + text will be used. + + You can assume that each character of the text is represented by + exactly one glyph; so the amount of text "used up" can be determined + by examining the length of the returned glyph list. + + :Parameters: + `text` : str or unicode + Text to render. + `width` : int + Maximum width of returned glyphs. + + :rtype: list of `Glyph` + + :see: `GlyphString` + ''' + glyph_renderer = None + glyph_buffer = [] # next glyphs to be added, as soon as a BP is found + glyphs = [] # glyphs that are committed. + for c in text: + if c == '\n': + glyphs += glyph_buffer + break + + # Get the glyph for 'c' + if c not in self.glyphs: + if not glyph_renderer: + glyph_renderer = self.glyph_renderer_class(self) + self.glyphs[c] = glyph_renderer.render(c) + glyph = self.glyphs[c] + + # Add to holding buffer and measure + glyph_buffer.append(glyph) + width -= glyph.advance + + # If over width and have some committed glyphs, finish. + if width <= 0 and len(glyphs) > 0: + break + + # If a valid breakpoint, commit holding buffer + if c in u'\u0020\u200b': + glyphs += glyph_buffer + glyph_buffer = [] + + # If nothing was committed, commit everything (no breakpoints found). + if len(glyphs) == 0: + glyphs = glyph_buffer + + return glyphs + + diff --git a/pyglet/font/carbon.py b/pyglet/font/carbon.py new file mode 100644 index 0000000..9e751fd --- /dev/null +++ b/pyglet/font/carbon.py @@ -0,0 +1,438 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +''' +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: $' + +# TODO Tiger and later: need to set kWindowApplicationScaledAttribute for DPI +# independence? + +from ctypes import * +import string +import math +from sys import byteorder + +from pyglet.font import base +import pyglet.image +from pyglet.window.carbon import carbon, _oscheck +from pyglet.window.carbon import _create_cfstring +from pyglet.window.carbon.types import * + + +class FixedPoint(Structure): + _fields_ = [ + ('x', Fixed), + ('y', Fixed) + ] + +class ATSTrapezoid(Structure): + _fields_ = [ + ('upperLeft', FixedPoint), + ('upperRight', FixedPoint), + ('lowerRight', FixedPoint), + ('lowerLeft', FixedPoint) + ] + +# TODO: most of the ATS and CG here not used any more. + +CGGlyph = c_ushort +ATSUFontID = c_uint32 +RGBColor = c_short * 3 +ATSURGBAlphaColor = c_float * 4 + +kCGImageAlphaNone = 0 +kCGImageAlphaPremultipliedLast = 1 +kCGTextFill = 0 + +kATSUInvalidFontErr = -8796 + +kATSFontContextUnspecified = 0 +kATSFontContextGlobal = 1 +kATSFontContextLocal = 2 + +kATSFontFilterSelectorUnspecified = 0 +kATSFontFilterSelectorGeneration = 3 +kATSFontFilterSelectorFontFamily = 7 +kATSFontFilterSelectorFontFamilyApplierFunction = 8 +kATSFontFilterSelectorFontApplierFunction = 9 + +kATSOptionFlagsDoNotNotify = 0x00000001 << 8 +kATSOptionFlagsIterationScopeMask = 0x00000007 << 12 +kATSOptionFlagsDefaultScope = 0x00000000 << 12 +kATSOptionFlagsUnRestrictedScope = 0x00000001 << 12 +kATSOptionFlagsRestrictedScope = 0x00000002 << 12 +kATSOptionFlagsProcessSubdirectories = 0x00000001 << 6 + +kATSUFromTextBeginning = c_ulong(0xFFFFFFFF) +kATSUToTextEnd = c_ulong(0xFFFFFFFF) + +kATSULineAscentTag = 8 +kATSULineDescentTag = 9 +ATSUTextMeasurement = Fixed + +kATSUQDBoldfaceTag = 256 +kATSUQDItalicTag = 257 +kATSUFontTag = 261 +kATSUSizeTag = 262 +kATSUCGContextTag = 32767 +kATSUColorTag = 263 +kATSURGBAlphaColorTag = 288 + +kATSULineWidthTag = 1 + +kFontFullName = 4 +kFontNoPlatformCode = c_ulong(-1) +kFontNoScriptCode = c_ulong(-1) +kFontNoLanguageCode = c_ulong(-1) + +kATSUseDeviceOrigins = 1 + +kATSFontFormatUnspecified = 0 +kATSFontContextLocal = 2 + +carbon.CGColorSpaceCreateWithName.restype = c_void_p +carbon.CGBitmapContextCreate.restype = POINTER(c_void_p) + +UniCharArrayOffset = c_uint32 +UniCharCount = c_uint32 + +kATSULayoutOperationJustification = 1 +kATSULayoutOperationPostLayoutAdjustment = 0x20 +kATSULayoutOperationCallbackStatusHandled = 0 +kATSULayoutOperationCallbackStatusContinue = c_long(1) +kATSULayoutOperationOverrideTag = 15 +kATSUDirectDataAdvanceDeltaFixedArray = 0 +kATSUDirectDataDeviceDeltaSInt16Array = 2 +kATSUDirectDataLayoutRecordATSLayoutRecordVersion1 = 100 + +ATSUDirectLayoutOperationOverrideUPP = CFUNCTYPE(c_int, + c_int, c_void_p, c_uint32, c_void_p, POINTER(c_int)) + +class ATSULayoutOperationOverrideSpecifier(Structure): + _fields_ = [ + ('operationSelector', c_uint32), + ('overrideUPP', ATSUDirectLayoutOperationOverrideUPP) + ] + +class ATSLayoutRecord(Structure): + _pack_ = 2 + _fields_ = [ + ('glyphID', c_uint16), + ('flags', c_uint32), + ('originalOffset', c_uint32), + ('realPos', Fixed), + ] + +def fixed(value): + return c_int32(carbon.Long2Fix(c_long(int(value)))) + +carbon.Fix2X.restype = c_double +def fix2float(value): + return carbon.Fix2X(value) + +def create_atsu_style(attributes): + # attributes is a dict of ATSUAttributeTag => ctypes value + tags, values = zip(*attributes.items()) + tags = (c_int * len(tags))(*tags) + sizes = (c_uint * len(values))(*[sizeof(v) for v in values]) + values = (c_void_p * len(values))(*[cast(pointer(v), c_void_p) \ + for v in values]) + + style = c_void_p() + carbon.ATSUCreateStyle(byref(style)) + carbon.ATSUSetAttributes(style, len(tags), tags, sizes, values) + return style + +def set_layout_attributes(layout, attributes): + if attributes: + # attributes is a dict of ATSUAttributeTag => ctypes value + tags, values = zip(*attributes.items()) + tags = (c_int * len(tags))(*tags) + sizes = (c_uint * len(values))(*[sizeof(v) for v in values]) + values = (c_void_p * len(values))(*[cast(pointer(v), c_void_p) \ + for v in values]) + + r = carbon.ATSUSetLayoutControls(layout, len(tags), tags, sizes, values) + _oscheck(r) + +def str_ucs2(text): + if byteorder == 'big': + text = text.encode('utf_16_be') + else: + text = text.encode('utf_16_le') # explicit endian avoids BOM + return create_string_buffer(text + '\0') + + +class CarbonGlyphRenderer(base.GlyphRenderer): + _bitmap = None + _bitmap_context = None + _bitmap_rect = None + + _glyph_advance = 0 # set through callback + + def __init__(self, font): + super(CarbonGlyphRenderer, self).__init__(font) + self._create_bitmap_context(256, 256) + self.font = font + + def __del__(self): + try: + if self._bitmap_context: + carbon.CGContextRelease(self._bitmap_context) + except: + pass + + def _layout_callback(self, operation, line, ref, extra, callback_status): + records = c_void_p() + n_records = c_uint() + + r = carbon.ATSUDirectGetLayoutDataArrayPtrFromLineRef(line, + kATSUDirectDataLayoutRecordATSLayoutRecordVersion1, + 0, + byref(records), + byref(n_records)) + _oscheck(r) + + records = cast(records, + POINTER(ATSLayoutRecord * n_records.value)).contents + self._glyph_advance = fix2float(records[-1].realPos) + + callback_status.contents = kATSULayoutOperationCallbackStatusContinue + return 0 + + def render(self, text): + # Convert text to UCS2 + text_len = len(text) + text_ucs2 = str_ucs2(text) + + # Create layout override handler to extract device advance value. + override_spec = ATSULayoutOperationOverrideSpecifier() + override_spec.operationSelector = \ + kATSULayoutOperationPostLayoutAdjustment + override_spec.overrideUPP = \ + ATSUDirectLayoutOperationOverrideUPP(self._layout_callback) + + # Create ATSU text layout for this text and font + layout = c_void_p() + carbon.ATSUCreateTextLayout(byref(layout)) + set_layout_attributes(layout, { + kATSUCGContextTag: self._bitmap_context, + kATSULayoutOperationOverrideTag: override_spec}) + carbon.ATSUSetTextPointerLocation(layout, + text_ucs2, + kATSUFromTextBeginning, + kATSUToTextEnd, + text_len) + carbon.ATSUSetRunStyle(layout, self.font.atsu_style, + kATSUFromTextBeginning, kATSUToTextEnd) + + # Turning on transient font matching screws up font layout + # predictability when strange fonts are installed + # Don't believe this. Can't get foreign/special characters + # without transient on. + carbon.ATSUSetTransientFontMatching(layout, True) + + # Get bitmap dimensions required + rect = Rect() + carbon.ATSUMeasureTextImage(layout, + kATSUFromTextBeginning, + kATSUToTextEnd, + 0, 0, + byref(rect)) + image_width = rect.right - rect.left + 2 + image_height = rect.bottom - rect.top + 2 + baseline = rect.bottom + 1 + lsb = rect.left + + # Resize Quartz context if necessary + if (image_width > self._bitmap_rect.size.width or + image_height > self._bitmap_rect.size.height): + self._create_bitmap_context( + int(max(image_width, self._bitmap_rect.size.width)), + int(max(image_height, self._bitmap_rect.size.height))) + + set_layout_attributes(layout, { + kATSUCGContextTag: self._bitmap_context}) + + # Draw to the bitmap + carbon.CGContextClearRect(self._bitmap_context, self._bitmap_rect) + carbon.ATSUDrawText(layout, + 0, + kATSUToTextEnd, + fixed(-lsb + 1), fixed(baseline)) + + advance = self._glyph_advance + + # Round advance to nearest int. It actually looks good with sub-pixel + # advance as well -- Helvetica at 12pt is more tightly spaced, but + # Times New Roman at 12pt is too light. With integer positioning + # overall look seems darker and perhaps more uniform. It's also more + # similar (programmatically) to Win32 and FreeType. Still, worth + # messing around with (comment out next line) if you're interested. + advance = int(round(advance)) + + # Fix advance for zero-width space + if text == u'\u200b': + advance = 0 + + # A negative pitch is required, but it is much faster to load the + # glyph upside-down and flip the tex_coords. Note region used + # to start at top of glyph image. + pitch = int(4 * self._bitmap_rect.size.width) + image = pyglet.image.ImageData(image_width, + self._bitmap_rect.size.height, 'RGBA', self._bitmap, pitch) + skip_rows = int(self._bitmap_rect.size.height - image_height) + image = image.get_region(0, skip_rows, image.width, image_height) + glyph = self.font.create_glyph(image) + glyph.set_bearings(baseline, lsb - 1, int(advance)) + t = list(glyph.tex_coords) + glyph.tex_coords = t[9:12] + t[6:9] + t[3:6] + t[:3] + + return glyph + + def _create_bitmap_context(self, width, height): + '''Create or recreate bitmap and Quartz context.''' + if self._bitmap_context: + carbon.CGContextRelease(self._bitmap_context) + components = 4 + pitch = width * components + self._bitmap = (c_ubyte * (pitch * height))() + color_space = carbon.CGColorSpaceCreateDeviceRGB() + context = carbon.CGBitmapContextCreate(self._bitmap, + width, height, 8, pitch, + color_space, kCGImageAlphaPremultipliedLast) + carbon.CGColorSpaceRelease(color_space) + + # Disable RGB decimated antialiasing, use standard + # antialiasing which won't break alpha. + carbon.CGContextSetShouldSmoothFonts(context, False) + carbon.CGContextSetShouldAntialias(context, True) + + self._bitmap_context = context + self._bitmap_rect = CGRect() + self._bitmap_rect.origin.x = 0 + self._bitmap_rect.origin.y = 0 + self._bitmap_rect.size.width = width + self._bitmap_rect.size.height = height + + +class CarbonFont(base.Font): + glyph_renderer_class = CarbonGlyphRenderer + + def __init__(self, name, size, bold=False, italic=False, dpi=None): + super(CarbonFont, self).__init__() + + if not name: + name = 'Helvetica' + + if dpi is None: + dpi = 96 # pyglet 1.1; in pyglet 1.0 this was 72. + + # If application is not DPI-aware, DPI is fixed at 72. Scale + # font size to emulate other DPI. This will need to be fixed if issue + # #87 is implemented. + size = size * dpi / 72. + + name = name.encode('ascii', 'ignore') + + font_id = ATSUFontID() + carbon.ATSUFindFontFromName( + name, + len(name), + kFontFullName, + kFontNoPlatformCode, + kFontNoScriptCode, + kFontNoLanguageCode, + byref(font_id)) + + attributes = { + kATSUSizeTag: fixed(size), + kATSUFontTag: font_id, + kATSURGBAlphaColorTag: ATSURGBAlphaColor(1, 1, 1, 1), + kATSUQDBoldfaceTag: c_byte(bold), + kATSUQDItalicTag: c_byte(italic) + } + self.atsu_style = create_atsu_style(attributes) + + self.calculate_metrics() + + @classmethod + def have_font(cls, name): + font_id = ATSUFontID() + name = name.encode('ascii', 'ignore') + r = carbon.ATSUFindFontFromName( + name, + len(name), + kFontFullName, + kFontNoPlatformCode, + kFontNoScriptCode, + kFontNoLanguageCode, + byref(font_id)) + return r != kATSUInvalidFontErr + + def calculate_metrics(self): + # It seems the only way to get the font's ascent and descent is to lay + # out some glyphs and measure them. + + # fake ucs2 string + text = '\0a' + + layout = c_void_p() + carbon.ATSUCreateTextLayout(byref(layout)) + carbon.ATSUSetTextPointerLocation(layout, text, + kATSUFromTextBeginning, kATSUToTextEnd, 1) + carbon.ATSUSetRunStyle(layout, self.atsu_style, + kATSUFromTextBeginning, kATSUToTextEnd) + + # determine the metrics for this font only + carbon.ATSUSetTransientFontMatching(layout, False) + + value = ATSUTextMeasurement() + carbon.ATSUGetLineControl(layout, 0, kATSULineAscentTag, + sizeof(value), byref(value), None) + self.ascent = int(math.ceil(fix2float(value))) + carbon.ATSUGetLineControl(layout, 0, kATSULineDescentTag, + sizeof(value), byref(value), None) + self.descent = -int(math.ceil(fix2float(value))) + + @classmethod + def add_font_data(cls, data): + container = c_void_p() + r = carbon.ATSFontActivateFromMemory(data, len(data), + kATSFontContextLocal, kATSFontFormatUnspecified, None, 0, + byref(container)) + _oscheck(r) diff --git a/pyglet/font/freetype.py b/pyglet/font/freetype.py new file mode 100644 index 0000000..9683ccf --- /dev/null +++ b/pyglet/font/freetype.py @@ -0,0 +1,354 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +''' +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: freetype.py 2084 2008-05-27 12:42:19Z Alex.Holkner $' + +import ctypes +from ctypes import * +from warnings import warn + +import pyglet.lib +from pyglet.font import base +from pyglet import image +from pyglet.font.freetype_lib import * + +# fontconfig library definitions +fontconfig = pyglet.lib.load_library('fontconfig') + +FcResult = c_int + +fontconfig.FcPatternBuild.restype = c_void_p +fontconfig.FcFontMatch.restype = c_void_p +fontconfig.FcFreeTypeCharIndex.restype = c_uint + +FC_FAMILY = 'family' +FC_SIZE = 'size' +FC_SLANT = 'slant' +FC_WEIGHT = 'weight' +FC_FT_FACE = 'ftface' +FC_FILE = 'file' + +FC_WEIGHT_REGULAR = 80 +FC_WEIGHT_BOLD = 200 + +FC_SLANT_ROMAN = 0 +FC_SLANT_ITALIC = 100 + +FT_STYLE_FLAG_ITALIC = 1 +FT_STYLE_FLAG_BOLD = 2 + +(FT_RENDER_MODE_NORMAL, + FT_RENDER_MODE_LIGHT, + FT_RENDER_MODE_MONO, + FT_RENDER_MODE_LCD, + FT_RENDER_MODE_LCD_V) = range(5) + +def FT_LOAD_TARGET_(x): + return (x & 15) << 16 + +FT_LOAD_TARGET_NORMAL = FT_LOAD_TARGET_(FT_RENDER_MODE_NORMAL) +FT_LOAD_TARGET_LIGHT = FT_LOAD_TARGET_(FT_RENDER_MODE_LIGHT) +FT_LOAD_TARGET_MONO = FT_LOAD_TARGET_(FT_RENDER_MODE_MONO) +FT_LOAD_TARGET_LCD = FT_LOAD_TARGET_(FT_RENDER_MODE_LCD) +FT_LOAD_TARGET_LCD_V = FT_LOAD_TARGET_(FT_RENDER_MODE_LCD_V) + +(FT_PIXEL_MODE_NONE, + FT_PIXEL_MODE_MONO, + FT_PIXEL_MODE_GRAY, + FT_PIXEL_MODE_GRAY2, + FT_PIXEL_MODE_GRAY4, + FT_PIXEL_MODE_LCD, + FT_PIXEL_MODE_LCD_V) = range(7) + +(FcTypeVoid, + FcTypeInteger, + FcTypeDouble, + FcTypeString, + FcTypeBool, + FcTypeMatrix, + FcTypeCharSet, + FcTypeFTFace, + FcTypeLangSet) = range(9) +FcType = c_int + +(FcMatchPattern, + FcMatchFont) = range(2) +FcMatchKind = c_int + +class _FcValueUnion(Union): + _fields_ = [ + ('s', c_char_p), + ('i', c_int), + ('b', c_int), + ('d', c_double), + ('m', c_void_p), + ('c', c_void_p), + ('f', c_void_p), + ('p', c_void_p), + ('l', c_void_p), + ] + +class FcValue(Structure): + _fields_ = [ + ('type', FcType), + ('u', _FcValueUnion) + ] + +# End of library definitions + +def f16p16_to_float(value): + return float(value) / (1 << 16) + +def float_to_f16p16(value): + return int(value * (1 << 16)) + +def f26p6_to_float(value): + return float(value) / (1 << 6) + +def float_to_f26p6(value): + return int(value * (1 << 6)) + +class FreeTypeGlyphRenderer(base.GlyphRenderer): + def __init__(self, font): + super(FreeTypeGlyphRenderer, self).__init__(font) + self.font = font + + def render(self, text): + face = self.font.face + FT_Set_Char_Size(face, 0, self.font._face_size, + self.font._dpi, self.font._dpi) + glyph_index = fontconfig.FcFreeTypeCharIndex(byref(face), ord(text[0])) + error = FT_Load_Glyph(face, glyph_index, FT_LOAD_RENDER) + if error != 0: + raise base.FontException( + 'Could not load glyph for "%c"' % text[0], error) + glyph_slot = face.glyph.contents + width = glyph_slot.bitmap.width + height = glyph_slot.bitmap.rows + baseline = height - glyph_slot.bitmap_top + lsb = glyph_slot.bitmap_left + advance = int(f26p6_to_float(glyph_slot.advance.x)) + mode = glyph_slot.bitmap.pixel_mode + pitch = glyph_slot.bitmap.pitch + + if mode == FT_PIXEL_MODE_MONO: + # BCF fonts always render to 1 bit mono, regardless of render + # flags. (freetype 2.3.5) + bitmap_data = cast(glyph_slot.bitmap.buffer, + POINTER(c_ubyte * (pitch * height))).contents + data = (c_ubyte * (pitch * 8 * height))() + data_i = 0 + for byte in bitmap_data: + # Data is MSB; left-most pixel in a byte has value 128. + data[data_i + 0] = (byte & 0x80) and 255 or 0 + data[data_i + 1] = (byte & 0x40) and 255 or 0 + data[data_i + 2] = (byte & 0x20) and 255 or 0 + data[data_i + 3] = (byte & 0x10) and 255 or 0 + data[data_i + 4] = (byte & 0x08) and 255 or 0 + data[data_i + 5] = (byte & 0x04) and 255 or 0 + data[data_i + 6] = (byte & 0x02) and 255 or 0 + data[data_i + 7] = (byte & 0x01) and 255 or 0 + data_i += 8 + pitch <<= 3 + elif mode == FT_PIXEL_MODE_GRAY: + # Usual case + data = glyph_slot.bitmap.buffer + else: + raise base.FontException('Unsupported render mode for this glyph') + + # pitch should be negative, but much faster to just swap tex_coords + img = image.ImageData(width, height, 'A', data, pitch) + glyph = self.font.create_glyph(img) + glyph.set_bearings(baseline, lsb, advance) + t = list(glyph.tex_coords) + glyph.tex_coords = t[9:12] + t[6:9] + t[3:6] + t[:3] + + return glyph + +class FreeTypeMemoryFont(object): + def __init__(self, data): + self.buffer = (ctypes.c_byte * len(data))() + ctypes.memmove(self.buffer, data, len(data)) + + ft_library = ft_get_library() + self.face = FT_Face() + r = FT_New_Memory_Face(ft_library, + self.buffer, len(self.buffer), 0, self.face) + if r != 0: + raise base.FontException('Could not load font data') + + self.name = self.face.contents.family_name + self.bold = self.face.contents.style_flags & FT_STYLE_FLAG_BOLD != 0 + self.italic = self.face.contents.style_flags & FT_STYLE_FLAG_ITALIC != 0 + + # Replace Freetype's generic family name with TTF/OpenType specific + # name if we can find one; there are some instances where Freetype + # gets it wrong. + if self.face.contents.face_flags & FT_FACE_FLAG_SFNT: + name = FT_SfntName() + for i in range(FT_Get_Sfnt_Name_Count(self.face)): + result = FT_Get_Sfnt_Name(self.face, i, name) + if result != 0: + continue + if not (name.platform_id == TT_PLATFORM_MICROSOFT and + name.encoding_id == TT_MS_ID_UNICODE_CS): + continue + if name.name_id == TT_NAME_ID_FONT_FAMILY: + string = string_at(name.string, name.string_len) + self.name = string.decode('utf-16be', 'ignore') + + def __del__(self): + try: + FT_Done_Face(self.face) + except: + pass + +class FreeTypeFont(base.Font): + glyph_renderer_class = FreeTypeGlyphRenderer + + # Map font (name, bold, italic) to FreeTypeMemoryFont + _memory_fonts = {} + + def __init__(self, name, size, bold=False, italic=False, dpi=None): + super(FreeTypeFont, self).__init__() + + if dpi is None: + dpi = 96 # as of pyglet 1.1; pyglet 1.0 had 72. + + # Check if font name/style matches a font loaded into memory by user + lname = name and name.lower() or '' + if (lname, bold, italic) in self._memory_fonts: + font = self._memory_fonts[lname, bold, italic] + self._set_face(font.face, size, dpi) + return + + # Use fontconfig to match the font (or substitute a default). + ft_library = ft_get_library() + + match = self.get_fontconfig_match(name, size, bold, italic) + if not match: + raise base.FontException('Could not match font "%s"' % name) + + f = FT_Face() + if fontconfig.FcPatternGetFTFace(match, FC_FT_FACE, 0, byref(f)) != 0: + value = FcValue() + result = fontconfig.FcPatternGet(match, FC_FILE, 0, byref(value)) + if result != 0: + raise base.FontException('No filename or FT face for "%s"' % \ + name) + result = FT_New_Face(ft_library, value.u.s, 0, byref(f)) + if result: + raise base.FontException('Could not load "%s": %d' % \ + (name, result)) + + fontconfig.FcPatternDestroy(match) + + self._set_face(f, size, dpi) + + def _set_face(self, face, size, dpi): + self.face = face.contents + self._face_size = float_to_f26p6(size) + self._dpi = dpi + + FT_Set_Char_Size(self.face, 0, float_to_f26p6(size), dpi, dpi) + metrics = self.face.size.contents.metrics + if metrics.ascender == 0 and metrics.descender == 0: + # Workaround broken fonts with no metrics. Has been observed with + # courR12-ISO8859-1.pcf.gz: "Courier" "Regular" + # + # None of the metrics fields are filled in, so render a glyph and + # grab its height as the ascent, and make up an arbitrary + # descent. + i = fontconfig.FcFreeTypeCharIndex(byref(self.face), ord('X')) + FT_Load_Glyph(self.face, i, FT_LOAD_RENDER) + self.ascent = self.face.available_sizes.contents.height + self.descent = -self.ascent // 4 # arbitrary. + else: + self.ascent = int(f26p6_to_float(metrics.ascender)) + self.descent = int(f26p6_to_float(metrics.descender)) + + @staticmethod + def get_fontconfig_match(name, size, bold, italic): + if bold: + bold = FC_WEIGHT_BOLD + else: + bold = FC_WEIGHT_REGULAR + + if italic: + italic = FC_SLANT_ITALIC + else: + italic = FC_SLANT_ROMAN + + fontconfig.FcInit() + + if isinstance(name, unicode): + name = name.encode('utf8') + + pattern = fontconfig.FcPatternCreate() + fontconfig.FcPatternAddDouble(pattern, FC_SIZE, c_double(size)) + fontconfig.FcPatternAddInteger(pattern, FC_WEIGHT, bold) + fontconfig.FcPatternAddInteger(pattern, FC_SLANT, italic) + fontconfig.FcPatternAddString(pattern, FC_FAMILY, name) + fontconfig.FcConfigSubstitute(0, pattern, FcMatchPattern) + fontconfig.FcDefaultSubstitute(pattern) + + # Look for a font that matches pattern + result = FcResult() + match = fontconfig.FcFontMatch(0, pattern, byref(result)) + fontconfig.FcPatternDestroy(pattern) + + return match + + @classmethod + def have_font(cls, name): + value = FcValue() + match = cls.get_fontconfig_match(name, 12, False, False) + result = fontconfig.FcPatternGet(match, FC_FAMILY, 0, byref(value)) + if value.u.s == name: + return True + else: + name = name.lower() + for font in cls._memory_fonts.values(): + if font.name.lower() == name: + return True + return False + + @classmethod + def add_font_data(cls, data): + font = FreeTypeMemoryFont(data) + cls._memory_fonts[font.name.lower(), font.bold, font.italic] = font diff --git a/pyglet/font/freetype_lib.py b/pyglet/font/freetype_lib.py new file mode 100644 index 0000000..2775013 --- /dev/null +++ b/pyglet/font/freetype_lib.py @@ -0,0 +1,427 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +''' +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: freetype_lib.py 2084 2008-05-27 12:42:19Z Alex.Holkner $' + +from ctypes import * + +import pyglet.lib + +_libfreetype = pyglet.lib.load_library('freetype') + +_font_data = {} + +def _get_function(name, argtypes, rtype): + try: + func = getattr(_libfreetype, name) + func.argtypes = argtypes + func.restype = rtype + return func + except AttributeError, e: + raise ImportError(e) + +FT_Done_FreeType = _get_function('FT_Done_FreeType', [c_void_p], None) +FT_Done_Face = _get_function('FT_Done_Face', [c_void_p], None) + + +class FT_LibraryRec(Structure): + _fields_ = [ + ('dummy', c_int), + ] + + def __del__(self): + global _library + try: + FT_Done_FreeType(byref(self)) + _library = None + except: + pass +FT_Library = POINTER(FT_LibraryRec) + +class FT_Glyph_Metrics(Structure): + _fields_ = [ + ('width', c_long), + ('height', c_long), + ('horiBearingX', c_long), + ('horiBearingY', c_long), + ('horiAdvance', c_long), + ('vertBearingX', c_long), + ('vertBearingY', c_long), + ('vertAdvance', c_long), + ] + + def dump(self): + for (name, type) in self._fields_: + print 'FT_Glyph_Metrics', name, `getattr(self, name)` + +class FT_Generic(Structure): + _fields_ = [('data', c_void_p), ('finalizer', c_void_p)] + +class FT_BBox(Structure): + _fields_ = [('xMin', c_long), ('yMin', c_long), ('xMax', c_long), + ('yMax', c_long)] + +class FT_Vector(Structure): + _fields_ = [('x', c_long), ('y', c_long)] + +class FT_Bitmap(Structure): + _fields_ = [ + ('rows', c_int), + ('width', c_int), + ('pitch', c_int), + # declaring buffer as c_char_p confuses ctypes, poor dear + ('buffer', POINTER(c_ubyte)), + ('num_grays', c_short), + ('pixel_mode', c_ubyte), + ('palette_mode', c_char), + ('palette', c_void_p), + ] + +class FT_Outline(Structure): + _fields_ = [ + ('n_contours', c_short), # number of contours in glyph + ('n_points', c_short), # number of points in the glyph + ('points', POINTER(FT_Vector)), # the outline's points + ('tags', c_char_p), # the points flags + ('contours', POINTER(c_short)), # the contour end points + ('flags', c_int), # outline masks + ] + +class FT_GlyphSlotRec(Structure): + _fields_ = [ + ('library', FT_Library), + ('face', c_void_p), + ('next', c_void_p), + ('reserved', c_uint), + ('generic', FT_Generic), + + ('metrics', FT_Glyph_Metrics), + ('linearHoriAdvance', c_long), + ('linearVertAdvance', c_long), + ('advance', FT_Vector), + + ('format', c_int), + + ('bitmap', FT_Bitmap), + ('bitmap_left', c_int), + ('bitmap_top', c_int), + + ('outline', FT_Outline), + ('num_subglyphs', c_uint), + ('subglyphs', c_void_p), + + ('control_data', c_void_p), + ('control_len', c_long), + + ('lsb_delta', c_long), + ('rsb_delta', c_long), + ('other', c_void_p), + ('internal', c_void_p), + ] +FT_GlyphSlot = POINTER(FT_GlyphSlotRec) + +class FT_Size_Metrics(Structure): + _fields_ = [ + ('x_ppem', c_ushort), # horizontal pixels per EM + ('y_ppem', c_ushort), # vertical pixels per EM + + ('x_scale', c_long), # two scales used to convert font units + ('y_scale', c_long), # to 26.6 frac. pixel coordinates + + ('ascender', c_long), # ascender in 26.6 frac. pixels + ('descender', c_long), # descender in 26.6 frac. pixels + ('height', c_long), # text height in 26.6 frac. pixels + ('max_advance', c_long), # max horizontal advance, in 26.6 pixels + ] + +class FT_SizeRec(Structure): + _fields_ = [ + ('face', c_void_p), + ('generic', FT_Generic), + ('metrics', FT_Size_Metrics), + ('internal', c_void_p), + ] +FT_Size = POINTER(FT_SizeRec) + +class FT_Bitmap_Size(Structure): + _fields_ = [ + ('height', c_ushort), + ('width', c_ushort), + ('size', c_long), + ('x_ppem', c_long), + ('y_ppem', c_long), + ] + +# face_flags values +FT_FACE_FLAG_SCALABLE = 1 << 0 +FT_FACE_FLAG_FIXED_SIZES = 1 << 1 +FT_FACE_FLAG_FIXED_WIDTH = 1 << 2 +FT_FACE_FLAG_SFNT = 1 << 3 +FT_FACE_FLAG_HORIZONTAL = 1 << 4 +FT_FACE_FLAG_VERTICAL = 1 << 5 +FT_FACE_FLAG_KERNING = 1 << 6 +FT_FACE_FLAG_FAST_GLYPHS = 1 << 7 +FT_FACE_FLAG_MULTIPLE_MASTERS = 1 << 8 +FT_FACE_FLAG_GLYPH_NAMES = 1 << 9 +FT_FACE_FLAG_EXTERNAL_STREAM = 1 << 10 +FT_FACE_FLAG_HINTER = 1 << 11 + +class FT_FaceRec(Structure): + _fields_ = [ + ('num_faces', c_long), + ('face_index', c_long), + + ('face_flags', c_long), + ('style_flags', c_long), + + ('num_glyphs', c_long), + ('family_name', c_char_p), + ('style_name', c_char_p), + + ('num_fixed_sizes', c_int), + ('available_sizes', POINTER(FT_Bitmap_Size)), + + ('num_charmaps', c_int), + ('charmaps', c_void_p), + + ('generic', FT_Generic), + + ('bbox', FT_BBox), + + ('units_per_EM', c_ushort), + ('ascender', c_short), + ('descender', c_short), + ('height', c_short), + + ('max_advance_width', c_short), + ('max_advance_height', c_short), + + ('underline_position', c_short), + ('underline_thickness', c_short), + + ('glyph', FT_GlyphSlot), + ('size', FT_Size), + ('charmap', c_void_p), + + ('driver', c_void_p), + ('memory', c_void_p), + ('stream', c_void_p), + + ('sizes_list_head', c_void_p), + ('sizes_list_tail', c_void_p), + + ('autohint', FT_Generic), + ('extensions', c_void_p), + ('internal', c_void_p), + ] + + def dump(self): + for (name, type) in self._fields_: + print 'FT_FaceRec', name, `getattr(self, name)` + + def has_kerning(self): + return self.face_flags & FT_FACE_FLAG_KERNING + +FT_Face = POINTER(FT_FaceRec) + +class Error(Exception): + def __init__(self, message, errcode): + self.message = message + self.errcode = errcode + + def __str__(self): + return '%s: %s (%s)'%(self.__class__.__name__, self.message, + self._ft_errors.get(self.errcode, 'unknown error')) + _ft_errors = { + 0x00: "no error" , + 0x01: "cannot open resource" , + 0x02: "unknown file format" , + 0x03: "broken file" , + 0x04: "invalid FreeType version" , + 0x05: "module version is too low" , + 0x06: "invalid argument" , + 0x07: "unimplemented feature" , + 0x08: "broken table" , + 0x09: "broken offset within table" , + 0x10: "invalid glyph index" , + 0x11: "invalid character code" , + 0x12: "unsupported glyph image format" , + 0x13: "cannot render this glyph format" , + 0x14: "invalid outline" , + 0x15: "invalid composite glyph" , + 0x16: "too many hints" , + 0x17: "invalid pixel size" , + 0x20: "invalid object handle" , + 0x21: "invalid library handle" , + 0x22: "invalid module handle" , + 0x23: "invalid face handle" , + 0x24: "invalid size handle" , + 0x25: "invalid glyph slot handle" , + 0x26: "invalid charmap handle" , + 0x27: "invalid cache manager handle" , + 0x28: "invalid stream handle" , + 0x30: "too many modules" , + 0x31: "too many extensions" , + 0x40: "out of memory" , + 0x41: "unlisted object" , + 0x51: "cannot open stream" , + 0x52: "invalid stream seek" , + 0x53: "invalid stream skip" , + 0x54: "invalid stream read" , + 0x55: "invalid stream operation" , + 0x56: "invalid frame operation" , + 0x57: "nested frame access" , + 0x58: "invalid frame read" , + 0x60: "raster uninitialized" , + 0x61: "raster corrupted" , + 0x62: "raster overflow" , + 0x63: "negative height while rastering" , + 0x70: "too many registered caches" , + 0x80: "invalid opcode" , + 0x81: "too few arguments" , + 0x82: "stack overflow" , + 0x83: "code overflow" , + 0x84: "bad argument" , + 0x85: "division by zero" , + 0x86: "invalid reference" , + 0x87: "found debug opcode" , + 0x88: "found ENDF opcode in execution stream" , + 0x89: "nested DEFS" , + 0x8A: "invalid code range" , + 0x8B: "execution context too long" , + 0x8C: "too many function definitions" , + 0x8D: "too many instruction definitions" , + 0x8E: "SFNT font table missing" , + 0x8F: "horizontal header (hhea, table missing" , + 0x90: "locations (loca, table missing" , + 0x91: "name table missing" , + 0x92: "character map (cmap, table missing" , + 0x93: "horizontal metrics (hmtx, table missing" , + 0x94: "PostScript (post, table missing" , + 0x95: "invalid horizontal metrics" , + 0x96: "invalid character map (cmap, format" , + 0x97: "invalid ppem value" , + 0x98: "invalid vertical metrics" , + 0x99: "could not find context" , + 0x9A: "invalid PostScript (post, table format" , + 0x9B: "invalid PostScript (post, table" , + 0xA0: "opcode syntax error" , + 0xA1: "argument stack underflow" , + 0xA2: "ignore" , + 0xB0: "`STARTFONT' field missing" , + 0xB1: "`FONT' field missing" , + 0xB2: "`SIZE' field missing" , + 0xB3: "`CHARS' field missing" , + 0xB4: "`STARTCHAR' field missing" , + 0xB5: "`ENCODING' field missing" , + 0xB6: "`BBX' field missing" , + 0xB7: "`BBX' too big" , + } + +FT_LOAD_RENDER = 0x4 + +FT_F26Dot6 = c_long + +FT_Init_FreeType = _get_function('FT_Init_FreeType', + [POINTER(FT_Library)], c_int) +FT_New_Memory_Face = _get_function('FT_New_Memory_Face', + [FT_Library, POINTER(c_byte), c_long, c_long, POINTER(FT_Face)], c_int) +FT_New_Face = _get_function('FT_New_Face', + [FT_Library, c_char_p, c_long, POINTER(FT_Face)], c_int) +FT_Set_Pixel_Sizes = _get_function('FT_Set_Pixel_Sizes', + [FT_Face, c_uint, c_uint], c_int) +FT_Set_Char_Size = _get_function('FT_Set_Char_Size', + [FT_Face, FT_F26Dot6, FT_F26Dot6, c_uint, c_uint], c_int) +FT_Load_Glyph = _get_function('FT_Load_Glyph', + [FT_Face, c_uint, c_int32], c_int) +FT_Get_Char_Index = _get_function('FT_Get_Char_Index', + [FT_Face, c_ulong], c_uint) +FT_Load_Char = _get_function('FT_Load_Char', + [FT_Face, c_ulong, c_int], c_int) +FT_Get_Kerning = _get_function('FT_Get_Kerning', + [FT_Face, c_uint, c_uint, c_uint, POINTER(FT_Vector)], c_int) + +# SFNT interface + +class FT_SfntName(Structure): + _fields_ = [ + ('platform_id', c_ushort), + ('encoding_id', c_ushort), + ('language_id', c_ushort), + ('name_id', c_ushort), + ('string', POINTER(c_byte)), + ('string_len', c_uint) + ] + +FT_Get_Sfnt_Name_Count = _get_function('FT_Get_Sfnt_Name_Count', + [FT_Face], c_uint) +FT_Get_Sfnt_Name = _get_function('FT_Get_Sfnt_Name', + [FT_Face, c_uint, POINTER(FT_SfntName)], c_int) + +TT_PLATFORM_MICROSOFT = 3 +TT_MS_ID_UNICODE_CS = 1 +TT_NAME_ID_COPYRIGHT = 0 +TT_NAME_ID_FONT_FAMILY = 1 +TT_NAME_ID_FONT_SUBFAMILY = 2 +TT_NAME_ID_UNIQUE_ID = 3 +TT_NAME_ID_FULL_NAME = 4 +TT_NAME_ID_VERSION_STRING = 5 +TT_NAME_ID_PS_NAME = 6 +TT_NAME_ID_TRADEMARK = 7 +TT_NAME_ID_MANUFACTURER = 8 +TT_NAME_ID_DESIGNER = 9 +TT_NAME_ID_DESCRIPTION = 10 +TT_NAME_ID_VENDOR_URL = 11 +TT_NAME_ID_DESIGNER_URL = 12 +TT_NAME_ID_LICENSE = 13 +TT_NAME_ID_LICENSE_URL = 14 +TT_NAME_ID_PREFERRED_FAMILY = 16 +TT_NAME_ID_PREFERRED_SUBFAMILY= 17 +TT_NAME_ID_MAC_FULL_NAME = 18 +TT_NAME_ID_CID_FINDFONT_NAME = 20 + +_library = None +def ft_get_library(): + global _library + if not _library: + _library = FT_Library() + error = FT_Init_FreeType(byref(_library)) + if error: + raise FontException( + 'an error occurred during library initialization', error) + return _library diff --git a/pyglet/font/ttf.py b/pyglet/font/ttf.py new file mode 100644 index 0000000..9aa605b --- /dev/null +++ b/pyglet/font/ttf.py @@ -0,0 +1,635 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +# $Id: ttf.py 1579 2008-01-15 14:47:19Z Alex.Holkner $ + +""" +Implementation of the Truetype file format. + +Typical applications will not need to use this module directly; look at +`pyglyph.font` instead. + +References: + * http://developer.apple.com/fonts/TTRefMan/RM06 + * http://www.microsoft.com/typography/otspec +""" + +__docformat__ = 'restructuredtext' +__version__ = '$Id: ttf.py 1579 2008-01-15 14:47:19Z Alex.Holkner $' + +import codecs +import os +import mmap +import struct + +class TruetypeInfo: + """Information about a single Truetype face. + + The class memory-maps the font file to read the tables, so + it is vital that you call the `close` method to avoid large memory + leaks. Once closed, you cannot call any of the ``get_*`` methods. + + Not all tables have been implemented yet (or likely ever will). + Currently only the name and metric tables are read; in particular + there is no glyph or hinting information. + """ + + _name_id_lookup = { + 'copyright': 0, + 'family': 1, + 'subfamily': 2, + 'identifier': 3, + 'name': 4, + 'version': 5, + 'postscript': 6, + 'trademark': 7, + 'manufacturer': 8, + 'designer': 9, + 'description': 10, + 'vendor-url': 11, + 'designer-url': 12, + 'license': 13, + 'license-url': 14, + 'preferred-family': 16, + 'preferred-subfamily': 17, + 'compatible-name': 18, + 'sample': 19, + } + + _platform_id_lookup = { + 'unicode': 0, + 'macintosh': 1, + 'iso': 2, + 'microsoft': 3, + 'custom': 4 + } + + _microsoft_encoding_lookup = { + 1: 'utf_16_be', + 2: 'shift_jis', + 4: 'big5', + 6: 'johab', + 10: 'utf_16_be' + } + + _macintosh_encoding_lookup = { + 0: 'mac_roman' + } + + def __init__(self, filename): + """Read the given truetype file. + + :Parameters: + `filename` + The name of any Windows, OS2 or Macintosh Truetype file. + + The object must be closed (see `close`) after use. + + An exception will be raised if the file does not exist or cannot + be read. + """ + if not filename: filename = '' + len = os.stat(filename).st_size + self._fileno = os.open(filename, os.O_RDONLY) + if hasattr(mmap, 'MAP_SHARED'): + self._data = mmap.mmap(self._fileno, len, mmap.MAP_SHARED, + mmap.PROT_READ) + else: + self._data = mmap.mmap(self._fileno, len, None, mmap.ACCESS_READ) + + offsets = _read_offset_table(self._data, 0) + self._tables = {} + for table in _read_table_directory_entry.array(self._data, + offsets.size, offsets.num_tables): + self._tables[table.tag] = table + + self._names = None + self._horizontal_metrics = None + self._character_advances = None + self._character_kernings = None + self._glyph_kernings = None + self._character_map = None + self._glyph_map = None + self._font_selection_flags = None + + self.header = \ + _read_head_table(self._data, self._tables['head'].offset) + self.horizontal_header = \ + _read_horizontal_header(self._data, self._tables['hhea'].offset) + + def get_font_selection_flags(self): + """Return the font selection flags, as defined in OS/2 table""" + if not self._font_selection_flags: + OS2_table = \ + _read_OS2_table(self._data, self._tables['OS/2'].offset) + self._font_selection_flags = OS2_table.fs_selection + return self._font_selection_flags + + def is_bold(self): + """Returns True iff the font describes itself as bold.""" + return bool(self.get_font_selection_flags() & 0x20) + + def is_italic(self): + """Returns True iff the font describes itself as italic.""" + return bool(self.get_font_selection_flags() & 0x1) + + def get_names(self): + """Returns a dictionary of names defined in the file. + + The key of each item is a tuple of ``platform_id``, ``name_id``, + where each ID is the number as described in the Truetype format. + + The value of each item is a tuple of + ``encoding_id``, ``language_id``, ``value``, where ``value`` is + an encoded string. + """ + if self._names: + return self._names + naming_table = \ + _read_naming_table(self._data, self._tables['name'].offset) + name_records = \ + _read_name_record.array(self._data, + self._tables['name'].offset + naming_table.size, + naming_table.count) + storage = naming_table.string_offset + self._tables['name'].offset + self._names = {} + for record in name_records: + value = self._data[record.offset + storage:\ + record.offset + storage + record.length] + key = record.platform_id, record.name_id + value = (record.encoding_id, record.language_id, value) + if not key in self._names: + self._names[key] = [] + self._names[key].append(value) + return self._names + + def get_name(self, name, platform=None, languages=None): + """Returns the value of the given name in this font. + + :Parameters: + `name` + Either an integer, representing the name_id desired (see + font format); or a string describing it, see below for + valid names. + `platform` + Platform for the requested name. Can be the integer ID, + or a string describing it. By default, the Microsoft + platform is searched first, then Macintosh. + `languages` + A list of language IDs to search. The first language + which defines the requested name will be used. By default, + all English dialects are searched. + + If the name is not found, ``None`` is returned. If the name + is found, the value will be decoded and returned as a unicode + string. Currently only some common encodings are supported. + + Valid names to request are (supply as a string):: + + 'copyright' + 'family' + 'subfamily' + 'identifier' + 'name' + 'version' + 'postscript' + 'trademark' + 'manufacturer' + 'designer' + 'description' + 'vendor-url' + 'designer-url' + 'license' + 'license-url' + 'preferred-family' + 'preferred-subfamily' + 'compatible-name' + 'sample' + + Valid platforms to request are (supply as a string):: + + 'unicode' + 'macintosh' + 'iso' + 'microsoft' + 'custom' + """ + + names = self.get_names() + if type(name) == str: + name = self._name_id_lookup[name] + if not platform: + for platform in ('microsoft','macintosh'): + value = self.get_name(name, platform, languages) + if value: + return value + if type(platform) == str: + platform = self._platform_id_lookup[platform] + if not (platform, name) in names: + return None + + if platform == 3: # setup for microsoft + encodings = self._microsoft_encoding_lookup + if not languages: + # Default to english languages for microsoft + languages = (0x409,0x809,0xc09,0x1009,0x1409,0x1809) + elif platform == 1: # setup for macintosh + encodings = self.__macintosh_encoding_lookup + if not languages: + # Default to english for macintosh + languages = (0,) + + for record in names[(platform, name)]: + if record[1] in languages and record[0] in encodings: + decoder = codecs.getdecoder(encodings[record[0]]) + return decoder(record[2])[0] + return None + + def get_horizontal_metrics(self): + """Return all horizontal metric entries in table format.""" + if not self._horizontal_metrics: + ar = _read_long_hor_metric.array(self._data, + self._tables['hmtx'].offset, + self.horizontal_header.number_of_h_metrics) + self._horizontal_metrics = ar + return self._horizontal_metrics + + def get_character_advances(self): + """Return a dictionary of character->advance. + + They key of the dictionary is a unit-length unicode string, + and the value is a float giving the horizontal advance in + em. + """ + if self._character_advances: + return self._character_advances + ga = self.get_glyph_advances() + gmap = self.get_glyph_map() + self._character_advances = {} + for i in range(len(ga)): + if i in gmap and not gmap[i] in self._character_advances: + self._character_advances[gmap[i]] = ga[i] + return self._character_advances + + def get_glyph_advances(self): + """Return a dictionary of glyph->advance. + + They key of the dictionary is the glyph index and the value is a float + giving the horizontal advance in em. + """ + hm = self.get_horizontal_metrics() + return [float(m.advance_width) / self.header.units_per_em for m in hm] + + def get_character_kernings(self): + """Return a dictionary of (left,right)->kerning + + The key of the dictionary is a tuple of ``(left, right)`` + where each element is a unit-length unicode string. The + value of the dictionary is the horizontal pairwise kerning + in em. + """ + if not self._character_kernings: + gmap = self.get_glyph_map() + kerns = self.get_glyph_kernings() + self._character_kernings = {} + for pair, value in kerns.items(): + lglyph, rglyph = pair + lchar = lglyph in gmap and gmap[lglyph] or None + rchar = rglyph in gmap and gmap[rglyph] or None + if lchar and rchar: + self._character_kernings[(lchar, rchar)] = value + return self._character_kernings + + def get_glyph_kernings(self): + """Return a dictionary of (left,right)->kerning + + The key of the dictionary is a tuple of ``(left, right)`` + where each element is a glyph index. The value of the dictionary is + the horizontal pairwise kerning in em. + """ + if self._glyph_kernings: + return self._glyph_kernings + header = \ + _read_kern_header_table(self._data, self._tables['kern'].offset) + offset = self._tables['kern'].offset + header.size + kernings = {} + for i in range(header.n_tables): + header = _read_kern_subtable_header(self._data, offset) + if header.coverage & header.horizontal_mask \ + and not header.coverage & header.minimum_mask \ + and not header.coverage & header.perpendicular_mask: + if header.coverage & header.format_mask == 0: + self._add_kernings_format0(kernings, offset + header.size) + offset += header.length + self._glyph_kernings = kernings + return kernings + + def _add_kernings_format0(self, kernings, offset): + header = _read_kern_subtable_format0(self._data, offset) + kerning_pairs = _read_kern_subtable_format0Pair.array(self._data, + offset + header.size, header.n_pairs) + for pair in kerning_pairs: + if (pair.left, pair.right) in kernings: + kernings[(pair.left, pair.right)] += pair.value \ + / float(self.header.units_per_em) + else: + kernings[(pair.left, pair.right)] = pair.value \ + / float(self.header.units_per_em) + + def get_glyph_map(self): + """Calculate and return a reverse character map. + + Returns a dictionary where the key is a glyph index and the + value is a unit-length unicode string. + """ + if self._glyph_map: + return self._glyph_map + cmap = self.get_character_map() + self._glyph_map = {} + for ch, glyph in cmap.items(): + if not glyph in self._glyph_map: + self._glyph_map[glyph] = ch + return self._glyph_map + + def get_character_map(self): + """Return the character map. + + Returns a dictionary where the key is a unit-length unicode + string and the value is a glyph index. Currently only + format 4 character maps are read. + """ + if self._character_map: + return self._character_map + cmap = _read_cmap_header(self._data, self._tables['cmap'].offset) + records = _read_cmap_encoding_record.array(self._data, + self._tables['cmap'].offset + cmap.size, cmap.num_tables) + self._character_map = {} + for record in records: + if record.platform_id == 3 and record.encoding_id == 1: + # Look at Windows Unicode charmaps only + offset = self._tables['cmap'].offset + record.offset + format_header = _read_cmap_format_header(self._data, offset) + if format_header.format == 4: + self._character_map = \ + self._get_character_map_format4(offset) + break + return self._character_map + + def _get_character_map_format4(self, offset): + # This is absolutely, without question, the *worst* file + # format ever. Whoever the fuckwit is that thought this up is + # a fuckwit. + header = _read_cmap_format4Header(self._data, offset) + seg_count = header.seg_count_x2 / 2 + array_size = struct.calcsize('>%dH' % seg_count) + end_count = self._read_array('>%dH' % seg_count, + offset + header.size) + start_count = self._read_array('>%dH' % seg_count, + offset + header.size + array_size + 2) + id_delta = self._read_array('>%dh' % seg_count, + offset + header.size + array_size + 2 + array_size) + id_range_offset_address = \ + offset + header.size + array_size + 2 + array_size + array_size + id_range_offset = self._read_array('>%dH' % seg_count, + id_range_offset_address) + character_map = {} + for i in range(0, seg_count): + if id_range_offset[i] != 0: + if id_range_offset[i] == 65535: + continue # Hack around a dodgy font (babelfish.ttf) + for c in range(start_count[i], end_count[i] + 1): + addr = id_range_offset[i] + 2*(c - start_count[i]) + \ + id_range_offset_address + 2*i + g = struct.unpack('>H', self._data[addr:addr+2])[0] + if g != 0: + character_map[unichr(c)] = (g + id_delta[i]) % 65536 + else: + for c in range(start_count[i], end_count[i] + 1): + g = (c + id_delta[i]) % 65536 + if g != 0: + character_map[unichr(c)] = g + return character_map + + def _read_array(self, format, offset): + size = struct.calcsize(format) + return struct.unpack(format, self._data[offset:offset+size]) + + def close(self): + """Close the font file. + + This is a good idea, since the entire file is memory mapped in + until this method is called. After closing cannot rely on the + ``get_*`` methods. + """ + + self._data.close() + os.close(self._fileno) + +def _read_table(*entries): + """ Generic table constructor used for table formats listed at + end of file.""" + fmt = '>' + names = [] + for entry in entries: + name, type = entry.split(':') + names.append(name) + fmt += type + class _table_class: + size = struct.calcsize(fmt) + def __init__(self, data, offset): + items = struct.unpack(fmt, data[offset:offset+self.size]) + self.pairs = zip(names, items) + for name, value in self.pairs: + setattr(self, name, value) + + def __repr__(self): + s = '{' + ', '.join(['%s = %s' % (name, value) \ + for name, value in self.pairs]) + '}' + return s + + @staticmethod + def array(data, offset, count): + tables = [] + for i in range(count): + tables.append(_table_class(data, offset)) + offset += _table_class.size + return tables + + return _table_class + + +# Table formats (see references) + +_read_offset_table = _read_table('scalertype:I', + 'num_tables:H', + 'search_range:H', + 'entry_selector:H', + 'range_shift:H') + +_read_table_directory_entry = _read_table('tag:4s', + 'check_sum:I', + 'offset:I', + 'length:I') +_read_head_table = _read_table('version:i', + 'font_revision:i', + 'check_sum_adjustment:L', + 'magic_number:L', + 'flags:H', + 'units_per_em:H', + 'created:Q', + 'modified:Q', + 'x_min:h', + 'y_min:h', + 'x_max:h', + 'y_max:h', + 'mac_style:H', + 'lowest_rec_p_pEM:H', + 'font_direction_hint:h', + 'index_to_loc_format:h', + 'glyph_data_format:h') + +_read_OS2_table = _read_table('version:H', + 'x_avg_char_width:h', + 'us_weight_class:H', + 'us_width_class:H', + 'fs_type:H', + 'y_subscript_x_size:h', + 'y_subscript_y_size:h', + 'y_subscript_x_offset:h', + 'y_subscript_y_offset:h', + 'y_superscript_x_size:h', + 'y_superscript_y_size:h', + 'y_superscript_x_offset:h', + 'y_superscript_y_offset:h', + 'y_strikeout_size:h', + 'y_strikeout_position:h', + 's_family_class:h', + 'panose1:B', + 'panose2:B', + 'panose3:B', + 'panose4:B', + 'panose5:B', + 'panose6:B', + 'panose7:B', + 'panose8:B', + 'panose9:B', + 'panose10:B', + 'ul_unicode_range1:L', + 'ul_unicode_range2:L', + 'ul_unicode_range3:L', + 'ul_unicode_range4:L', + 'ach_vend_id:I', + 'fs_selection:H', + 'us_first_char_index:H', + 'us_last_char_index:H', + 's_typo_ascender:h', + 's_typo_descender:h', + 's_typo_line_gap:h', + 'us_win_ascent:H', + 'us_win_descent:H', + 'ul_code_page_range1:L', + 'ul_code_page_range2:L', + 'sx_height:h', + 's_cap_height:h', + 'us_default_char:H', + 'us_break_char:H', + 'us_max_context:H') + +_read_kern_header_table = _read_table('version_num:H', + 'n_tables:H') + +_read_kern_subtable_header = _read_table('version:H', + 'length:H', + 'coverage:H') +_read_kern_subtable_header.horizontal_mask = 0x1 +_read_kern_subtable_header.minimum_mask = 0x2 +_read_kern_subtable_header.perpendicular_mask = 0x4 +_read_kern_subtable_header.override_mask = 0x5 +_read_kern_subtable_header.format_mask = 0xf0 + +_read_kern_subtable_format0 = _read_table('n_pairs:H', + 'search_range:H', + 'entry_selector:H', + 'range_shift:H') +_read_kern_subtable_format0Pair = _read_table('left:H', + 'right:H', + 'value:h') + +_read_cmap_header = _read_table('version:H', + 'num_tables:H') + +_read_cmap_encoding_record = _read_table('platform_id:H', + 'encoding_id:H', + 'offset:L') + +_read_cmap_format_header = _read_table('format:H', + 'length:H') +_read_cmap_format4Header = _read_table('format:H', + 'length:H', + 'language:H', + 'seg_count_x2:H', + 'search_range:H', + 'entry_selector:H', + 'range_shift:H') + +_read_horizontal_header = _read_table('version:i', + 'Advance:h', + 'Descender:h', + 'LineGap:h', + 'advance_width_max:H', + 'min_left_side_bearing:h', + 'min_right_side_bearing:h', + 'x_max_extent:h', + 'caret_slope_rise:h', + 'caret_slope_run:h', + 'caret_offset:h', + 'reserved1:h', + 'reserved2:h', + 'reserved3:h', + 'reserved4:h', + 'metric_data_format:h', + 'number_of_h_metrics:H') + +_read_long_hor_metric = _read_table('advance_width:H', + 'lsb:h') + +_read_naming_table = _read_table('format:H', + 'count:H', + 'string_offset:H') + +_read_name_record = _read_table('platform_id:H', + 'encoding_id:H', + 'language_id:H', + 'name_id:H', + 'length:H', + 'offset:H') diff --git a/pyglet/font/win32.py b/pyglet/font/win32.py new file mode 100644 index 0000000..2f96b0e --- /dev/null +++ b/pyglet/font/win32.py @@ -0,0 +1,574 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +''' +''' + +# TODO Windows Vista: need to call SetProcessDPIAware? May affect GDI+ calls +# as well as font. + +from ctypes import * +import ctypes +import math + +import pyglet +from pyglet.font import base +import pyglet.image +from pyglet.window.win32.constants import * +from pyglet.window.win32.types import * +from pyglet.window.win32 import _gdi32 as gdi32, _user32 as user32 +from pyglet.window.win32 import _kernel32 as kernel32 + +_debug_font = pyglet.options['debug_font'] + +HFONT = HANDLE +HBITMAP = HANDLE +HDC = HANDLE +HGDIOBJ = HANDLE +gdi32.CreateFontIndirectA.restype = HFONT +gdi32.CreateCompatibleBitmap.restype = HBITMAP +gdi32.CreateCompatibleDC.restype = HDC +user32.GetDC.restype = HDC +gdi32.GetStockObject.restype = HGDIOBJ +gdi32.CreateDIBSection.restype = HBITMAP + +class LOGFONT(Structure): + _fields_ = [ + ('lfHeight', c_long), + ('lfWidth', c_long), + ('lfEscapement', c_long), + ('lfOrientation', c_long), + ('lfWeight', c_long), + ('lfItalic', c_byte), + ('lfUnderline', c_byte), + ('lfStrikeOut', c_byte), + ('lfCharSet', c_byte), + ('lfOutPrecision', c_byte), + ('lfClipPrecision', c_byte), + ('lfQuality', c_byte), + ('lfPitchAndFamily', c_byte), + ('lfFaceName', (c_char * LF_FACESIZE)) # Use ASCII + ] + __slots__ = [f[0] for f in _fields_] + +class TEXTMETRIC(Structure): + _fields_ = [ + ('tmHeight', c_long), + ('tmAscent', c_long), + ('tmDescent', c_long), + ('tmInternalLeading', c_long), + ('tmExternalLeading', c_long), + ('tmAveCharWidth', c_long), + ('tmMaxCharWidth', c_long), + ('tmWeight', c_long), + ('tmOverhang', c_long), + ('tmDigitizedAspectX', c_long), + ('tmDigitizedAspectY', c_long), + ('tmFirstChar', c_char), # Use ASCII + ('tmLastChar', c_char), + ('tmDefaultChar', c_char), + ('tmBreakChar', c_char), + ('tmItalic', c_byte), + ('tmUnderlined', c_byte), + ('tmStruckOut', c_byte), + ('tmPitchAndFamily', c_byte), + ('tmCharSet', c_byte) + ] + __slots__ = [f[0] for f in _fields_] + +class ABC(Structure): + _fields_ = [ + ('abcA', c_int), + ('abcB', c_uint), + ('abcC', c_int) + ] + __slots__ = [f[0] for f in _fields_] + +class BITMAPINFOHEADER(Structure): + _fields_ = [ + ('biSize', c_uint32), + ('biWidth', c_int), + ('biHeight', c_int), + ('biPlanes', c_short), + ('biBitCount', c_short), + ('biCompression', c_uint32), + ('biSizeImage', c_uint32), + ('biXPelsPerMeter', c_long), + ('biYPelsPerMeter', c_long), + ('biClrUsed', c_uint32), + ('biClrImportant', c_uint32) + ] + __slots__ = [f[0] for f in _fields_] + +class RGBQUAD(Structure): + _fields_ = [ + ('rgbBlue', c_byte), + ('rgbGreen', c_byte), + ('rgbRed', c_byte), + ('rgbReserved', c_byte) + ] + + def __init__(self, r, g, b): + self.rgbRed = r + self.rgbGreen = g + self.rgbBlue = b + + +class BITMAPINFO(Structure): + _fields_ = [ + ('bmiHeader', BITMAPINFOHEADER), + ('bmiColors', c_ulong * 3) + ] + +def str_ucs2(text): + if byteorder == 'big': + text = text.encode('utf_16_be') + else: + text = text.encode('utf_16_le') # explicit endian avoids BOM + return create_string_buffer(text + '\0') + +_debug_dir = 'debug_font' +def _debug_filename(base, extension): + import os + if not os.path.exists(_debug_dir): + os.makedirs(_debug_dir) + name = '%s-%%d.%%s' % os.path.join(_debug_dir, base) + num = 1 + while os.path.exists(name % (num, extension)): + num += 1 + return name % (num, extension) + +def _debug_image(image, name): + filename = _debug_filename(name, 'png') + image.save(filename) + _debug('Saved image %r to %s' % (image, filename)) + +_debug_logfile = None +def _debug(msg): + global _debug_logfile + if not _debug_logfile: + _debug_logfile = open(_debug_filename('log', 'txt'), 'wt') + _debug_logfile.write(msg + '\n') + +class Win32GlyphRenderer(base.GlyphRenderer): + _bitmap = None + _dc = None + _bitmap_rect = None + + def __init__(self, font): + super(Win32GlyphRenderer, self).__init__(font) + self.font = font + + # Pessimistically round up width and height to 4 byte alignment + width = font.max_glyph_width + height = font.ascent - font.descent + width = (width | 0x3) + 1 + height = (height | 0x3) + 1 + self._create_bitmap(width, height) + + gdi32.SelectObject(self._dc, self.font.hfont) + + def _create_bitmap(self, width, height): + pass + + def render(self, text): + raise NotImplementedError('abstract') + +class GDIGlyphRenderer(Win32GlyphRenderer): + def __del__(self): + try: + if self._dc: + gdi32.DeleteDC(self._dc) + if self._bitmap: + gdi32.DeleteObject(self._bitmap) + except: + pass + + def render(self, text): + # Attempt to get ABC widths (only for TrueType) + abc = ABC() + if gdi32.GetCharABCWidthsW(self._dc, + ord(text), ord(text), byref(abc)): + width = abc.abcB + lsb = abc.abcA + advance = abc.abcA + abc.abcB + abc.abcC + else: + width_buf = c_int() + gdi32.GetCharWidth32W(self._dc, + ord(text), ord(text), byref(width_buf)) + width = width_buf.value + lsb = 0 + advance = width + + # Can't get glyph-specific dimensions, use whole line-height. + height = self._bitmap_height + image = self._get_image(text, width, height, lsb) + + glyph = self.font.create_glyph(image) + glyph.set_bearings(-self.font.descent, lsb, advance) + + if _debug_font: + _debug('%r.render(%s)' % (self, text)) + _debug('abc.abcA = %r' % abc.abcA) + _debug('abc.abcB = %r' % abc.abcB) + _debug('abc.abcC = %r' % abc.abcC) + _debug('width = %r' % width) + _debug('height = %r' % height) + _debug('lsb = %r' % lsb) + _debug('advance = %r' % advance) + _debug_image(image, 'glyph_%s' % text) + _debug_image(self.font.textures[0], 'tex_%s' % text) + + return glyph + + def _get_image(self, text, width, height, lsb): + # There's no such thing as a greyscale bitmap format in GDI. We can + # create an 8-bit palette bitmap with 256 shades of grey, but + # unfortunately antialiasing will not work on such a bitmap. So, we + # use a 32-bit bitmap and use the red channel as OpenGL's alpha. + + gdi32.SelectObject(self._dc, self._bitmap) + gdi32.SelectObject(self._dc, self.font.hfont) + gdi32.SetBkColor(self._dc, 0x0) + gdi32.SetTextColor(self._dc, 0x00ffffff) + gdi32.SetBkMode(self._dc, OPAQUE) + + # Draw to DC + user32.FillRect(self._dc, byref(self._bitmap_rect), self._black) + gdi32.ExtTextOutA(self._dc, -lsb, 0, 0, c_void_p(), text, + len(text), c_void_p()) + gdi32.GdiFlush() + + # Create glyph object and copy bitmap data to texture + image = pyglet.image.ImageData(width, height, + 'AXXX', self._bitmap_data, self._bitmap_rect.right * 4) + return image + + def _create_bitmap(self, width, height): + self._black = gdi32.GetStockObject(BLACK_BRUSH) + self._white = gdi32.GetStockObject(WHITE_BRUSH) + + if self._dc: + gdi32.ReleaseDC(self._dc) + if self._bitmap: + gdi32.DeleteObject(self._bitmap) + + pitch = width * 4 + data = POINTER(c_byte * (height * pitch))() + info = BITMAPINFO() + info.bmiHeader.biSize = sizeof(info.bmiHeader) + info.bmiHeader.biWidth = width + info.bmiHeader.biHeight = height + info.bmiHeader.biPlanes = 1 + info.bmiHeader.biBitCount = 32 + info.bmiHeader.biCompression = BI_RGB + + self._dc = gdi32.CreateCompatibleDC(c_void_p()) + self._bitmap = gdi32.CreateDIBSection(c_void_p(), + byref(info), DIB_RGB_COLORS, byref(data), c_void_p(), + 0) + # Spookiness: the above line causes a "not enough storage" error, + # even though that error cannot be generated according to docs, + # and everything works fine anyway. Call SetLastError to clear it. + kernel32.SetLastError(0) + + self._bitmap_data = data.contents + self._bitmap_rect = RECT() + self._bitmap_rect.left = 0 + self._bitmap_rect.right = width + self._bitmap_rect.top = 0 + self._bitmap_rect.bottom = height + self._bitmap_height = height + + if _debug_font: + _debug('%r._create_dc(%d, %d)' % (self, width, height)) + _debug('_dc = %r' % self._dc) + _debug('_bitmap = %r' % self._bitmap) + _debug('pitch = %r' % pitch) + _debug('info.bmiHeader.biSize = %r' % info.bmiHeader.biSize) + +class Win32Font(base.Font): + glyph_renderer_class = GDIGlyphRenderer + + def __init__(self, name, size, bold=False, italic=False, dpi=None): + super(Win32Font, self).__init__() + + self.logfont = self.get_logfont(name, size, bold, italic, dpi) + self.hfont = gdi32.CreateFontIndirectA(byref(self.logfont)) + + # Create a dummy DC for coordinate mapping + dc = user32.GetDC(0) + metrics = TEXTMETRIC() + gdi32.SelectObject(dc, self.hfont) + gdi32.GetTextMetricsA(dc, byref(metrics)) + self.ascent = metrics.tmAscent + self.descent = -metrics.tmDescent + self.max_glyph_width = metrics.tmMaxCharWidth + + @staticmethod + def get_logfont(name, size, bold, italic, dpi): + # Create a dummy DC for coordinate mapping + dc = user32.GetDC(0) + if dpi is None: + dpi = 96 + logpixelsy = dpi + + logfont = LOGFONT() + # Conversion of point size to device pixels + logfont.lfHeight = int(-size * logpixelsy / 72) + if bold: + logfont.lfWeight = FW_BOLD + else: + logfont.lfWeight = FW_NORMAL + logfont.lfItalic = italic + logfont.lfFaceName = name + logfont.lfQuality = ANTIALIASED_QUALITY + return logfont + + @classmethod + def have_font(cls, name): + # CreateFontIndirect always returns a font... have to work out + # something with EnumFontFamily... TODO + return True + + @classmethod + def add_font_data(cls, data): + numfonts = c_uint32() + gdi32.AddFontMemResourceEx(data, len(data), 0, byref(numfonts)) + +# --- GDI+ font rendering --- + +from pyglet.image.codecs.gdiplus import PixelFormat32bppARGB, gdiplus, Rect +from pyglet.image.codecs.gdiplus import ImageLockModeRead, BitmapData + +DriverStringOptionsCmapLookup = 1 +DriverStringOptionsRealizedAdvance = 4 +TextRenderingHintAntiAlias = 4 +TextRenderingHintAntiAliasGridFit = 3 + +StringFormatFlagsDirectionRightToLeft = 0x00000001 +StringFormatFlagsDirectionVertical = 0x00000002 +StringFormatFlagsNoFitBlackBox = 0x00000004 +StringFormatFlagsDisplayFormatControl = 0x00000020 +StringFormatFlagsNoFontFallback = 0x00000400 +StringFormatFlagsMeasureTrailingSpaces = 0x00000800 +StringFormatFlagsNoWrap = 0x00001000 +StringFormatFlagsLineLimit = 0x00002000 +StringFormatFlagsNoClip = 0x00004000 + +class Rectf(ctypes.Structure): + _fields_ = [ + ('x', ctypes.c_float), + ('y', ctypes.c_float), + ('width', ctypes.c_float), + ('height', ctypes.c_float), + ] + +class GDIPlusGlyphRenderer(Win32GlyphRenderer): + def _create_bitmap(self, width, height): + self._data = (ctypes.c_byte * (4 * width * height))() + self._bitmap = ctypes.c_void_p() + self._format = PixelFormat32bppARGB + gdiplus.GdipCreateBitmapFromScan0(width, height, width * 4, + self._format, self._data, ctypes.byref(self._bitmap)) + + self._graphics = ctypes.c_void_p() + gdiplus.GdipGetImageGraphicsContext(self._bitmap, + ctypes.byref(self._graphics)) + gdiplus.GdipSetPageUnit(self._graphics, UnitPixel) + + self._dc = user32.GetDC(0) + gdi32.SelectObject(self._dc, self.font.hfont) + + gdiplus.GdipSetTextRenderingHint(self._graphics, + TextRenderingHintAntiAliasGridFit) + + + self._brush = ctypes.c_void_p() + gdiplus.GdipCreateSolidFill(0xffffffff, ctypes.byref(self._brush)) + + + self._matrix = ctypes.c_void_p() + gdiplus.GdipCreateMatrix(ctypes.byref(self._matrix)) + + self._flags = (DriverStringOptionsCmapLookup | + DriverStringOptionsRealizedAdvance) + + self._rect = Rect(0, 0, width, height) + + self._bitmap_height = height + + def render(self, text): + ch = ctypes.create_unicode_buffer(text) + + # Layout rectangle; not clipped against so not terribly important. + width = 10000 + height = self._bitmap_height + rect = Rectf(0, self._bitmap_height + - self.font.ascent + self.font.descent, + width, height) + + # Set up GenericTypographic with 1 character measure range + generic = ctypes.c_void_p() + gdiplus.GdipStringFormatGetGenericTypographic(ctypes.byref(generic)) + format = ctypes.c_void_p() + gdiplus.GdipCloneStringFormat(generic, ctypes.byref(format)) + + # Measure advance + bbox = Rectf() + flags = (StringFormatFlagsMeasureTrailingSpaces | + StringFormatFlagsNoClip | + StringFormatFlagsNoFitBlackBox) + gdiplus.GdipSetStringFormatFlags(format, flags) + gdiplus.GdipMeasureString(self._graphics, ch, len(ch) - 1, + self.font._gdipfont, ctypes.byref(rect), format, + ctypes.byref(bbox), 0, 0) + + lsb = 0 + advance = int(math.ceil(bbox.width)) + + # XXX HACK HACK HACK + # Windows GDI+ is a filthy broken toy. No way to measure the bounding + # box of a string, or to obtain LSB. What a joke. + # + # For historical note, GDI cannot be used because it cannot composite + # into a bitmap with alpha. + # + # It looks like MS have abandoned GDI and GDI+ and are finally + # supporting accurate text measurement with alpha composition in .NET + # 2.0 (WinForms) via the TextRenderer class; this has no C interface + # though, so we're entirely screwed. + # + # So anyway, this hack bumps up the width if the font is italic; + # this compensates for some common fonts. It's also a stupid waste of + # texture memory. + + width = advance + if self.font.italic: + width += width // 2 + + # XXX END HACK HACK HACK + + # Draw character to bitmap + + gdiplus.GdipGraphicsClear(self._graphics, 0x00000000) + gdiplus.GdipDrawString(self._graphics, ch, len(ch) - 1, + self.font._gdipfont, ctypes.byref(rect), format, + self._brush) + gdiplus.GdipFlush(self._graphics, 1) + + bitmap_data = BitmapData() + gdiplus.GdipBitmapLockBits(self._bitmap, + byref(self._rect), ImageLockModeRead, self._format, + byref(bitmap_data)) + + # Create buffer for RawImage + buffer = create_string_buffer( + bitmap_data.Stride * bitmap_data.Height) + memmove(buffer, bitmap_data.Scan0, len(buffer)) + + # Unlock data + gdiplus.GdipBitmapUnlockBits(self._bitmap, byref(bitmap_data)) + + image = pyglet.image.ImageData(width, height, + 'BGRA', buffer, -bitmap_data.Stride) + + glyph = self.font.create_glyph(image) + glyph.set_bearings(-self.font.descent, lsb, advance) + + return glyph + +FontStyleBold = 1 +FontStyleItalic = 2 +UnitPixel = 2 +UnitPoint = 3 + +class GDIPlusFont(Win32Font): + glyph_renderer_class = GDIPlusGlyphRenderer + + _private_fonts = None + + _default_name = 'Arial' + + def __init__(self, name, size, bold=False, italic=False, dpi=None): + if not name: + name = self._default_name + super(GDIPlusFont, self).__init__(name, size, bold, italic, dpi) + + family = ctypes.c_void_p() + name = ctypes.c_wchar_p(name) + + # Look in private collection first: + if self._private_fonts: + gdiplus.GdipCreateFontFamilyFromName(name, + self._private_fonts, ctypes.byref(family)) + + # Then in system collection: + if not family: + gdiplus.GdipCreateFontFamilyFromName(name, + None, ctypes.byref(family)) + + # Nothing found, use default font. + if not family: + name = self._default_name + gdiplus.GdipCreateFontFamilyFromName(ctypes.c_wchar_p(name), + None, ctypes.byref(family)) + + if dpi is None: + unit = UnitPoint + self.dpi = 96 + else: + unit = UnitPixel + size = (size * dpi) / 72 + self.dpi = dpi + + style = 0 + if bold: + style |= FontStyleBold + if italic: + style |= FontStyleItalic + self.italic = italic # XXX needed for HACK HACK HACK + self._gdipfont = ctypes.c_void_p() + gdiplus.GdipCreateFont(family, ctypes.c_float(size), + style, unit, ctypes.byref(self._gdipfont)) + + @classmethod + def add_font_data(cls, data): + super(GDIPlusFont, cls).add_font_data(data) + + if not cls._private_fonts: + cls._private_fonts = ctypes.c_void_p() + gdiplus.GdipNewPrivateFontCollection( + ctypes.byref(cls._private_fonts)) + gdiplus.GdipPrivateAddMemoryFont(cls._private_fonts, data, len(data)) diff --git a/pyglet/gl/__init__.py b/pyglet/gl/__init__.py new file mode 100644 index 0000000..a21c94c --- /dev/null +++ b/pyglet/gl/__init__.py @@ -0,0 +1,507 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''OpenGL and GLU interface. + +This package imports all OpenGL, GLU and registered OpenGL extension +functions. Functions have identical signatures to their C counterparts. For +example:: + + from pyglet.gl import * + + # [...omitted: set up a GL context and framebuffer] + glBegin(GL_QUADS) + glVertex3f(0, 0, 0) + glVertex3f(0.1, 0.2, 0.3) + glVertex3f(0.1, 0.2, 0.3) + glEnd() + +OpenGL is documented in full at the `OpenGL Reference Pages`_. + +The `OpenGL Programming Guide`_ is a popular reference manual organised by +topic. The free online version documents only OpenGL 1.1. `Later editions`_ +cover more recent versions of the API and can be purchased from a book store. + +.. _OpenGL Reference Pages: http://www.opengl.org/documentation/red_book/ +.. _OpenGL Programming Guide: http://fly.cc.fer.hr/~unreal/theredbook/ +.. _Later editions: http://www.opengl.org/documentation/red_book/ + +The following subpackages are imported into this "mega" package already (and +so are available by importing ``pyglet.gl``): + +``pyglet.gl.gl`` + OpenGL +``pyglet.gl.glu`` + GLU +``pyglet.gl.gl.glext_arb`` + ARB registered OpenGL extension functions +``pyglet.gl.gl.glext_missing`` + ARB registered OpenGL extension functions not included in the ARB C header + +These subpackages are also available, but are not imported into this namespace +by default: + +``pyglet.gl.glext_nv`` + nVidia OpenGL extension functions +``pyglet.gl.agl`` + AGL (Mac OS X OpenGL context functions) +``pyglet.gl.glx`` + GLX (Linux OpenGL context functions) +``pyglet.gl.glxext_arb`` + ARB registered GLX extension functions +``pyglet.gl.glxext_nv`` + nvidia GLX extension functions +``pyglet.gl.wgl`` + WGL (Windows OpenGL context functions) +``pyglet.gl.wglext_arb`` + ARB registered WGL extension functions +``pyglet.gl.wglext_nv`` + nvidia WGL extension functions + +The information modules are provided for convenience, and are documented +below. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: __init__.py 2175 2008-08-15 04:29:16Z Alex.Holkner $' + +from pyglet.gl.lib import GLException +from pyglet.gl.gl import * +from pyglet.gl.glu import * +from pyglet.gl.glext_arb import * +from pyglet.gl.glext_missing import * +from pyglet.gl import gl_info + +import sys as _sys +_is_epydoc = hasattr(_sys, 'is_epydoc') and _sys.is_epydoc + +# List of contexts currently in use, so we can create new contexts that +# share objects with. Remember to remove from this list when context is +# destroyed. +_contexts = [] + +#: The active OpenGL context. +#: +#: You can change the current context by calling `Context.set_current`; do not +#: modify this global. +#: +#: :type: `Context` +#: +#: :since: pyglet 1.1 +current_context = None + +def get_current_context(): + '''Return the active OpenGL context. + + You can change the current context by calling `Context.set_current`. + + :deprecated: Use `current_context` + + :rtype: `Context` + :return: the context to which OpenGL commands are directed, or None + if there is no selected context. + ''' + return current_context + +class Config(object): + '''Graphics configuration. + + A GLConfig stores the preferences for OpenGL attributes such as the + number of auxilliary buffers, size of the colour and depth buffers, + double buffering, stencilling, multi- and super-sampling, and so on. + + Different platforms support a different set of attributes, so these + are set with a string key and a value which is integer or boolean. + + See also `pyglet.window.Screen.get_best_config` and + `pyglet.window.Screen.get_matching_configs`. + + :Ivariables: + `double_buffer` : bool + Specify the presence of a back-buffer for every color buffer. + `stereo` : bool + Specify the presence of separate left and right buffer sets. + `buffer_size` : int + Total bits per sample per color buffer. + `aux_buffers` : int + The number of auxilliary color buffers. + `sample_buffers` : int + The number of multisample buffers. + `samples` : int + The number of samples per pixel, or 0 if there are no multisample + buffers. + `red_size` : int + Bits per sample per buffer devoted to the red component. + `green_size` : int + Bits per sample per buffer devoted to the green component. + `blue_size` : int + Bits per sample per buffer devoted to the blue component. + `alpha_size` : int + Bits per sample per buffer devoted to the alpha component. + `depth_size` : int + Bits per sample in the depth buffer. + `stencil_size` : int + Bits per sample in the stencil buffer. + `accum_red_size` : int + Bits per pixel devoted to the red component in the accumulation + buffer. + `accum_green_size` : int + Bits per pixel devoted to the green component in the accumulation + buffer. + `accum_blue_size` : int + Bits per pixel devoted to the blue component in the accumulation + buffer. + `accum_alpha_size` : int + Bits per pixel devoted to the alpha component in the accumulation + buffer. + ''' + + _attribute_names = [ + 'double_buffer', + 'stereo', + 'buffer_size', + 'aux_buffers', + 'sample_buffers', + 'samples', + 'red_size', + 'green_size', + 'blue_size', + 'alpha_size', + 'depth_size', + 'stencil_size', + 'accum_red_size', + 'accum_green_size', + 'accum_blue_size', + 'accum_alpha_size', + ] + + def __init__(self, **kwargs): + '''Create a template config with the given attributes. + + Specify attributes as keyword arguments, for example:: + + template = Config(double_buffer=True) + + ''' + for name in self._attribute_names: + if name in kwargs: + setattr(self, name, kwargs[name]) + else: + setattr(self, name, None) + + def get_gl_attributes(self): + '''Return a list of attributes set on this config. + + :rtype: list of tuple (name, value) + :return: All attributes, with unset attributes having a value of + ``None``. + ''' + return [(name, getattr(self, name)) for name in self._attribute_names] + + def create_context(self, share): + '''Create a GL context that satisifies this configuration. + + :Parameters: + `share` : `Context` + If not None, a context with which to share objects with. + + :rtype: `Context` + :return: The new context. + ''' + raise ConfigException( + 'This config is not complete. Use Screen.get_matching_configs') + + def is_complete(self): + '''Determine if this config is complete and able to create a context. + + Configs created directly are not complete, they can only serve + as templates for retrieving a supported config from the system. + For example, `pyglet.window.Screen.get_matching_configs` returns + complete configs. + + :rtype: bool + :return: True if the config is complete and can create a context. + ''' + return False + + def __repr__(self): + import pprint + return '%s(%s)' % (self.__class__.__name__, + pprint.pformat(self.get_gl_attributes())) + + +class ObjectSpace(object): + def __init__(self): + # Textures and buffers scheduled for deletion the next time this + # object space is active. + self._doomed_textures = [] + self._doomed_buffers = [] + +class Context(object): + '''OpenGL context for drawing. + + Windows in pyglet each have their own GL context. This class boxes + the context in a platform-independent manner. Applications will have + no need to deal with contexts directly. + + :Ivariables: + `object_space` : `ObjectSpace` + An object which is shared between all contexts that share + GL objects. + + ''' + + #: Context share behaviour indicating that objects should not be + #: shared with existing contexts. + CONTEXT_SHARE_NONE = None + + #: Context share behaviour indicating that objects are shared with + #: the most recently created context (the default). + CONTEXT_SHARE_EXISTING = 1 + + # Used for error checking, True if currently within a glBegin/End block. + # Ignored if error checking is disabled. + _gl_begin = False + + # gl_info.GLInfo instance, filled in on first set_current + _info = None + + # List of (attr, check) for each driver/device-specific workaround that is + # implemented. The `attr` attribute on this context is set to the result + # of evaluating `check(gl_info)` the first time this context is used. + _workaround_checks = [ + # GDI Generic renderer on Windows does not implement + # GL_UNPACK_ROW_LENGTH correctly. + ('_workaround_unpack_row_length', + lambda info: info.get_renderer() == 'GDI Generic'), + + # Reportedly segfaults in text_input.py example. + ('_workaround_vbo', + lambda info: info.get_renderer() == 'ATI Radeon X1600 OpenGL Engine'), + + # Some ATI cards on OS X start drawing from a VBO before it's written + # to. In these cases pyglet needs to call glFinish() to flush the + # pipeline after updating a buffer but before rendering. + ('_workaround_vbo_finish', + lambda info: ('ATI' in info.get_renderer() and + info.have_version(1, 5) and + _sys.platform == 'darwin')), + ] + + def __init__(self, context_share=None): + self.window = None + _contexts.append(self) + if context_share: + assert context_share in _contexts + self.object_space = context_share.object_space + else: + self.object_space = ObjectSpace() + + def __repr__(self): + return '%s()' % self.__class__.__name__ + + def set_current(self): + global current_context + assert self in _contexts + current_context = self + + # Implement workarounds + if not self._info: + self._info = gl_info.GLInfo() + self._info.set_active_context() + for attr, check in self._workaround_checks: + setattr(self, attr, check(self._info)) + + # Release textures on this context scheduled for deletion + if self.object_space._doomed_textures: + textures = self.object_space._doomed_textures + textures = (GLuint * len(textures))(*textures) + glDeleteTextures(len(textures), textures) + self.object_space._doomed_textures = [] + + # Release buffers on this context scheduled for deletion + if self.object_space._doomed_buffers: + buffers = self.object_space._doomed_buffers + buffers = (GLuint * len(buffers))(*buffers) + glDeleteBuffers(len(buffers), buffers) + self.object_space._doomed_buffers = [] + + def destroy(self): + '''Release the context. + + The context will not be useable after being destroyed. Each platform + has its own convention for releasing the context and the buffer(s) + that depend on it in the correct order; this should never be called + by an application. + ''' + global current_context + if current_context is self: + current_context = None + gl_info.remove_active_context() + + # Switch back to shadow context. + if _shadow_window is not None: + _shadow_window.switch_to() + _contexts.remove(self) + + def delete_texture(self, texture_id): + '''Safely delete a texture belonging to this context. + + Usually, the texture is released immediately using + ``glDeleteTextures``, however if another context that does not share + this context's object space is currently active, the deletion will + be deferred until an appropriate context is activated. + + :Parameters: + `texture_id` : int + The OpenGL name of the texture to delete. + + ''' + if self.object_space is current_context.object_space: + id = GLuint(texture_id) + glDeleteTextures(1, id) + else: + self.object_space._doomed_textures.append(texture_id) + + def delete_buffer(self, buffer_id): + '''Safely delete a buffer object belonging to this context. + + This method behaves similarly to `delete_texture`, though for + ``glDeleteBuffers`` instead of ``glDeleteTextures``. + + :Parameters: + `buffer_id` : int + The OpenGL name of the buffer to delete. + + :since: pyglet 1.1 + ''' + if self.object_space is current_context.object_space and False: + id = GLuint(buffer_id) + glDeleteBuffers(1, id) + else: + self.object_space._doomed_buffers.append(buffer_id) + +class ContextException(Exception): + pass + +class ConfigException(Exception): + pass + +import pyglet as _pyglet + +if _pyglet.options['debug_texture']: + _debug_texture_total = 0 + _debug_texture_sizes = {} + _debug_texture = None + + def _debug_texture_alloc(texture, size): + global _debug_texture_total + + _debug_texture_sizes[texture] = size + _debug_texture_total += size + + print '%d (+%d)' % (_debug_texture_total, size) + + def _debug_texture_dealloc(texture): + global _debug_texture_total + + size = _debug_texture_sizes[texture] + del _debug_texture_sizes[texture] + _debug_texture_total -= size + + print '%d (-%d)' % (_debug_texture_total, size) + + _glBindTexture = glBindTexture + def glBindTexture(target, texture): + global _debug_texture + _debug_texture = texture + return _glBindTexture(target, texture) + + _glTexImage2D = glTexImage2D + def glTexImage2D(target, level, internalformat, width, height, border, + format, type, pixels): + try: + _debug_texture_dealloc(_debug_texture) + except KeyError: + pass + + if internalformat in (1, GL_ALPHA, GL_INTENSITY, GL_LUMINANCE): + depth = 1 + elif internalformat in (2, GL_RGB16, GL_RGBA16): + depth = 2 + elif internalformat in (3, GL_RGB): + depth = 3 + else: + depth = 4 # Pretty crap assumption + size = (width + 2 * border) * (height + 2 * border) * depth + _debug_texture_alloc(_debug_texture, size) + + return _glTexImage2D(target, level, internalformat, width, height, + border, format, type, pixels) + + _glDeleteTextures = glDeleteTextures + def glDeleteTextures(n, textures): + if not hasattr(textures, '__len__'): + _debug_texture_dealloc(textures.value) + else: + for i in range(n): + _debug_texture_dealloc(textures[i].value) + + return _glDeleteTextures(n, textures) + +def _create_shadow_window(): + global _shadow_window + + import pyglet + if not pyglet.options['shadow_window'] or _is_epydoc: + return + + from pyglet.window import Window + _shadow_window = Window(width=1, height=1, visible=False) + _shadow_window.switch_to() + + from pyglet import app + app.windows.remove(_shadow_window) + + +_shadow_window = None + +# Import pyglet.window now if it isn't currently being imported (this creates +# the shadow window). +if (not _is_epydoc and + 'pyglet.window' not in _sys.modules and + _pyglet.options['shadow_window']): + # trickery is for circular import + _pyglet.gl = _sys.modules[__name__] + import pyglet.window diff --git a/pyglet/gl/agl.py b/pyglet/gl/agl.py new file mode 100644 index 0000000..517e2aa --- /dev/null +++ b/pyglet/gl/agl.py @@ -0,0 +1,452 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +'''Wrapper for /System/Library/Frameworks/AGL.framework/Headers/agl.h + +Generated by tools/gengl.py. +Do not modify this file. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: gengl.py 601 2007-02-04 05:36:59Z Alex.Holkner $' + +from ctypes import * +from pyglet.gl.lib import link_AGL as _link_function +from pyglet.gl.lib import c_ptrdiff_t + +if not _link_function: + raise ImportError('AGL framework is not available.') + +# BEGIN GENERATED CONTENT (do not edit below this line) + +# This content is generated by tools/gengl.py. +# Wrapper for /System/Library/Frameworks/AGL.framework/Headers/agl.h + + +AGL_VERSION_2_0 = 1 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:41 +class struct_GDevice(Structure): + __slots__ = [ + ] +struct_GDevice._fields_ = [ + ('_opaque_struct', c_int) +] + +GDevice = struct_GDevice # /System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Quickdraw.h:1347 +GDPtr = POINTER(GDevice) # /System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Quickdraw.h:1348 +GDHandle = POINTER(GDPtr) # /System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Quickdraw.h:1349 +AGLDevice = GDHandle # /System/Library/Frameworks/AGL.framework/Headers/agl.h:46 +class struct_OpaqueGrafPtr(Structure): + __slots__ = [ + ] +struct_OpaqueGrafPtr._fields_ = [ + ('_opaque_struct', c_int) +] + +GrafPtr = POINTER(struct_OpaqueGrafPtr) # /System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Quickdraw.h:1009 +CGrafPtr = GrafPtr # /System/Library/Frameworks/ApplicationServices.framework/Frameworks/QD.framework/Headers/Quickdraw.h:1392 +AGLDrawable = CGrafPtr # /System/Library/Frameworks/AGL.framework/Headers/agl.h:51 +class struct___AGLRendererInfoRec(Structure): + __slots__ = [ + ] +struct___AGLRendererInfoRec._fields_ = [ + ('_opaque_struct', c_int) +] + +AGLRendererInfo = POINTER(struct___AGLRendererInfoRec) # /System/Library/Frameworks/AGL.framework/Headers/agl.h:56 +class struct___AGLPixelFormatRec(Structure): + __slots__ = [ + ] +struct___AGLPixelFormatRec._fields_ = [ + ('_opaque_struct', c_int) +] + +AGLPixelFormat = POINTER(struct___AGLPixelFormatRec) # /System/Library/Frameworks/AGL.framework/Headers/agl.h:57 +class struct___AGLContextRec(Structure): + __slots__ = [ + ] +struct___AGLContextRec._fields_ = [ + ('_opaque_struct', c_int) +] + +AGLContext = POINTER(struct___AGLContextRec) # /System/Library/Frameworks/AGL.framework/Headers/agl.h:58 +class struct___AGLPBufferRec(Structure): + __slots__ = [ + ] +struct___AGLPBufferRec._fields_ = [ + ('_opaque_struct', c_int) +] + +AGLPbuffer = POINTER(struct___AGLPBufferRec) # /System/Library/Frameworks/AGL.framework/Headers/agl.h:59 +AGL_NONE = 0 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:66 +AGL_ALL_RENDERERS = 1 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:67 +AGL_BUFFER_SIZE = 2 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:68 +AGL_LEVEL = 3 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:69 +AGL_RGBA = 4 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:70 +AGL_DOUBLEBUFFER = 5 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:71 +AGL_STEREO = 6 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:72 +AGL_AUX_BUFFERS = 7 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:73 +AGL_RED_SIZE = 8 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:74 +AGL_GREEN_SIZE = 9 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:75 +AGL_BLUE_SIZE = 10 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:76 +AGL_ALPHA_SIZE = 11 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:77 +AGL_DEPTH_SIZE = 12 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:78 +AGL_STENCIL_SIZE = 13 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:79 +AGL_ACCUM_RED_SIZE = 14 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:80 +AGL_ACCUM_GREEN_SIZE = 15 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:81 +AGL_ACCUM_BLUE_SIZE = 16 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:82 +AGL_ACCUM_ALPHA_SIZE = 17 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:83 +AGL_PIXEL_SIZE = 50 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:88 +AGL_MINIMUM_POLICY = 51 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:89 +AGL_MAXIMUM_POLICY = 52 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:90 +AGL_OFFSCREEN = 53 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:91 +AGL_FULLSCREEN = 54 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:92 +AGL_SAMPLE_BUFFERS_ARB = 55 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:93 +AGL_SAMPLES_ARB = 56 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:94 +AGL_AUX_DEPTH_STENCIL = 57 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:95 +AGL_COLOR_FLOAT = 58 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:96 +AGL_MULTISAMPLE = 59 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:97 +AGL_SUPERSAMPLE = 60 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:98 +AGL_SAMPLE_ALPHA = 61 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:99 +AGL_RENDERER_ID = 70 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:104 +AGL_SINGLE_RENDERER = 71 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:105 +AGL_NO_RECOVERY = 72 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:106 +AGL_ACCELERATED = 73 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:107 +AGL_CLOSEST_POLICY = 74 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:108 +AGL_ROBUST = 75 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:109 +AGL_BACKING_STORE = 76 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:110 +AGL_MP_SAFE = 78 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:111 +AGL_WINDOW = 80 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:113 +AGL_MULTISCREEN = 81 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:114 +AGL_VIRTUAL_SCREEN = 82 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:115 +AGL_COMPLIANT = 83 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:116 +AGL_PBUFFER = 90 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:118 +AGL_BUFFER_MODES = 100 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:135 +AGL_MIN_LEVEL = 101 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:136 +AGL_MAX_LEVEL = 102 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:137 +AGL_COLOR_MODES = 103 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:138 +AGL_ACCUM_MODES = 104 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:139 +AGL_DEPTH_MODES = 105 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:140 +AGL_STENCIL_MODES = 106 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:141 +AGL_MAX_AUX_BUFFERS = 107 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:142 +AGL_VIDEO_MEMORY = 120 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:143 +AGL_TEXTURE_MEMORY = 121 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:144 +AGL_RENDERER_COUNT = 128 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:145 +AGL_SWAP_RECT = 200 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:150 +AGL_BUFFER_RECT = 202 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:151 +AGL_SWAP_LIMIT = 203 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:152 +AGL_COLORMAP_TRACKING = 210 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:153 +AGL_COLORMAP_ENTRY = 212 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:154 +AGL_RASTERIZATION = 220 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:155 +AGL_SWAP_INTERVAL = 222 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:156 +AGL_STATE_VALIDATION = 230 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:157 +AGL_BUFFER_NAME = 231 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:158 +AGL_ORDER_CONTEXT_TO_FRONT = 232 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:159 +AGL_CONTEXT_SURFACE_ID = 233 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:160 +AGL_CONTEXT_DISPLAY_ID = 234 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:161 +AGL_SURFACE_ORDER = 235 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:162 +AGL_SURFACE_OPACITY = 236 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:163 +AGL_CLIP_REGION = 254 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:164 +AGL_FS_CAPTURE_SINGLE = 255 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:165 +AGL_SURFACE_BACKING_SIZE = 304 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:166 +AGL_ENABLE_SURFACE_BACKING_SIZE = 305 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:167 +AGL_SURFACE_VOLATILE = 306 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:168 +AGL_FORMAT_CACHE_SIZE = 501 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:172 +AGL_CLEAR_FORMAT_CACHE = 502 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:173 +AGL_RETAIN_RENDERERS = 503 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:174 +AGL_MONOSCOPIC_BIT = 1 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:177 +AGL_STEREOSCOPIC_BIT = 2 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:178 +AGL_SINGLEBUFFER_BIT = 4 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:179 +AGL_DOUBLEBUFFER_BIT = 8 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:180 +AGL_0_BIT = 1 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:183 +AGL_1_BIT = 2 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:184 +AGL_2_BIT = 4 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:185 +AGL_3_BIT = 8 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:186 +AGL_4_BIT = 16 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:187 +AGL_5_BIT = 32 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:188 +AGL_6_BIT = 64 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:189 +AGL_8_BIT = 128 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:190 +AGL_10_BIT = 256 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:191 +AGL_12_BIT = 512 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:192 +AGL_16_BIT = 1024 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:193 +AGL_24_BIT = 2048 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:194 +AGL_32_BIT = 4096 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:195 +AGL_48_BIT = 8192 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:196 +AGL_64_BIT = 16384 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:197 +AGL_96_BIT = 32768 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:198 +AGL_128_BIT = 65536 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:199 +AGL_RGB8_BIT = 1 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:202 +AGL_RGB8_A8_BIT = 2 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:203 +AGL_BGR233_BIT = 4 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:204 +AGL_BGR233_A8_BIT = 8 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:205 +AGL_RGB332_BIT = 16 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:206 +AGL_RGB332_A8_BIT = 32 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:207 +AGL_RGB444_BIT = 64 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:208 +AGL_ARGB4444_BIT = 128 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:209 +AGL_RGB444_A8_BIT = 256 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:210 +AGL_RGB555_BIT = 512 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:211 +AGL_ARGB1555_BIT = 1024 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:212 +AGL_RGB555_A8_BIT = 2048 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:213 +AGL_RGB565_BIT = 4096 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:214 +AGL_RGB565_A8_BIT = 8192 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:215 +AGL_RGB888_BIT = 16384 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:216 +AGL_ARGB8888_BIT = 32768 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:217 +AGL_RGB888_A8_BIT = 65536 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:218 +AGL_RGB101010_BIT = 131072 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:219 +AGL_ARGB2101010_BIT = 262144 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:220 +AGL_RGB101010_A8_BIT = 524288 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:221 +AGL_RGB121212_BIT = 1048576 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:222 +AGL_ARGB12121212_BIT = 2097152 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:223 +AGL_RGB161616_BIT = 4194304 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:224 +AGL_ARGB16161616_BIT = 8388608 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:225 +AGL_INDEX8_BIT = 536870912 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:226 +AGL_INDEX16_BIT = 1073741824 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:227 +AGL_RGBFLOAT64_BIT = 16777216 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:228 +AGL_RGBAFLOAT64_BIT = 33554432 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:229 +AGL_RGBFLOAT128_BIT = 67108864 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:230 +AGL_RGBAFLOAT128_BIT = 134217728 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:231 +AGL_RGBFLOAT256_BIT = 268435456 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:232 +AGL_RGBAFLOAT256_BIT = 536870912 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:233 +AGL_NO_ERROR = 0 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:238 +AGL_BAD_ATTRIBUTE = 10000 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:240 +AGL_BAD_PROPERTY = 10001 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:241 +AGL_BAD_PIXELFMT = 10002 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:242 +AGL_BAD_RENDINFO = 10003 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:243 +AGL_BAD_CONTEXT = 10004 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:244 +AGL_BAD_DRAWABLE = 10005 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:245 +AGL_BAD_GDEV = 10006 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:246 +AGL_BAD_STATE = 10007 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:247 +AGL_BAD_VALUE = 10008 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:248 +AGL_BAD_MATCH = 10009 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:249 +AGL_BAD_ENUM = 10010 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:250 +AGL_BAD_OFFSCREEN = 10011 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:251 +AGL_BAD_FULLSCREEN = 10012 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:252 +AGL_BAD_WINDOW = 10013 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:253 +AGL_BAD_POINTER = 10014 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:254 +AGL_BAD_MODULE = 10015 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:255 +AGL_BAD_ALLOC = 10016 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:256 +AGL_BAD_CONNECTION = 10017 # /System/Library/Frameworks/AGL.framework/Headers/agl.h:257 +GLint = c_long # /System/Library/Frameworks/OpenGL.framework/Headers/gl.h:47 +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:264 +aglChoosePixelFormat = _link_function('aglChoosePixelFormat', AGLPixelFormat, [POINTER(AGLDevice), GLint, POINTER(GLint)], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:265 +aglDestroyPixelFormat = _link_function('aglDestroyPixelFormat', None, [AGLPixelFormat], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:266 +aglNextPixelFormat = _link_function('aglNextPixelFormat', AGLPixelFormat, [AGLPixelFormat], None) + +GLboolean = c_ubyte # /System/Library/Frameworks/OpenGL.framework/Headers/gl.h:43 +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:267 +aglDescribePixelFormat = _link_function('aglDescribePixelFormat', GLboolean, [AGLPixelFormat, GLint, POINTER(GLint)], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:268 +aglDevicesOfPixelFormat = _link_function('aglDevicesOfPixelFormat', POINTER(AGLDevice), [AGLPixelFormat, POINTER(GLint)], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:273 +aglQueryRendererInfo = _link_function('aglQueryRendererInfo', AGLRendererInfo, [POINTER(AGLDevice), GLint], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:274 +aglDestroyRendererInfo = _link_function('aglDestroyRendererInfo', None, [AGLRendererInfo], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:275 +aglNextRendererInfo = _link_function('aglNextRendererInfo', AGLRendererInfo, [AGLRendererInfo], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:276 +aglDescribeRenderer = _link_function('aglDescribeRenderer', GLboolean, [AGLRendererInfo, GLint, POINTER(GLint)], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:281 +aglCreateContext = _link_function('aglCreateContext', AGLContext, [AGLPixelFormat, AGLContext], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:282 +aglDestroyContext = _link_function('aglDestroyContext', GLboolean, [AGLContext], None) + +GLuint = c_ulong # /System/Library/Frameworks/OpenGL.framework/Headers/gl.h:51 +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:283 +aglCopyContext = _link_function('aglCopyContext', GLboolean, [AGLContext, AGLContext, GLuint], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:284 +aglUpdateContext = _link_function('aglUpdateContext', GLboolean, [AGLContext], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:289 +aglSetCurrentContext = _link_function('aglSetCurrentContext', GLboolean, [AGLContext], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:290 +aglGetCurrentContext = _link_function('aglGetCurrentContext', AGLContext, [], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:295 +aglSetDrawable = _link_function('aglSetDrawable', GLboolean, [AGLContext, AGLDrawable], None) + +GLsizei = c_long # /System/Library/Frameworks/OpenGL.framework/Headers/gl.h:48 +GLvoid = None # /System/Library/Frameworks/OpenGL.framework/Headers/gl.h:56 +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:296 +aglSetOffScreen = _link_function('aglSetOffScreen', GLboolean, [AGLContext, GLsizei, GLsizei, GLsizei, POINTER(GLvoid)], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:297 +aglSetFullScreen = _link_function('aglSetFullScreen', GLboolean, [AGLContext, GLsizei, GLsizei, GLsizei, GLint], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:298 +aglGetDrawable = _link_function('aglGetDrawable', AGLDrawable, [AGLContext], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:303 +aglSetVirtualScreen = _link_function('aglSetVirtualScreen', GLboolean, [AGLContext, GLint], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:304 +aglGetVirtualScreen = _link_function('aglGetVirtualScreen', GLint, [AGLContext], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:309 +aglGetVersion = _link_function('aglGetVersion', None, [POINTER(GLint), POINTER(GLint)], None) + +GLenum = c_ulong # /System/Library/Frameworks/OpenGL.framework/Headers/gl.h:42 +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:314 +aglConfigure = _link_function('aglConfigure', GLboolean, [GLenum, GLuint], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:319 +aglSwapBuffers = _link_function('aglSwapBuffers', None, [AGLContext], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:324 +aglEnable = _link_function('aglEnable', GLboolean, [AGLContext, GLenum], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:325 +aglDisable = _link_function('aglDisable', GLboolean, [AGLContext, GLenum], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:326 +aglIsEnabled = _link_function('aglIsEnabled', GLboolean, [AGLContext, GLenum], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:327 +aglSetInteger = _link_function('aglSetInteger', GLboolean, [AGLContext, GLenum, POINTER(GLint)], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:328 +aglGetInteger = _link_function('aglGetInteger', GLboolean, [AGLContext, GLenum, POINTER(GLint)], None) + +Style = c_ubyte # /System/Library/Frameworks/CoreServices.framework/Headers/../Frameworks/CarbonCore.framework/Headers/MacTypes.h:524 +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:333 +aglUseFont = _link_function('aglUseFont', GLboolean, [AGLContext, GLint, Style, GLint, GLint, GLint, GLint], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:338 +aglGetError = _link_function('aglGetError', GLenum, [], None) + +GLubyte = c_ubyte # /System/Library/Frameworks/OpenGL.framework/Headers/gl.h:49 +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:339 +aglErrorString = _link_function('aglErrorString', POINTER(GLubyte), [GLenum], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:344 +aglResetLibrary = _link_function('aglResetLibrary', None, [], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:349 +aglSurfaceTexture = _link_function('aglSurfaceTexture', None, [AGLContext, GLenum, GLenum, AGLContext], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:354 +aglCreatePBuffer = _link_function('aglCreatePBuffer', GLboolean, [GLint, GLint, GLenum, GLenum, c_long, POINTER(AGLPbuffer)], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:355 +aglDestroyPBuffer = _link_function('aglDestroyPBuffer', GLboolean, [AGLPbuffer], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:356 +aglDescribePBuffer = _link_function('aglDescribePBuffer', GLboolean, [AGLPbuffer, POINTER(GLint), POINTER(GLint), POINTER(GLenum), POINTER(GLenum), POINTER(GLint)], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:357 +aglTexImagePBuffer = _link_function('aglTexImagePBuffer', GLboolean, [AGLContext, AGLPbuffer, GLint], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:362 +aglSetPBuffer = _link_function('aglSetPBuffer', GLboolean, [AGLContext, AGLPbuffer, GLint, GLint, GLint], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:363 +aglGetPBuffer = _link_function('aglGetPBuffer', GLboolean, [AGLContext, POINTER(AGLPbuffer), POINTER(GLint), POINTER(GLint), POINTER(GLint)], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:368 +aglGetCGLContext = _link_function('aglGetCGLContext', GLboolean, [AGLContext, POINTER(POINTER(None))], None) + +# /System/Library/Frameworks/AGL.framework/Headers/agl.h:369 +aglGetCGLPixelFormat = _link_function('aglGetCGLPixelFormat', GLboolean, [AGLPixelFormat, POINTER(POINTER(None))], None) + + +__all__ = ['AGL_VERSION_2_0', 'AGLDevice', 'AGLDrawable', 'AGLRendererInfo', +'AGLPixelFormat', 'AGLContext', 'AGLPbuffer', 'AGL_NONE', 'AGL_ALL_RENDERERS', +'AGL_BUFFER_SIZE', 'AGL_LEVEL', 'AGL_RGBA', 'AGL_DOUBLEBUFFER', 'AGL_STEREO', +'AGL_AUX_BUFFERS', 'AGL_RED_SIZE', 'AGL_GREEN_SIZE', 'AGL_BLUE_SIZE', +'AGL_ALPHA_SIZE', 'AGL_DEPTH_SIZE', 'AGL_STENCIL_SIZE', 'AGL_ACCUM_RED_SIZE', +'AGL_ACCUM_GREEN_SIZE', 'AGL_ACCUM_BLUE_SIZE', 'AGL_ACCUM_ALPHA_SIZE', +'AGL_PIXEL_SIZE', 'AGL_MINIMUM_POLICY', 'AGL_MAXIMUM_POLICY', 'AGL_OFFSCREEN', +'AGL_FULLSCREEN', 'AGL_SAMPLE_BUFFERS_ARB', 'AGL_SAMPLES_ARB', +'AGL_AUX_DEPTH_STENCIL', 'AGL_COLOR_FLOAT', 'AGL_MULTISAMPLE', +'AGL_SUPERSAMPLE', 'AGL_SAMPLE_ALPHA', 'AGL_RENDERER_ID', +'AGL_SINGLE_RENDERER', 'AGL_NO_RECOVERY', 'AGL_ACCELERATED', +'AGL_CLOSEST_POLICY', 'AGL_ROBUST', 'AGL_BACKING_STORE', 'AGL_MP_SAFE', +'AGL_WINDOW', 'AGL_MULTISCREEN', 'AGL_VIRTUAL_SCREEN', 'AGL_COMPLIANT', +'AGL_PBUFFER', 'AGL_BUFFER_MODES', 'AGL_MIN_LEVEL', 'AGL_MAX_LEVEL', +'AGL_COLOR_MODES', 'AGL_ACCUM_MODES', 'AGL_DEPTH_MODES', 'AGL_STENCIL_MODES', +'AGL_MAX_AUX_BUFFERS', 'AGL_VIDEO_MEMORY', 'AGL_TEXTURE_MEMORY', +'AGL_RENDERER_COUNT', 'AGL_SWAP_RECT', 'AGL_BUFFER_RECT', 'AGL_SWAP_LIMIT', +'AGL_COLORMAP_TRACKING', 'AGL_COLORMAP_ENTRY', 'AGL_RASTERIZATION', +'AGL_SWAP_INTERVAL', 'AGL_STATE_VALIDATION', 'AGL_BUFFER_NAME', +'AGL_ORDER_CONTEXT_TO_FRONT', 'AGL_CONTEXT_SURFACE_ID', +'AGL_CONTEXT_DISPLAY_ID', 'AGL_SURFACE_ORDER', 'AGL_SURFACE_OPACITY', +'AGL_CLIP_REGION', 'AGL_FS_CAPTURE_SINGLE', 'AGL_SURFACE_BACKING_SIZE', +'AGL_ENABLE_SURFACE_BACKING_SIZE', 'AGL_SURFACE_VOLATILE', +'AGL_FORMAT_CACHE_SIZE', 'AGL_CLEAR_FORMAT_CACHE', 'AGL_RETAIN_RENDERERS', +'AGL_MONOSCOPIC_BIT', 'AGL_STEREOSCOPIC_BIT', 'AGL_SINGLEBUFFER_BIT', +'AGL_DOUBLEBUFFER_BIT', 'AGL_0_BIT', 'AGL_1_BIT', 'AGL_2_BIT', 'AGL_3_BIT', +'AGL_4_BIT', 'AGL_5_BIT', 'AGL_6_BIT', 'AGL_8_BIT', 'AGL_10_BIT', +'AGL_12_BIT', 'AGL_16_BIT', 'AGL_24_BIT', 'AGL_32_BIT', 'AGL_48_BIT', +'AGL_64_BIT', 'AGL_96_BIT', 'AGL_128_BIT', 'AGL_RGB8_BIT', 'AGL_RGB8_A8_BIT', +'AGL_BGR233_BIT', 'AGL_BGR233_A8_BIT', 'AGL_RGB332_BIT', 'AGL_RGB332_A8_BIT', +'AGL_RGB444_BIT', 'AGL_ARGB4444_BIT', 'AGL_RGB444_A8_BIT', 'AGL_RGB555_BIT', +'AGL_ARGB1555_BIT', 'AGL_RGB555_A8_BIT', 'AGL_RGB565_BIT', +'AGL_RGB565_A8_BIT', 'AGL_RGB888_BIT', 'AGL_ARGB8888_BIT', +'AGL_RGB888_A8_BIT', 'AGL_RGB101010_BIT', 'AGL_ARGB2101010_BIT', +'AGL_RGB101010_A8_BIT', 'AGL_RGB121212_BIT', 'AGL_ARGB12121212_BIT', +'AGL_RGB161616_BIT', 'AGL_ARGB16161616_BIT', 'AGL_INDEX8_BIT', +'AGL_INDEX16_BIT', 'AGL_RGBFLOAT64_BIT', 'AGL_RGBAFLOAT64_BIT', +'AGL_RGBFLOAT128_BIT', 'AGL_RGBAFLOAT128_BIT', 'AGL_RGBFLOAT256_BIT', +'AGL_RGBAFLOAT256_BIT', 'AGL_NO_ERROR', 'AGL_BAD_ATTRIBUTE', +'AGL_BAD_PROPERTY', 'AGL_BAD_PIXELFMT', 'AGL_BAD_RENDINFO', 'AGL_BAD_CONTEXT', +'AGL_BAD_DRAWABLE', 'AGL_BAD_GDEV', 'AGL_BAD_STATE', 'AGL_BAD_VALUE', +'AGL_BAD_MATCH', 'AGL_BAD_ENUM', 'AGL_BAD_OFFSCREEN', 'AGL_BAD_FULLSCREEN', +'AGL_BAD_WINDOW', 'AGL_BAD_POINTER', 'AGL_BAD_MODULE', 'AGL_BAD_ALLOC', +'AGL_BAD_CONNECTION', 'aglChoosePixelFormat', 'aglDestroyPixelFormat', +'aglNextPixelFormat', 'aglDescribePixelFormat', 'aglDevicesOfPixelFormat', +'aglQueryRendererInfo', 'aglDestroyRendererInfo', 'aglNextRendererInfo', +'aglDescribeRenderer', 'aglCreateContext', 'aglDestroyContext', +'aglCopyContext', 'aglUpdateContext', 'aglSetCurrentContext', +'aglGetCurrentContext', 'aglSetDrawable', 'aglSetOffScreen', +'aglSetFullScreen', 'aglGetDrawable', 'aglSetVirtualScreen', +'aglGetVirtualScreen', 'aglGetVersion', 'aglConfigure', 'aglSwapBuffers', +'aglEnable', 'aglDisable', 'aglIsEnabled', 'aglSetInteger', 'aglGetInteger', +'aglUseFont', 'aglGetError', 'aglErrorString', 'aglResetLibrary', +'aglSurfaceTexture', 'aglCreatePBuffer', 'aglDestroyPBuffer', +'aglDescribePBuffer', 'aglTexImagePBuffer', 'aglSetPBuffer', 'aglGetPBuffer', +'aglGetCGLContext', 'aglGetCGLPixelFormat'] +# END GENERATED CONTENT (do not edit above this line) + + + diff --git a/pyglet/gl/gl.py b/pyglet/gl/gl.py new file mode 100644 index 0000000..4b0bd99 --- /dev/null +++ b/pyglet/gl/gl.py @@ -0,0 +1,2156 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +'''Wrapper for /usr/include/GL/gl.h + +Generated by tools/gengl.py. +Do not modify this file. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: gl.py 1579 2008-01-15 14:47:19Z Alex.Holkner $' + +from ctypes import * +from pyglet.gl.lib import link_GL as _link_function +from pyglet.gl.lib import c_ptrdiff_t + +# BEGIN GENERATED CONTENT (do not edit below this line) + +# This content is generated by tools/gengl.py. +# Wrapper for /usr/include/GL/gl.h + + +GLenum = c_uint # /usr/include/GL/gl.h:53 +GLboolean = c_ubyte # /usr/include/GL/gl.h:54 +GLbitfield = c_uint # /usr/include/GL/gl.h:55 +GLbyte = c_char # /usr/include/GL/gl.h:56 +GLshort = c_short # /usr/include/GL/gl.h:57 +GLint = c_int # /usr/include/GL/gl.h:58 +GLsizei = c_int # /usr/include/GL/gl.h:59 +GLubyte = c_ubyte # /usr/include/GL/gl.h:60 +GLushort = c_ushort # /usr/include/GL/gl.h:61 +GLuint = c_uint # /usr/include/GL/gl.h:62 +GLfloat = c_float # /usr/include/GL/gl.h:63 +GLclampf = c_float # /usr/include/GL/gl.h:64 +GLdouble = c_double # /usr/include/GL/gl.h:65 +GLclampd = c_double # /usr/include/GL/gl.h:66 +GLvoid = None # /usr/include/GL/gl.h:67 +GL_VERSION_1_1 = 1 # /usr/include/GL/gl.h:77 +GL_CURRENT_BIT = 1 # /usr/include/GL/gl.h:80 +GL_POINT_BIT = 2 # /usr/include/GL/gl.h:81 +GL_LINE_BIT = 4 # /usr/include/GL/gl.h:82 +GL_POLYGON_BIT = 8 # /usr/include/GL/gl.h:83 +GL_POLYGON_STIPPLE_BIT = 16 # /usr/include/GL/gl.h:84 +GL_PIXEL_MODE_BIT = 32 # /usr/include/GL/gl.h:85 +GL_LIGHTING_BIT = 64 # /usr/include/GL/gl.h:86 +GL_FOG_BIT = 128 # /usr/include/GL/gl.h:87 +GL_DEPTH_BUFFER_BIT = 256 # /usr/include/GL/gl.h:88 +GL_ACCUM_BUFFER_BIT = 512 # /usr/include/GL/gl.h:89 +GL_STENCIL_BUFFER_BIT = 1024 # /usr/include/GL/gl.h:90 +GL_VIEWPORT_BIT = 2048 # /usr/include/GL/gl.h:91 +GL_TRANSFORM_BIT = 4096 # /usr/include/GL/gl.h:92 +GL_ENABLE_BIT = 8192 # /usr/include/GL/gl.h:93 +GL_COLOR_BUFFER_BIT = 16384 # /usr/include/GL/gl.h:94 +GL_HINT_BIT = 32768 # /usr/include/GL/gl.h:95 +GL_EVAL_BIT = 65536 # /usr/include/GL/gl.h:96 +GL_LIST_BIT = 131072 # /usr/include/GL/gl.h:97 +GL_TEXTURE_BIT = 262144 # /usr/include/GL/gl.h:98 +GL_SCISSOR_BIT = 524288 # /usr/include/GL/gl.h:99 +GL_ALL_ATTRIB_BITS = 4294967295 # /usr/include/GL/gl.h:100 +GL_CLIENT_PIXEL_STORE_BIT = 1 # /usr/include/GL/gl.h:109 +GL_CLIENT_VERTEX_ARRAY_BIT = 2 # /usr/include/GL/gl.h:110 +GL_CLIENT_ALL_ATTRIB_BITS = 4294967295 # /usr/include/GL/gl.h:111 +GL_FALSE = 0 # /usr/include/GL/gl.h:114 +GL_TRUE = 1 # /usr/include/GL/gl.h:115 +GL_POINTS = 0 # /usr/include/GL/gl.h:118 +GL_LINES = 1 # /usr/include/GL/gl.h:119 +GL_LINE_LOOP = 2 # /usr/include/GL/gl.h:120 +GL_LINE_STRIP = 3 # /usr/include/GL/gl.h:121 +GL_TRIANGLES = 4 # /usr/include/GL/gl.h:122 +GL_TRIANGLE_STRIP = 5 # /usr/include/GL/gl.h:123 +GL_TRIANGLE_FAN = 6 # /usr/include/GL/gl.h:124 +GL_QUADS = 7 # /usr/include/GL/gl.h:125 +GL_QUAD_STRIP = 8 # /usr/include/GL/gl.h:126 +GL_POLYGON = 9 # /usr/include/GL/gl.h:127 +GL_ACCUM = 256 # /usr/include/GL/gl.h:130 +GL_LOAD = 257 # /usr/include/GL/gl.h:131 +GL_RETURN = 258 # /usr/include/GL/gl.h:132 +GL_MULT = 259 # /usr/include/GL/gl.h:133 +GL_ADD = 260 # /usr/include/GL/gl.h:134 +GL_NEVER = 512 # /usr/include/GL/gl.h:137 +GL_LESS = 513 # /usr/include/GL/gl.h:138 +GL_EQUAL = 514 # /usr/include/GL/gl.h:139 +GL_LEQUAL = 515 # /usr/include/GL/gl.h:140 +GL_GREATER = 516 # /usr/include/GL/gl.h:141 +GL_NOTEQUAL = 517 # /usr/include/GL/gl.h:142 +GL_GEQUAL = 518 # /usr/include/GL/gl.h:143 +GL_ALWAYS = 519 # /usr/include/GL/gl.h:144 +GL_ZERO = 0 # /usr/include/GL/gl.h:147 +GL_ONE = 1 # /usr/include/GL/gl.h:148 +GL_SRC_COLOR = 768 # /usr/include/GL/gl.h:149 +GL_ONE_MINUS_SRC_COLOR = 769 # /usr/include/GL/gl.h:150 +GL_SRC_ALPHA = 770 # /usr/include/GL/gl.h:151 +GL_ONE_MINUS_SRC_ALPHA = 771 # /usr/include/GL/gl.h:152 +GL_DST_ALPHA = 772 # /usr/include/GL/gl.h:153 +GL_ONE_MINUS_DST_ALPHA = 773 # /usr/include/GL/gl.h:154 +GL_DST_COLOR = 774 # /usr/include/GL/gl.h:159 +GL_ONE_MINUS_DST_COLOR = 775 # /usr/include/GL/gl.h:160 +GL_SRC_ALPHA_SATURATE = 776 # /usr/include/GL/gl.h:161 +GL_NONE = 0 # /usr/include/GL/gl.h:205 +GL_FRONT_LEFT = 1024 # /usr/include/GL/gl.h:206 +GL_FRONT_RIGHT = 1025 # /usr/include/GL/gl.h:207 +GL_BACK_LEFT = 1026 # /usr/include/GL/gl.h:208 +GL_BACK_RIGHT = 1027 # /usr/include/GL/gl.h:209 +GL_FRONT = 1028 # /usr/include/GL/gl.h:210 +GL_BACK = 1029 # /usr/include/GL/gl.h:211 +GL_LEFT = 1030 # /usr/include/GL/gl.h:212 +GL_RIGHT = 1031 # /usr/include/GL/gl.h:213 +GL_FRONT_AND_BACK = 1032 # /usr/include/GL/gl.h:214 +GL_AUX0 = 1033 # /usr/include/GL/gl.h:215 +GL_AUX1 = 1034 # /usr/include/GL/gl.h:216 +GL_AUX2 = 1035 # /usr/include/GL/gl.h:217 +GL_AUX3 = 1036 # /usr/include/GL/gl.h:218 +GL_NO_ERROR = 0 # /usr/include/GL/gl.h:289 +GL_INVALID_ENUM = 1280 # /usr/include/GL/gl.h:290 +GL_INVALID_VALUE = 1281 # /usr/include/GL/gl.h:291 +GL_INVALID_OPERATION = 1282 # /usr/include/GL/gl.h:292 +GL_STACK_OVERFLOW = 1283 # /usr/include/GL/gl.h:293 +GL_STACK_UNDERFLOW = 1284 # /usr/include/GL/gl.h:294 +GL_OUT_OF_MEMORY = 1285 # /usr/include/GL/gl.h:295 +GL_TABLE_TOO_LARGE = 32817 # /usr/include/GL/gl.h:296 +GL_2D = 1536 # /usr/include/GL/gl.h:299 +GL_3D = 1537 # /usr/include/GL/gl.h:300 +GL_3D_COLOR = 1538 # /usr/include/GL/gl.h:301 +GL_3D_COLOR_TEXTURE = 1539 # /usr/include/GL/gl.h:302 +GL_4D_COLOR_TEXTURE = 1540 # /usr/include/GL/gl.h:303 +GL_PASS_THROUGH_TOKEN = 1792 # /usr/include/GL/gl.h:306 +GL_POINT_TOKEN = 1793 # /usr/include/GL/gl.h:307 +GL_LINE_TOKEN = 1794 # /usr/include/GL/gl.h:308 +GL_POLYGON_TOKEN = 1795 # /usr/include/GL/gl.h:309 +GL_BITMAP_TOKEN = 1796 # /usr/include/GL/gl.h:310 +GL_DRAW_PIXEL_TOKEN = 1797 # /usr/include/GL/gl.h:311 +GL_COPY_PIXEL_TOKEN = 1798 # /usr/include/GL/gl.h:312 +GL_LINE_RESET_TOKEN = 1799 # /usr/include/GL/gl.h:313 +GL_EXP = 2048 # /usr/include/GL/gl.h:317 +GL_EXP2 = 2049 # /usr/include/GL/gl.h:318 +GL_CW = 2304 # /usr/include/GL/gl.h:329 +GL_CCW = 2305 # /usr/include/GL/gl.h:330 +GL_COEFF = 2560 # /usr/include/GL/gl.h:333 +GL_ORDER = 2561 # /usr/include/GL/gl.h:334 +GL_DOMAIN = 2562 # /usr/include/GL/gl.h:335 +GL_PIXEL_MAP_I_TO_I = 3184 # /usr/include/GL/gl.h:338 +GL_PIXEL_MAP_S_TO_S = 3185 # /usr/include/GL/gl.h:339 +GL_PIXEL_MAP_I_TO_R = 3186 # /usr/include/GL/gl.h:340 +GL_PIXEL_MAP_I_TO_G = 3187 # /usr/include/GL/gl.h:341 +GL_PIXEL_MAP_I_TO_B = 3188 # /usr/include/GL/gl.h:342 +GL_PIXEL_MAP_I_TO_A = 3189 # /usr/include/GL/gl.h:343 +GL_PIXEL_MAP_R_TO_R = 3190 # /usr/include/GL/gl.h:344 +GL_PIXEL_MAP_G_TO_G = 3191 # /usr/include/GL/gl.h:345 +GL_PIXEL_MAP_B_TO_B = 3192 # /usr/include/GL/gl.h:346 +GL_PIXEL_MAP_A_TO_A = 3193 # /usr/include/GL/gl.h:347 +GL_VERTEX_ARRAY_POINTER = 32910 # /usr/include/GL/gl.h:350 +GL_NORMAL_ARRAY_POINTER = 32911 # /usr/include/GL/gl.h:351 +GL_COLOR_ARRAY_POINTER = 32912 # /usr/include/GL/gl.h:352 +GL_INDEX_ARRAY_POINTER = 32913 # /usr/include/GL/gl.h:353 +GL_TEXTURE_COORD_ARRAY_POINTER = 32914 # /usr/include/GL/gl.h:354 +GL_EDGE_FLAG_ARRAY_POINTER = 32915 # /usr/include/GL/gl.h:355 +GL_CURRENT_COLOR = 2816 # /usr/include/GL/gl.h:358 +GL_CURRENT_INDEX = 2817 # /usr/include/GL/gl.h:359 +GL_CURRENT_NORMAL = 2818 # /usr/include/GL/gl.h:360 +GL_CURRENT_TEXTURE_COORDS = 2819 # /usr/include/GL/gl.h:361 +GL_CURRENT_RASTER_COLOR = 2820 # /usr/include/GL/gl.h:362 +GL_CURRENT_RASTER_INDEX = 2821 # /usr/include/GL/gl.h:363 +GL_CURRENT_RASTER_TEXTURE_COORDS = 2822 # /usr/include/GL/gl.h:364 +GL_CURRENT_RASTER_POSITION = 2823 # /usr/include/GL/gl.h:365 +GL_CURRENT_RASTER_POSITION_VALID = 2824 # /usr/include/GL/gl.h:366 +GL_CURRENT_RASTER_DISTANCE = 2825 # /usr/include/GL/gl.h:367 +GL_POINT_SMOOTH = 2832 # /usr/include/GL/gl.h:368 +GL_POINT_SIZE = 2833 # /usr/include/GL/gl.h:369 +GL_SMOOTH_POINT_SIZE_RANGE = 2834 # /usr/include/GL/gl.h:370 +GL_SMOOTH_POINT_SIZE_GRANULARITY = 2835 # /usr/include/GL/gl.h:371 +GL_POINT_SIZE_RANGE = 2834 # /usr/include/GL/gl.h:372 +GL_POINT_SIZE_GRANULARITY = 2835 # /usr/include/GL/gl.h:373 +GL_LINE_SMOOTH = 2848 # /usr/include/GL/gl.h:374 +GL_LINE_WIDTH = 2849 # /usr/include/GL/gl.h:375 +GL_SMOOTH_LINE_WIDTH_RANGE = 2850 # /usr/include/GL/gl.h:376 +GL_SMOOTH_LINE_WIDTH_GRANULARITY = 2851 # /usr/include/GL/gl.h:377 +GL_LINE_WIDTH_RANGE = 2850 # /usr/include/GL/gl.h:378 +GL_LINE_WIDTH_GRANULARITY = 2851 # /usr/include/GL/gl.h:379 +GL_LINE_STIPPLE = 2852 # /usr/include/GL/gl.h:380 +GL_LINE_STIPPLE_PATTERN = 2853 # /usr/include/GL/gl.h:381 +GL_LINE_STIPPLE_REPEAT = 2854 # /usr/include/GL/gl.h:382 +GL_LIST_MODE = 2864 # /usr/include/GL/gl.h:383 +GL_MAX_LIST_NESTING = 2865 # /usr/include/GL/gl.h:384 +GL_LIST_BASE = 2866 # /usr/include/GL/gl.h:385 +GL_LIST_INDEX = 2867 # /usr/include/GL/gl.h:386 +GL_POLYGON_MODE = 2880 # /usr/include/GL/gl.h:387 +GL_POLYGON_SMOOTH = 2881 # /usr/include/GL/gl.h:388 +GL_POLYGON_STIPPLE = 2882 # /usr/include/GL/gl.h:389 +GL_EDGE_FLAG = 2883 # /usr/include/GL/gl.h:390 +GL_CULL_FACE = 2884 # /usr/include/GL/gl.h:391 +GL_CULL_FACE_MODE = 2885 # /usr/include/GL/gl.h:392 +GL_FRONT_FACE = 2886 # /usr/include/GL/gl.h:393 +GL_LIGHTING = 2896 # /usr/include/GL/gl.h:394 +GL_LIGHT_MODEL_LOCAL_VIEWER = 2897 # /usr/include/GL/gl.h:395 +GL_LIGHT_MODEL_TWO_SIDE = 2898 # /usr/include/GL/gl.h:396 +GL_LIGHT_MODEL_AMBIENT = 2899 # /usr/include/GL/gl.h:397 +GL_SHADE_MODEL = 2900 # /usr/include/GL/gl.h:398 +GL_COLOR_MATERIAL_FACE = 2901 # /usr/include/GL/gl.h:399 +GL_COLOR_MATERIAL_PARAMETER = 2902 # /usr/include/GL/gl.h:400 +GL_COLOR_MATERIAL = 2903 # /usr/include/GL/gl.h:401 +GL_FOG = 2912 # /usr/include/GL/gl.h:402 +GL_FOG_INDEX = 2913 # /usr/include/GL/gl.h:403 +GL_FOG_DENSITY = 2914 # /usr/include/GL/gl.h:404 +GL_FOG_START = 2915 # /usr/include/GL/gl.h:405 +GL_FOG_END = 2916 # /usr/include/GL/gl.h:406 +GL_FOG_MODE = 2917 # /usr/include/GL/gl.h:407 +GL_FOG_COLOR = 2918 # /usr/include/GL/gl.h:408 +GL_DEPTH_RANGE = 2928 # /usr/include/GL/gl.h:409 +GL_DEPTH_TEST = 2929 # /usr/include/GL/gl.h:410 +GL_DEPTH_WRITEMASK = 2930 # /usr/include/GL/gl.h:411 +GL_DEPTH_CLEAR_VALUE = 2931 # /usr/include/GL/gl.h:412 +GL_DEPTH_FUNC = 2932 # /usr/include/GL/gl.h:413 +GL_ACCUM_CLEAR_VALUE = 2944 # /usr/include/GL/gl.h:414 +GL_STENCIL_TEST = 2960 # /usr/include/GL/gl.h:415 +GL_STENCIL_CLEAR_VALUE = 2961 # /usr/include/GL/gl.h:416 +GL_STENCIL_FUNC = 2962 # /usr/include/GL/gl.h:417 +GL_STENCIL_VALUE_MASK = 2963 # /usr/include/GL/gl.h:418 +GL_STENCIL_FAIL = 2964 # /usr/include/GL/gl.h:419 +GL_STENCIL_PASS_DEPTH_FAIL = 2965 # /usr/include/GL/gl.h:420 +GL_STENCIL_PASS_DEPTH_PASS = 2966 # /usr/include/GL/gl.h:421 +GL_STENCIL_REF = 2967 # /usr/include/GL/gl.h:422 +GL_STENCIL_WRITEMASK = 2968 # /usr/include/GL/gl.h:423 +GL_MATRIX_MODE = 2976 # /usr/include/GL/gl.h:424 +GL_NORMALIZE = 2977 # /usr/include/GL/gl.h:425 +GL_VIEWPORT = 2978 # /usr/include/GL/gl.h:426 +GL_MODELVIEW_STACK_DEPTH = 2979 # /usr/include/GL/gl.h:427 +GL_PROJECTION_STACK_DEPTH = 2980 # /usr/include/GL/gl.h:428 +GL_TEXTURE_STACK_DEPTH = 2981 # /usr/include/GL/gl.h:429 +GL_MODELVIEW_MATRIX = 2982 # /usr/include/GL/gl.h:430 +GL_PROJECTION_MATRIX = 2983 # /usr/include/GL/gl.h:431 +GL_TEXTURE_MATRIX = 2984 # /usr/include/GL/gl.h:432 +GL_ATTRIB_STACK_DEPTH = 2992 # /usr/include/GL/gl.h:433 +GL_CLIENT_ATTRIB_STACK_DEPTH = 2993 # /usr/include/GL/gl.h:434 +GL_ALPHA_TEST = 3008 # /usr/include/GL/gl.h:435 +GL_ALPHA_TEST_FUNC = 3009 # /usr/include/GL/gl.h:436 +GL_ALPHA_TEST_REF = 3010 # /usr/include/GL/gl.h:437 +GL_DITHER = 3024 # /usr/include/GL/gl.h:438 +GL_BLEND_DST = 3040 # /usr/include/GL/gl.h:439 +GL_BLEND_SRC = 3041 # /usr/include/GL/gl.h:440 +GL_BLEND = 3042 # /usr/include/GL/gl.h:441 +GL_LOGIC_OP_MODE = 3056 # /usr/include/GL/gl.h:442 +GL_INDEX_LOGIC_OP = 3057 # /usr/include/GL/gl.h:443 +GL_LOGIC_OP = 3057 # /usr/include/GL/gl.h:444 +GL_COLOR_LOGIC_OP = 3058 # /usr/include/GL/gl.h:445 +GL_AUX_BUFFERS = 3072 # /usr/include/GL/gl.h:446 +GL_DRAW_BUFFER = 3073 # /usr/include/GL/gl.h:447 +GL_READ_BUFFER = 3074 # /usr/include/GL/gl.h:448 +GL_SCISSOR_BOX = 3088 # /usr/include/GL/gl.h:449 +GL_SCISSOR_TEST = 3089 # /usr/include/GL/gl.h:450 +GL_INDEX_CLEAR_VALUE = 3104 # /usr/include/GL/gl.h:451 +GL_INDEX_WRITEMASK = 3105 # /usr/include/GL/gl.h:452 +GL_COLOR_CLEAR_VALUE = 3106 # /usr/include/GL/gl.h:453 +GL_COLOR_WRITEMASK = 3107 # /usr/include/GL/gl.h:454 +GL_INDEX_MODE = 3120 # /usr/include/GL/gl.h:455 +GL_RGBA_MODE = 3121 # /usr/include/GL/gl.h:456 +GL_DOUBLEBUFFER = 3122 # /usr/include/GL/gl.h:457 +GL_STEREO = 3123 # /usr/include/GL/gl.h:458 +GL_RENDER_MODE = 3136 # /usr/include/GL/gl.h:459 +GL_PERSPECTIVE_CORRECTION_HINT = 3152 # /usr/include/GL/gl.h:460 +GL_POINT_SMOOTH_HINT = 3153 # /usr/include/GL/gl.h:461 +GL_LINE_SMOOTH_HINT = 3154 # /usr/include/GL/gl.h:462 +GL_POLYGON_SMOOTH_HINT = 3155 # /usr/include/GL/gl.h:463 +GL_FOG_HINT = 3156 # /usr/include/GL/gl.h:464 +GL_TEXTURE_GEN_S = 3168 # /usr/include/GL/gl.h:465 +GL_TEXTURE_GEN_T = 3169 # /usr/include/GL/gl.h:466 +GL_TEXTURE_GEN_R = 3170 # /usr/include/GL/gl.h:467 +GL_TEXTURE_GEN_Q = 3171 # /usr/include/GL/gl.h:468 +GL_PIXEL_MAP_I_TO_I_SIZE = 3248 # /usr/include/GL/gl.h:469 +GL_PIXEL_MAP_S_TO_S_SIZE = 3249 # /usr/include/GL/gl.h:470 +GL_PIXEL_MAP_I_TO_R_SIZE = 3250 # /usr/include/GL/gl.h:471 +GL_PIXEL_MAP_I_TO_G_SIZE = 3251 # /usr/include/GL/gl.h:472 +GL_PIXEL_MAP_I_TO_B_SIZE = 3252 # /usr/include/GL/gl.h:473 +GL_PIXEL_MAP_I_TO_A_SIZE = 3253 # /usr/include/GL/gl.h:474 +GL_PIXEL_MAP_R_TO_R_SIZE = 3254 # /usr/include/GL/gl.h:475 +GL_PIXEL_MAP_G_TO_G_SIZE = 3255 # /usr/include/GL/gl.h:476 +GL_PIXEL_MAP_B_TO_B_SIZE = 3256 # /usr/include/GL/gl.h:477 +GL_PIXEL_MAP_A_TO_A_SIZE = 3257 # /usr/include/GL/gl.h:478 +GL_UNPACK_SWAP_BYTES = 3312 # /usr/include/GL/gl.h:479 +GL_UNPACK_LSB_FIRST = 3313 # /usr/include/GL/gl.h:480 +GL_UNPACK_ROW_LENGTH = 3314 # /usr/include/GL/gl.h:481 +GL_UNPACK_SKIP_ROWS = 3315 # /usr/include/GL/gl.h:482 +GL_UNPACK_SKIP_PIXELS = 3316 # /usr/include/GL/gl.h:483 +GL_UNPACK_ALIGNMENT = 3317 # /usr/include/GL/gl.h:484 +GL_PACK_SWAP_BYTES = 3328 # /usr/include/GL/gl.h:485 +GL_PACK_LSB_FIRST = 3329 # /usr/include/GL/gl.h:486 +GL_PACK_ROW_LENGTH = 3330 # /usr/include/GL/gl.h:487 +GL_PACK_SKIP_ROWS = 3331 # /usr/include/GL/gl.h:488 +GL_PACK_SKIP_PIXELS = 3332 # /usr/include/GL/gl.h:489 +GL_PACK_ALIGNMENT = 3333 # /usr/include/GL/gl.h:490 +GL_MAP_COLOR = 3344 # /usr/include/GL/gl.h:491 +GL_MAP_STENCIL = 3345 # /usr/include/GL/gl.h:492 +GL_INDEX_SHIFT = 3346 # /usr/include/GL/gl.h:493 +GL_INDEX_OFFSET = 3347 # /usr/include/GL/gl.h:494 +GL_RED_SCALE = 3348 # /usr/include/GL/gl.h:495 +GL_RED_BIAS = 3349 # /usr/include/GL/gl.h:496 +GL_ZOOM_X = 3350 # /usr/include/GL/gl.h:497 +GL_ZOOM_Y = 3351 # /usr/include/GL/gl.h:498 +GL_GREEN_SCALE = 3352 # /usr/include/GL/gl.h:499 +GL_GREEN_BIAS = 3353 # /usr/include/GL/gl.h:500 +GL_BLUE_SCALE = 3354 # /usr/include/GL/gl.h:501 +GL_BLUE_BIAS = 3355 # /usr/include/GL/gl.h:502 +GL_ALPHA_SCALE = 3356 # /usr/include/GL/gl.h:503 +GL_ALPHA_BIAS = 3357 # /usr/include/GL/gl.h:504 +GL_DEPTH_SCALE = 3358 # /usr/include/GL/gl.h:505 +GL_DEPTH_BIAS = 3359 # /usr/include/GL/gl.h:506 +GL_MAX_EVAL_ORDER = 3376 # /usr/include/GL/gl.h:507 +GL_MAX_LIGHTS = 3377 # /usr/include/GL/gl.h:508 +GL_MAX_CLIP_PLANES = 3378 # /usr/include/GL/gl.h:509 +GL_MAX_TEXTURE_SIZE = 3379 # /usr/include/GL/gl.h:510 +GL_MAX_PIXEL_MAP_TABLE = 3380 # /usr/include/GL/gl.h:511 +GL_MAX_ATTRIB_STACK_DEPTH = 3381 # /usr/include/GL/gl.h:512 +GL_MAX_MODELVIEW_STACK_DEPTH = 3382 # /usr/include/GL/gl.h:513 +GL_MAX_NAME_STACK_DEPTH = 3383 # /usr/include/GL/gl.h:514 +GL_MAX_PROJECTION_STACK_DEPTH = 3384 # /usr/include/GL/gl.h:515 +GL_MAX_TEXTURE_STACK_DEPTH = 3385 # /usr/include/GL/gl.h:516 +GL_MAX_VIEWPORT_DIMS = 3386 # /usr/include/GL/gl.h:517 +GL_MAX_CLIENT_ATTRIB_STACK_DEPTH = 3387 # /usr/include/GL/gl.h:518 +GL_SUBPIXEL_BITS = 3408 # /usr/include/GL/gl.h:519 +GL_INDEX_BITS = 3409 # /usr/include/GL/gl.h:520 +GL_RED_BITS = 3410 # /usr/include/GL/gl.h:521 +GL_GREEN_BITS = 3411 # /usr/include/GL/gl.h:522 +GL_BLUE_BITS = 3412 # /usr/include/GL/gl.h:523 +GL_ALPHA_BITS = 3413 # /usr/include/GL/gl.h:524 +GL_DEPTH_BITS = 3414 # /usr/include/GL/gl.h:525 +GL_STENCIL_BITS = 3415 # /usr/include/GL/gl.h:526 +GL_ACCUM_RED_BITS = 3416 # /usr/include/GL/gl.h:527 +GL_ACCUM_GREEN_BITS = 3417 # /usr/include/GL/gl.h:528 +GL_ACCUM_BLUE_BITS = 3418 # /usr/include/GL/gl.h:529 +GL_ACCUM_ALPHA_BITS = 3419 # /usr/include/GL/gl.h:530 +GL_NAME_STACK_DEPTH = 3440 # /usr/include/GL/gl.h:531 +GL_AUTO_NORMAL = 3456 # /usr/include/GL/gl.h:532 +GL_MAP1_COLOR_4 = 3472 # /usr/include/GL/gl.h:533 +GL_MAP1_INDEX = 3473 # /usr/include/GL/gl.h:534 +GL_MAP1_NORMAL = 3474 # /usr/include/GL/gl.h:535 +GL_MAP1_TEXTURE_COORD_1 = 3475 # /usr/include/GL/gl.h:536 +GL_MAP1_TEXTURE_COORD_2 = 3476 # /usr/include/GL/gl.h:537 +GL_MAP1_TEXTURE_COORD_3 = 3477 # /usr/include/GL/gl.h:538 +GL_MAP1_TEXTURE_COORD_4 = 3478 # /usr/include/GL/gl.h:539 +GL_MAP1_VERTEX_3 = 3479 # /usr/include/GL/gl.h:540 +GL_MAP1_VERTEX_4 = 3480 # /usr/include/GL/gl.h:541 +GL_MAP2_COLOR_4 = 3504 # /usr/include/GL/gl.h:542 +GL_MAP2_INDEX = 3505 # /usr/include/GL/gl.h:543 +GL_MAP2_NORMAL = 3506 # /usr/include/GL/gl.h:544 +GL_MAP2_TEXTURE_COORD_1 = 3507 # /usr/include/GL/gl.h:545 +GL_MAP2_TEXTURE_COORD_2 = 3508 # /usr/include/GL/gl.h:546 +GL_MAP2_TEXTURE_COORD_3 = 3509 # /usr/include/GL/gl.h:547 +GL_MAP2_TEXTURE_COORD_4 = 3510 # /usr/include/GL/gl.h:548 +GL_MAP2_VERTEX_3 = 3511 # /usr/include/GL/gl.h:549 +GL_MAP2_VERTEX_4 = 3512 # /usr/include/GL/gl.h:550 +GL_MAP1_GRID_DOMAIN = 3536 # /usr/include/GL/gl.h:551 +GL_MAP1_GRID_SEGMENTS = 3537 # /usr/include/GL/gl.h:552 +GL_MAP2_GRID_DOMAIN = 3538 # /usr/include/GL/gl.h:553 +GL_MAP2_GRID_SEGMENTS = 3539 # /usr/include/GL/gl.h:554 +GL_TEXTURE_1D = 3552 # /usr/include/GL/gl.h:555 +GL_TEXTURE_2D = 3553 # /usr/include/GL/gl.h:556 +GL_FEEDBACK_BUFFER_POINTER = 3568 # /usr/include/GL/gl.h:557 +GL_FEEDBACK_BUFFER_SIZE = 3569 # /usr/include/GL/gl.h:558 +GL_FEEDBACK_BUFFER_TYPE = 3570 # /usr/include/GL/gl.h:559 +GL_SELECTION_BUFFER_POINTER = 3571 # /usr/include/GL/gl.h:560 +GL_SELECTION_BUFFER_SIZE = 3572 # /usr/include/GL/gl.h:561 +GL_POLYGON_OFFSET_UNITS = 10752 # /usr/include/GL/gl.h:562 +GL_POLYGON_OFFSET_POINT = 10753 # /usr/include/GL/gl.h:563 +GL_POLYGON_OFFSET_LINE = 10754 # /usr/include/GL/gl.h:564 +GL_POLYGON_OFFSET_FILL = 32823 # /usr/include/GL/gl.h:565 +GL_POLYGON_OFFSET_FACTOR = 32824 # /usr/include/GL/gl.h:566 +GL_TEXTURE_BINDING_1D = 32872 # /usr/include/GL/gl.h:567 +GL_TEXTURE_BINDING_2D = 32873 # /usr/include/GL/gl.h:568 +GL_TEXTURE_BINDING_3D = 32874 # /usr/include/GL/gl.h:569 +GL_VERTEX_ARRAY = 32884 # /usr/include/GL/gl.h:570 +GL_NORMAL_ARRAY = 32885 # /usr/include/GL/gl.h:571 +GL_COLOR_ARRAY = 32886 # /usr/include/GL/gl.h:572 +GL_INDEX_ARRAY = 32887 # /usr/include/GL/gl.h:573 +GL_TEXTURE_COORD_ARRAY = 32888 # /usr/include/GL/gl.h:574 +GL_EDGE_FLAG_ARRAY = 32889 # /usr/include/GL/gl.h:575 +GL_VERTEX_ARRAY_SIZE = 32890 # /usr/include/GL/gl.h:576 +GL_VERTEX_ARRAY_TYPE = 32891 # /usr/include/GL/gl.h:577 +GL_VERTEX_ARRAY_STRIDE = 32892 # /usr/include/GL/gl.h:578 +GL_NORMAL_ARRAY_TYPE = 32894 # /usr/include/GL/gl.h:579 +GL_NORMAL_ARRAY_STRIDE = 32895 # /usr/include/GL/gl.h:580 +GL_COLOR_ARRAY_SIZE = 32897 # /usr/include/GL/gl.h:581 +GL_COLOR_ARRAY_TYPE = 32898 # /usr/include/GL/gl.h:582 +GL_COLOR_ARRAY_STRIDE = 32899 # /usr/include/GL/gl.h:583 +GL_INDEX_ARRAY_TYPE = 32901 # /usr/include/GL/gl.h:584 +GL_INDEX_ARRAY_STRIDE = 32902 # /usr/include/GL/gl.h:585 +GL_TEXTURE_COORD_ARRAY_SIZE = 32904 # /usr/include/GL/gl.h:586 +GL_TEXTURE_COORD_ARRAY_TYPE = 32905 # /usr/include/GL/gl.h:587 +GL_TEXTURE_COORD_ARRAY_STRIDE = 32906 # /usr/include/GL/gl.h:588 +GL_EDGE_FLAG_ARRAY_STRIDE = 32908 # /usr/include/GL/gl.h:589 +GL_TEXTURE_WIDTH = 4096 # /usr/include/GL/gl.h:602 +GL_TEXTURE_HEIGHT = 4097 # /usr/include/GL/gl.h:603 +GL_TEXTURE_INTERNAL_FORMAT = 4099 # /usr/include/GL/gl.h:604 +GL_TEXTURE_COMPONENTS = 4099 # /usr/include/GL/gl.h:605 +GL_TEXTURE_BORDER_COLOR = 4100 # /usr/include/GL/gl.h:606 +GL_TEXTURE_BORDER = 4101 # /usr/include/GL/gl.h:607 +GL_TEXTURE_RED_SIZE = 32860 # /usr/include/GL/gl.h:608 +GL_TEXTURE_GREEN_SIZE = 32861 # /usr/include/GL/gl.h:609 +GL_TEXTURE_BLUE_SIZE = 32862 # /usr/include/GL/gl.h:610 +GL_TEXTURE_ALPHA_SIZE = 32863 # /usr/include/GL/gl.h:611 +GL_TEXTURE_LUMINANCE_SIZE = 32864 # /usr/include/GL/gl.h:612 +GL_TEXTURE_INTENSITY_SIZE = 32865 # /usr/include/GL/gl.h:613 +GL_TEXTURE_PRIORITY = 32870 # /usr/include/GL/gl.h:614 +GL_TEXTURE_RESIDENT = 32871 # /usr/include/GL/gl.h:615 +GL_DONT_CARE = 4352 # /usr/include/GL/gl.h:618 +GL_FASTEST = 4353 # /usr/include/GL/gl.h:619 +GL_NICEST = 4354 # /usr/include/GL/gl.h:620 +GL_AMBIENT = 4608 # /usr/include/GL/gl.h:654 +GL_DIFFUSE = 4609 # /usr/include/GL/gl.h:655 +GL_SPECULAR = 4610 # /usr/include/GL/gl.h:656 +GL_POSITION = 4611 # /usr/include/GL/gl.h:657 +GL_SPOT_DIRECTION = 4612 # /usr/include/GL/gl.h:658 +GL_SPOT_EXPONENT = 4613 # /usr/include/GL/gl.h:659 +GL_SPOT_CUTOFF = 4614 # /usr/include/GL/gl.h:660 +GL_CONSTANT_ATTENUATION = 4615 # /usr/include/GL/gl.h:661 +GL_LINEAR_ATTENUATION = 4616 # /usr/include/GL/gl.h:662 +GL_QUADRATIC_ATTENUATION = 4617 # /usr/include/GL/gl.h:663 +GL_COMPILE = 4864 # /usr/include/GL/gl.h:666 +GL_COMPILE_AND_EXECUTE = 4865 # /usr/include/GL/gl.h:667 +GL_BYTE = 5120 # /usr/include/GL/gl.h:670 +GL_UNSIGNED_BYTE = 5121 # /usr/include/GL/gl.h:671 +GL_SHORT = 5122 # /usr/include/GL/gl.h:672 +GL_UNSIGNED_SHORT = 5123 # /usr/include/GL/gl.h:673 +GL_INT = 5124 # /usr/include/GL/gl.h:674 +GL_UNSIGNED_INT = 5125 # /usr/include/GL/gl.h:675 +GL_FLOAT = 5126 # /usr/include/GL/gl.h:676 +GL_2_BYTES = 5127 # /usr/include/GL/gl.h:677 +GL_3_BYTES = 5128 # /usr/include/GL/gl.h:678 +GL_4_BYTES = 5129 # /usr/include/GL/gl.h:679 +GL_DOUBLE = 5130 # /usr/include/GL/gl.h:680 +GL_DOUBLE_EXT = 5130 # /usr/include/GL/gl.h:681 +GL_CLEAR = 5376 # /usr/include/GL/gl.h:696 +GL_AND = 5377 # /usr/include/GL/gl.h:697 +GL_AND_REVERSE = 5378 # /usr/include/GL/gl.h:698 +GL_COPY = 5379 # /usr/include/GL/gl.h:699 +GL_AND_INVERTED = 5380 # /usr/include/GL/gl.h:700 +GL_NOOP = 5381 # /usr/include/GL/gl.h:701 +GL_XOR = 5382 # /usr/include/GL/gl.h:702 +GL_OR = 5383 # /usr/include/GL/gl.h:703 +GL_NOR = 5384 # /usr/include/GL/gl.h:704 +GL_EQUIV = 5385 # /usr/include/GL/gl.h:705 +GL_INVERT = 5386 # /usr/include/GL/gl.h:706 +GL_OR_REVERSE = 5387 # /usr/include/GL/gl.h:707 +GL_COPY_INVERTED = 5388 # /usr/include/GL/gl.h:708 +GL_OR_INVERTED = 5389 # /usr/include/GL/gl.h:709 +GL_NAND = 5390 # /usr/include/GL/gl.h:710 +GL_SET = 5391 # /usr/include/GL/gl.h:711 +GL_EMISSION = 5632 # /usr/include/GL/gl.h:739 +GL_SHININESS = 5633 # /usr/include/GL/gl.h:740 +GL_AMBIENT_AND_DIFFUSE = 5634 # /usr/include/GL/gl.h:741 +GL_COLOR_INDEXES = 5635 # /usr/include/GL/gl.h:742 +GL_MODELVIEW = 5888 # /usr/include/GL/gl.h:748 +GL_PROJECTION = 5889 # /usr/include/GL/gl.h:749 +GL_TEXTURE = 5890 # /usr/include/GL/gl.h:750 +GL_COLOR = 6144 # /usr/include/GL/gl.h:769 +GL_DEPTH = 6145 # /usr/include/GL/gl.h:770 +GL_STENCIL = 6146 # /usr/include/GL/gl.h:771 +GL_COLOR_INDEX = 6400 # /usr/include/GL/gl.h:774 +GL_STENCIL_INDEX = 6401 # /usr/include/GL/gl.h:775 +GL_DEPTH_COMPONENT = 6402 # /usr/include/GL/gl.h:776 +GL_RED = 6403 # /usr/include/GL/gl.h:777 +GL_GREEN = 6404 # /usr/include/GL/gl.h:778 +GL_BLUE = 6405 # /usr/include/GL/gl.h:779 +GL_ALPHA = 6406 # /usr/include/GL/gl.h:780 +GL_RGB = 6407 # /usr/include/GL/gl.h:781 +GL_RGBA = 6408 # /usr/include/GL/gl.h:782 +GL_LUMINANCE = 6409 # /usr/include/GL/gl.h:783 +GL_LUMINANCE_ALPHA = 6410 # /usr/include/GL/gl.h:784 +GL_BITMAP = 6656 # /usr/include/GL/gl.h:830 +GL_POINT = 6912 # /usr/include/GL/gl.h:845 +GL_LINE = 6913 # /usr/include/GL/gl.h:846 +GL_FILL = 6914 # /usr/include/GL/gl.h:847 +GL_RENDER = 7168 # /usr/include/GL/gl.h:864 +GL_FEEDBACK = 7169 # /usr/include/GL/gl.h:865 +GL_SELECT = 7170 # /usr/include/GL/gl.h:866 +GL_FLAT = 7424 # /usr/include/GL/gl.h:869 +GL_SMOOTH = 7425 # /usr/include/GL/gl.h:870 +GL_KEEP = 7680 # /usr/include/GL/gl.h:884 +GL_REPLACE = 7681 # /usr/include/GL/gl.h:885 +GL_INCR = 7682 # /usr/include/GL/gl.h:886 +GL_DECR = 7683 # /usr/include/GL/gl.h:887 +GL_VENDOR = 7936 # /usr/include/GL/gl.h:891 +GL_RENDERER = 7937 # /usr/include/GL/gl.h:892 +GL_VERSION = 7938 # /usr/include/GL/gl.h:893 +GL_EXTENSIONS = 7939 # /usr/include/GL/gl.h:894 +GL_S = 8192 # /usr/include/GL/gl.h:903 +GL_T = 8193 # /usr/include/GL/gl.h:904 +GL_R = 8194 # /usr/include/GL/gl.h:905 +GL_Q = 8195 # /usr/include/GL/gl.h:906 +GL_MODULATE = 8448 # /usr/include/GL/gl.h:909 +GL_DECAL = 8449 # /usr/include/GL/gl.h:910 +GL_TEXTURE_ENV_MODE = 8704 # /usr/include/GL/gl.h:916 +GL_TEXTURE_ENV_COLOR = 8705 # /usr/include/GL/gl.h:917 +GL_TEXTURE_ENV = 8960 # /usr/include/GL/gl.h:920 +GL_EYE_LINEAR = 9216 # /usr/include/GL/gl.h:923 +GL_OBJECT_LINEAR = 9217 # /usr/include/GL/gl.h:924 +GL_SPHERE_MAP = 9218 # /usr/include/GL/gl.h:925 +GL_TEXTURE_GEN_MODE = 9472 # /usr/include/GL/gl.h:928 +GL_OBJECT_PLANE = 9473 # /usr/include/GL/gl.h:929 +GL_EYE_PLANE = 9474 # /usr/include/GL/gl.h:930 +GL_NEAREST = 9728 # /usr/include/GL/gl.h:933 +GL_LINEAR = 9729 # /usr/include/GL/gl.h:934 +GL_NEAREST_MIPMAP_NEAREST = 9984 # /usr/include/GL/gl.h:939 +GL_LINEAR_MIPMAP_NEAREST = 9985 # /usr/include/GL/gl.h:940 +GL_NEAREST_MIPMAP_LINEAR = 9986 # /usr/include/GL/gl.h:941 +GL_LINEAR_MIPMAP_LINEAR = 9987 # /usr/include/GL/gl.h:942 +GL_TEXTURE_MAG_FILTER = 10240 # /usr/include/GL/gl.h:945 +GL_TEXTURE_MIN_FILTER = 10241 # /usr/include/GL/gl.h:946 +GL_TEXTURE_WRAP_S = 10242 # /usr/include/GL/gl.h:947 +GL_TEXTURE_WRAP_T = 10243 # /usr/include/GL/gl.h:948 +GL_PROXY_TEXTURE_1D = 32867 # /usr/include/GL/gl.h:955 +GL_PROXY_TEXTURE_2D = 32868 # /usr/include/GL/gl.h:956 +GL_CLAMP = 10496 # /usr/include/GL/gl.h:959 +GL_REPEAT = 10497 # /usr/include/GL/gl.h:960 +GL_R3_G3_B2 = 10768 # /usr/include/GL/gl.h:963 +GL_ALPHA4 = 32827 # /usr/include/GL/gl.h:964 +GL_ALPHA8 = 32828 # /usr/include/GL/gl.h:965 +GL_ALPHA12 = 32829 # /usr/include/GL/gl.h:966 +GL_ALPHA16 = 32830 # /usr/include/GL/gl.h:967 +GL_LUMINANCE4 = 32831 # /usr/include/GL/gl.h:968 +GL_LUMINANCE8 = 32832 # /usr/include/GL/gl.h:969 +GL_LUMINANCE12 = 32833 # /usr/include/GL/gl.h:970 +GL_LUMINANCE16 = 32834 # /usr/include/GL/gl.h:971 +GL_LUMINANCE4_ALPHA4 = 32835 # /usr/include/GL/gl.h:972 +GL_LUMINANCE6_ALPHA2 = 32836 # /usr/include/GL/gl.h:973 +GL_LUMINANCE8_ALPHA8 = 32837 # /usr/include/GL/gl.h:974 +GL_LUMINANCE12_ALPHA4 = 32838 # /usr/include/GL/gl.h:975 +GL_LUMINANCE12_ALPHA12 = 32839 # /usr/include/GL/gl.h:976 +GL_LUMINANCE16_ALPHA16 = 32840 # /usr/include/GL/gl.h:977 +GL_INTENSITY = 32841 # /usr/include/GL/gl.h:978 +GL_INTENSITY4 = 32842 # /usr/include/GL/gl.h:979 +GL_INTENSITY8 = 32843 # /usr/include/GL/gl.h:980 +GL_INTENSITY12 = 32844 # /usr/include/GL/gl.h:981 +GL_INTENSITY16 = 32845 # /usr/include/GL/gl.h:982 +GL_RGB4 = 32847 # /usr/include/GL/gl.h:983 +GL_RGB5 = 32848 # /usr/include/GL/gl.h:984 +GL_RGB8 = 32849 # /usr/include/GL/gl.h:985 +GL_RGB10 = 32850 # /usr/include/GL/gl.h:986 +GL_RGB12 = 32851 # /usr/include/GL/gl.h:987 +GL_RGB16 = 32852 # /usr/include/GL/gl.h:988 +GL_RGBA2 = 32853 # /usr/include/GL/gl.h:989 +GL_RGBA4 = 32854 # /usr/include/GL/gl.h:990 +GL_RGB5_A1 = 32855 # /usr/include/GL/gl.h:991 +GL_RGBA8 = 32856 # /usr/include/GL/gl.h:992 +GL_RGB10_A2 = 32857 # /usr/include/GL/gl.h:993 +GL_RGBA12 = 32858 # /usr/include/GL/gl.h:994 +GL_RGBA16 = 32859 # /usr/include/GL/gl.h:995 +GL_V2F = 10784 # /usr/include/GL/gl.h:998 +GL_V3F = 10785 # /usr/include/GL/gl.h:999 +GL_C4UB_V2F = 10786 # /usr/include/GL/gl.h:1000 +GL_C4UB_V3F = 10787 # /usr/include/GL/gl.h:1001 +GL_C3F_V3F = 10788 # /usr/include/GL/gl.h:1002 +GL_N3F_V3F = 10789 # /usr/include/GL/gl.h:1003 +GL_C4F_N3F_V3F = 10790 # /usr/include/GL/gl.h:1004 +GL_T2F_V3F = 10791 # /usr/include/GL/gl.h:1005 +GL_T4F_V4F = 10792 # /usr/include/GL/gl.h:1006 +GL_T2F_C4UB_V3F = 10793 # /usr/include/GL/gl.h:1007 +GL_T2F_C3F_V3F = 10794 # /usr/include/GL/gl.h:1008 +GL_T2F_N3F_V3F = 10795 # /usr/include/GL/gl.h:1009 +GL_T2F_C4F_N3F_V3F = 10796 # /usr/include/GL/gl.h:1010 +GL_T4F_C4F_N3F_V4F = 10797 # /usr/include/GL/gl.h:1011 +GL_CLIP_PLANE0 = 12288 # /usr/include/GL/gl.h:1020 +GL_CLIP_PLANE1 = 12289 # /usr/include/GL/gl.h:1021 +GL_CLIP_PLANE2 = 12290 # /usr/include/GL/gl.h:1022 +GL_CLIP_PLANE3 = 12291 # /usr/include/GL/gl.h:1023 +GL_CLIP_PLANE4 = 12292 # /usr/include/GL/gl.h:1024 +GL_CLIP_PLANE5 = 12293 # /usr/include/GL/gl.h:1025 +GL_LIGHT0 = 16384 # /usr/include/GL/gl.h:1028 +GL_LIGHT1 = 16385 # /usr/include/GL/gl.h:1029 +GL_LIGHT2 = 16386 # /usr/include/GL/gl.h:1030 +GL_LIGHT3 = 16387 # /usr/include/GL/gl.h:1031 +GL_LIGHT4 = 16388 # /usr/include/GL/gl.h:1032 +GL_LIGHT5 = 16389 # /usr/include/GL/gl.h:1033 +GL_LIGHT6 = 16390 # /usr/include/GL/gl.h:1034 +GL_LIGHT7 = 16391 # /usr/include/GL/gl.h:1035 +GL_ABGR_EXT = 32768 # /usr/include/GL/gl.h:1038 +GL_FUNC_SUBTRACT_EXT = 32778 # /usr/include/GL/gl.h:1041 +GL_FUNC_REVERSE_SUBTRACT_EXT = 32779 # /usr/include/GL/gl.h:1042 +GL_UNSIGNED_BYTE_3_3_2_EXT = 32818 # /usr/include/GL/gl.h:1045 +GL_UNSIGNED_SHORT_4_4_4_4_EXT = 32819 # /usr/include/GL/gl.h:1046 +GL_UNSIGNED_SHORT_5_5_5_1_EXT = 32820 # /usr/include/GL/gl.h:1047 +GL_UNSIGNED_INT_8_8_8_8_EXT = 32821 # /usr/include/GL/gl.h:1048 +GL_UNSIGNED_INT_10_10_10_2_EXT = 32822 # /usr/include/GL/gl.h:1049 +GL_PACK_SKIP_IMAGES = 32875 # /usr/include/GL/gl.h:1052 +GL_PACK_IMAGE_HEIGHT = 32876 # /usr/include/GL/gl.h:1053 +GL_UNPACK_SKIP_IMAGES = 32877 # /usr/include/GL/gl.h:1054 +GL_UNPACK_IMAGE_HEIGHT = 32878 # /usr/include/GL/gl.h:1055 +GL_TEXTURE_3D = 32879 # /usr/include/GL/gl.h:1056 +GL_PROXY_TEXTURE_3D = 32880 # /usr/include/GL/gl.h:1057 +GL_TEXTURE_DEPTH = 32881 # /usr/include/GL/gl.h:1058 +GL_TEXTURE_WRAP_R = 32882 # /usr/include/GL/gl.h:1059 +GL_MAX_3D_TEXTURE_SIZE = 32883 # /usr/include/GL/gl.h:1060 +GL_BGR = 32992 # /usr/include/GL/gl.h:1061 +GL_BGRA = 32993 # /usr/include/GL/gl.h:1062 +GL_UNSIGNED_BYTE_3_3_2 = 32818 # /usr/include/GL/gl.h:1063 +GL_UNSIGNED_BYTE_2_3_3_REV = 33634 # /usr/include/GL/gl.h:1064 +GL_UNSIGNED_SHORT_5_6_5 = 33635 # /usr/include/GL/gl.h:1065 +GL_UNSIGNED_SHORT_5_6_5_REV = 33636 # /usr/include/GL/gl.h:1066 +GL_UNSIGNED_SHORT_4_4_4_4 = 32819 # /usr/include/GL/gl.h:1067 +GL_UNSIGNED_SHORT_4_4_4_4_REV = 33637 # /usr/include/GL/gl.h:1068 +GL_UNSIGNED_SHORT_5_5_5_1 = 32820 # /usr/include/GL/gl.h:1069 +GL_UNSIGNED_SHORT_1_5_5_5_REV = 33638 # /usr/include/GL/gl.h:1070 +GL_UNSIGNED_INT_8_8_8_8 = 32821 # /usr/include/GL/gl.h:1071 +GL_UNSIGNED_INT_8_8_8_8_REV = 33639 # /usr/include/GL/gl.h:1072 +GL_UNSIGNED_INT_10_10_10_2 = 32822 # /usr/include/GL/gl.h:1073 +GL_UNSIGNED_INT_2_10_10_10_REV = 33640 # /usr/include/GL/gl.h:1074 +GL_RESCALE_NORMAL = 32826 # /usr/include/GL/gl.h:1075 +GL_LIGHT_MODEL_COLOR_CONTROL = 33272 # /usr/include/GL/gl.h:1076 +GL_SINGLE_COLOR = 33273 # /usr/include/GL/gl.h:1077 +GL_SEPARATE_SPECULAR_COLOR = 33274 # /usr/include/GL/gl.h:1078 +GL_CLAMP_TO_EDGE = 33071 # /usr/include/GL/gl.h:1079 +GL_TEXTURE_MIN_LOD = 33082 # /usr/include/GL/gl.h:1080 +GL_TEXTURE_MAX_LOD = 33083 # /usr/include/GL/gl.h:1081 +GL_TEXTURE_BASE_LEVEL = 33084 # /usr/include/GL/gl.h:1082 +GL_TEXTURE_MAX_LEVEL = 33085 # /usr/include/GL/gl.h:1083 +GL_MAX_ELEMENTS_VERTICES = 33000 # /usr/include/GL/gl.h:1084 +GL_MAX_ELEMENTS_INDICES = 33001 # /usr/include/GL/gl.h:1085 +GL_ALIASED_POINT_SIZE_RANGE = 33901 # /usr/include/GL/gl.h:1086 +GL_ALIASED_LINE_WIDTH_RANGE = 33902 # /usr/include/GL/gl.h:1087 +GL_ACTIVE_TEXTURE = 34016 # /usr/include/GL/gl.h:1090 +GL_CLIENT_ACTIVE_TEXTURE = 34017 # /usr/include/GL/gl.h:1091 +GL_MAX_TEXTURE_UNITS = 34018 # /usr/include/GL/gl.h:1092 +GL_TEXTURE0 = 33984 # /usr/include/GL/gl.h:1093 +GL_TEXTURE1 = 33985 # /usr/include/GL/gl.h:1094 +GL_TEXTURE2 = 33986 # /usr/include/GL/gl.h:1095 +GL_TEXTURE3 = 33987 # /usr/include/GL/gl.h:1096 +GL_TEXTURE4 = 33988 # /usr/include/GL/gl.h:1097 +GL_TEXTURE5 = 33989 # /usr/include/GL/gl.h:1098 +GL_TEXTURE6 = 33990 # /usr/include/GL/gl.h:1099 +GL_TEXTURE7 = 33991 # /usr/include/GL/gl.h:1100 +GL_TEXTURE8 = 33992 # /usr/include/GL/gl.h:1101 +GL_TEXTURE9 = 33993 # /usr/include/GL/gl.h:1102 +GL_TEXTURE10 = 33994 # /usr/include/GL/gl.h:1103 +GL_TEXTURE11 = 33995 # /usr/include/GL/gl.h:1104 +GL_TEXTURE12 = 33996 # /usr/include/GL/gl.h:1105 +GL_TEXTURE13 = 33997 # /usr/include/GL/gl.h:1106 +GL_TEXTURE14 = 33998 # /usr/include/GL/gl.h:1107 +GL_TEXTURE15 = 33999 # /usr/include/GL/gl.h:1108 +GL_TEXTURE16 = 34000 # /usr/include/GL/gl.h:1109 +GL_TEXTURE17 = 34001 # /usr/include/GL/gl.h:1110 +GL_TEXTURE18 = 34002 # /usr/include/GL/gl.h:1111 +GL_TEXTURE19 = 34003 # /usr/include/GL/gl.h:1112 +GL_TEXTURE20 = 34004 # /usr/include/GL/gl.h:1113 +GL_TEXTURE21 = 34005 # /usr/include/GL/gl.h:1114 +GL_TEXTURE22 = 34006 # /usr/include/GL/gl.h:1115 +GL_TEXTURE23 = 34007 # /usr/include/GL/gl.h:1116 +GL_TEXTURE24 = 34008 # /usr/include/GL/gl.h:1117 +GL_TEXTURE25 = 34009 # /usr/include/GL/gl.h:1118 +GL_TEXTURE26 = 34010 # /usr/include/GL/gl.h:1119 +GL_TEXTURE27 = 34011 # /usr/include/GL/gl.h:1120 +GL_TEXTURE28 = 34012 # /usr/include/GL/gl.h:1121 +GL_TEXTURE29 = 34013 # /usr/include/GL/gl.h:1122 +GL_TEXTURE30 = 34014 # /usr/include/GL/gl.h:1123 +GL_TEXTURE31 = 34015 # /usr/include/GL/gl.h:1124 +GL_NORMAL_MAP = 34065 # /usr/include/GL/gl.h:1125 +GL_REFLECTION_MAP = 34066 # /usr/include/GL/gl.h:1126 +GL_TEXTURE_CUBE_MAP = 34067 # /usr/include/GL/gl.h:1127 +GL_TEXTURE_BINDING_CUBE_MAP = 34068 # /usr/include/GL/gl.h:1128 +GL_TEXTURE_CUBE_MAP_POSITIVE_X = 34069 # /usr/include/GL/gl.h:1129 +GL_TEXTURE_CUBE_MAP_NEGATIVE_X = 34070 # /usr/include/GL/gl.h:1130 +GL_TEXTURE_CUBE_MAP_POSITIVE_Y = 34071 # /usr/include/GL/gl.h:1131 +GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 34072 # /usr/include/GL/gl.h:1132 +GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 34073 # /usr/include/GL/gl.h:1133 +GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 34074 # /usr/include/GL/gl.h:1134 +GL_PROXY_TEXTURE_CUBE_MAP = 34075 # /usr/include/GL/gl.h:1135 +GL_MAX_CUBE_MAP_TEXTURE_SIZE = 34076 # /usr/include/GL/gl.h:1136 +GL_COMBINE = 34160 # /usr/include/GL/gl.h:1137 +GL_COMBINE_RGB = 34161 # /usr/include/GL/gl.h:1138 +GL_COMBINE_ALPHA = 34162 # /usr/include/GL/gl.h:1139 +GL_RGB_SCALE = 34163 # /usr/include/GL/gl.h:1140 +GL_ADD_SIGNED = 34164 # /usr/include/GL/gl.h:1141 +GL_INTERPOLATE = 34165 # /usr/include/GL/gl.h:1142 +GL_CONSTANT = 34166 # /usr/include/GL/gl.h:1143 +GL_PRIMARY_COLOR = 34167 # /usr/include/GL/gl.h:1144 +GL_PREVIOUS = 34168 # /usr/include/GL/gl.h:1145 +GL_SOURCE0_RGB = 34176 # /usr/include/GL/gl.h:1146 +GL_SOURCE1_RGB = 34177 # /usr/include/GL/gl.h:1147 +GL_SOURCE2_RGB = 34178 # /usr/include/GL/gl.h:1148 +GL_SOURCE0_ALPHA = 34184 # /usr/include/GL/gl.h:1149 +GL_SOURCE1_ALPHA = 34185 # /usr/include/GL/gl.h:1150 +GL_SOURCE2_ALPHA = 34186 # /usr/include/GL/gl.h:1151 +GL_OPERAND0_RGB = 34192 # /usr/include/GL/gl.h:1152 +GL_OPERAND1_RGB = 34193 # /usr/include/GL/gl.h:1153 +GL_OPERAND2_RGB = 34194 # /usr/include/GL/gl.h:1154 +GL_OPERAND0_ALPHA = 34200 # /usr/include/GL/gl.h:1155 +GL_OPERAND1_ALPHA = 34201 # /usr/include/GL/gl.h:1156 +GL_OPERAND2_ALPHA = 34202 # /usr/include/GL/gl.h:1157 +GL_SUBTRACT = 34023 # /usr/include/GL/gl.h:1158 +GL_TRANSPOSE_MODELVIEW_MATRIX = 34019 # /usr/include/GL/gl.h:1159 +GL_TRANSPOSE_PROJECTION_MATRIX = 34020 # /usr/include/GL/gl.h:1160 +GL_TRANSPOSE_TEXTURE_MATRIX = 34021 # /usr/include/GL/gl.h:1161 +GL_TRANSPOSE_COLOR_MATRIX = 34022 # /usr/include/GL/gl.h:1162 +GL_COMPRESSED_ALPHA = 34025 # /usr/include/GL/gl.h:1163 +GL_COMPRESSED_LUMINANCE = 34026 # /usr/include/GL/gl.h:1164 +GL_COMPRESSED_LUMINANCE_ALPHA = 34027 # /usr/include/GL/gl.h:1165 +GL_COMPRESSED_INTENSITY = 34028 # /usr/include/GL/gl.h:1166 +GL_COMPRESSED_RGB = 34029 # /usr/include/GL/gl.h:1167 +GL_COMPRESSED_RGBA = 34030 # /usr/include/GL/gl.h:1168 +GL_TEXTURE_COMPRESSION_HINT = 34031 # /usr/include/GL/gl.h:1169 +GL_TEXTURE_COMPRESSED_IMAGE_SIZE = 34464 # /usr/include/GL/gl.h:1170 +GL_TEXTURE_COMPRESSED = 34465 # /usr/include/GL/gl.h:1171 +GL_NUM_COMPRESSED_TEXTURE_FORMATS = 34466 # /usr/include/GL/gl.h:1172 +GL_COMPRESSED_TEXTURE_FORMATS = 34467 # /usr/include/GL/gl.h:1173 +GL_DOT3_RGB = 34478 # /usr/include/GL/gl.h:1174 +GL_DOT3_RGBA = 34479 # /usr/include/GL/gl.h:1175 +GL_CLAMP_TO_BORDER = 33069 # /usr/include/GL/gl.h:1176 +GL_MULTISAMPLE = 32925 # /usr/include/GL/gl.h:1177 +GL_SAMPLE_ALPHA_TO_COVERAGE = 32926 # /usr/include/GL/gl.h:1178 +GL_SAMPLE_ALPHA_TO_ONE = 32927 # /usr/include/GL/gl.h:1179 +GL_SAMPLE_COVERAGE = 32928 # /usr/include/GL/gl.h:1180 +GL_SAMPLE_BUFFERS = 32936 # /usr/include/GL/gl.h:1181 +GL_SAMPLES = 32937 # /usr/include/GL/gl.h:1182 +GL_SAMPLE_COVERAGE_VALUE = 32938 # /usr/include/GL/gl.h:1183 +GL_SAMPLE_COVERAGE_INVERT = 32939 # /usr/include/GL/gl.h:1184 +GL_MULTISAMPLE_BIT = 536870912 # /usr/include/GL/gl.h:1185 +GL_VERTEX_ARRAY_EXT = 32884 # /usr/include/GL/gl.h:1188 +GL_NORMAL_ARRAY_EXT = 32885 # /usr/include/GL/gl.h:1189 +GL_COLOR_ARRAY_EXT = 32886 # /usr/include/GL/gl.h:1190 +GL_INDEX_ARRAY_EXT = 32887 # /usr/include/GL/gl.h:1191 +GL_TEXTURE_COORD_ARRAY_EXT = 32888 # /usr/include/GL/gl.h:1192 +GL_EDGE_FLAG_ARRAY_EXT = 32889 # /usr/include/GL/gl.h:1193 +GL_VERTEX_ARRAY_SIZE_EXT = 32890 # /usr/include/GL/gl.h:1194 +GL_VERTEX_ARRAY_TYPE_EXT = 32891 # /usr/include/GL/gl.h:1195 +GL_VERTEX_ARRAY_STRIDE_EXT = 32892 # /usr/include/GL/gl.h:1196 +GL_VERTEX_ARRAY_COUNT_EXT = 32893 # /usr/include/GL/gl.h:1197 +GL_NORMAL_ARRAY_TYPE_EXT = 32894 # /usr/include/GL/gl.h:1198 +GL_NORMAL_ARRAY_STRIDE_EXT = 32895 # /usr/include/GL/gl.h:1199 +GL_NORMAL_ARRAY_COUNT_EXT = 32896 # /usr/include/GL/gl.h:1200 +GL_COLOR_ARRAY_SIZE_EXT = 32897 # /usr/include/GL/gl.h:1201 +GL_COLOR_ARRAY_TYPE_EXT = 32898 # /usr/include/GL/gl.h:1202 +GL_COLOR_ARRAY_STRIDE_EXT = 32899 # /usr/include/GL/gl.h:1203 +GL_COLOR_ARRAY_COUNT_EXT = 32900 # /usr/include/GL/gl.h:1204 +GL_INDEX_ARRAY_TYPE_EXT = 32901 # /usr/include/GL/gl.h:1205 +GL_INDEX_ARRAY_STRIDE_EXT = 32902 # /usr/include/GL/gl.h:1206 +GL_INDEX_ARRAY_COUNT_EXT = 32903 # /usr/include/GL/gl.h:1207 +GL_TEXTURE_COORD_ARRAY_SIZE_EXT = 32904 # /usr/include/GL/gl.h:1208 +GL_TEXTURE_COORD_ARRAY_TYPE_EXT = 32905 # /usr/include/GL/gl.h:1209 +GL_TEXTURE_COORD_ARRAY_STRIDE_EXT = 32906 # /usr/include/GL/gl.h:1210 +GL_TEXTURE_COORD_ARRAY_COUNT_EXT = 32907 # /usr/include/GL/gl.h:1211 +GL_EDGE_FLAG_ARRAY_STRIDE_EXT = 32908 # /usr/include/GL/gl.h:1212 +GL_EDGE_FLAG_ARRAY_COUNT_EXT = 32909 # /usr/include/GL/gl.h:1213 +GL_VERTEX_ARRAY_POINTER_EXT = 32910 # /usr/include/GL/gl.h:1214 +GL_NORMAL_ARRAY_POINTER_EXT = 32911 # /usr/include/GL/gl.h:1215 +GL_COLOR_ARRAY_POINTER_EXT = 32912 # /usr/include/GL/gl.h:1216 +GL_INDEX_ARRAY_POINTER_EXT = 32913 # /usr/include/GL/gl.h:1217 +GL_TEXTURE_COORD_ARRAY_POINTER_EXT = 32914 # /usr/include/GL/gl.h:1218 +GL_EDGE_FLAG_ARRAY_POINTER_EXT = 32915 # /usr/include/GL/gl.h:1219 +GL_TEXTURE_MIN_LOD_SGIS = 33082 # /usr/include/GL/gl.h:1222 +GL_TEXTURE_MAX_LOD_SGIS = 33083 # /usr/include/GL/gl.h:1223 +GL_TEXTURE_BASE_LEVEL_SGIS = 33084 # /usr/include/GL/gl.h:1224 +GL_TEXTURE_MAX_LEVEL_SGIS = 33085 # /usr/include/GL/gl.h:1225 +GL_SHARED_TEXTURE_PALETTE_EXT = 33275 # /usr/include/GL/gl.h:1228 +GL_RESCALE_NORMAL_EXT = 32826 # /usr/include/GL/gl.h:1231 +GL_TEXTURE_COMPARE_SGIX = 33178 # /usr/include/GL/gl.h:1234 +GL_TEXTURE_COMPARE_OPERATOR_SGIX = 33179 # /usr/include/GL/gl.h:1235 +GL_TEXTURE_LEQUAL_R_SGIX = 33180 # /usr/include/GL/gl.h:1236 +GL_TEXTURE_GEQUAL_R_SGIX = 33181 # /usr/include/GL/gl.h:1237 +GL_DEPTH_COMPONENT16_SGIX = 33189 # /usr/include/GL/gl.h:1240 +GL_DEPTH_COMPONENT24_SGIX = 33190 # /usr/include/GL/gl.h:1241 +GL_DEPTH_COMPONENT32_SGIX = 33191 # /usr/include/GL/gl.h:1242 +GL_GENERATE_MIPMAP_SGIS = 33169 # /usr/include/GL/gl.h:1245 +GL_GENERATE_MIPMAP_HINT_SGIS = 33170 # /usr/include/GL/gl.h:1246 +GL_POINT_SIZE_MIN = 33062 # /usr/include/GL/gl.h:1249 +GL_POINT_SIZE_MAX = 33063 # /usr/include/GL/gl.h:1250 +GL_POINT_FADE_THRESHOLD_SIZE = 33064 # /usr/include/GL/gl.h:1251 +GL_POINT_DISTANCE_ATTENUATION = 33065 # /usr/include/GL/gl.h:1252 +GL_FOG_COORDINATE_SOURCE = 33872 # /usr/include/GL/gl.h:1253 +GL_FOG_COORDINATE = 33873 # /usr/include/GL/gl.h:1254 +GL_FRAGMENT_DEPTH = 33874 # /usr/include/GL/gl.h:1255 +GL_CURRENT_FOG_COORDINATE = 33875 # /usr/include/GL/gl.h:1256 +GL_FOG_COORDINATE_ARRAY_TYPE = 33876 # /usr/include/GL/gl.h:1257 +GL_FOG_COORDINATE_ARRAY_STRIDE = 33877 # /usr/include/GL/gl.h:1258 +GL_FOG_COORDINATE_ARRAY_POINTER = 33878 # /usr/include/GL/gl.h:1259 +GL_FOG_COORDINATE_ARRAY = 33879 # /usr/include/GL/gl.h:1260 +GL_COLOR_SUM = 33880 # /usr/include/GL/gl.h:1261 +GL_CURRENT_SECONDARY_COLOR = 33881 # /usr/include/GL/gl.h:1262 +GL_SECONDARY_COLOR_ARRAY_SIZE = 33882 # /usr/include/GL/gl.h:1263 +GL_SECONDARY_COLOR_ARRAY_TYPE = 33883 # /usr/include/GL/gl.h:1264 +GL_SECONDARY_COLOR_ARRAY_STRIDE = 33884 # /usr/include/GL/gl.h:1265 +GL_SECONDARY_COLOR_ARRAY_POINTER = 33885 # /usr/include/GL/gl.h:1266 +GL_SECONDARY_COLOR_ARRAY = 33886 # /usr/include/GL/gl.h:1267 +GL_INCR_WRAP = 34055 # /usr/include/GL/gl.h:1268 +GL_DECR_WRAP = 34056 # /usr/include/GL/gl.h:1269 +GL_MAX_TEXTURE_LOD_BIAS = 34045 # /usr/include/GL/gl.h:1270 +GL_TEXTURE_FILTER_CONTROL = 34048 # /usr/include/GL/gl.h:1271 +GL_TEXTURE_LOD_BIAS = 34049 # /usr/include/GL/gl.h:1272 +GL_GENERATE_MIPMAP = 33169 # /usr/include/GL/gl.h:1273 +GL_GENERATE_MIPMAP_HINT = 33170 # /usr/include/GL/gl.h:1274 +GL_BLEND_DST_RGB = 32968 # /usr/include/GL/gl.h:1275 +GL_BLEND_SRC_RGB = 32969 # /usr/include/GL/gl.h:1276 +GL_BLEND_DST_ALPHA = 32970 # /usr/include/GL/gl.h:1277 +GL_BLEND_SRC_ALPHA = 32971 # /usr/include/GL/gl.h:1278 +GL_MIRRORED_REPEAT = 33648 # /usr/include/GL/gl.h:1279 +GL_DEPTH_COMPONENT16 = 33189 # /usr/include/GL/gl.h:1280 +GL_DEPTH_COMPONENT24 = 33190 # /usr/include/GL/gl.h:1281 +GL_DEPTH_COMPONENT32 = 33191 # /usr/include/GL/gl.h:1282 +GL_TEXTURE_DEPTH_SIZE = 34890 # /usr/include/GL/gl.h:1283 +GL_DEPTH_TEXTURE_MODE = 34891 # /usr/include/GL/gl.h:1284 +GL_TEXTURE_COMPARE_MODE = 34892 # /usr/include/GL/gl.h:1285 +GL_TEXTURE_COMPARE_FUNC = 34893 # /usr/include/GL/gl.h:1286 +GL_COMPARE_R_TO_TEXTURE = 34894 # /usr/include/GL/gl.h:1287 +# /usr/include/GL/gl.h:1291 +glAccum = _link_function('glAccum', None, [GLenum, GLfloat], None) + +# /usr/include/GL/gl.h:1292 +glAlphaFunc = _link_function('glAlphaFunc', None, [GLenum, GLclampf], None) + +# /usr/include/GL/gl.h:1293 +glAreTexturesResident = _link_function('glAreTexturesResident', GLboolean, [GLsizei, POINTER(GLuint), POINTER(GLboolean)], None) + +# /usr/include/GL/gl.h:1294 +glArrayElement = _link_function('glArrayElement', None, [GLint], None) + +# /usr/include/GL/gl.h:1295 +glBegin = _link_function('glBegin', None, [GLenum], None) + +# /usr/include/GL/gl.h:1296 +glBindTexture = _link_function('glBindTexture', None, [GLenum, GLuint], None) + +# /usr/include/GL/gl.h:1297 +glBitmap = _link_function('glBitmap', None, [GLsizei, GLsizei, GLfloat, GLfloat, GLfloat, GLfloat, POINTER(GLubyte)], None) + +# /usr/include/GL/gl.h:1298 +glBlendFunc = _link_function('glBlendFunc', None, [GLenum, GLenum], None) + +# /usr/include/GL/gl.h:1299 +glCallList = _link_function('glCallList', None, [GLuint], None) + +# /usr/include/GL/gl.h:1300 +glCallLists = _link_function('glCallLists', None, [GLsizei, GLenum, POINTER(GLvoid)], None) + +# /usr/include/GL/gl.h:1301 +glClear = _link_function('glClear', None, [GLbitfield], None) + +# /usr/include/GL/gl.h:1302 +glClearAccum = _link_function('glClearAccum', None, [GLfloat, GLfloat, GLfloat, GLfloat], None) + +# /usr/include/GL/gl.h:1303 +glClearColor = _link_function('glClearColor', None, [GLclampf, GLclampf, GLclampf, GLclampf], None) + +# /usr/include/GL/gl.h:1304 +glClearDepth = _link_function('glClearDepth', None, [GLclampd], None) + +# /usr/include/GL/gl.h:1305 +glClearIndex = _link_function('glClearIndex', None, [GLfloat], None) + +# /usr/include/GL/gl.h:1306 +glClearStencil = _link_function('glClearStencil', None, [GLint], None) + +# /usr/include/GL/gl.h:1307 +glClipPlane = _link_function('glClipPlane', None, [GLenum, POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1308 +glColor3b = _link_function('glColor3b', None, [GLbyte, GLbyte, GLbyte], None) + +# /usr/include/GL/gl.h:1309 +glColor3bv = _link_function('glColor3bv', None, [POINTER(GLbyte)], None) + +# /usr/include/GL/gl.h:1310 +glColor3d = _link_function('glColor3d', None, [GLdouble, GLdouble, GLdouble], None) + +# /usr/include/GL/gl.h:1311 +glColor3dv = _link_function('glColor3dv', None, [POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1312 +glColor3f = _link_function('glColor3f', None, [GLfloat, GLfloat, GLfloat], None) + +# /usr/include/GL/gl.h:1313 +glColor3fv = _link_function('glColor3fv', None, [POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1314 +glColor3i = _link_function('glColor3i', None, [GLint, GLint, GLint], None) + +# /usr/include/GL/gl.h:1315 +glColor3iv = _link_function('glColor3iv', None, [POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1316 +glColor3s = _link_function('glColor3s', None, [GLshort, GLshort, GLshort], None) + +# /usr/include/GL/gl.h:1317 +glColor3sv = _link_function('glColor3sv', None, [POINTER(GLshort)], None) + +# /usr/include/GL/gl.h:1318 +glColor3ub = _link_function('glColor3ub', None, [GLubyte, GLubyte, GLubyte], None) + +# /usr/include/GL/gl.h:1319 +glColor3ubv = _link_function('glColor3ubv', None, [POINTER(GLubyte)], None) + +# /usr/include/GL/gl.h:1320 +glColor3ui = _link_function('glColor3ui', None, [GLuint, GLuint, GLuint], None) + +# /usr/include/GL/gl.h:1321 +glColor3uiv = _link_function('glColor3uiv', None, [POINTER(GLuint)], None) + +# /usr/include/GL/gl.h:1322 +glColor3us = _link_function('glColor3us', None, [GLushort, GLushort, GLushort], None) + +# /usr/include/GL/gl.h:1323 +glColor3usv = _link_function('glColor3usv', None, [POINTER(GLushort)], None) + +# /usr/include/GL/gl.h:1324 +glColor4b = _link_function('glColor4b', None, [GLbyte, GLbyte, GLbyte, GLbyte], None) + +# /usr/include/GL/gl.h:1325 +glColor4bv = _link_function('glColor4bv', None, [POINTER(GLbyte)], None) + +# /usr/include/GL/gl.h:1326 +glColor4d = _link_function('glColor4d', None, [GLdouble, GLdouble, GLdouble, GLdouble], None) + +# /usr/include/GL/gl.h:1327 +glColor4dv = _link_function('glColor4dv', None, [POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1328 +glColor4f = _link_function('glColor4f', None, [GLfloat, GLfloat, GLfloat, GLfloat], None) + +# /usr/include/GL/gl.h:1329 +glColor4fv = _link_function('glColor4fv', None, [POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1330 +glColor4i = _link_function('glColor4i', None, [GLint, GLint, GLint, GLint], None) + +# /usr/include/GL/gl.h:1331 +glColor4iv = _link_function('glColor4iv', None, [POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1332 +glColor4s = _link_function('glColor4s', None, [GLshort, GLshort, GLshort, GLshort], None) + +# /usr/include/GL/gl.h:1333 +glColor4sv = _link_function('glColor4sv', None, [POINTER(GLshort)], None) + +# /usr/include/GL/gl.h:1334 +glColor4ub = _link_function('glColor4ub', None, [GLubyte, GLubyte, GLubyte, GLubyte], None) + +# /usr/include/GL/gl.h:1335 +glColor4ubv = _link_function('glColor4ubv', None, [POINTER(GLubyte)], None) + +# /usr/include/GL/gl.h:1336 +glColor4ui = _link_function('glColor4ui', None, [GLuint, GLuint, GLuint, GLuint], None) + +# /usr/include/GL/gl.h:1337 +glColor4uiv = _link_function('glColor4uiv', None, [POINTER(GLuint)], None) + +# /usr/include/GL/gl.h:1338 +glColor4us = _link_function('glColor4us', None, [GLushort, GLushort, GLushort, GLushort], None) + +# /usr/include/GL/gl.h:1339 +glColor4usv = _link_function('glColor4usv', None, [POINTER(GLushort)], None) + +# /usr/include/GL/gl.h:1340 +glColorMask = _link_function('glColorMask', None, [GLboolean, GLboolean, GLboolean, GLboolean], None) + +# /usr/include/GL/gl.h:1341 +glColorMaterial = _link_function('glColorMaterial', None, [GLenum, GLenum], None) + +# /usr/include/GL/gl.h:1342 +glColorPointer = _link_function('glColorPointer', None, [GLint, GLenum, GLsizei, POINTER(GLvoid)], None) + +# /usr/include/GL/gl.h:1343 +glCopyPixels = _link_function('glCopyPixels', None, [GLint, GLint, GLsizei, GLsizei, GLenum], None) + +# /usr/include/GL/gl.h:1344 +glCopyTexImage1D = _link_function('glCopyTexImage1D', None, [GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint], None) + +# /usr/include/GL/gl.h:1345 +glCopyTexImage2D = _link_function('glCopyTexImage2D', None, [GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint], None) + +# /usr/include/GL/gl.h:1346 +glCopyTexSubImage1D = _link_function('glCopyTexSubImage1D', None, [GLenum, GLint, GLint, GLint, GLint, GLsizei], None) + +# /usr/include/GL/gl.h:1347 +glCopyTexSubImage2D = _link_function('glCopyTexSubImage2D', None, [GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei], None) + +# /usr/include/GL/gl.h:1348 +glCullFace = _link_function('glCullFace', None, [GLenum], None) + +# /usr/include/GL/gl.h:1349 +glDeleteLists = _link_function('glDeleteLists', None, [GLuint, GLsizei], None) + +# /usr/include/GL/gl.h:1350 +glDeleteTextures = _link_function('glDeleteTextures', None, [GLsizei, POINTER(GLuint)], None) + +# /usr/include/GL/gl.h:1351 +glDepthFunc = _link_function('glDepthFunc', None, [GLenum], None) + +# /usr/include/GL/gl.h:1352 +glDepthMask = _link_function('glDepthMask', None, [GLboolean], None) + +# /usr/include/GL/gl.h:1353 +glDepthRange = _link_function('glDepthRange', None, [GLclampd, GLclampd], None) + +# /usr/include/GL/gl.h:1354 +glDisable = _link_function('glDisable', None, [GLenum], None) + +# /usr/include/GL/gl.h:1355 +glDisableClientState = _link_function('glDisableClientState', None, [GLenum], None) + +# /usr/include/GL/gl.h:1356 +glDrawArrays = _link_function('glDrawArrays', None, [GLenum, GLint, GLsizei], None) + +# /usr/include/GL/gl.h:1357 +glDrawBuffer = _link_function('glDrawBuffer', None, [GLenum], None) + +# /usr/include/GL/gl.h:1358 +glDrawElements = _link_function('glDrawElements', None, [GLenum, GLsizei, GLenum, POINTER(GLvoid)], None) + +# /usr/include/GL/gl.h:1359 +glDrawPixels = _link_function('glDrawPixels', None, [GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)], None) + +# /usr/include/GL/gl.h:1360 +glEdgeFlag = _link_function('glEdgeFlag', None, [GLboolean], None) + +# /usr/include/GL/gl.h:1361 +glEdgeFlagPointer = _link_function('glEdgeFlagPointer', None, [GLsizei, POINTER(GLvoid)], None) + +# /usr/include/GL/gl.h:1362 +glEdgeFlagv = _link_function('glEdgeFlagv', None, [POINTER(GLboolean)], None) + +# /usr/include/GL/gl.h:1363 +glEnable = _link_function('glEnable', None, [GLenum], None) + +# /usr/include/GL/gl.h:1364 +glEnableClientState = _link_function('glEnableClientState', None, [GLenum], None) + +# /usr/include/GL/gl.h:1365 +glEnd = _link_function('glEnd', None, [], None) + +# /usr/include/GL/gl.h:1366 +glEndList = _link_function('glEndList', None, [], None) + +# /usr/include/GL/gl.h:1367 +glEvalCoord1d = _link_function('glEvalCoord1d', None, [GLdouble], None) + +# /usr/include/GL/gl.h:1368 +glEvalCoord1dv = _link_function('glEvalCoord1dv', None, [POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1369 +glEvalCoord1f = _link_function('glEvalCoord1f', None, [GLfloat], None) + +# /usr/include/GL/gl.h:1370 +glEvalCoord1fv = _link_function('glEvalCoord1fv', None, [POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1371 +glEvalCoord2d = _link_function('glEvalCoord2d', None, [GLdouble, GLdouble], None) + +# /usr/include/GL/gl.h:1372 +glEvalCoord2dv = _link_function('glEvalCoord2dv', None, [POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1373 +glEvalCoord2f = _link_function('glEvalCoord2f', None, [GLfloat, GLfloat], None) + +# /usr/include/GL/gl.h:1374 +glEvalCoord2fv = _link_function('glEvalCoord2fv', None, [POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1375 +glEvalMesh1 = _link_function('glEvalMesh1', None, [GLenum, GLint, GLint], None) + +# /usr/include/GL/gl.h:1376 +glEvalMesh2 = _link_function('glEvalMesh2', None, [GLenum, GLint, GLint, GLint, GLint], None) + +# /usr/include/GL/gl.h:1377 +glEvalPoint1 = _link_function('glEvalPoint1', None, [GLint], None) + +# /usr/include/GL/gl.h:1378 +glEvalPoint2 = _link_function('glEvalPoint2', None, [GLint, GLint], None) + +# /usr/include/GL/gl.h:1379 +glFeedbackBuffer = _link_function('glFeedbackBuffer', None, [GLsizei, GLenum, POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1380 +glFinish = _link_function('glFinish', None, [], None) + +# /usr/include/GL/gl.h:1381 +glFlush = _link_function('glFlush', None, [], None) + +# /usr/include/GL/gl.h:1382 +glFogf = _link_function('glFogf', None, [GLenum, GLfloat], None) + +# /usr/include/GL/gl.h:1383 +glFogfv = _link_function('glFogfv', None, [GLenum, POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1384 +glFogi = _link_function('glFogi', None, [GLenum, GLint], None) + +# /usr/include/GL/gl.h:1385 +glFogiv = _link_function('glFogiv', None, [GLenum, POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1386 +glFrontFace = _link_function('glFrontFace', None, [GLenum], None) + +# /usr/include/GL/gl.h:1387 +glFrustum = _link_function('glFrustum', None, [GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble], None) + +# /usr/include/GL/gl.h:1388 +glGenLists = _link_function('glGenLists', GLuint, [GLsizei], None) + +# /usr/include/GL/gl.h:1389 +glGenTextures = _link_function('glGenTextures', None, [GLsizei, POINTER(GLuint)], None) + +# /usr/include/GL/gl.h:1390 +glGetBooleanv = _link_function('glGetBooleanv', None, [GLenum, POINTER(GLboolean)], None) + +# /usr/include/GL/gl.h:1391 +glGetClipPlane = _link_function('glGetClipPlane', None, [GLenum, POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1392 +glGetDoublev = _link_function('glGetDoublev', None, [GLenum, POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1393 +glGetError = _link_function('glGetError', GLenum, [], None) + +# /usr/include/GL/gl.h:1394 +glGetFloatv = _link_function('glGetFloatv', None, [GLenum, POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1395 +glGetIntegerv = _link_function('glGetIntegerv', None, [GLenum, POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1396 +glGetLightfv = _link_function('glGetLightfv', None, [GLenum, GLenum, POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1397 +glGetLightiv = _link_function('glGetLightiv', None, [GLenum, GLenum, POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1398 +glGetMapdv = _link_function('glGetMapdv', None, [GLenum, GLenum, POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1399 +glGetMapfv = _link_function('glGetMapfv', None, [GLenum, GLenum, POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1400 +glGetMapiv = _link_function('glGetMapiv', None, [GLenum, GLenum, POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1401 +glGetMaterialfv = _link_function('glGetMaterialfv', None, [GLenum, GLenum, POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1402 +glGetMaterialiv = _link_function('glGetMaterialiv', None, [GLenum, GLenum, POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1403 +glGetPixelMapfv = _link_function('glGetPixelMapfv', None, [GLenum, POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1404 +glGetPixelMapuiv = _link_function('glGetPixelMapuiv', None, [GLenum, POINTER(GLuint)], None) + +# /usr/include/GL/gl.h:1405 +glGetPixelMapusv = _link_function('glGetPixelMapusv', None, [GLenum, POINTER(GLushort)], None) + +# /usr/include/GL/gl.h:1406 +glGetPointerv = _link_function('glGetPointerv', None, [GLenum, POINTER(POINTER(GLvoid))], None) + +# /usr/include/GL/gl.h:1407 +glGetPolygonStipple = _link_function('glGetPolygonStipple', None, [POINTER(GLubyte)], None) + +# /usr/include/GL/gl.h:1408 +glGetString = _link_function('glGetString', POINTER(GLubyte), [GLenum], None) + +# /usr/include/GL/gl.h:1409 +glGetTexEnvfv = _link_function('glGetTexEnvfv', None, [GLenum, GLenum, POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1410 +glGetTexEnviv = _link_function('glGetTexEnviv', None, [GLenum, GLenum, POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1411 +glGetTexGendv = _link_function('glGetTexGendv', None, [GLenum, GLenum, POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1412 +glGetTexGenfv = _link_function('glGetTexGenfv', None, [GLenum, GLenum, POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1413 +glGetTexGeniv = _link_function('glGetTexGeniv', None, [GLenum, GLenum, POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1414 +glGetTexImage = _link_function('glGetTexImage', None, [GLenum, GLint, GLenum, GLenum, POINTER(GLvoid)], None) + +# /usr/include/GL/gl.h:1415 +glGetTexLevelParameterfv = _link_function('glGetTexLevelParameterfv', None, [GLenum, GLint, GLenum, POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1416 +glGetTexLevelParameteriv = _link_function('glGetTexLevelParameteriv', None, [GLenum, GLint, GLenum, POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1417 +glGetTexParameterfv = _link_function('glGetTexParameterfv', None, [GLenum, GLenum, POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1418 +glGetTexParameteriv = _link_function('glGetTexParameteriv', None, [GLenum, GLenum, POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1419 +glHint = _link_function('glHint', None, [GLenum, GLenum], None) + +# /usr/include/GL/gl.h:1420 +glIndexMask = _link_function('glIndexMask', None, [GLuint], None) + +# /usr/include/GL/gl.h:1421 +glIndexPointer = _link_function('glIndexPointer', None, [GLenum, GLsizei, POINTER(GLvoid)], None) + +# /usr/include/GL/gl.h:1422 +glIndexd = _link_function('glIndexd', None, [GLdouble], None) + +# /usr/include/GL/gl.h:1423 +glIndexdv = _link_function('glIndexdv', None, [POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1424 +glIndexf = _link_function('glIndexf', None, [GLfloat], None) + +# /usr/include/GL/gl.h:1425 +glIndexfv = _link_function('glIndexfv', None, [POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1426 +glIndexi = _link_function('glIndexi', None, [GLint], None) + +# /usr/include/GL/gl.h:1427 +glIndexiv = _link_function('glIndexiv', None, [POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1428 +glIndexs = _link_function('glIndexs', None, [GLshort], None) + +# /usr/include/GL/gl.h:1429 +glIndexsv = _link_function('glIndexsv', None, [POINTER(GLshort)], None) + +# /usr/include/GL/gl.h:1430 +glIndexub = _link_function('glIndexub', None, [GLubyte], None) + +# /usr/include/GL/gl.h:1431 +glIndexubv = _link_function('glIndexubv', None, [POINTER(GLubyte)], None) + +# /usr/include/GL/gl.h:1432 +glInitNames = _link_function('glInitNames', None, [], None) + +# /usr/include/GL/gl.h:1433 +glInterleavedArrays = _link_function('glInterleavedArrays', None, [GLenum, GLsizei, POINTER(GLvoid)], None) + +# /usr/include/GL/gl.h:1434 +glIsEnabled = _link_function('glIsEnabled', GLboolean, [GLenum], None) + +# /usr/include/GL/gl.h:1435 +glIsList = _link_function('glIsList', GLboolean, [GLuint], None) + +# /usr/include/GL/gl.h:1436 +glIsTexture = _link_function('glIsTexture', GLboolean, [GLuint], None) + +# /usr/include/GL/gl.h:1437 +glLightModelf = _link_function('glLightModelf', None, [GLenum, GLfloat], None) + +# /usr/include/GL/gl.h:1438 +glLightModelfv = _link_function('glLightModelfv', None, [GLenum, POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1439 +glLightModeli = _link_function('glLightModeli', None, [GLenum, GLint], None) + +# /usr/include/GL/gl.h:1440 +glLightModeliv = _link_function('glLightModeliv', None, [GLenum, POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1441 +glLightf = _link_function('glLightf', None, [GLenum, GLenum, GLfloat], None) + +# /usr/include/GL/gl.h:1442 +glLightfv = _link_function('glLightfv', None, [GLenum, GLenum, POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1443 +glLighti = _link_function('glLighti', None, [GLenum, GLenum, GLint], None) + +# /usr/include/GL/gl.h:1444 +glLightiv = _link_function('glLightiv', None, [GLenum, GLenum, POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1445 +glLineStipple = _link_function('glLineStipple', None, [GLint, GLushort], None) + +# /usr/include/GL/gl.h:1446 +glLineWidth = _link_function('glLineWidth', None, [GLfloat], None) + +# /usr/include/GL/gl.h:1447 +glListBase = _link_function('glListBase', None, [GLuint], None) + +# /usr/include/GL/gl.h:1448 +glLoadIdentity = _link_function('glLoadIdentity', None, [], None) + +# /usr/include/GL/gl.h:1449 +glLoadMatrixd = _link_function('glLoadMatrixd', None, [POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1450 +glLoadMatrixf = _link_function('glLoadMatrixf', None, [POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1451 +glLoadName = _link_function('glLoadName', None, [GLuint], None) + +# /usr/include/GL/gl.h:1452 +glLogicOp = _link_function('glLogicOp', None, [GLenum], None) + +# /usr/include/GL/gl.h:1453 +glMap1d = _link_function('glMap1d', None, [GLenum, GLdouble, GLdouble, GLint, GLint, POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1454 +glMap1f = _link_function('glMap1f', None, [GLenum, GLfloat, GLfloat, GLint, GLint, POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1455 +glMap2d = _link_function('glMap2d', None, [GLenum, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1456 +glMap2f = _link_function('glMap2f', None, [GLenum, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1457 +glMapGrid1d = _link_function('glMapGrid1d', None, [GLint, GLdouble, GLdouble], None) + +# /usr/include/GL/gl.h:1458 +glMapGrid1f = _link_function('glMapGrid1f', None, [GLint, GLfloat, GLfloat], None) + +# /usr/include/GL/gl.h:1459 +glMapGrid2d = _link_function('glMapGrid2d', None, [GLint, GLdouble, GLdouble, GLint, GLdouble, GLdouble], None) + +# /usr/include/GL/gl.h:1460 +glMapGrid2f = _link_function('glMapGrid2f', None, [GLint, GLfloat, GLfloat, GLint, GLfloat, GLfloat], None) + +# /usr/include/GL/gl.h:1461 +glMaterialf = _link_function('glMaterialf', None, [GLenum, GLenum, GLfloat], None) + +# /usr/include/GL/gl.h:1462 +glMaterialfv = _link_function('glMaterialfv', None, [GLenum, GLenum, POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1463 +glMateriali = _link_function('glMateriali', None, [GLenum, GLenum, GLint], None) + +# /usr/include/GL/gl.h:1464 +glMaterialiv = _link_function('glMaterialiv', None, [GLenum, GLenum, POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1465 +glMatrixMode = _link_function('glMatrixMode', None, [GLenum], None) + +# /usr/include/GL/gl.h:1466 +glMultMatrixd = _link_function('glMultMatrixd', None, [POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1467 +glMultMatrixf = _link_function('glMultMatrixf', None, [POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1468 +glNewList = _link_function('glNewList', None, [GLuint, GLenum], None) + +# /usr/include/GL/gl.h:1469 +glNormal3b = _link_function('glNormal3b', None, [GLbyte, GLbyte, GLbyte], None) + +# /usr/include/GL/gl.h:1470 +glNormal3bv = _link_function('glNormal3bv', None, [POINTER(GLbyte)], None) + +# /usr/include/GL/gl.h:1471 +glNormal3d = _link_function('glNormal3d', None, [GLdouble, GLdouble, GLdouble], None) + +# /usr/include/GL/gl.h:1472 +glNormal3dv = _link_function('glNormal3dv', None, [POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1473 +glNormal3f = _link_function('glNormal3f', None, [GLfloat, GLfloat, GLfloat], None) + +# /usr/include/GL/gl.h:1474 +glNormal3fv = _link_function('glNormal3fv', None, [POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1475 +glNormal3i = _link_function('glNormal3i', None, [GLint, GLint, GLint], None) + +# /usr/include/GL/gl.h:1476 +glNormal3iv = _link_function('glNormal3iv', None, [POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1477 +glNormal3s = _link_function('glNormal3s', None, [GLshort, GLshort, GLshort], None) + +# /usr/include/GL/gl.h:1478 +glNormal3sv = _link_function('glNormal3sv', None, [POINTER(GLshort)], None) + +# /usr/include/GL/gl.h:1479 +glNormalPointer = _link_function('glNormalPointer', None, [GLenum, GLsizei, POINTER(GLvoid)], None) + +# /usr/include/GL/gl.h:1480 +glOrtho = _link_function('glOrtho', None, [GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble], None) + +# /usr/include/GL/gl.h:1481 +glPassThrough = _link_function('glPassThrough', None, [GLfloat], None) + +# /usr/include/GL/gl.h:1482 +glPixelMapfv = _link_function('glPixelMapfv', None, [GLenum, GLsizei, POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1483 +glPixelMapuiv = _link_function('glPixelMapuiv', None, [GLenum, GLsizei, POINTER(GLuint)], None) + +# /usr/include/GL/gl.h:1484 +glPixelMapusv = _link_function('glPixelMapusv', None, [GLenum, GLsizei, POINTER(GLushort)], None) + +# /usr/include/GL/gl.h:1485 +glPixelStoref = _link_function('glPixelStoref', None, [GLenum, GLfloat], None) + +# /usr/include/GL/gl.h:1486 +glPixelStorei = _link_function('glPixelStorei', None, [GLenum, GLint], None) + +# /usr/include/GL/gl.h:1487 +glPixelTransferf = _link_function('glPixelTransferf', None, [GLenum, GLfloat], None) + +# /usr/include/GL/gl.h:1488 +glPixelTransferi = _link_function('glPixelTransferi', None, [GLenum, GLint], None) + +# /usr/include/GL/gl.h:1489 +glPixelZoom = _link_function('glPixelZoom', None, [GLfloat, GLfloat], None) + +# /usr/include/GL/gl.h:1490 +glPointSize = _link_function('glPointSize', None, [GLfloat], None) + +# /usr/include/GL/gl.h:1491 +glPolygonMode = _link_function('glPolygonMode', None, [GLenum, GLenum], None) + +# /usr/include/GL/gl.h:1492 +glPolygonOffset = _link_function('glPolygonOffset', None, [GLfloat, GLfloat], None) + +# /usr/include/GL/gl.h:1493 +glPolygonStipple = _link_function('glPolygonStipple', None, [POINTER(GLubyte)], None) + +# /usr/include/GL/gl.h:1494 +glPopAttrib = _link_function('glPopAttrib', None, [], None) + +# /usr/include/GL/gl.h:1495 +glPopClientAttrib = _link_function('glPopClientAttrib', None, [], None) + +# /usr/include/GL/gl.h:1496 +glPopMatrix = _link_function('glPopMatrix', None, [], None) + +# /usr/include/GL/gl.h:1497 +glPopName = _link_function('glPopName', None, [], None) + +# /usr/include/GL/gl.h:1498 +glPrioritizeTextures = _link_function('glPrioritizeTextures', None, [GLsizei, POINTER(GLuint), POINTER(GLclampf)], None) + +# /usr/include/GL/gl.h:1499 +glPushAttrib = _link_function('glPushAttrib', None, [GLbitfield], None) + +# /usr/include/GL/gl.h:1500 +glPushClientAttrib = _link_function('glPushClientAttrib', None, [GLbitfield], None) + +# /usr/include/GL/gl.h:1501 +glPushMatrix = _link_function('glPushMatrix', None, [], None) + +# /usr/include/GL/gl.h:1502 +glPushName = _link_function('glPushName', None, [GLuint], None) + +# /usr/include/GL/gl.h:1503 +glRasterPos2d = _link_function('glRasterPos2d', None, [GLdouble, GLdouble], None) + +# /usr/include/GL/gl.h:1504 +glRasterPos2dv = _link_function('glRasterPos2dv', None, [POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1505 +glRasterPos2f = _link_function('glRasterPos2f', None, [GLfloat, GLfloat], None) + +# /usr/include/GL/gl.h:1506 +glRasterPos2fv = _link_function('glRasterPos2fv', None, [POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1507 +glRasterPos2i = _link_function('glRasterPos2i', None, [GLint, GLint], None) + +# /usr/include/GL/gl.h:1508 +glRasterPos2iv = _link_function('glRasterPos2iv', None, [POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1509 +glRasterPos2s = _link_function('glRasterPos2s', None, [GLshort, GLshort], None) + +# /usr/include/GL/gl.h:1510 +glRasterPos2sv = _link_function('glRasterPos2sv', None, [POINTER(GLshort)], None) + +# /usr/include/GL/gl.h:1511 +glRasterPos3d = _link_function('glRasterPos3d', None, [GLdouble, GLdouble, GLdouble], None) + +# /usr/include/GL/gl.h:1512 +glRasterPos3dv = _link_function('glRasterPos3dv', None, [POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1513 +glRasterPos3f = _link_function('glRasterPos3f', None, [GLfloat, GLfloat, GLfloat], None) + +# /usr/include/GL/gl.h:1514 +glRasterPos3fv = _link_function('glRasterPos3fv', None, [POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1515 +glRasterPos3i = _link_function('glRasterPos3i', None, [GLint, GLint, GLint], None) + +# /usr/include/GL/gl.h:1516 +glRasterPos3iv = _link_function('glRasterPos3iv', None, [POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1517 +glRasterPos3s = _link_function('glRasterPos3s', None, [GLshort, GLshort, GLshort], None) + +# /usr/include/GL/gl.h:1518 +glRasterPos3sv = _link_function('glRasterPos3sv', None, [POINTER(GLshort)], None) + +# /usr/include/GL/gl.h:1519 +glRasterPos4d = _link_function('glRasterPos4d', None, [GLdouble, GLdouble, GLdouble, GLdouble], None) + +# /usr/include/GL/gl.h:1520 +glRasterPos4dv = _link_function('glRasterPos4dv', None, [POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1521 +glRasterPos4f = _link_function('glRasterPos4f', None, [GLfloat, GLfloat, GLfloat, GLfloat], None) + +# /usr/include/GL/gl.h:1522 +glRasterPos4fv = _link_function('glRasterPos4fv', None, [POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1523 +glRasterPos4i = _link_function('glRasterPos4i', None, [GLint, GLint, GLint, GLint], None) + +# /usr/include/GL/gl.h:1524 +glRasterPos4iv = _link_function('glRasterPos4iv', None, [POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1525 +glRasterPos4s = _link_function('glRasterPos4s', None, [GLshort, GLshort, GLshort, GLshort], None) + +# /usr/include/GL/gl.h:1526 +glRasterPos4sv = _link_function('glRasterPos4sv', None, [POINTER(GLshort)], None) + +# /usr/include/GL/gl.h:1527 +glReadBuffer = _link_function('glReadBuffer', None, [GLenum], None) + +# /usr/include/GL/gl.h:1528 +glReadPixels = _link_function('glReadPixels', None, [GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)], None) + +# /usr/include/GL/gl.h:1529 +glRectd = _link_function('glRectd', None, [GLdouble, GLdouble, GLdouble, GLdouble], None) + +# /usr/include/GL/gl.h:1530 +glRectdv = _link_function('glRectdv', None, [POINTER(GLdouble), POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1531 +glRectf = _link_function('glRectf', None, [GLfloat, GLfloat, GLfloat, GLfloat], None) + +# /usr/include/GL/gl.h:1532 +glRectfv = _link_function('glRectfv', None, [POINTER(GLfloat), POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1533 +glRecti = _link_function('glRecti', None, [GLint, GLint, GLint, GLint], None) + +# /usr/include/GL/gl.h:1534 +glRectiv = _link_function('glRectiv', None, [POINTER(GLint), POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1535 +glRects = _link_function('glRects', None, [GLshort, GLshort, GLshort, GLshort], None) + +# /usr/include/GL/gl.h:1536 +glRectsv = _link_function('glRectsv', None, [POINTER(GLshort), POINTER(GLshort)], None) + +# /usr/include/GL/gl.h:1537 +glRenderMode = _link_function('glRenderMode', GLint, [GLenum], None) + +# /usr/include/GL/gl.h:1538 +glRotated = _link_function('glRotated', None, [GLdouble, GLdouble, GLdouble, GLdouble], None) + +# /usr/include/GL/gl.h:1539 +glRotatef = _link_function('glRotatef', None, [GLfloat, GLfloat, GLfloat, GLfloat], None) + +# /usr/include/GL/gl.h:1540 +glScaled = _link_function('glScaled', None, [GLdouble, GLdouble, GLdouble], None) + +# /usr/include/GL/gl.h:1541 +glScalef = _link_function('glScalef', None, [GLfloat, GLfloat, GLfloat], None) + +# /usr/include/GL/gl.h:1542 +glScissor = _link_function('glScissor', None, [GLint, GLint, GLsizei, GLsizei], None) + +# /usr/include/GL/gl.h:1543 +glSelectBuffer = _link_function('glSelectBuffer', None, [GLsizei, POINTER(GLuint)], None) + +# /usr/include/GL/gl.h:1544 +glShadeModel = _link_function('glShadeModel', None, [GLenum], None) + +# /usr/include/GL/gl.h:1545 +glStencilFunc = _link_function('glStencilFunc', None, [GLenum, GLint, GLuint], None) + +# /usr/include/GL/gl.h:1546 +glStencilMask = _link_function('glStencilMask', None, [GLuint], None) + +# /usr/include/GL/gl.h:1547 +glStencilOp = _link_function('glStencilOp', None, [GLenum, GLenum, GLenum], None) + +# /usr/include/GL/gl.h:1548 +glTexCoord1d = _link_function('glTexCoord1d', None, [GLdouble], None) + +# /usr/include/GL/gl.h:1549 +glTexCoord1dv = _link_function('glTexCoord1dv', None, [POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1550 +glTexCoord1f = _link_function('glTexCoord1f', None, [GLfloat], None) + +# /usr/include/GL/gl.h:1551 +glTexCoord1fv = _link_function('glTexCoord1fv', None, [POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1552 +glTexCoord1i = _link_function('glTexCoord1i', None, [GLint], None) + +# /usr/include/GL/gl.h:1553 +glTexCoord1iv = _link_function('glTexCoord1iv', None, [POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1554 +glTexCoord1s = _link_function('glTexCoord1s', None, [GLshort], None) + +# /usr/include/GL/gl.h:1555 +glTexCoord1sv = _link_function('glTexCoord1sv', None, [POINTER(GLshort)], None) + +# /usr/include/GL/gl.h:1556 +glTexCoord2d = _link_function('glTexCoord2d', None, [GLdouble, GLdouble], None) + +# /usr/include/GL/gl.h:1557 +glTexCoord2dv = _link_function('glTexCoord2dv', None, [POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1558 +glTexCoord2f = _link_function('glTexCoord2f', None, [GLfloat, GLfloat], None) + +# /usr/include/GL/gl.h:1559 +glTexCoord2fv = _link_function('glTexCoord2fv', None, [POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1560 +glTexCoord2i = _link_function('glTexCoord2i', None, [GLint, GLint], None) + +# /usr/include/GL/gl.h:1561 +glTexCoord2iv = _link_function('glTexCoord2iv', None, [POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1562 +glTexCoord2s = _link_function('glTexCoord2s', None, [GLshort, GLshort], None) + +# /usr/include/GL/gl.h:1563 +glTexCoord2sv = _link_function('glTexCoord2sv', None, [POINTER(GLshort)], None) + +# /usr/include/GL/gl.h:1564 +glTexCoord3d = _link_function('glTexCoord3d', None, [GLdouble, GLdouble, GLdouble], None) + +# /usr/include/GL/gl.h:1565 +glTexCoord3dv = _link_function('glTexCoord3dv', None, [POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1566 +glTexCoord3f = _link_function('glTexCoord3f', None, [GLfloat, GLfloat, GLfloat], None) + +# /usr/include/GL/gl.h:1567 +glTexCoord3fv = _link_function('glTexCoord3fv', None, [POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1568 +glTexCoord3i = _link_function('glTexCoord3i', None, [GLint, GLint, GLint], None) + +# /usr/include/GL/gl.h:1569 +glTexCoord3iv = _link_function('glTexCoord3iv', None, [POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1570 +glTexCoord3s = _link_function('glTexCoord3s', None, [GLshort, GLshort, GLshort], None) + +# /usr/include/GL/gl.h:1571 +glTexCoord3sv = _link_function('glTexCoord3sv', None, [POINTER(GLshort)], None) + +# /usr/include/GL/gl.h:1572 +glTexCoord4d = _link_function('glTexCoord4d', None, [GLdouble, GLdouble, GLdouble, GLdouble], None) + +# /usr/include/GL/gl.h:1573 +glTexCoord4dv = _link_function('glTexCoord4dv', None, [POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1574 +glTexCoord4f = _link_function('glTexCoord4f', None, [GLfloat, GLfloat, GLfloat, GLfloat], None) + +# /usr/include/GL/gl.h:1575 +glTexCoord4fv = _link_function('glTexCoord4fv', None, [POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1576 +glTexCoord4i = _link_function('glTexCoord4i', None, [GLint, GLint, GLint, GLint], None) + +# /usr/include/GL/gl.h:1577 +glTexCoord4iv = _link_function('glTexCoord4iv', None, [POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1578 +glTexCoord4s = _link_function('glTexCoord4s', None, [GLshort, GLshort, GLshort, GLshort], None) + +# /usr/include/GL/gl.h:1579 +glTexCoord4sv = _link_function('glTexCoord4sv', None, [POINTER(GLshort)], None) + +# /usr/include/GL/gl.h:1580 +glTexCoordPointer = _link_function('glTexCoordPointer', None, [GLint, GLenum, GLsizei, POINTER(GLvoid)], None) + +# /usr/include/GL/gl.h:1581 +glTexEnvf = _link_function('glTexEnvf', None, [GLenum, GLenum, GLfloat], None) + +# /usr/include/GL/gl.h:1582 +glTexEnvfv = _link_function('glTexEnvfv', None, [GLenum, GLenum, POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1583 +glTexEnvi = _link_function('glTexEnvi', None, [GLenum, GLenum, GLint], None) + +# /usr/include/GL/gl.h:1584 +glTexEnviv = _link_function('glTexEnviv', None, [GLenum, GLenum, POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1585 +glTexGend = _link_function('glTexGend', None, [GLenum, GLenum, GLdouble], None) + +# /usr/include/GL/gl.h:1586 +glTexGendv = _link_function('glTexGendv', None, [GLenum, GLenum, POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1587 +glTexGenf = _link_function('glTexGenf', None, [GLenum, GLenum, GLfloat], None) + +# /usr/include/GL/gl.h:1588 +glTexGenfv = _link_function('glTexGenfv', None, [GLenum, GLenum, POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1589 +glTexGeni = _link_function('glTexGeni', None, [GLenum, GLenum, GLint], None) + +# /usr/include/GL/gl.h:1590 +glTexGeniv = _link_function('glTexGeniv', None, [GLenum, GLenum, POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1591 +glTexImage1D = _link_function('glTexImage1D', None, [GLenum, GLint, GLint, GLsizei, GLint, GLenum, GLenum, POINTER(GLvoid)], None) + +# /usr/include/GL/gl.h:1592 +glTexImage2D = _link_function('glTexImage2D', None, [GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, POINTER(GLvoid)], None) + +# /usr/include/GL/gl.h:1593 +glTexParameterf = _link_function('glTexParameterf', None, [GLenum, GLenum, GLfloat], None) + +# /usr/include/GL/gl.h:1594 +glTexParameterfv = _link_function('glTexParameterfv', None, [GLenum, GLenum, POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1595 +glTexParameteri = _link_function('glTexParameteri', None, [GLenum, GLenum, GLint], None) + +# /usr/include/GL/gl.h:1596 +glTexParameteriv = _link_function('glTexParameteriv', None, [GLenum, GLenum, POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1597 +glTexSubImage1D = _link_function('glTexSubImage1D', None, [GLenum, GLint, GLint, GLsizei, GLenum, GLenum, POINTER(GLvoid)], None) + +# /usr/include/GL/gl.h:1598 +glTexSubImage2D = _link_function('glTexSubImage2D', None, [GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)], None) + +# /usr/include/GL/gl.h:1599 +glTranslated = _link_function('glTranslated', None, [GLdouble, GLdouble, GLdouble], None) + +# /usr/include/GL/gl.h:1600 +glTranslatef = _link_function('glTranslatef', None, [GLfloat, GLfloat, GLfloat], None) + +# /usr/include/GL/gl.h:1601 +glVertex2d = _link_function('glVertex2d', None, [GLdouble, GLdouble], None) + +# /usr/include/GL/gl.h:1602 +glVertex2dv = _link_function('glVertex2dv', None, [POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1603 +glVertex2f = _link_function('glVertex2f', None, [GLfloat, GLfloat], None) + +# /usr/include/GL/gl.h:1604 +glVertex2fv = _link_function('glVertex2fv', None, [POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1605 +glVertex2i = _link_function('glVertex2i', None, [GLint, GLint], None) + +# /usr/include/GL/gl.h:1606 +glVertex2iv = _link_function('glVertex2iv', None, [POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1607 +glVertex2s = _link_function('glVertex2s', None, [GLshort, GLshort], None) + +# /usr/include/GL/gl.h:1608 +glVertex2sv = _link_function('glVertex2sv', None, [POINTER(GLshort)], None) + +# /usr/include/GL/gl.h:1609 +glVertex3d = _link_function('glVertex3d', None, [GLdouble, GLdouble, GLdouble], None) + +# /usr/include/GL/gl.h:1610 +glVertex3dv = _link_function('glVertex3dv', None, [POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1611 +glVertex3f = _link_function('glVertex3f', None, [GLfloat, GLfloat, GLfloat], None) + +# /usr/include/GL/gl.h:1612 +glVertex3fv = _link_function('glVertex3fv', None, [POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1613 +glVertex3i = _link_function('glVertex3i', None, [GLint, GLint, GLint], None) + +# /usr/include/GL/gl.h:1614 +glVertex3iv = _link_function('glVertex3iv', None, [POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1615 +glVertex3s = _link_function('glVertex3s', None, [GLshort, GLshort, GLshort], None) + +# /usr/include/GL/gl.h:1616 +glVertex3sv = _link_function('glVertex3sv', None, [POINTER(GLshort)], None) + +# /usr/include/GL/gl.h:1617 +glVertex4d = _link_function('glVertex4d', None, [GLdouble, GLdouble, GLdouble, GLdouble], None) + +# /usr/include/GL/gl.h:1618 +glVertex4dv = _link_function('glVertex4dv', None, [POINTER(GLdouble)], None) + +# /usr/include/GL/gl.h:1619 +glVertex4f = _link_function('glVertex4f', None, [GLfloat, GLfloat, GLfloat, GLfloat], None) + +# /usr/include/GL/gl.h:1620 +glVertex4fv = _link_function('glVertex4fv', None, [POINTER(GLfloat)], None) + +# /usr/include/GL/gl.h:1621 +glVertex4i = _link_function('glVertex4i', None, [GLint, GLint, GLint, GLint], None) + +# /usr/include/GL/gl.h:1622 +glVertex4iv = _link_function('glVertex4iv', None, [POINTER(GLint)], None) + +# /usr/include/GL/gl.h:1623 +glVertex4s = _link_function('glVertex4s', None, [GLshort, GLshort, GLshort, GLshort], None) + +# /usr/include/GL/gl.h:1624 +glVertex4sv = _link_function('glVertex4sv', None, [POINTER(GLshort)], None) + +# /usr/include/GL/gl.h:1625 +glVertexPointer = _link_function('glVertexPointer', None, [GLint, GLenum, GLsizei, POINTER(GLvoid)], None) + +# /usr/include/GL/gl.h:1626 +glViewport = _link_function('glViewport', None, [GLint, GLint, GLsizei, GLsizei], None) + + +__all__ = ['GLenum', 'GLboolean', 'GLbitfield', 'GLbyte', 'GLshort', 'GLint', +'GLsizei', 'GLubyte', 'GLushort', 'GLuint', 'GLfloat', 'GLclampf', 'GLdouble', +'GLclampd', 'GLvoid', 'GL_VERSION_1_1', 'GL_CURRENT_BIT', 'GL_POINT_BIT', +'GL_LINE_BIT', 'GL_POLYGON_BIT', 'GL_POLYGON_STIPPLE_BIT', +'GL_PIXEL_MODE_BIT', 'GL_LIGHTING_BIT', 'GL_FOG_BIT', 'GL_DEPTH_BUFFER_BIT', +'GL_ACCUM_BUFFER_BIT', 'GL_STENCIL_BUFFER_BIT', 'GL_VIEWPORT_BIT', +'GL_TRANSFORM_BIT', 'GL_ENABLE_BIT', 'GL_COLOR_BUFFER_BIT', 'GL_HINT_BIT', +'GL_EVAL_BIT', 'GL_LIST_BIT', 'GL_TEXTURE_BIT', 'GL_SCISSOR_BIT', +'GL_ALL_ATTRIB_BITS', 'GL_CLIENT_PIXEL_STORE_BIT', +'GL_CLIENT_VERTEX_ARRAY_BIT', 'GL_CLIENT_ALL_ATTRIB_BITS', 'GL_FALSE', +'GL_TRUE', 'GL_POINTS', 'GL_LINES', 'GL_LINE_LOOP', 'GL_LINE_STRIP', +'GL_TRIANGLES', 'GL_TRIANGLE_STRIP', 'GL_TRIANGLE_FAN', 'GL_QUADS', +'GL_QUAD_STRIP', 'GL_POLYGON', 'GL_ACCUM', 'GL_LOAD', 'GL_RETURN', 'GL_MULT', +'GL_ADD', 'GL_NEVER', 'GL_LESS', 'GL_EQUAL', 'GL_LEQUAL', 'GL_GREATER', +'GL_NOTEQUAL', 'GL_GEQUAL', 'GL_ALWAYS', 'GL_ZERO', 'GL_ONE', 'GL_SRC_COLOR', +'GL_ONE_MINUS_SRC_COLOR', 'GL_SRC_ALPHA', 'GL_ONE_MINUS_SRC_ALPHA', +'GL_DST_ALPHA', 'GL_ONE_MINUS_DST_ALPHA', 'GL_DST_COLOR', +'GL_ONE_MINUS_DST_COLOR', 'GL_SRC_ALPHA_SATURATE', 'GL_NONE', 'GL_FRONT_LEFT', +'GL_FRONT_RIGHT', 'GL_BACK_LEFT', 'GL_BACK_RIGHT', 'GL_FRONT', 'GL_BACK', +'GL_LEFT', 'GL_RIGHT', 'GL_FRONT_AND_BACK', 'GL_AUX0', 'GL_AUX1', 'GL_AUX2', +'GL_AUX3', 'GL_NO_ERROR', 'GL_INVALID_ENUM', 'GL_INVALID_VALUE', +'GL_INVALID_OPERATION', 'GL_STACK_OVERFLOW', 'GL_STACK_UNDERFLOW', +'GL_OUT_OF_MEMORY', 'GL_TABLE_TOO_LARGE', 'GL_2D', 'GL_3D', 'GL_3D_COLOR', +'GL_3D_COLOR_TEXTURE', 'GL_4D_COLOR_TEXTURE', 'GL_PASS_THROUGH_TOKEN', +'GL_POINT_TOKEN', 'GL_LINE_TOKEN', 'GL_POLYGON_TOKEN', 'GL_BITMAP_TOKEN', +'GL_DRAW_PIXEL_TOKEN', 'GL_COPY_PIXEL_TOKEN', 'GL_LINE_RESET_TOKEN', 'GL_EXP', +'GL_EXP2', 'GL_CW', 'GL_CCW', 'GL_COEFF', 'GL_ORDER', 'GL_DOMAIN', +'GL_PIXEL_MAP_I_TO_I', 'GL_PIXEL_MAP_S_TO_S', 'GL_PIXEL_MAP_I_TO_R', +'GL_PIXEL_MAP_I_TO_G', 'GL_PIXEL_MAP_I_TO_B', 'GL_PIXEL_MAP_I_TO_A', +'GL_PIXEL_MAP_R_TO_R', 'GL_PIXEL_MAP_G_TO_G', 'GL_PIXEL_MAP_B_TO_B', +'GL_PIXEL_MAP_A_TO_A', 'GL_VERTEX_ARRAY_POINTER', 'GL_NORMAL_ARRAY_POINTER', +'GL_COLOR_ARRAY_POINTER', 'GL_INDEX_ARRAY_POINTER', +'GL_TEXTURE_COORD_ARRAY_POINTER', 'GL_EDGE_FLAG_ARRAY_POINTER', +'GL_CURRENT_COLOR', 'GL_CURRENT_INDEX', 'GL_CURRENT_NORMAL', +'GL_CURRENT_TEXTURE_COORDS', 'GL_CURRENT_RASTER_COLOR', +'GL_CURRENT_RASTER_INDEX', 'GL_CURRENT_RASTER_TEXTURE_COORDS', +'GL_CURRENT_RASTER_POSITION', 'GL_CURRENT_RASTER_POSITION_VALID', +'GL_CURRENT_RASTER_DISTANCE', 'GL_POINT_SMOOTH', 'GL_POINT_SIZE', +'GL_SMOOTH_POINT_SIZE_RANGE', 'GL_SMOOTH_POINT_SIZE_GRANULARITY', +'GL_POINT_SIZE_RANGE', 'GL_POINT_SIZE_GRANULARITY', 'GL_LINE_SMOOTH', +'GL_LINE_WIDTH', 'GL_SMOOTH_LINE_WIDTH_RANGE', +'GL_SMOOTH_LINE_WIDTH_GRANULARITY', 'GL_LINE_WIDTH_RANGE', +'GL_LINE_WIDTH_GRANULARITY', 'GL_LINE_STIPPLE', 'GL_LINE_STIPPLE_PATTERN', +'GL_LINE_STIPPLE_REPEAT', 'GL_LIST_MODE', 'GL_MAX_LIST_NESTING', +'GL_LIST_BASE', 'GL_LIST_INDEX', 'GL_POLYGON_MODE', 'GL_POLYGON_SMOOTH', +'GL_POLYGON_STIPPLE', 'GL_EDGE_FLAG', 'GL_CULL_FACE', 'GL_CULL_FACE_MODE', +'GL_FRONT_FACE', 'GL_LIGHTING', 'GL_LIGHT_MODEL_LOCAL_VIEWER', +'GL_LIGHT_MODEL_TWO_SIDE', 'GL_LIGHT_MODEL_AMBIENT', 'GL_SHADE_MODEL', +'GL_COLOR_MATERIAL_FACE', 'GL_COLOR_MATERIAL_PARAMETER', 'GL_COLOR_MATERIAL', +'GL_FOG', 'GL_FOG_INDEX', 'GL_FOG_DENSITY', 'GL_FOG_START', 'GL_FOG_END', +'GL_FOG_MODE', 'GL_FOG_COLOR', 'GL_DEPTH_RANGE', 'GL_DEPTH_TEST', +'GL_DEPTH_WRITEMASK', 'GL_DEPTH_CLEAR_VALUE', 'GL_DEPTH_FUNC', +'GL_ACCUM_CLEAR_VALUE', 'GL_STENCIL_TEST', 'GL_STENCIL_CLEAR_VALUE', +'GL_STENCIL_FUNC', 'GL_STENCIL_VALUE_MASK', 'GL_STENCIL_FAIL', +'GL_STENCIL_PASS_DEPTH_FAIL', 'GL_STENCIL_PASS_DEPTH_PASS', 'GL_STENCIL_REF', +'GL_STENCIL_WRITEMASK', 'GL_MATRIX_MODE', 'GL_NORMALIZE', 'GL_VIEWPORT', +'GL_MODELVIEW_STACK_DEPTH', 'GL_PROJECTION_STACK_DEPTH', +'GL_TEXTURE_STACK_DEPTH', 'GL_MODELVIEW_MATRIX', 'GL_PROJECTION_MATRIX', +'GL_TEXTURE_MATRIX', 'GL_ATTRIB_STACK_DEPTH', 'GL_CLIENT_ATTRIB_STACK_DEPTH', +'GL_ALPHA_TEST', 'GL_ALPHA_TEST_FUNC', 'GL_ALPHA_TEST_REF', 'GL_DITHER', +'GL_BLEND_DST', 'GL_BLEND_SRC', 'GL_BLEND', 'GL_LOGIC_OP_MODE', +'GL_INDEX_LOGIC_OP', 'GL_LOGIC_OP', 'GL_COLOR_LOGIC_OP', 'GL_AUX_BUFFERS', +'GL_DRAW_BUFFER', 'GL_READ_BUFFER', 'GL_SCISSOR_BOX', 'GL_SCISSOR_TEST', +'GL_INDEX_CLEAR_VALUE', 'GL_INDEX_WRITEMASK', 'GL_COLOR_CLEAR_VALUE', +'GL_COLOR_WRITEMASK', 'GL_INDEX_MODE', 'GL_RGBA_MODE', 'GL_DOUBLEBUFFER', +'GL_STEREO', 'GL_RENDER_MODE', 'GL_PERSPECTIVE_CORRECTION_HINT', +'GL_POINT_SMOOTH_HINT', 'GL_LINE_SMOOTH_HINT', 'GL_POLYGON_SMOOTH_HINT', +'GL_FOG_HINT', 'GL_TEXTURE_GEN_S', 'GL_TEXTURE_GEN_T', 'GL_TEXTURE_GEN_R', +'GL_TEXTURE_GEN_Q', 'GL_PIXEL_MAP_I_TO_I_SIZE', 'GL_PIXEL_MAP_S_TO_S_SIZE', +'GL_PIXEL_MAP_I_TO_R_SIZE', 'GL_PIXEL_MAP_I_TO_G_SIZE', +'GL_PIXEL_MAP_I_TO_B_SIZE', 'GL_PIXEL_MAP_I_TO_A_SIZE', +'GL_PIXEL_MAP_R_TO_R_SIZE', 'GL_PIXEL_MAP_G_TO_G_SIZE', +'GL_PIXEL_MAP_B_TO_B_SIZE', 'GL_PIXEL_MAP_A_TO_A_SIZE', +'GL_UNPACK_SWAP_BYTES', 'GL_UNPACK_LSB_FIRST', 'GL_UNPACK_ROW_LENGTH', +'GL_UNPACK_SKIP_ROWS', 'GL_UNPACK_SKIP_PIXELS', 'GL_UNPACK_ALIGNMENT', +'GL_PACK_SWAP_BYTES', 'GL_PACK_LSB_FIRST', 'GL_PACK_ROW_LENGTH', +'GL_PACK_SKIP_ROWS', 'GL_PACK_SKIP_PIXELS', 'GL_PACK_ALIGNMENT', +'GL_MAP_COLOR', 'GL_MAP_STENCIL', 'GL_INDEX_SHIFT', 'GL_INDEX_OFFSET', +'GL_RED_SCALE', 'GL_RED_BIAS', 'GL_ZOOM_X', 'GL_ZOOM_Y', 'GL_GREEN_SCALE', +'GL_GREEN_BIAS', 'GL_BLUE_SCALE', 'GL_BLUE_BIAS', 'GL_ALPHA_SCALE', +'GL_ALPHA_BIAS', 'GL_DEPTH_SCALE', 'GL_DEPTH_BIAS', 'GL_MAX_EVAL_ORDER', +'GL_MAX_LIGHTS', 'GL_MAX_CLIP_PLANES', 'GL_MAX_TEXTURE_SIZE', +'GL_MAX_PIXEL_MAP_TABLE', 'GL_MAX_ATTRIB_STACK_DEPTH', +'GL_MAX_MODELVIEW_STACK_DEPTH', 'GL_MAX_NAME_STACK_DEPTH', +'GL_MAX_PROJECTION_STACK_DEPTH', 'GL_MAX_TEXTURE_STACK_DEPTH', +'GL_MAX_VIEWPORT_DIMS', 'GL_MAX_CLIENT_ATTRIB_STACK_DEPTH', +'GL_SUBPIXEL_BITS', 'GL_INDEX_BITS', 'GL_RED_BITS', 'GL_GREEN_BITS', +'GL_BLUE_BITS', 'GL_ALPHA_BITS', 'GL_DEPTH_BITS', 'GL_STENCIL_BITS', +'GL_ACCUM_RED_BITS', 'GL_ACCUM_GREEN_BITS', 'GL_ACCUM_BLUE_BITS', +'GL_ACCUM_ALPHA_BITS', 'GL_NAME_STACK_DEPTH', 'GL_AUTO_NORMAL', +'GL_MAP1_COLOR_4', 'GL_MAP1_INDEX', 'GL_MAP1_NORMAL', +'GL_MAP1_TEXTURE_COORD_1', 'GL_MAP1_TEXTURE_COORD_2', +'GL_MAP1_TEXTURE_COORD_3', 'GL_MAP1_TEXTURE_COORD_4', 'GL_MAP1_VERTEX_3', +'GL_MAP1_VERTEX_4', 'GL_MAP2_COLOR_4', 'GL_MAP2_INDEX', 'GL_MAP2_NORMAL', +'GL_MAP2_TEXTURE_COORD_1', 'GL_MAP2_TEXTURE_COORD_2', +'GL_MAP2_TEXTURE_COORD_3', 'GL_MAP2_TEXTURE_COORD_4', 'GL_MAP2_VERTEX_3', +'GL_MAP2_VERTEX_4', 'GL_MAP1_GRID_DOMAIN', 'GL_MAP1_GRID_SEGMENTS', +'GL_MAP2_GRID_DOMAIN', 'GL_MAP2_GRID_SEGMENTS', 'GL_TEXTURE_1D', +'GL_TEXTURE_2D', 'GL_FEEDBACK_BUFFER_POINTER', 'GL_FEEDBACK_BUFFER_SIZE', +'GL_FEEDBACK_BUFFER_TYPE', 'GL_SELECTION_BUFFER_POINTER', +'GL_SELECTION_BUFFER_SIZE', 'GL_POLYGON_OFFSET_UNITS', +'GL_POLYGON_OFFSET_POINT', 'GL_POLYGON_OFFSET_LINE', 'GL_POLYGON_OFFSET_FILL', +'GL_POLYGON_OFFSET_FACTOR', 'GL_TEXTURE_BINDING_1D', 'GL_TEXTURE_BINDING_2D', +'GL_TEXTURE_BINDING_3D', 'GL_VERTEX_ARRAY', 'GL_NORMAL_ARRAY', +'GL_COLOR_ARRAY', 'GL_INDEX_ARRAY', 'GL_TEXTURE_COORD_ARRAY', +'GL_EDGE_FLAG_ARRAY', 'GL_VERTEX_ARRAY_SIZE', 'GL_VERTEX_ARRAY_TYPE', +'GL_VERTEX_ARRAY_STRIDE', 'GL_NORMAL_ARRAY_TYPE', 'GL_NORMAL_ARRAY_STRIDE', +'GL_COLOR_ARRAY_SIZE', 'GL_COLOR_ARRAY_TYPE', 'GL_COLOR_ARRAY_STRIDE', +'GL_INDEX_ARRAY_TYPE', 'GL_INDEX_ARRAY_STRIDE', 'GL_TEXTURE_COORD_ARRAY_SIZE', +'GL_TEXTURE_COORD_ARRAY_TYPE', 'GL_TEXTURE_COORD_ARRAY_STRIDE', +'GL_EDGE_FLAG_ARRAY_STRIDE', 'GL_TEXTURE_WIDTH', 'GL_TEXTURE_HEIGHT', +'GL_TEXTURE_INTERNAL_FORMAT', 'GL_TEXTURE_COMPONENTS', +'GL_TEXTURE_BORDER_COLOR', 'GL_TEXTURE_BORDER', 'GL_TEXTURE_RED_SIZE', +'GL_TEXTURE_GREEN_SIZE', 'GL_TEXTURE_BLUE_SIZE', 'GL_TEXTURE_ALPHA_SIZE', +'GL_TEXTURE_LUMINANCE_SIZE', 'GL_TEXTURE_INTENSITY_SIZE', +'GL_TEXTURE_PRIORITY', 'GL_TEXTURE_RESIDENT', 'GL_DONT_CARE', 'GL_FASTEST', +'GL_NICEST', 'GL_AMBIENT', 'GL_DIFFUSE', 'GL_SPECULAR', 'GL_POSITION', +'GL_SPOT_DIRECTION', 'GL_SPOT_EXPONENT', 'GL_SPOT_CUTOFF', +'GL_CONSTANT_ATTENUATION', 'GL_LINEAR_ATTENUATION', +'GL_QUADRATIC_ATTENUATION', 'GL_COMPILE', 'GL_COMPILE_AND_EXECUTE', 'GL_BYTE', +'GL_UNSIGNED_BYTE', 'GL_SHORT', 'GL_UNSIGNED_SHORT', 'GL_INT', +'GL_UNSIGNED_INT', 'GL_FLOAT', 'GL_2_BYTES', 'GL_3_BYTES', 'GL_4_BYTES', +'GL_DOUBLE', 'GL_DOUBLE_EXT', 'GL_CLEAR', 'GL_AND', 'GL_AND_REVERSE', +'GL_COPY', 'GL_AND_INVERTED', 'GL_NOOP', 'GL_XOR', 'GL_OR', 'GL_NOR', +'GL_EQUIV', 'GL_INVERT', 'GL_OR_REVERSE', 'GL_COPY_INVERTED', +'GL_OR_INVERTED', 'GL_NAND', 'GL_SET', 'GL_EMISSION', 'GL_SHININESS', +'GL_AMBIENT_AND_DIFFUSE', 'GL_COLOR_INDEXES', 'GL_MODELVIEW', 'GL_PROJECTION', +'GL_TEXTURE', 'GL_COLOR', 'GL_DEPTH', 'GL_STENCIL', 'GL_COLOR_INDEX', +'GL_STENCIL_INDEX', 'GL_DEPTH_COMPONENT', 'GL_RED', 'GL_GREEN', 'GL_BLUE', +'GL_ALPHA', 'GL_RGB', 'GL_RGBA', 'GL_LUMINANCE', 'GL_LUMINANCE_ALPHA', +'GL_BITMAP', 'GL_POINT', 'GL_LINE', 'GL_FILL', 'GL_RENDER', 'GL_FEEDBACK', +'GL_SELECT', 'GL_FLAT', 'GL_SMOOTH', 'GL_KEEP', 'GL_REPLACE', 'GL_INCR', +'GL_DECR', 'GL_VENDOR', 'GL_RENDERER', 'GL_VERSION', 'GL_EXTENSIONS', 'GL_S', +'GL_T', 'GL_R', 'GL_Q', 'GL_MODULATE', 'GL_DECAL', 'GL_TEXTURE_ENV_MODE', +'GL_TEXTURE_ENV_COLOR', 'GL_TEXTURE_ENV', 'GL_EYE_LINEAR', 'GL_OBJECT_LINEAR', +'GL_SPHERE_MAP', 'GL_TEXTURE_GEN_MODE', 'GL_OBJECT_PLANE', 'GL_EYE_PLANE', +'GL_NEAREST', 'GL_LINEAR', 'GL_NEAREST_MIPMAP_NEAREST', +'GL_LINEAR_MIPMAP_NEAREST', 'GL_NEAREST_MIPMAP_LINEAR', +'GL_LINEAR_MIPMAP_LINEAR', 'GL_TEXTURE_MAG_FILTER', 'GL_TEXTURE_MIN_FILTER', +'GL_TEXTURE_WRAP_S', 'GL_TEXTURE_WRAP_T', 'GL_PROXY_TEXTURE_1D', +'GL_PROXY_TEXTURE_2D', 'GL_CLAMP', 'GL_REPEAT', 'GL_R3_G3_B2', 'GL_ALPHA4', +'GL_ALPHA8', 'GL_ALPHA12', 'GL_ALPHA16', 'GL_LUMINANCE4', 'GL_LUMINANCE8', +'GL_LUMINANCE12', 'GL_LUMINANCE16', 'GL_LUMINANCE4_ALPHA4', +'GL_LUMINANCE6_ALPHA2', 'GL_LUMINANCE8_ALPHA8', 'GL_LUMINANCE12_ALPHA4', +'GL_LUMINANCE12_ALPHA12', 'GL_LUMINANCE16_ALPHA16', 'GL_INTENSITY', +'GL_INTENSITY4', 'GL_INTENSITY8', 'GL_INTENSITY12', 'GL_INTENSITY16', +'GL_RGB4', 'GL_RGB5', 'GL_RGB8', 'GL_RGB10', 'GL_RGB12', 'GL_RGB16', +'GL_RGBA2', 'GL_RGBA4', 'GL_RGB5_A1', 'GL_RGBA8', 'GL_RGB10_A2', 'GL_RGBA12', +'GL_RGBA16', 'GL_V2F', 'GL_V3F', 'GL_C4UB_V2F', 'GL_C4UB_V3F', 'GL_C3F_V3F', +'GL_N3F_V3F', 'GL_C4F_N3F_V3F', 'GL_T2F_V3F', 'GL_T4F_V4F', 'GL_T2F_C4UB_V3F', +'GL_T2F_C3F_V3F', 'GL_T2F_N3F_V3F', 'GL_T2F_C4F_N3F_V3F', +'GL_T4F_C4F_N3F_V4F', 'GL_CLIP_PLANE0', 'GL_CLIP_PLANE1', 'GL_CLIP_PLANE2', +'GL_CLIP_PLANE3', 'GL_CLIP_PLANE4', 'GL_CLIP_PLANE5', 'GL_LIGHT0', +'GL_LIGHT1', 'GL_LIGHT2', 'GL_LIGHT3', 'GL_LIGHT4', 'GL_LIGHT5', 'GL_LIGHT6', +'GL_LIGHT7', 'GL_ABGR_EXT', 'GL_FUNC_SUBTRACT_EXT', +'GL_FUNC_REVERSE_SUBTRACT_EXT', 'GL_UNSIGNED_BYTE_3_3_2_EXT', +'GL_UNSIGNED_SHORT_4_4_4_4_EXT', 'GL_UNSIGNED_SHORT_5_5_5_1_EXT', +'GL_UNSIGNED_INT_8_8_8_8_EXT', 'GL_UNSIGNED_INT_10_10_10_2_EXT', +'GL_PACK_SKIP_IMAGES', 'GL_PACK_IMAGE_HEIGHT', 'GL_UNPACK_SKIP_IMAGES', +'GL_UNPACK_IMAGE_HEIGHT', 'GL_TEXTURE_3D', 'GL_PROXY_TEXTURE_3D', +'GL_TEXTURE_DEPTH', 'GL_TEXTURE_WRAP_R', 'GL_MAX_3D_TEXTURE_SIZE', 'GL_BGR', +'GL_BGRA', 'GL_UNSIGNED_BYTE_3_3_2', 'GL_UNSIGNED_BYTE_2_3_3_REV', +'GL_UNSIGNED_SHORT_5_6_5', 'GL_UNSIGNED_SHORT_5_6_5_REV', +'GL_UNSIGNED_SHORT_4_4_4_4', 'GL_UNSIGNED_SHORT_4_4_4_4_REV', +'GL_UNSIGNED_SHORT_5_5_5_1', 'GL_UNSIGNED_SHORT_1_5_5_5_REV', +'GL_UNSIGNED_INT_8_8_8_8', 'GL_UNSIGNED_INT_8_8_8_8_REV', +'GL_UNSIGNED_INT_10_10_10_2', 'GL_UNSIGNED_INT_2_10_10_10_REV', +'GL_RESCALE_NORMAL', 'GL_LIGHT_MODEL_COLOR_CONTROL', 'GL_SINGLE_COLOR', +'GL_SEPARATE_SPECULAR_COLOR', 'GL_CLAMP_TO_EDGE', 'GL_TEXTURE_MIN_LOD', +'GL_TEXTURE_MAX_LOD', 'GL_TEXTURE_BASE_LEVEL', 'GL_TEXTURE_MAX_LEVEL', +'GL_MAX_ELEMENTS_VERTICES', 'GL_MAX_ELEMENTS_INDICES', +'GL_ALIASED_POINT_SIZE_RANGE', 'GL_ALIASED_LINE_WIDTH_RANGE', +'GL_ACTIVE_TEXTURE', 'GL_CLIENT_ACTIVE_TEXTURE', 'GL_MAX_TEXTURE_UNITS', +'GL_TEXTURE0', 'GL_TEXTURE1', 'GL_TEXTURE2', 'GL_TEXTURE3', 'GL_TEXTURE4', +'GL_TEXTURE5', 'GL_TEXTURE6', 'GL_TEXTURE7', 'GL_TEXTURE8', 'GL_TEXTURE9', +'GL_TEXTURE10', 'GL_TEXTURE11', 'GL_TEXTURE12', 'GL_TEXTURE13', +'GL_TEXTURE14', 'GL_TEXTURE15', 'GL_TEXTURE16', 'GL_TEXTURE17', +'GL_TEXTURE18', 'GL_TEXTURE19', 'GL_TEXTURE20', 'GL_TEXTURE21', +'GL_TEXTURE22', 'GL_TEXTURE23', 'GL_TEXTURE24', 'GL_TEXTURE25', +'GL_TEXTURE26', 'GL_TEXTURE27', 'GL_TEXTURE28', 'GL_TEXTURE29', +'GL_TEXTURE30', 'GL_TEXTURE31', 'GL_NORMAL_MAP', 'GL_REFLECTION_MAP', +'GL_TEXTURE_CUBE_MAP', 'GL_TEXTURE_BINDING_CUBE_MAP', +'GL_TEXTURE_CUBE_MAP_POSITIVE_X', 'GL_TEXTURE_CUBE_MAP_NEGATIVE_X', +'GL_TEXTURE_CUBE_MAP_POSITIVE_Y', 'GL_TEXTURE_CUBE_MAP_NEGATIVE_Y', +'GL_TEXTURE_CUBE_MAP_POSITIVE_Z', 'GL_TEXTURE_CUBE_MAP_NEGATIVE_Z', +'GL_PROXY_TEXTURE_CUBE_MAP', 'GL_MAX_CUBE_MAP_TEXTURE_SIZE', 'GL_COMBINE', +'GL_COMBINE_RGB', 'GL_COMBINE_ALPHA', 'GL_RGB_SCALE', 'GL_ADD_SIGNED', +'GL_INTERPOLATE', 'GL_CONSTANT', 'GL_PRIMARY_COLOR', 'GL_PREVIOUS', +'GL_SOURCE0_RGB', 'GL_SOURCE1_RGB', 'GL_SOURCE2_RGB', 'GL_SOURCE0_ALPHA', +'GL_SOURCE1_ALPHA', 'GL_SOURCE2_ALPHA', 'GL_OPERAND0_RGB', 'GL_OPERAND1_RGB', +'GL_OPERAND2_RGB', 'GL_OPERAND0_ALPHA', 'GL_OPERAND1_ALPHA', +'GL_OPERAND2_ALPHA', 'GL_SUBTRACT', 'GL_TRANSPOSE_MODELVIEW_MATRIX', +'GL_TRANSPOSE_PROJECTION_MATRIX', 'GL_TRANSPOSE_TEXTURE_MATRIX', +'GL_TRANSPOSE_COLOR_MATRIX', 'GL_COMPRESSED_ALPHA', 'GL_COMPRESSED_LUMINANCE', +'GL_COMPRESSED_LUMINANCE_ALPHA', 'GL_COMPRESSED_INTENSITY', +'GL_COMPRESSED_RGB', 'GL_COMPRESSED_RGBA', 'GL_TEXTURE_COMPRESSION_HINT', +'GL_TEXTURE_COMPRESSED_IMAGE_SIZE', 'GL_TEXTURE_COMPRESSED', +'GL_NUM_COMPRESSED_TEXTURE_FORMATS', 'GL_COMPRESSED_TEXTURE_FORMATS', +'GL_DOT3_RGB', 'GL_DOT3_RGBA', 'GL_CLAMP_TO_BORDER', 'GL_MULTISAMPLE', +'GL_SAMPLE_ALPHA_TO_COVERAGE', 'GL_SAMPLE_ALPHA_TO_ONE', 'GL_SAMPLE_COVERAGE', +'GL_SAMPLE_BUFFERS', 'GL_SAMPLES', 'GL_SAMPLE_COVERAGE_VALUE', +'GL_SAMPLE_COVERAGE_INVERT', 'GL_MULTISAMPLE_BIT', 'GL_VERTEX_ARRAY_EXT', +'GL_NORMAL_ARRAY_EXT', 'GL_COLOR_ARRAY_EXT', 'GL_INDEX_ARRAY_EXT', +'GL_TEXTURE_COORD_ARRAY_EXT', 'GL_EDGE_FLAG_ARRAY_EXT', +'GL_VERTEX_ARRAY_SIZE_EXT', 'GL_VERTEX_ARRAY_TYPE_EXT', +'GL_VERTEX_ARRAY_STRIDE_EXT', 'GL_VERTEX_ARRAY_COUNT_EXT', +'GL_NORMAL_ARRAY_TYPE_EXT', 'GL_NORMAL_ARRAY_STRIDE_EXT', +'GL_NORMAL_ARRAY_COUNT_EXT', 'GL_COLOR_ARRAY_SIZE_EXT', +'GL_COLOR_ARRAY_TYPE_EXT', 'GL_COLOR_ARRAY_STRIDE_EXT', +'GL_COLOR_ARRAY_COUNT_EXT', 'GL_INDEX_ARRAY_TYPE_EXT', +'GL_INDEX_ARRAY_STRIDE_EXT', 'GL_INDEX_ARRAY_COUNT_EXT', +'GL_TEXTURE_COORD_ARRAY_SIZE_EXT', 'GL_TEXTURE_COORD_ARRAY_TYPE_EXT', +'GL_TEXTURE_COORD_ARRAY_STRIDE_EXT', 'GL_TEXTURE_COORD_ARRAY_COUNT_EXT', +'GL_EDGE_FLAG_ARRAY_STRIDE_EXT', 'GL_EDGE_FLAG_ARRAY_COUNT_EXT', +'GL_VERTEX_ARRAY_POINTER_EXT', 'GL_NORMAL_ARRAY_POINTER_EXT', +'GL_COLOR_ARRAY_POINTER_EXT', 'GL_INDEX_ARRAY_POINTER_EXT', +'GL_TEXTURE_COORD_ARRAY_POINTER_EXT', 'GL_EDGE_FLAG_ARRAY_POINTER_EXT', +'GL_TEXTURE_MIN_LOD_SGIS', 'GL_TEXTURE_MAX_LOD_SGIS', +'GL_TEXTURE_BASE_LEVEL_SGIS', 'GL_TEXTURE_MAX_LEVEL_SGIS', +'GL_SHARED_TEXTURE_PALETTE_EXT', 'GL_RESCALE_NORMAL_EXT', +'GL_TEXTURE_COMPARE_SGIX', 'GL_TEXTURE_COMPARE_OPERATOR_SGIX', +'GL_TEXTURE_LEQUAL_R_SGIX', 'GL_TEXTURE_GEQUAL_R_SGIX', +'GL_DEPTH_COMPONENT16_SGIX', 'GL_DEPTH_COMPONENT24_SGIX', +'GL_DEPTH_COMPONENT32_SGIX', 'GL_GENERATE_MIPMAP_SGIS', +'GL_GENERATE_MIPMAP_HINT_SGIS', 'GL_POINT_SIZE_MIN', 'GL_POINT_SIZE_MAX', +'GL_POINT_FADE_THRESHOLD_SIZE', 'GL_POINT_DISTANCE_ATTENUATION', +'GL_FOG_COORDINATE_SOURCE', 'GL_FOG_COORDINATE', 'GL_FRAGMENT_DEPTH', +'GL_CURRENT_FOG_COORDINATE', 'GL_FOG_COORDINATE_ARRAY_TYPE', +'GL_FOG_COORDINATE_ARRAY_STRIDE', 'GL_FOG_COORDINATE_ARRAY_POINTER', +'GL_FOG_COORDINATE_ARRAY', 'GL_COLOR_SUM', 'GL_CURRENT_SECONDARY_COLOR', +'GL_SECONDARY_COLOR_ARRAY_SIZE', 'GL_SECONDARY_COLOR_ARRAY_TYPE', +'GL_SECONDARY_COLOR_ARRAY_STRIDE', 'GL_SECONDARY_COLOR_ARRAY_POINTER', +'GL_SECONDARY_COLOR_ARRAY', 'GL_INCR_WRAP', 'GL_DECR_WRAP', +'GL_MAX_TEXTURE_LOD_BIAS', 'GL_TEXTURE_FILTER_CONTROL', 'GL_TEXTURE_LOD_BIAS', +'GL_GENERATE_MIPMAP', 'GL_GENERATE_MIPMAP_HINT', 'GL_BLEND_DST_RGB', +'GL_BLEND_SRC_RGB', 'GL_BLEND_DST_ALPHA', 'GL_BLEND_SRC_ALPHA', +'GL_MIRRORED_REPEAT', 'GL_DEPTH_COMPONENT16', 'GL_DEPTH_COMPONENT24', +'GL_DEPTH_COMPONENT32', 'GL_TEXTURE_DEPTH_SIZE', 'GL_DEPTH_TEXTURE_MODE', +'GL_TEXTURE_COMPARE_MODE', 'GL_TEXTURE_COMPARE_FUNC', +'GL_COMPARE_R_TO_TEXTURE', 'glAccum', 'glAlphaFunc', 'glAreTexturesResident', +'glArrayElement', 'glBegin', 'glBindTexture', 'glBitmap', 'glBlendFunc', +'glCallList', 'glCallLists', 'glClear', 'glClearAccum', 'glClearColor', +'glClearDepth', 'glClearIndex', 'glClearStencil', 'glClipPlane', 'glColor3b', +'glColor3bv', 'glColor3d', 'glColor3dv', 'glColor3f', 'glColor3fv', +'glColor3i', 'glColor3iv', 'glColor3s', 'glColor3sv', 'glColor3ub', +'glColor3ubv', 'glColor3ui', 'glColor3uiv', 'glColor3us', 'glColor3usv', +'glColor4b', 'glColor4bv', 'glColor4d', 'glColor4dv', 'glColor4f', +'glColor4fv', 'glColor4i', 'glColor4iv', 'glColor4s', 'glColor4sv', +'glColor4ub', 'glColor4ubv', 'glColor4ui', 'glColor4uiv', 'glColor4us', +'glColor4usv', 'glColorMask', 'glColorMaterial', 'glColorPointer', +'glCopyPixels', 'glCopyTexImage1D', 'glCopyTexImage2D', 'glCopyTexSubImage1D', +'glCopyTexSubImage2D', 'glCullFace', 'glDeleteLists', 'glDeleteTextures', +'glDepthFunc', 'glDepthMask', 'glDepthRange', 'glDisable', +'glDisableClientState', 'glDrawArrays', 'glDrawBuffer', 'glDrawElements', +'glDrawPixels', 'glEdgeFlag', 'glEdgeFlagPointer', 'glEdgeFlagv', 'glEnable', +'glEnableClientState', 'glEnd', 'glEndList', 'glEvalCoord1d', +'glEvalCoord1dv', 'glEvalCoord1f', 'glEvalCoord1fv', 'glEvalCoord2d', +'glEvalCoord2dv', 'glEvalCoord2f', 'glEvalCoord2fv', 'glEvalMesh1', +'glEvalMesh2', 'glEvalPoint1', 'glEvalPoint2', 'glFeedbackBuffer', 'glFinish', +'glFlush', 'glFogf', 'glFogfv', 'glFogi', 'glFogiv', 'glFrontFace', +'glFrustum', 'glGenLists', 'glGenTextures', 'glGetBooleanv', 'glGetClipPlane', +'glGetDoublev', 'glGetError', 'glGetFloatv', 'glGetIntegerv', 'glGetLightfv', +'glGetLightiv', 'glGetMapdv', 'glGetMapfv', 'glGetMapiv', 'glGetMaterialfv', +'glGetMaterialiv', 'glGetPixelMapfv', 'glGetPixelMapuiv', 'glGetPixelMapusv', +'glGetPointerv', 'glGetPolygonStipple', 'glGetString', 'glGetTexEnvfv', +'glGetTexEnviv', 'glGetTexGendv', 'glGetTexGenfv', 'glGetTexGeniv', +'glGetTexImage', 'glGetTexLevelParameterfv', 'glGetTexLevelParameteriv', +'glGetTexParameterfv', 'glGetTexParameteriv', 'glHint', 'glIndexMask', +'glIndexPointer', 'glIndexd', 'glIndexdv', 'glIndexf', 'glIndexfv', +'glIndexi', 'glIndexiv', 'glIndexs', 'glIndexsv', 'glIndexub', 'glIndexubv', +'glInitNames', 'glInterleavedArrays', 'glIsEnabled', 'glIsList', +'glIsTexture', 'glLightModelf', 'glLightModelfv', 'glLightModeli', +'glLightModeliv', 'glLightf', 'glLightfv', 'glLighti', 'glLightiv', +'glLineStipple', 'glLineWidth', 'glListBase', 'glLoadIdentity', +'glLoadMatrixd', 'glLoadMatrixf', 'glLoadName', 'glLogicOp', 'glMap1d', +'glMap1f', 'glMap2d', 'glMap2f', 'glMapGrid1d', 'glMapGrid1f', 'glMapGrid2d', +'glMapGrid2f', 'glMaterialf', 'glMaterialfv', 'glMateriali', 'glMaterialiv', +'glMatrixMode', 'glMultMatrixd', 'glMultMatrixf', 'glNewList', 'glNormal3b', +'glNormal3bv', 'glNormal3d', 'glNormal3dv', 'glNormal3f', 'glNormal3fv', +'glNormal3i', 'glNormal3iv', 'glNormal3s', 'glNormal3sv', 'glNormalPointer', +'glOrtho', 'glPassThrough', 'glPixelMapfv', 'glPixelMapuiv', 'glPixelMapusv', +'glPixelStoref', 'glPixelStorei', 'glPixelTransferf', 'glPixelTransferi', +'glPixelZoom', 'glPointSize', 'glPolygonMode', 'glPolygonOffset', +'glPolygonStipple', 'glPopAttrib', 'glPopClientAttrib', 'glPopMatrix', +'glPopName', 'glPrioritizeTextures', 'glPushAttrib', 'glPushClientAttrib', +'glPushMatrix', 'glPushName', 'glRasterPos2d', 'glRasterPos2dv', +'glRasterPos2f', 'glRasterPos2fv', 'glRasterPos2i', 'glRasterPos2iv', +'glRasterPos2s', 'glRasterPos2sv', 'glRasterPos3d', 'glRasterPos3dv', +'glRasterPos3f', 'glRasterPos3fv', 'glRasterPos3i', 'glRasterPos3iv', +'glRasterPos3s', 'glRasterPos3sv', 'glRasterPos4d', 'glRasterPos4dv', +'glRasterPos4f', 'glRasterPos4fv', 'glRasterPos4i', 'glRasterPos4iv', +'glRasterPos4s', 'glRasterPos4sv', 'glReadBuffer', 'glReadPixels', 'glRectd', +'glRectdv', 'glRectf', 'glRectfv', 'glRecti', 'glRectiv', 'glRects', +'glRectsv', 'glRenderMode', 'glRotated', 'glRotatef', 'glScaled', 'glScalef', +'glScissor', 'glSelectBuffer', 'glShadeModel', 'glStencilFunc', +'glStencilMask', 'glStencilOp', 'glTexCoord1d', 'glTexCoord1dv', +'glTexCoord1f', 'glTexCoord1fv', 'glTexCoord1i', 'glTexCoord1iv', +'glTexCoord1s', 'glTexCoord1sv', 'glTexCoord2d', 'glTexCoord2dv', +'glTexCoord2f', 'glTexCoord2fv', 'glTexCoord2i', 'glTexCoord2iv', +'glTexCoord2s', 'glTexCoord2sv', 'glTexCoord3d', 'glTexCoord3dv', +'glTexCoord3f', 'glTexCoord3fv', 'glTexCoord3i', 'glTexCoord3iv', +'glTexCoord3s', 'glTexCoord3sv', 'glTexCoord4d', 'glTexCoord4dv', +'glTexCoord4f', 'glTexCoord4fv', 'glTexCoord4i', 'glTexCoord4iv', +'glTexCoord4s', 'glTexCoord4sv', 'glTexCoordPointer', 'glTexEnvf', +'glTexEnvfv', 'glTexEnvi', 'glTexEnviv', 'glTexGend', 'glTexGendv', +'glTexGenf', 'glTexGenfv', 'glTexGeni', 'glTexGeniv', 'glTexImage1D', +'glTexImage2D', 'glTexParameterf', 'glTexParameterfv', 'glTexParameteri', +'glTexParameteriv', 'glTexSubImage1D', 'glTexSubImage2D', 'glTranslated', +'glTranslatef', 'glVertex2d', 'glVertex2dv', 'glVertex2f', 'glVertex2fv', +'glVertex2i', 'glVertex2iv', 'glVertex2s', 'glVertex2sv', 'glVertex3d', +'glVertex3dv', 'glVertex3f', 'glVertex3fv', 'glVertex3i', 'glVertex3iv', +'glVertex3s', 'glVertex3sv', 'glVertex4d', 'glVertex4dv', 'glVertex4f', +'glVertex4fv', 'glVertex4i', 'glVertex4iv', 'glVertex4s', 'glVertex4sv', +'glVertexPointer', 'glViewport'] +# END GENERATED CONTENT (do not edit above this line) + + + diff --git a/pyglet/gl/gl_info.py b/pyglet/gl/gl_info.py new file mode 100644 index 0000000..5eeec81 --- /dev/null +++ b/pyglet/gl/gl_info.py @@ -0,0 +1,196 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''Information about version and extensions of current GL implementation. + +Usage:: + + from pyglet.gl import gl_info + + if gl_info.have_extension('GL_NV_register_combiners'): + # ... + +If you are using more than one context, you can set up a separate GLInfo +object for each context. Call `set_active_context` after switching to the +context:: + + from pyglet.gl.gl_info import GLInfo + + info = GLInfo() + info.set_active_context() + + if info.have_version(2, 1): + # ... + +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: $' + +from ctypes import * +import warnings + +from pyglet.gl.gl import * + +class GLInfo(object): + '''Information interface for a single GL context. + + A default instance is created automatically when the first OpenGL context + is created. You can use the module functions as a convenience for + this default instance's methods. + + If you are using more than one context, you must call `set_active_context` + when the context is active for this `GLInfo` instance. + ''' + have_context = False + version = '0.0.0' + vendor = '' + renderer = '' + extensions = set() + + _have_info = False + + def set_active_context(self): + '''Store information for the currently active context. + + This method is called automatically for the default context. + ''' + self.have_context = True + if not self._have_info: + self.vendor = cast(glGetString(GL_VENDOR), c_char_p).value + self.renderer = cast(glGetString(GL_RENDERER), c_char_p).value + self.extensions = cast(glGetString(GL_EXTENSIONS), c_char_p).value + if self.extensions: + self.extensions = set(self.extensions.split()) + self.version = cast(glGetString(GL_VERSION), c_char_p).value + self._have_info = True + + def remove_active_context(self): + self.have_context = False + + def have_extension(self, extension): + '''Determine if an OpenGL extension is available. + + :Parameters: + `extension` : str + The name of the extension to test for, including its + ``GL_`` prefix. + + :return: True if the extension is provided by the driver. + :rtype: bool + ''' + if not self.have_context: + warnings.warn('No GL context created yet.') + return extension in self.extensions + + def get_extensions(self): + '''Get a list of available OpenGL extensions. + + :return: a list of the available extensions. + :rtype: list of str + ''' + if not self.have_context: + warnings.warn('No GL context created yet.') + return self.extensions + + def get_version(self): + '''Get the current OpenGL version. + + :return: the OpenGL version + :rtype: str + ''' + if not self.have_context: + warnings.warn('No GL context created yet.') + return self.version + + def have_version(self, major, minor=0, release=0): + '''Determine if a version of OpenGL is supported. + + :Parameters: + `major` : int + The major revision number (typically 1 or 2). + `minor` : int + The minor revision number. + `release` : int + The release number. + + :rtype: bool + :return: True if the requested or a later version is supported. + ''' + + if not self.have_context: + warnings.warn('No GL context created yet.') + ver = '%s.0.0' % self.version.split(' ', 1)[0] + imajor, iminor, irelease = [int(v) for v in ver.split('.', 3)[:3]] + return imajor > major or \ + (imajor == major and iminor > minor) or \ + (imajor == major and iminor == minor and irelease >= release) + + def get_renderer(self): + '''Determine the renderer string of the OpenGL context. + + :rtype: str + ''' + if not self.have_context: + warnings.warn('No GL context created yet.') + return self.renderer + + def get_vendor(self): + '''Determine the vendor string of the OpenGL context. + + :rtype: str + ''' + if not self.have_context: + warnings.warn('No GL context created yet.') + return self.vendor + +# Single instance useful for apps with only a single context (or all contexts +# have same GL driver, common case). +_gl_info = GLInfo() + +set_active_context = _gl_info.set_active_context +remove_active_context = _gl_info.remove_active_context +have_extension = _gl_info.have_extension +get_extensions = _gl_info.get_extensions +get_version = _gl_info.get_version +have_version = _gl_info.have_version +get_renderer = _gl_info.get_renderer +get_vendor = _gl_info.get_vendor + +def have_context(): + '''Determine if a default OpenGL context has been set yet. + + :rtype: bool + ''' + return _gl_info.have_context diff --git a/pyglet/gl/glext_arb.py b/pyglet/gl/glext_arb.py new file mode 100644 index 0000000..cd4c6b3 --- /dev/null +++ b/pyglet/gl/glext_arb.py @@ -0,0 +1,9349 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +'''Wrapper for http://oss.sgi.com/projects/ogl-sample/ABI/glext.h + +Generated by tools/gengl.py. +Do not modify this file. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: glext_arb.py 1579 2008-01-15 14:47:19Z Alex.Holkner $' + +from ctypes import * +from pyglet.gl.lib import link_GL as _link_function +from pyglet.gl.lib import c_ptrdiff_t + +# BEGIN GENERATED CONTENT (do not edit below this line) + +# This content is generated by tools/gengl.py. +# Wrapper for http://oss.sgi.com/projects/ogl-sample/ABI/glext.h + + +# GLEXT_LEGACY (/usr/include/GL/gl.h:70) +GL_GLEXT_VERSION = 29 # GL/glext.h:57 +# VERSION_1_2 (GL/glext.h:59) +GL_UNSIGNED_BYTE_3_3_2 = 32818 # GL/glext.h:60 +GL_UNSIGNED_SHORT_4_4_4_4 = 32819 # GL/glext.h:61 +GL_UNSIGNED_SHORT_5_5_5_1 = 32820 # GL/glext.h:62 +GL_UNSIGNED_INT_8_8_8_8 = 32821 # GL/glext.h:63 +GL_UNSIGNED_INT_10_10_10_2 = 32822 # GL/glext.h:64 +GL_RESCALE_NORMAL = 32826 # GL/glext.h:65 +GL_TEXTURE_BINDING_3D = 32874 # GL/glext.h:66 +GL_PACK_SKIP_IMAGES = 32875 # GL/glext.h:67 +GL_PACK_IMAGE_HEIGHT = 32876 # GL/glext.h:68 +GL_UNPACK_SKIP_IMAGES = 32877 # GL/glext.h:69 +GL_UNPACK_IMAGE_HEIGHT = 32878 # GL/glext.h:70 +GL_TEXTURE_3D = 32879 # GL/glext.h:71 +GL_PROXY_TEXTURE_3D = 32880 # GL/glext.h:72 +GL_TEXTURE_DEPTH = 32881 # GL/glext.h:73 +GL_TEXTURE_WRAP_R = 32882 # GL/glext.h:74 +GL_MAX_3D_TEXTURE_SIZE = 32883 # GL/glext.h:75 +GL_UNSIGNED_BYTE_2_3_3_REV = 33634 # GL/glext.h:76 +GL_UNSIGNED_SHORT_5_6_5 = 33635 # GL/glext.h:77 +GL_UNSIGNED_SHORT_5_6_5_REV = 33636 # GL/glext.h:78 +GL_UNSIGNED_SHORT_4_4_4_4_REV = 33637 # GL/glext.h:79 +GL_UNSIGNED_SHORT_1_5_5_5_REV = 33638 # GL/glext.h:80 +GL_UNSIGNED_INT_8_8_8_8_REV = 33639 # GL/glext.h:81 +GL_UNSIGNED_INT_2_10_10_10_REV = 33640 # GL/glext.h:82 +GL_BGR = 32992 # GL/glext.h:83 +GL_BGRA = 32993 # GL/glext.h:84 +GL_MAX_ELEMENTS_VERTICES = 33000 # GL/glext.h:85 +GL_MAX_ELEMENTS_INDICES = 33001 # GL/glext.h:86 +GL_CLAMP_TO_EDGE = 33071 # GL/glext.h:87 +GL_TEXTURE_MIN_LOD = 33082 # GL/glext.h:88 +GL_TEXTURE_MAX_LOD = 33083 # GL/glext.h:89 +GL_TEXTURE_BASE_LEVEL = 33084 # GL/glext.h:90 +GL_TEXTURE_MAX_LEVEL = 33085 # GL/glext.h:91 +GL_LIGHT_MODEL_COLOR_CONTROL = 33272 # GL/glext.h:92 +GL_SINGLE_COLOR = 33273 # GL/glext.h:93 +GL_SEPARATE_SPECULAR_COLOR = 33274 # GL/glext.h:94 +GL_SMOOTH_POINT_SIZE_RANGE = 2834 # GL/glext.h:95 +GL_SMOOTH_POINT_SIZE_GRANULARITY = 2835 # GL/glext.h:96 +GL_SMOOTH_LINE_WIDTH_RANGE = 2850 # GL/glext.h:97 +GL_SMOOTH_LINE_WIDTH_GRANULARITY = 2851 # GL/glext.h:98 +GL_ALIASED_POINT_SIZE_RANGE = 33901 # GL/glext.h:99 +GL_ALIASED_LINE_WIDTH_RANGE = 33902 # GL/glext.h:100 +# ARB_imaging (GL/glext.h:103) +GL_CONSTANT_COLOR = 32769 # GL/glext.h:104 +GL_ONE_MINUS_CONSTANT_COLOR = 32770 # GL/glext.h:105 +GL_CONSTANT_ALPHA = 32771 # GL/glext.h:106 +GL_ONE_MINUS_CONSTANT_ALPHA = 32772 # GL/glext.h:107 +GL_BLEND_COLOR = 32773 # GL/glext.h:108 +GL_FUNC_ADD = 32774 # GL/glext.h:109 +GL_MIN = 32775 # GL/glext.h:110 +GL_MAX = 32776 # GL/glext.h:111 +GL_BLEND_EQUATION = 32777 # GL/glext.h:112 +GL_FUNC_SUBTRACT = 32778 # GL/glext.h:113 +GL_FUNC_REVERSE_SUBTRACT = 32779 # GL/glext.h:114 +GL_CONVOLUTION_1D = 32784 # GL/glext.h:115 +GL_CONVOLUTION_2D = 32785 # GL/glext.h:116 +GL_SEPARABLE_2D = 32786 # GL/glext.h:117 +GL_CONVOLUTION_BORDER_MODE = 32787 # GL/glext.h:118 +GL_CONVOLUTION_FILTER_SCALE = 32788 # GL/glext.h:119 +GL_CONVOLUTION_FILTER_BIAS = 32789 # GL/glext.h:120 +GL_REDUCE = 32790 # GL/glext.h:121 +GL_CONVOLUTION_FORMAT = 32791 # GL/glext.h:122 +GL_CONVOLUTION_WIDTH = 32792 # GL/glext.h:123 +GL_CONVOLUTION_HEIGHT = 32793 # GL/glext.h:124 +GL_MAX_CONVOLUTION_WIDTH = 32794 # GL/glext.h:125 +GL_MAX_CONVOLUTION_HEIGHT = 32795 # GL/glext.h:126 +GL_POST_CONVOLUTION_RED_SCALE = 32796 # GL/glext.h:127 +GL_POST_CONVOLUTION_GREEN_SCALE = 32797 # GL/glext.h:128 +GL_POST_CONVOLUTION_BLUE_SCALE = 32798 # GL/glext.h:129 +GL_POST_CONVOLUTION_ALPHA_SCALE = 32799 # GL/glext.h:130 +GL_POST_CONVOLUTION_RED_BIAS = 32800 # GL/glext.h:131 +GL_POST_CONVOLUTION_GREEN_BIAS = 32801 # GL/glext.h:132 +GL_POST_CONVOLUTION_BLUE_BIAS = 32802 # GL/glext.h:133 +GL_POST_CONVOLUTION_ALPHA_BIAS = 32803 # GL/glext.h:134 +GL_HISTOGRAM = 32804 # GL/glext.h:135 +GL_PROXY_HISTOGRAM = 32805 # GL/glext.h:136 +GL_HISTOGRAM_WIDTH = 32806 # GL/glext.h:137 +GL_HISTOGRAM_FORMAT = 32807 # GL/glext.h:138 +GL_HISTOGRAM_RED_SIZE = 32808 # GL/glext.h:139 +GL_HISTOGRAM_GREEN_SIZE = 32809 # GL/glext.h:140 +GL_HISTOGRAM_BLUE_SIZE = 32810 # GL/glext.h:141 +GL_HISTOGRAM_ALPHA_SIZE = 32811 # GL/glext.h:142 +GL_HISTOGRAM_LUMINANCE_SIZE = 32812 # GL/glext.h:143 +GL_HISTOGRAM_SINK = 32813 # GL/glext.h:144 +GL_MINMAX = 32814 # GL/glext.h:145 +GL_MINMAX_FORMAT = 32815 # GL/glext.h:146 +GL_MINMAX_SINK = 32816 # GL/glext.h:147 +GL_TABLE_TOO_LARGE = 32817 # GL/glext.h:148 +GL_COLOR_MATRIX = 32945 # GL/glext.h:149 +GL_COLOR_MATRIX_STACK_DEPTH = 32946 # GL/glext.h:150 +GL_MAX_COLOR_MATRIX_STACK_DEPTH = 32947 # GL/glext.h:151 +GL_POST_COLOR_MATRIX_RED_SCALE = 32948 # GL/glext.h:152 +GL_POST_COLOR_MATRIX_GREEN_SCALE = 32949 # GL/glext.h:153 +GL_POST_COLOR_MATRIX_BLUE_SCALE = 32950 # GL/glext.h:154 +GL_POST_COLOR_MATRIX_ALPHA_SCALE = 32951 # GL/glext.h:155 +GL_POST_COLOR_MATRIX_RED_BIAS = 32952 # GL/glext.h:156 +GL_POST_COLOR_MATRIX_GREEN_BIAS = 32953 # GL/glext.h:157 +GL_POST_COLOR_MATRIX_BLUE_BIAS = 32954 # GL/glext.h:158 +GL_POST_COLOR_MATRIX_ALPHA_BIAS = 32955 # GL/glext.h:159 +GL_COLOR_TABLE = 32976 # GL/glext.h:160 +GL_POST_CONVOLUTION_COLOR_TABLE = 32977 # GL/glext.h:161 +GL_POST_COLOR_MATRIX_COLOR_TABLE = 32978 # GL/glext.h:162 +GL_PROXY_COLOR_TABLE = 32979 # GL/glext.h:163 +GL_PROXY_POST_CONVOLUTION_COLOR_TABLE = 32980 # GL/glext.h:164 +GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE = 32981 # GL/glext.h:165 +GL_COLOR_TABLE_SCALE = 32982 # GL/glext.h:166 +GL_COLOR_TABLE_BIAS = 32983 # GL/glext.h:167 +GL_COLOR_TABLE_FORMAT = 32984 # GL/glext.h:168 +GL_COLOR_TABLE_WIDTH = 32985 # GL/glext.h:169 +GL_COLOR_TABLE_RED_SIZE = 32986 # GL/glext.h:170 +GL_COLOR_TABLE_GREEN_SIZE = 32987 # GL/glext.h:171 +GL_COLOR_TABLE_BLUE_SIZE = 32988 # GL/glext.h:172 +GL_COLOR_TABLE_ALPHA_SIZE = 32989 # GL/glext.h:173 +GL_COLOR_TABLE_LUMINANCE_SIZE = 32990 # GL/glext.h:174 +GL_COLOR_TABLE_INTENSITY_SIZE = 32991 # GL/glext.h:175 +GL_CONSTANT_BORDER = 33105 # GL/glext.h:176 +GL_REPLICATE_BORDER = 33107 # GL/glext.h:177 +GL_CONVOLUTION_BORDER_COLOR = 33108 # GL/glext.h:178 +# VERSION_1_3 (GL/glext.h:181) +GL_TEXTURE0 = 33984 # GL/glext.h:182 +GL_TEXTURE1 = 33985 # GL/glext.h:183 +GL_TEXTURE2 = 33986 # GL/glext.h:184 +GL_TEXTURE3 = 33987 # GL/glext.h:185 +GL_TEXTURE4 = 33988 # GL/glext.h:186 +GL_TEXTURE5 = 33989 # GL/glext.h:187 +GL_TEXTURE6 = 33990 # GL/glext.h:188 +GL_TEXTURE7 = 33991 # GL/glext.h:189 +GL_TEXTURE8 = 33992 # GL/glext.h:190 +GL_TEXTURE9 = 33993 # GL/glext.h:191 +GL_TEXTURE10 = 33994 # GL/glext.h:192 +GL_TEXTURE11 = 33995 # GL/glext.h:193 +GL_TEXTURE12 = 33996 # GL/glext.h:194 +GL_TEXTURE13 = 33997 # GL/glext.h:195 +GL_TEXTURE14 = 33998 # GL/glext.h:196 +GL_TEXTURE15 = 33999 # GL/glext.h:197 +GL_TEXTURE16 = 34000 # GL/glext.h:198 +GL_TEXTURE17 = 34001 # GL/glext.h:199 +GL_TEXTURE18 = 34002 # GL/glext.h:200 +GL_TEXTURE19 = 34003 # GL/glext.h:201 +GL_TEXTURE20 = 34004 # GL/glext.h:202 +GL_TEXTURE21 = 34005 # GL/glext.h:203 +GL_TEXTURE22 = 34006 # GL/glext.h:204 +GL_TEXTURE23 = 34007 # GL/glext.h:205 +GL_TEXTURE24 = 34008 # GL/glext.h:206 +GL_TEXTURE25 = 34009 # GL/glext.h:207 +GL_TEXTURE26 = 34010 # GL/glext.h:208 +GL_TEXTURE27 = 34011 # GL/glext.h:209 +GL_TEXTURE28 = 34012 # GL/glext.h:210 +GL_TEXTURE29 = 34013 # GL/glext.h:211 +GL_TEXTURE30 = 34014 # GL/glext.h:212 +GL_TEXTURE31 = 34015 # GL/glext.h:213 +GL_ACTIVE_TEXTURE = 34016 # GL/glext.h:214 +GL_CLIENT_ACTIVE_TEXTURE = 34017 # GL/glext.h:215 +GL_MAX_TEXTURE_UNITS = 34018 # GL/glext.h:216 +GL_TRANSPOSE_MODELVIEW_MATRIX = 34019 # GL/glext.h:217 +GL_TRANSPOSE_PROJECTION_MATRIX = 34020 # GL/glext.h:218 +GL_TRANSPOSE_TEXTURE_MATRIX = 34021 # GL/glext.h:219 +GL_TRANSPOSE_COLOR_MATRIX = 34022 # GL/glext.h:220 +GL_MULTISAMPLE = 32925 # GL/glext.h:221 +GL_SAMPLE_ALPHA_TO_COVERAGE = 32926 # GL/glext.h:222 +GL_SAMPLE_ALPHA_TO_ONE = 32927 # GL/glext.h:223 +GL_SAMPLE_COVERAGE = 32928 # GL/glext.h:224 +GL_SAMPLE_BUFFERS = 32936 # GL/glext.h:225 +GL_SAMPLES = 32937 # GL/glext.h:226 +GL_SAMPLE_COVERAGE_VALUE = 32938 # GL/glext.h:227 +GL_SAMPLE_COVERAGE_INVERT = 32939 # GL/glext.h:228 +GL_MULTISAMPLE_BIT = 536870912 # GL/glext.h:229 +GL_NORMAL_MAP = 34065 # GL/glext.h:230 +GL_REFLECTION_MAP = 34066 # GL/glext.h:231 +GL_TEXTURE_CUBE_MAP = 34067 # GL/glext.h:232 +GL_TEXTURE_BINDING_CUBE_MAP = 34068 # GL/glext.h:233 +GL_TEXTURE_CUBE_MAP_POSITIVE_X = 34069 # GL/glext.h:234 +GL_TEXTURE_CUBE_MAP_NEGATIVE_X = 34070 # GL/glext.h:235 +GL_TEXTURE_CUBE_MAP_POSITIVE_Y = 34071 # GL/glext.h:236 +GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 34072 # GL/glext.h:237 +GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 34073 # GL/glext.h:238 +GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 34074 # GL/glext.h:239 +GL_PROXY_TEXTURE_CUBE_MAP = 34075 # GL/glext.h:240 +GL_MAX_CUBE_MAP_TEXTURE_SIZE = 34076 # GL/glext.h:241 +GL_COMPRESSED_ALPHA = 34025 # GL/glext.h:242 +GL_COMPRESSED_LUMINANCE = 34026 # GL/glext.h:243 +GL_COMPRESSED_LUMINANCE_ALPHA = 34027 # GL/glext.h:244 +GL_COMPRESSED_INTENSITY = 34028 # GL/glext.h:245 +GL_COMPRESSED_RGB = 34029 # GL/glext.h:246 +GL_COMPRESSED_RGBA = 34030 # GL/glext.h:247 +GL_TEXTURE_COMPRESSION_HINT = 34031 # GL/glext.h:248 +GL_TEXTURE_COMPRESSED_IMAGE_SIZE = 34464 # GL/glext.h:249 +GL_TEXTURE_COMPRESSED = 34465 # GL/glext.h:250 +GL_NUM_COMPRESSED_TEXTURE_FORMATS = 34466 # GL/glext.h:251 +GL_COMPRESSED_TEXTURE_FORMATS = 34467 # GL/glext.h:252 +GL_CLAMP_TO_BORDER = 33069 # GL/glext.h:253 +GL_COMBINE = 34160 # GL/glext.h:254 +GL_COMBINE_RGB = 34161 # GL/glext.h:255 +GL_COMBINE_ALPHA = 34162 # GL/glext.h:256 +GL_SOURCE0_RGB = 34176 # GL/glext.h:257 +GL_SOURCE1_RGB = 34177 # GL/glext.h:258 +GL_SOURCE2_RGB = 34178 # GL/glext.h:259 +GL_SOURCE0_ALPHA = 34184 # GL/glext.h:260 +GL_SOURCE1_ALPHA = 34185 # GL/glext.h:261 +GL_SOURCE2_ALPHA = 34186 # GL/glext.h:262 +GL_OPERAND0_RGB = 34192 # GL/glext.h:263 +GL_OPERAND1_RGB = 34193 # GL/glext.h:264 +GL_OPERAND2_RGB = 34194 # GL/glext.h:265 +GL_OPERAND0_ALPHA = 34200 # GL/glext.h:266 +GL_OPERAND1_ALPHA = 34201 # GL/glext.h:267 +GL_OPERAND2_ALPHA = 34202 # GL/glext.h:268 +GL_RGB_SCALE = 34163 # GL/glext.h:269 +GL_ADD_SIGNED = 34164 # GL/glext.h:270 +GL_INTERPOLATE = 34165 # GL/glext.h:271 +GL_SUBTRACT = 34023 # GL/glext.h:272 +GL_CONSTANT = 34166 # GL/glext.h:273 +GL_PRIMARY_COLOR = 34167 # GL/glext.h:274 +GL_PREVIOUS = 34168 # GL/glext.h:275 +GL_DOT3_RGB = 34478 # GL/glext.h:276 +GL_DOT3_RGBA = 34479 # GL/glext.h:277 +# VERSION_1_4 (GL/glext.h:280) +GL_BLEND_DST_RGB = 32968 # GL/glext.h:281 +GL_BLEND_SRC_RGB = 32969 # GL/glext.h:282 +GL_BLEND_DST_ALPHA = 32970 # GL/glext.h:283 +GL_BLEND_SRC_ALPHA = 32971 # GL/glext.h:284 +GL_POINT_SIZE_MIN = 33062 # GL/glext.h:285 +GL_POINT_SIZE_MAX = 33063 # GL/glext.h:286 +GL_POINT_FADE_THRESHOLD_SIZE = 33064 # GL/glext.h:287 +GL_POINT_DISTANCE_ATTENUATION = 33065 # GL/glext.h:288 +GL_GENERATE_MIPMAP = 33169 # GL/glext.h:289 +GL_GENERATE_MIPMAP_HINT = 33170 # GL/glext.h:290 +GL_DEPTH_COMPONENT16 = 33189 # GL/glext.h:291 +GL_DEPTH_COMPONENT24 = 33190 # GL/glext.h:292 +GL_DEPTH_COMPONENT32 = 33191 # GL/glext.h:293 +GL_MIRRORED_REPEAT = 33648 # GL/glext.h:294 +GL_FOG_COORDINATE_SOURCE = 33872 # GL/glext.h:295 +GL_FOG_COORDINATE = 33873 # GL/glext.h:296 +GL_FRAGMENT_DEPTH = 33874 # GL/glext.h:297 +GL_CURRENT_FOG_COORDINATE = 33875 # GL/glext.h:298 +GL_FOG_COORDINATE_ARRAY_TYPE = 33876 # GL/glext.h:299 +GL_FOG_COORDINATE_ARRAY_STRIDE = 33877 # GL/glext.h:300 +GL_FOG_COORDINATE_ARRAY_POINTER = 33878 # GL/glext.h:301 +GL_FOG_COORDINATE_ARRAY = 33879 # GL/glext.h:302 +GL_COLOR_SUM = 33880 # GL/glext.h:303 +GL_CURRENT_SECONDARY_COLOR = 33881 # GL/glext.h:304 +GL_SECONDARY_COLOR_ARRAY_SIZE = 33882 # GL/glext.h:305 +GL_SECONDARY_COLOR_ARRAY_TYPE = 33883 # GL/glext.h:306 +GL_SECONDARY_COLOR_ARRAY_STRIDE = 33884 # GL/glext.h:307 +GL_SECONDARY_COLOR_ARRAY_POINTER = 33885 # GL/glext.h:308 +GL_SECONDARY_COLOR_ARRAY = 33886 # GL/glext.h:309 +GL_MAX_TEXTURE_LOD_BIAS = 34045 # GL/glext.h:310 +GL_TEXTURE_FILTER_CONTROL = 34048 # GL/glext.h:311 +GL_TEXTURE_LOD_BIAS = 34049 # GL/glext.h:312 +GL_INCR_WRAP = 34055 # GL/glext.h:313 +GL_DECR_WRAP = 34056 # GL/glext.h:314 +GL_TEXTURE_DEPTH_SIZE = 34890 # GL/glext.h:315 +GL_DEPTH_TEXTURE_MODE = 34891 # GL/glext.h:316 +GL_TEXTURE_COMPARE_MODE = 34892 # GL/glext.h:317 +GL_TEXTURE_COMPARE_FUNC = 34893 # GL/glext.h:318 +GL_COMPARE_R_TO_TEXTURE = 34894 # GL/glext.h:319 +# VERSION_1_5 (GL/glext.h:322) +GL_BUFFER_SIZE = 34660 # GL/glext.h:323 +GL_BUFFER_USAGE = 34661 # GL/glext.h:324 +GL_QUERY_COUNTER_BITS = 34916 # GL/glext.h:325 +GL_CURRENT_QUERY = 34917 # GL/glext.h:326 +GL_QUERY_RESULT = 34918 # GL/glext.h:327 +GL_QUERY_RESULT_AVAILABLE = 34919 # GL/glext.h:328 +GL_ARRAY_BUFFER = 34962 # GL/glext.h:329 +GL_ELEMENT_ARRAY_BUFFER = 34963 # GL/glext.h:330 +GL_ARRAY_BUFFER_BINDING = 34964 # GL/glext.h:331 +GL_ELEMENT_ARRAY_BUFFER_BINDING = 34965 # GL/glext.h:332 +GL_VERTEX_ARRAY_BUFFER_BINDING = 34966 # GL/glext.h:333 +GL_NORMAL_ARRAY_BUFFER_BINDING = 34967 # GL/glext.h:334 +GL_COLOR_ARRAY_BUFFER_BINDING = 34968 # GL/glext.h:335 +GL_INDEX_ARRAY_BUFFER_BINDING = 34969 # GL/glext.h:336 +GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING = 34970 # GL/glext.h:337 +GL_EDGE_FLAG_ARRAY_BUFFER_BINDING = 34971 # GL/glext.h:338 +GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING = 34972 # GL/glext.h:339 +GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING = 34973 # GL/glext.h:340 +GL_WEIGHT_ARRAY_BUFFER_BINDING = 34974 # GL/glext.h:341 +GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 34975 # GL/glext.h:342 +GL_READ_ONLY = 35000 # GL/glext.h:343 +GL_WRITE_ONLY = 35001 # GL/glext.h:344 +GL_READ_WRITE = 35002 # GL/glext.h:345 +GL_BUFFER_ACCESS = 35003 # GL/glext.h:346 +GL_BUFFER_MAPPED = 35004 # GL/glext.h:347 +GL_BUFFER_MAP_POINTER = 35005 # GL/glext.h:348 +GL_STREAM_DRAW = 35040 # GL/glext.h:349 +GL_STREAM_READ = 35041 # GL/glext.h:350 +GL_STREAM_COPY = 35042 # GL/glext.h:351 +GL_STATIC_DRAW = 35044 # GL/glext.h:352 +GL_STATIC_READ = 35045 # GL/glext.h:353 +GL_STATIC_COPY = 35046 # GL/glext.h:354 +GL_DYNAMIC_DRAW = 35048 # GL/glext.h:355 +GL_DYNAMIC_READ = 35049 # GL/glext.h:356 +GL_DYNAMIC_COPY = 35050 # GL/glext.h:357 +GL_SAMPLES_PASSED = 35092 # GL/glext.h:358 +GL_FOG_COORD_SRC = 33872 # GL/glext.h:359 +GL_FOG_COORD = 33873 # GL/glext.h:360 +GL_CURRENT_FOG_COORD = 33875 # GL/glext.h:361 +GL_FOG_COORD_ARRAY_TYPE = 33876 # GL/glext.h:362 +GL_FOG_COORD_ARRAY_STRIDE = 33877 # GL/glext.h:363 +GL_FOG_COORD_ARRAY_POINTER = 33878 # GL/glext.h:364 +GL_FOG_COORD_ARRAY = 33879 # GL/glext.h:365 +GL_FOG_COORD_ARRAY_BUFFER_BINDING = 34973 # GL/glext.h:366 +GL_SRC0_RGB = 34176 # GL/glext.h:367 +GL_SRC1_RGB = 34177 # GL/glext.h:368 +GL_SRC2_RGB = 34178 # GL/glext.h:369 +GL_SRC0_ALPHA = 34184 # GL/glext.h:370 +GL_SRC1_ALPHA = 34185 # GL/glext.h:371 +GL_SRC2_ALPHA = 34186 # GL/glext.h:372 +# VERSION_2_0 (GL/glext.h:375) +GL_BLEND_EQUATION_RGB = 32777 # GL/glext.h:376 +GL_VERTEX_ATTRIB_ARRAY_ENABLED = 34338 # GL/glext.h:377 +GL_VERTEX_ATTRIB_ARRAY_SIZE = 34339 # GL/glext.h:378 +GL_VERTEX_ATTRIB_ARRAY_STRIDE = 34340 # GL/glext.h:379 +GL_VERTEX_ATTRIB_ARRAY_TYPE = 34341 # GL/glext.h:380 +GL_CURRENT_VERTEX_ATTRIB = 34342 # GL/glext.h:381 +GL_VERTEX_PROGRAM_POINT_SIZE = 34370 # GL/glext.h:382 +GL_VERTEX_PROGRAM_TWO_SIDE = 34371 # GL/glext.h:383 +GL_VERTEX_ATTRIB_ARRAY_POINTER = 34373 # GL/glext.h:384 +GL_STENCIL_BACK_FUNC = 34816 # GL/glext.h:385 +GL_STENCIL_BACK_FAIL = 34817 # GL/glext.h:386 +GL_STENCIL_BACK_PASS_DEPTH_FAIL = 34818 # GL/glext.h:387 +GL_STENCIL_BACK_PASS_DEPTH_PASS = 34819 # GL/glext.h:388 +GL_MAX_DRAW_BUFFERS = 34852 # GL/glext.h:389 +GL_DRAW_BUFFER0 = 34853 # GL/glext.h:390 +GL_DRAW_BUFFER1 = 34854 # GL/glext.h:391 +GL_DRAW_BUFFER2 = 34855 # GL/glext.h:392 +GL_DRAW_BUFFER3 = 34856 # GL/glext.h:393 +GL_DRAW_BUFFER4 = 34857 # GL/glext.h:394 +GL_DRAW_BUFFER5 = 34858 # GL/glext.h:395 +GL_DRAW_BUFFER6 = 34859 # GL/glext.h:396 +GL_DRAW_BUFFER7 = 34860 # GL/glext.h:397 +GL_DRAW_BUFFER8 = 34861 # GL/glext.h:398 +GL_DRAW_BUFFER9 = 34862 # GL/glext.h:399 +GL_DRAW_BUFFER10 = 34863 # GL/glext.h:400 +GL_DRAW_BUFFER11 = 34864 # GL/glext.h:401 +GL_DRAW_BUFFER12 = 34865 # GL/glext.h:402 +GL_DRAW_BUFFER13 = 34866 # GL/glext.h:403 +GL_DRAW_BUFFER14 = 34867 # GL/glext.h:404 +GL_DRAW_BUFFER15 = 34868 # GL/glext.h:405 +GL_BLEND_EQUATION_ALPHA = 34877 # GL/glext.h:406 +GL_POINT_SPRITE = 34913 # GL/glext.h:407 +GL_COORD_REPLACE = 34914 # GL/glext.h:408 +GL_MAX_VERTEX_ATTRIBS = 34921 # GL/glext.h:409 +GL_VERTEX_ATTRIB_ARRAY_NORMALIZED = 34922 # GL/glext.h:410 +GL_MAX_TEXTURE_COORDS = 34929 # GL/glext.h:411 +GL_MAX_TEXTURE_IMAGE_UNITS = 34930 # GL/glext.h:412 +GL_FRAGMENT_SHADER = 35632 # GL/glext.h:413 +GL_VERTEX_SHADER = 35633 # GL/glext.h:414 +GL_MAX_FRAGMENT_UNIFORM_COMPONENTS = 35657 # GL/glext.h:415 +GL_MAX_VERTEX_UNIFORM_COMPONENTS = 35658 # GL/glext.h:416 +GL_MAX_VARYING_FLOATS = 35659 # GL/glext.h:417 +GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS = 35660 # GL/glext.h:418 +GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS = 35661 # GL/glext.h:419 +GL_SHADER_TYPE = 35663 # GL/glext.h:420 +GL_FLOAT_VEC2 = 35664 # GL/glext.h:421 +GL_FLOAT_VEC3 = 35665 # GL/glext.h:422 +GL_FLOAT_VEC4 = 35666 # GL/glext.h:423 +GL_INT_VEC2 = 35667 # GL/glext.h:424 +GL_INT_VEC3 = 35668 # GL/glext.h:425 +GL_INT_VEC4 = 35669 # GL/glext.h:426 +GL_BOOL = 35670 # GL/glext.h:427 +GL_BOOL_VEC2 = 35671 # GL/glext.h:428 +GL_BOOL_VEC3 = 35672 # GL/glext.h:429 +GL_BOOL_VEC4 = 35673 # GL/glext.h:430 +GL_FLOAT_MAT2 = 35674 # GL/glext.h:431 +GL_FLOAT_MAT3 = 35675 # GL/glext.h:432 +GL_FLOAT_MAT4 = 35676 # GL/glext.h:433 +GL_SAMPLER_1D = 35677 # GL/glext.h:434 +GL_SAMPLER_2D = 35678 # GL/glext.h:435 +GL_SAMPLER_3D = 35679 # GL/glext.h:436 +GL_SAMPLER_CUBE = 35680 # GL/glext.h:437 +GL_SAMPLER_1D_SHADOW = 35681 # GL/glext.h:438 +GL_SAMPLER_2D_SHADOW = 35682 # GL/glext.h:439 +GL_DELETE_STATUS = 35712 # GL/glext.h:440 +GL_COMPILE_STATUS = 35713 # GL/glext.h:441 +GL_LINK_STATUS = 35714 # GL/glext.h:442 +GL_VALIDATE_STATUS = 35715 # GL/glext.h:443 +GL_INFO_LOG_LENGTH = 35716 # GL/glext.h:444 +GL_ATTACHED_SHADERS = 35717 # GL/glext.h:445 +GL_ACTIVE_UNIFORMS = 35718 # GL/glext.h:446 +GL_ACTIVE_UNIFORM_MAX_LENGTH = 35719 # GL/glext.h:447 +GL_SHADER_SOURCE_LENGTH = 35720 # GL/glext.h:448 +GL_ACTIVE_ATTRIBUTES = 35721 # GL/glext.h:449 +GL_ACTIVE_ATTRIBUTE_MAX_LENGTH = 35722 # GL/glext.h:450 +GL_FRAGMENT_SHADER_DERIVATIVE_HINT = 35723 # GL/glext.h:451 +GL_SHADING_LANGUAGE_VERSION = 35724 # GL/glext.h:452 +GL_CURRENT_PROGRAM = 35725 # GL/glext.h:453 +GL_POINT_SPRITE_COORD_ORIGIN = 36000 # GL/glext.h:454 +GL_LOWER_LEFT = 36001 # GL/glext.h:455 +GL_UPPER_LEFT = 36002 # GL/glext.h:456 +GL_STENCIL_BACK_REF = 36003 # GL/glext.h:457 +GL_STENCIL_BACK_VALUE_MASK = 36004 # GL/glext.h:458 +GL_STENCIL_BACK_WRITEMASK = 36005 # GL/glext.h:459 +# ARB_multitexture (GL/glext.h:462) +GL_TEXTURE0_ARB = 33984 # GL/glext.h:463 +GL_TEXTURE1_ARB = 33985 # GL/glext.h:464 +GL_TEXTURE2_ARB = 33986 # GL/glext.h:465 +GL_TEXTURE3_ARB = 33987 # GL/glext.h:466 +GL_TEXTURE4_ARB = 33988 # GL/glext.h:467 +GL_TEXTURE5_ARB = 33989 # GL/glext.h:468 +GL_TEXTURE6_ARB = 33990 # GL/glext.h:469 +GL_TEXTURE7_ARB = 33991 # GL/glext.h:470 +GL_TEXTURE8_ARB = 33992 # GL/glext.h:471 +GL_TEXTURE9_ARB = 33993 # GL/glext.h:472 +GL_TEXTURE10_ARB = 33994 # GL/glext.h:473 +GL_TEXTURE11_ARB = 33995 # GL/glext.h:474 +GL_TEXTURE12_ARB = 33996 # GL/glext.h:475 +GL_TEXTURE13_ARB = 33997 # GL/glext.h:476 +GL_TEXTURE14_ARB = 33998 # GL/glext.h:477 +GL_TEXTURE15_ARB = 33999 # GL/glext.h:478 +GL_TEXTURE16_ARB = 34000 # GL/glext.h:479 +GL_TEXTURE17_ARB = 34001 # GL/glext.h:480 +GL_TEXTURE18_ARB = 34002 # GL/glext.h:481 +GL_TEXTURE19_ARB = 34003 # GL/glext.h:482 +GL_TEXTURE20_ARB = 34004 # GL/glext.h:483 +GL_TEXTURE21_ARB = 34005 # GL/glext.h:484 +GL_TEXTURE22_ARB = 34006 # GL/glext.h:485 +GL_TEXTURE23_ARB = 34007 # GL/glext.h:486 +GL_TEXTURE24_ARB = 34008 # GL/glext.h:487 +GL_TEXTURE25_ARB = 34009 # GL/glext.h:488 +GL_TEXTURE26_ARB = 34010 # GL/glext.h:489 +GL_TEXTURE27_ARB = 34011 # GL/glext.h:490 +GL_TEXTURE28_ARB = 34012 # GL/glext.h:491 +GL_TEXTURE29_ARB = 34013 # GL/glext.h:492 +GL_TEXTURE30_ARB = 34014 # GL/glext.h:493 +GL_TEXTURE31_ARB = 34015 # GL/glext.h:494 +GL_ACTIVE_TEXTURE_ARB = 34016 # GL/glext.h:495 +GL_CLIENT_ACTIVE_TEXTURE_ARB = 34017 # GL/glext.h:496 +GL_MAX_TEXTURE_UNITS_ARB = 34018 # GL/glext.h:497 +# ARB_transpose_matrix (GL/glext.h:500) +GL_TRANSPOSE_MODELVIEW_MATRIX_ARB = 34019 # GL/glext.h:501 +GL_TRANSPOSE_PROJECTION_MATRIX_ARB = 34020 # GL/glext.h:502 +GL_TRANSPOSE_TEXTURE_MATRIX_ARB = 34021 # GL/glext.h:503 +GL_TRANSPOSE_COLOR_MATRIX_ARB = 34022 # GL/glext.h:504 +# ARB_multisample (GL/glext.h:507) +GL_MULTISAMPLE_ARB = 32925 # GL/glext.h:508 +GL_SAMPLE_ALPHA_TO_COVERAGE_ARB = 32926 # GL/glext.h:509 +GL_SAMPLE_ALPHA_TO_ONE_ARB = 32927 # GL/glext.h:510 +GL_SAMPLE_COVERAGE_ARB = 32928 # GL/glext.h:511 +GL_SAMPLE_BUFFERS_ARB = 32936 # GL/glext.h:512 +GL_SAMPLES_ARB = 32937 # GL/glext.h:513 +GL_SAMPLE_COVERAGE_VALUE_ARB = 32938 # GL/glext.h:514 +GL_SAMPLE_COVERAGE_INVERT_ARB = 32939 # GL/glext.h:515 +GL_MULTISAMPLE_BIT_ARB = 536870912 # GL/glext.h:516 +# ARB_texture_env_add (GL/glext.h:519) +# ARB_texture_cube_map (GL/glext.h:522) +GL_NORMAL_MAP_ARB = 34065 # GL/glext.h:523 +GL_REFLECTION_MAP_ARB = 34066 # GL/glext.h:524 +GL_TEXTURE_CUBE_MAP_ARB = 34067 # GL/glext.h:525 +GL_TEXTURE_BINDING_CUBE_MAP_ARB = 34068 # GL/glext.h:526 +GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB = 34069 # GL/glext.h:527 +GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB = 34070 # GL/glext.h:528 +GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB = 34071 # GL/glext.h:529 +GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB = 34072 # GL/glext.h:530 +GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB = 34073 # GL/glext.h:531 +GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB = 34074 # GL/glext.h:532 +GL_PROXY_TEXTURE_CUBE_MAP_ARB = 34075 # GL/glext.h:533 +GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB = 34076 # GL/glext.h:534 +# ARB_texture_compression (GL/glext.h:537) +GL_COMPRESSED_ALPHA_ARB = 34025 # GL/glext.h:538 +GL_COMPRESSED_LUMINANCE_ARB = 34026 # GL/glext.h:539 +GL_COMPRESSED_LUMINANCE_ALPHA_ARB = 34027 # GL/glext.h:540 +GL_COMPRESSED_INTENSITY_ARB = 34028 # GL/glext.h:541 +GL_COMPRESSED_RGB_ARB = 34029 # GL/glext.h:542 +GL_COMPRESSED_RGBA_ARB = 34030 # GL/glext.h:543 +GL_TEXTURE_COMPRESSION_HINT_ARB = 34031 # GL/glext.h:544 +GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB = 34464 # GL/glext.h:545 +GL_TEXTURE_COMPRESSED_ARB = 34465 # GL/glext.h:546 +GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB = 34466 # GL/glext.h:547 +GL_COMPRESSED_TEXTURE_FORMATS_ARB = 34467 # GL/glext.h:548 +# ARB_texture_border_clamp (GL/glext.h:551) +GL_CLAMP_TO_BORDER_ARB = 33069 # GL/glext.h:552 +# ARB_point_parameters (GL/glext.h:555) +GL_POINT_SIZE_MIN_ARB = 33062 # GL/glext.h:556 +GL_POINT_SIZE_MAX_ARB = 33063 # GL/glext.h:557 +GL_POINT_FADE_THRESHOLD_SIZE_ARB = 33064 # GL/glext.h:558 +GL_POINT_DISTANCE_ATTENUATION_ARB = 33065 # GL/glext.h:559 +# ARB_vertex_blend (GL/glext.h:562) +GL_MAX_VERTEX_UNITS_ARB = 34468 # GL/glext.h:563 +GL_ACTIVE_VERTEX_UNITS_ARB = 34469 # GL/glext.h:564 +GL_WEIGHT_SUM_UNITY_ARB = 34470 # GL/glext.h:565 +GL_VERTEX_BLEND_ARB = 34471 # GL/glext.h:566 +GL_CURRENT_WEIGHT_ARB = 34472 # GL/glext.h:567 +GL_WEIGHT_ARRAY_TYPE_ARB = 34473 # GL/glext.h:568 +GL_WEIGHT_ARRAY_STRIDE_ARB = 34474 # GL/glext.h:569 +GL_WEIGHT_ARRAY_SIZE_ARB = 34475 # GL/glext.h:570 +GL_WEIGHT_ARRAY_POINTER_ARB = 34476 # GL/glext.h:571 +GL_WEIGHT_ARRAY_ARB = 34477 # GL/glext.h:572 +GL_MODELVIEW0_ARB = 5888 # GL/glext.h:573 +GL_MODELVIEW1_ARB = 34058 # GL/glext.h:574 +GL_MODELVIEW2_ARB = 34594 # GL/glext.h:575 +GL_MODELVIEW3_ARB = 34595 # GL/glext.h:576 +GL_MODELVIEW4_ARB = 34596 # GL/glext.h:577 +GL_MODELVIEW5_ARB = 34597 # GL/glext.h:578 +GL_MODELVIEW6_ARB = 34598 # GL/glext.h:579 +GL_MODELVIEW7_ARB = 34599 # GL/glext.h:580 +GL_MODELVIEW8_ARB = 34600 # GL/glext.h:581 +GL_MODELVIEW9_ARB = 34601 # GL/glext.h:582 +GL_MODELVIEW10_ARB = 34602 # GL/glext.h:583 +GL_MODELVIEW11_ARB = 34603 # GL/glext.h:584 +GL_MODELVIEW12_ARB = 34604 # GL/glext.h:585 +GL_MODELVIEW13_ARB = 34605 # GL/glext.h:586 +GL_MODELVIEW14_ARB = 34606 # GL/glext.h:587 +GL_MODELVIEW15_ARB = 34607 # GL/glext.h:588 +GL_MODELVIEW16_ARB = 34608 # GL/glext.h:589 +GL_MODELVIEW17_ARB = 34609 # GL/glext.h:590 +GL_MODELVIEW18_ARB = 34610 # GL/glext.h:591 +GL_MODELVIEW19_ARB = 34611 # GL/glext.h:592 +GL_MODELVIEW20_ARB = 34612 # GL/glext.h:593 +GL_MODELVIEW21_ARB = 34613 # GL/glext.h:594 +GL_MODELVIEW22_ARB = 34614 # GL/glext.h:595 +GL_MODELVIEW23_ARB = 34615 # GL/glext.h:596 +GL_MODELVIEW24_ARB = 34616 # GL/glext.h:597 +GL_MODELVIEW25_ARB = 34617 # GL/glext.h:598 +GL_MODELVIEW26_ARB = 34618 # GL/glext.h:599 +GL_MODELVIEW27_ARB = 34619 # GL/glext.h:600 +GL_MODELVIEW28_ARB = 34620 # GL/glext.h:601 +GL_MODELVIEW29_ARB = 34621 # GL/glext.h:602 +GL_MODELVIEW30_ARB = 34622 # GL/glext.h:603 +GL_MODELVIEW31_ARB = 34623 # GL/glext.h:604 +# ARB_matrix_palette (GL/glext.h:607) +GL_MATRIX_PALETTE_ARB = 34880 # GL/glext.h:608 +GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB = 34881 # GL/glext.h:609 +GL_MAX_PALETTE_MATRICES_ARB = 34882 # GL/glext.h:610 +GL_CURRENT_PALETTE_MATRIX_ARB = 34883 # GL/glext.h:611 +GL_MATRIX_INDEX_ARRAY_ARB = 34884 # GL/glext.h:612 +GL_CURRENT_MATRIX_INDEX_ARB = 34885 # GL/glext.h:613 +GL_MATRIX_INDEX_ARRAY_SIZE_ARB = 34886 # GL/glext.h:614 +GL_MATRIX_INDEX_ARRAY_TYPE_ARB = 34887 # GL/glext.h:615 +GL_MATRIX_INDEX_ARRAY_STRIDE_ARB = 34888 # GL/glext.h:616 +GL_MATRIX_INDEX_ARRAY_POINTER_ARB = 34889 # GL/glext.h:617 +# ARB_texture_env_combine (GL/glext.h:620) +GL_COMBINE_ARB = 34160 # GL/glext.h:621 +GL_COMBINE_RGB_ARB = 34161 # GL/glext.h:622 +GL_COMBINE_ALPHA_ARB = 34162 # GL/glext.h:623 +GL_SOURCE0_RGB_ARB = 34176 # GL/glext.h:624 +GL_SOURCE1_RGB_ARB = 34177 # GL/glext.h:625 +GL_SOURCE2_RGB_ARB = 34178 # GL/glext.h:626 +GL_SOURCE0_ALPHA_ARB = 34184 # GL/glext.h:627 +GL_SOURCE1_ALPHA_ARB = 34185 # GL/glext.h:628 +GL_SOURCE2_ALPHA_ARB = 34186 # GL/glext.h:629 +GL_OPERAND0_RGB_ARB = 34192 # GL/glext.h:630 +GL_OPERAND1_RGB_ARB = 34193 # GL/glext.h:631 +GL_OPERAND2_RGB_ARB = 34194 # GL/glext.h:632 +GL_OPERAND0_ALPHA_ARB = 34200 # GL/glext.h:633 +GL_OPERAND1_ALPHA_ARB = 34201 # GL/glext.h:634 +GL_OPERAND2_ALPHA_ARB = 34202 # GL/glext.h:635 +GL_RGB_SCALE_ARB = 34163 # GL/glext.h:636 +GL_ADD_SIGNED_ARB = 34164 # GL/glext.h:637 +GL_INTERPOLATE_ARB = 34165 # GL/glext.h:638 +GL_SUBTRACT_ARB = 34023 # GL/glext.h:639 +GL_CONSTANT_ARB = 34166 # GL/glext.h:640 +GL_PRIMARY_COLOR_ARB = 34167 # GL/glext.h:641 +GL_PREVIOUS_ARB = 34168 # GL/glext.h:642 +# ARB_texture_env_crossbar (GL/glext.h:645) +# ARB_texture_env_dot3 (GL/glext.h:648) +GL_DOT3_RGB_ARB = 34478 # GL/glext.h:649 +GL_DOT3_RGBA_ARB = 34479 # GL/glext.h:650 +# ARB_texture_mirrored_repeat (GL/glext.h:653) +GL_MIRRORED_REPEAT_ARB = 33648 # GL/glext.h:654 +# ARB_depth_texture (GL/glext.h:657) +GL_DEPTH_COMPONENT16_ARB = 33189 # GL/glext.h:658 +GL_DEPTH_COMPONENT24_ARB = 33190 # GL/glext.h:659 +GL_DEPTH_COMPONENT32_ARB = 33191 # GL/glext.h:660 +GL_TEXTURE_DEPTH_SIZE_ARB = 34890 # GL/glext.h:661 +GL_DEPTH_TEXTURE_MODE_ARB = 34891 # GL/glext.h:662 +# ARB_shadow (GL/glext.h:665) +GL_TEXTURE_COMPARE_MODE_ARB = 34892 # GL/glext.h:666 +GL_TEXTURE_COMPARE_FUNC_ARB = 34893 # GL/glext.h:667 +GL_COMPARE_R_TO_TEXTURE_ARB = 34894 # GL/glext.h:668 +# ARB_shadow_ambient (GL/glext.h:671) +GL_TEXTURE_COMPARE_FAIL_VALUE_ARB = 32959 # GL/glext.h:672 +# ARB_window_pos (GL/glext.h:675) +# ARB_vertex_program (GL/glext.h:678) +GL_COLOR_SUM_ARB = 33880 # GL/glext.h:679 +GL_VERTEX_PROGRAM_ARB = 34336 # GL/glext.h:680 +GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB = 34338 # GL/glext.h:681 +GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB = 34339 # GL/glext.h:682 +GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB = 34340 # GL/glext.h:683 +GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB = 34341 # GL/glext.h:684 +GL_CURRENT_VERTEX_ATTRIB_ARB = 34342 # GL/glext.h:685 +GL_PROGRAM_LENGTH_ARB = 34343 # GL/glext.h:686 +GL_PROGRAM_STRING_ARB = 34344 # GL/glext.h:687 +GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB = 34350 # GL/glext.h:688 +GL_MAX_PROGRAM_MATRICES_ARB = 34351 # GL/glext.h:689 +GL_CURRENT_MATRIX_STACK_DEPTH_ARB = 34368 # GL/glext.h:690 +GL_CURRENT_MATRIX_ARB = 34369 # GL/glext.h:691 +GL_VERTEX_PROGRAM_POINT_SIZE_ARB = 34370 # GL/glext.h:692 +GL_VERTEX_PROGRAM_TWO_SIDE_ARB = 34371 # GL/glext.h:693 +GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB = 34373 # GL/glext.h:694 +GL_PROGRAM_ERROR_POSITION_ARB = 34379 # GL/glext.h:695 +GL_PROGRAM_BINDING_ARB = 34423 # GL/glext.h:696 +GL_MAX_VERTEX_ATTRIBS_ARB = 34921 # GL/glext.h:697 +GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB = 34922 # GL/glext.h:698 +GL_PROGRAM_ERROR_STRING_ARB = 34932 # GL/glext.h:699 +GL_PROGRAM_FORMAT_ASCII_ARB = 34933 # GL/glext.h:700 +GL_PROGRAM_FORMAT_ARB = 34934 # GL/glext.h:701 +GL_PROGRAM_INSTRUCTIONS_ARB = 34976 # GL/glext.h:702 +GL_MAX_PROGRAM_INSTRUCTIONS_ARB = 34977 # GL/glext.h:703 +GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB = 34978 # GL/glext.h:704 +GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB = 34979 # GL/glext.h:705 +GL_PROGRAM_TEMPORARIES_ARB = 34980 # GL/glext.h:706 +GL_MAX_PROGRAM_TEMPORARIES_ARB = 34981 # GL/glext.h:707 +GL_PROGRAM_NATIVE_TEMPORARIES_ARB = 34982 # GL/glext.h:708 +GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB = 34983 # GL/glext.h:709 +GL_PROGRAM_PARAMETERS_ARB = 34984 # GL/glext.h:710 +GL_MAX_PROGRAM_PARAMETERS_ARB = 34985 # GL/glext.h:711 +GL_PROGRAM_NATIVE_PARAMETERS_ARB = 34986 # GL/glext.h:712 +GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB = 34987 # GL/glext.h:713 +GL_PROGRAM_ATTRIBS_ARB = 34988 # GL/glext.h:714 +GL_MAX_PROGRAM_ATTRIBS_ARB = 34989 # GL/glext.h:715 +GL_PROGRAM_NATIVE_ATTRIBS_ARB = 34990 # GL/glext.h:716 +GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB = 34991 # GL/glext.h:717 +GL_PROGRAM_ADDRESS_REGISTERS_ARB = 34992 # GL/glext.h:718 +GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB = 34993 # GL/glext.h:719 +GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB = 34994 # GL/glext.h:720 +GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB = 34995 # GL/glext.h:721 +GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB = 34996 # GL/glext.h:722 +GL_MAX_PROGRAM_ENV_PARAMETERS_ARB = 34997 # GL/glext.h:723 +GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB = 34998 # GL/glext.h:724 +GL_TRANSPOSE_CURRENT_MATRIX_ARB = 34999 # GL/glext.h:725 +GL_MATRIX0_ARB = 35008 # GL/glext.h:726 +GL_MATRIX1_ARB = 35009 # GL/glext.h:727 +GL_MATRIX2_ARB = 35010 # GL/glext.h:728 +GL_MATRIX3_ARB = 35011 # GL/glext.h:729 +GL_MATRIX4_ARB = 35012 # GL/glext.h:730 +GL_MATRIX5_ARB = 35013 # GL/glext.h:731 +GL_MATRIX6_ARB = 35014 # GL/glext.h:732 +GL_MATRIX7_ARB = 35015 # GL/glext.h:733 +GL_MATRIX8_ARB = 35016 # GL/glext.h:734 +GL_MATRIX9_ARB = 35017 # GL/glext.h:735 +GL_MATRIX10_ARB = 35018 # GL/glext.h:736 +GL_MATRIX11_ARB = 35019 # GL/glext.h:737 +GL_MATRIX12_ARB = 35020 # GL/glext.h:738 +GL_MATRIX13_ARB = 35021 # GL/glext.h:739 +GL_MATRIX14_ARB = 35022 # GL/glext.h:740 +GL_MATRIX15_ARB = 35023 # GL/glext.h:741 +GL_MATRIX16_ARB = 35024 # GL/glext.h:742 +GL_MATRIX17_ARB = 35025 # GL/glext.h:743 +GL_MATRIX18_ARB = 35026 # GL/glext.h:744 +GL_MATRIX19_ARB = 35027 # GL/glext.h:745 +GL_MATRIX20_ARB = 35028 # GL/glext.h:746 +GL_MATRIX21_ARB = 35029 # GL/glext.h:747 +GL_MATRIX22_ARB = 35030 # GL/glext.h:748 +GL_MATRIX23_ARB = 35031 # GL/glext.h:749 +GL_MATRIX24_ARB = 35032 # GL/glext.h:750 +GL_MATRIX25_ARB = 35033 # GL/glext.h:751 +GL_MATRIX26_ARB = 35034 # GL/glext.h:752 +GL_MATRIX27_ARB = 35035 # GL/glext.h:753 +GL_MATRIX28_ARB = 35036 # GL/glext.h:754 +GL_MATRIX29_ARB = 35037 # GL/glext.h:755 +GL_MATRIX30_ARB = 35038 # GL/glext.h:756 +GL_MATRIX31_ARB = 35039 # GL/glext.h:757 +# ARB_fragment_program (GL/glext.h:760) +GL_FRAGMENT_PROGRAM_ARB = 34820 # GL/glext.h:761 +GL_PROGRAM_ALU_INSTRUCTIONS_ARB = 34821 # GL/glext.h:762 +GL_PROGRAM_TEX_INSTRUCTIONS_ARB = 34822 # GL/glext.h:763 +GL_PROGRAM_TEX_INDIRECTIONS_ARB = 34823 # GL/glext.h:764 +GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB = 34824 # GL/glext.h:765 +GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB = 34825 # GL/glext.h:766 +GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB = 34826 # GL/glext.h:767 +GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB = 34827 # GL/glext.h:768 +GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB = 34828 # GL/glext.h:769 +GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB = 34829 # GL/glext.h:770 +GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB = 34830 # GL/glext.h:771 +GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB = 34831 # GL/glext.h:772 +GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB = 34832 # GL/glext.h:773 +GL_MAX_TEXTURE_COORDS_ARB = 34929 # GL/glext.h:774 +GL_MAX_TEXTURE_IMAGE_UNITS_ARB = 34930 # GL/glext.h:775 +# ARB_vertex_buffer_object (GL/glext.h:778) +GL_BUFFER_SIZE_ARB = 34660 # GL/glext.h:779 +GL_BUFFER_USAGE_ARB = 34661 # GL/glext.h:780 +GL_ARRAY_BUFFER_ARB = 34962 # GL/glext.h:781 +GL_ELEMENT_ARRAY_BUFFER_ARB = 34963 # GL/glext.h:782 +GL_ARRAY_BUFFER_BINDING_ARB = 34964 # GL/glext.h:783 +GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB = 34965 # GL/glext.h:784 +GL_VERTEX_ARRAY_BUFFER_BINDING_ARB = 34966 # GL/glext.h:785 +GL_NORMAL_ARRAY_BUFFER_BINDING_ARB = 34967 # GL/glext.h:786 +GL_COLOR_ARRAY_BUFFER_BINDING_ARB = 34968 # GL/glext.h:787 +GL_INDEX_ARRAY_BUFFER_BINDING_ARB = 34969 # GL/glext.h:788 +GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB = 34970 # GL/glext.h:789 +GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB = 34971 # GL/glext.h:790 +GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB = 34972 # GL/glext.h:791 +GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB = 34973 # GL/glext.h:792 +GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB = 34974 # GL/glext.h:793 +GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB = 34975 # GL/glext.h:794 +GL_READ_ONLY_ARB = 35000 # GL/glext.h:795 +GL_WRITE_ONLY_ARB = 35001 # GL/glext.h:796 +GL_READ_WRITE_ARB = 35002 # GL/glext.h:797 +GL_BUFFER_ACCESS_ARB = 35003 # GL/glext.h:798 +GL_BUFFER_MAPPED_ARB = 35004 # GL/glext.h:799 +GL_BUFFER_MAP_POINTER_ARB = 35005 # GL/glext.h:800 +GL_STREAM_DRAW_ARB = 35040 # GL/glext.h:801 +GL_STREAM_READ_ARB = 35041 # GL/glext.h:802 +GL_STREAM_COPY_ARB = 35042 # GL/glext.h:803 +GL_STATIC_DRAW_ARB = 35044 # GL/glext.h:804 +GL_STATIC_READ_ARB = 35045 # GL/glext.h:805 +GL_STATIC_COPY_ARB = 35046 # GL/glext.h:806 +GL_DYNAMIC_DRAW_ARB = 35048 # GL/glext.h:807 +GL_DYNAMIC_READ_ARB = 35049 # GL/glext.h:808 +GL_DYNAMIC_COPY_ARB = 35050 # GL/glext.h:809 +# ARB_occlusion_query (GL/glext.h:812) +GL_QUERY_COUNTER_BITS_ARB = 34916 # GL/glext.h:813 +GL_CURRENT_QUERY_ARB = 34917 # GL/glext.h:814 +GL_QUERY_RESULT_ARB = 34918 # GL/glext.h:815 +GL_QUERY_RESULT_AVAILABLE_ARB = 34919 # GL/glext.h:816 +GL_SAMPLES_PASSED_ARB = 35092 # GL/glext.h:817 +# ARB_shader_objects (GL/glext.h:820) +GL_PROGRAM_OBJECT_ARB = 35648 # GL/glext.h:821 +GL_SHADER_OBJECT_ARB = 35656 # GL/glext.h:822 +GL_OBJECT_TYPE_ARB = 35662 # GL/glext.h:823 +GL_OBJECT_SUBTYPE_ARB = 35663 # GL/glext.h:824 +GL_FLOAT_VEC2_ARB = 35664 # GL/glext.h:825 +GL_FLOAT_VEC3_ARB = 35665 # GL/glext.h:826 +GL_FLOAT_VEC4_ARB = 35666 # GL/glext.h:827 +GL_INT_VEC2_ARB = 35667 # GL/glext.h:828 +GL_INT_VEC3_ARB = 35668 # GL/glext.h:829 +GL_INT_VEC4_ARB = 35669 # GL/glext.h:830 +GL_BOOL_ARB = 35670 # GL/glext.h:831 +GL_BOOL_VEC2_ARB = 35671 # GL/glext.h:832 +GL_BOOL_VEC3_ARB = 35672 # GL/glext.h:833 +GL_BOOL_VEC4_ARB = 35673 # GL/glext.h:834 +GL_FLOAT_MAT2_ARB = 35674 # GL/glext.h:835 +GL_FLOAT_MAT3_ARB = 35675 # GL/glext.h:836 +GL_FLOAT_MAT4_ARB = 35676 # GL/glext.h:837 +GL_SAMPLER_1D_ARB = 35677 # GL/glext.h:838 +GL_SAMPLER_2D_ARB = 35678 # GL/glext.h:839 +GL_SAMPLER_3D_ARB = 35679 # GL/glext.h:840 +GL_SAMPLER_CUBE_ARB = 35680 # GL/glext.h:841 +GL_SAMPLER_1D_SHADOW_ARB = 35681 # GL/glext.h:842 +GL_SAMPLER_2D_SHADOW_ARB = 35682 # GL/glext.h:843 +GL_SAMPLER_2D_RECT_ARB = 35683 # GL/glext.h:844 +GL_SAMPLER_2D_RECT_SHADOW_ARB = 35684 # GL/glext.h:845 +GL_OBJECT_DELETE_STATUS_ARB = 35712 # GL/glext.h:846 +GL_OBJECT_COMPILE_STATUS_ARB = 35713 # GL/glext.h:847 +GL_OBJECT_LINK_STATUS_ARB = 35714 # GL/glext.h:848 +GL_OBJECT_VALIDATE_STATUS_ARB = 35715 # GL/glext.h:849 +GL_OBJECT_INFO_LOG_LENGTH_ARB = 35716 # GL/glext.h:850 +GL_OBJECT_ATTACHED_OBJECTS_ARB = 35717 # GL/glext.h:851 +GL_OBJECT_ACTIVE_UNIFORMS_ARB = 35718 # GL/glext.h:852 +GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB = 35719 # GL/glext.h:853 +GL_OBJECT_SHADER_SOURCE_LENGTH_ARB = 35720 # GL/glext.h:854 +# ARB_vertex_shader (GL/glext.h:857) +GL_VERTEX_SHADER_ARB = 35633 # GL/glext.h:858 +GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB = 35658 # GL/glext.h:859 +GL_MAX_VARYING_FLOATS_ARB = 35659 # GL/glext.h:860 +GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB = 35660 # GL/glext.h:861 +GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB = 35661 # GL/glext.h:862 +GL_OBJECT_ACTIVE_ATTRIBUTES_ARB = 35721 # GL/glext.h:863 +GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB = 35722 # GL/glext.h:864 +# ARB_fragment_shader (GL/glext.h:867) +GL_FRAGMENT_SHADER_ARB = 35632 # GL/glext.h:868 +GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB = 35657 # GL/glext.h:869 +GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB = 35723 # GL/glext.h:870 +# ARB_shading_language_100 (GL/glext.h:873) +GL_SHADING_LANGUAGE_VERSION_ARB = 35724 # GL/glext.h:874 +# ARB_texture_non_power_of_two (GL/glext.h:877) +# ARB_point_sprite (GL/glext.h:880) +GL_POINT_SPRITE_ARB = 34913 # GL/glext.h:881 +GL_COORD_REPLACE_ARB = 34914 # GL/glext.h:882 +# ARB_fragment_program_shadow (GL/glext.h:885) +# ARB_draw_buffers (GL/glext.h:888) +GL_MAX_DRAW_BUFFERS_ARB = 34852 # GL/glext.h:889 +GL_DRAW_BUFFER0_ARB = 34853 # GL/glext.h:890 +GL_DRAW_BUFFER1_ARB = 34854 # GL/glext.h:891 +GL_DRAW_BUFFER2_ARB = 34855 # GL/glext.h:892 +GL_DRAW_BUFFER3_ARB = 34856 # GL/glext.h:893 +GL_DRAW_BUFFER4_ARB = 34857 # GL/glext.h:894 +GL_DRAW_BUFFER5_ARB = 34858 # GL/glext.h:895 +GL_DRAW_BUFFER6_ARB = 34859 # GL/glext.h:896 +GL_DRAW_BUFFER7_ARB = 34860 # GL/glext.h:897 +GL_DRAW_BUFFER8_ARB = 34861 # GL/glext.h:898 +GL_DRAW_BUFFER9_ARB = 34862 # GL/glext.h:899 +GL_DRAW_BUFFER10_ARB = 34863 # GL/glext.h:900 +GL_DRAW_BUFFER11_ARB = 34864 # GL/glext.h:901 +GL_DRAW_BUFFER12_ARB = 34865 # GL/glext.h:902 +GL_DRAW_BUFFER13_ARB = 34866 # GL/glext.h:903 +GL_DRAW_BUFFER14_ARB = 34867 # GL/glext.h:904 +GL_DRAW_BUFFER15_ARB = 34868 # GL/glext.h:905 +# ARB_texture_rectangle (GL/glext.h:908) +GL_TEXTURE_RECTANGLE_ARB = 34037 # GL/glext.h:909 +GL_TEXTURE_BINDING_RECTANGLE_ARB = 34038 # GL/glext.h:910 +GL_PROXY_TEXTURE_RECTANGLE_ARB = 34039 # GL/glext.h:911 +GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB = 34040 # GL/glext.h:912 +# ARB_color_buffer_float (GL/glext.h:915) +GL_RGBA_FLOAT_MODE_ARB = 34848 # GL/glext.h:916 +GL_CLAMP_VERTEX_COLOR_ARB = 35098 # GL/glext.h:917 +GL_CLAMP_FRAGMENT_COLOR_ARB = 35099 # GL/glext.h:918 +GL_CLAMP_READ_COLOR_ARB = 35100 # GL/glext.h:919 +GL_FIXED_ONLY_ARB = 35101 # GL/glext.h:920 +# ARB_half_float_pixel (GL/glext.h:923) +GL_HALF_FLOAT_ARB = 5131 # GL/glext.h:924 +# ARB_texture_float (GL/glext.h:927) +GL_TEXTURE_RED_TYPE_ARB = 35856 # GL/glext.h:928 +GL_TEXTURE_GREEN_TYPE_ARB = 35857 # GL/glext.h:929 +GL_TEXTURE_BLUE_TYPE_ARB = 35858 # GL/glext.h:930 +GL_TEXTURE_ALPHA_TYPE_ARB = 35859 # GL/glext.h:931 +GL_TEXTURE_LUMINANCE_TYPE_ARB = 35860 # GL/glext.h:932 +GL_TEXTURE_INTENSITY_TYPE_ARB = 35861 # GL/glext.h:933 +GL_TEXTURE_DEPTH_TYPE_ARB = 35862 # GL/glext.h:934 +GL_UNSIGNED_NORMALIZED_ARB = 35863 # GL/glext.h:935 +GL_RGBA32F_ARB = 34836 # GL/glext.h:936 +GL_RGB32F_ARB = 34837 # GL/glext.h:937 +GL_ALPHA32F_ARB = 34838 # GL/glext.h:938 +GL_INTENSITY32F_ARB = 34839 # GL/glext.h:939 +GL_LUMINANCE32F_ARB = 34840 # GL/glext.h:940 +GL_LUMINANCE_ALPHA32F_ARB = 34841 # GL/glext.h:941 +GL_RGBA16F_ARB = 34842 # GL/glext.h:942 +GL_RGB16F_ARB = 34843 # GL/glext.h:943 +GL_ALPHA16F_ARB = 34844 # GL/glext.h:944 +GL_INTENSITY16F_ARB = 34845 # GL/glext.h:945 +GL_LUMINANCE16F_ARB = 34846 # GL/glext.h:946 +GL_LUMINANCE_ALPHA16F_ARB = 34847 # GL/glext.h:947 +# ARB_pixel_buffer_object (GL/glext.h:950) +GL_PIXEL_PACK_BUFFER_ARB = 35051 # GL/glext.h:951 +GL_PIXEL_UNPACK_BUFFER_ARB = 35052 # GL/glext.h:952 +GL_PIXEL_PACK_BUFFER_BINDING_ARB = 35053 # GL/glext.h:953 +GL_PIXEL_UNPACK_BUFFER_BINDING_ARB = 35055 # GL/glext.h:954 +# EXT_abgr (GL/glext.h:957) +GL_ABGR_EXT = 32768 # GL/glext.h:958 +# EXT_blend_color (GL/glext.h:961) +GL_CONSTANT_COLOR_EXT = 32769 # GL/glext.h:962 +GL_ONE_MINUS_CONSTANT_COLOR_EXT = 32770 # GL/glext.h:963 +GL_CONSTANT_ALPHA_EXT = 32771 # GL/glext.h:964 +GL_ONE_MINUS_CONSTANT_ALPHA_EXT = 32772 # GL/glext.h:965 +GL_BLEND_COLOR_EXT = 32773 # GL/glext.h:966 +# EXT_polygon_offset (GL/glext.h:969) +GL_POLYGON_OFFSET_EXT = 32823 # GL/glext.h:970 +GL_POLYGON_OFFSET_FACTOR_EXT = 32824 # GL/glext.h:971 +GL_POLYGON_OFFSET_BIAS_EXT = 32825 # GL/glext.h:972 +# EXT_texture (GL/glext.h:975) +GL_ALPHA4_EXT = 32827 # GL/glext.h:976 +GL_ALPHA8_EXT = 32828 # GL/glext.h:977 +GL_ALPHA12_EXT = 32829 # GL/glext.h:978 +GL_ALPHA16_EXT = 32830 # GL/glext.h:979 +GL_LUMINANCE4_EXT = 32831 # GL/glext.h:980 +GL_LUMINANCE8_EXT = 32832 # GL/glext.h:981 +GL_LUMINANCE12_EXT = 32833 # GL/glext.h:982 +GL_LUMINANCE16_EXT = 32834 # GL/glext.h:983 +GL_LUMINANCE4_ALPHA4_EXT = 32835 # GL/glext.h:984 +GL_LUMINANCE6_ALPHA2_EXT = 32836 # GL/glext.h:985 +GL_LUMINANCE8_ALPHA8_EXT = 32837 # GL/glext.h:986 +GL_LUMINANCE12_ALPHA4_EXT = 32838 # GL/glext.h:987 +GL_LUMINANCE12_ALPHA12_EXT = 32839 # GL/glext.h:988 +GL_LUMINANCE16_ALPHA16_EXT = 32840 # GL/glext.h:989 +GL_INTENSITY_EXT = 32841 # GL/glext.h:990 +GL_INTENSITY4_EXT = 32842 # GL/glext.h:991 +GL_INTENSITY8_EXT = 32843 # GL/glext.h:992 +GL_INTENSITY12_EXT = 32844 # GL/glext.h:993 +GL_INTENSITY16_EXT = 32845 # GL/glext.h:994 +GL_RGB2_EXT = 32846 # GL/glext.h:995 +GL_RGB4_EXT = 32847 # GL/glext.h:996 +GL_RGB5_EXT = 32848 # GL/glext.h:997 +GL_RGB8_EXT = 32849 # GL/glext.h:998 +GL_RGB10_EXT = 32850 # GL/glext.h:999 +GL_RGB12_EXT = 32851 # GL/glext.h:1000 +GL_RGB16_EXT = 32852 # GL/glext.h:1001 +GL_RGBA2_EXT = 32853 # GL/glext.h:1002 +GL_RGBA4_EXT = 32854 # GL/glext.h:1003 +GL_RGB5_A1_EXT = 32855 # GL/glext.h:1004 +GL_RGBA8_EXT = 32856 # GL/glext.h:1005 +GL_RGB10_A2_EXT = 32857 # GL/glext.h:1006 +GL_RGBA12_EXT = 32858 # GL/glext.h:1007 +GL_RGBA16_EXT = 32859 # GL/glext.h:1008 +GL_TEXTURE_RED_SIZE_EXT = 32860 # GL/glext.h:1009 +GL_TEXTURE_GREEN_SIZE_EXT = 32861 # GL/glext.h:1010 +GL_TEXTURE_BLUE_SIZE_EXT = 32862 # GL/glext.h:1011 +GL_TEXTURE_ALPHA_SIZE_EXT = 32863 # GL/glext.h:1012 +GL_TEXTURE_LUMINANCE_SIZE_EXT = 32864 # GL/glext.h:1013 +GL_TEXTURE_INTENSITY_SIZE_EXT = 32865 # GL/glext.h:1014 +GL_REPLACE_EXT = 32866 # GL/glext.h:1015 +GL_PROXY_TEXTURE_1D_EXT = 32867 # GL/glext.h:1016 +GL_PROXY_TEXTURE_2D_EXT = 32868 # GL/glext.h:1017 +GL_TEXTURE_TOO_LARGE_EXT = 32869 # GL/glext.h:1018 +# EXT_texture3D (GL/glext.h:1021) +GL_PACK_SKIP_IMAGES_EXT = 32875 # GL/glext.h:1022 +GL_PACK_IMAGE_HEIGHT_EXT = 32876 # GL/glext.h:1023 +GL_UNPACK_SKIP_IMAGES_EXT = 32877 # GL/glext.h:1024 +GL_UNPACK_IMAGE_HEIGHT_EXT = 32878 # GL/glext.h:1025 +GL_TEXTURE_3D_EXT = 32879 # GL/glext.h:1026 +GL_PROXY_TEXTURE_3D_EXT = 32880 # GL/glext.h:1027 +GL_TEXTURE_DEPTH_EXT = 32881 # GL/glext.h:1028 +GL_TEXTURE_WRAP_R_EXT = 32882 # GL/glext.h:1029 +GL_MAX_3D_TEXTURE_SIZE_EXT = 32883 # GL/glext.h:1030 +# SGIS_texture_filter4 (GL/glext.h:1033) +GL_FILTER4_SGIS = 33094 # GL/glext.h:1034 +GL_TEXTURE_FILTER4_SIZE_SGIS = 33095 # GL/glext.h:1035 +# EXT_subtexture (GL/glext.h:1038) +# EXT_copy_texture (GL/glext.h:1041) +# EXT_histogram (GL/glext.h:1044) +GL_HISTOGRAM_EXT = 32804 # GL/glext.h:1045 +GL_PROXY_HISTOGRAM_EXT = 32805 # GL/glext.h:1046 +GL_HISTOGRAM_WIDTH_EXT = 32806 # GL/glext.h:1047 +GL_HISTOGRAM_FORMAT_EXT = 32807 # GL/glext.h:1048 +GL_HISTOGRAM_RED_SIZE_EXT = 32808 # GL/glext.h:1049 +GL_HISTOGRAM_GREEN_SIZE_EXT = 32809 # GL/glext.h:1050 +GL_HISTOGRAM_BLUE_SIZE_EXT = 32810 # GL/glext.h:1051 +GL_HISTOGRAM_ALPHA_SIZE_EXT = 32811 # GL/glext.h:1052 +GL_HISTOGRAM_LUMINANCE_SIZE_EXT = 32812 # GL/glext.h:1053 +GL_HISTOGRAM_SINK_EXT = 32813 # GL/glext.h:1054 +GL_MINMAX_EXT = 32814 # GL/glext.h:1055 +GL_MINMAX_FORMAT_EXT = 32815 # GL/glext.h:1056 +GL_MINMAX_SINK_EXT = 32816 # GL/glext.h:1057 +GL_TABLE_TOO_LARGE_EXT = 32817 # GL/glext.h:1058 +# EXT_convolution (GL/glext.h:1061) +GL_CONVOLUTION_1D_EXT = 32784 # GL/glext.h:1062 +GL_CONVOLUTION_2D_EXT = 32785 # GL/glext.h:1063 +GL_SEPARABLE_2D_EXT = 32786 # GL/glext.h:1064 +GL_CONVOLUTION_BORDER_MODE_EXT = 32787 # GL/glext.h:1065 +GL_CONVOLUTION_FILTER_SCALE_EXT = 32788 # GL/glext.h:1066 +GL_CONVOLUTION_FILTER_BIAS_EXT = 32789 # GL/glext.h:1067 +GL_REDUCE_EXT = 32790 # GL/glext.h:1068 +GL_CONVOLUTION_FORMAT_EXT = 32791 # GL/glext.h:1069 +GL_CONVOLUTION_WIDTH_EXT = 32792 # GL/glext.h:1070 +GL_CONVOLUTION_HEIGHT_EXT = 32793 # GL/glext.h:1071 +GL_MAX_CONVOLUTION_WIDTH_EXT = 32794 # GL/glext.h:1072 +GL_MAX_CONVOLUTION_HEIGHT_EXT = 32795 # GL/glext.h:1073 +GL_POST_CONVOLUTION_RED_SCALE_EXT = 32796 # GL/glext.h:1074 +GL_POST_CONVOLUTION_GREEN_SCALE_EXT = 32797 # GL/glext.h:1075 +GL_POST_CONVOLUTION_BLUE_SCALE_EXT = 32798 # GL/glext.h:1076 +GL_POST_CONVOLUTION_ALPHA_SCALE_EXT = 32799 # GL/glext.h:1077 +GL_POST_CONVOLUTION_RED_BIAS_EXT = 32800 # GL/glext.h:1078 +GL_POST_CONVOLUTION_GREEN_BIAS_EXT = 32801 # GL/glext.h:1079 +GL_POST_CONVOLUTION_BLUE_BIAS_EXT = 32802 # GL/glext.h:1080 +GL_POST_CONVOLUTION_ALPHA_BIAS_EXT = 32803 # GL/glext.h:1081 +# SGI_color_matrix (GL/glext.h:1084) +GL_COLOR_MATRIX_SGI = 32945 # GL/glext.h:1085 +GL_COLOR_MATRIX_STACK_DEPTH_SGI = 32946 # GL/glext.h:1086 +GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI = 32947 # GL/glext.h:1087 +GL_POST_COLOR_MATRIX_RED_SCALE_SGI = 32948 # GL/glext.h:1088 +GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI = 32949 # GL/glext.h:1089 +GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI = 32950 # GL/glext.h:1090 +GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI = 32951 # GL/glext.h:1091 +GL_POST_COLOR_MATRIX_RED_BIAS_SGI = 32952 # GL/glext.h:1092 +GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI = 32953 # GL/glext.h:1093 +GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI = 32954 # GL/glext.h:1094 +GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI = 32955 # GL/glext.h:1095 +# SGI_color_table (GL/glext.h:1098) +GL_COLOR_TABLE_SGI = 32976 # GL/glext.h:1099 +GL_POST_CONVOLUTION_COLOR_TABLE_SGI = 32977 # GL/glext.h:1100 +GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI = 32978 # GL/glext.h:1101 +GL_PROXY_COLOR_TABLE_SGI = 32979 # GL/glext.h:1102 +GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI = 32980 # GL/glext.h:1103 +GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI = 32981 # GL/glext.h:1104 +GL_COLOR_TABLE_SCALE_SGI = 32982 # GL/glext.h:1105 +GL_COLOR_TABLE_BIAS_SGI = 32983 # GL/glext.h:1106 +GL_COLOR_TABLE_FORMAT_SGI = 32984 # GL/glext.h:1107 +GL_COLOR_TABLE_WIDTH_SGI = 32985 # GL/glext.h:1108 +GL_COLOR_TABLE_RED_SIZE_SGI = 32986 # GL/glext.h:1109 +GL_COLOR_TABLE_GREEN_SIZE_SGI = 32987 # GL/glext.h:1110 +GL_COLOR_TABLE_BLUE_SIZE_SGI = 32988 # GL/glext.h:1111 +GL_COLOR_TABLE_ALPHA_SIZE_SGI = 32989 # GL/glext.h:1112 +GL_COLOR_TABLE_LUMINANCE_SIZE_SGI = 32990 # GL/glext.h:1113 +GL_COLOR_TABLE_INTENSITY_SIZE_SGI = 32991 # GL/glext.h:1114 +# SGIS_pixel_texture (GL/glext.h:1117) +GL_PIXEL_TEXTURE_SGIS = 33619 # GL/glext.h:1118 +GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS = 33620 # GL/glext.h:1119 +GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS = 33621 # GL/glext.h:1120 +GL_PIXEL_GROUP_COLOR_SGIS = 33622 # GL/glext.h:1121 +# SGIX_pixel_texture (GL/glext.h:1124) +GL_PIXEL_TEX_GEN_SGIX = 33081 # GL/glext.h:1125 +GL_PIXEL_TEX_GEN_MODE_SGIX = 33579 # GL/glext.h:1126 +# SGIS_texture4D (GL/glext.h:1129) +GL_PACK_SKIP_VOLUMES_SGIS = 33072 # GL/glext.h:1130 +GL_PACK_IMAGE_DEPTH_SGIS = 33073 # GL/glext.h:1131 +GL_UNPACK_SKIP_VOLUMES_SGIS = 33074 # GL/glext.h:1132 +GL_UNPACK_IMAGE_DEPTH_SGIS = 33075 # GL/glext.h:1133 +GL_TEXTURE_4D_SGIS = 33076 # GL/glext.h:1134 +GL_PROXY_TEXTURE_4D_SGIS = 33077 # GL/glext.h:1135 +GL_TEXTURE_4DSIZE_SGIS = 33078 # GL/glext.h:1136 +GL_TEXTURE_WRAP_Q_SGIS = 33079 # GL/glext.h:1137 +GL_MAX_4D_TEXTURE_SIZE_SGIS = 33080 # GL/glext.h:1138 +GL_TEXTURE_4D_BINDING_SGIS = 33103 # GL/glext.h:1139 +# SGI_texture_color_table (GL/glext.h:1142) +GL_TEXTURE_COLOR_TABLE_SGI = 32956 # GL/glext.h:1143 +GL_PROXY_TEXTURE_COLOR_TABLE_SGI = 32957 # GL/glext.h:1144 +# EXT_cmyka (GL/glext.h:1147) +GL_CMYK_EXT = 32780 # GL/glext.h:1148 +GL_CMYKA_EXT = 32781 # GL/glext.h:1149 +GL_PACK_CMYK_HINT_EXT = 32782 # GL/glext.h:1150 +GL_UNPACK_CMYK_HINT_EXT = 32783 # GL/glext.h:1151 +# EXT_texture_object (GL/glext.h:1154) +GL_TEXTURE_PRIORITY_EXT = 32870 # GL/glext.h:1155 +GL_TEXTURE_RESIDENT_EXT = 32871 # GL/glext.h:1156 +GL_TEXTURE_1D_BINDING_EXT = 32872 # GL/glext.h:1157 +GL_TEXTURE_2D_BINDING_EXT = 32873 # GL/glext.h:1158 +GL_TEXTURE_3D_BINDING_EXT = 32874 # GL/glext.h:1159 +# SGIS_detail_texture (GL/glext.h:1162) +GL_DETAIL_TEXTURE_2D_SGIS = 32917 # GL/glext.h:1163 +GL_DETAIL_TEXTURE_2D_BINDING_SGIS = 32918 # GL/glext.h:1164 +GL_LINEAR_DETAIL_SGIS = 32919 # GL/glext.h:1165 +GL_LINEAR_DETAIL_ALPHA_SGIS = 32920 # GL/glext.h:1166 +GL_LINEAR_DETAIL_COLOR_SGIS = 32921 # GL/glext.h:1167 +GL_DETAIL_TEXTURE_LEVEL_SGIS = 32922 # GL/glext.h:1168 +GL_DETAIL_TEXTURE_MODE_SGIS = 32923 # GL/glext.h:1169 +GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS = 32924 # GL/glext.h:1170 +# SGIS_sharpen_texture (GL/glext.h:1173) +GL_LINEAR_SHARPEN_SGIS = 32941 # GL/glext.h:1174 +GL_LINEAR_SHARPEN_ALPHA_SGIS = 32942 # GL/glext.h:1175 +GL_LINEAR_SHARPEN_COLOR_SGIS = 32943 # GL/glext.h:1176 +GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS = 32944 # GL/glext.h:1177 +# EXT_packed_pixels (GL/glext.h:1180) +GL_UNSIGNED_BYTE_3_3_2_EXT = 32818 # GL/glext.h:1181 +GL_UNSIGNED_SHORT_4_4_4_4_EXT = 32819 # GL/glext.h:1182 +GL_UNSIGNED_SHORT_5_5_5_1_EXT = 32820 # GL/glext.h:1183 +GL_UNSIGNED_INT_8_8_8_8_EXT = 32821 # GL/glext.h:1184 +GL_UNSIGNED_INT_10_10_10_2_EXT = 32822 # GL/glext.h:1185 +# SGIS_texture_lod (GL/glext.h:1188) +GL_TEXTURE_MIN_LOD_SGIS = 33082 # GL/glext.h:1189 +GL_TEXTURE_MAX_LOD_SGIS = 33083 # GL/glext.h:1190 +GL_TEXTURE_BASE_LEVEL_SGIS = 33084 # GL/glext.h:1191 +GL_TEXTURE_MAX_LEVEL_SGIS = 33085 # GL/glext.h:1192 +# SGIS_multisample (GL/glext.h:1195) +GL_MULTISAMPLE_SGIS = 32925 # GL/glext.h:1196 +GL_SAMPLE_ALPHA_TO_MASK_SGIS = 32926 # GL/glext.h:1197 +GL_SAMPLE_ALPHA_TO_ONE_SGIS = 32927 # GL/glext.h:1198 +GL_SAMPLE_MASK_SGIS = 32928 # GL/glext.h:1199 +GL_1PASS_SGIS = 32929 # GL/glext.h:1200 +GL_2PASS_0_SGIS = 32930 # GL/glext.h:1201 +GL_2PASS_1_SGIS = 32931 # GL/glext.h:1202 +GL_4PASS_0_SGIS = 32932 # GL/glext.h:1203 +GL_4PASS_1_SGIS = 32933 # GL/glext.h:1204 +GL_4PASS_2_SGIS = 32934 # GL/glext.h:1205 +GL_4PASS_3_SGIS = 32935 # GL/glext.h:1206 +GL_SAMPLE_BUFFERS_SGIS = 32936 # GL/glext.h:1207 +GL_SAMPLES_SGIS = 32937 # GL/glext.h:1208 +GL_SAMPLE_MASK_VALUE_SGIS = 32938 # GL/glext.h:1209 +GL_SAMPLE_MASK_INVERT_SGIS = 32939 # GL/glext.h:1210 +GL_SAMPLE_PATTERN_SGIS = 32940 # GL/glext.h:1211 +# EXT_rescale_normal (GL/glext.h:1214) +GL_RESCALE_NORMAL_EXT = 32826 # GL/glext.h:1215 +# EXT_vertex_array (GL/glext.h:1218) +GL_VERTEX_ARRAY_EXT = 32884 # GL/glext.h:1219 +GL_NORMAL_ARRAY_EXT = 32885 # GL/glext.h:1220 +GL_COLOR_ARRAY_EXT = 32886 # GL/glext.h:1221 +GL_INDEX_ARRAY_EXT = 32887 # GL/glext.h:1222 +GL_TEXTURE_COORD_ARRAY_EXT = 32888 # GL/glext.h:1223 +GL_EDGE_FLAG_ARRAY_EXT = 32889 # GL/glext.h:1224 +GL_VERTEX_ARRAY_SIZE_EXT = 32890 # GL/glext.h:1225 +GL_VERTEX_ARRAY_TYPE_EXT = 32891 # GL/glext.h:1226 +GL_VERTEX_ARRAY_STRIDE_EXT = 32892 # GL/glext.h:1227 +GL_VERTEX_ARRAY_COUNT_EXT = 32893 # GL/glext.h:1228 +GL_NORMAL_ARRAY_TYPE_EXT = 32894 # GL/glext.h:1229 +GL_NORMAL_ARRAY_STRIDE_EXT = 32895 # GL/glext.h:1230 +GL_NORMAL_ARRAY_COUNT_EXT = 32896 # GL/glext.h:1231 +GL_COLOR_ARRAY_SIZE_EXT = 32897 # GL/glext.h:1232 +GL_COLOR_ARRAY_TYPE_EXT = 32898 # GL/glext.h:1233 +GL_COLOR_ARRAY_STRIDE_EXT = 32899 # GL/glext.h:1234 +GL_COLOR_ARRAY_COUNT_EXT = 32900 # GL/glext.h:1235 +GL_INDEX_ARRAY_TYPE_EXT = 32901 # GL/glext.h:1236 +GL_INDEX_ARRAY_STRIDE_EXT = 32902 # GL/glext.h:1237 +GL_INDEX_ARRAY_COUNT_EXT = 32903 # GL/glext.h:1238 +GL_TEXTURE_COORD_ARRAY_SIZE_EXT = 32904 # GL/glext.h:1239 +GL_TEXTURE_COORD_ARRAY_TYPE_EXT = 32905 # GL/glext.h:1240 +GL_TEXTURE_COORD_ARRAY_STRIDE_EXT = 32906 # GL/glext.h:1241 +GL_TEXTURE_COORD_ARRAY_COUNT_EXT = 32907 # GL/glext.h:1242 +GL_EDGE_FLAG_ARRAY_STRIDE_EXT = 32908 # GL/glext.h:1243 +GL_EDGE_FLAG_ARRAY_COUNT_EXT = 32909 # GL/glext.h:1244 +GL_VERTEX_ARRAY_POINTER_EXT = 32910 # GL/glext.h:1245 +GL_NORMAL_ARRAY_POINTER_EXT = 32911 # GL/glext.h:1246 +GL_COLOR_ARRAY_POINTER_EXT = 32912 # GL/glext.h:1247 +GL_INDEX_ARRAY_POINTER_EXT = 32913 # GL/glext.h:1248 +GL_TEXTURE_COORD_ARRAY_POINTER_EXT = 32914 # GL/glext.h:1249 +GL_EDGE_FLAG_ARRAY_POINTER_EXT = 32915 # GL/glext.h:1250 +# EXT_misc_attribute (GL/glext.h:1253) +# SGIS_generate_mipmap (GL/glext.h:1256) +GL_GENERATE_MIPMAP_SGIS = 33169 # GL/glext.h:1257 +GL_GENERATE_MIPMAP_HINT_SGIS = 33170 # GL/glext.h:1258 +# SGIX_clipmap (GL/glext.h:1261) +GL_LINEAR_CLIPMAP_LINEAR_SGIX = 33136 # GL/glext.h:1262 +GL_TEXTURE_CLIPMAP_CENTER_SGIX = 33137 # GL/glext.h:1263 +GL_TEXTURE_CLIPMAP_FRAME_SGIX = 33138 # GL/glext.h:1264 +GL_TEXTURE_CLIPMAP_OFFSET_SGIX = 33139 # GL/glext.h:1265 +GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX = 33140 # GL/glext.h:1266 +GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX = 33141 # GL/glext.h:1267 +GL_TEXTURE_CLIPMAP_DEPTH_SGIX = 33142 # GL/glext.h:1268 +GL_MAX_CLIPMAP_DEPTH_SGIX = 33143 # GL/glext.h:1269 +GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX = 33144 # GL/glext.h:1270 +GL_NEAREST_CLIPMAP_NEAREST_SGIX = 33869 # GL/glext.h:1271 +GL_NEAREST_CLIPMAP_LINEAR_SGIX = 33870 # GL/glext.h:1272 +GL_LINEAR_CLIPMAP_NEAREST_SGIX = 33871 # GL/glext.h:1273 +# SGIX_shadow (GL/glext.h:1276) +GL_TEXTURE_COMPARE_SGIX = 33178 # GL/glext.h:1277 +GL_TEXTURE_COMPARE_OPERATOR_SGIX = 33179 # GL/glext.h:1278 +GL_TEXTURE_LEQUAL_R_SGIX = 33180 # GL/glext.h:1279 +GL_TEXTURE_GEQUAL_R_SGIX = 33181 # GL/glext.h:1280 +# SGIS_texture_edge_clamp (GL/glext.h:1283) +GL_CLAMP_TO_EDGE_SGIS = 33071 # GL/glext.h:1284 +# SGIS_texture_border_clamp (GL/glext.h:1287) +GL_CLAMP_TO_BORDER_SGIS = 33069 # GL/glext.h:1288 +# EXT_blend_minmax (GL/glext.h:1291) +GL_FUNC_ADD_EXT = 32774 # GL/glext.h:1292 +GL_MIN_EXT = 32775 # GL/glext.h:1293 +GL_MAX_EXT = 32776 # GL/glext.h:1294 +GL_BLEND_EQUATION_EXT = 32777 # GL/glext.h:1295 +# EXT_blend_subtract (GL/glext.h:1298) +GL_FUNC_SUBTRACT_EXT = 32778 # GL/glext.h:1299 +GL_FUNC_REVERSE_SUBTRACT_EXT = 32779 # GL/glext.h:1300 +# EXT_blend_logic_op (GL/glext.h:1303) +# SGIX_interlace (GL/glext.h:1306) +GL_INTERLACE_SGIX = 32916 # GL/glext.h:1307 +# SGIX_pixel_tiles (GL/glext.h:1310) +GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX = 33086 # GL/glext.h:1311 +GL_PIXEL_TILE_CACHE_INCREMENT_SGIX = 33087 # GL/glext.h:1312 +GL_PIXEL_TILE_WIDTH_SGIX = 33088 # GL/glext.h:1313 +GL_PIXEL_TILE_HEIGHT_SGIX = 33089 # GL/glext.h:1314 +GL_PIXEL_TILE_GRID_WIDTH_SGIX = 33090 # GL/glext.h:1315 +GL_PIXEL_TILE_GRID_HEIGHT_SGIX = 33091 # GL/glext.h:1316 +GL_PIXEL_TILE_GRID_DEPTH_SGIX = 33092 # GL/glext.h:1317 +GL_PIXEL_TILE_CACHE_SIZE_SGIX = 33093 # GL/glext.h:1318 +# SGIS_texture_select (GL/glext.h:1321) +GL_DUAL_ALPHA4_SGIS = 33040 # GL/glext.h:1322 +GL_DUAL_ALPHA8_SGIS = 33041 # GL/glext.h:1323 +GL_DUAL_ALPHA12_SGIS = 33042 # GL/glext.h:1324 +GL_DUAL_ALPHA16_SGIS = 33043 # GL/glext.h:1325 +GL_DUAL_LUMINANCE4_SGIS = 33044 # GL/glext.h:1326 +GL_DUAL_LUMINANCE8_SGIS = 33045 # GL/glext.h:1327 +GL_DUAL_LUMINANCE12_SGIS = 33046 # GL/glext.h:1328 +GL_DUAL_LUMINANCE16_SGIS = 33047 # GL/glext.h:1329 +GL_DUAL_INTENSITY4_SGIS = 33048 # GL/glext.h:1330 +GL_DUAL_INTENSITY8_SGIS = 33049 # GL/glext.h:1331 +GL_DUAL_INTENSITY12_SGIS = 33050 # GL/glext.h:1332 +GL_DUAL_INTENSITY16_SGIS = 33051 # GL/glext.h:1333 +GL_DUAL_LUMINANCE_ALPHA4_SGIS = 33052 # GL/glext.h:1334 +GL_DUAL_LUMINANCE_ALPHA8_SGIS = 33053 # GL/glext.h:1335 +GL_QUAD_ALPHA4_SGIS = 33054 # GL/glext.h:1336 +GL_QUAD_ALPHA8_SGIS = 33055 # GL/glext.h:1337 +GL_QUAD_LUMINANCE4_SGIS = 33056 # GL/glext.h:1338 +GL_QUAD_LUMINANCE8_SGIS = 33057 # GL/glext.h:1339 +GL_QUAD_INTENSITY4_SGIS = 33058 # GL/glext.h:1340 +GL_QUAD_INTENSITY8_SGIS = 33059 # GL/glext.h:1341 +GL_DUAL_TEXTURE_SELECT_SGIS = 33060 # GL/glext.h:1342 +GL_QUAD_TEXTURE_SELECT_SGIS = 33061 # GL/glext.h:1343 +# SGIX_sprite (GL/glext.h:1346) +GL_SPRITE_SGIX = 33096 # GL/glext.h:1347 +GL_SPRITE_MODE_SGIX = 33097 # GL/glext.h:1348 +GL_SPRITE_AXIS_SGIX = 33098 # GL/glext.h:1349 +GL_SPRITE_TRANSLATION_SGIX = 33099 # GL/glext.h:1350 +GL_SPRITE_AXIAL_SGIX = 33100 # GL/glext.h:1351 +GL_SPRITE_OBJECT_ALIGNED_SGIX = 33101 # GL/glext.h:1352 +GL_SPRITE_EYE_ALIGNED_SGIX = 33102 # GL/glext.h:1353 +# SGIX_texture_multi_buffer (GL/glext.h:1356) +GL_TEXTURE_MULTI_BUFFER_HINT_SGIX = 33070 # GL/glext.h:1357 +# EXT_point_parameters (GL/glext.h:1360) +GL_POINT_SIZE_MIN_EXT = 33062 # GL/glext.h:1361 +GL_POINT_SIZE_MAX_EXT = 33063 # GL/glext.h:1362 +GL_POINT_FADE_THRESHOLD_SIZE_EXT = 33064 # GL/glext.h:1363 +GL_DISTANCE_ATTENUATION_EXT = 33065 # GL/glext.h:1364 +# SGIS_point_parameters (GL/glext.h:1367) +GL_POINT_SIZE_MIN_SGIS = 33062 # GL/glext.h:1368 +GL_POINT_SIZE_MAX_SGIS = 33063 # GL/glext.h:1369 +GL_POINT_FADE_THRESHOLD_SIZE_SGIS = 33064 # GL/glext.h:1370 +GL_DISTANCE_ATTENUATION_SGIS = 33065 # GL/glext.h:1371 +# SGIX_instruments (GL/glext.h:1374) +GL_INSTRUMENT_BUFFER_POINTER_SGIX = 33152 # GL/glext.h:1375 +GL_INSTRUMENT_MEASUREMENTS_SGIX = 33153 # GL/glext.h:1376 +# SGIX_texture_scale_bias (GL/glext.h:1379) +GL_POST_TEXTURE_FILTER_BIAS_SGIX = 33145 # GL/glext.h:1380 +GL_POST_TEXTURE_FILTER_SCALE_SGIX = 33146 # GL/glext.h:1381 +GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX = 33147 # GL/glext.h:1382 +GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX = 33148 # GL/glext.h:1383 +# SGIX_framezoom (GL/glext.h:1386) +GL_FRAMEZOOM_SGIX = 33163 # GL/glext.h:1387 +GL_FRAMEZOOM_FACTOR_SGIX = 33164 # GL/glext.h:1388 +GL_MAX_FRAMEZOOM_FACTOR_SGIX = 33165 # GL/glext.h:1389 +# SGIX_tag_sample_buffer (GL/glext.h:1392) +# FfdMaskSGIX (GL/glext.h:1395) +GL_TEXTURE_DEFORMATION_BIT_SGIX = 1 # GL/glext.h:1396 +GL_GEOMETRY_DEFORMATION_BIT_SGIX = 2 # GL/glext.h:1397 +# SGIX_polynomial_ffd (GL/glext.h:1400) +GL_GEOMETRY_DEFORMATION_SGIX = 33172 # GL/glext.h:1401 +GL_TEXTURE_DEFORMATION_SGIX = 33173 # GL/glext.h:1402 +GL_DEFORMATIONS_MASK_SGIX = 33174 # GL/glext.h:1403 +GL_MAX_DEFORMATION_ORDER_SGIX = 33175 # GL/glext.h:1404 +# SGIX_reference_plane (GL/glext.h:1407) +GL_REFERENCE_PLANE_SGIX = 33149 # GL/glext.h:1408 +GL_REFERENCE_PLANE_EQUATION_SGIX = 33150 # GL/glext.h:1409 +# SGIX_flush_raster (GL/glext.h:1412) +# SGIX_depth_texture (GL/glext.h:1415) +GL_DEPTH_COMPONENT16_SGIX = 33189 # GL/glext.h:1416 +GL_DEPTH_COMPONENT24_SGIX = 33190 # GL/glext.h:1417 +GL_DEPTH_COMPONENT32_SGIX = 33191 # GL/glext.h:1418 +# SGIS_fog_function (GL/glext.h:1421) +GL_FOG_FUNC_SGIS = 33066 # GL/glext.h:1422 +GL_FOG_FUNC_POINTS_SGIS = 33067 # GL/glext.h:1423 +GL_MAX_FOG_FUNC_POINTS_SGIS = 33068 # GL/glext.h:1424 +# SGIX_fog_offset (GL/glext.h:1427) +GL_FOG_OFFSET_SGIX = 33176 # GL/glext.h:1428 +GL_FOG_OFFSET_VALUE_SGIX = 33177 # GL/glext.h:1429 +# HP_image_transform (GL/glext.h:1432) +GL_IMAGE_SCALE_X_HP = 33109 # GL/glext.h:1433 +GL_IMAGE_SCALE_Y_HP = 33110 # GL/glext.h:1434 +GL_IMAGE_TRANSLATE_X_HP = 33111 # GL/glext.h:1435 +GL_IMAGE_TRANSLATE_Y_HP = 33112 # GL/glext.h:1436 +GL_IMAGE_ROTATE_ANGLE_HP = 33113 # GL/glext.h:1437 +GL_IMAGE_ROTATE_ORIGIN_X_HP = 33114 # GL/glext.h:1438 +GL_IMAGE_ROTATE_ORIGIN_Y_HP = 33115 # GL/glext.h:1439 +GL_IMAGE_MAG_FILTER_HP = 33116 # GL/glext.h:1440 +GL_IMAGE_MIN_FILTER_HP = 33117 # GL/glext.h:1441 +GL_IMAGE_CUBIC_WEIGHT_HP = 33118 # GL/glext.h:1442 +GL_CUBIC_HP = 33119 # GL/glext.h:1443 +GL_AVERAGE_HP = 33120 # GL/glext.h:1444 +GL_IMAGE_TRANSFORM_2D_HP = 33121 # GL/glext.h:1445 +GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP = 33122 # GL/glext.h:1446 +GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP = 33123 # GL/glext.h:1447 +# HP_convolution_border_modes (GL/glext.h:1450) +GL_IGNORE_BORDER_HP = 33104 # GL/glext.h:1451 +GL_CONSTANT_BORDER_HP = 33105 # GL/glext.h:1452 +GL_REPLICATE_BORDER_HP = 33107 # GL/glext.h:1453 +GL_CONVOLUTION_BORDER_COLOR_HP = 33108 # GL/glext.h:1454 +# INGR_palette_buffer (GL/glext.h:1457) +# SGIX_texture_add_env (GL/glext.h:1460) +GL_TEXTURE_ENV_BIAS_SGIX = 32958 # GL/glext.h:1461 +# EXT_color_subtable (GL/glext.h:1464) +# PGI_vertex_hints (GL/glext.h:1467) +GL_VERTEX_DATA_HINT_PGI = 107050 # GL/glext.h:1468 +GL_VERTEX_CONSISTENT_HINT_PGI = 107051 # GL/glext.h:1469 +GL_MATERIAL_SIDE_HINT_PGI = 107052 # GL/glext.h:1470 +GL_MAX_VERTEX_HINT_PGI = 107053 # GL/glext.h:1471 +GL_COLOR3_BIT_PGI = 65536 # GL/glext.h:1472 +GL_COLOR4_BIT_PGI = 131072 # GL/glext.h:1473 +GL_EDGEFLAG_BIT_PGI = 262144 # GL/glext.h:1474 +GL_INDEX_BIT_PGI = 524288 # GL/glext.h:1475 +GL_MAT_AMBIENT_BIT_PGI = 1048576 # GL/glext.h:1476 +GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI = 2097152 # GL/glext.h:1477 +GL_MAT_DIFFUSE_BIT_PGI = 4194304 # GL/glext.h:1478 +GL_MAT_EMISSION_BIT_PGI = 8388608 # GL/glext.h:1479 +GL_MAT_COLOR_INDEXES_BIT_PGI = 16777216 # GL/glext.h:1480 +GL_MAT_SHININESS_BIT_PGI = 33554432 # GL/glext.h:1481 +GL_MAT_SPECULAR_BIT_PGI = 67108864 # GL/glext.h:1482 +GL_NORMAL_BIT_PGI = 134217728 # GL/glext.h:1483 +GL_TEXCOORD1_BIT_PGI = 268435456 # GL/glext.h:1484 +GL_TEXCOORD2_BIT_PGI = 536870912 # GL/glext.h:1485 +GL_TEXCOORD3_BIT_PGI = 1073741824 # GL/glext.h:1486 +GL_TEXCOORD4_BIT_PGI = 2147483648 # GL/glext.h:1487 +GL_VERTEX23_BIT_PGI = 4 # GL/glext.h:1488 +GL_VERTEX4_BIT_PGI = 8 # GL/glext.h:1489 +# PGI_misc_hints (GL/glext.h:1492) +GL_PREFER_DOUBLEBUFFER_HINT_PGI = 107000 # GL/glext.h:1493 +GL_CONSERVE_MEMORY_HINT_PGI = 107005 # GL/glext.h:1494 +GL_RECLAIM_MEMORY_HINT_PGI = 107006 # GL/glext.h:1495 +GL_NATIVE_GRAPHICS_HANDLE_PGI = 107010 # GL/glext.h:1496 +GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI = 107011 # GL/glext.h:1497 +GL_NATIVE_GRAPHICS_END_HINT_PGI = 107012 # GL/glext.h:1498 +GL_ALWAYS_FAST_HINT_PGI = 107020 # GL/glext.h:1499 +GL_ALWAYS_SOFT_HINT_PGI = 107021 # GL/glext.h:1500 +GL_ALLOW_DRAW_OBJ_HINT_PGI = 107022 # GL/glext.h:1501 +GL_ALLOW_DRAW_WIN_HINT_PGI = 107023 # GL/glext.h:1502 +GL_ALLOW_DRAW_FRG_HINT_PGI = 107024 # GL/glext.h:1503 +GL_ALLOW_DRAW_MEM_HINT_PGI = 107025 # GL/glext.h:1504 +GL_STRICT_DEPTHFUNC_HINT_PGI = 107030 # GL/glext.h:1505 +GL_STRICT_LIGHTING_HINT_PGI = 107031 # GL/glext.h:1506 +GL_STRICT_SCISSOR_HINT_PGI = 107032 # GL/glext.h:1507 +GL_FULL_STIPPLE_HINT_PGI = 107033 # GL/glext.h:1508 +GL_CLIP_NEAR_HINT_PGI = 107040 # GL/glext.h:1509 +GL_CLIP_FAR_HINT_PGI = 107041 # GL/glext.h:1510 +GL_WIDE_LINE_HINT_PGI = 107042 # GL/glext.h:1511 +GL_BACK_NORMALS_HINT_PGI = 107043 # GL/glext.h:1512 +# EXT_paletted_texture (GL/glext.h:1515) +GL_COLOR_INDEX1_EXT = 32994 # GL/glext.h:1516 +GL_COLOR_INDEX2_EXT = 32995 # GL/glext.h:1517 +GL_COLOR_INDEX4_EXT = 32996 # GL/glext.h:1518 +GL_COLOR_INDEX8_EXT = 32997 # GL/glext.h:1519 +GL_COLOR_INDEX12_EXT = 32998 # GL/glext.h:1520 +GL_COLOR_INDEX16_EXT = 32999 # GL/glext.h:1521 +GL_TEXTURE_INDEX_SIZE_EXT = 33005 # GL/glext.h:1522 +# EXT_clip_volume_hint (GL/glext.h:1525) +GL_CLIP_VOLUME_CLIPPING_HINT_EXT = 33008 # GL/glext.h:1526 +# SGIX_list_priority (GL/glext.h:1529) +GL_LIST_PRIORITY_SGIX = 33154 # GL/glext.h:1530 +# SGIX_ir_instrument1 (GL/glext.h:1533) +GL_IR_INSTRUMENT1_SGIX = 33151 # GL/glext.h:1534 +# SGIX_calligraphic_fragment (GL/glext.h:1537) +GL_CALLIGRAPHIC_FRAGMENT_SGIX = 33155 # GL/glext.h:1538 +# SGIX_texture_lod_bias (GL/glext.h:1541) +GL_TEXTURE_LOD_BIAS_S_SGIX = 33166 # GL/glext.h:1542 +GL_TEXTURE_LOD_BIAS_T_SGIX = 33167 # GL/glext.h:1543 +GL_TEXTURE_LOD_BIAS_R_SGIX = 33168 # GL/glext.h:1544 +# SGIX_shadow_ambient (GL/glext.h:1547) +GL_SHADOW_AMBIENT_SGIX = 32959 # GL/glext.h:1548 +# EXT_index_texture (GL/glext.h:1551) +# EXT_index_material (GL/glext.h:1554) +GL_INDEX_MATERIAL_EXT = 33208 # GL/glext.h:1555 +GL_INDEX_MATERIAL_PARAMETER_EXT = 33209 # GL/glext.h:1556 +GL_INDEX_MATERIAL_FACE_EXT = 33210 # GL/glext.h:1557 +# EXT_index_func (GL/glext.h:1560) +GL_INDEX_TEST_EXT = 33205 # GL/glext.h:1561 +GL_INDEX_TEST_FUNC_EXT = 33206 # GL/glext.h:1562 +GL_INDEX_TEST_REF_EXT = 33207 # GL/glext.h:1563 +# EXT_index_array_formats (GL/glext.h:1566) +GL_IUI_V2F_EXT = 33197 # GL/glext.h:1567 +GL_IUI_V3F_EXT = 33198 # GL/glext.h:1568 +GL_IUI_N3F_V2F_EXT = 33199 # GL/glext.h:1569 +GL_IUI_N3F_V3F_EXT = 33200 # GL/glext.h:1570 +GL_T2F_IUI_V2F_EXT = 33201 # GL/glext.h:1571 +GL_T2F_IUI_V3F_EXT = 33202 # GL/glext.h:1572 +GL_T2F_IUI_N3F_V2F_EXT = 33203 # GL/glext.h:1573 +GL_T2F_IUI_N3F_V3F_EXT = 33204 # GL/glext.h:1574 +# EXT_compiled_vertex_array (GL/glext.h:1577) +GL_ARRAY_ELEMENT_LOCK_FIRST_EXT = 33192 # GL/glext.h:1578 +GL_ARRAY_ELEMENT_LOCK_COUNT_EXT = 33193 # GL/glext.h:1579 +# EXT_cull_vertex (GL/glext.h:1582) +GL_CULL_VERTEX_EXT = 33194 # GL/glext.h:1583 +GL_CULL_VERTEX_EYE_POSITION_EXT = 33195 # GL/glext.h:1584 +GL_CULL_VERTEX_OBJECT_POSITION_EXT = 33196 # GL/glext.h:1585 +# SGIX_ycrcb (GL/glext.h:1588) +GL_YCRCB_422_SGIX = 33211 # GL/glext.h:1589 +GL_YCRCB_444_SGIX = 33212 # GL/glext.h:1590 +# SGIX_fragment_lighting (GL/glext.h:1593) +GL_FRAGMENT_LIGHTING_SGIX = 33792 # GL/glext.h:1594 +GL_FRAGMENT_COLOR_MATERIAL_SGIX = 33793 # GL/glext.h:1595 +GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX = 33794 # GL/glext.h:1596 +GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX = 33795 # GL/glext.h:1597 +GL_MAX_FRAGMENT_LIGHTS_SGIX = 33796 # GL/glext.h:1598 +GL_MAX_ACTIVE_LIGHTS_SGIX = 33797 # GL/glext.h:1599 +GL_CURRENT_RASTER_NORMAL_SGIX = 33798 # GL/glext.h:1600 +GL_LIGHT_ENV_MODE_SGIX = 33799 # GL/glext.h:1601 +GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX = 33800 # GL/glext.h:1602 +GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX = 33801 # GL/glext.h:1603 +GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX = 33802 # GL/glext.h:1604 +GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX = 33803 # GL/glext.h:1605 +GL_FRAGMENT_LIGHT0_SGIX = 33804 # GL/glext.h:1606 +GL_FRAGMENT_LIGHT1_SGIX = 33805 # GL/glext.h:1607 +GL_FRAGMENT_LIGHT2_SGIX = 33806 # GL/glext.h:1608 +GL_FRAGMENT_LIGHT3_SGIX = 33807 # GL/glext.h:1609 +GL_FRAGMENT_LIGHT4_SGIX = 33808 # GL/glext.h:1610 +GL_FRAGMENT_LIGHT5_SGIX = 33809 # GL/glext.h:1611 +GL_FRAGMENT_LIGHT6_SGIX = 33810 # GL/glext.h:1612 +GL_FRAGMENT_LIGHT7_SGIX = 33811 # GL/glext.h:1613 +# IBM_rasterpos_clip (GL/glext.h:1616) +GL_RASTER_POSITION_UNCLIPPED_IBM = 103010 # GL/glext.h:1617 +# HP_texture_lighting (GL/glext.h:1620) +GL_TEXTURE_LIGHTING_MODE_HP = 33127 # GL/glext.h:1621 +GL_TEXTURE_POST_SPECULAR_HP = 33128 # GL/glext.h:1622 +GL_TEXTURE_PRE_SPECULAR_HP = 33129 # GL/glext.h:1623 +# EXT_draw_range_elements (GL/glext.h:1626) +GL_MAX_ELEMENTS_VERTICES_EXT = 33000 # GL/glext.h:1627 +GL_MAX_ELEMENTS_INDICES_EXT = 33001 # GL/glext.h:1628 +# WIN_phong_shading (GL/glext.h:1631) +GL_PHONG_WIN = 33002 # GL/glext.h:1632 +GL_PHONG_HINT_WIN = 33003 # GL/glext.h:1633 +# WIN_specular_fog (GL/glext.h:1636) +GL_FOG_SPECULAR_TEXTURE_WIN = 33004 # GL/glext.h:1637 +# EXT_light_texture (GL/glext.h:1640) +GL_FRAGMENT_MATERIAL_EXT = 33609 # GL/glext.h:1641 +GL_FRAGMENT_NORMAL_EXT = 33610 # GL/glext.h:1642 +GL_FRAGMENT_COLOR_EXT = 33612 # GL/glext.h:1643 +GL_ATTENUATION_EXT = 33613 # GL/glext.h:1644 +GL_SHADOW_ATTENUATION_EXT = 33614 # GL/glext.h:1645 +GL_TEXTURE_APPLICATION_MODE_EXT = 33615 # GL/glext.h:1646 +GL_TEXTURE_LIGHT_EXT = 33616 # GL/glext.h:1647 +GL_TEXTURE_MATERIAL_FACE_EXT = 33617 # GL/glext.h:1648 +GL_TEXTURE_MATERIAL_PARAMETER_EXT = 33618 # GL/glext.h:1649 +# SGIX_blend_alpha_minmax (GL/glext.h:1653) +GL_ALPHA_MIN_SGIX = 33568 # GL/glext.h:1654 +GL_ALPHA_MAX_SGIX = 33569 # GL/glext.h:1655 +# SGIX_impact_pixel_texture (GL/glext.h:1658) +GL_PIXEL_TEX_GEN_Q_CEILING_SGIX = 33156 # GL/glext.h:1659 +GL_PIXEL_TEX_GEN_Q_ROUND_SGIX = 33157 # GL/glext.h:1660 +GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX = 33158 # GL/glext.h:1661 +GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX = 33159 # GL/glext.h:1662 +GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX = 33160 # GL/glext.h:1663 +GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX = 33161 # GL/glext.h:1664 +GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX = 33162 # GL/glext.h:1665 +# EXT_bgra (GL/glext.h:1668) +GL_BGR_EXT = 32992 # GL/glext.h:1669 +GL_BGRA_EXT = 32993 # GL/glext.h:1670 +# SGIX_async (GL/glext.h:1673) +GL_ASYNC_MARKER_SGIX = 33577 # GL/glext.h:1674 +# SGIX_async_pixel (GL/glext.h:1677) +GL_ASYNC_TEX_IMAGE_SGIX = 33628 # GL/glext.h:1678 +GL_ASYNC_DRAW_PIXELS_SGIX = 33629 # GL/glext.h:1679 +GL_ASYNC_READ_PIXELS_SGIX = 33630 # GL/glext.h:1680 +GL_MAX_ASYNC_TEX_IMAGE_SGIX = 33631 # GL/glext.h:1681 +GL_MAX_ASYNC_DRAW_PIXELS_SGIX = 33632 # GL/glext.h:1682 +GL_MAX_ASYNC_READ_PIXELS_SGIX = 33633 # GL/glext.h:1683 +# SGIX_async_histogram (GL/glext.h:1686) +GL_ASYNC_HISTOGRAM_SGIX = 33580 # GL/glext.h:1687 +GL_MAX_ASYNC_HISTOGRAM_SGIX = 33581 # GL/glext.h:1688 +# INTEL_texture_scissor (GL/glext.h:1691) +# INTEL_parallel_arrays (GL/glext.h:1694) +GL_PARALLEL_ARRAYS_INTEL = 33780 # GL/glext.h:1695 +GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL = 33781 # GL/glext.h:1696 +GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL = 33782 # GL/glext.h:1697 +GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL = 33783 # GL/glext.h:1698 +GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL = 33784 # GL/glext.h:1699 +# HP_occlusion_test (GL/glext.h:1702) +GL_OCCLUSION_TEST_HP = 33125 # GL/glext.h:1703 +GL_OCCLUSION_TEST_RESULT_HP = 33126 # GL/glext.h:1704 +# EXT_pixel_transform (GL/glext.h:1707) +GL_PIXEL_TRANSFORM_2D_EXT = 33584 # GL/glext.h:1708 +GL_PIXEL_MAG_FILTER_EXT = 33585 # GL/glext.h:1709 +GL_PIXEL_MIN_FILTER_EXT = 33586 # GL/glext.h:1710 +GL_PIXEL_CUBIC_WEIGHT_EXT = 33587 # GL/glext.h:1711 +GL_CUBIC_EXT = 33588 # GL/glext.h:1712 +GL_AVERAGE_EXT = 33589 # GL/glext.h:1713 +GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT = 33590 # GL/glext.h:1714 +GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT = 33591 # GL/glext.h:1715 +GL_PIXEL_TRANSFORM_2D_MATRIX_EXT = 33592 # GL/glext.h:1716 +# EXT_pixel_transform_color_table (GL/glext.h:1719) +# EXT_shared_texture_palette (GL/glext.h:1722) +GL_SHARED_TEXTURE_PALETTE_EXT = 33275 # GL/glext.h:1723 +# EXT_separate_specular_color (GL/glext.h:1726) +GL_LIGHT_MODEL_COLOR_CONTROL_EXT = 33272 # GL/glext.h:1727 +GL_SINGLE_COLOR_EXT = 33273 # GL/glext.h:1728 +GL_SEPARATE_SPECULAR_COLOR_EXT = 33274 # GL/glext.h:1729 +# EXT_secondary_color (GL/glext.h:1732) +GL_COLOR_SUM_EXT = 33880 # GL/glext.h:1733 +GL_CURRENT_SECONDARY_COLOR_EXT = 33881 # GL/glext.h:1734 +GL_SECONDARY_COLOR_ARRAY_SIZE_EXT = 33882 # GL/glext.h:1735 +GL_SECONDARY_COLOR_ARRAY_TYPE_EXT = 33883 # GL/glext.h:1736 +GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT = 33884 # GL/glext.h:1737 +GL_SECONDARY_COLOR_ARRAY_POINTER_EXT = 33885 # GL/glext.h:1738 +GL_SECONDARY_COLOR_ARRAY_EXT = 33886 # GL/glext.h:1739 +# EXT_texture_perturb_normal (GL/glext.h:1742) +GL_PERTURB_EXT = 34222 # GL/glext.h:1743 +GL_TEXTURE_NORMAL_EXT = 34223 # GL/glext.h:1744 +# EXT_multi_draw_arrays (GL/glext.h:1747) +# EXT_fog_coord (GL/glext.h:1750) +GL_FOG_COORDINATE_SOURCE_EXT = 33872 # GL/glext.h:1751 +GL_FOG_COORDINATE_EXT = 33873 # GL/glext.h:1752 +GL_FRAGMENT_DEPTH_EXT = 33874 # GL/glext.h:1753 +GL_CURRENT_FOG_COORDINATE_EXT = 33875 # GL/glext.h:1754 +GL_FOG_COORDINATE_ARRAY_TYPE_EXT = 33876 # GL/glext.h:1755 +GL_FOG_COORDINATE_ARRAY_STRIDE_EXT = 33877 # GL/glext.h:1756 +GL_FOG_COORDINATE_ARRAY_POINTER_EXT = 33878 # GL/glext.h:1757 +GL_FOG_COORDINATE_ARRAY_EXT = 33879 # GL/glext.h:1758 +# REND_screen_coordinates (GL/glext.h:1761) +GL_SCREEN_COORDINATES_REND = 33936 # GL/glext.h:1762 +GL_INVERTED_SCREEN_W_REND = 33937 # GL/glext.h:1763 +# EXT_coordinate_frame (GL/glext.h:1766) +GL_TANGENT_ARRAY_EXT = 33849 # GL/glext.h:1767 +GL_BINORMAL_ARRAY_EXT = 33850 # GL/glext.h:1768 +GL_CURRENT_TANGENT_EXT = 33851 # GL/glext.h:1769 +GL_CURRENT_BINORMAL_EXT = 33852 # GL/glext.h:1770 +GL_TANGENT_ARRAY_TYPE_EXT = 33854 # GL/glext.h:1771 +GL_TANGENT_ARRAY_STRIDE_EXT = 33855 # GL/glext.h:1772 +GL_BINORMAL_ARRAY_TYPE_EXT = 33856 # GL/glext.h:1773 +GL_BINORMAL_ARRAY_STRIDE_EXT = 33857 # GL/glext.h:1774 +GL_TANGENT_ARRAY_POINTER_EXT = 33858 # GL/glext.h:1775 +GL_BINORMAL_ARRAY_POINTER_EXT = 33859 # GL/glext.h:1776 +GL_MAP1_TANGENT_EXT = 33860 # GL/glext.h:1777 +GL_MAP2_TANGENT_EXT = 33861 # GL/glext.h:1778 +GL_MAP1_BINORMAL_EXT = 33862 # GL/glext.h:1779 +GL_MAP2_BINORMAL_EXT = 33863 # GL/glext.h:1780 +# EXT_texture_env_combine (GL/glext.h:1783) +GL_COMBINE_EXT = 34160 # GL/glext.h:1784 +GL_COMBINE_RGB_EXT = 34161 # GL/glext.h:1785 +GL_COMBINE_ALPHA_EXT = 34162 # GL/glext.h:1786 +GL_RGB_SCALE_EXT = 34163 # GL/glext.h:1787 +GL_ADD_SIGNED_EXT = 34164 # GL/glext.h:1788 +GL_INTERPOLATE_EXT = 34165 # GL/glext.h:1789 +GL_CONSTANT_EXT = 34166 # GL/glext.h:1790 +GL_PRIMARY_COLOR_EXT = 34167 # GL/glext.h:1791 +GL_PREVIOUS_EXT = 34168 # GL/glext.h:1792 +GL_SOURCE0_RGB_EXT = 34176 # GL/glext.h:1793 +GL_SOURCE1_RGB_EXT = 34177 # GL/glext.h:1794 +GL_SOURCE2_RGB_EXT = 34178 # GL/glext.h:1795 +GL_SOURCE0_ALPHA_EXT = 34184 # GL/glext.h:1796 +GL_SOURCE1_ALPHA_EXT = 34185 # GL/glext.h:1797 +GL_SOURCE2_ALPHA_EXT = 34186 # GL/glext.h:1798 +GL_OPERAND0_RGB_EXT = 34192 # GL/glext.h:1799 +GL_OPERAND1_RGB_EXT = 34193 # GL/glext.h:1800 +GL_OPERAND2_RGB_EXT = 34194 # GL/glext.h:1801 +GL_OPERAND0_ALPHA_EXT = 34200 # GL/glext.h:1802 +GL_OPERAND1_ALPHA_EXT = 34201 # GL/glext.h:1803 +GL_OPERAND2_ALPHA_EXT = 34202 # GL/glext.h:1804 +# APPLE_specular_vector (GL/glext.h:1807) +GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE = 34224 # GL/glext.h:1808 +# APPLE_transform_hint (GL/glext.h:1811) +GL_TRANSFORM_HINT_APPLE = 34225 # GL/glext.h:1812 +# SGIX_fog_scale (GL/glext.h:1815) +GL_FOG_SCALE_SGIX = 33276 # GL/glext.h:1816 +GL_FOG_SCALE_VALUE_SGIX = 33277 # GL/glext.h:1817 +# SUNX_constant_data (GL/glext.h:1820) +GL_UNPACK_CONSTANT_DATA_SUNX = 33237 # GL/glext.h:1821 +GL_TEXTURE_CONSTANT_DATA_SUNX = 33238 # GL/glext.h:1822 +# SUN_global_alpha (GL/glext.h:1825) +GL_GLOBAL_ALPHA_SUN = 33241 # GL/glext.h:1826 +GL_GLOBAL_ALPHA_FACTOR_SUN = 33242 # GL/glext.h:1827 +# SUN_triangle_list (GL/glext.h:1830) +GL_RESTART_SUN = 1 # GL/glext.h:1831 +GL_REPLACE_MIDDLE_SUN = 2 # GL/glext.h:1832 +GL_REPLACE_OLDEST_SUN = 3 # GL/glext.h:1833 +GL_TRIANGLE_LIST_SUN = 33239 # GL/glext.h:1834 +GL_REPLACEMENT_CODE_SUN = 33240 # GL/glext.h:1835 +GL_REPLACEMENT_CODE_ARRAY_SUN = 34240 # GL/glext.h:1836 +GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN = 34241 # GL/glext.h:1837 +GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN = 34242 # GL/glext.h:1838 +GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN = 34243 # GL/glext.h:1839 +GL_R1UI_V3F_SUN = 34244 # GL/glext.h:1840 +GL_R1UI_C4UB_V3F_SUN = 34245 # GL/glext.h:1841 +GL_R1UI_C3F_V3F_SUN = 34246 # GL/glext.h:1842 +GL_R1UI_N3F_V3F_SUN = 34247 # GL/glext.h:1843 +GL_R1UI_C4F_N3F_V3F_SUN = 34248 # GL/glext.h:1844 +GL_R1UI_T2F_V3F_SUN = 34249 # GL/glext.h:1845 +GL_R1UI_T2F_N3F_V3F_SUN = 34250 # GL/glext.h:1846 +GL_R1UI_T2F_C4F_N3F_V3F_SUN = 34251 # GL/glext.h:1847 +# SUN_vertex (GL/glext.h:1850) +# EXT_blend_func_separate (GL/glext.h:1853) +GL_BLEND_DST_RGB_EXT = 32968 # GL/glext.h:1854 +GL_BLEND_SRC_RGB_EXT = 32969 # GL/glext.h:1855 +GL_BLEND_DST_ALPHA_EXT = 32970 # GL/glext.h:1856 +GL_BLEND_SRC_ALPHA_EXT = 32971 # GL/glext.h:1857 +# INGR_color_clamp (GL/glext.h:1860) +GL_RED_MIN_CLAMP_INGR = 34144 # GL/glext.h:1861 +GL_GREEN_MIN_CLAMP_INGR = 34145 # GL/glext.h:1862 +GL_BLUE_MIN_CLAMP_INGR = 34146 # GL/glext.h:1863 +GL_ALPHA_MIN_CLAMP_INGR = 34147 # GL/glext.h:1864 +GL_RED_MAX_CLAMP_INGR = 34148 # GL/glext.h:1865 +GL_GREEN_MAX_CLAMP_INGR = 34149 # GL/glext.h:1866 +GL_BLUE_MAX_CLAMP_INGR = 34150 # GL/glext.h:1867 +GL_ALPHA_MAX_CLAMP_INGR = 34151 # GL/glext.h:1868 +# INGR_interlace_read (GL/glext.h:1871) +GL_INTERLACE_READ_INGR = 34152 # GL/glext.h:1872 +# EXT_stencil_wrap (GL/glext.h:1875) +GL_INCR_WRAP_EXT = 34055 # GL/glext.h:1876 +GL_DECR_WRAP_EXT = 34056 # GL/glext.h:1877 +# EXT_422_pixels (GL/glext.h:1880) +GL_422_EXT = 32972 # GL/glext.h:1881 +GL_422_REV_EXT = 32973 # GL/glext.h:1882 +GL_422_AVERAGE_EXT = 32974 # GL/glext.h:1883 +GL_422_REV_AVERAGE_EXT = 32975 # GL/glext.h:1884 +# NV_texgen_reflection (GL/glext.h:1887) +GL_NORMAL_MAP_NV = 34065 # GL/glext.h:1888 +GL_REFLECTION_MAP_NV = 34066 # GL/glext.h:1889 +# EXT_texture_cube_map (GL/glext.h:1892) +GL_NORMAL_MAP_EXT = 34065 # GL/glext.h:1893 +GL_REFLECTION_MAP_EXT = 34066 # GL/glext.h:1894 +GL_TEXTURE_CUBE_MAP_EXT = 34067 # GL/glext.h:1895 +GL_TEXTURE_BINDING_CUBE_MAP_EXT = 34068 # GL/glext.h:1896 +GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT = 34069 # GL/glext.h:1897 +GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT = 34070 # GL/glext.h:1898 +GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT = 34071 # GL/glext.h:1899 +GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT = 34072 # GL/glext.h:1900 +GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT = 34073 # GL/glext.h:1901 +GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT = 34074 # GL/glext.h:1902 +GL_PROXY_TEXTURE_CUBE_MAP_EXT = 34075 # GL/glext.h:1903 +GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT = 34076 # GL/glext.h:1904 +# SUN_convolution_border_modes (GL/glext.h:1907) +GL_WRAP_BORDER_SUN = 33236 # GL/glext.h:1908 +# EXT_texture_env_add (GL/glext.h:1911) +# EXT_texture_lod_bias (GL/glext.h:1914) +GL_MAX_TEXTURE_LOD_BIAS_EXT = 34045 # GL/glext.h:1915 +GL_TEXTURE_FILTER_CONTROL_EXT = 34048 # GL/glext.h:1916 +GL_TEXTURE_LOD_BIAS_EXT = 34049 # GL/glext.h:1917 +# EXT_texture_filter_anisotropic (GL/glext.h:1920) +GL_TEXTURE_MAX_ANISOTROPY_EXT = 34046 # GL/glext.h:1921 +GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT = 34047 # GL/glext.h:1922 +# EXT_vertex_weighting (GL/glext.h:1925) +GL_MODELVIEW0_STACK_DEPTH_EXT = 0 # GL/glext.h:1926 +GL_MODELVIEW1_STACK_DEPTH_EXT = 34050 # GL/glext.h:1927 +GL_MODELVIEW0_MATRIX_EXT = 0 # GL/glext.h:1928 +GL_MODELVIEW1_MATRIX_EXT = 34054 # GL/glext.h:1929 +GL_VERTEX_WEIGHTING_EXT = 34057 # GL/glext.h:1930 +GL_MODELVIEW0_EXT = 0 # GL/glext.h:1931 +GL_MODELVIEW1_EXT = 34058 # GL/glext.h:1932 +GL_CURRENT_VERTEX_WEIGHT_EXT = 34059 # GL/glext.h:1933 +GL_VERTEX_WEIGHT_ARRAY_EXT = 34060 # GL/glext.h:1934 +GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT = 34061 # GL/glext.h:1935 +GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT = 34062 # GL/glext.h:1936 +GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT = 34063 # GL/glext.h:1937 +GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT = 34064 # GL/glext.h:1938 +# NV_light_max_exponent (GL/glext.h:1941) +GL_MAX_SHININESS_NV = 34052 # GL/glext.h:1942 +GL_MAX_SPOT_EXPONENT_NV = 34053 # GL/glext.h:1943 +# NV_vertex_array_range (GL/glext.h:1946) +GL_VERTEX_ARRAY_RANGE_NV = 34077 # GL/glext.h:1947 +GL_VERTEX_ARRAY_RANGE_LENGTH_NV = 34078 # GL/glext.h:1948 +GL_VERTEX_ARRAY_RANGE_VALID_NV = 34079 # GL/glext.h:1949 +GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV = 34080 # GL/glext.h:1950 +GL_VERTEX_ARRAY_RANGE_POINTER_NV = 34081 # GL/glext.h:1951 +# NV_register_combiners (GL/glext.h:1954) +GL_REGISTER_COMBINERS_NV = 34082 # GL/glext.h:1955 +GL_VARIABLE_A_NV = 34083 # GL/glext.h:1956 +GL_VARIABLE_B_NV = 34084 # GL/glext.h:1957 +GL_VARIABLE_C_NV = 34085 # GL/glext.h:1958 +GL_VARIABLE_D_NV = 34086 # GL/glext.h:1959 +GL_VARIABLE_E_NV = 34087 # GL/glext.h:1960 +GL_VARIABLE_F_NV = 34088 # GL/glext.h:1961 +GL_VARIABLE_G_NV = 34089 # GL/glext.h:1962 +GL_CONSTANT_COLOR0_NV = 34090 # GL/glext.h:1963 +GL_CONSTANT_COLOR1_NV = 34091 # GL/glext.h:1964 +GL_PRIMARY_COLOR_NV = 34092 # GL/glext.h:1965 +GL_SECONDARY_COLOR_NV = 34093 # GL/glext.h:1966 +GL_SPARE0_NV = 34094 # GL/glext.h:1967 +GL_SPARE1_NV = 34095 # GL/glext.h:1968 +GL_DISCARD_NV = 34096 # GL/glext.h:1969 +GL_E_TIMES_F_NV = 34097 # GL/glext.h:1970 +GL_SPARE0_PLUS_SECONDARY_COLOR_NV = 34098 # GL/glext.h:1971 +GL_UNSIGNED_IDENTITY_NV = 34102 # GL/glext.h:1972 +GL_UNSIGNED_INVERT_NV = 34103 # GL/glext.h:1973 +GL_EXPAND_NORMAL_NV = 34104 # GL/glext.h:1974 +GL_EXPAND_NEGATE_NV = 34105 # GL/glext.h:1975 +GL_HALF_BIAS_NORMAL_NV = 34106 # GL/glext.h:1976 +GL_HALF_BIAS_NEGATE_NV = 34107 # GL/glext.h:1977 +GL_SIGNED_IDENTITY_NV = 34108 # GL/glext.h:1978 +GL_SIGNED_NEGATE_NV = 34109 # GL/glext.h:1979 +GL_SCALE_BY_TWO_NV = 34110 # GL/glext.h:1980 +GL_SCALE_BY_FOUR_NV = 34111 # GL/glext.h:1981 +GL_SCALE_BY_ONE_HALF_NV = 34112 # GL/glext.h:1982 +GL_BIAS_BY_NEGATIVE_ONE_HALF_NV = 34113 # GL/glext.h:1983 +GL_COMBINER_INPUT_NV = 34114 # GL/glext.h:1984 +GL_COMBINER_MAPPING_NV = 34115 # GL/glext.h:1985 +GL_COMBINER_COMPONENT_USAGE_NV = 34116 # GL/glext.h:1986 +GL_COMBINER_AB_DOT_PRODUCT_NV = 34117 # GL/glext.h:1987 +GL_COMBINER_CD_DOT_PRODUCT_NV = 34118 # GL/glext.h:1988 +GL_COMBINER_MUX_SUM_NV = 34119 # GL/glext.h:1989 +GL_COMBINER_SCALE_NV = 34120 # GL/glext.h:1990 +GL_COMBINER_BIAS_NV = 34121 # GL/glext.h:1991 +GL_COMBINER_AB_OUTPUT_NV = 34122 # GL/glext.h:1992 +GL_COMBINER_CD_OUTPUT_NV = 34123 # GL/glext.h:1993 +GL_COMBINER_SUM_OUTPUT_NV = 34124 # GL/glext.h:1994 +GL_MAX_GENERAL_COMBINERS_NV = 34125 # GL/glext.h:1995 +GL_NUM_GENERAL_COMBINERS_NV = 34126 # GL/glext.h:1996 +GL_COLOR_SUM_CLAMP_NV = 34127 # GL/glext.h:1997 +GL_COMBINER0_NV = 34128 # GL/glext.h:1998 +GL_COMBINER1_NV = 34129 # GL/glext.h:1999 +GL_COMBINER2_NV = 34130 # GL/glext.h:2000 +GL_COMBINER3_NV = 34131 # GL/glext.h:2001 +GL_COMBINER4_NV = 34132 # GL/glext.h:2002 +GL_COMBINER5_NV = 34133 # GL/glext.h:2003 +GL_COMBINER6_NV = 34134 # GL/glext.h:2004 +GL_COMBINER7_NV = 34135 # GL/glext.h:2005 +# NV_fog_distance (GL/glext.h:2013) +GL_FOG_DISTANCE_MODE_NV = 34138 # GL/glext.h:2014 +GL_EYE_RADIAL_NV = 34139 # GL/glext.h:2015 +GL_EYE_PLANE_ABSOLUTE_NV = 34140 # GL/glext.h:2016 +# NV_texgen_emboss (GL/glext.h:2020) +GL_EMBOSS_LIGHT_NV = 34141 # GL/glext.h:2021 +GL_EMBOSS_CONSTANT_NV = 34142 # GL/glext.h:2022 +GL_EMBOSS_MAP_NV = 34143 # GL/glext.h:2023 +# NV_blend_square (GL/glext.h:2026) +# NV_texture_env_combine4 (GL/glext.h:2029) +GL_COMBINE4_NV = 34051 # GL/glext.h:2030 +GL_SOURCE3_RGB_NV = 34179 # GL/glext.h:2031 +GL_SOURCE3_ALPHA_NV = 34187 # GL/glext.h:2032 +GL_OPERAND3_RGB_NV = 34195 # GL/glext.h:2033 +GL_OPERAND3_ALPHA_NV = 34203 # GL/glext.h:2034 +# MESA_resize_buffers (GL/glext.h:2037) +# MESA_window_pos (GL/glext.h:2040) +# EXT_texture_compression_s3tc (GL/glext.h:2043) +GL_COMPRESSED_RGB_S3TC_DXT1_EXT = 33776 # GL/glext.h:2044 +GL_COMPRESSED_RGBA_S3TC_DXT1_EXT = 33777 # GL/glext.h:2045 +GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = 33778 # GL/glext.h:2046 +GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = 33779 # GL/glext.h:2047 +# IBM_cull_vertex (GL/glext.h:2050) +GL_CULL_VERTEX_IBM = 103050 # GL/glext.h:2051 +# IBM_multimode_draw_arrays (GL/glext.h:2054) +# IBM_vertex_array_lists (GL/glext.h:2057) +GL_VERTEX_ARRAY_LIST_IBM = 103070 # GL/glext.h:2058 +GL_NORMAL_ARRAY_LIST_IBM = 103071 # GL/glext.h:2059 +GL_COLOR_ARRAY_LIST_IBM = 103072 # GL/glext.h:2060 +GL_INDEX_ARRAY_LIST_IBM = 103073 # GL/glext.h:2061 +GL_TEXTURE_COORD_ARRAY_LIST_IBM = 103074 # GL/glext.h:2062 +GL_EDGE_FLAG_ARRAY_LIST_IBM = 103075 # GL/glext.h:2063 +GL_FOG_COORDINATE_ARRAY_LIST_IBM = 103076 # GL/glext.h:2064 +GL_SECONDARY_COLOR_ARRAY_LIST_IBM = 103077 # GL/glext.h:2065 +GL_VERTEX_ARRAY_LIST_STRIDE_IBM = 103080 # GL/glext.h:2066 +GL_NORMAL_ARRAY_LIST_STRIDE_IBM = 103081 # GL/glext.h:2067 +GL_COLOR_ARRAY_LIST_STRIDE_IBM = 103082 # GL/glext.h:2068 +GL_INDEX_ARRAY_LIST_STRIDE_IBM = 103083 # GL/glext.h:2069 +GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM = 103084 # GL/glext.h:2070 +GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM = 103085 # GL/glext.h:2071 +GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM = 103086 # GL/glext.h:2072 +GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM = 103087 # GL/glext.h:2073 +# SGIX_subsample (GL/glext.h:2076) +GL_PACK_SUBSAMPLE_RATE_SGIX = 34208 # GL/glext.h:2077 +GL_UNPACK_SUBSAMPLE_RATE_SGIX = 34209 # GL/glext.h:2078 +GL_PIXEL_SUBSAMPLE_4444_SGIX = 34210 # GL/glext.h:2079 +GL_PIXEL_SUBSAMPLE_2424_SGIX = 34211 # GL/glext.h:2080 +GL_PIXEL_SUBSAMPLE_4242_SGIX = 34212 # GL/glext.h:2081 +# SGIX_ycrcb_subsample (GL/glext.h:2084) +# SGIX_ycrcba (GL/glext.h:2087) +GL_YCRCB_SGIX = 33560 # GL/glext.h:2088 +GL_YCRCBA_SGIX = 33561 # GL/glext.h:2089 +# SGI_depth_pass_instrument (GL/glext.h:2092) +GL_DEPTH_PASS_INSTRUMENT_SGIX = 33552 # GL/glext.h:2093 +GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX = 33553 # GL/glext.h:2094 +GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX = 33554 # GL/glext.h:2095 +# 3DFX_texture_compression_FXT1 (GL/glext.h:2098) +GL_COMPRESSED_RGB_FXT1_3DFX = 34480 # GL/glext.h:2099 +GL_COMPRESSED_RGBA_FXT1_3DFX = 34481 # GL/glext.h:2100 +# 3DFX_multisample (GL/glext.h:2103) +GL_MULTISAMPLE_3DFX = 34482 # GL/glext.h:2104 +GL_SAMPLE_BUFFERS_3DFX = 34483 # GL/glext.h:2105 +GL_SAMPLES_3DFX = 34484 # GL/glext.h:2106 +GL_MULTISAMPLE_BIT_3DFX = 536870912 # GL/glext.h:2107 +# 3DFX_tbuffer (GL/glext.h:2110) +# EXT_multisample (GL/glext.h:2113) +GL_MULTISAMPLE_EXT = 32925 # GL/glext.h:2114 +GL_SAMPLE_ALPHA_TO_MASK_EXT = 32926 # GL/glext.h:2115 +GL_SAMPLE_ALPHA_TO_ONE_EXT = 32927 # GL/glext.h:2116 +GL_SAMPLE_MASK_EXT = 32928 # GL/glext.h:2117 +GL_1PASS_EXT = 32929 # GL/glext.h:2118 +GL_2PASS_0_EXT = 32930 # GL/glext.h:2119 +GL_2PASS_1_EXT = 32931 # GL/glext.h:2120 +GL_4PASS_0_EXT = 32932 # GL/glext.h:2121 +GL_4PASS_1_EXT = 32933 # GL/glext.h:2122 +GL_4PASS_2_EXT = 32934 # GL/glext.h:2123 +GL_4PASS_3_EXT = 32935 # GL/glext.h:2124 +GL_SAMPLE_BUFFERS_EXT = 32936 # GL/glext.h:2125 +GL_SAMPLES_EXT = 32937 # GL/glext.h:2126 +GL_SAMPLE_MASK_VALUE_EXT = 32938 # GL/glext.h:2127 +GL_SAMPLE_MASK_INVERT_EXT = 32939 # GL/glext.h:2128 +GL_SAMPLE_PATTERN_EXT = 32940 # GL/glext.h:2129 +GL_MULTISAMPLE_BIT_EXT = 536870912 # GL/glext.h:2130 +# SGIX_vertex_preclip (GL/glext.h:2133) +GL_VERTEX_PRECLIP_SGIX = 33774 # GL/glext.h:2134 +GL_VERTEX_PRECLIP_HINT_SGIX = 33775 # GL/glext.h:2135 +# SGIX_convolution_accuracy (GL/glext.h:2138) +GL_CONVOLUTION_HINT_SGIX = 33558 # GL/glext.h:2139 +# SGIX_resample (GL/glext.h:2142) +GL_PACK_RESAMPLE_SGIX = 33836 # GL/glext.h:2143 +GL_UNPACK_RESAMPLE_SGIX = 33837 # GL/glext.h:2144 +GL_RESAMPLE_REPLICATE_SGIX = 33838 # GL/glext.h:2145 +GL_RESAMPLE_ZERO_FILL_SGIX = 33839 # GL/glext.h:2146 +GL_RESAMPLE_DECIMATE_SGIX = 33840 # GL/glext.h:2147 +# SGIS_point_line_texgen (GL/glext.h:2150) +GL_EYE_DISTANCE_TO_POINT_SGIS = 33264 # GL/glext.h:2151 +GL_OBJECT_DISTANCE_TO_POINT_SGIS = 33265 # GL/glext.h:2152 +GL_EYE_DISTANCE_TO_LINE_SGIS = 33266 # GL/glext.h:2153 +GL_OBJECT_DISTANCE_TO_LINE_SGIS = 33267 # GL/glext.h:2154 +GL_EYE_POINT_SGIS = 33268 # GL/glext.h:2155 +GL_OBJECT_POINT_SGIS = 33269 # GL/glext.h:2156 +GL_EYE_LINE_SGIS = 33270 # GL/glext.h:2157 +GL_OBJECT_LINE_SGIS = 33271 # GL/glext.h:2158 +# SGIS_texture_color_mask (GL/glext.h:2161) +GL_TEXTURE_COLOR_WRITEMASK_SGIS = 33263 # GL/glext.h:2162 +# EXT_texture_env_dot3 (GL/glext.h:2165) +GL_DOT3_RGB_EXT = 34624 # GL/glext.h:2166 +GL_DOT3_RGBA_EXT = 34625 # GL/glext.h:2167 +# ATI_texture_mirror_once (GL/glext.h:2170) +GL_MIRROR_CLAMP_ATI = 34626 # GL/glext.h:2171 +GL_MIRROR_CLAMP_TO_EDGE_ATI = 34627 # GL/glext.h:2172 +# NV_fence (GL/glext.h:2175) +GL_ALL_COMPLETED_NV = 34034 # GL/glext.h:2176 +GL_FENCE_STATUS_NV = 34035 # GL/glext.h:2177 +GL_FENCE_CONDITION_NV = 34036 # GL/glext.h:2178 +# IBM_texture_mirrored_repeat (GL/glext.h:2181) +GL_MIRRORED_REPEAT_IBM = 33648 # GL/glext.h:2182 +# NV_evaluators (GL/glext.h:2185) +GL_EVAL_2D_NV = 34496 # GL/glext.h:2186 +GL_EVAL_TRIANGULAR_2D_NV = 34497 # GL/glext.h:2187 +GL_MAP_TESSELLATION_NV = 34498 # GL/glext.h:2188 +GL_MAP_ATTRIB_U_ORDER_NV = 34499 # GL/glext.h:2189 +GL_MAP_ATTRIB_V_ORDER_NV = 34500 # GL/glext.h:2190 +GL_EVAL_FRACTIONAL_TESSELLATION_NV = 34501 # GL/glext.h:2191 +GL_EVAL_VERTEX_ATTRIB0_NV = 34502 # GL/glext.h:2192 +GL_EVAL_VERTEX_ATTRIB1_NV = 34503 # GL/glext.h:2193 +GL_EVAL_VERTEX_ATTRIB2_NV = 34504 # GL/glext.h:2194 +GL_EVAL_VERTEX_ATTRIB3_NV = 34505 # GL/glext.h:2195 +GL_EVAL_VERTEX_ATTRIB4_NV = 34506 # GL/glext.h:2196 +GL_EVAL_VERTEX_ATTRIB5_NV = 34507 # GL/glext.h:2197 +GL_EVAL_VERTEX_ATTRIB6_NV = 34508 # GL/glext.h:2198 +GL_EVAL_VERTEX_ATTRIB7_NV = 34509 # GL/glext.h:2199 +GL_EVAL_VERTEX_ATTRIB8_NV = 34510 # GL/glext.h:2200 +GL_EVAL_VERTEX_ATTRIB9_NV = 34511 # GL/glext.h:2201 +GL_EVAL_VERTEX_ATTRIB10_NV = 34512 # GL/glext.h:2202 +GL_EVAL_VERTEX_ATTRIB11_NV = 34513 # GL/glext.h:2203 +GL_EVAL_VERTEX_ATTRIB12_NV = 34514 # GL/glext.h:2204 +GL_EVAL_VERTEX_ATTRIB13_NV = 34515 # GL/glext.h:2205 +GL_EVAL_VERTEX_ATTRIB14_NV = 34516 # GL/glext.h:2206 +GL_EVAL_VERTEX_ATTRIB15_NV = 34517 # GL/glext.h:2207 +GL_MAX_MAP_TESSELLATION_NV = 34518 # GL/glext.h:2208 +GL_MAX_RATIONAL_EVAL_ORDER_NV = 34519 # GL/glext.h:2209 +# NV_packed_depth_stencil (GL/glext.h:2212) +GL_DEPTH_STENCIL_NV = 34041 # GL/glext.h:2213 +GL_UNSIGNED_INT_24_8_NV = 34042 # GL/glext.h:2214 +# NV_register_combiners2 (GL/glext.h:2217) +GL_PER_STAGE_CONSTANTS_NV = 34101 # GL/glext.h:2218 +# NV_texture_compression_vtc (GL/glext.h:2221) +# NV_texture_rectangle (GL/glext.h:2224) +GL_TEXTURE_RECTANGLE_NV = 34037 # GL/glext.h:2225 +GL_TEXTURE_BINDING_RECTANGLE_NV = 34038 # GL/glext.h:2226 +GL_PROXY_TEXTURE_RECTANGLE_NV = 34039 # GL/glext.h:2227 +GL_MAX_RECTANGLE_TEXTURE_SIZE_NV = 34040 # GL/glext.h:2228 +# NV_texture_shader (GL/glext.h:2231) +GL_OFFSET_TEXTURE_RECTANGLE_NV = 34380 # GL/glext.h:2232 +GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV = 34381 # GL/glext.h:2233 +GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV = 34382 # GL/glext.h:2234 +GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV = 34521 # GL/glext.h:2235 +GL_UNSIGNED_INT_S8_S8_8_8_NV = 34522 # GL/glext.h:2236 +GL_UNSIGNED_INT_8_8_S8_S8_REV_NV = 34523 # GL/glext.h:2237 +GL_DSDT_MAG_INTENSITY_NV = 34524 # GL/glext.h:2238 +GL_SHADER_CONSISTENT_NV = 34525 # GL/glext.h:2239 +GL_TEXTURE_SHADER_NV = 34526 # GL/glext.h:2240 +GL_SHADER_OPERATION_NV = 34527 # GL/glext.h:2241 +GL_CULL_MODES_NV = 34528 # GL/glext.h:2242 +GL_OFFSET_TEXTURE_MATRIX_NV = 34529 # GL/glext.h:2243 +GL_OFFSET_TEXTURE_SCALE_NV = 34530 # GL/glext.h:2244 +GL_OFFSET_TEXTURE_BIAS_NV = 34531 # GL/glext.h:2245 +GL_OFFSET_TEXTURE_2D_MATRIX_NV = 34529 # GL/glext.h:2246 +GL_OFFSET_TEXTURE_2D_SCALE_NV = 34530 # GL/glext.h:2247 +GL_OFFSET_TEXTURE_2D_BIAS_NV = 34531 # GL/glext.h:2248 +GL_PREVIOUS_TEXTURE_INPUT_NV = 34532 # GL/glext.h:2249 +GL_CONST_EYE_NV = 34533 # GL/glext.h:2250 +GL_PASS_THROUGH_NV = 34534 # GL/glext.h:2251 +GL_CULL_FRAGMENT_NV = 34535 # GL/glext.h:2252 +GL_OFFSET_TEXTURE_2D_NV = 34536 # GL/glext.h:2253 +GL_DEPENDENT_AR_TEXTURE_2D_NV = 34537 # GL/glext.h:2254 +GL_DEPENDENT_GB_TEXTURE_2D_NV = 34538 # GL/glext.h:2255 +GL_DOT_PRODUCT_NV = 34540 # GL/glext.h:2256 +GL_DOT_PRODUCT_DEPTH_REPLACE_NV = 34541 # GL/glext.h:2257 +GL_DOT_PRODUCT_TEXTURE_2D_NV = 34542 # GL/glext.h:2258 +GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV = 34544 # GL/glext.h:2259 +GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV = 34545 # GL/glext.h:2260 +GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV = 34546 # GL/glext.h:2261 +GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV = 34547 # GL/glext.h:2262 +GL_HILO_NV = 34548 # GL/glext.h:2263 +GL_DSDT_NV = 34549 # GL/glext.h:2264 +GL_DSDT_MAG_NV = 34550 # GL/glext.h:2265 +GL_DSDT_MAG_VIB_NV = 34551 # GL/glext.h:2266 +GL_HILO16_NV = 34552 # GL/glext.h:2267 +GL_SIGNED_HILO_NV = 34553 # GL/glext.h:2268 +GL_SIGNED_HILO16_NV = 34554 # GL/glext.h:2269 +GL_SIGNED_RGBA_NV = 34555 # GL/glext.h:2270 +GL_SIGNED_RGBA8_NV = 34556 # GL/glext.h:2271 +GL_SIGNED_RGB_NV = 34558 # GL/glext.h:2272 +GL_SIGNED_RGB8_NV = 34559 # GL/glext.h:2273 +GL_SIGNED_LUMINANCE_NV = 34561 # GL/glext.h:2274 +GL_SIGNED_LUMINANCE8_NV = 34562 # GL/glext.h:2275 +GL_SIGNED_LUMINANCE_ALPHA_NV = 34563 # GL/glext.h:2276 +GL_SIGNED_LUMINANCE8_ALPHA8_NV = 34564 # GL/glext.h:2277 +GL_SIGNED_ALPHA_NV = 34565 # GL/glext.h:2278 +GL_SIGNED_ALPHA8_NV = 34566 # GL/glext.h:2279 +GL_SIGNED_INTENSITY_NV = 34567 # GL/glext.h:2280 +GL_SIGNED_INTENSITY8_NV = 34568 # GL/glext.h:2281 +GL_DSDT8_NV = 34569 # GL/glext.h:2282 +GL_DSDT8_MAG8_NV = 34570 # GL/glext.h:2283 +GL_DSDT8_MAG8_INTENSITY8_NV = 34571 # GL/glext.h:2284 +GL_SIGNED_RGB_UNSIGNED_ALPHA_NV = 34572 # GL/glext.h:2285 +GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV = 34573 # GL/glext.h:2286 +GL_HI_SCALE_NV = 34574 # GL/glext.h:2287 +GL_LO_SCALE_NV = 34575 # GL/glext.h:2288 +GL_DS_SCALE_NV = 34576 # GL/glext.h:2289 +GL_DT_SCALE_NV = 34577 # GL/glext.h:2290 +GL_MAGNITUDE_SCALE_NV = 34578 # GL/glext.h:2291 +GL_VIBRANCE_SCALE_NV = 34579 # GL/glext.h:2292 +GL_HI_BIAS_NV = 34580 # GL/glext.h:2293 +GL_LO_BIAS_NV = 34581 # GL/glext.h:2294 +GL_DS_BIAS_NV = 34582 # GL/glext.h:2295 +GL_DT_BIAS_NV = 34583 # GL/glext.h:2296 +GL_MAGNITUDE_BIAS_NV = 34584 # GL/glext.h:2297 +GL_VIBRANCE_BIAS_NV = 34585 # GL/glext.h:2298 +GL_TEXTURE_BORDER_VALUES_NV = 34586 # GL/glext.h:2299 +GL_TEXTURE_HI_SIZE_NV = 34587 # GL/glext.h:2300 +GL_TEXTURE_LO_SIZE_NV = 34588 # GL/glext.h:2301 +GL_TEXTURE_DS_SIZE_NV = 34589 # GL/glext.h:2302 +GL_TEXTURE_DT_SIZE_NV = 34590 # GL/glext.h:2303 +GL_TEXTURE_MAG_SIZE_NV = 34591 # GL/glext.h:2304 +# NV_texture_shader2 (GL/glext.h:2307) +GL_DOT_PRODUCT_TEXTURE_3D_NV = 34543 # GL/glext.h:2308 +# NV_vertex_array_range2 (GL/glext.h:2311) +GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV = 34099 # GL/glext.h:2312 +# NV_vertex_program (GL/glext.h:2315) +GL_VERTEX_PROGRAM_NV = 34336 # GL/glext.h:2316 +GL_VERTEX_STATE_PROGRAM_NV = 34337 # GL/glext.h:2317 +GL_ATTRIB_ARRAY_SIZE_NV = 34339 # GL/glext.h:2318 +GL_ATTRIB_ARRAY_STRIDE_NV = 34340 # GL/glext.h:2319 +GL_ATTRIB_ARRAY_TYPE_NV = 34341 # GL/glext.h:2320 +GL_CURRENT_ATTRIB_NV = 34342 # GL/glext.h:2321 +GL_PROGRAM_LENGTH_NV = 34343 # GL/glext.h:2322 +GL_PROGRAM_STRING_NV = 34344 # GL/glext.h:2323 +GL_MODELVIEW_PROJECTION_NV = 34345 # GL/glext.h:2324 +GL_IDENTITY_NV = 34346 # GL/glext.h:2325 +GL_INVERSE_NV = 34347 # GL/glext.h:2326 +GL_TRANSPOSE_NV = 34348 # GL/glext.h:2327 +GL_INVERSE_TRANSPOSE_NV = 34349 # GL/glext.h:2328 +GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV = 34350 # GL/glext.h:2329 +GL_MAX_TRACK_MATRICES_NV = 34351 # GL/glext.h:2330 +GL_MATRIX0_NV = 34352 # GL/glext.h:2331 +GL_MATRIX1_NV = 34353 # GL/glext.h:2332 +GL_MATRIX2_NV = 34354 # GL/glext.h:2333 +GL_MATRIX3_NV = 34355 # GL/glext.h:2334 +GL_MATRIX4_NV = 34356 # GL/glext.h:2335 +GL_MATRIX5_NV = 34357 # GL/glext.h:2336 +GL_MATRIX6_NV = 34358 # GL/glext.h:2337 +GL_MATRIX7_NV = 34359 # GL/glext.h:2338 +GL_CURRENT_MATRIX_STACK_DEPTH_NV = 34368 # GL/glext.h:2339 +GL_CURRENT_MATRIX_NV = 34369 # GL/glext.h:2340 +GL_VERTEX_PROGRAM_POINT_SIZE_NV = 34370 # GL/glext.h:2341 +GL_VERTEX_PROGRAM_TWO_SIDE_NV = 34371 # GL/glext.h:2342 +GL_PROGRAM_PARAMETER_NV = 34372 # GL/glext.h:2343 +GL_ATTRIB_ARRAY_POINTER_NV = 34373 # GL/glext.h:2344 +GL_PROGRAM_TARGET_NV = 34374 # GL/glext.h:2345 +GL_PROGRAM_RESIDENT_NV = 34375 # GL/glext.h:2346 +GL_TRACK_MATRIX_NV = 34376 # GL/glext.h:2347 +GL_TRACK_MATRIX_TRANSFORM_NV = 34377 # GL/glext.h:2348 +GL_VERTEX_PROGRAM_BINDING_NV = 34378 # GL/glext.h:2349 +GL_PROGRAM_ERROR_POSITION_NV = 34379 # GL/glext.h:2350 +GL_VERTEX_ATTRIB_ARRAY0_NV = 34384 # GL/glext.h:2351 +GL_VERTEX_ATTRIB_ARRAY1_NV = 34385 # GL/glext.h:2352 +GL_VERTEX_ATTRIB_ARRAY2_NV = 34386 # GL/glext.h:2353 +GL_VERTEX_ATTRIB_ARRAY3_NV = 34387 # GL/glext.h:2354 +GL_VERTEX_ATTRIB_ARRAY4_NV = 34388 # GL/glext.h:2355 +GL_VERTEX_ATTRIB_ARRAY5_NV = 34389 # GL/glext.h:2356 +GL_VERTEX_ATTRIB_ARRAY6_NV = 34390 # GL/glext.h:2357 +GL_VERTEX_ATTRIB_ARRAY7_NV = 34391 # GL/glext.h:2358 +GL_VERTEX_ATTRIB_ARRAY8_NV = 34392 # GL/glext.h:2359 +GL_VERTEX_ATTRIB_ARRAY9_NV = 34393 # GL/glext.h:2360 +GL_VERTEX_ATTRIB_ARRAY10_NV = 34394 # GL/glext.h:2361 +GL_VERTEX_ATTRIB_ARRAY11_NV = 34395 # GL/glext.h:2362 +GL_VERTEX_ATTRIB_ARRAY12_NV = 34396 # GL/glext.h:2363 +GL_VERTEX_ATTRIB_ARRAY13_NV = 34397 # GL/glext.h:2364 +GL_VERTEX_ATTRIB_ARRAY14_NV = 34398 # GL/glext.h:2365 +GL_VERTEX_ATTRIB_ARRAY15_NV = 34399 # GL/glext.h:2366 +GL_MAP1_VERTEX_ATTRIB0_4_NV = 34400 # GL/glext.h:2367 +GL_MAP1_VERTEX_ATTRIB1_4_NV = 34401 # GL/glext.h:2368 +GL_MAP1_VERTEX_ATTRIB2_4_NV = 34402 # GL/glext.h:2369 +GL_MAP1_VERTEX_ATTRIB3_4_NV = 34403 # GL/glext.h:2370 +GL_MAP1_VERTEX_ATTRIB4_4_NV = 34404 # GL/glext.h:2371 +GL_MAP1_VERTEX_ATTRIB5_4_NV = 34405 # GL/glext.h:2372 +GL_MAP1_VERTEX_ATTRIB6_4_NV = 34406 # GL/glext.h:2373 +GL_MAP1_VERTEX_ATTRIB7_4_NV = 34407 # GL/glext.h:2374 +GL_MAP1_VERTEX_ATTRIB8_4_NV = 34408 # GL/glext.h:2375 +GL_MAP1_VERTEX_ATTRIB9_4_NV = 34409 # GL/glext.h:2376 +GL_MAP1_VERTEX_ATTRIB10_4_NV = 34410 # GL/glext.h:2377 +GL_MAP1_VERTEX_ATTRIB11_4_NV = 34411 # GL/glext.h:2378 +GL_MAP1_VERTEX_ATTRIB12_4_NV = 34412 # GL/glext.h:2379 +GL_MAP1_VERTEX_ATTRIB13_4_NV = 34413 # GL/glext.h:2380 +GL_MAP1_VERTEX_ATTRIB14_4_NV = 34414 # GL/glext.h:2381 +GL_MAP1_VERTEX_ATTRIB15_4_NV = 34415 # GL/glext.h:2382 +GL_MAP2_VERTEX_ATTRIB0_4_NV = 34416 # GL/glext.h:2383 +GL_MAP2_VERTEX_ATTRIB1_4_NV = 34417 # GL/glext.h:2384 +GL_MAP2_VERTEX_ATTRIB2_4_NV = 34418 # GL/glext.h:2385 +GL_MAP2_VERTEX_ATTRIB3_4_NV = 34419 # GL/glext.h:2386 +GL_MAP2_VERTEX_ATTRIB4_4_NV = 34420 # GL/glext.h:2387 +GL_MAP2_VERTEX_ATTRIB5_4_NV = 34421 # GL/glext.h:2388 +GL_MAP2_VERTEX_ATTRIB6_4_NV = 34422 # GL/glext.h:2389 +GL_MAP2_VERTEX_ATTRIB7_4_NV = 34423 # GL/glext.h:2390 +GL_MAP2_VERTEX_ATTRIB8_4_NV = 34424 # GL/glext.h:2391 +GL_MAP2_VERTEX_ATTRIB9_4_NV = 34425 # GL/glext.h:2392 +GL_MAP2_VERTEX_ATTRIB10_4_NV = 34426 # GL/glext.h:2393 +GL_MAP2_VERTEX_ATTRIB11_4_NV = 34427 # GL/glext.h:2394 +GL_MAP2_VERTEX_ATTRIB12_4_NV = 34428 # GL/glext.h:2395 +GL_MAP2_VERTEX_ATTRIB13_4_NV = 34429 # GL/glext.h:2396 +GL_MAP2_VERTEX_ATTRIB14_4_NV = 34430 # GL/glext.h:2397 +GL_MAP2_VERTEX_ATTRIB15_4_NV = 34431 # GL/glext.h:2398 +# SGIX_texture_coordinate_clamp (GL/glext.h:2401) +GL_TEXTURE_MAX_CLAMP_S_SGIX = 33641 # GL/glext.h:2402 +GL_TEXTURE_MAX_CLAMP_T_SGIX = 33642 # GL/glext.h:2403 +GL_TEXTURE_MAX_CLAMP_R_SGIX = 33643 # GL/glext.h:2404 +# SGIX_scalebias_hint (GL/glext.h:2407) +GL_SCALEBIAS_HINT_SGIX = 33570 # GL/glext.h:2408 +# OML_interlace (GL/glext.h:2411) +GL_INTERLACE_OML = 35200 # GL/glext.h:2412 +GL_INTERLACE_READ_OML = 35201 # GL/glext.h:2413 +# OML_subsample (GL/glext.h:2416) +GL_FORMAT_SUBSAMPLE_24_24_OML = 35202 # GL/glext.h:2417 +GL_FORMAT_SUBSAMPLE_244_244_OML = 35203 # GL/glext.h:2418 +# OML_resample (GL/glext.h:2421) +GL_PACK_RESAMPLE_OML = 35204 # GL/glext.h:2422 +GL_UNPACK_RESAMPLE_OML = 35205 # GL/glext.h:2423 +GL_RESAMPLE_REPLICATE_OML = 35206 # GL/glext.h:2424 +GL_RESAMPLE_ZERO_FILL_OML = 35207 # GL/glext.h:2425 +GL_RESAMPLE_AVERAGE_OML = 35208 # GL/glext.h:2426 +GL_RESAMPLE_DECIMATE_OML = 35209 # GL/glext.h:2427 +# NV_copy_depth_to_color (GL/glext.h:2430) +GL_DEPTH_STENCIL_TO_RGBA_NV = 34926 # GL/glext.h:2431 +GL_DEPTH_STENCIL_TO_BGRA_NV = 34927 # GL/glext.h:2432 +# ATI_envmap_bumpmap (GL/glext.h:2435) +GL_BUMP_ROT_MATRIX_ATI = 34677 # GL/glext.h:2436 +GL_BUMP_ROT_MATRIX_SIZE_ATI = 34678 # GL/glext.h:2437 +GL_BUMP_NUM_TEX_UNITS_ATI = 34679 # GL/glext.h:2438 +GL_BUMP_TEX_UNITS_ATI = 34680 # GL/glext.h:2439 +GL_DUDV_ATI = 34681 # GL/glext.h:2440 +GL_DU8DV8_ATI = 34682 # GL/glext.h:2441 +GL_BUMP_ENVMAP_ATI = 34683 # GL/glext.h:2442 +GL_BUMP_TARGET_ATI = 34684 # GL/glext.h:2443 +# ATI_fragment_shader (GL/glext.h:2446) +GL_FRAGMENT_SHADER_ATI = 35104 # GL/glext.h:2447 +GL_REG_0_ATI = 35105 # GL/glext.h:2448 +GL_REG_1_ATI = 35106 # GL/glext.h:2449 +GL_REG_2_ATI = 35107 # GL/glext.h:2450 +GL_REG_3_ATI = 35108 # GL/glext.h:2451 +GL_REG_4_ATI = 35109 # GL/glext.h:2452 +GL_REG_5_ATI = 35110 # GL/glext.h:2453 +GL_REG_6_ATI = 35111 # GL/glext.h:2454 +GL_REG_7_ATI = 35112 # GL/glext.h:2455 +GL_REG_8_ATI = 35113 # GL/glext.h:2456 +GL_REG_9_ATI = 35114 # GL/glext.h:2457 +GL_REG_10_ATI = 35115 # GL/glext.h:2458 +GL_REG_11_ATI = 35116 # GL/glext.h:2459 +GL_REG_12_ATI = 35117 # GL/glext.h:2460 +GL_REG_13_ATI = 35118 # GL/glext.h:2461 +GL_REG_14_ATI = 35119 # GL/glext.h:2462 +GL_REG_15_ATI = 35120 # GL/glext.h:2463 +GL_REG_16_ATI = 35121 # GL/glext.h:2464 +GL_REG_17_ATI = 35122 # GL/glext.h:2465 +GL_REG_18_ATI = 35123 # GL/glext.h:2466 +GL_REG_19_ATI = 35124 # GL/glext.h:2467 +GL_REG_20_ATI = 35125 # GL/glext.h:2468 +GL_REG_21_ATI = 35126 # GL/glext.h:2469 +GL_REG_22_ATI = 35127 # GL/glext.h:2470 +GL_REG_23_ATI = 35128 # GL/glext.h:2471 +GL_REG_24_ATI = 35129 # GL/glext.h:2472 +GL_REG_25_ATI = 35130 # GL/glext.h:2473 +GL_REG_26_ATI = 35131 # GL/glext.h:2474 +GL_REG_27_ATI = 35132 # GL/glext.h:2475 +GL_REG_28_ATI = 35133 # GL/glext.h:2476 +GL_REG_29_ATI = 35134 # GL/glext.h:2477 +GL_REG_30_ATI = 35135 # GL/glext.h:2478 +GL_REG_31_ATI = 35136 # GL/glext.h:2479 +GL_CON_0_ATI = 35137 # GL/glext.h:2480 +GL_CON_1_ATI = 35138 # GL/glext.h:2481 +GL_CON_2_ATI = 35139 # GL/glext.h:2482 +GL_CON_3_ATI = 35140 # GL/glext.h:2483 +GL_CON_4_ATI = 35141 # GL/glext.h:2484 +GL_CON_5_ATI = 35142 # GL/glext.h:2485 +GL_CON_6_ATI = 35143 # GL/glext.h:2486 +GL_CON_7_ATI = 35144 # GL/glext.h:2487 +GL_CON_8_ATI = 35145 # GL/glext.h:2488 +GL_CON_9_ATI = 35146 # GL/glext.h:2489 +GL_CON_10_ATI = 35147 # GL/glext.h:2490 +GL_CON_11_ATI = 35148 # GL/glext.h:2491 +GL_CON_12_ATI = 35149 # GL/glext.h:2492 +GL_CON_13_ATI = 35150 # GL/glext.h:2493 +GL_CON_14_ATI = 35151 # GL/glext.h:2494 +GL_CON_15_ATI = 35152 # GL/glext.h:2495 +GL_CON_16_ATI = 35153 # GL/glext.h:2496 +GL_CON_17_ATI = 35154 # GL/glext.h:2497 +GL_CON_18_ATI = 35155 # GL/glext.h:2498 +GL_CON_19_ATI = 35156 # GL/glext.h:2499 +GL_CON_20_ATI = 35157 # GL/glext.h:2500 +GL_CON_21_ATI = 35158 # GL/glext.h:2501 +GL_CON_22_ATI = 35159 # GL/glext.h:2502 +GL_CON_23_ATI = 35160 # GL/glext.h:2503 +GL_CON_24_ATI = 35161 # GL/glext.h:2504 +GL_CON_25_ATI = 35162 # GL/glext.h:2505 +GL_CON_26_ATI = 35163 # GL/glext.h:2506 +GL_CON_27_ATI = 35164 # GL/glext.h:2507 +GL_CON_28_ATI = 35165 # GL/glext.h:2508 +GL_CON_29_ATI = 35166 # GL/glext.h:2509 +GL_CON_30_ATI = 35167 # GL/glext.h:2510 +GL_CON_31_ATI = 35168 # GL/glext.h:2511 +GL_MOV_ATI = 35169 # GL/glext.h:2512 +GL_ADD_ATI = 35171 # GL/glext.h:2513 +GL_MUL_ATI = 35172 # GL/glext.h:2514 +GL_SUB_ATI = 35173 # GL/glext.h:2515 +GL_DOT3_ATI = 35174 # GL/glext.h:2516 +GL_DOT4_ATI = 35175 # GL/glext.h:2517 +GL_MAD_ATI = 35176 # GL/glext.h:2518 +GL_LERP_ATI = 35177 # GL/glext.h:2519 +GL_CND_ATI = 35178 # GL/glext.h:2520 +GL_CND0_ATI = 35179 # GL/glext.h:2521 +GL_DOT2_ADD_ATI = 35180 # GL/glext.h:2522 +GL_SECONDARY_INTERPOLATOR_ATI = 35181 # GL/glext.h:2523 +GL_NUM_FRAGMENT_REGISTERS_ATI = 35182 # GL/glext.h:2524 +GL_NUM_FRAGMENT_CONSTANTS_ATI = 35183 # GL/glext.h:2525 +GL_NUM_PASSES_ATI = 35184 # GL/glext.h:2526 +GL_NUM_INSTRUCTIONS_PER_PASS_ATI = 35185 # GL/glext.h:2527 +GL_NUM_INSTRUCTIONS_TOTAL_ATI = 35186 # GL/glext.h:2528 +GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI = 35187 # GL/glext.h:2529 +GL_NUM_LOOPBACK_COMPONENTS_ATI = 35188 # GL/glext.h:2530 +GL_COLOR_ALPHA_PAIRING_ATI = 35189 # GL/glext.h:2531 +GL_SWIZZLE_STR_ATI = 35190 # GL/glext.h:2532 +GL_SWIZZLE_STQ_ATI = 35191 # GL/glext.h:2533 +GL_SWIZZLE_STR_DR_ATI = 35192 # GL/glext.h:2534 +GL_SWIZZLE_STQ_DQ_ATI = 35193 # GL/glext.h:2535 +GL_SWIZZLE_STRQ_ATI = 35194 # GL/glext.h:2536 +GL_SWIZZLE_STRQ_DQ_ATI = 35195 # GL/glext.h:2537 +GL_RED_BIT_ATI = 1 # GL/glext.h:2538 +GL_GREEN_BIT_ATI = 2 # GL/glext.h:2539 +GL_BLUE_BIT_ATI = 4 # GL/glext.h:2540 +GL_2X_BIT_ATI = 1 # GL/glext.h:2541 +GL_4X_BIT_ATI = 2 # GL/glext.h:2542 +GL_8X_BIT_ATI = 4 # GL/glext.h:2543 +GL_HALF_BIT_ATI = 8 # GL/glext.h:2544 +GL_QUARTER_BIT_ATI = 16 # GL/glext.h:2545 +GL_EIGHTH_BIT_ATI = 32 # GL/glext.h:2546 +GL_SATURATE_BIT_ATI = 64 # GL/glext.h:2547 +GL_COMP_BIT_ATI = 2 # GL/glext.h:2548 +GL_NEGATE_BIT_ATI = 4 # GL/glext.h:2549 +GL_BIAS_BIT_ATI = 8 # GL/glext.h:2550 +# ATI_pn_triangles (GL/glext.h:2553) +GL_PN_TRIANGLES_ATI = 34800 # GL/glext.h:2554 +GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI = 34801 # GL/glext.h:2555 +GL_PN_TRIANGLES_POINT_MODE_ATI = 34802 # GL/glext.h:2556 +GL_PN_TRIANGLES_NORMAL_MODE_ATI = 34803 # GL/glext.h:2557 +GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI = 34804 # GL/glext.h:2558 +GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI = 34805 # GL/glext.h:2559 +GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI = 34806 # GL/glext.h:2560 +GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI = 34807 # GL/glext.h:2561 +GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI = 34808 # GL/glext.h:2562 +# ATI_vertex_array_object (GL/glext.h:2565) +GL_STATIC_ATI = 34656 # GL/glext.h:2566 +GL_DYNAMIC_ATI = 34657 # GL/glext.h:2567 +GL_PRESERVE_ATI = 34658 # GL/glext.h:2568 +GL_DISCARD_ATI = 34659 # GL/glext.h:2569 +GL_OBJECT_BUFFER_SIZE_ATI = 34660 # GL/glext.h:2570 +GL_OBJECT_BUFFER_USAGE_ATI = 34661 # GL/glext.h:2571 +GL_ARRAY_OBJECT_BUFFER_ATI = 34662 # GL/glext.h:2572 +GL_ARRAY_OBJECT_OFFSET_ATI = 34663 # GL/glext.h:2573 +# EXT_vertex_shader (GL/glext.h:2576) +GL_VERTEX_SHADER_EXT = 34688 # GL/glext.h:2577 +GL_VERTEX_SHADER_BINDING_EXT = 34689 # GL/glext.h:2578 +GL_OP_INDEX_EXT = 34690 # GL/glext.h:2579 +GL_OP_NEGATE_EXT = 34691 # GL/glext.h:2580 +GL_OP_DOT3_EXT = 34692 # GL/glext.h:2581 +GL_OP_DOT4_EXT = 34693 # GL/glext.h:2582 +GL_OP_MUL_EXT = 34694 # GL/glext.h:2583 +GL_OP_ADD_EXT = 34695 # GL/glext.h:2584 +GL_OP_MADD_EXT = 34696 # GL/glext.h:2585 +GL_OP_FRAC_EXT = 34697 # GL/glext.h:2586 +GL_OP_MAX_EXT = 34698 # GL/glext.h:2587 +GL_OP_MIN_EXT = 34699 # GL/glext.h:2588 +GL_OP_SET_GE_EXT = 34700 # GL/glext.h:2589 +GL_OP_SET_LT_EXT = 34701 # GL/glext.h:2590 +GL_OP_CLAMP_EXT = 34702 # GL/glext.h:2591 +GL_OP_FLOOR_EXT = 34703 # GL/glext.h:2592 +GL_OP_ROUND_EXT = 34704 # GL/glext.h:2593 +GL_OP_EXP_BASE_2_EXT = 34705 # GL/glext.h:2594 +GL_OP_LOG_BASE_2_EXT = 34706 # GL/glext.h:2595 +GL_OP_POWER_EXT = 34707 # GL/glext.h:2596 +GL_OP_RECIP_EXT = 34708 # GL/glext.h:2597 +GL_OP_RECIP_SQRT_EXT = 34709 # GL/glext.h:2598 +GL_OP_SUB_EXT = 34710 # GL/glext.h:2599 +GL_OP_CROSS_PRODUCT_EXT = 34711 # GL/glext.h:2600 +GL_OP_MULTIPLY_MATRIX_EXT = 34712 # GL/glext.h:2601 +GL_OP_MOV_EXT = 34713 # GL/glext.h:2602 +GL_OUTPUT_VERTEX_EXT = 34714 # GL/glext.h:2603 +GL_OUTPUT_COLOR0_EXT = 34715 # GL/glext.h:2604 +GL_OUTPUT_COLOR1_EXT = 34716 # GL/glext.h:2605 +GL_OUTPUT_TEXTURE_COORD0_EXT = 34717 # GL/glext.h:2606 +GL_OUTPUT_TEXTURE_COORD1_EXT = 34718 # GL/glext.h:2607 +GL_OUTPUT_TEXTURE_COORD2_EXT = 34719 # GL/glext.h:2608 +GL_OUTPUT_TEXTURE_COORD3_EXT = 34720 # GL/glext.h:2609 +GL_OUTPUT_TEXTURE_COORD4_EXT = 34721 # GL/glext.h:2610 +GL_OUTPUT_TEXTURE_COORD5_EXT = 34722 # GL/glext.h:2611 +GL_OUTPUT_TEXTURE_COORD6_EXT = 34723 # GL/glext.h:2612 +GL_OUTPUT_TEXTURE_COORD7_EXT = 34724 # GL/glext.h:2613 +GL_OUTPUT_TEXTURE_COORD8_EXT = 34725 # GL/glext.h:2614 +GL_OUTPUT_TEXTURE_COORD9_EXT = 34726 # GL/glext.h:2615 +GL_OUTPUT_TEXTURE_COORD10_EXT = 34727 # GL/glext.h:2616 +GL_OUTPUT_TEXTURE_COORD11_EXT = 34728 # GL/glext.h:2617 +GL_OUTPUT_TEXTURE_COORD12_EXT = 34729 # GL/glext.h:2618 +GL_OUTPUT_TEXTURE_COORD13_EXT = 34730 # GL/glext.h:2619 +GL_OUTPUT_TEXTURE_COORD14_EXT = 34731 # GL/glext.h:2620 +GL_OUTPUT_TEXTURE_COORD15_EXT = 34732 # GL/glext.h:2621 +GL_OUTPUT_TEXTURE_COORD16_EXT = 34733 # GL/glext.h:2622 +GL_OUTPUT_TEXTURE_COORD17_EXT = 34734 # GL/glext.h:2623 +GL_OUTPUT_TEXTURE_COORD18_EXT = 34735 # GL/glext.h:2624 +GL_OUTPUT_TEXTURE_COORD19_EXT = 34736 # GL/glext.h:2625 +GL_OUTPUT_TEXTURE_COORD20_EXT = 34737 # GL/glext.h:2626 +GL_OUTPUT_TEXTURE_COORD21_EXT = 34738 # GL/glext.h:2627 +GL_OUTPUT_TEXTURE_COORD22_EXT = 34739 # GL/glext.h:2628 +GL_OUTPUT_TEXTURE_COORD23_EXT = 34740 # GL/glext.h:2629 +GL_OUTPUT_TEXTURE_COORD24_EXT = 34741 # GL/glext.h:2630 +GL_OUTPUT_TEXTURE_COORD25_EXT = 34742 # GL/glext.h:2631 +GL_OUTPUT_TEXTURE_COORD26_EXT = 34743 # GL/glext.h:2632 +GL_OUTPUT_TEXTURE_COORD27_EXT = 34744 # GL/glext.h:2633 +GL_OUTPUT_TEXTURE_COORD28_EXT = 34745 # GL/glext.h:2634 +GL_OUTPUT_TEXTURE_COORD29_EXT = 34746 # GL/glext.h:2635 +GL_OUTPUT_TEXTURE_COORD30_EXT = 34747 # GL/glext.h:2636 +GL_OUTPUT_TEXTURE_COORD31_EXT = 34748 # GL/glext.h:2637 +GL_OUTPUT_FOG_EXT = 34749 # GL/glext.h:2638 +GL_SCALAR_EXT = 34750 # GL/glext.h:2639 +GL_VECTOR_EXT = 34751 # GL/glext.h:2640 +GL_MATRIX_EXT = 34752 # GL/glext.h:2641 +GL_VARIANT_EXT = 34753 # GL/glext.h:2642 +GL_INVARIANT_EXT = 34754 # GL/glext.h:2643 +GL_LOCAL_CONSTANT_EXT = 34755 # GL/glext.h:2644 +GL_LOCAL_EXT = 34756 # GL/glext.h:2645 +GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT = 34757 # GL/glext.h:2646 +GL_MAX_VERTEX_SHADER_VARIANTS_EXT = 34758 # GL/glext.h:2647 +GL_MAX_VERTEX_SHADER_INVARIANTS_EXT = 34759 # GL/glext.h:2648 +GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT = 34760 # GL/glext.h:2649 +GL_MAX_VERTEX_SHADER_LOCALS_EXT = 34761 # GL/glext.h:2650 +GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT = 34762 # GL/glext.h:2651 +GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT = 34763 # GL/glext.h:2652 +GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT = 34764 # GL/glext.h:2653 +GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT = 34765 # GL/glext.h:2654 +GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT = 34766 # GL/glext.h:2655 +GL_VERTEX_SHADER_INSTRUCTIONS_EXT = 34767 # GL/glext.h:2656 +GL_VERTEX_SHADER_VARIANTS_EXT = 34768 # GL/glext.h:2657 +GL_VERTEX_SHADER_INVARIANTS_EXT = 34769 # GL/glext.h:2658 +GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT = 34770 # GL/glext.h:2659 +GL_VERTEX_SHADER_LOCALS_EXT = 34771 # GL/glext.h:2660 +GL_VERTEX_SHADER_OPTIMIZED_EXT = 34772 # GL/glext.h:2661 +GL_X_EXT = 34773 # GL/glext.h:2662 +GL_Y_EXT = 34774 # GL/glext.h:2663 +GL_Z_EXT = 34775 # GL/glext.h:2664 +GL_W_EXT = 34776 # GL/glext.h:2665 +GL_NEGATIVE_X_EXT = 34777 # GL/glext.h:2666 +GL_NEGATIVE_Y_EXT = 34778 # GL/glext.h:2667 +GL_NEGATIVE_Z_EXT = 34779 # GL/glext.h:2668 +GL_NEGATIVE_W_EXT = 34780 # GL/glext.h:2669 +GL_ZERO_EXT = 34781 # GL/glext.h:2670 +GL_ONE_EXT = 34782 # GL/glext.h:2671 +GL_NEGATIVE_ONE_EXT = 34783 # GL/glext.h:2672 +GL_NORMALIZED_RANGE_EXT = 34784 # GL/glext.h:2673 +GL_FULL_RANGE_EXT = 34785 # GL/glext.h:2674 +GL_CURRENT_VERTEX_EXT = 34786 # GL/glext.h:2675 +GL_MVP_MATRIX_EXT = 34787 # GL/glext.h:2676 +GL_VARIANT_VALUE_EXT = 34788 # GL/glext.h:2677 +GL_VARIANT_DATATYPE_EXT = 34789 # GL/glext.h:2678 +GL_VARIANT_ARRAY_STRIDE_EXT = 34790 # GL/glext.h:2679 +GL_VARIANT_ARRAY_TYPE_EXT = 34791 # GL/glext.h:2680 +GL_VARIANT_ARRAY_EXT = 34792 # GL/glext.h:2681 +GL_VARIANT_ARRAY_POINTER_EXT = 34793 # GL/glext.h:2682 +GL_INVARIANT_VALUE_EXT = 34794 # GL/glext.h:2683 +GL_INVARIANT_DATATYPE_EXT = 34795 # GL/glext.h:2684 +GL_LOCAL_CONSTANT_VALUE_EXT = 34796 # GL/glext.h:2685 +GL_LOCAL_CONSTANT_DATATYPE_EXT = 34797 # GL/glext.h:2686 +# ATI_vertex_streams (GL/glext.h:2689) +GL_MAX_VERTEX_STREAMS_ATI = 34667 # GL/glext.h:2690 +GL_VERTEX_STREAM0_ATI = 34668 # GL/glext.h:2691 +GL_VERTEX_STREAM1_ATI = 34669 # GL/glext.h:2692 +GL_VERTEX_STREAM2_ATI = 34670 # GL/glext.h:2693 +GL_VERTEX_STREAM3_ATI = 34671 # GL/glext.h:2694 +GL_VERTEX_STREAM4_ATI = 34672 # GL/glext.h:2695 +GL_VERTEX_STREAM5_ATI = 34673 # GL/glext.h:2696 +GL_VERTEX_STREAM6_ATI = 34674 # GL/glext.h:2697 +GL_VERTEX_STREAM7_ATI = 34675 # GL/glext.h:2698 +GL_VERTEX_SOURCE_ATI = 34676 # GL/glext.h:2699 +# ATI_element_array (GL/glext.h:2702) +GL_ELEMENT_ARRAY_ATI = 34664 # GL/glext.h:2703 +GL_ELEMENT_ARRAY_TYPE_ATI = 34665 # GL/glext.h:2704 +GL_ELEMENT_ARRAY_POINTER_ATI = 34666 # GL/glext.h:2705 +# SUN_mesh_array (GL/glext.h:2708) +GL_QUAD_MESH_SUN = 34324 # GL/glext.h:2709 +GL_TRIANGLE_MESH_SUN = 34325 # GL/glext.h:2710 +# SUN_slice_accum (GL/glext.h:2713) +GL_SLICE_ACCUM_SUN = 34252 # GL/glext.h:2714 +# NV_multisample_filter_hint (GL/glext.h:2717) +GL_MULTISAMPLE_FILTER_HINT_NV = 34100 # GL/glext.h:2718 +# NV_depth_clamp (GL/glext.h:2721) +GL_DEPTH_CLAMP_NV = 34383 # GL/glext.h:2722 +# NV_occlusion_query (GL/glext.h:2725) +GL_PIXEL_COUNTER_BITS_NV = 34916 # GL/glext.h:2726 +GL_CURRENT_OCCLUSION_QUERY_ID_NV = 34917 # GL/glext.h:2727 +GL_PIXEL_COUNT_NV = 34918 # GL/glext.h:2728 +GL_PIXEL_COUNT_AVAILABLE_NV = 34919 # GL/glext.h:2729 +# NV_point_sprite (GL/glext.h:2732) +GL_POINT_SPRITE_NV = 34913 # GL/glext.h:2733 +GL_COORD_REPLACE_NV = 34914 # GL/glext.h:2734 +GL_POINT_SPRITE_R_MODE_NV = 34915 # GL/glext.h:2735 +# NV_texture_shader3 (GL/glext.h:2738) +GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV = 34896 # GL/glext.h:2739 +GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV = 34897 # GL/glext.h:2740 +GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV = 34898 # GL/glext.h:2741 +GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV = 34899 # GL/glext.h:2742 +GL_OFFSET_HILO_TEXTURE_2D_NV = 34900 # GL/glext.h:2743 +GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV = 34901 # GL/glext.h:2744 +GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV = 34902 # GL/glext.h:2745 +GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV = 34903 # GL/glext.h:2746 +GL_DEPENDENT_HILO_TEXTURE_2D_NV = 34904 # GL/glext.h:2747 +GL_DEPENDENT_RGB_TEXTURE_3D_NV = 34905 # GL/glext.h:2748 +GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV = 34906 # GL/glext.h:2749 +GL_DOT_PRODUCT_PASS_THROUGH_NV = 34907 # GL/glext.h:2750 +GL_DOT_PRODUCT_TEXTURE_1D_NV = 34908 # GL/glext.h:2751 +GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV = 34909 # GL/glext.h:2752 +GL_HILO8_NV = 34910 # GL/glext.h:2753 +GL_SIGNED_HILO8_NV = 34911 # GL/glext.h:2754 +GL_FORCE_BLUE_TO_ONE_NV = 34912 # GL/glext.h:2755 +# NV_vertex_program1_1 (GL/glext.h:2758) +# EXT_shadow_funcs (GL/glext.h:2761) +# EXT_stencil_two_side (GL/glext.h:2764) +GL_STENCIL_TEST_TWO_SIDE_EXT = 35088 # GL/glext.h:2765 +GL_ACTIVE_STENCIL_FACE_EXT = 35089 # GL/glext.h:2766 +# ATI_text_fragment_shader (GL/glext.h:2769) +GL_TEXT_FRAGMENT_SHADER_ATI = 33280 # GL/glext.h:2770 +# APPLE_client_storage (GL/glext.h:2773) +GL_UNPACK_CLIENT_STORAGE_APPLE = 34226 # GL/glext.h:2774 +# APPLE_element_array (GL/glext.h:2777) +GL_ELEMENT_ARRAY_APPLE = 34664 # GL/glext.h:2778 +GL_ELEMENT_ARRAY_TYPE_APPLE = 34665 # GL/glext.h:2779 +GL_ELEMENT_ARRAY_POINTER_APPLE = 34666 # GL/glext.h:2780 +# APPLE_fence (GL/glext.h:2783) +GL_DRAW_PIXELS_APPLE = 35338 # GL/glext.h:2784 +GL_FENCE_APPLE = 35339 # GL/glext.h:2785 +# APPLE_vertex_array_object (GL/glext.h:2788) +GL_VERTEX_ARRAY_BINDING_APPLE = 34229 # GL/glext.h:2789 +# APPLE_vertex_array_range (GL/glext.h:2792) +GL_VERTEX_ARRAY_RANGE_APPLE = 34077 # GL/glext.h:2793 +GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE = 34078 # GL/glext.h:2794 +GL_VERTEX_ARRAY_STORAGE_HINT_APPLE = 34079 # GL/glext.h:2795 +GL_VERTEX_ARRAY_RANGE_POINTER_APPLE = 34081 # GL/glext.h:2796 +GL_STORAGE_CACHED_APPLE = 34238 # GL/glext.h:2797 +GL_STORAGE_SHARED_APPLE = 34239 # GL/glext.h:2798 +# APPLE_ycbcr_422 (GL/glext.h:2801) +GL_YCBCR_422_APPLE = 34233 # GL/glext.h:2802 +GL_UNSIGNED_SHORT_8_8_APPLE = 34234 # GL/glext.h:2803 +GL_UNSIGNED_SHORT_8_8_REV_APPLE = 34235 # GL/glext.h:2804 +# S3_s3tc (GL/glext.h:2807) +GL_RGB_S3TC = 33696 # GL/glext.h:2808 +GL_RGB4_S3TC = 33697 # GL/glext.h:2809 +GL_RGBA_S3TC = 33698 # GL/glext.h:2810 +GL_RGBA4_S3TC = 33699 # GL/glext.h:2811 +# ATI_draw_buffers (GL/glext.h:2814) +GL_MAX_DRAW_BUFFERS_ATI = 34852 # GL/glext.h:2815 +GL_DRAW_BUFFER0_ATI = 34853 # GL/glext.h:2816 +GL_DRAW_BUFFER1_ATI = 34854 # GL/glext.h:2817 +GL_DRAW_BUFFER2_ATI = 34855 # GL/glext.h:2818 +GL_DRAW_BUFFER3_ATI = 34856 # GL/glext.h:2819 +GL_DRAW_BUFFER4_ATI = 34857 # GL/glext.h:2820 +GL_DRAW_BUFFER5_ATI = 34858 # GL/glext.h:2821 +GL_DRAW_BUFFER6_ATI = 34859 # GL/glext.h:2822 +GL_DRAW_BUFFER7_ATI = 34860 # GL/glext.h:2823 +GL_DRAW_BUFFER8_ATI = 34861 # GL/glext.h:2824 +GL_DRAW_BUFFER9_ATI = 34862 # GL/glext.h:2825 +GL_DRAW_BUFFER10_ATI = 34863 # GL/glext.h:2826 +GL_DRAW_BUFFER11_ATI = 34864 # GL/glext.h:2827 +GL_DRAW_BUFFER12_ATI = 34865 # GL/glext.h:2828 +GL_DRAW_BUFFER13_ATI = 34866 # GL/glext.h:2829 +GL_DRAW_BUFFER14_ATI = 34867 # GL/glext.h:2830 +GL_DRAW_BUFFER15_ATI = 34868 # GL/glext.h:2831 +# ATI_pixel_format_float (GL/glext.h:2834) +GL_TYPE_RGBA_FLOAT_ATI = 34848 # GL/glext.h:2835 +GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI = 34869 # GL/glext.h:2836 +# ATI_texture_env_combine3 (GL/glext.h:2839) +GL_MODULATE_ADD_ATI = 34628 # GL/glext.h:2840 +GL_MODULATE_SIGNED_ADD_ATI = 34629 # GL/glext.h:2841 +GL_MODULATE_SUBTRACT_ATI = 34630 # GL/glext.h:2842 +# ATI_texture_float (GL/glext.h:2845) +GL_RGBA_FLOAT32_ATI = 34836 # GL/glext.h:2846 +GL_RGB_FLOAT32_ATI = 34837 # GL/glext.h:2847 +GL_ALPHA_FLOAT32_ATI = 34838 # GL/glext.h:2848 +GL_INTENSITY_FLOAT32_ATI = 34839 # GL/glext.h:2849 +GL_LUMINANCE_FLOAT32_ATI = 34840 # GL/glext.h:2850 +GL_LUMINANCE_ALPHA_FLOAT32_ATI = 34841 # GL/glext.h:2851 +GL_RGBA_FLOAT16_ATI = 34842 # GL/glext.h:2852 +GL_RGB_FLOAT16_ATI = 34843 # GL/glext.h:2853 +GL_ALPHA_FLOAT16_ATI = 34844 # GL/glext.h:2854 +GL_INTENSITY_FLOAT16_ATI = 34845 # GL/glext.h:2855 +GL_LUMINANCE_FLOAT16_ATI = 34846 # GL/glext.h:2856 +GL_LUMINANCE_ALPHA_FLOAT16_ATI = 34847 # GL/glext.h:2857 +# NV_float_buffer (GL/glext.h:2860) +GL_FLOAT_R_NV = 34944 # GL/glext.h:2861 +GL_FLOAT_RG_NV = 34945 # GL/glext.h:2862 +GL_FLOAT_RGB_NV = 34946 # GL/glext.h:2863 +GL_FLOAT_RGBA_NV = 34947 # GL/glext.h:2864 +GL_FLOAT_R16_NV = 34948 # GL/glext.h:2865 +GL_FLOAT_R32_NV = 34949 # GL/glext.h:2866 +GL_FLOAT_RG16_NV = 34950 # GL/glext.h:2867 +GL_FLOAT_RG32_NV = 34951 # GL/glext.h:2868 +GL_FLOAT_RGB16_NV = 34952 # GL/glext.h:2869 +GL_FLOAT_RGB32_NV = 34953 # GL/glext.h:2870 +GL_FLOAT_RGBA16_NV = 34954 # GL/glext.h:2871 +GL_FLOAT_RGBA32_NV = 34955 # GL/glext.h:2872 +GL_TEXTURE_FLOAT_COMPONENTS_NV = 34956 # GL/glext.h:2873 +GL_FLOAT_CLEAR_COLOR_VALUE_NV = 34957 # GL/glext.h:2874 +GL_FLOAT_RGBA_MODE_NV = 34958 # GL/glext.h:2875 +# NV_fragment_program (GL/glext.h:2878) +GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV = 34920 # GL/glext.h:2879 +GL_FRAGMENT_PROGRAM_NV = 34928 # GL/glext.h:2880 +GL_MAX_TEXTURE_COORDS_NV = 34929 # GL/glext.h:2881 +GL_MAX_TEXTURE_IMAGE_UNITS_NV = 34930 # GL/glext.h:2882 +GL_FRAGMENT_PROGRAM_BINDING_NV = 34931 # GL/glext.h:2883 +GL_PROGRAM_ERROR_STRING_NV = 34932 # GL/glext.h:2884 +# NV_half_float (GL/glext.h:2887) +GL_HALF_FLOAT_NV = 5131 # GL/glext.h:2888 +# NV_pixel_data_range (GL/glext.h:2891) +GL_WRITE_PIXEL_DATA_RANGE_NV = 34936 # GL/glext.h:2892 +GL_READ_PIXEL_DATA_RANGE_NV = 34937 # GL/glext.h:2893 +GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV = 34938 # GL/glext.h:2894 +GL_READ_PIXEL_DATA_RANGE_LENGTH_NV = 34939 # GL/glext.h:2895 +GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV = 34940 # GL/glext.h:2896 +GL_READ_PIXEL_DATA_RANGE_POINTER_NV = 34941 # GL/glext.h:2897 +# NV_primitive_restart (GL/glext.h:2900) +GL_PRIMITIVE_RESTART_NV = 34136 # GL/glext.h:2901 +GL_PRIMITIVE_RESTART_INDEX_NV = 34137 # GL/glext.h:2902 +# NV_texture_expand_normal (GL/glext.h:2905) +GL_TEXTURE_UNSIGNED_REMAP_MODE_NV = 34959 # GL/glext.h:2906 +# NV_vertex_program2 (GL/glext.h:2909) +# ATI_map_object_buffer (GL/glext.h:2912) +# ATI_separate_stencil (GL/glext.h:2915) +GL_STENCIL_BACK_FUNC_ATI = 34816 # GL/glext.h:2916 +GL_STENCIL_BACK_FAIL_ATI = 34817 # GL/glext.h:2917 +GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI = 34818 # GL/glext.h:2918 +GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI = 34819 # GL/glext.h:2919 +# ATI_vertex_attrib_array_object (GL/glext.h:2922) +# OES_read_format (GL/glext.h:2925) +GL_IMPLEMENTATION_COLOR_READ_TYPE_OES = 35738 # GL/glext.h:2926 +GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES = 35739 # GL/glext.h:2927 +# EXT_depth_bounds_test (GL/glext.h:2930) +GL_DEPTH_BOUNDS_TEST_EXT = 34960 # GL/glext.h:2931 +GL_DEPTH_BOUNDS_EXT = 34961 # GL/glext.h:2932 +# EXT_texture_mirror_clamp (GL/glext.h:2935) +GL_MIRROR_CLAMP_EXT = 34626 # GL/glext.h:2936 +GL_MIRROR_CLAMP_TO_EDGE_EXT = 34627 # GL/glext.h:2937 +GL_MIRROR_CLAMP_TO_BORDER_EXT = 35090 # GL/glext.h:2938 +# EXT_blend_equation_separate (GL/glext.h:2941) +GL_BLEND_EQUATION_RGB_EXT = 32777 # GL/glext.h:2942 +GL_BLEND_EQUATION_ALPHA_EXT = 34877 # GL/glext.h:2943 +# MESA_pack_invert (GL/glext.h:2946) +GL_PACK_INVERT_MESA = 34648 # GL/glext.h:2947 +# MESA_ycbcr_texture (GL/glext.h:2950) +GL_UNSIGNED_SHORT_8_8_MESA = 34234 # GL/glext.h:2951 +GL_UNSIGNED_SHORT_8_8_REV_MESA = 34235 # GL/glext.h:2952 +GL_YCBCR_MESA = 34647 # GL/glext.h:2953 +# EXT_pixel_buffer_object (GL/glext.h:2956) +GL_PIXEL_PACK_BUFFER_EXT = 35051 # GL/glext.h:2957 +GL_PIXEL_UNPACK_BUFFER_EXT = 35052 # GL/glext.h:2958 +GL_PIXEL_PACK_BUFFER_BINDING_EXT = 35053 # GL/glext.h:2959 +GL_PIXEL_UNPACK_BUFFER_BINDING_EXT = 35055 # GL/glext.h:2960 +# NV_fragment_program_option (GL/glext.h:2963) +# NV_fragment_program2 (GL/glext.h:2966) +GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV = 35060 # GL/glext.h:2967 +GL_MAX_PROGRAM_CALL_DEPTH_NV = 35061 # GL/glext.h:2968 +GL_MAX_PROGRAM_IF_DEPTH_NV = 35062 # GL/glext.h:2969 +GL_MAX_PROGRAM_LOOP_DEPTH_NV = 35063 # GL/glext.h:2970 +GL_MAX_PROGRAM_LOOP_COUNT_NV = 35064 # GL/glext.h:2971 +# NV_vertex_program2_option (GL/glext.h:2974) +# NV_vertex_program3 (GL/glext.h:2979) +# EXT_framebuffer_object (GL/glext.h:2983) +GL_INVALID_FRAMEBUFFER_OPERATION_EXT = 1286 # GL/glext.h:2984 +GL_MAX_RENDERBUFFER_SIZE_EXT = 34024 # GL/glext.h:2985 +GL_FRAMEBUFFER_BINDING_EXT = 36006 # GL/glext.h:2986 +GL_RENDERBUFFER_BINDING_EXT = 36007 # GL/glext.h:2987 +GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT = 36048 # GL/glext.h:2988 +GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT = 36049 # GL/glext.h:2989 +GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT = 36050 # GL/glext.h:2990 +GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT = 36051 # GL/glext.h:2991 +GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT = 36052 # GL/glext.h:2992 +GL_FRAMEBUFFER_COMPLETE_EXT = 36053 # GL/glext.h:2993 +GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT = 36054 # GL/glext.h:2994 +GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT = 36055 # GL/glext.h:2995 +GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT = 36056 # GL/glext.h:2996 +GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT = 36057 # GL/glext.h:2997 +GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT = 36058 # GL/glext.h:2998 +GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT = 36059 # GL/glext.h:2999 +GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT = 36060 # GL/glext.h:3000 +GL_FRAMEBUFFER_UNSUPPORTED_EXT = 36061 # GL/glext.h:3001 +GL_MAX_COLOR_ATTACHMENTS_EXT = 36063 # GL/glext.h:3002 +GL_COLOR_ATTACHMENT0_EXT = 36064 # GL/glext.h:3003 +GL_COLOR_ATTACHMENT1_EXT = 36065 # GL/glext.h:3004 +GL_COLOR_ATTACHMENT2_EXT = 36066 # GL/glext.h:3005 +GL_COLOR_ATTACHMENT3_EXT = 36067 # GL/glext.h:3006 +GL_COLOR_ATTACHMENT4_EXT = 36068 # GL/glext.h:3007 +GL_COLOR_ATTACHMENT5_EXT = 36069 # GL/glext.h:3008 +GL_COLOR_ATTACHMENT6_EXT = 36070 # GL/glext.h:3009 +GL_COLOR_ATTACHMENT7_EXT = 36071 # GL/glext.h:3010 +GL_COLOR_ATTACHMENT8_EXT = 36072 # GL/glext.h:3011 +GL_COLOR_ATTACHMENT9_EXT = 36073 # GL/glext.h:3012 +GL_COLOR_ATTACHMENT10_EXT = 36074 # GL/glext.h:3013 +GL_COLOR_ATTACHMENT11_EXT = 36075 # GL/glext.h:3014 +GL_COLOR_ATTACHMENT12_EXT = 36076 # GL/glext.h:3015 +GL_COLOR_ATTACHMENT13_EXT = 36077 # GL/glext.h:3016 +GL_COLOR_ATTACHMENT14_EXT = 36078 # GL/glext.h:3017 +GL_COLOR_ATTACHMENT15_EXT = 36079 # GL/glext.h:3018 +GL_DEPTH_ATTACHMENT_EXT = 36096 # GL/glext.h:3019 +GL_STENCIL_ATTACHMENT_EXT = 36128 # GL/glext.h:3020 +GL_FRAMEBUFFER_EXT = 36160 # GL/glext.h:3021 +GL_RENDERBUFFER_EXT = 36161 # GL/glext.h:3022 +GL_RENDERBUFFER_WIDTH_EXT = 36162 # GL/glext.h:3023 +GL_RENDERBUFFER_HEIGHT_EXT = 36163 # GL/glext.h:3024 +GL_RENDERBUFFER_INTERNAL_FORMAT_EXT = 36164 # GL/glext.h:3025 +GL_STENCIL_INDEX1_EXT = 36166 # GL/glext.h:3026 +GL_STENCIL_INDEX4_EXT = 36167 # GL/glext.h:3027 +GL_STENCIL_INDEX8_EXT = 36168 # GL/glext.h:3028 +GL_STENCIL_INDEX16_EXT = 36169 # GL/glext.h:3029 +GL_RENDERBUFFER_RED_SIZE_EXT = 36176 # GL/glext.h:3030 +GL_RENDERBUFFER_GREEN_SIZE_EXT = 36177 # GL/glext.h:3031 +GL_RENDERBUFFER_BLUE_SIZE_EXT = 36178 # GL/glext.h:3032 +GL_RENDERBUFFER_ALPHA_SIZE_EXT = 36179 # GL/glext.h:3033 +GL_RENDERBUFFER_DEPTH_SIZE_EXT = 36180 # GL/glext.h:3034 +GL_RENDERBUFFER_STENCIL_SIZE_EXT = 36181 # GL/glext.h:3035 +# GREMEDY_string_marker (GL/glext.h:3038) +# VERSION_2_0 (GL/glext.h:3045) +GLchar = c_char # GL/glext.h:3047 +# VERSION_1_5 (GL/glext.h:3050) +GLintptr = c_ptrdiff_t # GL/glext.h:3052 +GLsizeiptr = c_ptrdiff_t # GL/glext.h:3053 +# ARB_vertex_buffer_object (GL/glext.h:3056) +GLintptrARB = c_ptrdiff_t # GL/glext.h:3058 +GLsizeiptrARB = c_ptrdiff_t # GL/glext.h:3059 +# ARB_shader_objects (GL/glext.h:3062) +GLcharARB = c_char # GL/glext.h:3064 +GLhandleARB = c_uint # GL/glext.h:3065 +# ARB_half_float_pixel (GL/glext.h:3069) +GLhalfARB = c_ushort # GL/glext.h:3070 +# NV_half_float (GL/glext.h:3073) +GLhalfNV = c_ushort # GL/glext.h:3074 +# VERSION_1_2 (GL/glext.h:3077) +GL_VERSION_1_2 = 1 # GL/glext.h:3078 +GLclampf = c_float # /usr/include/GL/gl.h:64 +# GL/glext.h:3080 +glBlendColor = _link_function('glBlendColor', None, [GLclampf, GLclampf, GLclampf, GLclampf], 'VERSION_1_2') + +GLenum = c_uint # /usr/include/GL/gl.h:53 +# GL/glext.h:3081 +glBlendEquation = _link_function('glBlendEquation', None, [GLenum], 'VERSION_1_2') + +GLuint = c_uint # /usr/include/GL/gl.h:62 +GLsizei = c_int # /usr/include/GL/gl.h:59 +GLvoid = None # /usr/include/GL/gl.h:67 +# GL/glext.h:3082 +glDrawRangeElements = _link_function('glDrawRangeElements', None, [GLenum, GLuint, GLuint, GLsizei, GLenum, POINTER(GLvoid)], 'VERSION_1_2') + +# GL/glext.h:3083 +glColorTable = _link_function('glColorTable', None, [GLenum, GLenum, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'VERSION_1_2') + +GLfloat = c_float # /usr/include/GL/gl.h:63 +# GL/glext.h:3084 +glColorTableParameterfv = _link_function('glColorTableParameterfv', None, [GLenum, GLenum, POINTER(GLfloat)], 'VERSION_1_2') + +GLint = c_int # /usr/include/GL/gl.h:58 +# GL/glext.h:3085 +glColorTableParameteriv = _link_function('glColorTableParameteriv', None, [GLenum, GLenum, POINTER(GLint)], 'VERSION_1_2') + +# GL/glext.h:3086 +glCopyColorTable = _link_function('glCopyColorTable', None, [GLenum, GLenum, GLint, GLint, GLsizei], 'VERSION_1_2') + +# GL/glext.h:3087 +glGetColorTable = _link_function('glGetColorTable', None, [GLenum, GLenum, GLenum, POINTER(GLvoid)], 'VERSION_1_2') + +# GL/glext.h:3088 +glGetColorTableParameterfv = _link_function('glGetColorTableParameterfv', None, [GLenum, GLenum, POINTER(GLfloat)], 'VERSION_1_2') + +# GL/glext.h:3089 +glGetColorTableParameteriv = _link_function('glGetColorTableParameteriv', None, [GLenum, GLenum, POINTER(GLint)], 'VERSION_1_2') + +# GL/glext.h:3090 +glColorSubTable = _link_function('glColorSubTable', None, [GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'VERSION_1_2') + +# GL/glext.h:3091 +glCopyColorSubTable = _link_function('glCopyColorSubTable', None, [GLenum, GLsizei, GLint, GLint, GLsizei], 'VERSION_1_2') + +# GL/glext.h:3092 +glConvolutionFilter1D = _link_function('glConvolutionFilter1D', None, [GLenum, GLenum, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'VERSION_1_2') + +# GL/glext.h:3093 +glConvolutionFilter2D = _link_function('glConvolutionFilter2D', None, [GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'VERSION_1_2') + +# GL/glext.h:3094 +glConvolutionParameterf = _link_function('glConvolutionParameterf', None, [GLenum, GLenum, GLfloat], 'VERSION_1_2') + +# GL/glext.h:3095 +glConvolutionParameterfv = _link_function('glConvolutionParameterfv', None, [GLenum, GLenum, POINTER(GLfloat)], 'VERSION_1_2') + +# GL/glext.h:3096 +glConvolutionParameteri = _link_function('glConvolutionParameteri', None, [GLenum, GLenum, GLint], 'VERSION_1_2') + +# GL/glext.h:3097 +glConvolutionParameteriv = _link_function('glConvolutionParameteriv', None, [GLenum, GLenum, POINTER(GLint)], 'VERSION_1_2') + +# GL/glext.h:3098 +glCopyConvolutionFilter1D = _link_function('glCopyConvolutionFilter1D', None, [GLenum, GLenum, GLint, GLint, GLsizei], 'VERSION_1_2') + +# GL/glext.h:3099 +glCopyConvolutionFilter2D = _link_function('glCopyConvolutionFilter2D', None, [GLenum, GLenum, GLint, GLint, GLsizei, GLsizei], 'VERSION_1_2') + +# GL/glext.h:3100 +glGetConvolutionFilter = _link_function('glGetConvolutionFilter', None, [GLenum, GLenum, GLenum, POINTER(GLvoid)], 'VERSION_1_2') + +# GL/glext.h:3101 +glGetConvolutionParameterfv = _link_function('glGetConvolutionParameterfv', None, [GLenum, GLenum, POINTER(GLfloat)], 'VERSION_1_2') + +# GL/glext.h:3102 +glGetConvolutionParameteriv = _link_function('glGetConvolutionParameteriv', None, [GLenum, GLenum, POINTER(GLint)], 'VERSION_1_2') + +# GL/glext.h:3103 +glGetSeparableFilter = _link_function('glGetSeparableFilter', None, [GLenum, GLenum, GLenum, POINTER(GLvoid), POINTER(GLvoid), POINTER(GLvoid)], 'VERSION_1_2') + +# GL/glext.h:3104 +glSeparableFilter2D = _link_function('glSeparableFilter2D', None, [GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid), POINTER(GLvoid)], 'VERSION_1_2') + +GLboolean = c_ubyte # /usr/include/GL/gl.h:54 +# GL/glext.h:3105 +glGetHistogram = _link_function('glGetHistogram', None, [GLenum, GLboolean, GLenum, GLenum, POINTER(GLvoid)], 'VERSION_1_2') + +# GL/glext.h:3106 +glGetHistogramParameterfv = _link_function('glGetHistogramParameterfv', None, [GLenum, GLenum, POINTER(GLfloat)], 'VERSION_1_2') + +# GL/glext.h:3107 +glGetHistogramParameteriv = _link_function('glGetHistogramParameteriv', None, [GLenum, GLenum, POINTER(GLint)], 'VERSION_1_2') + +# GL/glext.h:3108 +glGetMinmax = _link_function('glGetMinmax', None, [GLenum, GLboolean, GLenum, GLenum, POINTER(GLvoid)], 'VERSION_1_2') + +# GL/glext.h:3109 +glGetMinmaxParameterfv = _link_function('glGetMinmaxParameterfv', None, [GLenum, GLenum, POINTER(GLfloat)], 'VERSION_1_2') + +# GL/glext.h:3110 +glGetMinmaxParameteriv = _link_function('glGetMinmaxParameteriv', None, [GLenum, GLenum, POINTER(GLint)], 'VERSION_1_2') + +# GL/glext.h:3111 +glHistogram = _link_function('glHistogram', None, [GLenum, GLsizei, GLenum, GLboolean], 'VERSION_1_2') + +# GL/glext.h:3112 +glMinmax = _link_function('glMinmax', None, [GLenum, GLenum, GLboolean], 'VERSION_1_2') + +# GL/glext.h:3113 +glResetHistogram = _link_function('glResetHistogram', None, [GLenum], 'VERSION_1_2') + +# GL/glext.h:3114 +glResetMinmax = _link_function('glResetMinmax', None, [GLenum], 'VERSION_1_2') + +# GL/glext.h:3115 +glTexImage3D = _link_function('glTexImage3D', None, [GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, POINTER(GLvoid)], 'VERSION_1_2') + +# GL/glext.h:3116 +glTexSubImage3D = _link_function('glTexSubImage3D', None, [GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'VERSION_1_2') + +# GL/glext.h:3117 +glCopyTexSubImage3D = _link_function('glCopyTexSubImage3D', None, [GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei], 'VERSION_1_2') + +PFNGLBLENDCOLORPROC = CFUNCTYPE(None, GLclampf, GLclampf, GLclampf, GLclampf) # GL/glext.h:3119 +PFNGLBLENDEQUATIONPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:3120 +PFNGLDRAWRANGEELEMENTSPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLsizei, GLenum, POINTER(GLvoid)) # GL/glext.h:3121 +PFNGLCOLORTABLEPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:3122 +PFNGLCOLORTABLEPARAMETERFVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:3123 +PFNGLCOLORTABLEPARAMETERIVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:3124 +PFNGLCOPYCOLORTABLEPROC = CFUNCTYPE(None, GLenum, GLenum, GLint, GLint, GLsizei) # GL/glext.h:3125 +PFNGLGETCOLORTABLEPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:3126 +PFNGLGETCOLORTABLEPARAMETERFVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:3127 +PFNGLGETCOLORTABLEPARAMETERIVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:3128 +PFNGLCOLORSUBTABLEPROC = CFUNCTYPE(None, GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:3129 +PFNGLCOPYCOLORSUBTABLEPROC = CFUNCTYPE(None, GLenum, GLsizei, GLint, GLint, GLsizei) # GL/glext.h:3130 +PFNGLCONVOLUTIONFILTER1DPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:3131 +PFNGLCONVOLUTIONFILTER2DPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:3132 +PFNGLCONVOLUTIONPARAMETERFPROC = CFUNCTYPE(None, GLenum, GLenum, GLfloat) # GL/glext.h:3133 +PFNGLCONVOLUTIONPARAMETERFVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:3134 +PFNGLCONVOLUTIONPARAMETERIPROC = CFUNCTYPE(None, GLenum, GLenum, GLint) # GL/glext.h:3135 +PFNGLCONVOLUTIONPARAMETERIVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:3136 +PFNGLCOPYCONVOLUTIONFILTER1DPROC = CFUNCTYPE(None, GLenum, GLenum, GLint, GLint, GLsizei) # GL/glext.h:3137 +PFNGLCOPYCONVOLUTIONFILTER2DPROC = CFUNCTYPE(None, GLenum, GLenum, GLint, GLint, GLsizei, GLsizei) # GL/glext.h:3138 +PFNGLGETCONVOLUTIONFILTERPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:3139 +PFNGLGETCONVOLUTIONPARAMETERFVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:3140 +PFNGLGETCONVOLUTIONPARAMETERIVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:3141 +PFNGLGETSEPARABLEFILTERPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, POINTER(GLvoid), POINTER(GLvoid), POINTER(GLvoid)) # GL/glext.h:3142 +PFNGLSEPARABLEFILTER2DPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid), POINTER(GLvoid)) # GL/glext.h:3143 +PFNGLGETHISTOGRAMPROC = CFUNCTYPE(None, GLenum, GLboolean, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:3144 +PFNGLGETHISTOGRAMPARAMETERFVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:3145 +PFNGLGETHISTOGRAMPARAMETERIVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:3146 +PFNGLGETMINMAXPROC = CFUNCTYPE(None, GLenum, GLboolean, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:3147 +PFNGLGETMINMAXPARAMETERFVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:3148 +PFNGLGETMINMAXPARAMETERIVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:3149 +PFNGLHISTOGRAMPROC = CFUNCTYPE(None, GLenum, GLsizei, GLenum, GLboolean) # GL/glext.h:3150 +PFNGLMINMAXPROC = CFUNCTYPE(None, GLenum, GLenum, GLboolean) # GL/glext.h:3151 +PFNGLRESETHISTOGRAMPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:3152 +PFNGLRESETMINMAXPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:3153 +PFNGLTEXIMAGE3DPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:3154 +PFNGLTEXSUBIMAGE3DPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:3155 +PFNGLCOPYTEXSUBIMAGE3DPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei) # GL/glext.h:3156 +# VERSION_1_3 (GL/glext.h:3159) +GL_VERSION_1_3 = 1 # GL/glext.h:3160 +# GL/glext.h:3162 +glActiveTexture = _link_function('glActiveTexture', None, [GLenum], 'VERSION_1_3') + +# GL/glext.h:3163 +glClientActiveTexture = _link_function('glClientActiveTexture', None, [GLenum], 'VERSION_1_3') + +GLdouble = c_double # /usr/include/GL/gl.h:65 +# GL/glext.h:3164 +glMultiTexCoord1d = _link_function('glMultiTexCoord1d', None, [GLenum, GLdouble], 'VERSION_1_3') + +# GL/glext.h:3165 +glMultiTexCoord1dv = _link_function('glMultiTexCoord1dv', None, [GLenum, POINTER(GLdouble)], 'VERSION_1_3') + +# GL/glext.h:3166 +glMultiTexCoord1f = _link_function('glMultiTexCoord1f', None, [GLenum, GLfloat], 'VERSION_1_3') + +# GL/glext.h:3167 +glMultiTexCoord1fv = _link_function('glMultiTexCoord1fv', None, [GLenum, POINTER(GLfloat)], 'VERSION_1_3') + +# GL/glext.h:3168 +glMultiTexCoord1i = _link_function('glMultiTexCoord1i', None, [GLenum, GLint], 'VERSION_1_3') + +# GL/glext.h:3169 +glMultiTexCoord1iv = _link_function('glMultiTexCoord1iv', None, [GLenum, POINTER(GLint)], 'VERSION_1_3') + +GLshort = c_short # /usr/include/GL/gl.h:57 +# GL/glext.h:3170 +glMultiTexCoord1s = _link_function('glMultiTexCoord1s', None, [GLenum, GLshort], 'VERSION_1_3') + +# GL/glext.h:3171 +glMultiTexCoord1sv = _link_function('glMultiTexCoord1sv', None, [GLenum, POINTER(GLshort)], 'VERSION_1_3') + +# GL/glext.h:3172 +glMultiTexCoord2d = _link_function('glMultiTexCoord2d', None, [GLenum, GLdouble, GLdouble], 'VERSION_1_3') + +# GL/glext.h:3173 +glMultiTexCoord2dv = _link_function('glMultiTexCoord2dv', None, [GLenum, POINTER(GLdouble)], 'VERSION_1_3') + +# GL/glext.h:3174 +glMultiTexCoord2f = _link_function('glMultiTexCoord2f', None, [GLenum, GLfloat, GLfloat], 'VERSION_1_3') + +# GL/glext.h:3175 +glMultiTexCoord2fv = _link_function('glMultiTexCoord2fv', None, [GLenum, POINTER(GLfloat)], 'VERSION_1_3') + +# GL/glext.h:3176 +glMultiTexCoord2i = _link_function('glMultiTexCoord2i', None, [GLenum, GLint, GLint], 'VERSION_1_3') + +# GL/glext.h:3177 +glMultiTexCoord2iv = _link_function('glMultiTexCoord2iv', None, [GLenum, POINTER(GLint)], 'VERSION_1_3') + +# GL/glext.h:3178 +glMultiTexCoord2s = _link_function('glMultiTexCoord2s', None, [GLenum, GLshort, GLshort], 'VERSION_1_3') + +# GL/glext.h:3179 +glMultiTexCoord2sv = _link_function('glMultiTexCoord2sv', None, [GLenum, POINTER(GLshort)], 'VERSION_1_3') + +# GL/glext.h:3180 +glMultiTexCoord3d = _link_function('glMultiTexCoord3d', None, [GLenum, GLdouble, GLdouble, GLdouble], 'VERSION_1_3') + +# GL/glext.h:3181 +glMultiTexCoord3dv = _link_function('glMultiTexCoord3dv', None, [GLenum, POINTER(GLdouble)], 'VERSION_1_3') + +# GL/glext.h:3182 +glMultiTexCoord3f = _link_function('glMultiTexCoord3f', None, [GLenum, GLfloat, GLfloat, GLfloat], 'VERSION_1_3') + +# GL/glext.h:3183 +glMultiTexCoord3fv = _link_function('glMultiTexCoord3fv', None, [GLenum, POINTER(GLfloat)], 'VERSION_1_3') + +# GL/glext.h:3184 +glMultiTexCoord3i = _link_function('glMultiTexCoord3i', None, [GLenum, GLint, GLint, GLint], 'VERSION_1_3') + +# GL/glext.h:3185 +glMultiTexCoord3iv = _link_function('glMultiTexCoord3iv', None, [GLenum, POINTER(GLint)], 'VERSION_1_3') + +# GL/glext.h:3186 +glMultiTexCoord3s = _link_function('glMultiTexCoord3s', None, [GLenum, GLshort, GLshort, GLshort], 'VERSION_1_3') + +# GL/glext.h:3187 +glMultiTexCoord3sv = _link_function('glMultiTexCoord3sv', None, [GLenum, POINTER(GLshort)], 'VERSION_1_3') + +# GL/glext.h:3188 +glMultiTexCoord4d = _link_function('glMultiTexCoord4d', None, [GLenum, GLdouble, GLdouble, GLdouble, GLdouble], 'VERSION_1_3') + +# GL/glext.h:3189 +glMultiTexCoord4dv = _link_function('glMultiTexCoord4dv', None, [GLenum, POINTER(GLdouble)], 'VERSION_1_3') + +# GL/glext.h:3190 +glMultiTexCoord4f = _link_function('glMultiTexCoord4f', None, [GLenum, GLfloat, GLfloat, GLfloat, GLfloat], 'VERSION_1_3') + +# GL/glext.h:3191 +glMultiTexCoord4fv = _link_function('glMultiTexCoord4fv', None, [GLenum, POINTER(GLfloat)], 'VERSION_1_3') + +# GL/glext.h:3192 +glMultiTexCoord4i = _link_function('glMultiTexCoord4i', None, [GLenum, GLint, GLint, GLint, GLint], 'VERSION_1_3') + +# GL/glext.h:3193 +glMultiTexCoord4iv = _link_function('glMultiTexCoord4iv', None, [GLenum, POINTER(GLint)], 'VERSION_1_3') + +# GL/glext.h:3194 +glMultiTexCoord4s = _link_function('glMultiTexCoord4s', None, [GLenum, GLshort, GLshort, GLshort, GLshort], 'VERSION_1_3') + +# GL/glext.h:3195 +glMultiTexCoord4sv = _link_function('glMultiTexCoord4sv', None, [GLenum, POINTER(GLshort)], 'VERSION_1_3') + +# GL/glext.h:3196 +glLoadTransposeMatrixf = _link_function('glLoadTransposeMatrixf', None, [POINTER(GLfloat)], 'VERSION_1_3') + +# GL/glext.h:3197 +glLoadTransposeMatrixd = _link_function('glLoadTransposeMatrixd', None, [POINTER(GLdouble)], 'VERSION_1_3') + +# GL/glext.h:3198 +glMultTransposeMatrixf = _link_function('glMultTransposeMatrixf', None, [POINTER(GLfloat)], 'VERSION_1_3') + +# GL/glext.h:3199 +glMultTransposeMatrixd = _link_function('glMultTransposeMatrixd', None, [POINTER(GLdouble)], 'VERSION_1_3') + +# GL/glext.h:3200 +glSampleCoverage = _link_function('glSampleCoverage', None, [GLclampf, GLboolean], 'VERSION_1_3') + +# GL/glext.h:3201 +glCompressedTexImage3D = _link_function('glCompressedTexImage3D', None, [GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, POINTER(GLvoid)], 'VERSION_1_3') + +# GL/glext.h:3202 +glCompressedTexImage2D = _link_function('glCompressedTexImage2D', None, [GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, POINTER(GLvoid)], 'VERSION_1_3') + +# GL/glext.h:3203 +glCompressedTexImage1D = _link_function('glCompressedTexImage1D', None, [GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, POINTER(GLvoid)], 'VERSION_1_3') + +# GL/glext.h:3204 +glCompressedTexSubImage3D = _link_function('glCompressedTexSubImage3D', None, [GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, POINTER(GLvoid)], 'VERSION_1_3') + +# GL/glext.h:3205 +glCompressedTexSubImage2D = _link_function('glCompressedTexSubImage2D', None, [GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, POINTER(GLvoid)], 'VERSION_1_3') + +# GL/glext.h:3206 +glCompressedTexSubImage1D = _link_function('glCompressedTexSubImage1D', None, [GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, POINTER(GLvoid)], 'VERSION_1_3') + +# GL/glext.h:3207 +glGetCompressedTexImage = _link_function('glGetCompressedTexImage', None, [GLenum, GLint, POINTER(GLvoid)], 'VERSION_1_3') + +PFNGLACTIVETEXTUREPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:3209 +PFNGLCLIENTACTIVETEXTUREPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:3210 +PFNGLMULTITEXCOORD1DPROC = CFUNCTYPE(None, GLenum, GLdouble) # GL/glext.h:3211 +PFNGLMULTITEXCOORD1DVPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:3212 +PFNGLMULTITEXCOORD1FPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:3213 +PFNGLMULTITEXCOORD1FVPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:3214 +PFNGLMULTITEXCOORD1IPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:3215 +PFNGLMULTITEXCOORD1IVPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:3216 +PFNGLMULTITEXCOORD1SPROC = CFUNCTYPE(None, GLenum, GLshort) # GL/glext.h:3217 +PFNGLMULTITEXCOORD1SVPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:3218 +PFNGLMULTITEXCOORD2DPROC = CFUNCTYPE(None, GLenum, GLdouble, GLdouble) # GL/glext.h:3219 +PFNGLMULTITEXCOORD2DVPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:3220 +PFNGLMULTITEXCOORD2FPROC = CFUNCTYPE(None, GLenum, GLfloat, GLfloat) # GL/glext.h:3221 +PFNGLMULTITEXCOORD2FVPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:3222 +PFNGLMULTITEXCOORD2IPROC = CFUNCTYPE(None, GLenum, GLint, GLint) # GL/glext.h:3223 +PFNGLMULTITEXCOORD2IVPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:3224 +PFNGLMULTITEXCOORD2SPROC = CFUNCTYPE(None, GLenum, GLshort, GLshort) # GL/glext.h:3225 +PFNGLMULTITEXCOORD2SVPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:3226 +PFNGLMULTITEXCOORD3DPROC = CFUNCTYPE(None, GLenum, GLdouble, GLdouble, GLdouble) # GL/glext.h:3227 +PFNGLMULTITEXCOORD3DVPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:3228 +PFNGLMULTITEXCOORD3FPROC = CFUNCTYPE(None, GLenum, GLfloat, GLfloat, GLfloat) # GL/glext.h:3229 +PFNGLMULTITEXCOORD3FVPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:3230 +PFNGLMULTITEXCOORD3IPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint) # GL/glext.h:3231 +PFNGLMULTITEXCOORD3IVPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:3232 +PFNGLMULTITEXCOORD3SPROC = CFUNCTYPE(None, GLenum, GLshort, GLshort, GLshort) # GL/glext.h:3233 +PFNGLMULTITEXCOORD3SVPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:3234 +PFNGLMULTITEXCOORD4DPROC = CFUNCTYPE(None, GLenum, GLdouble, GLdouble, GLdouble, GLdouble) # GL/glext.h:3235 +PFNGLMULTITEXCOORD4DVPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:3236 +PFNGLMULTITEXCOORD4FPROC = CFUNCTYPE(None, GLenum, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:3237 +PFNGLMULTITEXCOORD4FVPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:3238 +PFNGLMULTITEXCOORD4IPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint) # GL/glext.h:3239 +PFNGLMULTITEXCOORD4IVPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:3240 +PFNGLMULTITEXCOORD4SPROC = CFUNCTYPE(None, GLenum, GLshort, GLshort, GLshort, GLshort) # GL/glext.h:3241 +PFNGLMULTITEXCOORD4SVPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:3242 +PFNGLLOADTRANSPOSEMATRIXFPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:3243 +PFNGLLOADTRANSPOSEMATRIXDPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:3244 +PFNGLMULTTRANSPOSEMATRIXFPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:3245 +PFNGLMULTTRANSPOSEMATRIXDPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:3246 +PFNGLSAMPLECOVERAGEPROC = CFUNCTYPE(None, GLclampf, GLboolean) # GL/glext.h:3247 +PFNGLCOMPRESSEDTEXIMAGE3DPROC = CFUNCTYPE(None, GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, POINTER(GLvoid)) # GL/glext.h:3248 +PFNGLCOMPRESSEDTEXIMAGE2DPROC = CFUNCTYPE(None, GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, POINTER(GLvoid)) # GL/glext.h:3249 +PFNGLCOMPRESSEDTEXIMAGE1DPROC = CFUNCTYPE(None, GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, POINTER(GLvoid)) # GL/glext.h:3250 +PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:3251 +PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:3252 +PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:3253 +PFNGLGETCOMPRESSEDTEXIMAGEPROC = CFUNCTYPE(None, GLenum, GLint, POINTER(GLvoid)) # GL/glext.h:3254 +# VERSION_1_4 (GL/glext.h:3257) +GL_VERSION_1_4 = 1 # GL/glext.h:3258 +# GL/glext.h:3260 +glBlendFuncSeparate = _link_function('glBlendFuncSeparate', None, [GLenum, GLenum, GLenum, GLenum], 'VERSION_1_4') + +# GL/glext.h:3261 +glFogCoordf = _link_function('glFogCoordf', None, [GLfloat], 'VERSION_1_4') + +# GL/glext.h:3262 +glFogCoordfv = _link_function('glFogCoordfv', None, [POINTER(GLfloat)], 'VERSION_1_4') + +# GL/glext.h:3263 +glFogCoordd = _link_function('glFogCoordd', None, [GLdouble], 'VERSION_1_4') + +# GL/glext.h:3264 +glFogCoorddv = _link_function('glFogCoorddv', None, [POINTER(GLdouble)], 'VERSION_1_4') + +# GL/glext.h:3265 +glFogCoordPointer = _link_function('glFogCoordPointer', None, [GLenum, GLsizei, POINTER(GLvoid)], 'VERSION_1_4') + +# GL/glext.h:3266 +glMultiDrawArrays = _link_function('glMultiDrawArrays', None, [GLenum, POINTER(GLint), POINTER(GLsizei), GLsizei], 'VERSION_1_4') + +# GL/glext.h:3267 +glMultiDrawElements = _link_function('glMultiDrawElements', None, [GLenum, POINTER(GLsizei), GLenum, POINTER(POINTER(GLvoid)), GLsizei], 'VERSION_1_4') + +# GL/glext.h:3268 +glPointParameterf = _link_function('glPointParameterf', None, [GLenum, GLfloat], 'VERSION_1_4') + +# GL/glext.h:3269 +glPointParameterfv = _link_function('glPointParameterfv', None, [GLenum, POINTER(GLfloat)], 'VERSION_1_4') + +# GL/glext.h:3270 +glPointParameteri = _link_function('glPointParameteri', None, [GLenum, GLint], 'VERSION_1_4') + +# GL/glext.h:3271 +glPointParameteriv = _link_function('glPointParameteriv', None, [GLenum, POINTER(GLint)], 'VERSION_1_4') + +GLbyte = c_char # /usr/include/GL/gl.h:56 +# GL/glext.h:3272 +glSecondaryColor3b = _link_function('glSecondaryColor3b', None, [GLbyte, GLbyte, GLbyte], 'VERSION_1_4') + +# GL/glext.h:3273 +glSecondaryColor3bv = _link_function('glSecondaryColor3bv', None, [POINTER(GLbyte)], 'VERSION_1_4') + +# GL/glext.h:3274 +glSecondaryColor3d = _link_function('glSecondaryColor3d', None, [GLdouble, GLdouble, GLdouble], 'VERSION_1_4') + +# GL/glext.h:3275 +glSecondaryColor3dv = _link_function('glSecondaryColor3dv', None, [POINTER(GLdouble)], 'VERSION_1_4') + +# GL/glext.h:3276 +glSecondaryColor3f = _link_function('glSecondaryColor3f', None, [GLfloat, GLfloat, GLfloat], 'VERSION_1_4') + +# GL/glext.h:3277 +glSecondaryColor3fv = _link_function('glSecondaryColor3fv', None, [POINTER(GLfloat)], 'VERSION_1_4') + +# GL/glext.h:3278 +glSecondaryColor3i = _link_function('glSecondaryColor3i', None, [GLint, GLint, GLint], 'VERSION_1_4') + +# GL/glext.h:3279 +glSecondaryColor3iv = _link_function('glSecondaryColor3iv', None, [POINTER(GLint)], 'VERSION_1_4') + +# GL/glext.h:3280 +glSecondaryColor3s = _link_function('glSecondaryColor3s', None, [GLshort, GLshort, GLshort], 'VERSION_1_4') + +# GL/glext.h:3281 +glSecondaryColor3sv = _link_function('glSecondaryColor3sv', None, [POINTER(GLshort)], 'VERSION_1_4') + +GLubyte = c_ubyte # /usr/include/GL/gl.h:60 +# GL/glext.h:3282 +glSecondaryColor3ub = _link_function('glSecondaryColor3ub', None, [GLubyte, GLubyte, GLubyte], 'VERSION_1_4') + +# GL/glext.h:3283 +glSecondaryColor3ubv = _link_function('glSecondaryColor3ubv', None, [POINTER(GLubyte)], 'VERSION_1_4') + +# GL/glext.h:3284 +glSecondaryColor3ui = _link_function('glSecondaryColor3ui', None, [GLuint, GLuint, GLuint], 'VERSION_1_4') + +# GL/glext.h:3285 +glSecondaryColor3uiv = _link_function('glSecondaryColor3uiv', None, [POINTER(GLuint)], 'VERSION_1_4') + +GLushort = c_ushort # /usr/include/GL/gl.h:61 +# GL/glext.h:3286 +glSecondaryColor3us = _link_function('glSecondaryColor3us', None, [GLushort, GLushort, GLushort], 'VERSION_1_4') + +# GL/glext.h:3287 +glSecondaryColor3usv = _link_function('glSecondaryColor3usv', None, [POINTER(GLushort)], 'VERSION_1_4') + +# GL/glext.h:3288 +glSecondaryColorPointer = _link_function('glSecondaryColorPointer', None, [GLint, GLenum, GLsizei, POINTER(GLvoid)], 'VERSION_1_4') + +# GL/glext.h:3289 +glWindowPos2d = _link_function('glWindowPos2d', None, [GLdouble, GLdouble], 'VERSION_1_4') + +# GL/glext.h:3290 +glWindowPos2dv = _link_function('glWindowPos2dv', None, [POINTER(GLdouble)], 'VERSION_1_4') + +# GL/glext.h:3291 +glWindowPos2f = _link_function('glWindowPos2f', None, [GLfloat, GLfloat], 'VERSION_1_4') + +# GL/glext.h:3292 +glWindowPos2fv = _link_function('glWindowPos2fv', None, [POINTER(GLfloat)], 'VERSION_1_4') + +# GL/glext.h:3293 +glWindowPos2i = _link_function('glWindowPos2i', None, [GLint, GLint], 'VERSION_1_4') + +# GL/glext.h:3294 +glWindowPos2iv = _link_function('glWindowPos2iv', None, [POINTER(GLint)], 'VERSION_1_4') + +# GL/glext.h:3295 +glWindowPos2s = _link_function('glWindowPos2s', None, [GLshort, GLshort], 'VERSION_1_4') + +# GL/glext.h:3296 +glWindowPos2sv = _link_function('glWindowPos2sv', None, [POINTER(GLshort)], 'VERSION_1_4') + +# GL/glext.h:3297 +glWindowPos3d = _link_function('glWindowPos3d', None, [GLdouble, GLdouble, GLdouble], 'VERSION_1_4') + +# GL/glext.h:3298 +glWindowPos3dv = _link_function('glWindowPos3dv', None, [POINTER(GLdouble)], 'VERSION_1_4') + +# GL/glext.h:3299 +glWindowPos3f = _link_function('glWindowPos3f', None, [GLfloat, GLfloat, GLfloat], 'VERSION_1_4') + +# GL/glext.h:3300 +glWindowPos3fv = _link_function('glWindowPos3fv', None, [POINTER(GLfloat)], 'VERSION_1_4') + +# GL/glext.h:3301 +glWindowPos3i = _link_function('glWindowPos3i', None, [GLint, GLint, GLint], 'VERSION_1_4') + +# GL/glext.h:3302 +glWindowPos3iv = _link_function('glWindowPos3iv', None, [POINTER(GLint)], 'VERSION_1_4') + +# GL/glext.h:3303 +glWindowPos3s = _link_function('glWindowPos3s', None, [GLshort, GLshort, GLshort], 'VERSION_1_4') + +# GL/glext.h:3304 +glWindowPos3sv = _link_function('glWindowPos3sv', None, [POINTER(GLshort)], 'VERSION_1_4') + +PFNGLBLENDFUNCSEPARATEPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLenum) # GL/glext.h:3306 +PFNGLFOGCOORDFPROC = CFUNCTYPE(None, GLfloat) # GL/glext.h:3307 +PFNGLFOGCOORDFVPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:3308 +PFNGLFOGCOORDDPROC = CFUNCTYPE(None, GLdouble) # GL/glext.h:3309 +PFNGLFOGCOORDDVPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:3310 +PFNGLFOGCOORDPOINTERPROC = CFUNCTYPE(None, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:3311 +PFNGLMULTIDRAWARRAYSPROC = CFUNCTYPE(None, GLenum, POINTER(GLint), POINTER(GLsizei), GLsizei) # GL/glext.h:3312 +PFNGLMULTIDRAWELEMENTSPROC = CFUNCTYPE(None, GLenum, POINTER(GLsizei), GLenum, POINTER(POINTER(GLvoid)), GLsizei) # GL/glext.h:3313 +PFNGLPOINTPARAMETERFPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:3314 +PFNGLPOINTPARAMETERFVPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:3315 +PFNGLPOINTPARAMETERIPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:3316 +PFNGLPOINTPARAMETERIVPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:3317 +PFNGLSECONDARYCOLOR3BPROC = CFUNCTYPE(None, GLbyte, GLbyte, GLbyte) # GL/glext.h:3318 +PFNGLSECONDARYCOLOR3BVPROC = CFUNCTYPE(None, POINTER(GLbyte)) # GL/glext.h:3319 +PFNGLSECONDARYCOLOR3DPROC = CFUNCTYPE(None, GLdouble, GLdouble, GLdouble) # GL/glext.h:3320 +PFNGLSECONDARYCOLOR3DVPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:3321 +PFNGLSECONDARYCOLOR3FPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat) # GL/glext.h:3322 +PFNGLSECONDARYCOLOR3FVPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:3323 +PFNGLSECONDARYCOLOR3IPROC = CFUNCTYPE(None, GLint, GLint, GLint) # GL/glext.h:3324 +PFNGLSECONDARYCOLOR3IVPROC = CFUNCTYPE(None, POINTER(GLint)) # GL/glext.h:3325 +PFNGLSECONDARYCOLOR3SPROC = CFUNCTYPE(None, GLshort, GLshort, GLshort) # GL/glext.h:3326 +PFNGLSECONDARYCOLOR3SVPROC = CFUNCTYPE(None, POINTER(GLshort)) # GL/glext.h:3327 +PFNGLSECONDARYCOLOR3UBPROC = CFUNCTYPE(None, GLubyte, GLubyte, GLubyte) # GL/glext.h:3328 +PFNGLSECONDARYCOLOR3UBVPROC = CFUNCTYPE(None, POINTER(GLubyte)) # GL/glext.h:3329 +PFNGLSECONDARYCOLOR3UIPROC = CFUNCTYPE(None, GLuint, GLuint, GLuint) # GL/glext.h:3330 +PFNGLSECONDARYCOLOR3UIVPROC = CFUNCTYPE(None, POINTER(GLuint)) # GL/glext.h:3331 +PFNGLSECONDARYCOLOR3USPROC = CFUNCTYPE(None, GLushort, GLushort, GLushort) # GL/glext.h:3332 +PFNGLSECONDARYCOLOR3USVPROC = CFUNCTYPE(None, POINTER(GLushort)) # GL/glext.h:3333 +PFNGLSECONDARYCOLORPOINTERPROC = CFUNCTYPE(None, GLint, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:3334 +PFNGLWINDOWPOS2DPROC = CFUNCTYPE(None, GLdouble, GLdouble) # GL/glext.h:3335 +PFNGLWINDOWPOS2DVPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:3336 +PFNGLWINDOWPOS2FPROC = CFUNCTYPE(None, GLfloat, GLfloat) # GL/glext.h:3337 +PFNGLWINDOWPOS2FVPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:3338 +PFNGLWINDOWPOS2IPROC = CFUNCTYPE(None, GLint, GLint) # GL/glext.h:3339 +PFNGLWINDOWPOS2IVPROC = CFUNCTYPE(None, POINTER(GLint)) # GL/glext.h:3340 +PFNGLWINDOWPOS2SPROC = CFUNCTYPE(None, GLshort, GLshort) # GL/glext.h:3341 +PFNGLWINDOWPOS2SVPROC = CFUNCTYPE(None, POINTER(GLshort)) # GL/glext.h:3342 +PFNGLWINDOWPOS3DPROC = CFUNCTYPE(None, GLdouble, GLdouble, GLdouble) # GL/glext.h:3343 +PFNGLWINDOWPOS3DVPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:3344 +PFNGLWINDOWPOS3FPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat) # GL/glext.h:3345 +PFNGLWINDOWPOS3FVPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:3346 +PFNGLWINDOWPOS3IPROC = CFUNCTYPE(None, GLint, GLint, GLint) # GL/glext.h:3347 +PFNGLWINDOWPOS3IVPROC = CFUNCTYPE(None, POINTER(GLint)) # GL/glext.h:3348 +PFNGLWINDOWPOS3SPROC = CFUNCTYPE(None, GLshort, GLshort, GLshort) # GL/glext.h:3349 +PFNGLWINDOWPOS3SVPROC = CFUNCTYPE(None, POINTER(GLshort)) # GL/glext.h:3350 +# VERSION_1_5 (GL/glext.h:3353) +GL_VERSION_1_5 = 1 # GL/glext.h:3354 +# GL/glext.h:3356 +glGenQueries = _link_function('glGenQueries', None, [GLsizei, POINTER(GLuint)], 'VERSION_1_5') + +# GL/glext.h:3357 +glDeleteQueries = _link_function('glDeleteQueries', None, [GLsizei, POINTER(GLuint)], 'VERSION_1_5') + +# GL/glext.h:3358 +glIsQuery = _link_function('glIsQuery', GLboolean, [GLuint], 'VERSION_1_5') + +# GL/glext.h:3359 +glBeginQuery = _link_function('glBeginQuery', None, [GLenum, GLuint], 'VERSION_1_5') + +# GL/glext.h:3360 +glEndQuery = _link_function('glEndQuery', None, [GLenum], 'VERSION_1_5') + +# GL/glext.h:3361 +glGetQueryiv = _link_function('glGetQueryiv', None, [GLenum, GLenum, POINTER(GLint)], 'VERSION_1_5') + +# GL/glext.h:3362 +glGetQueryObjectiv = _link_function('glGetQueryObjectiv', None, [GLuint, GLenum, POINTER(GLint)], 'VERSION_1_5') + +# GL/glext.h:3363 +glGetQueryObjectuiv = _link_function('glGetQueryObjectuiv', None, [GLuint, GLenum, POINTER(GLuint)], 'VERSION_1_5') + +# GL/glext.h:3364 +glBindBuffer = _link_function('glBindBuffer', None, [GLenum, GLuint], 'VERSION_1_5') + +# GL/glext.h:3365 +glDeleteBuffers = _link_function('glDeleteBuffers', None, [GLsizei, POINTER(GLuint)], 'VERSION_1_5') + +# GL/glext.h:3366 +glGenBuffers = _link_function('glGenBuffers', None, [GLsizei, POINTER(GLuint)], 'VERSION_1_5') + +# GL/glext.h:3367 +glIsBuffer = _link_function('glIsBuffer', GLboolean, [GLuint], 'VERSION_1_5') + +# GL/glext.h:3368 +glBufferData = _link_function('glBufferData', None, [GLenum, GLsizeiptr, POINTER(GLvoid), GLenum], 'VERSION_1_5') + +# GL/glext.h:3369 +glBufferSubData = _link_function('glBufferSubData', None, [GLenum, GLintptr, GLsizeiptr, POINTER(GLvoid)], 'VERSION_1_5') + +# GL/glext.h:3370 +glGetBufferSubData = _link_function('glGetBufferSubData', None, [GLenum, GLintptr, GLsizeiptr, POINTER(GLvoid)], 'VERSION_1_5') + +# GL/glext.h:3371 +glMapBuffer = _link_function('glMapBuffer', POINTER(GLvoid), [GLenum, GLenum], 'VERSION_1_5') + +# GL/glext.h:3372 +glUnmapBuffer = _link_function('glUnmapBuffer', GLboolean, [GLenum], 'VERSION_1_5') + +# GL/glext.h:3373 +glGetBufferParameteriv = _link_function('glGetBufferParameteriv', None, [GLenum, GLenum, POINTER(GLint)], 'VERSION_1_5') + +# GL/glext.h:3374 +glGetBufferPointerv = _link_function('glGetBufferPointerv', None, [GLenum, GLenum, POINTER(POINTER(GLvoid))], 'VERSION_1_5') + +PFNGLGENQUERIESPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:3376 +PFNGLDELETEQUERIESPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:3377 +PFNGLISQUERYPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:3378 +PFNGLBEGINQUERYPROC = CFUNCTYPE(None, GLenum, GLuint) # GL/glext.h:3379 +PFNGLENDQUERYPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:3380 +PFNGLGETQUERYIVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:3381 +PFNGLGETQUERYOBJECTIVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:3382 +PFNGLGETQUERYOBJECTUIVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLuint)) # GL/glext.h:3383 +PFNGLBINDBUFFERPROC = CFUNCTYPE(None, GLenum, GLuint) # GL/glext.h:3384 +PFNGLDELETEBUFFERSPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:3385 +PFNGLGENBUFFERSPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:3386 +PFNGLISBUFFERPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:3387 +PFNGLBUFFERDATAPROC = CFUNCTYPE(None, GLenum, GLsizeiptr, POINTER(GLvoid), GLenum) # GL/glext.h:3388 +PFNGLBUFFERSUBDATAPROC = CFUNCTYPE(None, GLenum, GLintptr, GLsizeiptr, POINTER(GLvoid)) # GL/glext.h:3389 +PFNGLGETBUFFERSUBDATAPROC = CFUNCTYPE(None, GLenum, GLintptr, GLsizeiptr, POINTER(GLvoid)) # GL/glext.h:3390 +PFNGLMAPBUFFERPROC = CFUNCTYPE(POINTER(GLvoid), GLenum, GLenum) # GL/glext.h:3391 +PFNGLUNMAPBUFFERPROC = CFUNCTYPE(GLboolean, GLenum) # GL/glext.h:3392 +PFNGLGETBUFFERPARAMETERIVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:3393 +PFNGLGETBUFFERPOINTERVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(POINTER(GLvoid))) # GL/glext.h:3394 +# VERSION_2_0 (GL/glext.h:3397) +GL_VERSION_2_0 = 1 # GL/glext.h:3398 +# GL/glext.h:3400 +glBlendEquationSeparate = _link_function('glBlendEquationSeparate', None, [GLenum, GLenum], 'VERSION_2_0') + +# GL/glext.h:3401 +glDrawBuffers = _link_function('glDrawBuffers', None, [GLsizei, POINTER(GLenum)], 'VERSION_2_0') + +# GL/glext.h:3402 +glStencilOpSeparate = _link_function('glStencilOpSeparate', None, [GLenum, GLenum, GLenum, GLenum], 'VERSION_2_0') + +# GL/glext.h:3403 +glStencilFuncSeparate = _link_function('glStencilFuncSeparate', None, [GLenum, GLenum, GLint, GLuint], 'VERSION_2_0') + +# GL/glext.h:3404 +glStencilMaskSeparate = _link_function('glStencilMaskSeparate', None, [GLenum, GLuint], 'VERSION_2_0') + +# GL/glext.h:3405 +glAttachShader = _link_function('glAttachShader', None, [GLuint, GLuint], 'VERSION_2_0') + +# GL/glext.h:3406 +glBindAttribLocation = _link_function('glBindAttribLocation', None, [GLuint, GLuint, POINTER(GLchar)], 'VERSION_2_0') + +# GL/glext.h:3407 +glCompileShader = _link_function('glCompileShader', None, [GLuint], 'VERSION_2_0') + +# GL/glext.h:3408 +glCreateProgram = _link_function('glCreateProgram', GLuint, [], 'VERSION_2_0') + +# GL/glext.h:3409 +glCreateShader = _link_function('glCreateShader', GLuint, [GLenum], 'VERSION_2_0') + +# GL/glext.h:3410 +glDeleteProgram = _link_function('glDeleteProgram', None, [GLuint], 'VERSION_2_0') + +# GL/glext.h:3411 +glDeleteShader = _link_function('glDeleteShader', None, [GLuint], 'VERSION_2_0') + +# GL/glext.h:3412 +glDetachShader = _link_function('glDetachShader', None, [GLuint, GLuint], 'VERSION_2_0') + +# GL/glext.h:3413 +glDisableVertexAttribArray = _link_function('glDisableVertexAttribArray', None, [GLuint], 'VERSION_2_0') + +# GL/glext.h:3414 +glEnableVertexAttribArray = _link_function('glEnableVertexAttribArray', None, [GLuint], 'VERSION_2_0') + +# GL/glext.h:3415 +glGetActiveAttrib = _link_function('glGetActiveAttrib', None, [GLuint, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLint), POINTER(GLenum), POINTER(GLchar)], 'VERSION_2_0') + +# GL/glext.h:3416 +glGetActiveUniform = _link_function('glGetActiveUniform', None, [GLuint, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLint), POINTER(GLenum), POINTER(GLchar)], 'VERSION_2_0') + +# GL/glext.h:3417 +glGetAttachedShaders = _link_function('glGetAttachedShaders', None, [GLuint, GLsizei, POINTER(GLsizei), POINTER(GLuint)], 'VERSION_2_0') + +# GL/glext.h:3418 +glGetAttribLocation = _link_function('glGetAttribLocation', GLint, [GLuint, POINTER(GLchar)], 'VERSION_2_0') + +# GL/glext.h:3419 +glGetProgramiv = _link_function('glGetProgramiv', None, [GLuint, GLenum, POINTER(GLint)], 'VERSION_2_0') + +# GL/glext.h:3420 +glGetProgramInfoLog = _link_function('glGetProgramInfoLog', None, [GLuint, GLsizei, POINTER(GLsizei), POINTER(GLchar)], 'VERSION_2_0') + +# GL/glext.h:3421 +glGetShaderiv = _link_function('glGetShaderiv', None, [GLuint, GLenum, POINTER(GLint)], 'VERSION_2_0') + +# GL/glext.h:3422 +glGetShaderInfoLog = _link_function('glGetShaderInfoLog', None, [GLuint, GLsizei, POINTER(GLsizei), POINTER(GLchar)], 'VERSION_2_0') + +# GL/glext.h:3423 +glGetShaderSource = _link_function('glGetShaderSource', None, [GLuint, GLsizei, POINTER(GLsizei), POINTER(GLchar)], 'VERSION_2_0') + +# GL/glext.h:3424 +glGetUniformLocation = _link_function('glGetUniformLocation', GLint, [GLuint, POINTER(GLchar)], 'VERSION_2_0') + +# GL/glext.h:3425 +glGetUniformfv = _link_function('glGetUniformfv', None, [GLuint, GLint, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3426 +glGetUniformiv = _link_function('glGetUniformiv', None, [GLuint, GLint, POINTER(GLint)], 'VERSION_2_0') + +# GL/glext.h:3427 +glGetVertexAttribdv = _link_function('glGetVertexAttribdv', None, [GLuint, GLenum, POINTER(GLdouble)], 'VERSION_2_0') + +# GL/glext.h:3428 +glGetVertexAttribfv = _link_function('glGetVertexAttribfv', None, [GLuint, GLenum, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3429 +glGetVertexAttribiv = _link_function('glGetVertexAttribiv', None, [GLuint, GLenum, POINTER(GLint)], 'VERSION_2_0') + +# GL/glext.h:3430 +glGetVertexAttribPointerv = _link_function('glGetVertexAttribPointerv', None, [GLuint, GLenum, POINTER(POINTER(GLvoid))], 'VERSION_2_0') + +# GL/glext.h:3431 +glIsProgram = _link_function('glIsProgram', GLboolean, [GLuint], 'VERSION_2_0') + +# GL/glext.h:3432 +glIsShader = _link_function('glIsShader', GLboolean, [GLuint], 'VERSION_2_0') + +# GL/glext.h:3433 +glLinkProgram = _link_function('glLinkProgram', None, [GLuint], 'VERSION_2_0') + +# GL/glext.h:3434 +glShaderSource = _link_function('glShaderSource', None, [GLuint, GLsizei, POINTER(POINTER(GLchar)), POINTER(GLint)], 'VERSION_2_0') + +# GL/glext.h:3435 +glUseProgram = _link_function('glUseProgram', None, [GLuint], 'VERSION_2_0') + +# GL/glext.h:3436 +glUniform1f = _link_function('glUniform1f', None, [GLint, GLfloat], 'VERSION_2_0') + +# GL/glext.h:3437 +glUniform2f = _link_function('glUniform2f', None, [GLint, GLfloat, GLfloat], 'VERSION_2_0') + +# GL/glext.h:3438 +glUniform3f = _link_function('glUniform3f', None, [GLint, GLfloat, GLfloat, GLfloat], 'VERSION_2_0') + +# GL/glext.h:3439 +glUniform4f = _link_function('glUniform4f', None, [GLint, GLfloat, GLfloat, GLfloat, GLfloat], 'VERSION_2_0') + +# GL/glext.h:3440 +glUniform1i = _link_function('glUniform1i', None, [GLint, GLint], 'VERSION_2_0') + +# GL/glext.h:3441 +glUniform2i = _link_function('glUniform2i', None, [GLint, GLint, GLint], 'VERSION_2_0') + +# GL/glext.h:3442 +glUniform3i = _link_function('glUniform3i', None, [GLint, GLint, GLint, GLint], 'VERSION_2_0') + +# GL/glext.h:3443 +glUniform4i = _link_function('glUniform4i', None, [GLint, GLint, GLint, GLint, GLint], 'VERSION_2_0') + +# GL/glext.h:3444 +glUniform1fv = _link_function('glUniform1fv', None, [GLint, GLsizei, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3445 +glUniform2fv = _link_function('glUniform2fv', None, [GLint, GLsizei, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3446 +glUniform3fv = _link_function('glUniform3fv', None, [GLint, GLsizei, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3447 +glUniform4fv = _link_function('glUniform4fv', None, [GLint, GLsizei, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3448 +glUniform1iv = _link_function('glUniform1iv', None, [GLint, GLsizei, POINTER(GLint)], 'VERSION_2_0') + +# GL/glext.h:3449 +glUniform2iv = _link_function('glUniform2iv', None, [GLint, GLsizei, POINTER(GLint)], 'VERSION_2_0') + +# GL/glext.h:3450 +glUniform3iv = _link_function('glUniform3iv', None, [GLint, GLsizei, POINTER(GLint)], 'VERSION_2_0') + +# GL/glext.h:3451 +glUniform4iv = _link_function('glUniform4iv', None, [GLint, GLsizei, POINTER(GLint)], 'VERSION_2_0') + +# GL/glext.h:3452 +glUniformMatrix2fv = _link_function('glUniformMatrix2fv', None, [GLint, GLsizei, GLboolean, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3453 +glUniformMatrix3fv = _link_function('glUniformMatrix3fv', None, [GLint, GLsizei, GLboolean, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3454 +glUniformMatrix4fv = _link_function('glUniformMatrix4fv', None, [GLint, GLsizei, GLboolean, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3455 +glValidateProgram = _link_function('glValidateProgram', None, [GLuint], 'VERSION_2_0') + +# GL/glext.h:3456 +glVertexAttrib1d = _link_function('glVertexAttrib1d', None, [GLuint, GLdouble], 'VERSION_2_0') + +# GL/glext.h:3457 +glVertexAttrib1dv = _link_function('glVertexAttrib1dv', None, [GLuint, POINTER(GLdouble)], 'VERSION_2_0') + +# GL/glext.h:3458 +glVertexAttrib1f = _link_function('glVertexAttrib1f', None, [GLuint, GLfloat], 'VERSION_2_0') + +# GL/glext.h:3459 +glVertexAttrib1fv = _link_function('glVertexAttrib1fv', None, [GLuint, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3460 +glVertexAttrib1s = _link_function('glVertexAttrib1s', None, [GLuint, GLshort], 'VERSION_2_0') + +# GL/glext.h:3461 +glVertexAttrib1sv = _link_function('glVertexAttrib1sv', None, [GLuint, POINTER(GLshort)], 'VERSION_2_0') + +# GL/glext.h:3462 +glVertexAttrib2d = _link_function('glVertexAttrib2d', None, [GLuint, GLdouble, GLdouble], 'VERSION_2_0') + +# GL/glext.h:3463 +glVertexAttrib2dv = _link_function('glVertexAttrib2dv', None, [GLuint, POINTER(GLdouble)], 'VERSION_2_0') + +# GL/glext.h:3464 +glVertexAttrib2f = _link_function('glVertexAttrib2f', None, [GLuint, GLfloat, GLfloat], 'VERSION_2_0') + +# GL/glext.h:3465 +glVertexAttrib2fv = _link_function('glVertexAttrib2fv', None, [GLuint, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3466 +glVertexAttrib2s = _link_function('glVertexAttrib2s', None, [GLuint, GLshort, GLshort], 'VERSION_2_0') + +# GL/glext.h:3467 +glVertexAttrib2sv = _link_function('glVertexAttrib2sv', None, [GLuint, POINTER(GLshort)], 'VERSION_2_0') + +# GL/glext.h:3468 +glVertexAttrib3d = _link_function('glVertexAttrib3d', None, [GLuint, GLdouble, GLdouble, GLdouble], 'VERSION_2_0') + +# GL/glext.h:3469 +glVertexAttrib3dv = _link_function('glVertexAttrib3dv', None, [GLuint, POINTER(GLdouble)], 'VERSION_2_0') + +# GL/glext.h:3470 +glVertexAttrib3f = _link_function('glVertexAttrib3f', None, [GLuint, GLfloat, GLfloat, GLfloat], 'VERSION_2_0') + +# GL/glext.h:3471 +glVertexAttrib3fv = _link_function('glVertexAttrib3fv', None, [GLuint, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3472 +glVertexAttrib3s = _link_function('glVertexAttrib3s', None, [GLuint, GLshort, GLshort, GLshort], 'VERSION_2_0') + +# GL/glext.h:3473 +glVertexAttrib3sv = _link_function('glVertexAttrib3sv', None, [GLuint, POINTER(GLshort)], 'VERSION_2_0') + +# GL/glext.h:3474 +glVertexAttrib4Nbv = _link_function('glVertexAttrib4Nbv', None, [GLuint, POINTER(GLbyte)], 'VERSION_2_0') + +# GL/glext.h:3475 +glVertexAttrib4Niv = _link_function('glVertexAttrib4Niv', None, [GLuint, POINTER(GLint)], 'VERSION_2_0') + +# GL/glext.h:3476 +glVertexAttrib4Nsv = _link_function('glVertexAttrib4Nsv', None, [GLuint, POINTER(GLshort)], 'VERSION_2_0') + +# GL/glext.h:3477 +glVertexAttrib4Nub = _link_function('glVertexAttrib4Nub', None, [GLuint, GLubyte, GLubyte, GLubyte, GLubyte], 'VERSION_2_0') + +# GL/glext.h:3478 +glVertexAttrib4Nubv = _link_function('glVertexAttrib4Nubv', None, [GLuint, POINTER(GLubyte)], 'VERSION_2_0') + +# GL/glext.h:3479 +glVertexAttrib4Nuiv = _link_function('glVertexAttrib4Nuiv', None, [GLuint, POINTER(GLuint)], 'VERSION_2_0') + +# GL/glext.h:3480 +glVertexAttrib4Nusv = _link_function('glVertexAttrib4Nusv', None, [GLuint, POINTER(GLushort)], 'VERSION_2_0') + +# GL/glext.h:3481 +glVertexAttrib4bv = _link_function('glVertexAttrib4bv', None, [GLuint, POINTER(GLbyte)], 'VERSION_2_0') + +# GL/glext.h:3482 +glVertexAttrib4d = _link_function('glVertexAttrib4d', None, [GLuint, GLdouble, GLdouble, GLdouble, GLdouble], 'VERSION_2_0') + +# GL/glext.h:3483 +glVertexAttrib4dv = _link_function('glVertexAttrib4dv', None, [GLuint, POINTER(GLdouble)], 'VERSION_2_0') + +# GL/glext.h:3484 +glVertexAttrib4f = _link_function('glVertexAttrib4f', None, [GLuint, GLfloat, GLfloat, GLfloat, GLfloat], 'VERSION_2_0') + +# GL/glext.h:3485 +glVertexAttrib4fv = _link_function('glVertexAttrib4fv', None, [GLuint, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3486 +glVertexAttrib4iv = _link_function('glVertexAttrib4iv', None, [GLuint, POINTER(GLint)], 'VERSION_2_0') + +# GL/glext.h:3487 +glVertexAttrib4s = _link_function('glVertexAttrib4s', None, [GLuint, GLshort, GLshort, GLshort, GLshort], 'VERSION_2_0') + +# GL/glext.h:3488 +glVertexAttrib4sv = _link_function('glVertexAttrib4sv', None, [GLuint, POINTER(GLshort)], 'VERSION_2_0') + +# GL/glext.h:3489 +glVertexAttrib4ubv = _link_function('glVertexAttrib4ubv', None, [GLuint, POINTER(GLubyte)], 'VERSION_2_0') + +# GL/glext.h:3490 +glVertexAttrib4uiv = _link_function('glVertexAttrib4uiv', None, [GLuint, POINTER(GLuint)], 'VERSION_2_0') + +# GL/glext.h:3491 +glVertexAttrib4usv = _link_function('glVertexAttrib4usv', None, [GLuint, POINTER(GLushort)], 'VERSION_2_0') + +# GL/glext.h:3492 +glVertexAttribPointer = _link_function('glVertexAttribPointer', None, [GLuint, GLint, GLenum, GLboolean, GLsizei, POINTER(GLvoid)], 'VERSION_2_0') + +PFNGLBLENDEQUATIONSEPARATEPROC = CFUNCTYPE(None, GLenum, GLenum) # GL/glext.h:3494 +PFNGLDRAWBUFFERSPROC = CFUNCTYPE(None, GLsizei, POINTER(GLenum)) # GL/glext.h:3495 +PFNGLSTENCILOPSEPARATEPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLenum) # GL/glext.h:3496 +PFNGLSTENCILFUNCSEPARATEPROC = CFUNCTYPE(None, GLenum, GLenum, GLint, GLuint) # GL/glext.h:3497 +PFNGLSTENCILMASKSEPARATEPROC = CFUNCTYPE(None, GLenum, GLuint) # GL/glext.h:3498 +PFNGLATTACHSHADERPROC = CFUNCTYPE(None, GLuint, GLuint) # GL/glext.h:3499 +PFNGLBINDATTRIBLOCATIONPROC = CFUNCTYPE(None, GLuint, GLuint, POINTER(GLchar)) # GL/glext.h:3500 +PFNGLCOMPILESHADERPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:3501 +PFNGLCREATEPROGRAMPROC = CFUNCTYPE(GLuint) # GL/glext.h:3502 +PFNGLCREATESHADERPROC = CFUNCTYPE(GLuint, GLenum) # GL/glext.h:3503 +PFNGLDELETEPROGRAMPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:3504 +PFNGLDELETESHADERPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:3505 +PFNGLDETACHSHADERPROC = CFUNCTYPE(None, GLuint, GLuint) # GL/glext.h:3506 +PFNGLDISABLEVERTEXATTRIBARRAYPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:3507 +PFNGLENABLEVERTEXATTRIBARRAYPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:3508 +PFNGLGETACTIVEATTRIBPROC = CFUNCTYPE(None, GLuint, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLint), POINTER(GLenum), POINTER(GLchar)) # GL/glext.h:3509 +PFNGLGETACTIVEUNIFORMPROC = CFUNCTYPE(None, GLuint, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLint), POINTER(GLenum), POINTER(GLchar)) # GL/glext.h:3510 +PFNGLGETATTACHEDSHADERSPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLuint)) # GL/glext.h:3511 +PFNGLGETATTRIBLOCATIONPROC = CFUNCTYPE(GLint, GLuint, POINTER(GLchar)) # GL/glext.h:3512 +PFNGLGETPROGRAMIVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:3513 +PFNGLGETPROGRAMINFOLOGPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLchar)) # GL/glext.h:3514 +PFNGLGETSHADERIVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:3515 +PFNGLGETSHADERINFOLOGPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLchar)) # GL/glext.h:3516 +PFNGLGETSHADERSOURCEPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLchar)) # GL/glext.h:3517 +PFNGLGETUNIFORMLOCATIONPROC = CFUNCTYPE(GLint, GLuint, POINTER(GLchar)) # GL/glext.h:3518 +PFNGLGETUNIFORMFVPROC = CFUNCTYPE(None, GLuint, GLint, POINTER(GLfloat)) # GL/glext.h:3519 +PFNGLGETUNIFORMIVPROC = CFUNCTYPE(None, GLuint, GLint, POINTER(GLint)) # GL/glext.h:3520 +PFNGLGETVERTEXATTRIBDVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLdouble)) # GL/glext.h:3521 +PFNGLGETVERTEXATTRIBFVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:3522 +PFNGLGETVERTEXATTRIBIVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:3523 +PFNGLGETVERTEXATTRIBPOINTERVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(POINTER(GLvoid))) # GL/glext.h:3524 +PFNGLISPROGRAMPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:3525 +PFNGLISSHADERPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:3526 +PFNGLLINKPROGRAMPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:3527 +PFNGLSHADERSOURCEPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(POINTER(GLchar)), POINTER(GLint)) # GL/glext.h:3528 +PFNGLUSEPROGRAMPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:3529 +PFNGLUNIFORM1FPROC = CFUNCTYPE(None, GLint, GLfloat) # GL/glext.h:3530 +PFNGLUNIFORM2FPROC = CFUNCTYPE(None, GLint, GLfloat, GLfloat) # GL/glext.h:3531 +PFNGLUNIFORM3FPROC = CFUNCTYPE(None, GLint, GLfloat, GLfloat, GLfloat) # GL/glext.h:3532 +PFNGLUNIFORM4FPROC = CFUNCTYPE(None, GLint, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:3533 +PFNGLUNIFORM1IPROC = CFUNCTYPE(None, GLint, GLint) # GL/glext.h:3534 +PFNGLUNIFORM2IPROC = CFUNCTYPE(None, GLint, GLint, GLint) # GL/glext.h:3535 +PFNGLUNIFORM3IPROC = CFUNCTYPE(None, GLint, GLint, GLint, GLint) # GL/glext.h:3536 +PFNGLUNIFORM4IPROC = CFUNCTYPE(None, GLint, GLint, GLint, GLint, GLint) # GL/glext.h:3537 +PFNGLUNIFORM1FVPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLfloat)) # GL/glext.h:3538 +PFNGLUNIFORM2FVPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLfloat)) # GL/glext.h:3539 +PFNGLUNIFORM3FVPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLfloat)) # GL/glext.h:3540 +PFNGLUNIFORM4FVPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLfloat)) # GL/glext.h:3541 +PFNGLUNIFORM1IVPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLint)) # GL/glext.h:3542 +PFNGLUNIFORM2IVPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLint)) # GL/glext.h:3543 +PFNGLUNIFORM3IVPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLint)) # GL/glext.h:3544 +PFNGLUNIFORM4IVPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLint)) # GL/glext.h:3545 +PFNGLUNIFORMMATRIX2FVPROC = CFUNCTYPE(None, GLint, GLsizei, GLboolean, POINTER(GLfloat)) # GL/glext.h:3546 +PFNGLUNIFORMMATRIX3FVPROC = CFUNCTYPE(None, GLint, GLsizei, GLboolean, POINTER(GLfloat)) # GL/glext.h:3547 +PFNGLUNIFORMMATRIX4FVPROC = CFUNCTYPE(None, GLint, GLsizei, GLboolean, POINTER(GLfloat)) # GL/glext.h:3548 +PFNGLVALIDATEPROGRAMPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:3549 +PFNGLVERTEXATTRIB1DPROC = CFUNCTYPE(None, GLuint, GLdouble) # GL/glext.h:3550 +PFNGLVERTEXATTRIB1DVPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:3551 +PFNGLVERTEXATTRIB1FPROC = CFUNCTYPE(None, GLuint, GLfloat) # GL/glext.h:3552 +PFNGLVERTEXATTRIB1FVPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:3553 +PFNGLVERTEXATTRIB1SPROC = CFUNCTYPE(None, GLuint, GLshort) # GL/glext.h:3554 +PFNGLVERTEXATTRIB1SVPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:3555 +PFNGLVERTEXATTRIB2DPROC = CFUNCTYPE(None, GLuint, GLdouble, GLdouble) # GL/glext.h:3556 +PFNGLVERTEXATTRIB2DVPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:3557 +PFNGLVERTEXATTRIB2FPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat) # GL/glext.h:3558 +PFNGLVERTEXATTRIB2FVPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:3559 +PFNGLVERTEXATTRIB2SPROC = CFUNCTYPE(None, GLuint, GLshort, GLshort) # GL/glext.h:3560 +PFNGLVERTEXATTRIB2SVPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:3561 +PFNGLVERTEXATTRIB3DPROC = CFUNCTYPE(None, GLuint, GLdouble, GLdouble, GLdouble) # GL/glext.h:3562 +PFNGLVERTEXATTRIB3DVPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:3563 +PFNGLVERTEXATTRIB3FPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat) # GL/glext.h:3564 +PFNGLVERTEXATTRIB3FVPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:3565 +PFNGLVERTEXATTRIB3SPROC = CFUNCTYPE(None, GLuint, GLshort, GLshort, GLshort) # GL/glext.h:3566 +PFNGLVERTEXATTRIB3SVPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:3567 +PFNGLVERTEXATTRIB4NBVPROC = CFUNCTYPE(None, GLuint, POINTER(GLbyte)) # GL/glext.h:3568 +PFNGLVERTEXATTRIB4NIVPROC = CFUNCTYPE(None, GLuint, POINTER(GLint)) # GL/glext.h:3569 +PFNGLVERTEXATTRIB4NSVPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:3570 +PFNGLVERTEXATTRIB4NUBPROC = CFUNCTYPE(None, GLuint, GLubyte, GLubyte, GLubyte, GLubyte) # GL/glext.h:3571 +PFNGLVERTEXATTRIB4NUBVPROC = CFUNCTYPE(None, GLuint, POINTER(GLubyte)) # GL/glext.h:3572 +PFNGLVERTEXATTRIB4NUIVPROC = CFUNCTYPE(None, GLuint, POINTER(GLuint)) # GL/glext.h:3573 +PFNGLVERTEXATTRIB4NUSVPROC = CFUNCTYPE(None, GLuint, POINTER(GLushort)) # GL/glext.h:3574 +PFNGLVERTEXATTRIB4BVPROC = CFUNCTYPE(None, GLuint, POINTER(GLbyte)) # GL/glext.h:3575 +PFNGLVERTEXATTRIB4DPROC = CFUNCTYPE(None, GLuint, GLdouble, GLdouble, GLdouble, GLdouble) # GL/glext.h:3576 +PFNGLVERTEXATTRIB4DVPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:3577 +PFNGLVERTEXATTRIB4FPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:3578 +PFNGLVERTEXATTRIB4FVPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:3579 +PFNGLVERTEXATTRIB4IVPROC = CFUNCTYPE(None, GLuint, POINTER(GLint)) # GL/glext.h:3580 +PFNGLVERTEXATTRIB4SPROC = CFUNCTYPE(None, GLuint, GLshort, GLshort, GLshort, GLshort) # GL/glext.h:3581 +PFNGLVERTEXATTRIB4SVPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:3582 +PFNGLVERTEXATTRIB4UBVPROC = CFUNCTYPE(None, GLuint, POINTER(GLubyte)) # GL/glext.h:3583 +PFNGLVERTEXATTRIB4UIVPROC = CFUNCTYPE(None, GLuint, POINTER(GLuint)) # GL/glext.h:3584 +PFNGLVERTEXATTRIB4USVPROC = CFUNCTYPE(None, GLuint, POINTER(GLushort)) # GL/glext.h:3585 +PFNGLVERTEXATTRIBPOINTERPROC = CFUNCTYPE(None, GLuint, GLint, GLenum, GLboolean, GLsizei, POINTER(GLvoid)) # GL/glext.h:3586 +# ARB_multitexture (GL/glext.h:3589) +GL_ARB_multitexture = 1 # GL/glext.h:3590 +# GL/glext.h:3592 +glActiveTextureARB = _link_function('glActiveTextureARB', None, [GLenum], 'ARB_multitexture') + +# GL/glext.h:3593 +glClientActiveTextureARB = _link_function('glClientActiveTextureARB', None, [GLenum], 'ARB_multitexture') + +# GL/glext.h:3594 +glMultiTexCoord1dARB = _link_function('glMultiTexCoord1dARB', None, [GLenum, GLdouble], 'ARB_multitexture') + +# GL/glext.h:3595 +glMultiTexCoord1dvARB = _link_function('glMultiTexCoord1dvARB', None, [GLenum, POINTER(GLdouble)], 'ARB_multitexture') + +# GL/glext.h:3596 +glMultiTexCoord1fARB = _link_function('glMultiTexCoord1fARB', None, [GLenum, GLfloat], 'ARB_multitexture') + +# GL/glext.h:3597 +glMultiTexCoord1fvARB = _link_function('glMultiTexCoord1fvARB', None, [GLenum, POINTER(GLfloat)], 'ARB_multitexture') + +# GL/glext.h:3598 +glMultiTexCoord1iARB = _link_function('glMultiTexCoord1iARB', None, [GLenum, GLint], 'ARB_multitexture') + +# GL/glext.h:3599 +glMultiTexCoord1ivARB = _link_function('glMultiTexCoord1ivARB', None, [GLenum, POINTER(GLint)], 'ARB_multitexture') + +# GL/glext.h:3600 +glMultiTexCoord1sARB = _link_function('glMultiTexCoord1sARB', None, [GLenum, GLshort], 'ARB_multitexture') + +# GL/glext.h:3601 +glMultiTexCoord1svARB = _link_function('glMultiTexCoord1svARB', None, [GLenum, POINTER(GLshort)], 'ARB_multitexture') + +# GL/glext.h:3602 +glMultiTexCoord2dARB = _link_function('glMultiTexCoord2dARB', None, [GLenum, GLdouble, GLdouble], 'ARB_multitexture') + +# GL/glext.h:3603 +glMultiTexCoord2dvARB = _link_function('glMultiTexCoord2dvARB', None, [GLenum, POINTER(GLdouble)], 'ARB_multitexture') + +# GL/glext.h:3604 +glMultiTexCoord2fARB = _link_function('glMultiTexCoord2fARB', None, [GLenum, GLfloat, GLfloat], 'ARB_multitexture') + +# GL/glext.h:3605 +glMultiTexCoord2fvARB = _link_function('glMultiTexCoord2fvARB', None, [GLenum, POINTER(GLfloat)], 'ARB_multitexture') + +# GL/glext.h:3606 +glMultiTexCoord2iARB = _link_function('glMultiTexCoord2iARB', None, [GLenum, GLint, GLint], 'ARB_multitexture') + +# GL/glext.h:3607 +glMultiTexCoord2ivARB = _link_function('glMultiTexCoord2ivARB', None, [GLenum, POINTER(GLint)], 'ARB_multitexture') + +# GL/glext.h:3608 +glMultiTexCoord2sARB = _link_function('glMultiTexCoord2sARB', None, [GLenum, GLshort, GLshort], 'ARB_multitexture') + +# GL/glext.h:3609 +glMultiTexCoord2svARB = _link_function('glMultiTexCoord2svARB', None, [GLenum, POINTER(GLshort)], 'ARB_multitexture') + +# GL/glext.h:3610 +glMultiTexCoord3dARB = _link_function('glMultiTexCoord3dARB', None, [GLenum, GLdouble, GLdouble, GLdouble], 'ARB_multitexture') + +# GL/glext.h:3611 +glMultiTexCoord3dvARB = _link_function('glMultiTexCoord3dvARB', None, [GLenum, POINTER(GLdouble)], 'ARB_multitexture') + +# GL/glext.h:3612 +glMultiTexCoord3fARB = _link_function('glMultiTexCoord3fARB', None, [GLenum, GLfloat, GLfloat, GLfloat], 'ARB_multitexture') + +# GL/glext.h:3613 +glMultiTexCoord3fvARB = _link_function('glMultiTexCoord3fvARB', None, [GLenum, POINTER(GLfloat)], 'ARB_multitexture') + +# GL/glext.h:3614 +glMultiTexCoord3iARB = _link_function('glMultiTexCoord3iARB', None, [GLenum, GLint, GLint, GLint], 'ARB_multitexture') + +# GL/glext.h:3615 +glMultiTexCoord3ivARB = _link_function('glMultiTexCoord3ivARB', None, [GLenum, POINTER(GLint)], 'ARB_multitexture') + +# GL/glext.h:3616 +glMultiTexCoord3sARB = _link_function('glMultiTexCoord3sARB', None, [GLenum, GLshort, GLshort, GLshort], 'ARB_multitexture') + +# GL/glext.h:3617 +glMultiTexCoord3svARB = _link_function('glMultiTexCoord3svARB', None, [GLenum, POINTER(GLshort)], 'ARB_multitexture') + +# GL/glext.h:3618 +glMultiTexCoord4dARB = _link_function('glMultiTexCoord4dARB', None, [GLenum, GLdouble, GLdouble, GLdouble, GLdouble], 'ARB_multitexture') + +# GL/glext.h:3619 +glMultiTexCoord4dvARB = _link_function('glMultiTexCoord4dvARB', None, [GLenum, POINTER(GLdouble)], 'ARB_multitexture') + +# GL/glext.h:3620 +glMultiTexCoord4fARB = _link_function('glMultiTexCoord4fARB', None, [GLenum, GLfloat, GLfloat, GLfloat, GLfloat], 'ARB_multitexture') + +# GL/glext.h:3621 +glMultiTexCoord4fvARB = _link_function('glMultiTexCoord4fvARB', None, [GLenum, POINTER(GLfloat)], 'ARB_multitexture') + +# GL/glext.h:3622 +glMultiTexCoord4iARB = _link_function('glMultiTexCoord4iARB', None, [GLenum, GLint, GLint, GLint, GLint], 'ARB_multitexture') + +# GL/glext.h:3623 +glMultiTexCoord4ivARB = _link_function('glMultiTexCoord4ivARB', None, [GLenum, POINTER(GLint)], 'ARB_multitexture') + +# GL/glext.h:3624 +glMultiTexCoord4sARB = _link_function('glMultiTexCoord4sARB', None, [GLenum, GLshort, GLshort, GLshort, GLshort], 'ARB_multitexture') + +# GL/glext.h:3625 +glMultiTexCoord4svARB = _link_function('glMultiTexCoord4svARB', None, [GLenum, POINTER(GLshort)], 'ARB_multitexture') + +PFNGLACTIVETEXTUREARBPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:3627 +PFNGLCLIENTACTIVETEXTUREARBPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:3628 +PFNGLMULTITEXCOORD1DARBPROC = CFUNCTYPE(None, GLenum, GLdouble) # GL/glext.h:3629 +PFNGLMULTITEXCOORD1DVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:3630 +PFNGLMULTITEXCOORD1FARBPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:3631 +PFNGLMULTITEXCOORD1FVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:3632 +PFNGLMULTITEXCOORD1IARBPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:3633 +PFNGLMULTITEXCOORD1IVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:3634 +PFNGLMULTITEXCOORD1SARBPROC = CFUNCTYPE(None, GLenum, GLshort) # GL/glext.h:3635 +PFNGLMULTITEXCOORD1SVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:3636 +PFNGLMULTITEXCOORD2DARBPROC = CFUNCTYPE(None, GLenum, GLdouble, GLdouble) # GL/glext.h:3637 +PFNGLMULTITEXCOORD2DVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:3638 +PFNGLMULTITEXCOORD2FARBPROC = CFUNCTYPE(None, GLenum, GLfloat, GLfloat) # GL/glext.h:3639 +PFNGLMULTITEXCOORD2FVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:3640 +PFNGLMULTITEXCOORD2IARBPROC = CFUNCTYPE(None, GLenum, GLint, GLint) # GL/glext.h:3641 +PFNGLMULTITEXCOORD2IVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:3642 +PFNGLMULTITEXCOORD2SARBPROC = CFUNCTYPE(None, GLenum, GLshort, GLshort) # GL/glext.h:3643 +PFNGLMULTITEXCOORD2SVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:3644 +PFNGLMULTITEXCOORD3DARBPROC = CFUNCTYPE(None, GLenum, GLdouble, GLdouble, GLdouble) # GL/glext.h:3645 +PFNGLMULTITEXCOORD3DVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:3646 +PFNGLMULTITEXCOORD3FARBPROC = CFUNCTYPE(None, GLenum, GLfloat, GLfloat, GLfloat) # GL/glext.h:3647 +PFNGLMULTITEXCOORD3FVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:3648 +PFNGLMULTITEXCOORD3IARBPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint) # GL/glext.h:3649 +PFNGLMULTITEXCOORD3IVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:3650 +PFNGLMULTITEXCOORD3SARBPROC = CFUNCTYPE(None, GLenum, GLshort, GLshort, GLshort) # GL/glext.h:3651 +PFNGLMULTITEXCOORD3SVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:3652 +PFNGLMULTITEXCOORD4DARBPROC = CFUNCTYPE(None, GLenum, GLdouble, GLdouble, GLdouble, GLdouble) # GL/glext.h:3653 +PFNGLMULTITEXCOORD4DVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:3654 +PFNGLMULTITEXCOORD4FARBPROC = CFUNCTYPE(None, GLenum, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:3655 +PFNGLMULTITEXCOORD4FVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:3656 +PFNGLMULTITEXCOORD4IARBPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint) # GL/glext.h:3657 +PFNGLMULTITEXCOORD4IVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:3658 +PFNGLMULTITEXCOORD4SARBPROC = CFUNCTYPE(None, GLenum, GLshort, GLshort, GLshort, GLshort) # GL/glext.h:3659 +PFNGLMULTITEXCOORD4SVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:3660 +# ARB_transpose_matrix (GL/glext.h:3663) +GL_ARB_transpose_matrix = 1 # GL/glext.h:3664 +# GL/glext.h:3666 +glLoadTransposeMatrixfARB = _link_function('glLoadTransposeMatrixfARB', None, [POINTER(GLfloat)], 'ARB_transpose_matrix') + +# GL/glext.h:3667 +glLoadTransposeMatrixdARB = _link_function('glLoadTransposeMatrixdARB', None, [POINTER(GLdouble)], 'ARB_transpose_matrix') + +# GL/glext.h:3668 +glMultTransposeMatrixfARB = _link_function('glMultTransposeMatrixfARB', None, [POINTER(GLfloat)], 'ARB_transpose_matrix') + +# GL/glext.h:3669 +glMultTransposeMatrixdARB = _link_function('glMultTransposeMatrixdARB', None, [POINTER(GLdouble)], 'ARB_transpose_matrix') + +PFNGLLOADTRANSPOSEMATRIXFARBPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:3671 +PFNGLLOADTRANSPOSEMATRIXDARBPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:3672 +PFNGLMULTTRANSPOSEMATRIXFARBPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:3673 +PFNGLMULTTRANSPOSEMATRIXDARBPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:3674 +# ARB_multisample (GL/glext.h:3677) +GL_ARB_multisample = 1 # GL/glext.h:3678 +# GL/glext.h:3680 +glSampleCoverageARB = _link_function('glSampleCoverageARB', None, [GLclampf, GLboolean], 'ARB_multisample') + +PFNGLSAMPLECOVERAGEARBPROC = CFUNCTYPE(None, GLclampf, GLboolean) # GL/glext.h:3682 +# ARB_texture_env_add (GL/glext.h:3685) +GL_ARB_texture_env_add = 1 # GL/glext.h:3686 +# ARB_texture_cube_map (GL/glext.h:3689) +GL_ARB_texture_cube_map = 1 # GL/glext.h:3690 +# ARB_texture_compression (GL/glext.h:3693) +GL_ARB_texture_compression = 1 # GL/glext.h:3694 +# GL/glext.h:3696 +glCompressedTexImage3DARB = _link_function('glCompressedTexImage3DARB', None, [GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, POINTER(GLvoid)], 'ARB_texture_compression') + +# GL/glext.h:3697 +glCompressedTexImage2DARB = _link_function('glCompressedTexImage2DARB', None, [GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, POINTER(GLvoid)], 'ARB_texture_compression') + +# GL/glext.h:3698 +glCompressedTexImage1DARB = _link_function('glCompressedTexImage1DARB', None, [GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, POINTER(GLvoid)], 'ARB_texture_compression') + +# GL/glext.h:3699 +glCompressedTexSubImage3DARB = _link_function('glCompressedTexSubImage3DARB', None, [GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, POINTER(GLvoid)], 'ARB_texture_compression') + +# GL/glext.h:3700 +glCompressedTexSubImage2DARB = _link_function('glCompressedTexSubImage2DARB', None, [GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, POINTER(GLvoid)], 'ARB_texture_compression') + +# GL/glext.h:3701 +glCompressedTexSubImage1DARB = _link_function('glCompressedTexSubImage1DARB', None, [GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, POINTER(GLvoid)], 'ARB_texture_compression') + +# GL/glext.h:3702 +glGetCompressedTexImageARB = _link_function('glGetCompressedTexImageARB', None, [GLenum, GLint, POINTER(GLvoid)], 'ARB_texture_compression') + +PFNGLCOMPRESSEDTEXIMAGE3DARBPROC = CFUNCTYPE(None, GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, POINTER(GLvoid)) # GL/glext.h:3704 +PFNGLCOMPRESSEDTEXIMAGE2DARBPROC = CFUNCTYPE(None, GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, POINTER(GLvoid)) # GL/glext.h:3705 +PFNGLCOMPRESSEDTEXIMAGE1DARBPROC = CFUNCTYPE(None, GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, POINTER(GLvoid)) # GL/glext.h:3706 +PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:3707 +PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:3708 +PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:3709 +PFNGLGETCOMPRESSEDTEXIMAGEARBPROC = CFUNCTYPE(None, GLenum, GLint, POINTER(GLvoid)) # GL/glext.h:3710 +# ARB_texture_border_clamp (GL/glext.h:3713) +GL_ARB_texture_border_clamp = 1 # GL/glext.h:3714 +# ARB_point_parameters (GL/glext.h:3717) +GL_ARB_point_parameters = 1 # GL/glext.h:3718 +# GL/glext.h:3720 +glPointParameterfARB = _link_function('glPointParameterfARB', None, [GLenum, GLfloat], 'ARB_point_parameters') + +# GL/glext.h:3721 +glPointParameterfvARB = _link_function('glPointParameterfvARB', None, [GLenum, POINTER(GLfloat)], 'ARB_point_parameters') + +PFNGLPOINTPARAMETERFARBPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:3723 +PFNGLPOINTPARAMETERFVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:3724 +# ARB_vertex_blend (GL/glext.h:3727) +GL_ARB_vertex_blend = 1 # GL/glext.h:3728 +# GL/glext.h:3730 +glWeightbvARB = _link_function('glWeightbvARB', None, [GLint, POINTER(GLbyte)], 'ARB_vertex_blend') + +# GL/glext.h:3731 +glWeightsvARB = _link_function('glWeightsvARB', None, [GLint, POINTER(GLshort)], 'ARB_vertex_blend') + +# GL/glext.h:3732 +glWeightivARB = _link_function('glWeightivARB', None, [GLint, POINTER(GLint)], 'ARB_vertex_blend') + +# GL/glext.h:3733 +glWeightfvARB = _link_function('glWeightfvARB', None, [GLint, POINTER(GLfloat)], 'ARB_vertex_blend') + +# GL/glext.h:3734 +glWeightdvARB = _link_function('glWeightdvARB', None, [GLint, POINTER(GLdouble)], 'ARB_vertex_blend') + +# GL/glext.h:3735 +glWeightubvARB = _link_function('glWeightubvARB', None, [GLint, POINTER(GLubyte)], 'ARB_vertex_blend') + +# GL/glext.h:3736 +glWeightusvARB = _link_function('glWeightusvARB', None, [GLint, POINTER(GLushort)], 'ARB_vertex_blend') + +# GL/glext.h:3737 +glWeightuivARB = _link_function('glWeightuivARB', None, [GLint, POINTER(GLuint)], 'ARB_vertex_blend') + +# GL/glext.h:3738 +glWeightPointerARB = _link_function('glWeightPointerARB', None, [GLint, GLenum, GLsizei, POINTER(GLvoid)], 'ARB_vertex_blend') + +# GL/glext.h:3739 +glVertexBlendARB = _link_function('glVertexBlendARB', None, [GLint], 'ARB_vertex_blend') + +PFNGLWEIGHTBVARBPROC = CFUNCTYPE(None, GLint, POINTER(GLbyte)) # GL/glext.h:3741 +PFNGLWEIGHTSVARBPROC = CFUNCTYPE(None, GLint, POINTER(GLshort)) # GL/glext.h:3742 +PFNGLWEIGHTIVARBPROC = CFUNCTYPE(None, GLint, POINTER(GLint)) # GL/glext.h:3743 +PFNGLWEIGHTFVARBPROC = CFUNCTYPE(None, GLint, POINTER(GLfloat)) # GL/glext.h:3744 +PFNGLWEIGHTDVARBPROC = CFUNCTYPE(None, GLint, POINTER(GLdouble)) # GL/glext.h:3745 +PFNGLWEIGHTUBVARBPROC = CFUNCTYPE(None, GLint, POINTER(GLubyte)) # GL/glext.h:3746 +PFNGLWEIGHTUSVARBPROC = CFUNCTYPE(None, GLint, POINTER(GLushort)) # GL/glext.h:3747 +PFNGLWEIGHTUIVARBPROC = CFUNCTYPE(None, GLint, POINTER(GLuint)) # GL/glext.h:3748 +PFNGLWEIGHTPOINTERARBPROC = CFUNCTYPE(None, GLint, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:3749 +PFNGLVERTEXBLENDARBPROC = CFUNCTYPE(None, GLint) # GL/glext.h:3750 +# ARB_matrix_palette (GL/glext.h:3753) +GL_ARB_matrix_palette = 1 # GL/glext.h:3754 +# GL/glext.h:3756 +glCurrentPaletteMatrixARB = _link_function('glCurrentPaletteMatrixARB', None, [GLint], 'ARB_matrix_palette') + +# GL/glext.h:3757 +glMatrixIndexubvARB = _link_function('glMatrixIndexubvARB', None, [GLint, POINTER(GLubyte)], 'ARB_matrix_palette') + +# GL/glext.h:3758 +glMatrixIndexusvARB = _link_function('glMatrixIndexusvARB', None, [GLint, POINTER(GLushort)], 'ARB_matrix_palette') + +# GL/glext.h:3759 +glMatrixIndexuivARB = _link_function('glMatrixIndexuivARB', None, [GLint, POINTER(GLuint)], 'ARB_matrix_palette') + +# GL/glext.h:3760 +glMatrixIndexPointerARB = _link_function('glMatrixIndexPointerARB', None, [GLint, GLenum, GLsizei, POINTER(GLvoid)], 'ARB_matrix_palette') + +PFNGLCURRENTPALETTEMATRIXARBPROC = CFUNCTYPE(None, GLint) # GL/glext.h:3762 +PFNGLMATRIXINDEXUBVARBPROC = CFUNCTYPE(None, GLint, POINTER(GLubyte)) # GL/glext.h:3763 +PFNGLMATRIXINDEXUSVARBPROC = CFUNCTYPE(None, GLint, POINTER(GLushort)) # GL/glext.h:3764 +PFNGLMATRIXINDEXUIVARBPROC = CFUNCTYPE(None, GLint, POINTER(GLuint)) # GL/glext.h:3765 +PFNGLMATRIXINDEXPOINTERARBPROC = CFUNCTYPE(None, GLint, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:3766 +# ARB_texture_env_combine (GL/glext.h:3769) +GL_ARB_texture_env_combine = 1 # GL/glext.h:3770 +# ARB_texture_env_crossbar (GL/glext.h:3773) +GL_ARB_texture_env_crossbar = 1 # GL/glext.h:3774 +# ARB_texture_env_dot3 (GL/glext.h:3777) +GL_ARB_texture_env_dot3 = 1 # GL/glext.h:3778 +# ARB_texture_mirrored_repeat (GL/glext.h:3781) +GL_ARB_texture_mirrored_repeat = 1 # GL/glext.h:3782 +# ARB_depth_texture (GL/glext.h:3785) +GL_ARB_depth_texture = 1 # GL/glext.h:3786 +# ARB_shadow (GL/glext.h:3789) +GL_ARB_shadow = 1 # GL/glext.h:3790 +# ARB_shadow_ambient (GL/glext.h:3793) +GL_ARB_shadow_ambient = 1 # GL/glext.h:3794 +# ARB_window_pos (GL/glext.h:3797) +GL_ARB_window_pos = 1 # GL/glext.h:3798 +# GL/glext.h:3800 +glWindowPos2dARB = _link_function('glWindowPos2dARB', None, [GLdouble, GLdouble], 'ARB_window_pos') + +# GL/glext.h:3801 +glWindowPos2dvARB = _link_function('glWindowPos2dvARB', None, [POINTER(GLdouble)], 'ARB_window_pos') + +# GL/glext.h:3802 +glWindowPos2fARB = _link_function('glWindowPos2fARB', None, [GLfloat, GLfloat], 'ARB_window_pos') + +# GL/glext.h:3803 +glWindowPos2fvARB = _link_function('glWindowPos2fvARB', None, [POINTER(GLfloat)], 'ARB_window_pos') + +# GL/glext.h:3804 +glWindowPos2iARB = _link_function('glWindowPos2iARB', None, [GLint, GLint], 'ARB_window_pos') + +# GL/glext.h:3805 +glWindowPos2ivARB = _link_function('glWindowPos2ivARB', None, [POINTER(GLint)], 'ARB_window_pos') + +# GL/glext.h:3806 +glWindowPos2sARB = _link_function('glWindowPos2sARB', None, [GLshort, GLshort], 'ARB_window_pos') + +# GL/glext.h:3807 +glWindowPos2svARB = _link_function('glWindowPos2svARB', None, [POINTER(GLshort)], 'ARB_window_pos') + +# GL/glext.h:3808 +glWindowPos3dARB = _link_function('glWindowPos3dARB', None, [GLdouble, GLdouble, GLdouble], 'ARB_window_pos') + +# GL/glext.h:3809 +glWindowPos3dvARB = _link_function('glWindowPos3dvARB', None, [POINTER(GLdouble)], 'ARB_window_pos') + +# GL/glext.h:3810 +glWindowPos3fARB = _link_function('glWindowPos3fARB', None, [GLfloat, GLfloat, GLfloat], 'ARB_window_pos') + +# GL/glext.h:3811 +glWindowPos3fvARB = _link_function('glWindowPos3fvARB', None, [POINTER(GLfloat)], 'ARB_window_pos') + +# GL/glext.h:3812 +glWindowPos3iARB = _link_function('glWindowPos3iARB', None, [GLint, GLint, GLint], 'ARB_window_pos') + +# GL/glext.h:3813 +glWindowPos3ivARB = _link_function('glWindowPos3ivARB', None, [POINTER(GLint)], 'ARB_window_pos') + +# GL/glext.h:3814 +glWindowPos3sARB = _link_function('glWindowPos3sARB', None, [GLshort, GLshort, GLshort], 'ARB_window_pos') + +# GL/glext.h:3815 +glWindowPos3svARB = _link_function('glWindowPos3svARB', None, [POINTER(GLshort)], 'ARB_window_pos') + +PFNGLWINDOWPOS2DARBPROC = CFUNCTYPE(None, GLdouble, GLdouble) # GL/glext.h:3817 +PFNGLWINDOWPOS2DVARBPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:3818 +PFNGLWINDOWPOS2FARBPROC = CFUNCTYPE(None, GLfloat, GLfloat) # GL/glext.h:3819 +PFNGLWINDOWPOS2FVARBPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:3820 +PFNGLWINDOWPOS2IARBPROC = CFUNCTYPE(None, GLint, GLint) # GL/glext.h:3821 +PFNGLWINDOWPOS2IVARBPROC = CFUNCTYPE(None, POINTER(GLint)) # GL/glext.h:3822 +PFNGLWINDOWPOS2SARBPROC = CFUNCTYPE(None, GLshort, GLshort) # GL/glext.h:3823 +PFNGLWINDOWPOS2SVARBPROC = CFUNCTYPE(None, POINTER(GLshort)) # GL/glext.h:3824 +PFNGLWINDOWPOS3DARBPROC = CFUNCTYPE(None, GLdouble, GLdouble, GLdouble) # GL/glext.h:3825 +PFNGLWINDOWPOS3DVARBPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:3826 +PFNGLWINDOWPOS3FARBPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat) # GL/glext.h:3827 +PFNGLWINDOWPOS3FVARBPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:3828 +PFNGLWINDOWPOS3IARBPROC = CFUNCTYPE(None, GLint, GLint, GLint) # GL/glext.h:3829 +PFNGLWINDOWPOS3IVARBPROC = CFUNCTYPE(None, POINTER(GLint)) # GL/glext.h:3830 +PFNGLWINDOWPOS3SARBPROC = CFUNCTYPE(None, GLshort, GLshort, GLshort) # GL/glext.h:3831 +PFNGLWINDOWPOS3SVARBPROC = CFUNCTYPE(None, POINTER(GLshort)) # GL/glext.h:3832 +# ARB_vertex_program (GL/glext.h:3835) +GL_ARB_vertex_program = 1 # GL/glext.h:3836 +# GL/glext.h:3838 +glVertexAttrib1dARB = _link_function('glVertexAttrib1dARB', None, [GLuint, GLdouble], 'ARB_vertex_program') + +# GL/glext.h:3839 +glVertexAttrib1dvARB = _link_function('glVertexAttrib1dvARB', None, [GLuint, POINTER(GLdouble)], 'ARB_vertex_program') + +# GL/glext.h:3840 +glVertexAttrib1fARB = _link_function('glVertexAttrib1fARB', None, [GLuint, GLfloat], 'ARB_vertex_program') + +# GL/glext.h:3841 +glVertexAttrib1fvARB = _link_function('glVertexAttrib1fvARB', None, [GLuint, POINTER(GLfloat)], 'ARB_vertex_program') + +# GL/glext.h:3842 +glVertexAttrib1sARB = _link_function('glVertexAttrib1sARB', None, [GLuint, GLshort], 'ARB_vertex_program') + +# GL/glext.h:3843 +glVertexAttrib1svARB = _link_function('glVertexAttrib1svARB', None, [GLuint, POINTER(GLshort)], 'ARB_vertex_program') + +# GL/glext.h:3844 +glVertexAttrib2dARB = _link_function('glVertexAttrib2dARB', None, [GLuint, GLdouble, GLdouble], 'ARB_vertex_program') + +# GL/glext.h:3845 +glVertexAttrib2dvARB = _link_function('glVertexAttrib2dvARB', None, [GLuint, POINTER(GLdouble)], 'ARB_vertex_program') + +# GL/glext.h:3846 +glVertexAttrib2fARB = _link_function('glVertexAttrib2fARB', None, [GLuint, GLfloat, GLfloat], 'ARB_vertex_program') + +# GL/glext.h:3847 +glVertexAttrib2fvARB = _link_function('glVertexAttrib2fvARB', None, [GLuint, POINTER(GLfloat)], 'ARB_vertex_program') + +# GL/glext.h:3848 +glVertexAttrib2sARB = _link_function('glVertexAttrib2sARB', None, [GLuint, GLshort, GLshort], 'ARB_vertex_program') + +# GL/glext.h:3849 +glVertexAttrib2svARB = _link_function('glVertexAttrib2svARB', None, [GLuint, POINTER(GLshort)], 'ARB_vertex_program') + +# GL/glext.h:3850 +glVertexAttrib3dARB = _link_function('glVertexAttrib3dARB', None, [GLuint, GLdouble, GLdouble, GLdouble], 'ARB_vertex_program') + +# GL/glext.h:3851 +glVertexAttrib3dvARB = _link_function('glVertexAttrib3dvARB', None, [GLuint, POINTER(GLdouble)], 'ARB_vertex_program') + +# GL/glext.h:3852 +glVertexAttrib3fARB = _link_function('glVertexAttrib3fARB', None, [GLuint, GLfloat, GLfloat, GLfloat], 'ARB_vertex_program') + +# GL/glext.h:3853 +glVertexAttrib3fvARB = _link_function('glVertexAttrib3fvARB', None, [GLuint, POINTER(GLfloat)], 'ARB_vertex_program') + +# GL/glext.h:3854 +glVertexAttrib3sARB = _link_function('glVertexAttrib3sARB', None, [GLuint, GLshort, GLshort, GLshort], 'ARB_vertex_program') + +# GL/glext.h:3855 +glVertexAttrib3svARB = _link_function('glVertexAttrib3svARB', None, [GLuint, POINTER(GLshort)], 'ARB_vertex_program') + +# GL/glext.h:3856 +glVertexAttrib4NbvARB = _link_function('glVertexAttrib4NbvARB', None, [GLuint, POINTER(GLbyte)], 'ARB_vertex_program') + +# GL/glext.h:3857 +glVertexAttrib4NivARB = _link_function('glVertexAttrib4NivARB', None, [GLuint, POINTER(GLint)], 'ARB_vertex_program') + +# GL/glext.h:3858 +glVertexAttrib4NsvARB = _link_function('glVertexAttrib4NsvARB', None, [GLuint, POINTER(GLshort)], 'ARB_vertex_program') + +# GL/glext.h:3859 +glVertexAttrib4NubARB = _link_function('glVertexAttrib4NubARB', None, [GLuint, GLubyte, GLubyte, GLubyte, GLubyte], 'ARB_vertex_program') + +# GL/glext.h:3860 +glVertexAttrib4NubvARB = _link_function('glVertexAttrib4NubvARB', None, [GLuint, POINTER(GLubyte)], 'ARB_vertex_program') + +# GL/glext.h:3861 +glVertexAttrib4NuivARB = _link_function('glVertexAttrib4NuivARB', None, [GLuint, POINTER(GLuint)], 'ARB_vertex_program') + +# GL/glext.h:3862 +glVertexAttrib4NusvARB = _link_function('glVertexAttrib4NusvARB', None, [GLuint, POINTER(GLushort)], 'ARB_vertex_program') + +# GL/glext.h:3863 +glVertexAttrib4bvARB = _link_function('glVertexAttrib4bvARB', None, [GLuint, POINTER(GLbyte)], 'ARB_vertex_program') + +# GL/glext.h:3864 +glVertexAttrib4dARB = _link_function('glVertexAttrib4dARB', None, [GLuint, GLdouble, GLdouble, GLdouble, GLdouble], 'ARB_vertex_program') + +# GL/glext.h:3865 +glVertexAttrib4dvARB = _link_function('glVertexAttrib4dvARB', None, [GLuint, POINTER(GLdouble)], 'ARB_vertex_program') + +# GL/glext.h:3866 +glVertexAttrib4fARB = _link_function('glVertexAttrib4fARB', None, [GLuint, GLfloat, GLfloat, GLfloat, GLfloat], 'ARB_vertex_program') + +# GL/glext.h:3867 +glVertexAttrib4fvARB = _link_function('glVertexAttrib4fvARB', None, [GLuint, POINTER(GLfloat)], 'ARB_vertex_program') + +# GL/glext.h:3868 +glVertexAttrib4ivARB = _link_function('glVertexAttrib4ivARB', None, [GLuint, POINTER(GLint)], 'ARB_vertex_program') + +# GL/glext.h:3869 +glVertexAttrib4sARB = _link_function('glVertexAttrib4sARB', None, [GLuint, GLshort, GLshort, GLshort, GLshort], 'ARB_vertex_program') + +# GL/glext.h:3870 +glVertexAttrib4svARB = _link_function('glVertexAttrib4svARB', None, [GLuint, POINTER(GLshort)], 'ARB_vertex_program') + +# GL/glext.h:3871 +glVertexAttrib4ubvARB = _link_function('glVertexAttrib4ubvARB', None, [GLuint, POINTER(GLubyte)], 'ARB_vertex_program') + +# GL/glext.h:3872 +glVertexAttrib4uivARB = _link_function('glVertexAttrib4uivARB', None, [GLuint, POINTER(GLuint)], 'ARB_vertex_program') + +# GL/glext.h:3873 +glVertexAttrib4usvARB = _link_function('glVertexAttrib4usvARB', None, [GLuint, POINTER(GLushort)], 'ARB_vertex_program') + +# GL/glext.h:3874 +glVertexAttribPointerARB = _link_function('glVertexAttribPointerARB', None, [GLuint, GLint, GLenum, GLboolean, GLsizei, POINTER(GLvoid)], 'ARB_vertex_program') + +# GL/glext.h:3875 +glEnableVertexAttribArrayARB = _link_function('glEnableVertexAttribArrayARB', None, [GLuint], 'ARB_vertex_program') + +# GL/glext.h:3876 +glDisableVertexAttribArrayARB = _link_function('glDisableVertexAttribArrayARB', None, [GLuint], 'ARB_vertex_program') + +# GL/glext.h:3877 +glProgramStringARB = _link_function('glProgramStringARB', None, [GLenum, GLenum, GLsizei, POINTER(GLvoid)], 'ARB_vertex_program') + +# GL/glext.h:3878 +glBindProgramARB = _link_function('glBindProgramARB', None, [GLenum, GLuint], 'ARB_vertex_program') + +# GL/glext.h:3879 +glDeleteProgramsARB = _link_function('glDeleteProgramsARB', None, [GLsizei, POINTER(GLuint)], 'ARB_vertex_program') + +# GL/glext.h:3880 +glGenProgramsARB = _link_function('glGenProgramsARB', None, [GLsizei, POINTER(GLuint)], 'ARB_vertex_program') + +# GL/glext.h:3881 +glProgramEnvParameter4dARB = _link_function('glProgramEnvParameter4dARB', None, [GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble], 'ARB_vertex_program') + +# GL/glext.h:3882 +glProgramEnvParameter4dvARB = _link_function('glProgramEnvParameter4dvARB', None, [GLenum, GLuint, POINTER(GLdouble)], 'ARB_vertex_program') + +# GL/glext.h:3883 +glProgramEnvParameter4fARB = _link_function('glProgramEnvParameter4fARB', None, [GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat], 'ARB_vertex_program') + +# GL/glext.h:3884 +glProgramEnvParameter4fvARB = _link_function('glProgramEnvParameter4fvARB', None, [GLenum, GLuint, POINTER(GLfloat)], 'ARB_vertex_program') + +# GL/glext.h:3885 +glProgramLocalParameter4dARB = _link_function('glProgramLocalParameter4dARB', None, [GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble], 'ARB_vertex_program') + +# GL/glext.h:3886 +glProgramLocalParameter4dvARB = _link_function('glProgramLocalParameter4dvARB', None, [GLenum, GLuint, POINTER(GLdouble)], 'ARB_vertex_program') + +# GL/glext.h:3887 +glProgramLocalParameter4fARB = _link_function('glProgramLocalParameter4fARB', None, [GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat], 'ARB_vertex_program') + +# GL/glext.h:3888 +glProgramLocalParameter4fvARB = _link_function('glProgramLocalParameter4fvARB', None, [GLenum, GLuint, POINTER(GLfloat)], 'ARB_vertex_program') + +# GL/glext.h:3889 +glGetProgramEnvParameterdvARB = _link_function('glGetProgramEnvParameterdvARB', None, [GLenum, GLuint, POINTER(GLdouble)], 'ARB_vertex_program') + +# GL/glext.h:3890 +glGetProgramEnvParameterfvARB = _link_function('glGetProgramEnvParameterfvARB', None, [GLenum, GLuint, POINTER(GLfloat)], 'ARB_vertex_program') + +# GL/glext.h:3891 +glGetProgramLocalParameterdvARB = _link_function('glGetProgramLocalParameterdvARB', None, [GLenum, GLuint, POINTER(GLdouble)], 'ARB_vertex_program') + +# GL/glext.h:3892 +glGetProgramLocalParameterfvARB = _link_function('glGetProgramLocalParameterfvARB', None, [GLenum, GLuint, POINTER(GLfloat)], 'ARB_vertex_program') + +# GL/glext.h:3893 +glGetProgramivARB = _link_function('glGetProgramivARB', None, [GLenum, GLenum, POINTER(GLint)], 'ARB_vertex_program') + +# GL/glext.h:3894 +glGetProgramStringARB = _link_function('glGetProgramStringARB', None, [GLenum, GLenum, POINTER(GLvoid)], 'ARB_vertex_program') + +# GL/glext.h:3895 +glGetVertexAttribdvARB = _link_function('glGetVertexAttribdvARB', None, [GLuint, GLenum, POINTER(GLdouble)], 'ARB_vertex_program') + +# GL/glext.h:3896 +glGetVertexAttribfvARB = _link_function('glGetVertexAttribfvARB', None, [GLuint, GLenum, POINTER(GLfloat)], 'ARB_vertex_program') + +# GL/glext.h:3897 +glGetVertexAttribivARB = _link_function('glGetVertexAttribivARB', None, [GLuint, GLenum, POINTER(GLint)], 'ARB_vertex_program') + +# GL/glext.h:3898 +glGetVertexAttribPointervARB = _link_function('glGetVertexAttribPointervARB', None, [GLuint, GLenum, POINTER(POINTER(GLvoid))], 'ARB_vertex_program') + +# GL/glext.h:3899 +glIsProgramARB = _link_function('glIsProgramARB', GLboolean, [GLuint], 'ARB_vertex_program') + +PFNGLVERTEXATTRIB1DARBPROC = CFUNCTYPE(None, GLuint, GLdouble) # GL/glext.h:3901 +PFNGLVERTEXATTRIB1DVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:3902 +PFNGLVERTEXATTRIB1FARBPROC = CFUNCTYPE(None, GLuint, GLfloat) # GL/glext.h:3903 +PFNGLVERTEXATTRIB1FVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:3904 +PFNGLVERTEXATTRIB1SARBPROC = CFUNCTYPE(None, GLuint, GLshort) # GL/glext.h:3905 +PFNGLVERTEXATTRIB1SVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:3906 +PFNGLVERTEXATTRIB2DARBPROC = CFUNCTYPE(None, GLuint, GLdouble, GLdouble) # GL/glext.h:3907 +PFNGLVERTEXATTRIB2DVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:3908 +PFNGLVERTEXATTRIB2FARBPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat) # GL/glext.h:3909 +PFNGLVERTEXATTRIB2FVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:3910 +PFNGLVERTEXATTRIB2SARBPROC = CFUNCTYPE(None, GLuint, GLshort, GLshort) # GL/glext.h:3911 +PFNGLVERTEXATTRIB2SVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:3912 +PFNGLVERTEXATTRIB3DARBPROC = CFUNCTYPE(None, GLuint, GLdouble, GLdouble, GLdouble) # GL/glext.h:3913 +PFNGLVERTEXATTRIB3DVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:3914 +PFNGLVERTEXATTRIB3FARBPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat) # GL/glext.h:3915 +PFNGLVERTEXATTRIB3FVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:3916 +PFNGLVERTEXATTRIB3SARBPROC = CFUNCTYPE(None, GLuint, GLshort, GLshort, GLshort) # GL/glext.h:3917 +PFNGLVERTEXATTRIB3SVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:3918 +PFNGLVERTEXATTRIB4NBVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLbyte)) # GL/glext.h:3919 +PFNGLVERTEXATTRIB4NIVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLint)) # GL/glext.h:3920 +PFNGLVERTEXATTRIB4NSVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:3921 +PFNGLVERTEXATTRIB4NUBARBPROC = CFUNCTYPE(None, GLuint, GLubyte, GLubyte, GLubyte, GLubyte) # GL/glext.h:3922 +PFNGLVERTEXATTRIB4NUBVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLubyte)) # GL/glext.h:3923 +PFNGLVERTEXATTRIB4NUIVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLuint)) # GL/glext.h:3924 +PFNGLVERTEXATTRIB4NUSVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLushort)) # GL/glext.h:3925 +PFNGLVERTEXATTRIB4BVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLbyte)) # GL/glext.h:3926 +PFNGLVERTEXATTRIB4DARBPROC = CFUNCTYPE(None, GLuint, GLdouble, GLdouble, GLdouble, GLdouble) # GL/glext.h:3927 +PFNGLVERTEXATTRIB4DVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:3928 +PFNGLVERTEXATTRIB4FARBPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:3929 +PFNGLVERTEXATTRIB4FVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:3930 +PFNGLVERTEXATTRIB4IVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLint)) # GL/glext.h:3931 +PFNGLVERTEXATTRIB4SARBPROC = CFUNCTYPE(None, GLuint, GLshort, GLshort, GLshort, GLshort) # GL/glext.h:3932 +PFNGLVERTEXATTRIB4SVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:3933 +PFNGLVERTEXATTRIB4UBVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLubyte)) # GL/glext.h:3934 +PFNGLVERTEXATTRIB4UIVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLuint)) # GL/glext.h:3935 +PFNGLVERTEXATTRIB4USVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLushort)) # GL/glext.h:3936 +PFNGLVERTEXATTRIBPOINTERARBPROC = CFUNCTYPE(None, GLuint, GLint, GLenum, GLboolean, GLsizei, POINTER(GLvoid)) # GL/glext.h:3937 +PFNGLENABLEVERTEXATTRIBARRAYARBPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:3938 +PFNGLDISABLEVERTEXATTRIBARRAYARBPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:3939 +PFNGLPROGRAMSTRINGARBPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:3940 +PFNGLBINDPROGRAMARBPROC = CFUNCTYPE(None, GLenum, GLuint) # GL/glext.h:3941 +PFNGLDELETEPROGRAMSARBPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:3942 +PFNGLGENPROGRAMSARBPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:3943 +PFNGLPROGRAMENVPARAMETER4DARBPROC = CFUNCTYPE(None, GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble) # GL/glext.h:3944 +PFNGLPROGRAMENVPARAMETER4DVARBPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLdouble)) # GL/glext.h:3945 +PFNGLPROGRAMENVPARAMETER4FARBPROC = CFUNCTYPE(None, GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:3946 +PFNGLPROGRAMENVPARAMETER4FVARBPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLfloat)) # GL/glext.h:3947 +PFNGLPROGRAMLOCALPARAMETER4DARBPROC = CFUNCTYPE(None, GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble) # GL/glext.h:3948 +PFNGLPROGRAMLOCALPARAMETER4DVARBPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLdouble)) # GL/glext.h:3949 +PFNGLPROGRAMLOCALPARAMETER4FARBPROC = CFUNCTYPE(None, GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:3950 +PFNGLPROGRAMLOCALPARAMETER4FVARBPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLfloat)) # GL/glext.h:3951 +PFNGLGETPROGRAMENVPARAMETERDVARBPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLdouble)) # GL/glext.h:3952 +PFNGLGETPROGRAMENVPARAMETERFVARBPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLfloat)) # GL/glext.h:3953 +PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLdouble)) # GL/glext.h:3954 +PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLfloat)) # GL/glext.h:3955 +PFNGLGETPROGRAMIVARBPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:3956 +PFNGLGETPROGRAMSTRINGARBPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:3957 +PFNGLGETVERTEXATTRIBDVARBPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLdouble)) # GL/glext.h:3958 +PFNGLGETVERTEXATTRIBFVARBPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:3959 +PFNGLGETVERTEXATTRIBIVARBPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:3960 +PFNGLGETVERTEXATTRIBPOINTERVARBPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(POINTER(GLvoid))) # GL/glext.h:3961 +PFNGLISPROGRAMARBPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:3962 +# ARB_fragment_program (GL/glext.h:3965) +GL_ARB_fragment_program = 1 # GL/glext.h:3966 +# ARB_vertex_buffer_object (GL/glext.h:3970) +GL_ARB_vertex_buffer_object = 1 # GL/glext.h:3971 +# GL/glext.h:3973 +glBindBufferARB = _link_function('glBindBufferARB', None, [GLenum, GLuint], 'ARB_vertex_buffer_object') + +# GL/glext.h:3974 +glDeleteBuffersARB = _link_function('glDeleteBuffersARB', None, [GLsizei, POINTER(GLuint)], 'ARB_vertex_buffer_object') + +# GL/glext.h:3975 +glGenBuffersARB = _link_function('glGenBuffersARB', None, [GLsizei, POINTER(GLuint)], 'ARB_vertex_buffer_object') + +# GL/glext.h:3976 +glIsBufferARB = _link_function('glIsBufferARB', GLboolean, [GLuint], 'ARB_vertex_buffer_object') + +# GL/glext.h:3977 +glBufferDataARB = _link_function('glBufferDataARB', None, [GLenum, GLsizeiptrARB, POINTER(GLvoid), GLenum], 'ARB_vertex_buffer_object') + +# GL/glext.h:3978 +glBufferSubDataARB = _link_function('glBufferSubDataARB', None, [GLenum, GLintptrARB, GLsizeiptrARB, POINTER(GLvoid)], 'ARB_vertex_buffer_object') + +# GL/glext.h:3979 +glGetBufferSubDataARB = _link_function('glGetBufferSubDataARB', None, [GLenum, GLintptrARB, GLsizeiptrARB, POINTER(GLvoid)], 'ARB_vertex_buffer_object') + +# GL/glext.h:3980 +glMapBufferARB = _link_function('glMapBufferARB', POINTER(GLvoid), [GLenum, GLenum], 'ARB_vertex_buffer_object') + +# GL/glext.h:3981 +glUnmapBufferARB = _link_function('glUnmapBufferARB', GLboolean, [GLenum], 'ARB_vertex_buffer_object') + +# GL/glext.h:3982 +glGetBufferParameterivARB = _link_function('glGetBufferParameterivARB', None, [GLenum, GLenum, POINTER(GLint)], 'ARB_vertex_buffer_object') + +# GL/glext.h:3983 +glGetBufferPointervARB = _link_function('glGetBufferPointervARB', None, [GLenum, GLenum, POINTER(POINTER(GLvoid))], 'ARB_vertex_buffer_object') + +PFNGLBINDBUFFERARBPROC = CFUNCTYPE(None, GLenum, GLuint) # GL/glext.h:3985 +PFNGLDELETEBUFFERSARBPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:3986 +PFNGLGENBUFFERSARBPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:3987 +PFNGLISBUFFERARBPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:3988 +PFNGLBUFFERDATAARBPROC = CFUNCTYPE(None, GLenum, GLsizeiptrARB, POINTER(GLvoid), GLenum) # GL/glext.h:3989 +PFNGLBUFFERSUBDATAARBPROC = CFUNCTYPE(None, GLenum, GLintptrARB, GLsizeiptrARB, POINTER(GLvoid)) # GL/glext.h:3990 +PFNGLGETBUFFERSUBDATAARBPROC = CFUNCTYPE(None, GLenum, GLintptrARB, GLsizeiptrARB, POINTER(GLvoid)) # GL/glext.h:3991 +PFNGLMAPBUFFERARBPROC = CFUNCTYPE(POINTER(GLvoid), GLenum, GLenum) # GL/glext.h:3992 +PFNGLUNMAPBUFFERARBPROC = CFUNCTYPE(GLboolean, GLenum) # GL/glext.h:3993 +PFNGLGETBUFFERPARAMETERIVARBPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:3994 +PFNGLGETBUFFERPOINTERVARBPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(POINTER(GLvoid))) # GL/glext.h:3995 +# ARB_occlusion_query (GL/glext.h:3998) +GL_ARB_occlusion_query = 1 # GL/glext.h:3999 +# GL/glext.h:4001 +glGenQueriesARB = _link_function('glGenQueriesARB', None, [GLsizei, POINTER(GLuint)], 'ARB_occlusion_query') + +# GL/glext.h:4002 +glDeleteQueriesARB = _link_function('glDeleteQueriesARB', None, [GLsizei, POINTER(GLuint)], 'ARB_occlusion_query') + +# GL/glext.h:4003 +glIsQueryARB = _link_function('glIsQueryARB', GLboolean, [GLuint], 'ARB_occlusion_query') + +# GL/glext.h:4004 +glBeginQueryARB = _link_function('glBeginQueryARB', None, [GLenum, GLuint], 'ARB_occlusion_query') + +# GL/glext.h:4005 +glEndQueryARB = _link_function('glEndQueryARB', None, [GLenum], 'ARB_occlusion_query') + +# GL/glext.h:4006 +glGetQueryivARB = _link_function('glGetQueryivARB', None, [GLenum, GLenum, POINTER(GLint)], 'ARB_occlusion_query') + +# GL/glext.h:4007 +glGetQueryObjectivARB = _link_function('glGetQueryObjectivARB', None, [GLuint, GLenum, POINTER(GLint)], 'ARB_occlusion_query') + +# GL/glext.h:4008 +glGetQueryObjectuivARB = _link_function('glGetQueryObjectuivARB', None, [GLuint, GLenum, POINTER(GLuint)], 'ARB_occlusion_query') + +PFNGLGENQUERIESARBPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:4010 +PFNGLDELETEQUERIESARBPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:4011 +PFNGLISQUERYARBPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:4012 +PFNGLBEGINQUERYARBPROC = CFUNCTYPE(None, GLenum, GLuint) # GL/glext.h:4013 +PFNGLENDQUERYARBPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:4014 +PFNGLGETQUERYIVARBPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4015 +PFNGLGETQUERYOBJECTIVARBPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:4016 +PFNGLGETQUERYOBJECTUIVARBPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLuint)) # GL/glext.h:4017 +# ARB_shader_objects (GL/glext.h:4020) +GL_ARB_shader_objects = 1 # GL/glext.h:4021 +# GL/glext.h:4023 +glDeleteObjectARB = _link_function('glDeleteObjectARB', None, [GLhandleARB], 'ARB_shader_objects') + +# GL/glext.h:4024 +glGetHandleARB = _link_function('glGetHandleARB', GLhandleARB, [GLenum], 'ARB_shader_objects') + +# GL/glext.h:4025 +glDetachObjectARB = _link_function('glDetachObjectARB', None, [GLhandleARB, GLhandleARB], 'ARB_shader_objects') + +# GL/glext.h:4026 +glCreateShaderObjectARB = _link_function('glCreateShaderObjectARB', GLhandleARB, [GLenum], 'ARB_shader_objects') + +# GL/glext.h:4027 +glShaderSourceARB = _link_function('glShaderSourceARB', None, [GLhandleARB, GLsizei, POINTER(POINTER(GLcharARB)), POINTER(GLint)], 'ARB_shader_objects') + +# GL/glext.h:4028 +glCompileShaderARB = _link_function('glCompileShaderARB', None, [GLhandleARB], 'ARB_shader_objects') + +# GL/glext.h:4029 +glCreateProgramObjectARB = _link_function('glCreateProgramObjectARB', GLhandleARB, [], 'ARB_shader_objects') + +# GL/glext.h:4030 +glAttachObjectARB = _link_function('glAttachObjectARB', None, [GLhandleARB, GLhandleARB], 'ARB_shader_objects') + +# GL/glext.h:4031 +glLinkProgramARB = _link_function('glLinkProgramARB', None, [GLhandleARB], 'ARB_shader_objects') + +# GL/glext.h:4032 +glUseProgramObjectARB = _link_function('glUseProgramObjectARB', None, [GLhandleARB], 'ARB_shader_objects') + +# GL/glext.h:4033 +glValidateProgramARB = _link_function('glValidateProgramARB', None, [GLhandleARB], 'ARB_shader_objects') + +# GL/glext.h:4034 +glUniform1fARB = _link_function('glUniform1fARB', None, [GLint, GLfloat], 'ARB_shader_objects') + +# GL/glext.h:4035 +glUniform2fARB = _link_function('glUniform2fARB', None, [GLint, GLfloat, GLfloat], 'ARB_shader_objects') + +# GL/glext.h:4036 +glUniform3fARB = _link_function('glUniform3fARB', None, [GLint, GLfloat, GLfloat, GLfloat], 'ARB_shader_objects') + +# GL/glext.h:4037 +glUniform4fARB = _link_function('glUniform4fARB', None, [GLint, GLfloat, GLfloat, GLfloat, GLfloat], 'ARB_shader_objects') + +# GL/glext.h:4038 +glUniform1iARB = _link_function('glUniform1iARB', None, [GLint, GLint], 'ARB_shader_objects') + +# GL/glext.h:4039 +glUniform2iARB = _link_function('glUniform2iARB', None, [GLint, GLint, GLint], 'ARB_shader_objects') + +# GL/glext.h:4040 +glUniform3iARB = _link_function('glUniform3iARB', None, [GLint, GLint, GLint, GLint], 'ARB_shader_objects') + +# GL/glext.h:4041 +glUniform4iARB = _link_function('glUniform4iARB', None, [GLint, GLint, GLint, GLint, GLint], 'ARB_shader_objects') + +# GL/glext.h:4042 +glUniform1fvARB = _link_function('glUniform1fvARB', None, [GLint, GLsizei, POINTER(GLfloat)], 'ARB_shader_objects') + +# GL/glext.h:4043 +glUniform2fvARB = _link_function('glUniform2fvARB', None, [GLint, GLsizei, POINTER(GLfloat)], 'ARB_shader_objects') + +# GL/glext.h:4044 +glUniform3fvARB = _link_function('glUniform3fvARB', None, [GLint, GLsizei, POINTER(GLfloat)], 'ARB_shader_objects') + +# GL/glext.h:4045 +glUniform4fvARB = _link_function('glUniform4fvARB', None, [GLint, GLsizei, POINTER(GLfloat)], 'ARB_shader_objects') + +# GL/glext.h:4046 +glUniform1ivARB = _link_function('glUniform1ivARB', None, [GLint, GLsizei, POINTER(GLint)], 'ARB_shader_objects') + +# GL/glext.h:4047 +glUniform2ivARB = _link_function('glUniform2ivARB', None, [GLint, GLsizei, POINTER(GLint)], 'ARB_shader_objects') + +# GL/glext.h:4048 +glUniform3ivARB = _link_function('glUniform3ivARB', None, [GLint, GLsizei, POINTER(GLint)], 'ARB_shader_objects') + +# GL/glext.h:4049 +glUniform4ivARB = _link_function('glUniform4ivARB', None, [GLint, GLsizei, POINTER(GLint)], 'ARB_shader_objects') + +# GL/glext.h:4050 +glUniformMatrix2fvARB = _link_function('glUniformMatrix2fvARB', None, [GLint, GLsizei, GLboolean, POINTER(GLfloat)], 'ARB_shader_objects') + +# GL/glext.h:4051 +glUniformMatrix3fvARB = _link_function('glUniformMatrix3fvARB', None, [GLint, GLsizei, GLboolean, POINTER(GLfloat)], 'ARB_shader_objects') + +# GL/glext.h:4052 +glUniformMatrix4fvARB = _link_function('glUniformMatrix4fvARB', None, [GLint, GLsizei, GLboolean, POINTER(GLfloat)], 'ARB_shader_objects') + +# GL/glext.h:4053 +glGetObjectParameterfvARB = _link_function('glGetObjectParameterfvARB', None, [GLhandleARB, GLenum, POINTER(GLfloat)], 'ARB_shader_objects') + +# GL/glext.h:4054 +glGetObjectParameterivARB = _link_function('glGetObjectParameterivARB', None, [GLhandleARB, GLenum, POINTER(GLint)], 'ARB_shader_objects') + +# GL/glext.h:4055 +glGetInfoLogARB = _link_function('glGetInfoLogARB', None, [GLhandleARB, GLsizei, POINTER(GLsizei), POINTER(GLcharARB)], 'ARB_shader_objects') + +# GL/glext.h:4056 +glGetAttachedObjectsARB = _link_function('glGetAttachedObjectsARB', None, [GLhandleARB, GLsizei, POINTER(GLsizei), POINTER(GLhandleARB)], 'ARB_shader_objects') + +# GL/glext.h:4057 +glGetUniformLocationARB = _link_function('glGetUniformLocationARB', GLint, [GLhandleARB, POINTER(GLcharARB)], 'ARB_shader_objects') + +# GL/glext.h:4058 +glGetActiveUniformARB = _link_function('glGetActiveUniformARB', None, [GLhandleARB, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLint), POINTER(GLenum), POINTER(GLcharARB)], 'ARB_shader_objects') + +# GL/glext.h:4059 +glGetUniformfvARB = _link_function('glGetUniformfvARB', None, [GLhandleARB, GLint, POINTER(GLfloat)], 'ARB_shader_objects') + +# GL/glext.h:4060 +glGetUniformivARB = _link_function('glGetUniformivARB', None, [GLhandleARB, GLint, POINTER(GLint)], 'ARB_shader_objects') + +# GL/glext.h:4061 +glGetShaderSourceARB = _link_function('glGetShaderSourceARB', None, [GLhandleARB, GLsizei, POINTER(GLsizei), POINTER(GLcharARB)], 'ARB_shader_objects') + +PFNGLDELETEOBJECTARBPROC = CFUNCTYPE(None, GLhandleARB) # GL/glext.h:4063 +PFNGLGETHANDLEARBPROC = CFUNCTYPE(GLhandleARB, GLenum) # GL/glext.h:4064 +PFNGLDETACHOBJECTARBPROC = CFUNCTYPE(None, GLhandleARB, GLhandleARB) # GL/glext.h:4065 +PFNGLCREATESHADEROBJECTARBPROC = CFUNCTYPE(GLhandleARB, GLenum) # GL/glext.h:4066 +PFNGLSHADERSOURCEARBPROC = CFUNCTYPE(None, GLhandleARB, GLsizei, POINTER(POINTER(GLcharARB)), POINTER(GLint)) # GL/glext.h:4067 +PFNGLCOMPILESHADERARBPROC = CFUNCTYPE(None, GLhandleARB) # GL/glext.h:4068 +PFNGLCREATEPROGRAMOBJECTARBPROC = CFUNCTYPE(GLhandleARB) # GL/glext.h:4069 +PFNGLATTACHOBJECTARBPROC = CFUNCTYPE(None, GLhandleARB, GLhandleARB) # GL/glext.h:4070 +PFNGLLINKPROGRAMARBPROC = CFUNCTYPE(None, GLhandleARB) # GL/glext.h:4071 +PFNGLUSEPROGRAMOBJECTARBPROC = CFUNCTYPE(None, GLhandleARB) # GL/glext.h:4072 +PFNGLVALIDATEPROGRAMARBPROC = CFUNCTYPE(None, GLhandleARB) # GL/glext.h:4073 +PFNGLUNIFORM1FARBPROC = CFUNCTYPE(None, GLint, GLfloat) # GL/glext.h:4074 +PFNGLUNIFORM2FARBPROC = CFUNCTYPE(None, GLint, GLfloat, GLfloat) # GL/glext.h:4075 +PFNGLUNIFORM3FARBPROC = CFUNCTYPE(None, GLint, GLfloat, GLfloat, GLfloat) # GL/glext.h:4076 +PFNGLUNIFORM4FARBPROC = CFUNCTYPE(None, GLint, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:4077 +PFNGLUNIFORM1IARBPROC = CFUNCTYPE(None, GLint, GLint) # GL/glext.h:4078 +PFNGLUNIFORM2IARBPROC = CFUNCTYPE(None, GLint, GLint, GLint) # GL/glext.h:4079 +PFNGLUNIFORM3IARBPROC = CFUNCTYPE(None, GLint, GLint, GLint, GLint) # GL/glext.h:4080 +PFNGLUNIFORM4IARBPROC = CFUNCTYPE(None, GLint, GLint, GLint, GLint, GLint) # GL/glext.h:4081 +PFNGLUNIFORM1FVARBPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLfloat)) # GL/glext.h:4082 +PFNGLUNIFORM2FVARBPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLfloat)) # GL/glext.h:4083 +PFNGLUNIFORM3FVARBPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLfloat)) # GL/glext.h:4084 +PFNGLUNIFORM4FVARBPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLfloat)) # GL/glext.h:4085 +PFNGLUNIFORM1IVARBPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLint)) # GL/glext.h:4086 +PFNGLUNIFORM2IVARBPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLint)) # GL/glext.h:4087 +PFNGLUNIFORM3IVARBPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLint)) # GL/glext.h:4088 +PFNGLUNIFORM4IVARBPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLint)) # GL/glext.h:4089 +PFNGLUNIFORMMATRIX2FVARBPROC = CFUNCTYPE(None, GLint, GLsizei, GLboolean, POINTER(GLfloat)) # GL/glext.h:4090 +PFNGLUNIFORMMATRIX3FVARBPROC = CFUNCTYPE(None, GLint, GLsizei, GLboolean, POINTER(GLfloat)) # GL/glext.h:4091 +PFNGLUNIFORMMATRIX4FVARBPROC = CFUNCTYPE(None, GLint, GLsizei, GLboolean, POINTER(GLfloat)) # GL/glext.h:4092 +PFNGLGETOBJECTPARAMETERFVARBPROC = CFUNCTYPE(None, GLhandleARB, GLenum, POINTER(GLfloat)) # GL/glext.h:4093 +PFNGLGETOBJECTPARAMETERIVARBPROC = CFUNCTYPE(None, GLhandleARB, GLenum, POINTER(GLint)) # GL/glext.h:4094 +PFNGLGETINFOLOGARBPROC = CFUNCTYPE(None, GLhandleARB, GLsizei, POINTER(GLsizei), POINTER(GLcharARB)) # GL/glext.h:4095 +PFNGLGETATTACHEDOBJECTSARBPROC = CFUNCTYPE(None, GLhandleARB, GLsizei, POINTER(GLsizei), POINTER(GLhandleARB)) # GL/glext.h:4096 +PFNGLGETUNIFORMLOCATIONARBPROC = CFUNCTYPE(GLint, GLhandleARB, POINTER(GLcharARB)) # GL/glext.h:4097 +PFNGLGETACTIVEUNIFORMARBPROC = CFUNCTYPE(None, GLhandleARB, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLint), POINTER(GLenum), POINTER(GLcharARB)) # GL/glext.h:4098 +PFNGLGETUNIFORMFVARBPROC = CFUNCTYPE(None, GLhandleARB, GLint, POINTER(GLfloat)) # GL/glext.h:4099 +PFNGLGETUNIFORMIVARBPROC = CFUNCTYPE(None, GLhandleARB, GLint, POINTER(GLint)) # GL/glext.h:4100 +PFNGLGETSHADERSOURCEARBPROC = CFUNCTYPE(None, GLhandleARB, GLsizei, POINTER(GLsizei), POINTER(GLcharARB)) # GL/glext.h:4101 +# ARB_vertex_shader (GL/glext.h:4104) +GL_ARB_vertex_shader = 1 # GL/glext.h:4105 +# GL/glext.h:4107 +glBindAttribLocationARB = _link_function('glBindAttribLocationARB', None, [GLhandleARB, GLuint, POINTER(GLcharARB)], 'ARB_vertex_shader') + +# GL/glext.h:4108 +glGetActiveAttribARB = _link_function('glGetActiveAttribARB', None, [GLhandleARB, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLint), POINTER(GLenum), POINTER(GLcharARB)], 'ARB_vertex_shader') + +# GL/glext.h:4109 +glGetAttribLocationARB = _link_function('glGetAttribLocationARB', GLint, [GLhandleARB, POINTER(GLcharARB)], 'ARB_vertex_shader') + +PFNGLBINDATTRIBLOCATIONARBPROC = CFUNCTYPE(None, GLhandleARB, GLuint, POINTER(GLcharARB)) # GL/glext.h:4111 +PFNGLGETACTIVEATTRIBARBPROC = CFUNCTYPE(None, GLhandleARB, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLint), POINTER(GLenum), POINTER(GLcharARB)) # GL/glext.h:4112 +PFNGLGETATTRIBLOCATIONARBPROC = CFUNCTYPE(GLint, GLhandleARB, POINTER(GLcharARB)) # GL/glext.h:4113 +# ARB_fragment_shader (GL/glext.h:4116) +GL_ARB_fragment_shader = 1 # GL/glext.h:4117 +# ARB_shading_language_100 (GL/glext.h:4120) +GL_ARB_shading_language_100 = 1 # GL/glext.h:4121 +# ARB_texture_non_power_of_two (GL/glext.h:4124) +GL_ARB_texture_non_power_of_two = 1 # GL/glext.h:4125 +# ARB_point_sprite (GL/glext.h:4128) +GL_ARB_point_sprite = 1 # GL/glext.h:4129 +# ARB_fragment_program_shadow (GL/glext.h:4132) +GL_ARB_fragment_program_shadow = 1 # GL/glext.h:4133 +# ARB_draw_buffers (GL/glext.h:4136) +GL_ARB_draw_buffers = 1 # GL/glext.h:4137 +# GL/glext.h:4139 +glDrawBuffersARB = _link_function('glDrawBuffersARB', None, [GLsizei, POINTER(GLenum)], 'ARB_draw_buffers') + +PFNGLDRAWBUFFERSARBPROC = CFUNCTYPE(None, GLsizei, POINTER(GLenum)) # GL/glext.h:4141 +# ARB_texture_rectangle (GL/glext.h:4144) +GL_ARB_texture_rectangle = 1 # GL/glext.h:4145 +# ARB_color_buffer_float (GL/glext.h:4148) +GL_ARB_color_buffer_float = 1 # GL/glext.h:4149 +# GL/glext.h:4151 +glClampColorARB = _link_function('glClampColorARB', None, [GLenum, GLenum], 'ARB_color_buffer_float') + +PFNGLCLAMPCOLORARBPROC = CFUNCTYPE(None, GLenum, GLenum) # GL/glext.h:4153 +# ARB_half_float_pixel (GL/glext.h:4156) +GL_ARB_half_float_pixel = 1 # GL/glext.h:4157 +# ARB_texture_float (GL/glext.h:4160) +GL_ARB_texture_float = 1 # GL/glext.h:4161 +# ARB_pixel_buffer_object (GL/glext.h:4164) +GL_ARB_pixel_buffer_object = 1 # GL/glext.h:4165 +# EXT_abgr (GL/glext.h:4168) +GL_EXT_abgr = 1 # GL/glext.h:4169 +# EXT_blend_color (GL/glext.h:4172) +GL_EXT_blend_color = 1 # GL/glext.h:4173 +# GL/glext.h:4175 +glBlendColorEXT = _link_function('glBlendColorEXT', None, [GLclampf, GLclampf, GLclampf, GLclampf], 'EXT_blend_color') + +PFNGLBLENDCOLOREXTPROC = CFUNCTYPE(None, GLclampf, GLclampf, GLclampf, GLclampf) # GL/glext.h:4177 +# EXT_polygon_offset (GL/glext.h:4180) +GL_EXT_polygon_offset = 1 # GL/glext.h:4181 +# GL/glext.h:4183 +glPolygonOffsetEXT = _link_function('glPolygonOffsetEXT', None, [GLfloat, GLfloat], 'EXT_polygon_offset') + +PFNGLPOLYGONOFFSETEXTPROC = CFUNCTYPE(None, GLfloat, GLfloat) # GL/glext.h:4185 +# EXT_texture (GL/glext.h:4188) +GL_EXT_texture = 1 # GL/glext.h:4189 +# EXT_texture3D (GL/glext.h:4192) +GL_EXT_texture3D = 1 # GL/glext.h:4193 +# GL/glext.h:4195 +glTexImage3DEXT = _link_function('glTexImage3DEXT', None, [GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, POINTER(GLvoid)], 'EXT_texture3D') + +# GL/glext.h:4196 +glTexSubImage3DEXT = _link_function('glTexSubImage3DEXT', None, [GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'EXT_texture3D') + +PFNGLTEXIMAGE3DEXTPROC = CFUNCTYPE(None, GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4198 +PFNGLTEXSUBIMAGE3DEXTPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4199 +# SGIS_texture_filter4 (GL/glext.h:4202) +GL_SGIS_texture_filter4 = 1 # GL/glext.h:4203 +# GL/glext.h:4205 +glGetTexFilterFuncSGIS = _link_function('glGetTexFilterFuncSGIS', None, [GLenum, GLenum, POINTER(GLfloat)], 'SGIS_texture_filter4') + +# GL/glext.h:4206 +glTexFilterFuncSGIS = _link_function('glTexFilterFuncSGIS', None, [GLenum, GLenum, GLsizei, POINTER(GLfloat)], 'SGIS_texture_filter4') + +PFNGLGETTEXFILTERFUNCSGISPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4208 +PFNGLTEXFILTERFUNCSGISPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, POINTER(GLfloat)) # GL/glext.h:4209 +# EXT_subtexture (GL/glext.h:4212) +GL_EXT_subtexture = 1 # GL/glext.h:4213 +# GL/glext.h:4215 +glTexSubImage1DEXT = _link_function('glTexSubImage1DEXT', None, [GLenum, GLint, GLint, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'EXT_subtexture') + +# GL/glext.h:4216 +glTexSubImage2DEXT = _link_function('glTexSubImage2DEXT', None, [GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'EXT_subtexture') + +PFNGLTEXSUBIMAGE1DEXTPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4218 +PFNGLTEXSUBIMAGE2DEXTPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4219 +# EXT_copy_texture (GL/glext.h:4222) +GL_EXT_copy_texture = 1 # GL/glext.h:4223 +# GL/glext.h:4225 +glCopyTexImage1DEXT = _link_function('glCopyTexImage1DEXT', None, [GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint], 'EXT_copy_texture') + +# GL/glext.h:4226 +glCopyTexImage2DEXT = _link_function('glCopyTexImage2DEXT', None, [GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint], 'EXT_copy_texture') + +# GL/glext.h:4227 +glCopyTexSubImage1DEXT = _link_function('glCopyTexSubImage1DEXT', None, [GLenum, GLint, GLint, GLint, GLint, GLsizei], 'EXT_copy_texture') + +# GL/glext.h:4228 +glCopyTexSubImage2DEXT = _link_function('glCopyTexSubImage2DEXT', None, [GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei], 'EXT_copy_texture') + +# GL/glext.h:4229 +glCopyTexSubImage3DEXT = _link_function('glCopyTexSubImage3DEXT', None, [GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei], 'EXT_copy_texture') + +PFNGLCOPYTEXIMAGE1DEXTPROC = CFUNCTYPE(None, GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint) # GL/glext.h:4231 +PFNGLCOPYTEXIMAGE2DEXTPROC = CFUNCTYPE(None, GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint) # GL/glext.h:4232 +PFNGLCOPYTEXSUBIMAGE1DEXTPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint, GLsizei) # GL/glext.h:4233 +PFNGLCOPYTEXSUBIMAGE2DEXTPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei) # GL/glext.h:4234 +PFNGLCOPYTEXSUBIMAGE3DEXTPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei) # GL/glext.h:4235 +# EXT_histogram (GL/glext.h:4238) +GL_EXT_histogram = 1 # GL/glext.h:4239 +# GL/glext.h:4241 +glGetHistogramEXT = _link_function('glGetHistogramEXT', None, [GLenum, GLboolean, GLenum, GLenum, POINTER(GLvoid)], 'EXT_histogram') + +# GL/glext.h:4242 +glGetHistogramParameterfvEXT = _link_function('glGetHistogramParameterfvEXT', None, [GLenum, GLenum, POINTER(GLfloat)], 'EXT_histogram') + +# GL/glext.h:4243 +glGetHistogramParameterivEXT = _link_function('glGetHistogramParameterivEXT', None, [GLenum, GLenum, POINTER(GLint)], 'EXT_histogram') + +# GL/glext.h:4244 +glGetMinmaxEXT = _link_function('glGetMinmaxEXT', None, [GLenum, GLboolean, GLenum, GLenum, POINTER(GLvoid)], 'EXT_histogram') + +# GL/glext.h:4245 +glGetMinmaxParameterfvEXT = _link_function('glGetMinmaxParameterfvEXT', None, [GLenum, GLenum, POINTER(GLfloat)], 'EXT_histogram') + +# GL/glext.h:4246 +glGetMinmaxParameterivEXT = _link_function('glGetMinmaxParameterivEXT', None, [GLenum, GLenum, POINTER(GLint)], 'EXT_histogram') + +# GL/glext.h:4247 +glHistogramEXT = _link_function('glHistogramEXT', None, [GLenum, GLsizei, GLenum, GLboolean], 'EXT_histogram') + +# GL/glext.h:4248 +glMinmaxEXT = _link_function('glMinmaxEXT', None, [GLenum, GLenum, GLboolean], 'EXT_histogram') + +# GL/glext.h:4249 +glResetHistogramEXT = _link_function('glResetHistogramEXT', None, [GLenum], 'EXT_histogram') + +# GL/glext.h:4250 +glResetMinmaxEXT = _link_function('glResetMinmaxEXT', None, [GLenum], 'EXT_histogram') + +PFNGLGETHISTOGRAMEXTPROC = CFUNCTYPE(None, GLenum, GLboolean, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4252 +PFNGLGETHISTOGRAMPARAMETERFVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4253 +PFNGLGETHISTOGRAMPARAMETERIVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4254 +PFNGLGETMINMAXEXTPROC = CFUNCTYPE(None, GLenum, GLboolean, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4255 +PFNGLGETMINMAXPARAMETERFVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4256 +PFNGLGETMINMAXPARAMETERIVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4257 +PFNGLHISTOGRAMEXTPROC = CFUNCTYPE(None, GLenum, GLsizei, GLenum, GLboolean) # GL/glext.h:4258 +PFNGLMINMAXEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLboolean) # GL/glext.h:4259 +PFNGLRESETHISTOGRAMEXTPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:4260 +PFNGLRESETMINMAXEXTPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:4261 +# EXT_convolution (GL/glext.h:4264) +GL_EXT_convolution = 1 # GL/glext.h:4265 +# GL/glext.h:4267 +glConvolutionFilter1DEXT = _link_function('glConvolutionFilter1DEXT', None, [GLenum, GLenum, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'EXT_convolution') + +# GL/glext.h:4268 +glConvolutionFilter2DEXT = _link_function('glConvolutionFilter2DEXT', None, [GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'EXT_convolution') + +# GL/glext.h:4269 +glConvolutionParameterfEXT = _link_function('glConvolutionParameterfEXT', None, [GLenum, GLenum, GLfloat], 'EXT_convolution') + +# GL/glext.h:4270 +glConvolutionParameterfvEXT = _link_function('glConvolutionParameterfvEXT', None, [GLenum, GLenum, POINTER(GLfloat)], 'EXT_convolution') + +# GL/glext.h:4271 +glConvolutionParameteriEXT = _link_function('glConvolutionParameteriEXT', None, [GLenum, GLenum, GLint], 'EXT_convolution') + +# GL/glext.h:4272 +glConvolutionParameterivEXT = _link_function('glConvolutionParameterivEXT', None, [GLenum, GLenum, POINTER(GLint)], 'EXT_convolution') + +# GL/glext.h:4273 +glCopyConvolutionFilter1DEXT = _link_function('glCopyConvolutionFilter1DEXT', None, [GLenum, GLenum, GLint, GLint, GLsizei], 'EXT_convolution') + +# GL/glext.h:4274 +glCopyConvolutionFilter2DEXT = _link_function('glCopyConvolutionFilter2DEXT', None, [GLenum, GLenum, GLint, GLint, GLsizei, GLsizei], 'EXT_convolution') + +# GL/glext.h:4275 +glGetConvolutionFilterEXT = _link_function('glGetConvolutionFilterEXT', None, [GLenum, GLenum, GLenum, POINTER(GLvoid)], 'EXT_convolution') + +# GL/glext.h:4276 +glGetConvolutionParameterfvEXT = _link_function('glGetConvolutionParameterfvEXT', None, [GLenum, GLenum, POINTER(GLfloat)], 'EXT_convolution') + +# GL/glext.h:4277 +glGetConvolutionParameterivEXT = _link_function('glGetConvolutionParameterivEXT', None, [GLenum, GLenum, POINTER(GLint)], 'EXT_convolution') + +# GL/glext.h:4278 +glGetSeparableFilterEXT = _link_function('glGetSeparableFilterEXT', None, [GLenum, GLenum, GLenum, POINTER(GLvoid), POINTER(GLvoid), POINTER(GLvoid)], 'EXT_convolution') + +# GL/glext.h:4279 +glSeparableFilter2DEXT = _link_function('glSeparableFilter2DEXT', None, [GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid), POINTER(GLvoid)], 'EXT_convolution') + +PFNGLCONVOLUTIONFILTER1DEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4281 +PFNGLCONVOLUTIONFILTER2DEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4282 +PFNGLCONVOLUTIONPARAMETERFEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLfloat) # GL/glext.h:4283 +PFNGLCONVOLUTIONPARAMETERFVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4284 +PFNGLCONVOLUTIONPARAMETERIEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLint) # GL/glext.h:4285 +PFNGLCONVOLUTIONPARAMETERIVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4286 +PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLint, GLint, GLsizei) # GL/glext.h:4287 +PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLint, GLint, GLsizei, GLsizei) # GL/glext.h:4288 +PFNGLGETCONVOLUTIONFILTEREXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4289 +PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4290 +PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4291 +PFNGLGETSEPARABLEFILTEREXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, POINTER(GLvoid), POINTER(GLvoid), POINTER(GLvoid)) # GL/glext.h:4292 +PFNGLSEPARABLEFILTER2DEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid), POINTER(GLvoid)) # GL/glext.h:4293 +# EXT_color_matrix (GL/glext.h:4296) +GL_EXT_color_matrix = 1 # GL/glext.h:4297 +# SGI_color_table (GL/glext.h:4300) +GL_SGI_color_table = 1 # GL/glext.h:4301 +# GL/glext.h:4303 +glColorTableSGI = _link_function('glColorTableSGI', None, [GLenum, GLenum, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'SGI_color_table') + +# GL/glext.h:4304 +glColorTableParameterfvSGI = _link_function('glColorTableParameterfvSGI', None, [GLenum, GLenum, POINTER(GLfloat)], 'SGI_color_table') + +# GL/glext.h:4305 +glColorTableParameterivSGI = _link_function('glColorTableParameterivSGI', None, [GLenum, GLenum, POINTER(GLint)], 'SGI_color_table') + +# GL/glext.h:4306 +glCopyColorTableSGI = _link_function('glCopyColorTableSGI', None, [GLenum, GLenum, GLint, GLint, GLsizei], 'SGI_color_table') + +# GL/glext.h:4307 +glGetColorTableSGI = _link_function('glGetColorTableSGI', None, [GLenum, GLenum, GLenum, POINTER(GLvoid)], 'SGI_color_table') + +# GL/glext.h:4308 +glGetColorTableParameterfvSGI = _link_function('glGetColorTableParameterfvSGI', None, [GLenum, GLenum, POINTER(GLfloat)], 'SGI_color_table') + +# GL/glext.h:4309 +glGetColorTableParameterivSGI = _link_function('glGetColorTableParameterivSGI', None, [GLenum, GLenum, POINTER(GLint)], 'SGI_color_table') + +PFNGLCOLORTABLESGIPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4311 +PFNGLCOLORTABLEPARAMETERFVSGIPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4312 +PFNGLCOLORTABLEPARAMETERIVSGIPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4313 +PFNGLCOPYCOLORTABLESGIPROC = CFUNCTYPE(None, GLenum, GLenum, GLint, GLint, GLsizei) # GL/glext.h:4314 +PFNGLGETCOLORTABLESGIPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4315 +PFNGLGETCOLORTABLEPARAMETERFVSGIPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4316 +PFNGLGETCOLORTABLEPARAMETERIVSGIPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4317 +# SGIX_pixel_texture (GL/glext.h:4320) +GL_SGIX_pixel_texture = 1 # GL/glext.h:4321 +# GL/glext.h:4323 +glPixelTexGenSGIX = _link_function('glPixelTexGenSGIX', None, [GLenum], 'SGIX_pixel_texture') + +PFNGLPIXELTEXGENSGIXPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:4325 +# SGIS_pixel_texture (GL/glext.h:4328) +GL_SGIS_pixel_texture = 1 # GL/glext.h:4329 +# GL/glext.h:4331 +glPixelTexGenParameteriSGIS = _link_function('glPixelTexGenParameteriSGIS', None, [GLenum, GLint], 'SGIS_pixel_texture') + +# GL/glext.h:4332 +glPixelTexGenParameterivSGIS = _link_function('glPixelTexGenParameterivSGIS', None, [GLenum, POINTER(GLint)], 'SGIS_pixel_texture') + +# GL/glext.h:4333 +glPixelTexGenParameterfSGIS = _link_function('glPixelTexGenParameterfSGIS', None, [GLenum, GLfloat], 'SGIS_pixel_texture') + +# GL/glext.h:4334 +glPixelTexGenParameterfvSGIS = _link_function('glPixelTexGenParameterfvSGIS', None, [GLenum, POINTER(GLfloat)], 'SGIS_pixel_texture') + +# GL/glext.h:4335 +glGetPixelTexGenParameterivSGIS = _link_function('glGetPixelTexGenParameterivSGIS', None, [GLenum, POINTER(GLint)], 'SGIS_pixel_texture') + +# GL/glext.h:4336 +glGetPixelTexGenParameterfvSGIS = _link_function('glGetPixelTexGenParameterfvSGIS', None, [GLenum, POINTER(GLfloat)], 'SGIS_pixel_texture') + +PFNGLPIXELTEXGENPARAMETERISGISPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:4338 +PFNGLPIXELTEXGENPARAMETERIVSGISPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:4339 +PFNGLPIXELTEXGENPARAMETERFSGISPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:4340 +PFNGLPIXELTEXGENPARAMETERFVSGISPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:4341 +PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:4342 +PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:4343 +# SGIS_texture4D (GL/glext.h:4346) +GL_SGIS_texture4D = 1 # GL/glext.h:4347 +# GL/glext.h:4349 +glTexImage4DSGIS = _link_function('glTexImage4DSGIS', None, [GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, POINTER(GLvoid)], 'SGIS_texture4D') + +# GL/glext.h:4350 +glTexSubImage4DSGIS = _link_function('glTexSubImage4DSGIS', None, [GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'SGIS_texture4D') + +PFNGLTEXIMAGE4DSGISPROC = CFUNCTYPE(None, GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4352 +PFNGLTEXSUBIMAGE4DSGISPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4353 +# SGI_texture_color_table (GL/glext.h:4356) +GL_SGI_texture_color_table = 1 # GL/glext.h:4357 +# EXT_cmyka (GL/glext.h:4360) +GL_EXT_cmyka = 1 # GL/glext.h:4361 +# EXT_texture_object (GL/glext.h:4364) +GL_EXT_texture_object = 1 # GL/glext.h:4365 +# GL/glext.h:4367 +glAreTexturesResidentEXT = _link_function('glAreTexturesResidentEXT', GLboolean, [GLsizei, POINTER(GLuint), POINTER(GLboolean)], 'EXT_texture_object') + +# GL/glext.h:4368 +glBindTextureEXT = _link_function('glBindTextureEXT', None, [GLenum, GLuint], 'EXT_texture_object') + +# GL/glext.h:4369 +glDeleteTexturesEXT = _link_function('glDeleteTexturesEXT', None, [GLsizei, POINTER(GLuint)], 'EXT_texture_object') + +# GL/glext.h:4370 +glGenTexturesEXT = _link_function('glGenTexturesEXT', None, [GLsizei, POINTER(GLuint)], 'EXT_texture_object') + +# GL/glext.h:4371 +glIsTextureEXT = _link_function('glIsTextureEXT', GLboolean, [GLuint], 'EXT_texture_object') + +# GL/glext.h:4372 +glPrioritizeTexturesEXT = _link_function('glPrioritizeTexturesEXT', None, [GLsizei, POINTER(GLuint), POINTER(GLclampf)], 'EXT_texture_object') + +PFNGLARETEXTURESRESIDENTEXTPROC = CFUNCTYPE(GLboolean, GLsizei, POINTER(GLuint), POINTER(GLboolean)) # GL/glext.h:4374 +PFNGLBINDTEXTUREEXTPROC = CFUNCTYPE(None, GLenum, GLuint) # GL/glext.h:4375 +PFNGLDELETETEXTURESEXTPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:4376 +PFNGLGENTEXTURESEXTPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:4377 +PFNGLISTEXTUREEXTPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:4378 +PFNGLPRIORITIZETEXTURESEXTPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint), POINTER(GLclampf)) # GL/glext.h:4379 +# SGIS_detail_texture (GL/glext.h:4382) +GL_SGIS_detail_texture = 1 # GL/glext.h:4383 +# GL/glext.h:4385 +glDetailTexFuncSGIS = _link_function('glDetailTexFuncSGIS', None, [GLenum, GLsizei, POINTER(GLfloat)], 'SGIS_detail_texture') + +# GL/glext.h:4386 +glGetDetailTexFuncSGIS = _link_function('glGetDetailTexFuncSGIS', None, [GLenum, POINTER(GLfloat)], 'SGIS_detail_texture') + +PFNGLDETAILTEXFUNCSGISPROC = CFUNCTYPE(None, GLenum, GLsizei, POINTER(GLfloat)) # GL/glext.h:4388 +PFNGLGETDETAILTEXFUNCSGISPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:4389 +# SGIS_sharpen_texture (GL/glext.h:4392) +GL_SGIS_sharpen_texture = 1 # GL/glext.h:4393 +# GL/glext.h:4395 +glSharpenTexFuncSGIS = _link_function('glSharpenTexFuncSGIS', None, [GLenum, GLsizei, POINTER(GLfloat)], 'SGIS_sharpen_texture') + +# GL/glext.h:4396 +glGetSharpenTexFuncSGIS = _link_function('glGetSharpenTexFuncSGIS', None, [GLenum, POINTER(GLfloat)], 'SGIS_sharpen_texture') + +PFNGLSHARPENTEXFUNCSGISPROC = CFUNCTYPE(None, GLenum, GLsizei, POINTER(GLfloat)) # GL/glext.h:4398 +PFNGLGETSHARPENTEXFUNCSGISPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:4399 +# EXT_packed_pixels (GL/glext.h:4402) +GL_EXT_packed_pixels = 1 # GL/glext.h:4403 +# SGIS_texture_lod (GL/glext.h:4406) +GL_SGIS_texture_lod = 1 # GL/glext.h:4407 +# SGIS_multisample (GL/glext.h:4410) +GL_SGIS_multisample = 1 # GL/glext.h:4411 +# GL/glext.h:4413 +glSampleMaskSGIS = _link_function('glSampleMaskSGIS', None, [GLclampf, GLboolean], 'SGIS_multisample') + +# GL/glext.h:4414 +glSamplePatternSGIS = _link_function('glSamplePatternSGIS', None, [GLenum], 'SGIS_multisample') + +PFNGLSAMPLEMASKSGISPROC = CFUNCTYPE(None, GLclampf, GLboolean) # GL/glext.h:4416 +PFNGLSAMPLEPATTERNSGISPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:4417 +# EXT_rescale_normal (GL/glext.h:4420) +GL_EXT_rescale_normal = 1 # GL/glext.h:4421 +# EXT_vertex_array (GL/glext.h:4424) +GL_EXT_vertex_array = 1 # GL/glext.h:4425 +# GL/glext.h:4427 +glArrayElementEXT = _link_function('glArrayElementEXT', None, [GLint], 'EXT_vertex_array') + +# GL/glext.h:4428 +glColorPointerEXT = _link_function('glColorPointerEXT', None, [GLint, GLenum, GLsizei, GLsizei, POINTER(GLvoid)], 'EXT_vertex_array') + +# GL/glext.h:4429 +glDrawArraysEXT = _link_function('glDrawArraysEXT', None, [GLenum, GLint, GLsizei], 'EXT_vertex_array') + +# GL/glext.h:4430 +glEdgeFlagPointerEXT = _link_function('glEdgeFlagPointerEXT', None, [GLsizei, GLsizei, POINTER(GLboolean)], 'EXT_vertex_array') + +# GL/glext.h:4431 +glGetPointervEXT = _link_function('glGetPointervEXT', None, [GLenum, POINTER(POINTER(GLvoid))], 'EXT_vertex_array') + +# GL/glext.h:4432 +glIndexPointerEXT = _link_function('glIndexPointerEXT', None, [GLenum, GLsizei, GLsizei, POINTER(GLvoid)], 'EXT_vertex_array') + +# GL/glext.h:4433 +glNormalPointerEXT = _link_function('glNormalPointerEXT', None, [GLenum, GLsizei, GLsizei, POINTER(GLvoid)], 'EXT_vertex_array') + +# GL/glext.h:4434 +glTexCoordPointerEXT = _link_function('glTexCoordPointerEXT', None, [GLint, GLenum, GLsizei, GLsizei, POINTER(GLvoid)], 'EXT_vertex_array') + +# GL/glext.h:4435 +glVertexPointerEXT = _link_function('glVertexPointerEXT', None, [GLint, GLenum, GLsizei, GLsizei, POINTER(GLvoid)], 'EXT_vertex_array') + +PFNGLARRAYELEMENTEXTPROC = CFUNCTYPE(None, GLint) # GL/glext.h:4437 +PFNGLCOLORPOINTEREXTPROC = CFUNCTYPE(None, GLint, GLenum, GLsizei, GLsizei, POINTER(GLvoid)) # GL/glext.h:4438 +PFNGLDRAWARRAYSEXTPROC = CFUNCTYPE(None, GLenum, GLint, GLsizei) # GL/glext.h:4439 +PFNGLEDGEFLAGPOINTEREXTPROC = CFUNCTYPE(None, GLsizei, GLsizei, POINTER(GLboolean)) # GL/glext.h:4440 +PFNGLGETPOINTERVEXTPROC = CFUNCTYPE(None, GLenum, POINTER(POINTER(GLvoid))) # GL/glext.h:4441 +PFNGLINDEXPOINTEREXTPROC = CFUNCTYPE(None, GLenum, GLsizei, GLsizei, POINTER(GLvoid)) # GL/glext.h:4442 +PFNGLNORMALPOINTEREXTPROC = CFUNCTYPE(None, GLenum, GLsizei, GLsizei, POINTER(GLvoid)) # GL/glext.h:4443 +PFNGLTEXCOORDPOINTEREXTPROC = CFUNCTYPE(None, GLint, GLenum, GLsizei, GLsizei, POINTER(GLvoid)) # GL/glext.h:4444 +PFNGLVERTEXPOINTEREXTPROC = CFUNCTYPE(None, GLint, GLenum, GLsizei, GLsizei, POINTER(GLvoid)) # GL/glext.h:4445 +# EXT_misc_attribute (GL/glext.h:4448) +GL_EXT_misc_attribute = 1 # GL/glext.h:4449 +# SGIS_generate_mipmap (GL/glext.h:4452) +GL_SGIS_generate_mipmap = 1 # GL/glext.h:4453 +# SGIX_clipmap (GL/glext.h:4456) +GL_SGIX_clipmap = 1 # GL/glext.h:4457 +# SGIX_shadow (GL/glext.h:4460) +GL_SGIX_shadow = 1 # GL/glext.h:4461 +# SGIS_texture_edge_clamp (GL/glext.h:4464) +GL_SGIS_texture_edge_clamp = 1 # GL/glext.h:4465 +# SGIS_texture_border_clamp (GL/glext.h:4468) +GL_SGIS_texture_border_clamp = 1 # GL/glext.h:4469 +# EXT_blend_minmax (GL/glext.h:4472) +GL_EXT_blend_minmax = 1 # GL/glext.h:4473 +# GL/glext.h:4475 +glBlendEquationEXT = _link_function('glBlendEquationEXT', None, [GLenum], 'EXT_blend_minmax') + +PFNGLBLENDEQUATIONEXTPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:4477 +# EXT_blend_subtract (GL/glext.h:4480) +GL_EXT_blend_subtract = 1 # GL/glext.h:4481 +# EXT_blend_logic_op (GL/glext.h:4484) +GL_EXT_blend_logic_op = 1 # GL/glext.h:4485 +# SGIX_interlace (GL/glext.h:4488) +GL_SGIX_interlace = 1 # GL/glext.h:4489 +# SGIX_pixel_tiles (GL/glext.h:4492) +GL_SGIX_pixel_tiles = 1 # GL/glext.h:4493 +# SGIX_texture_select (GL/glext.h:4496) +GL_SGIX_texture_select = 1 # GL/glext.h:4497 +# SGIX_sprite (GL/glext.h:4500) +GL_SGIX_sprite = 1 # GL/glext.h:4501 +# GL/glext.h:4503 +glSpriteParameterfSGIX = _link_function('glSpriteParameterfSGIX', None, [GLenum, GLfloat], 'SGIX_sprite') + +# GL/glext.h:4504 +glSpriteParameterfvSGIX = _link_function('glSpriteParameterfvSGIX', None, [GLenum, POINTER(GLfloat)], 'SGIX_sprite') + +# GL/glext.h:4505 +glSpriteParameteriSGIX = _link_function('glSpriteParameteriSGIX', None, [GLenum, GLint], 'SGIX_sprite') + +# GL/glext.h:4506 +glSpriteParameterivSGIX = _link_function('glSpriteParameterivSGIX', None, [GLenum, POINTER(GLint)], 'SGIX_sprite') + +PFNGLSPRITEPARAMETERFSGIXPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:4508 +PFNGLSPRITEPARAMETERFVSGIXPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:4509 +PFNGLSPRITEPARAMETERISGIXPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:4510 +PFNGLSPRITEPARAMETERIVSGIXPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:4511 +# SGIX_texture_multi_buffer (GL/glext.h:4514) +GL_SGIX_texture_multi_buffer = 1 # GL/glext.h:4515 +# EXT_point_parameters (GL/glext.h:4518) +GL_EXT_point_parameters = 1 # GL/glext.h:4519 +# GL/glext.h:4521 +glPointParameterfEXT = _link_function('glPointParameterfEXT', None, [GLenum, GLfloat], 'EXT_point_parameters') + +# GL/glext.h:4522 +glPointParameterfvEXT = _link_function('glPointParameterfvEXT', None, [GLenum, POINTER(GLfloat)], 'EXT_point_parameters') + +PFNGLPOINTPARAMETERFEXTPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:4524 +PFNGLPOINTPARAMETERFVEXTPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:4525 +# SGIS_point_parameters (GL/glext.h:4528) +GL_SGIS_point_parameters = 1 # GL/glext.h:4529 +# GL/glext.h:4531 +glPointParameterfSGIS = _link_function('glPointParameterfSGIS', None, [GLenum, GLfloat], 'SGIS_point_parameters') + +# GL/glext.h:4532 +glPointParameterfvSGIS = _link_function('glPointParameterfvSGIS', None, [GLenum, POINTER(GLfloat)], 'SGIS_point_parameters') + +PFNGLPOINTPARAMETERFSGISPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:4534 +PFNGLPOINTPARAMETERFVSGISPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:4535 +# SGIX_instruments (GL/glext.h:4538) +GL_SGIX_instruments = 1 # GL/glext.h:4539 +# GL/glext.h:4541 +glGetInstrumentsSGIX = _link_function('glGetInstrumentsSGIX', GLint, [], 'SGIX_instruments') + +# GL/glext.h:4542 +glInstrumentsBufferSGIX = _link_function('glInstrumentsBufferSGIX', None, [GLsizei, POINTER(GLint)], 'SGIX_instruments') + +# GL/glext.h:4543 +glPollInstrumentsSGIX = _link_function('glPollInstrumentsSGIX', GLint, [POINTER(GLint)], 'SGIX_instruments') + +# GL/glext.h:4544 +glReadInstrumentsSGIX = _link_function('glReadInstrumentsSGIX', None, [GLint], 'SGIX_instruments') + +# GL/glext.h:4545 +glStartInstrumentsSGIX = _link_function('glStartInstrumentsSGIX', None, [], 'SGIX_instruments') + +# GL/glext.h:4546 +glStopInstrumentsSGIX = _link_function('glStopInstrumentsSGIX', None, [GLint], 'SGIX_instruments') + +PFNGLGETINSTRUMENTSSGIXPROC = CFUNCTYPE(GLint) # GL/glext.h:4548 +PFNGLINSTRUMENTSBUFFERSGIXPROC = CFUNCTYPE(None, GLsizei, POINTER(GLint)) # GL/glext.h:4549 +PFNGLPOLLINSTRUMENTSSGIXPROC = CFUNCTYPE(GLint, POINTER(GLint)) # GL/glext.h:4550 +PFNGLREADINSTRUMENTSSGIXPROC = CFUNCTYPE(None, GLint) # GL/glext.h:4551 +PFNGLSTARTINSTRUMENTSSGIXPROC = CFUNCTYPE(None) # GL/glext.h:4552 +PFNGLSTOPINSTRUMENTSSGIXPROC = CFUNCTYPE(None, GLint) # GL/glext.h:4553 +# SGIX_texture_scale_bias (GL/glext.h:4556) +GL_SGIX_texture_scale_bias = 1 # GL/glext.h:4557 +# SGIX_framezoom (GL/glext.h:4560) +GL_SGIX_framezoom = 1 # GL/glext.h:4561 +# GL/glext.h:4563 +glFrameZoomSGIX = _link_function('glFrameZoomSGIX', None, [GLint], 'SGIX_framezoom') + +PFNGLFRAMEZOOMSGIXPROC = CFUNCTYPE(None, GLint) # GL/glext.h:4565 +# SGIX_tag_sample_buffer (GL/glext.h:4568) +GL_SGIX_tag_sample_buffer = 1 # GL/glext.h:4569 +# GL/glext.h:4571 +glTagSampleBufferSGIX = _link_function('glTagSampleBufferSGIX', None, [], 'SGIX_tag_sample_buffer') + +PFNGLTAGSAMPLEBUFFERSGIXPROC = CFUNCTYPE(None) # GL/glext.h:4573 +# SGIX_polynomial_ffd (GL/glext.h:4576) +GL_SGIX_polynomial_ffd = 1 # GL/glext.h:4577 +# GL/glext.h:4579 +glDeformationMap3dSGIX = _link_function('glDeformationMap3dSGIX', None, [GLenum, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, POINTER(GLdouble)], 'SGIX_polynomial_ffd') + +# GL/glext.h:4580 +glDeformationMap3fSGIX = _link_function('glDeformationMap3fSGIX', None, [GLenum, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, POINTER(GLfloat)], 'SGIX_polynomial_ffd') + +GLbitfield = c_uint # /usr/include/GL/gl.h:55 +# GL/glext.h:4581 +glDeformSGIX = _link_function('glDeformSGIX', None, [GLbitfield], 'SGIX_polynomial_ffd') + +# GL/glext.h:4582 +glLoadIdentityDeformationMapSGIX = _link_function('glLoadIdentityDeformationMapSGIX', None, [GLbitfield], 'SGIX_polynomial_ffd') + +PFNGLDEFORMATIONMAP3DSGIXPROC = CFUNCTYPE(None, GLenum, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, POINTER(GLdouble)) # GL/glext.h:4584 +PFNGLDEFORMATIONMAP3FSGIXPROC = CFUNCTYPE(None, GLenum, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, POINTER(GLfloat)) # GL/glext.h:4585 +PFNGLDEFORMSGIXPROC = CFUNCTYPE(None, GLbitfield) # GL/glext.h:4586 +PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC = CFUNCTYPE(None, GLbitfield) # GL/glext.h:4587 +# SGIX_reference_plane (GL/glext.h:4590) +GL_SGIX_reference_plane = 1 # GL/glext.h:4591 +# GL/glext.h:4593 +glReferencePlaneSGIX = _link_function('glReferencePlaneSGIX', None, [POINTER(GLdouble)], 'SGIX_reference_plane') + +PFNGLREFERENCEPLANESGIXPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:4595 +# SGIX_flush_raster (GL/glext.h:4598) +GL_SGIX_flush_raster = 1 # GL/glext.h:4599 +# GL/glext.h:4601 +glFlushRasterSGIX = _link_function('glFlushRasterSGIX', None, [], 'SGIX_flush_raster') + +PFNGLFLUSHRASTERSGIXPROC = CFUNCTYPE(None) # GL/glext.h:4603 +# SGIX_depth_texture (GL/glext.h:4606) +GL_SGIX_depth_texture = 1 # GL/glext.h:4607 +# SGIS_fog_function (GL/glext.h:4610) +GL_SGIS_fog_function = 1 # GL/glext.h:4611 +# GL/glext.h:4613 +glFogFuncSGIS = _link_function('glFogFuncSGIS', None, [GLsizei, POINTER(GLfloat)], 'SGIS_fog_function') + +# GL/glext.h:4614 +glGetFogFuncSGIS = _link_function('glGetFogFuncSGIS', None, [POINTER(GLfloat)], 'SGIS_fog_function') + +PFNGLFOGFUNCSGISPROC = CFUNCTYPE(None, GLsizei, POINTER(GLfloat)) # GL/glext.h:4616 +PFNGLGETFOGFUNCSGISPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:4617 +# SGIX_fog_offset (GL/glext.h:4620) +GL_SGIX_fog_offset = 1 # GL/glext.h:4621 +# HP_image_transform (GL/glext.h:4624) +GL_HP_image_transform = 1 # GL/glext.h:4625 +# GL/glext.h:4627 +glImageTransformParameteriHP = _link_function('glImageTransformParameteriHP', None, [GLenum, GLenum, GLint], 'HP_image_transform') + +# GL/glext.h:4628 +glImageTransformParameterfHP = _link_function('glImageTransformParameterfHP', None, [GLenum, GLenum, GLfloat], 'HP_image_transform') + +# GL/glext.h:4629 +glImageTransformParameterivHP = _link_function('glImageTransformParameterivHP', None, [GLenum, GLenum, POINTER(GLint)], 'HP_image_transform') + +# GL/glext.h:4630 +glImageTransformParameterfvHP = _link_function('glImageTransformParameterfvHP', None, [GLenum, GLenum, POINTER(GLfloat)], 'HP_image_transform') + +# GL/glext.h:4631 +glGetImageTransformParameterivHP = _link_function('glGetImageTransformParameterivHP', None, [GLenum, GLenum, POINTER(GLint)], 'HP_image_transform') + +# GL/glext.h:4632 +glGetImageTransformParameterfvHP = _link_function('glGetImageTransformParameterfvHP', None, [GLenum, GLenum, POINTER(GLfloat)], 'HP_image_transform') + +PFNGLIMAGETRANSFORMPARAMETERIHPPROC = CFUNCTYPE(None, GLenum, GLenum, GLint) # GL/glext.h:4634 +PFNGLIMAGETRANSFORMPARAMETERFHPPROC = CFUNCTYPE(None, GLenum, GLenum, GLfloat) # GL/glext.h:4635 +PFNGLIMAGETRANSFORMPARAMETERIVHPPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4636 +PFNGLIMAGETRANSFORMPARAMETERFVHPPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4637 +PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4638 +PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4639 +# HP_convolution_border_modes (GL/glext.h:4642) +GL_HP_convolution_border_modes = 1 # GL/glext.h:4643 +# SGIX_texture_add_env (GL/glext.h:4646) +GL_SGIX_texture_add_env = 1 # GL/glext.h:4647 +# EXT_color_subtable (GL/glext.h:4650) +GL_EXT_color_subtable = 1 # GL/glext.h:4651 +# GL/glext.h:4653 +glColorSubTableEXT = _link_function('glColorSubTableEXT', None, [GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'EXT_color_subtable') + +# GL/glext.h:4654 +glCopyColorSubTableEXT = _link_function('glCopyColorSubTableEXT', None, [GLenum, GLsizei, GLint, GLint, GLsizei], 'EXT_color_subtable') + +PFNGLCOLORSUBTABLEEXTPROC = CFUNCTYPE(None, GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4656 +PFNGLCOPYCOLORSUBTABLEEXTPROC = CFUNCTYPE(None, GLenum, GLsizei, GLint, GLint, GLsizei) # GL/glext.h:4657 +# PGI_vertex_hints (GL/glext.h:4660) +GL_PGI_vertex_hints = 1 # GL/glext.h:4661 +# PGI_misc_hints (GL/glext.h:4664) +GL_PGI_misc_hints = 1 # GL/glext.h:4665 +# GL/glext.h:4667 +glHintPGI = _link_function('glHintPGI', None, [GLenum, GLint], 'PGI_misc_hints') + +PFNGLHINTPGIPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:4669 +# EXT_paletted_texture (GL/glext.h:4672) +GL_EXT_paletted_texture = 1 # GL/glext.h:4673 +# GL/glext.h:4675 +glColorTableEXT = _link_function('glColorTableEXT', None, [GLenum, GLenum, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'EXT_paletted_texture') + +# GL/glext.h:4676 +glGetColorTableEXT = _link_function('glGetColorTableEXT', None, [GLenum, GLenum, GLenum, POINTER(GLvoid)], 'EXT_paletted_texture') + +# GL/glext.h:4677 +glGetColorTableParameterivEXT = _link_function('glGetColorTableParameterivEXT', None, [GLenum, GLenum, POINTER(GLint)], 'EXT_paletted_texture') + +# GL/glext.h:4678 +glGetColorTableParameterfvEXT = _link_function('glGetColorTableParameterfvEXT', None, [GLenum, GLenum, POINTER(GLfloat)], 'EXT_paletted_texture') + +PFNGLCOLORTABLEEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4680 +PFNGLGETCOLORTABLEEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4681 +PFNGLGETCOLORTABLEPARAMETERIVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4682 +PFNGLGETCOLORTABLEPARAMETERFVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4683 +# EXT_clip_volume_hint (GL/glext.h:4686) +GL_EXT_clip_volume_hint = 1 # GL/glext.h:4687 +# SGIX_list_priority (GL/glext.h:4690) +GL_SGIX_list_priority = 1 # GL/glext.h:4691 +# GL/glext.h:4693 +glGetListParameterfvSGIX = _link_function('glGetListParameterfvSGIX', None, [GLuint, GLenum, POINTER(GLfloat)], 'SGIX_list_priority') + +# GL/glext.h:4694 +glGetListParameterivSGIX = _link_function('glGetListParameterivSGIX', None, [GLuint, GLenum, POINTER(GLint)], 'SGIX_list_priority') + +# GL/glext.h:4695 +glListParameterfSGIX = _link_function('glListParameterfSGIX', None, [GLuint, GLenum, GLfloat], 'SGIX_list_priority') + +# GL/glext.h:4696 +glListParameterfvSGIX = _link_function('glListParameterfvSGIX', None, [GLuint, GLenum, POINTER(GLfloat)], 'SGIX_list_priority') + +# GL/glext.h:4697 +glListParameteriSGIX = _link_function('glListParameteriSGIX', None, [GLuint, GLenum, GLint], 'SGIX_list_priority') + +# GL/glext.h:4698 +glListParameterivSGIX = _link_function('glListParameterivSGIX', None, [GLuint, GLenum, POINTER(GLint)], 'SGIX_list_priority') + +PFNGLGETLISTPARAMETERFVSGIXPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:4700 +PFNGLGETLISTPARAMETERIVSGIXPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:4701 +PFNGLLISTPARAMETERFSGIXPROC = CFUNCTYPE(None, GLuint, GLenum, GLfloat) # GL/glext.h:4702 +PFNGLLISTPARAMETERFVSGIXPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:4703 +PFNGLLISTPARAMETERISGIXPROC = CFUNCTYPE(None, GLuint, GLenum, GLint) # GL/glext.h:4704 +PFNGLLISTPARAMETERIVSGIXPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:4705 +# SGIX_ir_instrument1 (GL/glext.h:4708) +GL_SGIX_ir_instrument1 = 1 # GL/glext.h:4709 +# SGIX_calligraphic_fragment (GL/glext.h:4712) +GL_SGIX_calligraphic_fragment = 1 # GL/glext.h:4713 +# SGIX_texture_lod_bias (GL/glext.h:4716) +GL_SGIX_texture_lod_bias = 1 # GL/glext.h:4717 +# SGIX_shadow_ambient (GL/glext.h:4720) +GL_SGIX_shadow_ambient = 1 # GL/glext.h:4721 +# EXT_index_texture (GL/glext.h:4724) +GL_EXT_index_texture = 1 # GL/glext.h:4725 +# EXT_index_material (GL/glext.h:4728) +GL_EXT_index_material = 1 # GL/glext.h:4729 +# GL/glext.h:4731 +glIndexMaterialEXT = _link_function('glIndexMaterialEXT', None, [GLenum, GLenum], 'EXT_index_material') + +PFNGLINDEXMATERIALEXTPROC = CFUNCTYPE(None, GLenum, GLenum) # GL/glext.h:4733 +# EXT_index_func (GL/glext.h:4736) +GL_EXT_index_func = 1 # GL/glext.h:4737 +# GL/glext.h:4739 +glIndexFuncEXT = _link_function('glIndexFuncEXT', None, [GLenum, GLclampf], 'EXT_index_func') + +PFNGLINDEXFUNCEXTPROC = CFUNCTYPE(None, GLenum, GLclampf) # GL/glext.h:4741 +# EXT_index_array_formats (GL/glext.h:4744) +GL_EXT_index_array_formats = 1 # GL/glext.h:4745 +# EXT_compiled_vertex_array (GL/glext.h:4748) +GL_EXT_compiled_vertex_array = 1 # GL/glext.h:4749 +# GL/glext.h:4751 +glLockArraysEXT = _link_function('glLockArraysEXT', None, [GLint, GLsizei], 'EXT_compiled_vertex_array') + +# GL/glext.h:4752 +glUnlockArraysEXT = _link_function('glUnlockArraysEXT', None, [], 'EXT_compiled_vertex_array') + +PFNGLLOCKARRAYSEXTPROC = CFUNCTYPE(None, GLint, GLsizei) # GL/glext.h:4754 +PFNGLUNLOCKARRAYSEXTPROC = CFUNCTYPE(None) # GL/glext.h:4755 +# EXT_cull_vertex (GL/glext.h:4758) +GL_EXT_cull_vertex = 1 # GL/glext.h:4759 +# GL/glext.h:4761 +glCullParameterdvEXT = _link_function('glCullParameterdvEXT', None, [GLenum, POINTER(GLdouble)], 'EXT_cull_vertex') + +# GL/glext.h:4762 +glCullParameterfvEXT = _link_function('glCullParameterfvEXT', None, [GLenum, POINTER(GLfloat)], 'EXT_cull_vertex') + +PFNGLCULLPARAMETERDVEXTPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:4764 +PFNGLCULLPARAMETERFVEXTPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:4765 +# SGIX_ycrcb (GL/glext.h:4768) +GL_SGIX_ycrcb = 1 # GL/glext.h:4769 +# SGIX_fragment_lighting (GL/glext.h:4772) +GL_SGIX_fragment_lighting = 1 # GL/glext.h:4773 +# GL/glext.h:4775 +glFragmentColorMaterialSGIX = _link_function('glFragmentColorMaterialSGIX', None, [GLenum, GLenum], 'SGIX_fragment_lighting') + +# GL/glext.h:4776 +glFragmentLightfSGIX = _link_function('glFragmentLightfSGIX', None, [GLenum, GLenum, GLfloat], 'SGIX_fragment_lighting') + +# GL/glext.h:4777 +glFragmentLightfvSGIX = _link_function('glFragmentLightfvSGIX', None, [GLenum, GLenum, POINTER(GLfloat)], 'SGIX_fragment_lighting') + +# GL/glext.h:4778 +glFragmentLightiSGIX = _link_function('glFragmentLightiSGIX', None, [GLenum, GLenum, GLint], 'SGIX_fragment_lighting') + +# GL/glext.h:4779 +glFragmentLightivSGIX = _link_function('glFragmentLightivSGIX', None, [GLenum, GLenum, POINTER(GLint)], 'SGIX_fragment_lighting') + +# GL/glext.h:4780 +glFragmentLightModelfSGIX = _link_function('glFragmentLightModelfSGIX', None, [GLenum, GLfloat], 'SGIX_fragment_lighting') + +# GL/glext.h:4781 +glFragmentLightModelfvSGIX = _link_function('glFragmentLightModelfvSGIX', None, [GLenum, POINTER(GLfloat)], 'SGIX_fragment_lighting') + +# GL/glext.h:4782 +glFragmentLightModeliSGIX = _link_function('glFragmentLightModeliSGIX', None, [GLenum, GLint], 'SGIX_fragment_lighting') + +# GL/glext.h:4783 +glFragmentLightModelivSGIX = _link_function('glFragmentLightModelivSGIX', None, [GLenum, POINTER(GLint)], 'SGIX_fragment_lighting') + +# GL/glext.h:4784 +glFragmentMaterialfSGIX = _link_function('glFragmentMaterialfSGIX', None, [GLenum, GLenum, GLfloat], 'SGIX_fragment_lighting') + +# GL/glext.h:4785 +glFragmentMaterialfvSGIX = _link_function('glFragmentMaterialfvSGIX', None, [GLenum, GLenum, POINTER(GLfloat)], 'SGIX_fragment_lighting') + +# GL/glext.h:4786 +glFragmentMaterialiSGIX = _link_function('glFragmentMaterialiSGIX', None, [GLenum, GLenum, GLint], 'SGIX_fragment_lighting') + +# GL/glext.h:4787 +glFragmentMaterialivSGIX = _link_function('glFragmentMaterialivSGIX', None, [GLenum, GLenum, POINTER(GLint)], 'SGIX_fragment_lighting') + +# GL/glext.h:4788 +glGetFragmentLightfvSGIX = _link_function('glGetFragmentLightfvSGIX', None, [GLenum, GLenum, POINTER(GLfloat)], 'SGIX_fragment_lighting') + +# GL/glext.h:4789 +glGetFragmentLightivSGIX = _link_function('glGetFragmentLightivSGIX', None, [GLenum, GLenum, POINTER(GLint)], 'SGIX_fragment_lighting') + +# GL/glext.h:4790 +glGetFragmentMaterialfvSGIX = _link_function('glGetFragmentMaterialfvSGIX', None, [GLenum, GLenum, POINTER(GLfloat)], 'SGIX_fragment_lighting') + +# GL/glext.h:4791 +glGetFragmentMaterialivSGIX = _link_function('glGetFragmentMaterialivSGIX', None, [GLenum, GLenum, POINTER(GLint)], 'SGIX_fragment_lighting') + +# GL/glext.h:4792 +glLightEnviSGIX = _link_function('glLightEnviSGIX', None, [GLenum, GLint], 'SGIX_fragment_lighting') + +PFNGLFRAGMENTCOLORMATERIALSGIXPROC = CFUNCTYPE(None, GLenum, GLenum) # GL/glext.h:4794 +PFNGLFRAGMENTLIGHTFSGIXPROC = CFUNCTYPE(None, GLenum, GLenum, GLfloat) # GL/glext.h:4795 +PFNGLFRAGMENTLIGHTFVSGIXPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4796 +PFNGLFRAGMENTLIGHTISGIXPROC = CFUNCTYPE(None, GLenum, GLenum, GLint) # GL/glext.h:4797 +PFNGLFRAGMENTLIGHTIVSGIXPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4798 +PFNGLFRAGMENTLIGHTMODELFSGIXPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:4799 +PFNGLFRAGMENTLIGHTMODELFVSGIXPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:4800 +PFNGLFRAGMENTLIGHTMODELISGIXPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:4801 +PFNGLFRAGMENTLIGHTMODELIVSGIXPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:4802 +PFNGLFRAGMENTMATERIALFSGIXPROC = CFUNCTYPE(None, GLenum, GLenum, GLfloat) # GL/glext.h:4803 +PFNGLFRAGMENTMATERIALFVSGIXPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4804 +PFNGLFRAGMENTMATERIALISGIXPROC = CFUNCTYPE(None, GLenum, GLenum, GLint) # GL/glext.h:4805 +PFNGLFRAGMENTMATERIALIVSGIXPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4806 +PFNGLGETFRAGMENTLIGHTFVSGIXPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4807 +PFNGLGETFRAGMENTLIGHTIVSGIXPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4808 +PFNGLGETFRAGMENTMATERIALFVSGIXPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4809 +PFNGLGETFRAGMENTMATERIALIVSGIXPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4810 +PFNGLLIGHTENVISGIXPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:4811 +# IBM_rasterpos_clip (GL/glext.h:4814) +GL_IBM_rasterpos_clip = 1 # GL/glext.h:4815 +# HP_texture_lighting (GL/glext.h:4818) +GL_HP_texture_lighting = 1 # GL/glext.h:4819 +# EXT_draw_range_elements (GL/glext.h:4822) +GL_EXT_draw_range_elements = 1 # GL/glext.h:4823 +# GL/glext.h:4825 +glDrawRangeElementsEXT = _link_function('glDrawRangeElementsEXT', None, [GLenum, GLuint, GLuint, GLsizei, GLenum, POINTER(GLvoid)], 'EXT_draw_range_elements') + +PFNGLDRAWRANGEELEMENTSEXTPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLsizei, GLenum, POINTER(GLvoid)) # GL/glext.h:4827 +# WIN_phong_shading (GL/glext.h:4830) +GL_WIN_phong_shading = 1 # GL/glext.h:4831 +# WIN_specular_fog (GL/glext.h:4834) +GL_WIN_specular_fog = 1 # GL/glext.h:4835 +# EXT_light_texture (GL/glext.h:4838) +GL_EXT_light_texture = 1 # GL/glext.h:4839 +# GL/glext.h:4841 +glApplyTextureEXT = _link_function('glApplyTextureEXT', None, [GLenum], 'EXT_light_texture') + +# GL/glext.h:4842 +glTextureLightEXT = _link_function('glTextureLightEXT', None, [GLenum], 'EXT_light_texture') + +# GL/glext.h:4843 +glTextureMaterialEXT = _link_function('glTextureMaterialEXT', None, [GLenum, GLenum], 'EXT_light_texture') + +PFNGLAPPLYTEXTUREEXTPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:4845 +PFNGLTEXTURELIGHTEXTPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:4846 +PFNGLTEXTUREMATERIALEXTPROC = CFUNCTYPE(None, GLenum, GLenum) # GL/glext.h:4847 +# SGIX_blend_alpha_minmax (GL/glext.h:4850) +GL_SGIX_blend_alpha_minmax = 1 # GL/glext.h:4851 +# EXT_bgra (GL/glext.h:4854) +GL_EXT_bgra = 1 # GL/glext.h:4855 +# SGIX_async (GL/glext.h:4858) +GL_SGIX_async = 1 # GL/glext.h:4859 +# GL/glext.h:4861 +glAsyncMarkerSGIX = _link_function('glAsyncMarkerSGIX', None, [GLuint], 'SGIX_async') + +# GL/glext.h:4862 +glFinishAsyncSGIX = _link_function('glFinishAsyncSGIX', GLint, [POINTER(GLuint)], 'SGIX_async') + +# GL/glext.h:4863 +glPollAsyncSGIX = _link_function('glPollAsyncSGIX', GLint, [POINTER(GLuint)], 'SGIX_async') + +# GL/glext.h:4864 +glGenAsyncMarkersSGIX = _link_function('glGenAsyncMarkersSGIX', GLuint, [GLsizei], 'SGIX_async') + +# GL/glext.h:4865 +glDeleteAsyncMarkersSGIX = _link_function('glDeleteAsyncMarkersSGIX', None, [GLuint, GLsizei], 'SGIX_async') + +# GL/glext.h:4866 +glIsAsyncMarkerSGIX = _link_function('glIsAsyncMarkerSGIX', GLboolean, [GLuint], 'SGIX_async') + +PFNGLASYNCMARKERSGIXPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:4868 +PFNGLFINISHASYNCSGIXPROC = CFUNCTYPE(GLint, POINTER(GLuint)) # GL/glext.h:4869 +PFNGLPOLLASYNCSGIXPROC = CFUNCTYPE(GLint, POINTER(GLuint)) # GL/glext.h:4870 +PFNGLGENASYNCMARKERSSGIXPROC = CFUNCTYPE(GLuint, GLsizei) # GL/glext.h:4871 +PFNGLDELETEASYNCMARKERSSGIXPROC = CFUNCTYPE(None, GLuint, GLsizei) # GL/glext.h:4872 +PFNGLISASYNCMARKERSGIXPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:4873 +# SGIX_async_pixel (GL/glext.h:4876) +GL_SGIX_async_pixel = 1 # GL/glext.h:4877 +# SGIX_async_histogram (GL/glext.h:4880) +GL_SGIX_async_histogram = 1 # GL/glext.h:4881 +# INTEL_parallel_arrays (GL/glext.h:4884) +GL_INTEL_parallel_arrays = 1 # GL/glext.h:4885 +# GL/glext.h:4887 +glVertexPointervINTEL = _link_function('glVertexPointervINTEL', None, [GLint, GLenum, POINTER(POINTER(GLvoid))], 'INTEL_parallel_arrays') + +# GL/glext.h:4888 +glNormalPointervINTEL = _link_function('glNormalPointervINTEL', None, [GLenum, POINTER(POINTER(GLvoid))], 'INTEL_parallel_arrays') + +# GL/glext.h:4889 +glColorPointervINTEL = _link_function('glColorPointervINTEL', None, [GLint, GLenum, POINTER(POINTER(GLvoid))], 'INTEL_parallel_arrays') + +# GL/glext.h:4890 +glTexCoordPointervINTEL = _link_function('glTexCoordPointervINTEL', None, [GLint, GLenum, POINTER(POINTER(GLvoid))], 'INTEL_parallel_arrays') + +PFNGLVERTEXPOINTERVINTELPROC = CFUNCTYPE(None, GLint, GLenum, POINTER(POINTER(GLvoid))) # GL/glext.h:4892 +PFNGLNORMALPOINTERVINTELPROC = CFUNCTYPE(None, GLenum, POINTER(POINTER(GLvoid))) # GL/glext.h:4893 +PFNGLCOLORPOINTERVINTELPROC = CFUNCTYPE(None, GLint, GLenum, POINTER(POINTER(GLvoid))) # GL/glext.h:4894 +PFNGLTEXCOORDPOINTERVINTELPROC = CFUNCTYPE(None, GLint, GLenum, POINTER(POINTER(GLvoid))) # GL/glext.h:4895 +# HP_occlusion_test (GL/glext.h:4898) +GL_HP_occlusion_test = 1 # GL/glext.h:4899 +# EXT_pixel_transform (GL/glext.h:4902) +GL_EXT_pixel_transform = 1 # GL/glext.h:4903 +# GL/glext.h:4905 +glPixelTransformParameteriEXT = _link_function('glPixelTransformParameteriEXT', None, [GLenum, GLenum, GLint], 'EXT_pixel_transform') + +# GL/glext.h:4906 +glPixelTransformParameterfEXT = _link_function('glPixelTransformParameterfEXT', None, [GLenum, GLenum, GLfloat], 'EXT_pixel_transform') + +# GL/glext.h:4907 +glPixelTransformParameterivEXT = _link_function('glPixelTransformParameterivEXT', None, [GLenum, GLenum, POINTER(GLint)], 'EXT_pixel_transform') + +# GL/glext.h:4908 +glPixelTransformParameterfvEXT = _link_function('glPixelTransformParameterfvEXT', None, [GLenum, GLenum, POINTER(GLfloat)], 'EXT_pixel_transform') + +PFNGLPIXELTRANSFORMPARAMETERIEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLint) # GL/glext.h:4910 +PFNGLPIXELTRANSFORMPARAMETERFEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLfloat) # GL/glext.h:4911 +PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4912 +PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4913 +# EXT_pixel_transform_color_table (GL/glext.h:4916) +GL_EXT_pixel_transform_color_table = 1 # GL/glext.h:4917 +# EXT_shared_texture_palette (GL/glext.h:4920) +GL_EXT_shared_texture_palette = 1 # GL/glext.h:4921 +# EXT_separate_specular_color (GL/glext.h:4924) +GL_EXT_separate_specular_color = 1 # GL/glext.h:4925 +# EXT_secondary_color (GL/glext.h:4928) +GL_EXT_secondary_color = 1 # GL/glext.h:4929 +# GL/glext.h:4931 +glSecondaryColor3bEXT = _link_function('glSecondaryColor3bEXT', None, [GLbyte, GLbyte, GLbyte], 'EXT_secondary_color') + +# GL/glext.h:4932 +glSecondaryColor3bvEXT = _link_function('glSecondaryColor3bvEXT', None, [POINTER(GLbyte)], 'EXT_secondary_color') + +# GL/glext.h:4933 +glSecondaryColor3dEXT = _link_function('glSecondaryColor3dEXT', None, [GLdouble, GLdouble, GLdouble], 'EXT_secondary_color') + +# GL/glext.h:4934 +glSecondaryColor3dvEXT = _link_function('glSecondaryColor3dvEXT', None, [POINTER(GLdouble)], 'EXT_secondary_color') + +# GL/glext.h:4935 +glSecondaryColor3fEXT = _link_function('glSecondaryColor3fEXT', None, [GLfloat, GLfloat, GLfloat], 'EXT_secondary_color') + +# GL/glext.h:4936 +glSecondaryColor3fvEXT = _link_function('glSecondaryColor3fvEXT', None, [POINTER(GLfloat)], 'EXT_secondary_color') + +# GL/glext.h:4937 +glSecondaryColor3iEXT = _link_function('glSecondaryColor3iEXT', None, [GLint, GLint, GLint], 'EXT_secondary_color') + +# GL/glext.h:4938 +glSecondaryColor3ivEXT = _link_function('glSecondaryColor3ivEXT', None, [POINTER(GLint)], 'EXT_secondary_color') + +# GL/glext.h:4939 +glSecondaryColor3sEXT = _link_function('glSecondaryColor3sEXT', None, [GLshort, GLshort, GLshort], 'EXT_secondary_color') + +# GL/glext.h:4940 +glSecondaryColor3svEXT = _link_function('glSecondaryColor3svEXT', None, [POINTER(GLshort)], 'EXT_secondary_color') + +# GL/glext.h:4941 +glSecondaryColor3ubEXT = _link_function('glSecondaryColor3ubEXT', None, [GLubyte, GLubyte, GLubyte], 'EXT_secondary_color') + +# GL/glext.h:4942 +glSecondaryColor3ubvEXT = _link_function('glSecondaryColor3ubvEXT', None, [POINTER(GLubyte)], 'EXT_secondary_color') + +# GL/glext.h:4943 +glSecondaryColor3uiEXT = _link_function('glSecondaryColor3uiEXT', None, [GLuint, GLuint, GLuint], 'EXT_secondary_color') + +# GL/glext.h:4944 +glSecondaryColor3uivEXT = _link_function('glSecondaryColor3uivEXT', None, [POINTER(GLuint)], 'EXT_secondary_color') + +# GL/glext.h:4945 +glSecondaryColor3usEXT = _link_function('glSecondaryColor3usEXT', None, [GLushort, GLushort, GLushort], 'EXT_secondary_color') + +# GL/glext.h:4946 +glSecondaryColor3usvEXT = _link_function('glSecondaryColor3usvEXT', None, [POINTER(GLushort)], 'EXT_secondary_color') + +# GL/glext.h:4947 +glSecondaryColorPointerEXT = _link_function('glSecondaryColorPointerEXT', None, [GLint, GLenum, GLsizei, POINTER(GLvoid)], 'EXT_secondary_color') + +PFNGLSECONDARYCOLOR3BEXTPROC = CFUNCTYPE(None, GLbyte, GLbyte, GLbyte) # GL/glext.h:4949 +PFNGLSECONDARYCOLOR3BVEXTPROC = CFUNCTYPE(None, POINTER(GLbyte)) # GL/glext.h:4950 +PFNGLSECONDARYCOLOR3DEXTPROC = CFUNCTYPE(None, GLdouble, GLdouble, GLdouble) # GL/glext.h:4951 +PFNGLSECONDARYCOLOR3DVEXTPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:4952 +PFNGLSECONDARYCOLOR3FEXTPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat) # GL/glext.h:4953 +PFNGLSECONDARYCOLOR3FVEXTPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:4954 +PFNGLSECONDARYCOLOR3IEXTPROC = CFUNCTYPE(None, GLint, GLint, GLint) # GL/glext.h:4955 +PFNGLSECONDARYCOLOR3IVEXTPROC = CFUNCTYPE(None, POINTER(GLint)) # GL/glext.h:4956 +PFNGLSECONDARYCOLOR3SEXTPROC = CFUNCTYPE(None, GLshort, GLshort, GLshort) # GL/glext.h:4957 +PFNGLSECONDARYCOLOR3SVEXTPROC = CFUNCTYPE(None, POINTER(GLshort)) # GL/glext.h:4958 +PFNGLSECONDARYCOLOR3UBEXTPROC = CFUNCTYPE(None, GLubyte, GLubyte, GLubyte) # GL/glext.h:4959 +PFNGLSECONDARYCOLOR3UBVEXTPROC = CFUNCTYPE(None, POINTER(GLubyte)) # GL/glext.h:4960 +PFNGLSECONDARYCOLOR3UIEXTPROC = CFUNCTYPE(None, GLuint, GLuint, GLuint) # GL/glext.h:4961 +PFNGLSECONDARYCOLOR3UIVEXTPROC = CFUNCTYPE(None, POINTER(GLuint)) # GL/glext.h:4962 +PFNGLSECONDARYCOLOR3USEXTPROC = CFUNCTYPE(None, GLushort, GLushort, GLushort) # GL/glext.h:4963 +PFNGLSECONDARYCOLOR3USVEXTPROC = CFUNCTYPE(None, POINTER(GLushort)) # GL/glext.h:4964 +PFNGLSECONDARYCOLORPOINTEREXTPROC = CFUNCTYPE(None, GLint, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:4965 +# EXT_texture_perturb_normal (GL/glext.h:4968) +GL_EXT_texture_perturb_normal = 1 # GL/glext.h:4969 +# GL/glext.h:4971 +glTextureNormalEXT = _link_function('glTextureNormalEXT', None, [GLenum], 'EXT_texture_perturb_normal') + +PFNGLTEXTURENORMALEXTPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:4973 +# EXT_multi_draw_arrays (GL/glext.h:4976) +GL_EXT_multi_draw_arrays = 1 # GL/glext.h:4977 +# GL/glext.h:4979 +glMultiDrawArraysEXT = _link_function('glMultiDrawArraysEXT', None, [GLenum, POINTER(GLint), POINTER(GLsizei), GLsizei], 'EXT_multi_draw_arrays') + +# GL/glext.h:4980 +glMultiDrawElementsEXT = _link_function('glMultiDrawElementsEXT', None, [GLenum, POINTER(GLsizei), GLenum, POINTER(POINTER(GLvoid)), GLsizei], 'EXT_multi_draw_arrays') + +PFNGLMULTIDRAWARRAYSEXTPROC = CFUNCTYPE(None, GLenum, POINTER(GLint), POINTER(GLsizei), GLsizei) # GL/glext.h:4982 +PFNGLMULTIDRAWELEMENTSEXTPROC = CFUNCTYPE(None, GLenum, POINTER(GLsizei), GLenum, POINTER(POINTER(GLvoid)), GLsizei) # GL/glext.h:4983 +# EXT_fog_coord (GL/glext.h:4986) +GL_EXT_fog_coord = 1 # GL/glext.h:4987 +# GL/glext.h:4989 +glFogCoordfEXT = _link_function('glFogCoordfEXT', None, [GLfloat], 'EXT_fog_coord') + +# GL/glext.h:4990 +glFogCoordfvEXT = _link_function('glFogCoordfvEXT', None, [POINTER(GLfloat)], 'EXT_fog_coord') + +# GL/glext.h:4991 +glFogCoorddEXT = _link_function('glFogCoorddEXT', None, [GLdouble], 'EXT_fog_coord') + +# GL/glext.h:4992 +glFogCoorddvEXT = _link_function('glFogCoorddvEXT', None, [POINTER(GLdouble)], 'EXT_fog_coord') + +# GL/glext.h:4993 +glFogCoordPointerEXT = _link_function('glFogCoordPointerEXT', None, [GLenum, GLsizei, POINTER(GLvoid)], 'EXT_fog_coord') + +PFNGLFOGCOORDFEXTPROC = CFUNCTYPE(None, GLfloat) # GL/glext.h:4995 +PFNGLFOGCOORDFVEXTPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:4996 +PFNGLFOGCOORDDEXTPROC = CFUNCTYPE(None, GLdouble) # GL/glext.h:4997 +PFNGLFOGCOORDDVEXTPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:4998 +PFNGLFOGCOORDPOINTEREXTPROC = CFUNCTYPE(None, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:4999 +# REND_screen_coordinates (GL/glext.h:5002) +GL_REND_screen_coordinates = 1 # GL/glext.h:5003 +# EXT_coordinate_frame (GL/glext.h:5006) +GL_EXT_coordinate_frame = 1 # GL/glext.h:5007 +# GL/glext.h:5009 +glTangent3bEXT = _link_function('glTangent3bEXT', None, [GLbyte, GLbyte, GLbyte], 'EXT_coordinate_frame') + +# GL/glext.h:5010 +glTangent3bvEXT = _link_function('glTangent3bvEXT', None, [POINTER(GLbyte)], 'EXT_coordinate_frame') + +# GL/glext.h:5011 +glTangent3dEXT = _link_function('glTangent3dEXT', None, [GLdouble, GLdouble, GLdouble], 'EXT_coordinate_frame') + +# GL/glext.h:5012 +glTangent3dvEXT = _link_function('glTangent3dvEXT', None, [POINTER(GLdouble)], 'EXT_coordinate_frame') + +# GL/glext.h:5013 +glTangent3fEXT = _link_function('glTangent3fEXT', None, [GLfloat, GLfloat, GLfloat], 'EXT_coordinate_frame') + +# GL/glext.h:5014 +glTangent3fvEXT = _link_function('glTangent3fvEXT', None, [POINTER(GLfloat)], 'EXT_coordinate_frame') + +# GL/glext.h:5015 +glTangent3iEXT = _link_function('glTangent3iEXT', None, [GLint, GLint, GLint], 'EXT_coordinate_frame') + +# GL/glext.h:5016 +glTangent3ivEXT = _link_function('glTangent3ivEXT', None, [POINTER(GLint)], 'EXT_coordinate_frame') + +# GL/glext.h:5017 +glTangent3sEXT = _link_function('glTangent3sEXT', None, [GLshort, GLshort, GLshort], 'EXT_coordinate_frame') + +# GL/glext.h:5018 +glTangent3svEXT = _link_function('glTangent3svEXT', None, [POINTER(GLshort)], 'EXT_coordinate_frame') + +# GL/glext.h:5019 +glBinormal3bEXT = _link_function('glBinormal3bEXT', None, [GLbyte, GLbyte, GLbyte], 'EXT_coordinate_frame') + +# GL/glext.h:5020 +glBinormal3bvEXT = _link_function('glBinormal3bvEXT', None, [POINTER(GLbyte)], 'EXT_coordinate_frame') + +# GL/glext.h:5021 +glBinormal3dEXT = _link_function('glBinormal3dEXT', None, [GLdouble, GLdouble, GLdouble], 'EXT_coordinate_frame') + +# GL/glext.h:5022 +glBinormal3dvEXT = _link_function('glBinormal3dvEXT', None, [POINTER(GLdouble)], 'EXT_coordinate_frame') + +# GL/glext.h:5023 +glBinormal3fEXT = _link_function('glBinormal3fEXT', None, [GLfloat, GLfloat, GLfloat], 'EXT_coordinate_frame') + +# GL/glext.h:5024 +glBinormal3fvEXT = _link_function('glBinormal3fvEXT', None, [POINTER(GLfloat)], 'EXT_coordinate_frame') + +# GL/glext.h:5025 +glBinormal3iEXT = _link_function('glBinormal3iEXT', None, [GLint, GLint, GLint], 'EXT_coordinate_frame') + +# GL/glext.h:5026 +glBinormal3ivEXT = _link_function('glBinormal3ivEXT', None, [POINTER(GLint)], 'EXT_coordinate_frame') + +# GL/glext.h:5027 +glBinormal3sEXT = _link_function('glBinormal3sEXT', None, [GLshort, GLshort, GLshort], 'EXT_coordinate_frame') + +# GL/glext.h:5028 +glBinormal3svEXT = _link_function('glBinormal3svEXT', None, [POINTER(GLshort)], 'EXT_coordinate_frame') + +# GL/glext.h:5029 +glTangentPointerEXT = _link_function('glTangentPointerEXT', None, [GLenum, GLsizei, POINTER(GLvoid)], 'EXT_coordinate_frame') + +# GL/glext.h:5030 +glBinormalPointerEXT = _link_function('glBinormalPointerEXT', None, [GLenum, GLsizei, POINTER(GLvoid)], 'EXT_coordinate_frame') + +PFNGLTANGENT3BEXTPROC = CFUNCTYPE(None, GLbyte, GLbyte, GLbyte) # GL/glext.h:5032 +PFNGLTANGENT3BVEXTPROC = CFUNCTYPE(None, POINTER(GLbyte)) # GL/glext.h:5033 +PFNGLTANGENT3DEXTPROC = CFUNCTYPE(None, GLdouble, GLdouble, GLdouble) # GL/glext.h:5034 +PFNGLTANGENT3DVEXTPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:5035 +PFNGLTANGENT3FEXTPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat) # GL/glext.h:5036 +PFNGLTANGENT3FVEXTPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:5037 +PFNGLTANGENT3IEXTPROC = CFUNCTYPE(None, GLint, GLint, GLint) # GL/glext.h:5038 +PFNGLTANGENT3IVEXTPROC = CFUNCTYPE(None, POINTER(GLint)) # GL/glext.h:5039 +PFNGLTANGENT3SEXTPROC = CFUNCTYPE(None, GLshort, GLshort, GLshort) # GL/glext.h:5040 +PFNGLTANGENT3SVEXTPROC = CFUNCTYPE(None, POINTER(GLshort)) # GL/glext.h:5041 +PFNGLBINORMAL3BEXTPROC = CFUNCTYPE(None, GLbyte, GLbyte, GLbyte) # GL/glext.h:5042 +PFNGLBINORMAL3BVEXTPROC = CFUNCTYPE(None, POINTER(GLbyte)) # GL/glext.h:5043 +PFNGLBINORMAL3DEXTPROC = CFUNCTYPE(None, GLdouble, GLdouble, GLdouble) # GL/glext.h:5044 +PFNGLBINORMAL3DVEXTPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:5045 +PFNGLBINORMAL3FEXTPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat) # GL/glext.h:5046 +PFNGLBINORMAL3FVEXTPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:5047 +PFNGLBINORMAL3IEXTPROC = CFUNCTYPE(None, GLint, GLint, GLint) # GL/glext.h:5048 +PFNGLBINORMAL3IVEXTPROC = CFUNCTYPE(None, POINTER(GLint)) # GL/glext.h:5049 +PFNGLBINORMAL3SEXTPROC = CFUNCTYPE(None, GLshort, GLshort, GLshort) # GL/glext.h:5050 +PFNGLBINORMAL3SVEXTPROC = CFUNCTYPE(None, POINTER(GLshort)) # GL/glext.h:5051 +PFNGLTANGENTPOINTEREXTPROC = CFUNCTYPE(None, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:5052 +PFNGLBINORMALPOINTEREXTPROC = CFUNCTYPE(None, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:5053 +# EXT_texture_env_combine (GL/glext.h:5056) +GL_EXT_texture_env_combine = 1 # GL/glext.h:5057 +# APPLE_specular_vector (GL/glext.h:5060) +GL_APPLE_specular_vector = 1 # GL/glext.h:5061 +# APPLE_transform_hint (GL/glext.h:5064) +GL_APPLE_transform_hint = 1 # GL/glext.h:5065 +# SGIX_fog_scale (GL/glext.h:5068) +GL_SGIX_fog_scale = 1 # GL/glext.h:5069 +# SUNX_constant_data (GL/glext.h:5072) +GL_SUNX_constant_data = 1 # GL/glext.h:5073 +# GL/glext.h:5075 +glFinishTextureSUNX = _link_function('glFinishTextureSUNX', None, [], 'SUNX_constant_data') + +PFNGLFINISHTEXTURESUNXPROC = CFUNCTYPE(None) # GL/glext.h:5077 +# SUN_global_alpha (GL/glext.h:5080) +GL_SUN_global_alpha = 1 # GL/glext.h:5081 +# GL/glext.h:5083 +glGlobalAlphaFactorbSUN = _link_function('glGlobalAlphaFactorbSUN', None, [GLbyte], 'SUN_global_alpha') + +# GL/glext.h:5084 +glGlobalAlphaFactorsSUN = _link_function('glGlobalAlphaFactorsSUN', None, [GLshort], 'SUN_global_alpha') + +# GL/glext.h:5085 +glGlobalAlphaFactoriSUN = _link_function('glGlobalAlphaFactoriSUN', None, [GLint], 'SUN_global_alpha') + +# GL/glext.h:5086 +glGlobalAlphaFactorfSUN = _link_function('glGlobalAlphaFactorfSUN', None, [GLfloat], 'SUN_global_alpha') + +# GL/glext.h:5087 +glGlobalAlphaFactordSUN = _link_function('glGlobalAlphaFactordSUN', None, [GLdouble], 'SUN_global_alpha') + +# GL/glext.h:5088 +glGlobalAlphaFactorubSUN = _link_function('glGlobalAlphaFactorubSUN', None, [GLubyte], 'SUN_global_alpha') + +# GL/glext.h:5089 +glGlobalAlphaFactorusSUN = _link_function('glGlobalAlphaFactorusSUN', None, [GLushort], 'SUN_global_alpha') + +# GL/glext.h:5090 +glGlobalAlphaFactoruiSUN = _link_function('glGlobalAlphaFactoruiSUN', None, [GLuint], 'SUN_global_alpha') + +PFNGLGLOBALALPHAFACTORBSUNPROC = CFUNCTYPE(None, GLbyte) # GL/glext.h:5092 +PFNGLGLOBALALPHAFACTORSSUNPROC = CFUNCTYPE(None, GLshort) # GL/glext.h:5093 +PFNGLGLOBALALPHAFACTORISUNPROC = CFUNCTYPE(None, GLint) # GL/glext.h:5094 +PFNGLGLOBALALPHAFACTORFSUNPROC = CFUNCTYPE(None, GLfloat) # GL/glext.h:5095 +PFNGLGLOBALALPHAFACTORDSUNPROC = CFUNCTYPE(None, GLdouble) # GL/glext.h:5096 +PFNGLGLOBALALPHAFACTORUBSUNPROC = CFUNCTYPE(None, GLubyte) # GL/glext.h:5097 +PFNGLGLOBALALPHAFACTORUSSUNPROC = CFUNCTYPE(None, GLushort) # GL/glext.h:5098 +PFNGLGLOBALALPHAFACTORUISUNPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:5099 +# SUN_triangle_list (GL/glext.h:5102) +GL_SUN_triangle_list = 1 # GL/glext.h:5103 +# GL/glext.h:5105 +glReplacementCodeuiSUN = _link_function('glReplacementCodeuiSUN', None, [GLuint], 'SUN_triangle_list') + +# GL/glext.h:5106 +glReplacementCodeusSUN = _link_function('glReplacementCodeusSUN', None, [GLushort], 'SUN_triangle_list') + +# GL/glext.h:5107 +glReplacementCodeubSUN = _link_function('glReplacementCodeubSUN', None, [GLubyte], 'SUN_triangle_list') + +# GL/glext.h:5108 +glReplacementCodeuivSUN = _link_function('glReplacementCodeuivSUN', None, [POINTER(GLuint)], 'SUN_triangle_list') + +# GL/glext.h:5109 +glReplacementCodeusvSUN = _link_function('glReplacementCodeusvSUN', None, [POINTER(GLushort)], 'SUN_triangle_list') + +# GL/glext.h:5110 +glReplacementCodeubvSUN = _link_function('glReplacementCodeubvSUN', None, [POINTER(GLubyte)], 'SUN_triangle_list') + +# GL/glext.h:5111 +glReplacementCodePointerSUN = _link_function('glReplacementCodePointerSUN', None, [GLenum, GLsizei, POINTER(POINTER(GLvoid))], 'SUN_triangle_list') + +PFNGLREPLACEMENTCODEUISUNPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:5113 +PFNGLREPLACEMENTCODEUSSUNPROC = CFUNCTYPE(None, GLushort) # GL/glext.h:5114 +PFNGLREPLACEMENTCODEUBSUNPROC = CFUNCTYPE(None, GLubyte) # GL/glext.h:5115 +PFNGLREPLACEMENTCODEUIVSUNPROC = CFUNCTYPE(None, POINTER(GLuint)) # GL/glext.h:5116 +PFNGLREPLACEMENTCODEUSVSUNPROC = CFUNCTYPE(None, POINTER(GLushort)) # GL/glext.h:5117 +PFNGLREPLACEMENTCODEUBVSUNPROC = CFUNCTYPE(None, POINTER(GLubyte)) # GL/glext.h:5118 +PFNGLREPLACEMENTCODEPOINTERSUNPROC = CFUNCTYPE(None, GLenum, GLsizei, POINTER(POINTER(GLvoid))) # GL/glext.h:5119 +# SUN_vertex (GL/glext.h:5122) +GL_SUN_vertex = 1 # GL/glext.h:5123 +# GL/glext.h:5125 +glColor4ubVertex2fSUN = _link_function('glColor4ubVertex2fSUN', None, [GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5126 +glColor4ubVertex2fvSUN = _link_function('glColor4ubVertex2fvSUN', None, [POINTER(GLubyte), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5127 +glColor4ubVertex3fSUN = _link_function('glColor4ubVertex3fSUN', None, [GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5128 +glColor4ubVertex3fvSUN = _link_function('glColor4ubVertex3fvSUN', None, [POINTER(GLubyte), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5129 +glColor3fVertex3fSUN = _link_function('glColor3fVertex3fSUN', None, [GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5130 +glColor3fVertex3fvSUN = _link_function('glColor3fVertex3fvSUN', None, [POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5131 +glNormal3fVertex3fSUN = _link_function('glNormal3fVertex3fSUN', None, [GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5132 +glNormal3fVertex3fvSUN = _link_function('glNormal3fVertex3fvSUN', None, [POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5133 +glColor4fNormal3fVertex3fSUN = _link_function('glColor4fNormal3fVertex3fSUN', None, [GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5134 +glColor4fNormal3fVertex3fvSUN = _link_function('glColor4fNormal3fVertex3fvSUN', None, [POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5135 +glTexCoord2fVertex3fSUN = _link_function('glTexCoord2fVertex3fSUN', None, [GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5136 +glTexCoord2fVertex3fvSUN = _link_function('glTexCoord2fVertex3fvSUN', None, [POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5137 +glTexCoord4fVertex4fSUN = _link_function('glTexCoord4fVertex4fSUN', None, [GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5138 +glTexCoord4fVertex4fvSUN = _link_function('glTexCoord4fVertex4fvSUN', None, [POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5139 +glTexCoord2fColor4ubVertex3fSUN = _link_function('glTexCoord2fColor4ubVertex3fSUN', None, [GLfloat, GLfloat, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5140 +glTexCoord2fColor4ubVertex3fvSUN = _link_function('glTexCoord2fColor4ubVertex3fvSUN', None, [POINTER(GLfloat), POINTER(GLubyte), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5141 +glTexCoord2fColor3fVertex3fSUN = _link_function('glTexCoord2fColor3fVertex3fSUN', None, [GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5142 +glTexCoord2fColor3fVertex3fvSUN = _link_function('glTexCoord2fColor3fVertex3fvSUN', None, [POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5143 +glTexCoord2fNormal3fVertex3fSUN = _link_function('glTexCoord2fNormal3fVertex3fSUN', None, [GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5144 +glTexCoord2fNormal3fVertex3fvSUN = _link_function('glTexCoord2fNormal3fVertex3fvSUN', None, [POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5145 +glTexCoord2fColor4fNormal3fVertex3fSUN = _link_function('glTexCoord2fColor4fNormal3fVertex3fSUN', None, [GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5146 +glTexCoord2fColor4fNormal3fVertex3fvSUN = _link_function('glTexCoord2fColor4fNormal3fVertex3fvSUN', None, [POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5147 +glTexCoord4fColor4fNormal3fVertex4fSUN = _link_function('glTexCoord4fColor4fNormal3fVertex4fSUN', None, [GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5148 +glTexCoord4fColor4fNormal3fVertex4fvSUN = _link_function('glTexCoord4fColor4fNormal3fVertex4fvSUN', None, [POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5149 +glReplacementCodeuiVertex3fSUN = _link_function('glReplacementCodeuiVertex3fSUN', None, [GLuint, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5150 +glReplacementCodeuiVertex3fvSUN = _link_function('glReplacementCodeuiVertex3fvSUN', None, [POINTER(GLuint), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5151 +glReplacementCodeuiColor4ubVertex3fSUN = _link_function('glReplacementCodeuiColor4ubVertex3fSUN', None, [GLuint, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5152 +glReplacementCodeuiColor4ubVertex3fvSUN = _link_function('glReplacementCodeuiColor4ubVertex3fvSUN', None, [POINTER(GLuint), POINTER(GLubyte), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5153 +glReplacementCodeuiColor3fVertex3fSUN = _link_function('glReplacementCodeuiColor3fVertex3fSUN', None, [GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5154 +glReplacementCodeuiColor3fVertex3fvSUN = _link_function('glReplacementCodeuiColor3fVertex3fvSUN', None, [POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5155 +glReplacementCodeuiNormal3fVertex3fSUN = _link_function('glReplacementCodeuiNormal3fVertex3fSUN', None, [GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5156 +glReplacementCodeuiNormal3fVertex3fvSUN = _link_function('glReplacementCodeuiNormal3fVertex3fvSUN', None, [POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5157 +glReplacementCodeuiColor4fNormal3fVertex3fSUN = _link_function('glReplacementCodeuiColor4fNormal3fVertex3fSUN', None, [GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5158 +glReplacementCodeuiColor4fNormal3fVertex3fvSUN = _link_function('glReplacementCodeuiColor4fNormal3fVertex3fvSUN', None, [POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5159 +glReplacementCodeuiTexCoord2fVertex3fSUN = _link_function('glReplacementCodeuiTexCoord2fVertex3fSUN', None, [GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5160 +glReplacementCodeuiTexCoord2fVertex3fvSUN = _link_function('glReplacementCodeuiTexCoord2fVertex3fvSUN', None, [POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5161 +glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = _link_function('glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN', None, [GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5162 +glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = _link_function('glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN', None, [POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5163 +glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = _link_function('glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN', None, [GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5164 +glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = _link_function('glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN', None, [POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +PFNGLCOLOR4UBVERTEX2FSUNPROC = CFUNCTYPE(None, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat) # GL/glext.h:5166 +PFNGLCOLOR4UBVERTEX2FVSUNPROC = CFUNCTYPE(None, POINTER(GLubyte), POINTER(GLfloat)) # GL/glext.h:5167 +PFNGLCOLOR4UBVERTEX3FSUNPROC = CFUNCTYPE(None, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat) # GL/glext.h:5168 +PFNGLCOLOR4UBVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLubyte), POINTER(GLfloat)) # GL/glext.h:5169 +PFNGLCOLOR3FVERTEX3FSUNPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5170 +PFNGLCOLOR3FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5171 +PFNGLNORMAL3FVERTEX3FSUNPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5172 +PFNGLNORMAL3FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5173 +PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5174 +PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5175 +PFNGLTEXCOORD2FVERTEX3FSUNPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5176 +PFNGLTEXCOORD2FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5177 +PFNGLTEXCOORD4FVERTEX4FSUNPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5178 +PFNGLTEXCOORD4FVERTEX4FVSUNPROC = CFUNCTYPE(None, POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5179 +PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat) # GL/glext.h:5180 +PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLfloat), POINTER(GLubyte), POINTER(GLfloat)) # GL/glext.h:5181 +PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5182 +PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5183 +PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5184 +PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5185 +PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5186 +PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5187 +PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5188 +PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC = CFUNCTYPE(None, POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5189 +PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat) # GL/glext.h:5190 +PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLuint), POINTER(GLfloat)) # GL/glext.h:5191 +PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC = CFUNCTYPE(None, GLuint, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat) # GL/glext.h:5192 +PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLuint), POINTER(GLubyte), POINTER(GLfloat)) # GL/glext.h:5193 +PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5194 +PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5195 +PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5196 +PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5197 +PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5198 +PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5199 +PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5200 +PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5201 +PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5202 +PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5203 +PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5204 +PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5205 +# EXT_blend_func_separate (GL/glext.h:5208) +GL_EXT_blend_func_separate = 1 # GL/glext.h:5209 +# GL/glext.h:5211 +glBlendFuncSeparateEXT = _link_function('glBlendFuncSeparateEXT', None, [GLenum, GLenum, GLenum, GLenum], 'EXT_blend_func_separate') + +PFNGLBLENDFUNCSEPARATEEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLenum) # GL/glext.h:5213 +# INGR_blend_func_separate (GL/glext.h:5216) +GL_INGR_blend_func_separate = 1 # GL/glext.h:5217 +# GL/glext.h:5219 +glBlendFuncSeparateINGR = _link_function('glBlendFuncSeparateINGR', None, [GLenum, GLenum, GLenum, GLenum], 'INGR_blend_func_separate') + +PFNGLBLENDFUNCSEPARATEINGRPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLenum) # GL/glext.h:5221 +# INGR_color_clamp (GL/glext.h:5224) +GL_INGR_color_clamp = 1 # GL/glext.h:5225 +# INGR_interlace_read (GL/glext.h:5228) +GL_INGR_interlace_read = 1 # GL/glext.h:5229 +# EXT_stencil_wrap (GL/glext.h:5232) +GL_EXT_stencil_wrap = 1 # GL/glext.h:5233 +# EXT_422_pixels (GL/glext.h:5236) +GL_EXT_422_pixels = 1 # GL/glext.h:5237 +# NV_texgen_reflection (GL/glext.h:5240) +GL_NV_texgen_reflection = 1 # GL/glext.h:5241 +# SUN_convolution_border_modes (GL/glext.h:5244) +GL_SUN_convolution_border_modes = 1 # GL/glext.h:5245 +# EXT_texture_env_add (GL/glext.h:5248) +GL_EXT_texture_env_add = 1 # GL/glext.h:5249 +# EXT_texture_lod_bias (GL/glext.h:5252) +GL_EXT_texture_lod_bias = 1 # GL/glext.h:5253 +# EXT_texture_filter_anisotropic (GL/glext.h:5256) +GL_EXT_texture_filter_anisotropic = 1 # GL/glext.h:5257 +# EXT_vertex_weighting (GL/glext.h:5260) +GL_EXT_vertex_weighting = 1 # GL/glext.h:5261 +# GL/glext.h:5263 +glVertexWeightfEXT = _link_function('glVertexWeightfEXT', None, [GLfloat], 'EXT_vertex_weighting') + +# GL/glext.h:5264 +glVertexWeightfvEXT = _link_function('glVertexWeightfvEXT', None, [POINTER(GLfloat)], 'EXT_vertex_weighting') + +# GL/glext.h:5265 +glVertexWeightPointerEXT = _link_function('glVertexWeightPointerEXT', None, [GLsizei, GLenum, GLsizei, POINTER(GLvoid)], 'EXT_vertex_weighting') + +PFNGLVERTEXWEIGHTFEXTPROC = CFUNCTYPE(None, GLfloat) # GL/glext.h:5267 +PFNGLVERTEXWEIGHTFVEXTPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:5268 +PFNGLVERTEXWEIGHTPOINTEREXTPROC = CFUNCTYPE(None, GLsizei, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:5269 +# NV_light_max_exponent (GL/glext.h:5272) +GL_NV_light_max_exponent = 1 # GL/glext.h:5273 +# NV_vertex_array_range (GL/glext.h:5276) +GL_NV_vertex_array_range = 1 # GL/glext.h:5277 +# GL/glext.h:5279 +glFlushVertexArrayRangeNV = _link_function('glFlushVertexArrayRangeNV', None, [], 'NV_vertex_array_range') + +# GL/glext.h:5280 +glVertexArrayRangeNV = _link_function('glVertexArrayRangeNV', None, [GLsizei, POINTER(GLvoid)], 'NV_vertex_array_range') + +PFNGLFLUSHVERTEXARRAYRANGENVPROC = CFUNCTYPE(None) # GL/glext.h:5282 +PFNGLVERTEXARRAYRANGENVPROC = CFUNCTYPE(None, GLsizei, POINTER(GLvoid)) # GL/glext.h:5283 +# NV_register_combiners (GL/glext.h:5286) +GL_NV_register_combiners = 1 # GL/glext.h:5287 +# GL/glext.h:5289 +glCombinerParameterfvNV = _link_function('glCombinerParameterfvNV', None, [GLenum, POINTER(GLfloat)], 'NV_register_combiners') + +# GL/glext.h:5290 +glCombinerParameterfNV = _link_function('glCombinerParameterfNV', None, [GLenum, GLfloat], 'NV_register_combiners') + +# GL/glext.h:5291 +glCombinerParameterivNV = _link_function('glCombinerParameterivNV', None, [GLenum, POINTER(GLint)], 'NV_register_combiners') + +# GL/glext.h:5292 +glCombinerParameteriNV = _link_function('glCombinerParameteriNV', None, [GLenum, GLint], 'NV_register_combiners') + +# GL/glext.h:5293 +glCombinerInputNV = _link_function('glCombinerInputNV', None, [GLenum, GLenum, GLenum, GLenum, GLenum, GLenum], 'NV_register_combiners') + +# GL/glext.h:5294 +glCombinerOutputNV = _link_function('glCombinerOutputNV', None, [GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLboolean, GLboolean, GLboolean], 'NV_register_combiners') + +# GL/glext.h:5295 +glFinalCombinerInputNV = _link_function('glFinalCombinerInputNV', None, [GLenum, GLenum, GLenum, GLenum], 'NV_register_combiners') + +# GL/glext.h:5296 +glGetCombinerInputParameterfvNV = _link_function('glGetCombinerInputParameterfvNV', None, [GLenum, GLenum, GLenum, GLenum, POINTER(GLfloat)], 'NV_register_combiners') + +# GL/glext.h:5297 +glGetCombinerInputParameterivNV = _link_function('glGetCombinerInputParameterivNV', None, [GLenum, GLenum, GLenum, GLenum, POINTER(GLint)], 'NV_register_combiners') + +# GL/glext.h:5298 +glGetCombinerOutputParameterfvNV = _link_function('glGetCombinerOutputParameterfvNV', None, [GLenum, GLenum, GLenum, POINTER(GLfloat)], 'NV_register_combiners') + +# GL/glext.h:5299 +glGetCombinerOutputParameterivNV = _link_function('glGetCombinerOutputParameterivNV', None, [GLenum, GLenum, GLenum, POINTER(GLint)], 'NV_register_combiners') + +# GL/glext.h:5300 +glGetFinalCombinerInputParameterfvNV = _link_function('glGetFinalCombinerInputParameterfvNV', None, [GLenum, GLenum, POINTER(GLfloat)], 'NV_register_combiners') + +# GL/glext.h:5301 +glGetFinalCombinerInputParameterivNV = _link_function('glGetFinalCombinerInputParameterivNV', None, [GLenum, GLenum, POINTER(GLint)], 'NV_register_combiners') + +PFNGLCOMBINERPARAMETERFVNVPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:5303 +PFNGLCOMBINERPARAMETERFNVPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:5304 +PFNGLCOMBINERPARAMETERIVNVPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:5305 +PFNGLCOMBINERPARAMETERINVPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:5306 +PFNGLCOMBINERINPUTNVPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum) # GL/glext.h:5307 +PFNGLCOMBINEROUTPUTNVPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLboolean, GLboolean, GLboolean) # GL/glext.h:5308 +PFNGLFINALCOMBINERINPUTNVPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLenum) # GL/glext.h:5309 +PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:5310 +PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:5311 +PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:5312 +PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:5313 +PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:5314 +PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:5315 +# NV_fog_distance (GL/glext.h:5318) +GL_NV_fog_distance = 1 # GL/glext.h:5319 +# NV_texgen_emboss (GL/glext.h:5322) +GL_NV_texgen_emboss = 1 # GL/glext.h:5323 +# NV_blend_square (GL/glext.h:5326) +GL_NV_blend_square = 1 # GL/glext.h:5327 +# NV_texture_env_combine4 (GL/glext.h:5330) +GL_NV_texture_env_combine4 = 1 # GL/glext.h:5331 +# MESA_resize_buffers (GL/glext.h:5334) +GL_MESA_resize_buffers = 1 # GL/glext.h:5335 +# GL/glext.h:5337 +glResizeBuffersMESA = _link_function('glResizeBuffersMESA', None, [], 'MESA_resize_buffers') + +PFNGLRESIZEBUFFERSMESAPROC = CFUNCTYPE(None) # GL/glext.h:5339 +# MESA_window_pos (GL/glext.h:5342) +GL_MESA_window_pos = 1 # GL/glext.h:5343 +# GL/glext.h:5345 +glWindowPos2dMESA = _link_function('glWindowPos2dMESA', None, [GLdouble, GLdouble], 'MESA_window_pos') + +# GL/glext.h:5346 +glWindowPos2dvMESA = _link_function('glWindowPos2dvMESA', None, [POINTER(GLdouble)], 'MESA_window_pos') + +# GL/glext.h:5347 +glWindowPos2fMESA = _link_function('glWindowPos2fMESA', None, [GLfloat, GLfloat], 'MESA_window_pos') + +# GL/glext.h:5348 +glWindowPos2fvMESA = _link_function('glWindowPos2fvMESA', None, [POINTER(GLfloat)], 'MESA_window_pos') + +# GL/glext.h:5349 +glWindowPos2iMESA = _link_function('glWindowPos2iMESA', None, [GLint, GLint], 'MESA_window_pos') + +# GL/glext.h:5350 +glWindowPos2ivMESA = _link_function('glWindowPos2ivMESA', None, [POINTER(GLint)], 'MESA_window_pos') + +# GL/glext.h:5351 +glWindowPos2sMESA = _link_function('glWindowPos2sMESA', None, [GLshort, GLshort], 'MESA_window_pos') + +# GL/glext.h:5352 +glWindowPos2svMESA = _link_function('glWindowPos2svMESA', None, [POINTER(GLshort)], 'MESA_window_pos') + +# GL/glext.h:5353 +glWindowPos3dMESA = _link_function('glWindowPos3dMESA', None, [GLdouble, GLdouble, GLdouble], 'MESA_window_pos') + +# GL/glext.h:5354 +glWindowPos3dvMESA = _link_function('glWindowPos3dvMESA', None, [POINTER(GLdouble)], 'MESA_window_pos') + +# GL/glext.h:5355 +glWindowPos3fMESA = _link_function('glWindowPos3fMESA', None, [GLfloat, GLfloat, GLfloat], 'MESA_window_pos') + +# GL/glext.h:5356 +glWindowPos3fvMESA = _link_function('glWindowPos3fvMESA', None, [POINTER(GLfloat)], 'MESA_window_pos') + +# GL/glext.h:5357 +glWindowPos3iMESA = _link_function('glWindowPos3iMESA', None, [GLint, GLint, GLint], 'MESA_window_pos') + +# GL/glext.h:5358 +glWindowPos3ivMESA = _link_function('glWindowPos3ivMESA', None, [POINTER(GLint)], 'MESA_window_pos') + +# GL/glext.h:5359 +glWindowPos3sMESA = _link_function('glWindowPos3sMESA', None, [GLshort, GLshort, GLshort], 'MESA_window_pos') + +# GL/glext.h:5360 +glWindowPos3svMESA = _link_function('glWindowPos3svMESA', None, [POINTER(GLshort)], 'MESA_window_pos') + +# GL/glext.h:5361 +glWindowPos4dMESA = _link_function('glWindowPos4dMESA', None, [GLdouble, GLdouble, GLdouble, GLdouble], 'MESA_window_pos') + +# GL/glext.h:5362 +glWindowPos4dvMESA = _link_function('glWindowPos4dvMESA', None, [POINTER(GLdouble)], 'MESA_window_pos') + +# GL/glext.h:5363 +glWindowPos4fMESA = _link_function('glWindowPos4fMESA', None, [GLfloat, GLfloat, GLfloat, GLfloat], 'MESA_window_pos') + +# GL/glext.h:5364 +glWindowPos4fvMESA = _link_function('glWindowPos4fvMESA', None, [POINTER(GLfloat)], 'MESA_window_pos') + +# GL/glext.h:5365 +glWindowPos4iMESA = _link_function('glWindowPos4iMESA', None, [GLint, GLint, GLint, GLint], 'MESA_window_pos') + +# GL/glext.h:5366 +glWindowPos4ivMESA = _link_function('glWindowPos4ivMESA', None, [POINTER(GLint)], 'MESA_window_pos') + +# GL/glext.h:5367 +glWindowPos4sMESA = _link_function('glWindowPos4sMESA', None, [GLshort, GLshort, GLshort, GLshort], 'MESA_window_pos') + +# GL/glext.h:5368 +glWindowPos4svMESA = _link_function('glWindowPos4svMESA', None, [POINTER(GLshort)], 'MESA_window_pos') + +PFNGLWINDOWPOS2DMESAPROC = CFUNCTYPE(None, GLdouble, GLdouble) # GL/glext.h:5370 +PFNGLWINDOWPOS2DVMESAPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:5371 +PFNGLWINDOWPOS2FMESAPROC = CFUNCTYPE(None, GLfloat, GLfloat) # GL/glext.h:5372 +PFNGLWINDOWPOS2FVMESAPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:5373 +PFNGLWINDOWPOS2IMESAPROC = CFUNCTYPE(None, GLint, GLint) # GL/glext.h:5374 +PFNGLWINDOWPOS2IVMESAPROC = CFUNCTYPE(None, POINTER(GLint)) # GL/glext.h:5375 +PFNGLWINDOWPOS2SMESAPROC = CFUNCTYPE(None, GLshort, GLshort) # GL/glext.h:5376 +PFNGLWINDOWPOS2SVMESAPROC = CFUNCTYPE(None, POINTER(GLshort)) # GL/glext.h:5377 +PFNGLWINDOWPOS3DMESAPROC = CFUNCTYPE(None, GLdouble, GLdouble, GLdouble) # GL/glext.h:5378 +PFNGLWINDOWPOS3DVMESAPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:5379 +PFNGLWINDOWPOS3FMESAPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat) # GL/glext.h:5380 +PFNGLWINDOWPOS3FVMESAPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:5381 +PFNGLWINDOWPOS3IMESAPROC = CFUNCTYPE(None, GLint, GLint, GLint) # GL/glext.h:5382 +PFNGLWINDOWPOS3IVMESAPROC = CFUNCTYPE(None, POINTER(GLint)) # GL/glext.h:5383 +PFNGLWINDOWPOS3SMESAPROC = CFUNCTYPE(None, GLshort, GLshort, GLshort) # GL/glext.h:5384 +PFNGLWINDOWPOS3SVMESAPROC = CFUNCTYPE(None, POINTER(GLshort)) # GL/glext.h:5385 +PFNGLWINDOWPOS4DMESAPROC = CFUNCTYPE(None, GLdouble, GLdouble, GLdouble, GLdouble) # GL/glext.h:5386 +PFNGLWINDOWPOS4DVMESAPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:5387 +PFNGLWINDOWPOS4FMESAPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5388 +PFNGLWINDOWPOS4FVMESAPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:5389 +PFNGLWINDOWPOS4IMESAPROC = CFUNCTYPE(None, GLint, GLint, GLint, GLint) # GL/glext.h:5390 +PFNGLWINDOWPOS4IVMESAPROC = CFUNCTYPE(None, POINTER(GLint)) # GL/glext.h:5391 +PFNGLWINDOWPOS4SMESAPROC = CFUNCTYPE(None, GLshort, GLshort, GLshort, GLshort) # GL/glext.h:5392 +PFNGLWINDOWPOS4SVMESAPROC = CFUNCTYPE(None, POINTER(GLshort)) # GL/glext.h:5393 +# IBM_cull_vertex (GL/glext.h:5396) +GL_IBM_cull_vertex = 1 # GL/glext.h:5397 +# IBM_multimode_draw_arrays (GL/glext.h:5400) +GL_IBM_multimode_draw_arrays = 1 # GL/glext.h:5401 +# GL/glext.h:5403 +glMultiModeDrawArraysIBM = _link_function('glMultiModeDrawArraysIBM', None, [POINTER(GLenum), POINTER(GLint), POINTER(GLsizei), GLsizei, GLint], 'IBM_multimode_draw_arrays') + +# GL/glext.h:5404 +glMultiModeDrawElementsIBM = _link_function('glMultiModeDrawElementsIBM', None, [POINTER(GLenum), POINTER(GLsizei), GLenum, POINTER(POINTER(GLvoid)), GLsizei, GLint], 'IBM_multimode_draw_arrays') + +PFNGLMULTIMODEDRAWARRAYSIBMPROC = CFUNCTYPE(None, POINTER(GLenum), POINTER(GLint), POINTER(GLsizei), GLsizei, GLint) # GL/glext.h:5406 +PFNGLMULTIMODEDRAWELEMENTSIBMPROC = CFUNCTYPE(None, POINTER(GLenum), POINTER(GLsizei), GLenum, POINTER(POINTER(GLvoid)), GLsizei, GLint) # GL/glext.h:5407 +# IBM_vertex_array_lists (GL/glext.h:5410) +GL_IBM_vertex_array_lists = 1 # GL/glext.h:5411 +# GL/glext.h:5413 +glColorPointerListIBM = _link_function('glColorPointerListIBM', None, [GLint, GLenum, GLint, POINTER(POINTER(GLvoid)), GLint], 'IBM_vertex_array_lists') + +# GL/glext.h:5414 +glSecondaryColorPointerListIBM = _link_function('glSecondaryColorPointerListIBM', None, [GLint, GLenum, GLint, POINTER(POINTER(GLvoid)), GLint], 'IBM_vertex_array_lists') + +# GL/glext.h:5415 +glEdgeFlagPointerListIBM = _link_function('glEdgeFlagPointerListIBM', None, [GLint, POINTER(POINTER(GLboolean)), GLint], 'IBM_vertex_array_lists') + +# GL/glext.h:5416 +glFogCoordPointerListIBM = _link_function('glFogCoordPointerListIBM', None, [GLenum, GLint, POINTER(POINTER(GLvoid)), GLint], 'IBM_vertex_array_lists') + +# GL/glext.h:5417 +glIndexPointerListIBM = _link_function('glIndexPointerListIBM', None, [GLenum, GLint, POINTER(POINTER(GLvoid)), GLint], 'IBM_vertex_array_lists') + +# GL/glext.h:5418 +glNormalPointerListIBM = _link_function('glNormalPointerListIBM', None, [GLenum, GLint, POINTER(POINTER(GLvoid)), GLint], 'IBM_vertex_array_lists') + +# GL/glext.h:5419 +glTexCoordPointerListIBM = _link_function('glTexCoordPointerListIBM', None, [GLint, GLenum, GLint, POINTER(POINTER(GLvoid)), GLint], 'IBM_vertex_array_lists') + +# GL/glext.h:5420 +glVertexPointerListIBM = _link_function('glVertexPointerListIBM', None, [GLint, GLenum, GLint, POINTER(POINTER(GLvoid)), GLint], 'IBM_vertex_array_lists') + +PFNGLCOLORPOINTERLISTIBMPROC = CFUNCTYPE(None, GLint, GLenum, GLint, POINTER(POINTER(GLvoid)), GLint) # GL/glext.h:5422 +PFNGLSECONDARYCOLORPOINTERLISTIBMPROC = CFUNCTYPE(None, GLint, GLenum, GLint, POINTER(POINTER(GLvoid)), GLint) # GL/glext.h:5423 +PFNGLEDGEFLAGPOINTERLISTIBMPROC = CFUNCTYPE(None, GLint, POINTER(POINTER(GLboolean)), GLint) # GL/glext.h:5424 +PFNGLFOGCOORDPOINTERLISTIBMPROC = CFUNCTYPE(None, GLenum, GLint, POINTER(POINTER(GLvoid)), GLint) # GL/glext.h:5425 +PFNGLINDEXPOINTERLISTIBMPROC = CFUNCTYPE(None, GLenum, GLint, POINTER(POINTER(GLvoid)), GLint) # GL/glext.h:5426 +PFNGLNORMALPOINTERLISTIBMPROC = CFUNCTYPE(None, GLenum, GLint, POINTER(POINTER(GLvoid)), GLint) # GL/glext.h:5427 +PFNGLTEXCOORDPOINTERLISTIBMPROC = CFUNCTYPE(None, GLint, GLenum, GLint, POINTER(POINTER(GLvoid)), GLint) # GL/glext.h:5428 +PFNGLVERTEXPOINTERLISTIBMPROC = CFUNCTYPE(None, GLint, GLenum, GLint, POINTER(POINTER(GLvoid)), GLint) # GL/glext.h:5429 +# SGIX_subsample (GL/glext.h:5432) +GL_SGIX_subsample = 1 # GL/glext.h:5433 +# SGIX_ycrcba (GL/glext.h:5436) +GL_SGIX_ycrcba = 1 # GL/glext.h:5437 +# SGIX_ycrcb_subsample (GL/glext.h:5440) +GL_SGIX_ycrcb_subsample = 1 # GL/glext.h:5441 +# SGIX_depth_pass_instrument (GL/glext.h:5444) +GL_SGIX_depth_pass_instrument = 1 # GL/glext.h:5445 +# 3DFX_texture_compression_FXT1 (GL/glext.h:5448) +GL_3DFX_texture_compression_FXT1 = 1 # GL/glext.h:5449 +# 3DFX_multisample (GL/glext.h:5452) +GL_3DFX_multisample = 1 # GL/glext.h:5453 +# 3DFX_tbuffer (GL/glext.h:5456) +GL_3DFX_tbuffer = 1 # GL/glext.h:5457 +# GL/glext.h:5459 +glTbufferMask3DFX = _link_function('glTbufferMask3DFX', None, [GLuint], '3DFX_tbuffer') + +PFNGLTBUFFERMASK3DFXPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:5461 +# EXT_multisample (GL/glext.h:5464) +GL_EXT_multisample = 1 # GL/glext.h:5465 +# GL/glext.h:5467 +glSampleMaskEXT = _link_function('glSampleMaskEXT', None, [GLclampf, GLboolean], 'EXT_multisample') + +# GL/glext.h:5468 +glSamplePatternEXT = _link_function('glSamplePatternEXT', None, [GLenum], 'EXT_multisample') + +PFNGLSAMPLEMASKEXTPROC = CFUNCTYPE(None, GLclampf, GLboolean) # GL/glext.h:5470 +PFNGLSAMPLEPATTERNEXTPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:5471 +# SGIX_vertex_preclip (GL/glext.h:5474) +GL_SGIX_vertex_preclip = 1 # GL/glext.h:5475 +# SGIX_convolution_accuracy (GL/glext.h:5478) +GL_SGIX_convolution_accuracy = 1 # GL/glext.h:5479 +# SGIX_resample (GL/glext.h:5482) +GL_SGIX_resample = 1 # GL/glext.h:5483 +# SGIS_point_line_texgen (GL/glext.h:5486) +GL_SGIS_point_line_texgen = 1 # GL/glext.h:5487 +# SGIS_texture_color_mask (GL/glext.h:5490) +GL_SGIS_texture_color_mask = 1 # GL/glext.h:5491 +# GL/glext.h:5493 +glTextureColorMaskSGIS = _link_function('glTextureColorMaskSGIS', None, [GLboolean, GLboolean, GLboolean, GLboolean], 'SGIS_texture_color_mask') + +PFNGLTEXTURECOLORMASKSGISPROC = CFUNCTYPE(None, GLboolean, GLboolean, GLboolean, GLboolean) # GL/glext.h:5495 +# SGIX_igloo_interface (GL/glext.h:5498) +GL_SGIX_igloo_interface = 1 # GL/glext.h:5499 +# GL/glext.h:5501 +glIglooInterfaceSGIX = _link_function('glIglooInterfaceSGIX', None, [GLenum, POINTER(GLvoid)], 'SGIX_igloo_interface') + +PFNGLIGLOOINTERFACESGIXPROC = CFUNCTYPE(None, GLenum, POINTER(GLvoid)) # GL/glext.h:5503 +# EXT_texture_env_dot3 (GL/glext.h:5506) +GL_EXT_texture_env_dot3 = 1 # GL/glext.h:5507 +# ATI_texture_mirror_once (GL/glext.h:5510) +GL_ATI_texture_mirror_once = 1 # GL/glext.h:5511 +# NV_fence (GL/glext.h:5514) +GL_NV_fence = 1 # GL/glext.h:5515 +# GL/glext.h:5517 +glDeleteFencesNV = _link_function('glDeleteFencesNV', None, [GLsizei, POINTER(GLuint)], 'NV_fence') + +# GL/glext.h:5518 +glGenFencesNV = _link_function('glGenFencesNV', None, [GLsizei, POINTER(GLuint)], 'NV_fence') + +# GL/glext.h:5519 +glIsFenceNV = _link_function('glIsFenceNV', GLboolean, [GLuint], 'NV_fence') + +# GL/glext.h:5520 +glTestFenceNV = _link_function('glTestFenceNV', GLboolean, [GLuint], 'NV_fence') + +# GL/glext.h:5521 +glGetFenceivNV = _link_function('glGetFenceivNV', None, [GLuint, GLenum, POINTER(GLint)], 'NV_fence') + +# GL/glext.h:5522 +glFinishFenceNV = _link_function('glFinishFenceNV', None, [GLuint], 'NV_fence') + +# GL/glext.h:5523 +glSetFenceNV = _link_function('glSetFenceNV', None, [GLuint, GLenum], 'NV_fence') + +PFNGLDELETEFENCESNVPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:5525 +PFNGLGENFENCESNVPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:5526 +PFNGLISFENCENVPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:5527 +PFNGLTESTFENCENVPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:5528 +PFNGLGETFENCEIVNVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:5529 +PFNGLFINISHFENCENVPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:5530 +PFNGLSETFENCENVPROC = CFUNCTYPE(None, GLuint, GLenum) # GL/glext.h:5531 +# NV_evaluators (GL/glext.h:5534) +GL_NV_evaluators = 1 # GL/glext.h:5535 +# GL/glext.h:5537 +glMapControlPointsNV = _link_function('glMapControlPointsNV', None, [GLenum, GLuint, GLenum, GLsizei, GLsizei, GLint, GLint, GLboolean, POINTER(GLvoid)], 'NV_evaluators') + +# GL/glext.h:5538 +glMapParameterivNV = _link_function('glMapParameterivNV', None, [GLenum, GLenum, POINTER(GLint)], 'NV_evaluators') + +# GL/glext.h:5539 +glMapParameterfvNV = _link_function('glMapParameterfvNV', None, [GLenum, GLenum, POINTER(GLfloat)], 'NV_evaluators') + +# GL/glext.h:5540 +glGetMapControlPointsNV = _link_function('glGetMapControlPointsNV', None, [GLenum, GLuint, GLenum, GLsizei, GLsizei, GLboolean, POINTER(GLvoid)], 'NV_evaluators') + +# GL/glext.h:5541 +glGetMapParameterivNV = _link_function('glGetMapParameterivNV', None, [GLenum, GLenum, POINTER(GLint)], 'NV_evaluators') + +# GL/glext.h:5542 +glGetMapParameterfvNV = _link_function('glGetMapParameterfvNV', None, [GLenum, GLenum, POINTER(GLfloat)], 'NV_evaluators') + +# GL/glext.h:5543 +glGetMapAttribParameterivNV = _link_function('glGetMapAttribParameterivNV', None, [GLenum, GLuint, GLenum, POINTER(GLint)], 'NV_evaluators') + +# GL/glext.h:5544 +glGetMapAttribParameterfvNV = _link_function('glGetMapAttribParameterfvNV', None, [GLenum, GLuint, GLenum, POINTER(GLfloat)], 'NV_evaluators') + +# GL/glext.h:5545 +glEvalMapsNV = _link_function('glEvalMapsNV', None, [GLenum, GLenum], 'NV_evaluators') + +PFNGLMAPCONTROLPOINTSNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLenum, GLsizei, GLsizei, GLint, GLint, GLboolean, POINTER(GLvoid)) # GL/glext.h:5547 +PFNGLMAPPARAMETERIVNVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:5548 +PFNGLMAPPARAMETERFVNVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:5549 +PFNGLGETMAPCONTROLPOINTSNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLenum, GLsizei, GLsizei, GLboolean, POINTER(GLvoid)) # GL/glext.h:5550 +PFNGLGETMAPPARAMETERIVNVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:5551 +PFNGLGETMAPPARAMETERFVNVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:5552 +PFNGLGETMAPATTRIBPARAMETERIVNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:5553 +PFNGLGETMAPATTRIBPARAMETERFVNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:5554 +PFNGLEVALMAPSNVPROC = CFUNCTYPE(None, GLenum, GLenum) # GL/glext.h:5555 +# NV_packed_depth_stencil (GL/glext.h:5558) +GL_NV_packed_depth_stencil = 1 # GL/glext.h:5559 +# NV_register_combiners2 (GL/glext.h:5562) +GL_NV_register_combiners2 = 1 # GL/glext.h:5563 +# GL/glext.h:5565 +glCombinerStageParameterfvNV = _link_function('glCombinerStageParameterfvNV', None, [GLenum, GLenum, POINTER(GLfloat)], 'NV_register_combiners2') + +# GL/glext.h:5566 +glGetCombinerStageParameterfvNV = _link_function('glGetCombinerStageParameterfvNV', None, [GLenum, GLenum, POINTER(GLfloat)], 'NV_register_combiners2') + +PFNGLCOMBINERSTAGEPARAMETERFVNVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:5568 +PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:5569 +# NV_texture_compression_vtc (GL/glext.h:5572) +GL_NV_texture_compression_vtc = 1 # GL/glext.h:5573 +# NV_texture_rectangle (GL/glext.h:5576) +GL_NV_texture_rectangle = 1 # GL/glext.h:5577 +# NV_texture_shader (GL/glext.h:5580) +GL_NV_texture_shader = 1 # GL/glext.h:5581 +# NV_texture_shader2 (GL/glext.h:5584) +GL_NV_texture_shader2 = 1 # GL/glext.h:5585 +# NV_vertex_array_range2 (GL/glext.h:5588) +GL_NV_vertex_array_range2 = 1 # GL/glext.h:5589 +# NV_vertex_program (GL/glext.h:5592) +GL_NV_vertex_program = 1 # GL/glext.h:5593 +# GL/glext.h:5595 +glAreProgramsResidentNV = _link_function('glAreProgramsResidentNV', GLboolean, [GLsizei, POINTER(GLuint), POINTER(GLboolean)], 'NV_vertex_program') + +# GL/glext.h:5596 +glBindProgramNV = _link_function('glBindProgramNV', None, [GLenum, GLuint], 'NV_vertex_program') + +# GL/glext.h:5597 +glDeleteProgramsNV = _link_function('glDeleteProgramsNV', None, [GLsizei, POINTER(GLuint)], 'NV_vertex_program') + +# GL/glext.h:5598 +glExecuteProgramNV = _link_function('glExecuteProgramNV', None, [GLenum, GLuint, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5599 +glGenProgramsNV = _link_function('glGenProgramsNV', None, [GLsizei, POINTER(GLuint)], 'NV_vertex_program') + +# GL/glext.h:5600 +glGetProgramParameterdvNV = _link_function('glGetProgramParameterdvNV', None, [GLenum, GLuint, GLenum, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5601 +glGetProgramParameterfvNV = _link_function('glGetProgramParameterfvNV', None, [GLenum, GLuint, GLenum, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5602 +glGetProgramivNV = _link_function('glGetProgramivNV', None, [GLuint, GLenum, POINTER(GLint)], 'NV_vertex_program') + +# GL/glext.h:5603 +glGetProgramStringNV = _link_function('glGetProgramStringNV', None, [GLuint, GLenum, POINTER(GLubyte)], 'NV_vertex_program') + +# GL/glext.h:5604 +glGetTrackMatrixivNV = _link_function('glGetTrackMatrixivNV', None, [GLenum, GLuint, GLenum, POINTER(GLint)], 'NV_vertex_program') + +# GL/glext.h:5605 +glGetVertexAttribdvNV = _link_function('glGetVertexAttribdvNV', None, [GLuint, GLenum, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5606 +glGetVertexAttribfvNV = _link_function('glGetVertexAttribfvNV', None, [GLuint, GLenum, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5607 +glGetVertexAttribivNV = _link_function('glGetVertexAttribivNV', None, [GLuint, GLenum, POINTER(GLint)], 'NV_vertex_program') + +# GL/glext.h:5608 +glGetVertexAttribPointervNV = _link_function('glGetVertexAttribPointervNV', None, [GLuint, GLenum, POINTER(POINTER(GLvoid))], 'NV_vertex_program') + +# GL/glext.h:5609 +glIsProgramNV = _link_function('glIsProgramNV', GLboolean, [GLuint], 'NV_vertex_program') + +# GL/glext.h:5610 +glLoadProgramNV = _link_function('glLoadProgramNV', None, [GLenum, GLuint, GLsizei, POINTER(GLubyte)], 'NV_vertex_program') + +# GL/glext.h:5611 +glProgramParameter4dNV = _link_function('glProgramParameter4dNV', None, [GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble], 'NV_vertex_program') + +# GL/glext.h:5612 +glProgramParameter4dvNV = _link_function('glProgramParameter4dvNV', None, [GLenum, GLuint, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5613 +glProgramParameter4fNV = _link_function('glProgramParameter4fNV', None, [GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat], 'NV_vertex_program') + +# GL/glext.h:5614 +glProgramParameter4fvNV = _link_function('glProgramParameter4fvNV', None, [GLenum, GLuint, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5615 +glProgramParameters4dvNV = _link_function('glProgramParameters4dvNV', None, [GLenum, GLuint, GLuint, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5616 +glProgramParameters4fvNV = _link_function('glProgramParameters4fvNV', None, [GLenum, GLuint, GLuint, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5617 +glRequestResidentProgramsNV = _link_function('glRequestResidentProgramsNV', None, [GLsizei, POINTER(GLuint)], 'NV_vertex_program') + +# GL/glext.h:5618 +glTrackMatrixNV = _link_function('glTrackMatrixNV', None, [GLenum, GLuint, GLenum, GLenum], 'NV_vertex_program') + +# GL/glext.h:5619 +glVertexAttribPointerNV = _link_function('glVertexAttribPointerNV', None, [GLuint, GLint, GLenum, GLsizei, POINTER(GLvoid)], 'NV_vertex_program') + +# GL/glext.h:5620 +glVertexAttrib1dNV = _link_function('glVertexAttrib1dNV', None, [GLuint, GLdouble], 'NV_vertex_program') + +# GL/glext.h:5621 +glVertexAttrib1dvNV = _link_function('glVertexAttrib1dvNV', None, [GLuint, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5622 +glVertexAttrib1fNV = _link_function('glVertexAttrib1fNV', None, [GLuint, GLfloat], 'NV_vertex_program') + +# GL/glext.h:5623 +glVertexAttrib1fvNV = _link_function('glVertexAttrib1fvNV', None, [GLuint, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5624 +glVertexAttrib1sNV = _link_function('glVertexAttrib1sNV', None, [GLuint, GLshort], 'NV_vertex_program') + +# GL/glext.h:5625 +glVertexAttrib1svNV = _link_function('glVertexAttrib1svNV', None, [GLuint, POINTER(GLshort)], 'NV_vertex_program') + +# GL/glext.h:5626 +glVertexAttrib2dNV = _link_function('glVertexAttrib2dNV', None, [GLuint, GLdouble, GLdouble], 'NV_vertex_program') + +# GL/glext.h:5627 +glVertexAttrib2dvNV = _link_function('glVertexAttrib2dvNV', None, [GLuint, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5628 +glVertexAttrib2fNV = _link_function('glVertexAttrib2fNV', None, [GLuint, GLfloat, GLfloat], 'NV_vertex_program') + +# GL/glext.h:5629 +glVertexAttrib2fvNV = _link_function('glVertexAttrib2fvNV', None, [GLuint, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5630 +glVertexAttrib2sNV = _link_function('glVertexAttrib2sNV', None, [GLuint, GLshort, GLshort], 'NV_vertex_program') + +# GL/glext.h:5631 +glVertexAttrib2svNV = _link_function('glVertexAttrib2svNV', None, [GLuint, POINTER(GLshort)], 'NV_vertex_program') + +# GL/glext.h:5632 +glVertexAttrib3dNV = _link_function('glVertexAttrib3dNV', None, [GLuint, GLdouble, GLdouble, GLdouble], 'NV_vertex_program') + +# GL/glext.h:5633 +glVertexAttrib3dvNV = _link_function('glVertexAttrib3dvNV', None, [GLuint, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5634 +glVertexAttrib3fNV = _link_function('glVertexAttrib3fNV', None, [GLuint, GLfloat, GLfloat, GLfloat], 'NV_vertex_program') + +# GL/glext.h:5635 +glVertexAttrib3fvNV = _link_function('glVertexAttrib3fvNV', None, [GLuint, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5636 +glVertexAttrib3sNV = _link_function('glVertexAttrib3sNV', None, [GLuint, GLshort, GLshort, GLshort], 'NV_vertex_program') + +# GL/glext.h:5637 +glVertexAttrib3svNV = _link_function('glVertexAttrib3svNV', None, [GLuint, POINTER(GLshort)], 'NV_vertex_program') + +# GL/glext.h:5638 +glVertexAttrib4dNV = _link_function('glVertexAttrib4dNV', None, [GLuint, GLdouble, GLdouble, GLdouble, GLdouble], 'NV_vertex_program') + +# GL/glext.h:5639 +glVertexAttrib4dvNV = _link_function('glVertexAttrib4dvNV', None, [GLuint, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5640 +glVertexAttrib4fNV = _link_function('glVertexAttrib4fNV', None, [GLuint, GLfloat, GLfloat, GLfloat, GLfloat], 'NV_vertex_program') + +# GL/glext.h:5641 +glVertexAttrib4fvNV = _link_function('glVertexAttrib4fvNV', None, [GLuint, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5642 +glVertexAttrib4sNV = _link_function('glVertexAttrib4sNV', None, [GLuint, GLshort, GLshort, GLshort, GLshort], 'NV_vertex_program') + +# GL/glext.h:5643 +glVertexAttrib4svNV = _link_function('glVertexAttrib4svNV', None, [GLuint, POINTER(GLshort)], 'NV_vertex_program') + +# GL/glext.h:5644 +glVertexAttrib4ubNV = _link_function('glVertexAttrib4ubNV', None, [GLuint, GLubyte, GLubyte, GLubyte, GLubyte], 'NV_vertex_program') + +# GL/glext.h:5645 +glVertexAttrib4ubvNV = _link_function('glVertexAttrib4ubvNV', None, [GLuint, POINTER(GLubyte)], 'NV_vertex_program') + +# GL/glext.h:5646 +glVertexAttribs1dvNV = _link_function('glVertexAttribs1dvNV', None, [GLuint, GLsizei, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5647 +glVertexAttribs1fvNV = _link_function('glVertexAttribs1fvNV', None, [GLuint, GLsizei, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5648 +glVertexAttribs1svNV = _link_function('glVertexAttribs1svNV', None, [GLuint, GLsizei, POINTER(GLshort)], 'NV_vertex_program') + +# GL/glext.h:5649 +glVertexAttribs2dvNV = _link_function('glVertexAttribs2dvNV', None, [GLuint, GLsizei, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5650 +glVertexAttribs2fvNV = _link_function('glVertexAttribs2fvNV', None, [GLuint, GLsizei, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5651 +glVertexAttribs2svNV = _link_function('glVertexAttribs2svNV', None, [GLuint, GLsizei, POINTER(GLshort)], 'NV_vertex_program') + +# GL/glext.h:5652 +glVertexAttribs3dvNV = _link_function('glVertexAttribs3dvNV', None, [GLuint, GLsizei, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5653 +glVertexAttribs3fvNV = _link_function('glVertexAttribs3fvNV', None, [GLuint, GLsizei, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5654 +glVertexAttribs3svNV = _link_function('glVertexAttribs3svNV', None, [GLuint, GLsizei, POINTER(GLshort)], 'NV_vertex_program') + +# GL/glext.h:5655 +glVertexAttribs4dvNV = _link_function('glVertexAttribs4dvNV', None, [GLuint, GLsizei, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5656 +glVertexAttribs4fvNV = _link_function('glVertexAttribs4fvNV', None, [GLuint, GLsizei, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5657 +glVertexAttribs4svNV = _link_function('glVertexAttribs4svNV', None, [GLuint, GLsizei, POINTER(GLshort)], 'NV_vertex_program') + +# GL/glext.h:5658 +glVertexAttribs4ubvNV = _link_function('glVertexAttribs4ubvNV', None, [GLuint, GLsizei, POINTER(GLubyte)], 'NV_vertex_program') + +PFNGLAREPROGRAMSRESIDENTNVPROC = CFUNCTYPE(GLboolean, GLsizei, POINTER(GLuint), POINTER(GLboolean)) # GL/glext.h:5660 +PFNGLBINDPROGRAMNVPROC = CFUNCTYPE(None, GLenum, GLuint) # GL/glext.h:5661 +PFNGLDELETEPROGRAMSNVPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:5662 +PFNGLEXECUTEPROGRAMNVPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLfloat)) # GL/glext.h:5663 +PFNGLGENPROGRAMSNVPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:5664 +PFNGLGETPROGRAMPARAMETERDVNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLenum, POINTER(GLdouble)) # GL/glext.h:5665 +PFNGLGETPROGRAMPARAMETERFVNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:5666 +PFNGLGETPROGRAMIVNVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:5667 +PFNGLGETPROGRAMSTRINGNVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLubyte)) # GL/glext.h:5668 +PFNGLGETTRACKMATRIXIVNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:5669 +PFNGLGETVERTEXATTRIBDVNVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLdouble)) # GL/glext.h:5670 +PFNGLGETVERTEXATTRIBFVNVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:5671 +PFNGLGETVERTEXATTRIBIVNVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:5672 +PFNGLGETVERTEXATTRIBPOINTERVNVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(POINTER(GLvoid))) # GL/glext.h:5673 +PFNGLISPROGRAMNVPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:5674 +PFNGLLOADPROGRAMNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLsizei, POINTER(GLubyte)) # GL/glext.h:5675 +PFNGLPROGRAMPARAMETER4DNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble) # GL/glext.h:5676 +PFNGLPROGRAMPARAMETER4DVNVPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLdouble)) # GL/glext.h:5677 +PFNGLPROGRAMPARAMETER4FNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5678 +PFNGLPROGRAMPARAMETER4FVNVPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLfloat)) # GL/glext.h:5679 +PFNGLPROGRAMPARAMETERS4DVNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, POINTER(GLdouble)) # GL/glext.h:5680 +PFNGLPROGRAMPARAMETERS4FVNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, POINTER(GLfloat)) # GL/glext.h:5681 +PFNGLREQUESTRESIDENTPROGRAMSNVPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:5682 +PFNGLTRACKMATRIXNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLenum, GLenum) # GL/glext.h:5683 +PFNGLVERTEXATTRIBPOINTERNVPROC = CFUNCTYPE(None, GLuint, GLint, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:5684 +PFNGLVERTEXATTRIB1DNVPROC = CFUNCTYPE(None, GLuint, GLdouble) # GL/glext.h:5685 +PFNGLVERTEXATTRIB1DVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:5686 +PFNGLVERTEXATTRIB1FNVPROC = CFUNCTYPE(None, GLuint, GLfloat) # GL/glext.h:5687 +PFNGLVERTEXATTRIB1FVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:5688 +PFNGLVERTEXATTRIB1SNVPROC = CFUNCTYPE(None, GLuint, GLshort) # GL/glext.h:5689 +PFNGLVERTEXATTRIB1SVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:5690 +PFNGLVERTEXATTRIB2DNVPROC = CFUNCTYPE(None, GLuint, GLdouble, GLdouble) # GL/glext.h:5691 +PFNGLVERTEXATTRIB2DVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:5692 +PFNGLVERTEXATTRIB2FNVPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat) # GL/glext.h:5693 +PFNGLVERTEXATTRIB2FVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:5694 +PFNGLVERTEXATTRIB2SNVPROC = CFUNCTYPE(None, GLuint, GLshort, GLshort) # GL/glext.h:5695 +PFNGLVERTEXATTRIB2SVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:5696 +PFNGLVERTEXATTRIB3DNVPROC = CFUNCTYPE(None, GLuint, GLdouble, GLdouble, GLdouble) # GL/glext.h:5697 +PFNGLVERTEXATTRIB3DVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:5698 +PFNGLVERTEXATTRIB3FNVPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat) # GL/glext.h:5699 +PFNGLVERTEXATTRIB3FVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:5700 +PFNGLVERTEXATTRIB3SNVPROC = CFUNCTYPE(None, GLuint, GLshort, GLshort, GLshort) # GL/glext.h:5701 +PFNGLVERTEXATTRIB3SVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:5702 +PFNGLVERTEXATTRIB4DNVPROC = CFUNCTYPE(None, GLuint, GLdouble, GLdouble, GLdouble, GLdouble) # GL/glext.h:5703 +PFNGLVERTEXATTRIB4DVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:5704 +PFNGLVERTEXATTRIB4FNVPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5705 +PFNGLVERTEXATTRIB4FVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:5706 +PFNGLVERTEXATTRIB4SNVPROC = CFUNCTYPE(None, GLuint, GLshort, GLshort, GLshort, GLshort) # GL/glext.h:5707 +PFNGLVERTEXATTRIB4SVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:5708 +PFNGLVERTEXATTRIB4UBNVPROC = CFUNCTYPE(None, GLuint, GLubyte, GLubyte, GLubyte, GLubyte) # GL/glext.h:5709 +PFNGLVERTEXATTRIB4UBVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLubyte)) # GL/glext.h:5710 +PFNGLVERTEXATTRIBS1DVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLdouble)) # GL/glext.h:5711 +PFNGLVERTEXATTRIBS1FVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLfloat)) # GL/glext.h:5712 +PFNGLVERTEXATTRIBS1SVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLshort)) # GL/glext.h:5713 +PFNGLVERTEXATTRIBS2DVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLdouble)) # GL/glext.h:5714 +PFNGLVERTEXATTRIBS2FVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLfloat)) # GL/glext.h:5715 +PFNGLVERTEXATTRIBS2SVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLshort)) # GL/glext.h:5716 +PFNGLVERTEXATTRIBS3DVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLdouble)) # GL/glext.h:5717 +PFNGLVERTEXATTRIBS3FVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLfloat)) # GL/glext.h:5718 +PFNGLVERTEXATTRIBS3SVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLshort)) # GL/glext.h:5719 +PFNGLVERTEXATTRIBS4DVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLdouble)) # GL/glext.h:5720 +PFNGLVERTEXATTRIBS4FVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLfloat)) # GL/glext.h:5721 +PFNGLVERTEXATTRIBS4SVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLshort)) # GL/glext.h:5722 +PFNGLVERTEXATTRIBS4UBVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLubyte)) # GL/glext.h:5723 +# SGIX_texture_coordinate_clamp (GL/glext.h:5726) +GL_SGIX_texture_coordinate_clamp = 1 # GL/glext.h:5727 +# SGIX_scalebias_hint (GL/glext.h:5730) +GL_SGIX_scalebias_hint = 1 # GL/glext.h:5731 +# OML_interlace (GL/glext.h:5734) +GL_OML_interlace = 1 # GL/glext.h:5735 +# OML_subsample (GL/glext.h:5738) +GL_OML_subsample = 1 # GL/glext.h:5739 +# OML_resample (GL/glext.h:5742) +GL_OML_resample = 1 # GL/glext.h:5743 +# NV_copy_depth_to_color (GL/glext.h:5746) +GL_NV_copy_depth_to_color = 1 # GL/glext.h:5747 +# ATI_envmap_bumpmap (GL/glext.h:5750) +GL_ATI_envmap_bumpmap = 1 # GL/glext.h:5751 +# GL/glext.h:5753 +glTexBumpParameterivATI = _link_function('glTexBumpParameterivATI', None, [GLenum, POINTER(GLint)], 'ATI_envmap_bumpmap') + +# GL/glext.h:5754 +glTexBumpParameterfvATI = _link_function('glTexBumpParameterfvATI', None, [GLenum, POINTER(GLfloat)], 'ATI_envmap_bumpmap') + +# GL/glext.h:5755 +glGetTexBumpParameterivATI = _link_function('glGetTexBumpParameterivATI', None, [GLenum, POINTER(GLint)], 'ATI_envmap_bumpmap') + +# GL/glext.h:5756 +glGetTexBumpParameterfvATI = _link_function('glGetTexBumpParameterfvATI', None, [GLenum, POINTER(GLfloat)], 'ATI_envmap_bumpmap') + +PFNGLTEXBUMPPARAMETERIVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:5758 +PFNGLTEXBUMPPARAMETERFVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:5759 +PFNGLGETTEXBUMPPARAMETERIVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:5760 +PFNGLGETTEXBUMPPARAMETERFVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:5761 +# ATI_fragment_shader (GL/glext.h:5764) +GL_ATI_fragment_shader = 1 # GL/glext.h:5765 +# GL/glext.h:5767 +glGenFragmentShadersATI = _link_function('glGenFragmentShadersATI', GLuint, [GLuint], 'ATI_fragment_shader') + +# GL/glext.h:5768 +glBindFragmentShaderATI = _link_function('glBindFragmentShaderATI', None, [GLuint], 'ATI_fragment_shader') + +# GL/glext.h:5769 +glDeleteFragmentShaderATI = _link_function('glDeleteFragmentShaderATI', None, [GLuint], 'ATI_fragment_shader') + +# GL/glext.h:5770 +glBeginFragmentShaderATI = _link_function('glBeginFragmentShaderATI', None, [], 'ATI_fragment_shader') + +# GL/glext.h:5771 +glEndFragmentShaderATI = _link_function('glEndFragmentShaderATI', None, [], 'ATI_fragment_shader') + +# GL/glext.h:5772 +glPassTexCoordATI = _link_function('glPassTexCoordATI', None, [GLuint, GLuint, GLenum], 'ATI_fragment_shader') + +# GL/glext.h:5773 +glSampleMapATI = _link_function('glSampleMapATI', None, [GLuint, GLuint, GLenum], 'ATI_fragment_shader') + +# GL/glext.h:5774 +glColorFragmentOp1ATI = _link_function('glColorFragmentOp1ATI', None, [GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint], 'ATI_fragment_shader') + +# GL/glext.h:5775 +glColorFragmentOp2ATI = _link_function('glColorFragmentOp2ATI', None, [GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint], 'ATI_fragment_shader') + +# GL/glext.h:5776 +glColorFragmentOp3ATI = _link_function('glColorFragmentOp3ATI', None, [GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint], 'ATI_fragment_shader') + +# GL/glext.h:5777 +glAlphaFragmentOp1ATI = _link_function('glAlphaFragmentOp1ATI', None, [GLenum, GLuint, GLuint, GLuint, GLuint, GLuint], 'ATI_fragment_shader') + +# GL/glext.h:5778 +glAlphaFragmentOp2ATI = _link_function('glAlphaFragmentOp2ATI', None, [GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint], 'ATI_fragment_shader') + +# GL/glext.h:5779 +glAlphaFragmentOp3ATI = _link_function('glAlphaFragmentOp3ATI', None, [GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint], 'ATI_fragment_shader') + +# GL/glext.h:5780 +glSetFragmentShaderConstantATI = _link_function('glSetFragmentShaderConstantATI', None, [GLuint, POINTER(GLfloat)], 'ATI_fragment_shader') + +PFNGLGENFRAGMENTSHADERSATIPROC = CFUNCTYPE(GLuint, GLuint) # GL/glext.h:5782 +PFNGLBINDFRAGMENTSHADERATIPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:5783 +PFNGLDELETEFRAGMENTSHADERATIPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:5784 +PFNGLBEGINFRAGMENTSHADERATIPROC = CFUNCTYPE(None) # GL/glext.h:5785 +PFNGLENDFRAGMENTSHADERATIPROC = CFUNCTYPE(None) # GL/glext.h:5786 +PFNGLPASSTEXCOORDATIPROC = CFUNCTYPE(None, GLuint, GLuint, GLenum) # GL/glext.h:5787 +PFNGLSAMPLEMAPATIPROC = CFUNCTYPE(None, GLuint, GLuint, GLenum) # GL/glext.h:5788 +PFNGLCOLORFRAGMENTOP1ATIPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint) # GL/glext.h:5789 +PFNGLCOLORFRAGMENTOP2ATIPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint) # GL/glext.h:5790 +PFNGLCOLORFRAGMENTOP3ATIPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint) # GL/glext.h:5791 +PFNGLALPHAFRAGMENTOP1ATIPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLuint, GLuint, GLuint) # GL/glext.h:5792 +PFNGLALPHAFRAGMENTOP2ATIPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint) # GL/glext.h:5793 +PFNGLALPHAFRAGMENTOP3ATIPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint) # GL/glext.h:5794 +PFNGLSETFRAGMENTSHADERCONSTANTATIPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:5795 +# ATI_pn_triangles (GL/glext.h:5798) +GL_ATI_pn_triangles = 1 # GL/glext.h:5799 +# GL/glext.h:5801 +glPNTrianglesiATI = _link_function('glPNTrianglesiATI', None, [GLenum, GLint], 'ATI_pn_triangles') + +# GL/glext.h:5802 +glPNTrianglesfATI = _link_function('glPNTrianglesfATI', None, [GLenum, GLfloat], 'ATI_pn_triangles') + +PFNGLPNTRIANGLESIATIPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:5804 +PFNGLPNTRIANGLESFATIPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:5805 +# ATI_vertex_array_object (GL/glext.h:5808) +GL_ATI_vertex_array_object = 1 # GL/glext.h:5809 +# GL/glext.h:5811 +glNewObjectBufferATI = _link_function('glNewObjectBufferATI', GLuint, [GLsizei, POINTER(GLvoid), GLenum], 'ATI_vertex_array_object') + +# GL/glext.h:5812 +glIsObjectBufferATI = _link_function('glIsObjectBufferATI', GLboolean, [GLuint], 'ATI_vertex_array_object') + +# GL/glext.h:5813 +glUpdateObjectBufferATI = _link_function('glUpdateObjectBufferATI', None, [GLuint, GLuint, GLsizei, POINTER(GLvoid), GLenum], 'ATI_vertex_array_object') + +# GL/glext.h:5814 +glGetObjectBufferfvATI = _link_function('glGetObjectBufferfvATI', None, [GLuint, GLenum, POINTER(GLfloat)], 'ATI_vertex_array_object') + +# GL/glext.h:5815 +glGetObjectBufferivATI = _link_function('glGetObjectBufferivATI', None, [GLuint, GLenum, POINTER(GLint)], 'ATI_vertex_array_object') + +# GL/glext.h:5816 +glFreeObjectBufferATI = _link_function('glFreeObjectBufferATI', None, [GLuint], 'ATI_vertex_array_object') + +# GL/glext.h:5817 +glArrayObjectATI = _link_function('glArrayObjectATI', None, [GLenum, GLint, GLenum, GLsizei, GLuint, GLuint], 'ATI_vertex_array_object') + +# GL/glext.h:5818 +glGetArrayObjectfvATI = _link_function('glGetArrayObjectfvATI', None, [GLenum, GLenum, POINTER(GLfloat)], 'ATI_vertex_array_object') + +# GL/glext.h:5819 +glGetArrayObjectivATI = _link_function('glGetArrayObjectivATI', None, [GLenum, GLenum, POINTER(GLint)], 'ATI_vertex_array_object') + +# GL/glext.h:5820 +glVariantArrayObjectATI = _link_function('glVariantArrayObjectATI', None, [GLuint, GLenum, GLsizei, GLuint, GLuint], 'ATI_vertex_array_object') + +# GL/glext.h:5821 +glGetVariantArrayObjectfvATI = _link_function('glGetVariantArrayObjectfvATI', None, [GLuint, GLenum, POINTER(GLfloat)], 'ATI_vertex_array_object') + +# GL/glext.h:5822 +glGetVariantArrayObjectivATI = _link_function('glGetVariantArrayObjectivATI', None, [GLuint, GLenum, POINTER(GLint)], 'ATI_vertex_array_object') + +PFNGLNEWOBJECTBUFFERATIPROC = CFUNCTYPE(GLuint, GLsizei, POINTER(GLvoid), GLenum) # GL/glext.h:5824 +PFNGLISOBJECTBUFFERATIPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:5825 +PFNGLUPDATEOBJECTBUFFERATIPROC = CFUNCTYPE(None, GLuint, GLuint, GLsizei, POINTER(GLvoid), GLenum) # GL/glext.h:5826 +PFNGLGETOBJECTBUFFERFVATIPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:5827 +PFNGLGETOBJECTBUFFERIVATIPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:5828 +PFNGLFREEOBJECTBUFFERATIPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:5829 +PFNGLARRAYOBJECTATIPROC = CFUNCTYPE(None, GLenum, GLint, GLenum, GLsizei, GLuint, GLuint) # GL/glext.h:5830 +PFNGLGETARRAYOBJECTFVATIPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:5831 +PFNGLGETARRAYOBJECTIVATIPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:5832 +PFNGLVARIANTARRAYOBJECTATIPROC = CFUNCTYPE(None, GLuint, GLenum, GLsizei, GLuint, GLuint) # GL/glext.h:5833 +PFNGLGETVARIANTARRAYOBJECTFVATIPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:5834 +PFNGLGETVARIANTARRAYOBJECTIVATIPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:5835 +# EXT_vertex_shader (GL/glext.h:5838) +GL_EXT_vertex_shader = 1 # GL/glext.h:5839 +# GL/glext.h:5841 +glBeginVertexShaderEXT = _link_function('glBeginVertexShaderEXT', None, [], 'EXT_vertex_shader') + +# GL/glext.h:5842 +glEndVertexShaderEXT = _link_function('glEndVertexShaderEXT', None, [], 'EXT_vertex_shader') + +# GL/glext.h:5843 +glBindVertexShaderEXT = _link_function('glBindVertexShaderEXT', None, [GLuint], 'EXT_vertex_shader') + +# GL/glext.h:5844 +glGenVertexShadersEXT = _link_function('glGenVertexShadersEXT', GLuint, [GLuint], 'EXT_vertex_shader') + +# GL/glext.h:5845 +glDeleteVertexShaderEXT = _link_function('glDeleteVertexShaderEXT', None, [GLuint], 'EXT_vertex_shader') + +# GL/glext.h:5846 +glShaderOp1EXT = _link_function('glShaderOp1EXT', None, [GLenum, GLuint, GLuint], 'EXT_vertex_shader') + +# GL/glext.h:5847 +glShaderOp2EXT = _link_function('glShaderOp2EXT', None, [GLenum, GLuint, GLuint, GLuint], 'EXT_vertex_shader') + +# GL/glext.h:5848 +glShaderOp3EXT = _link_function('glShaderOp3EXT', None, [GLenum, GLuint, GLuint, GLuint, GLuint], 'EXT_vertex_shader') + +# GL/glext.h:5849 +glSwizzleEXT = _link_function('glSwizzleEXT', None, [GLuint, GLuint, GLenum, GLenum, GLenum, GLenum], 'EXT_vertex_shader') + +# GL/glext.h:5850 +glWriteMaskEXT = _link_function('glWriteMaskEXT', None, [GLuint, GLuint, GLenum, GLenum, GLenum, GLenum], 'EXT_vertex_shader') + +# GL/glext.h:5851 +glInsertComponentEXT = _link_function('glInsertComponentEXT', None, [GLuint, GLuint, GLuint], 'EXT_vertex_shader') + +# GL/glext.h:5852 +glExtractComponentEXT = _link_function('glExtractComponentEXT', None, [GLuint, GLuint, GLuint], 'EXT_vertex_shader') + +# GL/glext.h:5853 +glGenSymbolsEXT = _link_function('glGenSymbolsEXT', GLuint, [GLenum, GLenum, GLenum, GLuint], 'EXT_vertex_shader') + +# GL/glext.h:5854 +glSetInvariantEXT = _link_function('glSetInvariantEXT', None, [GLuint, GLenum, POINTER(GLvoid)], 'EXT_vertex_shader') + +# GL/glext.h:5855 +glSetLocalConstantEXT = _link_function('glSetLocalConstantEXT', None, [GLuint, GLenum, POINTER(GLvoid)], 'EXT_vertex_shader') + +# GL/glext.h:5856 +glVariantbvEXT = _link_function('glVariantbvEXT', None, [GLuint, POINTER(GLbyte)], 'EXT_vertex_shader') + +# GL/glext.h:5857 +glVariantsvEXT = _link_function('glVariantsvEXT', None, [GLuint, POINTER(GLshort)], 'EXT_vertex_shader') + +# GL/glext.h:5858 +glVariantivEXT = _link_function('glVariantivEXT', None, [GLuint, POINTER(GLint)], 'EXT_vertex_shader') + +# GL/glext.h:5859 +glVariantfvEXT = _link_function('glVariantfvEXT', None, [GLuint, POINTER(GLfloat)], 'EXT_vertex_shader') + +# GL/glext.h:5860 +glVariantdvEXT = _link_function('glVariantdvEXT', None, [GLuint, POINTER(GLdouble)], 'EXT_vertex_shader') + +# GL/glext.h:5861 +glVariantubvEXT = _link_function('glVariantubvEXT', None, [GLuint, POINTER(GLubyte)], 'EXT_vertex_shader') + +# GL/glext.h:5862 +glVariantusvEXT = _link_function('glVariantusvEXT', None, [GLuint, POINTER(GLushort)], 'EXT_vertex_shader') + +# GL/glext.h:5863 +glVariantuivEXT = _link_function('glVariantuivEXT', None, [GLuint, POINTER(GLuint)], 'EXT_vertex_shader') + +# GL/glext.h:5864 +glVariantPointerEXT = _link_function('glVariantPointerEXT', None, [GLuint, GLenum, GLuint, POINTER(GLvoid)], 'EXT_vertex_shader') + +# GL/glext.h:5865 +glEnableVariantClientStateEXT = _link_function('glEnableVariantClientStateEXT', None, [GLuint], 'EXT_vertex_shader') + +# GL/glext.h:5866 +glDisableVariantClientStateEXT = _link_function('glDisableVariantClientStateEXT', None, [GLuint], 'EXT_vertex_shader') + +# GL/glext.h:5867 +glBindLightParameterEXT = _link_function('glBindLightParameterEXT', GLuint, [GLenum, GLenum], 'EXT_vertex_shader') + +# GL/glext.h:5868 +glBindMaterialParameterEXT = _link_function('glBindMaterialParameterEXT', GLuint, [GLenum, GLenum], 'EXT_vertex_shader') + +# GL/glext.h:5869 +glBindTexGenParameterEXT = _link_function('glBindTexGenParameterEXT', GLuint, [GLenum, GLenum, GLenum], 'EXT_vertex_shader') + +# GL/glext.h:5870 +glBindTextureUnitParameterEXT = _link_function('glBindTextureUnitParameterEXT', GLuint, [GLenum, GLenum], 'EXT_vertex_shader') + +# GL/glext.h:5871 +glBindParameterEXT = _link_function('glBindParameterEXT', GLuint, [GLenum], 'EXT_vertex_shader') + +# GL/glext.h:5872 +glIsVariantEnabledEXT = _link_function('glIsVariantEnabledEXT', GLboolean, [GLuint, GLenum], 'EXT_vertex_shader') + +# GL/glext.h:5873 +glGetVariantBooleanvEXT = _link_function('glGetVariantBooleanvEXT', None, [GLuint, GLenum, POINTER(GLboolean)], 'EXT_vertex_shader') + +# GL/glext.h:5874 +glGetVariantIntegervEXT = _link_function('glGetVariantIntegervEXT', None, [GLuint, GLenum, POINTER(GLint)], 'EXT_vertex_shader') + +# GL/glext.h:5875 +glGetVariantFloatvEXT = _link_function('glGetVariantFloatvEXT', None, [GLuint, GLenum, POINTER(GLfloat)], 'EXT_vertex_shader') + +# GL/glext.h:5876 +glGetVariantPointervEXT = _link_function('glGetVariantPointervEXT', None, [GLuint, GLenum, POINTER(POINTER(GLvoid))], 'EXT_vertex_shader') + +# GL/glext.h:5877 +glGetInvariantBooleanvEXT = _link_function('glGetInvariantBooleanvEXT', None, [GLuint, GLenum, POINTER(GLboolean)], 'EXT_vertex_shader') + +# GL/glext.h:5878 +glGetInvariantIntegervEXT = _link_function('glGetInvariantIntegervEXT', None, [GLuint, GLenum, POINTER(GLint)], 'EXT_vertex_shader') + +# GL/glext.h:5879 +glGetInvariantFloatvEXT = _link_function('glGetInvariantFloatvEXT', None, [GLuint, GLenum, POINTER(GLfloat)], 'EXT_vertex_shader') + +# GL/glext.h:5880 +glGetLocalConstantBooleanvEXT = _link_function('glGetLocalConstantBooleanvEXT', None, [GLuint, GLenum, POINTER(GLboolean)], 'EXT_vertex_shader') + +# GL/glext.h:5881 +glGetLocalConstantIntegervEXT = _link_function('glGetLocalConstantIntegervEXT', None, [GLuint, GLenum, POINTER(GLint)], 'EXT_vertex_shader') + +# GL/glext.h:5882 +glGetLocalConstantFloatvEXT = _link_function('glGetLocalConstantFloatvEXT', None, [GLuint, GLenum, POINTER(GLfloat)], 'EXT_vertex_shader') + +PFNGLBEGINVERTEXSHADEREXTPROC = CFUNCTYPE(None) # GL/glext.h:5884 +PFNGLENDVERTEXSHADEREXTPROC = CFUNCTYPE(None) # GL/glext.h:5885 +PFNGLBINDVERTEXSHADEREXTPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:5886 +PFNGLGENVERTEXSHADERSEXTPROC = CFUNCTYPE(GLuint, GLuint) # GL/glext.h:5887 +PFNGLDELETEVERTEXSHADEREXTPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:5888 +PFNGLSHADEROP1EXTPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint) # GL/glext.h:5889 +PFNGLSHADEROP2EXTPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLuint) # GL/glext.h:5890 +PFNGLSHADEROP3EXTPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLuint, GLuint) # GL/glext.h:5891 +PFNGLSWIZZLEEXTPROC = CFUNCTYPE(None, GLuint, GLuint, GLenum, GLenum, GLenum, GLenum) # GL/glext.h:5892 +PFNGLWRITEMASKEXTPROC = CFUNCTYPE(None, GLuint, GLuint, GLenum, GLenum, GLenum, GLenum) # GL/glext.h:5893 +PFNGLINSERTCOMPONENTEXTPROC = CFUNCTYPE(None, GLuint, GLuint, GLuint) # GL/glext.h:5894 +PFNGLEXTRACTCOMPONENTEXTPROC = CFUNCTYPE(None, GLuint, GLuint, GLuint) # GL/glext.h:5895 +PFNGLGENSYMBOLSEXTPROC = CFUNCTYPE(GLuint, GLenum, GLenum, GLenum, GLuint) # GL/glext.h:5896 +PFNGLSETINVARIANTEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLvoid)) # GL/glext.h:5897 +PFNGLSETLOCALCONSTANTEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLvoid)) # GL/glext.h:5898 +PFNGLVARIANTBVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLbyte)) # GL/glext.h:5899 +PFNGLVARIANTSVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:5900 +PFNGLVARIANTIVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLint)) # GL/glext.h:5901 +PFNGLVARIANTFVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:5902 +PFNGLVARIANTDVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:5903 +PFNGLVARIANTUBVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLubyte)) # GL/glext.h:5904 +PFNGLVARIANTUSVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLushort)) # GL/glext.h:5905 +PFNGLVARIANTUIVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLuint)) # GL/glext.h:5906 +PFNGLVARIANTPOINTEREXTPROC = CFUNCTYPE(None, GLuint, GLenum, GLuint, POINTER(GLvoid)) # GL/glext.h:5907 +PFNGLENABLEVARIANTCLIENTSTATEEXTPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:5908 +PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:5909 +PFNGLBINDLIGHTPARAMETEREXTPROC = CFUNCTYPE(GLuint, GLenum, GLenum) # GL/glext.h:5910 +PFNGLBINDMATERIALPARAMETEREXTPROC = CFUNCTYPE(GLuint, GLenum, GLenum) # GL/glext.h:5911 +PFNGLBINDTEXGENPARAMETEREXTPROC = CFUNCTYPE(GLuint, GLenum, GLenum, GLenum) # GL/glext.h:5912 +PFNGLBINDTEXTUREUNITPARAMETEREXTPROC = CFUNCTYPE(GLuint, GLenum, GLenum) # GL/glext.h:5913 +PFNGLBINDPARAMETEREXTPROC = CFUNCTYPE(GLuint, GLenum) # GL/glext.h:5914 +PFNGLISVARIANTENABLEDEXTPROC = CFUNCTYPE(GLboolean, GLuint, GLenum) # GL/glext.h:5915 +PFNGLGETVARIANTBOOLEANVEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLboolean)) # GL/glext.h:5916 +PFNGLGETVARIANTINTEGERVEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:5917 +PFNGLGETVARIANTFLOATVEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:5918 +PFNGLGETVARIANTPOINTERVEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(POINTER(GLvoid))) # GL/glext.h:5919 +PFNGLGETINVARIANTBOOLEANVEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLboolean)) # GL/glext.h:5920 +PFNGLGETINVARIANTINTEGERVEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:5921 +PFNGLGETINVARIANTFLOATVEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:5922 +PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLboolean)) # GL/glext.h:5923 +PFNGLGETLOCALCONSTANTINTEGERVEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:5924 +PFNGLGETLOCALCONSTANTFLOATVEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:5925 +# ATI_vertex_streams (GL/glext.h:5928) +GL_ATI_vertex_streams = 1 # GL/glext.h:5929 +# GL/glext.h:5931 +glVertexStream1sATI = _link_function('glVertexStream1sATI', None, [GLenum, GLshort], 'ATI_vertex_streams') + +# GL/glext.h:5932 +glVertexStream1svATI = _link_function('glVertexStream1svATI', None, [GLenum, POINTER(GLshort)], 'ATI_vertex_streams') + +# GL/glext.h:5933 +glVertexStream1iATI = _link_function('glVertexStream1iATI', None, [GLenum, GLint], 'ATI_vertex_streams') + +# GL/glext.h:5934 +glVertexStream1ivATI = _link_function('glVertexStream1ivATI', None, [GLenum, POINTER(GLint)], 'ATI_vertex_streams') + +# GL/glext.h:5935 +glVertexStream1fATI = _link_function('glVertexStream1fATI', None, [GLenum, GLfloat], 'ATI_vertex_streams') + +# GL/glext.h:5936 +glVertexStream1fvATI = _link_function('glVertexStream1fvATI', None, [GLenum, POINTER(GLfloat)], 'ATI_vertex_streams') + +# GL/glext.h:5937 +glVertexStream1dATI = _link_function('glVertexStream1dATI', None, [GLenum, GLdouble], 'ATI_vertex_streams') + +# GL/glext.h:5938 +glVertexStream1dvATI = _link_function('glVertexStream1dvATI', None, [GLenum, POINTER(GLdouble)], 'ATI_vertex_streams') + +# GL/glext.h:5939 +glVertexStream2sATI = _link_function('glVertexStream2sATI', None, [GLenum, GLshort, GLshort], 'ATI_vertex_streams') + +# GL/glext.h:5940 +glVertexStream2svATI = _link_function('glVertexStream2svATI', None, [GLenum, POINTER(GLshort)], 'ATI_vertex_streams') + +# GL/glext.h:5941 +glVertexStream2iATI = _link_function('glVertexStream2iATI', None, [GLenum, GLint, GLint], 'ATI_vertex_streams') + +# GL/glext.h:5942 +glVertexStream2ivATI = _link_function('glVertexStream2ivATI', None, [GLenum, POINTER(GLint)], 'ATI_vertex_streams') + +# GL/glext.h:5943 +glVertexStream2fATI = _link_function('glVertexStream2fATI', None, [GLenum, GLfloat, GLfloat], 'ATI_vertex_streams') + +# GL/glext.h:5944 +glVertexStream2fvATI = _link_function('glVertexStream2fvATI', None, [GLenum, POINTER(GLfloat)], 'ATI_vertex_streams') + +# GL/glext.h:5945 +glVertexStream2dATI = _link_function('glVertexStream2dATI', None, [GLenum, GLdouble, GLdouble], 'ATI_vertex_streams') + +# GL/glext.h:5946 +glVertexStream2dvATI = _link_function('glVertexStream2dvATI', None, [GLenum, POINTER(GLdouble)], 'ATI_vertex_streams') + +# GL/glext.h:5947 +glVertexStream3sATI = _link_function('glVertexStream3sATI', None, [GLenum, GLshort, GLshort, GLshort], 'ATI_vertex_streams') + +# GL/glext.h:5948 +glVertexStream3svATI = _link_function('glVertexStream3svATI', None, [GLenum, POINTER(GLshort)], 'ATI_vertex_streams') + +# GL/glext.h:5949 +glVertexStream3iATI = _link_function('glVertexStream3iATI', None, [GLenum, GLint, GLint, GLint], 'ATI_vertex_streams') + +# GL/glext.h:5950 +glVertexStream3ivATI = _link_function('glVertexStream3ivATI', None, [GLenum, POINTER(GLint)], 'ATI_vertex_streams') + +# GL/glext.h:5951 +glVertexStream3fATI = _link_function('glVertexStream3fATI', None, [GLenum, GLfloat, GLfloat, GLfloat], 'ATI_vertex_streams') + +# GL/glext.h:5952 +glVertexStream3fvATI = _link_function('glVertexStream3fvATI', None, [GLenum, POINTER(GLfloat)], 'ATI_vertex_streams') + +# GL/glext.h:5953 +glVertexStream3dATI = _link_function('glVertexStream3dATI', None, [GLenum, GLdouble, GLdouble, GLdouble], 'ATI_vertex_streams') + +# GL/glext.h:5954 +glVertexStream3dvATI = _link_function('glVertexStream3dvATI', None, [GLenum, POINTER(GLdouble)], 'ATI_vertex_streams') + +# GL/glext.h:5955 +glVertexStream4sATI = _link_function('glVertexStream4sATI', None, [GLenum, GLshort, GLshort, GLshort, GLshort], 'ATI_vertex_streams') + +# GL/glext.h:5956 +glVertexStream4svATI = _link_function('glVertexStream4svATI', None, [GLenum, POINTER(GLshort)], 'ATI_vertex_streams') + +# GL/glext.h:5957 +glVertexStream4iATI = _link_function('glVertexStream4iATI', None, [GLenum, GLint, GLint, GLint, GLint], 'ATI_vertex_streams') + +# GL/glext.h:5958 +glVertexStream4ivATI = _link_function('glVertexStream4ivATI', None, [GLenum, POINTER(GLint)], 'ATI_vertex_streams') + +# GL/glext.h:5959 +glVertexStream4fATI = _link_function('glVertexStream4fATI', None, [GLenum, GLfloat, GLfloat, GLfloat, GLfloat], 'ATI_vertex_streams') + +# GL/glext.h:5960 +glVertexStream4fvATI = _link_function('glVertexStream4fvATI', None, [GLenum, POINTER(GLfloat)], 'ATI_vertex_streams') + +# GL/glext.h:5961 +glVertexStream4dATI = _link_function('glVertexStream4dATI', None, [GLenum, GLdouble, GLdouble, GLdouble, GLdouble], 'ATI_vertex_streams') + +# GL/glext.h:5962 +glVertexStream4dvATI = _link_function('glVertexStream4dvATI', None, [GLenum, POINTER(GLdouble)], 'ATI_vertex_streams') + +# GL/glext.h:5963 +glNormalStream3bATI = _link_function('glNormalStream3bATI', None, [GLenum, GLbyte, GLbyte, GLbyte], 'ATI_vertex_streams') + +# GL/glext.h:5964 +glNormalStream3bvATI = _link_function('glNormalStream3bvATI', None, [GLenum, POINTER(GLbyte)], 'ATI_vertex_streams') + +# GL/glext.h:5965 +glNormalStream3sATI = _link_function('glNormalStream3sATI', None, [GLenum, GLshort, GLshort, GLshort], 'ATI_vertex_streams') + +# GL/glext.h:5966 +glNormalStream3svATI = _link_function('glNormalStream3svATI', None, [GLenum, POINTER(GLshort)], 'ATI_vertex_streams') + +# GL/glext.h:5967 +glNormalStream3iATI = _link_function('glNormalStream3iATI', None, [GLenum, GLint, GLint, GLint], 'ATI_vertex_streams') + +# GL/glext.h:5968 +glNormalStream3ivATI = _link_function('glNormalStream3ivATI', None, [GLenum, POINTER(GLint)], 'ATI_vertex_streams') + +# GL/glext.h:5969 +glNormalStream3fATI = _link_function('glNormalStream3fATI', None, [GLenum, GLfloat, GLfloat, GLfloat], 'ATI_vertex_streams') + +# GL/glext.h:5970 +glNormalStream3fvATI = _link_function('glNormalStream3fvATI', None, [GLenum, POINTER(GLfloat)], 'ATI_vertex_streams') + +# GL/glext.h:5971 +glNormalStream3dATI = _link_function('glNormalStream3dATI', None, [GLenum, GLdouble, GLdouble, GLdouble], 'ATI_vertex_streams') + +# GL/glext.h:5972 +glNormalStream3dvATI = _link_function('glNormalStream3dvATI', None, [GLenum, POINTER(GLdouble)], 'ATI_vertex_streams') + +# GL/glext.h:5973 +glClientActiveVertexStreamATI = _link_function('glClientActiveVertexStreamATI', None, [GLenum], 'ATI_vertex_streams') + +# GL/glext.h:5974 +glVertexBlendEnviATI = _link_function('glVertexBlendEnviATI', None, [GLenum, GLint], 'ATI_vertex_streams') + +# GL/glext.h:5975 +glVertexBlendEnvfATI = _link_function('glVertexBlendEnvfATI', None, [GLenum, GLfloat], 'ATI_vertex_streams') + +PFNGLVERTEXSTREAM1SATIPROC = CFUNCTYPE(None, GLenum, GLshort) # GL/glext.h:5977 +PFNGLVERTEXSTREAM1SVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:5978 +PFNGLVERTEXSTREAM1IATIPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:5979 +PFNGLVERTEXSTREAM1IVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:5980 +PFNGLVERTEXSTREAM1FATIPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:5981 +PFNGLVERTEXSTREAM1FVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:5982 +PFNGLVERTEXSTREAM1DATIPROC = CFUNCTYPE(None, GLenum, GLdouble) # GL/glext.h:5983 +PFNGLVERTEXSTREAM1DVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:5984 +PFNGLVERTEXSTREAM2SATIPROC = CFUNCTYPE(None, GLenum, GLshort, GLshort) # GL/glext.h:5985 +PFNGLVERTEXSTREAM2SVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:5986 +PFNGLVERTEXSTREAM2IATIPROC = CFUNCTYPE(None, GLenum, GLint, GLint) # GL/glext.h:5987 +PFNGLVERTEXSTREAM2IVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:5988 +PFNGLVERTEXSTREAM2FATIPROC = CFUNCTYPE(None, GLenum, GLfloat, GLfloat) # GL/glext.h:5989 +PFNGLVERTEXSTREAM2FVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:5990 +PFNGLVERTEXSTREAM2DATIPROC = CFUNCTYPE(None, GLenum, GLdouble, GLdouble) # GL/glext.h:5991 +PFNGLVERTEXSTREAM2DVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:5992 +PFNGLVERTEXSTREAM3SATIPROC = CFUNCTYPE(None, GLenum, GLshort, GLshort, GLshort) # GL/glext.h:5993 +PFNGLVERTEXSTREAM3SVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:5994 +PFNGLVERTEXSTREAM3IATIPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint) # GL/glext.h:5995 +PFNGLVERTEXSTREAM3IVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:5996 +PFNGLVERTEXSTREAM3FATIPROC = CFUNCTYPE(None, GLenum, GLfloat, GLfloat, GLfloat) # GL/glext.h:5997 +PFNGLVERTEXSTREAM3FVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:5998 +PFNGLVERTEXSTREAM3DATIPROC = CFUNCTYPE(None, GLenum, GLdouble, GLdouble, GLdouble) # GL/glext.h:5999 +PFNGLVERTEXSTREAM3DVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:6000 +PFNGLVERTEXSTREAM4SATIPROC = CFUNCTYPE(None, GLenum, GLshort, GLshort, GLshort, GLshort) # GL/glext.h:6001 +PFNGLVERTEXSTREAM4SVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:6002 +PFNGLVERTEXSTREAM4IATIPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint) # GL/glext.h:6003 +PFNGLVERTEXSTREAM4IVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:6004 +PFNGLVERTEXSTREAM4FATIPROC = CFUNCTYPE(None, GLenum, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:6005 +PFNGLVERTEXSTREAM4FVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:6006 +PFNGLVERTEXSTREAM4DATIPROC = CFUNCTYPE(None, GLenum, GLdouble, GLdouble, GLdouble, GLdouble) # GL/glext.h:6007 +PFNGLVERTEXSTREAM4DVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:6008 +PFNGLNORMALSTREAM3BATIPROC = CFUNCTYPE(None, GLenum, GLbyte, GLbyte, GLbyte) # GL/glext.h:6009 +PFNGLNORMALSTREAM3BVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLbyte)) # GL/glext.h:6010 +PFNGLNORMALSTREAM3SATIPROC = CFUNCTYPE(None, GLenum, GLshort, GLshort, GLshort) # GL/glext.h:6011 +PFNGLNORMALSTREAM3SVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:6012 +PFNGLNORMALSTREAM3IATIPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint) # GL/glext.h:6013 +PFNGLNORMALSTREAM3IVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:6014 +PFNGLNORMALSTREAM3FATIPROC = CFUNCTYPE(None, GLenum, GLfloat, GLfloat, GLfloat) # GL/glext.h:6015 +PFNGLNORMALSTREAM3FVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:6016 +PFNGLNORMALSTREAM3DATIPROC = CFUNCTYPE(None, GLenum, GLdouble, GLdouble, GLdouble) # GL/glext.h:6017 +PFNGLNORMALSTREAM3DVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:6018 +PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:6019 +PFNGLVERTEXBLENDENVIATIPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:6020 +PFNGLVERTEXBLENDENVFATIPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:6021 +# ATI_element_array (GL/glext.h:6024) +GL_ATI_element_array = 1 # GL/glext.h:6025 +# GL/glext.h:6027 +glElementPointerATI = _link_function('glElementPointerATI', None, [GLenum, POINTER(GLvoid)], 'ATI_element_array') + +# GL/glext.h:6028 +glDrawElementArrayATI = _link_function('glDrawElementArrayATI', None, [GLenum, GLsizei], 'ATI_element_array') + +# GL/glext.h:6029 +glDrawRangeElementArrayATI = _link_function('glDrawRangeElementArrayATI', None, [GLenum, GLuint, GLuint, GLsizei], 'ATI_element_array') + +PFNGLELEMENTPOINTERATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLvoid)) # GL/glext.h:6031 +PFNGLDRAWELEMENTARRAYATIPROC = CFUNCTYPE(None, GLenum, GLsizei) # GL/glext.h:6032 +PFNGLDRAWRANGEELEMENTARRAYATIPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLsizei) # GL/glext.h:6033 +# SUN_mesh_array (GL/glext.h:6036) +GL_SUN_mesh_array = 1 # GL/glext.h:6037 +# GL/glext.h:6039 +glDrawMeshArraysSUN = _link_function('glDrawMeshArraysSUN', None, [GLenum, GLint, GLsizei, GLsizei], 'SUN_mesh_array') + +PFNGLDRAWMESHARRAYSSUNPROC = CFUNCTYPE(None, GLenum, GLint, GLsizei, GLsizei) # GL/glext.h:6041 +# SUN_slice_accum (GL/glext.h:6044) +GL_SUN_slice_accum = 1 # GL/glext.h:6045 +# NV_multisample_filter_hint (GL/glext.h:6048) +GL_NV_multisample_filter_hint = 1 # GL/glext.h:6049 +# NV_depth_clamp (GL/glext.h:6052) +GL_NV_depth_clamp = 1 # GL/glext.h:6053 +# NV_occlusion_query (GL/glext.h:6056) +GL_NV_occlusion_query = 1 # GL/glext.h:6057 +# GL/glext.h:6059 +glGenOcclusionQueriesNV = _link_function('glGenOcclusionQueriesNV', None, [GLsizei, POINTER(GLuint)], 'NV_occlusion_query') + +# GL/glext.h:6060 +glDeleteOcclusionQueriesNV = _link_function('glDeleteOcclusionQueriesNV', None, [GLsizei, POINTER(GLuint)], 'NV_occlusion_query') + +# GL/glext.h:6061 +glIsOcclusionQueryNV = _link_function('glIsOcclusionQueryNV', GLboolean, [GLuint], 'NV_occlusion_query') + +# GL/glext.h:6062 +glBeginOcclusionQueryNV = _link_function('glBeginOcclusionQueryNV', None, [GLuint], 'NV_occlusion_query') + +# GL/glext.h:6063 +glEndOcclusionQueryNV = _link_function('glEndOcclusionQueryNV', None, [], 'NV_occlusion_query') + +# GL/glext.h:6064 +glGetOcclusionQueryivNV = _link_function('glGetOcclusionQueryivNV', None, [GLuint, GLenum, POINTER(GLint)], 'NV_occlusion_query') + +# GL/glext.h:6065 +glGetOcclusionQueryuivNV = _link_function('glGetOcclusionQueryuivNV', None, [GLuint, GLenum, POINTER(GLuint)], 'NV_occlusion_query') + +PFNGLGENOCCLUSIONQUERIESNVPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:6067 +PFNGLDELETEOCCLUSIONQUERIESNVPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:6068 +PFNGLISOCCLUSIONQUERYNVPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:6069 +PFNGLBEGINOCCLUSIONQUERYNVPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:6070 +PFNGLENDOCCLUSIONQUERYNVPROC = CFUNCTYPE(None) # GL/glext.h:6071 +PFNGLGETOCCLUSIONQUERYIVNVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:6072 +PFNGLGETOCCLUSIONQUERYUIVNVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLuint)) # GL/glext.h:6073 +# NV_point_sprite (GL/glext.h:6076) +GL_NV_point_sprite = 1 # GL/glext.h:6077 +# GL/glext.h:6079 +glPointParameteriNV = _link_function('glPointParameteriNV', None, [GLenum, GLint], 'NV_point_sprite') + +# GL/glext.h:6080 +glPointParameterivNV = _link_function('glPointParameterivNV', None, [GLenum, POINTER(GLint)], 'NV_point_sprite') + +PFNGLPOINTPARAMETERINVPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:6082 +PFNGLPOINTPARAMETERIVNVPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:6083 +# NV_texture_shader3 (GL/glext.h:6086) +GL_NV_texture_shader3 = 1 # GL/glext.h:6087 +# NV_vertex_program1_1 (GL/glext.h:6090) +GL_NV_vertex_program1_1 = 1 # GL/glext.h:6091 +# EXT_shadow_funcs (GL/glext.h:6094) +GL_EXT_shadow_funcs = 1 # GL/glext.h:6095 +# EXT_stencil_two_side (GL/glext.h:6098) +GL_EXT_stencil_two_side = 1 # GL/glext.h:6099 +# GL/glext.h:6101 +glActiveStencilFaceEXT = _link_function('glActiveStencilFaceEXT', None, [GLenum], 'EXT_stencil_two_side') + +PFNGLACTIVESTENCILFACEEXTPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:6103 +# ATI_text_fragment_shader (GL/glext.h:6106) +GL_ATI_text_fragment_shader = 1 # GL/glext.h:6107 +# APPLE_client_storage (GL/glext.h:6110) +GL_APPLE_client_storage = 1 # GL/glext.h:6111 +# APPLE_element_array (GL/glext.h:6114) +GL_APPLE_element_array = 1 # GL/glext.h:6115 +# GL/glext.h:6117 +glElementPointerAPPLE = _link_function('glElementPointerAPPLE', None, [GLenum, POINTER(GLvoid)], 'APPLE_element_array') + +# GL/glext.h:6118 +glDrawElementArrayAPPLE = _link_function('glDrawElementArrayAPPLE', None, [GLenum, GLint, GLsizei], 'APPLE_element_array') + +# GL/glext.h:6119 +glDrawRangeElementArrayAPPLE = _link_function('glDrawRangeElementArrayAPPLE', None, [GLenum, GLuint, GLuint, GLint, GLsizei], 'APPLE_element_array') + +# GL/glext.h:6120 +glMultiDrawElementArrayAPPLE = _link_function('glMultiDrawElementArrayAPPLE', None, [GLenum, POINTER(GLint), POINTER(GLsizei), GLsizei], 'APPLE_element_array') + +# GL/glext.h:6121 +glMultiDrawRangeElementArrayAPPLE = _link_function('glMultiDrawRangeElementArrayAPPLE', None, [GLenum, GLuint, GLuint, POINTER(GLint), POINTER(GLsizei), GLsizei], 'APPLE_element_array') + +PFNGLELEMENTPOINTERAPPLEPROC = CFUNCTYPE(None, GLenum, POINTER(GLvoid)) # GL/glext.h:6123 +PFNGLDRAWELEMENTARRAYAPPLEPROC = CFUNCTYPE(None, GLenum, GLint, GLsizei) # GL/glext.h:6124 +PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLint, GLsizei) # GL/glext.h:6125 +PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC = CFUNCTYPE(None, GLenum, POINTER(GLint), POINTER(GLsizei), GLsizei) # GL/glext.h:6126 +PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, POINTER(GLint), POINTER(GLsizei), GLsizei) # GL/glext.h:6127 +# APPLE_fence (GL/glext.h:6130) +GL_APPLE_fence = 1 # GL/glext.h:6131 +# GL/glext.h:6133 +glGenFencesAPPLE = _link_function('glGenFencesAPPLE', None, [GLsizei, POINTER(GLuint)], 'APPLE_fence') + +# GL/glext.h:6134 +glDeleteFencesAPPLE = _link_function('glDeleteFencesAPPLE', None, [GLsizei, POINTER(GLuint)], 'APPLE_fence') + +# GL/glext.h:6135 +glSetFenceAPPLE = _link_function('glSetFenceAPPLE', None, [GLuint], 'APPLE_fence') + +# GL/glext.h:6136 +glIsFenceAPPLE = _link_function('glIsFenceAPPLE', GLboolean, [GLuint], 'APPLE_fence') + +# GL/glext.h:6137 +glTestFenceAPPLE = _link_function('glTestFenceAPPLE', GLboolean, [GLuint], 'APPLE_fence') + +# GL/glext.h:6138 +glFinishFenceAPPLE = _link_function('glFinishFenceAPPLE', None, [GLuint], 'APPLE_fence') + +# GL/glext.h:6139 +glTestObjectAPPLE = _link_function('glTestObjectAPPLE', GLboolean, [GLenum, GLuint], 'APPLE_fence') + +# GL/glext.h:6140 +glFinishObjectAPPLE = _link_function('glFinishObjectAPPLE', None, [GLenum, GLint], 'APPLE_fence') + +PFNGLGENFENCESAPPLEPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:6142 +PFNGLDELETEFENCESAPPLEPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:6143 +PFNGLSETFENCEAPPLEPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:6144 +PFNGLISFENCEAPPLEPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:6145 +PFNGLTESTFENCEAPPLEPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:6146 +PFNGLFINISHFENCEAPPLEPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:6147 +PFNGLTESTOBJECTAPPLEPROC = CFUNCTYPE(GLboolean, GLenum, GLuint) # GL/glext.h:6148 +PFNGLFINISHOBJECTAPPLEPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:6149 +# APPLE_vertex_array_object (GL/glext.h:6152) +GL_APPLE_vertex_array_object = 1 # GL/glext.h:6153 +# GL/glext.h:6155 +glBindVertexArrayAPPLE = _link_function('glBindVertexArrayAPPLE', None, [GLuint], 'APPLE_vertex_array_object') + +# GL/glext.h:6156 +glDeleteVertexArraysAPPLE = _link_function('glDeleteVertexArraysAPPLE', None, [GLsizei, POINTER(GLuint)], 'APPLE_vertex_array_object') + +# GL/glext.h:6157 +glGenVertexArraysAPPLE = _link_function('glGenVertexArraysAPPLE', None, [GLsizei, POINTER(GLuint)], 'APPLE_vertex_array_object') + +# GL/glext.h:6158 +glIsVertexArrayAPPLE = _link_function('glIsVertexArrayAPPLE', GLboolean, [GLuint], 'APPLE_vertex_array_object') + +PFNGLBINDVERTEXARRAYAPPLEPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:6160 +PFNGLDELETEVERTEXARRAYSAPPLEPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:6161 +PFNGLGENVERTEXARRAYSAPPLEPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:6162 +PFNGLISVERTEXARRAYAPPLEPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:6163 +# APPLE_vertex_array_range (GL/glext.h:6166) +GL_APPLE_vertex_array_range = 1 # GL/glext.h:6167 +# GL/glext.h:6169 +glVertexArrayRangeAPPLE = _link_function('glVertexArrayRangeAPPLE', None, [GLsizei, POINTER(GLvoid)], 'APPLE_vertex_array_range') + +# GL/glext.h:6170 +glFlushVertexArrayRangeAPPLE = _link_function('glFlushVertexArrayRangeAPPLE', None, [GLsizei, POINTER(GLvoid)], 'APPLE_vertex_array_range') + +# GL/glext.h:6171 +glVertexArrayParameteriAPPLE = _link_function('glVertexArrayParameteriAPPLE', None, [GLenum, GLint], 'APPLE_vertex_array_range') + +PFNGLVERTEXARRAYRANGEAPPLEPROC = CFUNCTYPE(None, GLsizei, POINTER(GLvoid)) # GL/glext.h:6173 +PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC = CFUNCTYPE(None, GLsizei, POINTER(GLvoid)) # GL/glext.h:6174 +PFNGLVERTEXARRAYPARAMETERIAPPLEPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:6175 +# APPLE_ycbcr_422 (GL/glext.h:6178) +GL_APPLE_ycbcr_422 = 1 # GL/glext.h:6179 +# S3_s3tc (GL/glext.h:6182) +GL_S3_s3tc = 1 # GL/glext.h:6183 +# ATI_draw_buffers (GL/glext.h:6186) +GL_ATI_draw_buffers = 1 # GL/glext.h:6187 +# GL/glext.h:6189 +glDrawBuffersATI = _link_function('glDrawBuffersATI', None, [GLsizei, POINTER(GLenum)], 'ATI_draw_buffers') + +PFNGLDRAWBUFFERSATIPROC = CFUNCTYPE(None, GLsizei, POINTER(GLenum)) # GL/glext.h:6191 +# ATI_pixel_format_float (GL/glext.h:6194) +GL_ATI_pixel_format_float = 1 # GL/glext.h:6195 +# ATI_texture_env_combine3 (GL/glext.h:6201) +GL_ATI_texture_env_combine3 = 1 # GL/glext.h:6202 +# ATI_texture_float (GL/glext.h:6205) +GL_ATI_texture_float = 1 # GL/glext.h:6206 +# NV_float_buffer (GL/glext.h:6209) +GL_NV_float_buffer = 1 # GL/glext.h:6210 +# NV_fragment_program (GL/glext.h:6213) +GL_NV_fragment_program = 1 # GL/glext.h:6214 +# GL/glext.h:6217 +glProgramNamedParameter4fNV = _link_function('glProgramNamedParameter4fNV', None, [GLuint, GLsizei, POINTER(GLubyte), GLfloat, GLfloat, GLfloat, GLfloat], 'NV_fragment_program') + +# GL/glext.h:6218 +glProgramNamedParameter4dNV = _link_function('glProgramNamedParameter4dNV', None, [GLuint, GLsizei, POINTER(GLubyte), GLdouble, GLdouble, GLdouble, GLdouble], 'NV_fragment_program') + +# GL/glext.h:6219 +glProgramNamedParameter4fvNV = _link_function('glProgramNamedParameter4fvNV', None, [GLuint, GLsizei, POINTER(GLubyte), POINTER(GLfloat)], 'NV_fragment_program') + +# GL/glext.h:6220 +glProgramNamedParameter4dvNV = _link_function('glProgramNamedParameter4dvNV', None, [GLuint, GLsizei, POINTER(GLubyte), POINTER(GLdouble)], 'NV_fragment_program') + +# GL/glext.h:6221 +glGetProgramNamedParameterfvNV = _link_function('glGetProgramNamedParameterfvNV', None, [GLuint, GLsizei, POINTER(GLubyte), POINTER(GLfloat)], 'NV_fragment_program') + +# GL/glext.h:6222 +glGetProgramNamedParameterdvNV = _link_function('glGetProgramNamedParameterdvNV', None, [GLuint, GLsizei, POINTER(GLubyte), POINTER(GLdouble)], 'NV_fragment_program') + +PFNGLPROGRAMNAMEDPARAMETER4FNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLubyte), GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:6224 +PFNGLPROGRAMNAMEDPARAMETER4DNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLubyte), GLdouble, GLdouble, GLdouble, GLdouble) # GL/glext.h:6225 +PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLubyte), POINTER(GLfloat)) # GL/glext.h:6226 +PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLubyte), POINTER(GLdouble)) # GL/glext.h:6227 +PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLubyte), POINTER(GLfloat)) # GL/glext.h:6228 +PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLubyte), POINTER(GLdouble)) # GL/glext.h:6229 +# NV_half_float (GL/glext.h:6232) +GL_NV_half_float = 1 # GL/glext.h:6233 +# GL/glext.h:6235 +glVertex2hNV = _link_function('glVertex2hNV', None, [GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6236 +glVertex2hvNV = _link_function('glVertex2hvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6237 +glVertex3hNV = _link_function('glVertex3hNV', None, [GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6238 +glVertex3hvNV = _link_function('glVertex3hvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6239 +glVertex4hNV = _link_function('glVertex4hNV', None, [GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6240 +glVertex4hvNV = _link_function('glVertex4hvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6241 +glNormal3hNV = _link_function('glNormal3hNV', None, [GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6242 +glNormal3hvNV = _link_function('glNormal3hvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6243 +glColor3hNV = _link_function('glColor3hNV', None, [GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6244 +glColor3hvNV = _link_function('glColor3hvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6245 +glColor4hNV = _link_function('glColor4hNV', None, [GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6246 +glColor4hvNV = _link_function('glColor4hvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6247 +glTexCoord1hNV = _link_function('glTexCoord1hNV', None, [GLhalfNV], 'NV_half_float') + +# GL/glext.h:6248 +glTexCoord1hvNV = _link_function('glTexCoord1hvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6249 +glTexCoord2hNV = _link_function('glTexCoord2hNV', None, [GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6250 +glTexCoord2hvNV = _link_function('glTexCoord2hvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6251 +glTexCoord3hNV = _link_function('glTexCoord3hNV', None, [GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6252 +glTexCoord3hvNV = _link_function('glTexCoord3hvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6253 +glTexCoord4hNV = _link_function('glTexCoord4hNV', None, [GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6254 +glTexCoord4hvNV = _link_function('glTexCoord4hvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6255 +glMultiTexCoord1hNV = _link_function('glMultiTexCoord1hNV', None, [GLenum, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6256 +glMultiTexCoord1hvNV = _link_function('glMultiTexCoord1hvNV', None, [GLenum, POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6257 +glMultiTexCoord2hNV = _link_function('glMultiTexCoord2hNV', None, [GLenum, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6258 +glMultiTexCoord2hvNV = _link_function('glMultiTexCoord2hvNV', None, [GLenum, POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6259 +glMultiTexCoord3hNV = _link_function('glMultiTexCoord3hNV', None, [GLenum, GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6260 +glMultiTexCoord3hvNV = _link_function('glMultiTexCoord3hvNV', None, [GLenum, POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6261 +glMultiTexCoord4hNV = _link_function('glMultiTexCoord4hNV', None, [GLenum, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6262 +glMultiTexCoord4hvNV = _link_function('glMultiTexCoord4hvNV', None, [GLenum, POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6263 +glFogCoordhNV = _link_function('glFogCoordhNV', None, [GLhalfNV], 'NV_half_float') + +# GL/glext.h:6264 +glFogCoordhvNV = _link_function('glFogCoordhvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6265 +glSecondaryColor3hNV = _link_function('glSecondaryColor3hNV', None, [GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6266 +glSecondaryColor3hvNV = _link_function('glSecondaryColor3hvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6267 +glVertexWeighthNV = _link_function('glVertexWeighthNV', None, [GLhalfNV], 'NV_half_float') + +# GL/glext.h:6268 +glVertexWeighthvNV = _link_function('glVertexWeighthvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6269 +glVertexAttrib1hNV = _link_function('glVertexAttrib1hNV', None, [GLuint, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6270 +glVertexAttrib1hvNV = _link_function('glVertexAttrib1hvNV', None, [GLuint, POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6271 +glVertexAttrib2hNV = _link_function('glVertexAttrib2hNV', None, [GLuint, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6272 +glVertexAttrib2hvNV = _link_function('glVertexAttrib2hvNV', None, [GLuint, POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6273 +glVertexAttrib3hNV = _link_function('glVertexAttrib3hNV', None, [GLuint, GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6274 +glVertexAttrib3hvNV = _link_function('glVertexAttrib3hvNV', None, [GLuint, POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6275 +glVertexAttrib4hNV = _link_function('glVertexAttrib4hNV', None, [GLuint, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6276 +glVertexAttrib4hvNV = _link_function('glVertexAttrib4hvNV', None, [GLuint, POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6277 +glVertexAttribs1hvNV = _link_function('glVertexAttribs1hvNV', None, [GLuint, GLsizei, POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6278 +glVertexAttribs2hvNV = _link_function('glVertexAttribs2hvNV', None, [GLuint, GLsizei, POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6279 +glVertexAttribs3hvNV = _link_function('glVertexAttribs3hvNV', None, [GLuint, GLsizei, POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6280 +glVertexAttribs4hvNV = _link_function('glVertexAttribs4hvNV', None, [GLuint, GLsizei, POINTER(GLhalfNV)], 'NV_half_float') + +PFNGLVERTEX2HNVPROC = CFUNCTYPE(None, GLhalfNV, GLhalfNV) # GL/glext.h:6282 +PFNGLVERTEX2HVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6283 +PFNGLVERTEX3HNVPROC = CFUNCTYPE(None, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6284 +PFNGLVERTEX3HVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6285 +PFNGLVERTEX4HNVPROC = CFUNCTYPE(None, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6286 +PFNGLVERTEX4HVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6287 +PFNGLNORMAL3HNVPROC = CFUNCTYPE(None, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6288 +PFNGLNORMAL3HVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6289 +PFNGLCOLOR3HNVPROC = CFUNCTYPE(None, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6290 +PFNGLCOLOR3HVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6291 +PFNGLCOLOR4HNVPROC = CFUNCTYPE(None, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6292 +PFNGLCOLOR4HVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6293 +PFNGLTEXCOORD1HNVPROC = CFUNCTYPE(None, GLhalfNV) # GL/glext.h:6294 +PFNGLTEXCOORD1HVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6295 +PFNGLTEXCOORD2HNVPROC = CFUNCTYPE(None, GLhalfNV, GLhalfNV) # GL/glext.h:6296 +PFNGLTEXCOORD2HVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6297 +PFNGLTEXCOORD3HNVPROC = CFUNCTYPE(None, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6298 +PFNGLTEXCOORD3HVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6299 +PFNGLTEXCOORD4HNVPROC = CFUNCTYPE(None, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6300 +PFNGLTEXCOORD4HVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6301 +PFNGLMULTITEXCOORD1HNVPROC = CFUNCTYPE(None, GLenum, GLhalfNV) # GL/glext.h:6302 +PFNGLMULTITEXCOORD1HVNVPROC = CFUNCTYPE(None, GLenum, POINTER(GLhalfNV)) # GL/glext.h:6303 +PFNGLMULTITEXCOORD2HNVPROC = CFUNCTYPE(None, GLenum, GLhalfNV, GLhalfNV) # GL/glext.h:6304 +PFNGLMULTITEXCOORD2HVNVPROC = CFUNCTYPE(None, GLenum, POINTER(GLhalfNV)) # GL/glext.h:6305 +PFNGLMULTITEXCOORD3HNVPROC = CFUNCTYPE(None, GLenum, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6306 +PFNGLMULTITEXCOORD3HVNVPROC = CFUNCTYPE(None, GLenum, POINTER(GLhalfNV)) # GL/glext.h:6307 +PFNGLMULTITEXCOORD4HNVPROC = CFUNCTYPE(None, GLenum, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6308 +PFNGLMULTITEXCOORD4HVNVPROC = CFUNCTYPE(None, GLenum, POINTER(GLhalfNV)) # GL/glext.h:6309 +PFNGLFOGCOORDHNVPROC = CFUNCTYPE(None, GLhalfNV) # GL/glext.h:6310 +PFNGLFOGCOORDHVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6311 +PFNGLSECONDARYCOLOR3HNVPROC = CFUNCTYPE(None, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6312 +PFNGLSECONDARYCOLOR3HVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6313 +PFNGLVERTEXWEIGHTHNVPROC = CFUNCTYPE(None, GLhalfNV) # GL/glext.h:6314 +PFNGLVERTEXWEIGHTHVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6315 +PFNGLVERTEXATTRIB1HNVPROC = CFUNCTYPE(None, GLuint, GLhalfNV) # GL/glext.h:6316 +PFNGLVERTEXATTRIB1HVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLhalfNV)) # GL/glext.h:6317 +PFNGLVERTEXATTRIB2HNVPROC = CFUNCTYPE(None, GLuint, GLhalfNV, GLhalfNV) # GL/glext.h:6318 +PFNGLVERTEXATTRIB2HVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLhalfNV)) # GL/glext.h:6319 +PFNGLVERTEXATTRIB3HNVPROC = CFUNCTYPE(None, GLuint, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6320 +PFNGLVERTEXATTRIB3HVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLhalfNV)) # GL/glext.h:6321 +PFNGLVERTEXATTRIB4HNVPROC = CFUNCTYPE(None, GLuint, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6322 +PFNGLVERTEXATTRIB4HVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLhalfNV)) # GL/glext.h:6323 +PFNGLVERTEXATTRIBS1HVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLhalfNV)) # GL/glext.h:6324 +PFNGLVERTEXATTRIBS2HVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLhalfNV)) # GL/glext.h:6325 +PFNGLVERTEXATTRIBS3HVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLhalfNV)) # GL/glext.h:6326 +PFNGLVERTEXATTRIBS4HVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLhalfNV)) # GL/glext.h:6327 +# NV_pixel_data_range (GL/glext.h:6330) +GL_NV_pixel_data_range = 1 # GL/glext.h:6331 +# GL/glext.h:6333 +glPixelDataRangeNV = _link_function('glPixelDataRangeNV', None, [GLenum, GLsizei, POINTER(GLvoid)], 'NV_pixel_data_range') + +# GL/glext.h:6334 +glFlushPixelDataRangeNV = _link_function('glFlushPixelDataRangeNV', None, [GLenum], 'NV_pixel_data_range') + +PFNGLPIXELDATARANGENVPROC = CFUNCTYPE(None, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:6336 +PFNGLFLUSHPIXELDATARANGENVPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:6337 +# NV_primitive_restart (GL/glext.h:6340) +GL_NV_primitive_restart = 1 # GL/glext.h:6341 +# GL/glext.h:6343 +glPrimitiveRestartNV = _link_function('glPrimitiveRestartNV', None, [], 'NV_primitive_restart') + +# GL/glext.h:6344 +glPrimitiveRestartIndexNV = _link_function('glPrimitiveRestartIndexNV', None, [GLuint], 'NV_primitive_restart') + +PFNGLPRIMITIVERESTARTNVPROC = CFUNCTYPE(None) # GL/glext.h:6346 +PFNGLPRIMITIVERESTARTINDEXNVPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:6347 +# NV_texture_expand_normal (GL/glext.h:6350) +GL_NV_texture_expand_normal = 1 # GL/glext.h:6351 +# NV_vertex_program2 (GL/glext.h:6354) +GL_NV_vertex_program2 = 1 # GL/glext.h:6355 +# ATI_map_object_buffer (GL/glext.h:6358) +GL_ATI_map_object_buffer = 1 # GL/glext.h:6359 +# GL/glext.h:6361 +glMapObjectBufferATI = _link_function('glMapObjectBufferATI', POINTER(GLvoid), [GLuint], 'ATI_map_object_buffer') + +# GL/glext.h:6362 +glUnmapObjectBufferATI = _link_function('glUnmapObjectBufferATI', None, [GLuint], 'ATI_map_object_buffer') + +PFNGLMAPOBJECTBUFFERATIPROC = CFUNCTYPE(POINTER(GLvoid), GLuint) # GL/glext.h:6364 +PFNGLUNMAPOBJECTBUFFERATIPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:6365 +# ATI_separate_stencil (GL/glext.h:6368) +GL_ATI_separate_stencil = 1 # GL/glext.h:6369 +# GL/glext.h:6371 +glStencilOpSeparateATI = _link_function('glStencilOpSeparateATI', None, [GLenum, GLenum, GLenum, GLenum], 'ATI_separate_stencil') + +# GL/glext.h:6372 +glStencilFuncSeparateATI = _link_function('glStencilFuncSeparateATI', None, [GLenum, GLenum, GLint, GLuint], 'ATI_separate_stencil') + +PFNGLSTENCILOPSEPARATEATIPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLenum) # GL/glext.h:6374 +PFNGLSTENCILFUNCSEPARATEATIPROC = CFUNCTYPE(None, GLenum, GLenum, GLint, GLuint) # GL/glext.h:6375 +# ATI_vertex_attrib_array_object (GL/glext.h:6378) +GL_ATI_vertex_attrib_array_object = 1 # GL/glext.h:6379 +# GL/glext.h:6381 +glVertexAttribArrayObjectATI = _link_function('glVertexAttribArrayObjectATI', None, [GLuint, GLint, GLenum, GLboolean, GLsizei, GLuint, GLuint], 'ATI_vertex_attrib_array_object') + +# GL/glext.h:6382 +glGetVertexAttribArrayObjectfvATI = _link_function('glGetVertexAttribArrayObjectfvATI', None, [GLuint, GLenum, POINTER(GLfloat)], 'ATI_vertex_attrib_array_object') + +# GL/glext.h:6383 +glGetVertexAttribArrayObjectivATI = _link_function('glGetVertexAttribArrayObjectivATI', None, [GLuint, GLenum, POINTER(GLint)], 'ATI_vertex_attrib_array_object') + +PFNGLVERTEXATTRIBARRAYOBJECTATIPROC = CFUNCTYPE(None, GLuint, GLint, GLenum, GLboolean, GLsizei, GLuint, GLuint) # GL/glext.h:6385 +PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:6386 +PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:6387 +# OES_read_format (GL/glext.h:6390) +GL_OES_read_format = 1 # GL/glext.h:6391 +# EXT_depth_bounds_test (GL/glext.h:6394) +GL_EXT_depth_bounds_test = 1 # GL/glext.h:6395 +GLclampd = c_double # /usr/include/GL/gl.h:66 +# GL/glext.h:6397 +glDepthBoundsEXT = _link_function('glDepthBoundsEXT', None, [GLclampd, GLclampd], 'EXT_depth_bounds_test') + +PFNGLDEPTHBOUNDSEXTPROC = CFUNCTYPE(None, GLclampd, GLclampd) # GL/glext.h:6399 +# EXT_texture_mirror_clamp (GL/glext.h:6402) +GL_EXT_texture_mirror_clamp = 1 # GL/glext.h:6403 +# EXT_blend_equation_separate (GL/glext.h:6406) +GL_EXT_blend_equation_separate = 1 # GL/glext.h:6407 +# GL/glext.h:6409 +glBlendEquationSeparateEXT = _link_function('glBlendEquationSeparateEXT', None, [GLenum, GLenum], 'EXT_blend_equation_separate') + +PFNGLBLENDEQUATIONSEPARATEEXTPROC = CFUNCTYPE(None, GLenum, GLenum) # GL/glext.h:6411 +# MESA_pack_invert (GL/glext.h:6414) +GL_MESA_pack_invert = 1 # GL/glext.h:6415 +# MESA_ycbcr_texture (GL/glext.h:6418) +GL_MESA_ycbcr_texture = 1 # GL/glext.h:6419 +# EXT_pixel_buffer_object (GL/glext.h:6422) +GL_EXT_pixel_buffer_object = 1 # GL/glext.h:6423 +# NV_fragment_program_option (GL/glext.h:6426) +GL_NV_fragment_program_option = 1 # GL/glext.h:6427 +# NV_fragment_program2 (GL/glext.h:6430) +GL_NV_fragment_program2 = 1 # GL/glext.h:6431 +# NV_vertex_program2_option (GL/glext.h:6434) +GL_NV_vertex_program2_option = 1 # GL/glext.h:6435 +# NV_vertex_program3 (GL/glext.h:6438) +GL_NV_vertex_program3 = 1 # GL/glext.h:6439 +# EXT_framebuffer_object (GL/glext.h:6442) +GL_EXT_framebuffer_object = 1 # GL/glext.h:6443 +# GL/glext.h:6445 +glIsRenderbufferEXT = _link_function('glIsRenderbufferEXT', GLboolean, [GLuint], 'EXT_framebuffer_object') + +# GL/glext.h:6446 +glBindRenderbufferEXT = _link_function('glBindRenderbufferEXT', None, [GLenum, GLuint], 'EXT_framebuffer_object') + +# GL/glext.h:6447 +glDeleteRenderbuffersEXT = _link_function('glDeleteRenderbuffersEXT', None, [GLsizei, POINTER(GLuint)], 'EXT_framebuffer_object') + +# GL/glext.h:6448 +glGenRenderbuffersEXT = _link_function('glGenRenderbuffersEXT', None, [GLsizei, POINTER(GLuint)], 'EXT_framebuffer_object') + +# GL/glext.h:6449 +glRenderbufferStorageEXT = _link_function('glRenderbufferStorageEXT', None, [GLenum, GLenum, GLsizei, GLsizei], 'EXT_framebuffer_object') + +# GL/glext.h:6450 +glGetRenderbufferParameterivEXT = _link_function('glGetRenderbufferParameterivEXT', None, [GLenum, GLenum, POINTER(GLint)], 'EXT_framebuffer_object') + +# GL/glext.h:6451 +glIsFramebufferEXT = _link_function('glIsFramebufferEXT', GLboolean, [GLuint], 'EXT_framebuffer_object') + +# GL/glext.h:6452 +glBindFramebufferEXT = _link_function('glBindFramebufferEXT', None, [GLenum, GLuint], 'EXT_framebuffer_object') + +# GL/glext.h:6453 +glDeleteFramebuffersEXT = _link_function('glDeleteFramebuffersEXT', None, [GLsizei, POINTER(GLuint)], 'EXT_framebuffer_object') + +# GL/glext.h:6454 +glGenFramebuffersEXT = _link_function('glGenFramebuffersEXT', None, [GLsizei, POINTER(GLuint)], 'EXT_framebuffer_object') + +# GL/glext.h:6455 +glCheckFramebufferStatusEXT = _link_function('glCheckFramebufferStatusEXT', GLenum, [GLenum], 'EXT_framebuffer_object') + +# GL/glext.h:6456 +glFramebufferTexture1DEXT = _link_function('glFramebufferTexture1DEXT', None, [GLenum, GLenum, GLenum, GLuint, GLint], 'EXT_framebuffer_object') + +# GL/glext.h:6457 +glFramebufferTexture2DEXT = _link_function('glFramebufferTexture2DEXT', None, [GLenum, GLenum, GLenum, GLuint, GLint], 'EXT_framebuffer_object') + +# GL/glext.h:6458 +glFramebufferTexture3DEXT = _link_function('glFramebufferTexture3DEXT', None, [GLenum, GLenum, GLenum, GLuint, GLint, GLint], 'EXT_framebuffer_object') + +# GL/glext.h:6459 +glFramebufferRenderbufferEXT = _link_function('glFramebufferRenderbufferEXT', None, [GLenum, GLenum, GLenum, GLuint], 'EXT_framebuffer_object') + +# GL/glext.h:6460 +glGetFramebufferAttachmentParameterivEXT = _link_function('glGetFramebufferAttachmentParameterivEXT', None, [GLenum, GLenum, GLenum, POINTER(GLint)], 'EXT_framebuffer_object') + +# GL/glext.h:6461 +glGenerateMipmapEXT = _link_function('glGenerateMipmapEXT', None, [GLenum], 'EXT_framebuffer_object') + +PFNGLISRENDERBUFFEREXTPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:6463 +PFNGLBINDRENDERBUFFEREXTPROC = CFUNCTYPE(None, GLenum, GLuint) # GL/glext.h:6464 +PFNGLDELETERENDERBUFFERSEXTPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:6465 +PFNGLGENRENDERBUFFERSEXTPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:6466 +PFNGLRENDERBUFFERSTORAGEEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, GLsizei) # GL/glext.h:6467 +PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:6468 +PFNGLISFRAMEBUFFEREXTPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:6469 +PFNGLBINDFRAMEBUFFEREXTPROC = CFUNCTYPE(None, GLenum, GLuint) # GL/glext.h:6470 +PFNGLDELETEFRAMEBUFFERSEXTPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:6471 +PFNGLGENFRAMEBUFFERSEXTPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:6472 +PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC = CFUNCTYPE(GLenum, GLenum) # GL/glext.h:6473 +PFNGLFRAMEBUFFERTEXTURE1DEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLuint, GLint) # GL/glext.h:6474 +PFNGLFRAMEBUFFERTEXTURE2DEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLuint, GLint) # GL/glext.h:6475 +PFNGLFRAMEBUFFERTEXTURE3DEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLuint, GLint, GLint) # GL/glext.h:6476 +PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLuint) # GL/glext.h:6477 +PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:6478 +PFNGLGENERATEMIPMAPEXTPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:6479 +# GREMEDY_string_marker (GL/glext.h:6482) +GL_GREMEDY_string_marker = 1 # GL/glext.h:6483 +# GL/glext.h:6485 +glStringMarkerGREMEDY = _link_function('glStringMarkerGREMEDY', None, [GLsizei, POINTER(GLvoid)], 'GREMEDY_string_marker') + +PFNGLSTRINGMARKERGREMEDYPROC = CFUNCTYPE(None, GLsizei, POINTER(GLvoid)) # GL/glext.h:6487 +# GLEXT_LEGACY (/usr/include/GL/gl.h:1633) + +__all__ = ['GL_GLEXT_VERSION', 'GL_UNSIGNED_BYTE_3_3_2', +'GL_UNSIGNED_SHORT_4_4_4_4', 'GL_UNSIGNED_SHORT_5_5_5_1', +'GL_UNSIGNED_INT_8_8_8_8', 'GL_UNSIGNED_INT_10_10_10_2', 'GL_RESCALE_NORMAL', +'GL_TEXTURE_BINDING_3D', 'GL_PACK_SKIP_IMAGES', 'GL_PACK_IMAGE_HEIGHT', +'GL_UNPACK_SKIP_IMAGES', 'GL_UNPACK_IMAGE_HEIGHT', 'GL_TEXTURE_3D', +'GL_PROXY_TEXTURE_3D', 'GL_TEXTURE_DEPTH', 'GL_TEXTURE_WRAP_R', +'GL_MAX_3D_TEXTURE_SIZE', 'GL_UNSIGNED_BYTE_2_3_3_REV', +'GL_UNSIGNED_SHORT_5_6_5', 'GL_UNSIGNED_SHORT_5_6_5_REV', +'GL_UNSIGNED_SHORT_4_4_4_4_REV', 'GL_UNSIGNED_SHORT_1_5_5_5_REV', +'GL_UNSIGNED_INT_8_8_8_8_REV', 'GL_UNSIGNED_INT_2_10_10_10_REV', 'GL_BGR', +'GL_BGRA', 'GL_MAX_ELEMENTS_VERTICES', 'GL_MAX_ELEMENTS_INDICES', +'GL_CLAMP_TO_EDGE', 'GL_TEXTURE_MIN_LOD', 'GL_TEXTURE_MAX_LOD', +'GL_TEXTURE_BASE_LEVEL', 'GL_TEXTURE_MAX_LEVEL', +'GL_LIGHT_MODEL_COLOR_CONTROL', 'GL_SINGLE_COLOR', +'GL_SEPARATE_SPECULAR_COLOR', 'GL_SMOOTH_POINT_SIZE_RANGE', +'GL_SMOOTH_POINT_SIZE_GRANULARITY', 'GL_SMOOTH_LINE_WIDTH_RANGE', +'GL_SMOOTH_LINE_WIDTH_GRANULARITY', 'GL_ALIASED_POINT_SIZE_RANGE', +'GL_ALIASED_LINE_WIDTH_RANGE', 'GL_CONSTANT_COLOR', +'GL_ONE_MINUS_CONSTANT_COLOR', 'GL_CONSTANT_ALPHA', +'GL_ONE_MINUS_CONSTANT_ALPHA', 'GL_BLEND_COLOR', 'GL_FUNC_ADD', 'GL_MIN', +'GL_MAX', 'GL_BLEND_EQUATION', 'GL_FUNC_SUBTRACT', 'GL_FUNC_REVERSE_SUBTRACT', +'GL_CONVOLUTION_1D', 'GL_CONVOLUTION_2D', 'GL_SEPARABLE_2D', +'GL_CONVOLUTION_BORDER_MODE', 'GL_CONVOLUTION_FILTER_SCALE', +'GL_CONVOLUTION_FILTER_BIAS', 'GL_REDUCE', 'GL_CONVOLUTION_FORMAT', +'GL_CONVOLUTION_WIDTH', 'GL_CONVOLUTION_HEIGHT', 'GL_MAX_CONVOLUTION_WIDTH', +'GL_MAX_CONVOLUTION_HEIGHT', 'GL_POST_CONVOLUTION_RED_SCALE', +'GL_POST_CONVOLUTION_GREEN_SCALE', 'GL_POST_CONVOLUTION_BLUE_SCALE', +'GL_POST_CONVOLUTION_ALPHA_SCALE', 'GL_POST_CONVOLUTION_RED_BIAS', +'GL_POST_CONVOLUTION_GREEN_BIAS', 'GL_POST_CONVOLUTION_BLUE_BIAS', +'GL_POST_CONVOLUTION_ALPHA_BIAS', 'GL_HISTOGRAM', 'GL_PROXY_HISTOGRAM', +'GL_HISTOGRAM_WIDTH', 'GL_HISTOGRAM_FORMAT', 'GL_HISTOGRAM_RED_SIZE', +'GL_HISTOGRAM_GREEN_SIZE', 'GL_HISTOGRAM_BLUE_SIZE', +'GL_HISTOGRAM_ALPHA_SIZE', 'GL_HISTOGRAM_LUMINANCE_SIZE', 'GL_HISTOGRAM_SINK', +'GL_MINMAX', 'GL_MINMAX_FORMAT', 'GL_MINMAX_SINK', 'GL_TABLE_TOO_LARGE', +'GL_COLOR_MATRIX', 'GL_COLOR_MATRIX_STACK_DEPTH', +'GL_MAX_COLOR_MATRIX_STACK_DEPTH', 'GL_POST_COLOR_MATRIX_RED_SCALE', +'GL_POST_COLOR_MATRIX_GREEN_SCALE', 'GL_POST_COLOR_MATRIX_BLUE_SCALE', +'GL_POST_COLOR_MATRIX_ALPHA_SCALE', 'GL_POST_COLOR_MATRIX_RED_BIAS', +'GL_POST_COLOR_MATRIX_GREEN_BIAS', 'GL_POST_COLOR_MATRIX_BLUE_BIAS', +'GL_POST_COLOR_MATRIX_ALPHA_BIAS', 'GL_COLOR_TABLE', +'GL_POST_CONVOLUTION_COLOR_TABLE', 'GL_POST_COLOR_MATRIX_COLOR_TABLE', +'GL_PROXY_COLOR_TABLE', 'GL_PROXY_POST_CONVOLUTION_COLOR_TABLE', +'GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE', 'GL_COLOR_TABLE_SCALE', +'GL_COLOR_TABLE_BIAS', 'GL_COLOR_TABLE_FORMAT', 'GL_COLOR_TABLE_WIDTH', +'GL_COLOR_TABLE_RED_SIZE', 'GL_COLOR_TABLE_GREEN_SIZE', +'GL_COLOR_TABLE_BLUE_SIZE', 'GL_COLOR_TABLE_ALPHA_SIZE', +'GL_COLOR_TABLE_LUMINANCE_SIZE', 'GL_COLOR_TABLE_INTENSITY_SIZE', +'GL_CONSTANT_BORDER', 'GL_REPLICATE_BORDER', 'GL_CONVOLUTION_BORDER_COLOR', +'GL_TEXTURE0', 'GL_TEXTURE1', 'GL_TEXTURE2', 'GL_TEXTURE3', 'GL_TEXTURE4', +'GL_TEXTURE5', 'GL_TEXTURE6', 'GL_TEXTURE7', 'GL_TEXTURE8', 'GL_TEXTURE9', +'GL_TEXTURE10', 'GL_TEXTURE11', 'GL_TEXTURE12', 'GL_TEXTURE13', +'GL_TEXTURE14', 'GL_TEXTURE15', 'GL_TEXTURE16', 'GL_TEXTURE17', +'GL_TEXTURE18', 'GL_TEXTURE19', 'GL_TEXTURE20', 'GL_TEXTURE21', +'GL_TEXTURE22', 'GL_TEXTURE23', 'GL_TEXTURE24', 'GL_TEXTURE25', +'GL_TEXTURE26', 'GL_TEXTURE27', 'GL_TEXTURE28', 'GL_TEXTURE29', +'GL_TEXTURE30', 'GL_TEXTURE31', 'GL_ACTIVE_TEXTURE', +'GL_CLIENT_ACTIVE_TEXTURE', 'GL_MAX_TEXTURE_UNITS', +'GL_TRANSPOSE_MODELVIEW_MATRIX', 'GL_TRANSPOSE_PROJECTION_MATRIX', +'GL_TRANSPOSE_TEXTURE_MATRIX', 'GL_TRANSPOSE_COLOR_MATRIX', 'GL_MULTISAMPLE', +'GL_SAMPLE_ALPHA_TO_COVERAGE', 'GL_SAMPLE_ALPHA_TO_ONE', 'GL_SAMPLE_COVERAGE', +'GL_SAMPLE_BUFFERS', 'GL_SAMPLES', 'GL_SAMPLE_COVERAGE_VALUE', +'GL_SAMPLE_COVERAGE_INVERT', 'GL_MULTISAMPLE_BIT', 'GL_NORMAL_MAP', +'GL_REFLECTION_MAP', 'GL_TEXTURE_CUBE_MAP', 'GL_TEXTURE_BINDING_CUBE_MAP', +'GL_TEXTURE_CUBE_MAP_POSITIVE_X', 'GL_TEXTURE_CUBE_MAP_NEGATIVE_X', +'GL_TEXTURE_CUBE_MAP_POSITIVE_Y', 'GL_TEXTURE_CUBE_MAP_NEGATIVE_Y', +'GL_TEXTURE_CUBE_MAP_POSITIVE_Z', 'GL_TEXTURE_CUBE_MAP_NEGATIVE_Z', +'GL_PROXY_TEXTURE_CUBE_MAP', 'GL_MAX_CUBE_MAP_TEXTURE_SIZE', +'GL_COMPRESSED_ALPHA', 'GL_COMPRESSED_LUMINANCE', +'GL_COMPRESSED_LUMINANCE_ALPHA', 'GL_COMPRESSED_INTENSITY', +'GL_COMPRESSED_RGB', 'GL_COMPRESSED_RGBA', 'GL_TEXTURE_COMPRESSION_HINT', +'GL_TEXTURE_COMPRESSED_IMAGE_SIZE', 'GL_TEXTURE_COMPRESSED', +'GL_NUM_COMPRESSED_TEXTURE_FORMATS', 'GL_COMPRESSED_TEXTURE_FORMATS', +'GL_CLAMP_TO_BORDER', 'GL_COMBINE', 'GL_COMBINE_RGB', 'GL_COMBINE_ALPHA', +'GL_SOURCE0_RGB', 'GL_SOURCE1_RGB', 'GL_SOURCE2_RGB', 'GL_SOURCE0_ALPHA', +'GL_SOURCE1_ALPHA', 'GL_SOURCE2_ALPHA', 'GL_OPERAND0_RGB', 'GL_OPERAND1_RGB', +'GL_OPERAND2_RGB', 'GL_OPERAND0_ALPHA', 'GL_OPERAND1_ALPHA', +'GL_OPERAND2_ALPHA', 'GL_RGB_SCALE', 'GL_ADD_SIGNED', 'GL_INTERPOLATE', +'GL_SUBTRACT', 'GL_CONSTANT', 'GL_PRIMARY_COLOR', 'GL_PREVIOUS', +'GL_DOT3_RGB', 'GL_DOT3_RGBA', 'GL_BLEND_DST_RGB', 'GL_BLEND_SRC_RGB', +'GL_BLEND_DST_ALPHA', 'GL_BLEND_SRC_ALPHA', 'GL_POINT_SIZE_MIN', +'GL_POINT_SIZE_MAX', 'GL_POINT_FADE_THRESHOLD_SIZE', +'GL_POINT_DISTANCE_ATTENUATION', 'GL_GENERATE_MIPMAP', +'GL_GENERATE_MIPMAP_HINT', 'GL_DEPTH_COMPONENT16', 'GL_DEPTH_COMPONENT24', +'GL_DEPTH_COMPONENT32', 'GL_MIRRORED_REPEAT', 'GL_FOG_COORDINATE_SOURCE', +'GL_FOG_COORDINATE', 'GL_FRAGMENT_DEPTH', 'GL_CURRENT_FOG_COORDINATE', +'GL_FOG_COORDINATE_ARRAY_TYPE', 'GL_FOG_COORDINATE_ARRAY_STRIDE', +'GL_FOG_COORDINATE_ARRAY_POINTER', 'GL_FOG_COORDINATE_ARRAY', 'GL_COLOR_SUM', +'GL_CURRENT_SECONDARY_COLOR', 'GL_SECONDARY_COLOR_ARRAY_SIZE', +'GL_SECONDARY_COLOR_ARRAY_TYPE', 'GL_SECONDARY_COLOR_ARRAY_STRIDE', +'GL_SECONDARY_COLOR_ARRAY_POINTER', 'GL_SECONDARY_COLOR_ARRAY', +'GL_MAX_TEXTURE_LOD_BIAS', 'GL_TEXTURE_FILTER_CONTROL', 'GL_TEXTURE_LOD_BIAS', +'GL_INCR_WRAP', 'GL_DECR_WRAP', 'GL_TEXTURE_DEPTH_SIZE', +'GL_DEPTH_TEXTURE_MODE', 'GL_TEXTURE_COMPARE_MODE', 'GL_TEXTURE_COMPARE_FUNC', +'GL_COMPARE_R_TO_TEXTURE', 'GL_BUFFER_SIZE', 'GL_BUFFER_USAGE', +'GL_QUERY_COUNTER_BITS', 'GL_CURRENT_QUERY', 'GL_QUERY_RESULT', +'GL_QUERY_RESULT_AVAILABLE', 'GL_ARRAY_BUFFER', 'GL_ELEMENT_ARRAY_BUFFER', +'GL_ARRAY_BUFFER_BINDING', 'GL_ELEMENT_ARRAY_BUFFER_BINDING', +'GL_VERTEX_ARRAY_BUFFER_BINDING', 'GL_NORMAL_ARRAY_BUFFER_BINDING', +'GL_COLOR_ARRAY_BUFFER_BINDING', 'GL_INDEX_ARRAY_BUFFER_BINDING', +'GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING', 'GL_EDGE_FLAG_ARRAY_BUFFER_BINDING', +'GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING', +'GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING', 'GL_WEIGHT_ARRAY_BUFFER_BINDING', +'GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING', 'GL_READ_ONLY', 'GL_WRITE_ONLY', +'GL_READ_WRITE', 'GL_BUFFER_ACCESS', 'GL_BUFFER_MAPPED', +'GL_BUFFER_MAP_POINTER', 'GL_STREAM_DRAW', 'GL_STREAM_READ', 'GL_STREAM_COPY', +'GL_STATIC_DRAW', 'GL_STATIC_READ', 'GL_STATIC_COPY', 'GL_DYNAMIC_DRAW', +'GL_DYNAMIC_READ', 'GL_DYNAMIC_COPY', 'GL_SAMPLES_PASSED', 'GL_FOG_COORD_SRC', +'GL_FOG_COORD', 'GL_CURRENT_FOG_COORD', 'GL_FOG_COORD_ARRAY_TYPE', +'GL_FOG_COORD_ARRAY_STRIDE', 'GL_FOG_COORD_ARRAY_POINTER', +'GL_FOG_COORD_ARRAY', 'GL_FOG_COORD_ARRAY_BUFFER_BINDING', 'GL_SRC0_RGB', +'GL_SRC1_RGB', 'GL_SRC2_RGB', 'GL_SRC0_ALPHA', 'GL_SRC1_ALPHA', +'GL_SRC2_ALPHA', 'GL_BLEND_EQUATION_RGB', 'GL_VERTEX_ATTRIB_ARRAY_ENABLED', +'GL_VERTEX_ATTRIB_ARRAY_SIZE', 'GL_VERTEX_ATTRIB_ARRAY_STRIDE', +'GL_VERTEX_ATTRIB_ARRAY_TYPE', 'GL_CURRENT_VERTEX_ATTRIB', +'GL_VERTEX_PROGRAM_POINT_SIZE', 'GL_VERTEX_PROGRAM_TWO_SIDE', +'GL_VERTEX_ATTRIB_ARRAY_POINTER', 'GL_STENCIL_BACK_FUNC', +'GL_STENCIL_BACK_FAIL', 'GL_STENCIL_BACK_PASS_DEPTH_FAIL', +'GL_STENCIL_BACK_PASS_DEPTH_PASS', 'GL_MAX_DRAW_BUFFERS', 'GL_DRAW_BUFFER0', +'GL_DRAW_BUFFER1', 'GL_DRAW_BUFFER2', 'GL_DRAW_BUFFER3', 'GL_DRAW_BUFFER4', +'GL_DRAW_BUFFER5', 'GL_DRAW_BUFFER6', 'GL_DRAW_BUFFER7', 'GL_DRAW_BUFFER8', +'GL_DRAW_BUFFER9', 'GL_DRAW_BUFFER10', 'GL_DRAW_BUFFER11', 'GL_DRAW_BUFFER12', +'GL_DRAW_BUFFER13', 'GL_DRAW_BUFFER14', 'GL_DRAW_BUFFER15', +'GL_BLEND_EQUATION_ALPHA', 'GL_POINT_SPRITE', 'GL_COORD_REPLACE', +'GL_MAX_VERTEX_ATTRIBS', 'GL_VERTEX_ATTRIB_ARRAY_NORMALIZED', +'GL_MAX_TEXTURE_COORDS', 'GL_MAX_TEXTURE_IMAGE_UNITS', 'GL_FRAGMENT_SHADER', +'GL_VERTEX_SHADER', 'GL_MAX_FRAGMENT_UNIFORM_COMPONENTS', +'GL_MAX_VERTEX_UNIFORM_COMPONENTS', 'GL_MAX_VARYING_FLOATS', +'GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS', 'GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS', +'GL_SHADER_TYPE', 'GL_FLOAT_VEC2', 'GL_FLOAT_VEC3', 'GL_FLOAT_VEC4', +'GL_INT_VEC2', 'GL_INT_VEC3', 'GL_INT_VEC4', 'GL_BOOL', 'GL_BOOL_VEC2', +'GL_BOOL_VEC3', 'GL_BOOL_VEC4', 'GL_FLOAT_MAT2', 'GL_FLOAT_MAT3', +'GL_FLOAT_MAT4', 'GL_SAMPLER_1D', 'GL_SAMPLER_2D', 'GL_SAMPLER_3D', +'GL_SAMPLER_CUBE', 'GL_SAMPLER_1D_SHADOW', 'GL_SAMPLER_2D_SHADOW', +'GL_DELETE_STATUS', 'GL_COMPILE_STATUS', 'GL_LINK_STATUS', +'GL_VALIDATE_STATUS', 'GL_INFO_LOG_LENGTH', 'GL_ATTACHED_SHADERS', +'GL_ACTIVE_UNIFORMS', 'GL_ACTIVE_UNIFORM_MAX_LENGTH', +'GL_SHADER_SOURCE_LENGTH', 'GL_ACTIVE_ATTRIBUTES', +'GL_ACTIVE_ATTRIBUTE_MAX_LENGTH', 'GL_FRAGMENT_SHADER_DERIVATIVE_HINT', +'GL_SHADING_LANGUAGE_VERSION', 'GL_CURRENT_PROGRAM', +'GL_POINT_SPRITE_COORD_ORIGIN', 'GL_LOWER_LEFT', 'GL_UPPER_LEFT', +'GL_STENCIL_BACK_REF', 'GL_STENCIL_BACK_VALUE_MASK', +'GL_STENCIL_BACK_WRITEMASK', 'GL_TEXTURE0_ARB', 'GL_TEXTURE1_ARB', +'GL_TEXTURE2_ARB', 'GL_TEXTURE3_ARB', 'GL_TEXTURE4_ARB', 'GL_TEXTURE5_ARB', +'GL_TEXTURE6_ARB', 'GL_TEXTURE7_ARB', 'GL_TEXTURE8_ARB', 'GL_TEXTURE9_ARB', +'GL_TEXTURE10_ARB', 'GL_TEXTURE11_ARB', 'GL_TEXTURE12_ARB', +'GL_TEXTURE13_ARB', 'GL_TEXTURE14_ARB', 'GL_TEXTURE15_ARB', +'GL_TEXTURE16_ARB', 'GL_TEXTURE17_ARB', 'GL_TEXTURE18_ARB', +'GL_TEXTURE19_ARB', 'GL_TEXTURE20_ARB', 'GL_TEXTURE21_ARB', +'GL_TEXTURE22_ARB', 'GL_TEXTURE23_ARB', 'GL_TEXTURE24_ARB', +'GL_TEXTURE25_ARB', 'GL_TEXTURE26_ARB', 'GL_TEXTURE27_ARB', +'GL_TEXTURE28_ARB', 'GL_TEXTURE29_ARB', 'GL_TEXTURE30_ARB', +'GL_TEXTURE31_ARB', 'GL_ACTIVE_TEXTURE_ARB', 'GL_CLIENT_ACTIVE_TEXTURE_ARB', +'GL_MAX_TEXTURE_UNITS_ARB', 'GL_TRANSPOSE_MODELVIEW_MATRIX_ARB', +'GL_TRANSPOSE_PROJECTION_MATRIX_ARB', 'GL_TRANSPOSE_TEXTURE_MATRIX_ARB', +'GL_TRANSPOSE_COLOR_MATRIX_ARB', 'GL_MULTISAMPLE_ARB', +'GL_SAMPLE_ALPHA_TO_COVERAGE_ARB', 'GL_SAMPLE_ALPHA_TO_ONE_ARB', +'GL_SAMPLE_COVERAGE_ARB', 'GL_SAMPLE_BUFFERS_ARB', 'GL_SAMPLES_ARB', +'GL_SAMPLE_COVERAGE_VALUE_ARB', 'GL_SAMPLE_COVERAGE_INVERT_ARB', +'GL_MULTISAMPLE_BIT_ARB', 'GL_NORMAL_MAP_ARB', 'GL_REFLECTION_MAP_ARB', +'GL_TEXTURE_CUBE_MAP_ARB', 'GL_TEXTURE_BINDING_CUBE_MAP_ARB', +'GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB', 'GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB', +'GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB', 'GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB', +'GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB', 'GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB', +'GL_PROXY_TEXTURE_CUBE_MAP_ARB', 'GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB', +'GL_COMPRESSED_ALPHA_ARB', 'GL_COMPRESSED_LUMINANCE_ARB', +'GL_COMPRESSED_LUMINANCE_ALPHA_ARB', 'GL_COMPRESSED_INTENSITY_ARB', +'GL_COMPRESSED_RGB_ARB', 'GL_COMPRESSED_RGBA_ARB', +'GL_TEXTURE_COMPRESSION_HINT_ARB', 'GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB', +'GL_TEXTURE_COMPRESSED_ARB', 'GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB', +'GL_COMPRESSED_TEXTURE_FORMATS_ARB', 'GL_CLAMP_TO_BORDER_ARB', +'GL_POINT_SIZE_MIN_ARB', 'GL_POINT_SIZE_MAX_ARB', +'GL_POINT_FADE_THRESHOLD_SIZE_ARB', 'GL_POINT_DISTANCE_ATTENUATION_ARB', +'GL_MAX_VERTEX_UNITS_ARB', 'GL_ACTIVE_VERTEX_UNITS_ARB', +'GL_WEIGHT_SUM_UNITY_ARB', 'GL_VERTEX_BLEND_ARB', 'GL_CURRENT_WEIGHT_ARB', +'GL_WEIGHT_ARRAY_TYPE_ARB', 'GL_WEIGHT_ARRAY_STRIDE_ARB', +'GL_WEIGHT_ARRAY_SIZE_ARB', 'GL_WEIGHT_ARRAY_POINTER_ARB', +'GL_WEIGHT_ARRAY_ARB', 'GL_MODELVIEW0_ARB', 'GL_MODELVIEW1_ARB', +'GL_MODELVIEW2_ARB', 'GL_MODELVIEW3_ARB', 'GL_MODELVIEW4_ARB', +'GL_MODELVIEW5_ARB', 'GL_MODELVIEW6_ARB', 'GL_MODELVIEW7_ARB', +'GL_MODELVIEW8_ARB', 'GL_MODELVIEW9_ARB', 'GL_MODELVIEW10_ARB', +'GL_MODELVIEW11_ARB', 'GL_MODELVIEW12_ARB', 'GL_MODELVIEW13_ARB', +'GL_MODELVIEW14_ARB', 'GL_MODELVIEW15_ARB', 'GL_MODELVIEW16_ARB', +'GL_MODELVIEW17_ARB', 'GL_MODELVIEW18_ARB', 'GL_MODELVIEW19_ARB', +'GL_MODELVIEW20_ARB', 'GL_MODELVIEW21_ARB', 'GL_MODELVIEW22_ARB', +'GL_MODELVIEW23_ARB', 'GL_MODELVIEW24_ARB', 'GL_MODELVIEW25_ARB', +'GL_MODELVIEW26_ARB', 'GL_MODELVIEW27_ARB', 'GL_MODELVIEW28_ARB', +'GL_MODELVIEW29_ARB', 'GL_MODELVIEW30_ARB', 'GL_MODELVIEW31_ARB', +'GL_MATRIX_PALETTE_ARB', 'GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB', +'GL_MAX_PALETTE_MATRICES_ARB', 'GL_CURRENT_PALETTE_MATRIX_ARB', +'GL_MATRIX_INDEX_ARRAY_ARB', 'GL_CURRENT_MATRIX_INDEX_ARB', +'GL_MATRIX_INDEX_ARRAY_SIZE_ARB', 'GL_MATRIX_INDEX_ARRAY_TYPE_ARB', +'GL_MATRIX_INDEX_ARRAY_STRIDE_ARB', 'GL_MATRIX_INDEX_ARRAY_POINTER_ARB', +'GL_COMBINE_ARB', 'GL_COMBINE_RGB_ARB', 'GL_COMBINE_ALPHA_ARB', +'GL_SOURCE0_RGB_ARB', 'GL_SOURCE1_RGB_ARB', 'GL_SOURCE2_RGB_ARB', +'GL_SOURCE0_ALPHA_ARB', 'GL_SOURCE1_ALPHA_ARB', 'GL_SOURCE2_ALPHA_ARB', +'GL_OPERAND0_RGB_ARB', 'GL_OPERAND1_RGB_ARB', 'GL_OPERAND2_RGB_ARB', +'GL_OPERAND0_ALPHA_ARB', 'GL_OPERAND1_ALPHA_ARB', 'GL_OPERAND2_ALPHA_ARB', +'GL_RGB_SCALE_ARB', 'GL_ADD_SIGNED_ARB', 'GL_INTERPOLATE_ARB', +'GL_SUBTRACT_ARB', 'GL_CONSTANT_ARB', 'GL_PRIMARY_COLOR_ARB', +'GL_PREVIOUS_ARB', 'GL_DOT3_RGB_ARB', 'GL_DOT3_RGBA_ARB', +'GL_MIRRORED_REPEAT_ARB', 'GL_DEPTH_COMPONENT16_ARB', +'GL_DEPTH_COMPONENT24_ARB', 'GL_DEPTH_COMPONENT32_ARB', +'GL_TEXTURE_DEPTH_SIZE_ARB', 'GL_DEPTH_TEXTURE_MODE_ARB', +'GL_TEXTURE_COMPARE_MODE_ARB', 'GL_TEXTURE_COMPARE_FUNC_ARB', +'GL_COMPARE_R_TO_TEXTURE_ARB', 'GL_TEXTURE_COMPARE_FAIL_VALUE_ARB', +'GL_COLOR_SUM_ARB', 'GL_VERTEX_PROGRAM_ARB', +'GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB', 'GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB', +'GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB', 'GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB', +'GL_CURRENT_VERTEX_ATTRIB_ARB', 'GL_PROGRAM_LENGTH_ARB', +'GL_PROGRAM_STRING_ARB', 'GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB', +'GL_MAX_PROGRAM_MATRICES_ARB', 'GL_CURRENT_MATRIX_STACK_DEPTH_ARB', +'GL_CURRENT_MATRIX_ARB', 'GL_VERTEX_PROGRAM_POINT_SIZE_ARB', +'GL_VERTEX_PROGRAM_TWO_SIDE_ARB', 'GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB', +'GL_PROGRAM_ERROR_POSITION_ARB', 'GL_PROGRAM_BINDING_ARB', +'GL_MAX_VERTEX_ATTRIBS_ARB', 'GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB', +'GL_PROGRAM_ERROR_STRING_ARB', 'GL_PROGRAM_FORMAT_ASCII_ARB', +'GL_PROGRAM_FORMAT_ARB', 'GL_PROGRAM_INSTRUCTIONS_ARB', +'GL_MAX_PROGRAM_INSTRUCTIONS_ARB', 'GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB', +'GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB', 'GL_PROGRAM_TEMPORARIES_ARB', +'GL_MAX_PROGRAM_TEMPORARIES_ARB', 'GL_PROGRAM_NATIVE_TEMPORARIES_ARB', +'GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB', 'GL_PROGRAM_PARAMETERS_ARB', +'GL_MAX_PROGRAM_PARAMETERS_ARB', 'GL_PROGRAM_NATIVE_PARAMETERS_ARB', +'GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB', 'GL_PROGRAM_ATTRIBS_ARB', +'GL_MAX_PROGRAM_ATTRIBS_ARB', 'GL_PROGRAM_NATIVE_ATTRIBS_ARB', +'GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB', 'GL_PROGRAM_ADDRESS_REGISTERS_ARB', +'GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB', +'GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB', +'GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB', +'GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB', 'GL_MAX_PROGRAM_ENV_PARAMETERS_ARB', +'GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB', 'GL_TRANSPOSE_CURRENT_MATRIX_ARB', +'GL_MATRIX0_ARB', 'GL_MATRIX1_ARB', 'GL_MATRIX2_ARB', 'GL_MATRIX3_ARB', +'GL_MATRIX4_ARB', 'GL_MATRIX5_ARB', 'GL_MATRIX6_ARB', 'GL_MATRIX7_ARB', +'GL_MATRIX8_ARB', 'GL_MATRIX9_ARB', 'GL_MATRIX10_ARB', 'GL_MATRIX11_ARB', +'GL_MATRIX12_ARB', 'GL_MATRIX13_ARB', 'GL_MATRIX14_ARB', 'GL_MATRIX15_ARB', +'GL_MATRIX16_ARB', 'GL_MATRIX17_ARB', 'GL_MATRIX18_ARB', 'GL_MATRIX19_ARB', +'GL_MATRIX20_ARB', 'GL_MATRIX21_ARB', 'GL_MATRIX22_ARB', 'GL_MATRIX23_ARB', +'GL_MATRIX24_ARB', 'GL_MATRIX25_ARB', 'GL_MATRIX26_ARB', 'GL_MATRIX27_ARB', +'GL_MATRIX28_ARB', 'GL_MATRIX29_ARB', 'GL_MATRIX30_ARB', 'GL_MATRIX31_ARB', +'GL_FRAGMENT_PROGRAM_ARB', 'GL_PROGRAM_ALU_INSTRUCTIONS_ARB', +'GL_PROGRAM_TEX_INSTRUCTIONS_ARB', 'GL_PROGRAM_TEX_INDIRECTIONS_ARB', +'GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB', +'GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB', +'GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB', +'GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB', 'GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB', +'GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB', +'GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB', +'GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB', +'GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB', 'GL_MAX_TEXTURE_COORDS_ARB', +'GL_MAX_TEXTURE_IMAGE_UNITS_ARB', 'GL_BUFFER_SIZE_ARB', 'GL_BUFFER_USAGE_ARB', +'GL_ARRAY_BUFFER_ARB', 'GL_ELEMENT_ARRAY_BUFFER_ARB', +'GL_ARRAY_BUFFER_BINDING_ARB', 'GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB', +'GL_VERTEX_ARRAY_BUFFER_BINDING_ARB', 'GL_NORMAL_ARRAY_BUFFER_BINDING_ARB', +'GL_COLOR_ARRAY_BUFFER_BINDING_ARB', 'GL_INDEX_ARRAY_BUFFER_BINDING_ARB', +'GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB', +'GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB', +'GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB', +'GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB', +'GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB', +'GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB', 'GL_READ_ONLY_ARB', +'GL_WRITE_ONLY_ARB', 'GL_READ_WRITE_ARB', 'GL_BUFFER_ACCESS_ARB', +'GL_BUFFER_MAPPED_ARB', 'GL_BUFFER_MAP_POINTER_ARB', 'GL_STREAM_DRAW_ARB', +'GL_STREAM_READ_ARB', 'GL_STREAM_COPY_ARB', 'GL_STATIC_DRAW_ARB', +'GL_STATIC_READ_ARB', 'GL_STATIC_COPY_ARB', 'GL_DYNAMIC_DRAW_ARB', +'GL_DYNAMIC_READ_ARB', 'GL_DYNAMIC_COPY_ARB', 'GL_QUERY_COUNTER_BITS_ARB', +'GL_CURRENT_QUERY_ARB', 'GL_QUERY_RESULT_ARB', +'GL_QUERY_RESULT_AVAILABLE_ARB', 'GL_SAMPLES_PASSED_ARB', +'GL_PROGRAM_OBJECT_ARB', 'GL_SHADER_OBJECT_ARB', 'GL_OBJECT_TYPE_ARB', +'GL_OBJECT_SUBTYPE_ARB', 'GL_FLOAT_VEC2_ARB', 'GL_FLOAT_VEC3_ARB', +'GL_FLOAT_VEC4_ARB', 'GL_INT_VEC2_ARB', 'GL_INT_VEC3_ARB', 'GL_INT_VEC4_ARB', +'GL_BOOL_ARB', 'GL_BOOL_VEC2_ARB', 'GL_BOOL_VEC3_ARB', 'GL_BOOL_VEC4_ARB', +'GL_FLOAT_MAT2_ARB', 'GL_FLOAT_MAT3_ARB', 'GL_FLOAT_MAT4_ARB', +'GL_SAMPLER_1D_ARB', 'GL_SAMPLER_2D_ARB', 'GL_SAMPLER_3D_ARB', +'GL_SAMPLER_CUBE_ARB', 'GL_SAMPLER_1D_SHADOW_ARB', 'GL_SAMPLER_2D_SHADOW_ARB', +'GL_SAMPLER_2D_RECT_ARB', 'GL_SAMPLER_2D_RECT_SHADOW_ARB', +'GL_OBJECT_DELETE_STATUS_ARB', 'GL_OBJECT_COMPILE_STATUS_ARB', +'GL_OBJECT_LINK_STATUS_ARB', 'GL_OBJECT_VALIDATE_STATUS_ARB', +'GL_OBJECT_INFO_LOG_LENGTH_ARB', 'GL_OBJECT_ATTACHED_OBJECTS_ARB', +'GL_OBJECT_ACTIVE_UNIFORMS_ARB', 'GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB', +'GL_OBJECT_SHADER_SOURCE_LENGTH_ARB', 'GL_VERTEX_SHADER_ARB', +'GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB', 'GL_MAX_VARYING_FLOATS_ARB', +'GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB', +'GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB', 'GL_OBJECT_ACTIVE_ATTRIBUTES_ARB', +'GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB', 'GL_FRAGMENT_SHADER_ARB', +'GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB', +'GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB', 'GL_SHADING_LANGUAGE_VERSION_ARB', +'GL_POINT_SPRITE_ARB', 'GL_COORD_REPLACE_ARB', 'GL_MAX_DRAW_BUFFERS_ARB', +'GL_DRAW_BUFFER0_ARB', 'GL_DRAW_BUFFER1_ARB', 'GL_DRAW_BUFFER2_ARB', +'GL_DRAW_BUFFER3_ARB', 'GL_DRAW_BUFFER4_ARB', 'GL_DRAW_BUFFER5_ARB', +'GL_DRAW_BUFFER6_ARB', 'GL_DRAW_BUFFER7_ARB', 'GL_DRAW_BUFFER8_ARB', +'GL_DRAW_BUFFER9_ARB', 'GL_DRAW_BUFFER10_ARB', 'GL_DRAW_BUFFER11_ARB', +'GL_DRAW_BUFFER12_ARB', 'GL_DRAW_BUFFER13_ARB', 'GL_DRAW_BUFFER14_ARB', +'GL_DRAW_BUFFER15_ARB', 'GL_TEXTURE_RECTANGLE_ARB', +'GL_TEXTURE_BINDING_RECTANGLE_ARB', 'GL_PROXY_TEXTURE_RECTANGLE_ARB', +'GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB', 'GL_RGBA_FLOAT_MODE_ARB', +'GL_CLAMP_VERTEX_COLOR_ARB', 'GL_CLAMP_FRAGMENT_COLOR_ARB', +'GL_CLAMP_READ_COLOR_ARB', 'GL_FIXED_ONLY_ARB', 'GL_HALF_FLOAT_ARB', +'GL_TEXTURE_RED_TYPE_ARB', 'GL_TEXTURE_GREEN_TYPE_ARB', +'GL_TEXTURE_BLUE_TYPE_ARB', 'GL_TEXTURE_ALPHA_TYPE_ARB', +'GL_TEXTURE_LUMINANCE_TYPE_ARB', 'GL_TEXTURE_INTENSITY_TYPE_ARB', +'GL_TEXTURE_DEPTH_TYPE_ARB', 'GL_UNSIGNED_NORMALIZED_ARB', 'GL_RGBA32F_ARB', +'GL_RGB32F_ARB', 'GL_ALPHA32F_ARB', 'GL_INTENSITY32F_ARB', +'GL_LUMINANCE32F_ARB', 'GL_LUMINANCE_ALPHA32F_ARB', 'GL_RGBA16F_ARB', +'GL_RGB16F_ARB', 'GL_ALPHA16F_ARB', 'GL_INTENSITY16F_ARB', +'GL_LUMINANCE16F_ARB', 'GL_LUMINANCE_ALPHA16F_ARB', +'GL_PIXEL_PACK_BUFFER_ARB', 'GL_PIXEL_UNPACK_BUFFER_ARB', +'GL_PIXEL_PACK_BUFFER_BINDING_ARB', 'GL_PIXEL_UNPACK_BUFFER_BINDING_ARB', +'GL_ABGR_EXT', 'GL_CONSTANT_COLOR_EXT', 'GL_ONE_MINUS_CONSTANT_COLOR_EXT', +'GL_CONSTANT_ALPHA_EXT', 'GL_ONE_MINUS_CONSTANT_ALPHA_EXT', +'GL_BLEND_COLOR_EXT', 'GL_POLYGON_OFFSET_EXT', 'GL_POLYGON_OFFSET_FACTOR_EXT', +'GL_POLYGON_OFFSET_BIAS_EXT', 'GL_ALPHA4_EXT', 'GL_ALPHA8_EXT', +'GL_ALPHA12_EXT', 'GL_ALPHA16_EXT', 'GL_LUMINANCE4_EXT', 'GL_LUMINANCE8_EXT', +'GL_LUMINANCE12_EXT', 'GL_LUMINANCE16_EXT', 'GL_LUMINANCE4_ALPHA4_EXT', +'GL_LUMINANCE6_ALPHA2_EXT', 'GL_LUMINANCE8_ALPHA8_EXT', +'GL_LUMINANCE12_ALPHA4_EXT', 'GL_LUMINANCE12_ALPHA12_EXT', +'GL_LUMINANCE16_ALPHA16_EXT', 'GL_INTENSITY_EXT', 'GL_INTENSITY4_EXT', +'GL_INTENSITY8_EXT', 'GL_INTENSITY12_EXT', 'GL_INTENSITY16_EXT', +'GL_RGB2_EXT', 'GL_RGB4_EXT', 'GL_RGB5_EXT', 'GL_RGB8_EXT', 'GL_RGB10_EXT', +'GL_RGB12_EXT', 'GL_RGB16_EXT', 'GL_RGBA2_EXT', 'GL_RGBA4_EXT', +'GL_RGB5_A1_EXT', 'GL_RGBA8_EXT', 'GL_RGB10_A2_EXT', 'GL_RGBA12_EXT', +'GL_RGBA16_EXT', 'GL_TEXTURE_RED_SIZE_EXT', 'GL_TEXTURE_GREEN_SIZE_EXT', +'GL_TEXTURE_BLUE_SIZE_EXT', 'GL_TEXTURE_ALPHA_SIZE_EXT', +'GL_TEXTURE_LUMINANCE_SIZE_EXT', 'GL_TEXTURE_INTENSITY_SIZE_EXT', +'GL_REPLACE_EXT', 'GL_PROXY_TEXTURE_1D_EXT', 'GL_PROXY_TEXTURE_2D_EXT', +'GL_TEXTURE_TOO_LARGE_EXT', 'GL_PACK_SKIP_IMAGES_EXT', +'GL_PACK_IMAGE_HEIGHT_EXT', 'GL_UNPACK_SKIP_IMAGES_EXT', +'GL_UNPACK_IMAGE_HEIGHT_EXT', 'GL_TEXTURE_3D_EXT', 'GL_PROXY_TEXTURE_3D_EXT', +'GL_TEXTURE_DEPTH_EXT', 'GL_TEXTURE_WRAP_R_EXT', 'GL_MAX_3D_TEXTURE_SIZE_EXT', +'GL_FILTER4_SGIS', 'GL_TEXTURE_FILTER4_SIZE_SGIS', 'GL_HISTOGRAM_EXT', +'GL_PROXY_HISTOGRAM_EXT', 'GL_HISTOGRAM_WIDTH_EXT', 'GL_HISTOGRAM_FORMAT_EXT', +'GL_HISTOGRAM_RED_SIZE_EXT', 'GL_HISTOGRAM_GREEN_SIZE_EXT', +'GL_HISTOGRAM_BLUE_SIZE_EXT', 'GL_HISTOGRAM_ALPHA_SIZE_EXT', +'GL_HISTOGRAM_LUMINANCE_SIZE_EXT', 'GL_HISTOGRAM_SINK_EXT', 'GL_MINMAX_EXT', +'GL_MINMAX_FORMAT_EXT', 'GL_MINMAX_SINK_EXT', 'GL_TABLE_TOO_LARGE_EXT', +'GL_CONVOLUTION_1D_EXT', 'GL_CONVOLUTION_2D_EXT', 'GL_SEPARABLE_2D_EXT', +'GL_CONVOLUTION_BORDER_MODE_EXT', 'GL_CONVOLUTION_FILTER_SCALE_EXT', +'GL_CONVOLUTION_FILTER_BIAS_EXT', 'GL_REDUCE_EXT', +'GL_CONVOLUTION_FORMAT_EXT', 'GL_CONVOLUTION_WIDTH_EXT', +'GL_CONVOLUTION_HEIGHT_EXT', 'GL_MAX_CONVOLUTION_WIDTH_EXT', +'GL_MAX_CONVOLUTION_HEIGHT_EXT', 'GL_POST_CONVOLUTION_RED_SCALE_EXT', +'GL_POST_CONVOLUTION_GREEN_SCALE_EXT', 'GL_POST_CONVOLUTION_BLUE_SCALE_EXT', +'GL_POST_CONVOLUTION_ALPHA_SCALE_EXT', 'GL_POST_CONVOLUTION_RED_BIAS_EXT', +'GL_POST_CONVOLUTION_GREEN_BIAS_EXT', 'GL_POST_CONVOLUTION_BLUE_BIAS_EXT', +'GL_POST_CONVOLUTION_ALPHA_BIAS_EXT', 'GL_COLOR_MATRIX_SGI', +'GL_COLOR_MATRIX_STACK_DEPTH_SGI', 'GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI', +'GL_POST_COLOR_MATRIX_RED_SCALE_SGI', 'GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI', +'GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI', 'GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI', +'GL_POST_COLOR_MATRIX_RED_BIAS_SGI', 'GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI', +'GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI', 'GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI', +'GL_COLOR_TABLE_SGI', 'GL_POST_CONVOLUTION_COLOR_TABLE_SGI', +'GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI', 'GL_PROXY_COLOR_TABLE_SGI', +'GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI', +'GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI', 'GL_COLOR_TABLE_SCALE_SGI', +'GL_COLOR_TABLE_BIAS_SGI', 'GL_COLOR_TABLE_FORMAT_SGI', +'GL_COLOR_TABLE_WIDTH_SGI', 'GL_COLOR_TABLE_RED_SIZE_SGI', +'GL_COLOR_TABLE_GREEN_SIZE_SGI', 'GL_COLOR_TABLE_BLUE_SIZE_SGI', +'GL_COLOR_TABLE_ALPHA_SIZE_SGI', 'GL_COLOR_TABLE_LUMINANCE_SIZE_SGI', +'GL_COLOR_TABLE_INTENSITY_SIZE_SGI', 'GL_PIXEL_TEXTURE_SGIS', +'GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS', 'GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS', +'GL_PIXEL_GROUP_COLOR_SGIS', 'GL_PIXEL_TEX_GEN_SGIX', +'GL_PIXEL_TEX_GEN_MODE_SGIX', 'GL_PACK_SKIP_VOLUMES_SGIS', +'GL_PACK_IMAGE_DEPTH_SGIS', 'GL_UNPACK_SKIP_VOLUMES_SGIS', +'GL_UNPACK_IMAGE_DEPTH_SGIS', 'GL_TEXTURE_4D_SGIS', +'GL_PROXY_TEXTURE_4D_SGIS', 'GL_TEXTURE_4DSIZE_SGIS', +'GL_TEXTURE_WRAP_Q_SGIS', 'GL_MAX_4D_TEXTURE_SIZE_SGIS', +'GL_TEXTURE_4D_BINDING_SGIS', 'GL_TEXTURE_COLOR_TABLE_SGI', +'GL_PROXY_TEXTURE_COLOR_TABLE_SGI', 'GL_CMYK_EXT', 'GL_CMYKA_EXT', +'GL_PACK_CMYK_HINT_EXT', 'GL_UNPACK_CMYK_HINT_EXT', 'GL_TEXTURE_PRIORITY_EXT', +'GL_TEXTURE_RESIDENT_EXT', 'GL_TEXTURE_1D_BINDING_EXT', +'GL_TEXTURE_2D_BINDING_EXT', 'GL_TEXTURE_3D_BINDING_EXT', +'GL_DETAIL_TEXTURE_2D_SGIS', 'GL_DETAIL_TEXTURE_2D_BINDING_SGIS', +'GL_LINEAR_DETAIL_SGIS', 'GL_LINEAR_DETAIL_ALPHA_SGIS', +'GL_LINEAR_DETAIL_COLOR_SGIS', 'GL_DETAIL_TEXTURE_LEVEL_SGIS', +'GL_DETAIL_TEXTURE_MODE_SGIS', 'GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS', +'GL_LINEAR_SHARPEN_SGIS', 'GL_LINEAR_SHARPEN_ALPHA_SGIS', +'GL_LINEAR_SHARPEN_COLOR_SGIS', 'GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS', +'GL_UNSIGNED_BYTE_3_3_2_EXT', 'GL_UNSIGNED_SHORT_4_4_4_4_EXT', +'GL_UNSIGNED_SHORT_5_5_5_1_EXT', 'GL_UNSIGNED_INT_8_8_8_8_EXT', +'GL_UNSIGNED_INT_10_10_10_2_EXT', 'GL_TEXTURE_MIN_LOD_SGIS', +'GL_TEXTURE_MAX_LOD_SGIS', 'GL_TEXTURE_BASE_LEVEL_SGIS', +'GL_TEXTURE_MAX_LEVEL_SGIS', 'GL_MULTISAMPLE_SGIS', +'GL_SAMPLE_ALPHA_TO_MASK_SGIS', 'GL_SAMPLE_ALPHA_TO_ONE_SGIS', +'GL_SAMPLE_MASK_SGIS', 'GL_1PASS_SGIS', 'GL_2PASS_0_SGIS', 'GL_2PASS_1_SGIS', +'GL_4PASS_0_SGIS', 'GL_4PASS_1_SGIS', 'GL_4PASS_2_SGIS', 'GL_4PASS_3_SGIS', +'GL_SAMPLE_BUFFERS_SGIS', 'GL_SAMPLES_SGIS', 'GL_SAMPLE_MASK_VALUE_SGIS', +'GL_SAMPLE_MASK_INVERT_SGIS', 'GL_SAMPLE_PATTERN_SGIS', +'GL_RESCALE_NORMAL_EXT', 'GL_VERTEX_ARRAY_EXT', 'GL_NORMAL_ARRAY_EXT', +'GL_COLOR_ARRAY_EXT', 'GL_INDEX_ARRAY_EXT', 'GL_TEXTURE_COORD_ARRAY_EXT', +'GL_EDGE_FLAG_ARRAY_EXT', 'GL_VERTEX_ARRAY_SIZE_EXT', +'GL_VERTEX_ARRAY_TYPE_EXT', 'GL_VERTEX_ARRAY_STRIDE_EXT', +'GL_VERTEX_ARRAY_COUNT_EXT', 'GL_NORMAL_ARRAY_TYPE_EXT', +'GL_NORMAL_ARRAY_STRIDE_EXT', 'GL_NORMAL_ARRAY_COUNT_EXT', +'GL_COLOR_ARRAY_SIZE_EXT', 'GL_COLOR_ARRAY_TYPE_EXT', +'GL_COLOR_ARRAY_STRIDE_EXT', 'GL_COLOR_ARRAY_COUNT_EXT', +'GL_INDEX_ARRAY_TYPE_EXT', 'GL_INDEX_ARRAY_STRIDE_EXT', +'GL_INDEX_ARRAY_COUNT_EXT', 'GL_TEXTURE_COORD_ARRAY_SIZE_EXT', +'GL_TEXTURE_COORD_ARRAY_TYPE_EXT', 'GL_TEXTURE_COORD_ARRAY_STRIDE_EXT', +'GL_TEXTURE_COORD_ARRAY_COUNT_EXT', 'GL_EDGE_FLAG_ARRAY_STRIDE_EXT', +'GL_EDGE_FLAG_ARRAY_COUNT_EXT', 'GL_VERTEX_ARRAY_POINTER_EXT', +'GL_NORMAL_ARRAY_POINTER_EXT', 'GL_COLOR_ARRAY_POINTER_EXT', +'GL_INDEX_ARRAY_POINTER_EXT', 'GL_TEXTURE_COORD_ARRAY_POINTER_EXT', +'GL_EDGE_FLAG_ARRAY_POINTER_EXT', 'GL_GENERATE_MIPMAP_SGIS', +'GL_GENERATE_MIPMAP_HINT_SGIS', 'GL_LINEAR_CLIPMAP_LINEAR_SGIX', +'GL_TEXTURE_CLIPMAP_CENTER_SGIX', 'GL_TEXTURE_CLIPMAP_FRAME_SGIX', +'GL_TEXTURE_CLIPMAP_OFFSET_SGIX', 'GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX', +'GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX', 'GL_TEXTURE_CLIPMAP_DEPTH_SGIX', +'GL_MAX_CLIPMAP_DEPTH_SGIX', 'GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX', +'GL_NEAREST_CLIPMAP_NEAREST_SGIX', 'GL_NEAREST_CLIPMAP_LINEAR_SGIX', +'GL_LINEAR_CLIPMAP_NEAREST_SGIX', 'GL_TEXTURE_COMPARE_SGIX', +'GL_TEXTURE_COMPARE_OPERATOR_SGIX', 'GL_TEXTURE_LEQUAL_R_SGIX', +'GL_TEXTURE_GEQUAL_R_SGIX', 'GL_CLAMP_TO_EDGE_SGIS', +'GL_CLAMP_TO_BORDER_SGIS', 'GL_FUNC_ADD_EXT', 'GL_MIN_EXT', 'GL_MAX_EXT', +'GL_BLEND_EQUATION_EXT', 'GL_FUNC_SUBTRACT_EXT', +'GL_FUNC_REVERSE_SUBTRACT_EXT', 'GL_INTERLACE_SGIX', +'GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX', 'GL_PIXEL_TILE_CACHE_INCREMENT_SGIX', +'GL_PIXEL_TILE_WIDTH_SGIX', 'GL_PIXEL_TILE_HEIGHT_SGIX', +'GL_PIXEL_TILE_GRID_WIDTH_SGIX', 'GL_PIXEL_TILE_GRID_HEIGHT_SGIX', +'GL_PIXEL_TILE_GRID_DEPTH_SGIX', 'GL_PIXEL_TILE_CACHE_SIZE_SGIX', +'GL_DUAL_ALPHA4_SGIS', 'GL_DUAL_ALPHA8_SGIS', 'GL_DUAL_ALPHA12_SGIS', +'GL_DUAL_ALPHA16_SGIS', 'GL_DUAL_LUMINANCE4_SGIS', 'GL_DUAL_LUMINANCE8_SGIS', +'GL_DUAL_LUMINANCE12_SGIS', 'GL_DUAL_LUMINANCE16_SGIS', +'GL_DUAL_INTENSITY4_SGIS', 'GL_DUAL_INTENSITY8_SGIS', +'GL_DUAL_INTENSITY12_SGIS', 'GL_DUAL_INTENSITY16_SGIS', +'GL_DUAL_LUMINANCE_ALPHA4_SGIS', 'GL_DUAL_LUMINANCE_ALPHA8_SGIS', +'GL_QUAD_ALPHA4_SGIS', 'GL_QUAD_ALPHA8_SGIS', 'GL_QUAD_LUMINANCE4_SGIS', +'GL_QUAD_LUMINANCE8_SGIS', 'GL_QUAD_INTENSITY4_SGIS', +'GL_QUAD_INTENSITY8_SGIS', 'GL_DUAL_TEXTURE_SELECT_SGIS', +'GL_QUAD_TEXTURE_SELECT_SGIS', 'GL_SPRITE_SGIX', 'GL_SPRITE_MODE_SGIX', +'GL_SPRITE_AXIS_SGIX', 'GL_SPRITE_TRANSLATION_SGIX', 'GL_SPRITE_AXIAL_SGIX', +'GL_SPRITE_OBJECT_ALIGNED_SGIX', 'GL_SPRITE_EYE_ALIGNED_SGIX', +'GL_TEXTURE_MULTI_BUFFER_HINT_SGIX', 'GL_POINT_SIZE_MIN_EXT', +'GL_POINT_SIZE_MAX_EXT', 'GL_POINT_FADE_THRESHOLD_SIZE_EXT', +'GL_DISTANCE_ATTENUATION_EXT', 'GL_POINT_SIZE_MIN_SGIS', +'GL_POINT_SIZE_MAX_SGIS', 'GL_POINT_FADE_THRESHOLD_SIZE_SGIS', +'GL_DISTANCE_ATTENUATION_SGIS', 'GL_INSTRUMENT_BUFFER_POINTER_SGIX', +'GL_INSTRUMENT_MEASUREMENTS_SGIX', 'GL_POST_TEXTURE_FILTER_BIAS_SGIX', +'GL_POST_TEXTURE_FILTER_SCALE_SGIX', 'GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX', +'GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX', 'GL_FRAMEZOOM_SGIX', +'GL_FRAMEZOOM_FACTOR_SGIX', 'GL_MAX_FRAMEZOOM_FACTOR_SGIX', +'GL_TEXTURE_DEFORMATION_BIT_SGIX', 'GL_GEOMETRY_DEFORMATION_BIT_SGIX', +'GL_GEOMETRY_DEFORMATION_SGIX', 'GL_TEXTURE_DEFORMATION_SGIX', +'GL_DEFORMATIONS_MASK_SGIX', 'GL_MAX_DEFORMATION_ORDER_SGIX', +'GL_REFERENCE_PLANE_SGIX', 'GL_REFERENCE_PLANE_EQUATION_SGIX', +'GL_DEPTH_COMPONENT16_SGIX', 'GL_DEPTH_COMPONENT24_SGIX', +'GL_DEPTH_COMPONENT32_SGIX', 'GL_FOG_FUNC_SGIS', 'GL_FOG_FUNC_POINTS_SGIS', +'GL_MAX_FOG_FUNC_POINTS_SGIS', 'GL_FOG_OFFSET_SGIX', +'GL_FOG_OFFSET_VALUE_SGIX', 'GL_IMAGE_SCALE_X_HP', 'GL_IMAGE_SCALE_Y_HP', +'GL_IMAGE_TRANSLATE_X_HP', 'GL_IMAGE_TRANSLATE_Y_HP', +'GL_IMAGE_ROTATE_ANGLE_HP', 'GL_IMAGE_ROTATE_ORIGIN_X_HP', +'GL_IMAGE_ROTATE_ORIGIN_Y_HP', 'GL_IMAGE_MAG_FILTER_HP', +'GL_IMAGE_MIN_FILTER_HP', 'GL_IMAGE_CUBIC_WEIGHT_HP', 'GL_CUBIC_HP', +'GL_AVERAGE_HP', 'GL_IMAGE_TRANSFORM_2D_HP', +'GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP', +'GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP', 'GL_IGNORE_BORDER_HP', +'GL_CONSTANT_BORDER_HP', 'GL_REPLICATE_BORDER_HP', +'GL_CONVOLUTION_BORDER_COLOR_HP', 'GL_TEXTURE_ENV_BIAS_SGIX', +'GL_VERTEX_DATA_HINT_PGI', 'GL_VERTEX_CONSISTENT_HINT_PGI', +'GL_MATERIAL_SIDE_HINT_PGI', 'GL_MAX_VERTEX_HINT_PGI', 'GL_COLOR3_BIT_PGI', +'GL_COLOR4_BIT_PGI', 'GL_EDGEFLAG_BIT_PGI', 'GL_INDEX_BIT_PGI', +'GL_MAT_AMBIENT_BIT_PGI', 'GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI', +'GL_MAT_DIFFUSE_BIT_PGI', 'GL_MAT_EMISSION_BIT_PGI', +'GL_MAT_COLOR_INDEXES_BIT_PGI', 'GL_MAT_SHININESS_BIT_PGI', +'GL_MAT_SPECULAR_BIT_PGI', 'GL_NORMAL_BIT_PGI', 'GL_TEXCOORD1_BIT_PGI', +'GL_TEXCOORD2_BIT_PGI', 'GL_TEXCOORD3_BIT_PGI', 'GL_TEXCOORD4_BIT_PGI', +'GL_VERTEX23_BIT_PGI', 'GL_VERTEX4_BIT_PGI', +'GL_PREFER_DOUBLEBUFFER_HINT_PGI', 'GL_CONSERVE_MEMORY_HINT_PGI', +'GL_RECLAIM_MEMORY_HINT_PGI', 'GL_NATIVE_GRAPHICS_HANDLE_PGI', +'GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI', 'GL_NATIVE_GRAPHICS_END_HINT_PGI', +'GL_ALWAYS_FAST_HINT_PGI', 'GL_ALWAYS_SOFT_HINT_PGI', +'GL_ALLOW_DRAW_OBJ_HINT_PGI', 'GL_ALLOW_DRAW_WIN_HINT_PGI', +'GL_ALLOW_DRAW_FRG_HINT_PGI', 'GL_ALLOW_DRAW_MEM_HINT_PGI', +'GL_STRICT_DEPTHFUNC_HINT_PGI', 'GL_STRICT_LIGHTING_HINT_PGI', +'GL_STRICT_SCISSOR_HINT_PGI', 'GL_FULL_STIPPLE_HINT_PGI', +'GL_CLIP_NEAR_HINT_PGI', 'GL_CLIP_FAR_HINT_PGI', 'GL_WIDE_LINE_HINT_PGI', +'GL_BACK_NORMALS_HINT_PGI', 'GL_COLOR_INDEX1_EXT', 'GL_COLOR_INDEX2_EXT', +'GL_COLOR_INDEX4_EXT', 'GL_COLOR_INDEX8_EXT', 'GL_COLOR_INDEX12_EXT', +'GL_COLOR_INDEX16_EXT', 'GL_TEXTURE_INDEX_SIZE_EXT', +'GL_CLIP_VOLUME_CLIPPING_HINT_EXT', 'GL_LIST_PRIORITY_SGIX', +'GL_IR_INSTRUMENT1_SGIX', 'GL_CALLIGRAPHIC_FRAGMENT_SGIX', +'GL_TEXTURE_LOD_BIAS_S_SGIX', 'GL_TEXTURE_LOD_BIAS_T_SGIX', +'GL_TEXTURE_LOD_BIAS_R_SGIX', 'GL_SHADOW_AMBIENT_SGIX', +'GL_INDEX_MATERIAL_EXT', 'GL_INDEX_MATERIAL_PARAMETER_EXT', +'GL_INDEX_MATERIAL_FACE_EXT', 'GL_INDEX_TEST_EXT', 'GL_INDEX_TEST_FUNC_EXT', +'GL_INDEX_TEST_REF_EXT', 'GL_IUI_V2F_EXT', 'GL_IUI_V3F_EXT', +'GL_IUI_N3F_V2F_EXT', 'GL_IUI_N3F_V3F_EXT', 'GL_T2F_IUI_V2F_EXT', +'GL_T2F_IUI_V3F_EXT', 'GL_T2F_IUI_N3F_V2F_EXT', 'GL_T2F_IUI_N3F_V3F_EXT', +'GL_ARRAY_ELEMENT_LOCK_FIRST_EXT', 'GL_ARRAY_ELEMENT_LOCK_COUNT_EXT', +'GL_CULL_VERTEX_EXT', 'GL_CULL_VERTEX_EYE_POSITION_EXT', +'GL_CULL_VERTEX_OBJECT_POSITION_EXT', 'GL_YCRCB_422_SGIX', +'GL_YCRCB_444_SGIX', 'GL_FRAGMENT_LIGHTING_SGIX', +'GL_FRAGMENT_COLOR_MATERIAL_SGIX', 'GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX', +'GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX', 'GL_MAX_FRAGMENT_LIGHTS_SGIX', +'GL_MAX_ACTIVE_LIGHTS_SGIX', 'GL_CURRENT_RASTER_NORMAL_SGIX', +'GL_LIGHT_ENV_MODE_SGIX', 'GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX', +'GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX', +'GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX', +'GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX', +'GL_FRAGMENT_LIGHT0_SGIX', 'GL_FRAGMENT_LIGHT1_SGIX', +'GL_FRAGMENT_LIGHT2_SGIX', 'GL_FRAGMENT_LIGHT3_SGIX', +'GL_FRAGMENT_LIGHT4_SGIX', 'GL_FRAGMENT_LIGHT5_SGIX', +'GL_FRAGMENT_LIGHT6_SGIX', 'GL_FRAGMENT_LIGHT7_SGIX', +'GL_RASTER_POSITION_UNCLIPPED_IBM', 'GL_TEXTURE_LIGHTING_MODE_HP', +'GL_TEXTURE_POST_SPECULAR_HP', 'GL_TEXTURE_PRE_SPECULAR_HP', +'GL_MAX_ELEMENTS_VERTICES_EXT', 'GL_MAX_ELEMENTS_INDICES_EXT', 'GL_PHONG_WIN', +'GL_PHONG_HINT_WIN', 'GL_FOG_SPECULAR_TEXTURE_WIN', +'GL_FRAGMENT_MATERIAL_EXT', 'GL_FRAGMENT_NORMAL_EXT', 'GL_FRAGMENT_COLOR_EXT', +'GL_ATTENUATION_EXT', 'GL_SHADOW_ATTENUATION_EXT', +'GL_TEXTURE_APPLICATION_MODE_EXT', 'GL_TEXTURE_LIGHT_EXT', +'GL_TEXTURE_MATERIAL_FACE_EXT', 'GL_TEXTURE_MATERIAL_PARAMETER_EXT', +'GL_ALPHA_MIN_SGIX', 'GL_ALPHA_MAX_SGIX', 'GL_PIXEL_TEX_GEN_Q_CEILING_SGIX', +'GL_PIXEL_TEX_GEN_Q_ROUND_SGIX', 'GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX', +'GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX', +'GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX', 'GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX', +'GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX', 'GL_BGR_EXT', 'GL_BGRA_EXT', +'GL_ASYNC_MARKER_SGIX', 'GL_ASYNC_TEX_IMAGE_SGIX', +'GL_ASYNC_DRAW_PIXELS_SGIX', 'GL_ASYNC_READ_PIXELS_SGIX', +'GL_MAX_ASYNC_TEX_IMAGE_SGIX', 'GL_MAX_ASYNC_DRAW_PIXELS_SGIX', +'GL_MAX_ASYNC_READ_PIXELS_SGIX', 'GL_ASYNC_HISTOGRAM_SGIX', +'GL_MAX_ASYNC_HISTOGRAM_SGIX', 'GL_PARALLEL_ARRAYS_INTEL', +'GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL', +'GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL', +'GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL', +'GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL', 'GL_OCCLUSION_TEST_HP', +'GL_OCCLUSION_TEST_RESULT_HP', 'GL_PIXEL_TRANSFORM_2D_EXT', +'GL_PIXEL_MAG_FILTER_EXT', 'GL_PIXEL_MIN_FILTER_EXT', +'GL_PIXEL_CUBIC_WEIGHT_EXT', 'GL_CUBIC_EXT', 'GL_AVERAGE_EXT', +'GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT', +'GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT', +'GL_PIXEL_TRANSFORM_2D_MATRIX_EXT', 'GL_SHARED_TEXTURE_PALETTE_EXT', +'GL_LIGHT_MODEL_COLOR_CONTROL_EXT', 'GL_SINGLE_COLOR_EXT', +'GL_SEPARATE_SPECULAR_COLOR_EXT', 'GL_COLOR_SUM_EXT', +'GL_CURRENT_SECONDARY_COLOR_EXT', 'GL_SECONDARY_COLOR_ARRAY_SIZE_EXT', +'GL_SECONDARY_COLOR_ARRAY_TYPE_EXT', 'GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT', +'GL_SECONDARY_COLOR_ARRAY_POINTER_EXT', 'GL_SECONDARY_COLOR_ARRAY_EXT', +'GL_PERTURB_EXT', 'GL_TEXTURE_NORMAL_EXT', 'GL_FOG_COORDINATE_SOURCE_EXT', +'GL_FOG_COORDINATE_EXT', 'GL_FRAGMENT_DEPTH_EXT', +'GL_CURRENT_FOG_COORDINATE_EXT', 'GL_FOG_COORDINATE_ARRAY_TYPE_EXT', +'GL_FOG_COORDINATE_ARRAY_STRIDE_EXT', 'GL_FOG_COORDINATE_ARRAY_POINTER_EXT', +'GL_FOG_COORDINATE_ARRAY_EXT', 'GL_SCREEN_COORDINATES_REND', +'GL_INVERTED_SCREEN_W_REND', 'GL_TANGENT_ARRAY_EXT', 'GL_BINORMAL_ARRAY_EXT', +'GL_CURRENT_TANGENT_EXT', 'GL_CURRENT_BINORMAL_EXT', +'GL_TANGENT_ARRAY_TYPE_EXT', 'GL_TANGENT_ARRAY_STRIDE_EXT', +'GL_BINORMAL_ARRAY_TYPE_EXT', 'GL_BINORMAL_ARRAY_STRIDE_EXT', +'GL_TANGENT_ARRAY_POINTER_EXT', 'GL_BINORMAL_ARRAY_POINTER_EXT', +'GL_MAP1_TANGENT_EXT', 'GL_MAP2_TANGENT_EXT', 'GL_MAP1_BINORMAL_EXT', +'GL_MAP2_BINORMAL_EXT', 'GL_COMBINE_EXT', 'GL_COMBINE_RGB_EXT', +'GL_COMBINE_ALPHA_EXT', 'GL_RGB_SCALE_EXT', 'GL_ADD_SIGNED_EXT', +'GL_INTERPOLATE_EXT', 'GL_CONSTANT_EXT', 'GL_PRIMARY_COLOR_EXT', +'GL_PREVIOUS_EXT', 'GL_SOURCE0_RGB_EXT', 'GL_SOURCE1_RGB_EXT', +'GL_SOURCE2_RGB_EXT', 'GL_SOURCE0_ALPHA_EXT', 'GL_SOURCE1_ALPHA_EXT', +'GL_SOURCE2_ALPHA_EXT', 'GL_OPERAND0_RGB_EXT', 'GL_OPERAND1_RGB_EXT', +'GL_OPERAND2_RGB_EXT', 'GL_OPERAND0_ALPHA_EXT', 'GL_OPERAND1_ALPHA_EXT', +'GL_OPERAND2_ALPHA_EXT', 'GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE', +'GL_TRANSFORM_HINT_APPLE', 'GL_FOG_SCALE_SGIX', 'GL_FOG_SCALE_VALUE_SGIX', +'GL_UNPACK_CONSTANT_DATA_SUNX', 'GL_TEXTURE_CONSTANT_DATA_SUNX', +'GL_GLOBAL_ALPHA_SUN', 'GL_GLOBAL_ALPHA_FACTOR_SUN', 'GL_RESTART_SUN', +'GL_REPLACE_MIDDLE_SUN', 'GL_REPLACE_OLDEST_SUN', 'GL_TRIANGLE_LIST_SUN', +'GL_REPLACEMENT_CODE_SUN', 'GL_REPLACEMENT_CODE_ARRAY_SUN', +'GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN', 'GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN', +'GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN', 'GL_R1UI_V3F_SUN', +'GL_R1UI_C4UB_V3F_SUN', 'GL_R1UI_C3F_V3F_SUN', 'GL_R1UI_N3F_V3F_SUN', +'GL_R1UI_C4F_N3F_V3F_SUN', 'GL_R1UI_T2F_V3F_SUN', 'GL_R1UI_T2F_N3F_V3F_SUN', +'GL_R1UI_T2F_C4F_N3F_V3F_SUN', 'GL_BLEND_DST_RGB_EXT', 'GL_BLEND_SRC_RGB_EXT', +'GL_BLEND_DST_ALPHA_EXT', 'GL_BLEND_SRC_ALPHA_EXT', 'GL_RED_MIN_CLAMP_INGR', +'GL_GREEN_MIN_CLAMP_INGR', 'GL_BLUE_MIN_CLAMP_INGR', +'GL_ALPHA_MIN_CLAMP_INGR', 'GL_RED_MAX_CLAMP_INGR', 'GL_GREEN_MAX_CLAMP_INGR', +'GL_BLUE_MAX_CLAMP_INGR', 'GL_ALPHA_MAX_CLAMP_INGR', 'GL_INTERLACE_READ_INGR', +'GL_INCR_WRAP_EXT', 'GL_DECR_WRAP_EXT', 'GL_422_EXT', 'GL_422_REV_EXT', +'GL_422_AVERAGE_EXT', 'GL_422_REV_AVERAGE_EXT', 'GL_NORMAL_MAP_NV', +'GL_REFLECTION_MAP_NV', 'GL_NORMAL_MAP_EXT', 'GL_REFLECTION_MAP_EXT', +'GL_TEXTURE_CUBE_MAP_EXT', 'GL_TEXTURE_BINDING_CUBE_MAP_EXT', +'GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT', 'GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT', +'GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT', 'GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT', +'GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT', 'GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT', +'GL_PROXY_TEXTURE_CUBE_MAP_EXT', 'GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT', +'GL_WRAP_BORDER_SUN', 'GL_MAX_TEXTURE_LOD_BIAS_EXT', +'GL_TEXTURE_FILTER_CONTROL_EXT', 'GL_TEXTURE_LOD_BIAS_EXT', +'GL_TEXTURE_MAX_ANISOTROPY_EXT', 'GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT', +'GL_MODELVIEW0_STACK_DEPTH_EXT', 'GL_MODELVIEW1_STACK_DEPTH_EXT', +'GL_MODELVIEW0_MATRIX_EXT', 'GL_MODELVIEW1_MATRIX_EXT', +'GL_VERTEX_WEIGHTING_EXT', 'GL_MODELVIEW0_EXT', 'GL_MODELVIEW1_EXT', +'GL_CURRENT_VERTEX_WEIGHT_EXT', 'GL_VERTEX_WEIGHT_ARRAY_EXT', +'GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT', 'GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT', +'GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT', 'GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT', +'GL_MAX_SHININESS_NV', 'GL_MAX_SPOT_EXPONENT_NV', 'GL_VERTEX_ARRAY_RANGE_NV', +'GL_VERTEX_ARRAY_RANGE_LENGTH_NV', 'GL_VERTEX_ARRAY_RANGE_VALID_NV', +'GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV', 'GL_VERTEX_ARRAY_RANGE_POINTER_NV', +'GL_REGISTER_COMBINERS_NV', 'GL_VARIABLE_A_NV', 'GL_VARIABLE_B_NV', +'GL_VARIABLE_C_NV', 'GL_VARIABLE_D_NV', 'GL_VARIABLE_E_NV', +'GL_VARIABLE_F_NV', 'GL_VARIABLE_G_NV', 'GL_CONSTANT_COLOR0_NV', +'GL_CONSTANT_COLOR1_NV', 'GL_PRIMARY_COLOR_NV', 'GL_SECONDARY_COLOR_NV', +'GL_SPARE0_NV', 'GL_SPARE1_NV', 'GL_DISCARD_NV', 'GL_E_TIMES_F_NV', +'GL_SPARE0_PLUS_SECONDARY_COLOR_NV', 'GL_UNSIGNED_IDENTITY_NV', +'GL_UNSIGNED_INVERT_NV', 'GL_EXPAND_NORMAL_NV', 'GL_EXPAND_NEGATE_NV', +'GL_HALF_BIAS_NORMAL_NV', 'GL_HALF_BIAS_NEGATE_NV', 'GL_SIGNED_IDENTITY_NV', +'GL_SIGNED_NEGATE_NV', 'GL_SCALE_BY_TWO_NV', 'GL_SCALE_BY_FOUR_NV', +'GL_SCALE_BY_ONE_HALF_NV', 'GL_BIAS_BY_NEGATIVE_ONE_HALF_NV', +'GL_COMBINER_INPUT_NV', 'GL_COMBINER_MAPPING_NV', +'GL_COMBINER_COMPONENT_USAGE_NV', 'GL_COMBINER_AB_DOT_PRODUCT_NV', +'GL_COMBINER_CD_DOT_PRODUCT_NV', 'GL_COMBINER_MUX_SUM_NV', +'GL_COMBINER_SCALE_NV', 'GL_COMBINER_BIAS_NV', 'GL_COMBINER_AB_OUTPUT_NV', +'GL_COMBINER_CD_OUTPUT_NV', 'GL_COMBINER_SUM_OUTPUT_NV', +'GL_MAX_GENERAL_COMBINERS_NV', 'GL_NUM_GENERAL_COMBINERS_NV', +'GL_COLOR_SUM_CLAMP_NV', 'GL_COMBINER0_NV', 'GL_COMBINER1_NV', +'GL_COMBINER2_NV', 'GL_COMBINER3_NV', 'GL_COMBINER4_NV', 'GL_COMBINER5_NV', +'GL_COMBINER6_NV', 'GL_COMBINER7_NV', 'GL_FOG_DISTANCE_MODE_NV', +'GL_EYE_RADIAL_NV', 'GL_EYE_PLANE_ABSOLUTE_NV', 'GL_EMBOSS_LIGHT_NV', +'GL_EMBOSS_CONSTANT_NV', 'GL_EMBOSS_MAP_NV', 'GL_COMBINE4_NV', +'GL_SOURCE3_RGB_NV', 'GL_SOURCE3_ALPHA_NV', 'GL_OPERAND3_RGB_NV', +'GL_OPERAND3_ALPHA_NV', 'GL_COMPRESSED_RGB_S3TC_DXT1_EXT', +'GL_COMPRESSED_RGBA_S3TC_DXT1_EXT', 'GL_COMPRESSED_RGBA_S3TC_DXT3_EXT', +'GL_COMPRESSED_RGBA_S3TC_DXT5_EXT', 'GL_CULL_VERTEX_IBM', +'GL_VERTEX_ARRAY_LIST_IBM', 'GL_NORMAL_ARRAY_LIST_IBM', +'GL_COLOR_ARRAY_LIST_IBM', 'GL_INDEX_ARRAY_LIST_IBM', +'GL_TEXTURE_COORD_ARRAY_LIST_IBM', 'GL_EDGE_FLAG_ARRAY_LIST_IBM', +'GL_FOG_COORDINATE_ARRAY_LIST_IBM', 'GL_SECONDARY_COLOR_ARRAY_LIST_IBM', +'GL_VERTEX_ARRAY_LIST_STRIDE_IBM', 'GL_NORMAL_ARRAY_LIST_STRIDE_IBM', +'GL_COLOR_ARRAY_LIST_STRIDE_IBM', 'GL_INDEX_ARRAY_LIST_STRIDE_IBM', +'GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM', +'GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM', +'GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM', +'GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM', 'GL_PACK_SUBSAMPLE_RATE_SGIX', +'GL_UNPACK_SUBSAMPLE_RATE_SGIX', 'GL_PIXEL_SUBSAMPLE_4444_SGIX', +'GL_PIXEL_SUBSAMPLE_2424_SGIX', 'GL_PIXEL_SUBSAMPLE_4242_SGIX', +'GL_YCRCB_SGIX', 'GL_YCRCBA_SGIX', 'GL_DEPTH_PASS_INSTRUMENT_SGIX', +'GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX', 'GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX', +'GL_COMPRESSED_RGB_FXT1_3DFX', 'GL_COMPRESSED_RGBA_FXT1_3DFX', +'GL_MULTISAMPLE_3DFX', 'GL_SAMPLE_BUFFERS_3DFX', 'GL_SAMPLES_3DFX', +'GL_MULTISAMPLE_BIT_3DFX', 'GL_MULTISAMPLE_EXT', +'GL_SAMPLE_ALPHA_TO_MASK_EXT', 'GL_SAMPLE_ALPHA_TO_ONE_EXT', +'GL_SAMPLE_MASK_EXT', 'GL_1PASS_EXT', 'GL_2PASS_0_EXT', 'GL_2PASS_1_EXT', +'GL_4PASS_0_EXT', 'GL_4PASS_1_EXT', 'GL_4PASS_2_EXT', 'GL_4PASS_3_EXT', +'GL_SAMPLE_BUFFERS_EXT', 'GL_SAMPLES_EXT', 'GL_SAMPLE_MASK_VALUE_EXT', +'GL_SAMPLE_MASK_INVERT_EXT', 'GL_SAMPLE_PATTERN_EXT', +'GL_MULTISAMPLE_BIT_EXT', 'GL_VERTEX_PRECLIP_SGIX', +'GL_VERTEX_PRECLIP_HINT_SGIX', 'GL_CONVOLUTION_HINT_SGIX', +'GL_PACK_RESAMPLE_SGIX', 'GL_UNPACK_RESAMPLE_SGIX', +'GL_RESAMPLE_REPLICATE_SGIX', 'GL_RESAMPLE_ZERO_FILL_SGIX', +'GL_RESAMPLE_DECIMATE_SGIX', 'GL_EYE_DISTANCE_TO_POINT_SGIS', +'GL_OBJECT_DISTANCE_TO_POINT_SGIS', 'GL_EYE_DISTANCE_TO_LINE_SGIS', +'GL_OBJECT_DISTANCE_TO_LINE_SGIS', 'GL_EYE_POINT_SGIS', +'GL_OBJECT_POINT_SGIS', 'GL_EYE_LINE_SGIS', 'GL_OBJECT_LINE_SGIS', +'GL_TEXTURE_COLOR_WRITEMASK_SGIS', 'GL_DOT3_RGB_EXT', 'GL_DOT3_RGBA_EXT', +'GL_MIRROR_CLAMP_ATI', 'GL_MIRROR_CLAMP_TO_EDGE_ATI', 'GL_ALL_COMPLETED_NV', +'GL_FENCE_STATUS_NV', 'GL_FENCE_CONDITION_NV', 'GL_MIRRORED_REPEAT_IBM', +'GL_EVAL_2D_NV', 'GL_EVAL_TRIANGULAR_2D_NV', 'GL_MAP_TESSELLATION_NV', +'GL_MAP_ATTRIB_U_ORDER_NV', 'GL_MAP_ATTRIB_V_ORDER_NV', +'GL_EVAL_FRACTIONAL_TESSELLATION_NV', 'GL_EVAL_VERTEX_ATTRIB0_NV', +'GL_EVAL_VERTEX_ATTRIB1_NV', 'GL_EVAL_VERTEX_ATTRIB2_NV', +'GL_EVAL_VERTEX_ATTRIB3_NV', 'GL_EVAL_VERTEX_ATTRIB4_NV', +'GL_EVAL_VERTEX_ATTRIB5_NV', 'GL_EVAL_VERTEX_ATTRIB6_NV', +'GL_EVAL_VERTEX_ATTRIB7_NV', 'GL_EVAL_VERTEX_ATTRIB8_NV', +'GL_EVAL_VERTEX_ATTRIB9_NV', 'GL_EVAL_VERTEX_ATTRIB10_NV', +'GL_EVAL_VERTEX_ATTRIB11_NV', 'GL_EVAL_VERTEX_ATTRIB12_NV', +'GL_EVAL_VERTEX_ATTRIB13_NV', 'GL_EVAL_VERTEX_ATTRIB14_NV', +'GL_EVAL_VERTEX_ATTRIB15_NV', 'GL_MAX_MAP_TESSELLATION_NV', +'GL_MAX_RATIONAL_EVAL_ORDER_NV', 'GL_DEPTH_STENCIL_NV', +'GL_UNSIGNED_INT_24_8_NV', 'GL_PER_STAGE_CONSTANTS_NV', +'GL_TEXTURE_RECTANGLE_NV', 'GL_TEXTURE_BINDING_RECTANGLE_NV', +'GL_PROXY_TEXTURE_RECTANGLE_NV', 'GL_MAX_RECTANGLE_TEXTURE_SIZE_NV', +'GL_OFFSET_TEXTURE_RECTANGLE_NV', 'GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV', +'GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV', +'GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV', 'GL_UNSIGNED_INT_S8_S8_8_8_NV', +'GL_UNSIGNED_INT_8_8_S8_S8_REV_NV', 'GL_DSDT_MAG_INTENSITY_NV', +'GL_SHADER_CONSISTENT_NV', 'GL_TEXTURE_SHADER_NV', 'GL_SHADER_OPERATION_NV', +'GL_CULL_MODES_NV', 'GL_OFFSET_TEXTURE_MATRIX_NV', +'GL_OFFSET_TEXTURE_SCALE_NV', 'GL_OFFSET_TEXTURE_BIAS_NV', +'GL_OFFSET_TEXTURE_2D_MATRIX_NV', 'GL_OFFSET_TEXTURE_2D_SCALE_NV', +'GL_OFFSET_TEXTURE_2D_BIAS_NV', 'GL_PREVIOUS_TEXTURE_INPUT_NV', +'GL_CONST_EYE_NV', 'GL_PASS_THROUGH_NV', 'GL_CULL_FRAGMENT_NV', +'GL_OFFSET_TEXTURE_2D_NV', 'GL_DEPENDENT_AR_TEXTURE_2D_NV', +'GL_DEPENDENT_GB_TEXTURE_2D_NV', 'GL_DOT_PRODUCT_NV', +'GL_DOT_PRODUCT_DEPTH_REPLACE_NV', 'GL_DOT_PRODUCT_TEXTURE_2D_NV', +'GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV', 'GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV', +'GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV', +'GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV', 'GL_HILO_NV', 'GL_DSDT_NV', +'GL_DSDT_MAG_NV', 'GL_DSDT_MAG_VIB_NV', 'GL_HILO16_NV', 'GL_SIGNED_HILO_NV', +'GL_SIGNED_HILO16_NV', 'GL_SIGNED_RGBA_NV', 'GL_SIGNED_RGBA8_NV', +'GL_SIGNED_RGB_NV', 'GL_SIGNED_RGB8_NV', 'GL_SIGNED_LUMINANCE_NV', +'GL_SIGNED_LUMINANCE8_NV', 'GL_SIGNED_LUMINANCE_ALPHA_NV', +'GL_SIGNED_LUMINANCE8_ALPHA8_NV', 'GL_SIGNED_ALPHA_NV', 'GL_SIGNED_ALPHA8_NV', +'GL_SIGNED_INTENSITY_NV', 'GL_SIGNED_INTENSITY8_NV', 'GL_DSDT8_NV', +'GL_DSDT8_MAG8_NV', 'GL_DSDT8_MAG8_INTENSITY8_NV', +'GL_SIGNED_RGB_UNSIGNED_ALPHA_NV', 'GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV', +'GL_HI_SCALE_NV', 'GL_LO_SCALE_NV', 'GL_DS_SCALE_NV', 'GL_DT_SCALE_NV', +'GL_MAGNITUDE_SCALE_NV', 'GL_VIBRANCE_SCALE_NV', 'GL_HI_BIAS_NV', +'GL_LO_BIAS_NV', 'GL_DS_BIAS_NV', 'GL_DT_BIAS_NV', 'GL_MAGNITUDE_BIAS_NV', +'GL_VIBRANCE_BIAS_NV', 'GL_TEXTURE_BORDER_VALUES_NV', 'GL_TEXTURE_HI_SIZE_NV', +'GL_TEXTURE_LO_SIZE_NV', 'GL_TEXTURE_DS_SIZE_NV', 'GL_TEXTURE_DT_SIZE_NV', +'GL_TEXTURE_MAG_SIZE_NV', 'GL_DOT_PRODUCT_TEXTURE_3D_NV', +'GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV', 'GL_VERTEX_PROGRAM_NV', +'GL_VERTEX_STATE_PROGRAM_NV', 'GL_ATTRIB_ARRAY_SIZE_NV', +'GL_ATTRIB_ARRAY_STRIDE_NV', 'GL_ATTRIB_ARRAY_TYPE_NV', +'GL_CURRENT_ATTRIB_NV', 'GL_PROGRAM_LENGTH_NV', 'GL_PROGRAM_STRING_NV', +'GL_MODELVIEW_PROJECTION_NV', 'GL_IDENTITY_NV', 'GL_INVERSE_NV', +'GL_TRANSPOSE_NV', 'GL_INVERSE_TRANSPOSE_NV', +'GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV', 'GL_MAX_TRACK_MATRICES_NV', +'GL_MATRIX0_NV', 'GL_MATRIX1_NV', 'GL_MATRIX2_NV', 'GL_MATRIX3_NV', +'GL_MATRIX4_NV', 'GL_MATRIX5_NV', 'GL_MATRIX6_NV', 'GL_MATRIX7_NV', +'GL_CURRENT_MATRIX_STACK_DEPTH_NV', 'GL_CURRENT_MATRIX_NV', +'GL_VERTEX_PROGRAM_POINT_SIZE_NV', 'GL_VERTEX_PROGRAM_TWO_SIDE_NV', +'GL_PROGRAM_PARAMETER_NV', 'GL_ATTRIB_ARRAY_POINTER_NV', +'GL_PROGRAM_TARGET_NV', 'GL_PROGRAM_RESIDENT_NV', 'GL_TRACK_MATRIX_NV', +'GL_TRACK_MATRIX_TRANSFORM_NV', 'GL_VERTEX_PROGRAM_BINDING_NV', +'GL_PROGRAM_ERROR_POSITION_NV', 'GL_VERTEX_ATTRIB_ARRAY0_NV', +'GL_VERTEX_ATTRIB_ARRAY1_NV', 'GL_VERTEX_ATTRIB_ARRAY2_NV', +'GL_VERTEX_ATTRIB_ARRAY3_NV', 'GL_VERTEX_ATTRIB_ARRAY4_NV', +'GL_VERTEX_ATTRIB_ARRAY5_NV', 'GL_VERTEX_ATTRIB_ARRAY6_NV', +'GL_VERTEX_ATTRIB_ARRAY7_NV', 'GL_VERTEX_ATTRIB_ARRAY8_NV', +'GL_VERTEX_ATTRIB_ARRAY9_NV', 'GL_VERTEX_ATTRIB_ARRAY10_NV', +'GL_VERTEX_ATTRIB_ARRAY11_NV', 'GL_VERTEX_ATTRIB_ARRAY12_NV', +'GL_VERTEX_ATTRIB_ARRAY13_NV', 'GL_VERTEX_ATTRIB_ARRAY14_NV', +'GL_VERTEX_ATTRIB_ARRAY15_NV', 'GL_MAP1_VERTEX_ATTRIB0_4_NV', +'GL_MAP1_VERTEX_ATTRIB1_4_NV', 'GL_MAP1_VERTEX_ATTRIB2_4_NV', +'GL_MAP1_VERTEX_ATTRIB3_4_NV', 'GL_MAP1_VERTEX_ATTRIB4_4_NV', +'GL_MAP1_VERTEX_ATTRIB5_4_NV', 'GL_MAP1_VERTEX_ATTRIB6_4_NV', +'GL_MAP1_VERTEX_ATTRIB7_4_NV', 'GL_MAP1_VERTEX_ATTRIB8_4_NV', +'GL_MAP1_VERTEX_ATTRIB9_4_NV', 'GL_MAP1_VERTEX_ATTRIB10_4_NV', +'GL_MAP1_VERTEX_ATTRIB11_4_NV', 'GL_MAP1_VERTEX_ATTRIB12_4_NV', +'GL_MAP1_VERTEX_ATTRIB13_4_NV', 'GL_MAP1_VERTEX_ATTRIB14_4_NV', +'GL_MAP1_VERTEX_ATTRIB15_4_NV', 'GL_MAP2_VERTEX_ATTRIB0_4_NV', +'GL_MAP2_VERTEX_ATTRIB1_4_NV', 'GL_MAP2_VERTEX_ATTRIB2_4_NV', +'GL_MAP2_VERTEX_ATTRIB3_4_NV', 'GL_MAP2_VERTEX_ATTRIB4_4_NV', +'GL_MAP2_VERTEX_ATTRIB5_4_NV', 'GL_MAP2_VERTEX_ATTRIB6_4_NV', +'GL_MAP2_VERTEX_ATTRIB7_4_NV', 'GL_MAP2_VERTEX_ATTRIB8_4_NV', +'GL_MAP2_VERTEX_ATTRIB9_4_NV', 'GL_MAP2_VERTEX_ATTRIB10_4_NV', +'GL_MAP2_VERTEX_ATTRIB11_4_NV', 'GL_MAP2_VERTEX_ATTRIB12_4_NV', +'GL_MAP2_VERTEX_ATTRIB13_4_NV', 'GL_MAP2_VERTEX_ATTRIB14_4_NV', +'GL_MAP2_VERTEX_ATTRIB15_4_NV', 'GL_TEXTURE_MAX_CLAMP_S_SGIX', +'GL_TEXTURE_MAX_CLAMP_T_SGIX', 'GL_TEXTURE_MAX_CLAMP_R_SGIX', +'GL_SCALEBIAS_HINT_SGIX', 'GL_INTERLACE_OML', 'GL_INTERLACE_READ_OML', +'GL_FORMAT_SUBSAMPLE_24_24_OML', 'GL_FORMAT_SUBSAMPLE_244_244_OML', +'GL_PACK_RESAMPLE_OML', 'GL_UNPACK_RESAMPLE_OML', 'GL_RESAMPLE_REPLICATE_OML', +'GL_RESAMPLE_ZERO_FILL_OML', 'GL_RESAMPLE_AVERAGE_OML', +'GL_RESAMPLE_DECIMATE_OML', 'GL_DEPTH_STENCIL_TO_RGBA_NV', +'GL_DEPTH_STENCIL_TO_BGRA_NV', 'GL_BUMP_ROT_MATRIX_ATI', +'GL_BUMP_ROT_MATRIX_SIZE_ATI', 'GL_BUMP_NUM_TEX_UNITS_ATI', +'GL_BUMP_TEX_UNITS_ATI', 'GL_DUDV_ATI', 'GL_DU8DV8_ATI', 'GL_BUMP_ENVMAP_ATI', +'GL_BUMP_TARGET_ATI', 'GL_FRAGMENT_SHADER_ATI', 'GL_REG_0_ATI', +'GL_REG_1_ATI', 'GL_REG_2_ATI', 'GL_REG_3_ATI', 'GL_REG_4_ATI', +'GL_REG_5_ATI', 'GL_REG_6_ATI', 'GL_REG_7_ATI', 'GL_REG_8_ATI', +'GL_REG_9_ATI', 'GL_REG_10_ATI', 'GL_REG_11_ATI', 'GL_REG_12_ATI', +'GL_REG_13_ATI', 'GL_REG_14_ATI', 'GL_REG_15_ATI', 'GL_REG_16_ATI', +'GL_REG_17_ATI', 'GL_REG_18_ATI', 'GL_REG_19_ATI', 'GL_REG_20_ATI', +'GL_REG_21_ATI', 'GL_REG_22_ATI', 'GL_REG_23_ATI', 'GL_REG_24_ATI', +'GL_REG_25_ATI', 'GL_REG_26_ATI', 'GL_REG_27_ATI', 'GL_REG_28_ATI', +'GL_REG_29_ATI', 'GL_REG_30_ATI', 'GL_REG_31_ATI', 'GL_CON_0_ATI', +'GL_CON_1_ATI', 'GL_CON_2_ATI', 'GL_CON_3_ATI', 'GL_CON_4_ATI', +'GL_CON_5_ATI', 'GL_CON_6_ATI', 'GL_CON_7_ATI', 'GL_CON_8_ATI', +'GL_CON_9_ATI', 'GL_CON_10_ATI', 'GL_CON_11_ATI', 'GL_CON_12_ATI', +'GL_CON_13_ATI', 'GL_CON_14_ATI', 'GL_CON_15_ATI', 'GL_CON_16_ATI', +'GL_CON_17_ATI', 'GL_CON_18_ATI', 'GL_CON_19_ATI', 'GL_CON_20_ATI', +'GL_CON_21_ATI', 'GL_CON_22_ATI', 'GL_CON_23_ATI', 'GL_CON_24_ATI', +'GL_CON_25_ATI', 'GL_CON_26_ATI', 'GL_CON_27_ATI', 'GL_CON_28_ATI', +'GL_CON_29_ATI', 'GL_CON_30_ATI', 'GL_CON_31_ATI', 'GL_MOV_ATI', 'GL_ADD_ATI', +'GL_MUL_ATI', 'GL_SUB_ATI', 'GL_DOT3_ATI', 'GL_DOT4_ATI', 'GL_MAD_ATI', +'GL_LERP_ATI', 'GL_CND_ATI', 'GL_CND0_ATI', 'GL_DOT2_ADD_ATI', +'GL_SECONDARY_INTERPOLATOR_ATI', 'GL_NUM_FRAGMENT_REGISTERS_ATI', +'GL_NUM_FRAGMENT_CONSTANTS_ATI', 'GL_NUM_PASSES_ATI', +'GL_NUM_INSTRUCTIONS_PER_PASS_ATI', 'GL_NUM_INSTRUCTIONS_TOTAL_ATI', +'GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI', 'GL_NUM_LOOPBACK_COMPONENTS_ATI', +'GL_COLOR_ALPHA_PAIRING_ATI', 'GL_SWIZZLE_STR_ATI', 'GL_SWIZZLE_STQ_ATI', +'GL_SWIZZLE_STR_DR_ATI', 'GL_SWIZZLE_STQ_DQ_ATI', 'GL_SWIZZLE_STRQ_ATI', +'GL_SWIZZLE_STRQ_DQ_ATI', 'GL_RED_BIT_ATI', 'GL_GREEN_BIT_ATI', +'GL_BLUE_BIT_ATI', 'GL_2X_BIT_ATI', 'GL_4X_BIT_ATI', 'GL_8X_BIT_ATI', +'GL_HALF_BIT_ATI', 'GL_QUARTER_BIT_ATI', 'GL_EIGHTH_BIT_ATI', +'GL_SATURATE_BIT_ATI', 'GL_COMP_BIT_ATI', 'GL_NEGATE_BIT_ATI', +'GL_BIAS_BIT_ATI', 'GL_PN_TRIANGLES_ATI', +'GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI', 'GL_PN_TRIANGLES_POINT_MODE_ATI', +'GL_PN_TRIANGLES_NORMAL_MODE_ATI', 'GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI', +'GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI', +'GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI', +'GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI', +'GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI', 'GL_STATIC_ATI', +'GL_DYNAMIC_ATI', 'GL_PRESERVE_ATI', 'GL_DISCARD_ATI', +'GL_OBJECT_BUFFER_SIZE_ATI', 'GL_OBJECT_BUFFER_USAGE_ATI', +'GL_ARRAY_OBJECT_BUFFER_ATI', 'GL_ARRAY_OBJECT_OFFSET_ATI', +'GL_VERTEX_SHADER_EXT', 'GL_VERTEX_SHADER_BINDING_EXT', 'GL_OP_INDEX_EXT', +'GL_OP_NEGATE_EXT', 'GL_OP_DOT3_EXT', 'GL_OP_DOT4_EXT', 'GL_OP_MUL_EXT', +'GL_OP_ADD_EXT', 'GL_OP_MADD_EXT', 'GL_OP_FRAC_EXT', 'GL_OP_MAX_EXT', +'GL_OP_MIN_EXT', 'GL_OP_SET_GE_EXT', 'GL_OP_SET_LT_EXT', 'GL_OP_CLAMP_EXT', +'GL_OP_FLOOR_EXT', 'GL_OP_ROUND_EXT', 'GL_OP_EXP_BASE_2_EXT', +'GL_OP_LOG_BASE_2_EXT', 'GL_OP_POWER_EXT', 'GL_OP_RECIP_EXT', +'GL_OP_RECIP_SQRT_EXT', 'GL_OP_SUB_EXT', 'GL_OP_CROSS_PRODUCT_EXT', +'GL_OP_MULTIPLY_MATRIX_EXT', 'GL_OP_MOV_EXT', 'GL_OUTPUT_VERTEX_EXT', +'GL_OUTPUT_COLOR0_EXT', 'GL_OUTPUT_COLOR1_EXT', +'GL_OUTPUT_TEXTURE_COORD0_EXT', 'GL_OUTPUT_TEXTURE_COORD1_EXT', +'GL_OUTPUT_TEXTURE_COORD2_EXT', 'GL_OUTPUT_TEXTURE_COORD3_EXT', +'GL_OUTPUT_TEXTURE_COORD4_EXT', 'GL_OUTPUT_TEXTURE_COORD5_EXT', +'GL_OUTPUT_TEXTURE_COORD6_EXT', 'GL_OUTPUT_TEXTURE_COORD7_EXT', +'GL_OUTPUT_TEXTURE_COORD8_EXT', 'GL_OUTPUT_TEXTURE_COORD9_EXT', +'GL_OUTPUT_TEXTURE_COORD10_EXT', 'GL_OUTPUT_TEXTURE_COORD11_EXT', +'GL_OUTPUT_TEXTURE_COORD12_EXT', 'GL_OUTPUT_TEXTURE_COORD13_EXT', +'GL_OUTPUT_TEXTURE_COORD14_EXT', 'GL_OUTPUT_TEXTURE_COORD15_EXT', +'GL_OUTPUT_TEXTURE_COORD16_EXT', 'GL_OUTPUT_TEXTURE_COORD17_EXT', +'GL_OUTPUT_TEXTURE_COORD18_EXT', 'GL_OUTPUT_TEXTURE_COORD19_EXT', +'GL_OUTPUT_TEXTURE_COORD20_EXT', 'GL_OUTPUT_TEXTURE_COORD21_EXT', +'GL_OUTPUT_TEXTURE_COORD22_EXT', 'GL_OUTPUT_TEXTURE_COORD23_EXT', +'GL_OUTPUT_TEXTURE_COORD24_EXT', 'GL_OUTPUT_TEXTURE_COORD25_EXT', +'GL_OUTPUT_TEXTURE_COORD26_EXT', 'GL_OUTPUT_TEXTURE_COORD27_EXT', +'GL_OUTPUT_TEXTURE_COORD28_EXT', 'GL_OUTPUT_TEXTURE_COORD29_EXT', +'GL_OUTPUT_TEXTURE_COORD30_EXT', 'GL_OUTPUT_TEXTURE_COORD31_EXT', +'GL_OUTPUT_FOG_EXT', 'GL_SCALAR_EXT', 'GL_VECTOR_EXT', 'GL_MATRIX_EXT', +'GL_VARIANT_EXT', 'GL_INVARIANT_EXT', 'GL_LOCAL_CONSTANT_EXT', 'GL_LOCAL_EXT', +'GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT', 'GL_MAX_VERTEX_SHADER_VARIANTS_EXT', +'GL_MAX_VERTEX_SHADER_INVARIANTS_EXT', +'GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT', 'GL_MAX_VERTEX_SHADER_LOCALS_EXT', +'GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT', +'GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT', +'GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT', +'GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT', +'GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT', +'GL_VERTEX_SHADER_INSTRUCTIONS_EXT', 'GL_VERTEX_SHADER_VARIANTS_EXT', +'GL_VERTEX_SHADER_INVARIANTS_EXT', 'GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT', +'GL_VERTEX_SHADER_LOCALS_EXT', 'GL_VERTEX_SHADER_OPTIMIZED_EXT', 'GL_X_EXT', +'GL_Y_EXT', 'GL_Z_EXT', 'GL_W_EXT', 'GL_NEGATIVE_X_EXT', 'GL_NEGATIVE_Y_EXT', +'GL_NEGATIVE_Z_EXT', 'GL_NEGATIVE_W_EXT', 'GL_ZERO_EXT', 'GL_ONE_EXT', +'GL_NEGATIVE_ONE_EXT', 'GL_NORMALIZED_RANGE_EXT', 'GL_FULL_RANGE_EXT', +'GL_CURRENT_VERTEX_EXT', 'GL_MVP_MATRIX_EXT', 'GL_VARIANT_VALUE_EXT', +'GL_VARIANT_DATATYPE_EXT', 'GL_VARIANT_ARRAY_STRIDE_EXT', +'GL_VARIANT_ARRAY_TYPE_EXT', 'GL_VARIANT_ARRAY_EXT', +'GL_VARIANT_ARRAY_POINTER_EXT', 'GL_INVARIANT_VALUE_EXT', +'GL_INVARIANT_DATATYPE_EXT', 'GL_LOCAL_CONSTANT_VALUE_EXT', +'GL_LOCAL_CONSTANT_DATATYPE_EXT', 'GL_MAX_VERTEX_STREAMS_ATI', +'GL_VERTEX_STREAM0_ATI', 'GL_VERTEX_STREAM1_ATI', 'GL_VERTEX_STREAM2_ATI', +'GL_VERTEX_STREAM3_ATI', 'GL_VERTEX_STREAM4_ATI', 'GL_VERTEX_STREAM5_ATI', +'GL_VERTEX_STREAM6_ATI', 'GL_VERTEX_STREAM7_ATI', 'GL_VERTEX_SOURCE_ATI', +'GL_ELEMENT_ARRAY_ATI', 'GL_ELEMENT_ARRAY_TYPE_ATI', +'GL_ELEMENT_ARRAY_POINTER_ATI', 'GL_QUAD_MESH_SUN', 'GL_TRIANGLE_MESH_SUN', +'GL_SLICE_ACCUM_SUN', 'GL_MULTISAMPLE_FILTER_HINT_NV', 'GL_DEPTH_CLAMP_NV', +'GL_PIXEL_COUNTER_BITS_NV', 'GL_CURRENT_OCCLUSION_QUERY_ID_NV', +'GL_PIXEL_COUNT_NV', 'GL_PIXEL_COUNT_AVAILABLE_NV', 'GL_POINT_SPRITE_NV', +'GL_COORD_REPLACE_NV', 'GL_POINT_SPRITE_R_MODE_NV', +'GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV', +'GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV', +'GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV', +'GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV', +'GL_OFFSET_HILO_TEXTURE_2D_NV', 'GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV', +'GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV', +'GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV', +'GL_DEPENDENT_HILO_TEXTURE_2D_NV', 'GL_DEPENDENT_RGB_TEXTURE_3D_NV', +'GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV', 'GL_DOT_PRODUCT_PASS_THROUGH_NV', +'GL_DOT_PRODUCT_TEXTURE_1D_NV', 'GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV', +'GL_HILO8_NV', 'GL_SIGNED_HILO8_NV', 'GL_FORCE_BLUE_TO_ONE_NV', +'GL_STENCIL_TEST_TWO_SIDE_EXT', 'GL_ACTIVE_STENCIL_FACE_EXT', +'GL_TEXT_FRAGMENT_SHADER_ATI', 'GL_UNPACK_CLIENT_STORAGE_APPLE', +'GL_ELEMENT_ARRAY_APPLE', 'GL_ELEMENT_ARRAY_TYPE_APPLE', +'GL_ELEMENT_ARRAY_POINTER_APPLE', 'GL_DRAW_PIXELS_APPLE', 'GL_FENCE_APPLE', +'GL_VERTEX_ARRAY_BINDING_APPLE', 'GL_VERTEX_ARRAY_RANGE_APPLE', +'GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE', 'GL_VERTEX_ARRAY_STORAGE_HINT_APPLE', +'GL_VERTEX_ARRAY_RANGE_POINTER_APPLE', 'GL_STORAGE_CACHED_APPLE', +'GL_STORAGE_SHARED_APPLE', 'GL_YCBCR_422_APPLE', +'GL_UNSIGNED_SHORT_8_8_APPLE', 'GL_UNSIGNED_SHORT_8_8_REV_APPLE', +'GL_RGB_S3TC', 'GL_RGB4_S3TC', 'GL_RGBA_S3TC', 'GL_RGBA4_S3TC', +'GL_MAX_DRAW_BUFFERS_ATI', 'GL_DRAW_BUFFER0_ATI', 'GL_DRAW_BUFFER1_ATI', +'GL_DRAW_BUFFER2_ATI', 'GL_DRAW_BUFFER3_ATI', 'GL_DRAW_BUFFER4_ATI', +'GL_DRAW_BUFFER5_ATI', 'GL_DRAW_BUFFER6_ATI', 'GL_DRAW_BUFFER7_ATI', +'GL_DRAW_BUFFER8_ATI', 'GL_DRAW_BUFFER9_ATI', 'GL_DRAW_BUFFER10_ATI', +'GL_DRAW_BUFFER11_ATI', 'GL_DRAW_BUFFER12_ATI', 'GL_DRAW_BUFFER13_ATI', +'GL_DRAW_BUFFER14_ATI', 'GL_DRAW_BUFFER15_ATI', 'GL_TYPE_RGBA_FLOAT_ATI', +'GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI', 'GL_MODULATE_ADD_ATI', +'GL_MODULATE_SIGNED_ADD_ATI', 'GL_MODULATE_SUBTRACT_ATI', +'GL_RGBA_FLOAT32_ATI', 'GL_RGB_FLOAT32_ATI', 'GL_ALPHA_FLOAT32_ATI', +'GL_INTENSITY_FLOAT32_ATI', 'GL_LUMINANCE_FLOAT32_ATI', +'GL_LUMINANCE_ALPHA_FLOAT32_ATI', 'GL_RGBA_FLOAT16_ATI', 'GL_RGB_FLOAT16_ATI', +'GL_ALPHA_FLOAT16_ATI', 'GL_INTENSITY_FLOAT16_ATI', +'GL_LUMINANCE_FLOAT16_ATI', 'GL_LUMINANCE_ALPHA_FLOAT16_ATI', 'GL_FLOAT_R_NV', +'GL_FLOAT_RG_NV', 'GL_FLOAT_RGB_NV', 'GL_FLOAT_RGBA_NV', 'GL_FLOAT_R16_NV', +'GL_FLOAT_R32_NV', 'GL_FLOAT_RG16_NV', 'GL_FLOAT_RG32_NV', +'GL_FLOAT_RGB16_NV', 'GL_FLOAT_RGB32_NV', 'GL_FLOAT_RGBA16_NV', +'GL_FLOAT_RGBA32_NV', 'GL_TEXTURE_FLOAT_COMPONENTS_NV', +'GL_FLOAT_CLEAR_COLOR_VALUE_NV', 'GL_FLOAT_RGBA_MODE_NV', +'GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV', 'GL_FRAGMENT_PROGRAM_NV', +'GL_MAX_TEXTURE_COORDS_NV', 'GL_MAX_TEXTURE_IMAGE_UNITS_NV', +'GL_FRAGMENT_PROGRAM_BINDING_NV', 'GL_PROGRAM_ERROR_STRING_NV', +'GL_HALF_FLOAT_NV', 'GL_WRITE_PIXEL_DATA_RANGE_NV', +'GL_READ_PIXEL_DATA_RANGE_NV', 'GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV', +'GL_READ_PIXEL_DATA_RANGE_LENGTH_NV', 'GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV', +'GL_READ_PIXEL_DATA_RANGE_POINTER_NV', 'GL_PRIMITIVE_RESTART_NV', +'GL_PRIMITIVE_RESTART_INDEX_NV', 'GL_TEXTURE_UNSIGNED_REMAP_MODE_NV', +'GL_STENCIL_BACK_FUNC_ATI', 'GL_STENCIL_BACK_FAIL_ATI', +'GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI', 'GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI', +'GL_IMPLEMENTATION_COLOR_READ_TYPE_OES', +'GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES', 'GL_DEPTH_BOUNDS_TEST_EXT', +'GL_DEPTH_BOUNDS_EXT', 'GL_MIRROR_CLAMP_EXT', 'GL_MIRROR_CLAMP_TO_EDGE_EXT', +'GL_MIRROR_CLAMP_TO_BORDER_EXT', 'GL_BLEND_EQUATION_RGB_EXT', +'GL_BLEND_EQUATION_ALPHA_EXT', 'GL_PACK_INVERT_MESA', +'GL_UNSIGNED_SHORT_8_8_MESA', 'GL_UNSIGNED_SHORT_8_8_REV_MESA', +'GL_YCBCR_MESA', 'GL_PIXEL_PACK_BUFFER_EXT', 'GL_PIXEL_UNPACK_BUFFER_EXT', +'GL_PIXEL_PACK_BUFFER_BINDING_EXT', 'GL_PIXEL_UNPACK_BUFFER_BINDING_EXT', +'GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV', 'GL_MAX_PROGRAM_CALL_DEPTH_NV', +'GL_MAX_PROGRAM_IF_DEPTH_NV', 'GL_MAX_PROGRAM_LOOP_DEPTH_NV', +'GL_MAX_PROGRAM_LOOP_COUNT_NV', 'GL_INVALID_FRAMEBUFFER_OPERATION_EXT', +'GL_MAX_RENDERBUFFER_SIZE_EXT', 'GL_FRAMEBUFFER_BINDING_EXT', +'GL_RENDERBUFFER_BINDING_EXT', 'GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT', +'GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT', +'GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT', +'GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT', +'GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT', +'GL_FRAMEBUFFER_COMPLETE_EXT', 'GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT', +'GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT', +'GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT', +'GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT', +'GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT', +'GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT', +'GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT', 'GL_FRAMEBUFFER_UNSUPPORTED_EXT', +'GL_MAX_COLOR_ATTACHMENTS_EXT', 'GL_COLOR_ATTACHMENT0_EXT', +'GL_COLOR_ATTACHMENT1_EXT', 'GL_COLOR_ATTACHMENT2_EXT', +'GL_COLOR_ATTACHMENT3_EXT', 'GL_COLOR_ATTACHMENT4_EXT', +'GL_COLOR_ATTACHMENT5_EXT', 'GL_COLOR_ATTACHMENT6_EXT', +'GL_COLOR_ATTACHMENT7_EXT', 'GL_COLOR_ATTACHMENT8_EXT', +'GL_COLOR_ATTACHMENT9_EXT', 'GL_COLOR_ATTACHMENT10_EXT', +'GL_COLOR_ATTACHMENT11_EXT', 'GL_COLOR_ATTACHMENT12_EXT', +'GL_COLOR_ATTACHMENT13_EXT', 'GL_COLOR_ATTACHMENT14_EXT', +'GL_COLOR_ATTACHMENT15_EXT', 'GL_DEPTH_ATTACHMENT_EXT', +'GL_STENCIL_ATTACHMENT_EXT', 'GL_FRAMEBUFFER_EXT', 'GL_RENDERBUFFER_EXT', +'GL_RENDERBUFFER_WIDTH_EXT', 'GL_RENDERBUFFER_HEIGHT_EXT', +'GL_RENDERBUFFER_INTERNAL_FORMAT_EXT', 'GL_STENCIL_INDEX1_EXT', +'GL_STENCIL_INDEX4_EXT', 'GL_STENCIL_INDEX8_EXT', 'GL_STENCIL_INDEX16_EXT', +'GL_RENDERBUFFER_RED_SIZE_EXT', 'GL_RENDERBUFFER_GREEN_SIZE_EXT', +'GL_RENDERBUFFER_BLUE_SIZE_EXT', 'GL_RENDERBUFFER_ALPHA_SIZE_EXT', +'GL_RENDERBUFFER_DEPTH_SIZE_EXT', 'GL_RENDERBUFFER_STENCIL_SIZE_EXT', +'GLchar', 'GLintptr', 'GLsizeiptr', 'GLintptrARB', 'GLsizeiptrARB', +'GLcharARB', 'GLhandleARB', 'GLhalfARB', 'GLhalfNV', 'GL_VERSION_1_2', +'glBlendColor', 'glBlendEquation', 'glDrawRangeElements', 'glColorTable', +'glColorTableParameterfv', 'glColorTableParameteriv', 'glCopyColorTable', +'glGetColorTable', 'glGetColorTableParameterfv', 'glGetColorTableParameteriv', +'glColorSubTable', 'glCopyColorSubTable', 'glConvolutionFilter1D', +'glConvolutionFilter2D', 'glConvolutionParameterf', +'glConvolutionParameterfv', 'glConvolutionParameteri', +'glConvolutionParameteriv', 'glCopyConvolutionFilter1D', +'glCopyConvolutionFilter2D', 'glGetConvolutionFilter', +'glGetConvolutionParameterfv', 'glGetConvolutionParameteriv', +'glGetSeparableFilter', 'glSeparableFilter2D', 'glGetHistogram', +'glGetHistogramParameterfv', 'glGetHistogramParameteriv', 'glGetMinmax', +'glGetMinmaxParameterfv', 'glGetMinmaxParameteriv', 'glHistogram', 'glMinmax', +'glResetHistogram', 'glResetMinmax', 'glTexImage3D', 'glTexSubImage3D', +'glCopyTexSubImage3D', 'PFNGLBLENDCOLORPROC', 'PFNGLBLENDEQUATIONPROC', +'PFNGLDRAWRANGEELEMENTSPROC', 'PFNGLCOLORTABLEPROC', +'PFNGLCOLORTABLEPARAMETERFVPROC', 'PFNGLCOLORTABLEPARAMETERIVPROC', +'PFNGLCOPYCOLORTABLEPROC', 'PFNGLGETCOLORTABLEPROC', +'PFNGLGETCOLORTABLEPARAMETERFVPROC', 'PFNGLGETCOLORTABLEPARAMETERIVPROC', +'PFNGLCOLORSUBTABLEPROC', 'PFNGLCOPYCOLORSUBTABLEPROC', +'PFNGLCONVOLUTIONFILTER1DPROC', 'PFNGLCONVOLUTIONFILTER2DPROC', +'PFNGLCONVOLUTIONPARAMETERFPROC', 'PFNGLCONVOLUTIONPARAMETERFVPROC', +'PFNGLCONVOLUTIONPARAMETERIPROC', 'PFNGLCONVOLUTIONPARAMETERIVPROC', +'PFNGLCOPYCONVOLUTIONFILTER1DPROC', 'PFNGLCOPYCONVOLUTIONFILTER2DPROC', +'PFNGLGETCONVOLUTIONFILTERPROC', 'PFNGLGETCONVOLUTIONPARAMETERFVPROC', +'PFNGLGETCONVOLUTIONPARAMETERIVPROC', 'PFNGLGETSEPARABLEFILTERPROC', +'PFNGLSEPARABLEFILTER2DPROC', 'PFNGLGETHISTOGRAMPROC', +'PFNGLGETHISTOGRAMPARAMETERFVPROC', 'PFNGLGETHISTOGRAMPARAMETERIVPROC', +'PFNGLGETMINMAXPROC', 'PFNGLGETMINMAXPARAMETERFVPROC', +'PFNGLGETMINMAXPARAMETERIVPROC', 'PFNGLHISTOGRAMPROC', 'PFNGLMINMAXPROC', +'PFNGLRESETHISTOGRAMPROC', 'PFNGLRESETMINMAXPROC', 'PFNGLTEXIMAGE3DPROC', +'PFNGLTEXSUBIMAGE3DPROC', 'PFNGLCOPYTEXSUBIMAGE3DPROC', 'GL_VERSION_1_3', +'glActiveTexture', 'glClientActiveTexture', 'glMultiTexCoord1d', +'glMultiTexCoord1dv', 'glMultiTexCoord1f', 'glMultiTexCoord1fv', +'glMultiTexCoord1i', 'glMultiTexCoord1iv', 'glMultiTexCoord1s', +'glMultiTexCoord1sv', 'glMultiTexCoord2d', 'glMultiTexCoord2dv', +'glMultiTexCoord2f', 'glMultiTexCoord2fv', 'glMultiTexCoord2i', +'glMultiTexCoord2iv', 'glMultiTexCoord2s', 'glMultiTexCoord2sv', +'glMultiTexCoord3d', 'glMultiTexCoord3dv', 'glMultiTexCoord3f', +'glMultiTexCoord3fv', 'glMultiTexCoord3i', 'glMultiTexCoord3iv', +'glMultiTexCoord3s', 'glMultiTexCoord3sv', 'glMultiTexCoord4d', +'glMultiTexCoord4dv', 'glMultiTexCoord4f', 'glMultiTexCoord4fv', +'glMultiTexCoord4i', 'glMultiTexCoord4iv', 'glMultiTexCoord4s', +'glMultiTexCoord4sv', 'glLoadTransposeMatrixf', 'glLoadTransposeMatrixd', +'glMultTransposeMatrixf', 'glMultTransposeMatrixd', 'glSampleCoverage', +'glCompressedTexImage3D', 'glCompressedTexImage2D', 'glCompressedTexImage1D', +'glCompressedTexSubImage3D', 'glCompressedTexSubImage2D', +'glCompressedTexSubImage1D', 'glGetCompressedTexImage', +'PFNGLACTIVETEXTUREPROC', 'PFNGLCLIENTACTIVETEXTUREPROC', +'PFNGLMULTITEXCOORD1DPROC', 'PFNGLMULTITEXCOORD1DVPROC', +'PFNGLMULTITEXCOORD1FPROC', 'PFNGLMULTITEXCOORD1FVPROC', +'PFNGLMULTITEXCOORD1IPROC', 'PFNGLMULTITEXCOORD1IVPROC', +'PFNGLMULTITEXCOORD1SPROC', 'PFNGLMULTITEXCOORD1SVPROC', +'PFNGLMULTITEXCOORD2DPROC', 'PFNGLMULTITEXCOORD2DVPROC', +'PFNGLMULTITEXCOORD2FPROC', 'PFNGLMULTITEXCOORD2FVPROC', +'PFNGLMULTITEXCOORD2IPROC', 'PFNGLMULTITEXCOORD2IVPROC', +'PFNGLMULTITEXCOORD2SPROC', 'PFNGLMULTITEXCOORD2SVPROC', +'PFNGLMULTITEXCOORD3DPROC', 'PFNGLMULTITEXCOORD3DVPROC', +'PFNGLMULTITEXCOORD3FPROC', 'PFNGLMULTITEXCOORD3FVPROC', +'PFNGLMULTITEXCOORD3IPROC', 'PFNGLMULTITEXCOORD3IVPROC', +'PFNGLMULTITEXCOORD3SPROC', 'PFNGLMULTITEXCOORD3SVPROC', +'PFNGLMULTITEXCOORD4DPROC', 'PFNGLMULTITEXCOORD4DVPROC', +'PFNGLMULTITEXCOORD4FPROC', 'PFNGLMULTITEXCOORD4FVPROC', +'PFNGLMULTITEXCOORD4IPROC', 'PFNGLMULTITEXCOORD4IVPROC', +'PFNGLMULTITEXCOORD4SPROC', 'PFNGLMULTITEXCOORD4SVPROC', +'PFNGLLOADTRANSPOSEMATRIXFPROC', 'PFNGLLOADTRANSPOSEMATRIXDPROC', +'PFNGLMULTTRANSPOSEMATRIXFPROC', 'PFNGLMULTTRANSPOSEMATRIXDPROC', +'PFNGLSAMPLECOVERAGEPROC', 'PFNGLCOMPRESSEDTEXIMAGE3DPROC', +'PFNGLCOMPRESSEDTEXIMAGE2DPROC', 'PFNGLCOMPRESSEDTEXIMAGE1DPROC', +'PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC', 'PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC', +'PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC', 'PFNGLGETCOMPRESSEDTEXIMAGEPROC', +'GL_VERSION_1_4', 'glBlendFuncSeparate', 'glFogCoordf', 'glFogCoordfv', +'glFogCoordd', 'glFogCoorddv', 'glFogCoordPointer', 'glMultiDrawArrays', +'glMultiDrawElements', 'glPointParameterf', 'glPointParameterfv', +'glPointParameteri', 'glPointParameteriv', 'glSecondaryColor3b', +'glSecondaryColor3bv', 'glSecondaryColor3d', 'glSecondaryColor3dv', +'glSecondaryColor3f', 'glSecondaryColor3fv', 'glSecondaryColor3i', +'glSecondaryColor3iv', 'glSecondaryColor3s', 'glSecondaryColor3sv', +'glSecondaryColor3ub', 'glSecondaryColor3ubv', 'glSecondaryColor3ui', +'glSecondaryColor3uiv', 'glSecondaryColor3us', 'glSecondaryColor3usv', +'glSecondaryColorPointer', 'glWindowPos2d', 'glWindowPos2dv', 'glWindowPos2f', +'glWindowPos2fv', 'glWindowPos2i', 'glWindowPos2iv', 'glWindowPos2s', +'glWindowPos2sv', 'glWindowPos3d', 'glWindowPos3dv', 'glWindowPos3f', +'glWindowPos3fv', 'glWindowPos3i', 'glWindowPos3iv', 'glWindowPos3s', +'glWindowPos3sv', 'PFNGLBLENDFUNCSEPARATEPROC', 'PFNGLFOGCOORDFPROC', +'PFNGLFOGCOORDFVPROC', 'PFNGLFOGCOORDDPROC', 'PFNGLFOGCOORDDVPROC', +'PFNGLFOGCOORDPOINTERPROC', 'PFNGLMULTIDRAWARRAYSPROC', +'PFNGLMULTIDRAWELEMENTSPROC', 'PFNGLPOINTPARAMETERFPROC', +'PFNGLPOINTPARAMETERFVPROC', 'PFNGLPOINTPARAMETERIPROC', +'PFNGLPOINTPARAMETERIVPROC', 'PFNGLSECONDARYCOLOR3BPROC', +'PFNGLSECONDARYCOLOR3BVPROC', 'PFNGLSECONDARYCOLOR3DPROC', +'PFNGLSECONDARYCOLOR3DVPROC', 'PFNGLSECONDARYCOLOR3FPROC', +'PFNGLSECONDARYCOLOR3FVPROC', 'PFNGLSECONDARYCOLOR3IPROC', +'PFNGLSECONDARYCOLOR3IVPROC', 'PFNGLSECONDARYCOLOR3SPROC', +'PFNGLSECONDARYCOLOR3SVPROC', 'PFNGLSECONDARYCOLOR3UBPROC', +'PFNGLSECONDARYCOLOR3UBVPROC', 'PFNGLSECONDARYCOLOR3UIPROC', +'PFNGLSECONDARYCOLOR3UIVPROC', 'PFNGLSECONDARYCOLOR3USPROC', +'PFNGLSECONDARYCOLOR3USVPROC', 'PFNGLSECONDARYCOLORPOINTERPROC', +'PFNGLWINDOWPOS2DPROC', 'PFNGLWINDOWPOS2DVPROC', 'PFNGLWINDOWPOS2FPROC', +'PFNGLWINDOWPOS2FVPROC', 'PFNGLWINDOWPOS2IPROC', 'PFNGLWINDOWPOS2IVPROC', +'PFNGLWINDOWPOS2SPROC', 'PFNGLWINDOWPOS2SVPROC', 'PFNGLWINDOWPOS3DPROC', +'PFNGLWINDOWPOS3DVPROC', 'PFNGLWINDOWPOS3FPROC', 'PFNGLWINDOWPOS3FVPROC', +'PFNGLWINDOWPOS3IPROC', 'PFNGLWINDOWPOS3IVPROC', 'PFNGLWINDOWPOS3SPROC', +'PFNGLWINDOWPOS3SVPROC', 'GL_VERSION_1_5', 'glGenQueries', 'glDeleteQueries', +'glIsQuery', 'glBeginQuery', 'glEndQuery', 'glGetQueryiv', +'glGetQueryObjectiv', 'glGetQueryObjectuiv', 'glBindBuffer', +'glDeleteBuffers', 'glGenBuffers', 'glIsBuffer', 'glBufferData', +'glBufferSubData', 'glGetBufferSubData', 'glMapBuffer', 'glUnmapBuffer', +'glGetBufferParameteriv', 'glGetBufferPointerv', 'PFNGLGENQUERIESPROC', +'PFNGLDELETEQUERIESPROC', 'PFNGLISQUERYPROC', 'PFNGLBEGINQUERYPROC', +'PFNGLENDQUERYPROC', 'PFNGLGETQUERYIVPROC', 'PFNGLGETQUERYOBJECTIVPROC', +'PFNGLGETQUERYOBJECTUIVPROC', 'PFNGLBINDBUFFERPROC', 'PFNGLDELETEBUFFERSPROC', +'PFNGLGENBUFFERSPROC', 'PFNGLISBUFFERPROC', 'PFNGLBUFFERDATAPROC', +'PFNGLBUFFERSUBDATAPROC', 'PFNGLGETBUFFERSUBDATAPROC', 'PFNGLMAPBUFFERPROC', +'PFNGLUNMAPBUFFERPROC', 'PFNGLGETBUFFERPARAMETERIVPROC', +'PFNGLGETBUFFERPOINTERVPROC', 'GL_VERSION_2_0', 'glBlendEquationSeparate', +'glDrawBuffers', 'glStencilOpSeparate', 'glStencilFuncSeparate', +'glStencilMaskSeparate', 'glAttachShader', 'glBindAttribLocation', +'glCompileShader', 'glCreateProgram', 'glCreateShader', 'glDeleteProgram', +'glDeleteShader', 'glDetachShader', 'glDisableVertexAttribArray', +'glEnableVertexAttribArray', 'glGetActiveAttrib', 'glGetActiveUniform', +'glGetAttachedShaders', 'glGetAttribLocation', 'glGetProgramiv', +'glGetProgramInfoLog', 'glGetShaderiv', 'glGetShaderInfoLog', +'glGetShaderSource', 'glGetUniformLocation', 'glGetUniformfv', +'glGetUniformiv', 'glGetVertexAttribdv', 'glGetVertexAttribfv', +'glGetVertexAttribiv', 'glGetVertexAttribPointerv', 'glIsProgram', +'glIsShader', 'glLinkProgram', 'glShaderSource', 'glUseProgram', +'glUniform1f', 'glUniform2f', 'glUniform3f', 'glUniform4f', 'glUniform1i', +'glUniform2i', 'glUniform3i', 'glUniform4i', 'glUniform1fv', 'glUniform2fv', +'glUniform3fv', 'glUniform4fv', 'glUniform1iv', 'glUniform2iv', +'glUniform3iv', 'glUniform4iv', 'glUniformMatrix2fv', 'glUniformMatrix3fv', +'glUniformMatrix4fv', 'glValidateProgram', 'glVertexAttrib1d', +'glVertexAttrib1dv', 'glVertexAttrib1f', 'glVertexAttrib1fv', +'glVertexAttrib1s', 'glVertexAttrib1sv', 'glVertexAttrib2d', +'glVertexAttrib2dv', 'glVertexAttrib2f', 'glVertexAttrib2fv', +'glVertexAttrib2s', 'glVertexAttrib2sv', 'glVertexAttrib3d', +'glVertexAttrib3dv', 'glVertexAttrib3f', 'glVertexAttrib3fv', +'glVertexAttrib3s', 'glVertexAttrib3sv', 'glVertexAttrib4Nbv', +'glVertexAttrib4Niv', 'glVertexAttrib4Nsv', 'glVertexAttrib4Nub', +'glVertexAttrib4Nubv', 'glVertexAttrib4Nuiv', 'glVertexAttrib4Nusv', +'glVertexAttrib4bv', 'glVertexAttrib4d', 'glVertexAttrib4dv', +'glVertexAttrib4f', 'glVertexAttrib4fv', 'glVertexAttrib4iv', +'glVertexAttrib4s', 'glVertexAttrib4sv', 'glVertexAttrib4ubv', +'glVertexAttrib4uiv', 'glVertexAttrib4usv', 'glVertexAttribPointer', +'PFNGLBLENDEQUATIONSEPARATEPROC', 'PFNGLDRAWBUFFERSPROC', +'PFNGLSTENCILOPSEPARATEPROC', 'PFNGLSTENCILFUNCSEPARATEPROC', +'PFNGLSTENCILMASKSEPARATEPROC', 'PFNGLATTACHSHADERPROC', +'PFNGLBINDATTRIBLOCATIONPROC', 'PFNGLCOMPILESHADERPROC', +'PFNGLCREATEPROGRAMPROC', 'PFNGLCREATESHADERPROC', 'PFNGLDELETEPROGRAMPROC', +'PFNGLDELETESHADERPROC', 'PFNGLDETACHSHADERPROC', +'PFNGLDISABLEVERTEXATTRIBARRAYPROC', 'PFNGLENABLEVERTEXATTRIBARRAYPROC', +'PFNGLGETACTIVEATTRIBPROC', 'PFNGLGETACTIVEUNIFORMPROC', +'PFNGLGETATTACHEDSHADERSPROC', 'PFNGLGETATTRIBLOCATIONPROC', +'PFNGLGETPROGRAMIVPROC', 'PFNGLGETPROGRAMINFOLOGPROC', 'PFNGLGETSHADERIVPROC', +'PFNGLGETSHADERINFOLOGPROC', 'PFNGLGETSHADERSOURCEPROC', +'PFNGLGETUNIFORMLOCATIONPROC', 'PFNGLGETUNIFORMFVPROC', +'PFNGLGETUNIFORMIVPROC', 'PFNGLGETVERTEXATTRIBDVPROC', +'PFNGLGETVERTEXATTRIBFVPROC', 'PFNGLGETVERTEXATTRIBIVPROC', +'PFNGLGETVERTEXATTRIBPOINTERVPROC', 'PFNGLISPROGRAMPROC', 'PFNGLISSHADERPROC', +'PFNGLLINKPROGRAMPROC', 'PFNGLSHADERSOURCEPROC', 'PFNGLUSEPROGRAMPROC', +'PFNGLUNIFORM1FPROC', 'PFNGLUNIFORM2FPROC', 'PFNGLUNIFORM3FPROC', +'PFNGLUNIFORM4FPROC', 'PFNGLUNIFORM1IPROC', 'PFNGLUNIFORM2IPROC', +'PFNGLUNIFORM3IPROC', 'PFNGLUNIFORM4IPROC', 'PFNGLUNIFORM1FVPROC', +'PFNGLUNIFORM2FVPROC', 'PFNGLUNIFORM3FVPROC', 'PFNGLUNIFORM4FVPROC', +'PFNGLUNIFORM1IVPROC', 'PFNGLUNIFORM2IVPROC', 'PFNGLUNIFORM3IVPROC', +'PFNGLUNIFORM4IVPROC', 'PFNGLUNIFORMMATRIX2FVPROC', +'PFNGLUNIFORMMATRIX3FVPROC', 'PFNGLUNIFORMMATRIX4FVPROC', +'PFNGLVALIDATEPROGRAMPROC', 'PFNGLVERTEXATTRIB1DPROC', +'PFNGLVERTEXATTRIB1DVPROC', 'PFNGLVERTEXATTRIB1FPROC', +'PFNGLVERTEXATTRIB1FVPROC', 'PFNGLVERTEXATTRIB1SPROC', +'PFNGLVERTEXATTRIB1SVPROC', 'PFNGLVERTEXATTRIB2DPROC', +'PFNGLVERTEXATTRIB2DVPROC', 'PFNGLVERTEXATTRIB2FPROC', +'PFNGLVERTEXATTRIB2FVPROC', 'PFNGLVERTEXATTRIB2SPROC', +'PFNGLVERTEXATTRIB2SVPROC', 'PFNGLVERTEXATTRIB3DPROC', +'PFNGLVERTEXATTRIB3DVPROC', 'PFNGLVERTEXATTRIB3FPROC', +'PFNGLVERTEXATTRIB3FVPROC', 'PFNGLVERTEXATTRIB3SPROC', +'PFNGLVERTEXATTRIB3SVPROC', 'PFNGLVERTEXATTRIB4NBVPROC', +'PFNGLVERTEXATTRIB4NIVPROC', 'PFNGLVERTEXATTRIB4NSVPROC', +'PFNGLVERTEXATTRIB4NUBPROC', 'PFNGLVERTEXATTRIB4NUBVPROC', +'PFNGLVERTEXATTRIB4NUIVPROC', 'PFNGLVERTEXATTRIB4NUSVPROC', +'PFNGLVERTEXATTRIB4BVPROC', 'PFNGLVERTEXATTRIB4DPROC', +'PFNGLVERTEXATTRIB4DVPROC', 'PFNGLVERTEXATTRIB4FPROC', +'PFNGLVERTEXATTRIB4FVPROC', 'PFNGLVERTEXATTRIB4IVPROC', +'PFNGLVERTEXATTRIB4SPROC', 'PFNGLVERTEXATTRIB4SVPROC', +'PFNGLVERTEXATTRIB4UBVPROC', 'PFNGLVERTEXATTRIB4UIVPROC', +'PFNGLVERTEXATTRIB4USVPROC', 'PFNGLVERTEXATTRIBPOINTERPROC', +'GL_ARB_multitexture', 'glActiveTextureARB', 'glClientActiveTextureARB', +'glMultiTexCoord1dARB', 'glMultiTexCoord1dvARB', 'glMultiTexCoord1fARB', +'glMultiTexCoord1fvARB', 'glMultiTexCoord1iARB', 'glMultiTexCoord1ivARB', +'glMultiTexCoord1sARB', 'glMultiTexCoord1svARB', 'glMultiTexCoord2dARB', +'glMultiTexCoord2dvARB', 'glMultiTexCoord2fARB', 'glMultiTexCoord2fvARB', +'glMultiTexCoord2iARB', 'glMultiTexCoord2ivARB', 'glMultiTexCoord2sARB', +'glMultiTexCoord2svARB', 'glMultiTexCoord3dARB', 'glMultiTexCoord3dvARB', +'glMultiTexCoord3fARB', 'glMultiTexCoord3fvARB', 'glMultiTexCoord3iARB', +'glMultiTexCoord3ivARB', 'glMultiTexCoord3sARB', 'glMultiTexCoord3svARB', +'glMultiTexCoord4dARB', 'glMultiTexCoord4dvARB', 'glMultiTexCoord4fARB', +'glMultiTexCoord4fvARB', 'glMultiTexCoord4iARB', 'glMultiTexCoord4ivARB', +'glMultiTexCoord4sARB', 'glMultiTexCoord4svARB', 'PFNGLACTIVETEXTUREARBPROC', +'PFNGLCLIENTACTIVETEXTUREARBPROC', 'PFNGLMULTITEXCOORD1DARBPROC', +'PFNGLMULTITEXCOORD1DVARBPROC', 'PFNGLMULTITEXCOORD1FARBPROC', +'PFNGLMULTITEXCOORD1FVARBPROC', 'PFNGLMULTITEXCOORD1IARBPROC', +'PFNGLMULTITEXCOORD1IVARBPROC', 'PFNGLMULTITEXCOORD1SARBPROC', +'PFNGLMULTITEXCOORD1SVARBPROC', 'PFNGLMULTITEXCOORD2DARBPROC', +'PFNGLMULTITEXCOORD2DVARBPROC', 'PFNGLMULTITEXCOORD2FARBPROC', +'PFNGLMULTITEXCOORD2FVARBPROC', 'PFNGLMULTITEXCOORD2IARBPROC', +'PFNGLMULTITEXCOORD2IVARBPROC', 'PFNGLMULTITEXCOORD2SARBPROC', +'PFNGLMULTITEXCOORD2SVARBPROC', 'PFNGLMULTITEXCOORD3DARBPROC', +'PFNGLMULTITEXCOORD3DVARBPROC', 'PFNGLMULTITEXCOORD3FARBPROC', +'PFNGLMULTITEXCOORD3FVARBPROC', 'PFNGLMULTITEXCOORD3IARBPROC', +'PFNGLMULTITEXCOORD3IVARBPROC', 'PFNGLMULTITEXCOORD3SARBPROC', +'PFNGLMULTITEXCOORD3SVARBPROC', 'PFNGLMULTITEXCOORD4DARBPROC', +'PFNGLMULTITEXCOORD4DVARBPROC', 'PFNGLMULTITEXCOORD4FARBPROC', +'PFNGLMULTITEXCOORD4FVARBPROC', 'PFNGLMULTITEXCOORD4IARBPROC', +'PFNGLMULTITEXCOORD4IVARBPROC', 'PFNGLMULTITEXCOORD4SARBPROC', +'PFNGLMULTITEXCOORD4SVARBPROC', 'GL_ARB_transpose_matrix', +'glLoadTransposeMatrixfARB', 'glLoadTransposeMatrixdARB', +'glMultTransposeMatrixfARB', 'glMultTransposeMatrixdARB', +'PFNGLLOADTRANSPOSEMATRIXFARBPROC', 'PFNGLLOADTRANSPOSEMATRIXDARBPROC', +'PFNGLMULTTRANSPOSEMATRIXFARBPROC', 'PFNGLMULTTRANSPOSEMATRIXDARBPROC', +'GL_ARB_multisample', 'glSampleCoverageARB', 'PFNGLSAMPLECOVERAGEARBPROC', +'GL_ARB_texture_env_add', 'GL_ARB_texture_cube_map', +'GL_ARB_texture_compression', 'glCompressedTexImage3DARB', +'glCompressedTexImage2DARB', 'glCompressedTexImage1DARB', +'glCompressedTexSubImage3DARB', 'glCompressedTexSubImage2DARB', +'glCompressedTexSubImage1DARB', 'glGetCompressedTexImageARB', +'PFNGLCOMPRESSEDTEXIMAGE3DARBPROC', 'PFNGLCOMPRESSEDTEXIMAGE2DARBPROC', +'PFNGLCOMPRESSEDTEXIMAGE1DARBPROC', 'PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC', +'PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC', 'PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC', +'PFNGLGETCOMPRESSEDTEXIMAGEARBPROC', 'GL_ARB_texture_border_clamp', +'GL_ARB_point_parameters', 'glPointParameterfARB', 'glPointParameterfvARB', +'PFNGLPOINTPARAMETERFARBPROC', 'PFNGLPOINTPARAMETERFVARBPROC', +'GL_ARB_vertex_blend', 'glWeightbvARB', 'glWeightsvARB', 'glWeightivARB', +'glWeightfvARB', 'glWeightdvARB', 'glWeightubvARB', 'glWeightusvARB', +'glWeightuivARB', 'glWeightPointerARB', 'glVertexBlendARB', +'PFNGLWEIGHTBVARBPROC', 'PFNGLWEIGHTSVARBPROC', 'PFNGLWEIGHTIVARBPROC', +'PFNGLWEIGHTFVARBPROC', 'PFNGLWEIGHTDVARBPROC', 'PFNGLWEIGHTUBVARBPROC', +'PFNGLWEIGHTUSVARBPROC', 'PFNGLWEIGHTUIVARBPROC', 'PFNGLWEIGHTPOINTERARBPROC', +'PFNGLVERTEXBLENDARBPROC', 'GL_ARB_matrix_palette', +'glCurrentPaletteMatrixARB', 'glMatrixIndexubvARB', 'glMatrixIndexusvARB', +'glMatrixIndexuivARB', 'glMatrixIndexPointerARB', +'PFNGLCURRENTPALETTEMATRIXARBPROC', 'PFNGLMATRIXINDEXUBVARBPROC', +'PFNGLMATRIXINDEXUSVARBPROC', 'PFNGLMATRIXINDEXUIVARBPROC', +'PFNGLMATRIXINDEXPOINTERARBPROC', 'GL_ARB_texture_env_combine', +'GL_ARB_texture_env_crossbar', 'GL_ARB_texture_env_dot3', +'GL_ARB_texture_mirrored_repeat', 'GL_ARB_depth_texture', 'GL_ARB_shadow', +'GL_ARB_shadow_ambient', 'GL_ARB_window_pos', 'glWindowPos2dARB', +'glWindowPos2dvARB', 'glWindowPos2fARB', 'glWindowPos2fvARB', +'glWindowPos2iARB', 'glWindowPos2ivARB', 'glWindowPos2sARB', +'glWindowPos2svARB', 'glWindowPos3dARB', 'glWindowPos3dvARB', +'glWindowPos3fARB', 'glWindowPos3fvARB', 'glWindowPos3iARB', +'glWindowPos3ivARB', 'glWindowPos3sARB', 'glWindowPos3svARB', +'PFNGLWINDOWPOS2DARBPROC', 'PFNGLWINDOWPOS2DVARBPROC', +'PFNGLWINDOWPOS2FARBPROC', 'PFNGLWINDOWPOS2FVARBPROC', +'PFNGLWINDOWPOS2IARBPROC', 'PFNGLWINDOWPOS2IVARBPROC', +'PFNGLWINDOWPOS2SARBPROC', 'PFNGLWINDOWPOS2SVARBPROC', +'PFNGLWINDOWPOS3DARBPROC', 'PFNGLWINDOWPOS3DVARBPROC', +'PFNGLWINDOWPOS3FARBPROC', 'PFNGLWINDOWPOS3FVARBPROC', +'PFNGLWINDOWPOS3IARBPROC', 'PFNGLWINDOWPOS3IVARBPROC', +'PFNGLWINDOWPOS3SARBPROC', 'PFNGLWINDOWPOS3SVARBPROC', +'GL_ARB_vertex_program', 'glVertexAttrib1dARB', 'glVertexAttrib1dvARB', +'glVertexAttrib1fARB', 'glVertexAttrib1fvARB', 'glVertexAttrib1sARB', +'glVertexAttrib1svARB', 'glVertexAttrib2dARB', 'glVertexAttrib2dvARB', +'glVertexAttrib2fARB', 'glVertexAttrib2fvARB', 'glVertexAttrib2sARB', +'glVertexAttrib2svARB', 'glVertexAttrib3dARB', 'glVertexAttrib3dvARB', +'glVertexAttrib3fARB', 'glVertexAttrib3fvARB', 'glVertexAttrib3sARB', +'glVertexAttrib3svARB', 'glVertexAttrib4NbvARB', 'glVertexAttrib4NivARB', +'glVertexAttrib4NsvARB', 'glVertexAttrib4NubARB', 'glVertexAttrib4NubvARB', +'glVertexAttrib4NuivARB', 'glVertexAttrib4NusvARB', 'glVertexAttrib4bvARB', +'glVertexAttrib4dARB', 'glVertexAttrib4dvARB', 'glVertexAttrib4fARB', +'glVertexAttrib4fvARB', 'glVertexAttrib4ivARB', 'glVertexAttrib4sARB', +'glVertexAttrib4svARB', 'glVertexAttrib4ubvARB', 'glVertexAttrib4uivARB', +'glVertexAttrib4usvARB', 'glVertexAttribPointerARB', +'glEnableVertexAttribArrayARB', 'glDisableVertexAttribArrayARB', +'glProgramStringARB', 'glBindProgramARB', 'glDeleteProgramsARB', +'glGenProgramsARB', 'glProgramEnvParameter4dARB', +'glProgramEnvParameter4dvARB', 'glProgramEnvParameter4fARB', +'glProgramEnvParameter4fvARB', 'glProgramLocalParameter4dARB', +'glProgramLocalParameter4dvARB', 'glProgramLocalParameter4fARB', +'glProgramLocalParameter4fvARB', 'glGetProgramEnvParameterdvARB', +'glGetProgramEnvParameterfvARB', 'glGetProgramLocalParameterdvARB', +'glGetProgramLocalParameterfvARB', 'glGetProgramivARB', +'glGetProgramStringARB', 'glGetVertexAttribdvARB', 'glGetVertexAttribfvARB', +'glGetVertexAttribivARB', 'glGetVertexAttribPointervARB', 'glIsProgramARB', +'PFNGLVERTEXATTRIB1DARBPROC', 'PFNGLVERTEXATTRIB1DVARBPROC', +'PFNGLVERTEXATTRIB1FARBPROC', 'PFNGLVERTEXATTRIB1FVARBPROC', +'PFNGLVERTEXATTRIB1SARBPROC', 'PFNGLVERTEXATTRIB1SVARBPROC', +'PFNGLVERTEXATTRIB2DARBPROC', 'PFNGLVERTEXATTRIB2DVARBPROC', +'PFNGLVERTEXATTRIB2FARBPROC', 'PFNGLVERTEXATTRIB2FVARBPROC', +'PFNGLVERTEXATTRIB2SARBPROC', 'PFNGLVERTEXATTRIB2SVARBPROC', +'PFNGLVERTEXATTRIB3DARBPROC', 'PFNGLVERTEXATTRIB3DVARBPROC', +'PFNGLVERTEXATTRIB3FARBPROC', 'PFNGLVERTEXATTRIB3FVARBPROC', +'PFNGLVERTEXATTRIB3SARBPROC', 'PFNGLVERTEXATTRIB3SVARBPROC', +'PFNGLVERTEXATTRIB4NBVARBPROC', 'PFNGLVERTEXATTRIB4NIVARBPROC', +'PFNGLVERTEXATTRIB4NSVARBPROC', 'PFNGLVERTEXATTRIB4NUBARBPROC', +'PFNGLVERTEXATTRIB4NUBVARBPROC', 'PFNGLVERTEXATTRIB4NUIVARBPROC', +'PFNGLVERTEXATTRIB4NUSVARBPROC', 'PFNGLVERTEXATTRIB4BVARBPROC', +'PFNGLVERTEXATTRIB4DARBPROC', 'PFNGLVERTEXATTRIB4DVARBPROC', +'PFNGLVERTEXATTRIB4FARBPROC', 'PFNGLVERTEXATTRIB4FVARBPROC', +'PFNGLVERTEXATTRIB4IVARBPROC', 'PFNGLVERTEXATTRIB4SARBPROC', +'PFNGLVERTEXATTRIB4SVARBPROC', 'PFNGLVERTEXATTRIB4UBVARBPROC', +'PFNGLVERTEXATTRIB4UIVARBPROC', 'PFNGLVERTEXATTRIB4USVARBPROC', +'PFNGLVERTEXATTRIBPOINTERARBPROC', 'PFNGLENABLEVERTEXATTRIBARRAYARBPROC', +'PFNGLDISABLEVERTEXATTRIBARRAYARBPROC', 'PFNGLPROGRAMSTRINGARBPROC', +'PFNGLBINDPROGRAMARBPROC', 'PFNGLDELETEPROGRAMSARBPROC', +'PFNGLGENPROGRAMSARBPROC', 'PFNGLPROGRAMENVPARAMETER4DARBPROC', +'PFNGLPROGRAMENVPARAMETER4DVARBPROC', 'PFNGLPROGRAMENVPARAMETER4FARBPROC', +'PFNGLPROGRAMENVPARAMETER4FVARBPROC', 'PFNGLPROGRAMLOCALPARAMETER4DARBPROC', +'PFNGLPROGRAMLOCALPARAMETER4DVARBPROC', 'PFNGLPROGRAMLOCALPARAMETER4FARBPROC', +'PFNGLPROGRAMLOCALPARAMETER4FVARBPROC', +'PFNGLGETPROGRAMENVPARAMETERDVARBPROC', +'PFNGLGETPROGRAMENVPARAMETERFVARBPROC', +'PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC', +'PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC', 'PFNGLGETPROGRAMIVARBPROC', +'PFNGLGETPROGRAMSTRINGARBPROC', 'PFNGLGETVERTEXATTRIBDVARBPROC', +'PFNGLGETVERTEXATTRIBFVARBPROC', 'PFNGLGETVERTEXATTRIBIVARBPROC', +'PFNGLGETVERTEXATTRIBPOINTERVARBPROC', 'PFNGLISPROGRAMARBPROC', +'GL_ARB_fragment_program', 'GL_ARB_vertex_buffer_object', 'glBindBufferARB', +'glDeleteBuffersARB', 'glGenBuffersARB', 'glIsBufferARB', 'glBufferDataARB', +'glBufferSubDataARB', 'glGetBufferSubDataARB', 'glMapBufferARB', +'glUnmapBufferARB', 'glGetBufferParameterivARB', 'glGetBufferPointervARB', +'PFNGLBINDBUFFERARBPROC', 'PFNGLDELETEBUFFERSARBPROC', +'PFNGLGENBUFFERSARBPROC', 'PFNGLISBUFFERARBPROC', 'PFNGLBUFFERDATAARBPROC', +'PFNGLBUFFERSUBDATAARBPROC', 'PFNGLGETBUFFERSUBDATAARBPROC', +'PFNGLMAPBUFFERARBPROC', 'PFNGLUNMAPBUFFERARBPROC', +'PFNGLGETBUFFERPARAMETERIVARBPROC', 'PFNGLGETBUFFERPOINTERVARBPROC', +'GL_ARB_occlusion_query', 'glGenQueriesARB', 'glDeleteQueriesARB', +'glIsQueryARB', 'glBeginQueryARB', 'glEndQueryARB', 'glGetQueryivARB', +'glGetQueryObjectivARB', 'glGetQueryObjectuivARB', 'PFNGLGENQUERIESARBPROC', +'PFNGLDELETEQUERIESARBPROC', 'PFNGLISQUERYARBPROC', 'PFNGLBEGINQUERYARBPROC', +'PFNGLENDQUERYARBPROC', 'PFNGLGETQUERYIVARBPROC', +'PFNGLGETQUERYOBJECTIVARBPROC', 'PFNGLGETQUERYOBJECTUIVARBPROC', +'GL_ARB_shader_objects', 'glDeleteObjectARB', 'glGetHandleARB', +'glDetachObjectARB', 'glCreateShaderObjectARB', 'glShaderSourceARB', +'glCompileShaderARB', 'glCreateProgramObjectARB', 'glAttachObjectARB', +'glLinkProgramARB', 'glUseProgramObjectARB', 'glValidateProgramARB', +'glUniform1fARB', 'glUniform2fARB', 'glUniform3fARB', 'glUniform4fARB', +'glUniform1iARB', 'glUniform2iARB', 'glUniform3iARB', 'glUniform4iARB', +'glUniform1fvARB', 'glUniform2fvARB', 'glUniform3fvARB', 'glUniform4fvARB', +'glUniform1ivARB', 'glUniform2ivARB', 'glUniform3ivARB', 'glUniform4ivARB', +'glUniformMatrix2fvARB', 'glUniformMatrix3fvARB', 'glUniformMatrix4fvARB', +'glGetObjectParameterfvARB', 'glGetObjectParameterivARB', 'glGetInfoLogARB', +'glGetAttachedObjectsARB', 'glGetUniformLocationARB', 'glGetActiveUniformARB', +'glGetUniformfvARB', 'glGetUniformivARB', 'glGetShaderSourceARB', +'PFNGLDELETEOBJECTARBPROC', 'PFNGLGETHANDLEARBPROC', +'PFNGLDETACHOBJECTARBPROC', 'PFNGLCREATESHADEROBJECTARBPROC', +'PFNGLSHADERSOURCEARBPROC', 'PFNGLCOMPILESHADERARBPROC', +'PFNGLCREATEPROGRAMOBJECTARBPROC', 'PFNGLATTACHOBJECTARBPROC', +'PFNGLLINKPROGRAMARBPROC', 'PFNGLUSEPROGRAMOBJECTARBPROC', +'PFNGLVALIDATEPROGRAMARBPROC', 'PFNGLUNIFORM1FARBPROC', +'PFNGLUNIFORM2FARBPROC', 'PFNGLUNIFORM3FARBPROC', 'PFNGLUNIFORM4FARBPROC', +'PFNGLUNIFORM1IARBPROC', 'PFNGLUNIFORM2IARBPROC', 'PFNGLUNIFORM3IARBPROC', +'PFNGLUNIFORM4IARBPROC', 'PFNGLUNIFORM1FVARBPROC', 'PFNGLUNIFORM2FVARBPROC', +'PFNGLUNIFORM3FVARBPROC', 'PFNGLUNIFORM4FVARBPROC', 'PFNGLUNIFORM1IVARBPROC', +'PFNGLUNIFORM2IVARBPROC', 'PFNGLUNIFORM3IVARBPROC', 'PFNGLUNIFORM4IVARBPROC', +'PFNGLUNIFORMMATRIX2FVARBPROC', 'PFNGLUNIFORMMATRIX3FVARBPROC', +'PFNGLUNIFORMMATRIX4FVARBPROC', 'PFNGLGETOBJECTPARAMETERFVARBPROC', +'PFNGLGETOBJECTPARAMETERIVARBPROC', 'PFNGLGETINFOLOGARBPROC', +'PFNGLGETATTACHEDOBJECTSARBPROC', 'PFNGLGETUNIFORMLOCATIONARBPROC', +'PFNGLGETACTIVEUNIFORMARBPROC', 'PFNGLGETUNIFORMFVARBPROC', +'PFNGLGETUNIFORMIVARBPROC', 'PFNGLGETSHADERSOURCEARBPROC', +'GL_ARB_vertex_shader', 'glBindAttribLocationARB', 'glGetActiveAttribARB', +'glGetAttribLocationARB', 'PFNGLBINDATTRIBLOCATIONARBPROC', +'PFNGLGETACTIVEATTRIBARBPROC', 'PFNGLGETATTRIBLOCATIONARBPROC', +'GL_ARB_fragment_shader', 'GL_ARB_shading_language_100', +'GL_ARB_texture_non_power_of_two', 'GL_ARB_point_sprite', +'GL_ARB_fragment_program_shadow', 'GL_ARB_draw_buffers', 'glDrawBuffersARB', +'PFNGLDRAWBUFFERSARBPROC', 'GL_ARB_texture_rectangle', +'GL_ARB_color_buffer_float', 'glClampColorARB', 'PFNGLCLAMPCOLORARBPROC', +'GL_ARB_half_float_pixel', 'GL_ARB_texture_float', +'GL_ARB_pixel_buffer_object', 'GL_EXT_abgr', 'GL_EXT_blend_color', +'glBlendColorEXT', 'PFNGLBLENDCOLOREXTPROC', 'GL_EXT_polygon_offset', +'glPolygonOffsetEXT', 'PFNGLPOLYGONOFFSETEXTPROC', 'GL_EXT_texture', +'GL_EXT_texture3D', 'glTexImage3DEXT', 'glTexSubImage3DEXT', +'PFNGLTEXIMAGE3DEXTPROC', 'PFNGLTEXSUBIMAGE3DEXTPROC', +'GL_SGIS_texture_filter4', 'glGetTexFilterFuncSGIS', 'glTexFilterFuncSGIS', +'PFNGLGETTEXFILTERFUNCSGISPROC', 'PFNGLTEXFILTERFUNCSGISPROC', +'GL_EXT_subtexture', 'glTexSubImage1DEXT', 'glTexSubImage2DEXT', +'PFNGLTEXSUBIMAGE1DEXTPROC', 'PFNGLTEXSUBIMAGE2DEXTPROC', +'GL_EXT_copy_texture', 'glCopyTexImage1DEXT', 'glCopyTexImage2DEXT', +'glCopyTexSubImage1DEXT', 'glCopyTexSubImage2DEXT', 'glCopyTexSubImage3DEXT', +'PFNGLCOPYTEXIMAGE1DEXTPROC', 'PFNGLCOPYTEXIMAGE2DEXTPROC', +'PFNGLCOPYTEXSUBIMAGE1DEXTPROC', 'PFNGLCOPYTEXSUBIMAGE2DEXTPROC', +'PFNGLCOPYTEXSUBIMAGE3DEXTPROC', 'GL_EXT_histogram', 'glGetHistogramEXT', +'glGetHistogramParameterfvEXT', 'glGetHistogramParameterivEXT', +'glGetMinmaxEXT', 'glGetMinmaxParameterfvEXT', 'glGetMinmaxParameterivEXT', +'glHistogramEXT', 'glMinmaxEXT', 'glResetHistogramEXT', 'glResetMinmaxEXT', +'PFNGLGETHISTOGRAMEXTPROC', 'PFNGLGETHISTOGRAMPARAMETERFVEXTPROC', +'PFNGLGETHISTOGRAMPARAMETERIVEXTPROC', 'PFNGLGETMINMAXEXTPROC', +'PFNGLGETMINMAXPARAMETERFVEXTPROC', 'PFNGLGETMINMAXPARAMETERIVEXTPROC', +'PFNGLHISTOGRAMEXTPROC', 'PFNGLMINMAXEXTPROC', 'PFNGLRESETHISTOGRAMEXTPROC', +'PFNGLRESETMINMAXEXTPROC', 'GL_EXT_convolution', 'glConvolutionFilter1DEXT', +'glConvolutionFilter2DEXT', 'glConvolutionParameterfEXT', +'glConvolutionParameterfvEXT', 'glConvolutionParameteriEXT', +'glConvolutionParameterivEXT', 'glCopyConvolutionFilter1DEXT', +'glCopyConvolutionFilter2DEXT', 'glGetConvolutionFilterEXT', +'glGetConvolutionParameterfvEXT', 'glGetConvolutionParameterivEXT', +'glGetSeparableFilterEXT', 'glSeparableFilter2DEXT', +'PFNGLCONVOLUTIONFILTER1DEXTPROC', 'PFNGLCONVOLUTIONFILTER2DEXTPROC', +'PFNGLCONVOLUTIONPARAMETERFEXTPROC', 'PFNGLCONVOLUTIONPARAMETERFVEXTPROC', +'PFNGLCONVOLUTIONPARAMETERIEXTPROC', 'PFNGLCONVOLUTIONPARAMETERIVEXTPROC', +'PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC', 'PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC', +'PFNGLGETCONVOLUTIONFILTEREXTPROC', 'PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC', +'PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC', 'PFNGLGETSEPARABLEFILTEREXTPROC', +'PFNGLSEPARABLEFILTER2DEXTPROC', 'GL_EXT_color_matrix', 'GL_SGI_color_table', +'glColorTableSGI', 'glColorTableParameterfvSGI', 'glColorTableParameterivSGI', +'glCopyColorTableSGI', 'glGetColorTableSGI', 'glGetColorTableParameterfvSGI', +'glGetColorTableParameterivSGI', 'PFNGLCOLORTABLESGIPROC', +'PFNGLCOLORTABLEPARAMETERFVSGIPROC', 'PFNGLCOLORTABLEPARAMETERIVSGIPROC', +'PFNGLCOPYCOLORTABLESGIPROC', 'PFNGLGETCOLORTABLESGIPROC', +'PFNGLGETCOLORTABLEPARAMETERFVSGIPROC', +'PFNGLGETCOLORTABLEPARAMETERIVSGIPROC', 'GL_SGIX_pixel_texture', +'glPixelTexGenSGIX', 'PFNGLPIXELTEXGENSGIXPROC', 'GL_SGIS_pixel_texture', +'glPixelTexGenParameteriSGIS', 'glPixelTexGenParameterivSGIS', +'glPixelTexGenParameterfSGIS', 'glPixelTexGenParameterfvSGIS', +'glGetPixelTexGenParameterivSGIS', 'glGetPixelTexGenParameterfvSGIS', +'PFNGLPIXELTEXGENPARAMETERISGISPROC', 'PFNGLPIXELTEXGENPARAMETERIVSGISPROC', +'PFNGLPIXELTEXGENPARAMETERFSGISPROC', 'PFNGLPIXELTEXGENPARAMETERFVSGISPROC', +'PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC', +'PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC', 'GL_SGIS_texture4D', +'glTexImage4DSGIS', 'glTexSubImage4DSGIS', 'PFNGLTEXIMAGE4DSGISPROC', +'PFNGLTEXSUBIMAGE4DSGISPROC', 'GL_SGI_texture_color_table', 'GL_EXT_cmyka', +'GL_EXT_texture_object', 'glAreTexturesResidentEXT', 'glBindTextureEXT', +'glDeleteTexturesEXT', 'glGenTexturesEXT', 'glIsTextureEXT', +'glPrioritizeTexturesEXT', 'PFNGLARETEXTURESRESIDENTEXTPROC', +'PFNGLBINDTEXTUREEXTPROC', 'PFNGLDELETETEXTURESEXTPROC', +'PFNGLGENTEXTURESEXTPROC', 'PFNGLISTEXTUREEXTPROC', +'PFNGLPRIORITIZETEXTURESEXTPROC', 'GL_SGIS_detail_texture', +'glDetailTexFuncSGIS', 'glGetDetailTexFuncSGIS', 'PFNGLDETAILTEXFUNCSGISPROC', +'PFNGLGETDETAILTEXFUNCSGISPROC', 'GL_SGIS_sharpen_texture', +'glSharpenTexFuncSGIS', 'glGetSharpenTexFuncSGIS', +'PFNGLSHARPENTEXFUNCSGISPROC', 'PFNGLGETSHARPENTEXFUNCSGISPROC', +'GL_EXT_packed_pixels', 'GL_SGIS_texture_lod', 'GL_SGIS_multisample', +'glSampleMaskSGIS', 'glSamplePatternSGIS', 'PFNGLSAMPLEMASKSGISPROC', +'PFNGLSAMPLEPATTERNSGISPROC', 'GL_EXT_rescale_normal', 'GL_EXT_vertex_array', +'glArrayElementEXT', 'glColorPointerEXT', 'glDrawArraysEXT', +'glEdgeFlagPointerEXT', 'glGetPointervEXT', 'glIndexPointerEXT', +'glNormalPointerEXT', 'glTexCoordPointerEXT', 'glVertexPointerEXT', +'PFNGLARRAYELEMENTEXTPROC', 'PFNGLCOLORPOINTEREXTPROC', +'PFNGLDRAWARRAYSEXTPROC', 'PFNGLEDGEFLAGPOINTEREXTPROC', +'PFNGLGETPOINTERVEXTPROC', 'PFNGLINDEXPOINTEREXTPROC', +'PFNGLNORMALPOINTEREXTPROC', 'PFNGLTEXCOORDPOINTEREXTPROC', +'PFNGLVERTEXPOINTEREXTPROC', 'GL_EXT_misc_attribute', +'GL_SGIS_generate_mipmap', 'GL_SGIX_clipmap', 'GL_SGIX_shadow', +'GL_SGIS_texture_edge_clamp', 'GL_SGIS_texture_border_clamp', +'GL_EXT_blend_minmax', 'glBlendEquationEXT', 'PFNGLBLENDEQUATIONEXTPROC', +'GL_EXT_blend_subtract', 'GL_EXT_blend_logic_op', 'GL_SGIX_interlace', +'GL_SGIX_pixel_tiles', 'GL_SGIX_texture_select', 'GL_SGIX_sprite', +'glSpriteParameterfSGIX', 'glSpriteParameterfvSGIX', 'glSpriteParameteriSGIX', +'glSpriteParameterivSGIX', 'PFNGLSPRITEPARAMETERFSGIXPROC', +'PFNGLSPRITEPARAMETERFVSGIXPROC', 'PFNGLSPRITEPARAMETERISGIXPROC', +'PFNGLSPRITEPARAMETERIVSGIXPROC', 'GL_SGIX_texture_multi_buffer', +'GL_EXT_point_parameters', 'glPointParameterfEXT', 'glPointParameterfvEXT', +'PFNGLPOINTPARAMETERFEXTPROC', 'PFNGLPOINTPARAMETERFVEXTPROC', +'GL_SGIS_point_parameters', 'glPointParameterfSGIS', 'glPointParameterfvSGIS', +'PFNGLPOINTPARAMETERFSGISPROC', 'PFNGLPOINTPARAMETERFVSGISPROC', +'GL_SGIX_instruments', 'glGetInstrumentsSGIX', 'glInstrumentsBufferSGIX', +'glPollInstrumentsSGIX', 'glReadInstrumentsSGIX', 'glStartInstrumentsSGIX', +'glStopInstrumentsSGIX', 'PFNGLGETINSTRUMENTSSGIXPROC', +'PFNGLINSTRUMENTSBUFFERSGIXPROC', 'PFNGLPOLLINSTRUMENTSSGIXPROC', +'PFNGLREADINSTRUMENTSSGIXPROC', 'PFNGLSTARTINSTRUMENTSSGIXPROC', +'PFNGLSTOPINSTRUMENTSSGIXPROC', 'GL_SGIX_texture_scale_bias', +'GL_SGIX_framezoom', 'glFrameZoomSGIX', 'PFNGLFRAMEZOOMSGIXPROC', +'GL_SGIX_tag_sample_buffer', 'glTagSampleBufferSGIX', +'PFNGLTAGSAMPLEBUFFERSGIXPROC', 'GL_SGIX_polynomial_ffd', +'glDeformationMap3dSGIX', 'glDeformationMap3fSGIX', 'glDeformSGIX', +'glLoadIdentityDeformationMapSGIX', 'PFNGLDEFORMATIONMAP3DSGIXPROC', +'PFNGLDEFORMATIONMAP3FSGIXPROC', 'PFNGLDEFORMSGIXPROC', +'PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC', 'GL_SGIX_reference_plane', +'glReferencePlaneSGIX', 'PFNGLREFERENCEPLANESGIXPROC', 'GL_SGIX_flush_raster', +'glFlushRasterSGIX', 'PFNGLFLUSHRASTERSGIXPROC', 'GL_SGIX_depth_texture', +'GL_SGIS_fog_function', 'glFogFuncSGIS', 'glGetFogFuncSGIS', +'PFNGLFOGFUNCSGISPROC', 'PFNGLGETFOGFUNCSGISPROC', 'GL_SGIX_fog_offset', +'GL_HP_image_transform', 'glImageTransformParameteriHP', +'glImageTransformParameterfHP', 'glImageTransformParameterivHP', +'glImageTransformParameterfvHP', 'glGetImageTransformParameterivHP', +'glGetImageTransformParameterfvHP', 'PFNGLIMAGETRANSFORMPARAMETERIHPPROC', +'PFNGLIMAGETRANSFORMPARAMETERFHPPROC', 'PFNGLIMAGETRANSFORMPARAMETERIVHPPROC', +'PFNGLIMAGETRANSFORMPARAMETERFVHPPROC', +'PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC', +'PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC', 'GL_HP_convolution_border_modes', +'GL_SGIX_texture_add_env', 'GL_EXT_color_subtable', 'glColorSubTableEXT', +'glCopyColorSubTableEXT', 'PFNGLCOLORSUBTABLEEXTPROC', +'PFNGLCOPYCOLORSUBTABLEEXTPROC', 'GL_PGI_vertex_hints', 'GL_PGI_misc_hints', +'glHintPGI', 'PFNGLHINTPGIPROC', 'GL_EXT_paletted_texture', 'glColorTableEXT', +'glGetColorTableEXT', 'glGetColorTableParameterivEXT', +'glGetColorTableParameterfvEXT', 'PFNGLCOLORTABLEEXTPROC', +'PFNGLGETCOLORTABLEEXTPROC', 'PFNGLGETCOLORTABLEPARAMETERIVEXTPROC', +'PFNGLGETCOLORTABLEPARAMETERFVEXTPROC', 'GL_EXT_clip_volume_hint', +'GL_SGIX_list_priority', 'glGetListParameterfvSGIX', +'glGetListParameterivSGIX', 'glListParameterfSGIX', 'glListParameterfvSGIX', +'glListParameteriSGIX', 'glListParameterivSGIX', +'PFNGLGETLISTPARAMETERFVSGIXPROC', 'PFNGLGETLISTPARAMETERIVSGIXPROC', +'PFNGLLISTPARAMETERFSGIXPROC', 'PFNGLLISTPARAMETERFVSGIXPROC', +'PFNGLLISTPARAMETERISGIXPROC', 'PFNGLLISTPARAMETERIVSGIXPROC', +'GL_SGIX_ir_instrument1', 'GL_SGIX_calligraphic_fragment', +'GL_SGIX_texture_lod_bias', 'GL_SGIX_shadow_ambient', 'GL_EXT_index_texture', +'GL_EXT_index_material', 'glIndexMaterialEXT', 'PFNGLINDEXMATERIALEXTPROC', +'GL_EXT_index_func', 'glIndexFuncEXT', 'PFNGLINDEXFUNCEXTPROC', +'GL_EXT_index_array_formats', 'GL_EXT_compiled_vertex_array', +'glLockArraysEXT', 'glUnlockArraysEXT', 'PFNGLLOCKARRAYSEXTPROC', +'PFNGLUNLOCKARRAYSEXTPROC', 'GL_EXT_cull_vertex', 'glCullParameterdvEXT', +'glCullParameterfvEXT', 'PFNGLCULLPARAMETERDVEXTPROC', +'PFNGLCULLPARAMETERFVEXTPROC', 'GL_SGIX_ycrcb', 'GL_SGIX_fragment_lighting', +'glFragmentColorMaterialSGIX', 'glFragmentLightfSGIX', +'glFragmentLightfvSGIX', 'glFragmentLightiSGIX', 'glFragmentLightivSGIX', +'glFragmentLightModelfSGIX', 'glFragmentLightModelfvSGIX', +'glFragmentLightModeliSGIX', 'glFragmentLightModelivSGIX', +'glFragmentMaterialfSGIX', 'glFragmentMaterialfvSGIX', +'glFragmentMaterialiSGIX', 'glFragmentMaterialivSGIX', +'glGetFragmentLightfvSGIX', 'glGetFragmentLightivSGIX', +'glGetFragmentMaterialfvSGIX', 'glGetFragmentMaterialivSGIX', +'glLightEnviSGIX', 'PFNGLFRAGMENTCOLORMATERIALSGIXPROC', +'PFNGLFRAGMENTLIGHTFSGIXPROC', 'PFNGLFRAGMENTLIGHTFVSGIXPROC', +'PFNGLFRAGMENTLIGHTISGIXPROC', 'PFNGLFRAGMENTLIGHTIVSGIXPROC', +'PFNGLFRAGMENTLIGHTMODELFSGIXPROC', 'PFNGLFRAGMENTLIGHTMODELFVSGIXPROC', +'PFNGLFRAGMENTLIGHTMODELISGIXPROC', 'PFNGLFRAGMENTLIGHTMODELIVSGIXPROC', +'PFNGLFRAGMENTMATERIALFSGIXPROC', 'PFNGLFRAGMENTMATERIALFVSGIXPROC', +'PFNGLFRAGMENTMATERIALISGIXPROC', 'PFNGLFRAGMENTMATERIALIVSGIXPROC', +'PFNGLGETFRAGMENTLIGHTFVSGIXPROC', 'PFNGLGETFRAGMENTLIGHTIVSGIXPROC', +'PFNGLGETFRAGMENTMATERIALFVSGIXPROC', 'PFNGLGETFRAGMENTMATERIALIVSGIXPROC', +'PFNGLLIGHTENVISGIXPROC', 'GL_IBM_rasterpos_clip', 'GL_HP_texture_lighting', +'GL_EXT_draw_range_elements', 'glDrawRangeElementsEXT', +'PFNGLDRAWRANGEELEMENTSEXTPROC', 'GL_WIN_phong_shading', +'GL_WIN_specular_fog', 'GL_EXT_light_texture', 'glApplyTextureEXT', +'glTextureLightEXT', 'glTextureMaterialEXT', 'PFNGLAPPLYTEXTUREEXTPROC', +'PFNGLTEXTURELIGHTEXTPROC', 'PFNGLTEXTUREMATERIALEXTPROC', +'GL_SGIX_blend_alpha_minmax', 'GL_EXT_bgra', 'GL_SGIX_async', +'glAsyncMarkerSGIX', 'glFinishAsyncSGIX', 'glPollAsyncSGIX', +'glGenAsyncMarkersSGIX', 'glDeleteAsyncMarkersSGIX', 'glIsAsyncMarkerSGIX', +'PFNGLASYNCMARKERSGIXPROC', 'PFNGLFINISHASYNCSGIXPROC', +'PFNGLPOLLASYNCSGIXPROC', 'PFNGLGENASYNCMARKERSSGIXPROC', +'PFNGLDELETEASYNCMARKERSSGIXPROC', 'PFNGLISASYNCMARKERSGIXPROC', +'GL_SGIX_async_pixel', 'GL_SGIX_async_histogram', 'GL_INTEL_parallel_arrays', +'glVertexPointervINTEL', 'glNormalPointervINTEL', 'glColorPointervINTEL', +'glTexCoordPointervINTEL', 'PFNGLVERTEXPOINTERVINTELPROC', +'PFNGLNORMALPOINTERVINTELPROC', 'PFNGLCOLORPOINTERVINTELPROC', +'PFNGLTEXCOORDPOINTERVINTELPROC', 'GL_HP_occlusion_test', +'GL_EXT_pixel_transform', 'glPixelTransformParameteriEXT', +'glPixelTransformParameterfEXT', 'glPixelTransformParameterivEXT', +'glPixelTransformParameterfvEXT', 'PFNGLPIXELTRANSFORMPARAMETERIEXTPROC', +'PFNGLPIXELTRANSFORMPARAMETERFEXTPROC', +'PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC', +'PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC', 'GL_EXT_pixel_transform_color_table', +'GL_EXT_shared_texture_palette', 'GL_EXT_separate_specular_color', +'GL_EXT_secondary_color', 'glSecondaryColor3bEXT', 'glSecondaryColor3bvEXT', +'glSecondaryColor3dEXT', 'glSecondaryColor3dvEXT', 'glSecondaryColor3fEXT', +'glSecondaryColor3fvEXT', 'glSecondaryColor3iEXT', 'glSecondaryColor3ivEXT', +'glSecondaryColor3sEXT', 'glSecondaryColor3svEXT', 'glSecondaryColor3ubEXT', +'glSecondaryColor3ubvEXT', 'glSecondaryColor3uiEXT', +'glSecondaryColor3uivEXT', 'glSecondaryColor3usEXT', +'glSecondaryColor3usvEXT', 'glSecondaryColorPointerEXT', +'PFNGLSECONDARYCOLOR3BEXTPROC', 'PFNGLSECONDARYCOLOR3BVEXTPROC', +'PFNGLSECONDARYCOLOR3DEXTPROC', 'PFNGLSECONDARYCOLOR3DVEXTPROC', +'PFNGLSECONDARYCOLOR3FEXTPROC', 'PFNGLSECONDARYCOLOR3FVEXTPROC', +'PFNGLSECONDARYCOLOR3IEXTPROC', 'PFNGLSECONDARYCOLOR3IVEXTPROC', +'PFNGLSECONDARYCOLOR3SEXTPROC', 'PFNGLSECONDARYCOLOR3SVEXTPROC', +'PFNGLSECONDARYCOLOR3UBEXTPROC', 'PFNGLSECONDARYCOLOR3UBVEXTPROC', +'PFNGLSECONDARYCOLOR3UIEXTPROC', 'PFNGLSECONDARYCOLOR3UIVEXTPROC', +'PFNGLSECONDARYCOLOR3USEXTPROC', 'PFNGLSECONDARYCOLOR3USVEXTPROC', +'PFNGLSECONDARYCOLORPOINTEREXTPROC', 'GL_EXT_texture_perturb_normal', +'glTextureNormalEXT', 'PFNGLTEXTURENORMALEXTPROC', 'GL_EXT_multi_draw_arrays', +'glMultiDrawArraysEXT', 'glMultiDrawElementsEXT', +'PFNGLMULTIDRAWARRAYSEXTPROC', 'PFNGLMULTIDRAWELEMENTSEXTPROC', +'GL_EXT_fog_coord', 'glFogCoordfEXT', 'glFogCoordfvEXT', 'glFogCoorddEXT', +'glFogCoorddvEXT', 'glFogCoordPointerEXT', 'PFNGLFOGCOORDFEXTPROC', +'PFNGLFOGCOORDFVEXTPROC', 'PFNGLFOGCOORDDEXTPROC', 'PFNGLFOGCOORDDVEXTPROC', +'PFNGLFOGCOORDPOINTEREXTPROC', 'GL_REND_screen_coordinates', +'GL_EXT_coordinate_frame', 'glTangent3bEXT', 'glTangent3bvEXT', +'glTangent3dEXT', 'glTangent3dvEXT', 'glTangent3fEXT', 'glTangent3fvEXT', +'glTangent3iEXT', 'glTangent3ivEXT', 'glTangent3sEXT', 'glTangent3svEXT', +'glBinormal3bEXT', 'glBinormal3bvEXT', 'glBinormal3dEXT', 'glBinormal3dvEXT', +'glBinormal3fEXT', 'glBinormal3fvEXT', 'glBinormal3iEXT', 'glBinormal3ivEXT', +'glBinormal3sEXT', 'glBinormal3svEXT', 'glTangentPointerEXT', +'glBinormalPointerEXT', 'PFNGLTANGENT3BEXTPROC', 'PFNGLTANGENT3BVEXTPROC', +'PFNGLTANGENT3DEXTPROC', 'PFNGLTANGENT3DVEXTPROC', 'PFNGLTANGENT3FEXTPROC', +'PFNGLTANGENT3FVEXTPROC', 'PFNGLTANGENT3IEXTPROC', 'PFNGLTANGENT3IVEXTPROC', +'PFNGLTANGENT3SEXTPROC', 'PFNGLTANGENT3SVEXTPROC', 'PFNGLBINORMAL3BEXTPROC', +'PFNGLBINORMAL3BVEXTPROC', 'PFNGLBINORMAL3DEXTPROC', +'PFNGLBINORMAL3DVEXTPROC', 'PFNGLBINORMAL3FEXTPROC', +'PFNGLBINORMAL3FVEXTPROC', 'PFNGLBINORMAL3IEXTPROC', +'PFNGLBINORMAL3IVEXTPROC', 'PFNGLBINORMAL3SEXTPROC', +'PFNGLBINORMAL3SVEXTPROC', 'PFNGLTANGENTPOINTEREXTPROC', +'PFNGLBINORMALPOINTEREXTPROC', 'GL_EXT_texture_env_combine', +'GL_APPLE_specular_vector', 'GL_APPLE_transform_hint', 'GL_SGIX_fog_scale', +'GL_SUNX_constant_data', 'glFinishTextureSUNX', 'PFNGLFINISHTEXTURESUNXPROC', +'GL_SUN_global_alpha', 'glGlobalAlphaFactorbSUN', 'glGlobalAlphaFactorsSUN', +'glGlobalAlphaFactoriSUN', 'glGlobalAlphaFactorfSUN', +'glGlobalAlphaFactordSUN', 'glGlobalAlphaFactorubSUN', +'glGlobalAlphaFactorusSUN', 'glGlobalAlphaFactoruiSUN', +'PFNGLGLOBALALPHAFACTORBSUNPROC', 'PFNGLGLOBALALPHAFACTORSSUNPROC', +'PFNGLGLOBALALPHAFACTORISUNPROC', 'PFNGLGLOBALALPHAFACTORFSUNPROC', +'PFNGLGLOBALALPHAFACTORDSUNPROC', 'PFNGLGLOBALALPHAFACTORUBSUNPROC', +'PFNGLGLOBALALPHAFACTORUSSUNPROC', 'PFNGLGLOBALALPHAFACTORUISUNPROC', +'GL_SUN_triangle_list', 'glReplacementCodeuiSUN', 'glReplacementCodeusSUN', +'glReplacementCodeubSUN', 'glReplacementCodeuivSUN', +'glReplacementCodeusvSUN', 'glReplacementCodeubvSUN', +'glReplacementCodePointerSUN', 'PFNGLREPLACEMENTCODEUISUNPROC', +'PFNGLREPLACEMENTCODEUSSUNPROC', 'PFNGLREPLACEMENTCODEUBSUNPROC', +'PFNGLREPLACEMENTCODEUIVSUNPROC', 'PFNGLREPLACEMENTCODEUSVSUNPROC', +'PFNGLREPLACEMENTCODEUBVSUNPROC', 'PFNGLREPLACEMENTCODEPOINTERSUNPROC', +'GL_SUN_vertex', 'glColor4ubVertex2fSUN', 'glColor4ubVertex2fvSUN', +'glColor4ubVertex3fSUN', 'glColor4ubVertex3fvSUN', 'glColor3fVertex3fSUN', +'glColor3fVertex3fvSUN', 'glNormal3fVertex3fSUN', 'glNormal3fVertex3fvSUN', +'glColor4fNormal3fVertex3fSUN', 'glColor4fNormal3fVertex3fvSUN', +'glTexCoord2fVertex3fSUN', 'glTexCoord2fVertex3fvSUN', +'glTexCoord4fVertex4fSUN', 'glTexCoord4fVertex4fvSUN', +'glTexCoord2fColor4ubVertex3fSUN', 'glTexCoord2fColor4ubVertex3fvSUN', +'glTexCoord2fColor3fVertex3fSUN', 'glTexCoord2fColor3fVertex3fvSUN', +'glTexCoord2fNormal3fVertex3fSUN', 'glTexCoord2fNormal3fVertex3fvSUN', +'glTexCoord2fColor4fNormal3fVertex3fSUN', +'glTexCoord2fColor4fNormal3fVertex3fvSUN', +'glTexCoord4fColor4fNormal3fVertex4fSUN', +'glTexCoord4fColor4fNormal3fVertex4fvSUN', 'glReplacementCodeuiVertex3fSUN', +'glReplacementCodeuiVertex3fvSUN', 'glReplacementCodeuiColor4ubVertex3fSUN', +'glReplacementCodeuiColor4ubVertex3fvSUN', +'glReplacementCodeuiColor3fVertex3fSUN', +'glReplacementCodeuiColor3fVertex3fvSUN', +'glReplacementCodeuiNormal3fVertex3fSUN', +'glReplacementCodeuiNormal3fVertex3fvSUN', +'glReplacementCodeuiColor4fNormal3fVertex3fSUN', +'glReplacementCodeuiColor4fNormal3fVertex3fvSUN', +'glReplacementCodeuiTexCoord2fVertex3fSUN', +'glReplacementCodeuiTexCoord2fVertex3fvSUN', +'glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN', +'glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN', +'glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN', +'glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN', +'PFNGLCOLOR4UBVERTEX2FSUNPROC', 'PFNGLCOLOR4UBVERTEX2FVSUNPROC', +'PFNGLCOLOR4UBVERTEX3FSUNPROC', 'PFNGLCOLOR4UBVERTEX3FVSUNPROC', +'PFNGLCOLOR3FVERTEX3FSUNPROC', 'PFNGLCOLOR3FVERTEX3FVSUNPROC', +'PFNGLNORMAL3FVERTEX3FSUNPROC', 'PFNGLNORMAL3FVERTEX3FVSUNPROC', +'PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC', 'PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC', +'PFNGLTEXCOORD2FVERTEX3FSUNPROC', 'PFNGLTEXCOORD2FVERTEX3FVSUNPROC', +'PFNGLTEXCOORD4FVERTEX4FSUNPROC', 'PFNGLTEXCOORD4FVERTEX4FVSUNPROC', +'PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC', +'PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC', +'PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC', +'PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC', +'PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC', +'PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC', +'PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC', +'PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC', +'PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC', +'PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC', +'PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC', +'PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC', +'PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC', +'PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC', +'PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC', +'PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC', +'PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC', +'PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC', +'PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC', +'PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC', +'PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC', +'PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC', +'PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC', +'PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC', +'PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC', +'PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC', +'GL_EXT_blend_func_separate', 'glBlendFuncSeparateEXT', +'PFNGLBLENDFUNCSEPARATEEXTPROC', 'GL_INGR_blend_func_separate', +'glBlendFuncSeparateINGR', 'PFNGLBLENDFUNCSEPARATEINGRPROC', +'GL_INGR_color_clamp', 'GL_INGR_interlace_read', 'GL_EXT_stencil_wrap', +'GL_EXT_422_pixels', 'GL_NV_texgen_reflection', +'GL_SUN_convolution_border_modes', 'GL_EXT_texture_env_add', +'GL_EXT_texture_lod_bias', 'GL_EXT_texture_filter_anisotropic', +'GL_EXT_vertex_weighting', 'glVertexWeightfEXT', 'glVertexWeightfvEXT', +'glVertexWeightPointerEXT', 'PFNGLVERTEXWEIGHTFEXTPROC', +'PFNGLVERTEXWEIGHTFVEXTPROC', 'PFNGLVERTEXWEIGHTPOINTEREXTPROC', +'GL_NV_light_max_exponent', 'GL_NV_vertex_array_range', +'glFlushVertexArrayRangeNV', 'glVertexArrayRangeNV', +'PFNGLFLUSHVERTEXARRAYRANGENVPROC', 'PFNGLVERTEXARRAYRANGENVPROC', +'GL_NV_register_combiners', 'glCombinerParameterfvNV', +'glCombinerParameterfNV', 'glCombinerParameterivNV', 'glCombinerParameteriNV', +'glCombinerInputNV', 'glCombinerOutputNV', 'glFinalCombinerInputNV', +'glGetCombinerInputParameterfvNV', 'glGetCombinerInputParameterivNV', +'glGetCombinerOutputParameterfvNV', 'glGetCombinerOutputParameterivNV', +'glGetFinalCombinerInputParameterfvNV', +'glGetFinalCombinerInputParameterivNV', 'PFNGLCOMBINERPARAMETERFVNVPROC', +'PFNGLCOMBINERPARAMETERFNVPROC', 'PFNGLCOMBINERPARAMETERIVNVPROC', +'PFNGLCOMBINERPARAMETERINVPROC', 'PFNGLCOMBINERINPUTNVPROC', +'PFNGLCOMBINEROUTPUTNVPROC', 'PFNGLFINALCOMBINERINPUTNVPROC', +'PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC', +'PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC', +'PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC', +'PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC', +'PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC', +'PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC', 'GL_NV_fog_distance', +'GL_NV_texgen_emboss', 'GL_NV_blend_square', 'GL_NV_texture_env_combine4', +'GL_MESA_resize_buffers', 'glResizeBuffersMESA', 'PFNGLRESIZEBUFFERSMESAPROC', +'GL_MESA_window_pos', 'glWindowPos2dMESA', 'glWindowPos2dvMESA', +'glWindowPos2fMESA', 'glWindowPos2fvMESA', 'glWindowPos2iMESA', +'glWindowPos2ivMESA', 'glWindowPos2sMESA', 'glWindowPos2svMESA', +'glWindowPos3dMESA', 'glWindowPos3dvMESA', 'glWindowPos3fMESA', +'glWindowPos3fvMESA', 'glWindowPos3iMESA', 'glWindowPos3ivMESA', +'glWindowPos3sMESA', 'glWindowPos3svMESA', 'glWindowPos4dMESA', +'glWindowPos4dvMESA', 'glWindowPos4fMESA', 'glWindowPos4fvMESA', +'glWindowPos4iMESA', 'glWindowPos4ivMESA', 'glWindowPos4sMESA', +'glWindowPos4svMESA', 'PFNGLWINDOWPOS2DMESAPROC', 'PFNGLWINDOWPOS2DVMESAPROC', +'PFNGLWINDOWPOS2FMESAPROC', 'PFNGLWINDOWPOS2FVMESAPROC', +'PFNGLWINDOWPOS2IMESAPROC', 'PFNGLWINDOWPOS2IVMESAPROC', +'PFNGLWINDOWPOS2SMESAPROC', 'PFNGLWINDOWPOS2SVMESAPROC', +'PFNGLWINDOWPOS3DMESAPROC', 'PFNGLWINDOWPOS3DVMESAPROC', +'PFNGLWINDOWPOS3FMESAPROC', 'PFNGLWINDOWPOS3FVMESAPROC', +'PFNGLWINDOWPOS3IMESAPROC', 'PFNGLWINDOWPOS3IVMESAPROC', +'PFNGLWINDOWPOS3SMESAPROC', 'PFNGLWINDOWPOS3SVMESAPROC', +'PFNGLWINDOWPOS4DMESAPROC', 'PFNGLWINDOWPOS4DVMESAPROC', +'PFNGLWINDOWPOS4FMESAPROC', 'PFNGLWINDOWPOS4FVMESAPROC', +'PFNGLWINDOWPOS4IMESAPROC', 'PFNGLWINDOWPOS4IVMESAPROC', +'PFNGLWINDOWPOS4SMESAPROC', 'PFNGLWINDOWPOS4SVMESAPROC', 'GL_IBM_cull_vertex', +'GL_IBM_multimode_draw_arrays', 'glMultiModeDrawArraysIBM', +'glMultiModeDrawElementsIBM', 'PFNGLMULTIMODEDRAWARRAYSIBMPROC', +'PFNGLMULTIMODEDRAWELEMENTSIBMPROC', 'GL_IBM_vertex_array_lists', +'glColorPointerListIBM', 'glSecondaryColorPointerListIBM', +'glEdgeFlagPointerListIBM', 'glFogCoordPointerListIBM', +'glIndexPointerListIBM', 'glNormalPointerListIBM', 'glTexCoordPointerListIBM', +'glVertexPointerListIBM', 'PFNGLCOLORPOINTERLISTIBMPROC', +'PFNGLSECONDARYCOLORPOINTERLISTIBMPROC', 'PFNGLEDGEFLAGPOINTERLISTIBMPROC', +'PFNGLFOGCOORDPOINTERLISTIBMPROC', 'PFNGLINDEXPOINTERLISTIBMPROC', +'PFNGLNORMALPOINTERLISTIBMPROC', 'PFNGLTEXCOORDPOINTERLISTIBMPROC', +'PFNGLVERTEXPOINTERLISTIBMPROC', 'GL_SGIX_subsample', 'GL_SGIX_ycrcba', +'GL_SGIX_ycrcb_subsample', 'GL_SGIX_depth_pass_instrument', +'GL_3DFX_texture_compression_FXT1', 'GL_3DFX_multisample', 'GL_3DFX_tbuffer', +'glTbufferMask3DFX', 'PFNGLTBUFFERMASK3DFXPROC', 'GL_EXT_multisample', +'glSampleMaskEXT', 'glSamplePatternEXT', 'PFNGLSAMPLEMASKEXTPROC', +'PFNGLSAMPLEPATTERNEXTPROC', 'GL_SGIX_vertex_preclip', +'GL_SGIX_convolution_accuracy', 'GL_SGIX_resample', +'GL_SGIS_point_line_texgen', 'GL_SGIS_texture_color_mask', +'glTextureColorMaskSGIS', 'PFNGLTEXTURECOLORMASKSGISPROC', +'GL_SGIX_igloo_interface', 'glIglooInterfaceSGIX', +'PFNGLIGLOOINTERFACESGIXPROC', 'GL_EXT_texture_env_dot3', +'GL_ATI_texture_mirror_once', 'GL_NV_fence', 'glDeleteFencesNV', +'glGenFencesNV', 'glIsFenceNV', 'glTestFenceNV', 'glGetFenceivNV', +'glFinishFenceNV', 'glSetFenceNV', 'PFNGLDELETEFENCESNVPROC', +'PFNGLGENFENCESNVPROC', 'PFNGLISFENCENVPROC', 'PFNGLTESTFENCENVPROC', +'PFNGLGETFENCEIVNVPROC', 'PFNGLFINISHFENCENVPROC', 'PFNGLSETFENCENVPROC', +'GL_NV_evaluators', 'glMapControlPointsNV', 'glMapParameterivNV', +'glMapParameterfvNV', 'glGetMapControlPointsNV', 'glGetMapParameterivNV', +'glGetMapParameterfvNV', 'glGetMapAttribParameterivNV', +'glGetMapAttribParameterfvNV', 'glEvalMapsNV', 'PFNGLMAPCONTROLPOINTSNVPROC', +'PFNGLMAPPARAMETERIVNVPROC', 'PFNGLMAPPARAMETERFVNVPROC', +'PFNGLGETMAPCONTROLPOINTSNVPROC', 'PFNGLGETMAPPARAMETERIVNVPROC', +'PFNGLGETMAPPARAMETERFVNVPROC', 'PFNGLGETMAPATTRIBPARAMETERIVNVPROC', +'PFNGLGETMAPATTRIBPARAMETERFVNVPROC', 'PFNGLEVALMAPSNVPROC', +'GL_NV_packed_depth_stencil', 'GL_NV_register_combiners2', +'glCombinerStageParameterfvNV', 'glGetCombinerStageParameterfvNV', +'PFNGLCOMBINERSTAGEPARAMETERFVNVPROC', +'PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC', 'GL_NV_texture_compression_vtc', +'GL_NV_texture_rectangle', 'GL_NV_texture_shader', 'GL_NV_texture_shader2', +'GL_NV_vertex_array_range2', 'GL_NV_vertex_program', +'glAreProgramsResidentNV', 'glBindProgramNV', 'glDeleteProgramsNV', +'glExecuteProgramNV', 'glGenProgramsNV', 'glGetProgramParameterdvNV', +'glGetProgramParameterfvNV', 'glGetProgramivNV', 'glGetProgramStringNV', +'glGetTrackMatrixivNV', 'glGetVertexAttribdvNV', 'glGetVertexAttribfvNV', +'glGetVertexAttribivNV', 'glGetVertexAttribPointervNV', 'glIsProgramNV', +'glLoadProgramNV', 'glProgramParameter4dNV', 'glProgramParameter4dvNV', +'glProgramParameter4fNV', 'glProgramParameter4fvNV', +'glProgramParameters4dvNV', 'glProgramParameters4fvNV', +'glRequestResidentProgramsNV', 'glTrackMatrixNV', 'glVertexAttribPointerNV', +'glVertexAttrib1dNV', 'glVertexAttrib1dvNV', 'glVertexAttrib1fNV', +'glVertexAttrib1fvNV', 'glVertexAttrib1sNV', 'glVertexAttrib1svNV', +'glVertexAttrib2dNV', 'glVertexAttrib2dvNV', 'glVertexAttrib2fNV', +'glVertexAttrib2fvNV', 'glVertexAttrib2sNV', 'glVertexAttrib2svNV', +'glVertexAttrib3dNV', 'glVertexAttrib3dvNV', 'glVertexAttrib3fNV', +'glVertexAttrib3fvNV', 'glVertexAttrib3sNV', 'glVertexAttrib3svNV', +'glVertexAttrib4dNV', 'glVertexAttrib4dvNV', 'glVertexAttrib4fNV', +'glVertexAttrib4fvNV', 'glVertexAttrib4sNV', 'glVertexAttrib4svNV', +'glVertexAttrib4ubNV', 'glVertexAttrib4ubvNV', 'glVertexAttribs1dvNV', +'glVertexAttribs1fvNV', 'glVertexAttribs1svNV', 'glVertexAttribs2dvNV', +'glVertexAttribs2fvNV', 'glVertexAttribs2svNV', 'glVertexAttribs3dvNV', +'glVertexAttribs3fvNV', 'glVertexAttribs3svNV', 'glVertexAttribs4dvNV', +'glVertexAttribs4fvNV', 'glVertexAttribs4svNV', 'glVertexAttribs4ubvNV', +'PFNGLAREPROGRAMSRESIDENTNVPROC', 'PFNGLBINDPROGRAMNVPROC', +'PFNGLDELETEPROGRAMSNVPROC', 'PFNGLEXECUTEPROGRAMNVPROC', +'PFNGLGENPROGRAMSNVPROC', 'PFNGLGETPROGRAMPARAMETERDVNVPROC', +'PFNGLGETPROGRAMPARAMETERFVNVPROC', 'PFNGLGETPROGRAMIVNVPROC', +'PFNGLGETPROGRAMSTRINGNVPROC', 'PFNGLGETTRACKMATRIXIVNVPROC', +'PFNGLGETVERTEXATTRIBDVNVPROC', 'PFNGLGETVERTEXATTRIBFVNVPROC', +'PFNGLGETVERTEXATTRIBIVNVPROC', 'PFNGLGETVERTEXATTRIBPOINTERVNVPROC', +'PFNGLISPROGRAMNVPROC', 'PFNGLLOADPROGRAMNVPROC', +'PFNGLPROGRAMPARAMETER4DNVPROC', 'PFNGLPROGRAMPARAMETER4DVNVPROC', +'PFNGLPROGRAMPARAMETER4FNVPROC', 'PFNGLPROGRAMPARAMETER4FVNVPROC', +'PFNGLPROGRAMPARAMETERS4DVNVPROC', 'PFNGLPROGRAMPARAMETERS4FVNVPROC', +'PFNGLREQUESTRESIDENTPROGRAMSNVPROC', 'PFNGLTRACKMATRIXNVPROC', +'PFNGLVERTEXATTRIBPOINTERNVPROC', 'PFNGLVERTEXATTRIB1DNVPROC', +'PFNGLVERTEXATTRIB1DVNVPROC', 'PFNGLVERTEXATTRIB1FNVPROC', +'PFNGLVERTEXATTRIB1FVNVPROC', 'PFNGLVERTEXATTRIB1SNVPROC', +'PFNGLVERTEXATTRIB1SVNVPROC', 'PFNGLVERTEXATTRIB2DNVPROC', +'PFNGLVERTEXATTRIB2DVNVPROC', 'PFNGLVERTEXATTRIB2FNVPROC', +'PFNGLVERTEXATTRIB2FVNVPROC', 'PFNGLVERTEXATTRIB2SNVPROC', +'PFNGLVERTEXATTRIB2SVNVPROC', 'PFNGLVERTEXATTRIB3DNVPROC', +'PFNGLVERTEXATTRIB3DVNVPROC', 'PFNGLVERTEXATTRIB3FNVPROC', +'PFNGLVERTEXATTRIB3FVNVPROC', 'PFNGLVERTEXATTRIB3SNVPROC', +'PFNGLVERTEXATTRIB3SVNVPROC', 'PFNGLVERTEXATTRIB4DNVPROC', +'PFNGLVERTEXATTRIB4DVNVPROC', 'PFNGLVERTEXATTRIB4FNVPROC', +'PFNGLVERTEXATTRIB4FVNVPROC', 'PFNGLVERTEXATTRIB4SNVPROC', +'PFNGLVERTEXATTRIB4SVNVPROC', 'PFNGLVERTEXATTRIB4UBNVPROC', +'PFNGLVERTEXATTRIB4UBVNVPROC', 'PFNGLVERTEXATTRIBS1DVNVPROC', +'PFNGLVERTEXATTRIBS1FVNVPROC', 'PFNGLVERTEXATTRIBS1SVNVPROC', +'PFNGLVERTEXATTRIBS2DVNVPROC', 'PFNGLVERTEXATTRIBS2FVNVPROC', +'PFNGLVERTEXATTRIBS2SVNVPROC', 'PFNGLVERTEXATTRIBS3DVNVPROC', +'PFNGLVERTEXATTRIBS3FVNVPROC', 'PFNGLVERTEXATTRIBS3SVNVPROC', +'PFNGLVERTEXATTRIBS4DVNVPROC', 'PFNGLVERTEXATTRIBS4FVNVPROC', +'PFNGLVERTEXATTRIBS4SVNVPROC', 'PFNGLVERTEXATTRIBS4UBVNVPROC', +'GL_SGIX_texture_coordinate_clamp', 'GL_SGIX_scalebias_hint', +'GL_OML_interlace', 'GL_OML_subsample', 'GL_OML_resample', +'GL_NV_copy_depth_to_color', 'GL_ATI_envmap_bumpmap', +'glTexBumpParameterivATI', 'glTexBumpParameterfvATI', +'glGetTexBumpParameterivATI', 'glGetTexBumpParameterfvATI', +'PFNGLTEXBUMPPARAMETERIVATIPROC', 'PFNGLTEXBUMPPARAMETERFVATIPROC', +'PFNGLGETTEXBUMPPARAMETERIVATIPROC', 'PFNGLGETTEXBUMPPARAMETERFVATIPROC', +'GL_ATI_fragment_shader', 'glGenFragmentShadersATI', +'glBindFragmentShaderATI', 'glDeleteFragmentShaderATI', +'glBeginFragmentShaderATI', 'glEndFragmentShaderATI', 'glPassTexCoordATI', +'glSampleMapATI', 'glColorFragmentOp1ATI', 'glColorFragmentOp2ATI', +'glColorFragmentOp3ATI', 'glAlphaFragmentOp1ATI', 'glAlphaFragmentOp2ATI', +'glAlphaFragmentOp3ATI', 'glSetFragmentShaderConstantATI', +'PFNGLGENFRAGMENTSHADERSATIPROC', 'PFNGLBINDFRAGMENTSHADERATIPROC', +'PFNGLDELETEFRAGMENTSHADERATIPROC', 'PFNGLBEGINFRAGMENTSHADERATIPROC', +'PFNGLENDFRAGMENTSHADERATIPROC', 'PFNGLPASSTEXCOORDATIPROC', +'PFNGLSAMPLEMAPATIPROC', 'PFNGLCOLORFRAGMENTOP1ATIPROC', +'PFNGLCOLORFRAGMENTOP2ATIPROC', 'PFNGLCOLORFRAGMENTOP3ATIPROC', +'PFNGLALPHAFRAGMENTOP1ATIPROC', 'PFNGLALPHAFRAGMENTOP2ATIPROC', +'PFNGLALPHAFRAGMENTOP3ATIPROC', 'PFNGLSETFRAGMENTSHADERCONSTANTATIPROC', +'GL_ATI_pn_triangles', 'glPNTrianglesiATI', 'glPNTrianglesfATI', +'PFNGLPNTRIANGLESIATIPROC', 'PFNGLPNTRIANGLESFATIPROC', +'GL_ATI_vertex_array_object', 'glNewObjectBufferATI', 'glIsObjectBufferATI', +'glUpdateObjectBufferATI', 'glGetObjectBufferfvATI', 'glGetObjectBufferivATI', +'glFreeObjectBufferATI', 'glArrayObjectATI', 'glGetArrayObjectfvATI', +'glGetArrayObjectivATI', 'glVariantArrayObjectATI', +'glGetVariantArrayObjectfvATI', 'glGetVariantArrayObjectivATI', +'PFNGLNEWOBJECTBUFFERATIPROC', 'PFNGLISOBJECTBUFFERATIPROC', +'PFNGLUPDATEOBJECTBUFFERATIPROC', 'PFNGLGETOBJECTBUFFERFVATIPROC', +'PFNGLGETOBJECTBUFFERIVATIPROC', 'PFNGLFREEOBJECTBUFFERATIPROC', +'PFNGLARRAYOBJECTATIPROC', 'PFNGLGETARRAYOBJECTFVATIPROC', +'PFNGLGETARRAYOBJECTIVATIPROC', 'PFNGLVARIANTARRAYOBJECTATIPROC', +'PFNGLGETVARIANTARRAYOBJECTFVATIPROC', 'PFNGLGETVARIANTARRAYOBJECTIVATIPROC', +'GL_EXT_vertex_shader', 'glBeginVertexShaderEXT', 'glEndVertexShaderEXT', +'glBindVertexShaderEXT', 'glGenVertexShadersEXT', 'glDeleteVertexShaderEXT', +'glShaderOp1EXT', 'glShaderOp2EXT', 'glShaderOp3EXT', 'glSwizzleEXT', +'glWriteMaskEXT', 'glInsertComponentEXT', 'glExtractComponentEXT', +'glGenSymbolsEXT', 'glSetInvariantEXT', 'glSetLocalConstantEXT', +'glVariantbvEXT', 'glVariantsvEXT', 'glVariantivEXT', 'glVariantfvEXT', +'glVariantdvEXT', 'glVariantubvEXT', 'glVariantusvEXT', 'glVariantuivEXT', +'glVariantPointerEXT', 'glEnableVariantClientStateEXT', +'glDisableVariantClientStateEXT', 'glBindLightParameterEXT', +'glBindMaterialParameterEXT', 'glBindTexGenParameterEXT', +'glBindTextureUnitParameterEXT', 'glBindParameterEXT', +'glIsVariantEnabledEXT', 'glGetVariantBooleanvEXT', 'glGetVariantIntegervEXT', +'glGetVariantFloatvEXT', 'glGetVariantPointervEXT', +'glGetInvariantBooleanvEXT', 'glGetInvariantIntegervEXT', +'glGetInvariantFloatvEXT', 'glGetLocalConstantBooleanvEXT', +'glGetLocalConstantIntegervEXT', 'glGetLocalConstantFloatvEXT', +'PFNGLBEGINVERTEXSHADEREXTPROC', 'PFNGLENDVERTEXSHADEREXTPROC', +'PFNGLBINDVERTEXSHADEREXTPROC', 'PFNGLGENVERTEXSHADERSEXTPROC', +'PFNGLDELETEVERTEXSHADEREXTPROC', 'PFNGLSHADEROP1EXTPROC', +'PFNGLSHADEROP2EXTPROC', 'PFNGLSHADEROP3EXTPROC', 'PFNGLSWIZZLEEXTPROC', +'PFNGLWRITEMASKEXTPROC', 'PFNGLINSERTCOMPONENTEXTPROC', +'PFNGLEXTRACTCOMPONENTEXTPROC', 'PFNGLGENSYMBOLSEXTPROC', +'PFNGLSETINVARIANTEXTPROC', 'PFNGLSETLOCALCONSTANTEXTPROC', +'PFNGLVARIANTBVEXTPROC', 'PFNGLVARIANTSVEXTPROC', 'PFNGLVARIANTIVEXTPROC', +'PFNGLVARIANTFVEXTPROC', 'PFNGLVARIANTDVEXTPROC', 'PFNGLVARIANTUBVEXTPROC', +'PFNGLVARIANTUSVEXTPROC', 'PFNGLVARIANTUIVEXTPROC', +'PFNGLVARIANTPOINTEREXTPROC', 'PFNGLENABLEVARIANTCLIENTSTATEEXTPROC', +'PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC', 'PFNGLBINDLIGHTPARAMETEREXTPROC', +'PFNGLBINDMATERIALPARAMETEREXTPROC', 'PFNGLBINDTEXGENPARAMETEREXTPROC', +'PFNGLBINDTEXTUREUNITPARAMETEREXTPROC', 'PFNGLBINDPARAMETEREXTPROC', +'PFNGLISVARIANTENABLEDEXTPROC', 'PFNGLGETVARIANTBOOLEANVEXTPROC', +'PFNGLGETVARIANTINTEGERVEXTPROC', 'PFNGLGETVARIANTFLOATVEXTPROC', +'PFNGLGETVARIANTPOINTERVEXTPROC', 'PFNGLGETINVARIANTBOOLEANVEXTPROC', +'PFNGLGETINVARIANTINTEGERVEXTPROC', 'PFNGLGETINVARIANTFLOATVEXTPROC', +'PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC', +'PFNGLGETLOCALCONSTANTINTEGERVEXTPROC', 'PFNGLGETLOCALCONSTANTFLOATVEXTPROC', +'GL_ATI_vertex_streams', 'glVertexStream1sATI', 'glVertexStream1svATI', +'glVertexStream1iATI', 'glVertexStream1ivATI', 'glVertexStream1fATI', +'glVertexStream1fvATI', 'glVertexStream1dATI', 'glVertexStream1dvATI', +'glVertexStream2sATI', 'glVertexStream2svATI', 'glVertexStream2iATI', +'glVertexStream2ivATI', 'glVertexStream2fATI', 'glVertexStream2fvATI', +'glVertexStream2dATI', 'glVertexStream2dvATI', 'glVertexStream3sATI', +'glVertexStream3svATI', 'glVertexStream3iATI', 'glVertexStream3ivATI', +'glVertexStream3fATI', 'glVertexStream3fvATI', 'glVertexStream3dATI', +'glVertexStream3dvATI', 'glVertexStream4sATI', 'glVertexStream4svATI', +'glVertexStream4iATI', 'glVertexStream4ivATI', 'glVertexStream4fATI', +'glVertexStream4fvATI', 'glVertexStream4dATI', 'glVertexStream4dvATI', +'glNormalStream3bATI', 'glNormalStream3bvATI', 'glNormalStream3sATI', +'glNormalStream3svATI', 'glNormalStream3iATI', 'glNormalStream3ivATI', +'glNormalStream3fATI', 'glNormalStream3fvATI', 'glNormalStream3dATI', +'glNormalStream3dvATI', 'glClientActiveVertexStreamATI', +'glVertexBlendEnviATI', 'glVertexBlendEnvfATI', 'PFNGLVERTEXSTREAM1SATIPROC', +'PFNGLVERTEXSTREAM1SVATIPROC', 'PFNGLVERTEXSTREAM1IATIPROC', +'PFNGLVERTEXSTREAM1IVATIPROC', 'PFNGLVERTEXSTREAM1FATIPROC', +'PFNGLVERTEXSTREAM1FVATIPROC', 'PFNGLVERTEXSTREAM1DATIPROC', +'PFNGLVERTEXSTREAM1DVATIPROC', 'PFNGLVERTEXSTREAM2SATIPROC', +'PFNGLVERTEXSTREAM2SVATIPROC', 'PFNGLVERTEXSTREAM2IATIPROC', +'PFNGLVERTEXSTREAM2IVATIPROC', 'PFNGLVERTEXSTREAM2FATIPROC', +'PFNGLVERTEXSTREAM2FVATIPROC', 'PFNGLVERTEXSTREAM2DATIPROC', +'PFNGLVERTEXSTREAM2DVATIPROC', 'PFNGLVERTEXSTREAM3SATIPROC', +'PFNGLVERTEXSTREAM3SVATIPROC', 'PFNGLVERTEXSTREAM3IATIPROC', +'PFNGLVERTEXSTREAM3IVATIPROC', 'PFNGLVERTEXSTREAM3FATIPROC', +'PFNGLVERTEXSTREAM3FVATIPROC', 'PFNGLVERTEXSTREAM3DATIPROC', +'PFNGLVERTEXSTREAM3DVATIPROC', 'PFNGLVERTEXSTREAM4SATIPROC', +'PFNGLVERTEXSTREAM4SVATIPROC', 'PFNGLVERTEXSTREAM4IATIPROC', +'PFNGLVERTEXSTREAM4IVATIPROC', 'PFNGLVERTEXSTREAM4FATIPROC', +'PFNGLVERTEXSTREAM4FVATIPROC', 'PFNGLVERTEXSTREAM4DATIPROC', +'PFNGLVERTEXSTREAM4DVATIPROC', 'PFNGLNORMALSTREAM3BATIPROC', +'PFNGLNORMALSTREAM3BVATIPROC', 'PFNGLNORMALSTREAM3SATIPROC', +'PFNGLNORMALSTREAM3SVATIPROC', 'PFNGLNORMALSTREAM3IATIPROC', +'PFNGLNORMALSTREAM3IVATIPROC', 'PFNGLNORMALSTREAM3FATIPROC', +'PFNGLNORMALSTREAM3FVATIPROC', 'PFNGLNORMALSTREAM3DATIPROC', +'PFNGLNORMALSTREAM3DVATIPROC', 'PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC', +'PFNGLVERTEXBLENDENVIATIPROC', 'PFNGLVERTEXBLENDENVFATIPROC', +'GL_ATI_element_array', 'glElementPointerATI', 'glDrawElementArrayATI', +'glDrawRangeElementArrayATI', 'PFNGLELEMENTPOINTERATIPROC', +'PFNGLDRAWELEMENTARRAYATIPROC', 'PFNGLDRAWRANGEELEMENTARRAYATIPROC', +'GL_SUN_mesh_array', 'glDrawMeshArraysSUN', 'PFNGLDRAWMESHARRAYSSUNPROC', +'GL_SUN_slice_accum', 'GL_NV_multisample_filter_hint', 'GL_NV_depth_clamp', +'GL_NV_occlusion_query', 'glGenOcclusionQueriesNV', +'glDeleteOcclusionQueriesNV', 'glIsOcclusionQueryNV', +'glBeginOcclusionQueryNV', 'glEndOcclusionQueryNV', 'glGetOcclusionQueryivNV', +'glGetOcclusionQueryuivNV', 'PFNGLGENOCCLUSIONQUERIESNVPROC', +'PFNGLDELETEOCCLUSIONQUERIESNVPROC', 'PFNGLISOCCLUSIONQUERYNVPROC', +'PFNGLBEGINOCCLUSIONQUERYNVPROC', 'PFNGLENDOCCLUSIONQUERYNVPROC', +'PFNGLGETOCCLUSIONQUERYIVNVPROC', 'PFNGLGETOCCLUSIONQUERYUIVNVPROC', +'GL_NV_point_sprite', 'glPointParameteriNV', 'glPointParameterivNV', +'PFNGLPOINTPARAMETERINVPROC', 'PFNGLPOINTPARAMETERIVNVPROC', +'GL_NV_texture_shader3', 'GL_NV_vertex_program1_1', 'GL_EXT_shadow_funcs', +'GL_EXT_stencil_two_side', 'glActiveStencilFaceEXT', +'PFNGLACTIVESTENCILFACEEXTPROC', 'GL_ATI_text_fragment_shader', +'GL_APPLE_client_storage', 'GL_APPLE_element_array', 'glElementPointerAPPLE', +'glDrawElementArrayAPPLE', 'glDrawRangeElementArrayAPPLE', +'glMultiDrawElementArrayAPPLE', 'glMultiDrawRangeElementArrayAPPLE', +'PFNGLELEMENTPOINTERAPPLEPROC', 'PFNGLDRAWELEMENTARRAYAPPLEPROC', +'PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC', 'PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC', +'PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC', 'GL_APPLE_fence', +'glGenFencesAPPLE', 'glDeleteFencesAPPLE', 'glSetFenceAPPLE', +'glIsFenceAPPLE', 'glTestFenceAPPLE', 'glFinishFenceAPPLE', +'glTestObjectAPPLE', 'glFinishObjectAPPLE', 'PFNGLGENFENCESAPPLEPROC', +'PFNGLDELETEFENCESAPPLEPROC', 'PFNGLSETFENCEAPPLEPROC', +'PFNGLISFENCEAPPLEPROC', 'PFNGLTESTFENCEAPPLEPROC', +'PFNGLFINISHFENCEAPPLEPROC', 'PFNGLTESTOBJECTAPPLEPROC', +'PFNGLFINISHOBJECTAPPLEPROC', 'GL_APPLE_vertex_array_object', +'glBindVertexArrayAPPLE', 'glDeleteVertexArraysAPPLE', +'glGenVertexArraysAPPLE', 'glIsVertexArrayAPPLE', +'PFNGLBINDVERTEXARRAYAPPLEPROC', 'PFNGLDELETEVERTEXARRAYSAPPLEPROC', +'PFNGLGENVERTEXARRAYSAPPLEPROC', 'PFNGLISVERTEXARRAYAPPLEPROC', +'GL_APPLE_vertex_array_range', 'glVertexArrayRangeAPPLE', +'glFlushVertexArrayRangeAPPLE', 'glVertexArrayParameteriAPPLE', +'PFNGLVERTEXARRAYRANGEAPPLEPROC', 'PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC', +'PFNGLVERTEXARRAYPARAMETERIAPPLEPROC', 'GL_APPLE_ycbcr_422', 'GL_S3_s3tc', +'GL_ATI_draw_buffers', 'glDrawBuffersATI', 'PFNGLDRAWBUFFERSATIPROC', +'GL_ATI_pixel_format_float', 'GL_ATI_texture_env_combine3', +'GL_ATI_texture_float', 'GL_NV_float_buffer', 'GL_NV_fragment_program', +'glProgramNamedParameter4fNV', 'glProgramNamedParameter4dNV', +'glProgramNamedParameter4fvNV', 'glProgramNamedParameter4dvNV', +'glGetProgramNamedParameterfvNV', 'glGetProgramNamedParameterdvNV', +'PFNGLPROGRAMNAMEDPARAMETER4FNVPROC', 'PFNGLPROGRAMNAMEDPARAMETER4DNVPROC', +'PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC', 'PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC', +'PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC', +'PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC', 'GL_NV_half_float', 'glVertex2hNV', +'glVertex2hvNV', 'glVertex3hNV', 'glVertex3hvNV', 'glVertex4hNV', +'glVertex4hvNV', 'glNormal3hNV', 'glNormal3hvNV', 'glColor3hNV', +'glColor3hvNV', 'glColor4hNV', 'glColor4hvNV', 'glTexCoord1hNV', +'glTexCoord1hvNV', 'glTexCoord2hNV', 'glTexCoord2hvNV', 'glTexCoord3hNV', +'glTexCoord3hvNV', 'glTexCoord4hNV', 'glTexCoord4hvNV', 'glMultiTexCoord1hNV', +'glMultiTexCoord1hvNV', 'glMultiTexCoord2hNV', 'glMultiTexCoord2hvNV', +'glMultiTexCoord3hNV', 'glMultiTexCoord3hvNV', 'glMultiTexCoord4hNV', +'glMultiTexCoord4hvNV', 'glFogCoordhNV', 'glFogCoordhvNV', +'glSecondaryColor3hNV', 'glSecondaryColor3hvNV', 'glVertexWeighthNV', +'glVertexWeighthvNV', 'glVertexAttrib1hNV', 'glVertexAttrib1hvNV', +'glVertexAttrib2hNV', 'glVertexAttrib2hvNV', 'glVertexAttrib3hNV', +'glVertexAttrib3hvNV', 'glVertexAttrib4hNV', 'glVertexAttrib4hvNV', +'glVertexAttribs1hvNV', 'glVertexAttribs2hvNV', 'glVertexAttribs3hvNV', +'glVertexAttribs4hvNV', 'PFNGLVERTEX2HNVPROC', 'PFNGLVERTEX2HVNVPROC', +'PFNGLVERTEX3HNVPROC', 'PFNGLVERTEX3HVNVPROC', 'PFNGLVERTEX4HNVPROC', +'PFNGLVERTEX4HVNVPROC', 'PFNGLNORMAL3HNVPROC', 'PFNGLNORMAL3HVNVPROC', +'PFNGLCOLOR3HNVPROC', 'PFNGLCOLOR3HVNVPROC', 'PFNGLCOLOR4HNVPROC', +'PFNGLCOLOR4HVNVPROC', 'PFNGLTEXCOORD1HNVPROC', 'PFNGLTEXCOORD1HVNVPROC', +'PFNGLTEXCOORD2HNVPROC', 'PFNGLTEXCOORD2HVNVPROC', 'PFNGLTEXCOORD3HNVPROC', +'PFNGLTEXCOORD3HVNVPROC', 'PFNGLTEXCOORD4HNVPROC', 'PFNGLTEXCOORD4HVNVPROC', +'PFNGLMULTITEXCOORD1HNVPROC', 'PFNGLMULTITEXCOORD1HVNVPROC', +'PFNGLMULTITEXCOORD2HNVPROC', 'PFNGLMULTITEXCOORD2HVNVPROC', +'PFNGLMULTITEXCOORD3HNVPROC', 'PFNGLMULTITEXCOORD3HVNVPROC', +'PFNGLMULTITEXCOORD4HNVPROC', 'PFNGLMULTITEXCOORD4HVNVPROC', +'PFNGLFOGCOORDHNVPROC', 'PFNGLFOGCOORDHVNVPROC', +'PFNGLSECONDARYCOLOR3HNVPROC', 'PFNGLSECONDARYCOLOR3HVNVPROC', +'PFNGLVERTEXWEIGHTHNVPROC', 'PFNGLVERTEXWEIGHTHVNVPROC', +'PFNGLVERTEXATTRIB1HNVPROC', 'PFNGLVERTEXATTRIB1HVNVPROC', +'PFNGLVERTEXATTRIB2HNVPROC', 'PFNGLVERTEXATTRIB2HVNVPROC', +'PFNGLVERTEXATTRIB3HNVPROC', 'PFNGLVERTEXATTRIB3HVNVPROC', +'PFNGLVERTEXATTRIB4HNVPROC', 'PFNGLVERTEXATTRIB4HVNVPROC', +'PFNGLVERTEXATTRIBS1HVNVPROC', 'PFNGLVERTEXATTRIBS2HVNVPROC', +'PFNGLVERTEXATTRIBS3HVNVPROC', 'PFNGLVERTEXATTRIBS4HVNVPROC', +'GL_NV_pixel_data_range', 'glPixelDataRangeNV', 'glFlushPixelDataRangeNV', +'PFNGLPIXELDATARANGENVPROC', 'PFNGLFLUSHPIXELDATARANGENVPROC', +'GL_NV_primitive_restart', 'glPrimitiveRestartNV', +'glPrimitiveRestartIndexNV', 'PFNGLPRIMITIVERESTARTNVPROC', +'PFNGLPRIMITIVERESTARTINDEXNVPROC', 'GL_NV_texture_expand_normal', +'GL_NV_vertex_program2', 'GL_ATI_map_object_buffer', 'glMapObjectBufferATI', +'glUnmapObjectBufferATI', 'PFNGLMAPOBJECTBUFFERATIPROC', +'PFNGLUNMAPOBJECTBUFFERATIPROC', 'GL_ATI_separate_stencil', +'glStencilOpSeparateATI', 'glStencilFuncSeparateATI', +'PFNGLSTENCILOPSEPARATEATIPROC', 'PFNGLSTENCILFUNCSEPARATEATIPROC', +'GL_ATI_vertex_attrib_array_object', 'glVertexAttribArrayObjectATI', +'glGetVertexAttribArrayObjectfvATI', 'glGetVertexAttribArrayObjectivATI', +'PFNGLVERTEXATTRIBARRAYOBJECTATIPROC', +'PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC', +'PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC', 'GL_OES_read_format', +'GL_EXT_depth_bounds_test', 'glDepthBoundsEXT', 'PFNGLDEPTHBOUNDSEXTPROC', +'GL_EXT_texture_mirror_clamp', 'GL_EXT_blend_equation_separate', +'glBlendEquationSeparateEXT', 'PFNGLBLENDEQUATIONSEPARATEEXTPROC', +'GL_MESA_pack_invert', 'GL_MESA_ycbcr_texture', 'GL_EXT_pixel_buffer_object', +'GL_NV_fragment_program_option', 'GL_NV_fragment_program2', +'GL_NV_vertex_program2_option', 'GL_NV_vertex_program3', +'GL_EXT_framebuffer_object', 'glIsRenderbufferEXT', 'glBindRenderbufferEXT', +'glDeleteRenderbuffersEXT', 'glGenRenderbuffersEXT', +'glRenderbufferStorageEXT', 'glGetRenderbufferParameterivEXT', +'glIsFramebufferEXT', 'glBindFramebufferEXT', 'glDeleteFramebuffersEXT', +'glGenFramebuffersEXT', 'glCheckFramebufferStatusEXT', +'glFramebufferTexture1DEXT', 'glFramebufferTexture2DEXT', +'glFramebufferTexture3DEXT', 'glFramebufferRenderbufferEXT', +'glGetFramebufferAttachmentParameterivEXT', 'glGenerateMipmapEXT', +'PFNGLISRENDERBUFFEREXTPROC', 'PFNGLBINDRENDERBUFFEREXTPROC', +'PFNGLDELETERENDERBUFFERSEXTPROC', 'PFNGLGENRENDERBUFFERSEXTPROC', +'PFNGLRENDERBUFFERSTORAGEEXTPROC', 'PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC', +'PFNGLISFRAMEBUFFEREXTPROC', 'PFNGLBINDFRAMEBUFFEREXTPROC', +'PFNGLDELETEFRAMEBUFFERSEXTPROC', 'PFNGLGENFRAMEBUFFERSEXTPROC', +'PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC', 'PFNGLFRAMEBUFFERTEXTURE1DEXTPROC', +'PFNGLFRAMEBUFFERTEXTURE2DEXTPROC', 'PFNGLFRAMEBUFFERTEXTURE3DEXTPROC', +'PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC', +'PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC', +'PFNGLGENERATEMIPMAPEXTPROC', 'GL_GREMEDY_string_marker', +'glStringMarkerGREMEDY', 'PFNGLSTRINGMARKERGREMEDYPROC'] +# END GENERATED CONTENT (do not edit above this line) + + + diff --git a/pyglet/gl/glext_missing.py b/pyglet/gl/glext_missing.py new file mode 100644 index 0000000..6a36d09 --- /dev/null +++ b/pyglet/gl/glext_missing.py @@ -0,0 +1,127 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''Additional hand-coded GL extensions. + +These are hand-wrapped extension tokens and functions that are in +the OpenGL Extension Registry but have not yet been added to either +the registry's glext.h or nVidia's glext.h. Remove wraps from here +when the headers are updated (and glext_arb.py or glext_nv.py are +regenerated). + +When adding an extension here, include the name and URL, and any tokens and +functions appearing under "New Tokens" and "New Procedures" headings. Don't +forget to add the GL_/gl prefix. + +Unnumbered extensions in the registry are not included. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: glext_missing.py 1579 2008-01-15 14:47:19Z Alex.Holkner $' + +from ctypes import * +from pyglet.gl.lib import link_GL as _link_function +from pyglet.gl.lib import c_ptrdiff_t + +# At time of writing, ABI glext.h was last updated 2005/06/20, so numbered +# non-ARB extensions from 312 on must be included here. + +# GL_EXT_packed_depth_stencil +# http://oss.sgi.com/projects/ogl-sample/registry/EXT/packed_depth_stencil.txt + +GL_DEPTH_STENCIL_EXT = 0x84F9 +GL_UNSIGNED_INT_24_8_EXT = 0x84FA +GL_DEPTH24_STENCIL8_EXT = 0x88F0 +GL_TEXTURE_STENCIL_SIZE_EXT = 0x88F1 + +# GL_EXT_texture_sRGB +# http://oss.sgi.com/projects/ogl-sample/registry/EXT/texture_sRGB.txt + +GL_SRGB_EXT = 0x8C40 +GL_SRGB8_EXT = 0x8C41 +GL_SRGB_ALPHA_EXT = 0x8C42 +GL_SRGB8_ALPHA8_EXT = 0x8C43 +GL_SLUMINANCE_ALPHA_EXT = 0x8C44 +GL_SLUMINANCE8_ALPHA8_EXT = 0x8C45 +GL_SLUMINANCE_EXT = 0x8C46 +GL_SLUMINANCE8_EXT = 0x8C47 +GL_COMPRESSED_SRGB_EXT = 0x8C48 +GL_COMPRESSED_SRGB_ALPHA_EXT = 0x8C49 +GL_COMPRESSED_SLUMINANCE_EXT = 0x8C4A +GL_COMPRESSED_SLUMINANCE_ALPHA_EXT = 0x8C4B +GL_COMPRESSED_SRGB_S3TC_DXT1_EXT = 0x8C4C +GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT = 0x8C4D +GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT = 0x8C4E +GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT = 0x8C4F + +# GL_EXT_stencil_clear_tag +# http://oss.sgi.com/projects/ogl-sample/registry/EXT/stencil_clear_tag.txt + +GLuint = c_uint # /usr/include/GL/gl.h:62 +GLsizei = c_int # /usr/include/GL/gl.h:59 +glStencilClearTagEXT = _link_function( + 'glStencilClearTagEXT', None, [GLsizei, GLuint]) + +GL_STENCIL_TAG_BITS_EXT = 0x88F2 +GL_STENCIL_CLEAR_TAG_VALUE_EXT = 0x88F3 + +# GL_EXT_framebuffer_blit +# http://oss.sgi.com/projects/ogl-sample/registry/EXT/framebuffer_blit.txt + +GLenum = c_uint # /usr/include/GL/gl.h:53 +GLint = c_int # /usr/include/GL/gl.h:58 +glBlitFramebufferEXT = _link_function( + 'glBlitFramebufferEXT', None, [GLint, GLint, GLint, GLint, + GLint, GLint, GLint, GLint, + GLuint, GLenum]) + +GL_READ_FRAMEBUFFER_EXT = 0x8CA8 +GL_DRAW_FRAMEBUFFER_EXT = 0x8CA9 +GL_DRAW_FRAMEBUFFER_BINDING_EXT = 0x8CA6 +GL_READ_FRAMEBUFFER_BINDING_EXT = 0x8CAA + +# GL_EXT_framebuffer_multisample +# http://oss.sgi.com/projects/ogl-sample/registry/EXT/framebuffer_multisample.txt + +GL_RENDERBUFFER_SAMPLES_EXT = 0x8CAB + +# GL_MESAX_texture_stack +# http://oss.sgi.com/projects/ogl-sample/registry/MESAX/texture_stack.txt + +GL_TEXTURE_1D_STACK_MESAX = 0x8759 +GL_TEXTURE_2D_STACK_MESAX = 0x875A +GL_PROXY_TEXTURE_1D_STACK_MESAX = 0x875B +GL_PROXY_TEXTURE_2D_STACK_MESAX = 0x875C +GL_TEXTURE_1D_STACK_BINDING_MESAX = 0x875D +GL_TEXTURE_2D_STACK_BINDING_MESAX = 0x875E diff --git a/pyglet/gl/glext_nv.py b/pyglet/gl/glext_nv.py new file mode 100644 index 0000000..0cacd3a --- /dev/null +++ b/pyglet/gl/glext_nv.py @@ -0,0 +1,10240 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +'''Wrapper for http://developer.download.nvidia.com/opengl/includes/glext.h + +Generated by tools/gengl.py. +Do not modify this file. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: glext_nv.py 1579 2008-01-15 14:47:19Z Alex.Holkner $' + +from ctypes import * +from pyglet.gl.lib import link_GL as _link_function +from pyglet.gl.lib import c_ptrdiff_t + +# BEGIN GENERATED CONTENT (do not edit below this line) + +# This content is generated by tools/gengl.py. +# Wrapper for http://developer.download.nvidia.com/opengl/includes/glext.h + + +# GLEXT_LEGACY (/usr/include/GL/gl.h:70) +GL_GLEXT_VERSION = 28 # GL/glext.h:74 +# VERSION_1_2 (GL/glext.h:76) +GL_UNSIGNED_BYTE_3_3_2 = 32818 # GL/glext.h:77 +GL_UNSIGNED_SHORT_4_4_4_4 = 32819 # GL/glext.h:78 +GL_UNSIGNED_SHORT_5_5_5_1 = 32820 # GL/glext.h:79 +GL_UNSIGNED_INT_8_8_8_8 = 32821 # GL/glext.h:80 +GL_UNSIGNED_INT_10_10_10_2 = 32822 # GL/glext.h:81 +GL_RESCALE_NORMAL = 32826 # GL/glext.h:82 +GL_TEXTURE_BINDING_3D = 32874 # GL/glext.h:83 +GL_PACK_SKIP_IMAGES = 32875 # GL/glext.h:84 +GL_PACK_IMAGE_HEIGHT = 32876 # GL/glext.h:85 +GL_UNPACK_SKIP_IMAGES = 32877 # GL/glext.h:86 +GL_UNPACK_IMAGE_HEIGHT = 32878 # GL/glext.h:87 +GL_TEXTURE_3D = 32879 # GL/glext.h:88 +GL_PROXY_TEXTURE_3D = 32880 # GL/glext.h:89 +GL_TEXTURE_DEPTH = 32881 # GL/glext.h:90 +GL_TEXTURE_WRAP_R = 32882 # GL/glext.h:91 +GL_MAX_3D_TEXTURE_SIZE = 32883 # GL/glext.h:92 +GL_UNSIGNED_BYTE_2_3_3_REV = 33634 # GL/glext.h:93 +GL_UNSIGNED_SHORT_5_6_5 = 33635 # GL/glext.h:94 +GL_UNSIGNED_SHORT_5_6_5_REV = 33636 # GL/glext.h:95 +GL_UNSIGNED_SHORT_4_4_4_4_REV = 33637 # GL/glext.h:96 +GL_UNSIGNED_SHORT_1_5_5_5_REV = 33638 # GL/glext.h:97 +GL_UNSIGNED_INT_8_8_8_8_REV = 33639 # GL/glext.h:98 +GL_UNSIGNED_INT_2_10_10_10_REV = 33640 # GL/glext.h:99 +GL_BGR = 32992 # GL/glext.h:100 +GL_BGRA = 32993 # GL/glext.h:101 +GL_MAX_ELEMENTS_VERTICES = 33000 # GL/glext.h:102 +GL_MAX_ELEMENTS_INDICES = 33001 # GL/glext.h:103 +GL_CLAMP_TO_EDGE = 33071 # GL/glext.h:104 +GL_TEXTURE_MIN_LOD = 33082 # GL/glext.h:105 +GL_TEXTURE_MAX_LOD = 33083 # GL/glext.h:106 +GL_TEXTURE_BASE_LEVEL = 33084 # GL/glext.h:107 +GL_TEXTURE_MAX_LEVEL = 33085 # GL/glext.h:108 +GL_LIGHT_MODEL_COLOR_CONTROL = 33272 # GL/glext.h:109 +GL_SINGLE_COLOR = 33273 # GL/glext.h:110 +GL_SEPARATE_SPECULAR_COLOR = 33274 # GL/glext.h:111 +GL_SMOOTH_POINT_SIZE_RANGE = 2834 # GL/glext.h:112 +GL_SMOOTH_POINT_SIZE_GRANULARITY = 2835 # GL/glext.h:113 +GL_SMOOTH_LINE_WIDTH_RANGE = 2850 # GL/glext.h:114 +GL_SMOOTH_LINE_WIDTH_GRANULARITY = 2851 # GL/glext.h:115 +GL_ALIASED_POINT_SIZE_RANGE = 33901 # GL/glext.h:116 +GL_ALIASED_LINE_WIDTH_RANGE = 33902 # GL/glext.h:117 +# ARB_imaging (GL/glext.h:120) +GL_CONSTANT_COLOR = 32769 # GL/glext.h:121 +GL_ONE_MINUS_CONSTANT_COLOR = 32770 # GL/glext.h:122 +GL_CONSTANT_ALPHA = 32771 # GL/glext.h:123 +GL_ONE_MINUS_CONSTANT_ALPHA = 32772 # GL/glext.h:124 +GL_BLEND_COLOR = 32773 # GL/glext.h:125 +GL_FUNC_ADD = 32774 # GL/glext.h:126 +GL_MIN = 32775 # GL/glext.h:127 +GL_MAX = 32776 # GL/glext.h:128 +GL_BLEND_EQUATION = 32777 # GL/glext.h:129 +GL_FUNC_SUBTRACT = 32778 # GL/glext.h:130 +GL_FUNC_REVERSE_SUBTRACT = 32779 # GL/glext.h:131 +GL_CONVOLUTION_1D = 32784 # GL/glext.h:132 +GL_CONVOLUTION_2D = 32785 # GL/glext.h:133 +GL_SEPARABLE_2D = 32786 # GL/glext.h:134 +GL_CONVOLUTION_BORDER_MODE = 32787 # GL/glext.h:135 +GL_CONVOLUTION_FILTER_SCALE = 32788 # GL/glext.h:136 +GL_CONVOLUTION_FILTER_BIAS = 32789 # GL/glext.h:137 +GL_REDUCE = 32790 # GL/glext.h:138 +GL_CONVOLUTION_FORMAT = 32791 # GL/glext.h:139 +GL_CONVOLUTION_WIDTH = 32792 # GL/glext.h:140 +GL_CONVOLUTION_HEIGHT = 32793 # GL/glext.h:141 +GL_MAX_CONVOLUTION_WIDTH = 32794 # GL/glext.h:142 +GL_MAX_CONVOLUTION_HEIGHT = 32795 # GL/glext.h:143 +GL_POST_CONVOLUTION_RED_SCALE = 32796 # GL/glext.h:144 +GL_POST_CONVOLUTION_GREEN_SCALE = 32797 # GL/glext.h:145 +GL_POST_CONVOLUTION_BLUE_SCALE = 32798 # GL/glext.h:146 +GL_POST_CONVOLUTION_ALPHA_SCALE = 32799 # GL/glext.h:147 +GL_POST_CONVOLUTION_RED_BIAS = 32800 # GL/glext.h:148 +GL_POST_CONVOLUTION_GREEN_BIAS = 32801 # GL/glext.h:149 +GL_POST_CONVOLUTION_BLUE_BIAS = 32802 # GL/glext.h:150 +GL_POST_CONVOLUTION_ALPHA_BIAS = 32803 # GL/glext.h:151 +GL_HISTOGRAM = 32804 # GL/glext.h:152 +GL_PROXY_HISTOGRAM = 32805 # GL/glext.h:153 +GL_HISTOGRAM_WIDTH = 32806 # GL/glext.h:154 +GL_HISTOGRAM_FORMAT = 32807 # GL/glext.h:155 +GL_HISTOGRAM_RED_SIZE = 32808 # GL/glext.h:156 +GL_HISTOGRAM_GREEN_SIZE = 32809 # GL/glext.h:157 +GL_HISTOGRAM_BLUE_SIZE = 32810 # GL/glext.h:158 +GL_HISTOGRAM_ALPHA_SIZE = 32811 # GL/glext.h:159 +GL_HISTOGRAM_LUMINANCE_SIZE = 32812 # GL/glext.h:160 +GL_HISTOGRAM_SINK = 32813 # GL/glext.h:161 +GL_MINMAX = 32814 # GL/glext.h:162 +GL_MINMAX_FORMAT = 32815 # GL/glext.h:163 +GL_MINMAX_SINK = 32816 # GL/glext.h:164 +GL_TABLE_TOO_LARGE = 32817 # GL/glext.h:165 +GL_COLOR_MATRIX = 32945 # GL/glext.h:166 +GL_COLOR_MATRIX_STACK_DEPTH = 32946 # GL/glext.h:167 +GL_MAX_COLOR_MATRIX_STACK_DEPTH = 32947 # GL/glext.h:168 +GL_POST_COLOR_MATRIX_RED_SCALE = 32948 # GL/glext.h:169 +GL_POST_COLOR_MATRIX_GREEN_SCALE = 32949 # GL/glext.h:170 +GL_POST_COLOR_MATRIX_BLUE_SCALE = 32950 # GL/glext.h:171 +GL_POST_COLOR_MATRIX_ALPHA_SCALE = 32951 # GL/glext.h:172 +GL_POST_COLOR_MATRIX_RED_BIAS = 32952 # GL/glext.h:173 +GL_POST_COLOR_MATRIX_GREEN_BIAS = 32953 # GL/glext.h:174 +GL_POST_COLOR_MATRIX_BLUE_BIAS = 32954 # GL/glext.h:175 +GL_POST_COLOR_MATRIX_ALPHA_BIAS = 32955 # GL/glext.h:176 +GL_COLOR_TABLE = 32976 # GL/glext.h:177 +GL_POST_CONVOLUTION_COLOR_TABLE = 32977 # GL/glext.h:178 +GL_POST_COLOR_MATRIX_COLOR_TABLE = 32978 # GL/glext.h:179 +GL_PROXY_COLOR_TABLE = 32979 # GL/glext.h:180 +GL_PROXY_POST_CONVOLUTION_COLOR_TABLE = 32980 # GL/glext.h:181 +GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE = 32981 # GL/glext.h:182 +GL_COLOR_TABLE_SCALE = 32982 # GL/glext.h:183 +GL_COLOR_TABLE_BIAS = 32983 # GL/glext.h:184 +GL_COLOR_TABLE_FORMAT = 32984 # GL/glext.h:185 +GL_COLOR_TABLE_WIDTH = 32985 # GL/glext.h:186 +GL_COLOR_TABLE_RED_SIZE = 32986 # GL/glext.h:187 +GL_COLOR_TABLE_GREEN_SIZE = 32987 # GL/glext.h:188 +GL_COLOR_TABLE_BLUE_SIZE = 32988 # GL/glext.h:189 +GL_COLOR_TABLE_ALPHA_SIZE = 32989 # GL/glext.h:190 +GL_COLOR_TABLE_LUMINANCE_SIZE = 32990 # GL/glext.h:191 +GL_COLOR_TABLE_INTENSITY_SIZE = 32991 # GL/glext.h:192 +GL_CONSTANT_BORDER = 33105 # GL/glext.h:193 +GL_REPLICATE_BORDER = 33107 # GL/glext.h:194 +GL_CONVOLUTION_BORDER_COLOR = 33108 # GL/glext.h:195 +# VERSION_1_3 (GL/glext.h:198) +GL_TEXTURE0 = 33984 # GL/glext.h:199 +GL_TEXTURE1 = 33985 # GL/glext.h:200 +GL_TEXTURE2 = 33986 # GL/glext.h:201 +GL_TEXTURE3 = 33987 # GL/glext.h:202 +GL_TEXTURE4 = 33988 # GL/glext.h:203 +GL_TEXTURE5 = 33989 # GL/glext.h:204 +GL_TEXTURE6 = 33990 # GL/glext.h:205 +GL_TEXTURE7 = 33991 # GL/glext.h:206 +GL_TEXTURE8 = 33992 # GL/glext.h:207 +GL_TEXTURE9 = 33993 # GL/glext.h:208 +GL_TEXTURE10 = 33994 # GL/glext.h:209 +GL_TEXTURE11 = 33995 # GL/glext.h:210 +GL_TEXTURE12 = 33996 # GL/glext.h:211 +GL_TEXTURE13 = 33997 # GL/glext.h:212 +GL_TEXTURE14 = 33998 # GL/glext.h:213 +GL_TEXTURE15 = 33999 # GL/glext.h:214 +GL_TEXTURE16 = 34000 # GL/glext.h:215 +GL_TEXTURE17 = 34001 # GL/glext.h:216 +GL_TEXTURE18 = 34002 # GL/glext.h:217 +GL_TEXTURE19 = 34003 # GL/glext.h:218 +GL_TEXTURE20 = 34004 # GL/glext.h:219 +GL_TEXTURE21 = 34005 # GL/glext.h:220 +GL_TEXTURE22 = 34006 # GL/glext.h:221 +GL_TEXTURE23 = 34007 # GL/glext.h:222 +GL_TEXTURE24 = 34008 # GL/glext.h:223 +GL_TEXTURE25 = 34009 # GL/glext.h:224 +GL_TEXTURE26 = 34010 # GL/glext.h:225 +GL_TEXTURE27 = 34011 # GL/glext.h:226 +GL_TEXTURE28 = 34012 # GL/glext.h:227 +GL_TEXTURE29 = 34013 # GL/glext.h:228 +GL_TEXTURE30 = 34014 # GL/glext.h:229 +GL_TEXTURE31 = 34015 # GL/glext.h:230 +GL_ACTIVE_TEXTURE = 34016 # GL/glext.h:231 +GL_CLIENT_ACTIVE_TEXTURE = 34017 # GL/glext.h:232 +GL_MAX_TEXTURE_UNITS = 34018 # GL/glext.h:233 +GL_TRANSPOSE_MODELVIEW_MATRIX = 34019 # GL/glext.h:234 +GL_TRANSPOSE_PROJECTION_MATRIX = 34020 # GL/glext.h:235 +GL_TRANSPOSE_TEXTURE_MATRIX = 34021 # GL/glext.h:236 +GL_TRANSPOSE_COLOR_MATRIX = 34022 # GL/glext.h:237 +GL_MULTISAMPLE = 32925 # GL/glext.h:238 +GL_SAMPLE_ALPHA_TO_COVERAGE = 32926 # GL/glext.h:239 +GL_SAMPLE_ALPHA_TO_ONE = 32927 # GL/glext.h:240 +GL_SAMPLE_COVERAGE = 32928 # GL/glext.h:241 +GL_SAMPLE_BUFFERS = 32936 # GL/glext.h:242 +GL_SAMPLES = 32937 # GL/glext.h:243 +GL_SAMPLE_COVERAGE_VALUE = 32938 # GL/glext.h:244 +GL_SAMPLE_COVERAGE_INVERT = 32939 # GL/glext.h:245 +GL_MULTISAMPLE_BIT = 536870912 # GL/glext.h:246 +GL_NORMAL_MAP = 34065 # GL/glext.h:247 +GL_REFLECTION_MAP = 34066 # GL/glext.h:248 +GL_TEXTURE_CUBE_MAP = 34067 # GL/glext.h:249 +GL_TEXTURE_BINDING_CUBE_MAP = 34068 # GL/glext.h:250 +GL_TEXTURE_CUBE_MAP_POSITIVE_X = 34069 # GL/glext.h:251 +GL_TEXTURE_CUBE_MAP_NEGATIVE_X = 34070 # GL/glext.h:252 +GL_TEXTURE_CUBE_MAP_POSITIVE_Y = 34071 # GL/glext.h:253 +GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = 34072 # GL/glext.h:254 +GL_TEXTURE_CUBE_MAP_POSITIVE_Z = 34073 # GL/glext.h:255 +GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = 34074 # GL/glext.h:256 +GL_PROXY_TEXTURE_CUBE_MAP = 34075 # GL/glext.h:257 +GL_MAX_CUBE_MAP_TEXTURE_SIZE = 34076 # GL/glext.h:258 +GL_COMPRESSED_ALPHA = 34025 # GL/glext.h:259 +GL_COMPRESSED_LUMINANCE = 34026 # GL/glext.h:260 +GL_COMPRESSED_LUMINANCE_ALPHA = 34027 # GL/glext.h:261 +GL_COMPRESSED_INTENSITY = 34028 # GL/glext.h:262 +GL_COMPRESSED_RGB = 34029 # GL/glext.h:263 +GL_COMPRESSED_RGBA = 34030 # GL/glext.h:264 +GL_TEXTURE_COMPRESSION_HINT = 34031 # GL/glext.h:265 +GL_TEXTURE_COMPRESSED_IMAGE_SIZE = 34464 # GL/glext.h:266 +GL_TEXTURE_COMPRESSED = 34465 # GL/glext.h:267 +GL_NUM_COMPRESSED_TEXTURE_FORMATS = 34466 # GL/glext.h:268 +GL_COMPRESSED_TEXTURE_FORMATS = 34467 # GL/glext.h:269 +GL_CLAMP_TO_BORDER = 33069 # GL/glext.h:270 +GL_COMBINE = 34160 # GL/glext.h:271 +GL_COMBINE_RGB = 34161 # GL/glext.h:272 +GL_COMBINE_ALPHA = 34162 # GL/glext.h:273 +GL_SOURCE0_RGB = 34176 # GL/glext.h:274 +GL_SOURCE1_RGB = 34177 # GL/glext.h:275 +GL_SOURCE2_RGB = 34178 # GL/glext.h:276 +GL_SOURCE0_ALPHA = 34184 # GL/glext.h:277 +GL_SOURCE1_ALPHA = 34185 # GL/glext.h:278 +GL_SOURCE2_ALPHA = 34186 # GL/glext.h:279 +GL_OPERAND0_RGB = 34192 # GL/glext.h:280 +GL_OPERAND1_RGB = 34193 # GL/glext.h:281 +GL_OPERAND2_RGB = 34194 # GL/glext.h:282 +GL_OPERAND0_ALPHA = 34200 # GL/glext.h:283 +GL_OPERAND1_ALPHA = 34201 # GL/glext.h:284 +GL_OPERAND2_ALPHA = 34202 # GL/glext.h:285 +GL_RGB_SCALE = 34163 # GL/glext.h:286 +GL_ADD_SIGNED = 34164 # GL/glext.h:287 +GL_INTERPOLATE = 34165 # GL/glext.h:288 +GL_SUBTRACT = 34023 # GL/glext.h:289 +GL_CONSTANT = 34166 # GL/glext.h:290 +GL_PRIMARY_COLOR = 34167 # GL/glext.h:291 +GL_PREVIOUS = 34168 # GL/glext.h:292 +GL_DOT3_RGB = 34478 # GL/glext.h:293 +GL_DOT3_RGBA = 34479 # GL/glext.h:294 +# VERSION_1_4 (GL/glext.h:297) +GL_BLEND_DST_RGB = 32968 # GL/glext.h:298 +GL_BLEND_SRC_RGB = 32969 # GL/glext.h:299 +GL_BLEND_DST_ALPHA = 32970 # GL/glext.h:300 +GL_BLEND_SRC_ALPHA = 32971 # GL/glext.h:301 +GL_POINT_SIZE_MIN = 33062 # GL/glext.h:302 +GL_POINT_SIZE_MAX = 33063 # GL/glext.h:303 +GL_POINT_FADE_THRESHOLD_SIZE = 33064 # GL/glext.h:304 +GL_POINT_DISTANCE_ATTENUATION = 33065 # GL/glext.h:305 +GL_GENERATE_MIPMAP = 33169 # GL/glext.h:306 +GL_GENERATE_MIPMAP_HINT = 33170 # GL/glext.h:307 +GL_DEPTH_COMPONENT16 = 33189 # GL/glext.h:308 +GL_DEPTH_COMPONENT24 = 33190 # GL/glext.h:309 +GL_DEPTH_COMPONENT32 = 33191 # GL/glext.h:310 +GL_MIRRORED_REPEAT = 33648 # GL/glext.h:311 +GL_FOG_COORDINATE_SOURCE = 33872 # GL/glext.h:312 +GL_FOG_COORDINATE = 33873 # GL/glext.h:313 +GL_FRAGMENT_DEPTH = 33874 # GL/glext.h:314 +GL_CURRENT_FOG_COORDINATE = 33875 # GL/glext.h:315 +GL_FOG_COORDINATE_ARRAY_TYPE = 33876 # GL/glext.h:316 +GL_FOG_COORDINATE_ARRAY_STRIDE = 33877 # GL/glext.h:317 +GL_FOG_COORDINATE_ARRAY_POINTER = 33878 # GL/glext.h:318 +GL_FOG_COORDINATE_ARRAY = 33879 # GL/glext.h:319 +GL_COLOR_SUM = 33880 # GL/glext.h:320 +GL_CURRENT_SECONDARY_COLOR = 33881 # GL/glext.h:321 +GL_SECONDARY_COLOR_ARRAY_SIZE = 33882 # GL/glext.h:322 +GL_SECONDARY_COLOR_ARRAY_TYPE = 33883 # GL/glext.h:323 +GL_SECONDARY_COLOR_ARRAY_STRIDE = 33884 # GL/glext.h:324 +GL_SECONDARY_COLOR_ARRAY_POINTER = 33885 # GL/glext.h:325 +GL_SECONDARY_COLOR_ARRAY = 33886 # GL/glext.h:326 +GL_MAX_TEXTURE_LOD_BIAS = 34045 # GL/glext.h:327 +GL_TEXTURE_FILTER_CONTROL = 34048 # GL/glext.h:328 +GL_TEXTURE_LOD_BIAS = 34049 # GL/glext.h:329 +GL_INCR_WRAP = 34055 # GL/glext.h:330 +GL_DECR_WRAP = 34056 # GL/glext.h:331 +GL_TEXTURE_DEPTH_SIZE = 34890 # GL/glext.h:332 +GL_DEPTH_TEXTURE_MODE = 34891 # GL/glext.h:333 +GL_TEXTURE_COMPARE_MODE = 34892 # GL/glext.h:334 +GL_TEXTURE_COMPARE_FUNC = 34893 # GL/glext.h:335 +GL_COMPARE_R_TO_TEXTURE = 34894 # GL/glext.h:336 +# VERSION_1_5 (GL/glext.h:339) +GL_BUFFER_SIZE = 34660 # GL/glext.h:340 +GL_BUFFER_USAGE = 34661 # GL/glext.h:341 +GL_QUERY_COUNTER_BITS = 34916 # GL/glext.h:342 +GL_CURRENT_QUERY = 34917 # GL/glext.h:343 +GL_QUERY_RESULT = 34918 # GL/glext.h:344 +GL_QUERY_RESULT_AVAILABLE = 34919 # GL/glext.h:345 +GL_ARRAY_BUFFER = 34962 # GL/glext.h:346 +GL_ELEMENT_ARRAY_BUFFER = 34963 # GL/glext.h:347 +GL_ARRAY_BUFFER_BINDING = 34964 # GL/glext.h:348 +GL_ELEMENT_ARRAY_BUFFER_BINDING = 34965 # GL/glext.h:349 +GL_VERTEX_ARRAY_BUFFER_BINDING = 34966 # GL/glext.h:350 +GL_NORMAL_ARRAY_BUFFER_BINDING = 34967 # GL/glext.h:351 +GL_COLOR_ARRAY_BUFFER_BINDING = 34968 # GL/glext.h:352 +GL_INDEX_ARRAY_BUFFER_BINDING = 34969 # GL/glext.h:353 +GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING = 34970 # GL/glext.h:354 +GL_EDGE_FLAG_ARRAY_BUFFER_BINDING = 34971 # GL/glext.h:355 +GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING = 34972 # GL/glext.h:356 +GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING = 34973 # GL/glext.h:357 +GL_WEIGHT_ARRAY_BUFFER_BINDING = 34974 # GL/glext.h:358 +GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 34975 # GL/glext.h:359 +GL_READ_ONLY = 35000 # GL/glext.h:360 +GL_WRITE_ONLY = 35001 # GL/glext.h:361 +GL_READ_WRITE = 35002 # GL/glext.h:362 +GL_BUFFER_ACCESS = 35003 # GL/glext.h:363 +GL_BUFFER_MAPPED = 35004 # GL/glext.h:364 +GL_BUFFER_MAP_POINTER = 35005 # GL/glext.h:365 +GL_STREAM_DRAW = 35040 # GL/glext.h:366 +GL_STREAM_READ = 35041 # GL/glext.h:367 +GL_STREAM_COPY = 35042 # GL/glext.h:368 +GL_STATIC_DRAW = 35044 # GL/glext.h:369 +GL_STATIC_READ = 35045 # GL/glext.h:370 +GL_STATIC_COPY = 35046 # GL/glext.h:371 +GL_DYNAMIC_DRAW = 35048 # GL/glext.h:372 +GL_DYNAMIC_READ = 35049 # GL/glext.h:373 +GL_DYNAMIC_COPY = 35050 # GL/glext.h:374 +GL_SAMPLES_PASSED = 35092 # GL/glext.h:375 +GL_FOG_COORD_SRC = 33872 # GL/glext.h:376 +GL_FOG_COORD = 33873 # GL/glext.h:377 +GL_CURRENT_FOG_COORD = 33875 # GL/glext.h:378 +GL_FOG_COORD_ARRAY_TYPE = 33876 # GL/glext.h:379 +GL_FOG_COORD_ARRAY_STRIDE = 33877 # GL/glext.h:380 +GL_FOG_COORD_ARRAY_POINTER = 33878 # GL/glext.h:381 +GL_FOG_COORD_ARRAY = 33879 # GL/glext.h:382 +GL_FOG_COORD_ARRAY_BUFFER_BINDING = 34973 # GL/glext.h:383 +GL_SRC0_RGB = 34176 # GL/glext.h:384 +GL_SRC1_RGB = 34177 # GL/glext.h:385 +GL_SRC2_RGB = 34178 # GL/glext.h:386 +GL_SRC0_ALPHA = 34184 # GL/glext.h:387 +GL_SRC1_ALPHA = 34185 # GL/glext.h:388 +GL_SRC2_ALPHA = 34186 # GL/glext.h:389 +# VERSION_2_0 (GL/glext.h:392) +GL_BLEND_EQUATION_RGB = 32777 # GL/glext.h:393 +GL_VERTEX_ATTRIB_ARRAY_ENABLED = 34338 # GL/glext.h:394 +GL_VERTEX_ATTRIB_ARRAY_SIZE = 34339 # GL/glext.h:395 +GL_VERTEX_ATTRIB_ARRAY_STRIDE = 34340 # GL/glext.h:396 +GL_VERTEX_ATTRIB_ARRAY_TYPE = 34341 # GL/glext.h:397 +GL_CURRENT_VERTEX_ATTRIB = 34342 # GL/glext.h:398 +GL_VERTEX_PROGRAM_POINT_SIZE = 34370 # GL/glext.h:399 +GL_VERTEX_PROGRAM_TWO_SIDE = 34371 # GL/glext.h:400 +GL_VERTEX_ATTRIB_ARRAY_POINTER = 34373 # GL/glext.h:401 +GL_STENCIL_BACK_FUNC = 34816 # GL/glext.h:402 +GL_STENCIL_BACK_FAIL = 34817 # GL/glext.h:403 +GL_STENCIL_BACK_PASS_DEPTH_FAIL = 34818 # GL/glext.h:404 +GL_STENCIL_BACK_PASS_DEPTH_PASS = 34819 # GL/glext.h:405 +GL_MAX_DRAW_BUFFERS = 34852 # GL/glext.h:406 +GL_DRAW_BUFFER0 = 34853 # GL/glext.h:407 +GL_DRAW_BUFFER1 = 34854 # GL/glext.h:408 +GL_DRAW_BUFFER2 = 34855 # GL/glext.h:409 +GL_DRAW_BUFFER3 = 34856 # GL/glext.h:410 +GL_DRAW_BUFFER4 = 34857 # GL/glext.h:411 +GL_DRAW_BUFFER5 = 34858 # GL/glext.h:412 +GL_DRAW_BUFFER6 = 34859 # GL/glext.h:413 +GL_DRAW_BUFFER7 = 34860 # GL/glext.h:414 +GL_DRAW_BUFFER8 = 34861 # GL/glext.h:415 +GL_DRAW_BUFFER9 = 34862 # GL/glext.h:416 +GL_DRAW_BUFFER10 = 34863 # GL/glext.h:417 +GL_DRAW_BUFFER11 = 34864 # GL/glext.h:418 +GL_DRAW_BUFFER12 = 34865 # GL/glext.h:419 +GL_DRAW_BUFFER13 = 34866 # GL/glext.h:420 +GL_DRAW_BUFFER14 = 34867 # GL/glext.h:421 +GL_DRAW_BUFFER15 = 34868 # GL/glext.h:422 +GL_BLEND_EQUATION_ALPHA = 34877 # GL/glext.h:423 +GL_POINT_SPRITE = 34913 # GL/glext.h:424 +GL_COORD_REPLACE = 34914 # GL/glext.h:425 +GL_MAX_VERTEX_ATTRIBS = 34921 # GL/glext.h:426 +GL_VERTEX_ATTRIB_ARRAY_NORMALIZED = 34922 # GL/glext.h:427 +GL_MAX_TEXTURE_COORDS = 34929 # GL/glext.h:428 +GL_MAX_TEXTURE_IMAGE_UNITS = 34930 # GL/glext.h:429 +GL_FRAGMENT_SHADER = 35632 # GL/glext.h:430 +GL_VERTEX_SHADER = 35633 # GL/glext.h:431 +GL_MAX_FRAGMENT_UNIFORM_COMPONENTS = 35657 # GL/glext.h:432 +GL_MAX_VERTEX_UNIFORM_COMPONENTS = 35658 # GL/glext.h:433 +GL_MAX_VARYING_FLOATS = 35659 # GL/glext.h:434 +GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS = 35660 # GL/glext.h:435 +GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS = 35661 # GL/glext.h:436 +GL_SHADER_TYPE = 35663 # GL/glext.h:437 +GL_FLOAT_VEC2 = 35664 # GL/glext.h:438 +GL_FLOAT_VEC3 = 35665 # GL/glext.h:439 +GL_FLOAT_VEC4 = 35666 # GL/glext.h:440 +GL_INT_VEC2 = 35667 # GL/glext.h:441 +GL_INT_VEC3 = 35668 # GL/glext.h:442 +GL_INT_VEC4 = 35669 # GL/glext.h:443 +GL_BOOL = 35670 # GL/glext.h:444 +GL_BOOL_VEC2 = 35671 # GL/glext.h:445 +GL_BOOL_VEC3 = 35672 # GL/glext.h:446 +GL_BOOL_VEC4 = 35673 # GL/glext.h:447 +GL_FLOAT_MAT2 = 35674 # GL/glext.h:448 +GL_FLOAT_MAT3 = 35675 # GL/glext.h:449 +GL_FLOAT_MAT4 = 35676 # GL/glext.h:450 +GL_SAMPLER_1D = 35677 # GL/glext.h:451 +GL_SAMPLER_2D = 35678 # GL/glext.h:452 +GL_SAMPLER_3D = 35679 # GL/glext.h:453 +GL_SAMPLER_CUBE = 35680 # GL/glext.h:454 +GL_SAMPLER_1D_SHADOW = 35681 # GL/glext.h:455 +GL_SAMPLER_2D_SHADOW = 35682 # GL/glext.h:456 +GL_DELETE_STATUS = 35712 # GL/glext.h:457 +GL_COMPILE_STATUS = 35713 # GL/glext.h:458 +GL_LINK_STATUS = 35714 # GL/glext.h:459 +GL_VALIDATE_STATUS = 35715 # GL/glext.h:460 +GL_INFO_LOG_LENGTH = 35716 # GL/glext.h:461 +GL_ATTACHED_SHADERS = 35717 # GL/glext.h:462 +GL_ACTIVE_UNIFORMS = 35718 # GL/glext.h:463 +GL_ACTIVE_UNIFORM_MAX_LENGTH = 35719 # GL/glext.h:464 +GL_SHADER_SOURCE_LENGTH = 35720 # GL/glext.h:465 +GL_ACTIVE_ATTRIBUTES = 35721 # GL/glext.h:466 +GL_ACTIVE_ATTRIBUTE_MAX_LENGTH = 35722 # GL/glext.h:467 +GL_FRAGMENT_SHADER_DERIVATIVE_HINT = 35723 # GL/glext.h:468 +GL_SHADING_LANGUAGE_VERSION = 35724 # GL/glext.h:469 +GL_CURRENT_PROGRAM = 35725 # GL/glext.h:470 +GL_POINT_SPRITE_COORD_ORIGIN = 36000 # GL/glext.h:471 +GL_LOWER_LEFT = 36001 # GL/glext.h:472 +GL_UPPER_LEFT = 36002 # GL/glext.h:473 +GL_STENCIL_BACK_REF = 36003 # GL/glext.h:474 +GL_STENCIL_BACK_VALUE_MASK = 36004 # GL/glext.h:475 +GL_STENCIL_BACK_WRITEMASK = 36005 # GL/glext.h:476 +# VERSION_2_1 (GL/glext.h:479) +GL_PIXEL_PACK_BUFFER = 35051 # GL/glext.h:480 +GL_PIXEL_UNPACK_BUFFER = 35052 # GL/glext.h:481 +GL_PIXEL_PACK_BUFFER_BINDING = 35053 # GL/glext.h:482 +GL_PIXEL_UNPACK_BUFFER_BINDING = 35055 # GL/glext.h:483 +GL_SRGB = 35904 # GL/glext.h:484 +GL_SRGB8 = 35905 # GL/glext.h:485 +GL_SRGB_ALPHA = 35906 # GL/glext.h:486 +GL_SRGB8_ALPHA8 = 35907 # GL/glext.h:487 +GL_SLUMINANCE_ALPHA = 35908 # GL/glext.h:488 +GL_SLUMINANCE8_ALPHA8 = 35909 # GL/glext.h:489 +GL_SLUMINANCE = 35910 # GL/glext.h:490 +GL_SLUMINANCE8 = 35911 # GL/glext.h:491 +GL_COMPRESSED_SRGB = 35912 # GL/glext.h:492 +GL_COMPRESSED_SRGB_ALPHA = 35913 # GL/glext.h:493 +GL_COMPRESSED_SLUMINANCE = 35914 # GL/glext.h:494 +GL_COMPRESSED_SLUMINANCE_ALPHA = 35915 # GL/glext.h:495 +GL_FLOAT_MAT2x3 = 35685 # GL/glext.h:496 +GL_FLOAT_MAT2x4 = 35686 # GL/glext.h:497 +GL_FLOAT_MAT3x2 = 35687 # GL/glext.h:498 +GL_FLOAT_MAT3x4 = 35688 # GL/glext.h:499 +GL_FLOAT_MAT4x2 = 35689 # GL/glext.h:500 +GL_FLOAT_MAT4x3 = 35690 # GL/glext.h:501 +GL_CURRENT_RASTER_SECONDARY_COLOR = 33887 # GL/glext.h:502 +# ARB_multitexture (GL/glext.h:505) +GL_TEXTURE0_ARB = 33984 # GL/glext.h:506 +GL_TEXTURE1_ARB = 33985 # GL/glext.h:507 +GL_TEXTURE2_ARB = 33986 # GL/glext.h:508 +GL_TEXTURE3_ARB = 33987 # GL/glext.h:509 +GL_TEXTURE4_ARB = 33988 # GL/glext.h:510 +GL_TEXTURE5_ARB = 33989 # GL/glext.h:511 +GL_TEXTURE6_ARB = 33990 # GL/glext.h:512 +GL_TEXTURE7_ARB = 33991 # GL/glext.h:513 +GL_TEXTURE8_ARB = 33992 # GL/glext.h:514 +GL_TEXTURE9_ARB = 33993 # GL/glext.h:515 +GL_TEXTURE10_ARB = 33994 # GL/glext.h:516 +GL_TEXTURE11_ARB = 33995 # GL/glext.h:517 +GL_TEXTURE12_ARB = 33996 # GL/glext.h:518 +GL_TEXTURE13_ARB = 33997 # GL/glext.h:519 +GL_TEXTURE14_ARB = 33998 # GL/glext.h:520 +GL_TEXTURE15_ARB = 33999 # GL/glext.h:521 +GL_TEXTURE16_ARB = 34000 # GL/glext.h:522 +GL_TEXTURE17_ARB = 34001 # GL/glext.h:523 +GL_TEXTURE18_ARB = 34002 # GL/glext.h:524 +GL_TEXTURE19_ARB = 34003 # GL/glext.h:525 +GL_TEXTURE20_ARB = 34004 # GL/glext.h:526 +GL_TEXTURE21_ARB = 34005 # GL/glext.h:527 +GL_TEXTURE22_ARB = 34006 # GL/glext.h:528 +GL_TEXTURE23_ARB = 34007 # GL/glext.h:529 +GL_TEXTURE24_ARB = 34008 # GL/glext.h:530 +GL_TEXTURE25_ARB = 34009 # GL/glext.h:531 +GL_TEXTURE26_ARB = 34010 # GL/glext.h:532 +GL_TEXTURE27_ARB = 34011 # GL/glext.h:533 +GL_TEXTURE28_ARB = 34012 # GL/glext.h:534 +GL_TEXTURE29_ARB = 34013 # GL/glext.h:535 +GL_TEXTURE30_ARB = 34014 # GL/glext.h:536 +GL_TEXTURE31_ARB = 34015 # GL/glext.h:537 +GL_ACTIVE_TEXTURE_ARB = 34016 # GL/glext.h:538 +GL_CLIENT_ACTIVE_TEXTURE_ARB = 34017 # GL/glext.h:539 +GL_MAX_TEXTURE_UNITS_ARB = 34018 # GL/glext.h:540 +# ARB_transpose_matrix (GL/glext.h:543) +GL_TRANSPOSE_MODELVIEW_MATRIX_ARB = 34019 # GL/glext.h:544 +GL_TRANSPOSE_PROJECTION_MATRIX_ARB = 34020 # GL/glext.h:545 +GL_TRANSPOSE_TEXTURE_MATRIX_ARB = 34021 # GL/glext.h:546 +GL_TRANSPOSE_COLOR_MATRIX_ARB = 34022 # GL/glext.h:547 +# ARB_multisample (GL/glext.h:550) +GL_MULTISAMPLE_ARB = 32925 # GL/glext.h:551 +GL_SAMPLE_ALPHA_TO_COVERAGE_ARB = 32926 # GL/glext.h:552 +GL_SAMPLE_ALPHA_TO_ONE_ARB = 32927 # GL/glext.h:553 +GL_SAMPLE_COVERAGE_ARB = 32928 # GL/glext.h:554 +GL_SAMPLE_BUFFERS_ARB = 32936 # GL/glext.h:555 +GL_SAMPLES_ARB = 32937 # GL/glext.h:556 +GL_SAMPLE_COVERAGE_VALUE_ARB = 32938 # GL/glext.h:557 +GL_SAMPLE_COVERAGE_INVERT_ARB = 32939 # GL/glext.h:558 +GL_MULTISAMPLE_BIT_ARB = 536870912 # GL/glext.h:559 +# ARB_texture_env_add (GL/glext.h:562) +# ARB_texture_cube_map (GL/glext.h:565) +GL_NORMAL_MAP_ARB = 34065 # GL/glext.h:566 +GL_REFLECTION_MAP_ARB = 34066 # GL/glext.h:567 +GL_TEXTURE_CUBE_MAP_ARB = 34067 # GL/glext.h:568 +GL_TEXTURE_BINDING_CUBE_MAP_ARB = 34068 # GL/glext.h:569 +GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB = 34069 # GL/glext.h:570 +GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB = 34070 # GL/glext.h:571 +GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB = 34071 # GL/glext.h:572 +GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB = 34072 # GL/glext.h:573 +GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB = 34073 # GL/glext.h:574 +GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB = 34074 # GL/glext.h:575 +GL_PROXY_TEXTURE_CUBE_MAP_ARB = 34075 # GL/glext.h:576 +GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB = 34076 # GL/glext.h:577 +# ARB_texture_compression (GL/glext.h:580) +GL_COMPRESSED_ALPHA_ARB = 34025 # GL/glext.h:581 +GL_COMPRESSED_LUMINANCE_ARB = 34026 # GL/glext.h:582 +GL_COMPRESSED_LUMINANCE_ALPHA_ARB = 34027 # GL/glext.h:583 +GL_COMPRESSED_INTENSITY_ARB = 34028 # GL/glext.h:584 +GL_COMPRESSED_RGB_ARB = 34029 # GL/glext.h:585 +GL_COMPRESSED_RGBA_ARB = 34030 # GL/glext.h:586 +GL_TEXTURE_COMPRESSION_HINT_ARB = 34031 # GL/glext.h:587 +GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB = 34464 # GL/glext.h:588 +GL_TEXTURE_COMPRESSED_ARB = 34465 # GL/glext.h:589 +GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB = 34466 # GL/glext.h:590 +GL_COMPRESSED_TEXTURE_FORMATS_ARB = 34467 # GL/glext.h:591 +# ARB_texture_border_clamp (GL/glext.h:594) +GL_CLAMP_TO_BORDER_ARB = 33069 # GL/glext.h:595 +# ARB_point_parameters (GL/glext.h:598) +GL_POINT_SIZE_MIN_ARB = 33062 # GL/glext.h:599 +GL_POINT_SIZE_MAX_ARB = 33063 # GL/glext.h:600 +GL_POINT_FADE_THRESHOLD_SIZE_ARB = 33064 # GL/glext.h:601 +GL_POINT_DISTANCE_ATTENUATION_ARB = 33065 # GL/glext.h:602 +# ARB_vertex_blend (GL/glext.h:605) +GL_MAX_VERTEX_UNITS_ARB = 34468 # GL/glext.h:606 +GL_ACTIVE_VERTEX_UNITS_ARB = 34469 # GL/glext.h:607 +GL_WEIGHT_SUM_UNITY_ARB = 34470 # GL/glext.h:608 +GL_VERTEX_BLEND_ARB = 34471 # GL/glext.h:609 +GL_CURRENT_WEIGHT_ARB = 34472 # GL/glext.h:610 +GL_WEIGHT_ARRAY_TYPE_ARB = 34473 # GL/glext.h:611 +GL_WEIGHT_ARRAY_STRIDE_ARB = 34474 # GL/glext.h:612 +GL_WEIGHT_ARRAY_SIZE_ARB = 34475 # GL/glext.h:613 +GL_WEIGHT_ARRAY_POINTER_ARB = 34476 # GL/glext.h:614 +GL_WEIGHT_ARRAY_ARB = 34477 # GL/glext.h:615 +GL_MODELVIEW0_ARB = 5888 # GL/glext.h:616 +GL_MODELVIEW1_ARB = 34058 # GL/glext.h:617 +GL_MODELVIEW2_ARB = 34594 # GL/glext.h:618 +GL_MODELVIEW3_ARB = 34595 # GL/glext.h:619 +GL_MODELVIEW4_ARB = 34596 # GL/glext.h:620 +GL_MODELVIEW5_ARB = 34597 # GL/glext.h:621 +GL_MODELVIEW6_ARB = 34598 # GL/glext.h:622 +GL_MODELVIEW7_ARB = 34599 # GL/glext.h:623 +GL_MODELVIEW8_ARB = 34600 # GL/glext.h:624 +GL_MODELVIEW9_ARB = 34601 # GL/glext.h:625 +GL_MODELVIEW10_ARB = 34602 # GL/glext.h:626 +GL_MODELVIEW11_ARB = 34603 # GL/glext.h:627 +GL_MODELVIEW12_ARB = 34604 # GL/glext.h:628 +GL_MODELVIEW13_ARB = 34605 # GL/glext.h:629 +GL_MODELVIEW14_ARB = 34606 # GL/glext.h:630 +GL_MODELVIEW15_ARB = 34607 # GL/glext.h:631 +GL_MODELVIEW16_ARB = 34608 # GL/glext.h:632 +GL_MODELVIEW17_ARB = 34609 # GL/glext.h:633 +GL_MODELVIEW18_ARB = 34610 # GL/glext.h:634 +GL_MODELVIEW19_ARB = 34611 # GL/glext.h:635 +GL_MODELVIEW20_ARB = 34612 # GL/glext.h:636 +GL_MODELVIEW21_ARB = 34613 # GL/glext.h:637 +GL_MODELVIEW22_ARB = 34614 # GL/glext.h:638 +GL_MODELVIEW23_ARB = 34615 # GL/glext.h:639 +GL_MODELVIEW24_ARB = 34616 # GL/glext.h:640 +GL_MODELVIEW25_ARB = 34617 # GL/glext.h:641 +GL_MODELVIEW26_ARB = 34618 # GL/glext.h:642 +GL_MODELVIEW27_ARB = 34619 # GL/glext.h:643 +GL_MODELVIEW28_ARB = 34620 # GL/glext.h:644 +GL_MODELVIEW29_ARB = 34621 # GL/glext.h:645 +GL_MODELVIEW30_ARB = 34622 # GL/glext.h:646 +GL_MODELVIEW31_ARB = 34623 # GL/glext.h:647 +# ARB_matrix_palette (GL/glext.h:650) +GL_MATRIX_PALETTE_ARB = 34880 # GL/glext.h:651 +GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB = 34881 # GL/glext.h:652 +GL_MAX_PALETTE_MATRICES_ARB = 34882 # GL/glext.h:653 +GL_CURRENT_PALETTE_MATRIX_ARB = 34883 # GL/glext.h:654 +GL_MATRIX_INDEX_ARRAY_ARB = 34884 # GL/glext.h:655 +GL_CURRENT_MATRIX_INDEX_ARB = 34885 # GL/glext.h:656 +GL_MATRIX_INDEX_ARRAY_SIZE_ARB = 34886 # GL/glext.h:657 +GL_MATRIX_INDEX_ARRAY_TYPE_ARB = 34887 # GL/glext.h:658 +GL_MATRIX_INDEX_ARRAY_STRIDE_ARB = 34888 # GL/glext.h:659 +GL_MATRIX_INDEX_ARRAY_POINTER_ARB = 34889 # GL/glext.h:660 +# ARB_texture_env_combine (GL/glext.h:663) +GL_COMBINE_ARB = 34160 # GL/glext.h:664 +GL_COMBINE_RGB_ARB = 34161 # GL/glext.h:665 +GL_COMBINE_ALPHA_ARB = 34162 # GL/glext.h:666 +GL_SOURCE0_RGB_ARB = 34176 # GL/glext.h:667 +GL_SOURCE1_RGB_ARB = 34177 # GL/glext.h:668 +GL_SOURCE2_RGB_ARB = 34178 # GL/glext.h:669 +GL_SOURCE0_ALPHA_ARB = 34184 # GL/glext.h:670 +GL_SOURCE1_ALPHA_ARB = 34185 # GL/glext.h:671 +GL_SOURCE2_ALPHA_ARB = 34186 # GL/glext.h:672 +GL_OPERAND0_RGB_ARB = 34192 # GL/glext.h:673 +GL_OPERAND1_RGB_ARB = 34193 # GL/glext.h:674 +GL_OPERAND2_RGB_ARB = 34194 # GL/glext.h:675 +GL_OPERAND0_ALPHA_ARB = 34200 # GL/glext.h:676 +GL_OPERAND1_ALPHA_ARB = 34201 # GL/glext.h:677 +GL_OPERAND2_ALPHA_ARB = 34202 # GL/glext.h:678 +GL_RGB_SCALE_ARB = 34163 # GL/glext.h:679 +GL_ADD_SIGNED_ARB = 34164 # GL/glext.h:680 +GL_INTERPOLATE_ARB = 34165 # GL/glext.h:681 +GL_SUBTRACT_ARB = 34023 # GL/glext.h:682 +GL_CONSTANT_ARB = 34166 # GL/glext.h:683 +GL_PRIMARY_COLOR_ARB = 34167 # GL/glext.h:684 +GL_PREVIOUS_ARB = 34168 # GL/glext.h:685 +# ARB_texture_env_crossbar (GL/glext.h:688) +# ARB_texture_env_dot3 (GL/glext.h:691) +GL_DOT3_RGB_ARB = 34478 # GL/glext.h:692 +GL_DOT3_RGBA_ARB = 34479 # GL/glext.h:693 +# ARB_texture_mirrored_repeat (GL/glext.h:696) +GL_MIRRORED_REPEAT_ARB = 33648 # GL/glext.h:697 +# ARB_depth_texture (GL/glext.h:700) +GL_DEPTH_COMPONENT16_ARB = 33189 # GL/glext.h:701 +GL_DEPTH_COMPONENT24_ARB = 33190 # GL/glext.h:702 +GL_DEPTH_COMPONENT32_ARB = 33191 # GL/glext.h:703 +GL_TEXTURE_DEPTH_SIZE_ARB = 34890 # GL/glext.h:704 +GL_DEPTH_TEXTURE_MODE_ARB = 34891 # GL/glext.h:705 +# ARB_shadow (GL/glext.h:708) +GL_TEXTURE_COMPARE_MODE_ARB = 34892 # GL/glext.h:709 +GL_TEXTURE_COMPARE_FUNC_ARB = 34893 # GL/glext.h:710 +GL_COMPARE_R_TO_TEXTURE_ARB = 34894 # GL/glext.h:711 +# ARB_shadow_ambient (GL/glext.h:714) +GL_TEXTURE_COMPARE_FAIL_VALUE_ARB = 32959 # GL/glext.h:715 +# ARB_window_pos (GL/glext.h:718) +# ARB_vertex_program (GL/glext.h:721) +GL_COLOR_SUM_ARB = 33880 # GL/glext.h:722 +GL_VERTEX_PROGRAM_ARB = 34336 # GL/glext.h:723 +GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB = 34338 # GL/glext.h:724 +GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB = 34339 # GL/glext.h:725 +GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB = 34340 # GL/glext.h:726 +GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB = 34341 # GL/glext.h:727 +GL_CURRENT_VERTEX_ATTRIB_ARB = 34342 # GL/glext.h:728 +GL_PROGRAM_LENGTH_ARB = 34343 # GL/glext.h:729 +GL_PROGRAM_STRING_ARB = 34344 # GL/glext.h:730 +GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB = 34350 # GL/glext.h:731 +GL_MAX_PROGRAM_MATRICES_ARB = 34351 # GL/glext.h:732 +GL_CURRENT_MATRIX_STACK_DEPTH_ARB = 34368 # GL/glext.h:733 +GL_CURRENT_MATRIX_ARB = 34369 # GL/glext.h:734 +GL_VERTEX_PROGRAM_POINT_SIZE_ARB = 34370 # GL/glext.h:735 +GL_VERTEX_PROGRAM_TWO_SIDE_ARB = 34371 # GL/glext.h:736 +GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB = 34373 # GL/glext.h:737 +GL_PROGRAM_ERROR_POSITION_ARB = 34379 # GL/glext.h:738 +GL_PROGRAM_BINDING_ARB = 34423 # GL/glext.h:739 +GL_MAX_VERTEX_ATTRIBS_ARB = 34921 # GL/glext.h:740 +GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB = 34922 # GL/glext.h:741 +GL_PROGRAM_ERROR_STRING_ARB = 34932 # GL/glext.h:742 +GL_PROGRAM_FORMAT_ASCII_ARB = 34933 # GL/glext.h:743 +GL_PROGRAM_FORMAT_ARB = 34934 # GL/glext.h:744 +GL_PROGRAM_INSTRUCTIONS_ARB = 34976 # GL/glext.h:745 +GL_MAX_PROGRAM_INSTRUCTIONS_ARB = 34977 # GL/glext.h:746 +GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB = 34978 # GL/glext.h:747 +GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB = 34979 # GL/glext.h:748 +GL_PROGRAM_TEMPORARIES_ARB = 34980 # GL/glext.h:749 +GL_MAX_PROGRAM_TEMPORARIES_ARB = 34981 # GL/glext.h:750 +GL_PROGRAM_NATIVE_TEMPORARIES_ARB = 34982 # GL/glext.h:751 +GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB = 34983 # GL/glext.h:752 +GL_PROGRAM_PARAMETERS_ARB = 34984 # GL/glext.h:753 +GL_MAX_PROGRAM_PARAMETERS_ARB = 34985 # GL/glext.h:754 +GL_PROGRAM_NATIVE_PARAMETERS_ARB = 34986 # GL/glext.h:755 +GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB = 34987 # GL/glext.h:756 +GL_PROGRAM_ATTRIBS_ARB = 34988 # GL/glext.h:757 +GL_MAX_PROGRAM_ATTRIBS_ARB = 34989 # GL/glext.h:758 +GL_PROGRAM_NATIVE_ATTRIBS_ARB = 34990 # GL/glext.h:759 +GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB = 34991 # GL/glext.h:760 +GL_PROGRAM_ADDRESS_REGISTERS_ARB = 34992 # GL/glext.h:761 +GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB = 34993 # GL/glext.h:762 +GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB = 34994 # GL/glext.h:763 +GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB = 34995 # GL/glext.h:764 +GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB = 34996 # GL/glext.h:765 +GL_MAX_PROGRAM_ENV_PARAMETERS_ARB = 34997 # GL/glext.h:766 +GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB = 34998 # GL/glext.h:767 +GL_TRANSPOSE_CURRENT_MATRIX_ARB = 34999 # GL/glext.h:768 +GL_MATRIX0_ARB = 35008 # GL/glext.h:769 +GL_MATRIX1_ARB = 35009 # GL/glext.h:770 +GL_MATRIX2_ARB = 35010 # GL/glext.h:771 +GL_MATRIX3_ARB = 35011 # GL/glext.h:772 +GL_MATRIX4_ARB = 35012 # GL/glext.h:773 +GL_MATRIX5_ARB = 35013 # GL/glext.h:774 +GL_MATRIX6_ARB = 35014 # GL/glext.h:775 +GL_MATRIX7_ARB = 35015 # GL/glext.h:776 +GL_MATRIX8_ARB = 35016 # GL/glext.h:777 +GL_MATRIX9_ARB = 35017 # GL/glext.h:778 +GL_MATRIX10_ARB = 35018 # GL/glext.h:779 +GL_MATRIX11_ARB = 35019 # GL/glext.h:780 +GL_MATRIX12_ARB = 35020 # GL/glext.h:781 +GL_MATRIX13_ARB = 35021 # GL/glext.h:782 +GL_MATRIX14_ARB = 35022 # GL/glext.h:783 +GL_MATRIX15_ARB = 35023 # GL/glext.h:784 +GL_MATRIX16_ARB = 35024 # GL/glext.h:785 +GL_MATRIX17_ARB = 35025 # GL/glext.h:786 +GL_MATRIX18_ARB = 35026 # GL/glext.h:787 +GL_MATRIX19_ARB = 35027 # GL/glext.h:788 +GL_MATRIX20_ARB = 35028 # GL/glext.h:789 +GL_MATRIX21_ARB = 35029 # GL/glext.h:790 +GL_MATRIX22_ARB = 35030 # GL/glext.h:791 +GL_MATRIX23_ARB = 35031 # GL/glext.h:792 +GL_MATRIX24_ARB = 35032 # GL/glext.h:793 +GL_MATRIX25_ARB = 35033 # GL/glext.h:794 +GL_MATRIX26_ARB = 35034 # GL/glext.h:795 +GL_MATRIX27_ARB = 35035 # GL/glext.h:796 +GL_MATRIX28_ARB = 35036 # GL/glext.h:797 +GL_MATRIX29_ARB = 35037 # GL/glext.h:798 +GL_MATRIX30_ARB = 35038 # GL/glext.h:799 +GL_MATRIX31_ARB = 35039 # GL/glext.h:800 +# ARB_fragment_program (GL/glext.h:803) +GL_FRAGMENT_PROGRAM_ARB = 34820 # GL/glext.h:804 +GL_PROGRAM_ALU_INSTRUCTIONS_ARB = 34821 # GL/glext.h:805 +GL_PROGRAM_TEX_INSTRUCTIONS_ARB = 34822 # GL/glext.h:806 +GL_PROGRAM_TEX_INDIRECTIONS_ARB = 34823 # GL/glext.h:807 +GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB = 34824 # GL/glext.h:808 +GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB = 34825 # GL/glext.h:809 +GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB = 34826 # GL/glext.h:810 +GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB = 34827 # GL/glext.h:811 +GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB = 34828 # GL/glext.h:812 +GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB = 34829 # GL/glext.h:813 +GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB = 34830 # GL/glext.h:814 +GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB = 34831 # GL/glext.h:815 +GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB = 34832 # GL/glext.h:816 +GL_MAX_TEXTURE_COORDS_ARB = 34929 # GL/glext.h:817 +GL_MAX_TEXTURE_IMAGE_UNITS_ARB = 34930 # GL/glext.h:818 +# ARB_vertex_buffer_object (GL/glext.h:821) +GL_BUFFER_SIZE_ARB = 34660 # GL/glext.h:822 +GL_BUFFER_USAGE_ARB = 34661 # GL/glext.h:823 +GL_ARRAY_BUFFER_ARB = 34962 # GL/glext.h:824 +GL_ELEMENT_ARRAY_BUFFER_ARB = 34963 # GL/glext.h:825 +GL_ARRAY_BUFFER_BINDING_ARB = 34964 # GL/glext.h:826 +GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB = 34965 # GL/glext.h:827 +GL_VERTEX_ARRAY_BUFFER_BINDING_ARB = 34966 # GL/glext.h:828 +GL_NORMAL_ARRAY_BUFFER_BINDING_ARB = 34967 # GL/glext.h:829 +GL_COLOR_ARRAY_BUFFER_BINDING_ARB = 34968 # GL/glext.h:830 +GL_INDEX_ARRAY_BUFFER_BINDING_ARB = 34969 # GL/glext.h:831 +GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB = 34970 # GL/glext.h:832 +GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB = 34971 # GL/glext.h:833 +GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB = 34972 # GL/glext.h:834 +GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB = 34973 # GL/glext.h:835 +GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB = 34974 # GL/glext.h:836 +GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB = 34975 # GL/glext.h:837 +GL_READ_ONLY_ARB = 35000 # GL/glext.h:838 +GL_WRITE_ONLY_ARB = 35001 # GL/glext.h:839 +GL_READ_WRITE_ARB = 35002 # GL/glext.h:840 +GL_BUFFER_ACCESS_ARB = 35003 # GL/glext.h:841 +GL_BUFFER_MAPPED_ARB = 35004 # GL/glext.h:842 +GL_BUFFER_MAP_POINTER_ARB = 35005 # GL/glext.h:843 +GL_STREAM_DRAW_ARB = 35040 # GL/glext.h:844 +GL_STREAM_READ_ARB = 35041 # GL/glext.h:845 +GL_STREAM_COPY_ARB = 35042 # GL/glext.h:846 +GL_STATIC_DRAW_ARB = 35044 # GL/glext.h:847 +GL_STATIC_READ_ARB = 35045 # GL/glext.h:848 +GL_STATIC_COPY_ARB = 35046 # GL/glext.h:849 +GL_DYNAMIC_DRAW_ARB = 35048 # GL/glext.h:850 +GL_DYNAMIC_READ_ARB = 35049 # GL/glext.h:851 +GL_DYNAMIC_COPY_ARB = 35050 # GL/glext.h:852 +# ARB_occlusion_query (GL/glext.h:855) +GL_QUERY_COUNTER_BITS_ARB = 34916 # GL/glext.h:856 +GL_CURRENT_QUERY_ARB = 34917 # GL/glext.h:857 +GL_QUERY_RESULT_ARB = 34918 # GL/glext.h:858 +GL_QUERY_RESULT_AVAILABLE_ARB = 34919 # GL/glext.h:859 +GL_SAMPLES_PASSED_ARB = 35092 # GL/glext.h:860 +# ARB_shader_objects (GL/glext.h:863) +GL_PROGRAM_OBJECT_ARB = 35648 # GL/glext.h:864 +GL_SHADER_OBJECT_ARB = 35656 # GL/glext.h:865 +GL_OBJECT_TYPE_ARB = 35662 # GL/glext.h:866 +GL_OBJECT_SUBTYPE_ARB = 35663 # GL/glext.h:867 +GL_FLOAT_VEC2_ARB = 35664 # GL/glext.h:868 +GL_FLOAT_VEC3_ARB = 35665 # GL/glext.h:869 +GL_FLOAT_VEC4_ARB = 35666 # GL/glext.h:870 +GL_INT_VEC2_ARB = 35667 # GL/glext.h:871 +GL_INT_VEC3_ARB = 35668 # GL/glext.h:872 +GL_INT_VEC4_ARB = 35669 # GL/glext.h:873 +GL_BOOL_ARB = 35670 # GL/glext.h:874 +GL_BOOL_VEC2_ARB = 35671 # GL/glext.h:875 +GL_BOOL_VEC3_ARB = 35672 # GL/glext.h:876 +GL_BOOL_VEC4_ARB = 35673 # GL/glext.h:877 +GL_FLOAT_MAT2_ARB = 35674 # GL/glext.h:878 +GL_FLOAT_MAT3_ARB = 35675 # GL/glext.h:879 +GL_FLOAT_MAT4_ARB = 35676 # GL/glext.h:880 +GL_SAMPLER_1D_ARB = 35677 # GL/glext.h:881 +GL_SAMPLER_2D_ARB = 35678 # GL/glext.h:882 +GL_SAMPLER_3D_ARB = 35679 # GL/glext.h:883 +GL_SAMPLER_CUBE_ARB = 35680 # GL/glext.h:884 +GL_SAMPLER_1D_SHADOW_ARB = 35681 # GL/glext.h:885 +GL_SAMPLER_2D_SHADOW_ARB = 35682 # GL/glext.h:886 +GL_SAMPLER_2D_RECT_ARB = 35683 # GL/glext.h:887 +GL_SAMPLER_2D_RECT_SHADOW_ARB = 35684 # GL/glext.h:888 +GL_OBJECT_DELETE_STATUS_ARB = 35712 # GL/glext.h:889 +GL_OBJECT_COMPILE_STATUS_ARB = 35713 # GL/glext.h:890 +GL_OBJECT_LINK_STATUS_ARB = 35714 # GL/glext.h:891 +GL_OBJECT_VALIDATE_STATUS_ARB = 35715 # GL/glext.h:892 +GL_OBJECT_INFO_LOG_LENGTH_ARB = 35716 # GL/glext.h:893 +GL_OBJECT_ATTACHED_OBJECTS_ARB = 35717 # GL/glext.h:894 +GL_OBJECT_ACTIVE_UNIFORMS_ARB = 35718 # GL/glext.h:895 +GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB = 35719 # GL/glext.h:896 +GL_OBJECT_SHADER_SOURCE_LENGTH_ARB = 35720 # GL/glext.h:897 +# ARB_vertex_shader (GL/glext.h:900) +GL_VERTEX_SHADER_ARB = 35633 # GL/glext.h:901 +GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB = 35658 # GL/glext.h:902 +GL_MAX_VARYING_FLOATS_ARB = 35659 # GL/glext.h:903 +GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB = 35660 # GL/glext.h:904 +GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB = 35661 # GL/glext.h:905 +GL_OBJECT_ACTIVE_ATTRIBUTES_ARB = 35721 # GL/glext.h:906 +GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB = 35722 # GL/glext.h:907 +# ARB_fragment_shader (GL/glext.h:910) +GL_FRAGMENT_SHADER_ARB = 35632 # GL/glext.h:911 +GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB = 35657 # GL/glext.h:912 +GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB = 35723 # GL/glext.h:913 +# ARB_shading_language_100 (GL/glext.h:916) +GL_SHADING_LANGUAGE_VERSION_ARB = 35724 # GL/glext.h:917 +# ARB_texture_non_power_of_two (GL/glext.h:920) +# ARB_point_sprite (GL/glext.h:923) +GL_POINT_SPRITE_ARB = 34913 # GL/glext.h:924 +GL_COORD_REPLACE_ARB = 34914 # GL/glext.h:925 +# ARB_fragment_program_shadow (GL/glext.h:928) +# ARB_draw_buffers (GL/glext.h:931) +GL_MAX_DRAW_BUFFERS_ARB = 34852 # GL/glext.h:932 +GL_DRAW_BUFFER0_ARB = 34853 # GL/glext.h:933 +GL_DRAW_BUFFER1_ARB = 34854 # GL/glext.h:934 +GL_DRAW_BUFFER2_ARB = 34855 # GL/glext.h:935 +GL_DRAW_BUFFER3_ARB = 34856 # GL/glext.h:936 +GL_DRAW_BUFFER4_ARB = 34857 # GL/glext.h:937 +GL_DRAW_BUFFER5_ARB = 34858 # GL/glext.h:938 +GL_DRAW_BUFFER6_ARB = 34859 # GL/glext.h:939 +GL_DRAW_BUFFER7_ARB = 34860 # GL/glext.h:940 +GL_DRAW_BUFFER8_ARB = 34861 # GL/glext.h:941 +GL_DRAW_BUFFER9_ARB = 34862 # GL/glext.h:942 +GL_DRAW_BUFFER10_ARB = 34863 # GL/glext.h:943 +GL_DRAW_BUFFER11_ARB = 34864 # GL/glext.h:944 +GL_DRAW_BUFFER12_ARB = 34865 # GL/glext.h:945 +GL_DRAW_BUFFER13_ARB = 34866 # GL/glext.h:946 +GL_DRAW_BUFFER14_ARB = 34867 # GL/glext.h:947 +GL_DRAW_BUFFER15_ARB = 34868 # GL/glext.h:948 +# ARB_texture_rectangle (GL/glext.h:951) +GL_TEXTURE_RECTANGLE_ARB = 34037 # GL/glext.h:952 +GL_TEXTURE_BINDING_RECTANGLE_ARB = 34038 # GL/glext.h:953 +GL_PROXY_TEXTURE_RECTANGLE_ARB = 34039 # GL/glext.h:954 +GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB = 34040 # GL/glext.h:955 +# ARB_color_buffer_float (GL/glext.h:958) +GL_RGBA_FLOAT_MODE_ARB = 34848 # GL/glext.h:959 +GL_CLAMP_VERTEX_COLOR_ARB = 35098 # GL/glext.h:960 +GL_CLAMP_FRAGMENT_COLOR_ARB = 35099 # GL/glext.h:961 +GL_CLAMP_READ_COLOR_ARB = 35100 # GL/glext.h:962 +GL_FIXED_ONLY_ARB = 35101 # GL/glext.h:963 +# ARB_half_float_pixel (GL/glext.h:966) +GL_HALF_FLOAT_ARB = 5131 # GL/glext.h:967 +# ARB_texture_float (GL/glext.h:970) +GL_TEXTURE_RED_TYPE_ARB = 35856 # GL/glext.h:971 +GL_TEXTURE_GREEN_TYPE_ARB = 35857 # GL/glext.h:972 +GL_TEXTURE_BLUE_TYPE_ARB = 35858 # GL/glext.h:973 +GL_TEXTURE_ALPHA_TYPE_ARB = 35859 # GL/glext.h:974 +GL_TEXTURE_LUMINANCE_TYPE_ARB = 35860 # GL/glext.h:975 +GL_TEXTURE_INTENSITY_TYPE_ARB = 35861 # GL/glext.h:976 +GL_TEXTURE_DEPTH_TYPE_ARB = 35862 # GL/glext.h:977 +GL_UNSIGNED_NORMALIZED_ARB = 35863 # GL/glext.h:978 +GL_RGBA32F_ARB = 34836 # GL/glext.h:979 +GL_RGB32F_ARB = 34837 # GL/glext.h:980 +GL_ALPHA32F_ARB = 34838 # GL/glext.h:981 +GL_INTENSITY32F_ARB = 34839 # GL/glext.h:982 +GL_LUMINANCE32F_ARB = 34840 # GL/glext.h:983 +GL_LUMINANCE_ALPHA32F_ARB = 34841 # GL/glext.h:984 +GL_RGBA16F_ARB = 34842 # GL/glext.h:985 +GL_RGB16F_ARB = 34843 # GL/glext.h:986 +GL_ALPHA16F_ARB = 34844 # GL/glext.h:987 +GL_INTENSITY16F_ARB = 34845 # GL/glext.h:988 +GL_LUMINANCE16F_ARB = 34846 # GL/glext.h:989 +GL_LUMINANCE_ALPHA16F_ARB = 34847 # GL/glext.h:990 +# ARB_pixel_buffer_object (GL/glext.h:993) +GL_PIXEL_PACK_BUFFER_ARB = 35051 # GL/glext.h:994 +GL_PIXEL_UNPACK_BUFFER_ARB = 35052 # GL/glext.h:995 +GL_PIXEL_PACK_BUFFER_BINDING_ARB = 35053 # GL/glext.h:996 +GL_PIXEL_UNPACK_BUFFER_BINDING_ARB = 35055 # GL/glext.h:997 +# EXT_abgr (GL/glext.h:1000) +GL_ABGR_EXT = 32768 # GL/glext.h:1001 +# EXT_blend_color (GL/glext.h:1004) +GL_CONSTANT_COLOR_EXT = 32769 # GL/glext.h:1005 +GL_ONE_MINUS_CONSTANT_COLOR_EXT = 32770 # GL/glext.h:1006 +GL_CONSTANT_ALPHA_EXT = 32771 # GL/glext.h:1007 +GL_ONE_MINUS_CONSTANT_ALPHA_EXT = 32772 # GL/glext.h:1008 +GL_BLEND_COLOR_EXT = 32773 # GL/glext.h:1009 +# EXT_polygon_offset (GL/glext.h:1012) +GL_POLYGON_OFFSET_EXT = 32823 # GL/glext.h:1013 +GL_POLYGON_OFFSET_FACTOR_EXT = 32824 # GL/glext.h:1014 +GL_POLYGON_OFFSET_BIAS_EXT = 32825 # GL/glext.h:1015 +# EXT_texture (GL/glext.h:1018) +GL_ALPHA4_EXT = 32827 # GL/glext.h:1019 +GL_ALPHA8_EXT = 32828 # GL/glext.h:1020 +GL_ALPHA12_EXT = 32829 # GL/glext.h:1021 +GL_ALPHA16_EXT = 32830 # GL/glext.h:1022 +GL_LUMINANCE4_EXT = 32831 # GL/glext.h:1023 +GL_LUMINANCE8_EXT = 32832 # GL/glext.h:1024 +GL_LUMINANCE12_EXT = 32833 # GL/glext.h:1025 +GL_LUMINANCE16_EXT = 32834 # GL/glext.h:1026 +GL_LUMINANCE4_ALPHA4_EXT = 32835 # GL/glext.h:1027 +GL_LUMINANCE6_ALPHA2_EXT = 32836 # GL/glext.h:1028 +GL_LUMINANCE8_ALPHA8_EXT = 32837 # GL/glext.h:1029 +GL_LUMINANCE12_ALPHA4_EXT = 32838 # GL/glext.h:1030 +GL_LUMINANCE12_ALPHA12_EXT = 32839 # GL/glext.h:1031 +GL_LUMINANCE16_ALPHA16_EXT = 32840 # GL/glext.h:1032 +GL_INTENSITY_EXT = 32841 # GL/glext.h:1033 +GL_INTENSITY4_EXT = 32842 # GL/glext.h:1034 +GL_INTENSITY8_EXT = 32843 # GL/glext.h:1035 +GL_INTENSITY12_EXT = 32844 # GL/glext.h:1036 +GL_INTENSITY16_EXT = 32845 # GL/glext.h:1037 +GL_RGB2_EXT = 32846 # GL/glext.h:1038 +GL_RGB4_EXT = 32847 # GL/glext.h:1039 +GL_RGB5_EXT = 32848 # GL/glext.h:1040 +GL_RGB8_EXT = 32849 # GL/glext.h:1041 +GL_RGB10_EXT = 32850 # GL/glext.h:1042 +GL_RGB12_EXT = 32851 # GL/glext.h:1043 +GL_RGB16_EXT = 32852 # GL/glext.h:1044 +GL_RGBA2_EXT = 32853 # GL/glext.h:1045 +GL_RGBA4_EXT = 32854 # GL/glext.h:1046 +GL_RGB5_A1_EXT = 32855 # GL/glext.h:1047 +GL_RGBA8_EXT = 32856 # GL/glext.h:1048 +GL_RGB10_A2_EXT = 32857 # GL/glext.h:1049 +GL_RGBA12_EXT = 32858 # GL/glext.h:1050 +GL_RGBA16_EXT = 32859 # GL/glext.h:1051 +GL_TEXTURE_RED_SIZE_EXT = 32860 # GL/glext.h:1052 +GL_TEXTURE_GREEN_SIZE_EXT = 32861 # GL/glext.h:1053 +GL_TEXTURE_BLUE_SIZE_EXT = 32862 # GL/glext.h:1054 +GL_TEXTURE_ALPHA_SIZE_EXT = 32863 # GL/glext.h:1055 +GL_TEXTURE_LUMINANCE_SIZE_EXT = 32864 # GL/glext.h:1056 +GL_TEXTURE_INTENSITY_SIZE_EXT = 32865 # GL/glext.h:1057 +GL_REPLACE_EXT = 32866 # GL/glext.h:1058 +GL_PROXY_TEXTURE_1D_EXT = 32867 # GL/glext.h:1059 +GL_PROXY_TEXTURE_2D_EXT = 32868 # GL/glext.h:1060 +GL_TEXTURE_TOO_LARGE_EXT = 32869 # GL/glext.h:1061 +# EXT_texture3D (GL/glext.h:1064) +GL_PACK_SKIP_IMAGES_EXT = 32875 # GL/glext.h:1065 +GL_PACK_IMAGE_HEIGHT_EXT = 32876 # GL/glext.h:1066 +GL_UNPACK_SKIP_IMAGES_EXT = 32877 # GL/glext.h:1067 +GL_UNPACK_IMAGE_HEIGHT_EXT = 32878 # GL/glext.h:1068 +GL_TEXTURE_3D_EXT = 32879 # GL/glext.h:1069 +GL_PROXY_TEXTURE_3D_EXT = 32880 # GL/glext.h:1070 +GL_TEXTURE_DEPTH_EXT = 32881 # GL/glext.h:1071 +GL_TEXTURE_WRAP_R_EXT = 32882 # GL/glext.h:1072 +GL_MAX_3D_TEXTURE_SIZE_EXT = 32883 # GL/glext.h:1073 +# SGIS_texture_filter4 (GL/glext.h:1076) +GL_FILTER4_SGIS = 33094 # GL/glext.h:1077 +GL_TEXTURE_FILTER4_SIZE_SGIS = 33095 # GL/glext.h:1078 +# EXT_subtexture (GL/glext.h:1081) +# EXT_copy_texture (GL/glext.h:1084) +# EXT_histogram (GL/glext.h:1087) +GL_HISTOGRAM_EXT = 32804 # GL/glext.h:1088 +GL_PROXY_HISTOGRAM_EXT = 32805 # GL/glext.h:1089 +GL_HISTOGRAM_WIDTH_EXT = 32806 # GL/glext.h:1090 +GL_HISTOGRAM_FORMAT_EXT = 32807 # GL/glext.h:1091 +GL_HISTOGRAM_RED_SIZE_EXT = 32808 # GL/glext.h:1092 +GL_HISTOGRAM_GREEN_SIZE_EXT = 32809 # GL/glext.h:1093 +GL_HISTOGRAM_BLUE_SIZE_EXT = 32810 # GL/glext.h:1094 +GL_HISTOGRAM_ALPHA_SIZE_EXT = 32811 # GL/glext.h:1095 +GL_HISTOGRAM_LUMINANCE_SIZE_EXT = 32812 # GL/glext.h:1096 +GL_HISTOGRAM_SINK_EXT = 32813 # GL/glext.h:1097 +GL_MINMAX_EXT = 32814 # GL/glext.h:1098 +GL_MINMAX_FORMAT_EXT = 32815 # GL/glext.h:1099 +GL_MINMAX_SINK_EXT = 32816 # GL/glext.h:1100 +GL_TABLE_TOO_LARGE_EXT = 32817 # GL/glext.h:1101 +# EXT_convolution (GL/glext.h:1104) +GL_CONVOLUTION_1D_EXT = 32784 # GL/glext.h:1105 +GL_CONVOLUTION_2D_EXT = 32785 # GL/glext.h:1106 +GL_SEPARABLE_2D_EXT = 32786 # GL/glext.h:1107 +GL_CONVOLUTION_BORDER_MODE_EXT = 32787 # GL/glext.h:1108 +GL_CONVOLUTION_FILTER_SCALE_EXT = 32788 # GL/glext.h:1109 +GL_CONVOLUTION_FILTER_BIAS_EXT = 32789 # GL/glext.h:1110 +GL_REDUCE_EXT = 32790 # GL/glext.h:1111 +GL_CONVOLUTION_FORMAT_EXT = 32791 # GL/glext.h:1112 +GL_CONVOLUTION_WIDTH_EXT = 32792 # GL/glext.h:1113 +GL_CONVOLUTION_HEIGHT_EXT = 32793 # GL/glext.h:1114 +GL_MAX_CONVOLUTION_WIDTH_EXT = 32794 # GL/glext.h:1115 +GL_MAX_CONVOLUTION_HEIGHT_EXT = 32795 # GL/glext.h:1116 +GL_POST_CONVOLUTION_RED_SCALE_EXT = 32796 # GL/glext.h:1117 +GL_POST_CONVOLUTION_GREEN_SCALE_EXT = 32797 # GL/glext.h:1118 +GL_POST_CONVOLUTION_BLUE_SCALE_EXT = 32798 # GL/glext.h:1119 +GL_POST_CONVOLUTION_ALPHA_SCALE_EXT = 32799 # GL/glext.h:1120 +GL_POST_CONVOLUTION_RED_BIAS_EXT = 32800 # GL/glext.h:1121 +GL_POST_CONVOLUTION_GREEN_BIAS_EXT = 32801 # GL/glext.h:1122 +GL_POST_CONVOLUTION_BLUE_BIAS_EXT = 32802 # GL/glext.h:1123 +GL_POST_CONVOLUTION_ALPHA_BIAS_EXT = 32803 # GL/glext.h:1124 +# SGI_color_matrix (GL/glext.h:1127) +GL_COLOR_MATRIX_SGI = 32945 # GL/glext.h:1128 +GL_COLOR_MATRIX_STACK_DEPTH_SGI = 32946 # GL/glext.h:1129 +GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI = 32947 # GL/glext.h:1130 +GL_POST_COLOR_MATRIX_RED_SCALE_SGI = 32948 # GL/glext.h:1131 +GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI = 32949 # GL/glext.h:1132 +GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI = 32950 # GL/glext.h:1133 +GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI = 32951 # GL/glext.h:1134 +GL_POST_COLOR_MATRIX_RED_BIAS_SGI = 32952 # GL/glext.h:1135 +GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI = 32953 # GL/glext.h:1136 +GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI = 32954 # GL/glext.h:1137 +GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI = 32955 # GL/glext.h:1138 +# SGI_color_table (GL/glext.h:1141) +GL_COLOR_TABLE_SGI = 32976 # GL/glext.h:1142 +GL_POST_CONVOLUTION_COLOR_TABLE_SGI = 32977 # GL/glext.h:1143 +GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI = 32978 # GL/glext.h:1144 +GL_PROXY_COLOR_TABLE_SGI = 32979 # GL/glext.h:1145 +GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI = 32980 # GL/glext.h:1146 +GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI = 32981 # GL/glext.h:1147 +GL_COLOR_TABLE_SCALE_SGI = 32982 # GL/glext.h:1148 +GL_COLOR_TABLE_BIAS_SGI = 32983 # GL/glext.h:1149 +GL_COLOR_TABLE_FORMAT_SGI = 32984 # GL/glext.h:1150 +GL_COLOR_TABLE_WIDTH_SGI = 32985 # GL/glext.h:1151 +GL_COLOR_TABLE_RED_SIZE_SGI = 32986 # GL/glext.h:1152 +GL_COLOR_TABLE_GREEN_SIZE_SGI = 32987 # GL/glext.h:1153 +GL_COLOR_TABLE_BLUE_SIZE_SGI = 32988 # GL/glext.h:1154 +GL_COLOR_TABLE_ALPHA_SIZE_SGI = 32989 # GL/glext.h:1155 +GL_COLOR_TABLE_LUMINANCE_SIZE_SGI = 32990 # GL/glext.h:1156 +GL_COLOR_TABLE_INTENSITY_SIZE_SGI = 32991 # GL/glext.h:1157 +# SGIS_pixel_texture (GL/glext.h:1160) +GL_PIXEL_TEXTURE_SGIS = 33619 # GL/glext.h:1161 +GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS = 33620 # GL/glext.h:1162 +GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS = 33621 # GL/glext.h:1163 +GL_PIXEL_GROUP_COLOR_SGIS = 33622 # GL/glext.h:1164 +# SGIX_pixel_texture (GL/glext.h:1167) +GL_PIXEL_TEX_GEN_SGIX = 33081 # GL/glext.h:1168 +GL_PIXEL_TEX_GEN_MODE_SGIX = 33579 # GL/glext.h:1169 +# SGIS_texture4D (GL/glext.h:1172) +GL_PACK_SKIP_VOLUMES_SGIS = 33072 # GL/glext.h:1173 +GL_PACK_IMAGE_DEPTH_SGIS = 33073 # GL/glext.h:1174 +GL_UNPACK_SKIP_VOLUMES_SGIS = 33074 # GL/glext.h:1175 +GL_UNPACK_IMAGE_DEPTH_SGIS = 33075 # GL/glext.h:1176 +GL_TEXTURE_4D_SGIS = 33076 # GL/glext.h:1177 +GL_PROXY_TEXTURE_4D_SGIS = 33077 # GL/glext.h:1178 +GL_TEXTURE_4DSIZE_SGIS = 33078 # GL/glext.h:1179 +GL_TEXTURE_WRAP_Q_SGIS = 33079 # GL/glext.h:1180 +GL_MAX_4D_TEXTURE_SIZE_SGIS = 33080 # GL/glext.h:1181 +GL_TEXTURE_4D_BINDING_SGIS = 33103 # GL/glext.h:1182 +# SGI_texture_color_table (GL/glext.h:1185) +GL_TEXTURE_COLOR_TABLE_SGI = 32956 # GL/glext.h:1186 +GL_PROXY_TEXTURE_COLOR_TABLE_SGI = 32957 # GL/glext.h:1187 +# EXT_cmyka (GL/glext.h:1190) +GL_CMYK_EXT = 32780 # GL/glext.h:1191 +GL_CMYKA_EXT = 32781 # GL/glext.h:1192 +GL_PACK_CMYK_HINT_EXT = 32782 # GL/glext.h:1193 +GL_UNPACK_CMYK_HINT_EXT = 32783 # GL/glext.h:1194 +# EXT_texture_object (GL/glext.h:1197) +GL_TEXTURE_PRIORITY_EXT = 32870 # GL/glext.h:1198 +GL_TEXTURE_RESIDENT_EXT = 32871 # GL/glext.h:1199 +GL_TEXTURE_1D_BINDING_EXT = 32872 # GL/glext.h:1200 +GL_TEXTURE_2D_BINDING_EXT = 32873 # GL/glext.h:1201 +GL_TEXTURE_3D_BINDING_EXT = 32874 # GL/glext.h:1202 +# SGIS_detail_texture (GL/glext.h:1205) +GL_DETAIL_TEXTURE_2D_SGIS = 32917 # GL/glext.h:1206 +GL_DETAIL_TEXTURE_2D_BINDING_SGIS = 32918 # GL/glext.h:1207 +GL_LINEAR_DETAIL_SGIS = 32919 # GL/glext.h:1208 +GL_LINEAR_DETAIL_ALPHA_SGIS = 32920 # GL/glext.h:1209 +GL_LINEAR_DETAIL_COLOR_SGIS = 32921 # GL/glext.h:1210 +GL_DETAIL_TEXTURE_LEVEL_SGIS = 32922 # GL/glext.h:1211 +GL_DETAIL_TEXTURE_MODE_SGIS = 32923 # GL/glext.h:1212 +GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS = 32924 # GL/glext.h:1213 +# SGIS_sharpen_texture (GL/glext.h:1216) +GL_LINEAR_SHARPEN_SGIS = 32941 # GL/glext.h:1217 +GL_LINEAR_SHARPEN_ALPHA_SGIS = 32942 # GL/glext.h:1218 +GL_LINEAR_SHARPEN_COLOR_SGIS = 32943 # GL/glext.h:1219 +GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS = 32944 # GL/glext.h:1220 +# EXT_packed_pixels (GL/glext.h:1223) +GL_UNSIGNED_BYTE_3_3_2_EXT = 32818 # GL/glext.h:1224 +GL_UNSIGNED_SHORT_4_4_4_4_EXT = 32819 # GL/glext.h:1225 +GL_UNSIGNED_SHORT_5_5_5_1_EXT = 32820 # GL/glext.h:1226 +GL_UNSIGNED_INT_8_8_8_8_EXT = 32821 # GL/glext.h:1227 +GL_UNSIGNED_INT_10_10_10_2_EXT = 32822 # GL/glext.h:1228 +# SGIS_texture_lod (GL/glext.h:1231) +GL_TEXTURE_MIN_LOD_SGIS = 33082 # GL/glext.h:1232 +GL_TEXTURE_MAX_LOD_SGIS = 33083 # GL/glext.h:1233 +GL_TEXTURE_BASE_LEVEL_SGIS = 33084 # GL/glext.h:1234 +GL_TEXTURE_MAX_LEVEL_SGIS = 33085 # GL/glext.h:1235 +# SGIS_multisample (GL/glext.h:1238) +GL_MULTISAMPLE_SGIS = 32925 # GL/glext.h:1239 +GL_SAMPLE_ALPHA_TO_MASK_SGIS = 32926 # GL/glext.h:1240 +GL_SAMPLE_ALPHA_TO_ONE_SGIS = 32927 # GL/glext.h:1241 +GL_SAMPLE_MASK_SGIS = 32928 # GL/glext.h:1242 +GL_1PASS_SGIS = 32929 # GL/glext.h:1243 +GL_2PASS_0_SGIS = 32930 # GL/glext.h:1244 +GL_2PASS_1_SGIS = 32931 # GL/glext.h:1245 +GL_4PASS_0_SGIS = 32932 # GL/glext.h:1246 +GL_4PASS_1_SGIS = 32933 # GL/glext.h:1247 +GL_4PASS_2_SGIS = 32934 # GL/glext.h:1248 +GL_4PASS_3_SGIS = 32935 # GL/glext.h:1249 +GL_SAMPLE_BUFFERS_SGIS = 32936 # GL/glext.h:1250 +GL_SAMPLES_SGIS = 32937 # GL/glext.h:1251 +GL_SAMPLE_MASK_VALUE_SGIS = 32938 # GL/glext.h:1252 +GL_SAMPLE_MASK_INVERT_SGIS = 32939 # GL/glext.h:1253 +GL_SAMPLE_PATTERN_SGIS = 32940 # GL/glext.h:1254 +# EXT_rescale_normal (GL/glext.h:1257) +GL_RESCALE_NORMAL_EXT = 32826 # GL/glext.h:1258 +# EXT_vertex_array (GL/glext.h:1261) +GL_VERTEX_ARRAY_EXT = 32884 # GL/glext.h:1262 +GL_NORMAL_ARRAY_EXT = 32885 # GL/glext.h:1263 +GL_COLOR_ARRAY_EXT = 32886 # GL/glext.h:1264 +GL_INDEX_ARRAY_EXT = 32887 # GL/glext.h:1265 +GL_TEXTURE_COORD_ARRAY_EXT = 32888 # GL/glext.h:1266 +GL_EDGE_FLAG_ARRAY_EXT = 32889 # GL/glext.h:1267 +GL_VERTEX_ARRAY_SIZE_EXT = 32890 # GL/glext.h:1268 +GL_VERTEX_ARRAY_TYPE_EXT = 32891 # GL/glext.h:1269 +GL_VERTEX_ARRAY_STRIDE_EXT = 32892 # GL/glext.h:1270 +GL_VERTEX_ARRAY_COUNT_EXT = 32893 # GL/glext.h:1271 +GL_NORMAL_ARRAY_TYPE_EXT = 32894 # GL/glext.h:1272 +GL_NORMAL_ARRAY_STRIDE_EXT = 32895 # GL/glext.h:1273 +GL_NORMAL_ARRAY_COUNT_EXT = 32896 # GL/glext.h:1274 +GL_COLOR_ARRAY_SIZE_EXT = 32897 # GL/glext.h:1275 +GL_COLOR_ARRAY_TYPE_EXT = 32898 # GL/glext.h:1276 +GL_COLOR_ARRAY_STRIDE_EXT = 32899 # GL/glext.h:1277 +GL_COLOR_ARRAY_COUNT_EXT = 32900 # GL/glext.h:1278 +GL_INDEX_ARRAY_TYPE_EXT = 32901 # GL/glext.h:1279 +GL_INDEX_ARRAY_STRIDE_EXT = 32902 # GL/glext.h:1280 +GL_INDEX_ARRAY_COUNT_EXT = 32903 # GL/glext.h:1281 +GL_TEXTURE_COORD_ARRAY_SIZE_EXT = 32904 # GL/glext.h:1282 +GL_TEXTURE_COORD_ARRAY_TYPE_EXT = 32905 # GL/glext.h:1283 +GL_TEXTURE_COORD_ARRAY_STRIDE_EXT = 32906 # GL/glext.h:1284 +GL_TEXTURE_COORD_ARRAY_COUNT_EXT = 32907 # GL/glext.h:1285 +GL_EDGE_FLAG_ARRAY_STRIDE_EXT = 32908 # GL/glext.h:1286 +GL_EDGE_FLAG_ARRAY_COUNT_EXT = 32909 # GL/glext.h:1287 +GL_VERTEX_ARRAY_POINTER_EXT = 32910 # GL/glext.h:1288 +GL_NORMAL_ARRAY_POINTER_EXT = 32911 # GL/glext.h:1289 +GL_COLOR_ARRAY_POINTER_EXT = 32912 # GL/glext.h:1290 +GL_INDEX_ARRAY_POINTER_EXT = 32913 # GL/glext.h:1291 +GL_TEXTURE_COORD_ARRAY_POINTER_EXT = 32914 # GL/glext.h:1292 +GL_EDGE_FLAG_ARRAY_POINTER_EXT = 32915 # GL/glext.h:1293 +# EXT_misc_attribute (GL/glext.h:1296) +# SGIS_generate_mipmap (GL/glext.h:1299) +GL_GENERATE_MIPMAP_SGIS = 33169 # GL/glext.h:1300 +GL_GENERATE_MIPMAP_HINT_SGIS = 33170 # GL/glext.h:1301 +# SGIX_clipmap (GL/glext.h:1304) +GL_LINEAR_CLIPMAP_LINEAR_SGIX = 33136 # GL/glext.h:1305 +GL_TEXTURE_CLIPMAP_CENTER_SGIX = 33137 # GL/glext.h:1306 +GL_TEXTURE_CLIPMAP_FRAME_SGIX = 33138 # GL/glext.h:1307 +GL_TEXTURE_CLIPMAP_OFFSET_SGIX = 33139 # GL/glext.h:1308 +GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX = 33140 # GL/glext.h:1309 +GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX = 33141 # GL/glext.h:1310 +GL_TEXTURE_CLIPMAP_DEPTH_SGIX = 33142 # GL/glext.h:1311 +GL_MAX_CLIPMAP_DEPTH_SGIX = 33143 # GL/glext.h:1312 +GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX = 33144 # GL/glext.h:1313 +GL_NEAREST_CLIPMAP_NEAREST_SGIX = 33869 # GL/glext.h:1314 +GL_NEAREST_CLIPMAP_LINEAR_SGIX = 33870 # GL/glext.h:1315 +GL_LINEAR_CLIPMAP_NEAREST_SGIX = 33871 # GL/glext.h:1316 +# SGIX_shadow (GL/glext.h:1319) +GL_TEXTURE_COMPARE_SGIX = 33178 # GL/glext.h:1320 +GL_TEXTURE_COMPARE_OPERATOR_SGIX = 33179 # GL/glext.h:1321 +GL_TEXTURE_LEQUAL_R_SGIX = 33180 # GL/glext.h:1322 +GL_TEXTURE_GEQUAL_R_SGIX = 33181 # GL/glext.h:1323 +# SGIS_texture_edge_clamp (GL/glext.h:1326) +GL_CLAMP_TO_EDGE_SGIS = 33071 # GL/glext.h:1327 +# SGIS_texture_border_clamp (GL/glext.h:1330) +GL_CLAMP_TO_BORDER_SGIS = 33069 # GL/glext.h:1331 +# EXT_blend_minmax (GL/glext.h:1334) +GL_FUNC_ADD_EXT = 32774 # GL/glext.h:1335 +GL_MIN_EXT = 32775 # GL/glext.h:1336 +GL_MAX_EXT = 32776 # GL/glext.h:1337 +GL_BLEND_EQUATION_EXT = 32777 # GL/glext.h:1338 +# EXT_blend_subtract (GL/glext.h:1341) +GL_FUNC_SUBTRACT_EXT = 32778 # GL/glext.h:1342 +GL_FUNC_REVERSE_SUBTRACT_EXT = 32779 # GL/glext.h:1343 +# EXT_blend_logic_op (GL/glext.h:1346) +# SGIX_interlace (GL/glext.h:1349) +GL_INTERLACE_SGIX = 32916 # GL/glext.h:1350 +# SGIX_pixel_tiles (GL/glext.h:1353) +GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX = 33086 # GL/glext.h:1354 +GL_PIXEL_TILE_CACHE_INCREMENT_SGIX = 33087 # GL/glext.h:1355 +GL_PIXEL_TILE_WIDTH_SGIX = 33088 # GL/glext.h:1356 +GL_PIXEL_TILE_HEIGHT_SGIX = 33089 # GL/glext.h:1357 +GL_PIXEL_TILE_GRID_WIDTH_SGIX = 33090 # GL/glext.h:1358 +GL_PIXEL_TILE_GRID_HEIGHT_SGIX = 33091 # GL/glext.h:1359 +GL_PIXEL_TILE_GRID_DEPTH_SGIX = 33092 # GL/glext.h:1360 +GL_PIXEL_TILE_CACHE_SIZE_SGIX = 33093 # GL/glext.h:1361 +# SGIS_texture_select (GL/glext.h:1364) +GL_DUAL_ALPHA4_SGIS = 33040 # GL/glext.h:1365 +GL_DUAL_ALPHA8_SGIS = 33041 # GL/glext.h:1366 +GL_DUAL_ALPHA12_SGIS = 33042 # GL/glext.h:1367 +GL_DUAL_ALPHA16_SGIS = 33043 # GL/glext.h:1368 +GL_DUAL_LUMINANCE4_SGIS = 33044 # GL/glext.h:1369 +GL_DUAL_LUMINANCE8_SGIS = 33045 # GL/glext.h:1370 +GL_DUAL_LUMINANCE12_SGIS = 33046 # GL/glext.h:1371 +GL_DUAL_LUMINANCE16_SGIS = 33047 # GL/glext.h:1372 +GL_DUAL_INTENSITY4_SGIS = 33048 # GL/glext.h:1373 +GL_DUAL_INTENSITY8_SGIS = 33049 # GL/glext.h:1374 +GL_DUAL_INTENSITY12_SGIS = 33050 # GL/glext.h:1375 +GL_DUAL_INTENSITY16_SGIS = 33051 # GL/glext.h:1376 +GL_DUAL_LUMINANCE_ALPHA4_SGIS = 33052 # GL/glext.h:1377 +GL_DUAL_LUMINANCE_ALPHA8_SGIS = 33053 # GL/glext.h:1378 +GL_QUAD_ALPHA4_SGIS = 33054 # GL/glext.h:1379 +GL_QUAD_ALPHA8_SGIS = 33055 # GL/glext.h:1380 +GL_QUAD_LUMINANCE4_SGIS = 33056 # GL/glext.h:1381 +GL_QUAD_LUMINANCE8_SGIS = 33057 # GL/glext.h:1382 +GL_QUAD_INTENSITY4_SGIS = 33058 # GL/glext.h:1383 +GL_QUAD_INTENSITY8_SGIS = 33059 # GL/glext.h:1384 +GL_DUAL_TEXTURE_SELECT_SGIS = 33060 # GL/glext.h:1385 +GL_QUAD_TEXTURE_SELECT_SGIS = 33061 # GL/glext.h:1386 +# SGIX_sprite (GL/glext.h:1389) +GL_SPRITE_SGIX = 33096 # GL/glext.h:1390 +GL_SPRITE_MODE_SGIX = 33097 # GL/glext.h:1391 +GL_SPRITE_AXIS_SGIX = 33098 # GL/glext.h:1392 +GL_SPRITE_TRANSLATION_SGIX = 33099 # GL/glext.h:1393 +GL_SPRITE_AXIAL_SGIX = 33100 # GL/glext.h:1394 +GL_SPRITE_OBJECT_ALIGNED_SGIX = 33101 # GL/glext.h:1395 +GL_SPRITE_EYE_ALIGNED_SGIX = 33102 # GL/glext.h:1396 +# SGIX_texture_multi_buffer (GL/glext.h:1399) +GL_TEXTURE_MULTI_BUFFER_HINT_SGIX = 33070 # GL/glext.h:1400 +# EXT_point_parameters (GL/glext.h:1403) +GL_POINT_SIZE_MIN_EXT = 33062 # GL/glext.h:1404 +GL_POINT_SIZE_MAX_EXT = 33063 # GL/glext.h:1405 +GL_POINT_FADE_THRESHOLD_SIZE_EXT = 33064 # GL/glext.h:1406 +GL_DISTANCE_ATTENUATION_EXT = 33065 # GL/glext.h:1407 +# SGIS_point_parameters (GL/glext.h:1410) +GL_POINT_SIZE_MIN_SGIS = 33062 # GL/glext.h:1411 +GL_POINT_SIZE_MAX_SGIS = 33063 # GL/glext.h:1412 +GL_POINT_FADE_THRESHOLD_SIZE_SGIS = 33064 # GL/glext.h:1413 +GL_DISTANCE_ATTENUATION_SGIS = 33065 # GL/glext.h:1414 +# SGIX_instruments (GL/glext.h:1417) +GL_INSTRUMENT_BUFFER_POINTER_SGIX = 33152 # GL/glext.h:1418 +GL_INSTRUMENT_MEASUREMENTS_SGIX = 33153 # GL/glext.h:1419 +# SGIX_texture_scale_bias (GL/glext.h:1422) +GL_POST_TEXTURE_FILTER_BIAS_SGIX = 33145 # GL/glext.h:1423 +GL_POST_TEXTURE_FILTER_SCALE_SGIX = 33146 # GL/glext.h:1424 +GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX = 33147 # GL/glext.h:1425 +GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX = 33148 # GL/glext.h:1426 +# SGIX_framezoom (GL/glext.h:1429) +GL_FRAMEZOOM_SGIX = 33163 # GL/glext.h:1430 +GL_FRAMEZOOM_FACTOR_SGIX = 33164 # GL/glext.h:1431 +GL_MAX_FRAMEZOOM_FACTOR_SGIX = 33165 # GL/glext.h:1432 +# SGIX_tag_sample_buffer (GL/glext.h:1435) +# FfdMaskSGIX (GL/glext.h:1438) +GL_TEXTURE_DEFORMATION_BIT_SGIX = 1 # GL/glext.h:1439 +GL_GEOMETRY_DEFORMATION_BIT_SGIX = 2 # GL/glext.h:1440 +# SGIX_polynomial_ffd (GL/glext.h:1443) +GL_GEOMETRY_DEFORMATION_SGIX = 33172 # GL/glext.h:1444 +GL_TEXTURE_DEFORMATION_SGIX = 33173 # GL/glext.h:1445 +GL_DEFORMATIONS_MASK_SGIX = 33174 # GL/glext.h:1446 +GL_MAX_DEFORMATION_ORDER_SGIX = 33175 # GL/glext.h:1447 +# SGIX_reference_plane (GL/glext.h:1450) +GL_REFERENCE_PLANE_SGIX = 33149 # GL/glext.h:1451 +GL_REFERENCE_PLANE_EQUATION_SGIX = 33150 # GL/glext.h:1452 +# SGIX_flush_raster (GL/glext.h:1455) +# SGIX_depth_texture (GL/glext.h:1458) +GL_DEPTH_COMPONENT16_SGIX = 33189 # GL/glext.h:1459 +GL_DEPTH_COMPONENT24_SGIX = 33190 # GL/glext.h:1460 +GL_DEPTH_COMPONENT32_SGIX = 33191 # GL/glext.h:1461 +# SGIS_fog_function (GL/glext.h:1464) +GL_FOG_FUNC_SGIS = 33066 # GL/glext.h:1465 +GL_FOG_FUNC_POINTS_SGIS = 33067 # GL/glext.h:1466 +GL_MAX_FOG_FUNC_POINTS_SGIS = 33068 # GL/glext.h:1467 +# SGIX_fog_offset (GL/glext.h:1470) +GL_FOG_OFFSET_SGIX = 33176 # GL/glext.h:1471 +GL_FOG_OFFSET_VALUE_SGIX = 33177 # GL/glext.h:1472 +# HP_image_transform (GL/glext.h:1475) +GL_IMAGE_SCALE_X_HP = 33109 # GL/glext.h:1476 +GL_IMAGE_SCALE_Y_HP = 33110 # GL/glext.h:1477 +GL_IMAGE_TRANSLATE_X_HP = 33111 # GL/glext.h:1478 +GL_IMAGE_TRANSLATE_Y_HP = 33112 # GL/glext.h:1479 +GL_IMAGE_ROTATE_ANGLE_HP = 33113 # GL/glext.h:1480 +GL_IMAGE_ROTATE_ORIGIN_X_HP = 33114 # GL/glext.h:1481 +GL_IMAGE_ROTATE_ORIGIN_Y_HP = 33115 # GL/glext.h:1482 +GL_IMAGE_MAG_FILTER_HP = 33116 # GL/glext.h:1483 +GL_IMAGE_MIN_FILTER_HP = 33117 # GL/glext.h:1484 +GL_IMAGE_CUBIC_WEIGHT_HP = 33118 # GL/glext.h:1485 +GL_CUBIC_HP = 33119 # GL/glext.h:1486 +GL_AVERAGE_HP = 33120 # GL/glext.h:1487 +GL_IMAGE_TRANSFORM_2D_HP = 33121 # GL/glext.h:1488 +GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP = 33122 # GL/glext.h:1489 +GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP = 33123 # GL/glext.h:1490 +# HP_convolution_border_modes (GL/glext.h:1493) +GL_IGNORE_BORDER_HP = 33104 # GL/glext.h:1494 +GL_CONSTANT_BORDER_HP = 33105 # GL/glext.h:1495 +GL_REPLICATE_BORDER_HP = 33107 # GL/glext.h:1496 +GL_CONVOLUTION_BORDER_COLOR_HP = 33108 # GL/glext.h:1497 +# INGR_palette_buffer (GL/glext.h:1500) +# SGIX_texture_add_env (GL/glext.h:1503) +GL_TEXTURE_ENV_BIAS_SGIX = 32958 # GL/glext.h:1504 +# EXT_color_subtable (GL/glext.h:1507) +# PGI_vertex_hints (GL/glext.h:1510) +GL_VERTEX_DATA_HINT_PGI = 107050 # GL/glext.h:1511 +GL_VERTEX_CONSISTENT_HINT_PGI = 107051 # GL/glext.h:1512 +GL_MATERIAL_SIDE_HINT_PGI = 107052 # GL/glext.h:1513 +GL_MAX_VERTEX_HINT_PGI = 107053 # GL/glext.h:1514 +GL_COLOR3_BIT_PGI = 65536 # GL/glext.h:1515 +GL_COLOR4_BIT_PGI = 131072 # GL/glext.h:1516 +GL_EDGEFLAG_BIT_PGI = 262144 # GL/glext.h:1517 +GL_INDEX_BIT_PGI = 524288 # GL/glext.h:1518 +GL_MAT_AMBIENT_BIT_PGI = 1048576 # GL/glext.h:1519 +GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI = 2097152 # GL/glext.h:1520 +GL_MAT_DIFFUSE_BIT_PGI = 4194304 # GL/glext.h:1521 +GL_MAT_EMISSION_BIT_PGI = 8388608 # GL/glext.h:1522 +GL_MAT_COLOR_INDEXES_BIT_PGI = 16777216 # GL/glext.h:1523 +GL_MAT_SHININESS_BIT_PGI = 33554432 # GL/glext.h:1524 +GL_MAT_SPECULAR_BIT_PGI = 67108864 # GL/glext.h:1525 +GL_NORMAL_BIT_PGI = 134217728 # GL/glext.h:1526 +GL_TEXCOORD1_BIT_PGI = 268435456 # GL/glext.h:1527 +GL_TEXCOORD2_BIT_PGI = 536870912 # GL/glext.h:1528 +GL_TEXCOORD3_BIT_PGI = 1073741824 # GL/glext.h:1529 +GL_TEXCOORD4_BIT_PGI = 2147483648 # GL/glext.h:1530 +GL_VERTEX23_BIT_PGI = 4 # GL/glext.h:1531 +GL_VERTEX4_BIT_PGI = 8 # GL/glext.h:1532 +# PGI_misc_hints (GL/glext.h:1535) +GL_PREFER_DOUBLEBUFFER_HINT_PGI = 107000 # GL/glext.h:1536 +GL_CONSERVE_MEMORY_HINT_PGI = 107005 # GL/glext.h:1537 +GL_RECLAIM_MEMORY_HINT_PGI = 107006 # GL/glext.h:1538 +GL_NATIVE_GRAPHICS_HANDLE_PGI = 107010 # GL/glext.h:1539 +GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI = 107011 # GL/glext.h:1540 +GL_NATIVE_GRAPHICS_END_HINT_PGI = 107012 # GL/glext.h:1541 +GL_ALWAYS_FAST_HINT_PGI = 107020 # GL/glext.h:1542 +GL_ALWAYS_SOFT_HINT_PGI = 107021 # GL/glext.h:1543 +GL_ALLOW_DRAW_OBJ_HINT_PGI = 107022 # GL/glext.h:1544 +GL_ALLOW_DRAW_WIN_HINT_PGI = 107023 # GL/glext.h:1545 +GL_ALLOW_DRAW_FRG_HINT_PGI = 107024 # GL/glext.h:1546 +GL_ALLOW_DRAW_MEM_HINT_PGI = 107025 # GL/glext.h:1547 +GL_STRICT_DEPTHFUNC_HINT_PGI = 107030 # GL/glext.h:1548 +GL_STRICT_LIGHTING_HINT_PGI = 107031 # GL/glext.h:1549 +GL_STRICT_SCISSOR_HINT_PGI = 107032 # GL/glext.h:1550 +GL_FULL_STIPPLE_HINT_PGI = 107033 # GL/glext.h:1551 +GL_CLIP_NEAR_HINT_PGI = 107040 # GL/glext.h:1552 +GL_CLIP_FAR_HINT_PGI = 107041 # GL/glext.h:1553 +GL_WIDE_LINE_HINT_PGI = 107042 # GL/glext.h:1554 +GL_BACK_NORMALS_HINT_PGI = 107043 # GL/glext.h:1555 +# EXT_paletted_texture (GL/glext.h:1558) +GL_COLOR_INDEX1_EXT = 32994 # GL/glext.h:1559 +GL_COLOR_INDEX2_EXT = 32995 # GL/glext.h:1560 +GL_COLOR_INDEX4_EXT = 32996 # GL/glext.h:1561 +GL_COLOR_INDEX8_EXT = 32997 # GL/glext.h:1562 +GL_COLOR_INDEX12_EXT = 32998 # GL/glext.h:1563 +GL_COLOR_INDEX16_EXT = 32999 # GL/glext.h:1564 +GL_TEXTURE_INDEX_SIZE_EXT = 33005 # GL/glext.h:1565 +# EXT_clip_volume_hint (GL/glext.h:1568) +GL_CLIP_VOLUME_CLIPPING_HINT_EXT = 33008 # GL/glext.h:1569 +# SGIX_list_priority (GL/glext.h:1572) +GL_LIST_PRIORITY_SGIX = 33154 # GL/glext.h:1573 +# SGIX_ir_instrument1 (GL/glext.h:1576) +GL_IR_INSTRUMENT1_SGIX = 33151 # GL/glext.h:1577 +# SGIX_calligraphic_fragment (GL/glext.h:1580) +GL_CALLIGRAPHIC_FRAGMENT_SGIX = 33155 # GL/glext.h:1581 +# SGIX_texture_lod_bias (GL/glext.h:1584) +GL_TEXTURE_LOD_BIAS_S_SGIX = 33166 # GL/glext.h:1585 +GL_TEXTURE_LOD_BIAS_T_SGIX = 33167 # GL/glext.h:1586 +GL_TEXTURE_LOD_BIAS_R_SGIX = 33168 # GL/glext.h:1587 +# SGIX_shadow_ambient (GL/glext.h:1590) +GL_SHADOW_AMBIENT_SGIX = 32959 # GL/glext.h:1591 +# EXT_index_texture (GL/glext.h:1594) +# EXT_index_material (GL/glext.h:1597) +GL_INDEX_MATERIAL_EXT = 33208 # GL/glext.h:1598 +GL_INDEX_MATERIAL_PARAMETER_EXT = 33209 # GL/glext.h:1599 +GL_INDEX_MATERIAL_FACE_EXT = 33210 # GL/glext.h:1600 +# EXT_index_func (GL/glext.h:1603) +GL_INDEX_TEST_EXT = 33205 # GL/glext.h:1604 +GL_INDEX_TEST_FUNC_EXT = 33206 # GL/glext.h:1605 +GL_INDEX_TEST_REF_EXT = 33207 # GL/glext.h:1606 +# EXT_index_array_formats (GL/glext.h:1609) +GL_IUI_V2F_EXT = 33197 # GL/glext.h:1610 +GL_IUI_V3F_EXT = 33198 # GL/glext.h:1611 +GL_IUI_N3F_V2F_EXT = 33199 # GL/glext.h:1612 +GL_IUI_N3F_V3F_EXT = 33200 # GL/glext.h:1613 +GL_T2F_IUI_V2F_EXT = 33201 # GL/glext.h:1614 +GL_T2F_IUI_V3F_EXT = 33202 # GL/glext.h:1615 +GL_T2F_IUI_N3F_V2F_EXT = 33203 # GL/glext.h:1616 +GL_T2F_IUI_N3F_V3F_EXT = 33204 # GL/glext.h:1617 +# EXT_compiled_vertex_array (GL/glext.h:1620) +GL_ARRAY_ELEMENT_LOCK_FIRST_EXT = 33192 # GL/glext.h:1621 +GL_ARRAY_ELEMENT_LOCK_COUNT_EXT = 33193 # GL/glext.h:1622 +# EXT_cull_vertex (GL/glext.h:1625) +GL_CULL_VERTEX_EXT = 33194 # GL/glext.h:1626 +GL_CULL_VERTEX_EYE_POSITION_EXT = 33195 # GL/glext.h:1627 +GL_CULL_VERTEX_OBJECT_POSITION_EXT = 33196 # GL/glext.h:1628 +# SGIX_ycrcb (GL/glext.h:1631) +GL_YCRCB_422_SGIX = 33211 # GL/glext.h:1632 +GL_YCRCB_444_SGIX = 33212 # GL/glext.h:1633 +# SGIX_fragment_lighting (GL/glext.h:1636) +GL_FRAGMENT_LIGHTING_SGIX = 33792 # GL/glext.h:1637 +GL_FRAGMENT_COLOR_MATERIAL_SGIX = 33793 # GL/glext.h:1638 +GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX = 33794 # GL/glext.h:1639 +GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX = 33795 # GL/glext.h:1640 +GL_MAX_FRAGMENT_LIGHTS_SGIX = 33796 # GL/glext.h:1641 +GL_MAX_ACTIVE_LIGHTS_SGIX = 33797 # GL/glext.h:1642 +GL_CURRENT_RASTER_NORMAL_SGIX = 33798 # GL/glext.h:1643 +GL_LIGHT_ENV_MODE_SGIX = 33799 # GL/glext.h:1644 +GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX = 33800 # GL/glext.h:1645 +GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX = 33801 # GL/glext.h:1646 +GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX = 33802 # GL/glext.h:1647 +GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX = 33803 # GL/glext.h:1648 +GL_FRAGMENT_LIGHT0_SGIX = 33804 # GL/glext.h:1649 +GL_FRAGMENT_LIGHT1_SGIX = 33805 # GL/glext.h:1650 +GL_FRAGMENT_LIGHT2_SGIX = 33806 # GL/glext.h:1651 +GL_FRAGMENT_LIGHT3_SGIX = 33807 # GL/glext.h:1652 +GL_FRAGMENT_LIGHT4_SGIX = 33808 # GL/glext.h:1653 +GL_FRAGMENT_LIGHT5_SGIX = 33809 # GL/glext.h:1654 +GL_FRAGMENT_LIGHT6_SGIX = 33810 # GL/glext.h:1655 +GL_FRAGMENT_LIGHT7_SGIX = 33811 # GL/glext.h:1656 +# IBM_rasterpos_clip (GL/glext.h:1659) +GL_RASTER_POSITION_UNCLIPPED_IBM = 103010 # GL/glext.h:1660 +# HP_texture_lighting (GL/glext.h:1663) +GL_TEXTURE_LIGHTING_MODE_HP = 33127 # GL/glext.h:1664 +GL_TEXTURE_POST_SPECULAR_HP = 33128 # GL/glext.h:1665 +GL_TEXTURE_PRE_SPECULAR_HP = 33129 # GL/glext.h:1666 +# EXT_draw_range_elements (GL/glext.h:1669) +GL_MAX_ELEMENTS_VERTICES_EXT = 33000 # GL/glext.h:1670 +GL_MAX_ELEMENTS_INDICES_EXT = 33001 # GL/glext.h:1671 +# WIN_phong_shading (GL/glext.h:1674) +GL_PHONG_WIN = 33002 # GL/glext.h:1675 +GL_PHONG_HINT_WIN = 33003 # GL/glext.h:1676 +# WIN_specular_fog (GL/glext.h:1679) +GL_FOG_SPECULAR_TEXTURE_WIN = 33004 # GL/glext.h:1680 +# EXT_light_texture (GL/glext.h:1683) +GL_FRAGMENT_MATERIAL_EXT = 33609 # GL/glext.h:1684 +GL_FRAGMENT_NORMAL_EXT = 33610 # GL/glext.h:1685 +GL_FRAGMENT_COLOR_EXT = 33612 # GL/glext.h:1686 +GL_ATTENUATION_EXT = 33613 # GL/glext.h:1687 +GL_SHADOW_ATTENUATION_EXT = 33614 # GL/glext.h:1688 +GL_TEXTURE_APPLICATION_MODE_EXT = 33615 # GL/glext.h:1689 +GL_TEXTURE_LIGHT_EXT = 33616 # GL/glext.h:1690 +GL_TEXTURE_MATERIAL_FACE_EXT = 33617 # GL/glext.h:1691 +GL_TEXTURE_MATERIAL_PARAMETER_EXT = 33618 # GL/glext.h:1692 +# SGIX_blend_alpha_minmax (GL/glext.h:1696) +GL_ALPHA_MIN_SGIX = 33568 # GL/glext.h:1697 +GL_ALPHA_MAX_SGIX = 33569 # GL/glext.h:1698 +# SGIX_impact_pixel_texture (GL/glext.h:1701) +GL_PIXEL_TEX_GEN_Q_CEILING_SGIX = 33156 # GL/glext.h:1702 +GL_PIXEL_TEX_GEN_Q_ROUND_SGIX = 33157 # GL/glext.h:1703 +GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX = 33158 # GL/glext.h:1704 +GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX = 33159 # GL/glext.h:1705 +GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX = 33160 # GL/glext.h:1706 +GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX = 33161 # GL/glext.h:1707 +GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX = 33162 # GL/glext.h:1708 +# EXT_bgra (GL/glext.h:1711) +GL_BGR_EXT = 32992 # GL/glext.h:1712 +GL_BGRA_EXT = 32993 # GL/glext.h:1713 +# SGIX_async (GL/glext.h:1716) +GL_ASYNC_MARKER_SGIX = 33577 # GL/glext.h:1717 +# SGIX_async_pixel (GL/glext.h:1720) +GL_ASYNC_TEX_IMAGE_SGIX = 33628 # GL/glext.h:1721 +GL_ASYNC_DRAW_PIXELS_SGIX = 33629 # GL/glext.h:1722 +GL_ASYNC_READ_PIXELS_SGIX = 33630 # GL/glext.h:1723 +GL_MAX_ASYNC_TEX_IMAGE_SGIX = 33631 # GL/glext.h:1724 +GL_MAX_ASYNC_DRAW_PIXELS_SGIX = 33632 # GL/glext.h:1725 +GL_MAX_ASYNC_READ_PIXELS_SGIX = 33633 # GL/glext.h:1726 +# SGIX_async_histogram (GL/glext.h:1729) +GL_ASYNC_HISTOGRAM_SGIX = 33580 # GL/glext.h:1730 +GL_MAX_ASYNC_HISTOGRAM_SGIX = 33581 # GL/glext.h:1731 +# INTEL_texture_scissor (GL/glext.h:1734) +# INTEL_parallel_arrays (GL/glext.h:1737) +GL_PARALLEL_ARRAYS_INTEL = 33780 # GL/glext.h:1738 +GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL = 33781 # GL/glext.h:1739 +GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL = 33782 # GL/glext.h:1740 +GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL = 33783 # GL/glext.h:1741 +GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL = 33784 # GL/glext.h:1742 +# HP_occlusion_test (GL/glext.h:1745) +GL_OCCLUSION_TEST_HP = 33125 # GL/glext.h:1746 +GL_OCCLUSION_TEST_RESULT_HP = 33126 # GL/glext.h:1747 +# EXT_pixel_transform (GL/glext.h:1750) +GL_PIXEL_TRANSFORM_2D_EXT = 33584 # GL/glext.h:1751 +GL_PIXEL_MAG_FILTER_EXT = 33585 # GL/glext.h:1752 +GL_PIXEL_MIN_FILTER_EXT = 33586 # GL/glext.h:1753 +GL_PIXEL_CUBIC_WEIGHT_EXT = 33587 # GL/glext.h:1754 +GL_CUBIC_EXT = 33588 # GL/glext.h:1755 +GL_AVERAGE_EXT = 33589 # GL/glext.h:1756 +GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT = 33590 # GL/glext.h:1757 +GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT = 33591 # GL/glext.h:1758 +GL_PIXEL_TRANSFORM_2D_MATRIX_EXT = 33592 # GL/glext.h:1759 +# EXT_pixel_transform_color_table (GL/glext.h:1762) +# EXT_shared_texture_palette (GL/glext.h:1765) +GL_SHARED_TEXTURE_PALETTE_EXT = 33275 # GL/glext.h:1766 +# EXT_separate_specular_color (GL/glext.h:1769) +GL_LIGHT_MODEL_COLOR_CONTROL_EXT = 33272 # GL/glext.h:1770 +GL_SINGLE_COLOR_EXT = 33273 # GL/glext.h:1771 +GL_SEPARATE_SPECULAR_COLOR_EXT = 33274 # GL/glext.h:1772 +# EXT_secondary_color (GL/glext.h:1775) +GL_COLOR_SUM_EXT = 33880 # GL/glext.h:1776 +GL_CURRENT_SECONDARY_COLOR_EXT = 33881 # GL/glext.h:1777 +GL_SECONDARY_COLOR_ARRAY_SIZE_EXT = 33882 # GL/glext.h:1778 +GL_SECONDARY_COLOR_ARRAY_TYPE_EXT = 33883 # GL/glext.h:1779 +GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT = 33884 # GL/glext.h:1780 +GL_SECONDARY_COLOR_ARRAY_POINTER_EXT = 33885 # GL/glext.h:1781 +GL_SECONDARY_COLOR_ARRAY_EXT = 33886 # GL/glext.h:1782 +# EXT_texture_perturb_normal (GL/glext.h:1785) +GL_PERTURB_EXT = 34222 # GL/glext.h:1786 +GL_TEXTURE_NORMAL_EXT = 34223 # GL/glext.h:1787 +# EXT_multi_draw_arrays (GL/glext.h:1790) +# EXT_fog_coord (GL/glext.h:1793) +GL_FOG_COORDINATE_SOURCE_EXT = 33872 # GL/glext.h:1794 +GL_FOG_COORDINATE_EXT = 33873 # GL/glext.h:1795 +GL_FRAGMENT_DEPTH_EXT = 33874 # GL/glext.h:1796 +GL_CURRENT_FOG_COORDINATE_EXT = 33875 # GL/glext.h:1797 +GL_FOG_COORDINATE_ARRAY_TYPE_EXT = 33876 # GL/glext.h:1798 +GL_FOG_COORDINATE_ARRAY_STRIDE_EXT = 33877 # GL/glext.h:1799 +GL_FOG_COORDINATE_ARRAY_POINTER_EXT = 33878 # GL/glext.h:1800 +GL_FOG_COORDINATE_ARRAY_EXT = 33879 # GL/glext.h:1801 +# REND_screen_coordinates (GL/glext.h:1804) +GL_SCREEN_COORDINATES_REND = 33936 # GL/glext.h:1805 +GL_INVERTED_SCREEN_W_REND = 33937 # GL/glext.h:1806 +# EXT_coordinate_frame (GL/glext.h:1809) +GL_TANGENT_ARRAY_EXT = 33849 # GL/glext.h:1810 +GL_BINORMAL_ARRAY_EXT = 33850 # GL/glext.h:1811 +GL_CURRENT_TANGENT_EXT = 33851 # GL/glext.h:1812 +GL_CURRENT_BINORMAL_EXT = 33852 # GL/glext.h:1813 +GL_TANGENT_ARRAY_TYPE_EXT = 33854 # GL/glext.h:1814 +GL_TANGENT_ARRAY_STRIDE_EXT = 33855 # GL/glext.h:1815 +GL_BINORMAL_ARRAY_TYPE_EXT = 33856 # GL/glext.h:1816 +GL_BINORMAL_ARRAY_STRIDE_EXT = 33857 # GL/glext.h:1817 +GL_TANGENT_ARRAY_POINTER_EXT = 33858 # GL/glext.h:1818 +GL_BINORMAL_ARRAY_POINTER_EXT = 33859 # GL/glext.h:1819 +GL_MAP1_TANGENT_EXT = 33860 # GL/glext.h:1820 +GL_MAP2_TANGENT_EXT = 33861 # GL/glext.h:1821 +GL_MAP1_BINORMAL_EXT = 33862 # GL/glext.h:1822 +GL_MAP2_BINORMAL_EXT = 33863 # GL/glext.h:1823 +# EXT_texture_env_combine (GL/glext.h:1826) +GL_COMBINE_EXT = 34160 # GL/glext.h:1827 +GL_COMBINE_RGB_EXT = 34161 # GL/glext.h:1828 +GL_COMBINE_ALPHA_EXT = 34162 # GL/glext.h:1829 +GL_RGB_SCALE_EXT = 34163 # GL/glext.h:1830 +GL_ADD_SIGNED_EXT = 34164 # GL/glext.h:1831 +GL_INTERPOLATE_EXT = 34165 # GL/glext.h:1832 +GL_CONSTANT_EXT = 34166 # GL/glext.h:1833 +GL_PRIMARY_COLOR_EXT = 34167 # GL/glext.h:1834 +GL_PREVIOUS_EXT = 34168 # GL/glext.h:1835 +GL_SOURCE0_RGB_EXT = 34176 # GL/glext.h:1836 +GL_SOURCE1_RGB_EXT = 34177 # GL/glext.h:1837 +GL_SOURCE2_RGB_EXT = 34178 # GL/glext.h:1838 +GL_SOURCE0_ALPHA_EXT = 34184 # GL/glext.h:1839 +GL_SOURCE1_ALPHA_EXT = 34185 # GL/glext.h:1840 +GL_SOURCE2_ALPHA_EXT = 34186 # GL/glext.h:1841 +GL_OPERAND0_RGB_EXT = 34192 # GL/glext.h:1842 +GL_OPERAND1_RGB_EXT = 34193 # GL/glext.h:1843 +GL_OPERAND2_RGB_EXT = 34194 # GL/glext.h:1844 +GL_OPERAND0_ALPHA_EXT = 34200 # GL/glext.h:1845 +GL_OPERAND1_ALPHA_EXT = 34201 # GL/glext.h:1846 +GL_OPERAND2_ALPHA_EXT = 34202 # GL/glext.h:1847 +# APPLE_specular_vector (GL/glext.h:1850) +GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE = 34224 # GL/glext.h:1851 +# APPLE_transform_hint (GL/glext.h:1854) +GL_TRANSFORM_HINT_APPLE = 34225 # GL/glext.h:1855 +# SGIX_fog_scale (GL/glext.h:1858) +GL_FOG_SCALE_SGIX = 33276 # GL/glext.h:1859 +GL_FOG_SCALE_VALUE_SGIX = 33277 # GL/glext.h:1860 +# SUNX_constant_data (GL/glext.h:1863) +GL_UNPACK_CONSTANT_DATA_SUNX = 33237 # GL/glext.h:1864 +GL_TEXTURE_CONSTANT_DATA_SUNX = 33238 # GL/glext.h:1865 +# SUN_global_alpha (GL/glext.h:1868) +GL_GLOBAL_ALPHA_SUN = 33241 # GL/glext.h:1869 +GL_GLOBAL_ALPHA_FACTOR_SUN = 33242 # GL/glext.h:1870 +# SUN_triangle_list (GL/glext.h:1873) +GL_RESTART_SUN = 1 # GL/glext.h:1874 +GL_REPLACE_MIDDLE_SUN = 2 # GL/glext.h:1875 +GL_REPLACE_OLDEST_SUN = 3 # GL/glext.h:1876 +GL_TRIANGLE_LIST_SUN = 33239 # GL/glext.h:1877 +GL_REPLACEMENT_CODE_SUN = 33240 # GL/glext.h:1878 +GL_REPLACEMENT_CODE_ARRAY_SUN = 34240 # GL/glext.h:1879 +GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN = 34241 # GL/glext.h:1880 +GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN = 34242 # GL/glext.h:1881 +GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN = 34243 # GL/glext.h:1882 +GL_R1UI_V3F_SUN = 34244 # GL/glext.h:1883 +GL_R1UI_C4UB_V3F_SUN = 34245 # GL/glext.h:1884 +GL_R1UI_C3F_V3F_SUN = 34246 # GL/glext.h:1885 +GL_R1UI_N3F_V3F_SUN = 34247 # GL/glext.h:1886 +GL_R1UI_C4F_N3F_V3F_SUN = 34248 # GL/glext.h:1887 +GL_R1UI_T2F_V3F_SUN = 34249 # GL/glext.h:1888 +GL_R1UI_T2F_N3F_V3F_SUN = 34250 # GL/glext.h:1889 +GL_R1UI_T2F_C4F_N3F_V3F_SUN = 34251 # GL/glext.h:1890 +# SUN_vertex (GL/glext.h:1893) +# EXT_blend_func_separate (GL/glext.h:1896) +GL_BLEND_DST_RGB_EXT = 32968 # GL/glext.h:1897 +GL_BLEND_SRC_RGB_EXT = 32969 # GL/glext.h:1898 +GL_BLEND_DST_ALPHA_EXT = 32970 # GL/glext.h:1899 +GL_BLEND_SRC_ALPHA_EXT = 32971 # GL/glext.h:1900 +# INGR_color_clamp (GL/glext.h:1903) +GL_RED_MIN_CLAMP_INGR = 34144 # GL/glext.h:1904 +GL_GREEN_MIN_CLAMP_INGR = 34145 # GL/glext.h:1905 +GL_BLUE_MIN_CLAMP_INGR = 34146 # GL/glext.h:1906 +GL_ALPHA_MIN_CLAMP_INGR = 34147 # GL/glext.h:1907 +GL_RED_MAX_CLAMP_INGR = 34148 # GL/glext.h:1908 +GL_GREEN_MAX_CLAMP_INGR = 34149 # GL/glext.h:1909 +GL_BLUE_MAX_CLAMP_INGR = 34150 # GL/glext.h:1910 +GL_ALPHA_MAX_CLAMP_INGR = 34151 # GL/glext.h:1911 +# INGR_interlace_read (GL/glext.h:1914) +GL_INTERLACE_READ_INGR = 34152 # GL/glext.h:1915 +# EXT_stencil_wrap (GL/glext.h:1918) +GL_INCR_WRAP_EXT = 34055 # GL/glext.h:1919 +GL_DECR_WRAP_EXT = 34056 # GL/glext.h:1920 +# EXT_422_pixels (GL/glext.h:1923) +GL_422_EXT = 32972 # GL/glext.h:1924 +GL_422_REV_EXT = 32973 # GL/glext.h:1925 +GL_422_AVERAGE_EXT = 32974 # GL/glext.h:1926 +GL_422_REV_AVERAGE_EXT = 32975 # GL/glext.h:1927 +# NV_texgen_reflection (GL/glext.h:1930) +GL_NORMAL_MAP_NV = 34065 # GL/glext.h:1931 +GL_REFLECTION_MAP_NV = 34066 # GL/glext.h:1932 +# EXT_texture_cube_map (GL/glext.h:1935) +GL_NORMAL_MAP_EXT = 34065 # GL/glext.h:1936 +GL_REFLECTION_MAP_EXT = 34066 # GL/glext.h:1937 +GL_TEXTURE_CUBE_MAP_EXT = 34067 # GL/glext.h:1938 +GL_TEXTURE_BINDING_CUBE_MAP_EXT = 34068 # GL/glext.h:1939 +GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT = 34069 # GL/glext.h:1940 +GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT = 34070 # GL/glext.h:1941 +GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT = 34071 # GL/glext.h:1942 +GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT = 34072 # GL/glext.h:1943 +GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT = 34073 # GL/glext.h:1944 +GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT = 34074 # GL/glext.h:1945 +GL_PROXY_TEXTURE_CUBE_MAP_EXT = 34075 # GL/glext.h:1946 +GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT = 34076 # GL/glext.h:1947 +# SUN_convolution_border_modes (GL/glext.h:1950) +GL_WRAP_BORDER_SUN = 33236 # GL/glext.h:1951 +# EXT_texture_env_add (GL/glext.h:1954) +# EXT_texture_lod_bias (GL/glext.h:1957) +GL_MAX_TEXTURE_LOD_BIAS_EXT = 34045 # GL/glext.h:1958 +GL_TEXTURE_FILTER_CONTROL_EXT = 34048 # GL/glext.h:1959 +GL_TEXTURE_LOD_BIAS_EXT = 34049 # GL/glext.h:1960 +# EXT_texture_filter_anisotropic (GL/glext.h:1963) +GL_TEXTURE_MAX_ANISOTROPY_EXT = 34046 # GL/glext.h:1964 +GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT = 34047 # GL/glext.h:1965 +# EXT_vertex_weighting (GL/glext.h:1968) +GL_MODELVIEW0_STACK_DEPTH_EXT = 0 # GL/glext.h:1969 +GL_MODELVIEW1_STACK_DEPTH_EXT = 34050 # GL/glext.h:1970 +GL_MODELVIEW0_MATRIX_EXT = 0 # GL/glext.h:1971 +GL_MODELVIEW1_MATRIX_EXT = 34054 # GL/glext.h:1972 +GL_VERTEX_WEIGHTING_EXT = 34057 # GL/glext.h:1973 +GL_MODELVIEW0_EXT = 0 # GL/glext.h:1974 +GL_MODELVIEW1_EXT = 34058 # GL/glext.h:1975 +GL_CURRENT_VERTEX_WEIGHT_EXT = 34059 # GL/glext.h:1976 +GL_VERTEX_WEIGHT_ARRAY_EXT = 34060 # GL/glext.h:1977 +GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT = 34061 # GL/glext.h:1978 +GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT = 34062 # GL/glext.h:1979 +GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT = 34063 # GL/glext.h:1980 +GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT = 34064 # GL/glext.h:1981 +# NV_light_max_exponent (GL/glext.h:1984) +GL_MAX_SHININESS_NV = 34052 # GL/glext.h:1985 +GL_MAX_SPOT_EXPONENT_NV = 34053 # GL/glext.h:1986 +# NV_vertex_array_range (GL/glext.h:1989) +GL_VERTEX_ARRAY_RANGE_NV = 34077 # GL/glext.h:1990 +GL_VERTEX_ARRAY_RANGE_LENGTH_NV = 34078 # GL/glext.h:1991 +GL_VERTEX_ARRAY_RANGE_VALID_NV = 34079 # GL/glext.h:1992 +GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV = 34080 # GL/glext.h:1993 +GL_VERTEX_ARRAY_RANGE_POINTER_NV = 34081 # GL/glext.h:1994 +# NV_register_combiners (GL/glext.h:1997) +GL_REGISTER_COMBINERS_NV = 34082 # GL/glext.h:1998 +GL_VARIABLE_A_NV = 34083 # GL/glext.h:1999 +GL_VARIABLE_B_NV = 34084 # GL/glext.h:2000 +GL_VARIABLE_C_NV = 34085 # GL/glext.h:2001 +GL_VARIABLE_D_NV = 34086 # GL/glext.h:2002 +GL_VARIABLE_E_NV = 34087 # GL/glext.h:2003 +GL_VARIABLE_F_NV = 34088 # GL/glext.h:2004 +GL_VARIABLE_G_NV = 34089 # GL/glext.h:2005 +GL_CONSTANT_COLOR0_NV = 34090 # GL/glext.h:2006 +GL_CONSTANT_COLOR1_NV = 34091 # GL/glext.h:2007 +GL_PRIMARY_COLOR_NV = 34092 # GL/glext.h:2008 +GL_SECONDARY_COLOR_NV = 34093 # GL/glext.h:2009 +GL_SPARE0_NV = 34094 # GL/glext.h:2010 +GL_SPARE1_NV = 34095 # GL/glext.h:2011 +GL_DISCARD_NV = 34096 # GL/glext.h:2012 +GL_E_TIMES_F_NV = 34097 # GL/glext.h:2013 +GL_SPARE0_PLUS_SECONDARY_COLOR_NV = 34098 # GL/glext.h:2014 +GL_UNSIGNED_IDENTITY_NV = 34102 # GL/glext.h:2015 +GL_UNSIGNED_INVERT_NV = 34103 # GL/glext.h:2016 +GL_EXPAND_NORMAL_NV = 34104 # GL/glext.h:2017 +GL_EXPAND_NEGATE_NV = 34105 # GL/glext.h:2018 +GL_HALF_BIAS_NORMAL_NV = 34106 # GL/glext.h:2019 +GL_HALF_BIAS_NEGATE_NV = 34107 # GL/glext.h:2020 +GL_SIGNED_IDENTITY_NV = 34108 # GL/glext.h:2021 +GL_SIGNED_NEGATE_NV = 34109 # GL/glext.h:2022 +GL_SCALE_BY_TWO_NV = 34110 # GL/glext.h:2023 +GL_SCALE_BY_FOUR_NV = 34111 # GL/glext.h:2024 +GL_SCALE_BY_ONE_HALF_NV = 34112 # GL/glext.h:2025 +GL_BIAS_BY_NEGATIVE_ONE_HALF_NV = 34113 # GL/glext.h:2026 +GL_COMBINER_INPUT_NV = 34114 # GL/glext.h:2027 +GL_COMBINER_MAPPING_NV = 34115 # GL/glext.h:2028 +GL_COMBINER_COMPONENT_USAGE_NV = 34116 # GL/glext.h:2029 +GL_COMBINER_AB_DOT_PRODUCT_NV = 34117 # GL/glext.h:2030 +GL_COMBINER_CD_DOT_PRODUCT_NV = 34118 # GL/glext.h:2031 +GL_COMBINER_MUX_SUM_NV = 34119 # GL/glext.h:2032 +GL_COMBINER_SCALE_NV = 34120 # GL/glext.h:2033 +GL_COMBINER_BIAS_NV = 34121 # GL/glext.h:2034 +GL_COMBINER_AB_OUTPUT_NV = 34122 # GL/glext.h:2035 +GL_COMBINER_CD_OUTPUT_NV = 34123 # GL/glext.h:2036 +GL_COMBINER_SUM_OUTPUT_NV = 34124 # GL/glext.h:2037 +GL_MAX_GENERAL_COMBINERS_NV = 34125 # GL/glext.h:2038 +GL_NUM_GENERAL_COMBINERS_NV = 34126 # GL/glext.h:2039 +GL_COLOR_SUM_CLAMP_NV = 34127 # GL/glext.h:2040 +GL_COMBINER0_NV = 34128 # GL/glext.h:2041 +GL_COMBINER1_NV = 34129 # GL/glext.h:2042 +GL_COMBINER2_NV = 34130 # GL/glext.h:2043 +GL_COMBINER3_NV = 34131 # GL/glext.h:2044 +GL_COMBINER4_NV = 34132 # GL/glext.h:2045 +GL_COMBINER5_NV = 34133 # GL/glext.h:2046 +GL_COMBINER6_NV = 34134 # GL/glext.h:2047 +GL_COMBINER7_NV = 34135 # GL/glext.h:2048 +# NV_fog_distance (GL/glext.h:2056) +GL_FOG_DISTANCE_MODE_NV = 34138 # GL/glext.h:2057 +GL_EYE_RADIAL_NV = 34139 # GL/glext.h:2058 +GL_EYE_PLANE_ABSOLUTE_NV = 34140 # GL/glext.h:2059 +# NV_texgen_emboss (GL/glext.h:2063) +GL_EMBOSS_LIGHT_NV = 34141 # GL/glext.h:2064 +GL_EMBOSS_CONSTANT_NV = 34142 # GL/glext.h:2065 +GL_EMBOSS_MAP_NV = 34143 # GL/glext.h:2066 +# NV_blend_square (GL/glext.h:2069) +# NV_texture_env_combine4 (GL/glext.h:2072) +GL_COMBINE4_NV = 34051 # GL/glext.h:2073 +GL_SOURCE3_RGB_NV = 34179 # GL/glext.h:2074 +GL_SOURCE3_ALPHA_NV = 34187 # GL/glext.h:2075 +GL_OPERAND3_RGB_NV = 34195 # GL/glext.h:2076 +GL_OPERAND3_ALPHA_NV = 34203 # GL/glext.h:2077 +# MESA_resize_buffers (GL/glext.h:2080) +# MESA_window_pos (GL/glext.h:2083) +# EXT_texture_compression_s3tc (GL/glext.h:2086) +GL_COMPRESSED_RGB_S3TC_DXT1_EXT = 33776 # GL/glext.h:2087 +GL_COMPRESSED_RGBA_S3TC_DXT1_EXT = 33777 # GL/glext.h:2088 +GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = 33778 # GL/glext.h:2089 +GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = 33779 # GL/glext.h:2090 +# IBM_cull_vertex (GL/glext.h:2093) +GL_CULL_VERTEX_IBM = 103050 # GL/glext.h:2094 +# IBM_multimode_draw_arrays (GL/glext.h:2097) +# IBM_vertex_array_lists (GL/glext.h:2100) +GL_VERTEX_ARRAY_LIST_IBM = 103070 # GL/glext.h:2101 +GL_NORMAL_ARRAY_LIST_IBM = 103071 # GL/glext.h:2102 +GL_COLOR_ARRAY_LIST_IBM = 103072 # GL/glext.h:2103 +GL_INDEX_ARRAY_LIST_IBM = 103073 # GL/glext.h:2104 +GL_TEXTURE_COORD_ARRAY_LIST_IBM = 103074 # GL/glext.h:2105 +GL_EDGE_FLAG_ARRAY_LIST_IBM = 103075 # GL/glext.h:2106 +GL_FOG_COORDINATE_ARRAY_LIST_IBM = 103076 # GL/glext.h:2107 +GL_SECONDARY_COLOR_ARRAY_LIST_IBM = 103077 # GL/glext.h:2108 +GL_VERTEX_ARRAY_LIST_STRIDE_IBM = 103080 # GL/glext.h:2109 +GL_NORMAL_ARRAY_LIST_STRIDE_IBM = 103081 # GL/glext.h:2110 +GL_COLOR_ARRAY_LIST_STRIDE_IBM = 103082 # GL/glext.h:2111 +GL_INDEX_ARRAY_LIST_STRIDE_IBM = 103083 # GL/glext.h:2112 +GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM = 103084 # GL/glext.h:2113 +GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM = 103085 # GL/glext.h:2114 +GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM = 103086 # GL/glext.h:2115 +GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM = 103087 # GL/glext.h:2116 +# SGIX_subsample (GL/glext.h:2119) +GL_PACK_SUBSAMPLE_RATE_SGIX = 34208 # GL/glext.h:2120 +GL_UNPACK_SUBSAMPLE_RATE_SGIX = 34209 # GL/glext.h:2121 +GL_PIXEL_SUBSAMPLE_4444_SGIX = 34210 # GL/glext.h:2122 +GL_PIXEL_SUBSAMPLE_2424_SGIX = 34211 # GL/glext.h:2123 +GL_PIXEL_SUBSAMPLE_4242_SGIX = 34212 # GL/glext.h:2124 +# SGIX_ycrcb_subsample (GL/glext.h:2127) +# SGIX_ycrcba (GL/glext.h:2130) +GL_YCRCB_SGIX = 33560 # GL/glext.h:2131 +GL_YCRCBA_SGIX = 33561 # GL/glext.h:2132 +# SGI_depth_pass_instrument (GL/glext.h:2135) +GL_DEPTH_PASS_INSTRUMENT_SGIX = 33552 # GL/glext.h:2136 +GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX = 33553 # GL/glext.h:2137 +GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX = 33554 # GL/glext.h:2138 +# 3DFX_texture_compression_FXT1 (GL/glext.h:2141) +GL_COMPRESSED_RGB_FXT1_3DFX = 34480 # GL/glext.h:2142 +GL_COMPRESSED_RGBA_FXT1_3DFX = 34481 # GL/glext.h:2143 +# 3DFX_multisample (GL/glext.h:2146) +GL_MULTISAMPLE_3DFX = 34482 # GL/glext.h:2147 +GL_SAMPLE_BUFFERS_3DFX = 34483 # GL/glext.h:2148 +GL_SAMPLES_3DFX = 34484 # GL/glext.h:2149 +GL_MULTISAMPLE_BIT_3DFX = 536870912 # GL/glext.h:2150 +# 3DFX_tbuffer (GL/glext.h:2153) +# EXT_multisample (GL/glext.h:2156) +GL_MULTISAMPLE_EXT = 32925 # GL/glext.h:2157 +GL_SAMPLE_ALPHA_TO_MASK_EXT = 32926 # GL/glext.h:2158 +GL_SAMPLE_ALPHA_TO_ONE_EXT = 32927 # GL/glext.h:2159 +GL_SAMPLE_MASK_EXT = 32928 # GL/glext.h:2160 +GL_1PASS_EXT = 32929 # GL/glext.h:2161 +GL_2PASS_0_EXT = 32930 # GL/glext.h:2162 +GL_2PASS_1_EXT = 32931 # GL/glext.h:2163 +GL_4PASS_0_EXT = 32932 # GL/glext.h:2164 +GL_4PASS_1_EXT = 32933 # GL/glext.h:2165 +GL_4PASS_2_EXT = 32934 # GL/glext.h:2166 +GL_4PASS_3_EXT = 32935 # GL/glext.h:2167 +GL_SAMPLE_BUFFERS_EXT = 32936 # GL/glext.h:2168 +GL_SAMPLES_EXT = 32937 # GL/glext.h:2169 +GL_SAMPLE_MASK_VALUE_EXT = 32938 # GL/glext.h:2170 +GL_SAMPLE_MASK_INVERT_EXT = 32939 # GL/glext.h:2171 +GL_SAMPLE_PATTERN_EXT = 32940 # GL/glext.h:2172 +GL_MULTISAMPLE_BIT_EXT = 536870912 # GL/glext.h:2173 +# SGIX_vertex_preclip (GL/glext.h:2176) +GL_VERTEX_PRECLIP_SGIX = 33774 # GL/glext.h:2177 +GL_VERTEX_PRECLIP_HINT_SGIX = 33775 # GL/glext.h:2178 +# SGIX_convolution_accuracy (GL/glext.h:2181) +GL_CONVOLUTION_HINT_SGIX = 33558 # GL/glext.h:2182 +# SGIX_resample (GL/glext.h:2185) +GL_PACK_RESAMPLE_SGIX = 33836 # GL/glext.h:2186 +GL_UNPACK_RESAMPLE_SGIX = 33837 # GL/glext.h:2187 +GL_RESAMPLE_REPLICATE_SGIX = 33838 # GL/glext.h:2188 +GL_RESAMPLE_ZERO_FILL_SGIX = 33839 # GL/glext.h:2189 +GL_RESAMPLE_DECIMATE_SGIX = 33840 # GL/glext.h:2190 +# SGIS_point_line_texgen (GL/glext.h:2193) +GL_EYE_DISTANCE_TO_POINT_SGIS = 33264 # GL/glext.h:2194 +GL_OBJECT_DISTANCE_TO_POINT_SGIS = 33265 # GL/glext.h:2195 +GL_EYE_DISTANCE_TO_LINE_SGIS = 33266 # GL/glext.h:2196 +GL_OBJECT_DISTANCE_TO_LINE_SGIS = 33267 # GL/glext.h:2197 +GL_EYE_POINT_SGIS = 33268 # GL/glext.h:2198 +GL_OBJECT_POINT_SGIS = 33269 # GL/glext.h:2199 +GL_EYE_LINE_SGIS = 33270 # GL/glext.h:2200 +GL_OBJECT_LINE_SGIS = 33271 # GL/glext.h:2201 +# SGIS_texture_color_mask (GL/glext.h:2204) +GL_TEXTURE_COLOR_WRITEMASK_SGIS = 33263 # GL/glext.h:2205 +# EXT_texture_env_dot3 (GL/glext.h:2208) +GL_DOT3_RGB_EXT = 34624 # GL/glext.h:2209 +GL_DOT3_RGBA_EXT = 34625 # GL/glext.h:2210 +# ATI_texture_mirror_once (GL/glext.h:2213) +GL_MIRROR_CLAMP_ATI = 34626 # GL/glext.h:2214 +GL_MIRROR_CLAMP_TO_EDGE_ATI = 34627 # GL/glext.h:2215 +# NV_fence (GL/glext.h:2218) +GL_ALL_COMPLETED_NV = 34034 # GL/glext.h:2219 +GL_FENCE_STATUS_NV = 34035 # GL/glext.h:2220 +GL_FENCE_CONDITION_NV = 34036 # GL/glext.h:2221 +# IBM_texture_mirrored_repeat (GL/glext.h:2224) +GL_MIRRORED_REPEAT_IBM = 33648 # GL/glext.h:2225 +# NV_evaluators (GL/glext.h:2228) +GL_EVAL_2D_NV = 34496 # GL/glext.h:2229 +GL_EVAL_TRIANGULAR_2D_NV = 34497 # GL/glext.h:2230 +GL_MAP_TESSELLATION_NV = 34498 # GL/glext.h:2231 +GL_MAP_ATTRIB_U_ORDER_NV = 34499 # GL/glext.h:2232 +GL_MAP_ATTRIB_V_ORDER_NV = 34500 # GL/glext.h:2233 +GL_EVAL_FRACTIONAL_TESSELLATION_NV = 34501 # GL/glext.h:2234 +GL_EVAL_VERTEX_ATTRIB0_NV = 34502 # GL/glext.h:2235 +GL_EVAL_VERTEX_ATTRIB1_NV = 34503 # GL/glext.h:2236 +GL_EVAL_VERTEX_ATTRIB2_NV = 34504 # GL/glext.h:2237 +GL_EVAL_VERTEX_ATTRIB3_NV = 34505 # GL/glext.h:2238 +GL_EVAL_VERTEX_ATTRIB4_NV = 34506 # GL/glext.h:2239 +GL_EVAL_VERTEX_ATTRIB5_NV = 34507 # GL/glext.h:2240 +GL_EVAL_VERTEX_ATTRIB6_NV = 34508 # GL/glext.h:2241 +GL_EVAL_VERTEX_ATTRIB7_NV = 34509 # GL/glext.h:2242 +GL_EVAL_VERTEX_ATTRIB8_NV = 34510 # GL/glext.h:2243 +GL_EVAL_VERTEX_ATTRIB9_NV = 34511 # GL/glext.h:2244 +GL_EVAL_VERTEX_ATTRIB10_NV = 34512 # GL/glext.h:2245 +GL_EVAL_VERTEX_ATTRIB11_NV = 34513 # GL/glext.h:2246 +GL_EVAL_VERTEX_ATTRIB12_NV = 34514 # GL/glext.h:2247 +GL_EVAL_VERTEX_ATTRIB13_NV = 34515 # GL/glext.h:2248 +GL_EVAL_VERTEX_ATTRIB14_NV = 34516 # GL/glext.h:2249 +GL_EVAL_VERTEX_ATTRIB15_NV = 34517 # GL/glext.h:2250 +GL_MAX_MAP_TESSELLATION_NV = 34518 # GL/glext.h:2251 +GL_MAX_RATIONAL_EVAL_ORDER_NV = 34519 # GL/glext.h:2252 +# NV_packed_depth_stencil (GL/glext.h:2255) +GL_DEPTH_STENCIL_NV = 34041 # GL/glext.h:2256 +GL_UNSIGNED_INT_24_8_NV = 34042 # GL/glext.h:2257 +# NV_register_combiners2 (GL/glext.h:2260) +GL_PER_STAGE_CONSTANTS_NV = 34101 # GL/glext.h:2261 +# NV_texture_compression_vtc (GL/glext.h:2264) +# NV_texture_rectangle (GL/glext.h:2267) +GL_TEXTURE_RECTANGLE_NV = 34037 # GL/glext.h:2268 +GL_TEXTURE_BINDING_RECTANGLE_NV = 34038 # GL/glext.h:2269 +GL_PROXY_TEXTURE_RECTANGLE_NV = 34039 # GL/glext.h:2270 +GL_MAX_RECTANGLE_TEXTURE_SIZE_NV = 34040 # GL/glext.h:2271 +# NV_texture_shader (GL/glext.h:2274) +GL_OFFSET_TEXTURE_RECTANGLE_NV = 34380 # GL/glext.h:2275 +GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV = 34381 # GL/glext.h:2276 +GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV = 34382 # GL/glext.h:2277 +GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV = 34521 # GL/glext.h:2278 +GL_UNSIGNED_INT_S8_S8_8_8_NV = 34522 # GL/glext.h:2279 +GL_UNSIGNED_INT_8_8_S8_S8_REV_NV = 34523 # GL/glext.h:2280 +GL_DSDT_MAG_INTENSITY_NV = 34524 # GL/glext.h:2281 +GL_SHADER_CONSISTENT_NV = 34525 # GL/glext.h:2282 +GL_TEXTURE_SHADER_NV = 34526 # GL/glext.h:2283 +GL_SHADER_OPERATION_NV = 34527 # GL/glext.h:2284 +GL_CULL_MODES_NV = 34528 # GL/glext.h:2285 +GL_OFFSET_TEXTURE_MATRIX_NV = 34529 # GL/glext.h:2286 +GL_OFFSET_TEXTURE_SCALE_NV = 34530 # GL/glext.h:2287 +GL_OFFSET_TEXTURE_BIAS_NV = 34531 # GL/glext.h:2288 +GL_OFFSET_TEXTURE_2D_MATRIX_NV = 34529 # GL/glext.h:2289 +GL_OFFSET_TEXTURE_2D_SCALE_NV = 34530 # GL/glext.h:2290 +GL_OFFSET_TEXTURE_2D_BIAS_NV = 34531 # GL/glext.h:2291 +GL_PREVIOUS_TEXTURE_INPUT_NV = 34532 # GL/glext.h:2292 +GL_CONST_EYE_NV = 34533 # GL/glext.h:2293 +GL_PASS_THROUGH_NV = 34534 # GL/glext.h:2294 +GL_CULL_FRAGMENT_NV = 34535 # GL/glext.h:2295 +GL_OFFSET_TEXTURE_2D_NV = 34536 # GL/glext.h:2296 +GL_DEPENDENT_AR_TEXTURE_2D_NV = 34537 # GL/glext.h:2297 +GL_DEPENDENT_GB_TEXTURE_2D_NV = 34538 # GL/glext.h:2298 +GL_DOT_PRODUCT_NV = 34540 # GL/glext.h:2299 +GL_DOT_PRODUCT_DEPTH_REPLACE_NV = 34541 # GL/glext.h:2300 +GL_DOT_PRODUCT_TEXTURE_2D_NV = 34542 # GL/glext.h:2301 +GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV = 34544 # GL/glext.h:2302 +GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV = 34545 # GL/glext.h:2303 +GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV = 34546 # GL/glext.h:2304 +GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV = 34547 # GL/glext.h:2305 +GL_HILO_NV = 34548 # GL/glext.h:2306 +GL_DSDT_NV = 34549 # GL/glext.h:2307 +GL_DSDT_MAG_NV = 34550 # GL/glext.h:2308 +GL_DSDT_MAG_VIB_NV = 34551 # GL/glext.h:2309 +GL_HILO16_NV = 34552 # GL/glext.h:2310 +GL_SIGNED_HILO_NV = 34553 # GL/glext.h:2311 +GL_SIGNED_HILO16_NV = 34554 # GL/glext.h:2312 +GL_SIGNED_RGBA_NV = 34555 # GL/glext.h:2313 +GL_SIGNED_RGBA8_NV = 34556 # GL/glext.h:2314 +GL_SIGNED_RGB_NV = 34558 # GL/glext.h:2315 +GL_SIGNED_RGB8_NV = 34559 # GL/glext.h:2316 +GL_SIGNED_LUMINANCE_NV = 34561 # GL/glext.h:2317 +GL_SIGNED_LUMINANCE8_NV = 34562 # GL/glext.h:2318 +GL_SIGNED_LUMINANCE_ALPHA_NV = 34563 # GL/glext.h:2319 +GL_SIGNED_LUMINANCE8_ALPHA8_NV = 34564 # GL/glext.h:2320 +GL_SIGNED_ALPHA_NV = 34565 # GL/glext.h:2321 +GL_SIGNED_ALPHA8_NV = 34566 # GL/glext.h:2322 +GL_SIGNED_INTENSITY_NV = 34567 # GL/glext.h:2323 +GL_SIGNED_INTENSITY8_NV = 34568 # GL/glext.h:2324 +GL_DSDT8_NV = 34569 # GL/glext.h:2325 +GL_DSDT8_MAG8_NV = 34570 # GL/glext.h:2326 +GL_DSDT8_MAG8_INTENSITY8_NV = 34571 # GL/glext.h:2327 +GL_SIGNED_RGB_UNSIGNED_ALPHA_NV = 34572 # GL/glext.h:2328 +GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV = 34573 # GL/glext.h:2329 +GL_HI_SCALE_NV = 34574 # GL/glext.h:2330 +GL_LO_SCALE_NV = 34575 # GL/glext.h:2331 +GL_DS_SCALE_NV = 34576 # GL/glext.h:2332 +GL_DT_SCALE_NV = 34577 # GL/glext.h:2333 +GL_MAGNITUDE_SCALE_NV = 34578 # GL/glext.h:2334 +GL_VIBRANCE_SCALE_NV = 34579 # GL/glext.h:2335 +GL_HI_BIAS_NV = 34580 # GL/glext.h:2336 +GL_LO_BIAS_NV = 34581 # GL/glext.h:2337 +GL_DS_BIAS_NV = 34582 # GL/glext.h:2338 +GL_DT_BIAS_NV = 34583 # GL/glext.h:2339 +GL_MAGNITUDE_BIAS_NV = 34584 # GL/glext.h:2340 +GL_VIBRANCE_BIAS_NV = 34585 # GL/glext.h:2341 +GL_TEXTURE_BORDER_VALUES_NV = 34586 # GL/glext.h:2342 +GL_TEXTURE_HI_SIZE_NV = 34587 # GL/glext.h:2343 +GL_TEXTURE_LO_SIZE_NV = 34588 # GL/glext.h:2344 +GL_TEXTURE_DS_SIZE_NV = 34589 # GL/glext.h:2345 +GL_TEXTURE_DT_SIZE_NV = 34590 # GL/glext.h:2346 +GL_TEXTURE_MAG_SIZE_NV = 34591 # GL/glext.h:2347 +# NV_texture_shader2 (GL/glext.h:2350) +GL_DOT_PRODUCT_TEXTURE_3D_NV = 34543 # GL/glext.h:2351 +# NV_vertex_array_range2 (GL/glext.h:2354) +GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV = 34099 # GL/glext.h:2355 +# NV_vertex_program (GL/glext.h:2358) +GL_VERTEX_PROGRAM_NV = 34336 # GL/glext.h:2359 +GL_VERTEX_STATE_PROGRAM_NV = 34337 # GL/glext.h:2360 +GL_ATTRIB_ARRAY_SIZE_NV = 34339 # GL/glext.h:2361 +GL_ATTRIB_ARRAY_STRIDE_NV = 34340 # GL/glext.h:2362 +GL_ATTRIB_ARRAY_TYPE_NV = 34341 # GL/glext.h:2363 +GL_CURRENT_ATTRIB_NV = 34342 # GL/glext.h:2364 +GL_PROGRAM_LENGTH_NV = 34343 # GL/glext.h:2365 +GL_PROGRAM_STRING_NV = 34344 # GL/glext.h:2366 +GL_MODELVIEW_PROJECTION_NV = 34345 # GL/glext.h:2367 +GL_IDENTITY_NV = 34346 # GL/glext.h:2368 +GL_INVERSE_NV = 34347 # GL/glext.h:2369 +GL_TRANSPOSE_NV = 34348 # GL/glext.h:2370 +GL_INVERSE_TRANSPOSE_NV = 34349 # GL/glext.h:2371 +GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV = 34350 # GL/glext.h:2372 +GL_MAX_TRACK_MATRICES_NV = 34351 # GL/glext.h:2373 +GL_MATRIX0_NV = 34352 # GL/glext.h:2374 +GL_MATRIX1_NV = 34353 # GL/glext.h:2375 +GL_MATRIX2_NV = 34354 # GL/glext.h:2376 +GL_MATRIX3_NV = 34355 # GL/glext.h:2377 +GL_MATRIX4_NV = 34356 # GL/glext.h:2378 +GL_MATRIX5_NV = 34357 # GL/glext.h:2379 +GL_MATRIX6_NV = 34358 # GL/glext.h:2380 +GL_MATRIX7_NV = 34359 # GL/glext.h:2381 +GL_CURRENT_MATRIX_STACK_DEPTH_NV = 34368 # GL/glext.h:2382 +GL_CURRENT_MATRIX_NV = 34369 # GL/glext.h:2383 +GL_VERTEX_PROGRAM_POINT_SIZE_NV = 34370 # GL/glext.h:2384 +GL_VERTEX_PROGRAM_TWO_SIDE_NV = 34371 # GL/glext.h:2385 +GL_PROGRAM_PARAMETER_NV = 34372 # GL/glext.h:2386 +GL_ATTRIB_ARRAY_POINTER_NV = 34373 # GL/glext.h:2387 +GL_PROGRAM_TARGET_NV = 34374 # GL/glext.h:2388 +GL_PROGRAM_RESIDENT_NV = 34375 # GL/glext.h:2389 +GL_TRACK_MATRIX_NV = 34376 # GL/glext.h:2390 +GL_TRACK_MATRIX_TRANSFORM_NV = 34377 # GL/glext.h:2391 +GL_VERTEX_PROGRAM_BINDING_NV = 34378 # GL/glext.h:2392 +GL_PROGRAM_ERROR_POSITION_NV = 34379 # GL/glext.h:2393 +GL_VERTEX_ATTRIB_ARRAY0_NV = 34384 # GL/glext.h:2394 +GL_VERTEX_ATTRIB_ARRAY1_NV = 34385 # GL/glext.h:2395 +GL_VERTEX_ATTRIB_ARRAY2_NV = 34386 # GL/glext.h:2396 +GL_VERTEX_ATTRIB_ARRAY3_NV = 34387 # GL/glext.h:2397 +GL_VERTEX_ATTRIB_ARRAY4_NV = 34388 # GL/glext.h:2398 +GL_VERTEX_ATTRIB_ARRAY5_NV = 34389 # GL/glext.h:2399 +GL_VERTEX_ATTRIB_ARRAY6_NV = 34390 # GL/glext.h:2400 +GL_VERTEX_ATTRIB_ARRAY7_NV = 34391 # GL/glext.h:2401 +GL_VERTEX_ATTRIB_ARRAY8_NV = 34392 # GL/glext.h:2402 +GL_VERTEX_ATTRIB_ARRAY9_NV = 34393 # GL/glext.h:2403 +GL_VERTEX_ATTRIB_ARRAY10_NV = 34394 # GL/glext.h:2404 +GL_VERTEX_ATTRIB_ARRAY11_NV = 34395 # GL/glext.h:2405 +GL_VERTEX_ATTRIB_ARRAY12_NV = 34396 # GL/glext.h:2406 +GL_VERTEX_ATTRIB_ARRAY13_NV = 34397 # GL/glext.h:2407 +GL_VERTEX_ATTRIB_ARRAY14_NV = 34398 # GL/glext.h:2408 +GL_VERTEX_ATTRIB_ARRAY15_NV = 34399 # GL/glext.h:2409 +GL_MAP1_VERTEX_ATTRIB0_4_NV = 34400 # GL/glext.h:2410 +GL_MAP1_VERTEX_ATTRIB1_4_NV = 34401 # GL/glext.h:2411 +GL_MAP1_VERTEX_ATTRIB2_4_NV = 34402 # GL/glext.h:2412 +GL_MAP1_VERTEX_ATTRIB3_4_NV = 34403 # GL/glext.h:2413 +GL_MAP1_VERTEX_ATTRIB4_4_NV = 34404 # GL/glext.h:2414 +GL_MAP1_VERTEX_ATTRIB5_4_NV = 34405 # GL/glext.h:2415 +GL_MAP1_VERTEX_ATTRIB6_4_NV = 34406 # GL/glext.h:2416 +GL_MAP1_VERTEX_ATTRIB7_4_NV = 34407 # GL/glext.h:2417 +GL_MAP1_VERTEX_ATTRIB8_4_NV = 34408 # GL/glext.h:2418 +GL_MAP1_VERTEX_ATTRIB9_4_NV = 34409 # GL/glext.h:2419 +GL_MAP1_VERTEX_ATTRIB10_4_NV = 34410 # GL/glext.h:2420 +GL_MAP1_VERTEX_ATTRIB11_4_NV = 34411 # GL/glext.h:2421 +GL_MAP1_VERTEX_ATTRIB12_4_NV = 34412 # GL/glext.h:2422 +GL_MAP1_VERTEX_ATTRIB13_4_NV = 34413 # GL/glext.h:2423 +GL_MAP1_VERTEX_ATTRIB14_4_NV = 34414 # GL/glext.h:2424 +GL_MAP1_VERTEX_ATTRIB15_4_NV = 34415 # GL/glext.h:2425 +GL_MAP2_VERTEX_ATTRIB0_4_NV = 34416 # GL/glext.h:2426 +GL_MAP2_VERTEX_ATTRIB1_4_NV = 34417 # GL/glext.h:2427 +GL_MAP2_VERTEX_ATTRIB2_4_NV = 34418 # GL/glext.h:2428 +GL_MAP2_VERTEX_ATTRIB3_4_NV = 34419 # GL/glext.h:2429 +GL_MAP2_VERTEX_ATTRIB4_4_NV = 34420 # GL/glext.h:2430 +GL_MAP2_VERTEX_ATTRIB5_4_NV = 34421 # GL/glext.h:2431 +GL_MAP2_VERTEX_ATTRIB6_4_NV = 34422 # GL/glext.h:2432 +GL_MAP2_VERTEX_ATTRIB7_4_NV = 34423 # GL/glext.h:2433 +GL_MAP2_VERTEX_ATTRIB8_4_NV = 34424 # GL/glext.h:2434 +GL_MAP2_VERTEX_ATTRIB9_4_NV = 34425 # GL/glext.h:2435 +GL_MAP2_VERTEX_ATTRIB10_4_NV = 34426 # GL/glext.h:2436 +GL_MAP2_VERTEX_ATTRIB11_4_NV = 34427 # GL/glext.h:2437 +GL_MAP2_VERTEX_ATTRIB12_4_NV = 34428 # GL/glext.h:2438 +GL_MAP2_VERTEX_ATTRIB13_4_NV = 34429 # GL/glext.h:2439 +GL_MAP2_VERTEX_ATTRIB14_4_NV = 34430 # GL/glext.h:2440 +GL_MAP2_VERTEX_ATTRIB15_4_NV = 34431 # GL/glext.h:2441 +# SGIX_texture_coordinate_clamp (GL/glext.h:2444) +GL_TEXTURE_MAX_CLAMP_S_SGIX = 33641 # GL/glext.h:2445 +GL_TEXTURE_MAX_CLAMP_T_SGIX = 33642 # GL/glext.h:2446 +GL_TEXTURE_MAX_CLAMP_R_SGIX = 33643 # GL/glext.h:2447 +# SGIX_scalebias_hint (GL/glext.h:2450) +GL_SCALEBIAS_HINT_SGIX = 33570 # GL/glext.h:2451 +# OML_interlace (GL/glext.h:2454) +GL_INTERLACE_OML = 35200 # GL/glext.h:2455 +GL_INTERLACE_READ_OML = 35201 # GL/glext.h:2456 +# OML_subsample (GL/glext.h:2459) +GL_FORMAT_SUBSAMPLE_24_24_OML = 35202 # GL/glext.h:2460 +GL_FORMAT_SUBSAMPLE_244_244_OML = 35203 # GL/glext.h:2461 +# OML_resample (GL/glext.h:2464) +GL_PACK_RESAMPLE_OML = 35204 # GL/glext.h:2465 +GL_UNPACK_RESAMPLE_OML = 35205 # GL/glext.h:2466 +GL_RESAMPLE_REPLICATE_OML = 35206 # GL/glext.h:2467 +GL_RESAMPLE_ZERO_FILL_OML = 35207 # GL/glext.h:2468 +GL_RESAMPLE_AVERAGE_OML = 35208 # GL/glext.h:2469 +GL_RESAMPLE_DECIMATE_OML = 35209 # GL/glext.h:2470 +# NV_copy_depth_to_color (GL/glext.h:2473) +GL_DEPTH_STENCIL_TO_RGBA_NV = 34926 # GL/glext.h:2474 +GL_DEPTH_STENCIL_TO_BGRA_NV = 34927 # GL/glext.h:2475 +# ATI_envmap_bumpmap (GL/glext.h:2478) +GL_BUMP_ROT_MATRIX_ATI = 34677 # GL/glext.h:2479 +GL_BUMP_ROT_MATRIX_SIZE_ATI = 34678 # GL/glext.h:2480 +GL_BUMP_NUM_TEX_UNITS_ATI = 34679 # GL/glext.h:2481 +GL_BUMP_TEX_UNITS_ATI = 34680 # GL/glext.h:2482 +GL_DUDV_ATI = 34681 # GL/glext.h:2483 +GL_DU8DV8_ATI = 34682 # GL/glext.h:2484 +GL_BUMP_ENVMAP_ATI = 34683 # GL/glext.h:2485 +GL_BUMP_TARGET_ATI = 34684 # GL/glext.h:2486 +# ATI_fragment_shader (GL/glext.h:2489) +GL_FRAGMENT_SHADER_ATI = 35104 # GL/glext.h:2490 +GL_REG_0_ATI = 35105 # GL/glext.h:2491 +GL_REG_1_ATI = 35106 # GL/glext.h:2492 +GL_REG_2_ATI = 35107 # GL/glext.h:2493 +GL_REG_3_ATI = 35108 # GL/glext.h:2494 +GL_REG_4_ATI = 35109 # GL/glext.h:2495 +GL_REG_5_ATI = 35110 # GL/glext.h:2496 +GL_REG_6_ATI = 35111 # GL/glext.h:2497 +GL_REG_7_ATI = 35112 # GL/glext.h:2498 +GL_REG_8_ATI = 35113 # GL/glext.h:2499 +GL_REG_9_ATI = 35114 # GL/glext.h:2500 +GL_REG_10_ATI = 35115 # GL/glext.h:2501 +GL_REG_11_ATI = 35116 # GL/glext.h:2502 +GL_REG_12_ATI = 35117 # GL/glext.h:2503 +GL_REG_13_ATI = 35118 # GL/glext.h:2504 +GL_REG_14_ATI = 35119 # GL/glext.h:2505 +GL_REG_15_ATI = 35120 # GL/glext.h:2506 +GL_REG_16_ATI = 35121 # GL/glext.h:2507 +GL_REG_17_ATI = 35122 # GL/glext.h:2508 +GL_REG_18_ATI = 35123 # GL/glext.h:2509 +GL_REG_19_ATI = 35124 # GL/glext.h:2510 +GL_REG_20_ATI = 35125 # GL/glext.h:2511 +GL_REG_21_ATI = 35126 # GL/glext.h:2512 +GL_REG_22_ATI = 35127 # GL/glext.h:2513 +GL_REG_23_ATI = 35128 # GL/glext.h:2514 +GL_REG_24_ATI = 35129 # GL/glext.h:2515 +GL_REG_25_ATI = 35130 # GL/glext.h:2516 +GL_REG_26_ATI = 35131 # GL/glext.h:2517 +GL_REG_27_ATI = 35132 # GL/glext.h:2518 +GL_REG_28_ATI = 35133 # GL/glext.h:2519 +GL_REG_29_ATI = 35134 # GL/glext.h:2520 +GL_REG_30_ATI = 35135 # GL/glext.h:2521 +GL_REG_31_ATI = 35136 # GL/glext.h:2522 +GL_CON_0_ATI = 35137 # GL/glext.h:2523 +GL_CON_1_ATI = 35138 # GL/glext.h:2524 +GL_CON_2_ATI = 35139 # GL/glext.h:2525 +GL_CON_3_ATI = 35140 # GL/glext.h:2526 +GL_CON_4_ATI = 35141 # GL/glext.h:2527 +GL_CON_5_ATI = 35142 # GL/glext.h:2528 +GL_CON_6_ATI = 35143 # GL/glext.h:2529 +GL_CON_7_ATI = 35144 # GL/glext.h:2530 +GL_CON_8_ATI = 35145 # GL/glext.h:2531 +GL_CON_9_ATI = 35146 # GL/glext.h:2532 +GL_CON_10_ATI = 35147 # GL/glext.h:2533 +GL_CON_11_ATI = 35148 # GL/glext.h:2534 +GL_CON_12_ATI = 35149 # GL/glext.h:2535 +GL_CON_13_ATI = 35150 # GL/glext.h:2536 +GL_CON_14_ATI = 35151 # GL/glext.h:2537 +GL_CON_15_ATI = 35152 # GL/glext.h:2538 +GL_CON_16_ATI = 35153 # GL/glext.h:2539 +GL_CON_17_ATI = 35154 # GL/glext.h:2540 +GL_CON_18_ATI = 35155 # GL/glext.h:2541 +GL_CON_19_ATI = 35156 # GL/glext.h:2542 +GL_CON_20_ATI = 35157 # GL/glext.h:2543 +GL_CON_21_ATI = 35158 # GL/glext.h:2544 +GL_CON_22_ATI = 35159 # GL/glext.h:2545 +GL_CON_23_ATI = 35160 # GL/glext.h:2546 +GL_CON_24_ATI = 35161 # GL/glext.h:2547 +GL_CON_25_ATI = 35162 # GL/glext.h:2548 +GL_CON_26_ATI = 35163 # GL/glext.h:2549 +GL_CON_27_ATI = 35164 # GL/glext.h:2550 +GL_CON_28_ATI = 35165 # GL/glext.h:2551 +GL_CON_29_ATI = 35166 # GL/glext.h:2552 +GL_CON_30_ATI = 35167 # GL/glext.h:2553 +GL_CON_31_ATI = 35168 # GL/glext.h:2554 +GL_MOV_ATI = 35169 # GL/glext.h:2555 +GL_ADD_ATI = 35171 # GL/glext.h:2556 +GL_MUL_ATI = 35172 # GL/glext.h:2557 +GL_SUB_ATI = 35173 # GL/glext.h:2558 +GL_DOT3_ATI = 35174 # GL/glext.h:2559 +GL_DOT4_ATI = 35175 # GL/glext.h:2560 +GL_MAD_ATI = 35176 # GL/glext.h:2561 +GL_LERP_ATI = 35177 # GL/glext.h:2562 +GL_CND_ATI = 35178 # GL/glext.h:2563 +GL_CND0_ATI = 35179 # GL/glext.h:2564 +GL_DOT2_ADD_ATI = 35180 # GL/glext.h:2565 +GL_SECONDARY_INTERPOLATOR_ATI = 35181 # GL/glext.h:2566 +GL_NUM_FRAGMENT_REGISTERS_ATI = 35182 # GL/glext.h:2567 +GL_NUM_FRAGMENT_CONSTANTS_ATI = 35183 # GL/glext.h:2568 +GL_NUM_PASSES_ATI = 35184 # GL/glext.h:2569 +GL_NUM_INSTRUCTIONS_PER_PASS_ATI = 35185 # GL/glext.h:2570 +GL_NUM_INSTRUCTIONS_TOTAL_ATI = 35186 # GL/glext.h:2571 +GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI = 35187 # GL/glext.h:2572 +GL_NUM_LOOPBACK_COMPONENTS_ATI = 35188 # GL/glext.h:2573 +GL_COLOR_ALPHA_PAIRING_ATI = 35189 # GL/glext.h:2574 +GL_SWIZZLE_STR_ATI = 35190 # GL/glext.h:2575 +GL_SWIZZLE_STQ_ATI = 35191 # GL/glext.h:2576 +GL_SWIZZLE_STR_DR_ATI = 35192 # GL/glext.h:2577 +GL_SWIZZLE_STQ_DQ_ATI = 35193 # GL/glext.h:2578 +GL_SWIZZLE_STRQ_ATI = 35194 # GL/glext.h:2579 +GL_SWIZZLE_STRQ_DQ_ATI = 35195 # GL/glext.h:2580 +GL_RED_BIT_ATI = 1 # GL/glext.h:2581 +GL_GREEN_BIT_ATI = 2 # GL/glext.h:2582 +GL_BLUE_BIT_ATI = 4 # GL/glext.h:2583 +GL_2X_BIT_ATI = 1 # GL/glext.h:2584 +GL_4X_BIT_ATI = 2 # GL/glext.h:2585 +GL_8X_BIT_ATI = 4 # GL/glext.h:2586 +GL_HALF_BIT_ATI = 8 # GL/glext.h:2587 +GL_QUARTER_BIT_ATI = 16 # GL/glext.h:2588 +GL_EIGHTH_BIT_ATI = 32 # GL/glext.h:2589 +GL_SATURATE_BIT_ATI = 64 # GL/glext.h:2590 +GL_COMP_BIT_ATI = 2 # GL/glext.h:2591 +GL_NEGATE_BIT_ATI = 4 # GL/glext.h:2592 +GL_BIAS_BIT_ATI = 8 # GL/glext.h:2593 +# ATI_pn_triangles (GL/glext.h:2596) +GL_PN_TRIANGLES_ATI = 34800 # GL/glext.h:2597 +GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI = 34801 # GL/glext.h:2598 +GL_PN_TRIANGLES_POINT_MODE_ATI = 34802 # GL/glext.h:2599 +GL_PN_TRIANGLES_NORMAL_MODE_ATI = 34803 # GL/glext.h:2600 +GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI = 34804 # GL/glext.h:2601 +GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI = 34805 # GL/glext.h:2602 +GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI = 34806 # GL/glext.h:2603 +GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI = 34807 # GL/glext.h:2604 +GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI = 34808 # GL/glext.h:2605 +# ATI_vertex_array_object (GL/glext.h:2608) +GL_STATIC_ATI = 34656 # GL/glext.h:2609 +GL_DYNAMIC_ATI = 34657 # GL/glext.h:2610 +GL_PRESERVE_ATI = 34658 # GL/glext.h:2611 +GL_DISCARD_ATI = 34659 # GL/glext.h:2612 +GL_OBJECT_BUFFER_SIZE_ATI = 34660 # GL/glext.h:2613 +GL_OBJECT_BUFFER_USAGE_ATI = 34661 # GL/glext.h:2614 +GL_ARRAY_OBJECT_BUFFER_ATI = 34662 # GL/glext.h:2615 +GL_ARRAY_OBJECT_OFFSET_ATI = 34663 # GL/glext.h:2616 +# EXT_vertex_shader (GL/glext.h:2619) +GL_VERTEX_SHADER_EXT = 34688 # GL/glext.h:2620 +GL_VERTEX_SHADER_BINDING_EXT = 34689 # GL/glext.h:2621 +GL_OP_INDEX_EXT = 34690 # GL/glext.h:2622 +GL_OP_NEGATE_EXT = 34691 # GL/glext.h:2623 +GL_OP_DOT3_EXT = 34692 # GL/glext.h:2624 +GL_OP_DOT4_EXT = 34693 # GL/glext.h:2625 +GL_OP_MUL_EXT = 34694 # GL/glext.h:2626 +GL_OP_ADD_EXT = 34695 # GL/glext.h:2627 +GL_OP_MADD_EXT = 34696 # GL/glext.h:2628 +GL_OP_FRAC_EXT = 34697 # GL/glext.h:2629 +GL_OP_MAX_EXT = 34698 # GL/glext.h:2630 +GL_OP_MIN_EXT = 34699 # GL/glext.h:2631 +GL_OP_SET_GE_EXT = 34700 # GL/glext.h:2632 +GL_OP_SET_LT_EXT = 34701 # GL/glext.h:2633 +GL_OP_CLAMP_EXT = 34702 # GL/glext.h:2634 +GL_OP_FLOOR_EXT = 34703 # GL/glext.h:2635 +GL_OP_ROUND_EXT = 34704 # GL/glext.h:2636 +GL_OP_EXP_BASE_2_EXT = 34705 # GL/glext.h:2637 +GL_OP_LOG_BASE_2_EXT = 34706 # GL/glext.h:2638 +GL_OP_POWER_EXT = 34707 # GL/glext.h:2639 +GL_OP_RECIP_EXT = 34708 # GL/glext.h:2640 +GL_OP_RECIP_SQRT_EXT = 34709 # GL/glext.h:2641 +GL_OP_SUB_EXT = 34710 # GL/glext.h:2642 +GL_OP_CROSS_PRODUCT_EXT = 34711 # GL/glext.h:2643 +GL_OP_MULTIPLY_MATRIX_EXT = 34712 # GL/glext.h:2644 +GL_OP_MOV_EXT = 34713 # GL/glext.h:2645 +GL_OUTPUT_VERTEX_EXT = 34714 # GL/glext.h:2646 +GL_OUTPUT_COLOR0_EXT = 34715 # GL/glext.h:2647 +GL_OUTPUT_COLOR1_EXT = 34716 # GL/glext.h:2648 +GL_OUTPUT_TEXTURE_COORD0_EXT = 34717 # GL/glext.h:2649 +GL_OUTPUT_TEXTURE_COORD1_EXT = 34718 # GL/glext.h:2650 +GL_OUTPUT_TEXTURE_COORD2_EXT = 34719 # GL/glext.h:2651 +GL_OUTPUT_TEXTURE_COORD3_EXT = 34720 # GL/glext.h:2652 +GL_OUTPUT_TEXTURE_COORD4_EXT = 34721 # GL/glext.h:2653 +GL_OUTPUT_TEXTURE_COORD5_EXT = 34722 # GL/glext.h:2654 +GL_OUTPUT_TEXTURE_COORD6_EXT = 34723 # GL/glext.h:2655 +GL_OUTPUT_TEXTURE_COORD7_EXT = 34724 # GL/glext.h:2656 +GL_OUTPUT_TEXTURE_COORD8_EXT = 34725 # GL/glext.h:2657 +GL_OUTPUT_TEXTURE_COORD9_EXT = 34726 # GL/glext.h:2658 +GL_OUTPUT_TEXTURE_COORD10_EXT = 34727 # GL/glext.h:2659 +GL_OUTPUT_TEXTURE_COORD11_EXT = 34728 # GL/glext.h:2660 +GL_OUTPUT_TEXTURE_COORD12_EXT = 34729 # GL/glext.h:2661 +GL_OUTPUT_TEXTURE_COORD13_EXT = 34730 # GL/glext.h:2662 +GL_OUTPUT_TEXTURE_COORD14_EXT = 34731 # GL/glext.h:2663 +GL_OUTPUT_TEXTURE_COORD15_EXT = 34732 # GL/glext.h:2664 +GL_OUTPUT_TEXTURE_COORD16_EXT = 34733 # GL/glext.h:2665 +GL_OUTPUT_TEXTURE_COORD17_EXT = 34734 # GL/glext.h:2666 +GL_OUTPUT_TEXTURE_COORD18_EXT = 34735 # GL/glext.h:2667 +GL_OUTPUT_TEXTURE_COORD19_EXT = 34736 # GL/glext.h:2668 +GL_OUTPUT_TEXTURE_COORD20_EXT = 34737 # GL/glext.h:2669 +GL_OUTPUT_TEXTURE_COORD21_EXT = 34738 # GL/glext.h:2670 +GL_OUTPUT_TEXTURE_COORD22_EXT = 34739 # GL/glext.h:2671 +GL_OUTPUT_TEXTURE_COORD23_EXT = 34740 # GL/glext.h:2672 +GL_OUTPUT_TEXTURE_COORD24_EXT = 34741 # GL/glext.h:2673 +GL_OUTPUT_TEXTURE_COORD25_EXT = 34742 # GL/glext.h:2674 +GL_OUTPUT_TEXTURE_COORD26_EXT = 34743 # GL/glext.h:2675 +GL_OUTPUT_TEXTURE_COORD27_EXT = 34744 # GL/glext.h:2676 +GL_OUTPUT_TEXTURE_COORD28_EXT = 34745 # GL/glext.h:2677 +GL_OUTPUT_TEXTURE_COORD29_EXT = 34746 # GL/glext.h:2678 +GL_OUTPUT_TEXTURE_COORD30_EXT = 34747 # GL/glext.h:2679 +GL_OUTPUT_TEXTURE_COORD31_EXT = 34748 # GL/glext.h:2680 +GL_OUTPUT_FOG_EXT = 34749 # GL/glext.h:2681 +GL_SCALAR_EXT = 34750 # GL/glext.h:2682 +GL_VECTOR_EXT = 34751 # GL/glext.h:2683 +GL_MATRIX_EXT = 34752 # GL/glext.h:2684 +GL_VARIANT_EXT = 34753 # GL/glext.h:2685 +GL_INVARIANT_EXT = 34754 # GL/glext.h:2686 +GL_LOCAL_CONSTANT_EXT = 34755 # GL/glext.h:2687 +GL_LOCAL_EXT = 34756 # GL/glext.h:2688 +GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT = 34757 # GL/glext.h:2689 +GL_MAX_VERTEX_SHADER_VARIANTS_EXT = 34758 # GL/glext.h:2690 +GL_MAX_VERTEX_SHADER_INVARIANTS_EXT = 34759 # GL/glext.h:2691 +GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT = 34760 # GL/glext.h:2692 +GL_MAX_VERTEX_SHADER_LOCALS_EXT = 34761 # GL/glext.h:2693 +GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT = 34762 # GL/glext.h:2694 +GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT = 34763 # GL/glext.h:2695 +GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT = 34764 # GL/glext.h:2696 +GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT = 34765 # GL/glext.h:2697 +GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT = 34766 # GL/glext.h:2698 +GL_VERTEX_SHADER_INSTRUCTIONS_EXT = 34767 # GL/glext.h:2699 +GL_VERTEX_SHADER_VARIANTS_EXT = 34768 # GL/glext.h:2700 +GL_VERTEX_SHADER_INVARIANTS_EXT = 34769 # GL/glext.h:2701 +GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT = 34770 # GL/glext.h:2702 +GL_VERTEX_SHADER_LOCALS_EXT = 34771 # GL/glext.h:2703 +GL_VERTEX_SHADER_OPTIMIZED_EXT = 34772 # GL/glext.h:2704 +GL_X_EXT = 34773 # GL/glext.h:2705 +GL_Y_EXT = 34774 # GL/glext.h:2706 +GL_Z_EXT = 34775 # GL/glext.h:2707 +GL_W_EXT = 34776 # GL/glext.h:2708 +GL_NEGATIVE_X_EXT = 34777 # GL/glext.h:2709 +GL_NEGATIVE_Y_EXT = 34778 # GL/glext.h:2710 +GL_NEGATIVE_Z_EXT = 34779 # GL/glext.h:2711 +GL_NEGATIVE_W_EXT = 34780 # GL/glext.h:2712 +GL_ZERO_EXT = 34781 # GL/glext.h:2713 +GL_ONE_EXT = 34782 # GL/glext.h:2714 +GL_NEGATIVE_ONE_EXT = 34783 # GL/glext.h:2715 +GL_NORMALIZED_RANGE_EXT = 34784 # GL/glext.h:2716 +GL_FULL_RANGE_EXT = 34785 # GL/glext.h:2717 +GL_CURRENT_VERTEX_EXT = 34786 # GL/glext.h:2718 +GL_MVP_MATRIX_EXT = 34787 # GL/glext.h:2719 +GL_VARIANT_VALUE_EXT = 34788 # GL/glext.h:2720 +GL_VARIANT_DATATYPE_EXT = 34789 # GL/glext.h:2721 +GL_VARIANT_ARRAY_STRIDE_EXT = 34790 # GL/glext.h:2722 +GL_VARIANT_ARRAY_TYPE_EXT = 34791 # GL/glext.h:2723 +GL_VARIANT_ARRAY_EXT = 34792 # GL/glext.h:2724 +GL_VARIANT_ARRAY_POINTER_EXT = 34793 # GL/glext.h:2725 +GL_INVARIANT_VALUE_EXT = 34794 # GL/glext.h:2726 +GL_INVARIANT_DATATYPE_EXT = 34795 # GL/glext.h:2727 +GL_LOCAL_CONSTANT_VALUE_EXT = 34796 # GL/glext.h:2728 +GL_LOCAL_CONSTANT_DATATYPE_EXT = 34797 # GL/glext.h:2729 +# ATI_vertex_streams (GL/glext.h:2732) +GL_MAX_VERTEX_STREAMS_ATI = 34667 # GL/glext.h:2733 +GL_VERTEX_STREAM0_ATI = 34668 # GL/glext.h:2734 +GL_VERTEX_STREAM1_ATI = 34669 # GL/glext.h:2735 +GL_VERTEX_STREAM2_ATI = 34670 # GL/glext.h:2736 +GL_VERTEX_STREAM3_ATI = 34671 # GL/glext.h:2737 +GL_VERTEX_STREAM4_ATI = 34672 # GL/glext.h:2738 +GL_VERTEX_STREAM5_ATI = 34673 # GL/glext.h:2739 +GL_VERTEX_STREAM6_ATI = 34674 # GL/glext.h:2740 +GL_VERTEX_STREAM7_ATI = 34675 # GL/glext.h:2741 +GL_VERTEX_SOURCE_ATI = 34676 # GL/glext.h:2742 +# ATI_element_array (GL/glext.h:2745) +GL_ELEMENT_ARRAY_ATI = 34664 # GL/glext.h:2746 +GL_ELEMENT_ARRAY_TYPE_ATI = 34665 # GL/glext.h:2747 +GL_ELEMENT_ARRAY_POINTER_ATI = 34666 # GL/glext.h:2748 +# SUN_mesh_array (GL/glext.h:2751) +GL_QUAD_MESH_SUN = 34324 # GL/glext.h:2752 +GL_TRIANGLE_MESH_SUN = 34325 # GL/glext.h:2753 +# SUN_slice_accum (GL/glext.h:2756) +GL_SLICE_ACCUM_SUN = 34252 # GL/glext.h:2757 +# NV_multisample_filter_hint (GL/glext.h:2760) +GL_MULTISAMPLE_FILTER_HINT_NV = 34100 # GL/glext.h:2761 +# NV_depth_clamp (GL/glext.h:2764) +GL_DEPTH_CLAMP_NV = 34383 # GL/glext.h:2765 +# NV_occlusion_query (GL/glext.h:2768) +GL_PIXEL_COUNTER_BITS_NV = 34916 # GL/glext.h:2769 +GL_CURRENT_OCCLUSION_QUERY_ID_NV = 34917 # GL/glext.h:2770 +GL_PIXEL_COUNT_NV = 34918 # GL/glext.h:2771 +GL_PIXEL_COUNT_AVAILABLE_NV = 34919 # GL/glext.h:2772 +# NV_point_sprite (GL/glext.h:2775) +GL_POINT_SPRITE_NV = 34913 # GL/glext.h:2776 +GL_COORD_REPLACE_NV = 34914 # GL/glext.h:2777 +GL_POINT_SPRITE_R_MODE_NV = 34915 # GL/glext.h:2778 +# NV_texture_shader3 (GL/glext.h:2781) +GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV = 34896 # GL/glext.h:2782 +GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV = 34897 # GL/glext.h:2783 +GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV = 34898 # GL/glext.h:2784 +GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV = 34899 # GL/glext.h:2785 +GL_OFFSET_HILO_TEXTURE_2D_NV = 34900 # GL/glext.h:2786 +GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV = 34901 # GL/glext.h:2787 +GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV = 34902 # GL/glext.h:2788 +GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV = 34903 # GL/glext.h:2789 +GL_DEPENDENT_HILO_TEXTURE_2D_NV = 34904 # GL/glext.h:2790 +GL_DEPENDENT_RGB_TEXTURE_3D_NV = 34905 # GL/glext.h:2791 +GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV = 34906 # GL/glext.h:2792 +GL_DOT_PRODUCT_PASS_THROUGH_NV = 34907 # GL/glext.h:2793 +GL_DOT_PRODUCT_TEXTURE_1D_NV = 34908 # GL/glext.h:2794 +GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV = 34909 # GL/glext.h:2795 +GL_HILO8_NV = 34910 # GL/glext.h:2796 +GL_SIGNED_HILO8_NV = 34911 # GL/glext.h:2797 +GL_FORCE_BLUE_TO_ONE_NV = 34912 # GL/glext.h:2798 +# NV_vertex_program1_1 (GL/glext.h:2801) +# EXT_shadow_funcs (GL/glext.h:2804) +# EXT_stencil_two_side (GL/glext.h:2807) +GL_STENCIL_TEST_TWO_SIDE_EXT = 35088 # GL/glext.h:2808 +GL_ACTIVE_STENCIL_FACE_EXT = 35089 # GL/glext.h:2809 +# ATI_text_fragment_shader (GL/glext.h:2812) +GL_TEXT_FRAGMENT_SHADER_ATI = 33280 # GL/glext.h:2813 +# APPLE_client_storage (GL/glext.h:2816) +GL_UNPACK_CLIENT_STORAGE_APPLE = 34226 # GL/glext.h:2817 +# APPLE_element_array (GL/glext.h:2820) +GL_ELEMENT_ARRAY_APPLE = 34664 # GL/glext.h:2821 +GL_ELEMENT_ARRAY_TYPE_APPLE = 34665 # GL/glext.h:2822 +GL_ELEMENT_ARRAY_POINTER_APPLE = 34666 # GL/glext.h:2823 +# APPLE_fence (GL/glext.h:2826) +GL_DRAW_PIXELS_APPLE = 35338 # GL/glext.h:2827 +GL_FENCE_APPLE = 35339 # GL/glext.h:2828 +# APPLE_vertex_array_object (GL/glext.h:2831) +GL_VERTEX_ARRAY_BINDING_APPLE = 34229 # GL/glext.h:2832 +# APPLE_vertex_array_range (GL/glext.h:2835) +GL_VERTEX_ARRAY_RANGE_APPLE = 34077 # GL/glext.h:2836 +GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE = 34078 # GL/glext.h:2837 +GL_VERTEX_ARRAY_STORAGE_HINT_APPLE = 34079 # GL/glext.h:2838 +GL_VERTEX_ARRAY_RANGE_POINTER_APPLE = 34081 # GL/glext.h:2839 +GL_STORAGE_CACHED_APPLE = 34238 # GL/glext.h:2840 +GL_STORAGE_SHARED_APPLE = 34239 # GL/glext.h:2841 +# APPLE_ycbcr_422 (GL/glext.h:2844) +GL_YCBCR_422_APPLE = 34233 # GL/glext.h:2845 +GL_UNSIGNED_SHORT_8_8_APPLE = 34234 # GL/glext.h:2846 +GL_UNSIGNED_SHORT_8_8_REV_APPLE = 34235 # GL/glext.h:2847 +# S3_s3tc (GL/glext.h:2850) +GL_RGB_S3TC = 33696 # GL/glext.h:2851 +GL_RGB4_S3TC = 33697 # GL/glext.h:2852 +GL_RGBA_S3TC = 33698 # GL/glext.h:2853 +GL_RGBA4_S3TC = 33699 # GL/glext.h:2854 +# ATI_draw_buffers (GL/glext.h:2857) +GL_MAX_DRAW_BUFFERS_ATI = 34852 # GL/glext.h:2858 +GL_DRAW_BUFFER0_ATI = 34853 # GL/glext.h:2859 +GL_DRAW_BUFFER1_ATI = 34854 # GL/glext.h:2860 +GL_DRAW_BUFFER2_ATI = 34855 # GL/glext.h:2861 +GL_DRAW_BUFFER3_ATI = 34856 # GL/glext.h:2862 +GL_DRAW_BUFFER4_ATI = 34857 # GL/glext.h:2863 +GL_DRAW_BUFFER5_ATI = 34858 # GL/glext.h:2864 +GL_DRAW_BUFFER6_ATI = 34859 # GL/glext.h:2865 +GL_DRAW_BUFFER7_ATI = 34860 # GL/glext.h:2866 +GL_DRAW_BUFFER8_ATI = 34861 # GL/glext.h:2867 +GL_DRAW_BUFFER9_ATI = 34862 # GL/glext.h:2868 +GL_DRAW_BUFFER10_ATI = 34863 # GL/glext.h:2869 +GL_DRAW_BUFFER11_ATI = 34864 # GL/glext.h:2870 +GL_DRAW_BUFFER12_ATI = 34865 # GL/glext.h:2871 +GL_DRAW_BUFFER13_ATI = 34866 # GL/glext.h:2872 +GL_DRAW_BUFFER14_ATI = 34867 # GL/glext.h:2873 +GL_DRAW_BUFFER15_ATI = 34868 # GL/glext.h:2874 +# ATI_pixel_format_float (GL/glext.h:2877) +GL_TYPE_RGBA_FLOAT_ATI = 34848 # GL/glext.h:2878 +GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI = 34869 # GL/glext.h:2879 +# ATI_texture_env_combine3 (GL/glext.h:2882) +GL_MODULATE_ADD_ATI = 34628 # GL/glext.h:2883 +GL_MODULATE_SIGNED_ADD_ATI = 34629 # GL/glext.h:2884 +GL_MODULATE_SUBTRACT_ATI = 34630 # GL/glext.h:2885 +# ATI_texture_float (GL/glext.h:2888) +GL_RGBA_FLOAT32_ATI = 34836 # GL/glext.h:2889 +GL_RGB_FLOAT32_ATI = 34837 # GL/glext.h:2890 +GL_ALPHA_FLOAT32_ATI = 34838 # GL/glext.h:2891 +GL_INTENSITY_FLOAT32_ATI = 34839 # GL/glext.h:2892 +GL_LUMINANCE_FLOAT32_ATI = 34840 # GL/glext.h:2893 +GL_LUMINANCE_ALPHA_FLOAT32_ATI = 34841 # GL/glext.h:2894 +GL_RGBA_FLOAT16_ATI = 34842 # GL/glext.h:2895 +GL_RGB_FLOAT16_ATI = 34843 # GL/glext.h:2896 +GL_ALPHA_FLOAT16_ATI = 34844 # GL/glext.h:2897 +GL_INTENSITY_FLOAT16_ATI = 34845 # GL/glext.h:2898 +GL_LUMINANCE_FLOAT16_ATI = 34846 # GL/glext.h:2899 +GL_LUMINANCE_ALPHA_FLOAT16_ATI = 34847 # GL/glext.h:2900 +# NV_float_buffer (GL/glext.h:2903) +GL_FLOAT_R_NV = 34944 # GL/glext.h:2904 +GL_FLOAT_RG_NV = 34945 # GL/glext.h:2905 +GL_FLOAT_RGB_NV = 34946 # GL/glext.h:2906 +GL_FLOAT_RGBA_NV = 34947 # GL/glext.h:2907 +GL_FLOAT_R16_NV = 34948 # GL/glext.h:2908 +GL_FLOAT_R32_NV = 34949 # GL/glext.h:2909 +GL_FLOAT_RG16_NV = 34950 # GL/glext.h:2910 +GL_FLOAT_RG32_NV = 34951 # GL/glext.h:2911 +GL_FLOAT_RGB16_NV = 34952 # GL/glext.h:2912 +GL_FLOAT_RGB32_NV = 34953 # GL/glext.h:2913 +GL_FLOAT_RGBA16_NV = 34954 # GL/glext.h:2914 +GL_FLOAT_RGBA32_NV = 34955 # GL/glext.h:2915 +GL_TEXTURE_FLOAT_COMPONENTS_NV = 34956 # GL/glext.h:2916 +GL_FLOAT_CLEAR_COLOR_VALUE_NV = 34957 # GL/glext.h:2917 +GL_FLOAT_RGBA_MODE_NV = 34958 # GL/glext.h:2918 +# NV_fragment_program (GL/glext.h:2921) +GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV = 34920 # GL/glext.h:2922 +GL_FRAGMENT_PROGRAM_NV = 34928 # GL/glext.h:2923 +GL_MAX_TEXTURE_COORDS_NV = 34929 # GL/glext.h:2924 +GL_MAX_TEXTURE_IMAGE_UNITS_NV = 34930 # GL/glext.h:2925 +GL_FRAGMENT_PROGRAM_BINDING_NV = 34931 # GL/glext.h:2926 +GL_PROGRAM_ERROR_STRING_NV = 34932 # GL/glext.h:2927 +# NV_half_float (GL/glext.h:2930) +GL_HALF_FLOAT_NV = 5131 # GL/glext.h:2931 +# NV_pixel_data_range (GL/glext.h:2934) +GL_WRITE_PIXEL_DATA_RANGE_NV = 34936 # GL/glext.h:2935 +GL_READ_PIXEL_DATA_RANGE_NV = 34937 # GL/glext.h:2936 +GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV = 34938 # GL/glext.h:2937 +GL_READ_PIXEL_DATA_RANGE_LENGTH_NV = 34939 # GL/glext.h:2938 +GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV = 34940 # GL/glext.h:2939 +GL_READ_PIXEL_DATA_RANGE_POINTER_NV = 34941 # GL/glext.h:2940 +# NV_primitive_restart (GL/glext.h:2943) +GL_PRIMITIVE_RESTART_NV = 34136 # GL/glext.h:2944 +GL_PRIMITIVE_RESTART_INDEX_NV = 34137 # GL/glext.h:2945 +# NV_texture_expand_normal (GL/glext.h:2948) +GL_TEXTURE_UNSIGNED_REMAP_MODE_NV = 34959 # GL/glext.h:2949 +# NV_vertex_program2 (GL/glext.h:2952) +# ATI_map_object_buffer (GL/glext.h:2955) +# ATI_separate_stencil (GL/glext.h:2958) +GL_STENCIL_BACK_FUNC_ATI = 34816 # GL/glext.h:2959 +GL_STENCIL_BACK_FAIL_ATI = 34817 # GL/glext.h:2960 +GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI = 34818 # GL/glext.h:2961 +GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI = 34819 # GL/glext.h:2962 +# ATI_vertex_attrib_array_object (GL/glext.h:2965) +# OES_read_format (GL/glext.h:2968) +GL_IMPLEMENTATION_COLOR_READ_TYPE_OES = 35738 # GL/glext.h:2969 +GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES = 35739 # GL/glext.h:2970 +# EXT_depth_bounds_test (GL/glext.h:2973) +GL_DEPTH_BOUNDS_TEST_EXT = 34960 # GL/glext.h:2974 +GL_DEPTH_BOUNDS_EXT = 34961 # GL/glext.h:2975 +# EXT_texture_mirror_clamp (GL/glext.h:2978) +GL_MIRROR_CLAMP_EXT = 34626 # GL/glext.h:2979 +GL_MIRROR_CLAMP_TO_EDGE_EXT = 34627 # GL/glext.h:2980 +GL_MIRROR_CLAMP_TO_BORDER_EXT = 35090 # GL/glext.h:2981 +# EXT_blend_equation_separate (GL/glext.h:2984) +GL_BLEND_EQUATION_RGB_EXT = 32777 # GL/glext.h:2985 +GL_BLEND_EQUATION_ALPHA_EXT = 34877 # GL/glext.h:2986 +# MESA_pack_invert (GL/glext.h:2989) +GL_PACK_INVERT_MESA = 34648 # GL/glext.h:2990 +# MESA_ycbcr_texture (GL/glext.h:2993) +GL_UNSIGNED_SHORT_8_8_MESA = 34234 # GL/glext.h:2994 +GL_UNSIGNED_SHORT_8_8_REV_MESA = 34235 # GL/glext.h:2995 +GL_YCBCR_MESA = 34647 # GL/glext.h:2996 +# EXT_pixel_buffer_object (GL/glext.h:2999) +GL_PIXEL_PACK_BUFFER_EXT = 35051 # GL/glext.h:3000 +GL_PIXEL_UNPACK_BUFFER_EXT = 35052 # GL/glext.h:3001 +GL_PIXEL_PACK_BUFFER_BINDING_EXT = 35053 # GL/glext.h:3002 +GL_PIXEL_UNPACK_BUFFER_BINDING_EXT = 35055 # GL/glext.h:3003 +# NV_fragment_program_option (GL/glext.h:3006) +# NV_fragment_program2 (GL/glext.h:3009) +GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV = 35060 # GL/glext.h:3010 +GL_MAX_PROGRAM_CALL_DEPTH_NV = 35061 # GL/glext.h:3011 +GL_MAX_PROGRAM_IF_DEPTH_NV = 35062 # GL/glext.h:3012 +GL_MAX_PROGRAM_LOOP_DEPTH_NV = 35063 # GL/glext.h:3013 +GL_MAX_PROGRAM_LOOP_COUNT_NV = 35064 # GL/glext.h:3014 +# NV_vertex_program2_option (GL/glext.h:3017) +# NV_vertex_program3 (GL/glext.h:3022) +# EXT_framebuffer_object (GL/glext.h:3026) +GL_INVALID_FRAMEBUFFER_OPERATION_EXT = 1286 # GL/glext.h:3027 +GL_MAX_RENDERBUFFER_SIZE_EXT = 34024 # GL/glext.h:3028 +GL_FRAMEBUFFER_BINDING_EXT = 36006 # GL/glext.h:3029 +GL_RENDERBUFFER_BINDING_EXT = 36007 # GL/glext.h:3030 +GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT = 36048 # GL/glext.h:3031 +GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT = 36049 # GL/glext.h:3032 +GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT = 36050 # GL/glext.h:3033 +GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT = 36051 # GL/glext.h:3034 +GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT = 36052 # GL/glext.h:3035 +GL_FRAMEBUFFER_COMPLETE_EXT = 36053 # GL/glext.h:3036 +GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT = 36054 # GL/glext.h:3037 +GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT = 36055 # GL/glext.h:3038 +GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT = 36056 # GL/glext.h:3039 +GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT = 36057 # GL/glext.h:3040 +GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT = 36058 # GL/glext.h:3041 +GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT = 36059 # GL/glext.h:3042 +GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT = 36060 # GL/glext.h:3043 +GL_FRAMEBUFFER_UNSUPPORTED_EXT = 36061 # GL/glext.h:3044 +GL_MAX_COLOR_ATTACHMENTS_EXT = 36063 # GL/glext.h:3045 +GL_COLOR_ATTACHMENT0_EXT = 36064 # GL/glext.h:3046 +GL_COLOR_ATTACHMENT1_EXT = 36065 # GL/glext.h:3047 +GL_COLOR_ATTACHMENT2_EXT = 36066 # GL/glext.h:3048 +GL_COLOR_ATTACHMENT3_EXT = 36067 # GL/glext.h:3049 +GL_COLOR_ATTACHMENT4_EXT = 36068 # GL/glext.h:3050 +GL_COLOR_ATTACHMENT5_EXT = 36069 # GL/glext.h:3051 +GL_COLOR_ATTACHMENT6_EXT = 36070 # GL/glext.h:3052 +GL_COLOR_ATTACHMENT7_EXT = 36071 # GL/glext.h:3053 +GL_COLOR_ATTACHMENT8_EXT = 36072 # GL/glext.h:3054 +GL_COLOR_ATTACHMENT9_EXT = 36073 # GL/glext.h:3055 +GL_COLOR_ATTACHMENT10_EXT = 36074 # GL/glext.h:3056 +GL_COLOR_ATTACHMENT11_EXT = 36075 # GL/glext.h:3057 +GL_COLOR_ATTACHMENT12_EXT = 36076 # GL/glext.h:3058 +GL_COLOR_ATTACHMENT13_EXT = 36077 # GL/glext.h:3059 +GL_COLOR_ATTACHMENT14_EXT = 36078 # GL/glext.h:3060 +GL_COLOR_ATTACHMENT15_EXT = 36079 # GL/glext.h:3061 +GL_DEPTH_ATTACHMENT_EXT = 36096 # GL/glext.h:3062 +GL_STENCIL_ATTACHMENT_EXT = 36128 # GL/glext.h:3063 +GL_FRAMEBUFFER_EXT = 36160 # GL/glext.h:3064 +GL_RENDERBUFFER_EXT = 36161 # GL/glext.h:3065 +GL_RENDERBUFFER_WIDTH_EXT = 36162 # GL/glext.h:3066 +GL_RENDERBUFFER_HEIGHT_EXT = 36163 # GL/glext.h:3067 +GL_RENDERBUFFER_INTERNAL_FORMAT_EXT = 36164 # GL/glext.h:3068 +GL_STENCIL_INDEX_EXT = 36165 # GL/glext.h:3069 +GL_STENCIL_INDEX1_EXT = 36166 # GL/glext.h:3070 +GL_STENCIL_INDEX4_EXT = 36167 # GL/glext.h:3071 +GL_STENCIL_INDEX8_EXT = 36168 # GL/glext.h:3072 +GL_STENCIL_INDEX16_EXT = 36169 # GL/glext.h:3073 +GL_RENDERBUFFER_RED_SIZE_EXT = 36176 # GL/glext.h:3074 +GL_RENDERBUFFER_GREEN_SIZE_EXT = 36177 # GL/glext.h:3075 +GL_RENDERBUFFER_BLUE_SIZE_EXT = 36178 # GL/glext.h:3076 +GL_RENDERBUFFER_ALPHA_SIZE_EXT = 36179 # GL/glext.h:3077 +GL_RENDERBUFFER_DEPTH_SIZE_EXT = 36180 # GL/glext.h:3078 +GL_RENDERBUFFER_STENCIL_SIZE_EXT = 36181 # GL/glext.h:3079 +# GREMEDY_string_marker (GL/glext.h:3082) +# EXT_Cg_shader (GL/glext.h:3085) +GL_CG_VERTEX_SHADER_EXT = 35086 # GL/glext.h:3086 +GL_CG_FRAGMENT_SHADER_EXT = 35087 # GL/glext.h:3087 +# EXT_timer_query (GL/glext.h:3090) +GL_TIME_ELAPSED_EXT = 35007 # GL/glext.h:3091 +# EXT_texture_buffer_object (GL/glext.h:3094) +GL_TEXTURE_BUFFER_EXT = 35882 # GL/glext.h:3095 +GL_MAX_TEXTURE_BUFFER_SIZE_EXT = 35883 # GL/glext.h:3096 +GL_TEXTURE_BINDING_BUFFER_EXT = 35884 # GL/glext.h:3097 +GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT = 35885 # GL/glext.h:3098 +GL_TEXTURE_BUFFER_FORMAT_EXT = 35886 # GL/glext.h:3099 +# EXT_gpu_shader4 (GL/glext.h:3102) +GL_SAMPLER_1D_ARRAY_EXT = 36288 # GL/glext.h:3103 +GL_SAMPLER_2D_ARRAY_EXT = 36289 # GL/glext.h:3104 +GL_SAMPLER_BUFFER_EXT = 36290 # GL/glext.h:3105 +GL_SAMPLER_1D_ARRAY_SHADOW_EXT = 36291 # GL/glext.h:3106 +GL_SAMPLER_2D_ARRAY_SHADOW_EXT = 36292 # GL/glext.h:3107 +GL_SAMPLER_CUBE_SHADOW_EXT = 36293 # GL/glext.h:3108 +GL_UNSIGNED_INT_VEC2_EXT = 36294 # GL/glext.h:3109 +GL_UNSIGNED_INT_VEC3_EXT = 36295 # GL/glext.h:3110 +GL_UNSIGNED_INT_VEC4_EXT = 36296 # GL/glext.h:3111 +GL_INT_SAMPLER_1D_EXT = 36297 # GL/glext.h:3112 +GL_INT_SAMPLER_2D_EXT = 36298 # GL/glext.h:3113 +GL_INT_SAMPLER_3D_EXT = 36299 # GL/glext.h:3114 +GL_INT_SAMPLER_CUBE_EXT = 36300 # GL/glext.h:3115 +GL_INT_SAMPLER_2D_RECT_EXT = 36301 # GL/glext.h:3116 +GL_INT_SAMPLER_1D_ARRAY_EXT = 36302 # GL/glext.h:3117 +GL_INT_SAMPLER_2D_ARRAY_EXT = 36303 # GL/glext.h:3118 +GL_INT_SAMPLER_BUFFER_EXT = 36304 # GL/glext.h:3119 +GL_UNSIGNED_INT_SAMPLER_1D_EXT = 36305 # GL/glext.h:3120 +GL_UNSIGNED_INT_SAMPLER_2D_EXT = 36306 # GL/glext.h:3121 +GL_UNSIGNED_INT_SAMPLER_3D_EXT = 36307 # GL/glext.h:3122 +GL_UNSIGNED_INT_SAMPLER_CUBE_EXT = 36308 # GL/glext.h:3123 +GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT = 36309 # GL/glext.h:3124 +GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT = 36310 # GL/glext.h:3125 +GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT = 36311 # GL/glext.h:3126 +GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT = 36312 # GL/glext.h:3127 +GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT = 35069 # GL/glext.h:3128 +# EXT_geometry_shader4 (GL/glext.h:3131) +GL_GEOMETRY_SHADER_EXT = 36313 # GL/glext.h:3132 +GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT = 36317 # GL/glext.h:3133 +GL_MAX_VERTEX_VARYING_COMPONENTS_EXT = 36318 # GL/glext.h:3134 +GL_MAX_VARYING_COMPONENTS_EXT = 35659 # GL/glext.h:3135 +GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT = 36319 # GL/glext.h:3136 +GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT = 36320 # GL/glext.h:3137 +GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT = 36321 # GL/glext.h:3138 +GL_GEOMETRY_VERTICES_OUT_EXT = 36314 # GL/glext.h:3139 +GL_GEOMETRY_INPUT_TYPE_EXT = 36315 # GL/glext.h:3140 +GL_GEOMETRY_OUTPUT_TYPE_EXT = 36316 # GL/glext.h:3141 +GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT = 35881 # GL/glext.h:3142 +GL_LINES_ADJACENCY_EXT = 10 # GL/glext.h:3143 +GL_LINE_STRIP_ADJACENCY_EXT = 11 # GL/glext.h:3144 +GL_TRIANGLES_ADJACENCY_EXT = 12 # GL/glext.h:3145 +GL_TRIANGLE_STRIP_ADJACENCY_EXT = 13 # GL/glext.h:3146 +GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT = 36263 # GL/glext.h:3147 +GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT = 36264 # GL/glext.h:3148 +GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT = 36265 # GL/glext.h:3149 +GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT = 36052 # GL/glext.h:3150 +GL_PROGRAM_POINT_SIZE_EXT = 34370 # GL/glext.h:3151 +# EXT_bindable_uniform (GL/glext.h:3154) +GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT = 36322 # GL/glext.h:3155 +GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT = 36323 # GL/glext.h:3156 +GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT = 36324 # GL/glext.h:3157 +GL_MAX_BINDABLE_UNIFORM_SIZE_EXT = 36333 # GL/glext.h:3158 +GL_UNIFORM_BUFFER_EXT = 36334 # GL/glext.h:3159 +GL_UNIFORM_BUFFER_BINDING_EXT = 36335 # GL/glext.h:3160 +# EXT_framebuffer_sRGB (GL/glext.h:3163) +GL_FRAMEBUFFER_SRGB_EXT = 36281 # GL/glext.h:3164 +GL_FRAMEBUFFER_SRGB_CAPABLE_EXT = 36282 # GL/glext.h:3165 +# EXT_texture_shared_exponent (GL/glext.h:3168) +GL_RGB9_E5_EXT = 35901 # GL/glext.h:3169 +GL_UNSIGNED_INT_5_9_9_9_REV_EXT = 35902 # GL/glext.h:3170 +GL_TEXTURE_SHARED_SIZE_EXT = 35903 # GL/glext.h:3171 +# EXT_packed_float (GL/glext.h:3174) +GL_R11F_G11F_B10F_EXT = 35898 # GL/glext.h:3175 +GL_UNSIGNED_INT_10F_11F_11F_REV_EXT = 35899 # GL/glext.h:3176 +GL_RGBA_SIGNED_COMPONENTS_EXT = 35900 # GL/glext.h:3177 +# EXT_texture_array (GL/glext.h:3180) +GL_TEXTURE_1D_ARRAY_EXT = 35864 # GL/glext.h:3181 +GL_PROXY_TEXTURE_1D_ARRAY_EXT = 35865 # GL/glext.h:3182 +GL_TEXTURE_2D_ARRAY_EXT = 35866 # GL/glext.h:3183 +GL_PROXY_TEXTURE_2D_ARRAY_EXT = 35867 # GL/glext.h:3184 +GL_TEXTURE_BINDING_1D_ARRAY_EXT = 35868 # GL/glext.h:3185 +GL_TEXTURE_BINDING_2D_ARRAY_EXT = 35869 # GL/glext.h:3186 +GL_MAX_ARRAY_TEXTURE_LAYERS_EXT = 35071 # GL/glext.h:3187 +GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT = 34894 # GL/glext.h:3188 +# EXT_texture_integer (GL/glext.h:3192) +GL_RGBA32UI_EXT = 36208 # GL/glext.h:3193 +GL_RGB32UI_EXT = 36209 # GL/glext.h:3194 +GL_ALPHA32UI_EXT = 36210 # GL/glext.h:3195 +GL_INTENSITY32UI_EXT = 36211 # GL/glext.h:3196 +GL_LUMINANCE32UI_EXT = 36212 # GL/glext.h:3197 +GL_LUMINANCE_ALPHA32UI_EXT = 36213 # GL/glext.h:3198 +GL_RGBA16UI_EXT = 36214 # GL/glext.h:3199 +GL_RGB16UI_EXT = 36215 # GL/glext.h:3200 +GL_ALPHA16UI_EXT = 36216 # GL/glext.h:3201 +GL_INTENSITY16UI_EXT = 36217 # GL/glext.h:3202 +GL_LUMINANCE16UI_EXT = 36218 # GL/glext.h:3203 +GL_LUMINANCE_ALPHA16UI_EXT = 36219 # GL/glext.h:3204 +GL_RGBA8UI_EXT = 36220 # GL/glext.h:3205 +GL_RGB8UI_EXT = 36221 # GL/glext.h:3206 +GL_ALPHA8UI_EXT = 36222 # GL/glext.h:3207 +GL_INTENSITY8UI_EXT = 36223 # GL/glext.h:3208 +GL_LUMINANCE8UI_EXT = 36224 # GL/glext.h:3209 +GL_LUMINANCE_ALPHA8UI_EXT = 36225 # GL/glext.h:3210 +GL_RGBA32I_EXT = 36226 # GL/glext.h:3211 +GL_RGB32I_EXT = 36227 # GL/glext.h:3212 +GL_ALPHA32I_EXT = 36228 # GL/glext.h:3213 +GL_INTENSITY32I_EXT = 36229 # GL/glext.h:3214 +GL_LUMINANCE32I_EXT = 36230 # GL/glext.h:3215 +GL_LUMINANCE_ALPHA32I_EXT = 36231 # GL/glext.h:3216 +GL_RGBA16I_EXT = 36232 # GL/glext.h:3217 +GL_RGB16I_EXT = 36233 # GL/glext.h:3218 +GL_ALPHA16I_EXT = 36234 # GL/glext.h:3219 +GL_INTENSITY16I_EXT = 36235 # GL/glext.h:3220 +GL_LUMINANCE16I_EXT = 36236 # GL/glext.h:3221 +GL_LUMINANCE_ALPHA16I_EXT = 36237 # GL/glext.h:3222 +GL_RGBA8I_EXT = 36238 # GL/glext.h:3223 +GL_RGB8I_EXT = 36239 # GL/glext.h:3224 +GL_ALPHA8I_EXT = 36240 # GL/glext.h:3225 +GL_INTENSITY8I_EXT = 36241 # GL/glext.h:3226 +GL_LUMINANCE8I_EXT = 36242 # GL/glext.h:3227 +GL_LUMINANCE_ALPHA8I_EXT = 36243 # GL/glext.h:3228 +GL_RED_INTEGER_EXT = 36244 # GL/glext.h:3229 +GL_GREEN_INTEGER_EXT = 36245 # GL/glext.h:3230 +GL_BLUE_INTEGER_EXT = 36246 # GL/glext.h:3231 +GL_ALPHA_INTEGER_EXT = 36247 # GL/glext.h:3232 +GL_RGB_INTEGER_EXT = 36248 # GL/glext.h:3233 +GL_RGBA_INTEGER_EXT = 36249 # GL/glext.h:3234 +GL_BGR_INTEGER_EXT = 36250 # GL/glext.h:3235 +GL_BGRA_INTEGER_EXT = 36251 # GL/glext.h:3236 +GL_LUMINANCE_INTEGER_EXT = 36252 # GL/glext.h:3237 +GL_LUMINANCE_ALPHA_INTEGER_EXT = 36253 # GL/glext.h:3238 +GL_RGBA_INTEGER_MODE_EXT = 36254 # GL/glext.h:3239 +# NV_depth_buffer_float (GL/glext.h:3242) +GL_DEPTH_COMPONENT32F_NV = 36267 # GL/glext.h:3243 +GL_DEPTH32F_STENCIL8_NV = 36268 # GL/glext.h:3244 +GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV = 36269 # GL/glext.h:3245 +GL_DEPTH_BUFFER_FLOAT_MODE_NV = 36271 # GL/glext.h:3246 +# EXT_texture_compression_latc (GL/glext.h:3249) +GL_COMPRESSED_LUMINANCE_LATC1_EXT = 35952 # GL/glext.h:3250 +GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT = 35953 # GL/glext.h:3251 +GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT = 35954 # GL/glext.h:3252 +GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT = 35955 # GL/glext.h:3253 +# NV_transform_feedback (GL/glext.h:3256) +GL_BACK_PRIMARY_COLOR_NV = 35959 # GL/glext.h:3257 +GL_BACK_SECONDARY_COLOR_NV = 35960 # GL/glext.h:3258 +GL_TEXTURE_COORD_NV = 35961 # GL/glext.h:3259 +GL_CLIP_DISTANCE_NV = 35962 # GL/glext.h:3260 +GL_VERTEX_ID_NV = 35963 # GL/glext.h:3261 +GL_PRIMITIVE_ID_NV = 35964 # GL/glext.h:3262 +GL_GENERIC_ATTRIB_NV = 35965 # GL/glext.h:3263 +GL_TRANSFORM_FEEDBACK_ATTRIBS_NV = 35966 # GL/glext.h:3264 +GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV = 35967 # GL/glext.h:3265 +GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV = 35968 # GL/glext.h:3266 +GL_ACTIVE_VARYINGS_NV = 35969 # GL/glext.h:3267 +GL_ACTIVE_VARYING_MAX_LENGTH_NV = 35970 # GL/glext.h:3268 +GL_TRANSFORM_FEEDBACK_VARYINGS_NV = 35971 # GL/glext.h:3269 +GL_TRANSFORM_FEEDBACK_BUFFER_START_NV = 35972 # GL/glext.h:3270 +GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV = 35973 # GL/glext.h:3271 +GL_TRANSFORM_FEEDBACK_RECORD_NV = 35974 # GL/glext.h:3272 +GL_PRIMITIVES_GENERATED_NV = 35975 # GL/glext.h:3273 +GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV = 35976 # GL/glext.h:3274 +GL_RASTERIZER_DISCARD_NV = 35977 # GL/glext.h:3275 +GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_ATTRIBS_NV = 35978 # GL/glext.h:3276 +GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV = 35979 # GL/glext.h:3277 +GL_INTERLEAVED_ATTRIBS_NV = 35980 # GL/glext.h:3278 +GL_SEPARATE_ATTRIBS_NV = 35981 # GL/glext.h:3279 +GL_TRANSFORM_FEEDBACK_BUFFER_NV = 35982 # GL/glext.h:3280 +GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV = 35983 # GL/glext.h:3281 +# NV_geometry_program4 (GL/glext.h:3284) +GL_GEOMETRY_PROGRAM_NV = 35878 # GL/glext.h:3285 +GL_MAX_PROGRAM_OUTPUT_VERTICES_NV = 35879 # GL/glext.h:3286 +GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV = 35880 # GL/glext.h:3287 +# NV_gpu_program4 (GL/glext.h:3290) +GL_MIN_PROGRAM_TEXEL_OFFSET_NV = 35076 # GL/glext.h:3291 +GL_MAX_PROGRAM_TEXEL_OFFSET_NV = 35077 # GL/glext.h:3292 +GL_PROGRAM_ATTRIB_COMPONENTS_NV = 35078 # GL/glext.h:3293 +GL_PROGRAM_RESULT_COMPONENTS_NV = 35079 # GL/glext.h:3294 +GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV = 35080 # GL/glext.h:3295 +GL_MAX_PROGRAM_RESULT_COMPONENTS_NV = 35081 # GL/glext.h:3296 +GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV = 36261 # GL/glext.h:3297 +GL_MAX_PROGRAM_GENERIC_RESULTS_NV = 36262 # GL/glext.h:3298 +# NV_framebuffer_multisample_coverage (GL/glext.h:3301) +GL_RENDERBUFFER_COVERAGE_SAMPLES_NV = 36011 # GL/glext.h:3302 +GL_RENDERBUFFER_COLOR_SAMPLES_NV = 36368 # GL/glext.h:3303 +GL_MAX_RENDERBUFFER_COVERAGE_SAMPLES_NV = 36183 # GL/glext.h:3304 +GL_MAX_RENDERBUFFER_COLOR_SAMPLES_NV = 36369 # GL/glext.h:3305 +GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV = 36370 # GL/glext.h:3306 +GL_MULTISAMPLE_COVERAGE_MODES_NV = 36371 # GL/glext.h:3307 +# EXT_framebuffer_multisample (GL/glext.h:3310) +GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT = 36182 # GL/glext.h:3311 +GL_MAX_SAMPLES_EXT = 36183 # GL/glext.h:3312 +GL_RENDERBUFFER_SAMPLES_EXT = 36011 # GL/glext.h:3313 +# EXT_framebuffer_blit (GL/glext.h:3316) +GL_READ_FRAMEBUFFER_EXT = 36008 # GL/glext.h:3317 +GL_DRAW_FRAMEBUFFER_EXT = 36009 # GL/glext.h:3318 +GL_DRAW_FRAMEBUFFER_BINDING_EXT = 36006 # GL/glext.h:3319 +GL_READ_FRAMEBUFFER_BINDING_EXT = 36010 # GL/glext.h:3320 +# EXT_texture_compression_rgtc (GL/glext.h:3323) +GL_COMPRESSED_RED_RGTC1_EXT = 36283 # GL/glext.h:3324 +GL_COMPRESSED_SIGNED_RED_RGTC1_EXT = 36284 # GL/glext.h:3325 +GL_COMPRESSED_RED_GREEN_RGTC2_EXT = 36285 # GL/glext.h:3326 +GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT = 36286 # GL/glext.h:3327 +# VERSION_2_0 (GL/glext.h:3333) +GLchar = c_char # GL/glext.h:3335 +# VERSION_1_5 (GL/glext.h:3338) +GLintptr = c_ptrdiff_t # GL/glext.h:3340 +GLsizeiptr = c_ptrdiff_t # GL/glext.h:3341 +# ARB_vertex_buffer_object (GL/glext.h:3344) +GLintptrARB = c_ptrdiff_t # GL/glext.h:3346 +GLsizeiptrARB = c_ptrdiff_t # GL/glext.h:3347 +# ARB_shader_objects (GL/glext.h:3350) +GLcharARB = c_char # GL/glext.h:3352 +GLhandleARB = c_uint # GL/glext.h:3353 +# ARB_half_float_pixel (GL/glext.h:3357) +GLhalfARB = c_ushort # GL/glext.h:3358 +# NV_half_float (GL/glext.h:3361) +GLhalfNV = c_ushort # GL/glext.h:3362 +# EXT_timer_query (GL/glext.h:3365) +GLint64EXT = c_longlong # GL/glext.h:3366 +GLuint64EXT = c_ulonglong # GL/glext.h:3367 +# VERSION_1_2 (GL/glext.h:3370) +GL_VERSION_1_2 = 1 # GL/glext.h:3371 +GLclampf = c_float # /usr/include/GL/gl.h:64 +# GL/glext.h:3373 +glBlendColor = _link_function('glBlendColor', None, [GLclampf, GLclampf, GLclampf, GLclampf], 'VERSION_1_2') + +GLenum = c_uint # /usr/include/GL/gl.h:53 +# GL/glext.h:3374 +glBlendEquation = _link_function('glBlendEquation', None, [GLenum], 'VERSION_1_2') + +GLuint = c_uint # /usr/include/GL/gl.h:62 +GLsizei = c_int # /usr/include/GL/gl.h:59 +GLvoid = None # /usr/include/GL/gl.h:67 +# GL/glext.h:3375 +glDrawRangeElements = _link_function('glDrawRangeElements', None, [GLenum, GLuint, GLuint, GLsizei, GLenum, POINTER(GLvoid)], 'VERSION_1_2') + +# GL/glext.h:3376 +glColorTable = _link_function('glColorTable', None, [GLenum, GLenum, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'VERSION_1_2') + +GLfloat = c_float # /usr/include/GL/gl.h:63 +# GL/glext.h:3377 +glColorTableParameterfv = _link_function('glColorTableParameterfv', None, [GLenum, GLenum, POINTER(GLfloat)], 'VERSION_1_2') + +GLint = c_int # /usr/include/GL/gl.h:58 +# GL/glext.h:3378 +glColorTableParameteriv = _link_function('glColorTableParameteriv', None, [GLenum, GLenum, POINTER(GLint)], 'VERSION_1_2') + +# GL/glext.h:3379 +glCopyColorTable = _link_function('glCopyColorTable', None, [GLenum, GLenum, GLint, GLint, GLsizei], 'VERSION_1_2') + +# GL/glext.h:3380 +glGetColorTable = _link_function('glGetColorTable', None, [GLenum, GLenum, GLenum, POINTER(GLvoid)], 'VERSION_1_2') + +# GL/glext.h:3381 +glGetColorTableParameterfv = _link_function('glGetColorTableParameterfv', None, [GLenum, GLenum, POINTER(GLfloat)], 'VERSION_1_2') + +# GL/glext.h:3382 +glGetColorTableParameteriv = _link_function('glGetColorTableParameteriv', None, [GLenum, GLenum, POINTER(GLint)], 'VERSION_1_2') + +# GL/glext.h:3383 +glColorSubTable = _link_function('glColorSubTable', None, [GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'VERSION_1_2') + +# GL/glext.h:3384 +glCopyColorSubTable = _link_function('glCopyColorSubTable', None, [GLenum, GLsizei, GLint, GLint, GLsizei], 'VERSION_1_2') + +# GL/glext.h:3385 +glConvolutionFilter1D = _link_function('glConvolutionFilter1D', None, [GLenum, GLenum, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'VERSION_1_2') + +# GL/glext.h:3386 +glConvolutionFilter2D = _link_function('glConvolutionFilter2D', None, [GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'VERSION_1_2') + +# GL/glext.h:3387 +glConvolutionParameterf = _link_function('glConvolutionParameterf', None, [GLenum, GLenum, GLfloat], 'VERSION_1_2') + +# GL/glext.h:3388 +glConvolutionParameterfv = _link_function('glConvolutionParameterfv', None, [GLenum, GLenum, POINTER(GLfloat)], 'VERSION_1_2') + +# GL/glext.h:3389 +glConvolutionParameteri = _link_function('glConvolutionParameteri', None, [GLenum, GLenum, GLint], 'VERSION_1_2') + +# GL/glext.h:3390 +glConvolutionParameteriv = _link_function('glConvolutionParameteriv', None, [GLenum, GLenum, POINTER(GLint)], 'VERSION_1_2') + +# GL/glext.h:3391 +glCopyConvolutionFilter1D = _link_function('glCopyConvolutionFilter1D', None, [GLenum, GLenum, GLint, GLint, GLsizei], 'VERSION_1_2') + +# GL/glext.h:3392 +glCopyConvolutionFilter2D = _link_function('glCopyConvolutionFilter2D', None, [GLenum, GLenum, GLint, GLint, GLsizei, GLsizei], 'VERSION_1_2') + +# GL/glext.h:3393 +glGetConvolutionFilter = _link_function('glGetConvolutionFilter', None, [GLenum, GLenum, GLenum, POINTER(GLvoid)], 'VERSION_1_2') + +# GL/glext.h:3394 +glGetConvolutionParameterfv = _link_function('glGetConvolutionParameterfv', None, [GLenum, GLenum, POINTER(GLfloat)], 'VERSION_1_2') + +# GL/glext.h:3395 +glGetConvolutionParameteriv = _link_function('glGetConvolutionParameteriv', None, [GLenum, GLenum, POINTER(GLint)], 'VERSION_1_2') + +# GL/glext.h:3396 +glGetSeparableFilter = _link_function('glGetSeparableFilter', None, [GLenum, GLenum, GLenum, POINTER(GLvoid), POINTER(GLvoid), POINTER(GLvoid)], 'VERSION_1_2') + +# GL/glext.h:3397 +glSeparableFilter2D = _link_function('glSeparableFilter2D', None, [GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid), POINTER(GLvoid)], 'VERSION_1_2') + +GLboolean = c_ubyte # /usr/include/GL/gl.h:54 +# GL/glext.h:3398 +glGetHistogram = _link_function('glGetHistogram', None, [GLenum, GLboolean, GLenum, GLenum, POINTER(GLvoid)], 'VERSION_1_2') + +# GL/glext.h:3399 +glGetHistogramParameterfv = _link_function('glGetHistogramParameterfv', None, [GLenum, GLenum, POINTER(GLfloat)], 'VERSION_1_2') + +# GL/glext.h:3400 +glGetHistogramParameteriv = _link_function('glGetHistogramParameteriv', None, [GLenum, GLenum, POINTER(GLint)], 'VERSION_1_2') + +# GL/glext.h:3401 +glGetMinmax = _link_function('glGetMinmax', None, [GLenum, GLboolean, GLenum, GLenum, POINTER(GLvoid)], 'VERSION_1_2') + +# GL/glext.h:3402 +glGetMinmaxParameterfv = _link_function('glGetMinmaxParameterfv', None, [GLenum, GLenum, POINTER(GLfloat)], 'VERSION_1_2') + +# GL/glext.h:3403 +glGetMinmaxParameteriv = _link_function('glGetMinmaxParameteriv', None, [GLenum, GLenum, POINTER(GLint)], 'VERSION_1_2') + +# GL/glext.h:3404 +glHistogram = _link_function('glHistogram', None, [GLenum, GLsizei, GLenum, GLboolean], 'VERSION_1_2') + +# GL/glext.h:3405 +glMinmax = _link_function('glMinmax', None, [GLenum, GLenum, GLboolean], 'VERSION_1_2') + +# GL/glext.h:3406 +glResetHistogram = _link_function('glResetHistogram', None, [GLenum], 'VERSION_1_2') + +# GL/glext.h:3407 +glResetMinmax = _link_function('glResetMinmax', None, [GLenum], 'VERSION_1_2') + +# GL/glext.h:3408 +glTexImage3D = _link_function('glTexImage3D', None, [GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, POINTER(GLvoid)], 'VERSION_1_2') + +# GL/glext.h:3409 +glTexSubImage3D = _link_function('glTexSubImage3D', None, [GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'VERSION_1_2') + +# GL/glext.h:3410 +glCopyTexSubImage3D = _link_function('glCopyTexSubImage3D', None, [GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei], 'VERSION_1_2') + +PFNGLBLENDCOLORPROC = CFUNCTYPE(None, GLclampf, GLclampf, GLclampf, GLclampf) # GL/glext.h:3412 +PFNGLBLENDEQUATIONPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:3413 +PFNGLDRAWRANGEELEMENTSPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLsizei, GLenum, POINTER(GLvoid)) # GL/glext.h:3414 +PFNGLCOLORTABLEPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:3415 +PFNGLCOLORTABLEPARAMETERFVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:3416 +PFNGLCOLORTABLEPARAMETERIVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:3417 +PFNGLCOPYCOLORTABLEPROC = CFUNCTYPE(None, GLenum, GLenum, GLint, GLint, GLsizei) # GL/glext.h:3418 +PFNGLGETCOLORTABLEPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:3419 +PFNGLGETCOLORTABLEPARAMETERFVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:3420 +PFNGLGETCOLORTABLEPARAMETERIVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:3421 +PFNGLCOLORSUBTABLEPROC = CFUNCTYPE(None, GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:3422 +PFNGLCOPYCOLORSUBTABLEPROC = CFUNCTYPE(None, GLenum, GLsizei, GLint, GLint, GLsizei) # GL/glext.h:3423 +PFNGLCONVOLUTIONFILTER1DPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:3424 +PFNGLCONVOLUTIONFILTER2DPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:3425 +PFNGLCONVOLUTIONPARAMETERFPROC = CFUNCTYPE(None, GLenum, GLenum, GLfloat) # GL/glext.h:3426 +PFNGLCONVOLUTIONPARAMETERFVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:3427 +PFNGLCONVOLUTIONPARAMETERIPROC = CFUNCTYPE(None, GLenum, GLenum, GLint) # GL/glext.h:3428 +PFNGLCONVOLUTIONPARAMETERIVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:3429 +PFNGLCOPYCONVOLUTIONFILTER1DPROC = CFUNCTYPE(None, GLenum, GLenum, GLint, GLint, GLsizei) # GL/glext.h:3430 +PFNGLCOPYCONVOLUTIONFILTER2DPROC = CFUNCTYPE(None, GLenum, GLenum, GLint, GLint, GLsizei, GLsizei) # GL/glext.h:3431 +PFNGLGETCONVOLUTIONFILTERPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:3432 +PFNGLGETCONVOLUTIONPARAMETERFVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:3433 +PFNGLGETCONVOLUTIONPARAMETERIVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:3434 +PFNGLGETSEPARABLEFILTERPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, POINTER(GLvoid), POINTER(GLvoid), POINTER(GLvoid)) # GL/glext.h:3435 +PFNGLSEPARABLEFILTER2DPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid), POINTER(GLvoid)) # GL/glext.h:3436 +PFNGLGETHISTOGRAMPROC = CFUNCTYPE(None, GLenum, GLboolean, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:3437 +PFNGLGETHISTOGRAMPARAMETERFVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:3438 +PFNGLGETHISTOGRAMPARAMETERIVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:3439 +PFNGLGETMINMAXPROC = CFUNCTYPE(None, GLenum, GLboolean, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:3440 +PFNGLGETMINMAXPARAMETERFVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:3441 +PFNGLGETMINMAXPARAMETERIVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:3442 +PFNGLHISTOGRAMPROC = CFUNCTYPE(None, GLenum, GLsizei, GLenum, GLboolean) # GL/glext.h:3443 +PFNGLMINMAXPROC = CFUNCTYPE(None, GLenum, GLenum, GLboolean) # GL/glext.h:3444 +PFNGLRESETHISTOGRAMPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:3445 +PFNGLRESETMINMAXPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:3446 +PFNGLTEXIMAGE3DPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:3447 +PFNGLTEXSUBIMAGE3DPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:3448 +PFNGLCOPYTEXSUBIMAGE3DPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei) # GL/glext.h:3449 +# VERSION_1_3 (GL/glext.h:3452) +GL_VERSION_1_3 = 1 # GL/glext.h:3453 +# GL/glext.h:3455 +glActiveTexture = _link_function('glActiveTexture', None, [GLenum], 'VERSION_1_3') + +# GL/glext.h:3456 +glClientActiveTexture = _link_function('glClientActiveTexture', None, [GLenum], 'VERSION_1_3') + +GLdouble = c_double # /usr/include/GL/gl.h:65 +# GL/glext.h:3457 +glMultiTexCoord1d = _link_function('glMultiTexCoord1d', None, [GLenum, GLdouble], 'VERSION_1_3') + +# GL/glext.h:3458 +glMultiTexCoord1dv = _link_function('glMultiTexCoord1dv', None, [GLenum, POINTER(GLdouble)], 'VERSION_1_3') + +# GL/glext.h:3459 +glMultiTexCoord1f = _link_function('glMultiTexCoord1f', None, [GLenum, GLfloat], 'VERSION_1_3') + +# GL/glext.h:3460 +glMultiTexCoord1fv = _link_function('glMultiTexCoord1fv', None, [GLenum, POINTER(GLfloat)], 'VERSION_1_3') + +# GL/glext.h:3461 +glMultiTexCoord1i = _link_function('glMultiTexCoord1i', None, [GLenum, GLint], 'VERSION_1_3') + +# GL/glext.h:3462 +glMultiTexCoord1iv = _link_function('glMultiTexCoord1iv', None, [GLenum, POINTER(GLint)], 'VERSION_1_3') + +GLshort = c_short # /usr/include/GL/gl.h:57 +# GL/glext.h:3463 +glMultiTexCoord1s = _link_function('glMultiTexCoord1s', None, [GLenum, GLshort], 'VERSION_1_3') + +# GL/glext.h:3464 +glMultiTexCoord1sv = _link_function('glMultiTexCoord1sv', None, [GLenum, POINTER(GLshort)], 'VERSION_1_3') + +# GL/glext.h:3465 +glMultiTexCoord2d = _link_function('glMultiTexCoord2d', None, [GLenum, GLdouble, GLdouble], 'VERSION_1_3') + +# GL/glext.h:3466 +glMultiTexCoord2dv = _link_function('glMultiTexCoord2dv', None, [GLenum, POINTER(GLdouble)], 'VERSION_1_3') + +# GL/glext.h:3467 +glMultiTexCoord2f = _link_function('glMultiTexCoord2f', None, [GLenum, GLfloat, GLfloat], 'VERSION_1_3') + +# GL/glext.h:3468 +glMultiTexCoord2fv = _link_function('glMultiTexCoord2fv', None, [GLenum, POINTER(GLfloat)], 'VERSION_1_3') + +# GL/glext.h:3469 +glMultiTexCoord2i = _link_function('glMultiTexCoord2i', None, [GLenum, GLint, GLint], 'VERSION_1_3') + +# GL/glext.h:3470 +glMultiTexCoord2iv = _link_function('glMultiTexCoord2iv', None, [GLenum, POINTER(GLint)], 'VERSION_1_3') + +# GL/glext.h:3471 +glMultiTexCoord2s = _link_function('glMultiTexCoord2s', None, [GLenum, GLshort, GLshort], 'VERSION_1_3') + +# GL/glext.h:3472 +glMultiTexCoord2sv = _link_function('glMultiTexCoord2sv', None, [GLenum, POINTER(GLshort)], 'VERSION_1_3') + +# GL/glext.h:3473 +glMultiTexCoord3d = _link_function('glMultiTexCoord3d', None, [GLenum, GLdouble, GLdouble, GLdouble], 'VERSION_1_3') + +# GL/glext.h:3474 +glMultiTexCoord3dv = _link_function('glMultiTexCoord3dv', None, [GLenum, POINTER(GLdouble)], 'VERSION_1_3') + +# GL/glext.h:3475 +glMultiTexCoord3f = _link_function('glMultiTexCoord3f', None, [GLenum, GLfloat, GLfloat, GLfloat], 'VERSION_1_3') + +# GL/glext.h:3476 +glMultiTexCoord3fv = _link_function('glMultiTexCoord3fv', None, [GLenum, POINTER(GLfloat)], 'VERSION_1_3') + +# GL/glext.h:3477 +glMultiTexCoord3i = _link_function('glMultiTexCoord3i', None, [GLenum, GLint, GLint, GLint], 'VERSION_1_3') + +# GL/glext.h:3478 +glMultiTexCoord3iv = _link_function('glMultiTexCoord3iv', None, [GLenum, POINTER(GLint)], 'VERSION_1_3') + +# GL/glext.h:3479 +glMultiTexCoord3s = _link_function('glMultiTexCoord3s', None, [GLenum, GLshort, GLshort, GLshort], 'VERSION_1_3') + +# GL/glext.h:3480 +glMultiTexCoord3sv = _link_function('glMultiTexCoord3sv', None, [GLenum, POINTER(GLshort)], 'VERSION_1_3') + +# GL/glext.h:3481 +glMultiTexCoord4d = _link_function('glMultiTexCoord4d', None, [GLenum, GLdouble, GLdouble, GLdouble, GLdouble], 'VERSION_1_3') + +# GL/glext.h:3482 +glMultiTexCoord4dv = _link_function('glMultiTexCoord4dv', None, [GLenum, POINTER(GLdouble)], 'VERSION_1_3') + +# GL/glext.h:3483 +glMultiTexCoord4f = _link_function('glMultiTexCoord4f', None, [GLenum, GLfloat, GLfloat, GLfloat, GLfloat], 'VERSION_1_3') + +# GL/glext.h:3484 +glMultiTexCoord4fv = _link_function('glMultiTexCoord4fv', None, [GLenum, POINTER(GLfloat)], 'VERSION_1_3') + +# GL/glext.h:3485 +glMultiTexCoord4i = _link_function('glMultiTexCoord4i', None, [GLenum, GLint, GLint, GLint, GLint], 'VERSION_1_3') + +# GL/glext.h:3486 +glMultiTexCoord4iv = _link_function('glMultiTexCoord4iv', None, [GLenum, POINTER(GLint)], 'VERSION_1_3') + +# GL/glext.h:3487 +glMultiTexCoord4s = _link_function('glMultiTexCoord4s', None, [GLenum, GLshort, GLshort, GLshort, GLshort], 'VERSION_1_3') + +# GL/glext.h:3488 +glMultiTexCoord4sv = _link_function('glMultiTexCoord4sv', None, [GLenum, POINTER(GLshort)], 'VERSION_1_3') + +# GL/glext.h:3489 +glLoadTransposeMatrixf = _link_function('glLoadTransposeMatrixf', None, [POINTER(GLfloat)], 'VERSION_1_3') + +# GL/glext.h:3490 +glLoadTransposeMatrixd = _link_function('glLoadTransposeMatrixd', None, [POINTER(GLdouble)], 'VERSION_1_3') + +# GL/glext.h:3491 +glMultTransposeMatrixf = _link_function('glMultTransposeMatrixf', None, [POINTER(GLfloat)], 'VERSION_1_3') + +# GL/glext.h:3492 +glMultTransposeMatrixd = _link_function('glMultTransposeMatrixd', None, [POINTER(GLdouble)], 'VERSION_1_3') + +# GL/glext.h:3493 +glSampleCoverage = _link_function('glSampleCoverage', None, [GLclampf, GLboolean], 'VERSION_1_3') + +# GL/glext.h:3494 +glCompressedTexImage3D = _link_function('glCompressedTexImage3D', None, [GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, POINTER(GLvoid)], 'VERSION_1_3') + +# GL/glext.h:3495 +glCompressedTexImage2D = _link_function('glCompressedTexImage2D', None, [GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, POINTER(GLvoid)], 'VERSION_1_3') + +# GL/glext.h:3496 +glCompressedTexImage1D = _link_function('glCompressedTexImage1D', None, [GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, POINTER(GLvoid)], 'VERSION_1_3') + +# GL/glext.h:3497 +glCompressedTexSubImage3D = _link_function('glCompressedTexSubImage3D', None, [GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, POINTER(GLvoid)], 'VERSION_1_3') + +# GL/glext.h:3498 +glCompressedTexSubImage2D = _link_function('glCompressedTexSubImage2D', None, [GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, POINTER(GLvoid)], 'VERSION_1_3') + +# GL/glext.h:3499 +glCompressedTexSubImage1D = _link_function('glCompressedTexSubImage1D', None, [GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, POINTER(GLvoid)], 'VERSION_1_3') + +# GL/glext.h:3500 +glGetCompressedTexImage = _link_function('glGetCompressedTexImage', None, [GLenum, GLint, POINTER(GLvoid)], 'VERSION_1_3') + +PFNGLACTIVETEXTUREPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:3502 +PFNGLCLIENTACTIVETEXTUREPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:3503 +PFNGLMULTITEXCOORD1DPROC = CFUNCTYPE(None, GLenum, GLdouble) # GL/glext.h:3504 +PFNGLMULTITEXCOORD1DVPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:3505 +PFNGLMULTITEXCOORD1FPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:3506 +PFNGLMULTITEXCOORD1FVPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:3507 +PFNGLMULTITEXCOORD1IPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:3508 +PFNGLMULTITEXCOORD1IVPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:3509 +PFNGLMULTITEXCOORD1SPROC = CFUNCTYPE(None, GLenum, GLshort) # GL/glext.h:3510 +PFNGLMULTITEXCOORD1SVPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:3511 +PFNGLMULTITEXCOORD2DPROC = CFUNCTYPE(None, GLenum, GLdouble, GLdouble) # GL/glext.h:3512 +PFNGLMULTITEXCOORD2DVPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:3513 +PFNGLMULTITEXCOORD2FPROC = CFUNCTYPE(None, GLenum, GLfloat, GLfloat) # GL/glext.h:3514 +PFNGLMULTITEXCOORD2FVPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:3515 +PFNGLMULTITEXCOORD2IPROC = CFUNCTYPE(None, GLenum, GLint, GLint) # GL/glext.h:3516 +PFNGLMULTITEXCOORD2IVPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:3517 +PFNGLMULTITEXCOORD2SPROC = CFUNCTYPE(None, GLenum, GLshort, GLshort) # GL/glext.h:3518 +PFNGLMULTITEXCOORD2SVPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:3519 +PFNGLMULTITEXCOORD3DPROC = CFUNCTYPE(None, GLenum, GLdouble, GLdouble, GLdouble) # GL/glext.h:3520 +PFNGLMULTITEXCOORD3DVPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:3521 +PFNGLMULTITEXCOORD3FPROC = CFUNCTYPE(None, GLenum, GLfloat, GLfloat, GLfloat) # GL/glext.h:3522 +PFNGLMULTITEXCOORD3FVPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:3523 +PFNGLMULTITEXCOORD3IPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint) # GL/glext.h:3524 +PFNGLMULTITEXCOORD3IVPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:3525 +PFNGLMULTITEXCOORD3SPROC = CFUNCTYPE(None, GLenum, GLshort, GLshort, GLshort) # GL/glext.h:3526 +PFNGLMULTITEXCOORD3SVPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:3527 +PFNGLMULTITEXCOORD4DPROC = CFUNCTYPE(None, GLenum, GLdouble, GLdouble, GLdouble, GLdouble) # GL/glext.h:3528 +PFNGLMULTITEXCOORD4DVPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:3529 +PFNGLMULTITEXCOORD4FPROC = CFUNCTYPE(None, GLenum, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:3530 +PFNGLMULTITEXCOORD4FVPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:3531 +PFNGLMULTITEXCOORD4IPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint) # GL/glext.h:3532 +PFNGLMULTITEXCOORD4IVPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:3533 +PFNGLMULTITEXCOORD4SPROC = CFUNCTYPE(None, GLenum, GLshort, GLshort, GLshort, GLshort) # GL/glext.h:3534 +PFNGLMULTITEXCOORD4SVPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:3535 +PFNGLLOADTRANSPOSEMATRIXFPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:3536 +PFNGLLOADTRANSPOSEMATRIXDPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:3537 +PFNGLMULTTRANSPOSEMATRIXFPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:3538 +PFNGLMULTTRANSPOSEMATRIXDPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:3539 +PFNGLSAMPLECOVERAGEPROC = CFUNCTYPE(None, GLclampf, GLboolean) # GL/glext.h:3540 +PFNGLCOMPRESSEDTEXIMAGE3DPROC = CFUNCTYPE(None, GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, POINTER(GLvoid)) # GL/glext.h:3541 +PFNGLCOMPRESSEDTEXIMAGE2DPROC = CFUNCTYPE(None, GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, POINTER(GLvoid)) # GL/glext.h:3542 +PFNGLCOMPRESSEDTEXIMAGE1DPROC = CFUNCTYPE(None, GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, POINTER(GLvoid)) # GL/glext.h:3543 +PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:3544 +PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:3545 +PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:3546 +PFNGLGETCOMPRESSEDTEXIMAGEPROC = CFUNCTYPE(None, GLenum, GLint, POINTER(GLvoid)) # GL/glext.h:3547 +# VERSION_1_4 (GL/glext.h:3550) +GL_VERSION_1_4 = 1 # GL/glext.h:3551 +# GL/glext.h:3553 +glBlendFuncSeparate = _link_function('glBlendFuncSeparate', None, [GLenum, GLenum, GLenum, GLenum], 'VERSION_1_4') + +# GL/glext.h:3554 +glFogCoordf = _link_function('glFogCoordf', None, [GLfloat], 'VERSION_1_4') + +# GL/glext.h:3555 +glFogCoordfv = _link_function('glFogCoordfv', None, [POINTER(GLfloat)], 'VERSION_1_4') + +# GL/glext.h:3556 +glFogCoordd = _link_function('glFogCoordd', None, [GLdouble], 'VERSION_1_4') + +# GL/glext.h:3557 +glFogCoorddv = _link_function('glFogCoorddv', None, [POINTER(GLdouble)], 'VERSION_1_4') + +# GL/glext.h:3558 +glFogCoordPointer = _link_function('glFogCoordPointer', None, [GLenum, GLsizei, POINTER(GLvoid)], 'VERSION_1_4') + +# GL/glext.h:3559 +glMultiDrawArrays = _link_function('glMultiDrawArrays', None, [GLenum, POINTER(GLint), POINTER(GLsizei), GLsizei], 'VERSION_1_4') + +# GL/glext.h:3560 +glMultiDrawElements = _link_function('glMultiDrawElements', None, [GLenum, POINTER(GLsizei), GLenum, POINTER(POINTER(GLvoid)), GLsizei], 'VERSION_1_4') + +# GL/glext.h:3561 +glPointParameterf = _link_function('glPointParameterf', None, [GLenum, GLfloat], 'VERSION_1_4') + +# GL/glext.h:3562 +glPointParameterfv = _link_function('glPointParameterfv', None, [GLenum, POINTER(GLfloat)], 'VERSION_1_4') + +# GL/glext.h:3563 +glPointParameteri = _link_function('glPointParameteri', None, [GLenum, GLint], 'VERSION_1_4') + +# GL/glext.h:3564 +glPointParameteriv = _link_function('glPointParameteriv', None, [GLenum, POINTER(GLint)], 'VERSION_1_4') + +GLbyte = c_char # /usr/include/GL/gl.h:56 +# GL/glext.h:3565 +glSecondaryColor3b = _link_function('glSecondaryColor3b', None, [GLbyte, GLbyte, GLbyte], 'VERSION_1_4') + +# GL/glext.h:3566 +glSecondaryColor3bv = _link_function('glSecondaryColor3bv', None, [POINTER(GLbyte)], 'VERSION_1_4') + +# GL/glext.h:3567 +glSecondaryColor3d = _link_function('glSecondaryColor3d', None, [GLdouble, GLdouble, GLdouble], 'VERSION_1_4') + +# GL/glext.h:3568 +glSecondaryColor3dv = _link_function('glSecondaryColor3dv', None, [POINTER(GLdouble)], 'VERSION_1_4') + +# GL/glext.h:3569 +glSecondaryColor3f = _link_function('glSecondaryColor3f', None, [GLfloat, GLfloat, GLfloat], 'VERSION_1_4') + +# GL/glext.h:3570 +glSecondaryColor3fv = _link_function('glSecondaryColor3fv', None, [POINTER(GLfloat)], 'VERSION_1_4') + +# GL/glext.h:3571 +glSecondaryColor3i = _link_function('glSecondaryColor3i', None, [GLint, GLint, GLint], 'VERSION_1_4') + +# GL/glext.h:3572 +glSecondaryColor3iv = _link_function('glSecondaryColor3iv', None, [POINTER(GLint)], 'VERSION_1_4') + +# GL/glext.h:3573 +glSecondaryColor3s = _link_function('glSecondaryColor3s', None, [GLshort, GLshort, GLshort], 'VERSION_1_4') + +# GL/glext.h:3574 +glSecondaryColor3sv = _link_function('glSecondaryColor3sv', None, [POINTER(GLshort)], 'VERSION_1_4') + +GLubyte = c_ubyte # /usr/include/GL/gl.h:60 +# GL/glext.h:3575 +glSecondaryColor3ub = _link_function('glSecondaryColor3ub', None, [GLubyte, GLubyte, GLubyte], 'VERSION_1_4') + +# GL/glext.h:3576 +glSecondaryColor3ubv = _link_function('glSecondaryColor3ubv', None, [POINTER(GLubyte)], 'VERSION_1_4') + +# GL/glext.h:3577 +glSecondaryColor3ui = _link_function('glSecondaryColor3ui', None, [GLuint, GLuint, GLuint], 'VERSION_1_4') + +# GL/glext.h:3578 +glSecondaryColor3uiv = _link_function('glSecondaryColor3uiv', None, [POINTER(GLuint)], 'VERSION_1_4') + +GLushort = c_ushort # /usr/include/GL/gl.h:61 +# GL/glext.h:3579 +glSecondaryColor3us = _link_function('glSecondaryColor3us', None, [GLushort, GLushort, GLushort], 'VERSION_1_4') + +# GL/glext.h:3580 +glSecondaryColor3usv = _link_function('glSecondaryColor3usv', None, [POINTER(GLushort)], 'VERSION_1_4') + +# GL/glext.h:3581 +glSecondaryColorPointer = _link_function('glSecondaryColorPointer', None, [GLint, GLenum, GLsizei, POINTER(GLvoid)], 'VERSION_1_4') + +# GL/glext.h:3582 +glWindowPos2d = _link_function('glWindowPos2d', None, [GLdouble, GLdouble], 'VERSION_1_4') + +# GL/glext.h:3583 +glWindowPos2dv = _link_function('glWindowPos2dv', None, [POINTER(GLdouble)], 'VERSION_1_4') + +# GL/glext.h:3584 +glWindowPos2f = _link_function('glWindowPos2f', None, [GLfloat, GLfloat], 'VERSION_1_4') + +# GL/glext.h:3585 +glWindowPos2fv = _link_function('glWindowPos2fv', None, [POINTER(GLfloat)], 'VERSION_1_4') + +# GL/glext.h:3586 +glWindowPos2i = _link_function('glWindowPos2i', None, [GLint, GLint], 'VERSION_1_4') + +# GL/glext.h:3587 +glWindowPos2iv = _link_function('glWindowPos2iv', None, [POINTER(GLint)], 'VERSION_1_4') + +# GL/glext.h:3588 +glWindowPos2s = _link_function('glWindowPos2s', None, [GLshort, GLshort], 'VERSION_1_4') + +# GL/glext.h:3589 +glWindowPos2sv = _link_function('glWindowPos2sv', None, [POINTER(GLshort)], 'VERSION_1_4') + +# GL/glext.h:3590 +glWindowPos3d = _link_function('glWindowPos3d', None, [GLdouble, GLdouble, GLdouble], 'VERSION_1_4') + +# GL/glext.h:3591 +glWindowPos3dv = _link_function('glWindowPos3dv', None, [POINTER(GLdouble)], 'VERSION_1_4') + +# GL/glext.h:3592 +glWindowPos3f = _link_function('glWindowPos3f', None, [GLfloat, GLfloat, GLfloat], 'VERSION_1_4') + +# GL/glext.h:3593 +glWindowPos3fv = _link_function('glWindowPos3fv', None, [POINTER(GLfloat)], 'VERSION_1_4') + +# GL/glext.h:3594 +glWindowPos3i = _link_function('glWindowPos3i', None, [GLint, GLint, GLint], 'VERSION_1_4') + +# GL/glext.h:3595 +glWindowPos3iv = _link_function('glWindowPos3iv', None, [POINTER(GLint)], 'VERSION_1_4') + +# GL/glext.h:3596 +glWindowPos3s = _link_function('glWindowPos3s', None, [GLshort, GLshort, GLshort], 'VERSION_1_4') + +# GL/glext.h:3597 +glWindowPos3sv = _link_function('glWindowPos3sv', None, [POINTER(GLshort)], 'VERSION_1_4') + +PFNGLBLENDFUNCSEPARATEPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLenum) # GL/glext.h:3599 +PFNGLFOGCOORDFPROC = CFUNCTYPE(None, GLfloat) # GL/glext.h:3600 +PFNGLFOGCOORDFVPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:3601 +PFNGLFOGCOORDDPROC = CFUNCTYPE(None, GLdouble) # GL/glext.h:3602 +PFNGLFOGCOORDDVPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:3603 +PFNGLFOGCOORDPOINTERPROC = CFUNCTYPE(None, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:3604 +PFNGLMULTIDRAWARRAYSPROC = CFUNCTYPE(None, GLenum, POINTER(GLint), POINTER(GLsizei), GLsizei) # GL/glext.h:3605 +PFNGLMULTIDRAWELEMENTSPROC = CFUNCTYPE(None, GLenum, POINTER(GLsizei), GLenum, POINTER(POINTER(GLvoid)), GLsizei) # GL/glext.h:3606 +PFNGLPOINTPARAMETERFPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:3607 +PFNGLPOINTPARAMETERFVPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:3608 +PFNGLPOINTPARAMETERIPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:3609 +PFNGLPOINTPARAMETERIVPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:3610 +PFNGLSECONDARYCOLOR3BPROC = CFUNCTYPE(None, GLbyte, GLbyte, GLbyte) # GL/glext.h:3611 +PFNGLSECONDARYCOLOR3BVPROC = CFUNCTYPE(None, POINTER(GLbyte)) # GL/glext.h:3612 +PFNGLSECONDARYCOLOR3DPROC = CFUNCTYPE(None, GLdouble, GLdouble, GLdouble) # GL/glext.h:3613 +PFNGLSECONDARYCOLOR3DVPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:3614 +PFNGLSECONDARYCOLOR3FPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat) # GL/glext.h:3615 +PFNGLSECONDARYCOLOR3FVPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:3616 +PFNGLSECONDARYCOLOR3IPROC = CFUNCTYPE(None, GLint, GLint, GLint) # GL/glext.h:3617 +PFNGLSECONDARYCOLOR3IVPROC = CFUNCTYPE(None, POINTER(GLint)) # GL/glext.h:3618 +PFNGLSECONDARYCOLOR3SPROC = CFUNCTYPE(None, GLshort, GLshort, GLshort) # GL/glext.h:3619 +PFNGLSECONDARYCOLOR3SVPROC = CFUNCTYPE(None, POINTER(GLshort)) # GL/glext.h:3620 +PFNGLSECONDARYCOLOR3UBPROC = CFUNCTYPE(None, GLubyte, GLubyte, GLubyte) # GL/glext.h:3621 +PFNGLSECONDARYCOLOR3UBVPROC = CFUNCTYPE(None, POINTER(GLubyte)) # GL/glext.h:3622 +PFNGLSECONDARYCOLOR3UIPROC = CFUNCTYPE(None, GLuint, GLuint, GLuint) # GL/glext.h:3623 +PFNGLSECONDARYCOLOR3UIVPROC = CFUNCTYPE(None, POINTER(GLuint)) # GL/glext.h:3624 +PFNGLSECONDARYCOLOR3USPROC = CFUNCTYPE(None, GLushort, GLushort, GLushort) # GL/glext.h:3625 +PFNGLSECONDARYCOLOR3USVPROC = CFUNCTYPE(None, POINTER(GLushort)) # GL/glext.h:3626 +PFNGLSECONDARYCOLORPOINTERPROC = CFUNCTYPE(None, GLint, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:3627 +PFNGLWINDOWPOS2DPROC = CFUNCTYPE(None, GLdouble, GLdouble) # GL/glext.h:3628 +PFNGLWINDOWPOS2DVPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:3629 +PFNGLWINDOWPOS2FPROC = CFUNCTYPE(None, GLfloat, GLfloat) # GL/glext.h:3630 +PFNGLWINDOWPOS2FVPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:3631 +PFNGLWINDOWPOS2IPROC = CFUNCTYPE(None, GLint, GLint) # GL/glext.h:3632 +PFNGLWINDOWPOS2IVPROC = CFUNCTYPE(None, POINTER(GLint)) # GL/glext.h:3633 +PFNGLWINDOWPOS2SPROC = CFUNCTYPE(None, GLshort, GLshort) # GL/glext.h:3634 +PFNGLWINDOWPOS2SVPROC = CFUNCTYPE(None, POINTER(GLshort)) # GL/glext.h:3635 +PFNGLWINDOWPOS3DPROC = CFUNCTYPE(None, GLdouble, GLdouble, GLdouble) # GL/glext.h:3636 +PFNGLWINDOWPOS3DVPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:3637 +PFNGLWINDOWPOS3FPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat) # GL/glext.h:3638 +PFNGLWINDOWPOS3FVPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:3639 +PFNGLWINDOWPOS3IPROC = CFUNCTYPE(None, GLint, GLint, GLint) # GL/glext.h:3640 +PFNGLWINDOWPOS3IVPROC = CFUNCTYPE(None, POINTER(GLint)) # GL/glext.h:3641 +PFNGLWINDOWPOS3SPROC = CFUNCTYPE(None, GLshort, GLshort, GLshort) # GL/glext.h:3642 +PFNGLWINDOWPOS3SVPROC = CFUNCTYPE(None, POINTER(GLshort)) # GL/glext.h:3643 +# VERSION_1_5 (GL/glext.h:3646) +GL_VERSION_1_5 = 1 # GL/glext.h:3647 +# GL/glext.h:3649 +glGenQueries = _link_function('glGenQueries', None, [GLsizei, POINTER(GLuint)], 'VERSION_1_5') + +# GL/glext.h:3650 +glDeleteQueries = _link_function('glDeleteQueries', None, [GLsizei, POINTER(GLuint)], 'VERSION_1_5') + +# GL/glext.h:3651 +glIsQuery = _link_function('glIsQuery', GLboolean, [GLuint], 'VERSION_1_5') + +# GL/glext.h:3652 +glBeginQuery = _link_function('glBeginQuery', None, [GLenum, GLuint], 'VERSION_1_5') + +# GL/glext.h:3653 +glEndQuery = _link_function('glEndQuery', None, [GLenum], 'VERSION_1_5') + +# GL/glext.h:3654 +glGetQueryiv = _link_function('glGetQueryiv', None, [GLenum, GLenum, POINTER(GLint)], 'VERSION_1_5') + +# GL/glext.h:3655 +glGetQueryObjectiv = _link_function('glGetQueryObjectiv', None, [GLuint, GLenum, POINTER(GLint)], 'VERSION_1_5') + +# GL/glext.h:3656 +glGetQueryObjectuiv = _link_function('glGetQueryObjectuiv', None, [GLuint, GLenum, POINTER(GLuint)], 'VERSION_1_5') + +# GL/glext.h:3657 +glBindBuffer = _link_function('glBindBuffer', None, [GLenum, GLuint], 'VERSION_1_5') + +# GL/glext.h:3658 +glDeleteBuffers = _link_function('glDeleteBuffers', None, [GLsizei, POINTER(GLuint)], 'VERSION_1_5') + +# GL/glext.h:3659 +glGenBuffers = _link_function('glGenBuffers', None, [GLsizei, POINTER(GLuint)], 'VERSION_1_5') + +# GL/glext.h:3660 +glIsBuffer = _link_function('glIsBuffer', GLboolean, [GLuint], 'VERSION_1_5') + +# GL/glext.h:3661 +glBufferData = _link_function('glBufferData', None, [GLenum, GLsizeiptr, POINTER(GLvoid), GLenum], 'VERSION_1_5') + +# GL/glext.h:3662 +glBufferSubData = _link_function('glBufferSubData', None, [GLenum, GLintptr, GLsizeiptr, POINTER(GLvoid)], 'VERSION_1_5') + +# GL/glext.h:3663 +glGetBufferSubData = _link_function('glGetBufferSubData', None, [GLenum, GLintptr, GLsizeiptr, POINTER(GLvoid)], 'VERSION_1_5') + +# GL/glext.h:3664 +glMapBuffer = _link_function('glMapBuffer', POINTER(GLvoid), [GLenum, GLenum], 'VERSION_1_5') + +# GL/glext.h:3665 +glUnmapBuffer = _link_function('glUnmapBuffer', GLboolean, [GLenum], 'VERSION_1_5') + +# GL/glext.h:3666 +glGetBufferParameteriv = _link_function('glGetBufferParameteriv', None, [GLenum, GLenum, POINTER(GLint)], 'VERSION_1_5') + +# GL/glext.h:3667 +glGetBufferPointerv = _link_function('glGetBufferPointerv', None, [GLenum, GLenum, POINTER(POINTER(GLvoid))], 'VERSION_1_5') + +PFNGLGENQUERIESPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:3669 +PFNGLDELETEQUERIESPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:3670 +PFNGLISQUERYPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:3671 +PFNGLBEGINQUERYPROC = CFUNCTYPE(None, GLenum, GLuint) # GL/glext.h:3672 +PFNGLENDQUERYPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:3673 +PFNGLGETQUERYIVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:3674 +PFNGLGETQUERYOBJECTIVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:3675 +PFNGLGETQUERYOBJECTUIVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLuint)) # GL/glext.h:3676 +PFNGLBINDBUFFERPROC = CFUNCTYPE(None, GLenum, GLuint) # GL/glext.h:3677 +PFNGLDELETEBUFFERSPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:3678 +PFNGLGENBUFFERSPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:3679 +PFNGLISBUFFERPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:3680 +PFNGLBUFFERDATAPROC = CFUNCTYPE(None, GLenum, GLsizeiptr, POINTER(GLvoid), GLenum) # GL/glext.h:3681 +PFNGLBUFFERSUBDATAPROC = CFUNCTYPE(None, GLenum, GLintptr, GLsizeiptr, POINTER(GLvoid)) # GL/glext.h:3682 +PFNGLGETBUFFERSUBDATAPROC = CFUNCTYPE(None, GLenum, GLintptr, GLsizeiptr, POINTER(GLvoid)) # GL/glext.h:3683 +PFNGLMAPBUFFERPROC = CFUNCTYPE(POINTER(GLvoid), GLenum, GLenum) # GL/glext.h:3684 +PFNGLUNMAPBUFFERPROC = CFUNCTYPE(GLboolean, GLenum) # GL/glext.h:3685 +PFNGLGETBUFFERPARAMETERIVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:3686 +PFNGLGETBUFFERPOINTERVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(POINTER(GLvoid))) # GL/glext.h:3687 +# VERSION_2_0 (GL/glext.h:3690) +GL_VERSION_2_0 = 1 # GL/glext.h:3691 +# GL/glext.h:3693 +glBlendEquationSeparate = _link_function('glBlendEquationSeparate', None, [GLenum, GLenum], 'VERSION_2_0') + +# GL/glext.h:3694 +glDrawBuffers = _link_function('glDrawBuffers', None, [GLsizei, POINTER(GLenum)], 'VERSION_2_0') + +# GL/glext.h:3695 +glStencilOpSeparate = _link_function('glStencilOpSeparate', None, [GLenum, GLenum, GLenum, GLenum], 'VERSION_2_0') + +# GL/glext.h:3696 +glStencilFuncSeparate = _link_function('glStencilFuncSeparate', None, [GLenum, GLenum, GLint, GLuint], 'VERSION_2_0') + +# GL/glext.h:3697 +glStencilMaskSeparate = _link_function('glStencilMaskSeparate', None, [GLenum, GLuint], 'VERSION_2_0') + +# GL/glext.h:3698 +glAttachShader = _link_function('glAttachShader', None, [GLuint, GLuint], 'VERSION_2_0') + +# GL/glext.h:3699 +glBindAttribLocation = _link_function('glBindAttribLocation', None, [GLuint, GLuint, POINTER(GLchar)], 'VERSION_2_0') + +# GL/glext.h:3700 +glCompileShader = _link_function('glCompileShader', None, [GLuint], 'VERSION_2_0') + +# GL/glext.h:3701 +glCreateProgram = _link_function('glCreateProgram', GLuint, [], 'VERSION_2_0') + +# GL/glext.h:3702 +glCreateShader = _link_function('glCreateShader', GLuint, [GLenum], 'VERSION_2_0') + +# GL/glext.h:3703 +glDeleteProgram = _link_function('glDeleteProgram', None, [GLuint], 'VERSION_2_0') + +# GL/glext.h:3704 +glDeleteShader = _link_function('glDeleteShader', None, [GLuint], 'VERSION_2_0') + +# GL/glext.h:3705 +glDetachShader = _link_function('glDetachShader', None, [GLuint, GLuint], 'VERSION_2_0') + +# GL/glext.h:3706 +glDisableVertexAttribArray = _link_function('glDisableVertexAttribArray', None, [GLuint], 'VERSION_2_0') + +# GL/glext.h:3707 +glEnableVertexAttribArray = _link_function('glEnableVertexAttribArray', None, [GLuint], 'VERSION_2_0') + +# GL/glext.h:3708 +glGetActiveAttrib = _link_function('glGetActiveAttrib', None, [GLuint, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLint), POINTER(GLenum), POINTER(GLchar)], 'VERSION_2_0') + +# GL/glext.h:3709 +glGetActiveUniform = _link_function('glGetActiveUniform', None, [GLuint, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLint), POINTER(GLenum), POINTER(GLchar)], 'VERSION_2_0') + +# GL/glext.h:3710 +glGetAttachedShaders = _link_function('glGetAttachedShaders', None, [GLuint, GLsizei, POINTER(GLsizei), POINTER(GLuint)], 'VERSION_2_0') + +# GL/glext.h:3711 +glGetAttribLocation = _link_function('glGetAttribLocation', GLint, [GLuint, POINTER(GLchar)], 'VERSION_2_0') + +# GL/glext.h:3712 +glGetProgramiv = _link_function('glGetProgramiv', None, [GLuint, GLenum, POINTER(GLint)], 'VERSION_2_0') + +# GL/glext.h:3713 +glGetProgramInfoLog = _link_function('glGetProgramInfoLog', None, [GLuint, GLsizei, POINTER(GLsizei), POINTER(GLchar)], 'VERSION_2_0') + +# GL/glext.h:3714 +glGetShaderiv = _link_function('glGetShaderiv', None, [GLuint, GLenum, POINTER(GLint)], 'VERSION_2_0') + +# GL/glext.h:3715 +glGetShaderInfoLog = _link_function('glGetShaderInfoLog', None, [GLuint, GLsizei, POINTER(GLsizei), POINTER(GLchar)], 'VERSION_2_0') + +# GL/glext.h:3716 +glGetShaderSource = _link_function('glGetShaderSource', None, [GLuint, GLsizei, POINTER(GLsizei), POINTER(GLchar)], 'VERSION_2_0') + +# GL/glext.h:3717 +glGetUniformLocation = _link_function('glGetUniformLocation', GLint, [GLuint, POINTER(GLchar)], 'VERSION_2_0') + +# GL/glext.h:3718 +glGetUniformfv = _link_function('glGetUniformfv', None, [GLuint, GLint, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3719 +glGetUniformiv = _link_function('glGetUniformiv', None, [GLuint, GLint, POINTER(GLint)], 'VERSION_2_0') + +# GL/glext.h:3720 +glGetVertexAttribdv = _link_function('glGetVertexAttribdv', None, [GLuint, GLenum, POINTER(GLdouble)], 'VERSION_2_0') + +# GL/glext.h:3721 +glGetVertexAttribfv = _link_function('glGetVertexAttribfv', None, [GLuint, GLenum, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3722 +glGetVertexAttribiv = _link_function('glGetVertexAttribiv', None, [GLuint, GLenum, POINTER(GLint)], 'VERSION_2_0') + +# GL/glext.h:3723 +glGetVertexAttribPointerv = _link_function('glGetVertexAttribPointerv', None, [GLuint, GLenum, POINTER(POINTER(GLvoid))], 'VERSION_2_0') + +# GL/glext.h:3724 +glIsProgram = _link_function('glIsProgram', GLboolean, [GLuint], 'VERSION_2_0') + +# GL/glext.h:3725 +glIsShader = _link_function('glIsShader', GLboolean, [GLuint], 'VERSION_2_0') + +# GL/glext.h:3726 +glLinkProgram = _link_function('glLinkProgram', None, [GLuint], 'VERSION_2_0') + +# GL/glext.h:3727 +glShaderSource = _link_function('glShaderSource', None, [GLuint, GLsizei, POINTER(POINTER(GLchar)), POINTER(GLint)], 'VERSION_2_0') + +# GL/glext.h:3728 +glUseProgram = _link_function('glUseProgram', None, [GLuint], 'VERSION_2_0') + +# GL/glext.h:3729 +glUniform1f = _link_function('glUniform1f', None, [GLint, GLfloat], 'VERSION_2_0') + +# GL/glext.h:3730 +glUniform2f = _link_function('glUniform2f', None, [GLint, GLfloat, GLfloat], 'VERSION_2_0') + +# GL/glext.h:3731 +glUniform3f = _link_function('glUniform3f', None, [GLint, GLfloat, GLfloat, GLfloat], 'VERSION_2_0') + +# GL/glext.h:3732 +glUniform4f = _link_function('glUniform4f', None, [GLint, GLfloat, GLfloat, GLfloat, GLfloat], 'VERSION_2_0') + +# GL/glext.h:3733 +glUniform1i = _link_function('glUniform1i', None, [GLint, GLint], 'VERSION_2_0') + +# GL/glext.h:3734 +glUniform2i = _link_function('glUniform2i', None, [GLint, GLint, GLint], 'VERSION_2_0') + +# GL/glext.h:3735 +glUniform3i = _link_function('glUniform3i', None, [GLint, GLint, GLint, GLint], 'VERSION_2_0') + +# GL/glext.h:3736 +glUniform4i = _link_function('glUniform4i', None, [GLint, GLint, GLint, GLint, GLint], 'VERSION_2_0') + +# GL/glext.h:3737 +glUniform1fv = _link_function('glUniform1fv', None, [GLint, GLsizei, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3738 +glUniform2fv = _link_function('glUniform2fv', None, [GLint, GLsizei, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3739 +glUniform3fv = _link_function('glUniform3fv', None, [GLint, GLsizei, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3740 +glUniform4fv = _link_function('glUniform4fv', None, [GLint, GLsizei, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3741 +glUniform1iv = _link_function('glUniform1iv', None, [GLint, GLsizei, POINTER(GLint)], 'VERSION_2_0') + +# GL/glext.h:3742 +glUniform2iv = _link_function('glUniform2iv', None, [GLint, GLsizei, POINTER(GLint)], 'VERSION_2_0') + +# GL/glext.h:3743 +glUniform3iv = _link_function('glUniform3iv', None, [GLint, GLsizei, POINTER(GLint)], 'VERSION_2_0') + +# GL/glext.h:3744 +glUniform4iv = _link_function('glUniform4iv', None, [GLint, GLsizei, POINTER(GLint)], 'VERSION_2_0') + +# GL/glext.h:3745 +glUniformMatrix2fv = _link_function('glUniformMatrix2fv', None, [GLint, GLsizei, GLboolean, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3746 +glUniformMatrix3fv = _link_function('glUniformMatrix3fv', None, [GLint, GLsizei, GLboolean, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3747 +glUniformMatrix4fv = _link_function('glUniformMatrix4fv', None, [GLint, GLsizei, GLboolean, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3748 +glValidateProgram = _link_function('glValidateProgram', None, [GLuint], 'VERSION_2_0') + +# GL/glext.h:3749 +glVertexAttrib1d = _link_function('glVertexAttrib1d', None, [GLuint, GLdouble], 'VERSION_2_0') + +# GL/glext.h:3750 +glVertexAttrib1dv = _link_function('glVertexAttrib1dv', None, [GLuint, POINTER(GLdouble)], 'VERSION_2_0') + +# GL/glext.h:3751 +glVertexAttrib1f = _link_function('glVertexAttrib1f', None, [GLuint, GLfloat], 'VERSION_2_0') + +# GL/glext.h:3752 +glVertexAttrib1fv = _link_function('glVertexAttrib1fv', None, [GLuint, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3753 +glVertexAttrib1s = _link_function('glVertexAttrib1s', None, [GLuint, GLshort], 'VERSION_2_0') + +# GL/glext.h:3754 +glVertexAttrib1sv = _link_function('glVertexAttrib1sv', None, [GLuint, POINTER(GLshort)], 'VERSION_2_0') + +# GL/glext.h:3755 +glVertexAttrib2d = _link_function('glVertexAttrib2d', None, [GLuint, GLdouble, GLdouble], 'VERSION_2_0') + +# GL/glext.h:3756 +glVertexAttrib2dv = _link_function('glVertexAttrib2dv', None, [GLuint, POINTER(GLdouble)], 'VERSION_2_0') + +# GL/glext.h:3757 +glVertexAttrib2f = _link_function('glVertexAttrib2f', None, [GLuint, GLfloat, GLfloat], 'VERSION_2_0') + +# GL/glext.h:3758 +glVertexAttrib2fv = _link_function('glVertexAttrib2fv', None, [GLuint, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3759 +glVertexAttrib2s = _link_function('glVertexAttrib2s', None, [GLuint, GLshort, GLshort], 'VERSION_2_0') + +# GL/glext.h:3760 +glVertexAttrib2sv = _link_function('glVertexAttrib2sv', None, [GLuint, POINTER(GLshort)], 'VERSION_2_0') + +# GL/glext.h:3761 +glVertexAttrib3d = _link_function('glVertexAttrib3d', None, [GLuint, GLdouble, GLdouble, GLdouble], 'VERSION_2_0') + +# GL/glext.h:3762 +glVertexAttrib3dv = _link_function('glVertexAttrib3dv', None, [GLuint, POINTER(GLdouble)], 'VERSION_2_0') + +# GL/glext.h:3763 +glVertexAttrib3f = _link_function('glVertexAttrib3f', None, [GLuint, GLfloat, GLfloat, GLfloat], 'VERSION_2_0') + +# GL/glext.h:3764 +glVertexAttrib3fv = _link_function('glVertexAttrib3fv', None, [GLuint, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3765 +glVertexAttrib3s = _link_function('glVertexAttrib3s', None, [GLuint, GLshort, GLshort, GLshort], 'VERSION_2_0') + +# GL/glext.h:3766 +glVertexAttrib3sv = _link_function('glVertexAttrib3sv', None, [GLuint, POINTER(GLshort)], 'VERSION_2_0') + +# GL/glext.h:3767 +glVertexAttrib4Nbv = _link_function('glVertexAttrib4Nbv', None, [GLuint, POINTER(GLbyte)], 'VERSION_2_0') + +# GL/glext.h:3768 +glVertexAttrib4Niv = _link_function('glVertexAttrib4Niv', None, [GLuint, POINTER(GLint)], 'VERSION_2_0') + +# GL/glext.h:3769 +glVertexAttrib4Nsv = _link_function('glVertexAttrib4Nsv', None, [GLuint, POINTER(GLshort)], 'VERSION_2_0') + +# GL/glext.h:3770 +glVertexAttrib4Nub = _link_function('glVertexAttrib4Nub', None, [GLuint, GLubyte, GLubyte, GLubyte, GLubyte], 'VERSION_2_0') + +# GL/glext.h:3771 +glVertexAttrib4Nubv = _link_function('glVertexAttrib4Nubv', None, [GLuint, POINTER(GLubyte)], 'VERSION_2_0') + +# GL/glext.h:3772 +glVertexAttrib4Nuiv = _link_function('glVertexAttrib4Nuiv', None, [GLuint, POINTER(GLuint)], 'VERSION_2_0') + +# GL/glext.h:3773 +glVertexAttrib4Nusv = _link_function('glVertexAttrib4Nusv', None, [GLuint, POINTER(GLushort)], 'VERSION_2_0') + +# GL/glext.h:3774 +glVertexAttrib4bv = _link_function('glVertexAttrib4bv', None, [GLuint, POINTER(GLbyte)], 'VERSION_2_0') + +# GL/glext.h:3775 +glVertexAttrib4d = _link_function('glVertexAttrib4d', None, [GLuint, GLdouble, GLdouble, GLdouble, GLdouble], 'VERSION_2_0') + +# GL/glext.h:3776 +glVertexAttrib4dv = _link_function('glVertexAttrib4dv', None, [GLuint, POINTER(GLdouble)], 'VERSION_2_0') + +# GL/glext.h:3777 +glVertexAttrib4f = _link_function('glVertexAttrib4f', None, [GLuint, GLfloat, GLfloat, GLfloat, GLfloat], 'VERSION_2_0') + +# GL/glext.h:3778 +glVertexAttrib4fv = _link_function('glVertexAttrib4fv', None, [GLuint, POINTER(GLfloat)], 'VERSION_2_0') + +# GL/glext.h:3779 +glVertexAttrib4iv = _link_function('glVertexAttrib4iv', None, [GLuint, POINTER(GLint)], 'VERSION_2_0') + +# GL/glext.h:3780 +glVertexAttrib4s = _link_function('glVertexAttrib4s', None, [GLuint, GLshort, GLshort, GLshort, GLshort], 'VERSION_2_0') + +# GL/glext.h:3781 +glVertexAttrib4sv = _link_function('glVertexAttrib4sv', None, [GLuint, POINTER(GLshort)], 'VERSION_2_0') + +# GL/glext.h:3782 +glVertexAttrib4ubv = _link_function('glVertexAttrib4ubv', None, [GLuint, POINTER(GLubyte)], 'VERSION_2_0') + +# GL/glext.h:3783 +glVertexAttrib4uiv = _link_function('glVertexAttrib4uiv', None, [GLuint, POINTER(GLuint)], 'VERSION_2_0') + +# GL/glext.h:3784 +glVertexAttrib4usv = _link_function('glVertexAttrib4usv', None, [GLuint, POINTER(GLushort)], 'VERSION_2_0') + +# GL/glext.h:3785 +glVertexAttribPointer = _link_function('glVertexAttribPointer', None, [GLuint, GLint, GLenum, GLboolean, GLsizei, POINTER(GLvoid)], 'VERSION_2_0') + +PFNGLBLENDEQUATIONSEPARATEPROC = CFUNCTYPE(None, GLenum, GLenum) # GL/glext.h:3787 +PFNGLDRAWBUFFERSPROC = CFUNCTYPE(None, GLsizei, POINTER(GLenum)) # GL/glext.h:3788 +PFNGLSTENCILOPSEPARATEPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLenum) # GL/glext.h:3789 +PFNGLSTENCILFUNCSEPARATEPROC = CFUNCTYPE(None, GLenum, GLenum, GLint, GLuint) # GL/glext.h:3790 +PFNGLSTENCILMASKSEPARATEPROC = CFUNCTYPE(None, GLenum, GLuint) # GL/glext.h:3791 +PFNGLATTACHSHADERPROC = CFUNCTYPE(None, GLuint, GLuint) # GL/glext.h:3792 +PFNGLBINDATTRIBLOCATIONPROC = CFUNCTYPE(None, GLuint, GLuint, POINTER(GLchar)) # GL/glext.h:3793 +PFNGLCOMPILESHADERPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:3794 +PFNGLCREATEPROGRAMPROC = CFUNCTYPE(GLuint) # GL/glext.h:3795 +PFNGLCREATESHADERPROC = CFUNCTYPE(GLuint, GLenum) # GL/glext.h:3796 +PFNGLDELETEPROGRAMPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:3797 +PFNGLDELETESHADERPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:3798 +PFNGLDETACHSHADERPROC = CFUNCTYPE(None, GLuint, GLuint) # GL/glext.h:3799 +PFNGLDISABLEVERTEXATTRIBARRAYPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:3800 +PFNGLENABLEVERTEXATTRIBARRAYPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:3801 +PFNGLGETACTIVEATTRIBPROC = CFUNCTYPE(None, GLuint, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLint), POINTER(GLenum), POINTER(GLchar)) # GL/glext.h:3802 +PFNGLGETACTIVEUNIFORMPROC = CFUNCTYPE(None, GLuint, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLint), POINTER(GLenum), POINTER(GLchar)) # GL/glext.h:3803 +PFNGLGETATTACHEDSHADERSPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLuint)) # GL/glext.h:3804 +PFNGLGETATTRIBLOCATIONPROC = CFUNCTYPE(GLint, GLuint, POINTER(GLchar)) # GL/glext.h:3805 +PFNGLGETPROGRAMIVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:3806 +PFNGLGETPROGRAMINFOLOGPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLchar)) # GL/glext.h:3807 +PFNGLGETSHADERIVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:3808 +PFNGLGETSHADERINFOLOGPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLchar)) # GL/glext.h:3809 +PFNGLGETSHADERSOURCEPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLchar)) # GL/glext.h:3810 +PFNGLGETUNIFORMLOCATIONPROC = CFUNCTYPE(GLint, GLuint, POINTER(GLchar)) # GL/glext.h:3811 +PFNGLGETUNIFORMFVPROC = CFUNCTYPE(None, GLuint, GLint, POINTER(GLfloat)) # GL/glext.h:3812 +PFNGLGETUNIFORMIVPROC = CFUNCTYPE(None, GLuint, GLint, POINTER(GLint)) # GL/glext.h:3813 +PFNGLGETVERTEXATTRIBDVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLdouble)) # GL/glext.h:3814 +PFNGLGETVERTEXATTRIBFVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:3815 +PFNGLGETVERTEXATTRIBIVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:3816 +PFNGLGETVERTEXATTRIBPOINTERVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(POINTER(GLvoid))) # GL/glext.h:3817 +PFNGLISPROGRAMPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:3818 +PFNGLISSHADERPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:3819 +PFNGLLINKPROGRAMPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:3820 +PFNGLSHADERSOURCEPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(POINTER(GLchar)), POINTER(GLint)) # GL/glext.h:3821 +PFNGLUSEPROGRAMPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:3822 +PFNGLUNIFORM1FPROC = CFUNCTYPE(None, GLint, GLfloat) # GL/glext.h:3823 +PFNGLUNIFORM2FPROC = CFUNCTYPE(None, GLint, GLfloat, GLfloat) # GL/glext.h:3824 +PFNGLUNIFORM3FPROC = CFUNCTYPE(None, GLint, GLfloat, GLfloat, GLfloat) # GL/glext.h:3825 +PFNGLUNIFORM4FPROC = CFUNCTYPE(None, GLint, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:3826 +PFNGLUNIFORM1IPROC = CFUNCTYPE(None, GLint, GLint) # GL/glext.h:3827 +PFNGLUNIFORM2IPROC = CFUNCTYPE(None, GLint, GLint, GLint) # GL/glext.h:3828 +PFNGLUNIFORM3IPROC = CFUNCTYPE(None, GLint, GLint, GLint, GLint) # GL/glext.h:3829 +PFNGLUNIFORM4IPROC = CFUNCTYPE(None, GLint, GLint, GLint, GLint, GLint) # GL/glext.h:3830 +PFNGLUNIFORM1FVPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLfloat)) # GL/glext.h:3831 +PFNGLUNIFORM2FVPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLfloat)) # GL/glext.h:3832 +PFNGLUNIFORM3FVPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLfloat)) # GL/glext.h:3833 +PFNGLUNIFORM4FVPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLfloat)) # GL/glext.h:3834 +PFNGLUNIFORM1IVPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLint)) # GL/glext.h:3835 +PFNGLUNIFORM2IVPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLint)) # GL/glext.h:3836 +PFNGLUNIFORM3IVPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLint)) # GL/glext.h:3837 +PFNGLUNIFORM4IVPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLint)) # GL/glext.h:3838 +PFNGLUNIFORMMATRIX2FVPROC = CFUNCTYPE(None, GLint, GLsizei, GLboolean, POINTER(GLfloat)) # GL/glext.h:3839 +PFNGLUNIFORMMATRIX3FVPROC = CFUNCTYPE(None, GLint, GLsizei, GLboolean, POINTER(GLfloat)) # GL/glext.h:3840 +PFNGLUNIFORMMATRIX4FVPROC = CFUNCTYPE(None, GLint, GLsizei, GLboolean, POINTER(GLfloat)) # GL/glext.h:3841 +PFNGLVALIDATEPROGRAMPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:3842 +PFNGLVERTEXATTRIB1DPROC = CFUNCTYPE(None, GLuint, GLdouble) # GL/glext.h:3843 +PFNGLVERTEXATTRIB1DVPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:3844 +PFNGLVERTEXATTRIB1FPROC = CFUNCTYPE(None, GLuint, GLfloat) # GL/glext.h:3845 +PFNGLVERTEXATTRIB1FVPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:3846 +PFNGLVERTEXATTRIB1SPROC = CFUNCTYPE(None, GLuint, GLshort) # GL/glext.h:3847 +PFNGLVERTEXATTRIB1SVPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:3848 +PFNGLVERTEXATTRIB2DPROC = CFUNCTYPE(None, GLuint, GLdouble, GLdouble) # GL/glext.h:3849 +PFNGLVERTEXATTRIB2DVPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:3850 +PFNGLVERTEXATTRIB2FPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat) # GL/glext.h:3851 +PFNGLVERTEXATTRIB2FVPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:3852 +PFNGLVERTEXATTRIB2SPROC = CFUNCTYPE(None, GLuint, GLshort, GLshort) # GL/glext.h:3853 +PFNGLVERTEXATTRIB2SVPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:3854 +PFNGLVERTEXATTRIB3DPROC = CFUNCTYPE(None, GLuint, GLdouble, GLdouble, GLdouble) # GL/glext.h:3855 +PFNGLVERTEXATTRIB3DVPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:3856 +PFNGLVERTEXATTRIB3FPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat) # GL/glext.h:3857 +PFNGLVERTEXATTRIB3FVPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:3858 +PFNGLVERTEXATTRIB3SPROC = CFUNCTYPE(None, GLuint, GLshort, GLshort, GLshort) # GL/glext.h:3859 +PFNGLVERTEXATTRIB3SVPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:3860 +PFNGLVERTEXATTRIB4NBVPROC = CFUNCTYPE(None, GLuint, POINTER(GLbyte)) # GL/glext.h:3861 +PFNGLVERTEXATTRIB4NIVPROC = CFUNCTYPE(None, GLuint, POINTER(GLint)) # GL/glext.h:3862 +PFNGLVERTEXATTRIB4NSVPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:3863 +PFNGLVERTEXATTRIB4NUBPROC = CFUNCTYPE(None, GLuint, GLubyte, GLubyte, GLubyte, GLubyte) # GL/glext.h:3864 +PFNGLVERTEXATTRIB4NUBVPROC = CFUNCTYPE(None, GLuint, POINTER(GLubyte)) # GL/glext.h:3865 +PFNGLVERTEXATTRIB4NUIVPROC = CFUNCTYPE(None, GLuint, POINTER(GLuint)) # GL/glext.h:3866 +PFNGLVERTEXATTRIB4NUSVPROC = CFUNCTYPE(None, GLuint, POINTER(GLushort)) # GL/glext.h:3867 +PFNGLVERTEXATTRIB4BVPROC = CFUNCTYPE(None, GLuint, POINTER(GLbyte)) # GL/glext.h:3868 +PFNGLVERTEXATTRIB4DPROC = CFUNCTYPE(None, GLuint, GLdouble, GLdouble, GLdouble, GLdouble) # GL/glext.h:3869 +PFNGLVERTEXATTRIB4DVPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:3870 +PFNGLVERTEXATTRIB4FPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:3871 +PFNGLVERTEXATTRIB4FVPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:3872 +PFNGLVERTEXATTRIB4IVPROC = CFUNCTYPE(None, GLuint, POINTER(GLint)) # GL/glext.h:3873 +PFNGLVERTEXATTRIB4SPROC = CFUNCTYPE(None, GLuint, GLshort, GLshort, GLshort, GLshort) # GL/glext.h:3874 +PFNGLVERTEXATTRIB4SVPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:3875 +PFNGLVERTEXATTRIB4UBVPROC = CFUNCTYPE(None, GLuint, POINTER(GLubyte)) # GL/glext.h:3876 +PFNGLVERTEXATTRIB4UIVPROC = CFUNCTYPE(None, GLuint, POINTER(GLuint)) # GL/glext.h:3877 +PFNGLVERTEXATTRIB4USVPROC = CFUNCTYPE(None, GLuint, POINTER(GLushort)) # GL/glext.h:3878 +PFNGLVERTEXATTRIBPOINTERPROC = CFUNCTYPE(None, GLuint, GLint, GLenum, GLboolean, GLsizei, POINTER(GLvoid)) # GL/glext.h:3879 +# VERSION_2_1 (GL/glext.h:3882) +GL_VERSION_2_1 = 1 # GL/glext.h:3883 +# GL/glext.h:3885 +glUniformMatrix2x3fv = _link_function('glUniformMatrix2x3fv', None, [GLint, GLsizei, GLboolean, POINTER(GLfloat)], 'VERSION_2_1') + +# GL/glext.h:3886 +glUniformMatrix3x2fv = _link_function('glUniformMatrix3x2fv', None, [GLint, GLsizei, GLboolean, POINTER(GLfloat)], 'VERSION_2_1') + +# GL/glext.h:3887 +glUniformMatrix2x4fv = _link_function('glUniformMatrix2x4fv', None, [GLint, GLsizei, GLboolean, POINTER(GLfloat)], 'VERSION_2_1') + +# GL/glext.h:3888 +glUniformMatrix4x2fv = _link_function('glUniformMatrix4x2fv', None, [GLint, GLsizei, GLboolean, POINTER(GLfloat)], 'VERSION_2_1') + +# GL/glext.h:3889 +glUniformMatrix3x4fv = _link_function('glUniformMatrix3x4fv', None, [GLint, GLsizei, GLboolean, POINTER(GLfloat)], 'VERSION_2_1') + +# GL/glext.h:3890 +glUniformMatrix4x3fv = _link_function('glUniformMatrix4x3fv', None, [GLint, GLsizei, GLboolean, POINTER(GLfloat)], 'VERSION_2_1') + +PFNGLUNIFORMMATRIX2X3FVPROC = CFUNCTYPE(None, GLint, GLsizei, GLboolean, POINTER(GLfloat)) # GL/glext.h:3892 +PFNGLUNIFORMMATRIX3X2FVPROC = CFUNCTYPE(None, GLint, GLsizei, GLboolean, POINTER(GLfloat)) # GL/glext.h:3893 +PFNGLUNIFORMMATRIX2X4FVPROC = CFUNCTYPE(None, GLint, GLsizei, GLboolean, POINTER(GLfloat)) # GL/glext.h:3894 +PFNGLUNIFORMMATRIX4X2FVPROC = CFUNCTYPE(None, GLint, GLsizei, GLboolean, POINTER(GLfloat)) # GL/glext.h:3895 +PFNGLUNIFORMMATRIX3X4FVPROC = CFUNCTYPE(None, GLint, GLsizei, GLboolean, POINTER(GLfloat)) # GL/glext.h:3896 +PFNGLUNIFORMMATRIX4X3FVPROC = CFUNCTYPE(None, GLint, GLsizei, GLboolean, POINTER(GLfloat)) # GL/glext.h:3897 +# ARB_multitexture (GL/glext.h:3900) +GL_ARB_multitexture = 1 # GL/glext.h:3901 +# GL/glext.h:3903 +glActiveTextureARB = _link_function('glActiveTextureARB', None, [GLenum], 'ARB_multitexture') + +# GL/glext.h:3904 +glClientActiveTextureARB = _link_function('glClientActiveTextureARB', None, [GLenum], 'ARB_multitexture') + +# GL/glext.h:3905 +glMultiTexCoord1dARB = _link_function('glMultiTexCoord1dARB', None, [GLenum, GLdouble], 'ARB_multitexture') + +# GL/glext.h:3906 +glMultiTexCoord1dvARB = _link_function('glMultiTexCoord1dvARB', None, [GLenum, POINTER(GLdouble)], 'ARB_multitexture') + +# GL/glext.h:3907 +glMultiTexCoord1fARB = _link_function('glMultiTexCoord1fARB', None, [GLenum, GLfloat], 'ARB_multitexture') + +# GL/glext.h:3908 +glMultiTexCoord1fvARB = _link_function('glMultiTexCoord1fvARB', None, [GLenum, POINTER(GLfloat)], 'ARB_multitexture') + +# GL/glext.h:3909 +glMultiTexCoord1iARB = _link_function('glMultiTexCoord1iARB', None, [GLenum, GLint], 'ARB_multitexture') + +# GL/glext.h:3910 +glMultiTexCoord1ivARB = _link_function('glMultiTexCoord1ivARB', None, [GLenum, POINTER(GLint)], 'ARB_multitexture') + +# GL/glext.h:3911 +glMultiTexCoord1sARB = _link_function('glMultiTexCoord1sARB', None, [GLenum, GLshort], 'ARB_multitexture') + +# GL/glext.h:3912 +glMultiTexCoord1svARB = _link_function('glMultiTexCoord1svARB', None, [GLenum, POINTER(GLshort)], 'ARB_multitexture') + +# GL/glext.h:3913 +glMultiTexCoord2dARB = _link_function('glMultiTexCoord2dARB', None, [GLenum, GLdouble, GLdouble], 'ARB_multitexture') + +# GL/glext.h:3914 +glMultiTexCoord2dvARB = _link_function('glMultiTexCoord2dvARB', None, [GLenum, POINTER(GLdouble)], 'ARB_multitexture') + +# GL/glext.h:3915 +glMultiTexCoord2fARB = _link_function('glMultiTexCoord2fARB', None, [GLenum, GLfloat, GLfloat], 'ARB_multitexture') + +# GL/glext.h:3916 +glMultiTexCoord2fvARB = _link_function('glMultiTexCoord2fvARB', None, [GLenum, POINTER(GLfloat)], 'ARB_multitexture') + +# GL/glext.h:3917 +glMultiTexCoord2iARB = _link_function('glMultiTexCoord2iARB', None, [GLenum, GLint, GLint], 'ARB_multitexture') + +# GL/glext.h:3918 +glMultiTexCoord2ivARB = _link_function('glMultiTexCoord2ivARB', None, [GLenum, POINTER(GLint)], 'ARB_multitexture') + +# GL/glext.h:3919 +glMultiTexCoord2sARB = _link_function('glMultiTexCoord2sARB', None, [GLenum, GLshort, GLshort], 'ARB_multitexture') + +# GL/glext.h:3920 +glMultiTexCoord2svARB = _link_function('glMultiTexCoord2svARB', None, [GLenum, POINTER(GLshort)], 'ARB_multitexture') + +# GL/glext.h:3921 +glMultiTexCoord3dARB = _link_function('glMultiTexCoord3dARB', None, [GLenum, GLdouble, GLdouble, GLdouble], 'ARB_multitexture') + +# GL/glext.h:3922 +glMultiTexCoord3dvARB = _link_function('glMultiTexCoord3dvARB', None, [GLenum, POINTER(GLdouble)], 'ARB_multitexture') + +# GL/glext.h:3923 +glMultiTexCoord3fARB = _link_function('glMultiTexCoord3fARB', None, [GLenum, GLfloat, GLfloat, GLfloat], 'ARB_multitexture') + +# GL/glext.h:3924 +glMultiTexCoord3fvARB = _link_function('glMultiTexCoord3fvARB', None, [GLenum, POINTER(GLfloat)], 'ARB_multitexture') + +# GL/glext.h:3925 +glMultiTexCoord3iARB = _link_function('glMultiTexCoord3iARB', None, [GLenum, GLint, GLint, GLint], 'ARB_multitexture') + +# GL/glext.h:3926 +glMultiTexCoord3ivARB = _link_function('glMultiTexCoord3ivARB', None, [GLenum, POINTER(GLint)], 'ARB_multitexture') + +# GL/glext.h:3927 +glMultiTexCoord3sARB = _link_function('glMultiTexCoord3sARB', None, [GLenum, GLshort, GLshort, GLshort], 'ARB_multitexture') + +# GL/glext.h:3928 +glMultiTexCoord3svARB = _link_function('glMultiTexCoord3svARB', None, [GLenum, POINTER(GLshort)], 'ARB_multitexture') + +# GL/glext.h:3929 +glMultiTexCoord4dARB = _link_function('glMultiTexCoord4dARB', None, [GLenum, GLdouble, GLdouble, GLdouble, GLdouble], 'ARB_multitexture') + +# GL/glext.h:3930 +glMultiTexCoord4dvARB = _link_function('glMultiTexCoord4dvARB', None, [GLenum, POINTER(GLdouble)], 'ARB_multitexture') + +# GL/glext.h:3931 +glMultiTexCoord4fARB = _link_function('glMultiTexCoord4fARB', None, [GLenum, GLfloat, GLfloat, GLfloat, GLfloat], 'ARB_multitexture') + +# GL/glext.h:3932 +glMultiTexCoord4fvARB = _link_function('glMultiTexCoord4fvARB', None, [GLenum, POINTER(GLfloat)], 'ARB_multitexture') + +# GL/glext.h:3933 +glMultiTexCoord4iARB = _link_function('glMultiTexCoord4iARB', None, [GLenum, GLint, GLint, GLint, GLint], 'ARB_multitexture') + +# GL/glext.h:3934 +glMultiTexCoord4ivARB = _link_function('glMultiTexCoord4ivARB', None, [GLenum, POINTER(GLint)], 'ARB_multitexture') + +# GL/glext.h:3935 +glMultiTexCoord4sARB = _link_function('glMultiTexCoord4sARB', None, [GLenum, GLshort, GLshort, GLshort, GLshort], 'ARB_multitexture') + +# GL/glext.h:3936 +glMultiTexCoord4svARB = _link_function('glMultiTexCoord4svARB', None, [GLenum, POINTER(GLshort)], 'ARB_multitexture') + +PFNGLACTIVETEXTUREARBPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:3938 +PFNGLCLIENTACTIVETEXTUREARBPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:3939 +PFNGLMULTITEXCOORD1DARBPROC = CFUNCTYPE(None, GLenum, GLdouble) # GL/glext.h:3940 +PFNGLMULTITEXCOORD1DVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:3941 +PFNGLMULTITEXCOORD1FARBPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:3942 +PFNGLMULTITEXCOORD1FVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:3943 +PFNGLMULTITEXCOORD1IARBPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:3944 +PFNGLMULTITEXCOORD1IVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:3945 +PFNGLMULTITEXCOORD1SARBPROC = CFUNCTYPE(None, GLenum, GLshort) # GL/glext.h:3946 +PFNGLMULTITEXCOORD1SVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:3947 +PFNGLMULTITEXCOORD2DARBPROC = CFUNCTYPE(None, GLenum, GLdouble, GLdouble) # GL/glext.h:3948 +PFNGLMULTITEXCOORD2DVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:3949 +PFNGLMULTITEXCOORD2FARBPROC = CFUNCTYPE(None, GLenum, GLfloat, GLfloat) # GL/glext.h:3950 +PFNGLMULTITEXCOORD2FVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:3951 +PFNGLMULTITEXCOORD2IARBPROC = CFUNCTYPE(None, GLenum, GLint, GLint) # GL/glext.h:3952 +PFNGLMULTITEXCOORD2IVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:3953 +PFNGLMULTITEXCOORD2SARBPROC = CFUNCTYPE(None, GLenum, GLshort, GLshort) # GL/glext.h:3954 +PFNGLMULTITEXCOORD2SVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:3955 +PFNGLMULTITEXCOORD3DARBPROC = CFUNCTYPE(None, GLenum, GLdouble, GLdouble, GLdouble) # GL/glext.h:3956 +PFNGLMULTITEXCOORD3DVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:3957 +PFNGLMULTITEXCOORD3FARBPROC = CFUNCTYPE(None, GLenum, GLfloat, GLfloat, GLfloat) # GL/glext.h:3958 +PFNGLMULTITEXCOORD3FVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:3959 +PFNGLMULTITEXCOORD3IARBPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint) # GL/glext.h:3960 +PFNGLMULTITEXCOORD3IVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:3961 +PFNGLMULTITEXCOORD3SARBPROC = CFUNCTYPE(None, GLenum, GLshort, GLshort, GLshort) # GL/glext.h:3962 +PFNGLMULTITEXCOORD3SVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:3963 +PFNGLMULTITEXCOORD4DARBPROC = CFUNCTYPE(None, GLenum, GLdouble, GLdouble, GLdouble, GLdouble) # GL/glext.h:3964 +PFNGLMULTITEXCOORD4DVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:3965 +PFNGLMULTITEXCOORD4FARBPROC = CFUNCTYPE(None, GLenum, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:3966 +PFNGLMULTITEXCOORD4FVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:3967 +PFNGLMULTITEXCOORD4IARBPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint) # GL/glext.h:3968 +PFNGLMULTITEXCOORD4IVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:3969 +PFNGLMULTITEXCOORD4SARBPROC = CFUNCTYPE(None, GLenum, GLshort, GLshort, GLshort, GLshort) # GL/glext.h:3970 +PFNGLMULTITEXCOORD4SVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:3971 +# ARB_transpose_matrix (GL/glext.h:3974) +GL_ARB_transpose_matrix = 1 # GL/glext.h:3975 +# GL/glext.h:3977 +glLoadTransposeMatrixfARB = _link_function('glLoadTransposeMatrixfARB', None, [POINTER(GLfloat)], 'ARB_transpose_matrix') + +# GL/glext.h:3978 +glLoadTransposeMatrixdARB = _link_function('glLoadTransposeMatrixdARB', None, [POINTER(GLdouble)], 'ARB_transpose_matrix') + +# GL/glext.h:3979 +glMultTransposeMatrixfARB = _link_function('glMultTransposeMatrixfARB', None, [POINTER(GLfloat)], 'ARB_transpose_matrix') + +# GL/glext.h:3980 +glMultTransposeMatrixdARB = _link_function('glMultTransposeMatrixdARB', None, [POINTER(GLdouble)], 'ARB_transpose_matrix') + +PFNGLLOADTRANSPOSEMATRIXFARBPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:3982 +PFNGLLOADTRANSPOSEMATRIXDARBPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:3983 +PFNGLMULTTRANSPOSEMATRIXFARBPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:3984 +PFNGLMULTTRANSPOSEMATRIXDARBPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:3985 +# ARB_multisample (GL/glext.h:3988) +GL_ARB_multisample = 1 # GL/glext.h:3989 +# GL/glext.h:3991 +glSampleCoverageARB = _link_function('glSampleCoverageARB', None, [GLclampf, GLboolean], 'ARB_multisample') + +PFNGLSAMPLECOVERAGEARBPROC = CFUNCTYPE(None, GLclampf, GLboolean) # GL/glext.h:3993 +# ARB_texture_env_add (GL/glext.h:3996) +GL_ARB_texture_env_add = 1 # GL/glext.h:3997 +# ARB_texture_cube_map (GL/glext.h:4000) +GL_ARB_texture_cube_map = 1 # GL/glext.h:4001 +# ARB_texture_compression (GL/glext.h:4004) +GL_ARB_texture_compression = 1 # GL/glext.h:4005 +# GL/glext.h:4007 +glCompressedTexImage3DARB = _link_function('glCompressedTexImage3DARB', None, [GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, POINTER(GLvoid)], 'ARB_texture_compression') + +# GL/glext.h:4008 +glCompressedTexImage2DARB = _link_function('glCompressedTexImage2DARB', None, [GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, POINTER(GLvoid)], 'ARB_texture_compression') + +# GL/glext.h:4009 +glCompressedTexImage1DARB = _link_function('glCompressedTexImage1DARB', None, [GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, POINTER(GLvoid)], 'ARB_texture_compression') + +# GL/glext.h:4010 +glCompressedTexSubImage3DARB = _link_function('glCompressedTexSubImage3DARB', None, [GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, POINTER(GLvoid)], 'ARB_texture_compression') + +# GL/glext.h:4011 +glCompressedTexSubImage2DARB = _link_function('glCompressedTexSubImage2DARB', None, [GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, POINTER(GLvoid)], 'ARB_texture_compression') + +# GL/glext.h:4012 +glCompressedTexSubImage1DARB = _link_function('glCompressedTexSubImage1DARB', None, [GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, POINTER(GLvoid)], 'ARB_texture_compression') + +# GL/glext.h:4013 +glGetCompressedTexImageARB = _link_function('glGetCompressedTexImageARB', None, [GLenum, GLint, POINTER(GLvoid)], 'ARB_texture_compression') + +PFNGLCOMPRESSEDTEXIMAGE3DARBPROC = CFUNCTYPE(None, GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, POINTER(GLvoid)) # GL/glext.h:4015 +PFNGLCOMPRESSEDTEXIMAGE2DARBPROC = CFUNCTYPE(None, GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, POINTER(GLvoid)) # GL/glext.h:4016 +PFNGLCOMPRESSEDTEXIMAGE1DARBPROC = CFUNCTYPE(None, GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, POINTER(GLvoid)) # GL/glext.h:4017 +PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:4018 +PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:4019 +PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:4020 +PFNGLGETCOMPRESSEDTEXIMAGEARBPROC = CFUNCTYPE(None, GLenum, GLint, POINTER(GLvoid)) # GL/glext.h:4021 +# ARB_texture_border_clamp (GL/glext.h:4024) +GL_ARB_texture_border_clamp = 1 # GL/glext.h:4025 +# ARB_point_parameters (GL/glext.h:4028) +GL_ARB_point_parameters = 1 # GL/glext.h:4029 +# GL/glext.h:4031 +glPointParameterfARB = _link_function('glPointParameterfARB', None, [GLenum, GLfloat], 'ARB_point_parameters') + +# GL/glext.h:4032 +glPointParameterfvARB = _link_function('glPointParameterfvARB', None, [GLenum, POINTER(GLfloat)], 'ARB_point_parameters') + +PFNGLPOINTPARAMETERFARBPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:4034 +PFNGLPOINTPARAMETERFVARBPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:4035 +# ARB_vertex_blend (GL/glext.h:4038) +GL_ARB_vertex_blend = 1 # GL/glext.h:4039 +# GL/glext.h:4041 +glWeightbvARB = _link_function('glWeightbvARB', None, [GLint, POINTER(GLbyte)], 'ARB_vertex_blend') + +# GL/glext.h:4042 +glWeightsvARB = _link_function('glWeightsvARB', None, [GLint, POINTER(GLshort)], 'ARB_vertex_blend') + +# GL/glext.h:4043 +glWeightivARB = _link_function('glWeightivARB', None, [GLint, POINTER(GLint)], 'ARB_vertex_blend') + +# GL/glext.h:4044 +glWeightfvARB = _link_function('glWeightfvARB', None, [GLint, POINTER(GLfloat)], 'ARB_vertex_blend') + +# GL/glext.h:4045 +glWeightdvARB = _link_function('glWeightdvARB', None, [GLint, POINTER(GLdouble)], 'ARB_vertex_blend') + +# GL/glext.h:4046 +glWeightubvARB = _link_function('glWeightubvARB', None, [GLint, POINTER(GLubyte)], 'ARB_vertex_blend') + +# GL/glext.h:4047 +glWeightusvARB = _link_function('glWeightusvARB', None, [GLint, POINTER(GLushort)], 'ARB_vertex_blend') + +# GL/glext.h:4048 +glWeightuivARB = _link_function('glWeightuivARB', None, [GLint, POINTER(GLuint)], 'ARB_vertex_blend') + +# GL/glext.h:4049 +glWeightPointerARB = _link_function('glWeightPointerARB', None, [GLint, GLenum, GLsizei, POINTER(GLvoid)], 'ARB_vertex_blend') + +# GL/glext.h:4050 +glVertexBlendARB = _link_function('glVertexBlendARB', None, [GLint], 'ARB_vertex_blend') + +PFNGLWEIGHTBVARBPROC = CFUNCTYPE(None, GLint, POINTER(GLbyte)) # GL/glext.h:4052 +PFNGLWEIGHTSVARBPROC = CFUNCTYPE(None, GLint, POINTER(GLshort)) # GL/glext.h:4053 +PFNGLWEIGHTIVARBPROC = CFUNCTYPE(None, GLint, POINTER(GLint)) # GL/glext.h:4054 +PFNGLWEIGHTFVARBPROC = CFUNCTYPE(None, GLint, POINTER(GLfloat)) # GL/glext.h:4055 +PFNGLWEIGHTDVARBPROC = CFUNCTYPE(None, GLint, POINTER(GLdouble)) # GL/glext.h:4056 +PFNGLWEIGHTUBVARBPROC = CFUNCTYPE(None, GLint, POINTER(GLubyte)) # GL/glext.h:4057 +PFNGLWEIGHTUSVARBPROC = CFUNCTYPE(None, GLint, POINTER(GLushort)) # GL/glext.h:4058 +PFNGLWEIGHTUIVARBPROC = CFUNCTYPE(None, GLint, POINTER(GLuint)) # GL/glext.h:4059 +PFNGLWEIGHTPOINTERARBPROC = CFUNCTYPE(None, GLint, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:4060 +PFNGLVERTEXBLENDARBPROC = CFUNCTYPE(None, GLint) # GL/glext.h:4061 +# ARB_matrix_palette (GL/glext.h:4064) +GL_ARB_matrix_palette = 1 # GL/glext.h:4065 +# GL/glext.h:4067 +glCurrentPaletteMatrixARB = _link_function('glCurrentPaletteMatrixARB', None, [GLint], 'ARB_matrix_palette') + +# GL/glext.h:4068 +glMatrixIndexubvARB = _link_function('glMatrixIndexubvARB', None, [GLint, POINTER(GLubyte)], 'ARB_matrix_palette') + +# GL/glext.h:4069 +glMatrixIndexusvARB = _link_function('glMatrixIndexusvARB', None, [GLint, POINTER(GLushort)], 'ARB_matrix_palette') + +# GL/glext.h:4070 +glMatrixIndexuivARB = _link_function('glMatrixIndexuivARB', None, [GLint, POINTER(GLuint)], 'ARB_matrix_palette') + +# GL/glext.h:4071 +glMatrixIndexPointerARB = _link_function('glMatrixIndexPointerARB', None, [GLint, GLenum, GLsizei, POINTER(GLvoid)], 'ARB_matrix_palette') + +PFNGLCURRENTPALETTEMATRIXARBPROC = CFUNCTYPE(None, GLint) # GL/glext.h:4073 +PFNGLMATRIXINDEXUBVARBPROC = CFUNCTYPE(None, GLint, POINTER(GLubyte)) # GL/glext.h:4074 +PFNGLMATRIXINDEXUSVARBPROC = CFUNCTYPE(None, GLint, POINTER(GLushort)) # GL/glext.h:4075 +PFNGLMATRIXINDEXUIVARBPROC = CFUNCTYPE(None, GLint, POINTER(GLuint)) # GL/glext.h:4076 +PFNGLMATRIXINDEXPOINTERARBPROC = CFUNCTYPE(None, GLint, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:4077 +# ARB_texture_env_combine (GL/glext.h:4080) +GL_ARB_texture_env_combine = 1 # GL/glext.h:4081 +# ARB_texture_env_crossbar (GL/glext.h:4084) +GL_ARB_texture_env_crossbar = 1 # GL/glext.h:4085 +# ARB_texture_env_dot3 (GL/glext.h:4088) +GL_ARB_texture_env_dot3 = 1 # GL/glext.h:4089 +# ARB_texture_mirrored_repeat (GL/glext.h:4092) +GL_ARB_texture_mirrored_repeat = 1 # GL/glext.h:4093 +# ARB_depth_texture (GL/glext.h:4096) +GL_ARB_depth_texture = 1 # GL/glext.h:4097 +# ARB_shadow (GL/glext.h:4100) +GL_ARB_shadow = 1 # GL/glext.h:4101 +# ARB_shadow_ambient (GL/glext.h:4104) +GL_ARB_shadow_ambient = 1 # GL/glext.h:4105 +# ARB_window_pos (GL/glext.h:4108) +GL_ARB_window_pos = 1 # GL/glext.h:4109 +# GL/glext.h:4111 +glWindowPos2dARB = _link_function('glWindowPos2dARB', None, [GLdouble, GLdouble], 'ARB_window_pos') + +# GL/glext.h:4112 +glWindowPos2dvARB = _link_function('glWindowPos2dvARB', None, [POINTER(GLdouble)], 'ARB_window_pos') + +# GL/glext.h:4113 +glWindowPos2fARB = _link_function('glWindowPos2fARB', None, [GLfloat, GLfloat], 'ARB_window_pos') + +# GL/glext.h:4114 +glWindowPos2fvARB = _link_function('glWindowPos2fvARB', None, [POINTER(GLfloat)], 'ARB_window_pos') + +# GL/glext.h:4115 +glWindowPos2iARB = _link_function('glWindowPos2iARB', None, [GLint, GLint], 'ARB_window_pos') + +# GL/glext.h:4116 +glWindowPos2ivARB = _link_function('glWindowPos2ivARB', None, [POINTER(GLint)], 'ARB_window_pos') + +# GL/glext.h:4117 +glWindowPos2sARB = _link_function('glWindowPos2sARB', None, [GLshort, GLshort], 'ARB_window_pos') + +# GL/glext.h:4118 +glWindowPos2svARB = _link_function('glWindowPos2svARB', None, [POINTER(GLshort)], 'ARB_window_pos') + +# GL/glext.h:4119 +glWindowPos3dARB = _link_function('glWindowPos3dARB', None, [GLdouble, GLdouble, GLdouble], 'ARB_window_pos') + +# GL/glext.h:4120 +glWindowPos3dvARB = _link_function('glWindowPos3dvARB', None, [POINTER(GLdouble)], 'ARB_window_pos') + +# GL/glext.h:4121 +glWindowPos3fARB = _link_function('glWindowPos3fARB', None, [GLfloat, GLfloat, GLfloat], 'ARB_window_pos') + +# GL/glext.h:4122 +glWindowPos3fvARB = _link_function('glWindowPos3fvARB', None, [POINTER(GLfloat)], 'ARB_window_pos') + +# GL/glext.h:4123 +glWindowPos3iARB = _link_function('glWindowPos3iARB', None, [GLint, GLint, GLint], 'ARB_window_pos') + +# GL/glext.h:4124 +glWindowPos3ivARB = _link_function('glWindowPos3ivARB', None, [POINTER(GLint)], 'ARB_window_pos') + +# GL/glext.h:4125 +glWindowPos3sARB = _link_function('glWindowPos3sARB', None, [GLshort, GLshort, GLshort], 'ARB_window_pos') + +# GL/glext.h:4126 +glWindowPos3svARB = _link_function('glWindowPos3svARB', None, [POINTER(GLshort)], 'ARB_window_pos') + +PFNGLWINDOWPOS2DARBPROC = CFUNCTYPE(None, GLdouble, GLdouble) # GL/glext.h:4128 +PFNGLWINDOWPOS2DVARBPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:4129 +PFNGLWINDOWPOS2FARBPROC = CFUNCTYPE(None, GLfloat, GLfloat) # GL/glext.h:4130 +PFNGLWINDOWPOS2FVARBPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:4131 +PFNGLWINDOWPOS2IARBPROC = CFUNCTYPE(None, GLint, GLint) # GL/glext.h:4132 +PFNGLWINDOWPOS2IVARBPROC = CFUNCTYPE(None, POINTER(GLint)) # GL/glext.h:4133 +PFNGLWINDOWPOS2SARBPROC = CFUNCTYPE(None, GLshort, GLshort) # GL/glext.h:4134 +PFNGLWINDOWPOS2SVARBPROC = CFUNCTYPE(None, POINTER(GLshort)) # GL/glext.h:4135 +PFNGLWINDOWPOS3DARBPROC = CFUNCTYPE(None, GLdouble, GLdouble, GLdouble) # GL/glext.h:4136 +PFNGLWINDOWPOS3DVARBPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:4137 +PFNGLWINDOWPOS3FARBPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat) # GL/glext.h:4138 +PFNGLWINDOWPOS3FVARBPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:4139 +PFNGLWINDOWPOS3IARBPROC = CFUNCTYPE(None, GLint, GLint, GLint) # GL/glext.h:4140 +PFNGLWINDOWPOS3IVARBPROC = CFUNCTYPE(None, POINTER(GLint)) # GL/glext.h:4141 +PFNGLWINDOWPOS3SARBPROC = CFUNCTYPE(None, GLshort, GLshort, GLshort) # GL/glext.h:4142 +PFNGLWINDOWPOS3SVARBPROC = CFUNCTYPE(None, POINTER(GLshort)) # GL/glext.h:4143 +# ARB_vertex_program (GL/glext.h:4146) +GL_ARB_vertex_program = 1 # GL/glext.h:4147 +# GL/glext.h:4149 +glVertexAttrib1dARB = _link_function('glVertexAttrib1dARB', None, [GLuint, GLdouble], 'ARB_vertex_program') + +# GL/glext.h:4150 +glVertexAttrib1dvARB = _link_function('glVertexAttrib1dvARB', None, [GLuint, POINTER(GLdouble)], 'ARB_vertex_program') + +# GL/glext.h:4151 +glVertexAttrib1fARB = _link_function('glVertexAttrib1fARB', None, [GLuint, GLfloat], 'ARB_vertex_program') + +# GL/glext.h:4152 +glVertexAttrib1fvARB = _link_function('glVertexAttrib1fvARB', None, [GLuint, POINTER(GLfloat)], 'ARB_vertex_program') + +# GL/glext.h:4153 +glVertexAttrib1sARB = _link_function('glVertexAttrib1sARB', None, [GLuint, GLshort], 'ARB_vertex_program') + +# GL/glext.h:4154 +glVertexAttrib1svARB = _link_function('glVertexAttrib1svARB', None, [GLuint, POINTER(GLshort)], 'ARB_vertex_program') + +# GL/glext.h:4155 +glVertexAttrib2dARB = _link_function('glVertexAttrib2dARB', None, [GLuint, GLdouble, GLdouble], 'ARB_vertex_program') + +# GL/glext.h:4156 +glVertexAttrib2dvARB = _link_function('glVertexAttrib2dvARB', None, [GLuint, POINTER(GLdouble)], 'ARB_vertex_program') + +# GL/glext.h:4157 +glVertexAttrib2fARB = _link_function('glVertexAttrib2fARB', None, [GLuint, GLfloat, GLfloat], 'ARB_vertex_program') + +# GL/glext.h:4158 +glVertexAttrib2fvARB = _link_function('glVertexAttrib2fvARB', None, [GLuint, POINTER(GLfloat)], 'ARB_vertex_program') + +# GL/glext.h:4159 +glVertexAttrib2sARB = _link_function('glVertexAttrib2sARB', None, [GLuint, GLshort, GLshort], 'ARB_vertex_program') + +# GL/glext.h:4160 +glVertexAttrib2svARB = _link_function('glVertexAttrib2svARB', None, [GLuint, POINTER(GLshort)], 'ARB_vertex_program') + +# GL/glext.h:4161 +glVertexAttrib3dARB = _link_function('glVertexAttrib3dARB', None, [GLuint, GLdouble, GLdouble, GLdouble], 'ARB_vertex_program') + +# GL/glext.h:4162 +glVertexAttrib3dvARB = _link_function('glVertexAttrib3dvARB', None, [GLuint, POINTER(GLdouble)], 'ARB_vertex_program') + +# GL/glext.h:4163 +glVertexAttrib3fARB = _link_function('glVertexAttrib3fARB', None, [GLuint, GLfloat, GLfloat, GLfloat], 'ARB_vertex_program') + +# GL/glext.h:4164 +glVertexAttrib3fvARB = _link_function('glVertexAttrib3fvARB', None, [GLuint, POINTER(GLfloat)], 'ARB_vertex_program') + +# GL/glext.h:4165 +glVertexAttrib3sARB = _link_function('glVertexAttrib3sARB', None, [GLuint, GLshort, GLshort, GLshort], 'ARB_vertex_program') + +# GL/glext.h:4166 +glVertexAttrib3svARB = _link_function('glVertexAttrib3svARB', None, [GLuint, POINTER(GLshort)], 'ARB_vertex_program') + +# GL/glext.h:4167 +glVertexAttrib4NbvARB = _link_function('glVertexAttrib4NbvARB', None, [GLuint, POINTER(GLbyte)], 'ARB_vertex_program') + +# GL/glext.h:4168 +glVertexAttrib4NivARB = _link_function('glVertexAttrib4NivARB', None, [GLuint, POINTER(GLint)], 'ARB_vertex_program') + +# GL/glext.h:4169 +glVertexAttrib4NsvARB = _link_function('glVertexAttrib4NsvARB', None, [GLuint, POINTER(GLshort)], 'ARB_vertex_program') + +# GL/glext.h:4170 +glVertexAttrib4NubARB = _link_function('glVertexAttrib4NubARB', None, [GLuint, GLubyte, GLubyte, GLubyte, GLubyte], 'ARB_vertex_program') + +# GL/glext.h:4171 +glVertexAttrib4NubvARB = _link_function('glVertexAttrib4NubvARB', None, [GLuint, POINTER(GLubyte)], 'ARB_vertex_program') + +# GL/glext.h:4172 +glVertexAttrib4NuivARB = _link_function('glVertexAttrib4NuivARB', None, [GLuint, POINTER(GLuint)], 'ARB_vertex_program') + +# GL/glext.h:4173 +glVertexAttrib4NusvARB = _link_function('glVertexAttrib4NusvARB', None, [GLuint, POINTER(GLushort)], 'ARB_vertex_program') + +# GL/glext.h:4174 +glVertexAttrib4bvARB = _link_function('glVertexAttrib4bvARB', None, [GLuint, POINTER(GLbyte)], 'ARB_vertex_program') + +# GL/glext.h:4175 +glVertexAttrib4dARB = _link_function('glVertexAttrib4dARB', None, [GLuint, GLdouble, GLdouble, GLdouble, GLdouble], 'ARB_vertex_program') + +# GL/glext.h:4176 +glVertexAttrib4dvARB = _link_function('glVertexAttrib4dvARB', None, [GLuint, POINTER(GLdouble)], 'ARB_vertex_program') + +# GL/glext.h:4177 +glVertexAttrib4fARB = _link_function('glVertexAttrib4fARB', None, [GLuint, GLfloat, GLfloat, GLfloat, GLfloat], 'ARB_vertex_program') + +# GL/glext.h:4178 +glVertexAttrib4fvARB = _link_function('glVertexAttrib4fvARB', None, [GLuint, POINTER(GLfloat)], 'ARB_vertex_program') + +# GL/glext.h:4179 +glVertexAttrib4ivARB = _link_function('glVertexAttrib4ivARB', None, [GLuint, POINTER(GLint)], 'ARB_vertex_program') + +# GL/glext.h:4180 +glVertexAttrib4sARB = _link_function('glVertexAttrib4sARB', None, [GLuint, GLshort, GLshort, GLshort, GLshort], 'ARB_vertex_program') + +# GL/glext.h:4181 +glVertexAttrib4svARB = _link_function('glVertexAttrib4svARB', None, [GLuint, POINTER(GLshort)], 'ARB_vertex_program') + +# GL/glext.h:4182 +glVertexAttrib4ubvARB = _link_function('glVertexAttrib4ubvARB', None, [GLuint, POINTER(GLubyte)], 'ARB_vertex_program') + +# GL/glext.h:4183 +glVertexAttrib4uivARB = _link_function('glVertexAttrib4uivARB', None, [GLuint, POINTER(GLuint)], 'ARB_vertex_program') + +# GL/glext.h:4184 +glVertexAttrib4usvARB = _link_function('glVertexAttrib4usvARB', None, [GLuint, POINTER(GLushort)], 'ARB_vertex_program') + +# GL/glext.h:4185 +glVertexAttribPointerARB = _link_function('glVertexAttribPointerARB', None, [GLuint, GLint, GLenum, GLboolean, GLsizei, POINTER(GLvoid)], 'ARB_vertex_program') + +# GL/glext.h:4186 +glEnableVertexAttribArrayARB = _link_function('glEnableVertexAttribArrayARB', None, [GLuint], 'ARB_vertex_program') + +# GL/glext.h:4187 +glDisableVertexAttribArrayARB = _link_function('glDisableVertexAttribArrayARB', None, [GLuint], 'ARB_vertex_program') + +# GL/glext.h:4188 +glProgramStringARB = _link_function('glProgramStringARB', None, [GLenum, GLenum, GLsizei, POINTER(GLvoid)], 'ARB_vertex_program') + +# GL/glext.h:4189 +glBindProgramARB = _link_function('glBindProgramARB', None, [GLenum, GLuint], 'ARB_vertex_program') + +# GL/glext.h:4190 +glDeleteProgramsARB = _link_function('glDeleteProgramsARB', None, [GLsizei, POINTER(GLuint)], 'ARB_vertex_program') + +# GL/glext.h:4191 +glGenProgramsARB = _link_function('glGenProgramsARB', None, [GLsizei, POINTER(GLuint)], 'ARB_vertex_program') + +# GL/glext.h:4192 +glProgramEnvParameter4dARB = _link_function('glProgramEnvParameter4dARB', None, [GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble], 'ARB_vertex_program') + +# GL/glext.h:4193 +glProgramEnvParameter4dvARB = _link_function('glProgramEnvParameter4dvARB', None, [GLenum, GLuint, POINTER(GLdouble)], 'ARB_vertex_program') + +# GL/glext.h:4194 +glProgramEnvParameter4fARB = _link_function('glProgramEnvParameter4fARB', None, [GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat], 'ARB_vertex_program') + +# GL/glext.h:4195 +glProgramEnvParameter4fvARB = _link_function('glProgramEnvParameter4fvARB', None, [GLenum, GLuint, POINTER(GLfloat)], 'ARB_vertex_program') + +# GL/glext.h:4196 +glProgramLocalParameter4dARB = _link_function('glProgramLocalParameter4dARB', None, [GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble], 'ARB_vertex_program') + +# GL/glext.h:4197 +glProgramLocalParameter4dvARB = _link_function('glProgramLocalParameter4dvARB', None, [GLenum, GLuint, POINTER(GLdouble)], 'ARB_vertex_program') + +# GL/glext.h:4198 +glProgramLocalParameter4fARB = _link_function('glProgramLocalParameter4fARB', None, [GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat], 'ARB_vertex_program') + +# GL/glext.h:4199 +glProgramLocalParameter4fvARB = _link_function('glProgramLocalParameter4fvARB', None, [GLenum, GLuint, POINTER(GLfloat)], 'ARB_vertex_program') + +# GL/glext.h:4200 +glGetProgramEnvParameterdvARB = _link_function('glGetProgramEnvParameterdvARB', None, [GLenum, GLuint, POINTER(GLdouble)], 'ARB_vertex_program') + +# GL/glext.h:4201 +glGetProgramEnvParameterfvARB = _link_function('glGetProgramEnvParameterfvARB', None, [GLenum, GLuint, POINTER(GLfloat)], 'ARB_vertex_program') + +# GL/glext.h:4202 +glGetProgramLocalParameterdvARB = _link_function('glGetProgramLocalParameterdvARB', None, [GLenum, GLuint, POINTER(GLdouble)], 'ARB_vertex_program') + +# GL/glext.h:4203 +glGetProgramLocalParameterfvARB = _link_function('glGetProgramLocalParameterfvARB', None, [GLenum, GLuint, POINTER(GLfloat)], 'ARB_vertex_program') + +# GL/glext.h:4204 +glGetProgramivARB = _link_function('glGetProgramivARB', None, [GLenum, GLenum, POINTER(GLint)], 'ARB_vertex_program') + +# GL/glext.h:4205 +glGetProgramStringARB = _link_function('glGetProgramStringARB', None, [GLenum, GLenum, POINTER(GLvoid)], 'ARB_vertex_program') + +# GL/glext.h:4206 +glGetVertexAttribdvARB = _link_function('glGetVertexAttribdvARB', None, [GLuint, GLenum, POINTER(GLdouble)], 'ARB_vertex_program') + +# GL/glext.h:4207 +glGetVertexAttribfvARB = _link_function('glGetVertexAttribfvARB', None, [GLuint, GLenum, POINTER(GLfloat)], 'ARB_vertex_program') + +# GL/glext.h:4208 +glGetVertexAttribivARB = _link_function('glGetVertexAttribivARB', None, [GLuint, GLenum, POINTER(GLint)], 'ARB_vertex_program') + +# GL/glext.h:4209 +glGetVertexAttribPointervARB = _link_function('glGetVertexAttribPointervARB', None, [GLuint, GLenum, POINTER(POINTER(GLvoid))], 'ARB_vertex_program') + +# GL/glext.h:4210 +glIsProgramARB = _link_function('glIsProgramARB', GLboolean, [GLuint], 'ARB_vertex_program') + +PFNGLVERTEXATTRIB1DARBPROC = CFUNCTYPE(None, GLuint, GLdouble) # GL/glext.h:4212 +PFNGLVERTEXATTRIB1DVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:4213 +PFNGLVERTEXATTRIB1FARBPROC = CFUNCTYPE(None, GLuint, GLfloat) # GL/glext.h:4214 +PFNGLVERTEXATTRIB1FVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:4215 +PFNGLVERTEXATTRIB1SARBPROC = CFUNCTYPE(None, GLuint, GLshort) # GL/glext.h:4216 +PFNGLVERTEXATTRIB1SVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:4217 +PFNGLVERTEXATTRIB2DARBPROC = CFUNCTYPE(None, GLuint, GLdouble, GLdouble) # GL/glext.h:4218 +PFNGLVERTEXATTRIB2DVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:4219 +PFNGLVERTEXATTRIB2FARBPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat) # GL/glext.h:4220 +PFNGLVERTEXATTRIB2FVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:4221 +PFNGLVERTEXATTRIB2SARBPROC = CFUNCTYPE(None, GLuint, GLshort, GLshort) # GL/glext.h:4222 +PFNGLVERTEXATTRIB2SVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:4223 +PFNGLVERTEXATTRIB3DARBPROC = CFUNCTYPE(None, GLuint, GLdouble, GLdouble, GLdouble) # GL/glext.h:4224 +PFNGLVERTEXATTRIB3DVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:4225 +PFNGLVERTEXATTRIB3FARBPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat) # GL/glext.h:4226 +PFNGLVERTEXATTRIB3FVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:4227 +PFNGLVERTEXATTRIB3SARBPROC = CFUNCTYPE(None, GLuint, GLshort, GLshort, GLshort) # GL/glext.h:4228 +PFNGLVERTEXATTRIB3SVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:4229 +PFNGLVERTEXATTRIB4NBVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLbyte)) # GL/glext.h:4230 +PFNGLVERTEXATTRIB4NIVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLint)) # GL/glext.h:4231 +PFNGLVERTEXATTRIB4NSVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:4232 +PFNGLVERTEXATTRIB4NUBARBPROC = CFUNCTYPE(None, GLuint, GLubyte, GLubyte, GLubyte, GLubyte) # GL/glext.h:4233 +PFNGLVERTEXATTRIB4NUBVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLubyte)) # GL/glext.h:4234 +PFNGLVERTEXATTRIB4NUIVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLuint)) # GL/glext.h:4235 +PFNGLVERTEXATTRIB4NUSVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLushort)) # GL/glext.h:4236 +PFNGLVERTEXATTRIB4BVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLbyte)) # GL/glext.h:4237 +PFNGLVERTEXATTRIB4DARBPROC = CFUNCTYPE(None, GLuint, GLdouble, GLdouble, GLdouble, GLdouble) # GL/glext.h:4238 +PFNGLVERTEXATTRIB4DVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:4239 +PFNGLVERTEXATTRIB4FARBPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:4240 +PFNGLVERTEXATTRIB4FVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:4241 +PFNGLVERTEXATTRIB4IVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLint)) # GL/glext.h:4242 +PFNGLVERTEXATTRIB4SARBPROC = CFUNCTYPE(None, GLuint, GLshort, GLshort, GLshort, GLshort) # GL/glext.h:4243 +PFNGLVERTEXATTRIB4SVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:4244 +PFNGLVERTEXATTRIB4UBVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLubyte)) # GL/glext.h:4245 +PFNGLVERTEXATTRIB4UIVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLuint)) # GL/glext.h:4246 +PFNGLVERTEXATTRIB4USVARBPROC = CFUNCTYPE(None, GLuint, POINTER(GLushort)) # GL/glext.h:4247 +PFNGLVERTEXATTRIBPOINTERARBPROC = CFUNCTYPE(None, GLuint, GLint, GLenum, GLboolean, GLsizei, POINTER(GLvoid)) # GL/glext.h:4248 +PFNGLENABLEVERTEXATTRIBARRAYARBPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:4249 +PFNGLDISABLEVERTEXATTRIBARRAYARBPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:4250 +PFNGLPROGRAMSTRINGARBPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:4251 +PFNGLBINDPROGRAMARBPROC = CFUNCTYPE(None, GLenum, GLuint) # GL/glext.h:4252 +PFNGLDELETEPROGRAMSARBPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:4253 +PFNGLGENPROGRAMSARBPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:4254 +PFNGLPROGRAMENVPARAMETER4DARBPROC = CFUNCTYPE(None, GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble) # GL/glext.h:4255 +PFNGLPROGRAMENVPARAMETER4DVARBPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLdouble)) # GL/glext.h:4256 +PFNGLPROGRAMENVPARAMETER4FARBPROC = CFUNCTYPE(None, GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:4257 +PFNGLPROGRAMENVPARAMETER4FVARBPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLfloat)) # GL/glext.h:4258 +PFNGLPROGRAMLOCALPARAMETER4DARBPROC = CFUNCTYPE(None, GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble) # GL/glext.h:4259 +PFNGLPROGRAMLOCALPARAMETER4DVARBPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLdouble)) # GL/glext.h:4260 +PFNGLPROGRAMLOCALPARAMETER4FARBPROC = CFUNCTYPE(None, GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:4261 +PFNGLPROGRAMLOCALPARAMETER4FVARBPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLfloat)) # GL/glext.h:4262 +PFNGLGETPROGRAMENVPARAMETERDVARBPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLdouble)) # GL/glext.h:4263 +PFNGLGETPROGRAMENVPARAMETERFVARBPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLfloat)) # GL/glext.h:4264 +PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLdouble)) # GL/glext.h:4265 +PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLfloat)) # GL/glext.h:4266 +PFNGLGETPROGRAMIVARBPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4267 +PFNGLGETPROGRAMSTRINGARBPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4268 +PFNGLGETVERTEXATTRIBDVARBPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLdouble)) # GL/glext.h:4269 +PFNGLGETVERTEXATTRIBFVARBPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:4270 +PFNGLGETVERTEXATTRIBIVARBPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:4271 +PFNGLGETVERTEXATTRIBPOINTERVARBPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(POINTER(GLvoid))) # GL/glext.h:4272 +PFNGLISPROGRAMARBPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:4273 +# ARB_fragment_program (GL/glext.h:4276) +GL_ARB_fragment_program = 1 # GL/glext.h:4277 +# ARB_vertex_buffer_object (GL/glext.h:4281) +GL_ARB_vertex_buffer_object = 1 # GL/glext.h:4282 +# GL/glext.h:4284 +glBindBufferARB = _link_function('glBindBufferARB', None, [GLenum, GLuint], 'ARB_vertex_buffer_object') + +# GL/glext.h:4285 +glDeleteBuffersARB = _link_function('glDeleteBuffersARB', None, [GLsizei, POINTER(GLuint)], 'ARB_vertex_buffer_object') + +# GL/glext.h:4286 +glGenBuffersARB = _link_function('glGenBuffersARB', None, [GLsizei, POINTER(GLuint)], 'ARB_vertex_buffer_object') + +# GL/glext.h:4287 +glIsBufferARB = _link_function('glIsBufferARB', GLboolean, [GLuint], 'ARB_vertex_buffer_object') + +# GL/glext.h:4288 +glBufferDataARB = _link_function('glBufferDataARB', None, [GLenum, GLsizeiptrARB, POINTER(GLvoid), GLenum], 'ARB_vertex_buffer_object') + +# GL/glext.h:4289 +glBufferSubDataARB = _link_function('glBufferSubDataARB', None, [GLenum, GLintptrARB, GLsizeiptrARB, POINTER(GLvoid)], 'ARB_vertex_buffer_object') + +# GL/glext.h:4290 +glGetBufferSubDataARB = _link_function('glGetBufferSubDataARB', None, [GLenum, GLintptrARB, GLsizeiptrARB, POINTER(GLvoid)], 'ARB_vertex_buffer_object') + +# GL/glext.h:4291 +glMapBufferARB = _link_function('glMapBufferARB', POINTER(GLvoid), [GLenum, GLenum], 'ARB_vertex_buffer_object') + +# GL/glext.h:4292 +glUnmapBufferARB = _link_function('glUnmapBufferARB', GLboolean, [GLenum], 'ARB_vertex_buffer_object') + +# GL/glext.h:4293 +glGetBufferParameterivARB = _link_function('glGetBufferParameterivARB', None, [GLenum, GLenum, POINTER(GLint)], 'ARB_vertex_buffer_object') + +# GL/glext.h:4294 +glGetBufferPointervARB = _link_function('glGetBufferPointervARB', None, [GLenum, GLenum, POINTER(POINTER(GLvoid))], 'ARB_vertex_buffer_object') + +PFNGLBINDBUFFERARBPROC = CFUNCTYPE(None, GLenum, GLuint) # GL/glext.h:4296 +PFNGLDELETEBUFFERSARBPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:4297 +PFNGLGENBUFFERSARBPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:4298 +PFNGLISBUFFERARBPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:4299 +PFNGLBUFFERDATAARBPROC = CFUNCTYPE(None, GLenum, GLsizeiptrARB, POINTER(GLvoid), GLenum) # GL/glext.h:4300 +PFNGLBUFFERSUBDATAARBPROC = CFUNCTYPE(None, GLenum, GLintptrARB, GLsizeiptrARB, POINTER(GLvoid)) # GL/glext.h:4301 +PFNGLGETBUFFERSUBDATAARBPROC = CFUNCTYPE(None, GLenum, GLintptrARB, GLsizeiptrARB, POINTER(GLvoid)) # GL/glext.h:4302 +PFNGLMAPBUFFERARBPROC = CFUNCTYPE(POINTER(GLvoid), GLenum, GLenum) # GL/glext.h:4303 +PFNGLUNMAPBUFFERARBPROC = CFUNCTYPE(GLboolean, GLenum) # GL/glext.h:4304 +PFNGLGETBUFFERPARAMETERIVARBPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4305 +PFNGLGETBUFFERPOINTERVARBPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(POINTER(GLvoid))) # GL/glext.h:4306 +# ARB_occlusion_query (GL/glext.h:4309) +GL_ARB_occlusion_query = 1 # GL/glext.h:4310 +# GL/glext.h:4312 +glGenQueriesARB = _link_function('glGenQueriesARB', None, [GLsizei, POINTER(GLuint)], 'ARB_occlusion_query') + +# GL/glext.h:4313 +glDeleteQueriesARB = _link_function('glDeleteQueriesARB', None, [GLsizei, POINTER(GLuint)], 'ARB_occlusion_query') + +# GL/glext.h:4314 +glIsQueryARB = _link_function('glIsQueryARB', GLboolean, [GLuint], 'ARB_occlusion_query') + +# GL/glext.h:4315 +glBeginQueryARB = _link_function('glBeginQueryARB', None, [GLenum, GLuint], 'ARB_occlusion_query') + +# GL/glext.h:4316 +glEndQueryARB = _link_function('glEndQueryARB', None, [GLenum], 'ARB_occlusion_query') + +# GL/glext.h:4317 +glGetQueryivARB = _link_function('glGetQueryivARB', None, [GLenum, GLenum, POINTER(GLint)], 'ARB_occlusion_query') + +# GL/glext.h:4318 +glGetQueryObjectivARB = _link_function('glGetQueryObjectivARB', None, [GLuint, GLenum, POINTER(GLint)], 'ARB_occlusion_query') + +# GL/glext.h:4319 +glGetQueryObjectuivARB = _link_function('glGetQueryObjectuivARB', None, [GLuint, GLenum, POINTER(GLuint)], 'ARB_occlusion_query') + +PFNGLGENQUERIESARBPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:4321 +PFNGLDELETEQUERIESARBPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:4322 +PFNGLISQUERYARBPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:4323 +PFNGLBEGINQUERYARBPROC = CFUNCTYPE(None, GLenum, GLuint) # GL/glext.h:4324 +PFNGLENDQUERYARBPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:4325 +PFNGLGETQUERYIVARBPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4326 +PFNGLGETQUERYOBJECTIVARBPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:4327 +PFNGLGETQUERYOBJECTUIVARBPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLuint)) # GL/glext.h:4328 +# ARB_shader_objects (GL/glext.h:4331) +GL_ARB_shader_objects = 1 # GL/glext.h:4332 +# GL/glext.h:4334 +glDeleteObjectARB = _link_function('glDeleteObjectARB', None, [GLhandleARB], 'ARB_shader_objects') + +# GL/glext.h:4335 +glGetHandleARB = _link_function('glGetHandleARB', GLhandleARB, [GLenum], 'ARB_shader_objects') + +# GL/glext.h:4336 +glDetachObjectARB = _link_function('glDetachObjectARB', None, [GLhandleARB, GLhandleARB], 'ARB_shader_objects') + +# GL/glext.h:4337 +glCreateShaderObjectARB = _link_function('glCreateShaderObjectARB', GLhandleARB, [GLenum], 'ARB_shader_objects') + +# GL/glext.h:4338 +glShaderSourceARB = _link_function('glShaderSourceARB', None, [GLhandleARB, GLsizei, POINTER(POINTER(GLcharARB)), POINTER(GLint)], 'ARB_shader_objects') + +# GL/glext.h:4339 +glCompileShaderARB = _link_function('glCompileShaderARB', None, [GLhandleARB], 'ARB_shader_objects') + +# GL/glext.h:4340 +glCreateProgramObjectARB = _link_function('glCreateProgramObjectARB', GLhandleARB, [], 'ARB_shader_objects') + +# GL/glext.h:4341 +glAttachObjectARB = _link_function('glAttachObjectARB', None, [GLhandleARB, GLhandleARB], 'ARB_shader_objects') + +# GL/glext.h:4342 +glLinkProgramARB = _link_function('glLinkProgramARB', None, [GLhandleARB], 'ARB_shader_objects') + +# GL/glext.h:4343 +glUseProgramObjectARB = _link_function('glUseProgramObjectARB', None, [GLhandleARB], 'ARB_shader_objects') + +# GL/glext.h:4344 +glValidateProgramARB = _link_function('glValidateProgramARB', None, [GLhandleARB], 'ARB_shader_objects') + +# GL/glext.h:4345 +glUniform1fARB = _link_function('glUniform1fARB', None, [GLint, GLfloat], 'ARB_shader_objects') + +# GL/glext.h:4346 +glUniform2fARB = _link_function('glUniform2fARB', None, [GLint, GLfloat, GLfloat], 'ARB_shader_objects') + +# GL/glext.h:4347 +glUniform3fARB = _link_function('glUniform3fARB', None, [GLint, GLfloat, GLfloat, GLfloat], 'ARB_shader_objects') + +# GL/glext.h:4348 +glUniform4fARB = _link_function('glUniform4fARB', None, [GLint, GLfloat, GLfloat, GLfloat, GLfloat], 'ARB_shader_objects') + +# GL/glext.h:4349 +glUniform1iARB = _link_function('glUniform1iARB', None, [GLint, GLint], 'ARB_shader_objects') + +# GL/glext.h:4350 +glUniform2iARB = _link_function('glUniform2iARB', None, [GLint, GLint, GLint], 'ARB_shader_objects') + +# GL/glext.h:4351 +glUniform3iARB = _link_function('glUniform3iARB', None, [GLint, GLint, GLint, GLint], 'ARB_shader_objects') + +# GL/glext.h:4352 +glUniform4iARB = _link_function('glUniform4iARB', None, [GLint, GLint, GLint, GLint, GLint], 'ARB_shader_objects') + +# GL/glext.h:4353 +glUniform1fvARB = _link_function('glUniform1fvARB', None, [GLint, GLsizei, POINTER(GLfloat)], 'ARB_shader_objects') + +# GL/glext.h:4354 +glUniform2fvARB = _link_function('glUniform2fvARB', None, [GLint, GLsizei, POINTER(GLfloat)], 'ARB_shader_objects') + +# GL/glext.h:4355 +glUniform3fvARB = _link_function('glUniform3fvARB', None, [GLint, GLsizei, POINTER(GLfloat)], 'ARB_shader_objects') + +# GL/glext.h:4356 +glUniform4fvARB = _link_function('glUniform4fvARB', None, [GLint, GLsizei, POINTER(GLfloat)], 'ARB_shader_objects') + +# GL/glext.h:4357 +glUniform1ivARB = _link_function('glUniform1ivARB', None, [GLint, GLsizei, POINTER(GLint)], 'ARB_shader_objects') + +# GL/glext.h:4358 +glUniform2ivARB = _link_function('glUniform2ivARB', None, [GLint, GLsizei, POINTER(GLint)], 'ARB_shader_objects') + +# GL/glext.h:4359 +glUniform3ivARB = _link_function('glUniform3ivARB', None, [GLint, GLsizei, POINTER(GLint)], 'ARB_shader_objects') + +# GL/glext.h:4360 +glUniform4ivARB = _link_function('glUniform4ivARB', None, [GLint, GLsizei, POINTER(GLint)], 'ARB_shader_objects') + +# GL/glext.h:4361 +glUniformMatrix2fvARB = _link_function('glUniformMatrix2fvARB', None, [GLint, GLsizei, GLboolean, POINTER(GLfloat)], 'ARB_shader_objects') + +# GL/glext.h:4362 +glUniformMatrix3fvARB = _link_function('glUniformMatrix3fvARB', None, [GLint, GLsizei, GLboolean, POINTER(GLfloat)], 'ARB_shader_objects') + +# GL/glext.h:4363 +glUniformMatrix4fvARB = _link_function('glUniformMatrix4fvARB', None, [GLint, GLsizei, GLboolean, POINTER(GLfloat)], 'ARB_shader_objects') + +# GL/glext.h:4364 +glGetObjectParameterfvARB = _link_function('glGetObjectParameterfvARB', None, [GLhandleARB, GLenum, POINTER(GLfloat)], 'ARB_shader_objects') + +# GL/glext.h:4365 +glGetObjectParameterivARB = _link_function('glGetObjectParameterivARB', None, [GLhandleARB, GLenum, POINTER(GLint)], 'ARB_shader_objects') + +# GL/glext.h:4366 +glGetInfoLogARB = _link_function('glGetInfoLogARB', None, [GLhandleARB, GLsizei, POINTER(GLsizei), POINTER(GLcharARB)], 'ARB_shader_objects') + +# GL/glext.h:4367 +glGetAttachedObjectsARB = _link_function('glGetAttachedObjectsARB', None, [GLhandleARB, GLsizei, POINTER(GLsizei), POINTER(GLhandleARB)], 'ARB_shader_objects') + +# GL/glext.h:4368 +glGetUniformLocationARB = _link_function('glGetUniformLocationARB', GLint, [GLhandleARB, POINTER(GLcharARB)], 'ARB_shader_objects') + +# GL/glext.h:4369 +glGetActiveUniformARB = _link_function('glGetActiveUniformARB', None, [GLhandleARB, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLint), POINTER(GLenum), POINTER(GLcharARB)], 'ARB_shader_objects') + +# GL/glext.h:4370 +glGetUniformfvARB = _link_function('glGetUniformfvARB', None, [GLhandleARB, GLint, POINTER(GLfloat)], 'ARB_shader_objects') + +# GL/glext.h:4371 +glGetUniformivARB = _link_function('glGetUniformivARB', None, [GLhandleARB, GLint, POINTER(GLint)], 'ARB_shader_objects') + +# GL/glext.h:4372 +glGetShaderSourceARB = _link_function('glGetShaderSourceARB', None, [GLhandleARB, GLsizei, POINTER(GLsizei), POINTER(GLcharARB)], 'ARB_shader_objects') + +PFNGLDELETEOBJECTARBPROC = CFUNCTYPE(None, GLhandleARB) # GL/glext.h:4374 +PFNGLGETHANDLEARBPROC = CFUNCTYPE(GLhandleARB, GLenum) # GL/glext.h:4375 +PFNGLDETACHOBJECTARBPROC = CFUNCTYPE(None, GLhandleARB, GLhandleARB) # GL/glext.h:4376 +PFNGLCREATESHADEROBJECTARBPROC = CFUNCTYPE(GLhandleARB, GLenum) # GL/glext.h:4377 +PFNGLSHADERSOURCEARBPROC = CFUNCTYPE(None, GLhandleARB, GLsizei, POINTER(POINTER(GLcharARB)), POINTER(GLint)) # GL/glext.h:4378 +PFNGLCOMPILESHADERARBPROC = CFUNCTYPE(None, GLhandleARB) # GL/glext.h:4379 +PFNGLCREATEPROGRAMOBJECTARBPROC = CFUNCTYPE(GLhandleARB) # GL/glext.h:4380 +PFNGLATTACHOBJECTARBPROC = CFUNCTYPE(None, GLhandleARB, GLhandleARB) # GL/glext.h:4381 +PFNGLLINKPROGRAMARBPROC = CFUNCTYPE(None, GLhandleARB) # GL/glext.h:4382 +PFNGLUSEPROGRAMOBJECTARBPROC = CFUNCTYPE(None, GLhandleARB) # GL/glext.h:4383 +PFNGLVALIDATEPROGRAMARBPROC = CFUNCTYPE(None, GLhandleARB) # GL/glext.h:4384 +PFNGLUNIFORM1FARBPROC = CFUNCTYPE(None, GLint, GLfloat) # GL/glext.h:4385 +PFNGLUNIFORM2FARBPROC = CFUNCTYPE(None, GLint, GLfloat, GLfloat) # GL/glext.h:4386 +PFNGLUNIFORM3FARBPROC = CFUNCTYPE(None, GLint, GLfloat, GLfloat, GLfloat) # GL/glext.h:4387 +PFNGLUNIFORM4FARBPROC = CFUNCTYPE(None, GLint, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:4388 +PFNGLUNIFORM1IARBPROC = CFUNCTYPE(None, GLint, GLint) # GL/glext.h:4389 +PFNGLUNIFORM2IARBPROC = CFUNCTYPE(None, GLint, GLint, GLint) # GL/glext.h:4390 +PFNGLUNIFORM3IARBPROC = CFUNCTYPE(None, GLint, GLint, GLint, GLint) # GL/glext.h:4391 +PFNGLUNIFORM4IARBPROC = CFUNCTYPE(None, GLint, GLint, GLint, GLint, GLint) # GL/glext.h:4392 +PFNGLUNIFORM1FVARBPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLfloat)) # GL/glext.h:4393 +PFNGLUNIFORM2FVARBPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLfloat)) # GL/glext.h:4394 +PFNGLUNIFORM3FVARBPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLfloat)) # GL/glext.h:4395 +PFNGLUNIFORM4FVARBPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLfloat)) # GL/glext.h:4396 +PFNGLUNIFORM1IVARBPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLint)) # GL/glext.h:4397 +PFNGLUNIFORM2IVARBPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLint)) # GL/glext.h:4398 +PFNGLUNIFORM3IVARBPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLint)) # GL/glext.h:4399 +PFNGLUNIFORM4IVARBPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLint)) # GL/glext.h:4400 +PFNGLUNIFORMMATRIX2FVARBPROC = CFUNCTYPE(None, GLint, GLsizei, GLboolean, POINTER(GLfloat)) # GL/glext.h:4401 +PFNGLUNIFORMMATRIX3FVARBPROC = CFUNCTYPE(None, GLint, GLsizei, GLboolean, POINTER(GLfloat)) # GL/glext.h:4402 +PFNGLUNIFORMMATRIX4FVARBPROC = CFUNCTYPE(None, GLint, GLsizei, GLboolean, POINTER(GLfloat)) # GL/glext.h:4403 +PFNGLGETOBJECTPARAMETERFVARBPROC = CFUNCTYPE(None, GLhandleARB, GLenum, POINTER(GLfloat)) # GL/glext.h:4404 +PFNGLGETOBJECTPARAMETERIVARBPROC = CFUNCTYPE(None, GLhandleARB, GLenum, POINTER(GLint)) # GL/glext.h:4405 +PFNGLGETINFOLOGARBPROC = CFUNCTYPE(None, GLhandleARB, GLsizei, POINTER(GLsizei), POINTER(GLcharARB)) # GL/glext.h:4406 +PFNGLGETATTACHEDOBJECTSARBPROC = CFUNCTYPE(None, GLhandleARB, GLsizei, POINTER(GLsizei), POINTER(GLhandleARB)) # GL/glext.h:4407 +PFNGLGETUNIFORMLOCATIONARBPROC = CFUNCTYPE(GLint, GLhandleARB, POINTER(GLcharARB)) # GL/glext.h:4408 +PFNGLGETACTIVEUNIFORMARBPROC = CFUNCTYPE(None, GLhandleARB, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLint), POINTER(GLenum), POINTER(GLcharARB)) # GL/glext.h:4409 +PFNGLGETUNIFORMFVARBPROC = CFUNCTYPE(None, GLhandleARB, GLint, POINTER(GLfloat)) # GL/glext.h:4410 +PFNGLGETUNIFORMIVARBPROC = CFUNCTYPE(None, GLhandleARB, GLint, POINTER(GLint)) # GL/glext.h:4411 +PFNGLGETSHADERSOURCEARBPROC = CFUNCTYPE(None, GLhandleARB, GLsizei, POINTER(GLsizei), POINTER(GLcharARB)) # GL/glext.h:4412 +# ARB_vertex_shader (GL/glext.h:4415) +GL_ARB_vertex_shader = 1 # GL/glext.h:4416 +# GL/glext.h:4418 +glBindAttribLocationARB = _link_function('glBindAttribLocationARB', None, [GLhandleARB, GLuint, POINTER(GLcharARB)], 'ARB_vertex_shader') + +# GL/glext.h:4419 +glGetActiveAttribARB = _link_function('glGetActiveAttribARB', None, [GLhandleARB, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLint), POINTER(GLenum), POINTER(GLcharARB)], 'ARB_vertex_shader') + +# GL/glext.h:4420 +glGetAttribLocationARB = _link_function('glGetAttribLocationARB', GLint, [GLhandleARB, POINTER(GLcharARB)], 'ARB_vertex_shader') + +PFNGLBINDATTRIBLOCATIONARBPROC = CFUNCTYPE(None, GLhandleARB, GLuint, POINTER(GLcharARB)) # GL/glext.h:4422 +PFNGLGETACTIVEATTRIBARBPROC = CFUNCTYPE(None, GLhandleARB, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLint), POINTER(GLenum), POINTER(GLcharARB)) # GL/glext.h:4423 +PFNGLGETATTRIBLOCATIONARBPROC = CFUNCTYPE(GLint, GLhandleARB, POINTER(GLcharARB)) # GL/glext.h:4424 +# ARB_fragment_shader (GL/glext.h:4427) +GL_ARB_fragment_shader = 1 # GL/glext.h:4428 +# ARB_shading_language_100 (GL/glext.h:4431) +GL_ARB_shading_language_100 = 1 # GL/glext.h:4432 +# ARB_texture_non_power_of_two (GL/glext.h:4435) +GL_ARB_texture_non_power_of_two = 1 # GL/glext.h:4436 +# ARB_point_sprite (GL/glext.h:4439) +GL_ARB_point_sprite = 1 # GL/glext.h:4440 +# ARB_fragment_program_shadow (GL/glext.h:4443) +GL_ARB_fragment_program_shadow = 1 # GL/glext.h:4444 +# ARB_draw_buffers (GL/glext.h:4447) +GL_ARB_draw_buffers = 1 # GL/glext.h:4448 +# GL/glext.h:4450 +glDrawBuffersARB = _link_function('glDrawBuffersARB', None, [GLsizei, POINTER(GLenum)], 'ARB_draw_buffers') + +PFNGLDRAWBUFFERSARBPROC = CFUNCTYPE(None, GLsizei, POINTER(GLenum)) # GL/glext.h:4452 +# ARB_texture_rectangle (GL/glext.h:4455) +GL_ARB_texture_rectangle = 1 # GL/glext.h:4456 +# ARB_color_buffer_float (GL/glext.h:4459) +GL_ARB_color_buffer_float = 1 # GL/glext.h:4460 +# GL/glext.h:4462 +glClampColorARB = _link_function('glClampColorARB', None, [GLenum, GLenum], 'ARB_color_buffer_float') + +PFNGLCLAMPCOLORARBPROC = CFUNCTYPE(None, GLenum, GLenum) # GL/glext.h:4464 +# ARB_half_float_pixel (GL/glext.h:4467) +GL_ARB_half_float_pixel = 1 # GL/glext.h:4468 +# ARB_texture_float (GL/glext.h:4471) +GL_ARB_texture_float = 1 # GL/glext.h:4472 +# ARB_pixel_buffer_object (GL/glext.h:4475) +GL_ARB_pixel_buffer_object = 1 # GL/glext.h:4476 +# EXT_abgr (GL/glext.h:4479) +GL_EXT_abgr = 1 # GL/glext.h:4480 +# EXT_blend_color (GL/glext.h:4483) +GL_EXT_blend_color = 1 # GL/glext.h:4484 +# GL/glext.h:4486 +glBlendColorEXT = _link_function('glBlendColorEXT', None, [GLclampf, GLclampf, GLclampf, GLclampf], 'EXT_blend_color') + +PFNGLBLENDCOLOREXTPROC = CFUNCTYPE(None, GLclampf, GLclampf, GLclampf, GLclampf) # GL/glext.h:4488 +# EXT_polygon_offset (GL/glext.h:4491) +GL_EXT_polygon_offset = 1 # GL/glext.h:4492 +# GL/glext.h:4494 +glPolygonOffsetEXT = _link_function('glPolygonOffsetEXT', None, [GLfloat, GLfloat], 'EXT_polygon_offset') + +PFNGLPOLYGONOFFSETEXTPROC = CFUNCTYPE(None, GLfloat, GLfloat) # GL/glext.h:4496 +# EXT_texture (GL/glext.h:4499) +GL_EXT_texture = 1 # GL/glext.h:4500 +# EXT_texture3D (GL/glext.h:4503) +GL_EXT_texture3D = 1 # GL/glext.h:4504 +# GL/glext.h:4506 +glTexImage3DEXT = _link_function('glTexImage3DEXT', None, [GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, POINTER(GLvoid)], 'EXT_texture3D') + +# GL/glext.h:4507 +glTexSubImage3DEXT = _link_function('glTexSubImage3DEXT', None, [GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'EXT_texture3D') + +PFNGLTEXIMAGE3DEXTPROC = CFUNCTYPE(None, GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4509 +PFNGLTEXSUBIMAGE3DEXTPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4510 +# SGIS_texture_filter4 (GL/glext.h:4513) +GL_SGIS_texture_filter4 = 1 # GL/glext.h:4514 +# GL/glext.h:4516 +glGetTexFilterFuncSGIS = _link_function('glGetTexFilterFuncSGIS', None, [GLenum, GLenum, POINTER(GLfloat)], 'SGIS_texture_filter4') + +# GL/glext.h:4517 +glTexFilterFuncSGIS = _link_function('glTexFilterFuncSGIS', None, [GLenum, GLenum, GLsizei, POINTER(GLfloat)], 'SGIS_texture_filter4') + +PFNGLGETTEXFILTERFUNCSGISPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4519 +PFNGLTEXFILTERFUNCSGISPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, POINTER(GLfloat)) # GL/glext.h:4520 +# EXT_subtexture (GL/glext.h:4523) +GL_EXT_subtexture = 1 # GL/glext.h:4524 +# GL/glext.h:4526 +glTexSubImage1DEXT = _link_function('glTexSubImage1DEXT', None, [GLenum, GLint, GLint, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'EXT_subtexture') + +# GL/glext.h:4527 +glTexSubImage2DEXT = _link_function('glTexSubImage2DEXT', None, [GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'EXT_subtexture') + +PFNGLTEXSUBIMAGE1DEXTPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4529 +PFNGLTEXSUBIMAGE2DEXTPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4530 +# EXT_copy_texture (GL/glext.h:4533) +GL_EXT_copy_texture = 1 # GL/glext.h:4534 +# GL/glext.h:4536 +glCopyTexImage1DEXT = _link_function('glCopyTexImage1DEXT', None, [GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint], 'EXT_copy_texture') + +# GL/glext.h:4537 +glCopyTexImage2DEXT = _link_function('glCopyTexImage2DEXT', None, [GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint], 'EXT_copy_texture') + +# GL/glext.h:4538 +glCopyTexSubImage1DEXT = _link_function('glCopyTexSubImage1DEXT', None, [GLenum, GLint, GLint, GLint, GLint, GLsizei], 'EXT_copy_texture') + +# GL/glext.h:4539 +glCopyTexSubImage2DEXT = _link_function('glCopyTexSubImage2DEXT', None, [GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei], 'EXT_copy_texture') + +# GL/glext.h:4540 +glCopyTexSubImage3DEXT = _link_function('glCopyTexSubImage3DEXT', None, [GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei], 'EXT_copy_texture') + +PFNGLCOPYTEXIMAGE1DEXTPROC = CFUNCTYPE(None, GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint) # GL/glext.h:4542 +PFNGLCOPYTEXIMAGE2DEXTPROC = CFUNCTYPE(None, GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint) # GL/glext.h:4543 +PFNGLCOPYTEXSUBIMAGE1DEXTPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint, GLsizei) # GL/glext.h:4544 +PFNGLCOPYTEXSUBIMAGE2DEXTPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei) # GL/glext.h:4545 +PFNGLCOPYTEXSUBIMAGE3DEXTPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei) # GL/glext.h:4546 +# EXT_histogram (GL/glext.h:4549) +GL_EXT_histogram = 1 # GL/glext.h:4550 +# GL/glext.h:4552 +glGetHistogramEXT = _link_function('glGetHistogramEXT', None, [GLenum, GLboolean, GLenum, GLenum, POINTER(GLvoid)], 'EXT_histogram') + +# GL/glext.h:4553 +glGetHistogramParameterfvEXT = _link_function('glGetHistogramParameterfvEXT', None, [GLenum, GLenum, POINTER(GLfloat)], 'EXT_histogram') + +# GL/glext.h:4554 +glGetHistogramParameterivEXT = _link_function('glGetHistogramParameterivEXT', None, [GLenum, GLenum, POINTER(GLint)], 'EXT_histogram') + +# GL/glext.h:4555 +glGetMinmaxEXT = _link_function('glGetMinmaxEXT', None, [GLenum, GLboolean, GLenum, GLenum, POINTER(GLvoid)], 'EXT_histogram') + +# GL/glext.h:4556 +glGetMinmaxParameterfvEXT = _link_function('glGetMinmaxParameterfvEXT', None, [GLenum, GLenum, POINTER(GLfloat)], 'EXT_histogram') + +# GL/glext.h:4557 +glGetMinmaxParameterivEXT = _link_function('glGetMinmaxParameterivEXT', None, [GLenum, GLenum, POINTER(GLint)], 'EXT_histogram') + +# GL/glext.h:4558 +glHistogramEXT = _link_function('glHistogramEXT', None, [GLenum, GLsizei, GLenum, GLboolean], 'EXT_histogram') + +# GL/glext.h:4559 +glMinmaxEXT = _link_function('glMinmaxEXT', None, [GLenum, GLenum, GLboolean], 'EXT_histogram') + +# GL/glext.h:4560 +glResetHistogramEXT = _link_function('glResetHistogramEXT', None, [GLenum], 'EXT_histogram') + +# GL/glext.h:4561 +glResetMinmaxEXT = _link_function('glResetMinmaxEXT', None, [GLenum], 'EXT_histogram') + +PFNGLGETHISTOGRAMEXTPROC = CFUNCTYPE(None, GLenum, GLboolean, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4563 +PFNGLGETHISTOGRAMPARAMETERFVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4564 +PFNGLGETHISTOGRAMPARAMETERIVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4565 +PFNGLGETMINMAXEXTPROC = CFUNCTYPE(None, GLenum, GLboolean, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4566 +PFNGLGETMINMAXPARAMETERFVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4567 +PFNGLGETMINMAXPARAMETERIVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4568 +PFNGLHISTOGRAMEXTPROC = CFUNCTYPE(None, GLenum, GLsizei, GLenum, GLboolean) # GL/glext.h:4569 +PFNGLMINMAXEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLboolean) # GL/glext.h:4570 +PFNGLRESETHISTOGRAMEXTPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:4571 +PFNGLRESETMINMAXEXTPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:4572 +# EXT_convolution (GL/glext.h:4575) +GL_EXT_convolution = 1 # GL/glext.h:4576 +# GL/glext.h:4578 +glConvolutionFilter1DEXT = _link_function('glConvolutionFilter1DEXT', None, [GLenum, GLenum, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'EXT_convolution') + +# GL/glext.h:4579 +glConvolutionFilter2DEXT = _link_function('glConvolutionFilter2DEXT', None, [GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'EXT_convolution') + +# GL/glext.h:4580 +glConvolutionParameterfEXT = _link_function('glConvolutionParameterfEXT', None, [GLenum, GLenum, GLfloat], 'EXT_convolution') + +# GL/glext.h:4581 +glConvolutionParameterfvEXT = _link_function('glConvolutionParameterfvEXT', None, [GLenum, GLenum, POINTER(GLfloat)], 'EXT_convolution') + +# GL/glext.h:4582 +glConvolutionParameteriEXT = _link_function('glConvolutionParameteriEXT', None, [GLenum, GLenum, GLint], 'EXT_convolution') + +# GL/glext.h:4583 +glConvolutionParameterivEXT = _link_function('glConvolutionParameterivEXT', None, [GLenum, GLenum, POINTER(GLint)], 'EXT_convolution') + +# GL/glext.h:4584 +glCopyConvolutionFilter1DEXT = _link_function('glCopyConvolutionFilter1DEXT', None, [GLenum, GLenum, GLint, GLint, GLsizei], 'EXT_convolution') + +# GL/glext.h:4585 +glCopyConvolutionFilter2DEXT = _link_function('glCopyConvolutionFilter2DEXT', None, [GLenum, GLenum, GLint, GLint, GLsizei, GLsizei], 'EXT_convolution') + +# GL/glext.h:4586 +glGetConvolutionFilterEXT = _link_function('glGetConvolutionFilterEXT', None, [GLenum, GLenum, GLenum, POINTER(GLvoid)], 'EXT_convolution') + +# GL/glext.h:4587 +glGetConvolutionParameterfvEXT = _link_function('glGetConvolutionParameterfvEXT', None, [GLenum, GLenum, POINTER(GLfloat)], 'EXT_convolution') + +# GL/glext.h:4588 +glGetConvolutionParameterivEXT = _link_function('glGetConvolutionParameterivEXT', None, [GLenum, GLenum, POINTER(GLint)], 'EXT_convolution') + +# GL/glext.h:4589 +glGetSeparableFilterEXT = _link_function('glGetSeparableFilterEXT', None, [GLenum, GLenum, GLenum, POINTER(GLvoid), POINTER(GLvoid), POINTER(GLvoid)], 'EXT_convolution') + +# GL/glext.h:4590 +glSeparableFilter2DEXT = _link_function('glSeparableFilter2DEXT', None, [GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid), POINTER(GLvoid)], 'EXT_convolution') + +PFNGLCONVOLUTIONFILTER1DEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4592 +PFNGLCONVOLUTIONFILTER2DEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4593 +PFNGLCONVOLUTIONPARAMETERFEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLfloat) # GL/glext.h:4594 +PFNGLCONVOLUTIONPARAMETERFVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4595 +PFNGLCONVOLUTIONPARAMETERIEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLint) # GL/glext.h:4596 +PFNGLCONVOLUTIONPARAMETERIVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4597 +PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLint, GLint, GLsizei) # GL/glext.h:4598 +PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLint, GLint, GLsizei, GLsizei) # GL/glext.h:4599 +PFNGLGETCONVOLUTIONFILTEREXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4600 +PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4601 +PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4602 +PFNGLGETSEPARABLEFILTEREXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, POINTER(GLvoid), POINTER(GLvoid), POINTER(GLvoid)) # GL/glext.h:4603 +PFNGLSEPARABLEFILTER2DEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid), POINTER(GLvoid)) # GL/glext.h:4604 +# EXT_color_matrix (GL/glext.h:4607) +GL_EXT_color_matrix = 1 # GL/glext.h:4608 +# SGI_color_table (GL/glext.h:4611) +GL_SGI_color_table = 1 # GL/glext.h:4612 +# GL/glext.h:4614 +glColorTableSGI = _link_function('glColorTableSGI', None, [GLenum, GLenum, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'SGI_color_table') + +# GL/glext.h:4615 +glColorTableParameterfvSGI = _link_function('glColorTableParameterfvSGI', None, [GLenum, GLenum, POINTER(GLfloat)], 'SGI_color_table') + +# GL/glext.h:4616 +glColorTableParameterivSGI = _link_function('glColorTableParameterivSGI', None, [GLenum, GLenum, POINTER(GLint)], 'SGI_color_table') + +# GL/glext.h:4617 +glCopyColorTableSGI = _link_function('glCopyColorTableSGI', None, [GLenum, GLenum, GLint, GLint, GLsizei], 'SGI_color_table') + +# GL/glext.h:4618 +glGetColorTableSGI = _link_function('glGetColorTableSGI', None, [GLenum, GLenum, GLenum, POINTER(GLvoid)], 'SGI_color_table') + +# GL/glext.h:4619 +glGetColorTableParameterfvSGI = _link_function('glGetColorTableParameterfvSGI', None, [GLenum, GLenum, POINTER(GLfloat)], 'SGI_color_table') + +# GL/glext.h:4620 +glGetColorTableParameterivSGI = _link_function('glGetColorTableParameterivSGI', None, [GLenum, GLenum, POINTER(GLint)], 'SGI_color_table') + +PFNGLCOLORTABLESGIPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4622 +PFNGLCOLORTABLEPARAMETERFVSGIPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4623 +PFNGLCOLORTABLEPARAMETERIVSGIPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4624 +PFNGLCOPYCOLORTABLESGIPROC = CFUNCTYPE(None, GLenum, GLenum, GLint, GLint, GLsizei) # GL/glext.h:4625 +PFNGLGETCOLORTABLESGIPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4626 +PFNGLGETCOLORTABLEPARAMETERFVSGIPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4627 +PFNGLGETCOLORTABLEPARAMETERIVSGIPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4628 +# SGIX_pixel_texture (GL/glext.h:4631) +GL_SGIX_pixel_texture = 1 # GL/glext.h:4632 +# GL/glext.h:4634 +glPixelTexGenSGIX = _link_function('glPixelTexGenSGIX', None, [GLenum], 'SGIX_pixel_texture') + +PFNGLPIXELTEXGENSGIXPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:4636 +# SGIS_pixel_texture (GL/glext.h:4639) +GL_SGIS_pixel_texture = 1 # GL/glext.h:4640 +# GL/glext.h:4642 +glPixelTexGenParameteriSGIS = _link_function('glPixelTexGenParameteriSGIS', None, [GLenum, GLint], 'SGIS_pixel_texture') + +# GL/glext.h:4643 +glPixelTexGenParameterivSGIS = _link_function('glPixelTexGenParameterivSGIS', None, [GLenum, POINTER(GLint)], 'SGIS_pixel_texture') + +# GL/glext.h:4644 +glPixelTexGenParameterfSGIS = _link_function('glPixelTexGenParameterfSGIS', None, [GLenum, GLfloat], 'SGIS_pixel_texture') + +# GL/glext.h:4645 +glPixelTexGenParameterfvSGIS = _link_function('glPixelTexGenParameterfvSGIS', None, [GLenum, POINTER(GLfloat)], 'SGIS_pixel_texture') + +# GL/glext.h:4646 +glGetPixelTexGenParameterivSGIS = _link_function('glGetPixelTexGenParameterivSGIS', None, [GLenum, POINTER(GLint)], 'SGIS_pixel_texture') + +# GL/glext.h:4647 +glGetPixelTexGenParameterfvSGIS = _link_function('glGetPixelTexGenParameterfvSGIS', None, [GLenum, POINTER(GLfloat)], 'SGIS_pixel_texture') + +PFNGLPIXELTEXGENPARAMETERISGISPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:4649 +PFNGLPIXELTEXGENPARAMETERIVSGISPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:4650 +PFNGLPIXELTEXGENPARAMETERFSGISPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:4651 +PFNGLPIXELTEXGENPARAMETERFVSGISPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:4652 +PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:4653 +PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:4654 +# SGIS_texture4D (GL/glext.h:4657) +GL_SGIS_texture4D = 1 # GL/glext.h:4658 +# GL/glext.h:4660 +glTexImage4DSGIS = _link_function('glTexImage4DSGIS', None, [GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, POINTER(GLvoid)], 'SGIS_texture4D') + +# GL/glext.h:4661 +glTexSubImage4DSGIS = _link_function('glTexSubImage4DSGIS', None, [GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'SGIS_texture4D') + +PFNGLTEXIMAGE4DSGISPROC = CFUNCTYPE(None, GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4663 +PFNGLTEXSUBIMAGE4DSGISPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4664 +# SGI_texture_color_table (GL/glext.h:4667) +GL_SGI_texture_color_table = 1 # GL/glext.h:4668 +# EXT_cmyka (GL/glext.h:4671) +GL_EXT_cmyka = 1 # GL/glext.h:4672 +# EXT_texture_object (GL/glext.h:4675) +GL_EXT_texture_object = 1 # GL/glext.h:4676 +# GL/glext.h:4678 +glAreTexturesResidentEXT = _link_function('glAreTexturesResidentEXT', GLboolean, [GLsizei, POINTER(GLuint), POINTER(GLboolean)], 'EXT_texture_object') + +# GL/glext.h:4679 +glBindTextureEXT = _link_function('glBindTextureEXT', None, [GLenum, GLuint], 'EXT_texture_object') + +# GL/glext.h:4680 +glDeleteTexturesEXT = _link_function('glDeleteTexturesEXT', None, [GLsizei, POINTER(GLuint)], 'EXT_texture_object') + +# GL/glext.h:4681 +glGenTexturesEXT = _link_function('glGenTexturesEXT', None, [GLsizei, POINTER(GLuint)], 'EXT_texture_object') + +# GL/glext.h:4682 +glIsTextureEXT = _link_function('glIsTextureEXT', GLboolean, [GLuint], 'EXT_texture_object') + +# GL/glext.h:4683 +glPrioritizeTexturesEXT = _link_function('glPrioritizeTexturesEXT', None, [GLsizei, POINTER(GLuint), POINTER(GLclampf)], 'EXT_texture_object') + +PFNGLARETEXTURESRESIDENTEXTPROC = CFUNCTYPE(GLboolean, GLsizei, POINTER(GLuint), POINTER(GLboolean)) # GL/glext.h:4685 +PFNGLBINDTEXTUREEXTPROC = CFUNCTYPE(None, GLenum, GLuint) # GL/glext.h:4686 +PFNGLDELETETEXTURESEXTPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:4687 +PFNGLGENTEXTURESEXTPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:4688 +PFNGLISTEXTUREEXTPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:4689 +PFNGLPRIORITIZETEXTURESEXTPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint), POINTER(GLclampf)) # GL/glext.h:4690 +# SGIS_detail_texture (GL/glext.h:4693) +GL_SGIS_detail_texture = 1 # GL/glext.h:4694 +# GL/glext.h:4696 +glDetailTexFuncSGIS = _link_function('glDetailTexFuncSGIS', None, [GLenum, GLsizei, POINTER(GLfloat)], 'SGIS_detail_texture') + +# GL/glext.h:4697 +glGetDetailTexFuncSGIS = _link_function('glGetDetailTexFuncSGIS', None, [GLenum, POINTER(GLfloat)], 'SGIS_detail_texture') + +PFNGLDETAILTEXFUNCSGISPROC = CFUNCTYPE(None, GLenum, GLsizei, POINTER(GLfloat)) # GL/glext.h:4699 +PFNGLGETDETAILTEXFUNCSGISPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:4700 +# SGIS_sharpen_texture (GL/glext.h:4703) +GL_SGIS_sharpen_texture = 1 # GL/glext.h:4704 +# GL/glext.h:4706 +glSharpenTexFuncSGIS = _link_function('glSharpenTexFuncSGIS', None, [GLenum, GLsizei, POINTER(GLfloat)], 'SGIS_sharpen_texture') + +# GL/glext.h:4707 +glGetSharpenTexFuncSGIS = _link_function('glGetSharpenTexFuncSGIS', None, [GLenum, POINTER(GLfloat)], 'SGIS_sharpen_texture') + +PFNGLSHARPENTEXFUNCSGISPROC = CFUNCTYPE(None, GLenum, GLsizei, POINTER(GLfloat)) # GL/glext.h:4709 +PFNGLGETSHARPENTEXFUNCSGISPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:4710 +# EXT_packed_pixels (GL/glext.h:4713) +GL_EXT_packed_pixels = 1 # GL/glext.h:4714 +# SGIS_texture_lod (GL/glext.h:4717) +GL_SGIS_texture_lod = 1 # GL/glext.h:4718 +# SGIS_multisample (GL/glext.h:4721) +GL_SGIS_multisample = 1 # GL/glext.h:4722 +# GL/glext.h:4724 +glSampleMaskSGIS = _link_function('glSampleMaskSGIS', None, [GLclampf, GLboolean], 'SGIS_multisample') + +# GL/glext.h:4725 +glSamplePatternSGIS = _link_function('glSamplePatternSGIS', None, [GLenum], 'SGIS_multisample') + +PFNGLSAMPLEMASKSGISPROC = CFUNCTYPE(None, GLclampf, GLboolean) # GL/glext.h:4727 +PFNGLSAMPLEPATTERNSGISPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:4728 +# EXT_rescale_normal (GL/glext.h:4731) +GL_EXT_rescale_normal = 1 # GL/glext.h:4732 +# EXT_vertex_array (GL/glext.h:4735) +GL_EXT_vertex_array = 1 # GL/glext.h:4736 +# GL/glext.h:4738 +glArrayElementEXT = _link_function('glArrayElementEXT', None, [GLint], 'EXT_vertex_array') + +# GL/glext.h:4739 +glColorPointerEXT = _link_function('glColorPointerEXT', None, [GLint, GLenum, GLsizei, GLsizei, POINTER(GLvoid)], 'EXT_vertex_array') + +# GL/glext.h:4740 +glDrawArraysEXT = _link_function('glDrawArraysEXT', None, [GLenum, GLint, GLsizei], 'EXT_vertex_array') + +# GL/glext.h:4741 +glEdgeFlagPointerEXT = _link_function('glEdgeFlagPointerEXT', None, [GLsizei, GLsizei, POINTER(GLboolean)], 'EXT_vertex_array') + +# GL/glext.h:4742 +glGetPointervEXT = _link_function('glGetPointervEXT', None, [GLenum, POINTER(POINTER(GLvoid))], 'EXT_vertex_array') + +# GL/glext.h:4743 +glIndexPointerEXT = _link_function('glIndexPointerEXT', None, [GLenum, GLsizei, GLsizei, POINTER(GLvoid)], 'EXT_vertex_array') + +# GL/glext.h:4744 +glNormalPointerEXT = _link_function('glNormalPointerEXT', None, [GLenum, GLsizei, GLsizei, POINTER(GLvoid)], 'EXT_vertex_array') + +# GL/glext.h:4745 +glTexCoordPointerEXT = _link_function('glTexCoordPointerEXT', None, [GLint, GLenum, GLsizei, GLsizei, POINTER(GLvoid)], 'EXT_vertex_array') + +# GL/glext.h:4746 +glVertexPointerEXT = _link_function('glVertexPointerEXT', None, [GLint, GLenum, GLsizei, GLsizei, POINTER(GLvoid)], 'EXT_vertex_array') + +PFNGLARRAYELEMENTEXTPROC = CFUNCTYPE(None, GLint) # GL/glext.h:4748 +PFNGLCOLORPOINTEREXTPROC = CFUNCTYPE(None, GLint, GLenum, GLsizei, GLsizei, POINTER(GLvoid)) # GL/glext.h:4749 +PFNGLDRAWARRAYSEXTPROC = CFUNCTYPE(None, GLenum, GLint, GLsizei) # GL/glext.h:4750 +PFNGLEDGEFLAGPOINTEREXTPROC = CFUNCTYPE(None, GLsizei, GLsizei, POINTER(GLboolean)) # GL/glext.h:4751 +PFNGLGETPOINTERVEXTPROC = CFUNCTYPE(None, GLenum, POINTER(POINTER(GLvoid))) # GL/glext.h:4752 +PFNGLINDEXPOINTEREXTPROC = CFUNCTYPE(None, GLenum, GLsizei, GLsizei, POINTER(GLvoid)) # GL/glext.h:4753 +PFNGLNORMALPOINTEREXTPROC = CFUNCTYPE(None, GLenum, GLsizei, GLsizei, POINTER(GLvoid)) # GL/glext.h:4754 +PFNGLTEXCOORDPOINTEREXTPROC = CFUNCTYPE(None, GLint, GLenum, GLsizei, GLsizei, POINTER(GLvoid)) # GL/glext.h:4755 +PFNGLVERTEXPOINTEREXTPROC = CFUNCTYPE(None, GLint, GLenum, GLsizei, GLsizei, POINTER(GLvoid)) # GL/glext.h:4756 +# EXT_misc_attribute (GL/glext.h:4759) +GL_EXT_misc_attribute = 1 # GL/glext.h:4760 +# SGIS_generate_mipmap (GL/glext.h:4763) +GL_SGIS_generate_mipmap = 1 # GL/glext.h:4764 +# SGIX_clipmap (GL/glext.h:4767) +GL_SGIX_clipmap = 1 # GL/glext.h:4768 +# SGIX_shadow (GL/glext.h:4771) +GL_SGIX_shadow = 1 # GL/glext.h:4772 +# SGIS_texture_edge_clamp (GL/glext.h:4775) +GL_SGIS_texture_edge_clamp = 1 # GL/glext.h:4776 +# SGIS_texture_border_clamp (GL/glext.h:4779) +GL_SGIS_texture_border_clamp = 1 # GL/glext.h:4780 +# EXT_blend_minmax (GL/glext.h:4783) +GL_EXT_blend_minmax = 1 # GL/glext.h:4784 +# GL/glext.h:4786 +glBlendEquationEXT = _link_function('glBlendEquationEXT', None, [GLenum], 'EXT_blend_minmax') + +PFNGLBLENDEQUATIONEXTPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:4788 +# EXT_blend_subtract (GL/glext.h:4791) +GL_EXT_blend_subtract = 1 # GL/glext.h:4792 +# EXT_blend_logic_op (GL/glext.h:4795) +GL_EXT_blend_logic_op = 1 # GL/glext.h:4796 +# SGIX_interlace (GL/glext.h:4799) +GL_SGIX_interlace = 1 # GL/glext.h:4800 +# SGIX_pixel_tiles (GL/glext.h:4803) +GL_SGIX_pixel_tiles = 1 # GL/glext.h:4804 +# SGIX_texture_select (GL/glext.h:4807) +GL_SGIX_texture_select = 1 # GL/glext.h:4808 +# SGIX_sprite (GL/glext.h:4811) +GL_SGIX_sprite = 1 # GL/glext.h:4812 +# GL/glext.h:4814 +glSpriteParameterfSGIX = _link_function('glSpriteParameterfSGIX', None, [GLenum, GLfloat], 'SGIX_sprite') + +# GL/glext.h:4815 +glSpriteParameterfvSGIX = _link_function('glSpriteParameterfvSGIX', None, [GLenum, POINTER(GLfloat)], 'SGIX_sprite') + +# GL/glext.h:4816 +glSpriteParameteriSGIX = _link_function('glSpriteParameteriSGIX', None, [GLenum, GLint], 'SGIX_sprite') + +# GL/glext.h:4817 +glSpriteParameterivSGIX = _link_function('glSpriteParameterivSGIX', None, [GLenum, POINTER(GLint)], 'SGIX_sprite') + +PFNGLSPRITEPARAMETERFSGIXPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:4819 +PFNGLSPRITEPARAMETERFVSGIXPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:4820 +PFNGLSPRITEPARAMETERISGIXPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:4821 +PFNGLSPRITEPARAMETERIVSGIXPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:4822 +# SGIX_texture_multi_buffer (GL/glext.h:4825) +GL_SGIX_texture_multi_buffer = 1 # GL/glext.h:4826 +# EXT_point_parameters (GL/glext.h:4829) +GL_EXT_point_parameters = 1 # GL/glext.h:4830 +# GL/glext.h:4832 +glPointParameterfEXT = _link_function('glPointParameterfEXT', None, [GLenum, GLfloat], 'EXT_point_parameters') + +# GL/glext.h:4833 +glPointParameterfvEXT = _link_function('glPointParameterfvEXT', None, [GLenum, POINTER(GLfloat)], 'EXT_point_parameters') + +PFNGLPOINTPARAMETERFEXTPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:4835 +PFNGLPOINTPARAMETERFVEXTPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:4836 +# SGIS_point_parameters (GL/glext.h:4839) +GL_SGIS_point_parameters = 1 # GL/glext.h:4840 +# GL/glext.h:4842 +glPointParameterfSGIS = _link_function('glPointParameterfSGIS', None, [GLenum, GLfloat], 'SGIS_point_parameters') + +# GL/glext.h:4843 +glPointParameterfvSGIS = _link_function('glPointParameterfvSGIS', None, [GLenum, POINTER(GLfloat)], 'SGIS_point_parameters') + +PFNGLPOINTPARAMETERFSGISPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:4845 +PFNGLPOINTPARAMETERFVSGISPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:4846 +# SGIX_instruments (GL/glext.h:4849) +GL_SGIX_instruments = 1 # GL/glext.h:4850 +# GL/glext.h:4852 +glGetInstrumentsSGIX = _link_function('glGetInstrumentsSGIX', GLint, [], 'SGIX_instruments') + +# GL/glext.h:4853 +glInstrumentsBufferSGIX = _link_function('glInstrumentsBufferSGIX', None, [GLsizei, POINTER(GLint)], 'SGIX_instruments') + +# GL/glext.h:4854 +glPollInstrumentsSGIX = _link_function('glPollInstrumentsSGIX', GLint, [POINTER(GLint)], 'SGIX_instruments') + +# GL/glext.h:4855 +glReadInstrumentsSGIX = _link_function('glReadInstrumentsSGIX', None, [GLint], 'SGIX_instruments') + +# GL/glext.h:4856 +glStartInstrumentsSGIX = _link_function('glStartInstrumentsSGIX', None, [], 'SGIX_instruments') + +# GL/glext.h:4857 +glStopInstrumentsSGIX = _link_function('glStopInstrumentsSGIX', None, [GLint], 'SGIX_instruments') + +PFNGLGETINSTRUMENTSSGIXPROC = CFUNCTYPE(GLint) # GL/glext.h:4859 +PFNGLINSTRUMENTSBUFFERSGIXPROC = CFUNCTYPE(None, GLsizei, POINTER(GLint)) # GL/glext.h:4860 +PFNGLPOLLINSTRUMENTSSGIXPROC = CFUNCTYPE(GLint, POINTER(GLint)) # GL/glext.h:4861 +PFNGLREADINSTRUMENTSSGIXPROC = CFUNCTYPE(None, GLint) # GL/glext.h:4862 +PFNGLSTARTINSTRUMENTSSGIXPROC = CFUNCTYPE(None) # GL/glext.h:4863 +PFNGLSTOPINSTRUMENTSSGIXPROC = CFUNCTYPE(None, GLint) # GL/glext.h:4864 +# SGIX_texture_scale_bias (GL/glext.h:4867) +GL_SGIX_texture_scale_bias = 1 # GL/glext.h:4868 +# SGIX_framezoom (GL/glext.h:4871) +GL_SGIX_framezoom = 1 # GL/glext.h:4872 +# GL/glext.h:4874 +glFrameZoomSGIX = _link_function('glFrameZoomSGIX', None, [GLint], 'SGIX_framezoom') + +PFNGLFRAMEZOOMSGIXPROC = CFUNCTYPE(None, GLint) # GL/glext.h:4876 +# SGIX_tag_sample_buffer (GL/glext.h:4879) +GL_SGIX_tag_sample_buffer = 1 # GL/glext.h:4880 +# GL/glext.h:4882 +glTagSampleBufferSGIX = _link_function('glTagSampleBufferSGIX', None, [], 'SGIX_tag_sample_buffer') + +PFNGLTAGSAMPLEBUFFERSGIXPROC = CFUNCTYPE(None) # GL/glext.h:4884 +# SGIX_polynomial_ffd (GL/glext.h:4887) +GL_SGIX_polynomial_ffd = 1 # GL/glext.h:4888 +# GL/glext.h:4890 +glDeformationMap3dSGIX = _link_function('glDeformationMap3dSGIX', None, [GLenum, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, POINTER(GLdouble)], 'SGIX_polynomial_ffd') + +# GL/glext.h:4891 +glDeformationMap3fSGIX = _link_function('glDeformationMap3fSGIX', None, [GLenum, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, POINTER(GLfloat)], 'SGIX_polynomial_ffd') + +GLbitfield = c_uint # /usr/include/GL/gl.h:55 +# GL/glext.h:4892 +glDeformSGIX = _link_function('glDeformSGIX', None, [GLbitfield], 'SGIX_polynomial_ffd') + +# GL/glext.h:4893 +glLoadIdentityDeformationMapSGIX = _link_function('glLoadIdentityDeformationMapSGIX', None, [GLbitfield], 'SGIX_polynomial_ffd') + +PFNGLDEFORMATIONMAP3DSGIXPROC = CFUNCTYPE(None, GLenum, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble, GLint, GLint, POINTER(GLdouble)) # GL/glext.h:4895 +PFNGLDEFORMATIONMAP3FSGIXPROC = CFUNCTYPE(None, GLenum, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, GLfloat, GLfloat, GLint, GLint, POINTER(GLfloat)) # GL/glext.h:4896 +PFNGLDEFORMSGIXPROC = CFUNCTYPE(None, GLbitfield) # GL/glext.h:4897 +PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC = CFUNCTYPE(None, GLbitfield) # GL/glext.h:4898 +# SGIX_reference_plane (GL/glext.h:4901) +GL_SGIX_reference_plane = 1 # GL/glext.h:4902 +# GL/glext.h:4904 +glReferencePlaneSGIX = _link_function('glReferencePlaneSGIX', None, [POINTER(GLdouble)], 'SGIX_reference_plane') + +PFNGLREFERENCEPLANESGIXPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:4906 +# SGIX_flush_raster (GL/glext.h:4909) +GL_SGIX_flush_raster = 1 # GL/glext.h:4910 +# GL/glext.h:4912 +glFlushRasterSGIX = _link_function('glFlushRasterSGIX', None, [], 'SGIX_flush_raster') + +PFNGLFLUSHRASTERSGIXPROC = CFUNCTYPE(None) # GL/glext.h:4914 +# SGIX_depth_texture (GL/glext.h:4917) +GL_SGIX_depth_texture = 1 # GL/glext.h:4918 +# SGIS_fog_function (GL/glext.h:4921) +GL_SGIS_fog_function = 1 # GL/glext.h:4922 +# GL/glext.h:4924 +glFogFuncSGIS = _link_function('glFogFuncSGIS', None, [GLsizei, POINTER(GLfloat)], 'SGIS_fog_function') + +# GL/glext.h:4925 +glGetFogFuncSGIS = _link_function('glGetFogFuncSGIS', None, [POINTER(GLfloat)], 'SGIS_fog_function') + +PFNGLFOGFUNCSGISPROC = CFUNCTYPE(None, GLsizei, POINTER(GLfloat)) # GL/glext.h:4927 +PFNGLGETFOGFUNCSGISPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:4928 +# SGIX_fog_offset (GL/glext.h:4931) +GL_SGIX_fog_offset = 1 # GL/glext.h:4932 +# HP_image_transform (GL/glext.h:4935) +GL_HP_image_transform = 1 # GL/glext.h:4936 +# GL/glext.h:4938 +glImageTransformParameteriHP = _link_function('glImageTransformParameteriHP', None, [GLenum, GLenum, GLint], 'HP_image_transform') + +# GL/glext.h:4939 +glImageTransformParameterfHP = _link_function('glImageTransformParameterfHP', None, [GLenum, GLenum, GLfloat], 'HP_image_transform') + +# GL/glext.h:4940 +glImageTransformParameterivHP = _link_function('glImageTransformParameterivHP', None, [GLenum, GLenum, POINTER(GLint)], 'HP_image_transform') + +# GL/glext.h:4941 +glImageTransformParameterfvHP = _link_function('glImageTransformParameterfvHP', None, [GLenum, GLenum, POINTER(GLfloat)], 'HP_image_transform') + +# GL/glext.h:4942 +glGetImageTransformParameterivHP = _link_function('glGetImageTransformParameterivHP', None, [GLenum, GLenum, POINTER(GLint)], 'HP_image_transform') + +# GL/glext.h:4943 +glGetImageTransformParameterfvHP = _link_function('glGetImageTransformParameterfvHP', None, [GLenum, GLenum, POINTER(GLfloat)], 'HP_image_transform') + +PFNGLIMAGETRANSFORMPARAMETERIHPPROC = CFUNCTYPE(None, GLenum, GLenum, GLint) # GL/glext.h:4945 +PFNGLIMAGETRANSFORMPARAMETERFHPPROC = CFUNCTYPE(None, GLenum, GLenum, GLfloat) # GL/glext.h:4946 +PFNGLIMAGETRANSFORMPARAMETERIVHPPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4947 +PFNGLIMAGETRANSFORMPARAMETERFVHPPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4948 +PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4949 +PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4950 +# HP_convolution_border_modes (GL/glext.h:4953) +GL_HP_convolution_border_modes = 1 # GL/glext.h:4954 +# SGIX_texture_add_env (GL/glext.h:4957) +GL_SGIX_texture_add_env = 1 # GL/glext.h:4958 +# EXT_color_subtable (GL/glext.h:4961) +GL_EXT_color_subtable = 1 # GL/glext.h:4962 +# GL/glext.h:4964 +glColorSubTableEXT = _link_function('glColorSubTableEXT', None, [GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'EXT_color_subtable') + +# GL/glext.h:4965 +glCopyColorSubTableEXT = _link_function('glCopyColorSubTableEXT', None, [GLenum, GLsizei, GLint, GLint, GLsizei], 'EXT_color_subtable') + +PFNGLCOLORSUBTABLEEXTPROC = CFUNCTYPE(None, GLenum, GLsizei, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4967 +PFNGLCOPYCOLORSUBTABLEEXTPROC = CFUNCTYPE(None, GLenum, GLsizei, GLint, GLint, GLsizei) # GL/glext.h:4968 +# PGI_vertex_hints (GL/glext.h:4971) +GL_PGI_vertex_hints = 1 # GL/glext.h:4972 +# PGI_misc_hints (GL/glext.h:4975) +GL_PGI_misc_hints = 1 # GL/glext.h:4976 +# GL/glext.h:4978 +glHintPGI = _link_function('glHintPGI', None, [GLenum, GLint], 'PGI_misc_hints') + +PFNGLHINTPGIPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:4980 +# EXT_paletted_texture (GL/glext.h:4983) +GL_EXT_paletted_texture = 1 # GL/glext.h:4984 +# GL/glext.h:4986 +glColorTableEXT = _link_function('glColorTableEXT', None, [GLenum, GLenum, GLsizei, GLenum, GLenum, POINTER(GLvoid)], 'EXT_paletted_texture') + +# GL/glext.h:4987 +glGetColorTableEXT = _link_function('glGetColorTableEXT', None, [GLenum, GLenum, GLenum, POINTER(GLvoid)], 'EXT_paletted_texture') + +# GL/glext.h:4988 +glGetColorTableParameterivEXT = _link_function('glGetColorTableParameterivEXT', None, [GLenum, GLenum, POINTER(GLint)], 'EXT_paletted_texture') + +# GL/glext.h:4989 +glGetColorTableParameterfvEXT = _link_function('glGetColorTableParameterfvEXT', None, [GLenum, GLenum, POINTER(GLfloat)], 'EXT_paletted_texture') + +PFNGLCOLORTABLEEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4991 +PFNGLGETCOLORTABLEEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, POINTER(GLvoid)) # GL/glext.h:4992 +PFNGLGETCOLORTABLEPARAMETERIVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:4993 +PFNGLGETCOLORTABLEPARAMETERFVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:4994 +# EXT_clip_volume_hint (GL/glext.h:4997) +GL_EXT_clip_volume_hint = 1 # GL/glext.h:4998 +# SGIX_list_priority (GL/glext.h:5001) +GL_SGIX_list_priority = 1 # GL/glext.h:5002 +# GL/glext.h:5004 +glGetListParameterfvSGIX = _link_function('glGetListParameterfvSGIX', None, [GLuint, GLenum, POINTER(GLfloat)], 'SGIX_list_priority') + +# GL/glext.h:5005 +glGetListParameterivSGIX = _link_function('glGetListParameterivSGIX', None, [GLuint, GLenum, POINTER(GLint)], 'SGIX_list_priority') + +# GL/glext.h:5006 +glListParameterfSGIX = _link_function('glListParameterfSGIX', None, [GLuint, GLenum, GLfloat], 'SGIX_list_priority') + +# GL/glext.h:5007 +glListParameterfvSGIX = _link_function('glListParameterfvSGIX', None, [GLuint, GLenum, POINTER(GLfloat)], 'SGIX_list_priority') + +# GL/glext.h:5008 +glListParameteriSGIX = _link_function('glListParameteriSGIX', None, [GLuint, GLenum, GLint], 'SGIX_list_priority') + +# GL/glext.h:5009 +glListParameterivSGIX = _link_function('glListParameterivSGIX', None, [GLuint, GLenum, POINTER(GLint)], 'SGIX_list_priority') + +PFNGLGETLISTPARAMETERFVSGIXPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:5011 +PFNGLGETLISTPARAMETERIVSGIXPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:5012 +PFNGLLISTPARAMETERFSGIXPROC = CFUNCTYPE(None, GLuint, GLenum, GLfloat) # GL/glext.h:5013 +PFNGLLISTPARAMETERFVSGIXPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:5014 +PFNGLLISTPARAMETERISGIXPROC = CFUNCTYPE(None, GLuint, GLenum, GLint) # GL/glext.h:5015 +PFNGLLISTPARAMETERIVSGIXPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:5016 +# SGIX_ir_instrument1 (GL/glext.h:5019) +GL_SGIX_ir_instrument1 = 1 # GL/glext.h:5020 +# SGIX_calligraphic_fragment (GL/glext.h:5023) +GL_SGIX_calligraphic_fragment = 1 # GL/glext.h:5024 +# SGIX_texture_lod_bias (GL/glext.h:5027) +GL_SGIX_texture_lod_bias = 1 # GL/glext.h:5028 +# SGIX_shadow_ambient (GL/glext.h:5031) +GL_SGIX_shadow_ambient = 1 # GL/glext.h:5032 +# EXT_index_texture (GL/glext.h:5035) +GL_EXT_index_texture = 1 # GL/glext.h:5036 +# EXT_index_material (GL/glext.h:5039) +GL_EXT_index_material = 1 # GL/glext.h:5040 +# GL/glext.h:5042 +glIndexMaterialEXT = _link_function('glIndexMaterialEXT', None, [GLenum, GLenum], 'EXT_index_material') + +PFNGLINDEXMATERIALEXTPROC = CFUNCTYPE(None, GLenum, GLenum) # GL/glext.h:5044 +# EXT_index_func (GL/glext.h:5047) +GL_EXT_index_func = 1 # GL/glext.h:5048 +# GL/glext.h:5050 +glIndexFuncEXT = _link_function('glIndexFuncEXT', None, [GLenum, GLclampf], 'EXT_index_func') + +PFNGLINDEXFUNCEXTPROC = CFUNCTYPE(None, GLenum, GLclampf) # GL/glext.h:5052 +# EXT_index_array_formats (GL/glext.h:5055) +GL_EXT_index_array_formats = 1 # GL/glext.h:5056 +# EXT_compiled_vertex_array (GL/glext.h:5059) +GL_EXT_compiled_vertex_array = 1 # GL/glext.h:5060 +# GL/glext.h:5062 +glLockArraysEXT = _link_function('glLockArraysEXT', None, [GLint, GLsizei], 'EXT_compiled_vertex_array') + +# GL/glext.h:5063 +glUnlockArraysEXT = _link_function('glUnlockArraysEXT', None, [], 'EXT_compiled_vertex_array') + +PFNGLLOCKARRAYSEXTPROC = CFUNCTYPE(None, GLint, GLsizei) # GL/glext.h:5065 +PFNGLUNLOCKARRAYSEXTPROC = CFUNCTYPE(None) # GL/glext.h:5066 +# EXT_cull_vertex (GL/glext.h:5069) +GL_EXT_cull_vertex = 1 # GL/glext.h:5070 +# GL/glext.h:5072 +glCullParameterdvEXT = _link_function('glCullParameterdvEXT', None, [GLenum, POINTER(GLdouble)], 'EXT_cull_vertex') + +# GL/glext.h:5073 +glCullParameterfvEXT = _link_function('glCullParameterfvEXT', None, [GLenum, POINTER(GLfloat)], 'EXT_cull_vertex') + +PFNGLCULLPARAMETERDVEXTPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:5075 +PFNGLCULLPARAMETERFVEXTPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:5076 +# SGIX_ycrcb (GL/glext.h:5079) +GL_SGIX_ycrcb = 1 # GL/glext.h:5080 +# SGIX_fragment_lighting (GL/glext.h:5083) +GL_SGIX_fragment_lighting = 1 # GL/glext.h:5084 +# GL/glext.h:5086 +glFragmentColorMaterialSGIX = _link_function('glFragmentColorMaterialSGIX', None, [GLenum, GLenum], 'SGIX_fragment_lighting') + +# GL/glext.h:5087 +glFragmentLightfSGIX = _link_function('glFragmentLightfSGIX', None, [GLenum, GLenum, GLfloat], 'SGIX_fragment_lighting') + +# GL/glext.h:5088 +glFragmentLightfvSGIX = _link_function('glFragmentLightfvSGIX', None, [GLenum, GLenum, POINTER(GLfloat)], 'SGIX_fragment_lighting') + +# GL/glext.h:5089 +glFragmentLightiSGIX = _link_function('glFragmentLightiSGIX', None, [GLenum, GLenum, GLint], 'SGIX_fragment_lighting') + +# GL/glext.h:5090 +glFragmentLightivSGIX = _link_function('glFragmentLightivSGIX', None, [GLenum, GLenum, POINTER(GLint)], 'SGIX_fragment_lighting') + +# GL/glext.h:5091 +glFragmentLightModelfSGIX = _link_function('glFragmentLightModelfSGIX', None, [GLenum, GLfloat], 'SGIX_fragment_lighting') + +# GL/glext.h:5092 +glFragmentLightModelfvSGIX = _link_function('glFragmentLightModelfvSGIX', None, [GLenum, POINTER(GLfloat)], 'SGIX_fragment_lighting') + +# GL/glext.h:5093 +glFragmentLightModeliSGIX = _link_function('glFragmentLightModeliSGIX', None, [GLenum, GLint], 'SGIX_fragment_lighting') + +# GL/glext.h:5094 +glFragmentLightModelivSGIX = _link_function('glFragmentLightModelivSGIX', None, [GLenum, POINTER(GLint)], 'SGIX_fragment_lighting') + +# GL/glext.h:5095 +glFragmentMaterialfSGIX = _link_function('glFragmentMaterialfSGIX', None, [GLenum, GLenum, GLfloat], 'SGIX_fragment_lighting') + +# GL/glext.h:5096 +glFragmentMaterialfvSGIX = _link_function('glFragmentMaterialfvSGIX', None, [GLenum, GLenum, POINTER(GLfloat)], 'SGIX_fragment_lighting') + +# GL/glext.h:5097 +glFragmentMaterialiSGIX = _link_function('glFragmentMaterialiSGIX', None, [GLenum, GLenum, GLint], 'SGIX_fragment_lighting') + +# GL/glext.h:5098 +glFragmentMaterialivSGIX = _link_function('glFragmentMaterialivSGIX', None, [GLenum, GLenum, POINTER(GLint)], 'SGIX_fragment_lighting') + +# GL/glext.h:5099 +glGetFragmentLightfvSGIX = _link_function('glGetFragmentLightfvSGIX', None, [GLenum, GLenum, POINTER(GLfloat)], 'SGIX_fragment_lighting') + +# GL/glext.h:5100 +glGetFragmentLightivSGIX = _link_function('glGetFragmentLightivSGIX', None, [GLenum, GLenum, POINTER(GLint)], 'SGIX_fragment_lighting') + +# GL/glext.h:5101 +glGetFragmentMaterialfvSGIX = _link_function('glGetFragmentMaterialfvSGIX', None, [GLenum, GLenum, POINTER(GLfloat)], 'SGIX_fragment_lighting') + +# GL/glext.h:5102 +glGetFragmentMaterialivSGIX = _link_function('glGetFragmentMaterialivSGIX', None, [GLenum, GLenum, POINTER(GLint)], 'SGIX_fragment_lighting') + +# GL/glext.h:5103 +glLightEnviSGIX = _link_function('glLightEnviSGIX', None, [GLenum, GLint], 'SGIX_fragment_lighting') + +PFNGLFRAGMENTCOLORMATERIALSGIXPROC = CFUNCTYPE(None, GLenum, GLenum) # GL/glext.h:5105 +PFNGLFRAGMENTLIGHTFSGIXPROC = CFUNCTYPE(None, GLenum, GLenum, GLfloat) # GL/glext.h:5106 +PFNGLFRAGMENTLIGHTFVSGIXPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:5107 +PFNGLFRAGMENTLIGHTISGIXPROC = CFUNCTYPE(None, GLenum, GLenum, GLint) # GL/glext.h:5108 +PFNGLFRAGMENTLIGHTIVSGIXPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:5109 +PFNGLFRAGMENTLIGHTMODELFSGIXPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:5110 +PFNGLFRAGMENTLIGHTMODELFVSGIXPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:5111 +PFNGLFRAGMENTLIGHTMODELISGIXPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:5112 +PFNGLFRAGMENTLIGHTMODELIVSGIXPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:5113 +PFNGLFRAGMENTMATERIALFSGIXPROC = CFUNCTYPE(None, GLenum, GLenum, GLfloat) # GL/glext.h:5114 +PFNGLFRAGMENTMATERIALFVSGIXPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:5115 +PFNGLFRAGMENTMATERIALISGIXPROC = CFUNCTYPE(None, GLenum, GLenum, GLint) # GL/glext.h:5116 +PFNGLFRAGMENTMATERIALIVSGIXPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:5117 +PFNGLGETFRAGMENTLIGHTFVSGIXPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:5118 +PFNGLGETFRAGMENTLIGHTIVSGIXPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:5119 +PFNGLGETFRAGMENTMATERIALFVSGIXPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:5120 +PFNGLGETFRAGMENTMATERIALIVSGIXPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:5121 +PFNGLLIGHTENVISGIXPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:5122 +# IBM_rasterpos_clip (GL/glext.h:5125) +GL_IBM_rasterpos_clip = 1 # GL/glext.h:5126 +# HP_texture_lighting (GL/glext.h:5129) +GL_HP_texture_lighting = 1 # GL/glext.h:5130 +# EXT_draw_range_elements (GL/glext.h:5133) +GL_EXT_draw_range_elements = 1 # GL/glext.h:5134 +# GL/glext.h:5136 +glDrawRangeElementsEXT = _link_function('glDrawRangeElementsEXT', None, [GLenum, GLuint, GLuint, GLsizei, GLenum, POINTER(GLvoid)], 'EXT_draw_range_elements') + +PFNGLDRAWRANGEELEMENTSEXTPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLsizei, GLenum, POINTER(GLvoid)) # GL/glext.h:5138 +# WIN_phong_shading (GL/glext.h:5141) +GL_WIN_phong_shading = 1 # GL/glext.h:5142 +# WIN_specular_fog (GL/glext.h:5145) +GL_WIN_specular_fog = 1 # GL/glext.h:5146 +# EXT_light_texture (GL/glext.h:5149) +GL_EXT_light_texture = 1 # GL/glext.h:5150 +# GL/glext.h:5152 +glApplyTextureEXT = _link_function('glApplyTextureEXT', None, [GLenum], 'EXT_light_texture') + +# GL/glext.h:5153 +glTextureLightEXT = _link_function('glTextureLightEXT', None, [GLenum], 'EXT_light_texture') + +# GL/glext.h:5154 +glTextureMaterialEXT = _link_function('glTextureMaterialEXT', None, [GLenum, GLenum], 'EXT_light_texture') + +PFNGLAPPLYTEXTUREEXTPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:5156 +PFNGLTEXTURELIGHTEXTPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:5157 +PFNGLTEXTUREMATERIALEXTPROC = CFUNCTYPE(None, GLenum, GLenum) # GL/glext.h:5158 +# SGIX_blend_alpha_minmax (GL/glext.h:5161) +GL_SGIX_blend_alpha_minmax = 1 # GL/glext.h:5162 +# EXT_bgra (GL/glext.h:5165) +GL_EXT_bgra = 1 # GL/glext.h:5166 +# SGIX_async (GL/glext.h:5169) +GL_SGIX_async = 1 # GL/glext.h:5170 +# GL/glext.h:5172 +glAsyncMarkerSGIX = _link_function('glAsyncMarkerSGIX', None, [GLuint], 'SGIX_async') + +# GL/glext.h:5173 +glFinishAsyncSGIX = _link_function('glFinishAsyncSGIX', GLint, [POINTER(GLuint)], 'SGIX_async') + +# GL/glext.h:5174 +glPollAsyncSGIX = _link_function('glPollAsyncSGIX', GLint, [POINTER(GLuint)], 'SGIX_async') + +# GL/glext.h:5175 +glGenAsyncMarkersSGIX = _link_function('glGenAsyncMarkersSGIX', GLuint, [GLsizei], 'SGIX_async') + +# GL/glext.h:5176 +glDeleteAsyncMarkersSGIX = _link_function('glDeleteAsyncMarkersSGIX', None, [GLuint, GLsizei], 'SGIX_async') + +# GL/glext.h:5177 +glIsAsyncMarkerSGIX = _link_function('glIsAsyncMarkerSGIX', GLboolean, [GLuint], 'SGIX_async') + +PFNGLASYNCMARKERSGIXPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:5179 +PFNGLFINISHASYNCSGIXPROC = CFUNCTYPE(GLint, POINTER(GLuint)) # GL/glext.h:5180 +PFNGLPOLLASYNCSGIXPROC = CFUNCTYPE(GLint, POINTER(GLuint)) # GL/glext.h:5181 +PFNGLGENASYNCMARKERSSGIXPROC = CFUNCTYPE(GLuint, GLsizei) # GL/glext.h:5182 +PFNGLDELETEASYNCMARKERSSGIXPROC = CFUNCTYPE(None, GLuint, GLsizei) # GL/glext.h:5183 +PFNGLISASYNCMARKERSGIXPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:5184 +# SGIX_async_pixel (GL/glext.h:5187) +GL_SGIX_async_pixel = 1 # GL/glext.h:5188 +# SGIX_async_histogram (GL/glext.h:5191) +GL_SGIX_async_histogram = 1 # GL/glext.h:5192 +# INTEL_parallel_arrays (GL/glext.h:5195) +GL_INTEL_parallel_arrays = 1 # GL/glext.h:5196 +# GL/glext.h:5198 +glVertexPointervINTEL = _link_function('glVertexPointervINTEL', None, [GLint, GLenum, POINTER(POINTER(GLvoid))], 'INTEL_parallel_arrays') + +# GL/glext.h:5199 +glNormalPointervINTEL = _link_function('glNormalPointervINTEL', None, [GLenum, POINTER(POINTER(GLvoid))], 'INTEL_parallel_arrays') + +# GL/glext.h:5200 +glColorPointervINTEL = _link_function('glColorPointervINTEL', None, [GLint, GLenum, POINTER(POINTER(GLvoid))], 'INTEL_parallel_arrays') + +# GL/glext.h:5201 +glTexCoordPointervINTEL = _link_function('glTexCoordPointervINTEL', None, [GLint, GLenum, POINTER(POINTER(GLvoid))], 'INTEL_parallel_arrays') + +PFNGLVERTEXPOINTERVINTELPROC = CFUNCTYPE(None, GLint, GLenum, POINTER(POINTER(GLvoid))) # GL/glext.h:5203 +PFNGLNORMALPOINTERVINTELPROC = CFUNCTYPE(None, GLenum, POINTER(POINTER(GLvoid))) # GL/glext.h:5204 +PFNGLCOLORPOINTERVINTELPROC = CFUNCTYPE(None, GLint, GLenum, POINTER(POINTER(GLvoid))) # GL/glext.h:5205 +PFNGLTEXCOORDPOINTERVINTELPROC = CFUNCTYPE(None, GLint, GLenum, POINTER(POINTER(GLvoid))) # GL/glext.h:5206 +# HP_occlusion_test (GL/glext.h:5209) +GL_HP_occlusion_test = 1 # GL/glext.h:5210 +# EXT_pixel_transform (GL/glext.h:5213) +GL_EXT_pixel_transform = 1 # GL/glext.h:5214 +# GL/glext.h:5216 +glPixelTransformParameteriEXT = _link_function('glPixelTransformParameteriEXT', None, [GLenum, GLenum, GLint], 'EXT_pixel_transform') + +# GL/glext.h:5217 +glPixelTransformParameterfEXT = _link_function('glPixelTransformParameterfEXT', None, [GLenum, GLenum, GLfloat], 'EXT_pixel_transform') + +# GL/glext.h:5218 +glPixelTransformParameterivEXT = _link_function('glPixelTransformParameterivEXT', None, [GLenum, GLenum, POINTER(GLint)], 'EXT_pixel_transform') + +# GL/glext.h:5219 +glPixelTransformParameterfvEXT = _link_function('glPixelTransformParameterfvEXT', None, [GLenum, GLenum, POINTER(GLfloat)], 'EXT_pixel_transform') + +PFNGLPIXELTRANSFORMPARAMETERIEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLint) # GL/glext.h:5221 +PFNGLPIXELTRANSFORMPARAMETERFEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLfloat) # GL/glext.h:5222 +PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:5223 +PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:5224 +# EXT_pixel_transform_color_table (GL/glext.h:5227) +GL_EXT_pixel_transform_color_table = 1 # GL/glext.h:5228 +# EXT_shared_texture_palette (GL/glext.h:5231) +GL_EXT_shared_texture_palette = 1 # GL/glext.h:5232 +# EXT_separate_specular_color (GL/glext.h:5235) +GL_EXT_separate_specular_color = 1 # GL/glext.h:5236 +# EXT_secondary_color (GL/glext.h:5239) +GL_EXT_secondary_color = 1 # GL/glext.h:5240 +# GL/glext.h:5242 +glSecondaryColor3bEXT = _link_function('glSecondaryColor3bEXT', None, [GLbyte, GLbyte, GLbyte], 'EXT_secondary_color') + +# GL/glext.h:5243 +glSecondaryColor3bvEXT = _link_function('glSecondaryColor3bvEXT', None, [POINTER(GLbyte)], 'EXT_secondary_color') + +# GL/glext.h:5244 +glSecondaryColor3dEXT = _link_function('glSecondaryColor3dEXT', None, [GLdouble, GLdouble, GLdouble], 'EXT_secondary_color') + +# GL/glext.h:5245 +glSecondaryColor3dvEXT = _link_function('glSecondaryColor3dvEXT', None, [POINTER(GLdouble)], 'EXT_secondary_color') + +# GL/glext.h:5246 +glSecondaryColor3fEXT = _link_function('glSecondaryColor3fEXT', None, [GLfloat, GLfloat, GLfloat], 'EXT_secondary_color') + +# GL/glext.h:5247 +glSecondaryColor3fvEXT = _link_function('glSecondaryColor3fvEXT', None, [POINTER(GLfloat)], 'EXT_secondary_color') + +# GL/glext.h:5248 +glSecondaryColor3iEXT = _link_function('glSecondaryColor3iEXT', None, [GLint, GLint, GLint], 'EXT_secondary_color') + +# GL/glext.h:5249 +glSecondaryColor3ivEXT = _link_function('glSecondaryColor3ivEXT', None, [POINTER(GLint)], 'EXT_secondary_color') + +# GL/glext.h:5250 +glSecondaryColor3sEXT = _link_function('glSecondaryColor3sEXT', None, [GLshort, GLshort, GLshort], 'EXT_secondary_color') + +# GL/glext.h:5251 +glSecondaryColor3svEXT = _link_function('glSecondaryColor3svEXT', None, [POINTER(GLshort)], 'EXT_secondary_color') + +# GL/glext.h:5252 +glSecondaryColor3ubEXT = _link_function('glSecondaryColor3ubEXT', None, [GLubyte, GLubyte, GLubyte], 'EXT_secondary_color') + +# GL/glext.h:5253 +glSecondaryColor3ubvEXT = _link_function('glSecondaryColor3ubvEXT', None, [POINTER(GLubyte)], 'EXT_secondary_color') + +# GL/glext.h:5254 +glSecondaryColor3uiEXT = _link_function('glSecondaryColor3uiEXT', None, [GLuint, GLuint, GLuint], 'EXT_secondary_color') + +# GL/glext.h:5255 +glSecondaryColor3uivEXT = _link_function('glSecondaryColor3uivEXT', None, [POINTER(GLuint)], 'EXT_secondary_color') + +# GL/glext.h:5256 +glSecondaryColor3usEXT = _link_function('glSecondaryColor3usEXT', None, [GLushort, GLushort, GLushort], 'EXT_secondary_color') + +# GL/glext.h:5257 +glSecondaryColor3usvEXT = _link_function('glSecondaryColor3usvEXT', None, [POINTER(GLushort)], 'EXT_secondary_color') + +# GL/glext.h:5258 +glSecondaryColorPointerEXT = _link_function('glSecondaryColorPointerEXT', None, [GLint, GLenum, GLsizei, POINTER(GLvoid)], 'EXT_secondary_color') + +PFNGLSECONDARYCOLOR3BEXTPROC = CFUNCTYPE(None, GLbyte, GLbyte, GLbyte) # GL/glext.h:5260 +PFNGLSECONDARYCOLOR3BVEXTPROC = CFUNCTYPE(None, POINTER(GLbyte)) # GL/glext.h:5261 +PFNGLSECONDARYCOLOR3DEXTPROC = CFUNCTYPE(None, GLdouble, GLdouble, GLdouble) # GL/glext.h:5262 +PFNGLSECONDARYCOLOR3DVEXTPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:5263 +PFNGLSECONDARYCOLOR3FEXTPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat) # GL/glext.h:5264 +PFNGLSECONDARYCOLOR3FVEXTPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:5265 +PFNGLSECONDARYCOLOR3IEXTPROC = CFUNCTYPE(None, GLint, GLint, GLint) # GL/glext.h:5266 +PFNGLSECONDARYCOLOR3IVEXTPROC = CFUNCTYPE(None, POINTER(GLint)) # GL/glext.h:5267 +PFNGLSECONDARYCOLOR3SEXTPROC = CFUNCTYPE(None, GLshort, GLshort, GLshort) # GL/glext.h:5268 +PFNGLSECONDARYCOLOR3SVEXTPROC = CFUNCTYPE(None, POINTER(GLshort)) # GL/glext.h:5269 +PFNGLSECONDARYCOLOR3UBEXTPROC = CFUNCTYPE(None, GLubyte, GLubyte, GLubyte) # GL/glext.h:5270 +PFNGLSECONDARYCOLOR3UBVEXTPROC = CFUNCTYPE(None, POINTER(GLubyte)) # GL/glext.h:5271 +PFNGLSECONDARYCOLOR3UIEXTPROC = CFUNCTYPE(None, GLuint, GLuint, GLuint) # GL/glext.h:5272 +PFNGLSECONDARYCOLOR3UIVEXTPROC = CFUNCTYPE(None, POINTER(GLuint)) # GL/glext.h:5273 +PFNGLSECONDARYCOLOR3USEXTPROC = CFUNCTYPE(None, GLushort, GLushort, GLushort) # GL/glext.h:5274 +PFNGLSECONDARYCOLOR3USVEXTPROC = CFUNCTYPE(None, POINTER(GLushort)) # GL/glext.h:5275 +PFNGLSECONDARYCOLORPOINTEREXTPROC = CFUNCTYPE(None, GLint, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:5276 +# EXT_texture_perturb_normal (GL/glext.h:5279) +GL_EXT_texture_perturb_normal = 1 # GL/glext.h:5280 +# GL/glext.h:5282 +glTextureNormalEXT = _link_function('glTextureNormalEXT', None, [GLenum], 'EXT_texture_perturb_normal') + +PFNGLTEXTURENORMALEXTPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:5284 +# EXT_multi_draw_arrays (GL/glext.h:5287) +GL_EXT_multi_draw_arrays = 1 # GL/glext.h:5288 +# GL/glext.h:5290 +glMultiDrawArraysEXT = _link_function('glMultiDrawArraysEXT', None, [GLenum, POINTER(GLint), POINTER(GLsizei), GLsizei], 'EXT_multi_draw_arrays') + +# GL/glext.h:5291 +glMultiDrawElementsEXT = _link_function('glMultiDrawElementsEXT', None, [GLenum, POINTER(GLsizei), GLenum, POINTER(POINTER(GLvoid)), GLsizei], 'EXT_multi_draw_arrays') + +PFNGLMULTIDRAWARRAYSEXTPROC = CFUNCTYPE(None, GLenum, POINTER(GLint), POINTER(GLsizei), GLsizei) # GL/glext.h:5293 +PFNGLMULTIDRAWELEMENTSEXTPROC = CFUNCTYPE(None, GLenum, POINTER(GLsizei), GLenum, POINTER(POINTER(GLvoid)), GLsizei) # GL/glext.h:5294 +# EXT_fog_coord (GL/glext.h:5297) +GL_EXT_fog_coord = 1 # GL/glext.h:5298 +# GL/glext.h:5300 +glFogCoordfEXT = _link_function('glFogCoordfEXT', None, [GLfloat], 'EXT_fog_coord') + +# GL/glext.h:5301 +glFogCoordfvEXT = _link_function('glFogCoordfvEXT', None, [POINTER(GLfloat)], 'EXT_fog_coord') + +# GL/glext.h:5302 +glFogCoorddEXT = _link_function('glFogCoorddEXT', None, [GLdouble], 'EXT_fog_coord') + +# GL/glext.h:5303 +glFogCoorddvEXT = _link_function('glFogCoorddvEXT', None, [POINTER(GLdouble)], 'EXT_fog_coord') + +# GL/glext.h:5304 +glFogCoordPointerEXT = _link_function('glFogCoordPointerEXT', None, [GLenum, GLsizei, POINTER(GLvoid)], 'EXT_fog_coord') + +PFNGLFOGCOORDFEXTPROC = CFUNCTYPE(None, GLfloat) # GL/glext.h:5306 +PFNGLFOGCOORDFVEXTPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:5307 +PFNGLFOGCOORDDEXTPROC = CFUNCTYPE(None, GLdouble) # GL/glext.h:5308 +PFNGLFOGCOORDDVEXTPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:5309 +PFNGLFOGCOORDPOINTEREXTPROC = CFUNCTYPE(None, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:5310 +# REND_screen_coordinates (GL/glext.h:5313) +GL_REND_screen_coordinates = 1 # GL/glext.h:5314 +# EXT_coordinate_frame (GL/glext.h:5317) +GL_EXT_coordinate_frame = 1 # GL/glext.h:5318 +# GL/glext.h:5320 +glTangent3bEXT = _link_function('glTangent3bEXT', None, [GLbyte, GLbyte, GLbyte], 'EXT_coordinate_frame') + +# GL/glext.h:5321 +glTangent3bvEXT = _link_function('glTangent3bvEXT', None, [POINTER(GLbyte)], 'EXT_coordinate_frame') + +# GL/glext.h:5322 +glTangent3dEXT = _link_function('glTangent3dEXT', None, [GLdouble, GLdouble, GLdouble], 'EXT_coordinate_frame') + +# GL/glext.h:5323 +glTangent3dvEXT = _link_function('glTangent3dvEXT', None, [POINTER(GLdouble)], 'EXT_coordinate_frame') + +# GL/glext.h:5324 +glTangent3fEXT = _link_function('glTangent3fEXT', None, [GLfloat, GLfloat, GLfloat], 'EXT_coordinate_frame') + +# GL/glext.h:5325 +glTangent3fvEXT = _link_function('glTangent3fvEXT', None, [POINTER(GLfloat)], 'EXT_coordinate_frame') + +# GL/glext.h:5326 +glTangent3iEXT = _link_function('glTangent3iEXT', None, [GLint, GLint, GLint], 'EXT_coordinate_frame') + +# GL/glext.h:5327 +glTangent3ivEXT = _link_function('glTangent3ivEXT', None, [POINTER(GLint)], 'EXT_coordinate_frame') + +# GL/glext.h:5328 +glTangent3sEXT = _link_function('glTangent3sEXT', None, [GLshort, GLshort, GLshort], 'EXT_coordinate_frame') + +# GL/glext.h:5329 +glTangent3svEXT = _link_function('glTangent3svEXT', None, [POINTER(GLshort)], 'EXT_coordinate_frame') + +# GL/glext.h:5330 +glBinormal3bEXT = _link_function('glBinormal3bEXT', None, [GLbyte, GLbyte, GLbyte], 'EXT_coordinate_frame') + +# GL/glext.h:5331 +glBinormal3bvEXT = _link_function('glBinormal3bvEXT', None, [POINTER(GLbyte)], 'EXT_coordinate_frame') + +# GL/glext.h:5332 +glBinormal3dEXT = _link_function('glBinormal3dEXT', None, [GLdouble, GLdouble, GLdouble], 'EXT_coordinate_frame') + +# GL/glext.h:5333 +glBinormal3dvEXT = _link_function('glBinormal3dvEXT', None, [POINTER(GLdouble)], 'EXT_coordinate_frame') + +# GL/glext.h:5334 +glBinormal3fEXT = _link_function('glBinormal3fEXT', None, [GLfloat, GLfloat, GLfloat], 'EXT_coordinate_frame') + +# GL/glext.h:5335 +glBinormal3fvEXT = _link_function('glBinormal3fvEXT', None, [POINTER(GLfloat)], 'EXT_coordinate_frame') + +# GL/glext.h:5336 +glBinormal3iEXT = _link_function('glBinormal3iEXT', None, [GLint, GLint, GLint], 'EXT_coordinate_frame') + +# GL/glext.h:5337 +glBinormal3ivEXT = _link_function('glBinormal3ivEXT', None, [POINTER(GLint)], 'EXT_coordinate_frame') + +# GL/glext.h:5338 +glBinormal3sEXT = _link_function('glBinormal3sEXT', None, [GLshort, GLshort, GLshort], 'EXT_coordinate_frame') + +# GL/glext.h:5339 +glBinormal3svEXT = _link_function('glBinormal3svEXT', None, [POINTER(GLshort)], 'EXT_coordinate_frame') + +# GL/glext.h:5340 +glTangentPointerEXT = _link_function('glTangentPointerEXT', None, [GLenum, GLsizei, POINTER(GLvoid)], 'EXT_coordinate_frame') + +# GL/glext.h:5341 +glBinormalPointerEXT = _link_function('glBinormalPointerEXT', None, [GLenum, GLsizei, POINTER(GLvoid)], 'EXT_coordinate_frame') + +PFNGLTANGENT3BEXTPROC = CFUNCTYPE(None, GLbyte, GLbyte, GLbyte) # GL/glext.h:5343 +PFNGLTANGENT3BVEXTPROC = CFUNCTYPE(None, POINTER(GLbyte)) # GL/glext.h:5344 +PFNGLTANGENT3DEXTPROC = CFUNCTYPE(None, GLdouble, GLdouble, GLdouble) # GL/glext.h:5345 +PFNGLTANGENT3DVEXTPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:5346 +PFNGLTANGENT3FEXTPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat) # GL/glext.h:5347 +PFNGLTANGENT3FVEXTPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:5348 +PFNGLTANGENT3IEXTPROC = CFUNCTYPE(None, GLint, GLint, GLint) # GL/glext.h:5349 +PFNGLTANGENT3IVEXTPROC = CFUNCTYPE(None, POINTER(GLint)) # GL/glext.h:5350 +PFNGLTANGENT3SEXTPROC = CFUNCTYPE(None, GLshort, GLshort, GLshort) # GL/glext.h:5351 +PFNGLTANGENT3SVEXTPROC = CFUNCTYPE(None, POINTER(GLshort)) # GL/glext.h:5352 +PFNGLBINORMAL3BEXTPROC = CFUNCTYPE(None, GLbyte, GLbyte, GLbyte) # GL/glext.h:5353 +PFNGLBINORMAL3BVEXTPROC = CFUNCTYPE(None, POINTER(GLbyte)) # GL/glext.h:5354 +PFNGLBINORMAL3DEXTPROC = CFUNCTYPE(None, GLdouble, GLdouble, GLdouble) # GL/glext.h:5355 +PFNGLBINORMAL3DVEXTPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:5356 +PFNGLBINORMAL3FEXTPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat) # GL/glext.h:5357 +PFNGLBINORMAL3FVEXTPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:5358 +PFNGLBINORMAL3IEXTPROC = CFUNCTYPE(None, GLint, GLint, GLint) # GL/glext.h:5359 +PFNGLBINORMAL3IVEXTPROC = CFUNCTYPE(None, POINTER(GLint)) # GL/glext.h:5360 +PFNGLBINORMAL3SEXTPROC = CFUNCTYPE(None, GLshort, GLshort, GLshort) # GL/glext.h:5361 +PFNGLBINORMAL3SVEXTPROC = CFUNCTYPE(None, POINTER(GLshort)) # GL/glext.h:5362 +PFNGLTANGENTPOINTEREXTPROC = CFUNCTYPE(None, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:5363 +PFNGLBINORMALPOINTEREXTPROC = CFUNCTYPE(None, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:5364 +# EXT_texture_env_combine (GL/glext.h:5367) +GL_EXT_texture_env_combine = 1 # GL/glext.h:5368 +# APPLE_specular_vector (GL/glext.h:5371) +GL_APPLE_specular_vector = 1 # GL/glext.h:5372 +# APPLE_transform_hint (GL/glext.h:5375) +GL_APPLE_transform_hint = 1 # GL/glext.h:5376 +# SGIX_fog_scale (GL/glext.h:5379) +GL_SGIX_fog_scale = 1 # GL/glext.h:5380 +# SUNX_constant_data (GL/glext.h:5383) +GL_SUNX_constant_data = 1 # GL/glext.h:5384 +# GL/glext.h:5386 +glFinishTextureSUNX = _link_function('glFinishTextureSUNX', None, [], 'SUNX_constant_data') + +PFNGLFINISHTEXTURESUNXPROC = CFUNCTYPE(None) # GL/glext.h:5388 +# SUN_global_alpha (GL/glext.h:5391) +GL_SUN_global_alpha = 1 # GL/glext.h:5392 +# GL/glext.h:5394 +glGlobalAlphaFactorbSUN = _link_function('glGlobalAlphaFactorbSUN', None, [GLbyte], 'SUN_global_alpha') + +# GL/glext.h:5395 +glGlobalAlphaFactorsSUN = _link_function('glGlobalAlphaFactorsSUN', None, [GLshort], 'SUN_global_alpha') + +# GL/glext.h:5396 +glGlobalAlphaFactoriSUN = _link_function('glGlobalAlphaFactoriSUN', None, [GLint], 'SUN_global_alpha') + +# GL/glext.h:5397 +glGlobalAlphaFactorfSUN = _link_function('glGlobalAlphaFactorfSUN', None, [GLfloat], 'SUN_global_alpha') + +# GL/glext.h:5398 +glGlobalAlphaFactordSUN = _link_function('glGlobalAlphaFactordSUN', None, [GLdouble], 'SUN_global_alpha') + +# GL/glext.h:5399 +glGlobalAlphaFactorubSUN = _link_function('glGlobalAlphaFactorubSUN', None, [GLubyte], 'SUN_global_alpha') + +# GL/glext.h:5400 +glGlobalAlphaFactorusSUN = _link_function('glGlobalAlphaFactorusSUN', None, [GLushort], 'SUN_global_alpha') + +# GL/glext.h:5401 +glGlobalAlphaFactoruiSUN = _link_function('glGlobalAlphaFactoruiSUN', None, [GLuint], 'SUN_global_alpha') + +PFNGLGLOBALALPHAFACTORBSUNPROC = CFUNCTYPE(None, GLbyte) # GL/glext.h:5403 +PFNGLGLOBALALPHAFACTORSSUNPROC = CFUNCTYPE(None, GLshort) # GL/glext.h:5404 +PFNGLGLOBALALPHAFACTORISUNPROC = CFUNCTYPE(None, GLint) # GL/glext.h:5405 +PFNGLGLOBALALPHAFACTORFSUNPROC = CFUNCTYPE(None, GLfloat) # GL/glext.h:5406 +PFNGLGLOBALALPHAFACTORDSUNPROC = CFUNCTYPE(None, GLdouble) # GL/glext.h:5407 +PFNGLGLOBALALPHAFACTORUBSUNPROC = CFUNCTYPE(None, GLubyte) # GL/glext.h:5408 +PFNGLGLOBALALPHAFACTORUSSUNPROC = CFUNCTYPE(None, GLushort) # GL/glext.h:5409 +PFNGLGLOBALALPHAFACTORUISUNPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:5410 +# SUN_triangle_list (GL/glext.h:5413) +GL_SUN_triangle_list = 1 # GL/glext.h:5414 +# GL/glext.h:5416 +glReplacementCodeuiSUN = _link_function('glReplacementCodeuiSUN', None, [GLuint], 'SUN_triangle_list') + +# GL/glext.h:5417 +glReplacementCodeusSUN = _link_function('glReplacementCodeusSUN', None, [GLushort], 'SUN_triangle_list') + +# GL/glext.h:5418 +glReplacementCodeubSUN = _link_function('glReplacementCodeubSUN', None, [GLubyte], 'SUN_triangle_list') + +# GL/glext.h:5419 +glReplacementCodeuivSUN = _link_function('glReplacementCodeuivSUN', None, [POINTER(GLuint)], 'SUN_triangle_list') + +# GL/glext.h:5420 +glReplacementCodeusvSUN = _link_function('glReplacementCodeusvSUN', None, [POINTER(GLushort)], 'SUN_triangle_list') + +# GL/glext.h:5421 +glReplacementCodeubvSUN = _link_function('glReplacementCodeubvSUN', None, [POINTER(GLubyte)], 'SUN_triangle_list') + +# GL/glext.h:5422 +glReplacementCodePointerSUN = _link_function('glReplacementCodePointerSUN', None, [GLenum, GLsizei, POINTER(POINTER(GLvoid))], 'SUN_triangle_list') + +PFNGLREPLACEMENTCODEUISUNPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:5424 +PFNGLREPLACEMENTCODEUSSUNPROC = CFUNCTYPE(None, GLushort) # GL/glext.h:5425 +PFNGLREPLACEMENTCODEUBSUNPROC = CFUNCTYPE(None, GLubyte) # GL/glext.h:5426 +PFNGLREPLACEMENTCODEUIVSUNPROC = CFUNCTYPE(None, POINTER(GLuint)) # GL/glext.h:5427 +PFNGLREPLACEMENTCODEUSVSUNPROC = CFUNCTYPE(None, POINTER(GLushort)) # GL/glext.h:5428 +PFNGLREPLACEMENTCODEUBVSUNPROC = CFUNCTYPE(None, POINTER(GLubyte)) # GL/glext.h:5429 +PFNGLREPLACEMENTCODEPOINTERSUNPROC = CFUNCTYPE(None, GLenum, GLsizei, POINTER(POINTER(GLvoid))) # GL/glext.h:5430 +# SUN_vertex (GL/glext.h:5433) +GL_SUN_vertex = 1 # GL/glext.h:5434 +# GL/glext.h:5436 +glColor4ubVertex2fSUN = _link_function('glColor4ubVertex2fSUN', None, [GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5437 +glColor4ubVertex2fvSUN = _link_function('glColor4ubVertex2fvSUN', None, [POINTER(GLubyte), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5438 +glColor4ubVertex3fSUN = _link_function('glColor4ubVertex3fSUN', None, [GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5439 +glColor4ubVertex3fvSUN = _link_function('glColor4ubVertex3fvSUN', None, [POINTER(GLubyte), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5440 +glColor3fVertex3fSUN = _link_function('glColor3fVertex3fSUN', None, [GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5441 +glColor3fVertex3fvSUN = _link_function('glColor3fVertex3fvSUN', None, [POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5442 +glNormal3fVertex3fSUN = _link_function('glNormal3fVertex3fSUN', None, [GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5443 +glNormal3fVertex3fvSUN = _link_function('glNormal3fVertex3fvSUN', None, [POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5444 +glColor4fNormal3fVertex3fSUN = _link_function('glColor4fNormal3fVertex3fSUN', None, [GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5445 +glColor4fNormal3fVertex3fvSUN = _link_function('glColor4fNormal3fVertex3fvSUN', None, [POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5446 +glTexCoord2fVertex3fSUN = _link_function('glTexCoord2fVertex3fSUN', None, [GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5447 +glTexCoord2fVertex3fvSUN = _link_function('glTexCoord2fVertex3fvSUN', None, [POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5448 +glTexCoord4fVertex4fSUN = _link_function('glTexCoord4fVertex4fSUN', None, [GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5449 +glTexCoord4fVertex4fvSUN = _link_function('glTexCoord4fVertex4fvSUN', None, [POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5450 +glTexCoord2fColor4ubVertex3fSUN = _link_function('glTexCoord2fColor4ubVertex3fSUN', None, [GLfloat, GLfloat, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5451 +glTexCoord2fColor4ubVertex3fvSUN = _link_function('glTexCoord2fColor4ubVertex3fvSUN', None, [POINTER(GLfloat), POINTER(GLubyte), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5452 +glTexCoord2fColor3fVertex3fSUN = _link_function('glTexCoord2fColor3fVertex3fSUN', None, [GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5453 +glTexCoord2fColor3fVertex3fvSUN = _link_function('glTexCoord2fColor3fVertex3fvSUN', None, [POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5454 +glTexCoord2fNormal3fVertex3fSUN = _link_function('glTexCoord2fNormal3fVertex3fSUN', None, [GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5455 +glTexCoord2fNormal3fVertex3fvSUN = _link_function('glTexCoord2fNormal3fVertex3fvSUN', None, [POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5456 +glTexCoord2fColor4fNormal3fVertex3fSUN = _link_function('glTexCoord2fColor4fNormal3fVertex3fSUN', None, [GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5457 +glTexCoord2fColor4fNormal3fVertex3fvSUN = _link_function('glTexCoord2fColor4fNormal3fVertex3fvSUN', None, [POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5458 +glTexCoord4fColor4fNormal3fVertex4fSUN = _link_function('glTexCoord4fColor4fNormal3fVertex4fSUN', None, [GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5459 +glTexCoord4fColor4fNormal3fVertex4fvSUN = _link_function('glTexCoord4fColor4fNormal3fVertex4fvSUN', None, [POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5460 +glReplacementCodeuiVertex3fSUN = _link_function('glReplacementCodeuiVertex3fSUN', None, [GLuint, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5461 +glReplacementCodeuiVertex3fvSUN = _link_function('glReplacementCodeuiVertex3fvSUN', None, [POINTER(GLuint), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5462 +glReplacementCodeuiColor4ubVertex3fSUN = _link_function('glReplacementCodeuiColor4ubVertex3fSUN', None, [GLuint, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5463 +glReplacementCodeuiColor4ubVertex3fvSUN = _link_function('glReplacementCodeuiColor4ubVertex3fvSUN', None, [POINTER(GLuint), POINTER(GLubyte), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5464 +glReplacementCodeuiColor3fVertex3fSUN = _link_function('glReplacementCodeuiColor3fVertex3fSUN', None, [GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5465 +glReplacementCodeuiColor3fVertex3fvSUN = _link_function('glReplacementCodeuiColor3fVertex3fvSUN', None, [POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5466 +glReplacementCodeuiNormal3fVertex3fSUN = _link_function('glReplacementCodeuiNormal3fVertex3fSUN', None, [GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5467 +glReplacementCodeuiNormal3fVertex3fvSUN = _link_function('glReplacementCodeuiNormal3fVertex3fvSUN', None, [POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5468 +glReplacementCodeuiColor4fNormal3fVertex3fSUN = _link_function('glReplacementCodeuiColor4fNormal3fVertex3fSUN', None, [GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5469 +glReplacementCodeuiColor4fNormal3fVertex3fvSUN = _link_function('glReplacementCodeuiColor4fNormal3fVertex3fvSUN', None, [POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5470 +glReplacementCodeuiTexCoord2fVertex3fSUN = _link_function('glReplacementCodeuiTexCoord2fVertex3fSUN', None, [GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5471 +glReplacementCodeuiTexCoord2fVertex3fvSUN = _link_function('glReplacementCodeuiTexCoord2fVertex3fvSUN', None, [POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5472 +glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN = _link_function('glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN', None, [GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5473 +glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN = _link_function('glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN', None, [POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +# GL/glext.h:5474 +glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN = _link_function('glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN', None, [GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat], 'SUN_vertex') + +# GL/glext.h:5475 +glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN = _link_function('glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN', None, [POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)], 'SUN_vertex') + +PFNGLCOLOR4UBVERTEX2FSUNPROC = CFUNCTYPE(None, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat) # GL/glext.h:5477 +PFNGLCOLOR4UBVERTEX2FVSUNPROC = CFUNCTYPE(None, POINTER(GLubyte), POINTER(GLfloat)) # GL/glext.h:5478 +PFNGLCOLOR4UBVERTEX3FSUNPROC = CFUNCTYPE(None, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat) # GL/glext.h:5479 +PFNGLCOLOR4UBVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLubyte), POINTER(GLfloat)) # GL/glext.h:5480 +PFNGLCOLOR3FVERTEX3FSUNPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5481 +PFNGLCOLOR3FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5482 +PFNGLNORMAL3FVERTEX3FSUNPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5483 +PFNGLNORMAL3FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5484 +PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5485 +PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5486 +PFNGLTEXCOORD2FVERTEX3FSUNPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5487 +PFNGLTEXCOORD2FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5488 +PFNGLTEXCOORD4FVERTEX4FSUNPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5489 +PFNGLTEXCOORD4FVERTEX4FVSUNPROC = CFUNCTYPE(None, POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5490 +PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat) # GL/glext.h:5491 +PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLfloat), POINTER(GLubyte), POINTER(GLfloat)) # GL/glext.h:5492 +PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5493 +PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5494 +PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5495 +PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5496 +PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5497 +PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5498 +PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5499 +PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC = CFUNCTYPE(None, POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5500 +PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat) # GL/glext.h:5501 +PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLuint), POINTER(GLfloat)) # GL/glext.h:5502 +PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC = CFUNCTYPE(None, GLuint, GLubyte, GLubyte, GLubyte, GLubyte, GLfloat, GLfloat, GLfloat) # GL/glext.h:5503 +PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLuint), POINTER(GLubyte), POINTER(GLfloat)) # GL/glext.h:5504 +PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5505 +PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5506 +PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5507 +PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5508 +PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5509 +PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5510 +PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5511 +PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5512 +PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5513 +PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5514 +PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5515 +PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC = CFUNCTYPE(None, POINTER(GLuint), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLfloat)) # GL/glext.h:5516 +# EXT_blend_func_separate (GL/glext.h:5519) +GL_EXT_blend_func_separate = 1 # GL/glext.h:5520 +# GL/glext.h:5522 +glBlendFuncSeparateEXT = _link_function('glBlendFuncSeparateEXT', None, [GLenum, GLenum, GLenum, GLenum], 'EXT_blend_func_separate') + +PFNGLBLENDFUNCSEPARATEEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLenum) # GL/glext.h:5524 +# INGR_blend_func_separate (GL/glext.h:5527) +GL_INGR_blend_func_separate = 1 # GL/glext.h:5528 +# GL/glext.h:5530 +glBlendFuncSeparateINGR = _link_function('glBlendFuncSeparateINGR', None, [GLenum, GLenum, GLenum, GLenum], 'INGR_blend_func_separate') + +PFNGLBLENDFUNCSEPARATEINGRPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLenum) # GL/glext.h:5532 +# INGR_color_clamp (GL/glext.h:5535) +GL_INGR_color_clamp = 1 # GL/glext.h:5536 +# INGR_interlace_read (GL/glext.h:5539) +GL_INGR_interlace_read = 1 # GL/glext.h:5540 +# EXT_stencil_wrap (GL/glext.h:5543) +GL_EXT_stencil_wrap = 1 # GL/glext.h:5544 +# EXT_422_pixels (GL/glext.h:5547) +GL_EXT_422_pixels = 1 # GL/glext.h:5548 +# NV_texgen_reflection (GL/glext.h:5551) +GL_NV_texgen_reflection = 1 # GL/glext.h:5552 +# SUN_convolution_border_modes (GL/glext.h:5555) +GL_SUN_convolution_border_modes = 1 # GL/glext.h:5556 +# EXT_texture_env_add (GL/glext.h:5559) +GL_EXT_texture_env_add = 1 # GL/glext.h:5560 +# EXT_texture_lod_bias (GL/glext.h:5563) +GL_EXT_texture_lod_bias = 1 # GL/glext.h:5564 +# EXT_texture_filter_anisotropic (GL/glext.h:5567) +GL_EXT_texture_filter_anisotropic = 1 # GL/glext.h:5568 +# EXT_vertex_weighting (GL/glext.h:5571) +GL_EXT_vertex_weighting = 1 # GL/glext.h:5572 +# GL/glext.h:5574 +glVertexWeightfEXT = _link_function('glVertexWeightfEXT', None, [GLfloat], 'EXT_vertex_weighting') + +# GL/glext.h:5575 +glVertexWeightfvEXT = _link_function('glVertexWeightfvEXT', None, [POINTER(GLfloat)], 'EXT_vertex_weighting') + +# GL/glext.h:5576 +glVertexWeightPointerEXT = _link_function('glVertexWeightPointerEXT', None, [GLsizei, GLenum, GLsizei, POINTER(GLvoid)], 'EXT_vertex_weighting') + +PFNGLVERTEXWEIGHTFEXTPROC = CFUNCTYPE(None, GLfloat) # GL/glext.h:5578 +PFNGLVERTEXWEIGHTFVEXTPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:5579 +PFNGLVERTEXWEIGHTPOINTEREXTPROC = CFUNCTYPE(None, GLsizei, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:5580 +# NV_light_max_exponent (GL/glext.h:5583) +GL_NV_light_max_exponent = 1 # GL/glext.h:5584 +# NV_vertex_array_range (GL/glext.h:5587) +GL_NV_vertex_array_range = 1 # GL/glext.h:5588 +# GL/glext.h:5590 +glFlushVertexArrayRangeNV = _link_function('glFlushVertexArrayRangeNV', None, [], 'NV_vertex_array_range') + +# GL/glext.h:5591 +glVertexArrayRangeNV = _link_function('glVertexArrayRangeNV', None, [GLsizei, POINTER(GLvoid)], 'NV_vertex_array_range') + +PFNGLFLUSHVERTEXARRAYRANGENVPROC = CFUNCTYPE(None) # GL/glext.h:5593 +PFNGLVERTEXARRAYRANGENVPROC = CFUNCTYPE(None, GLsizei, POINTER(GLvoid)) # GL/glext.h:5594 +# NV_register_combiners (GL/glext.h:5597) +GL_NV_register_combiners = 1 # GL/glext.h:5598 +# GL/glext.h:5600 +glCombinerParameterfvNV = _link_function('glCombinerParameterfvNV', None, [GLenum, POINTER(GLfloat)], 'NV_register_combiners') + +# GL/glext.h:5601 +glCombinerParameterfNV = _link_function('glCombinerParameterfNV', None, [GLenum, GLfloat], 'NV_register_combiners') + +# GL/glext.h:5602 +glCombinerParameterivNV = _link_function('glCombinerParameterivNV', None, [GLenum, POINTER(GLint)], 'NV_register_combiners') + +# GL/glext.h:5603 +glCombinerParameteriNV = _link_function('glCombinerParameteriNV', None, [GLenum, GLint], 'NV_register_combiners') + +# GL/glext.h:5604 +glCombinerInputNV = _link_function('glCombinerInputNV', None, [GLenum, GLenum, GLenum, GLenum, GLenum, GLenum], 'NV_register_combiners') + +# GL/glext.h:5605 +glCombinerOutputNV = _link_function('glCombinerOutputNV', None, [GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLboolean, GLboolean, GLboolean], 'NV_register_combiners') + +# GL/glext.h:5606 +glFinalCombinerInputNV = _link_function('glFinalCombinerInputNV', None, [GLenum, GLenum, GLenum, GLenum], 'NV_register_combiners') + +# GL/glext.h:5607 +glGetCombinerInputParameterfvNV = _link_function('glGetCombinerInputParameterfvNV', None, [GLenum, GLenum, GLenum, GLenum, POINTER(GLfloat)], 'NV_register_combiners') + +# GL/glext.h:5608 +glGetCombinerInputParameterivNV = _link_function('glGetCombinerInputParameterivNV', None, [GLenum, GLenum, GLenum, GLenum, POINTER(GLint)], 'NV_register_combiners') + +# GL/glext.h:5609 +glGetCombinerOutputParameterfvNV = _link_function('glGetCombinerOutputParameterfvNV', None, [GLenum, GLenum, GLenum, POINTER(GLfloat)], 'NV_register_combiners') + +# GL/glext.h:5610 +glGetCombinerOutputParameterivNV = _link_function('glGetCombinerOutputParameterivNV', None, [GLenum, GLenum, GLenum, POINTER(GLint)], 'NV_register_combiners') + +# GL/glext.h:5611 +glGetFinalCombinerInputParameterfvNV = _link_function('glGetFinalCombinerInputParameterfvNV', None, [GLenum, GLenum, POINTER(GLfloat)], 'NV_register_combiners') + +# GL/glext.h:5612 +glGetFinalCombinerInputParameterivNV = _link_function('glGetFinalCombinerInputParameterivNV', None, [GLenum, GLenum, POINTER(GLint)], 'NV_register_combiners') + +PFNGLCOMBINERPARAMETERFVNVPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:5614 +PFNGLCOMBINERPARAMETERFNVPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:5615 +PFNGLCOMBINERPARAMETERIVNVPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:5616 +PFNGLCOMBINERPARAMETERINVPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:5617 +PFNGLCOMBINERINPUTNVPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum) # GL/glext.h:5618 +PFNGLCOMBINEROUTPUTNVPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLenum, GLboolean, GLboolean, GLboolean) # GL/glext.h:5619 +PFNGLFINALCOMBINERINPUTNVPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLenum) # GL/glext.h:5620 +PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:5621 +PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:5622 +PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:5623 +PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:5624 +PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:5625 +PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:5626 +# NV_fog_distance (GL/glext.h:5629) +GL_NV_fog_distance = 1 # GL/glext.h:5630 +# NV_texgen_emboss (GL/glext.h:5633) +GL_NV_texgen_emboss = 1 # GL/glext.h:5634 +# NV_blend_square (GL/glext.h:5637) +GL_NV_blend_square = 1 # GL/glext.h:5638 +# NV_texture_env_combine4 (GL/glext.h:5641) +GL_NV_texture_env_combine4 = 1 # GL/glext.h:5642 +# MESA_resize_buffers (GL/glext.h:5645) +GL_MESA_resize_buffers = 1 # GL/glext.h:5646 +# GL/glext.h:5648 +glResizeBuffersMESA = _link_function('glResizeBuffersMESA', None, [], 'MESA_resize_buffers') + +PFNGLRESIZEBUFFERSMESAPROC = CFUNCTYPE(None) # GL/glext.h:5650 +# MESA_window_pos (GL/glext.h:5653) +GL_MESA_window_pos = 1 # GL/glext.h:5654 +# GL/glext.h:5656 +glWindowPos2dMESA = _link_function('glWindowPos2dMESA', None, [GLdouble, GLdouble], 'MESA_window_pos') + +# GL/glext.h:5657 +glWindowPos2dvMESA = _link_function('glWindowPos2dvMESA', None, [POINTER(GLdouble)], 'MESA_window_pos') + +# GL/glext.h:5658 +glWindowPos2fMESA = _link_function('glWindowPos2fMESA', None, [GLfloat, GLfloat], 'MESA_window_pos') + +# GL/glext.h:5659 +glWindowPos2fvMESA = _link_function('glWindowPos2fvMESA', None, [POINTER(GLfloat)], 'MESA_window_pos') + +# GL/glext.h:5660 +glWindowPos2iMESA = _link_function('glWindowPos2iMESA', None, [GLint, GLint], 'MESA_window_pos') + +# GL/glext.h:5661 +glWindowPos2ivMESA = _link_function('glWindowPos2ivMESA', None, [POINTER(GLint)], 'MESA_window_pos') + +# GL/glext.h:5662 +glWindowPos2sMESA = _link_function('glWindowPos2sMESA', None, [GLshort, GLshort], 'MESA_window_pos') + +# GL/glext.h:5663 +glWindowPos2svMESA = _link_function('glWindowPos2svMESA', None, [POINTER(GLshort)], 'MESA_window_pos') + +# GL/glext.h:5664 +glWindowPos3dMESA = _link_function('glWindowPos3dMESA', None, [GLdouble, GLdouble, GLdouble], 'MESA_window_pos') + +# GL/glext.h:5665 +glWindowPos3dvMESA = _link_function('glWindowPos3dvMESA', None, [POINTER(GLdouble)], 'MESA_window_pos') + +# GL/glext.h:5666 +glWindowPos3fMESA = _link_function('glWindowPos3fMESA', None, [GLfloat, GLfloat, GLfloat], 'MESA_window_pos') + +# GL/glext.h:5667 +glWindowPos3fvMESA = _link_function('glWindowPos3fvMESA', None, [POINTER(GLfloat)], 'MESA_window_pos') + +# GL/glext.h:5668 +glWindowPos3iMESA = _link_function('glWindowPos3iMESA', None, [GLint, GLint, GLint], 'MESA_window_pos') + +# GL/glext.h:5669 +glWindowPos3ivMESA = _link_function('glWindowPos3ivMESA', None, [POINTER(GLint)], 'MESA_window_pos') + +# GL/glext.h:5670 +glWindowPos3sMESA = _link_function('glWindowPos3sMESA', None, [GLshort, GLshort, GLshort], 'MESA_window_pos') + +# GL/glext.h:5671 +glWindowPos3svMESA = _link_function('glWindowPos3svMESA', None, [POINTER(GLshort)], 'MESA_window_pos') + +# GL/glext.h:5672 +glWindowPos4dMESA = _link_function('glWindowPos4dMESA', None, [GLdouble, GLdouble, GLdouble, GLdouble], 'MESA_window_pos') + +# GL/glext.h:5673 +glWindowPos4dvMESA = _link_function('glWindowPos4dvMESA', None, [POINTER(GLdouble)], 'MESA_window_pos') + +# GL/glext.h:5674 +glWindowPos4fMESA = _link_function('glWindowPos4fMESA', None, [GLfloat, GLfloat, GLfloat, GLfloat], 'MESA_window_pos') + +# GL/glext.h:5675 +glWindowPos4fvMESA = _link_function('glWindowPos4fvMESA', None, [POINTER(GLfloat)], 'MESA_window_pos') + +# GL/glext.h:5676 +glWindowPos4iMESA = _link_function('glWindowPos4iMESA', None, [GLint, GLint, GLint, GLint], 'MESA_window_pos') + +# GL/glext.h:5677 +glWindowPos4ivMESA = _link_function('glWindowPos4ivMESA', None, [POINTER(GLint)], 'MESA_window_pos') + +# GL/glext.h:5678 +glWindowPos4sMESA = _link_function('glWindowPos4sMESA', None, [GLshort, GLshort, GLshort, GLshort], 'MESA_window_pos') + +# GL/glext.h:5679 +glWindowPos4svMESA = _link_function('glWindowPos4svMESA', None, [POINTER(GLshort)], 'MESA_window_pos') + +PFNGLWINDOWPOS2DMESAPROC = CFUNCTYPE(None, GLdouble, GLdouble) # GL/glext.h:5681 +PFNGLWINDOWPOS2DVMESAPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:5682 +PFNGLWINDOWPOS2FMESAPROC = CFUNCTYPE(None, GLfloat, GLfloat) # GL/glext.h:5683 +PFNGLWINDOWPOS2FVMESAPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:5684 +PFNGLWINDOWPOS2IMESAPROC = CFUNCTYPE(None, GLint, GLint) # GL/glext.h:5685 +PFNGLWINDOWPOS2IVMESAPROC = CFUNCTYPE(None, POINTER(GLint)) # GL/glext.h:5686 +PFNGLWINDOWPOS2SMESAPROC = CFUNCTYPE(None, GLshort, GLshort) # GL/glext.h:5687 +PFNGLWINDOWPOS2SVMESAPROC = CFUNCTYPE(None, POINTER(GLshort)) # GL/glext.h:5688 +PFNGLWINDOWPOS3DMESAPROC = CFUNCTYPE(None, GLdouble, GLdouble, GLdouble) # GL/glext.h:5689 +PFNGLWINDOWPOS3DVMESAPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:5690 +PFNGLWINDOWPOS3FMESAPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat) # GL/glext.h:5691 +PFNGLWINDOWPOS3FVMESAPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:5692 +PFNGLWINDOWPOS3IMESAPROC = CFUNCTYPE(None, GLint, GLint, GLint) # GL/glext.h:5693 +PFNGLWINDOWPOS3IVMESAPROC = CFUNCTYPE(None, POINTER(GLint)) # GL/glext.h:5694 +PFNGLWINDOWPOS3SMESAPROC = CFUNCTYPE(None, GLshort, GLshort, GLshort) # GL/glext.h:5695 +PFNGLWINDOWPOS3SVMESAPROC = CFUNCTYPE(None, POINTER(GLshort)) # GL/glext.h:5696 +PFNGLWINDOWPOS4DMESAPROC = CFUNCTYPE(None, GLdouble, GLdouble, GLdouble, GLdouble) # GL/glext.h:5697 +PFNGLWINDOWPOS4DVMESAPROC = CFUNCTYPE(None, POINTER(GLdouble)) # GL/glext.h:5698 +PFNGLWINDOWPOS4FMESAPROC = CFUNCTYPE(None, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5699 +PFNGLWINDOWPOS4FVMESAPROC = CFUNCTYPE(None, POINTER(GLfloat)) # GL/glext.h:5700 +PFNGLWINDOWPOS4IMESAPROC = CFUNCTYPE(None, GLint, GLint, GLint, GLint) # GL/glext.h:5701 +PFNGLWINDOWPOS4IVMESAPROC = CFUNCTYPE(None, POINTER(GLint)) # GL/glext.h:5702 +PFNGLWINDOWPOS4SMESAPROC = CFUNCTYPE(None, GLshort, GLshort, GLshort, GLshort) # GL/glext.h:5703 +PFNGLWINDOWPOS4SVMESAPROC = CFUNCTYPE(None, POINTER(GLshort)) # GL/glext.h:5704 +# EXT_texture_compression_s3tc (GL/glext.h:5707) +GL_EXT_texture_compression_s3tc = 1 # GL/glext.h:5708 +# IBM_cull_vertex (GL/glext.h:5711) +GL_IBM_cull_vertex = 1 # GL/glext.h:5712 +# IBM_multimode_draw_arrays (GL/glext.h:5715) +GL_IBM_multimode_draw_arrays = 1 # GL/glext.h:5716 +# GL/glext.h:5718 +glMultiModeDrawArraysIBM = _link_function('glMultiModeDrawArraysIBM', None, [POINTER(GLenum), POINTER(GLint), POINTER(GLsizei), GLsizei, GLint], 'IBM_multimode_draw_arrays') + +# GL/glext.h:5719 +glMultiModeDrawElementsIBM = _link_function('glMultiModeDrawElementsIBM', None, [POINTER(GLenum), POINTER(GLsizei), GLenum, POINTER(POINTER(GLvoid)), GLsizei, GLint], 'IBM_multimode_draw_arrays') + +PFNGLMULTIMODEDRAWARRAYSIBMPROC = CFUNCTYPE(None, POINTER(GLenum), POINTER(GLint), POINTER(GLsizei), GLsizei, GLint) # GL/glext.h:5721 +PFNGLMULTIMODEDRAWELEMENTSIBMPROC = CFUNCTYPE(None, POINTER(GLenum), POINTER(GLsizei), GLenum, POINTER(POINTER(GLvoid)), GLsizei, GLint) # GL/glext.h:5722 +# IBM_vertex_array_lists (GL/glext.h:5725) +GL_IBM_vertex_array_lists = 1 # GL/glext.h:5726 +# GL/glext.h:5728 +glColorPointerListIBM = _link_function('glColorPointerListIBM', None, [GLint, GLenum, GLint, POINTER(POINTER(GLvoid)), GLint], 'IBM_vertex_array_lists') + +# GL/glext.h:5729 +glSecondaryColorPointerListIBM = _link_function('glSecondaryColorPointerListIBM', None, [GLint, GLenum, GLint, POINTER(POINTER(GLvoid)), GLint], 'IBM_vertex_array_lists') + +# GL/glext.h:5730 +glEdgeFlagPointerListIBM = _link_function('glEdgeFlagPointerListIBM', None, [GLint, POINTER(POINTER(GLboolean)), GLint], 'IBM_vertex_array_lists') + +# GL/glext.h:5731 +glFogCoordPointerListIBM = _link_function('glFogCoordPointerListIBM', None, [GLenum, GLint, POINTER(POINTER(GLvoid)), GLint], 'IBM_vertex_array_lists') + +# GL/glext.h:5732 +glIndexPointerListIBM = _link_function('glIndexPointerListIBM', None, [GLenum, GLint, POINTER(POINTER(GLvoid)), GLint], 'IBM_vertex_array_lists') + +# GL/glext.h:5733 +glNormalPointerListIBM = _link_function('glNormalPointerListIBM', None, [GLenum, GLint, POINTER(POINTER(GLvoid)), GLint], 'IBM_vertex_array_lists') + +# GL/glext.h:5734 +glTexCoordPointerListIBM = _link_function('glTexCoordPointerListIBM', None, [GLint, GLenum, GLint, POINTER(POINTER(GLvoid)), GLint], 'IBM_vertex_array_lists') + +# GL/glext.h:5735 +glVertexPointerListIBM = _link_function('glVertexPointerListIBM', None, [GLint, GLenum, GLint, POINTER(POINTER(GLvoid)), GLint], 'IBM_vertex_array_lists') + +PFNGLCOLORPOINTERLISTIBMPROC = CFUNCTYPE(None, GLint, GLenum, GLint, POINTER(POINTER(GLvoid)), GLint) # GL/glext.h:5737 +PFNGLSECONDARYCOLORPOINTERLISTIBMPROC = CFUNCTYPE(None, GLint, GLenum, GLint, POINTER(POINTER(GLvoid)), GLint) # GL/glext.h:5738 +PFNGLEDGEFLAGPOINTERLISTIBMPROC = CFUNCTYPE(None, GLint, POINTER(POINTER(GLboolean)), GLint) # GL/glext.h:5739 +PFNGLFOGCOORDPOINTERLISTIBMPROC = CFUNCTYPE(None, GLenum, GLint, POINTER(POINTER(GLvoid)), GLint) # GL/glext.h:5740 +PFNGLINDEXPOINTERLISTIBMPROC = CFUNCTYPE(None, GLenum, GLint, POINTER(POINTER(GLvoid)), GLint) # GL/glext.h:5741 +PFNGLNORMALPOINTERLISTIBMPROC = CFUNCTYPE(None, GLenum, GLint, POINTER(POINTER(GLvoid)), GLint) # GL/glext.h:5742 +PFNGLTEXCOORDPOINTERLISTIBMPROC = CFUNCTYPE(None, GLint, GLenum, GLint, POINTER(POINTER(GLvoid)), GLint) # GL/glext.h:5743 +PFNGLVERTEXPOINTERLISTIBMPROC = CFUNCTYPE(None, GLint, GLenum, GLint, POINTER(POINTER(GLvoid)), GLint) # GL/glext.h:5744 +# SGIX_subsample (GL/glext.h:5747) +GL_SGIX_subsample = 1 # GL/glext.h:5748 +# SGIX_ycrcba (GL/glext.h:5751) +GL_SGIX_ycrcba = 1 # GL/glext.h:5752 +# SGIX_ycrcb_subsample (GL/glext.h:5755) +GL_SGIX_ycrcb_subsample = 1 # GL/glext.h:5756 +# SGIX_depth_pass_instrument (GL/glext.h:5759) +GL_SGIX_depth_pass_instrument = 1 # GL/glext.h:5760 +# 3DFX_texture_compression_FXT1 (GL/glext.h:5763) +GL_3DFX_texture_compression_FXT1 = 1 # GL/glext.h:5764 +# 3DFX_multisample (GL/glext.h:5767) +GL_3DFX_multisample = 1 # GL/glext.h:5768 +# 3DFX_tbuffer (GL/glext.h:5771) +GL_3DFX_tbuffer = 1 # GL/glext.h:5772 +# GL/glext.h:5774 +glTbufferMask3DFX = _link_function('glTbufferMask3DFX', None, [GLuint], '3DFX_tbuffer') + +PFNGLTBUFFERMASK3DFXPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:5776 +# EXT_multisample (GL/glext.h:5779) +GL_EXT_multisample = 1 # GL/glext.h:5780 +# GL/glext.h:5782 +glSampleMaskEXT = _link_function('glSampleMaskEXT', None, [GLclampf, GLboolean], 'EXT_multisample') + +# GL/glext.h:5783 +glSamplePatternEXT = _link_function('glSamplePatternEXT', None, [GLenum], 'EXT_multisample') + +PFNGLSAMPLEMASKEXTPROC = CFUNCTYPE(None, GLclampf, GLboolean) # GL/glext.h:5785 +PFNGLSAMPLEPATTERNEXTPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:5786 +# SGIX_vertex_preclip (GL/glext.h:5789) +GL_SGIX_vertex_preclip = 1 # GL/glext.h:5790 +# SGIX_convolution_accuracy (GL/glext.h:5793) +GL_SGIX_convolution_accuracy = 1 # GL/glext.h:5794 +# SGIX_resample (GL/glext.h:5797) +GL_SGIX_resample = 1 # GL/glext.h:5798 +# SGIS_point_line_texgen (GL/glext.h:5801) +GL_SGIS_point_line_texgen = 1 # GL/glext.h:5802 +# SGIS_texture_color_mask (GL/glext.h:5805) +GL_SGIS_texture_color_mask = 1 # GL/glext.h:5806 +# GL/glext.h:5808 +glTextureColorMaskSGIS = _link_function('glTextureColorMaskSGIS', None, [GLboolean, GLboolean, GLboolean, GLboolean], 'SGIS_texture_color_mask') + +PFNGLTEXTURECOLORMASKSGISPROC = CFUNCTYPE(None, GLboolean, GLboolean, GLboolean, GLboolean) # GL/glext.h:5810 +# SGIX_igloo_interface (GL/glext.h:5813) +GL_SGIX_igloo_interface = 1 # GL/glext.h:5814 +# GL/glext.h:5816 +glIglooInterfaceSGIX = _link_function('glIglooInterfaceSGIX', None, [GLenum, POINTER(GLvoid)], 'SGIX_igloo_interface') + +PFNGLIGLOOINTERFACESGIXPROC = CFUNCTYPE(None, GLenum, POINTER(GLvoid)) # GL/glext.h:5818 +# EXT_texture_env_dot3 (GL/glext.h:5821) +GL_EXT_texture_env_dot3 = 1 # GL/glext.h:5822 +# ATI_texture_mirror_once (GL/glext.h:5825) +GL_ATI_texture_mirror_once = 1 # GL/glext.h:5826 +# NV_fence (GL/glext.h:5829) +GL_NV_fence = 1 # GL/glext.h:5830 +# GL/glext.h:5832 +glDeleteFencesNV = _link_function('glDeleteFencesNV', None, [GLsizei, POINTER(GLuint)], 'NV_fence') + +# GL/glext.h:5833 +glGenFencesNV = _link_function('glGenFencesNV', None, [GLsizei, POINTER(GLuint)], 'NV_fence') + +# GL/glext.h:5834 +glIsFenceNV = _link_function('glIsFenceNV', GLboolean, [GLuint], 'NV_fence') + +# GL/glext.h:5835 +glTestFenceNV = _link_function('glTestFenceNV', GLboolean, [GLuint], 'NV_fence') + +# GL/glext.h:5836 +glGetFenceivNV = _link_function('glGetFenceivNV', None, [GLuint, GLenum, POINTER(GLint)], 'NV_fence') + +# GL/glext.h:5837 +glFinishFenceNV = _link_function('glFinishFenceNV', None, [GLuint], 'NV_fence') + +# GL/glext.h:5838 +glSetFenceNV = _link_function('glSetFenceNV', None, [GLuint, GLenum], 'NV_fence') + +PFNGLDELETEFENCESNVPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:5840 +PFNGLGENFENCESNVPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:5841 +PFNGLISFENCENVPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:5842 +PFNGLTESTFENCENVPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:5843 +PFNGLGETFENCEIVNVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:5844 +PFNGLFINISHFENCENVPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:5845 +PFNGLSETFENCENVPROC = CFUNCTYPE(None, GLuint, GLenum) # GL/glext.h:5846 +# NV_evaluators (GL/glext.h:5849) +GL_NV_evaluators = 1 # GL/glext.h:5850 +# GL/glext.h:5852 +glMapControlPointsNV = _link_function('glMapControlPointsNV', None, [GLenum, GLuint, GLenum, GLsizei, GLsizei, GLint, GLint, GLboolean, POINTER(GLvoid)], 'NV_evaluators') + +# GL/glext.h:5853 +glMapParameterivNV = _link_function('glMapParameterivNV', None, [GLenum, GLenum, POINTER(GLint)], 'NV_evaluators') + +# GL/glext.h:5854 +glMapParameterfvNV = _link_function('glMapParameterfvNV', None, [GLenum, GLenum, POINTER(GLfloat)], 'NV_evaluators') + +# GL/glext.h:5855 +glGetMapControlPointsNV = _link_function('glGetMapControlPointsNV', None, [GLenum, GLuint, GLenum, GLsizei, GLsizei, GLboolean, POINTER(GLvoid)], 'NV_evaluators') + +# GL/glext.h:5856 +glGetMapParameterivNV = _link_function('glGetMapParameterivNV', None, [GLenum, GLenum, POINTER(GLint)], 'NV_evaluators') + +# GL/glext.h:5857 +glGetMapParameterfvNV = _link_function('glGetMapParameterfvNV', None, [GLenum, GLenum, POINTER(GLfloat)], 'NV_evaluators') + +# GL/glext.h:5858 +glGetMapAttribParameterivNV = _link_function('glGetMapAttribParameterivNV', None, [GLenum, GLuint, GLenum, POINTER(GLint)], 'NV_evaluators') + +# GL/glext.h:5859 +glGetMapAttribParameterfvNV = _link_function('glGetMapAttribParameterfvNV', None, [GLenum, GLuint, GLenum, POINTER(GLfloat)], 'NV_evaluators') + +# GL/glext.h:5860 +glEvalMapsNV = _link_function('glEvalMapsNV', None, [GLenum, GLenum], 'NV_evaluators') + +PFNGLMAPCONTROLPOINTSNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLenum, GLsizei, GLsizei, GLint, GLint, GLboolean, POINTER(GLvoid)) # GL/glext.h:5862 +PFNGLMAPPARAMETERIVNVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:5863 +PFNGLMAPPARAMETERFVNVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:5864 +PFNGLGETMAPCONTROLPOINTSNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLenum, GLsizei, GLsizei, GLboolean, POINTER(GLvoid)) # GL/glext.h:5865 +PFNGLGETMAPPARAMETERIVNVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:5866 +PFNGLGETMAPPARAMETERFVNVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:5867 +PFNGLGETMAPATTRIBPARAMETERIVNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:5868 +PFNGLGETMAPATTRIBPARAMETERFVNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:5869 +PFNGLEVALMAPSNVPROC = CFUNCTYPE(None, GLenum, GLenum) # GL/glext.h:5870 +# NV_packed_depth_stencil (GL/glext.h:5873) +GL_NV_packed_depth_stencil = 1 # GL/glext.h:5874 +# NV_register_combiners2 (GL/glext.h:5877) +GL_NV_register_combiners2 = 1 # GL/glext.h:5878 +# GL/glext.h:5880 +glCombinerStageParameterfvNV = _link_function('glCombinerStageParameterfvNV', None, [GLenum, GLenum, POINTER(GLfloat)], 'NV_register_combiners2') + +# GL/glext.h:5881 +glGetCombinerStageParameterfvNV = _link_function('glGetCombinerStageParameterfvNV', None, [GLenum, GLenum, POINTER(GLfloat)], 'NV_register_combiners2') + +PFNGLCOMBINERSTAGEPARAMETERFVNVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:5883 +PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:5884 +# NV_texture_compression_vtc (GL/glext.h:5887) +GL_NV_texture_compression_vtc = 1 # GL/glext.h:5888 +# NV_texture_rectangle (GL/glext.h:5891) +GL_NV_texture_rectangle = 1 # GL/glext.h:5892 +# NV_texture_shader (GL/glext.h:5895) +GL_NV_texture_shader = 1 # GL/glext.h:5896 +# NV_texture_shader2 (GL/glext.h:5899) +GL_NV_texture_shader2 = 1 # GL/glext.h:5900 +# NV_vertex_array_range2 (GL/glext.h:5903) +GL_NV_vertex_array_range2 = 1 # GL/glext.h:5904 +# NV_vertex_program (GL/glext.h:5907) +GL_NV_vertex_program = 1 # GL/glext.h:5908 +# GL/glext.h:5910 +glAreProgramsResidentNV = _link_function('glAreProgramsResidentNV', GLboolean, [GLsizei, POINTER(GLuint), POINTER(GLboolean)], 'NV_vertex_program') + +# GL/glext.h:5911 +glBindProgramNV = _link_function('glBindProgramNV', None, [GLenum, GLuint], 'NV_vertex_program') + +# GL/glext.h:5912 +glDeleteProgramsNV = _link_function('glDeleteProgramsNV', None, [GLsizei, POINTER(GLuint)], 'NV_vertex_program') + +# GL/glext.h:5913 +glExecuteProgramNV = _link_function('glExecuteProgramNV', None, [GLenum, GLuint, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5914 +glGenProgramsNV = _link_function('glGenProgramsNV', None, [GLsizei, POINTER(GLuint)], 'NV_vertex_program') + +# GL/glext.h:5915 +glGetProgramParameterdvNV = _link_function('glGetProgramParameterdvNV', None, [GLenum, GLuint, GLenum, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5916 +glGetProgramParameterfvNV = _link_function('glGetProgramParameterfvNV', None, [GLenum, GLuint, GLenum, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5917 +glGetProgramivNV = _link_function('glGetProgramivNV', None, [GLuint, GLenum, POINTER(GLint)], 'NV_vertex_program') + +# GL/glext.h:5918 +glGetProgramStringNV = _link_function('glGetProgramStringNV', None, [GLuint, GLenum, POINTER(GLubyte)], 'NV_vertex_program') + +# GL/glext.h:5919 +glGetTrackMatrixivNV = _link_function('glGetTrackMatrixivNV', None, [GLenum, GLuint, GLenum, POINTER(GLint)], 'NV_vertex_program') + +# GL/glext.h:5920 +glGetVertexAttribdvNV = _link_function('glGetVertexAttribdvNV', None, [GLuint, GLenum, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5921 +glGetVertexAttribfvNV = _link_function('glGetVertexAttribfvNV', None, [GLuint, GLenum, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5922 +glGetVertexAttribivNV = _link_function('glGetVertexAttribivNV', None, [GLuint, GLenum, POINTER(GLint)], 'NV_vertex_program') + +# GL/glext.h:5923 +glGetVertexAttribPointervNV = _link_function('glGetVertexAttribPointervNV', None, [GLuint, GLenum, POINTER(POINTER(GLvoid))], 'NV_vertex_program') + +# GL/glext.h:5924 +glIsProgramNV = _link_function('glIsProgramNV', GLboolean, [GLuint], 'NV_vertex_program') + +# GL/glext.h:5925 +glLoadProgramNV = _link_function('glLoadProgramNV', None, [GLenum, GLuint, GLsizei, POINTER(GLubyte)], 'NV_vertex_program') + +# GL/glext.h:5926 +glProgramParameter4dNV = _link_function('glProgramParameter4dNV', None, [GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble], 'NV_vertex_program') + +# GL/glext.h:5927 +glProgramParameter4dvNV = _link_function('glProgramParameter4dvNV', None, [GLenum, GLuint, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5928 +glProgramParameter4fNV = _link_function('glProgramParameter4fNV', None, [GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat], 'NV_vertex_program') + +# GL/glext.h:5929 +glProgramParameter4fvNV = _link_function('glProgramParameter4fvNV', None, [GLenum, GLuint, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5930 +glProgramParameters4dvNV = _link_function('glProgramParameters4dvNV', None, [GLenum, GLuint, GLuint, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5931 +glProgramParameters4fvNV = _link_function('glProgramParameters4fvNV', None, [GLenum, GLuint, GLuint, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5932 +glRequestResidentProgramsNV = _link_function('glRequestResidentProgramsNV', None, [GLsizei, POINTER(GLuint)], 'NV_vertex_program') + +# GL/glext.h:5933 +glTrackMatrixNV = _link_function('glTrackMatrixNV', None, [GLenum, GLuint, GLenum, GLenum], 'NV_vertex_program') + +# GL/glext.h:5934 +glVertexAttribPointerNV = _link_function('glVertexAttribPointerNV', None, [GLuint, GLint, GLenum, GLsizei, POINTER(GLvoid)], 'NV_vertex_program') + +# GL/glext.h:5935 +glVertexAttrib1dNV = _link_function('glVertexAttrib1dNV', None, [GLuint, GLdouble], 'NV_vertex_program') + +# GL/glext.h:5936 +glVertexAttrib1dvNV = _link_function('glVertexAttrib1dvNV', None, [GLuint, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5937 +glVertexAttrib1fNV = _link_function('glVertexAttrib1fNV', None, [GLuint, GLfloat], 'NV_vertex_program') + +# GL/glext.h:5938 +glVertexAttrib1fvNV = _link_function('glVertexAttrib1fvNV', None, [GLuint, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5939 +glVertexAttrib1sNV = _link_function('glVertexAttrib1sNV', None, [GLuint, GLshort], 'NV_vertex_program') + +# GL/glext.h:5940 +glVertexAttrib1svNV = _link_function('glVertexAttrib1svNV', None, [GLuint, POINTER(GLshort)], 'NV_vertex_program') + +# GL/glext.h:5941 +glVertexAttrib2dNV = _link_function('glVertexAttrib2dNV', None, [GLuint, GLdouble, GLdouble], 'NV_vertex_program') + +# GL/glext.h:5942 +glVertexAttrib2dvNV = _link_function('glVertexAttrib2dvNV', None, [GLuint, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5943 +glVertexAttrib2fNV = _link_function('glVertexAttrib2fNV', None, [GLuint, GLfloat, GLfloat], 'NV_vertex_program') + +# GL/glext.h:5944 +glVertexAttrib2fvNV = _link_function('glVertexAttrib2fvNV', None, [GLuint, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5945 +glVertexAttrib2sNV = _link_function('glVertexAttrib2sNV', None, [GLuint, GLshort, GLshort], 'NV_vertex_program') + +# GL/glext.h:5946 +glVertexAttrib2svNV = _link_function('glVertexAttrib2svNV', None, [GLuint, POINTER(GLshort)], 'NV_vertex_program') + +# GL/glext.h:5947 +glVertexAttrib3dNV = _link_function('glVertexAttrib3dNV', None, [GLuint, GLdouble, GLdouble, GLdouble], 'NV_vertex_program') + +# GL/glext.h:5948 +glVertexAttrib3dvNV = _link_function('glVertexAttrib3dvNV', None, [GLuint, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5949 +glVertexAttrib3fNV = _link_function('glVertexAttrib3fNV', None, [GLuint, GLfloat, GLfloat, GLfloat], 'NV_vertex_program') + +# GL/glext.h:5950 +glVertexAttrib3fvNV = _link_function('glVertexAttrib3fvNV', None, [GLuint, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5951 +glVertexAttrib3sNV = _link_function('glVertexAttrib3sNV', None, [GLuint, GLshort, GLshort, GLshort], 'NV_vertex_program') + +# GL/glext.h:5952 +glVertexAttrib3svNV = _link_function('glVertexAttrib3svNV', None, [GLuint, POINTER(GLshort)], 'NV_vertex_program') + +# GL/glext.h:5953 +glVertexAttrib4dNV = _link_function('glVertexAttrib4dNV', None, [GLuint, GLdouble, GLdouble, GLdouble, GLdouble], 'NV_vertex_program') + +# GL/glext.h:5954 +glVertexAttrib4dvNV = _link_function('glVertexAttrib4dvNV', None, [GLuint, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5955 +glVertexAttrib4fNV = _link_function('glVertexAttrib4fNV', None, [GLuint, GLfloat, GLfloat, GLfloat, GLfloat], 'NV_vertex_program') + +# GL/glext.h:5956 +glVertexAttrib4fvNV = _link_function('glVertexAttrib4fvNV', None, [GLuint, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5957 +glVertexAttrib4sNV = _link_function('glVertexAttrib4sNV', None, [GLuint, GLshort, GLshort, GLshort, GLshort], 'NV_vertex_program') + +# GL/glext.h:5958 +glVertexAttrib4svNV = _link_function('glVertexAttrib4svNV', None, [GLuint, POINTER(GLshort)], 'NV_vertex_program') + +# GL/glext.h:5959 +glVertexAttrib4ubNV = _link_function('glVertexAttrib4ubNV', None, [GLuint, GLubyte, GLubyte, GLubyte, GLubyte], 'NV_vertex_program') + +# GL/glext.h:5960 +glVertexAttrib4ubvNV = _link_function('glVertexAttrib4ubvNV', None, [GLuint, POINTER(GLubyte)], 'NV_vertex_program') + +# GL/glext.h:5961 +glVertexAttribs1dvNV = _link_function('glVertexAttribs1dvNV', None, [GLuint, GLsizei, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5962 +glVertexAttribs1fvNV = _link_function('glVertexAttribs1fvNV', None, [GLuint, GLsizei, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5963 +glVertexAttribs1svNV = _link_function('glVertexAttribs1svNV', None, [GLuint, GLsizei, POINTER(GLshort)], 'NV_vertex_program') + +# GL/glext.h:5964 +glVertexAttribs2dvNV = _link_function('glVertexAttribs2dvNV', None, [GLuint, GLsizei, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5965 +glVertexAttribs2fvNV = _link_function('glVertexAttribs2fvNV', None, [GLuint, GLsizei, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5966 +glVertexAttribs2svNV = _link_function('glVertexAttribs2svNV', None, [GLuint, GLsizei, POINTER(GLshort)], 'NV_vertex_program') + +# GL/glext.h:5967 +glVertexAttribs3dvNV = _link_function('glVertexAttribs3dvNV', None, [GLuint, GLsizei, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5968 +glVertexAttribs3fvNV = _link_function('glVertexAttribs3fvNV', None, [GLuint, GLsizei, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5969 +glVertexAttribs3svNV = _link_function('glVertexAttribs3svNV', None, [GLuint, GLsizei, POINTER(GLshort)], 'NV_vertex_program') + +# GL/glext.h:5970 +glVertexAttribs4dvNV = _link_function('glVertexAttribs4dvNV', None, [GLuint, GLsizei, POINTER(GLdouble)], 'NV_vertex_program') + +# GL/glext.h:5971 +glVertexAttribs4fvNV = _link_function('glVertexAttribs4fvNV', None, [GLuint, GLsizei, POINTER(GLfloat)], 'NV_vertex_program') + +# GL/glext.h:5972 +glVertexAttribs4svNV = _link_function('glVertexAttribs4svNV', None, [GLuint, GLsizei, POINTER(GLshort)], 'NV_vertex_program') + +# GL/glext.h:5973 +glVertexAttribs4ubvNV = _link_function('glVertexAttribs4ubvNV', None, [GLuint, GLsizei, POINTER(GLubyte)], 'NV_vertex_program') + +PFNGLAREPROGRAMSRESIDENTNVPROC = CFUNCTYPE(GLboolean, GLsizei, POINTER(GLuint), POINTER(GLboolean)) # GL/glext.h:5975 +PFNGLBINDPROGRAMNVPROC = CFUNCTYPE(None, GLenum, GLuint) # GL/glext.h:5976 +PFNGLDELETEPROGRAMSNVPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:5977 +PFNGLEXECUTEPROGRAMNVPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLfloat)) # GL/glext.h:5978 +PFNGLGENPROGRAMSNVPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:5979 +PFNGLGETPROGRAMPARAMETERDVNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLenum, POINTER(GLdouble)) # GL/glext.h:5980 +PFNGLGETPROGRAMPARAMETERFVNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:5981 +PFNGLGETPROGRAMIVNVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:5982 +PFNGLGETPROGRAMSTRINGNVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLubyte)) # GL/glext.h:5983 +PFNGLGETTRACKMATRIXIVNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:5984 +PFNGLGETVERTEXATTRIBDVNVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLdouble)) # GL/glext.h:5985 +PFNGLGETVERTEXATTRIBFVNVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:5986 +PFNGLGETVERTEXATTRIBIVNVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:5987 +PFNGLGETVERTEXATTRIBPOINTERVNVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(POINTER(GLvoid))) # GL/glext.h:5988 +PFNGLISPROGRAMNVPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:5989 +PFNGLLOADPROGRAMNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLsizei, POINTER(GLubyte)) # GL/glext.h:5990 +PFNGLPROGRAMPARAMETER4DNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLdouble, GLdouble, GLdouble, GLdouble) # GL/glext.h:5991 +PFNGLPROGRAMPARAMETER4DVNVPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLdouble)) # GL/glext.h:5992 +PFNGLPROGRAMPARAMETER4FNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:5993 +PFNGLPROGRAMPARAMETER4FVNVPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLfloat)) # GL/glext.h:5994 +PFNGLPROGRAMPARAMETERS4DVNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, POINTER(GLdouble)) # GL/glext.h:5995 +PFNGLPROGRAMPARAMETERS4FVNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, POINTER(GLfloat)) # GL/glext.h:5996 +PFNGLREQUESTRESIDENTPROGRAMSNVPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:5997 +PFNGLTRACKMATRIXNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLenum, GLenum) # GL/glext.h:5998 +PFNGLVERTEXATTRIBPOINTERNVPROC = CFUNCTYPE(None, GLuint, GLint, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:5999 +PFNGLVERTEXATTRIB1DNVPROC = CFUNCTYPE(None, GLuint, GLdouble) # GL/glext.h:6000 +PFNGLVERTEXATTRIB1DVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:6001 +PFNGLVERTEXATTRIB1FNVPROC = CFUNCTYPE(None, GLuint, GLfloat) # GL/glext.h:6002 +PFNGLVERTEXATTRIB1FVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:6003 +PFNGLVERTEXATTRIB1SNVPROC = CFUNCTYPE(None, GLuint, GLshort) # GL/glext.h:6004 +PFNGLVERTEXATTRIB1SVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:6005 +PFNGLVERTEXATTRIB2DNVPROC = CFUNCTYPE(None, GLuint, GLdouble, GLdouble) # GL/glext.h:6006 +PFNGLVERTEXATTRIB2DVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:6007 +PFNGLVERTEXATTRIB2FNVPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat) # GL/glext.h:6008 +PFNGLVERTEXATTRIB2FVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:6009 +PFNGLVERTEXATTRIB2SNVPROC = CFUNCTYPE(None, GLuint, GLshort, GLshort) # GL/glext.h:6010 +PFNGLVERTEXATTRIB2SVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:6011 +PFNGLVERTEXATTRIB3DNVPROC = CFUNCTYPE(None, GLuint, GLdouble, GLdouble, GLdouble) # GL/glext.h:6012 +PFNGLVERTEXATTRIB3DVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:6013 +PFNGLVERTEXATTRIB3FNVPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat) # GL/glext.h:6014 +PFNGLVERTEXATTRIB3FVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:6015 +PFNGLVERTEXATTRIB3SNVPROC = CFUNCTYPE(None, GLuint, GLshort, GLshort, GLshort) # GL/glext.h:6016 +PFNGLVERTEXATTRIB3SVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:6017 +PFNGLVERTEXATTRIB4DNVPROC = CFUNCTYPE(None, GLuint, GLdouble, GLdouble, GLdouble, GLdouble) # GL/glext.h:6018 +PFNGLVERTEXATTRIB4DVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:6019 +PFNGLVERTEXATTRIB4FNVPROC = CFUNCTYPE(None, GLuint, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:6020 +PFNGLVERTEXATTRIB4FVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:6021 +PFNGLVERTEXATTRIB4SNVPROC = CFUNCTYPE(None, GLuint, GLshort, GLshort, GLshort, GLshort) # GL/glext.h:6022 +PFNGLVERTEXATTRIB4SVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:6023 +PFNGLVERTEXATTRIB4UBNVPROC = CFUNCTYPE(None, GLuint, GLubyte, GLubyte, GLubyte, GLubyte) # GL/glext.h:6024 +PFNGLVERTEXATTRIB4UBVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLubyte)) # GL/glext.h:6025 +PFNGLVERTEXATTRIBS1DVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLdouble)) # GL/glext.h:6026 +PFNGLVERTEXATTRIBS1FVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLfloat)) # GL/glext.h:6027 +PFNGLVERTEXATTRIBS1SVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLshort)) # GL/glext.h:6028 +PFNGLVERTEXATTRIBS2DVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLdouble)) # GL/glext.h:6029 +PFNGLVERTEXATTRIBS2FVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLfloat)) # GL/glext.h:6030 +PFNGLVERTEXATTRIBS2SVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLshort)) # GL/glext.h:6031 +PFNGLVERTEXATTRIBS3DVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLdouble)) # GL/glext.h:6032 +PFNGLVERTEXATTRIBS3FVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLfloat)) # GL/glext.h:6033 +PFNGLVERTEXATTRIBS3SVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLshort)) # GL/glext.h:6034 +PFNGLVERTEXATTRIBS4DVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLdouble)) # GL/glext.h:6035 +PFNGLVERTEXATTRIBS4FVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLfloat)) # GL/glext.h:6036 +PFNGLVERTEXATTRIBS4SVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLshort)) # GL/glext.h:6037 +PFNGLVERTEXATTRIBS4UBVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLubyte)) # GL/glext.h:6038 +# SGIX_texture_coordinate_clamp (GL/glext.h:6041) +GL_SGIX_texture_coordinate_clamp = 1 # GL/glext.h:6042 +# SGIX_scalebias_hint (GL/glext.h:6045) +GL_SGIX_scalebias_hint = 1 # GL/glext.h:6046 +# OML_interlace (GL/glext.h:6049) +GL_OML_interlace = 1 # GL/glext.h:6050 +# OML_subsample (GL/glext.h:6053) +GL_OML_subsample = 1 # GL/glext.h:6054 +# OML_resample (GL/glext.h:6057) +GL_OML_resample = 1 # GL/glext.h:6058 +# NV_copy_depth_to_color (GL/glext.h:6061) +GL_NV_copy_depth_to_color = 1 # GL/glext.h:6062 +# ATI_envmap_bumpmap (GL/glext.h:6065) +GL_ATI_envmap_bumpmap = 1 # GL/glext.h:6066 +# GL/glext.h:6068 +glTexBumpParameterivATI = _link_function('glTexBumpParameterivATI', None, [GLenum, POINTER(GLint)], 'ATI_envmap_bumpmap') + +# GL/glext.h:6069 +glTexBumpParameterfvATI = _link_function('glTexBumpParameterfvATI', None, [GLenum, POINTER(GLfloat)], 'ATI_envmap_bumpmap') + +# GL/glext.h:6070 +glGetTexBumpParameterivATI = _link_function('glGetTexBumpParameterivATI', None, [GLenum, POINTER(GLint)], 'ATI_envmap_bumpmap') + +# GL/glext.h:6071 +glGetTexBumpParameterfvATI = _link_function('glGetTexBumpParameterfvATI', None, [GLenum, POINTER(GLfloat)], 'ATI_envmap_bumpmap') + +PFNGLTEXBUMPPARAMETERIVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:6073 +PFNGLTEXBUMPPARAMETERFVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:6074 +PFNGLGETTEXBUMPPARAMETERIVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:6075 +PFNGLGETTEXBUMPPARAMETERFVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:6076 +# ATI_fragment_shader (GL/glext.h:6079) +GL_ATI_fragment_shader = 1 # GL/glext.h:6080 +# GL/glext.h:6082 +glGenFragmentShadersATI = _link_function('glGenFragmentShadersATI', GLuint, [GLuint], 'ATI_fragment_shader') + +# GL/glext.h:6083 +glBindFragmentShaderATI = _link_function('glBindFragmentShaderATI', None, [GLuint], 'ATI_fragment_shader') + +# GL/glext.h:6084 +glDeleteFragmentShaderATI = _link_function('glDeleteFragmentShaderATI', None, [GLuint], 'ATI_fragment_shader') + +# GL/glext.h:6085 +glBeginFragmentShaderATI = _link_function('glBeginFragmentShaderATI', None, [], 'ATI_fragment_shader') + +# GL/glext.h:6086 +glEndFragmentShaderATI = _link_function('glEndFragmentShaderATI', None, [], 'ATI_fragment_shader') + +# GL/glext.h:6087 +glPassTexCoordATI = _link_function('glPassTexCoordATI', None, [GLuint, GLuint, GLenum], 'ATI_fragment_shader') + +# GL/glext.h:6088 +glSampleMapATI = _link_function('glSampleMapATI', None, [GLuint, GLuint, GLenum], 'ATI_fragment_shader') + +# GL/glext.h:6089 +glColorFragmentOp1ATI = _link_function('glColorFragmentOp1ATI', None, [GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint], 'ATI_fragment_shader') + +# GL/glext.h:6090 +glColorFragmentOp2ATI = _link_function('glColorFragmentOp2ATI', None, [GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint], 'ATI_fragment_shader') + +# GL/glext.h:6091 +glColorFragmentOp3ATI = _link_function('glColorFragmentOp3ATI', None, [GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint], 'ATI_fragment_shader') + +# GL/glext.h:6092 +glAlphaFragmentOp1ATI = _link_function('glAlphaFragmentOp1ATI', None, [GLenum, GLuint, GLuint, GLuint, GLuint, GLuint], 'ATI_fragment_shader') + +# GL/glext.h:6093 +glAlphaFragmentOp2ATI = _link_function('glAlphaFragmentOp2ATI', None, [GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint], 'ATI_fragment_shader') + +# GL/glext.h:6094 +glAlphaFragmentOp3ATI = _link_function('glAlphaFragmentOp3ATI', None, [GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint], 'ATI_fragment_shader') + +# GL/glext.h:6095 +glSetFragmentShaderConstantATI = _link_function('glSetFragmentShaderConstantATI', None, [GLuint, POINTER(GLfloat)], 'ATI_fragment_shader') + +PFNGLGENFRAGMENTSHADERSATIPROC = CFUNCTYPE(GLuint, GLuint) # GL/glext.h:6097 +PFNGLBINDFRAGMENTSHADERATIPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:6098 +PFNGLDELETEFRAGMENTSHADERATIPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:6099 +PFNGLBEGINFRAGMENTSHADERATIPROC = CFUNCTYPE(None) # GL/glext.h:6100 +PFNGLENDFRAGMENTSHADERATIPROC = CFUNCTYPE(None) # GL/glext.h:6101 +PFNGLPASSTEXCOORDATIPROC = CFUNCTYPE(None, GLuint, GLuint, GLenum) # GL/glext.h:6102 +PFNGLSAMPLEMAPATIPROC = CFUNCTYPE(None, GLuint, GLuint, GLenum) # GL/glext.h:6103 +PFNGLCOLORFRAGMENTOP1ATIPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint) # GL/glext.h:6104 +PFNGLCOLORFRAGMENTOP2ATIPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint) # GL/glext.h:6105 +PFNGLCOLORFRAGMENTOP3ATIPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint) # GL/glext.h:6106 +PFNGLALPHAFRAGMENTOP1ATIPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLuint, GLuint, GLuint) # GL/glext.h:6107 +PFNGLALPHAFRAGMENTOP2ATIPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint) # GL/glext.h:6108 +PFNGLALPHAFRAGMENTOP3ATIPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint, GLuint) # GL/glext.h:6109 +PFNGLSETFRAGMENTSHADERCONSTANTATIPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:6110 +# ATI_pn_triangles (GL/glext.h:6113) +GL_ATI_pn_triangles = 1 # GL/glext.h:6114 +# GL/glext.h:6116 +glPNTrianglesiATI = _link_function('glPNTrianglesiATI', None, [GLenum, GLint], 'ATI_pn_triangles') + +# GL/glext.h:6117 +glPNTrianglesfATI = _link_function('glPNTrianglesfATI', None, [GLenum, GLfloat], 'ATI_pn_triangles') + +PFNGLPNTRIANGLESIATIPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:6119 +PFNGLPNTRIANGLESFATIPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:6120 +# ATI_vertex_array_object (GL/glext.h:6123) +GL_ATI_vertex_array_object = 1 # GL/glext.h:6124 +# GL/glext.h:6126 +glNewObjectBufferATI = _link_function('glNewObjectBufferATI', GLuint, [GLsizei, POINTER(GLvoid), GLenum], 'ATI_vertex_array_object') + +# GL/glext.h:6127 +glIsObjectBufferATI = _link_function('glIsObjectBufferATI', GLboolean, [GLuint], 'ATI_vertex_array_object') + +# GL/glext.h:6128 +glUpdateObjectBufferATI = _link_function('glUpdateObjectBufferATI', None, [GLuint, GLuint, GLsizei, POINTER(GLvoid), GLenum], 'ATI_vertex_array_object') + +# GL/glext.h:6129 +glGetObjectBufferfvATI = _link_function('glGetObjectBufferfvATI', None, [GLuint, GLenum, POINTER(GLfloat)], 'ATI_vertex_array_object') + +# GL/glext.h:6130 +glGetObjectBufferivATI = _link_function('glGetObjectBufferivATI', None, [GLuint, GLenum, POINTER(GLint)], 'ATI_vertex_array_object') + +# GL/glext.h:6131 +glFreeObjectBufferATI = _link_function('glFreeObjectBufferATI', None, [GLuint], 'ATI_vertex_array_object') + +# GL/glext.h:6132 +glArrayObjectATI = _link_function('glArrayObjectATI', None, [GLenum, GLint, GLenum, GLsizei, GLuint, GLuint], 'ATI_vertex_array_object') + +# GL/glext.h:6133 +glGetArrayObjectfvATI = _link_function('glGetArrayObjectfvATI', None, [GLenum, GLenum, POINTER(GLfloat)], 'ATI_vertex_array_object') + +# GL/glext.h:6134 +glGetArrayObjectivATI = _link_function('glGetArrayObjectivATI', None, [GLenum, GLenum, POINTER(GLint)], 'ATI_vertex_array_object') + +# GL/glext.h:6135 +glVariantArrayObjectATI = _link_function('glVariantArrayObjectATI', None, [GLuint, GLenum, GLsizei, GLuint, GLuint], 'ATI_vertex_array_object') + +# GL/glext.h:6136 +glGetVariantArrayObjectfvATI = _link_function('glGetVariantArrayObjectfvATI', None, [GLuint, GLenum, POINTER(GLfloat)], 'ATI_vertex_array_object') + +# GL/glext.h:6137 +glGetVariantArrayObjectivATI = _link_function('glGetVariantArrayObjectivATI', None, [GLuint, GLenum, POINTER(GLint)], 'ATI_vertex_array_object') + +PFNGLNEWOBJECTBUFFERATIPROC = CFUNCTYPE(GLuint, GLsizei, POINTER(GLvoid), GLenum) # GL/glext.h:6139 +PFNGLISOBJECTBUFFERATIPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:6140 +PFNGLUPDATEOBJECTBUFFERATIPROC = CFUNCTYPE(None, GLuint, GLuint, GLsizei, POINTER(GLvoid), GLenum) # GL/glext.h:6141 +PFNGLGETOBJECTBUFFERFVATIPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:6142 +PFNGLGETOBJECTBUFFERIVATIPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:6143 +PFNGLFREEOBJECTBUFFERATIPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:6144 +PFNGLARRAYOBJECTATIPROC = CFUNCTYPE(None, GLenum, GLint, GLenum, GLsizei, GLuint, GLuint) # GL/glext.h:6145 +PFNGLGETARRAYOBJECTFVATIPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLfloat)) # GL/glext.h:6146 +PFNGLGETARRAYOBJECTIVATIPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:6147 +PFNGLVARIANTARRAYOBJECTATIPROC = CFUNCTYPE(None, GLuint, GLenum, GLsizei, GLuint, GLuint) # GL/glext.h:6148 +PFNGLGETVARIANTARRAYOBJECTFVATIPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:6149 +PFNGLGETVARIANTARRAYOBJECTIVATIPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:6150 +# EXT_vertex_shader (GL/glext.h:6153) +GL_EXT_vertex_shader = 1 # GL/glext.h:6154 +# GL/glext.h:6156 +glBeginVertexShaderEXT = _link_function('glBeginVertexShaderEXT', None, [], 'EXT_vertex_shader') + +# GL/glext.h:6157 +glEndVertexShaderEXT = _link_function('glEndVertexShaderEXT', None, [], 'EXT_vertex_shader') + +# GL/glext.h:6158 +glBindVertexShaderEXT = _link_function('glBindVertexShaderEXT', None, [GLuint], 'EXT_vertex_shader') + +# GL/glext.h:6159 +glGenVertexShadersEXT = _link_function('glGenVertexShadersEXT', GLuint, [GLuint], 'EXT_vertex_shader') + +# GL/glext.h:6160 +glDeleteVertexShaderEXT = _link_function('glDeleteVertexShaderEXT', None, [GLuint], 'EXT_vertex_shader') + +# GL/glext.h:6161 +glShaderOp1EXT = _link_function('glShaderOp1EXT', None, [GLenum, GLuint, GLuint], 'EXT_vertex_shader') + +# GL/glext.h:6162 +glShaderOp2EXT = _link_function('glShaderOp2EXT', None, [GLenum, GLuint, GLuint, GLuint], 'EXT_vertex_shader') + +# GL/glext.h:6163 +glShaderOp3EXT = _link_function('glShaderOp3EXT', None, [GLenum, GLuint, GLuint, GLuint, GLuint], 'EXT_vertex_shader') + +# GL/glext.h:6164 +glSwizzleEXT = _link_function('glSwizzleEXT', None, [GLuint, GLuint, GLenum, GLenum, GLenum, GLenum], 'EXT_vertex_shader') + +# GL/glext.h:6165 +glWriteMaskEXT = _link_function('glWriteMaskEXT', None, [GLuint, GLuint, GLenum, GLenum, GLenum, GLenum], 'EXT_vertex_shader') + +# GL/glext.h:6166 +glInsertComponentEXT = _link_function('glInsertComponentEXT', None, [GLuint, GLuint, GLuint], 'EXT_vertex_shader') + +# GL/glext.h:6167 +glExtractComponentEXT = _link_function('glExtractComponentEXT', None, [GLuint, GLuint, GLuint], 'EXT_vertex_shader') + +# GL/glext.h:6168 +glGenSymbolsEXT = _link_function('glGenSymbolsEXT', GLuint, [GLenum, GLenum, GLenum, GLuint], 'EXT_vertex_shader') + +# GL/glext.h:6169 +glSetInvariantEXT = _link_function('glSetInvariantEXT', None, [GLuint, GLenum, POINTER(GLvoid)], 'EXT_vertex_shader') + +# GL/glext.h:6170 +glSetLocalConstantEXT = _link_function('glSetLocalConstantEXT', None, [GLuint, GLenum, POINTER(GLvoid)], 'EXT_vertex_shader') + +# GL/glext.h:6171 +glVariantbvEXT = _link_function('glVariantbvEXT', None, [GLuint, POINTER(GLbyte)], 'EXT_vertex_shader') + +# GL/glext.h:6172 +glVariantsvEXT = _link_function('glVariantsvEXT', None, [GLuint, POINTER(GLshort)], 'EXT_vertex_shader') + +# GL/glext.h:6173 +glVariantivEXT = _link_function('glVariantivEXT', None, [GLuint, POINTER(GLint)], 'EXT_vertex_shader') + +# GL/glext.h:6174 +glVariantfvEXT = _link_function('glVariantfvEXT', None, [GLuint, POINTER(GLfloat)], 'EXT_vertex_shader') + +# GL/glext.h:6175 +glVariantdvEXT = _link_function('glVariantdvEXT', None, [GLuint, POINTER(GLdouble)], 'EXT_vertex_shader') + +# GL/glext.h:6176 +glVariantubvEXT = _link_function('glVariantubvEXT', None, [GLuint, POINTER(GLubyte)], 'EXT_vertex_shader') + +# GL/glext.h:6177 +glVariantusvEXT = _link_function('glVariantusvEXT', None, [GLuint, POINTER(GLushort)], 'EXT_vertex_shader') + +# GL/glext.h:6178 +glVariantuivEXT = _link_function('glVariantuivEXT', None, [GLuint, POINTER(GLuint)], 'EXT_vertex_shader') + +# GL/glext.h:6179 +glVariantPointerEXT = _link_function('glVariantPointerEXT', None, [GLuint, GLenum, GLuint, POINTER(GLvoid)], 'EXT_vertex_shader') + +# GL/glext.h:6180 +glEnableVariantClientStateEXT = _link_function('glEnableVariantClientStateEXT', None, [GLuint], 'EXT_vertex_shader') + +# GL/glext.h:6181 +glDisableVariantClientStateEXT = _link_function('glDisableVariantClientStateEXT', None, [GLuint], 'EXT_vertex_shader') + +# GL/glext.h:6182 +glBindLightParameterEXT = _link_function('glBindLightParameterEXT', GLuint, [GLenum, GLenum], 'EXT_vertex_shader') + +# GL/glext.h:6183 +glBindMaterialParameterEXT = _link_function('glBindMaterialParameterEXT', GLuint, [GLenum, GLenum], 'EXT_vertex_shader') + +# GL/glext.h:6184 +glBindTexGenParameterEXT = _link_function('glBindTexGenParameterEXT', GLuint, [GLenum, GLenum, GLenum], 'EXT_vertex_shader') + +# GL/glext.h:6185 +glBindTextureUnitParameterEXT = _link_function('glBindTextureUnitParameterEXT', GLuint, [GLenum, GLenum], 'EXT_vertex_shader') + +# GL/glext.h:6186 +glBindParameterEXT = _link_function('glBindParameterEXT', GLuint, [GLenum], 'EXT_vertex_shader') + +# GL/glext.h:6187 +glIsVariantEnabledEXT = _link_function('glIsVariantEnabledEXT', GLboolean, [GLuint, GLenum], 'EXT_vertex_shader') + +# GL/glext.h:6188 +glGetVariantBooleanvEXT = _link_function('glGetVariantBooleanvEXT', None, [GLuint, GLenum, POINTER(GLboolean)], 'EXT_vertex_shader') + +# GL/glext.h:6189 +glGetVariantIntegervEXT = _link_function('glGetVariantIntegervEXT', None, [GLuint, GLenum, POINTER(GLint)], 'EXT_vertex_shader') + +# GL/glext.h:6190 +glGetVariantFloatvEXT = _link_function('glGetVariantFloatvEXT', None, [GLuint, GLenum, POINTER(GLfloat)], 'EXT_vertex_shader') + +# GL/glext.h:6191 +glGetVariantPointervEXT = _link_function('glGetVariantPointervEXT', None, [GLuint, GLenum, POINTER(POINTER(GLvoid))], 'EXT_vertex_shader') + +# GL/glext.h:6192 +glGetInvariantBooleanvEXT = _link_function('glGetInvariantBooleanvEXT', None, [GLuint, GLenum, POINTER(GLboolean)], 'EXT_vertex_shader') + +# GL/glext.h:6193 +glGetInvariantIntegervEXT = _link_function('glGetInvariantIntegervEXT', None, [GLuint, GLenum, POINTER(GLint)], 'EXT_vertex_shader') + +# GL/glext.h:6194 +glGetInvariantFloatvEXT = _link_function('glGetInvariantFloatvEXT', None, [GLuint, GLenum, POINTER(GLfloat)], 'EXT_vertex_shader') + +# GL/glext.h:6195 +glGetLocalConstantBooleanvEXT = _link_function('glGetLocalConstantBooleanvEXT', None, [GLuint, GLenum, POINTER(GLboolean)], 'EXT_vertex_shader') + +# GL/glext.h:6196 +glGetLocalConstantIntegervEXT = _link_function('glGetLocalConstantIntegervEXT', None, [GLuint, GLenum, POINTER(GLint)], 'EXT_vertex_shader') + +# GL/glext.h:6197 +glGetLocalConstantFloatvEXT = _link_function('glGetLocalConstantFloatvEXT', None, [GLuint, GLenum, POINTER(GLfloat)], 'EXT_vertex_shader') + +PFNGLBEGINVERTEXSHADEREXTPROC = CFUNCTYPE(None) # GL/glext.h:6199 +PFNGLENDVERTEXSHADEREXTPROC = CFUNCTYPE(None) # GL/glext.h:6200 +PFNGLBINDVERTEXSHADEREXTPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:6201 +PFNGLGENVERTEXSHADERSEXTPROC = CFUNCTYPE(GLuint, GLuint) # GL/glext.h:6202 +PFNGLDELETEVERTEXSHADEREXTPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:6203 +PFNGLSHADEROP1EXTPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint) # GL/glext.h:6204 +PFNGLSHADEROP2EXTPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLuint) # GL/glext.h:6205 +PFNGLSHADEROP3EXTPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLuint, GLuint) # GL/glext.h:6206 +PFNGLSWIZZLEEXTPROC = CFUNCTYPE(None, GLuint, GLuint, GLenum, GLenum, GLenum, GLenum) # GL/glext.h:6207 +PFNGLWRITEMASKEXTPROC = CFUNCTYPE(None, GLuint, GLuint, GLenum, GLenum, GLenum, GLenum) # GL/glext.h:6208 +PFNGLINSERTCOMPONENTEXTPROC = CFUNCTYPE(None, GLuint, GLuint, GLuint) # GL/glext.h:6209 +PFNGLEXTRACTCOMPONENTEXTPROC = CFUNCTYPE(None, GLuint, GLuint, GLuint) # GL/glext.h:6210 +PFNGLGENSYMBOLSEXTPROC = CFUNCTYPE(GLuint, GLenum, GLenum, GLenum, GLuint) # GL/glext.h:6211 +PFNGLSETINVARIANTEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLvoid)) # GL/glext.h:6212 +PFNGLSETLOCALCONSTANTEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLvoid)) # GL/glext.h:6213 +PFNGLVARIANTBVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLbyte)) # GL/glext.h:6214 +PFNGLVARIANTSVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:6215 +PFNGLVARIANTIVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLint)) # GL/glext.h:6216 +PFNGLVARIANTFVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLfloat)) # GL/glext.h:6217 +PFNGLVARIANTDVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLdouble)) # GL/glext.h:6218 +PFNGLVARIANTUBVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLubyte)) # GL/glext.h:6219 +PFNGLVARIANTUSVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLushort)) # GL/glext.h:6220 +PFNGLVARIANTUIVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLuint)) # GL/glext.h:6221 +PFNGLVARIANTPOINTEREXTPROC = CFUNCTYPE(None, GLuint, GLenum, GLuint, POINTER(GLvoid)) # GL/glext.h:6222 +PFNGLENABLEVARIANTCLIENTSTATEEXTPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:6223 +PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:6224 +PFNGLBINDLIGHTPARAMETEREXTPROC = CFUNCTYPE(GLuint, GLenum, GLenum) # GL/glext.h:6225 +PFNGLBINDMATERIALPARAMETEREXTPROC = CFUNCTYPE(GLuint, GLenum, GLenum) # GL/glext.h:6226 +PFNGLBINDTEXGENPARAMETEREXTPROC = CFUNCTYPE(GLuint, GLenum, GLenum, GLenum) # GL/glext.h:6227 +PFNGLBINDTEXTUREUNITPARAMETEREXTPROC = CFUNCTYPE(GLuint, GLenum, GLenum) # GL/glext.h:6228 +PFNGLBINDPARAMETEREXTPROC = CFUNCTYPE(GLuint, GLenum) # GL/glext.h:6229 +PFNGLISVARIANTENABLEDEXTPROC = CFUNCTYPE(GLboolean, GLuint, GLenum) # GL/glext.h:6230 +PFNGLGETVARIANTBOOLEANVEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLboolean)) # GL/glext.h:6231 +PFNGLGETVARIANTINTEGERVEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:6232 +PFNGLGETVARIANTFLOATVEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:6233 +PFNGLGETVARIANTPOINTERVEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(POINTER(GLvoid))) # GL/glext.h:6234 +PFNGLGETINVARIANTBOOLEANVEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLboolean)) # GL/glext.h:6235 +PFNGLGETINVARIANTINTEGERVEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:6236 +PFNGLGETINVARIANTFLOATVEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:6237 +PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLboolean)) # GL/glext.h:6238 +PFNGLGETLOCALCONSTANTINTEGERVEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:6239 +PFNGLGETLOCALCONSTANTFLOATVEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:6240 +# ATI_vertex_streams (GL/glext.h:6243) +GL_ATI_vertex_streams = 1 # GL/glext.h:6244 +# GL/glext.h:6246 +glVertexStream1sATI = _link_function('glVertexStream1sATI', None, [GLenum, GLshort], 'ATI_vertex_streams') + +# GL/glext.h:6247 +glVertexStream1svATI = _link_function('glVertexStream1svATI', None, [GLenum, POINTER(GLshort)], 'ATI_vertex_streams') + +# GL/glext.h:6248 +glVertexStream1iATI = _link_function('glVertexStream1iATI', None, [GLenum, GLint], 'ATI_vertex_streams') + +# GL/glext.h:6249 +glVertexStream1ivATI = _link_function('glVertexStream1ivATI', None, [GLenum, POINTER(GLint)], 'ATI_vertex_streams') + +# GL/glext.h:6250 +glVertexStream1fATI = _link_function('glVertexStream1fATI', None, [GLenum, GLfloat], 'ATI_vertex_streams') + +# GL/glext.h:6251 +glVertexStream1fvATI = _link_function('glVertexStream1fvATI', None, [GLenum, POINTER(GLfloat)], 'ATI_vertex_streams') + +# GL/glext.h:6252 +glVertexStream1dATI = _link_function('glVertexStream1dATI', None, [GLenum, GLdouble], 'ATI_vertex_streams') + +# GL/glext.h:6253 +glVertexStream1dvATI = _link_function('glVertexStream1dvATI', None, [GLenum, POINTER(GLdouble)], 'ATI_vertex_streams') + +# GL/glext.h:6254 +glVertexStream2sATI = _link_function('glVertexStream2sATI', None, [GLenum, GLshort, GLshort], 'ATI_vertex_streams') + +# GL/glext.h:6255 +glVertexStream2svATI = _link_function('glVertexStream2svATI', None, [GLenum, POINTER(GLshort)], 'ATI_vertex_streams') + +# GL/glext.h:6256 +glVertexStream2iATI = _link_function('glVertexStream2iATI', None, [GLenum, GLint, GLint], 'ATI_vertex_streams') + +# GL/glext.h:6257 +glVertexStream2ivATI = _link_function('glVertexStream2ivATI', None, [GLenum, POINTER(GLint)], 'ATI_vertex_streams') + +# GL/glext.h:6258 +glVertexStream2fATI = _link_function('glVertexStream2fATI', None, [GLenum, GLfloat, GLfloat], 'ATI_vertex_streams') + +# GL/glext.h:6259 +glVertexStream2fvATI = _link_function('glVertexStream2fvATI', None, [GLenum, POINTER(GLfloat)], 'ATI_vertex_streams') + +# GL/glext.h:6260 +glVertexStream2dATI = _link_function('glVertexStream2dATI', None, [GLenum, GLdouble, GLdouble], 'ATI_vertex_streams') + +# GL/glext.h:6261 +glVertexStream2dvATI = _link_function('glVertexStream2dvATI', None, [GLenum, POINTER(GLdouble)], 'ATI_vertex_streams') + +# GL/glext.h:6262 +glVertexStream3sATI = _link_function('glVertexStream3sATI', None, [GLenum, GLshort, GLshort, GLshort], 'ATI_vertex_streams') + +# GL/glext.h:6263 +glVertexStream3svATI = _link_function('glVertexStream3svATI', None, [GLenum, POINTER(GLshort)], 'ATI_vertex_streams') + +# GL/glext.h:6264 +glVertexStream3iATI = _link_function('glVertexStream3iATI', None, [GLenum, GLint, GLint, GLint], 'ATI_vertex_streams') + +# GL/glext.h:6265 +glVertexStream3ivATI = _link_function('glVertexStream3ivATI', None, [GLenum, POINTER(GLint)], 'ATI_vertex_streams') + +# GL/glext.h:6266 +glVertexStream3fATI = _link_function('glVertexStream3fATI', None, [GLenum, GLfloat, GLfloat, GLfloat], 'ATI_vertex_streams') + +# GL/glext.h:6267 +glVertexStream3fvATI = _link_function('glVertexStream3fvATI', None, [GLenum, POINTER(GLfloat)], 'ATI_vertex_streams') + +# GL/glext.h:6268 +glVertexStream3dATI = _link_function('glVertexStream3dATI', None, [GLenum, GLdouble, GLdouble, GLdouble], 'ATI_vertex_streams') + +# GL/glext.h:6269 +glVertexStream3dvATI = _link_function('glVertexStream3dvATI', None, [GLenum, POINTER(GLdouble)], 'ATI_vertex_streams') + +# GL/glext.h:6270 +glVertexStream4sATI = _link_function('glVertexStream4sATI', None, [GLenum, GLshort, GLshort, GLshort, GLshort], 'ATI_vertex_streams') + +# GL/glext.h:6271 +glVertexStream4svATI = _link_function('glVertexStream4svATI', None, [GLenum, POINTER(GLshort)], 'ATI_vertex_streams') + +# GL/glext.h:6272 +glVertexStream4iATI = _link_function('glVertexStream4iATI', None, [GLenum, GLint, GLint, GLint, GLint], 'ATI_vertex_streams') + +# GL/glext.h:6273 +glVertexStream4ivATI = _link_function('glVertexStream4ivATI', None, [GLenum, POINTER(GLint)], 'ATI_vertex_streams') + +# GL/glext.h:6274 +glVertexStream4fATI = _link_function('glVertexStream4fATI', None, [GLenum, GLfloat, GLfloat, GLfloat, GLfloat], 'ATI_vertex_streams') + +# GL/glext.h:6275 +glVertexStream4fvATI = _link_function('glVertexStream4fvATI', None, [GLenum, POINTER(GLfloat)], 'ATI_vertex_streams') + +# GL/glext.h:6276 +glVertexStream4dATI = _link_function('glVertexStream4dATI', None, [GLenum, GLdouble, GLdouble, GLdouble, GLdouble], 'ATI_vertex_streams') + +# GL/glext.h:6277 +glVertexStream4dvATI = _link_function('glVertexStream4dvATI', None, [GLenum, POINTER(GLdouble)], 'ATI_vertex_streams') + +# GL/glext.h:6278 +glNormalStream3bATI = _link_function('glNormalStream3bATI', None, [GLenum, GLbyte, GLbyte, GLbyte], 'ATI_vertex_streams') + +# GL/glext.h:6279 +glNormalStream3bvATI = _link_function('glNormalStream3bvATI', None, [GLenum, POINTER(GLbyte)], 'ATI_vertex_streams') + +# GL/glext.h:6280 +glNormalStream3sATI = _link_function('glNormalStream3sATI', None, [GLenum, GLshort, GLshort, GLshort], 'ATI_vertex_streams') + +# GL/glext.h:6281 +glNormalStream3svATI = _link_function('glNormalStream3svATI', None, [GLenum, POINTER(GLshort)], 'ATI_vertex_streams') + +# GL/glext.h:6282 +glNormalStream3iATI = _link_function('glNormalStream3iATI', None, [GLenum, GLint, GLint, GLint], 'ATI_vertex_streams') + +# GL/glext.h:6283 +glNormalStream3ivATI = _link_function('glNormalStream3ivATI', None, [GLenum, POINTER(GLint)], 'ATI_vertex_streams') + +# GL/glext.h:6284 +glNormalStream3fATI = _link_function('glNormalStream3fATI', None, [GLenum, GLfloat, GLfloat, GLfloat], 'ATI_vertex_streams') + +# GL/glext.h:6285 +glNormalStream3fvATI = _link_function('glNormalStream3fvATI', None, [GLenum, POINTER(GLfloat)], 'ATI_vertex_streams') + +# GL/glext.h:6286 +glNormalStream3dATI = _link_function('glNormalStream3dATI', None, [GLenum, GLdouble, GLdouble, GLdouble], 'ATI_vertex_streams') + +# GL/glext.h:6287 +glNormalStream3dvATI = _link_function('glNormalStream3dvATI', None, [GLenum, POINTER(GLdouble)], 'ATI_vertex_streams') + +# GL/glext.h:6288 +glClientActiveVertexStreamATI = _link_function('glClientActiveVertexStreamATI', None, [GLenum], 'ATI_vertex_streams') + +# GL/glext.h:6289 +glVertexBlendEnviATI = _link_function('glVertexBlendEnviATI', None, [GLenum, GLint], 'ATI_vertex_streams') + +# GL/glext.h:6290 +glVertexBlendEnvfATI = _link_function('glVertexBlendEnvfATI', None, [GLenum, GLfloat], 'ATI_vertex_streams') + +PFNGLVERTEXSTREAM1SATIPROC = CFUNCTYPE(None, GLenum, GLshort) # GL/glext.h:6292 +PFNGLVERTEXSTREAM1SVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:6293 +PFNGLVERTEXSTREAM1IATIPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:6294 +PFNGLVERTEXSTREAM1IVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:6295 +PFNGLVERTEXSTREAM1FATIPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:6296 +PFNGLVERTEXSTREAM1FVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:6297 +PFNGLVERTEXSTREAM1DATIPROC = CFUNCTYPE(None, GLenum, GLdouble) # GL/glext.h:6298 +PFNGLVERTEXSTREAM1DVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:6299 +PFNGLVERTEXSTREAM2SATIPROC = CFUNCTYPE(None, GLenum, GLshort, GLshort) # GL/glext.h:6300 +PFNGLVERTEXSTREAM2SVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:6301 +PFNGLVERTEXSTREAM2IATIPROC = CFUNCTYPE(None, GLenum, GLint, GLint) # GL/glext.h:6302 +PFNGLVERTEXSTREAM2IVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:6303 +PFNGLVERTEXSTREAM2FATIPROC = CFUNCTYPE(None, GLenum, GLfloat, GLfloat) # GL/glext.h:6304 +PFNGLVERTEXSTREAM2FVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:6305 +PFNGLVERTEXSTREAM2DATIPROC = CFUNCTYPE(None, GLenum, GLdouble, GLdouble) # GL/glext.h:6306 +PFNGLVERTEXSTREAM2DVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:6307 +PFNGLVERTEXSTREAM3SATIPROC = CFUNCTYPE(None, GLenum, GLshort, GLshort, GLshort) # GL/glext.h:6308 +PFNGLVERTEXSTREAM3SVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:6309 +PFNGLVERTEXSTREAM3IATIPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint) # GL/glext.h:6310 +PFNGLVERTEXSTREAM3IVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:6311 +PFNGLVERTEXSTREAM3FATIPROC = CFUNCTYPE(None, GLenum, GLfloat, GLfloat, GLfloat) # GL/glext.h:6312 +PFNGLVERTEXSTREAM3FVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:6313 +PFNGLVERTEXSTREAM3DATIPROC = CFUNCTYPE(None, GLenum, GLdouble, GLdouble, GLdouble) # GL/glext.h:6314 +PFNGLVERTEXSTREAM3DVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:6315 +PFNGLVERTEXSTREAM4SATIPROC = CFUNCTYPE(None, GLenum, GLshort, GLshort, GLshort, GLshort) # GL/glext.h:6316 +PFNGLVERTEXSTREAM4SVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:6317 +PFNGLVERTEXSTREAM4IATIPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint, GLint) # GL/glext.h:6318 +PFNGLVERTEXSTREAM4IVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:6319 +PFNGLVERTEXSTREAM4FATIPROC = CFUNCTYPE(None, GLenum, GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:6320 +PFNGLVERTEXSTREAM4FVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:6321 +PFNGLVERTEXSTREAM4DATIPROC = CFUNCTYPE(None, GLenum, GLdouble, GLdouble, GLdouble, GLdouble) # GL/glext.h:6322 +PFNGLVERTEXSTREAM4DVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:6323 +PFNGLNORMALSTREAM3BATIPROC = CFUNCTYPE(None, GLenum, GLbyte, GLbyte, GLbyte) # GL/glext.h:6324 +PFNGLNORMALSTREAM3BVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLbyte)) # GL/glext.h:6325 +PFNGLNORMALSTREAM3SATIPROC = CFUNCTYPE(None, GLenum, GLshort, GLshort, GLshort) # GL/glext.h:6326 +PFNGLNORMALSTREAM3SVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLshort)) # GL/glext.h:6327 +PFNGLNORMALSTREAM3IATIPROC = CFUNCTYPE(None, GLenum, GLint, GLint, GLint) # GL/glext.h:6328 +PFNGLNORMALSTREAM3IVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:6329 +PFNGLNORMALSTREAM3FATIPROC = CFUNCTYPE(None, GLenum, GLfloat, GLfloat, GLfloat) # GL/glext.h:6330 +PFNGLNORMALSTREAM3FVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLfloat)) # GL/glext.h:6331 +PFNGLNORMALSTREAM3DATIPROC = CFUNCTYPE(None, GLenum, GLdouble, GLdouble, GLdouble) # GL/glext.h:6332 +PFNGLNORMALSTREAM3DVATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLdouble)) # GL/glext.h:6333 +PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:6334 +PFNGLVERTEXBLENDENVIATIPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:6335 +PFNGLVERTEXBLENDENVFATIPROC = CFUNCTYPE(None, GLenum, GLfloat) # GL/glext.h:6336 +# ATI_element_array (GL/glext.h:6339) +GL_ATI_element_array = 1 # GL/glext.h:6340 +# GL/glext.h:6342 +glElementPointerATI = _link_function('glElementPointerATI', None, [GLenum, POINTER(GLvoid)], 'ATI_element_array') + +# GL/glext.h:6343 +glDrawElementArrayATI = _link_function('glDrawElementArrayATI', None, [GLenum, GLsizei], 'ATI_element_array') + +# GL/glext.h:6344 +glDrawRangeElementArrayATI = _link_function('glDrawRangeElementArrayATI', None, [GLenum, GLuint, GLuint, GLsizei], 'ATI_element_array') + +PFNGLELEMENTPOINTERATIPROC = CFUNCTYPE(None, GLenum, POINTER(GLvoid)) # GL/glext.h:6346 +PFNGLDRAWELEMENTARRAYATIPROC = CFUNCTYPE(None, GLenum, GLsizei) # GL/glext.h:6347 +PFNGLDRAWRANGEELEMENTARRAYATIPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLsizei) # GL/glext.h:6348 +# SUN_mesh_array (GL/glext.h:6351) +GL_SUN_mesh_array = 1 # GL/glext.h:6352 +# GL/glext.h:6354 +glDrawMeshArraysSUN = _link_function('glDrawMeshArraysSUN', None, [GLenum, GLint, GLsizei, GLsizei], 'SUN_mesh_array') + +PFNGLDRAWMESHARRAYSSUNPROC = CFUNCTYPE(None, GLenum, GLint, GLsizei, GLsizei) # GL/glext.h:6356 +# SUN_slice_accum (GL/glext.h:6359) +GL_SUN_slice_accum = 1 # GL/glext.h:6360 +# NV_multisample_filter_hint (GL/glext.h:6363) +GL_NV_multisample_filter_hint = 1 # GL/glext.h:6364 +# NV_depth_clamp (GL/glext.h:6367) +GL_NV_depth_clamp = 1 # GL/glext.h:6368 +# NV_occlusion_query (GL/glext.h:6371) +GL_NV_occlusion_query = 1 # GL/glext.h:6372 +# GL/glext.h:6374 +glGenOcclusionQueriesNV = _link_function('glGenOcclusionQueriesNV', None, [GLsizei, POINTER(GLuint)], 'NV_occlusion_query') + +# GL/glext.h:6375 +glDeleteOcclusionQueriesNV = _link_function('glDeleteOcclusionQueriesNV', None, [GLsizei, POINTER(GLuint)], 'NV_occlusion_query') + +# GL/glext.h:6376 +glIsOcclusionQueryNV = _link_function('glIsOcclusionQueryNV', GLboolean, [GLuint], 'NV_occlusion_query') + +# GL/glext.h:6377 +glBeginOcclusionQueryNV = _link_function('glBeginOcclusionQueryNV', None, [GLuint], 'NV_occlusion_query') + +# GL/glext.h:6378 +glEndOcclusionQueryNV = _link_function('glEndOcclusionQueryNV', None, [], 'NV_occlusion_query') + +# GL/glext.h:6379 +glGetOcclusionQueryivNV = _link_function('glGetOcclusionQueryivNV', None, [GLuint, GLenum, POINTER(GLint)], 'NV_occlusion_query') + +# GL/glext.h:6380 +glGetOcclusionQueryuivNV = _link_function('glGetOcclusionQueryuivNV', None, [GLuint, GLenum, POINTER(GLuint)], 'NV_occlusion_query') + +PFNGLGENOCCLUSIONQUERIESNVPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:6382 +PFNGLDELETEOCCLUSIONQUERIESNVPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:6383 +PFNGLISOCCLUSIONQUERYNVPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:6384 +PFNGLBEGINOCCLUSIONQUERYNVPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:6385 +PFNGLENDOCCLUSIONQUERYNVPROC = CFUNCTYPE(None) # GL/glext.h:6386 +PFNGLGETOCCLUSIONQUERYIVNVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:6387 +PFNGLGETOCCLUSIONQUERYUIVNVPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLuint)) # GL/glext.h:6388 +# NV_point_sprite (GL/glext.h:6391) +GL_NV_point_sprite = 1 # GL/glext.h:6392 +# GL/glext.h:6394 +glPointParameteriNV = _link_function('glPointParameteriNV', None, [GLenum, GLint], 'NV_point_sprite') + +# GL/glext.h:6395 +glPointParameterivNV = _link_function('glPointParameterivNV', None, [GLenum, POINTER(GLint)], 'NV_point_sprite') + +PFNGLPOINTPARAMETERINVPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:6397 +PFNGLPOINTPARAMETERIVNVPROC = CFUNCTYPE(None, GLenum, POINTER(GLint)) # GL/glext.h:6398 +# NV_texture_shader3 (GL/glext.h:6401) +GL_NV_texture_shader3 = 1 # GL/glext.h:6402 +# NV_vertex_program1_1 (GL/glext.h:6405) +GL_NV_vertex_program1_1 = 1 # GL/glext.h:6406 +# EXT_shadow_funcs (GL/glext.h:6409) +GL_EXT_shadow_funcs = 1 # GL/glext.h:6410 +# EXT_stencil_two_side (GL/glext.h:6413) +GL_EXT_stencil_two_side = 1 # GL/glext.h:6414 +# GL/glext.h:6416 +glActiveStencilFaceEXT = _link_function('glActiveStencilFaceEXT', None, [GLenum], 'EXT_stencil_two_side') + +PFNGLACTIVESTENCILFACEEXTPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:6418 +# ATI_text_fragment_shader (GL/glext.h:6421) +GL_ATI_text_fragment_shader = 1 # GL/glext.h:6422 +# APPLE_client_storage (GL/glext.h:6425) +GL_APPLE_client_storage = 1 # GL/glext.h:6426 +# APPLE_element_array (GL/glext.h:6429) +GL_APPLE_element_array = 1 # GL/glext.h:6430 +# GL/glext.h:6432 +glElementPointerAPPLE = _link_function('glElementPointerAPPLE', None, [GLenum, POINTER(GLvoid)], 'APPLE_element_array') + +# GL/glext.h:6433 +glDrawElementArrayAPPLE = _link_function('glDrawElementArrayAPPLE', None, [GLenum, GLint, GLsizei], 'APPLE_element_array') + +# GL/glext.h:6434 +glDrawRangeElementArrayAPPLE = _link_function('glDrawRangeElementArrayAPPLE', None, [GLenum, GLuint, GLuint, GLint, GLsizei], 'APPLE_element_array') + +# GL/glext.h:6435 +glMultiDrawElementArrayAPPLE = _link_function('glMultiDrawElementArrayAPPLE', None, [GLenum, POINTER(GLint), POINTER(GLsizei), GLsizei], 'APPLE_element_array') + +# GL/glext.h:6436 +glMultiDrawRangeElementArrayAPPLE = _link_function('glMultiDrawRangeElementArrayAPPLE', None, [GLenum, GLuint, GLuint, POINTER(GLint), POINTER(GLsizei), GLsizei], 'APPLE_element_array') + +PFNGLELEMENTPOINTERAPPLEPROC = CFUNCTYPE(None, GLenum, POINTER(GLvoid)) # GL/glext.h:6438 +PFNGLDRAWELEMENTARRAYAPPLEPROC = CFUNCTYPE(None, GLenum, GLint, GLsizei) # GL/glext.h:6439 +PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLint, GLsizei) # GL/glext.h:6440 +PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC = CFUNCTYPE(None, GLenum, POINTER(GLint), POINTER(GLsizei), GLsizei) # GL/glext.h:6441 +PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, POINTER(GLint), POINTER(GLsizei), GLsizei) # GL/glext.h:6442 +# APPLE_fence (GL/glext.h:6445) +GL_APPLE_fence = 1 # GL/glext.h:6446 +# GL/glext.h:6448 +glGenFencesAPPLE = _link_function('glGenFencesAPPLE', None, [GLsizei, POINTER(GLuint)], 'APPLE_fence') + +# GL/glext.h:6449 +glDeleteFencesAPPLE = _link_function('glDeleteFencesAPPLE', None, [GLsizei, POINTER(GLuint)], 'APPLE_fence') + +# GL/glext.h:6450 +glSetFenceAPPLE = _link_function('glSetFenceAPPLE', None, [GLuint], 'APPLE_fence') + +# GL/glext.h:6451 +glIsFenceAPPLE = _link_function('glIsFenceAPPLE', GLboolean, [GLuint], 'APPLE_fence') + +# GL/glext.h:6452 +glTestFenceAPPLE = _link_function('glTestFenceAPPLE', GLboolean, [GLuint], 'APPLE_fence') + +# GL/glext.h:6453 +glFinishFenceAPPLE = _link_function('glFinishFenceAPPLE', None, [GLuint], 'APPLE_fence') + +# GL/glext.h:6454 +glTestObjectAPPLE = _link_function('glTestObjectAPPLE', GLboolean, [GLenum, GLuint], 'APPLE_fence') + +# GL/glext.h:6455 +glFinishObjectAPPLE = _link_function('glFinishObjectAPPLE', None, [GLenum, GLint], 'APPLE_fence') + +PFNGLGENFENCESAPPLEPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:6457 +PFNGLDELETEFENCESAPPLEPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:6458 +PFNGLSETFENCEAPPLEPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:6459 +PFNGLISFENCEAPPLEPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:6460 +PFNGLTESTFENCEAPPLEPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:6461 +PFNGLFINISHFENCEAPPLEPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:6462 +PFNGLTESTOBJECTAPPLEPROC = CFUNCTYPE(GLboolean, GLenum, GLuint) # GL/glext.h:6463 +PFNGLFINISHOBJECTAPPLEPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:6464 +# APPLE_vertex_array_object (GL/glext.h:6467) +GL_APPLE_vertex_array_object = 1 # GL/glext.h:6468 +# GL/glext.h:6470 +glBindVertexArrayAPPLE = _link_function('glBindVertexArrayAPPLE', None, [GLuint], 'APPLE_vertex_array_object') + +# GL/glext.h:6471 +glDeleteVertexArraysAPPLE = _link_function('glDeleteVertexArraysAPPLE', None, [GLsizei, POINTER(GLuint)], 'APPLE_vertex_array_object') + +# GL/glext.h:6472 +glGenVertexArraysAPPLE = _link_function('glGenVertexArraysAPPLE', None, [GLsizei, POINTER(GLuint)], 'APPLE_vertex_array_object') + +# GL/glext.h:6473 +glIsVertexArrayAPPLE = _link_function('glIsVertexArrayAPPLE', GLboolean, [GLuint], 'APPLE_vertex_array_object') + +PFNGLBINDVERTEXARRAYAPPLEPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:6475 +PFNGLDELETEVERTEXARRAYSAPPLEPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:6476 +PFNGLGENVERTEXARRAYSAPPLEPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:6477 +PFNGLISVERTEXARRAYAPPLEPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:6478 +# APPLE_vertex_array_range (GL/glext.h:6481) +GL_APPLE_vertex_array_range = 1 # GL/glext.h:6482 +# GL/glext.h:6484 +glVertexArrayRangeAPPLE = _link_function('glVertexArrayRangeAPPLE', None, [GLsizei, POINTER(GLvoid)], 'APPLE_vertex_array_range') + +# GL/glext.h:6485 +glFlushVertexArrayRangeAPPLE = _link_function('glFlushVertexArrayRangeAPPLE', None, [GLsizei, POINTER(GLvoid)], 'APPLE_vertex_array_range') + +# GL/glext.h:6486 +glVertexArrayParameteriAPPLE = _link_function('glVertexArrayParameteriAPPLE', None, [GLenum, GLint], 'APPLE_vertex_array_range') + +PFNGLVERTEXARRAYRANGEAPPLEPROC = CFUNCTYPE(None, GLsizei, POINTER(GLvoid)) # GL/glext.h:6488 +PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC = CFUNCTYPE(None, GLsizei, POINTER(GLvoid)) # GL/glext.h:6489 +PFNGLVERTEXARRAYPARAMETERIAPPLEPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:6490 +# APPLE_ycbcr_422 (GL/glext.h:6493) +GL_APPLE_ycbcr_422 = 1 # GL/glext.h:6494 +# S3_s3tc (GL/glext.h:6497) +GL_S3_s3tc = 1 # GL/glext.h:6498 +# ATI_draw_buffers (GL/glext.h:6501) +GL_ATI_draw_buffers = 1 # GL/glext.h:6502 +# GL/glext.h:6504 +glDrawBuffersATI = _link_function('glDrawBuffersATI', None, [GLsizei, POINTER(GLenum)], 'ATI_draw_buffers') + +PFNGLDRAWBUFFERSATIPROC = CFUNCTYPE(None, GLsizei, POINTER(GLenum)) # GL/glext.h:6506 +# ATI_pixel_format_float (GL/glext.h:6509) +GL_ATI_pixel_format_float = 1 # GL/glext.h:6510 +# ATI_texture_env_combine3 (GL/glext.h:6516) +GL_ATI_texture_env_combine3 = 1 # GL/glext.h:6517 +# ATI_texture_float (GL/glext.h:6520) +GL_ATI_texture_float = 1 # GL/glext.h:6521 +# NV_float_buffer (GL/glext.h:6524) +GL_NV_float_buffer = 1 # GL/glext.h:6525 +# NV_fragment_program (GL/glext.h:6528) +GL_NV_fragment_program = 1 # GL/glext.h:6529 +# GL/glext.h:6532 +glProgramNamedParameter4fNV = _link_function('glProgramNamedParameter4fNV', None, [GLuint, GLsizei, POINTER(GLubyte), GLfloat, GLfloat, GLfloat, GLfloat], 'NV_fragment_program') + +# GL/glext.h:6533 +glProgramNamedParameter4dNV = _link_function('glProgramNamedParameter4dNV', None, [GLuint, GLsizei, POINTER(GLubyte), GLdouble, GLdouble, GLdouble, GLdouble], 'NV_fragment_program') + +# GL/glext.h:6534 +glProgramNamedParameter4fvNV = _link_function('glProgramNamedParameter4fvNV', None, [GLuint, GLsizei, POINTER(GLubyte), POINTER(GLfloat)], 'NV_fragment_program') + +# GL/glext.h:6535 +glProgramNamedParameter4dvNV = _link_function('glProgramNamedParameter4dvNV', None, [GLuint, GLsizei, POINTER(GLubyte), POINTER(GLdouble)], 'NV_fragment_program') + +# GL/glext.h:6536 +glGetProgramNamedParameterfvNV = _link_function('glGetProgramNamedParameterfvNV', None, [GLuint, GLsizei, POINTER(GLubyte), POINTER(GLfloat)], 'NV_fragment_program') + +# GL/glext.h:6537 +glGetProgramNamedParameterdvNV = _link_function('glGetProgramNamedParameterdvNV', None, [GLuint, GLsizei, POINTER(GLubyte), POINTER(GLdouble)], 'NV_fragment_program') + +PFNGLPROGRAMNAMEDPARAMETER4FNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLubyte), GLfloat, GLfloat, GLfloat, GLfloat) # GL/glext.h:6539 +PFNGLPROGRAMNAMEDPARAMETER4DNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLubyte), GLdouble, GLdouble, GLdouble, GLdouble) # GL/glext.h:6540 +PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLubyte), POINTER(GLfloat)) # GL/glext.h:6541 +PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLubyte), POINTER(GLdouble)) # GL/glext.h:6542 +PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLubyte), POINTER(GLfloat)) # GL/glext.h:6543 +PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLubyte), POINTER(GLdouble)) # GL/glext.h:6544 +# NV_half_float (GL/glext.h:6547) +GL_NV_half_float = 1 # GL/glext.h:6548 +# GL/glext.h:6550 +glVertex2hNV = _link_function('glVertex2hNV', None, [GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6551 +glVertex2hvNV = _link_function('glVertex2hvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6552 +glVertex3hNV = _link_function('glVertex3hNV', None, [GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6553 +glVertex3hvNV = _link_function('glVertex3hvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6554 +glVertex4hNV = _link_function('glVertex4hNV', None, [GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6555 +glVertex4hvNV = _link_function('glVertex4hvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6556 +glNormal3hNV = _link_function('glNormal3hNV', None, [GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6557 +glNormal3hvNV = _link_function('glNormal3hvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6558 +glColor3hNV = _link_function('glColor3hNV', None, [GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6559 +glColor3hvNV = _link_function('glColor3hvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6560 +glColor4hNV = _link_function('glColor4hNV', None, [GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6561 +glColor4hvNV = _link_function('glColor4hvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6562 +glTexCoord1hNV = _link_function('glTexCoord1hNV', None, [GLhalfNV], 'NV_half_float') + +# GL/glext.h:6563 +glTexCoord1hvNV = _link_function('glTexCoord1hvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6564 +glTexCoord2hNV = _link_function('glTexCoord2hNV', None, [GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6565 +glTexCoord2hvNV = _link_function('glTexCoord2hvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6566 +glTexCoord3hNV = _link_function('glTexCoord3hNV', None, [GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6567 +glTexCoord3hvNV = _link_function('glTexCoord3hvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6568 +glTexCoord4hNV = _link_function('glTexCoord4hNV', None, [GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6569 +glTexCoord4hvNV = _link_function('glTexCoord4hvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6570 +glMultiTexCoord1hNV = _link_function('glMultiTexCoord1hNV', None, [GLenum, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6571 +glMultiTexCoord1hvNV = _link_function('glMultiTexCoord1hvNV', None, [GLenum, POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6572 +glMultiTexCoord2hNV = _link_function('glMultiTexCoord2hNV', None, [GLenum, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6573 +glMultiTexCoord2hvNV = _link_function('glMultiTexCoord2hvNV', None, [GLenum, POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6574 +glMultiTexCoord3hNV = _link_function('glMultiTexCoord3hNV', None, [GLenum, GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6575 +glMultiTexCoord3hvNV = _link_function('glMultiTexCoord3hvNV', None, [GLenum, POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6576 +glMultiTexCoord4hNV = _link_function('glMultiTexCoord4hNV', None, [GLenum, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6577 +glMultiTexCoord4hvNV = _link_function('glMultiTexCoord4hvNV', None, [GLenum, POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6578 +glFogCoordhNV = _link_function('glFogCoordhNV', None, [GLhalfNV], 'NV_half_float') + +# GL/glext.h:6579 +glFogCoordhvNV = _link_function('glFogCoordhvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6580 +glSecondaryColor3hNV = _link_function('glSecondaryColor3hNV', None, [GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6581 +glSecondaryColor3hvNV = _link_function('glSecondaryColor3hvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6582 +glVertexWeighthNV = _link_function('glVertexWeighthNV', None, [GLhalfNV], 'NV_half_float') + +# GL/glext.h:6583 +glVertexWeighthvNV = _link_function('glVertexWeighthvNV', None, [POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6584 +glVertexAttrib1hNV = _link_function('glVertexAttrib1hNV', None, [GLuint, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6585 +glVertexAttrib1hvNV = _link_function('glVertexAttrib1hvNV', None, [GLuint, POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6586 +glVertexAttrib2hNV = _link_function('glVertexAttrib2hNV', None, [GLuint, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6587 +glVertexAttrib2hvNV = _link_function('glVertexAttrib2hvNV', None, [GLuint, POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6588 +glVertexAttrib3hNV = _link_function('glVertexAttrib3hNV', None, [GLuint, GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6589 +glVertexAttrib3hvNV = _link_function('glVertexAttrib3hvNV', None, [GLuint, POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6590 +glVertexAttrib4hNV = _link_function('glVertexAttrib4hNV', None, [GLuint, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV], 'NV_half_float') + +# GL/glext.h:6591 +glVertexAttrib4hvNV = _link_function('glVertexAttrib4hvNV', None, [GLuint, POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6592 +glVertexAttribs1hvNV = _link_function('glVertexAttribs1hvNV', None, [GLuint, GLsizei, POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6593 +glVertexAttribs2hvNV = _link_function('glVertexAttribs2hvNV', None, [GLuint, GLsizei, POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6594 +glVertexAttribs3hvNV = _link_function('glVertexAttribs3hvNV', None, [GLuint, GLsizei, POINTER(GLhalfNV)], 'NV_half_float') + +# GL/glext.h:6595 +glVertexAttribs4hvNV = _link_function('glVertexAttribs4hvNV', None, [GLuint, GLsizei, POINTER(GLhalfNV)], 'NV_half_float') + +PFNGLVERTEX2HNVPROC = CFUNCTYPE(None, GLhalfNV, GLhalfNV) # GL/glext.h:6597 +PFNGLVERTEX2HVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6598 +PFNGLVERTEX3HNVPROC = CFUNCTYPE(None, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6599 +PFNGLVERTEX3HVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6600 +PFNGLVERTEX4HNVPROC = CFUNCTYPE(None, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6601 +PFNGLVERTEX4HVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6602 +PFNGLNORMAL3HNVPROC = CFUNCTYPE(None, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6603 +PFNGLNORMAL3HVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6604 +PFNGLCOLOR3HNVPROC = CFUNCTYPE(None, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6605 +PFNGLCOLOR3HVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6606 +PFNGLCOLOR4HNVPROC = CFUNCTYPE(None, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6607 +PFNGLCOLOR4HVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6608 +PFNGLTEXCOORD1HNVPROC = CFUNCTYPE(None, GLhalfNV) # GL/glext.h:6609 +PFNGLTEXCOORD1HVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6610 +PFNGLTEXCOORD2HNVPROC = CFUNCTYPE(None, GLhalfNV, GLhalfNV) # GL/glext.h:6611 +PFNGLTEXCOORD2HVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6612 +PFNGLTEXCOORD3HNVPROC = CFUNCTYPE(None, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6613 +PFNGLTEXCOORD3HVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6614 +PFNGLTEXCOORD4HNVPROC = CFUNCTYPE(None, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6615 +PFNGLTEXCOORD4HVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6616 +PFNGLMULTITEXCOORD1HNVPROC = CFUNCTYPE(None, GLenum, GLhalfNV) # GL/glext.h:6617 +PFNGLMULTITEXCOORD1HVNVPROC = CFUNCTYPE(None, GLenum, POINTER(GLhalfNV)) # GL/glext.h:6618 +PFNGLMULTITEXCOORD2HNVPROC = CFUNCTYPE(None, GLenum, GLhalfNV, GLhalfNV) # GL/glext.h:6619 +PFNGLMULTITEXCOORD2HVNVPROC = CFUNCTYPE(None, GLenum, POINTER(GLhalfNV)) # GL/glext.h:6620 +PFNGLMULTITEXCOORD3HNVPROC = CFUNCTYPE(None, GLenum, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6621 +PFNGLMULTITEXCOORD3HVNVPROC = CFUNCTYPE(None, GLenum, POINTER(GLhalfNV)) # GL/glext.h:6622 +PFNGLMULTITEXCOORD4HNVPROC = CFUNCTYPE(None, GLenum, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6623 +PFNGLMULTITEXCOORD4HVNVPROC = CFUNCTYPE(None, GLenum, POINTER(GLhalfNV)) # GL/glext.h:6624 +PFNGLFOGCOORDHNVPROC = CFUNCTYPE(None, GLhalfNV) # GL/glext.h:6625 +PFNGLFOGCOORDHVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6626 +PFNGLSECONDARYCOLOR3HNVPROC = CFUNCTYPE(None, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6627 +PFNGLSECONDARYCOLOR3HVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6628 +PFNGLVERTEXWEIGHTHNVPROC = CFUNCTYPE(None, GLhalfNV) # GL/glext.h:6629 +PFNGLVERTEXWEIGHTHVNVPROC = CFUNCTYPE(None, POINTER(GLhalfNV)) # GL/glext.h:6630 +PFNGLVERTEXATTRIB1HNVPROC = CFUNCTYPE(None, GLuint, GLhalfNV) # GL/glext.h:6631 +PFNGLVERTEXATTRIB1HVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLhalfNV)) # GL/glext.h:6632 +PFNGLVERTEXATTRIB2HNVPROC = CFUNCTYPE(None, GLuint, GLhalfNV, GLhalfNV) # GL/glext.h:6633 +PFNGLVERTEXATTRIB2HVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLhalfNV)) # GL/glext.h:6634 +PFNGLVERTEXATTRIB3HNVPROC = CFUNCTYPE(None, GLuint, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6635 +PFNGLVERTEXATTRIB3HVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLhalfNV)) # GL/glext.h:6636 +PFNGLVERTEXATTRIB4HNVPROC = CFUNCTYPE(None, GLuint, GLhalfNV, GLhalfNV, GLhalfNV, GLhalfNV) # GL/glext.h:6637 +PFNGLVERTEXATTRIB4HVNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLhalfNV)) # GL/glext.h:6638 +PFNGLVERTEXATTRIBS1HVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLhalfNV)) # GL/glext.h:6639 +PFNGLVERTEXATTRIBS2HVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLhalfNV)) # GL/glext.h:6640 +PFNGLVERTEXATTRIBS3HVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLhalfNV)) # GL/glext.h:6641 +PFNGLVERTEXATTRIBS4HVNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLhalfNV)) # GL/glext.h:6642 +# NV_pixel_data_range (GL/glext.h:6645) +GL_NV_pixel_data_range = 1 # GL/glext.h:6646 +# GL/glext.h:6648 +glPixelDataRangeNV = _link_function('glPixelDataRangeNV', None, [GLenum, GLsizei, POINTER(GLvoid)], 'NV_pixel_data_range') + +# GL/glext.h:6649 +glFlushPixelDataRangeNV = _link_function('glFlushPixelDataRangeNV', None, [GLenum], 'NV_pixel_data_range') + +PFNGLPIXELDATARANGENVPROC = CFUNCTYPE(None, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:6651 +PFNGLFLUSHPIXELDATARANGENVPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:6652 +# NV_primitive_restart (GL/glext.h:6655) +GL_NV_primitive_restart = 1 # GL/glext.h:6656 +# GL/glext.h:6658 +glPrimitiveRestartNV = _link_function('glPrimitiveRestartNV', None, [], 'NV_primitive_restart') + +# GL/glext.h:6659 +glPrimitiveRestartIndexNV = _link_function('glPrimitiveRestartIndexNV', None, [GLuint], 'NV_primitive_restart') + +PFNGLPRIMITIVERESTARTNVPROC = CFUNCTYPE(None) # GL/glext.h:6661 +PFNGLPRIMITIVERESTARTINDEXNVPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:6662 +# NV_texture_expand_normal (GL/glext.h:6665) +GL_NV_texture_expand_normal = 1 # GL/glext.h:6666 +# NV_vertex_program2 (GL/glext.h:6669) +GL_NV_vertex_program2 = 1 # GL/glext.h:6670 +# ATI_map_object_buffer (GL/glext.h:6673) +GL_ATI_map_object_buffer = 1 # GL/glext.h:6674 +# GL/glext.h:6676 +glMapObjectBufferATI = _link_function('glMapObjectBufferATI', POINTER(GLvoid), [GLuint], 'ATI_map_object_buffer') + +# GL/glext.h:6677 +glUnmapObjectBufferATI = _link_function('glUnmapObjectBufferATI', None, [GLuint], 'ATI_map_object_buffer') + +PFNGLMAPOBJECTBUFFERATIPROC = CFUNCTYPE(POINTER(GLvoid), GLuint) # GL/glext.h:6679 +PFNGLUNMAPOBJECTBUFFERATIPROC = CFUNCTYPE(None, GLuint) # GL/glext.h:6680 +# ATI_separate_stencil (GL/glext.h:6683) +GL_ATI_separate_stencil = 1 # GL/glext.h:6684 +# GL/glext.h:6686 +glStencilOpSeparateATI = _link_function('glStencilOpSeparateATI', None, [GLenum, GLenum, GLenum, GLenum], 'ATI_separate_stencil') + +# GL/glext.h:6687 +glStencilFuncSeparateATI = _link_function('glStencilFuncSeparateATI', None, [GLenum, GLenum, GLint, GLuint], 'ATI_separate_stencil') + +PFNGLSTENCILOPSEPARATEATIPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLenum) # GL/glext.h:6689 +PFNGLSTENCILFUNCSEPARATEATIPROC = CFUNCTYPE(None, GLenum, GLenum, GLint, GLuint) # GL/glext.h:6690 +# ATI_vertex_attrib_array_object (GL/glext.h:6693) +GL_ATI_vertex_attrib_array_object = 1 # GL/glext.h:6694 +# GL/glext.h:6696 +glVertexAttribArrayObjectATI = _link_function('glVertexAttribArrayObjectATI', None, [GLuint, GLint, GLenum, GLboolean, GLsizei, GLuint, GLuint], 'ATI_vertex_attrib_array_object') + +# GL/glext.h:6697 +glGetVertexAttribArrayObjectfvATI = _link_function('glGetVertexAttribArrayObjectfvATI', None, [GLuint, GLenum, POINTER(GLfloat)], 'ATI_vertex_attrib_array_object') + +# GL/glext.h:6698 +glGetVertexAttribArrayObjectivATI = _link_function('glGetVertexAttribArrayObjectivATI', None, [GLuint, GLenum, POINTER(GLint)], 'ATI_vertex_attrib_array_object') + +PFNGLVERTEXATTRIBARRAYOBJECTATIPROC = CFUNCTYPE(None, GLuint, GLint, GLenum, GLboolean, GLsizei, GLuint, GLuint) # GL/glext.h:6700 +PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLfloat)) # GL/glext.h:6701 +PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:6702 +# OES_read_format (GL/glext.h:6705) +GL_OES_read_format = 1 # GL/glext.h:6706 +# EXT_depth_bounds_test (GL/glext.h:6709) +GL_EXT_depth_bounds_test = 1 # GL/glext.h:6710 +GLclampd = c_double # /usr/include/GL/gl.h:66 +# GL/glext.h:6712 +glDepthBoundsEXT = _link_function('glDepthBoundsEXT', None, [GLclampd, GLclampd], 'EXT_depth_bounds_test') + +PFNGLDEPTHBOUNDSEXTPROC = CFUNCTYPE(None, GLclampd, GLclampd) # GL/glext.h:6714 +# EXT_texture_mirror_clamp (GL/glext.h:6717) +GL_EXT_texture_mirror_clamp = 1 # GL/glext.h:6718 +# EXT_blend_equation_separate (GL/glext.h:6721) +GL_EXT_blend_equation_separate = 1 # GL/glext.h:6722 +# GL/glext.h:6724 +glBlendEquationSeparateEXT = _link_function('glBlendEquationSeparateEXT', None, [GLenum, GLenum], 'EXT_blend_equation_separate') + +PFNGLBLENDEQUATIONSEPARATEEXTPROC = CFUNCTYPE(None, GLenum, GLenum) # GL/glext.h:6726 +# MESA_pack_invert (GL/glext.h:6729) +GL_MESA_pack_invert = 1 # GL/glext.h:6730 +# MESA_ycbcr_texture (GL/glext.h:6733) +GL_MESA_ycbcr_texture = 1 # GL/glext.h:6734 +# EXT_pixel_buffer_object (GL/glext.h:6737) +GL_EXT_pixel_buffer_object = 1 # GL/glext.h:6738 +# NV_fragment_program_option (GL/glext.h:6741) +GL_NV_fragment_program_option = 1 # GL/glext.h:6742 +# NV_fragment_program2 (GL/glext.h:6745) +GL_NV_fragment_program2 = 1 # GL/glext.h:6746 +# NV_vertex_program2_option (GL/glext.h:6749) +GL_NV_vertex_program2_option = 1 # GL/glext.h:6750 +# NV_vertex_program3 (GL/glext.h:6753) +GL_NV_vertex_program3 = 1 # GL/glext.h:6754 +# EXT_framebuffer_object (GL/glext.h:6757) +GL_EXT_framebuffer_object = 1 # GL/glext.h:6758 +# GL/glext.h:6760 +glIsRenderbufferEXT = _link_function('glIsRenderbufferEXT', GLboolean, [GLuint], 'EXT_framebuffer_object') + +# GL/glext.h:6761 +glBindRenderbufferEXT = _link_function('glBindRenderbufferEXT', None, [GLenum, GLuint], 'EXT_framebuffer_object') + +# GL/glext.h:6762 +glDeleteRenderbuffersEXT = _link_function('glDeleteRenderbuffersEXT', None, [GLsizei, POINTER(GLuint)], 'EXT_framebuffer_object') + +# GL/glext.h:6763 +glGenRenderbuffersEXT = _link_function('glGenRenderbuffersEXT', None, [GLsizei, POINTER(GLuint)], 'EXT_framebuffer_object') + +# GL/glext.h:6764 +glRenderbufferStorageEXT = _link_function('glRenderbufferStorageEXT', None, [GLenum, GLenum, GLsizei, GLsizei], 'EXT_framebuffer_object') + +# GL/glext.h:6765 +glGetRenderbufferParameterivEXT = _link_function('glGetRenderbufferParameterivEXT', None, [GLenum, GLenum, POINTER(GLint)], 'EXT_framebuffer_object') + +# GL/glext.h:6766 +glIsFramebufferEXT = _link_function('glIsFramebufferEXT', GLboolean, [GLuint], 'EXT_framebuffer_object') + +# GL/glext.h:6767 +glBindFramebufferEXT = _link_function('glBindFramebufferEXT', None, [GLenum, GLuint], 'EXT_framebuffer_object') + +# GL/glext.h:6768 +glDeleteFramebuffersEXT = _link_function('glDeleteFramebuffersEXT', None, [GLsizei, POINTER(GLuint)], 'EXT_framebuffer_object') + +# GL/glext.h:6769 +glGenFramebuffersEXT = _link_function('glGenFramebuffersEXT', None, [GLsizei, POINTER(GLuint)], 'EXT_framebuffer_object') + +# GL/glext.h:6770 +glCheckFramebufferStatusEXT = _link_function('glCheckFramebufferStatusEXT', GLenum, [GLenum], 'EXT_framebuffer_object') + +# GL/glext.h:6771 +glFramebufferTexture1DEXT = _link_function('glFramebufferTexture1DEXT', None, [GLenum, GLenum, GLenum, GLuint, GLint], 'EXT_framebuffer_object') + +# GL/glext.h:6772 +glFramebufferTexture2DEXT = _link_function('glFramebufferTexture2DEXT', None, [GLenum, GLenum, GLenum, GLuint, GLint], 'EXT_framebuffer_object') + +# GL/glext.h:6773 +glFramebufferTexture3DEXT = _link_function('glFramebufferTexture3DEXT', None, [GLenum, GLenum, GLenum, GLuint, GLint, GLint], 'EXT_framebuffer_object') + +# GL/glext.h:6774 +glFramebufferRenderbufferEXT = _link_function('glFramebufferRenderbufferEXT', None, [GLenum, GLenum, GLenum, GLuint], 'EXT_framebuffer_object') + +# GL/glext.h:6775 +glGetFramebufferAttachmentParameterivEXT = _link_function('glGetFramebufferAttachmentParameterivEXT', None, [GLenum, GLenum, GLenum, POINTER(GLint)], 'EXT_framebuffer_object') + +# GL/glext.h:6776 +glGenerateMipmapEXT = _link_function('glGenerateMipmapEXT', None, [GLenum], 'EXT_framebuffer_object') + +PFNGLISRENDERBUFFEREXTPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:6778 +PFNGLBINDRENDERBUFFEREXTPROC = CFUNCTYPE(None, GLenum, GLuint) # GL/glext.h:6779 +PFNGLDELETERENDERBUFFERSEXTPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:6780 +PFNGLGENRENDERBUFFERSEXTPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:6781 +PFNGLRENDERBUFFERSTORAGEEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLsizei, GLsizei) # GL/glext.h:6782 +PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:6783 +PFNGLISFRAMEBUFFEREXTPROC = CFUNCTYPE(GLboolean, GLuint) # GL/glext.h:6784 +PFNGLBINDFRAMEBUFFEREXTPROC = CFUNCTYPE(None, GLenum, GLuint) # GL/glext.h:6785 +PFNGLDELETEFRAMEBUFFERSEXTPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:6786 +PFNGLGENFRAMEBUFFERSEXTPROC = CFUNCTYPE(None, GLsizei, POINTER(GLuint)) # GL/glext.h:6787 +PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC = CFUNCTYPE(GLenum, GLenum) # GL/glext.h:6788 +PFNGLFRAMEBUFFERTEXTURE1DEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLuint, GLint) # GL/glext.h:6789 +PFNGLFRAMEBUFFERTEXTURE2DEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLuint, GLint) # GL/glext.h:6790 +PFNGLFRAMEBUFFERTEXTURE3DEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLuint, GLint, GLint) # GL/glext.h:6791 +PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, GLuint) # GL/glext.h:6792 +PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:6793 +PFNGLGENERATEMIPMAPEXTPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:6794 +# GREMEDY_string_marker (GL/glext.h:6797) +GL_GREMEDY_string_marker = 1 # GL/glext.h:6798 +# GL/glext.h:6800 +glStringMarkerGREMEDY = _link_function('glStringMarkerGREMEDY', None, [GLsizei, POINTER(GLvoid)], 'GREMEDY_string_marker') + +PFNGLSTRINGMARKERGREMEDYPROC = CFUNCTYPE(None, GLsizei, POINTER(GLvoid)) # GL/glext.h:6802 +# EXT_Cg_shader (GL/glext.h:6805) +GL_EXT_Cg_shader = 1 # GL/glext.h:6806 +# EXT_timer_query (GL/glext.h:6809) +GL_EXT_timer_query = 1 # GL/glext.h:6810 +# GL/glext.h:6812 +glGetQueryObjecti64vEXT = _link_function('glGetQueryObjecti64vEXT', None, [GLuint, GLenum, POINTER(GLint64EXT)], 'EXT_timer_query') + +# GL/glext.h:6813 +glGetQueryObjectui64vEXT = _link_function('glGetQueryObjectui64vEXT', None, [GLuint, GLenum, POINTER(GLuint64EXT)], 'EXT_timer_query') + +PFNGLGETQUERYOBJECTI64VEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint64EXT)) # GL/glext.h:6815 +PFNGLGETQUERYOBJECTUI64VEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLuint64EXT)) # GL/glext.h:6816 +# EXT_texture_buffer_object (GL/glext.h:6819) +GL_EXT_texture_buffer_object = 1 # GL/glext.h:6820 +# GL/glext.h:6822 +glTexBufferEXT = _link_function('glTexBufferEXT', None, [GLenum, GLenum, GLuint], 'EXT_texture_buffer_object') + +PFNGLTEXBUFFEREXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLuint) # GL/glext.h:6824 +# NV_transform_feedback (GL/glext.h:6827) +GL_NV_transform_feedback = 1 # GL/glext.h:6828 +# GL/glext.h:6830 +glBeginTransformFeedbackNV = _link_function('glBeginTransformFeedbackNV', None, [GLenum], 'NV_transform_feedback') + +# GL/glext.h:6831 +glEndTransformFeedbackNV = _link_function('glEndTransformFeedbackNV', None, [], 'NV_transform_feedback') + +# GL/glext.h:6832 +glTransformFeedbackAttribsNV = _link_function('glTransformFeedbackAttribsNV', None, [GLuint, POINTER(GLint), GLenum], 'NV_transform_feedback') + +# GL/glext.h:6833 +glBindBufferRangeNV = _link_function('glBindBufferRangeNV', None, [GLenum, GLuint, GLuint, GLintptr, GLsizeiptr], 'NV_transform_feedback') + +# GL/glext.h:6834 +glBindBufferOffsetNV = _link_function('glBindBufferOffsetNV', None, [GLenum, GLuint, GLuint, GLintptr], 'NV_transform_feedback') + +# GL/glext.h:6835 +glBindBufferBaseNV = _link_function('glBindBufferBaseNV', None, [GLenum, GLuint, GLuint], 'NV_transform_feedback') + +# GL/glext.h:6836 +glTransformFeedbackVaryingsNV = _link_function('glTransformFeedbackVaryingsNV', None, [GLuint, GLsizei, POINTER(GLint), GLenum], 'NV_transform_feedback') + +# GL/glext.h:6837 +glActiveVaryingNV = _link_function('glActiveVaryingNV', None, [GLuint, POINTER(GLchar)], 'NV_transform_feedback') + +# GL/glext.h:6838 +glGetVaryingLocationNV = _link_function('glGetVaryingLocationNV', GLint, [GLuint, POINTER(GLchar)], 'NV_transform_feedback') + +# GL/glext.h:6839 +glGetActiveVaryingNV = _link_function('glGetActiveVaryingNV', None, [GLuint, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLsizei), POINTER(GLenum), POINTER(GLchar)], 'NV_transform_feedback') + +# GL/glext.h:6840 +glGetTransformFeedbackVaryingNV = _link_function('glGetTransformFeedbackVaryingNV', None, [GLuint, GLuint, POINTER(GLint)], 'NV_transform_feedback') + +PFNGLBEGINTRANSFORMFEEDBACKNVPROC = CFUNCTYPE(None, GLenum) # GL/glext.h:6842 +PFNGLENDTRANSFORMFEEDBACKNVPROC = CFUNCTYPE(None) # GL/glext.h:6843 +PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLint), GLenum) # GL/glext.h:6844 +PFNGLBINDBUFFERRANGENVPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLintptr, GLsizeiptr) # GL/glext.h:6845 +PFNGLBINDBUFFEROFFSETNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLintptr) # GL/glext.h:6846 +PFNGLBINDBUFFERBASENVPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint) # GL/glext.h:6847 +PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC = CFUNCTYPE(None, GLuint, GLsizei, POINTER(GLint), GLenum) # GL/glext.h:6848 +PFNGLACTIVEVARYINGNVPROC = CFUNCTYPE(None, GLuint, POINTER(GLchar)) # GL/glext.h:6849 +PFNGLGETVARYINGLOCATIONNVPROC = CFUNCTYPE(GLint, GLuint, POINTER(GLchar)) # GL/glext.h:6850 +PFNGLGETACTIVEVARYINGNVPROC = CFUNCTYPE(None, GLuint, GLuint, GLsizei, POINTER(GLsizei), POINTER(GLsizei), POINTER(GLenum), POINTER(GLchar)) # GL/glext.h:6851 +PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC = CFUNCTYPE(None, GLuint, GLuint, POINTER(GLint)) # GL/glext.h:6852 +# NV_depth_buffer_float (GL/glext.h:6856) +GL_NV_depth_buffer_float = 1 # GL/glext.h:6857 +# GL/glext.h:6859 +glDepthRangedNV = _link_function('glDepthRangedNV', None, [GLdouble, GLdouble], 'NV_depth_buffer_float') + +# GL/glext.h:6860 +glClearDepthdNV = _link_function('glClearDepthdNV', None, [GLdouble], 'NV_depth_buffer_float') + +# GL/glext.h:6861 +glDepthBoundsdNV = _link_function('glDepthBoundsdNV', None, [GLdouble, GLdouble], 'NV_depth_buffer_float') + +PFNGLDEPTHRANGEDNVPROC = CFUNCTYPE(None, GLdouble, GLdouble) # GL/glext.h:6863 +PFNGLCLEARDEPTHDNVPROC = CFUNCTYPE(None, GLdouble) # GL/glext.h:6864 +PFNGLDEPTHBOUNDSDNVPROC = CFUNCTYPE(None, GLdouble, GLdouble) # GL/glext.h:6865 +# EXT_texture_compression_latc (GL/glext.h:6868) +GL_EXT_texture_compression_latc = 1 # GL/glext.h:6869 +# EXT_framebuffer_sRGB (GL/glext.h:6872) +GL_EXT_framebuffer_sRGB = 1 # GL/glext.h:6873 +# EXT_texture_shared_exponent (GL/glext.h:6876) +GL_EXT_texture_shared_exponent = 1 # GL/glext.h:6877 +# EXT_packed_float (GL/glext.h:6880) +GL_EXT_packed_float = 1 # GL/glext.h:6881 +# EXT_texture_array (GL/glext.h:6884) +GL_EXT_texture_array = 1 # GL/glext.h:6885 +# EXT_draw_buffers2 (GL/glext.h:6888) +GL_EXT_draw_buffers2 = 1 # GL/glext.h:6889 +# GL/glext.h:6891 +glColorMaskIndexedEXT = _link_function('glColorMaskIndexedEXT', None, [GLuint, GLboolean, GLboolean, GLboolean, GLboolean], 'EXT_draw_buffers2') + +# GL/glext.h:6892 +glGetBooleanIndexedvEXT = _link_function('glGetBooleanIndexedvEXT', None, [GLenum, GLuint, POINTER(GLboolean)], 'EXT_draw_buffers2') + +# GL/glext.h:6893 +glGetIntegerIndexedvEXT = _link_function('glGetIntegerIndexedvEXT', None, [GLenum, GLuint, POINTER(GLint)], 'EXT_draw_buffers2') + +# GL/glext.h:6894 +glEnableIndexedEXT = _link_function('glEnableIndexedEXT', None, [GLenum, GLuint], 'EXT_draw_buffers2') + +# GL/glext.h:6895 +glDisableIndexedEXT = _link_function('glDisableIndexedEXT', None, [GLenum, GLuint], 'EXT_draw_buffers2') + +# GL/glext.h:6896 +glIsEnabledIndexedEXT = _link_function('glIsEnabledIndexedEXT', GLboolean, [GLenum, GLuint], 'EXT_draw_buffers2') + +PFNGLCOLORMASKINDEXEDEXTPROC = CFUNCTYPE(None, GLuint, GLboolean, GLboolean, GLboolean, GLboolean) # GL/glext.h:6898 +PFNGLGETBOOLEANINDEXEDVEXTPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLboolean)) # GL/glext.h:6899 +PFNGLGETINTEGERINDEXEDVEXTPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLint)) # GL/glext.h:6900 +PFNGLENABLEINDEXEDEXTPROC = CFUNCTYPE(None, GLenum, GLuint) # GL/glext.h:6901 +PFNGLDISABLEINDEXEDEXTPROC = CFUNCTYPE(None, GLenum, GLuint) # GL/glext.h:6902 +PFNGLISENABLEDINDEXEDEXTPROC = CFUNCTYPE(GLboolean, GLenum, GLuint) # GL/glext.h:6903 +# EXT_texture_integer (GL/glext.h:6906) +GL_EXT_texture_integer = 1 # GL/glext.h:6907 +# GL/glext.h:6909 +glTexParameterIivEXT = _link_function('glTexParameterIivEXT', None, [GLenum, GLenum, POINTER(GLint)], 'EXT_texture_integer') + +# GL/glext.h:6910 +glTexParameterIuivEXT = _link_function('glTexParameterIuivEXT', None, [GLenum, GLenum, POINTER(GLuint)], 'EXT_texture_integer') + +# GL/glext.h:6911 +glGetTexParameterIivEXT = _link_function('glGetTexParameterIivEXT', None, [GLenum, GLenum, POINTER(GLint)], 'EXT_texture_integer') + +# GL/glext.h:6912 +glGetTexParameterIuivEXT = _link_function('glGetTexParameterIuivEXT', None, [GLenum, GLenum, POINTER(GLuint)], 'EXT_texture_integer') + +# GL/glext.h:6913 +glClearColorIiEXT = _link_function('glClearColorIiEXT', None, [GLint, GLint, GLint, GLint], 'EXT_texture_integer') + +# GL/glext.h:6914 +glClearColorIuiEXT = _link_function('glClearColorIuiEXT', None, [GLuint, GLuint, GLuint, GLuint], 'EXT_texture_integer') + +PFNGLTEXPARAMETERIIVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:6916 +PFNGLTEXPARAMETERIUIVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLuint)) # GL/glext.h:6917 +PFNGLGETTEXPARAMETERIIVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLint)) # GL/glext.h:6918 +PFNGLGETTEXPARAMETERIUIVEXTPROC = CFUNCTYPE(None, GLenum, GLenum, POINTER(GLuint)) # GL/glext.h:6919 +PFNGLCLEARCOLORIIEXTPROC = CFUNCTYPE(None, GLint, GLint, GLint, GLint) # GL/glext.h:6920 +PFNGLCLEARCOLORIUIEXTPROC = CFUNCTYPE(None, GLuint, GLuint, GLuint, GLuint) # GL/glext.h:6921 +# EXT_bindable_uniform (GL/glext.h:6924) +GL_EXT_bindable_uniform = 1 # GL/glext.h:6925 +# GL/glext.h:6927 +glUniformBufferEXT = _link_function('glUniformBufferEXT', None, [GLuint, GLint, GLuint], 'EXT_bindable_uniform') + +# GL/glext.h:6928 +glGetUniformBufferSizeEXT = _link_function('glGetUniformBufferSizeEXT', GLint, [GLuint, GLint], 'EXT_bindable_uniform') + +# GL/glext.h:6929 +glGetUniformOffsetEXT = _link_function('glGetUniformOffsetEXT', GLintptr, [GLuint, GLint], 'EXT_bindable_uniform') + +PFNGLUNIFORMBUFFEREXTPROC = CFUNCTYPE(None, GLuint, GLint, GLuint) # GL/glext.h:6931 +PFNGLGETUNIFORMBUFFERSIZEEXTPROC = CFUNCTYPE(GLint, GLuint, GLint) # GL/glext.h:6932 +PFNGLGETUNIFORMOFFSETEXTPROC = CFUNCTYPE(GLintptr, GLuint, GLint) # GL/glext.h:6933 +# EXT_gpu_shader4 (GL/glext.h:6936) +GL_EXT_gpu_shader4 = 1 # GL/glext.h:6937 +# GL/glext.h:6939 +glGetUniformuivEXT = _link_function('glGetUniformuivEXT', None, [GLuint, GLint, POINTER(GLuint)], 'EXT_gpu_shader4') + +# GL/glext.h:6940 +glBindFragDataLocationEXT = _link_function('glBindFragDataLocationEXT', None, [GLuint, GLuint, POINTER(GLchar)], 'EXT_gpu_shader4') + +# GL/glext.h:6941 +glGetFragDataLocationEXT = _link_function('glGetFragDataLocationEXT', GLint, [GLuint, POINTER(GLchar)], 'EXT_gpu_shader4') + +# GL/glext.h:6942 +glUniform1uiEXT = _link_function('glUniform1uiEXT', None, [GLint, GLuint], 'EXT_gpu_shader4') + +# GL/glext.h:6943 +glUniform2uiEXT = _link_function('glUniform2uiEXT', None, [GLint, GLuint, GLuint], 'EXT_gpu_shader4') + +# GL/glext.h:6944 +glUniform3uiEXT = _link_function('glUniform3uiEXT', None, [GLint, GLuint, GLuint, GLuint], 'EXT_gpu_shader4') + +# GL/glext.h:6945 +glUniform4uiEXT = _link_function('glUniform4uiEXT', None, [GLint, GLuint, GLuint, GLuint, GLuint], 'EXT_gpu_shader4') + +# GL/glext.h:6946 +glUniform1uivEXT = _link_function('glUniform1uivEXT', None, [GLint, GLsizei, POINTER(GLuint)], 'EXT_gpu_shader4') + +# GL/glext.h:6947 +glUniform2uivEXT = _link_function('glUniform2uivEXT', None, [GLint, GLsizei, POINTER(GLuint)], 'EXT_gpu_shader4') + +# GL/glext.h:6948 +glUniform3uivEXT = _link_function('glUniform3uivEXT', None, [GLint, GLsizei, POINTER(GLuint)], 'EXT_gpu_shader4') + +# GL/glext.h:6949 +glUniform4uivEXT = _link_function('glUniform4uivEXT', None, [GLint, GLsizei, POINTER(GLuint)], 'EXT_gpu_shader4') + +# GL/glext.h:6950 +glVertexAttribI1iEXT = _link_function('glVertexAttribI1iEXT', None, [GLuint, GLint], 'EXT_gpu_shader4') + +# GL/glext.h:6951 +glVertexAttribI2iEXT = _link_function('glVertexAttribI2iEXT', None, [GLuint, GLint, GLint], 'EXT_gpu_shader4') + +# GL/glext.h:6952 +glVertexAttribI3iEXT = _link_function('glVertexAttribI3iEXT', None, [GLuint, GLint, GLint, GLint], 'EXT_gpu_shader4') + +# GL/glext.h:6953 +glVertexAttribI4iEXT = _link_function('glVertexAttribI4iEXT', None, [GLuint, GLint, GLint, GLint, GLint], 'EXT_gpu_shader4') + +# GL/glext.h:6954 +glVertexAttribI1uiEXT = _link_function('glVertexAttribI1uiEXT', None, [GLuint, GLuint], 'EXT_gpu_shader4') + +# GL/glext.h:6955 +glVertexAttribI2uiEXT = _link_function('glVertexAttribI2uiEXT', None, [GLuint, GLuint, GLuint], 'EXT_gpu_shader4') + +# GL/glext.h:6956 +glVertexAttribI3uiEXT = _link_function('glVertexAttribI3uiEXT', None, [GLuint, GLuint, GLuint, GLuint], 'EXT_gpu_shader4') + +# GL/glext.h:6957 +glVertexAttribI4uiEXT = _link_function('glVertexAttribI4uiEXT', None, [GLuint, GLuint, GLuint, GLuint, GLuint], 'EXT_gpu_shader4') + +# GL/glext.h:6958 +glVertexAttribI1ivEXT = _link_function('glVertexAttribI1ivEXT', None, [GLuint, POINTER(GLint)], 'EXT_gpu_shader4') + +# GL/glext.h:6959 +glVertexAttribI2ivEXT = _link_function('glVertexAttribI2ivEXT', None, [GLuint, POINTER(GLint)], 'EXT_gpu_shader4') + +# GL/glext.h:6960 +glVertexAttribI3ivEXT = _link_function('glVertexAttribI3ivEXT', None, [GLuint, POINTER(GLint)], 'EXT_gpu_shader4') + +# GL/glext.h:6961 +glVertexAttribI4ivEXT = _link_function('glVertexAttribI4ivEXT', None, [GLuint, POINTER(GLint)], 'EXT_gpu_shader4') + +# GL/glext.h:6962 +glVertexAttribI1uivEXT = _link_function('glVertexAttribI1uivEXT', None, [GLuint, POINTER(GLuint)], 'EXT_gpu_shader4') + +# GL/glext.h:6963 +glVertexAttribI2uivEXT = _link_function('glVertexAttribI2uivEXT', None, [GLuint, POINTER(GLuint)], 'EXT_gpu_shader4') + +# GL/glext.h:6964 +glVertexAttribI3uivEXT = _link_function('glVertexAttribI3uivEXT', None, [GLuint, POINTER(GLuint)], 'EXT_gpu_shader4') + +# GL/glext.h:6965 +glVertexAttribI4uivEXT = _link_function('glVertexAttribI4uivEXT', None, [GLuint, POINTER(GLuint)], 'EXT_gpu_shader4') + +# GL/glext.h:6966 +glVertexAttribI4bvEXT = _link_function('glVertexAttribI4bvEXT', None, [GLuint, POINTER(GLbyte)], 'EXT_gpu_shader4') + +# GL/glext.h:6967 +glVertexAttribI4svEXT = _link_function('glVertexAttribI4svEXT', None, [GLuint, POINTER(GLshort)], 'EXT_gpu_shader4') + +# GL/glext.h:6968 +glVertexAttribI4ubvEXT = _link_function('glVertexAttribI4ubvEXT', None, [GLuint, POINTER(GLubyte)], 'EXT_gpu_shader4') + +# GL/glext.h:6969 +glVertexAttribI4usvEXT = _link_function('glVertexAttribI4usvEXT', None, [GLuint, POINTER(GLushort)], 'EXT_gpu_shader4') + +# GL/glext.h:6970 +glVertexAttribIPointerEXT = _link_function('glVertexAttribIPointerEXT', None, [GLuint, GLint, GLenum, GLsizei, POINTER(GLvoid)], 'EXT_gpu_shader4') + +# GL/glext.h:6971 +glGetVertexAttribIivEXT = _link_function('glGetVertexAttribIivEXT', None, [GLuint, GLenum, POINTER(GLint)], 'EXT_gpu_shader4') + +# GL/glext.h:6972 +glGetVertexAttribIuivEXT = _link_function('glGetVertexAttribIuivEXT', None, [GLuint, GLenum, POINTER(GLuint)], 'EXT_gpu_shader4') + +PFNGLGETUNIFORMUIVEXTPROC = CFUNCTYPE(None, GLuint, GLint, POINTER(GLuint)) # GL/glext.h:6974 +PFNGLBINDFRAGDATALOCATIONEXTPROC = CFUNCTYPE(None, GLuint, GLuint, POINTER(GLchar)) # GL/glext.h:6975 +PFNGLGETFRAGDATALOCATIONEXTPROC = CFUNCTYPE(GLint, GLuint, POINTER(GLchar)) # GL/glext.h:6976 +PFNGLUNIFORM1UIEXTPROC = CFUNCTYPE(None, GLint, GLuint) # GL/glext.h:6977 +PFNGLUNIFORM2UIEXTPROC = CFUNCTYPE(None, GLint, GLuint, GLuint) # GL/glext.h:6978 +PFNGLUNIFORM3UIEXTPROC = CFUNCTYPE(None, GLint, GLuint, GLuint, GLuint) # GL/glext.h:6979 +PFNGLUNIFORM4UIEXTPROC = CFUNCTYPE(None, GLint, GLuint, GLuint, GLuint, GLuint) # GL/glext.h:6980 +PFNGLUNIFORM1UIVEXTPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLuint)) # GL/glext.h:6981 +PFNGLUNIFORM2UIVEXTPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLuint)) # GL/glext.h:6982 +PFNGLUNIFORM3UIVEXTPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLuint)) # GL/glext.h:6983 +PFNGLUNIFORM4UIVEXTPROC = CFUNCTYPE(None, GLint, GLsizei, POINTER(GLuint)) # GL/glext.h:6984 +PFNGLVERTEXATTRIBI1IEXTPROC = CFUNCTYPE(None, GLuint, GLint) # GL/glext.h:6985 +PFNGLVERTEXATTRIBI2IEXTPROC = CFUNCTYPE(None, GLuint, GLint, GLint) # GL/glext.h:6986 +PFNGLVERTEXATTRIBI3IEXTPROC = CFUNCTYPE(None, GLuint, GLint, GLint, GLint) # GL/glext.h:6987 +PFNGLVERTEXATTRIBI4IEXTPROC = CFUNCTYPE(None, GLuint, GLint, GLint, GLint, GLint) # GL/glext.h:6988 +PFNGLVERTEXATTRIBI1UIEXTPROC = CFUNCTYPE(None, GLuint, GLuint) # GL/glext.h:6989 +PFNGLVERTEXATTRIBI2UIEXTPROC = CFUNCTYPE(None, GLuint, GLuint, GLuint) # GL/glext.h:6990 +PFNGLVERTEXATTRIBI3UIEXTPROC = CFUNCTYPE(None, GLuint, GLuint, GLuint, GLuint) # GL/glext.h:6991 +PFNGLVERTEXATTRIBI4UIEXTPROC = CFUNCTYPE(None, GLuint, GLuint, GLuint, GLuint, GLuint) # GL/glext.h:6992 +PFNGLVERTEXATTRIBI1IVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLint)) # GL/glext.h:6993 +PFNGLVERTEXATTRIBI2IVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLint)) # GL/glext.h:6994 +PFNGLVERTEXATTRIBI3IVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLint)) # GL/glext.h:6995 +PFNGLVERTEXATTRIBI4IVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLint)) # GL/glext.h:6996 +PFNGLVERTEXATTRIBI1UIVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLuint)) # GL/glext.h:6997 +PFNGLVERTEXATTRIBI2UIVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLuint)) # GL/glext.h:6998 +PFNGLVERTEXATTRIBI3UIVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLuint)) # GL/glext.h:6999 +PFNGLVERTEXATTRIBI4UIVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLuint)) # GL/glext.h:7000 +PFNGLVERTEXATTRIBI4BVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLbyte)) # GL/glext.h:7001 +PFNGLVERTEXATTRIBI4SVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLshort)) # GL/glext.h:7002 +PFNGLVERTEXATTRIBI4UBVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLubyte)) # GL/glext.h:7003 +PFNGLVERTEXATTRIBI4USVEXTPROC = CFUNCTYPE(None, GLuint, POINTER(GLushort)) # GL/glext.h:7004 +PFNGLVERTEXATTRIBIPOINTEREXTPROC = CFUNCTYPE(None, GLuint, GLint, GLenum, GLsizei, POINTER(GLvoid)) # GL/glext.h:7005 +PFNGLGETVERTEXATTRIBIIVEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLint)) # GL/glext.h:7006 +PFNGLGETVERTEXATTRIBIUIVEXTPROC = CFUNCTYPE(None, GLuint, GLenum, POINTER(GLuint)) # GL/glext.h:7007 +# EXT_geometry_shader4 (GL/glext.h:7011) +GL_EXT_geometry_shader4 = 1 # GL/glext.h:7012 +# GL/glext.h:7014 +glProgramParameteriEXT = _link_function('glProgramParameteriEXT', None, [GLuint, GLenum, GLint], 'EXT_geometry_shader4') + +# GL/glext.h:7015 +glFramebufferTextureEXT = _link_function('glFramebufferTextureEXT', None, [GLenum, GLenum, GLuint, GLint], 'EXT_geometry_shader4') + +# GL/glext.h:7016 +glFramebufferTextureLayerEXT = _link_function('glFramebufferTextureLayerEXT', None, [GLenum, GLenum, GLuint, GLint, GLint], 'EXT_geometry_shader4') + +# GL/glext.h:7017 +glFramebufferTextureFaceEXT = _link_function('glFramebufferTextureFaceEXT', None, [GLenum, GLenum, GLuint, GLint, GLenum], 'EXT_geometry_shader4') + +PFNGLPROGRAMPARAMETERIEXTPROC = CFUNCTYPE(None, GLuint, GLenum, GLint) # GL/glext.h:7019 +PFNGLFRAMEBUFFERTEXTUREEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLuint, GLint) # GL/glext.h:7020 +PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLuint, GLint, GLint) # GL/glext.h:7021 +PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC = CFUNCTYPE(None, GLenum, GLenum, GLuint, GLint, GLenum) # GL/glext.h:7022 +# NV_geometry_program4 (GL/glext.h:7025) +GL_NV_geometry_program4 = 1 # GL/glext.h:7026 +# GL/glext.h:7028 +glProgramVertexLimitNV = _link_function('glProgramVertexLimitNV', None, [GLenum, GLint], 'NV_geometry_program4') + +PFNGLPROGRAMVERTEXLIMITNVPROC = CFUNCTYPE(None, GLenum, GLint) # GL/glext.h:7030 +# NV_gpu_program4 (GL/glext.h:7033) +GL_NV_gpu_program4 = 1 # GL/glext.h:7034 +# GL/glext.h:7036 +glProgramLocalParameterI4iNV = _link_function('glProgramLocalParameterI4iNV', None, [GLenum, GLuint, GLint, GLint, GLint, GLint], 'NV_gpu_program4') + +# GL/glext.h:7037 +glProgramLocalParameterI4ivNV = _link_function('glProgramLocalParameterI4ivNV', None, [GLenum, GLuint, POINTER(GLint)], 'NV_gpu_program4') + +# GL/glext.h:7038 +glProgramLocalParametersI4ivNV = _link_function('glProgramLocalParametersI4ivNV', None, [GLenum, GLuint, GLsizei, POINTER(GLint)], 'NV_gpu_program4') + +# GL/glext.h:7039 +glProgramLocalParameterI4uiNV = _link_function('glProgramLocalParameterI4uiNV', None, [GLenum, GLuint, GLuint, GLuint, GLuint, GLuint], 'NV_gpu_program4') + +# GL/glext.h:7040 +glProgramLocalParameterI4uivNV = _link_function('glProgramLocalParameterI4uivNV', None, [GLenum, GLuint, POINTER(GLuint)], 'NV_gpu_program4') + +# GL/glext.h:7041 +glProgramLocalParametersI4uivNV = _link_function('glProgramLocalParametersI4uivNV', None, [GLenum, GLuint, GLsizei, POINTER(GLuint)], 'NV_gpu_program4') + +# GL/glext.h:7042 +glProgramEnvParameterI4iNV = _link_function('glProgramEnvParameterI4iNV', None, [GLenum, GLuint, GLint, GLint, GLint, GLint], 'NV_gpu_program4') + +# GL/glext.h:7043 +glProgramEnvParameterI4ivNV = _link_function('glProgramEnvParameterI4ivNV', None, [GLenum, GLuint, POINTER(GLint)], 'NV_gpu_program4') + +# GL/glext.h:7044 +glProgramEnvParametersI4ivNV = _link_function('glProgramEnvParametersI4ivNV', None, [GLenum, GLuint, GLsizei, POINTER(GLint)], 'NV_gpu_program4') + +# GL/glext.h:7045 +glProgramEnvParameterI4uiNV = _link_function('glProgramEnvParameterI4uiNV', None, [GLenum, GLuint, GLuint, GLuint, GLuint, GLuint], 'NV_gpu_program4') + +# GL/glext.h:7046 +glProgramEnvParameterI4uivNV = _link_function('glProgramEnvParameterI4uivNV', None, [GLenum, GLuint, POINTER(GLuint)], 'NV_gpu_program4') + +# GL/glext.h:7047 +glProgramEnvParametersI4uivNV = _link_function('glProgramEnvParametersI4uivNV', None, [GLenum, GLuint, GLsizei, POINTER(GLuint)], 'NV_gpu_program4') + +# GL/glext.h:7048 +glGetProgramLocalParameterIivNV = _link_function('glGetProgramLocalParameterIivNV', None, [GLenum, GLuint, POINTER(GLint)], 'NV_gpu_program4') + +# GL/glext.h:7049 +glGetProgramLocalParameterIuivNV = _link_function('glGetProgramLocalParameterIuivNV', None, [GLenum, GLuint, POINTER(GLuint)], 'NV_gpu_program4') + +# GL/glext.h:7050 +glGetProgramEnvParameterIivNV = _link_function('glGetProgramEnvParameterIivNV', None, [GLenum, GLuint, POINTER(GLint)], 'NV_gpu_program4') + +# GL/glext.h:7051 +glGetProgramEnvParameterIuivNV = _link_function('glGetProgramEnvParameterIuivNV', None, [GLenum, GLuint, POINTER(GLuint)], 'NV_gpu_program4') + +PFNGLPROGRAMLOCALPARAMETERI4INVPROC = CFUNCTYPE(None, GLenum, GLuint, GLint, GLint, GLint, GLint) # GL/glext.h:7053 +PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLint)) # GL/glext.h:7054 +PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLsizei, POINTER(GLint)) # GL/glext.h:7055 +PFNGLPROGRAMLOCALPARAMETERI4UINVPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLuint, GLuint, GLuint) # GL/glext.h:7056 +PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLuint)) # GL/glext.h:7057 +PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLsizei, POINTER(GLuint)) # GL/glext.h:7058 +PFNGLPROGRAMENVPARAMETERI4INVPROC = CFUNCTYPE(None, GLenum, GLuint, GLint, GLint, GLint, GLint) # GL/glext.h:7059 +PFNGLPROGRAMENVPARAMETERI4IVNVPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLint)) # GL/glext.h:7060 +PFNGLPROGRAMENVPARAMETERSI4IVNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLsizei, POINTER(GLint)) # GL/glext.h:7061 +PFNGLPROGRAMENVPARAMETERI4UINVPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLuint, GLuint, GLuint) # GL/glext.h:7062 +PFNGLPROGRAMENVPARAMETERI4UIVNVPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLuint)) # GL/glext.h:7063 +PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLsizei, POINTER(GLuint)) # GL/glext.h:7064 +PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLint)) # GL/glext.h:7065 +PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLuint)) # GL/glext.h:7066 +PFNGLGETPROGRAMENVPARAMETERIIVNVPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLint)) # GL/glext.h:7067 +PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC = CFUNCTYPE(None, GLenum, GLuint, POINTER(GLuint)) # GL/glext.h:7068 +# NV_parameter_buffer_object (GL/glext.h:7071) +GL_NV_parameter_buffer_object = 1 # GL/glext.h:7072 +# GL/glext.h:7074 +glProgramBufferParametersfvNV = _link_function('glProgramBufferParametersfvNV', None, [GLenum, GLuint, GLuint, GLsizei, POINTER(GLfloat)], 'NV_parameter_buffer_object') + +# GL/glext.h:7075 +glProgramBufferParametersIivNV = _link_function('glProgramBufferParametersIivNV', None, [GLenum, GLuint, GLuint, GLsizei, POINTER(GLint)], 'NV_parameter_buffer_object') + +# GL/glext.h:7076 +glProgramBufferParametersIuivNV = _link_function('glProgramBufferParametersIuivNV', None, [GLenum, GLuint, GLuint, GLsizei, POINTER(GLuint)], 'NV_parameter_buffer_object') + +PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLsizei, POINTER(GLfloat)) # GL/glext.h:7078 +PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLsizei, POINTER(GLint)) # GL/glext.h:7079 +PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC = CFUNCTYPE(None, GLenum, GLuint, GLuint, GLsizei, POINTER(GLuint)) # GL/glext.h:7080 +# EXT_framebuffer_multisample (GL/glext.h:7083) +GL_EXT_framebuffer_multisample = 1 # GL/glext.h:7084 +# GL/glext.h:7086 +glRenderbufferStorageMultisampleEXT = _link_function('glRenderbufferStorageMultisampleEXT', None, [GLenum, GLsizei, GLenum, GLsizei, GLsizei], 'EXT_framebuffer_multisample') + +PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC = CFUNCTYPE(None, GLenum, GLsizei, GLenum, GLsizei, GLsizei) # GL/glext.h:7088 +# NV_framebuffer_multisample_coverage (GL/glext.h:7091) +GL_NV_framebuffer_multisample_coverage = 1 # GL/glext.h:7092 +# GL/glext.h:7094 +glRenderbufferStorageMultisampleCoverageNV = _link_function('glRenderbufferStorageMultisampleCoverageNV', None, [GLenum, GLsizei, GLsizei, GLenum, GLsizei, GLsizei], 'NV_framebuffer_multisample_coverage') + +PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC = CFUNCTYPE(None, GLenum, GLsizei, GLsizei, GLenum, GLsizei, GLsizei) # GL/glext.h:7096 +# EXT_framebuffer_blit (GL/glext.h:7099) +GL_EXT_framebuffer_blit = 1 # GL/glext.h:7100 +# GL/glext.h:7102 +glBlitFramebufferEXT = _link_function('glBlitFramebufferEXT', None, [GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum], 'EXT_framebuffer_blit') + +PFNGLBLITFRAMEBUFFEREXTPROC = CFUNCTYPE(None, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum) # GL/glext.h:7104 +# EXT_draw_instanced (GL/glext.h:7107) +GL_EXT_draw_instanced = 1 # GL/glext.h:7108 +# GL/glext.h:7110 +glDrawArraysInstancedEXT = _link_function('glDrawArraysInstancedEXT', None, [GLenum, GLint, GLsizei, GLsizei], 'EXT_draw_instanced') + +# GL/glext.h:7111 +glDrawElementsInstancedEXT = _link_function('glDrawElementsInstancedEXT', None, [GLenum, GLsizei, GLenum, POINTER(GLvoid), GLsizei], 'EXT_draw_instanced') + +PFNGLDRAWARRAYSINSTANCEDEXTPROC = CFUNCTYPE(None, GLenum, GLint, GLsizei, GLsizei) # GL/glext.h:7113 +PFNGLDRAWELEMENTSINSTANCEDEXTPROC = CFUNCTYPE(None, GLenum, GLsizei, GLenum, POINTER(GLvoid), GLsizei) # GL/glext.h:7114 +# EXT_texture_compression_rgtc (GL/glext.h:7117) +GL_EXT_texture_compression_rgtc = 1 # GL/glext.h:7118 +# GLEXT_LEGACY (/usr/include/GL/gl.h:1633) + +__all__ = ['GL_GLEXT_VERSION', 'GL_UNSIGNED_BYTE_3_3_2', +'GL_UNSIGNED_SHORT_4_4_4_4', 'GL_UNSIGNED_SHORT_5_5_5_1', +'GL_UNSIGNED_INT_8_8_8_8', 'GL_UNSIGNED_INT_10_10_10_2', 'GL_RESCALE_NORMAL', +'GL_TEXTURE_BINDING_3D', 'GL_PACK_SKIP_IMAGES', 'GL_PACK_IMAGE_HEIGHT', +'GL_UNPACK_SKIP_IMAGES', 'GL_UNPACK_IMAGE_HEIGHT', 'GL_TEXTURE_3D', +'GL_PROXY_TEXTURE_3D', 'GL_TEXTURE_DEPTH', 'GL_TEXTURE_WRAP_R', +'GL_MAX_3D_TEXTURE_SIZE', 'GL_UNSIGNED_BYTE_2_3_3_REV', +'GL_UNSIGNED_SHORT_5_6_5', 'GL_UNSIGNED_SHORT_5_6_5_REV', +'GL_UNSIGNED_SHORT_4_4_4_4_REV', 'GL_UNSIGNED_SHORT_1_5_5_5_REV', +'GL_UNSIGNED_INT_8_8_8_8_REV', 'GL_UNSIGNED_INT_2_10_10_10_REV', 'GL_BGR', +'GL_BGRA', 'GL_MAX_ELEMENTS_VERTICES', 'GL_MAX_ELEMENTS_INDICES', +'GL_CLAMP_TO_EDGE', 'GL_TEXTURE_MIN_LOD', 'GL_TEXTURE_MAX_LOD', +'GL_TEXTURE_BASE_LEVEL', 'GL_TEXTURE_MAX_LEVEL', +'GL_LIGHT_MODEL_COLOR_CONTROL', 'GL_SINGLE_COLOR', +'GL_SEPARATE_SPECULAR_COLOR', 'GL_SMOOTH_POINT_SIZE_RANGE', +'GL_SMOOTH_POINT_SIZE_GRANULARITY', 'GL_SMOOTH_LINE_WIDTH_RANGE', +'GL_SMOOTH_LINE_WIDTH_GRANULARITY', 'GL_ALIASED_POINT_SIZE_RANGE', +'GL_ALIASED_LINE_WIDTH_RANGE', 'GL_CONSTANT_COLOR', +'GL_ONE_MINUS_CONSTANT_COLOR', 'GL_CONSTANT_ALPHA', +'GL_ONE_MINUS_CONSTANT_ALPHA', 'GL_BLEND_COLOR', 'GL_FUNC_ADD', 'GL_MIN', +'GL_MAX', 'GL_BLEND_EQUATION', 'GL_FUNC_SUBTRACT', 'GL_FUNC_REVERSE_SUBTRACT', +'GL_CONVOLUTION_1D', 'GL_CONVOLUTION_2D', 'GL_SEPARABLE_2D', +'GL_CONVOLUTION_BORDER_MODE', 'GL_CONVOLUTION_FILTER_SCALE', +'GL_CONVOLUTION_FILTER_BIAS', 'GL_REDUCE', 'GL_CONVOLUTION_FORMAT', +'GL_CONVOLUTION_WIDTH', 'GL_CONVOLUTION_HEIGHT', 'GL_MAX_CONVOLUTION_WIDTH', +'GL_MAX_CONVOLUTION_HEIGHT', 'GL_POST_CONVOLUTION_RED_SCALE', +'GL_POST_CONVOLUTION_GREEN_SCALE', 'GL_POST_CONVOLUTION_BLUE_SCALE', +'GL_POST_CONVOLUTION_ALPHA_SCALE', 'GL_POST_CONVOLUTION_RED_BIAS', +'GL_POST_CONVOLUTION_GREEN_BIAS', 'GL_POST_CONVOLUTION_BLUE_BIAS', +'GL_POST_CONVOLUTION_ALPHA_BIAS', 'GL_HISTOGRAM', 'GL_PROXY_HISTOGRAM', +'GL_HISTOGRAM_WIDTH', 'GL_HISTOGRAM_FORMAT', 'GL_HISTOGRAM_RED_SIZE', +'GL_HISTOGRAM_GREEN_SIZE', 'GL_HISTOGRAM_BLUE_SIZE', +'GL_HISTOGRAM_ALPHA_SIZE', 'GL_HISTOGRAM_LUMINANCE_SIZE', 'GL_HISTOGRAM_SINK', +'GL_MINMAX', 'GL_MINMAX_FORMAT', 'GL_MINMAX_SINK', 'GL_TABLE_TOO_LARGE', +'GL_COLOR_MATRIX', 'GL_COLOR_MATRIX_STACK_DEPTH', +'GL_MAX_COLOR_MATRIX_STACK_DEPTH', 'GL_POST_COLOR_MATRIX_RED_SCALE', +'GL_POST_COLOR_MATRIX_GREEN_SCALE', 'GL_POST_COLOR_MATRIX_BLUE_SCALE', +'GL_POST_COLOR_MATRIX_ALPHA_SCALE', 'GL_POST_COLOR_MATRIX_RED_BIAS', +'GL_POST_COLOR_MATRIX_GREEN_BIAS', 'GL_POST_COLOR_MATRIX_BLUE_BIAS', +'GL_POST_COLOR_MATRIX_ALPHA_BIAS', 'GL_COLOR_TABLE', +'GL_POST_CONVOLUTION_COLOR_TABLE', 'GL_POST_COLOR_MATRIX_COLOR_TABLE', +'GL_PROXY_COLOR_TABLE', 'GL_PROXY_POST_CONVOLUTION_COLOR_TABLE', +'GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE', 'GL_COLOR_TABLE_SCALE', +'GL_COLOR_TABLE_BIAS', 'GL_COLOR_TABLE_FORMAT', 'GL_COLOR_TABLE_WIDTH', +'GL_COLOR_TABLE_RED_SIZE', 'GL_COLOR_TABLE_GREEN_SIZE', +'GL_COLOR_TABLE_BLUE_SIZE', 'GL_COLOR_TABLE_ALPHA_SIZE', +'GL_COLOR_TABLE_LUMINANCE_SIZE', 'GL_COLOR_TABLE_INTENSITY_SIZE', +'GL_CONSTANT_BORDER', 'GL_REPLICATE_BORDER', 'GL_CONVOLUTION_BORDER_COLOR', +'GL_TEXTURE0', 'GL_TEXTURE1', 'GL_TEXTURE2', 'GL_TEXTURE3', 'GL_TEXTURE4', +'GL_TEXTURE5', 'GL_TEXTURE6', 'GL_TEXTURE7', 'GL_TEXTURE8', 'GL_TEXTURE9', +'GL_TEXTURE10', 'GL_TEXTURE11', 'GL_TEXTURE12', 'GL_TEXTURE13', +'GL_TEXTURE14', 'GL_TEXTURE15', 'GL_TEXTURE16', 'GL_TEXTURE17', +'GL_TEXTURE18', 'GL_TEXTURE19', 'GL_TEXTURE20', 'GL_TEXTURE21', +'GL_TEXTURE22', 'GL_TEXTURE23', 'GL_TEXTURE24', 'GL_TEXTURE25', +'GL_TEXTURE26', 'GL_TEXTURE27', 'GL_TEXTURE28', 'GL_TEXTURE29', +'GL_TEXTURE30', 'GL_TEXTURE31', 'GL_ACTIVE_TEXTURE', +'GL_CLIENT_ACTIVE_TEXTURE', 'GL_MAX_TEXTURE_UNITS', +'GL_TRANSPOSE_MODELVIEW_MATRIX', 'GL_TRANSPOSE_PROJECTION_MATRIX', +'GL_TRANSPOSE_TEXTURE_MATRIX', 'GL_TRANSPOSE_COLOR_MATRIX', 'GL_MULTISAMPLE', +'GL_SAMPLE_ALPHA_TO_COVERAGE', 'GL_SAMPLE_ALPHA_TO_ONE', 'GL_SAMPLE_COVERAGE', +'GL_SAMPLE_BUFFERS', 'GL_SAMPLES', 'GL_SAMPLE_COVERAGE_VALUE', +'GL_SAMPLE_COVERAGE_INVERT', 'GL_MULTISAMPLE_BIT', 'GL_NORMAL_MAP', +'GL_REFLECTION_MAP', 'GL_TEXTURE_CUBE_MAP', 'GL_TEXTURE_BINDING_CUBE_MAP', +'GL_TEXTURE_CUBE_MAP_POSITIVE_X', 'GL_TEXTURE_CUBE_MAP_NEGATIVE_X', +'GL_TEXTURE_CUBE_MAP_POSITIVE_Y', 'GL_TEXTURE_CUBE_MAP_NEGATIVE_Y', +'GL_TEXTURE_CUBE_MAP_POSITIVE_Z', 'GL_TEXTURE_CUBE_MAP_NEGATIVE_Z', +'GL_PROXY_TEXTURE_CUBE_MAP', 'GL_MAX_CUBE_MAP_TEXTURE_SIZE', +'GL_COMPRESSED_ALPHA', 'GL_COMPRESSED_LUMINANCE', +'GL_COMPRESSED_LUMINANCE_ALPHA', 'GL_COMPRESSED_INTENSITY', +'GL_COMPRESSED_RGB', 'GL_COMPRESSED_RGBA', 'GL_TEXTURE_COMPRESSION_HINT', +'GL_TEXTURE_COMPRESSED_IMAGE_SIZE', 'GL_TEXTURE_COMPRESSED', +'GL_NUM_COMPRESSED_TEXTURE_FORMATS', 'GL_COMPRESSED_TEXTURE_FORMATS', +'GL_CLAMP_TO_BORDER', 'GL_COMBINE', 'GL_COMBINE_RGB', 'GL_COMBINE_ALPHA', +'GL_SOURCE0_RGB', 'GL_SOURCE1_RGB', 'GL_SOURCE2_RGB', 'GL_SOURCE0_ALPHA', +'GL_SOURCE1_ALPHA', 'GL_SOURCE2_ALPHA', 'GL_OPERAND0_RGB', 'GL_OPERAND1_RGB', +'GL_OPERAND2_RGB', 'GL_OPERAND0_ALPHA', 'GL_OPERAND1_ALPHA', +'GL_OPERAND2_ALPHA', 'GL_RGB_SCALE', 'GL_ADD_SIGNED', 'GL_INTERPOLATE', +'GL_SUBTRACT', 'GL_CONSTANT', 'GL_PRIMARY_COLOR', 'GL_PREVIOUS', +'GL_DOT3_RGB', 'GL_DOT3_RGBA', 'GL_BLEND_DST_RGB', 'GL_BLEND_SRC_RGB', +'GL_BLEND_DST_ALPHA', 'GL_BLEND_SRC_ALPHA', 'GL_POINT_SIZE_MIN', +'GL_POINT_SIZE_MAX', 'GL_POINT_FADE_THRESHOLD_SIZE', +'GL_POINT_DISTANCE_ATTENUATION', 'GL_GENERATE_MIPMAP', +'GL_GENERATE_MIPMAP_HINT', 'GL_DEPTH_COMPONENT16', 'GL_DEPTH_COMPONENT24', +'GL_DEPTH_COMPONENT32', 'GL_MIRRORED_REPEAT', 'GL_FOG_COORDINATE_SOURCE', +'GL_FOG_COORDINATE', 'GL_FRAGMENT_DEPTH', 'GL_CURRENT_FOG_COORDINATE', +'GL_FOG_COORDINATE_ARRAY_TYPE', 'GL_FOG_COORDINATE_ARRAY_STRIDE', +'GL_FOG_COORDINATE_ARRAY_POINTER', 'GL_FOG_COORDINATE_ARRAY', 'GL_COLOR_SUM', +'GL_CURRENT_SECONDARY_COLOR', 'GL_SECONDARY_COLOR_ARRAY_SIZE', +'GL_SECONDARY_COLOR_ARRAY_TYPE', 'GL_SECONDARY_COLOR_ARRAY_STRIDE', +'GL_SECONDARY_COLOR_ARRAY_POINTER', 'GL_SECONDARY_COLOR_ARRAY', +'GL_MAX_TEXTURE_LOD_BIAS', 'GL_TEXTURE_FILTER_CONTROL', 'GL_TEXTURE_LOD_BIAS', +'GL_INCR_WRAP', 'GL_DECR_WRAP', 'GL_TEXTURE_DEPTH_SIZE', +'GL_DEPTH_TEXTURE_MODE', 'GL_TEXTURE_COMPARE_MODE', 'GL_TEXTURE_COMPARE_FUNC', +'GL_COMPARE_R_TO_TEXTURE', 'GL_BUFFER_SIZE', 'GL_BUFFER_USAGE', +'GL_QUERY_COUNTER_BITS', 'GL_CURRENT_QUERY', 'GL_QUERY_RESULT', +'GL_QUERY_RESULT_AVAILABLE', 'GL_ARRAY_BUFFER', 'GL_ELEMENT_ARRAY_BUFFER', +'GL_ARRAY_BUFFER_BINDING', 'GL_ELEMENT_ARRAY_BUFFER_BINDING', +'GL_VERTEX_ARRAY_BUFFER_BINDING', 'GL_NORMAL_ARRAY_BUFFER_BINDING', +'GL_COLOR_ARRAY_BUFFER_BINDING', 'GL_INDEX_ARRAY_BUFFER_BINDING', +'GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING', 'GL_EDGE_FLAG_ARRAY_BUFFER_BINDING', +'GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING', +'GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING', 'GL_WEIGHT_ARRAY_BUFFER_BINDING', +'GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING', 'GL_READ_ONLY', 'GL_WRITE_ONLY', +'GL_READ_WRITE', 'GL_BUFFER_ACCESS', 'GL_BUFFER_MAPPED', +'GL_BUFFER_MAP_POINTER', 'GL_STREAM_DRAW', 'GL_STREAM_READ', 'GL_STREAM_COPY', +'GL_STATIC_DRAW', 'GL_STATIC_READ', 'GL_STATIC_COPY', 'GL_DYNAMIC_DRAW', +'GL_DYNAMIC_READ', 'GL_DYNAMIC_COPY', 'GL_SAMPLES_PASSED', 'GL_FOG_COORD_SRC', +'GL_FOG_COORD', 'GL_CURRENT_FOG_COORD', 'GL_FOG_COORD_ARRAY_TYPE', +'GL_FOG_COORD_ARRAY_STRIDE', 'GL_FOG_COORD_ARRAY_POINTER', +'GL_FOG_COORD_ARRAY', 'GL_FOG_COORD_ARRAY_BUFFER_BINDING', 'GL_SRC0_RGB', +'GL_SRC1_RGB', 'GL_SRC2_RGB', 'GL_SRC0_ALPHA', 'GL_SRC1_ALPHA', +'GL_SRC2_ALPHA', 'GL_BLEND_EQUATION_RGB', 'GL_VERTEX_ATTRIB_ARRAY_ENABLED', +'GL_VERTEX_ATTRIB_ARRAY_SIZE', 'GL_VERTEX_ATTRIB_ARRAY_STRIDE', +'GL_VERTEX_ATTRIB_ARRAY_TYPE', 'GL_CURRENT_VERTEX_ATTRIB', +'GL_VERTEX_PROGRAM_POINT_SIZE', 'GL_VERTEX_PROGRAM_TWO_SIDE', +'GL_VERTEX_ATTRIB_ARRAY_POINTER', 'GL_STENCIL_BACK_FUNC', +'GL_STENCIL_BACK_FAIL', 'GL_STENCIL_BACK_PASS_DEPTH_FAIL', +'GL_STENCIL_BACK_PASS_DEPTH_PASS', 'GL_MAX_DRAW_BUFFERS', 'GL_DRAW_BUFFER0', +'GL_DRAW_BUFFER1', 'GL_DRAW_BUFFER2', 'GL_DRAW_BUFFER3', 'GL_DRAW_BUFFER4', +'GL_DRAW_BUFFER5', 'GL_DRAW_BUFFER6', 'GL_DRAW_BUFFER7', 'GL_DRAW_BUFFER8', +'GL_DRAW_BUFFER9', 'GL_DRAW_BUFFER10', 'GL_DRAW_BUFFER11', 'GL_DRAW_BUFFER12', +'GL_DRAW_BUFFER13', 'GL_DRAW_BUFFER14', 'GL_DRAW_BUFFER15', +'GL_BLEND_EQUATION_ALPHA', 'GL_POINT_SPRITE', 'GL_COORD_REPLACE', +'GL_MAX_VERTEX_ATTRIBS', 'GL_VERTEX_ATTRIB_ARRAY_NORMALIZED', +'GL_MAX_TEXTURE_COORDS', 'GL_MAX_TEXTURE_IMAGE_UNITS', 'GL_FRAGMENT_SHADER', +'GL_VERTEX_SHADER', 'GL_MAX_FRAGMENT_UNIFORM_COMPONENTS', +'GL_MAX_VERTEX_UNIFORM_COMPONENTS', 'GL_MAX_VARYING_FLOATS', +'GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS', 'GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS', +'GL_SHADER_TYPE', 'GL_FLOAT_VEC2', 'GL_FLOAT_VEC3', 'GL_FLOAT_VEC4', +'GL_INT_VEC2', 'GL_INT_VEC3', 'GL_INT_VEC4', 'GL_BOOL', 'GL_BOOL_VEC2', +'GL_BOOL_VEC3', 'GL_BOOL_VEC4', 'GL_FLOAT_MAT2', 'GL_FLOAT_MAT3', +'GL_FLOAT_MAT4', 'GL_SAMPLER_1D', 'GL_SAMPLER_2D', 'GL_SAMPLER_3D', +'GL_SAMPLER_CUBE', 'GL_SAMPLER_1D_SHADOW', 'GL_SAMPLER_2D_SHADOW', +'GL_DELETE_STATUS', 'GL_COMPILE_STATUS', 'GL_LINK_STATUS', +'GL_VALIDATE_STATUS', 'GL_INFO_LOG_LENGTH', 'GL_ATTACHED_SHADERS', +'GL_ACTIVE_UNIFORMS', 'GL_ACTIVE_UNIFORM_MAX_LENGTH', +'GL_SHADER_SOURCE_LENGTH', 'GL_ACTIVE_ATTRIBUTES', +'GL_ACTIVE_ATTRIBUTE_MAX_LENGTH', 'GL_FRAGMENT_SHADER_DERIVATIVE_HINT', +'GL_SHADING_LANGUAGE_VERSION', 'GL_CURRENT_PROGRAM', +'GL_POINT_SPRITE_COORD_ORIGIN', 'GL_LOWER_LEFT', 'GL_UPPER_LEFT', +'GL_STENCIL_BACK_REF', 'GL_STENCIL_BACK_VALUE_MASK', +'GL_STENCIL_BACK_WRITEMASK', 'GL_PIXEL_PACK_BUFFER', 'GL_PIXEL_UNPACK_BUFFER', +'GL_PIXEL_PACK_BUFFER_BINDING', 'GL_PIXEL_UNPACK_BUFFER_BINDING', 'GL_SRGB', +'GL_SRGB8', 'GL_SRGB_ALPHA', 'GL_SRGB8_ALPHA8', 'GL_SLUMINANCE_ALPHA', +'GL_SLUMINANCE8_ALPHA8', 'GL_SLUMINANCE', 'GL_SLUMINANCE8', +'GL_COMPRESSED_SRGB', 'GL_COMPRESSED_SRGB_ALPHA', 'GL_COMPRESSED_SLUMINANCE', +'GL_COMPRESSED_SLUMINANCE_ALPHA', 'GL_FLOAT_MAT2x3', 'GL_FLOAT_MAT2x4', +'GL_FLOAT_MAT3x2', 'GL_FLOAT_MAT3x4', 'GL_FLOAT_MAT4x2', 'GL_FLOAT_MAT4x3', +'GL_CURRENT_RASTER_SECONDARY_COLOR', 'GL_TEXTURE0_ARB', 'GL_TEXTURE1_ARB', +'GL_TEXTURE2_ARB', 'GL_TEXTURE3_ARB', 'GL_TEXTURE4_ARB', 'GL_TEXTURE5_ARB', +'GL_TEXTURE6_ARB', 'GL_TEXTURE7_ARB', 'GL_TEXTURE8_ARB', 'GL_TEXTURE9_ARB', +'GL_TEXTURE10_ARB', 'GL_TEXTURE11_ARB', 'GL_TEXTURE12_ARB', +'GL_TEXTURE13_ARB', 'GL_TEXTURE14_ARB', 'GL_TEXTURE15_ARB', +'GL_TEXTURE16_ARB', 'GL_TEXTURE17_ARB', 'GL_TEXTURE18_ARB', +'GL_TEXTURE19_ARB', 'GL_TEXTURE20_ARB', 'GL_TEXTURE21_ARB', +'GL_TEXTURE22_ARB', 'GL_TEXTURE23_ARB', 'GL_TEXTURE24_ARB', +'GL_TEXTURE25_ARB', 'GL_TEXTURE26_ARB', 'GL_TEXTURE27_ARB', +'GL_TEXTURE28_ARB', 'GL_TEXTURE29_ARB', 'GL_TEXTURE30_ARB', +'GL_TEXTURE31_ARB', 'GL_ACTIVE_TEXTURE_ARB', 'GL_CLIENT_ACTIVE_TEXTURE_ARB', +'GL_MAX_TEXTURE_UNITS_ARB', 'GL_TRANSPOSE_MODELVIEW_MATRIX_ARB', +'GL_TRANSPOSE_PROJECTION_MATRIX_ARB', 'GL_TRANSPOSE_TEXTURE_MATRIX_ARB', +'GL_TRANSPOSE_COLOR_MATRIX_ARB', 'GL_MULTISAMPLE_ARB', +'GL_SAMPLE_ALPHA_TO_COVERAGE_ARB', 'GL_SAMPLE_ALPHA_TO_ONE_ARB', +'GL_SAMPLE_COVERAGE_ARB', 'GL_SAMPLE_BUFFERS_ARB', 'GL_SAMPLES_ARB', +'GL_SAMPLE_COVERAGE_VALUE_ARB', 'GL_SAMPLE_COVERAGE_INVERT_ARB', +'GL_MULTISAMPLE_BIT_ARB', 'GL_NORMAL_MAP_ARB', 'GL_REFLECTION_MAP_ARB', +'GL_TEXTURE_CUBE_MAP_ARB', 'GL_TEXTURE_BINDING_CUBE_MAP_ARB', +'GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB', 'GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB', +'GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB', 'GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB', +'GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB', 'GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB', +'GL_PROXY_TEXTURE_CUBE_MAP_ARB', 'GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB', +'GL_COMPRESSED_ALPHA_ARB', 'GL_COMPRESSED_LUMINANCE_ARB', +'GL_COMPRESSED_LUMINANCE_ALPHA_ARB', 'GL_COMPRESSED_INTENSITY_ARB', +'GL_COMPRESSED_RGB_ARB', 'GL_COMPRESSED_RGBA_ARB', +'GL_TEXTURE_COMPRESSION_HINT_ARB', 'GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB', +'GL_TEXTURE_COMPRESSED_ARB', 'GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB', +'GL_COMPRESSED_TEXTURE_FORMATS_ARB', 'GL_CLAMP_TO_BORDER_ARB', +'GL_POINT_SIZE_MIN_ARB', 'GL_POINT_SIZE_MAX_ARB', +'GL_POINT_FADE_THRESHOLD_SIZE_ARB', 'GL_POINT_DISTANCE_ATTENUATION_ARB', +'GL_MAX_VERTEX_UNITS_ARB', 'GL_ACTIVE_VERTEX_UNITS_ARB', +'GL_WEIGHT_SUM_UNITY_ARB', 'GL_VERTEX_BLEND_ARB', 'GL_CURRENT_WEIGHT_ARB', +'GL_WEIGHT_ARRAY_TYPE_ARB', 'GL_WEIGHT_ARRAY_STRIDE_ARB', +'GL_WEIGHT_ARRAY_SIZE_ARB', 'GL_WEIGHT_ARRAY_POINTER_ARB', +'GL_WEIGHT_ARRAY_ARB', 'GL_MODELVIEW0_ARB', 'GL_MODELVIEW1_ARB', +'GL_MODELVIEW2_ARB', 'GL_MODELVIEW3_ARB', 'GL_MODELVIEW4_ARB', +'GL_MODELVIEW5_ARB', 'GL_MODELVIEW6_ARB', 'GL_MODELVIEW7_ARB', +'GL_MODELVIEW8_ARB', 'GL_MODELVIEW9_ARB', 'GL_MODELVIEW10_ARB', +'GL_MODELVIEW11_ARB', 'GL_MODELVIEW12_ARB', 'GL_MODELVIEW13_ARB', +'GL_MODELVIEW14_ARB', 'GL_MODELVIEW15_ARB', 'GL_MODELVIEW16_ARB', +'GL_MODELVIEW17_ARB', 'GL_MODELVIEW18_ARB', 'GL_MODELVIEW19_ARB', +'GL_MODELVIEW20_ARB', 'GL_MODELVIEW21_ARB', 'GL_MODELVIEW22_ARB', +'GL_MODELVIEW23_ARB', 'GL_MODELVIEW24_ARB', 'GL_MODELVIEW25_ARB', +'GL_MODELVIEW26_ARB', 'GL_MODELVIEW27_ARB', 'GL_MODELVIEW28_ARB', +'GL_MODELVIEW29_ARB', 'GL_MODELVIEW30_ARB', 'GL_MODELVIEW31_ARB', +'GL_MATRIX_PALETTE_ARB', 'GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB', +'GL_MAX_PALETTE_MATRICES_ARB', 'GL_CURRENT_PALETTE_MATRIX_ARB', +'GL_MATRIX_INDEX_ARRAY_ARB', 'GL_CURRENT_MATRIX_INDEX_ARB', +'GL_MATRIX_INDEX_ARRAY_SIZE_ARB', 'GL_MATRIX_INDEX_ARRAY_TYPE_ARB', +'GL_MATRIX_INDEX_ARRAY_STRIDE_ARB', 'GL_MATRIX_INDEX_ARRAY_POINTER_ARB', +'GL_COMBINE_ARB', 'GL_COMBINE_RGB_ARB', 'GL_COMBINE_ALPHA_ARB', +'GL_SOURCE0_RGB_ARB', 'GL_SOURCE1_RGB_ARB', 'GL_SOURCE2_RGB_ARB', +'GL_SOURCE0_ALPHA_ARB', 'GL_SOURCE1_ALPHA_ARB', 'GL_SOURCE2_ALPHA_ARB', +'GL_OPERAND0_RGB_ARB', 'GL_OPERAND1_RGB_ARB', 'GL_OPERAND2_RGB_ARB', +'GL_OPERAND0_ALPHA_ARB', 'GL_OPERAND1_ALPHA_ARB', 'GL_OPERAND2_ALPHA_ARB', +'GL_RGB_SCALE_ARB', 'GL_ADD_SIGNED_ARB', 'GL_INTERPOLATE_ARB', +'GL_SUBTRACT_ARB', 'GL_CONSTANT_ARB', 'GL_PRIMARY_COLOR_ARB', +'GL_PREVIOUS_ARB', 'GL_DOT3_RGB_ARB', 'GL_DOT3_RGBA_ARB', +'GL_MIRRORED_REPEAT_ARB', 'GL_DEPTH_COMPONENT16_ARB', +'GL_DEPTH_COMPONENT24_ARB', 'GL_DEPTH_COMPONENT32_ARB', +'GL_TEXTURE_DEPTH_SIZE_ARB', 'GL_DEPTH_TEXTURE_MODE_ARB', +'GL_TEXTURE_COMPARE_MODE_ARB', 'GL_TEXTURE_COMPARE_FUNC_ARB', +'GL_COMPARE_R_TO_TEXTURE_ARB', 'GL_TEXTURE_COMPARE_FAIL_VALUE_ARB', +'GL_COLOR_SUM_ARB', 'GL_VERTEX_PROGRAM_ARB', +'GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB', 'GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB', +'GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB', 'GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB', +'GL_CURRENT_VERTEX_ATTRIB_ARB', 'GL_PROGRAM_LENGTH_ARB', +'GL_PROGRAM_STRING_ARB', 'GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB', +'GL_MAX_PROGRAM_MATRICES_ARB', 'GL_CURRENT_MATRIX_STACK_DEPTH_ARB', +'GL_CURRENT_MATRIX_ARB', 'GL_VERTEX_PROGRAM_POINT_SIZE_ARB', +'GL_VERTEX_PROGRAM_TWO_SIDE_ARB', 'GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB', +'GL_PROGRAM_ERROR_POSITION_ARB', 'GL_PROGRAM_BINDING_ARB', +'GL_MAX_VERTEX_ATTRIBS_ARB', 'GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB', +'GL_PROGRAM_ERROR_STRING_ARB', 'GL_PROGRAM_FORMAT_ASCII_ARB', +'GL_PROGRAM_FORMAT_ARB', 'GL_PROGRAM_INSTRUCTIONS_ARB', +'GL_MAX_PROGRAM_INSTRUCTIONS_ARB', 'GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB', +'GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB', 'GL_PROGRAM_TEMPORARIES_ARB', +'GL_MAX_PROGRAM_TEMPORARIES_ARB', 'GL_PROGRAM_NATIVE_TEMPORARIES_ARB', +'GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB', 'GL_PROGRAM_PARAMETERS_ARB', +'GL_MAX_PROGRAM_PARAMETERS_ARB', 'GL_PROGRAM_NATIVE_PARAMETERS_ARB', +'GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB', 'GL_PROGRAM_ATTRIBS_ARB', +'GL_MAX_PROGRAM_ATTRIBS_ARB', 'GL_PROGRAM_NATIVE_ATTRIBS_ARB', +'GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB', 'GL_PROGRAM_ADDRESS_REGISTERS_ARB', +'GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB', +'GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB', +'GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB', +'GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB', 'GL_MAX_PROGRAM_ENV_PARAMETERS_ARB', +'GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB', 'GL_TRANSPOSE_CURRENT_MATRIX_ARB', +'GL_MATRIX0_ARB', 'GL_MATRIX1_ARB', 'GL_MATRIX2_ARB', 'GL_MATRIX3_ARB', +'GL_MATRIX4_ARB', 'GL_MATRIX5_ARB', 'GL_MATRIX6_ARB', 'GL_MATRIX7_ARB', +'GL_MATRIX8_ARB', 'GL_MATRIX9_ARB', 'GL_MATRIX10_ARB', 'GL_MATRIX11_ARB', +'GL_MATRIX12_ARB', 'GL_MATRIX13_ARB', 'GL_MATRIX14_ARB', 'GL_MATRIX15_ARB', +'GL_MATRIX16_ARB', 'GL_MATRIX17_ARB', 'GL_MATRIX18_ARB', 'GL_MATRIX19_ARB', +'GL_MATRIX20_ARB', 'GL_MATRIX21_ARB', 'GL_MATRIX22_ARB', 'GL_MATRIX23_ARB', +'GL_MATRIX24_ARB', 'GL_MATRIX25_ARB', 'GL_MATRIX26_ARB', 'GL_MATRIX27_ARB', +'GL_MATRIX28_ARB', 'GL_MATRIX29_ARB', 'GL_MATRIX30_ARB', 'GL_MATRIX31_ARB', +'GL_FRAGMENT_PROGRAM_ARB', 'GL_PROGRAM_ALU_INSTRUCTIONS_ARB', +'GL_PROGRAM_TEX_INSTRUCTIONS_ARB', 'GL_PROGRAM_TEX_INDIRECTIONS_ARB', +'GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB', +'GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB', +'GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB', +'GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB', 'GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB', +'GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB', +'GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB', +'GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB', +'GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB', 'GL_MAX_TEXTURE_COORDS_ARB', +'GL_MAX_TEXTURE_IMAGE_UNITS_ARB', 'GL_BUFFER_SIZE_ARB', 'GL_BUFFER_USAGE_ARB', +'GL_ARRAY_BUFFER_ARB', 'GL_ELEMENT_ARRAY_BUFFER_ARB', +'GL_ARRAY_BUFFER_BINDING_ARB', 'GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB', +'GL_VERTEX_ARRAY_BUFFER_BINDING_ARB', 'GL_NORMAL_ARRAY_BUFFER_BINDING_ARB', +'GL_COLOR_ARRAY_BUFFER_BINDING_ARB', 'GL_INDEX_ARRAY_BUFFER_BINDING_ARB', +'GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB', +'GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB', +'GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB', +'GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB', +'GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB', +'GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB', 'GL_READ_ONLY_ARB', +'GL_WRITE_ONLY_ARB', 'GL_READ_WRITE_ARB', 'GL_BUFFER_ACCESS_ARB', +'GL_BUFFER_MAPPED_ARB', 'GL_BUFFER_MAP_POINTER_ARB', 'GL_STREAM_DRAW_ARB', +'GL_STREAM_READ_ARB', 'GL_STREAM_COPY_ARB', 'GL_STATIC_DRAW_ARB', +'GL_STATIC_READ_ARB', 'GL_STATIC_COPY_ARB', 'GL_DYNAMIC_DRAW_ARB', +'GL_DYNAMIC_READ_ARB', 'GL_DYNAMIC_COPY_ARB', 'GL_QUERY_COUNTER_BITS_ARB', +'GL_CURRENT_QUERY_ARB', 'GL_QUERY_RESULT_ARB', +'GL_QUERY_RESULT_AVAILABLE_ARB', 'GL_SAMPLES_PASSED_ARB', +'GL_PROGRAM_OBJECT_ARB', 'GL_SHADER_OBJECT_ARB', 'GL_OBJECT_TYPE_ARB', +'GL_OBJECT_SUBTYPE_ARB', 'GL_FLOAT_VEC2_ARB', 'GL_FLOAT_VEC3_ARB', +'GL_FLOAT_VEC4_ARB', 'GL_INT_VEC2_ARB', 'GL_INT_VEC3_ARB', 'GL_INT_VEC4_ARB', +'GL_BOOL_ARB', 'GL_BOOL_VEC2_ARB', 'GL_BOOL_VEC3_ARB', 'GL_BOOL_VEC4_ARB', +'GL_FLOAT_MAT2_ARB', 'GL_FLOAT_MAT3_ARB', 'GL_FLOAT_MAT4_ARB', +'GL_SAMPLER_1D_ARB', 'GL_SAMPLER_2D_ARB', 'GL_SAMPLER_3D_ARB', +'GL_SAMPLER_CUBE_ARB', 'GL_SAMPLER_1D_SHADOW_ARB', 'GL_SAMPLER_2D_SHADOW_ARB', +'GL_SAMPLER_2D_RECT_ARB', 'GL_SAMPLER_2D_RECT_SHADOW_ARB', +'GL_OBJECT_DELETE_STATUS_ARB', 'GL_OBJECT_COMPILE_STATUS_ARB', +'GL_OBJECT_LINK_STATUS_ARB', 'GL_OBJECT_VALIDATE_STATUS_ARB', +'GL_OBJECT_INFO_LOG_LENGTH_ARB', 'GL_OBJECT_ATTACHED_OBJECTS_ARB', +'GL_OBJECT_ACTIVE_UNIFORMS_ARB', 'GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB', +'GL_OBJECT_SHADER_SOURCE_LENGTH_ARB', 'GL_VERTEX_SHADER_ARB', +'GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB', 'GL_MAX_VARYING_FLOATS_ARB', +'GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB', +'GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB', 'GL_OBJECT_ACTIVE_ATTRIBUTES_ARB', +'GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB', 'GL_FRAGMENT_SHADER_ARB', +'GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB', +'GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB', 'GL_SHADING_LANGUAGE_VERSION_ARB', +'GL_POINT_SPRITE_ARB', 'GL_COORD_REPLACE_ARB', 'GL_MAX_DRAW_BUFFERS_ARB', +'GL_DRAW_BUFFER0_ARB', 'GL_DRAW_BUFFER1_ARB', 'GL_DRAW_BUFFER2_ARB', +'GL_DRAW_BUFFER3_ARB', 'GL_DRAW_BUFFER4_ARB', 'GL_DRAW_BUFFER5_ARB', +'GL_DRAW_BUFFER6_ARB', 'GL_DRAW_BUFFER7_ARB', 'GL_DRAW_BUFFER8_ARB', +'GL_DRAW_BUFFER9_ARB', 'GL_DRAW_BUFFER10_ARB', 'GL_DRAW_BUFFER11_ARB', +'GL_DRAW_BUFFER12_ARB', 'GL_DRAW_BUFFER13_ARB', 'GL_DRAW_BUFFER14_ARB', +'GL_DRAW_BUFFER15_ARB', 'GL_TEXTURE_RECTANGLE_ARB', +'GL_TEXTURE_BINDING_RECTANGLE_ARB', 'GL_PROXY_TEXTURE_RECTANGLE_ARB', +'GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB', 'GL_RGBA_FLOAT_MODE_ARB', +'GL_CLAMP_VERTEX_COLOR_ARB', 'GL_CLAMP_FRAGMENT_COLOR_ARB', +'GL_CLAMP_READ_COLOR_ARB', 'GL_FIXED_ONLY_ARB', 'GL_HALF_FLOAT_ARB', +'GL_TEXTURE_RED_TYPE_ARB', 'GL_TEXTURE_GREEN_TYPE_ARB', +'GL_TEXTURE_BLUE_TYPE_ARB', 'GL_TEXTURE_ALPHA_TYPE_ARB', +'GL_TEXTURE_LUMINANCE_TYPE_ARB', 'GL_TEXTURE_INTENSITY_TYPE_ARB', +'GL_TEXTURE_DEPTH_TYPE_ARB', 'GL_UNSIGNED_NORMALIZED_ARB', 'GL_RGBA32F_ARB', +'GL_RGB32F_ARB', 'GL_ALPHA32F_ARB', 'GL_INTENSITY32F_ARB', +'GL_LUMINANCE32F_ARB', 'GL_LUMINANCE_ALPHA32F_ARB', 'GL_RGBA16F_ARB', +'GL_RGB16F_ARB', 'GL_ALPHA16F_ARB', 'GL_INTENSITY16F_ARB', +'GL_LUMINANCE16F_ARB', 'GL_LUMINANCE_ALPHA16F_ARB', +'GL_PIXEL_PACK_BUFFER_ARB', 'GL_PIXEL_UNPACK_BUFFER_ARB', +'GL_PIXEL_PACK_BUFFER_BINDING_ARB', 'GL_PIXEL_UNPACK_BUFFER_BINDING_ARB', +'GL_ABGR_EXT', 'GL_CONSTANT_COLOR_EXT', 'GL_ONE_MINUS_CONSTANT_COLOR_EXT', +'GL_CONSTANT_ALPHA_EXT', 'GL_ONE_MINUS_CONSTANT_ALPHA_EXT', +'GL_BLEND_COLOR_EXT', 'GL_POLYGON_OFFSET_EXT', 'GL_POLYGON_OFFSET_FACTOR_EXT', +'GL_POLYGON_OFFSET_BIAS_EXT', 'GL_ALPHA4_EXT', 'GL_ALPHA8_EXT', +'GL_ALPHA12_EXT', 'GL_ALPHA16_EXT', 'GL_LUMINANCE4_EXT', 'GL_LUMINANCE8_EXT', +'GL_LUMINANCE12_EXT', 'GL_LUMINANCE16_EXT', 'GL_LUMINANCE4_ALPHA4_EXT', +'GL_LUMINANCE6_ALPHA2_EXT', 'GL_LUMINANCE8_ALPHA8_EXT', +'GL_LUMINANCE12_ALPHA4_EXT', 'GL_LUMINANCE12_ALPHA12_EXT', +'GL_LUMINANCE16_ALPHA16_EXT', 'GL_INTENSITY_EXT', 'GL_INTENSITY4_EXT', +'GL_INTENSITY8_EXT', 'GL_INTENSITY12_EXT', 'GL_INTENSITY16_EXT', +'GL_RGB2_EXT', 'GL_RGB4_EXT', 'GL_RGB5_EXT', 'GL_RGB8_EXT', 'GL_RGB10_EXT', +'GL_RGB12_EXT', 'GL_RGB16_EXT', 'GL_RGBA2_EXT', 'GL_RGBA4_EXT', +'GL_RGB5_A1_EXT', 'GL_RGBA8_EXT', 'GL_RGB10_A2_EXT', 'GL_RGBA12_EXT', +'GL_RGBA16_EXT', 'GL_TEXTURE_RED_SIZE_EXT', 'GL_TEXTURE_GREEN_SIZE_EXT', +'GL_TEXTURE_BLUE_SIZE_EXT', 'GL_TEXTURE_ALPHA_SIZE_EXT', +'GL_TEXTURE_LUMINANCE_SIZE_EXT', 'GL_TEXTURE_INTENSITY_SIZE_EXT', +'GL_REPLACE_EXT', 'GL_PROXY_TEXTURE_1D_EXT', 'GL_PROXY_TEXTURE_2D_EXT', +'GL_TEXTURE_TOO_LARGE_EXT', 'GL_PACK_SKIP_IMAGES_EXT', +'GL_PACK_IMAGE_HEIGHT_EXT', 'GL_UNPACK_SKIP_IMAGES_EXT', +'GL_UNPACK_IMAGE_HEIGHT_EXT', 'GL_TEXTURE_3D_EXT', 'GL_PROXY_TEXTURE_3D_EXT', +'GL_TEXTURE_DEPTH_EXT', 'GL_TEXTURE_WRAP_R_EXT', 'GL_MAX_3D_TEXTURE_SIZE_EXT', +'GL_FILTER4_SGIS', 'GL_TEXTURE_FILTER4_SIZE_SGIS', 'GL_HISTOGRAM_EXT', +'GL_PROXY_HISTOGRAM_EXT', 'GL_HISTOGRAM_WIDTH_EXT', 'GL_HISTOGRAM_FORMAT_EXT', +'GL_HISTOGRAM_RED_SIZE_EXT', 'GL_HISTOGRAM_GREEN_SIZE_EXT', +'GL_HISTOGRAM_BLUE_SIZE_EXT', 'GL_HISTOGRAM_ALPHA_SIZE_EXT', +'GL_HISTOGRAM_LUMINANCE_SIZE_EXT', 'GL_HISTOGRAM_SINK_EXT', 'GL_MINMAX_EXT', +'GL_MINMAX_FORMAT_EXT', 'GL_MINMAX_SINK_EXT', 'GL_TABLE_TOO_LARGE_EXT', +'GL_CONVOLUTION_1D_EXT', 'GL_CONVOLUTION_2D_EXT', 'GL_SEPARABLE_2D_EXT', +'GL_CONVOLUTION_BORDER_MODE_EXT', 'GL_CONVOLUTION_FILTER_SCALE_EXT', +'GL_CONVOLUTION_FILTER_BIAS_EXT', 'GL_REDUCE_EXT', +'GL_CONVOLUTION_FORMAT_EXT', 'GL_CONVOLUTION_WIDTH_EXT', +'GL_CONVOLUTION_HEIGHT_EXT', 'GL_MAX_CONVOLUTION_WIDTH_EXT', +'GL_MAX_CONVOLUTION_HEIGHT_EXT', 'GL_POST_CONVOLUTION_RED_SCALE_EXT', +'GL_POST_CONVOLUTION_GREEN_SCALE_EXT', 'GL_POST_CONVOLUTION_BLUE_SCALE_EXT', +'GL_POST_CONVOLUTION_ALPHA_SCALE_EXT', 'GL_POST_CONVOLUTION_RED_BIAS_EXT', +'GL_POST_CONVOLUTION_GREEN_BIAS_EXT', 'GL_POST_CONVOLUTION_BLUE_BIAS_EXT', +'GL_POST_CONVOLUTION_ALPHA_BIAS_EXT', 'GL_COLOR_MATRIX_SGI', +'GL_COLOR_MATRIX_STACK_DEPTH_SGI', 'GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI', +'GL_POST_COLOR_MATRIX_RED_SCALE_SGI', 'GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI', +'GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI', 'GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI', +'GL_POST_COLOR_MATRIX_RED_BIAS_SGI', 'GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI', +'GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI', 'GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI', +'GL_COLOR_TABLE_SGI', 'GL_POST_CONVOLUTION_COLOR_TABLE_SGI', +'GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI', 'GL_PROXY_COLOR_TABLE_SGI', +'GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI', +'GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI', 'GL_COLOR_TABLE_SCALE_SGI', +'GL_COLOR_TABLE_BIAS_SGI', 'GL_COLOR_TABLE_FORMAT_SGI', +'GL_COLOR_TABLE_WIDTH_SGI', 'GL_COLOR_TABLE_RED_SIZE_SGI', +'GL_COLOR_TABLE_GREEN_SIZE_SGI', 'GL_COLOR_TABLE_BLUE_SIZE_SGI', +'GL_COLOR_TABLE_ALPHA_SIZE_SGI', 'GL_COLOR_TABLE_LUMINANCE_SIZE_SGI', +'GL_COLOR_TABLE_INTENSITY_SIZE_SGI', 'GL_PIXEL_TEXTURE_SGIS', +'GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS', 'GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS', +'GL_PIXEL_GROUP_COLOR_SGIS', 'GL_PIXEL_TEX_GEN_SGIX', +'GL_PIXEL_TEX_GEN_MODE_SGIX', 'GL_PACK_SKIP_VOLUMES_SGIS', +'GL_PACK_IMAGE_DEPTH_SGIS', 'GL_UNPACK_SKIP_VOLUMES_SGIS', +'GL_UNPACK_IMAGE_DEPTH_SGIS', 'GL_TEXTURE_4D_SGIS', +'GL_PROXY_TEXTURE_4D_SGIS', 'GL_TEXTURE_4DSIZE_SGIS', +'GL_TEXTURE_WRAP_Q_SGIS', 'GL_MAX_4D_TEXTURE_SIZE_SGIS', +'GL_TEXTURE_4D_BINDING_SGIS', 'GL_TEXTURE_COLOR_TABLE_SGI', +'GL_PROXY_TEXTURE_COLOR_TABLE_SGI', 'GL_CMYK_EXT', 'GL_CMYKA_EXT', +'GL_PACK_CMYK_HINT_EXT', 'GL_UNPACK_CMYK_HINT_EXT', 'GL_TEXTURE_PRIORITY_EXT', +'GL_TEXTURE_RESIDENT_EXT', 'GL_TEXTURE_1D_BINDING_EXT', +'GL_TEXTURE_2D_BINDING_EXT', 'GL_TEXTURE_3D_BINDING_EXT', +'GL_DETAIL_TEXTURE_2D_SGIS', 'GL_DETAIL_TEXTURE_2D_BINDING_SGIS', +'GL_LINEAR_DETAIL_SGIS', 'GL_LINEAR_DETAIL_ALPHA_SGIS', +'GL_LINEAR_DETAIL_COLOR_SGIS', 'GL_DETAIL_TEXTURE_LEVEL_SGIS', +'GL_DETAIL_TEXTURE_MODE_SGIS', 'GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS', +'GL_LINEAR_SHARPEN_SGIS', 'GL_LINEAR_SHARPEN_ALPHA_SGIS', +'GL_LINEAR_SHARPEN_COLOR_SGIS', 'GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS', +'GL_UNSIGNED_BYTE_3_3_2_EXT', 'GL_UNSIGNED_SHORT_4_4_4_4_EXT', +'GL_UNSIGNED_SHORT_5_5_5_1_EXT', 'GL_UNSIGNED_INT_8_8_8_8_EXT', +'GL_UNSIGNED_INT_10_10_10_2_EXT', 'GL_TEXTURE_MIN_LOD_SGIS', +'GL_TEXTURE_MAX_LOD_SGIS', 'GL_TEXTURE_BASE_LEVEL_SGIS', +'GL_TEXTURE_MAX_LEVEL_SGIS', 'GL_MULTISAMPLE_SGIS', +'GL_SAMPLE_ALPHA_TO_MASK_SGIS', 'GL_SAMPLE_ALPHA_TO_ONE_SGIS', +'GL_SAMPLE_MASK_SGIS', 'GL_1PASS_SGIS', 'GL_2PASS_0_SGIS', 'GL_2PASS_1_SGIS', +'GL_4PASS_0_SGIS', 'GL_4PASS_1_SGIS', 'GL_4PASS_2_SGIS', 'GL_4PASS_3_SGIS', +'GL_SAMPLE_BUFFERS_SGIS', 'GL_SAMPLES_SGIS', 'GL_SAMPLE_MASK_VALUE_SGIS', +'GL_SAMPLE_MASK_INVERT_SGIS', 'GL_SAMPLE_PATTERN_SGIS', +'GL_RESCALE_NORMAL_EXT', 'GL_VERTEX_ARRAY_EXT', 'GL_NORMAL_ARRAY_EXT', +'GL_COLOR_ARRAY_EXT', 'GL_INDEX_ARRAY_EXT', 'GL_TEXTURE_COORD_ARRAY_EXT', +'GL_EDGE_FLAG_ARRAY_EXT', 'GL_VERTEX_ARRAY_SIZE_EXT', +'GL_VERTEX_ARRAY_TYPE_EXT', 'GL_VERTEX_ARRAY_STRIDE_EXT', +'GL_VERTEX_ARRAY_COUNT_EXT', 'GL_NORMAL_ARRAY_TYPE_EXT', +'GL_NORMAL_ARRAY_STRIDE_EXT', 'GL_NORMAL_ARRAY_COUNT_EXT', +'GL_COLOR_ARRAY_SIZE_EXT', 'GL_COLOR_ARRAY_TYPE_EXT', +'GL_COLOR_ARRAY_STRIDE_EXT', 'GL_COLOR_ARRAY_COUNT_EXT', +'GL_INDEX_ARRAY_TYPE_EXT', 'GL_INDEX_ARRAY_STRIDE_EXT', +'GL_INDEX_ARRAY_COUNT_EXT', 'GL_TEXTURE_COORD_ARRAY_SIZE_EXT', +'GL_TEXTURE_COORD_ARRAY_TYPE_EXT', 'GL_TEXTURE_COORD_ARRAY_STRIDE_EXT', +'GL_TEXTURE_COORD_ARRAY_COUNT_EXT', 'GL_EDGE_FLAG_ARRAY_STRIDE_EXT', +'GL_EDGE_FLAG_ARRAY_COUNT_EXT', 'GL_VERTEX_ARRAY_POINTER_EXT', +'GL_NORMAL_ARRAY_POINTER_EXT', 'GL_COLOR_ARRAY_POINTER_EXT', +'GL_INDEX_ARRAY_POINTER_EXT', 'GL_TEXTURE_COORD_ARRAY_POINTER_EXT', +'GL_EDGE_FLAG_ARRAY_POINTER_EXT', 'GL_GENERATE_MIPMAP_SGIS', +'GL_GENERATE_MIPMAP_HINT_SGIS', 'GL_LINEAR_CLIPMAP_LINEAR_SGIX', +'GL_TEXTURE_CLIPMAP_CENTER_SGIX', 'GL_TEXTURE_CLIPMAP_FRAME_SGIX', +'GL_TEXTURE_CLIPMAP_OFFSET_SGIX', 'GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX', +'GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX', 'GL_TEXTURE_CLIPMAP_DEPTH_SGIX', +'GL_MAX_CLIPMAP_DEPTH_SGIX', 'GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX', +'GL_NEAREST_CLIPMAP_NEAREST_SGIX', 'GL_NEAREST_CLIPMAP_LINEAR_SGIX', +'GL_LINEAR_CLIPMAP_NEAREST_SGIX', 'GL_TEXTURE_COMPARE_SGIX', +'GL_TEXTURE_COMPARE_OPERATOR_SGIX', 'GL_TEXTURE_LEQUAL_R_SGIX', +'GL_TEXTURE_GEQUAL_R_SGIX', 'GL_CLAMP_TO_EDGE_SGIS', +'GL_CLAMP_TO_BORDER_SGIS', 'GL_FUNC_ADD_EXT', 'GL_MIN_EXT', 'GL_MAX_EXT', +'GL_BLEND_EQUATION_EXT', 'GL_FUNC_SUBTRACT_EXT', +'GL_FUNC_REVERSE_SUBTRACT_EXT', 'GL_INTERLACE_SGIX', +'GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX', 'GL_PIXEL_TILE_CACHE_INCREMENT_SGIX', +'GL_PIXEL_TILE_WIDTH_SGIX', 'GL_PIXEL_TILE_HEIGHT_SGIX', +'GL_PIXEL_TILE_GRID_WIDTH_SGIX', 'GL_PIXEL_TILE_GRID_HEIGHT_SGIX', +'GL_PIXEL_TILE_GRID_DEPTH_SGIX', 'GL_PIXEL_TILE_CACHE_SIZE_SGIX', +'GL_DUAL_ALPHA4_SGIS', 'GL_DUAL_ALPHA8_SGIS', 'GL_DUAL_ALPHA12_SGIS', +'GL_DUAL_ALPHA16_SGIS', 'GL_DUAL_LUMINANCE4_SGIS', 'GL_DUAL_LUMINANCE8_SGIS', +'GL_DUAL_LUMINANCE12_SGIS', 'GL_DUAL_LUMINANCE16_SGIS', +'GL_DUAL_INTENSITY4_SGIS', 'GL_DUAL_INTENSITY8_SGIS', +'GL_DUAL_INTENSITY12_SGIS', 'GL_DUAL_INTENSITY16_SGIS', +'GL_DUAL_LUMINANCE_ALPHA4_SGIS', 'GL_DUAL_LUMINANCE_ALPHA8_SGIS', +'GL_QUAD_ALPHA4_SGIS', 'GL_QUAD_ALPHA8_SGIS', 'GL_QUAD_LUMINANCE4_SGIS', +'GL_QUAD_LUMINANCE8_SGIS', 'GL_QUAD_INTENSITY4_SGIS', +'GL_QUAD_INTENSITY8_SGIS', 'GL_DUAL_TEXTURE_SELECT_SGIS', +'GL_QUAD_TEXTURE_SELECT_SGIS', 'GL_SPRITE_SGIX', 'GL_SPRITE_MODE_SGIX', +'GL_SPRITE_AXIS_SGIX', 'GL_SPRITE_TRANSLATION_SGIX', 'GL_SPRITE_AXIAL_SGIX', +'GL_SPRITE_OBJECT_ALIGNED_SGIX', 'GL_SPRITE_EYE_ALIGNED_SGIX', +'GL_TEXTURE_MULTI_BUFFER_HINT_SGIX', 'GL_POINT_SIZE_MIN_EXT', +'GL_POINT_SIZE_MAX_EXT', 'GL_POINT_FADE_THRESHOLD_SIZE_EXT', +'GL_DISTANCE_ATTENUATION_EXT', 'GL_POINT_SIZE_MIN_SGIS', +'GL_POINT_SIZE_MAX_SGIS', 'GL_POINT_FADE_THRESHOLD_SIZE_SGIS', +'GL_DISTANCE_ATTENUATION_SGIS', 'GL_INSTRUMENT_BUFFER_POINTER_SGIX', +'GL_INSTRUMENT_MEASUREMENTS_SGIX', 'GL_POST_TEXTURE_FILTER_BIAS_SGIX', +'GL_POST_TEXTURE_FILTER_SCALE_SGIX', 'GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX', +'GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX', 'GL_FRAMEZOOM_SGIX', +'GL_FRAMEZOOM_FACTOR_SGIX', 'GL_MAX_FRAMEZOOM_FACTOR_SGIX', +'GL_TEXTURE_DEFORMATION_BIT_SGIX', 'GL_GEOMETRY_DEFORMATION_BIT_SGIX', +'GL_GEOMETRY_DEFORMATION_SGIX', 'GL_TEXTURE_DEFORMATION_SGIX', +'GL_DEFORMATIONS_MASK_SGIX', 'GL_MAX_DEFORMATION_ORDER_SGIX', +'GL_REFERENCE_PLANE_SGIX', 'GL_REFERENCE_PLANE_EQUATION_SGIX', +'GL_DEPTH_COMPONENT16_SGIX', 'GL_DEPTH_COMPONENT24_SGIX', +'GL_DEPTH_COMPONENT32_SGIX', 'GL_FOG_FUNC_SGIS', 'GL_FOG_FUNC_POINTS_SGIS', +'GL_MAX_FOG_FUNC_POINTS_SGIS', 'GL_FOG_OFFSET_SGIX', +'GL_FOG_OFFSET_VALUE_SGIX', 'GL_IMAGE_SCALE_X_HP', 'GL_IMAGE_SCALE_Y_HP', +'GL_IMAGE_TRANSLATE_X_HP', 'GL_IMAGE_TRANSLATE_Y_HP', +'GL_IMAGE_ROTATE_ANGLE_HP', 'GL_IMAGE_ROTATE_ORIGIN_X_HP', +'GL_IMAGE_ROTATE_ORIGIN_Y_HP', 'GL_IMAGE_MAG_FILTER_HP', +'GL_IMAGE_MIN_FILTER_HP', 'GL_IMAGE_CUBIC_WEIGHT_HP', 'GL_CUBIC_HP', +'GL_AVERAGE_HP', 'GL_IMAGE_TRANSFORM_2D_HP', +'GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP', +'GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP', 'GL_IGNORE_BORDER_HP', +'GL_CONSTANT_BORDER_HP', 'GL_REPLICATE_BORDER_HP', +'GL_CONVOLUTION_BORDER_COLOR_HP', 'GL_TEXTURE_ENV_BIAS_SGIX', +'GL_VERTEX_DATA_HINT_PGI', 'GL_VERTEX_CONSISTENT_HINT_PGI', +'GL_MATERIAL_SIDE_HINT_PGI', 'GL_MAX_VERTEX_HINT_PGI', 'GL_COLOR3_BIT_PGI', +'GL_COLOR4_BIT_PGI', 'GL_EDGEFLAG_BIT_PGI', 'GL_INDEX_BIT_PGI', +'GL_MAT_AMBIENT_BIT_PGI', 'GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI', +'GL_MAT_DIFFUSE_BIT_PGI', 'GL_MAT_EMISSION_BIT_PGI', +'GL_MAT_COLOR_INDEXES_BIT_PGI', 'GL_MAT_SHININESS_BIT_PGI', +'GL_MAT_SPECULAR_BIT_PGI', 'GL_NORMAL_BIT_PGI', 'GL_TEXCOORD1_BIT_PGI', +'GL_TEXCOORD2_BIT_PGI', 'GL_TEXCOORD3_BIT_PGI', 'GL_TEXCOORD4_BIT_PGI', +'GL_VERTEX23_BIT_PGI', 'GL_VERTEX4_BIT_PGI', +'GL_PREFER_DOUBLEBUFFER_HINT_PGI', 'GL_CONSERVE_MEMORY_HINT_PGI', +'GL_RECLAIM_MEMORY_HINT_PGI', 'GL_NATIVE_GRAPHICS_HANDLE_PGI', +'GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI', 'GL_NATIVE_GRAPHICS_END_HINT_PGI', +'GL_ALWAYS_FAST_HINT_PGI', 'GL_ALWAYS_SOFT_HINT_PGI', +'GL_ALLOW_DRAW_OBJ_HINT_PGI', 'GL_ALLOW_DRAW_WIN_HINT_PGI', +'GL_ALLOW_DRAW_FRG_HINT_PGI', 'GL_ALLOW_DRAW_MEM_HINT_PGI', +'GL_STRICT_DEPTHFUNC_HINT_PGI', 'GL_STRICT_LIGHTING_HINT_PGI', +'GL_STRICT_SCISSOR_HINT_PGI', 'GL_FULL_STIPPLE_HINT_PGI', +'GL_CLIP_NEAR_HINT_PGI', 'GL_CLIP_FAR_HINT_PGI', 'GL_WIDE_LINE_HINT_PGI', +'GL_BACK_NORMALS_HINT_PGI', 'GL_COLOR_INDEX1_EXT', 'GL_COLOR_INDEX2_EXT', +'GL_COLOR_INDEX4_EXT', 'GL_COLOR_INDEX8_EXT', 'GL_COLOR_INDEX12_EXT', +'GL_COLOR_INDEX16_EXT', 'GL_TEXTURE_INDEX_SIZE_EXT', +'GL_CLIP_VOLUME_CLIPPING_HINT_EXT', 'GL_LIST_PRIORITY_SGIX', +'GL_IR_INSTRUMENT1_SGIX', 'GL_CALLIGRAPHIC_FRAGMENT_SGIX', +'GL_TEXTURE_LOD_BIAS_S_SGIX', 'GL_TEXTURE_LOD_BIAS_T_SGIX', +'GL_TEXTURE_LOD_BIAS_R_SGIX', 'GL_SHADOW_AMBIENT_SGIX', +'GL_INDEX_MATERIAL_EXT', 'GL_INDEX_MATERIAL_PARAMETER_EXT', +'GL_INDEX_MATERIAL_FACE_EXT', 'GL_INDEX_TEST_EXT', 'GL_INDEX_TEST_FUNC_EXT', +'GL_INDEX_TEST_REF_EXT', 'GL_IUI_V2F_EXT', 'GL_IUI_V3F_EXT', +'GL_IUI_N3F_V2F_EXT', 'GL_IUI_N3F_V3F_EXT', 'GL_T2F_IUI_V2F_EXT', +'GL_T2F_IUI_V3F_EXT', 'GL_T2F_IUI_N3F_V2F_EXT', 'GL_T2F_IUI_N3F_V3F_EXT', +'GL_ARRAY_ELEMENT_LOCK_FIRST_EXT', 'GL_ARRAY_ELEMENT_LOCK_COUNT_EXT', +'GL_CULL_VERTEX_EXT', 'GL_CULL_VERTEX_EYE_POSITION_EXT', +'GL_CULL_VERTEX_OBJECT_POSITION_EXT', 'GL_YCRCB_422_SGIX', +'GL_YCRCB_444_SGIX', 'GL_FRAGMENT_LIGHTING_SGIX', +'GL_FRAGMENT_COLOR_MATERIAL_SGIX', 'GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX', +'GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX', 'GL_MAX_FRAGMENT_LIGHTS_SGIX', +'GL_MAX_ACTIVE_LIGHTS_SGIX', 'GL_CURRENT_RASTER_NORMAL_SGIX', +'GL_LIGHT_ENV_MODE_SGIX', 'GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX', +'GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX', +'GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX', +'GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX', +'GL_FRAGMENT_LIGHT0_SGIX', 'GL_FRAGMENT_LIGHT1_SGIX', +'GL_FRAGMENT_LIGHT2_SGIX', 'GL_FRAGMENT_LIGHT3_SGIX', +'GL_FRAGMENT_LIGHT4_SGIX', 'GL_FRAGMENT_LIGHT5_SGIX', +'GL_FRAGMENT_LIGHT6_SGIX', 'GL_FRAGMENT_LIGHT7_SGIX', +'GL_RASTER_POSITION_UNCLIPPED_IBM', 'GL_TEXTURE_LIGHTING_MODE_HP', +'GL_TEXTURE_POST_SPECULAR_HP', 'GL_TEXTURE_PRE_SPECULAR_HP', +'GL_MAX_ELEMENTS_VERTICES_EXT', 'GL_MAX_ELEMENTS_INDICES_EXT', 'GL_PHONG_WIN', +'GL_PHONG_HINT_WIN', 'GL_FOG_SPECULAR_TEXTURE_WIN', +'GL_FRAGMENT_MATERIAL_EXT', 'GL_FRAGMENT_NORMAL_EXT', 'GL_FRAGMENT_COLOR_EXT', +'GL_ATTENUATION_EXT', 'GL_SHADOW_ATTENUATION_EXT', +'GL_TEXTURE_APPLICATION_MODE_EXT', 'GL_TEXTURE_LIGHT_EXT', +'GL_TEXTURE_MATERIAL_FACE_EXT', 'GL_TEXTURE_MATERIAL_PARAMETER_EXT', +'GL_ALPHA_MIN_SGIX', 'GL_ALPHA_MAX_SGIX', 'GL_PIXEL_TEX_GEN_Q_CEILING_SGIX', +'GL_PIXEL_TEX_GEN_Q_ROUND_SGIX', 'GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX', +'GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX', +'GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX', 'GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX', +'GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX', 'GL_BGR_EXT', 'GL_BGRA_EXT', +'GL_ASYNC_MARKER_SGIX', 'GL_ASYNC_TEX_IMAGE_SGIX', +'GL_ASYNC_DRAW_PIXELS_SGIX', 'GL_ASYNC_READ_PIXELS_SGIX', +'GL_MAX_ASYNC_TEX_IMAGE_SGIX', 'GL_MAX_ASYNC_DRAW_PIXELS_SGIX', +'GL_MAX_ASYNC_READ_PIXELS_SGIX', 'GL_ASYNC_HISTOGRAM_SGIX', +'GL_MAX_ASYNC_HISTOGRAM_SGIX', 'GL_PARALLEL_ARRAYS_INTEL', +'GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL', +'GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL', +'GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL', +'GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL', 'GL_OCCLUSION_TEST_HP', +'GL_OCCLUSION_TEST_RESULT_HP', 'GL_PIXEL_TRANSFORM_2D_EXT', +'GL_PIXEL_MAG_FILTER_EXT', 'GL_PIXEL_MIN_FILTER_EXT', +'GL_PIXEL_CUBIC_WEIGHT_EXT', 'GL_CUBIC_EXT', 'GL_AVERAGE_EXT', +'GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT', +'GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT', +'GL_PIXEL_TRANSFORM_2D_MATRIX_EXT', 'GL_SHARED_TEXTURE_PALETTE_EXT', +'GL_LIGHT_MODEL_COLOR_CONTROL_EXT', 'GL_SINGLE_COLOR_EXT', +'GL_SEPARATE_SPECULAR_COLOR_EXT', 'GL_COLOR_SUM_EXT', +'GL_CURRENT_SECONDARY_COLOR_EXT', 'GL_SECONDARY_COLOR_ARRAY_SIZE_EXT', +'GL_SECONDARY_COLOR_ARRAY_TYPE_EXT', 'GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT', +'GL_SECONDARY_COLOR_ARRAY_POINTER_EXT', 'GL_SECONDARY_COLOR_ARRAY_EXT', +'GL_PERTURB_EXT', 'GL_TEXTURE_NORMAL_EXT', 'GL_FOG_COORDINATE_SOURCE_EXT', +'GL_FOG_COORDINATE_EXT', 'GL_FRAGMENT_DEPTH_EXT', +'GL_CURRENT_FOG_COORDINATE_EXT', 'GL_FOG_COORDINATE_ARRAY_TYPE_EXT', +'GL_FOG_COORDINATE_ARRAY_STRIDE_EXT', 'GL_FOG_COORDINATE_ARRAY_POINTER_EXT', +'GL_FOG_COORDINATE_ARRAY_EXT', 'GL_SCREEN_COORDINATES_REND', +'GL_INVERTED_SCREEN_W_REND', 'GL_TANGENT_ARRAY_EXT', 'GL_BINORMAL_ARRAY_EXT', +'GL_CURRENT_TANGENT_EXT', 'GL_CURRENT_BINORMAL_EXT', +'GL_TANGENT_ARRAY_TYPE_EXT', 'GL_TANGENT_ARRAY_STRIDE_EXT', +'GL_BINORMAL_ARRAY_TYPE_EXT', 'GL_BINORMAL_ARRAY_STRIDE_EXT', +'GL_TANGENT_ARRAY_POINTER_EXT', 'GL_BINORMAL_ARRAY_POINTER_EXT', +'GL_MAP1_TANGENT_EXT', 'GL_MAP2_TANGENT_EXT', 'GL_MAP1_BINORMAL_EXT', +'GL_MAP2_BINORMAL_EXT', 'GL_COMBINE_EXT', 'GL_COMBINE_RGB_EXT', +'GL_COMBINE_ALPHA_EXT', 'GL_RGB_SCALE_EXT', 'GL_ADD_SIGNED_EXT', +'GL_INTERPOLATE_EXT', 'GL_CONSTANT_EXT', 'GL_PRIMARY_COLOR_EXT', +'GL_PREVIOUS_EXT', 'GL_SOURCE0_RGB_EXT', 'GL_SOURCE1_RGB_EXT', +'GL_SOURCE2_RGB_EXT', 'GL_SOURCE0_ALPHA_EXT', 'GL_SOURCE1_ALPHA_EXT', +'GL_SOURCE2_ALPHA_EXT', 'GL_OPERAND0_RGB_EXT', 'GL_OPERAND1_RGB_EXT', +'GL_OPERAND2_RGB_EXT', 'GL_OPERAND0_ALPHA_EXT', 'GL_OPERAND1_ALPHA_EXT', +'GL_OPERAND2_ALPHA_EXT', 'GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE', +'GL_TRANSFORM_HINT_APPLE', 'GL_FOG_SCALE_SGIX', 'GL_FOG_SCALE_VALUE_SGIX', +'GL_UNPACK_CONSTANT_DATA_SUNX', 'GL_TEXTURE_CONSTANT_DATA_SUNX', +'GL_GLOBAL_ALPHA_SUN', 'GL_GLOBAL_ALPHA_FACTOR_SUN', 'GL_RESTART_SUN', +'GL_REPLACE_MIDDLE_SUN', 'GL_REPLACE_OLDEST_SUN', 'GL_TRIANGLE_LIST_SUN', +'GL_REPLACEMENT_CODE_SUN', 'GL_REPLACEMENT_CODE_ARRAY_SUN', +'GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN', 'GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN', +'GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN', 'GL_R1UI_V3F_SUN', +'GL_R1UI_C4UB_V3F_SUN', 'GL_R1UI_C3F_V3F_SUN', 'GL_R1UI_N3F_V3F_SUN', +'GL_R1UI_C4F_N3F_V3F_SUN', 'GL_R1UI_T2F_V3F_SUN', 'GL_R1UI_T2F_N3F_V3F_SUN', +'GL_R1UI_T2F_C4F_N3F_V3F_SUN', 'GL_BLEND_DST_RGB_EXT', 'GL_BLEND_SRC_RGB_EXT', +'GL_BLEND_DST_ALPHA_EXT', 'GL_BLEND_SRC_ALPHA_EXT', 'GL_RED_MIN_CLAMP_INGR', +'GL_GREEN_MIN_CLAMP_INGR', 'GL_BLUE_MIN_CLAMP_INGR', +'GL_ALPHA_MIN_CLAMP_INGR', 'GL_RED_MAX_CLAMP_INGR', 'GL_GREEN_MAX_CLAMP_INGR', +'GL_BLUE_MAX_CLAMP_INGR', 'GL_ALPHA_MAX_CLAMP_INGR', 'GL_INTERLACE_READ_INGR', +'GL_INCR_WRAP_EXT', 'GL_DECR_WRAP_EXT', 'GL_422_EXT', 'GL_422_REV_EXT', +'GL_422_AVERAGE_EXT', 'GL_422_REV_AVERAGE_EXT', 'GL_NORMAL_MAP_NV', +'GL_REFLECTION_MAP_NV', 'GL_NORMAL_MAP_EXT', 'GL_REFLECTION_MAP_EXT', +'GL_TEXTURE_CUBE_MAP_EXT', 'GL_TEXTURE_BINDING_CUBE_MAP_EXT', +'GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT', 'GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT', +'GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT', 'GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT', +'GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT', 'GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT', +'GL_PROXY_TEXTURE_CUBE_MAP_EXT', 'GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT', +'GL_WRAP_BORDER_SUN', 'GL_MAX_TEXTURE_LOD_BIAS_EXT', +'GL_TEXTURE_FILTER_CONTROL_EXT', 'GL_TEXTURE_LOD_BIAS_EXT', +'GL_TEXTURE_MAX_ANISOTROPY_EXT', 'GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT', +'GL_MODELVIEW0_STACK_DEPTH_EXT', 'GL_MODELVIEW1_STACK_DEPTH_EXT', +'GL_MODELVIEW0_MATRIX_EXT', 'GL_MODELVIEW1_MATRIX_EXT', +'GL_VERTEX_WEIGHTING_EXT', 'GL_MODELVIEW0_EXT', 'GL_MODELVIEW1_EXT', +'GL_CURRENT_VERTEX_WEIGHT_EXT', 'GL_VERTEX_WEIGHT_ARRAY_EXT', +'GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT', 'GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT', +'GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT', 'GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT', +'GL_MAX_SHININESS_NV', 'GL_MAX_SPOT_EXPONENT_NV', 'GL_VERTEX_ARRAY_RANGE_NV', +'GL_VERTEX_ARRAY_RANGE_LENGTH_NV', 'GL_VERTEX_ARRAY_RANGE_VALID_NV', +'GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV', 'GL_VERTEX_ARRAY_RANGE_POINTER_NV', +'GL_REGISTER_COMBINERS_NV', 'GL_VARIABLE_A_NV', 'GL_VARIABLE_B_NV', +'GL_VARIABLE_C_NV', 'GL_VARIABLE_D_NV', 'GL_VARIABLE_E_NV', +'GL_VARIABLE_F_NV', 'GL_VARIABLE_G_NV', 'GL_CONSTANT_COLOR0_NV', +'GL_CONSTANT_COLOR1_NV', 'GL_PRIMARY_COLOR_NV', 'GL_SECONDARY_COLOR_NV', +'GL_SPARE0_NV', 'GL_SPARE1_NV', 'GL_DISCARD_NV', 'GL_E_TIMES_F_NV', +'GL_SPARE0_PLUS_SECONDARY_COLOR_NV', 'GL_UNSIGNED_IDENTITY_NV', +'GL_UNSIGNED_INVERT_NV', 'GL_EXPAND_NORMAL_NV', 'GL_EXPAND_NEGATE_NV', +'GL_HALF_BIAS_NORMAL_NV', 'GL_HALF_BIAS_NEGATE_NV', 'GL_SIGNED_IDENTITY_NV', +'GL_SIGNED_NEGATE_NV', 'GL_SCALE_BY_TWO_NV', 'GL_SCALE_BY_FOUR_NV', +'GL_SCALE_BY_ONE_HALF_NV', 'GL_BIAS_BY_NEGATIVE_ONE_HALF_NV', +'GL_COMBINER_INPUT_NV', 'GL_COMBINER_MAPPING_NV', +'GL_COMBINER_COMPONENT_USAGE_NV', 'GL_COMBINER_AB_DOT_PRODUCT_NV', +'GL_COMBINER_CD_DOT_PRODUCT_NV', 'GL_COMBINER_MUX_SUM_NV', +'GL_COMBINER_SCALE_NV', 'GL_COMBINER_BIAS_NV', 'GL_COMBINER_AB_OUTPUT_NV', +'GL_COMBINER_CD_OUTPUT_NV', 'GL_COMBINER_SUM_OUTPUT_NV', +'GL_MAX_GENERAL_COMBINERS_NV', 'GL_NUM_GENERAL_COMBINERS_NV', +'GL_COLOR_SUM_CLAMP_NV', 'GL_COMBINER0_NV', 'GL_COMBINER1_NV', +'GL_COMBINER2_NV', 'GL_COMBINER3_NV', 'GL_COMBINER4_NV', 'GL_COMBINER5_NV', +'GL_COMBINER6_NV', 'GL_COMBINER7_NV', 'GL_FOG_DISTANCE_MODE_NV', +'GL_EYE_RADIAL_NV', 'GL_EYE_PLANE_ABSOLUTE_NV', 'GL_EMBOSS_LIGHT_NV', +'GL_EMBOSS_CONSTANT_NV', 'GL_EMBOSS_MAP_NV', 'GL_COMBINE4_NV', +'GL_SOURCE3_RGB_NV', 'GL_SOURCE3_ALPHA_NV', 'GL_OPERAND3_RGB_NV', +'GL_OPERAND3_ALPHA_NV', 'GL_COMPRESSED_RGB_S3TC_DXT1_EXT', +'GL_COMPRESSED_RGBA_S3TC_DXT1_EXT', 'GL_COMPRESSED_RGBA_S3TC_DXT3_EXT', +'GL_COMPRESSED_RGBA_S3TC_DXT5_EXT', 'GL_CULL_VERTEX_IBM', +'GL_VERTEX_ARRAY_LIST_IBM', 'GL_NORMAL_ARRAY_LIST_IBM', +'GL_COLOR_ARRAY_LIST_IBM', 'GL_INDEX_ARRAY_LIST_IBM', +'GL_TEXTURE_COORD_ARRAY_LIST_IBM', 'GL_EDGE_FLAG_ARRAY_LIST_IBM', +'GL_FOG_COORDINATE_ARRAY_LIST_IBM', 'GL_SECONDARY_COLOR_ARRAY_LIST_IBM', +'GL_VERTEX_ARRAY_LIST_STRIDE_IBM', 'GL_NORMAL_ARRAY_LIST_STRIDE_IBM', +'GL_COLOR_ARRAY_LIST_STRIDE_IBM', 'GL_INDEX_ARRAY_LIST_STRIDE_IBM', +'GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM', +'GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM', +'GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM', +'GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM', 'GL_PACK_SUBSAMPLE_RATE_SGIX', +'GL_UNPACK_SUBSAMPLE_RATE_SGIX', 'GL_PIXEL_SUBSAMPLE_4444_SGIX', +'GL_PIXEL_SUBSAMPLE_2424_SGIX', 'GL_PIXEL_SUBSAMPLE_4242_SGIX', +'GL_YCRCB_SGIX', 'GL_YCRCBA_SGIX', 'GL_DEPTH_PASS_INSTRUMENT_SGIX', +'GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX', 'GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX', +'GL_COMPRESSED_RGB_FXT1_3DFX', 'GL_COMPRESSED_RGBA_FXT1_3DFX', +'GL_MULTISAMPLE_3DFX', 'GL_SAMPLE_BUFFERS_3DFX', 'GL_SAMPLES_3DFX', +'GL_MULTISAMPLE_BIT_3DFX', 'GL_MULTISAMPLE_EXT', +'GL_SAMPLE_ALPHA_TO_MASK_EXT', 'GL_SAMPLE_ALPHA_TO_ONE_EXT', +'GL_SAMPLE_MASK_EXT', 'GL_1PASS_EXT', 'GL_2PASS_0_EXT', 'GL_2PASS_1_EXT', +'GL_4PASS_0_EXT', 'GL_4PASS_1_EXT', 'GL_4PASS_2_EXT', 'GL_4PASS_3_EXT', +'GL_SAMPLE_BUFFERS_EXT', 'GL_SAMPLES_EXT', 'GL_SAMPLE_MASK_VALUE_EXT', +'GL_SAMPLE_MASK_INVERT_EXT', 'GL_SAMPLE_PATTERN_EXT', +'GL_MULTISAMPLE_BIT_EXT', 'GL_VERTEX_PRECLIP_SGIX', +'GL_VERTEX_PRECLIP_HINT_SGIX', 'GL_CONVOLUTION_HINT_SGIX', +'GL_PACK_RESAMPLE_SGIX', 'GL_UNPACK_RESAMPLE_SGIX', +'GL_RESAMPLE_REPLICATE_SGIX', 'GL_RESAMPLE_ZERO_FILL_SGIX', +'GL_RESAMPLE_DECIMATE_SGIX', 'GL_EYE_DISTANCE_TO_POINT_SGIS', +'GL_OBJECT_DISTANCE_TO_POINT_SGIS', 'GL_EYE_DISTANCE_TO_LINE_SGIS', +'GL_OBJECT_DISTANCE_TO_LINE_SGIS', 'GL_EYE_POINT_SGIS', +'GL_OBJECT_POINT_SGIS', 'GL_EYE_LINE_SGIS', 'GL_OBJECT_LINE_SGIS', +'GL_TEXTURE_COLOR_WRITEMASK_SGIS', 'GL_DOT3_RGB_EXT', 'GL_DOT3_RGBA_EXT', +'GL_MIRROR_CLAMP_ATI', 'GL_MIRROR_CLAMP_TO_EDGE_ATI', 'GL_ALL_COMPLETED_NV', +'GL_FENCE_STATUS_NV', 'GL_FENCE_CONDITION_NV', 'GL_MIRRORED_REPEAT_IBM', +'GL_EVAL_2D_NV', 'GL_EVAL_TRIANGULAR_2D_NV', 'GL_MAP_TESSELLATION_NV', +'GL_MAP_ATTRIB_U_ORDER_NV', 'GL_MAP_ATTRIB_V_ORDER_NV', +'GL_EVAL_FRACTIONAL_TESSELLATION_NV', 'GL_EVAL_VERTEX_ATTRIB0_NV', +'GL_EVAL_VERTEX_ATTRIB1_NV', 'GL_EVAL_VERTEX_ATTRIB2_NV', +'GL_EVAL_VERTEX_ATTRIB3_NV', 'GL_EVAL_VERTEX_ATTRIB4_NV', +'GL_EVAL_VERTEX_ATTRIB5_NV', 'GL_EVAL_VERTEX_ATTRIB6_NV', +'GL_EVAL_VERTEX_ATTRIB7_NV', 'GL_EVAL_VERTEX_ATTRIB8_NV', +'GL_EVAL_VERTEX_ATTRIB9_NV', 'GL_EVAL_VERTEX_ATTRIB10_NV', +'GL_EVAL_VERTEX_ATTRIB11_NV', 'GL_EVAL_VERTEX_ATTRIB12_NV', +'GL_EVAL_VERTEX_ATTRIB13_NV', 'GL_EVAL_VERTEX_ATTRIB14_NV', +'GL_EVAL_VERTEX_ATTRIB15_NV', 'GL_MAX_MAP_TESSELLATION_NV', +'GL_MAX_RATIONAL_EVAL_ORDER_NV', 'GL_DEPTH_STENCIL_NV', +'GL_UNSIGNED_INT_24_8_NV', 'GL_PER_STAGE_CONSTANTS_NV', +'GL_TEXTURE_RECTANGLE_NV', 'GL_TEXTURE_BINDING_RECTANGLE_NV', +'GL_PROXY_TEXTURE_RECTANGLE_NV', 'GL_MAX_RECTANGLE_TEXTURE_SIZE_NV', +'GL_OFFSET_TEXTURE_RECTANGLE_NV', 'GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV', +'GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV', +'GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV', 'GL_UNSIGNED_INT_S8_S8_8_8_NV', +'GL_UNSIGNED_INT_8_8_S8_S8_REV_NV', 'GL_DSDT_MAG_INTENSITY_NV', +'GL_SHADER_CONSISTENT_NV', 'GL_TEXTURE_SHADER_NV', 'GL_SHADER_OPERATION_NV', +'GL_CULL_MODES_NV', 'GL_OFFSET_TEXTURE_MATRIX_NV', +'GL_OFFSET_TEXTURE_SCALE_NV', 'GL_OFFSET_TEXTURE_BIAS_NV', +'GL_OFFSET_TEXTURE_2D_MATRIX_NV', 'GL_OFFSET_TEXTURE_2D_SCALE_NV', +'GL_OFFSET_TEXTURE_2D_BIAS_NV', 'GL_PREVIOUS_TEXTURE_INPUT_NV', +'GL_CONST_EYE_NV', 'GL_PASS_THROUGH_NV', 'GL_CULL_FRAGMENT_NV', +'GL_OFFSET_TEXTURE_2D_NV', 'GL_DEPENDENT_AR_TEXTURE_2D_NV', +'GL_DEPENDENT_GB_TEXTURE_2D_NV', 'GL_DOT_PRODUCT_NV', +'GL_DOT_PRODUCT_DEPTH_REPLACE_NV', 'GL_DOT_PRODUCT_TEXTURE_2D_NV', +'GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV', 'GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV', +'GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV', +'GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV', 'GL_HILO_NV', 'GL_DSDT_NV', +'GL_DSDT_MAG_NV', 'GL_DSDT_MAG_VIB_NV', 'GL_HILO16_NV', 'GL_SIGNED_HILO_NV', +'GL_SIGNED_HILO16_NV', 'GL_SIGNED_RGBA_NV', 'GL_SIGNED_RGBA8_NV', +'GL_SIGNED_RGB_NV', 'GL_SIGNED_RGB8_NV', 'GL_SIGNED_LUMINANCE_NV', +'GL_SIGNED_LUMINANCE8_NV', 'GL_SIGNED_LUMINANCE_ALPHA_NV', +'GL_SIGNED_LUMINANCE8_ALPHA8_NV', 'GL_SIGNED_ALPHA_NV', 'GL_SIGNED_ALPHA8_NV', +'GL_SIGNED_INTENSITY_NV', 'GL_SIGNED_INTENSITY8_NV', 'GL_DSDT8_NV', +'GL_DSDT8_MAG8_NV', 'GL_DSDT8_MAG8_INTENSITY8_NV', +'GL_SIGNED_RGB_UNSIGNED_ALPHA_NV', 'GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV', +'GL_HI_SCALE_NV', 'GL_LO_SCALE_NV', 'GL_DS_SCALE_NV', 'GL_DT_SCALE_NV', +'GL_MAGNITUDE_SCALE_NV', 'GL_VIBRANCE_SCALE_NV', 'GL_HI_BIAS_NV', +'GL_LO_BIAS_NV', 'GL_DS_BIAS_NV', 'GL_DT_BIAS_NV', 'GL_MAGNITUDE_BIAS_NV', +'GL_VIBRANCE_BIAS_NV', 'GL_TEXTURE_BORDER_VALUES_NV', 'GL_TEXTURE_HI_SIZE_NV', +'GL_TEXTURE_LO_SIZE_NV', 'GL_TEXTURE_DS_SIZE_NV', 'GL_TEXTURE_DT_SIZE_NV', +'GL_TEXTURE_MAG_SIZE_NV', 'GL_DOT_PRODUCT_TEXTURE_3D_NV', +'GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV', 'GL_VERTEX_PROGRAM_NV', +'GL_VERTEX_STATE_PROGRAM_NV', 'GL_ATTRIB_ARRAY_SIZE_NV', +'GL_ATTRIB_ARRAY_STRIDE_NV', 'GL_ATTRIB_ARRAY_TYPE_NV', +'GL_CURRENT_ATTRIB_NV', 'GL_PROGRAM_LENGTH_NV', 'GL_PROGRAM_STRING_NV', +'GL_MODELVIEW_PROJECTION_NV', 'GL_IDENTITY_NV', 'GL_INVERSE_NV', +'GL_TRANSPOSE_NV', 'GL_INVERSE_TRANSPOSE_NV', +'GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV', 'GL_MAX_TRACK_MATRICES_NV', +'GL_MATRIX0_NV', 'GL_MATRIX1_NV', 'GL_MATRIX2_NV', 'GL_MATRIX3_NV', +'GL_MATRIX4_NV', 'GL_MATRIX5_NV', 'GL_MATRIX6_NV', 'GL_MATRIX7_NV', +'GL_CURRENT_MATRIX_STACK_DEPTH_NV', 'GL_CURRENT_MATRIX_NV', +'GL_VERTEX_PROGRAM_POINT_SIZE_NV', 'GL_VERTEX_PROGRAM_TWO_SIDE_NV', +'GL_PROGRAM_PARAMETER_NV', 'GL_ATTRIB_ARRAY_POINTER_NV', +'GL_PROGRAM_TARGET_NV', 'GL_PROGRAM_RESIDENT_NV', 'GL_TRACK_MATRIX_NV', +'GL_TRACK_MATRIX_TRANSFORM_NV', 'GL_VERTEX_PROGRAM_BINDING_NV', +'GL_PROGRAM_ERROR_POSITION_NV', 'GL_VERTEX_ATTRIB_ARRAY0_NV', +'GL_VERTEX_ATTRIB_ARRAY1_NV', 'GL_VERTEX_ATTRIB_ARRAY2_NV', +'GL_VERTEX_ATTRIB_ARRAY3_NV', 'GL_VERTEX_ATTRIB_ARRAY4_NV', +'GL_VERTEX_ATTRIB_ARRAY5_NV', 'GL_VERTEX_ATTRIB_ARRAY6_NV', +'GL_VERTEX_ATTRIB_ARRAY7_NV', 'GL_VERTEX_ATTRIB_ARRAY8_NV', +'GL_VERTEX_ATTRIB_ARRAY9_NV', 'GL_VERTEX_ATTRIB_ARRAY10_NV', +'GL_VERTEX_ATTRIB_ARRAY11_NV', 'GL_VERTEX_ATTRIB_ARRAY12_NV', +'GL_VERTEX_ATTRIB_ARRAY13_NV', 'GL_VERTEX_ATTRIB_ARRAY14_NV', +'GL_VERTEX_ATTRIB_ARRAY15_NV', 'GL_MAP1_VERTEX_ATTRIB0_4_NV', +'GL_MAP1_VERTEX_ATTRIB1_4_NV', 'GL_MAP1_VERTEX_ATTRIB2_4_NV', +'GL_MAP1_VERTEX_ATTRIB3_4_NV', 'GL_MAP1_VERTEX_ATTRIB4_4_NV', +'GL_MAP1_VERTEX_ATTRIB5_4_NV', 'GL_MAP1_VERTEX_ATTRIB6_4_NV', +'GL_MAP1_VERTEX_ATTRIB7_4_NV', 'GL_MAP1_VERTEX_ATTRIB8_4_NV', +'GL_MAP1_VERTEX_ATTRIB9_4_NV', 'GL_MAP1_VERTEX_ATTRIB10_4_NV', +'GL_MAP1_VERTEX_ATTRIB11_4_NV', 'GL_MAP1_VERTEX_ATTRIB12_4_NV', +'GL_MAP1_VERTEX_ATTRIB13_4_NV', 'GL_MAP1_VERTEX_ATTRIB14_4_NV', +'GL_MAP1_VERTEX_ATTRIB15_4_NV', 'GL_MAP2_VERTEX_ATTRIB0_4_NV', +'GL_MAP2_VERTEX_ATTRIB1_4_NV', 'GL_MAP2_VERTEX_ATTRIB2_4_NV', +'GL_MAP2_VERTEX_ATTRIB3_4_NV', 'GL_MAP2_VERTEX_ATTRIB4_4_NV', +'GL_MAP2_VERTEX_ATTRIB5_4_NV', 'GL_MAP2_VERTEX_ATTRIB6_4_NV', +'GL_MAP2_VERTEX_ATTRIB7_4_NV', 'GL_MAP2_VERTEX_ATTRIB8_4_NV', +'GL_MAP2_VERTEX_ATTRIB9_4_NV', 'GL_MAP2_VERTEX_ATTRIB10_4_NV', +'GL_MAP2_VERTEX_ATTRIB11_4_NV', 'GL_MAP2_VERTEX_ATTRIB12_4_NV', +'GL_MAP2_VERTEX_ATTRIB13_4_NV', 'GL_MAP2_VERTEX_ATTRIB14_4_NV', +'GL_MAP2_VERTEX_ATTRIB15_4_NV', 'GL_TEXTURE_MAX_CLAMP_S_SGIX', +'GL_TEXTURE_MAX_CLAMP_T_SGIX', 'GL_TEXTURE_MAX_CLAMP_R_SGIX', +'GL_SCALEBIAS_HINT_SGIX', 'GL_INTERLACE_OML', 'GL_INTERLACE_READ_OML', +'GL_FORMAT_SUBSAMPLE_24_24_OML', 'GL_FORMAT_SUBSAMPLE_244_244_OML', +'GL_PACK_RESAMPLE_OML', 'GL_UNPACK_RESAMPLE_OML', 'GL_RESAMPLE_REPLICATE_OML', +'GL_RESAMPLE_ZERO_FILL_OML', 'GL_RESAMPLE_AVERAGE_OML', +'GL_RESAMPLE_DECIMATE_OML', 'GL_DEPTH_STENCIL_TO_RGBA_NV', +'GL_DEPTH_STENCIL_TO_BGRA_NV', 'GL_BUMP_ROT_MATRIX_ATI', +'GL_BUMP_ROT_MATRIX_SIZE_ATI', 'GL_BUMP_NUM_TEX_UNITS_ATI', +'GL_BUMP_TEX_UNITS_ATI', 'GL_DUDV_ATI', 'GL_DU8DV8_ATI', 'GL_BUMP_ENVMAP_ATI', +'GL_BUMP_TARGET_ATI', 'GL_FRAGMENT_SHADER_ATI', 'GL_REG_0_ATI', +'GL_REG_1_ATI', 'GL_REG_2_ATI', 'GL_REG_3_ATI', 'GL_REG_4_ATI', +'GL_REG_5_ATI', 'GL_REG_6_ATI', 'GL_REG_7_ATI', 'GL_REG_8_ATI', +'GL_REG_9_ATI', 'GL_REG_10_ATI', 'GL_REG_11_ATI', 'GL_REG_12_ATI', +'GL_REG_13_ATI', 'GL_REG_14_ATI', 'GL_REG_15_ATI', 'GL_REG_16_ATI', +'GL_REG_17_ATI', 'GL_REG_18_ATI', 'GL_REG_19_ATI', 'GL_REG_20_ATI', +'GL_REG_21_ATI', 'GL_REG_22_ATI', 'GL_REG_23_ATI', 'GL_REG_24_ATI', +'GL_REG_25_ATI', 'GL_REG_26_ATI', 'GL_REG_27_ATI', 'GL_REG_28_ATI', +'GL_REG_29_ATI', 'GL_REG_30_ATI', 'GL_REG_31_ATI', 'GL_CON_0_ATI', +'GL_CON_1_ATI', 'GL_CON_2_ATI', 'GL_CON_3_ATI', 'GL_CON_4_ATI', +'GL_CON_5_ATI', 'GL_CON_6_ATI', 'GL_CON_7_ATI', 'GL_CON_8_ATI', +'GL_CON_9_ATI', 'GL_CON_10_ATI', 'GL_CON_11_ATI', 'GL_CON_12_ATI', +'GL_CON_13_ATI', 'GL_CON_14_ATI', 'GL_CON_15_ATI', 'GL_CON_16_ATI', +'GL_CON_17_ATI', 'GL_CON_18_ATI', 'GL_CON_19_ATI', 'GL_CON_20_ATI', +'GL_CON_21_ATI', 'GL_CON_22_ATI', 'GL_CON_23_ATI', 'GL_CON_24_ATI', +'GL_CON_25_ATI', 'GL_CON_26_ATI', 'GL_CON_27_ATI', 'GL_CON_28_ATI', +'GL_CON_29_ATI', 'GL_CON_30_ATI', 'GL_CON_31_ATI', 'GL_MOV_ATI', 'GL_ADD_ATI', +'GL_MUL_ATI', 'GL_SUB_ATI', 'GL_DOT3_ATI', 'GL_DOT4_ATI', 'GL_MAD_ATI', +'GL_LERP_ATI', 'GL_CND_ATI', 'GL_CND0_ATI', 'GL_DOT2_ADD_ATI', +'GL_SECONDARY_INTERPOLATOR_ATI', 'GL_NUM_FRAGMENT_REGISTERS_ATI', +'GL_NUM_FRAGMENT_CONSTANTS_ATI', 'GL_NUM_PASSES_ATI', +'GL_NUM_INSTRUCTIONS_PER_PASS_ATI', 'GL_NUM_INSTRUCTIONS_TOTAL_ATI', +'GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI', 'GL_NUM_LOOPBACK_COMPONENTS_ATI', +'GL_COLOR_ALPHA_PAIRING_ATI', 'GL_SWIZZLE_STR_ATI', 'GL_SWIZZLE_STQ_ATI', +'GL_SWIZZLE_STR_DR_ATI', 'GL_SWIZZLE_STQ_DQ_ATI', 'GL_SWIZZLE_STRQ_ATI', +'GL_SWIZZLE_STRQ_DQ_ATI', 'GL_RED_BIT_ATI', 'GL_GREEN_BIT_ATI', +'GL_BLUE_BIT_ATI', 'GL_2X_BIT_ATI', 'GL_4X_BIT_ATI', 'GL_8X_BIT_ATI', +'GL_HALF_BIT_ATI', 'GL_QUARTER_BIT_ATI', 'GL_EIGHTH_BIT_ATI', +'GL_SATURATE_BIT_ATI', 'GL_COMP_BIT_ATI', 'GL_NEGATE_BIT_ATI', +'GL_BIAS_BIT_ATI', 'GL_PN_TRIANGLES_ATI', +'GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI', 'GL_PN_TRIANGLES_POINT_MODE_ATI', +'GL_PN_TRIANGLES_NORMAL_MODE_ATI', 'GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI', +'GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI', +'GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI', +'GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI', +'GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI', 'GL_STATIC_ATI', +'GL_DYNAMIC_ATI', 'GL_PRESERVE_ATI', 'GL_DISCARD_ATI', +'GL_OBJECT_BUFFER_SIZE_ATI', 'GL_OBJECT_BUFFER_USAGE_ATI', +'GL_ARRAY_OBJECT_BUFFER_ATI', 'GL_ARRAY_OBJECT_OFFSET_ATI', +'GL_VERTEX_SHADER_EXT', 'GL_VERTEX_SHADER_BINDING_EXT', 'GL_OP_INDEX_EXT', +'GL_OP_NEGATE_EXT', 'GL_OP_DOT3_EXT', 'GL_OP_DOT4_EXT', 'GL_OP_MUL_EXT', +'GL_OP_ADD_EXT', 'GL_OP_MADD_EXT', 'GL_OP_FRAC_EXT', 'GL_OP_MAX_EXT', +'GL_OP_MIN_EXT', 'GL_OP_SET_GE_EXT', 'GL_OP_SET_LT_EXT', 'GL_OP_CLAMP_EXT', +'GL_OP_FLOOR_EXT', 'GL_OP_ROUND_EXT', 'GL_OP_EXP_BASE_2_EXT', +'GL_OP_LOG_BASE_2_EXT', 'GL_OP_POWER_EXT', 'GL_OP_RECIP_EXT', +'GL_OP_RECIP_SQRT_EXT', 'GL_OP_SUB_EXT', 'GL_OP_CROSS_PRODUCT_EXT', +'GL_OP_MULTIPLY_MATRIX_EXT', 'GL_OP_MOV_EXT', 'GL_OUTPUT_VERTEX_EXT', +'GL_OUTPUT_COLOR0_EXT', 'GL_OUTPUT_COLOR1_EXT', +'GL_OUTPUT_TEXTURE_COORD0_EXT', 'GL_OUTPUT_TEXTURE_COORD1_EXT', +'GL_OUTPUT_TEXTURE_COORD2_EXT', 'GL_OUTPUT_TEXTURE_COORD3_EXT', +'GL_OUTPUT_TEXTURE_COORD4_EXT', 'GL_OUTPUT_TEXTURE_COORD5_EXT', +'GL_OUTPUT_TEXTURE_COORD6_EXT', 'GL_OUTPUT_TEXTURE_COORD7_EXT', +'GL_OUTPUT_TEXTURE_COORD8_EXT', 'GL_OUTPUT_TEXTURE_COORD9_EXT', +'GL_OUTPUT_TEXTURE_COORD10_EXT', 'GL_OUTPUT_TEXTURE_COORD11_EXT', +'GL_OUTPUT_TEXTURE_COORD12_EXT', 'GL_OUTPUT_TEXTURE_COORD13_EXT', +'GL_OUTPUT_TEXTURE_COORD14_EXT', 'GL_OUTPUT_TEXTURE_COORD15_EXT', +'GL_OUTPUT_TEXTURE_COORD16_EXT', 'GL_OUTPUT_TEXTURE_COORD17_EXT', +'GL_OUTPUT_TEXTURE_COORD18_EXT', 'GL_OUTPUT_TEXTURE_COORD19_EXT', +'GL_OUTPUT_TEXTURE_COORD20_EXT', 'GL_OUTPUT_TEXTURE_COORD21_EXT', +'GL_OUTPUT_TEXTURE_COORD22_EXT', 'GL_OUTPUT_TEXTURE_COORD23_EXT', +'GL_OUTPUT_TEXTURE_COORD24_EXT', 'GL_OUTPUT_TEXTURE_COORD25_EXT', +'GL_OUTPUT_TEXTURE_COORD26_EXT', 'GL_OUTPUT_TEXTURE_COORD27_EXT', +'GL_OUTPUT_TEXTURE_COORD28_EXT', 'GL_OUTPUT_TEXTURE_COORD29_EXT', +'GL_OUTPUT_TEXTURE_COORD30_EXT', 'GL_OUTPUT_TEXTURE_COORD31_EXT', +'GL_OUTPUT_FOG_EXT', 'GL_SCALAR_EXT', 'GL_VECTOR_EXT', 'GL_MATRIX_EXT', +'GL_VARIANT_EXT', 'GL_INVARIANT_EXT', 'GL_LOCAL_CONSTANT_EXT', 'GL_LOCAL_EXT', +'GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT', 'GL_MAX_VERTEX_SHADER_VARIANTS_EXT', +'GL_MAX_VERTEX_SHADER_INVARIANTS_EXT', +'GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT', 'GL_MAX_VERTEX_SHADER_LOCALS_EXT', +'GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT', +'GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT', +'GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT', +'GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT', +'GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT', +'GL_VERTEX_SHADER_INSTRUCTIONS_EXT', 'GL_VERTEX_SHADER_VARIANTS_EXT', +'GL_VERTEX_SHADER_INVARIANTS_EXT', 'GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT', +'GL_VERTEX_SHADER_LOCALS_EXT', 'GL_VERTEX_SHADER_OPTIMIZED_EXT', 'GL_X_EXT', +'GL_Y_EXT', 'GL_Z_EXT', 'GL_W_EXT', 'GL_NEGATIVE_X_EXT', 'GL_NEGATIVE_Y_EXT', +'GL_NEGATIVE_Z_EXT', 'GL_NEGATIVE_W_EXT', 'GL_ZERO_EXT', 'GL_ONE_EXT', +'GL_NEGATIVE_ONE_EXT', 'GL_NORMALIZED_RANGE_EXT', 'GL_FULL_RANGE_EXT', +'GL_CURRENT_VERTEX_EXT', 'GL_MVP_MATRIX_EXT', 'GL_VARIANT_VALUE_EXT', +'GL_VARIANT_DATATYPE_EXT', 'GL_VARIANT_ARRAY_STRIDE_EXT', +'GL_VARIANT_ARRAY_TYPE_EXT', 'GL_VARIANT_ARRAY_EXT', +'GL_VARIANT_ARRAY_POINTER_EXT', 'GL_INVARIANT_VALUE_EXT', +'GL_INVARIANT_DATATYPE_EXT', 'GL_LOCAL_CONSTANT_VALUE_EXT', +'GL_LOCAL_CONSTANT_DATATYPE_EXT', 'GL_MAX_VERTEX_STREAMS_ATI', +'GL_VERTEX_STREAM0_ATI', 'GL_VERTEX_STREAM1_ATI', 'GL_VERTEX_STREAM2_ATI', +'GL_VERTEX_STREAM3_ATI', 'GL_VERTEX_STREAM4_ATI', 'GL_VERTEX_STREAM5_ATI', +'GL_VERTEX_STREAM6_ATI', 'GL_VERTEX_STREAM7_ATI', 'GL_VERTEX_SOURCE_ATI', +'GL_ELEMENT_ARRAY_ATI', 'GL_ELEMENT_ARRAY_TYPE_ATI', +'GL_ELEMENT_ARRAY_POINTER_ATI', 'GL_QUAD_MESH_SUN', 'GL_TRIANGLE_MESH_SUN', +'GL_SLICE_ACCUM_SUN', 'GL_MULTISAMPLE_FILTER_HINT_NV', 'GL_DEPTH_CLAMP_NV', +'GL_PIXEL_COUNTER_BITS_NV', 'GL_CURRENT_OCCLUSION_QUERY_ID_NV', +'GL_PIXEL_COUNT_NV', 'GL_PIXEL_COUNT_AVAILABLE_NV', 'GL_POINT_SPRITE_NV', +'GL_COORD_REPLACE_NV', 'GL_POINT_SPRITE_R_MODE_NV', +'GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV', +'GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV', +'GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV', +'GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV', +'GL_OFFSET_HILO_TEXTURE_2D_NV', 'GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV', +'GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV', +'GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV', +'GL_DEPENDENT_HILO_TEXTURE_2D_NV', 'GL_DEPENDENT_RGB_TEXTURE_3D_NV', +'GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV', 'GL_DOT_PRODUCT_PASS_THROUGH_NV', +'GL_DOT_PRODUCT_TEXTURE_1D_NV', 'GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV', +'GL_HILO8_NV', 'GL_SIGNED_HILO8_NV', 'GL_FORCE_BLUE_TO_ONE_NV', +'GL_STENCIL_TEST_TWO_SIDE_EXT', 'GL_ACTIVE_STENCIL_FACE_EXT', +'GL_TEXT_FRAGMENT_SHADER_ATI', 'GL_UNPACK_CLIENT_STORAGE_APPLE', +'GL_ELEMENT_ARRAY_APPLE', 'GL_ELEMENT_ARRAY_TYPE_APPLE', +'GL_ELEMENT_ARRAY_POINTER_APPLE', 'GL_DRAW_PIXELS_APPLE', 'GL_FENCE_APPLE', +'GL_VERTEX_ARRAY_BINDING_APPLE', 'GL_VERTEX_ARRAY_RANGE_APPLE', +'GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE', 'GL_VERTEX_ARRAY_STORAGE_HINT_APPLE', +'GL_VERTEX_ARRAY_RANGE_POINTER_APPLE', 'GL_STORAGE_CACHED_APPLE', +'GL_STORAGE_SHARED_APPLE', 'GL_YCBCR_422_APPLE', +'GL_UNSIGNED_SHORT_8_8_APPLE', 'GL_UNSIGNED_SHORT_8_8_REV_APPLE', +'GL_RGB_S3TC', 'GL_RGB4_S3TC', 'GL_RGBA_S3TC', 'GL_RGBA4_S3TC', +'GL_MAX_DRAW_BUFFERS_ATI', 'GL_DRAW_BUFFER0_ATI', 'GL_DRAW_BUFFER1_ATI', +'GL_DRAW_BUFFER2_ATI', 'GL_DRAW_BUFFER3_ATI', 'GL_DRAW_BUFFER4_ATI', +'GL_DRAW_BUFFER5_ATI', 'GL_DRAW_BUFFER6_ATI', 'GL_DRAW_BUFFER7_ATI', +'GL_DRAW_BUFFER8_ATI', 'GL_DRAW_BUFFER9_ATI', 'GL_DRAW_BUFFER10_ATI', +'GL_DRAW_BUFFER11_ATI', 'GL_DRAW_BUFFER12_ATI', 'GL_DRAW_BUFFER13_ATI', +'GL_DRAW_BUFFER14_ATI', 'GL_DRAW_BUFFER15_ATI', 'GL_TYPE_RGBA_FLOAT_ATI', +'GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI', 'GL_MODULATE_ADD_ATI', +'GL_MODULATE_SIGNED_ADD_ATI', 'GL_MODULATE_SUBTRACT_ATI', +'GL_RGBA_FLOAT32_ATI', 'GL_RGB_FLOAT32_ATI', 'GL_ALPHA_FLOAT32_ATI', +'GL_INTENSITY_FLOAT32_ATI', 'GL_LUMINANCE_FLOAT32_ATI', +'GL_LUMINANCE_ALPHA_FLOAT32_ATI', 'GL_RGBA_FLOAT16_ATI', 'GL_RGB_FLOAT16_ATI', +'GL_ALPHA_FLOAT16_ATI', 'GL_INTENSITY_FLOAT16_ATI', +'GL_LUMINANCE_FLOAT16_ATI', 'GL_LUMINANCE_ALPHA_FLOAT16_ATI', 'GL_FLOAT_R_NV', +'GL_FLOAT_RG_NV', 'GL_FLOAT_RGB_NV', 'GL_FLOAT_RGBA_NV', 'GL_FLOAT_R16_NV', +'GL_FLOAT_R32_NV', 'GL_FLOAT_RG16_NV', 'GL_FLOAT_RG32_NV', +'GL_FLOAT_RGB16_NV', 'GL_FLOAT_RGB32_NV', 'GL_FLOAT_RGBA16_NV', +'GL_FLOAT_RGBA32_NV', 'GL_TEXTURE_FLOAT_COMPONENTS_NV', +'GL_FLOAT_CLEAR_COLOR_VALUE_NV', 'GL_FLOAT_RGBA_MODE_NV', +'GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV', 'GL_FRAGMENT_PROGRAM_NV', +'GL_MAX_TEXTURE_COORDS_NV', 'GL_MAX_TEXTURE_IMAGE_UNITS_NV', +'GL_FRAGMENT_PROGRAM_BINDING_NV', 'GL_PROGRAM_ERROR_STRING_NV', +'GL_HALF_FLOAT_NV', 'GL_WRITE_PIXEL_DATA_RANGE_NV', +'GL_READ_PIXEL_DATA_RANGE_NV', 'GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV', +'GL_READ_PIXEL_DATA_RANGE_LENGTH_NV', 'GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV', +'GL_READ_PIXEL_DATA_RANGE_POINTER_NV', 'GL_PRIMITIVE_RESTART_NV', +'GL_PRIMITIVE_RESTART_INDEX_NV', 'GL_TEXTURE_UNSIGNED_REMAP_MODE_NV', +'GL_STENCIL_BACK_FUNC_ATI', 'GL_STENCIL_BACK_FAIL_ATI', +'GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI', 'GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI', +'GL_IMPLEMENTATION_COLOR_READ_TYPE_OES', +'GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES', 'GL_DEPTH_BOUNDS_TEST_EXT', +'GL_DEPTH_BOUNDS_EXT', 'GL_MIRROR_CLAMP_EXT', 'GL_MIRROR_CLAMP_TO_EDGE_EXT', +'GL_MIRROR_CLAMP_TO_BORDER_EXT', 'GL_BLEND_EQUATION_RGB_EXT', +'GL_BLEND_EQUATION_ALPHA_EXT', 'GL_PACK_INVERT_MESA', +'GL_UNSIGNED_SHORT_8_8_MESA', 'GL_UNSIGNED_SHORT_8_8_REV_MESA', +'GL_YCBCR_MESA', 'GL_PIXEL_PACK_BUFFER_EXT', 'GL_PIXEL_UNPACK_BUFFER_EXT', +'GL_PIXEL_PACK_BUFFER_BINDING_EXT', 'GL_PIXEL_UNPACK_BUFFER_BINDING_EXT', +'GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV', 'GL_MAX_PROGRAM_CALL_DEPTH_NV', +'GL_MAX_PROGRAM_IF_DEPTH_NV', 'GL_MAX_PROGRAM_LOOP_DEPTH_NV', +'GL_MAX_PROGRAM_LOOP_COUNT_NV', 'GL_INVALID_FRAMEBUFFER_OPERATION_EXT', +'GL_MAX_RENDERBUFFER_SIZE_EXT', 'GL_FRAMEBUFFER_BINDING_EXT', +'GL_RENDERBUFFER_BINDING_EXT', 'GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT', +'GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT', +'GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT', +'GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT', +'GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT', +'GL_FRAMEBUFFER_COMPLETE_EXT', 'GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT', +'GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT', +'GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT', +'GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT', +'GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT', +'GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT', +'GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT', 'GL_FRAMEBUFFER_UNSUPPORTED_EXT', +'GL_MAX_COLOR_ATTACHMENTS_EXT', 'GL_COLOR_ATTACHMENT0_EXT', +'GL_COLOR_ATTACHMENT1_EXT', 'GL_COLOR_ATTACHMENT2_EXT', +'GL_COLOR_ATTACHMENT3_EXT', 'GL_COLOR_ATTACHMENT4_EXT', +'GL_COLOR_ATTACHMENT5_EXT', 'GL_COLOR_ATTACHMENT6_EXT', +'GL_COLOR_ATTACHMENT7_EXT', 'GL_COLOR_ATTACHMENT8_EXT', +'GL_COLOR_ATTACHMENT9_EXT', 'GL_COLOR_ATTACHMENT10_EXT', +'GL_COLOR_ATTACHMENT11_EXT', 'GL_COLOR_ATTACHMENT12_EXT', +'GL_COLOR_ATTACHMENT13_EXT', 'GL_COLOR_ATTACHMENT14_EXT', +'GL_COLOR_ATTACHMENT15_EXT', 'GL_DEPTH_ATTACHMENT_EXT', +'GL_STENCIL_ATTACHMENT_EXT', 'GL_FRAMEBUFFER_EXT', 'GL_RENDERBUFFER_EXT', +'GL_RENDERBUFFER_WIDTH_EXT', 'GL_RENDERBUFFER_HEIGHT_EXT', +'GL_RENDERBUFFER_INTERNAL_FORMAT_EXT', 'GL_STENCIL_INDEX_EXT', +'GL_STENCIL_INDEX1_EXT', 'GL_STENCIL_INDEX4_EXT', 'GL_STENCIL_INDEX8_EXT', +'GL_STENCIL_INDEX16_EXT', 'GL_RENDERBUFFER_RED_SIZE_EXT', +'GL_RENDERBUFFER_GREEN_SIZE_EXT', 'GL_RENDERBUFFER_BLUE_SIZE_EXT', +'GL_RENDERBUFFER_ALPHA_SIZE_EXT', 'GL_RENDERBUFFER_DEPTH_SIZE_EXT', +'GL_RENDERBUFFER_STENCIL_SIZE_EXT', 'GL_CG_VERTEX_SHADER_EXT', +'GL_CG_FRAGMENT_SHADER_EXT', 'GL_TIME_ELAPSED_EXT', 'GL_TEXTURE_BUFFER_EXT', +'GL_MAX_TEXTURE_BUFFER_SIZE_EXT', 'GL_TEXTURE_BINDING_BUFFER_EXT', +'GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT', 'GL_TEXTURE_BUFFER_FORMAT_EXT', +'GL_SAMPLER_1D_ARRAY_EXT', 'GL_SAMPLER_2D_ARRAY_EXT', 'GL_SAMPLER_BUFFER_EXT', +'GL_SAMPLER_1D_ARRAY_SHADOW_EXT', 'GL_SAMPLER_2D_ARRAY_SHADOW_EXT', +'GL_SAMPLER_CUBE_SHADOW_EXT', 'GL_UNSIGNED_INT_VEC2_EXT', +'GL_UNSIGNED_INT_VEC3_EXT', 'GL_UNSIGNED_INT_VEC4_EXT', +'GL_INT_SAMPLER_1D_EXT', 'GL_INT_SAMPLER_2D_EXT', 'GL_INT_SAMPLER_3D_EXT', +'GL_INT_SAMPLER_CUBE_EXT', 'GL_INT_SAMPLER_2D_RECT_EXT', +'GL_INT_SAMPLER_1D_ARRAY_EXT', 'GL_INT_SAMPLER_2D_ARRAY_EXT', +'GL_INT_SAMPLER_BUFFER_EXT', 'GL_UNSIGNED_INT_SAMPLER_1D_EXT', +'GL_UNSIGNED_INT_SAMPLER_2D_EXT', 'GL_UNSIGNED_INT_SAMPLER_3D_EXT', +'GL_UNSIGNED_INT_SAMPLER_CUBE_EXT', 'GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT', +'GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT', +'GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT', 'GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT', +'GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT', 'GL_GEOMETRY_SHADER_EXT', +'GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT', +'GL_MAX_VERTEX_VARYING_COMPONENTS_EXT', 'GL_MAX_VARYING_COMPONENTS_EXT', +'GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT', +'GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT', +'GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT', 'GL_GEOMETRY_VERTICES_OUT_EXT', +'GL_GEOMETRY_INPUT_TYPE_EXT', 'GL_GEOMETRY_OUTPUT_TYPE_EXT', +'GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT', 'GL_LINES_ADJACENCY_EXT', +'GL_LINE_STRIP_ADJACENCY_EXT', 'GL_TRIANGLES_ADJACENCY_EXT', +'GL_TRIANGLE_STRIP_ADJACENCY_EXT', 'GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT', +'GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT', +'GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT', +'GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT', 'GL_PROGRAM_POINT_SIZE_EXT', +'GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT', +'GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT', +'GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT', 'GL_MAX_BINDABLE_UNIFORM_SIZE_EXT', +'GL_UNIFORM_BUFFER_EXT', 'GL_UNIFORM_BUFFER_BINDING_EXT', +'GL_FRAMEBUFFER_SRGB_EXT', 'GL_FRAMEBUFFER_SRGB_CAPABLE_EXT', +'GL_RGB9_E5_EXT', 'GL_UNSIGNED_INT_5_9_9_9_REV_EXT', +'GL_TEXTURE_SHARED_SIZE_EXT', 'GL_R11F_G11F_B10F_EXT', +'GL_UNSIGNED_INT_10F_11F_11F_REV_EXT', 'GL_RGBA_SIGNED_COMPONENTS_EXT', +'GL_TEXTURE_1D_ARRAY_EXT', 'GL_PROXY_TEXTURE_1D_ARRAY_EXT', +'GL_TEXTURE_2D_ARRAY_EXT', 'GL_PROXY_TEXTURE_2D_ARRAY_EXT', +'GL_TEXTURE_BINDING_1D_ARRAY_EXT', 'GL_TEXTURE_BINDING_2D_ARRAY_EXT', +'GL_MAX_ARRAY_TEXTURE_LAYERS_EXT', 'GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT', +'GL_RGBA32UI_EXT', 'GL_RGB32UI_EXT', 'GL_ALPHA32UI_EXT', +'GL_INTENSITY32UI_EXT', 'GL_LUMINANCE32UI_EXT', 'GL_LUMINANCE_ALPHA32UI_EXT', +'GL_RGBA16UI_EXT', 'GL_RGB16UI_EXT', 'GL_ALPHA16UI_EXT', +'GL_INTENSITY16UI_EXT', 'GL_LUMINANCE16UI_EXT', 'GL_LUMINANCE_ALPHA16UI_EXT', +'GL_RGBA8UI_EXT', 'GL_RGB8UI_EXT', 'GL_ALPHA8UI_EXT', 'GL_INTENSITY8UI_EXT', +'GL_LUMINANCE8UI_EXT', 'GL_LUMINANCE_ALPHA8UI_EXT', 'GL_RGBA32I_EXT', +'GL_RGB32I_EXT', 'GL_ALPHA32I_EXT', 'GL_INTENSITY32I_EXT', +'GL_LUMINANCE32I_EXT', 'GL_LUMINANCE_ALPHA32I_EXT', 'GL_RGBA16I_EXT', +'GL_RGB16I_EXT', 'GL_ALPHA16I_EXT', 'GL_INTENSITY16I_EXT', +'GL_LUMINANCE16I_EXT', 'GL_LUMINANCE_ALPHA16I_EXT', 'GL_RGBA8I_EXT', +'GL_RGB8I_EXT', 'GL_ALPHA8I_EXT', 'GL_INTENSITY8I_EXT', 'GL_LUMINANCE8I_EXT', +'GL_LUMINANCE_ALPHA8I_EXT', 'GL_RED_INTEGER_EXT', 'GL_GREEN_INTEGER_EXT', +'GL_BLUE_INTEGER_EXT', 'GL_ALPHA_INTEGER_EXT', 'GL_RGB_INTEGER_EXT', +'GL_RGBA_INTEGER_EXT', 'GL_BGR_INTEGER_EXT', 'GL_BGRA_INTEGER_EXT', +'GL_LUMINANCE_INTEGER_EXT', 'GL_LUMINANCE_ALPHA_INTEGER_EXT', +'GL_RGBA_INTEGER_MODE_EXT', 'GL_DEPTH_COMPONENT32F_NV', +'GL_DEPTH32F_STENCIL8_NV', 'GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV', +'GL_DEPTH_BUFFER_FLOAT_MODE_NV', 'GL_COMPRESSED_LUMINANCE_LATC1_EXT', +'GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT', +'GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT', +'GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT', 'GL_BACK_PRIMARY_COLOR_NV', +'GL_BACK_SECONDARY_COLOR_NV', 'GL_TEXTURE_COORD_NV', 'GL_CLIP_DISTANCE_NV', +'GL_VERTEX_ID_NV', 'GL_PRIMITIVE_ID_NV', 'GL_GENERIC_ATTRIB_NV', +'GL_TRANSFORM_FEEDBACK_ATTRIBS_NV', 'GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV', +'GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV', 'GL_ACTIVE_VARYINGS_NV', +'GL_ACTIVE_VARYING_MAX_LENGTH_NV', 'GL_TRANSFORM_FEEDBACK_VARYINGS_NV', +'GL_TRANSFORM_FEEDBACK_BUFFER_START_NV', +'GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV', 'GL_TRANSFORM_FEEDBACK_RECORD_NV', +'GL_PRIMITIVES_GENERATED_NV', 'GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV', +'GL_RASTERIZER_DISCARD_NV', +'GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_ATTRIBS_NV', +'GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV', 'GL_INTERLEAVED_ATTRIBS_NV', +'GL_SEPARATE_ATTRIBS_NV', 'GL_TRANSFORM_FEEDBACK_BUFFER_NV', +'GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV', 'GL_GEOMETRY_PROGRAM_NV', +'GL_MAX_PROGRAM_OUTPUT_VERTICES_NV', +'GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV', 'GL_MIN_PROGRAM_TEXEL_OFFSET_NV', +'GL_MAX_PROGRAM_TEXEL_OFFSET_NV', 'GL_PROGRAM_ATTRIB_COMPONENTS_NV', +'GL_PROGRAM_RESULT_COMPONENTS_NV', 'GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV', +'GL_MAX_PROGRAM_RESULT_COMPONENTS_NV', 'GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV', +'GL_MAX_PROGRAM_GENERIC_RESULTS_NV', 'GL_RENDERBUFFER_COVERAGE_SAMPLES_NV', +'GL_RENDERBUFFER_COLOR_SAMPLES_NV', 'GL_MAX_RENDERBUFFER_COVERAGE_SAMPLES_NV', +'GL_MAX_RENDERBUFFER_COLOR_SAMPLES_NV', +'GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV', 'GL_MULTISAMPLE_COVERAGE_MODES_NV', +'GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT', 'GL_MAX_SAMPLES_EXT', +'GL_RENDERBUFFER_SAMPLES_EXT', 'GL_READ_FRAMEBUFFER_EXT', +'GL_DRAW_FRAMEBUFFER_EXT', 'GL_DRAW_FRAMEBUFFER_BINDING_EXT', +'GL_READ_FRAMEBUFFER_BINDING_EXT', 'GL_COMPRESSED_RED_RGTC1_EXT', +'GL_COMPRESSED_SIGNED_RED_RGTC1_EXT', 'GL_COMPRESSED_RED_GREEN_RGTC2_EXT', +'GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT', 'GLchar', 'GLintptr', +'GLsizeiptr', 'GLintptrARB', 'GLsizeiptrARB', 'GLcharARB', 'GLhandleARB', +'GLhalfARB', 'GLhalfNV', 'GLint64EXT', 'GLuint64EXT', 'GL_VERSION_1_2', +'glBlendColor', 'glBlendEquation', 'glDrawRangeElements', 'glColorTable', +'glColorTableParameterfv', 'glColorTableParameteriv', 'glCopyColorTable', +'glGetColorTable', 'glGetColorTableParameterfv', 'glGetColorTableParameteriv', +'glColorSubTable', 'glCopyColorSubTable', 'glConvolutionFilter1D', +'glConvolutionFilter2D', 'glConvolutionParameterf', +'glConvolutionParameterfv', 'glConvolutionParameteri', +'glConvolutionParameteriv', 'glCopyConvolutionFilter1D', +'glCopyConvolutionFilter2D', 'glGetConvolutionFilter', +'glGetConvolutionParameterfv', 'glGetConvolutionParameteriv', +'glGetSeparableFilter', 'glSeparableFilter2D', 'glGetHistogram', +'glGetHistogramParameterfv', 'glGetHistogramParameteriv', 'glGetMinmax', +'glGetMinmaxParameterfv', 'glGetMinmaxParameteriv', 'glHistogram', 'glMinmax', +'glResetHistogram', 'glResetMinmax', 'glTexImage3D', 'glTexSubImage3D', +'glCopyTexSubImage3D', 'PFNGLBLENDCOLORPROC', 'PFNGLBLENDEQUATIONPROC', +'PFNGLDRAWRANGEELEMENTSPROC', 'PFNGLCOLORTABLEPROC', +'PFNGLCOLORTABLEPARAMETERFVPROC', 'PFNGLCOLORTABLEPARAMETERIVPROC', +'PFNGLCOPYCOLORTABLEPROC', 'PFNGLGETCOLORTABLEPROC', +'PFNGLGETCOLORTABLEPARAMETERFVPROC', 'PFNGLGETCOLORTABLEPARAMETERIVPROC', +'PFNGLCOLORSUBTABLEPROC', 'PFNGLCOPYCOLORSUBTABLEPROC', +'PFNGLCONVOLUTIONFILTER1DPROC', 'PFNGLCONVOLUTIONFILTER2DPROC', +'PFNGLCONVOLUTIONPARAMETERFPROC', 'PFNGLCONVOLUTIONPARAMETERFVPROC', +'PFNGLCONVOLUTIONPARAMETERIPROC', 'PFNGLCONVOLUTIONPARAMETERIVPROC', +'PFNGLCOPYCONVOLUTIONFILTER1DPROC', 'PFNGLCOPYCONVOLUTIONFILTER2DPROC', +'PFNGLGETCONVOLUTIONFILTERPROC', 'PFNGLGETCONVOLUTIONPARAMETERFVPROC', +'PFNGLGETCONVOLUTIONPARAMETERIVPROC', 'PFNGLGETSEPARABLEFILTERPROC', +'PFNGLSEPARABLEFILTER2DPROC', 'PFNGLGETHISTOGRAMPROC', +'PFNGLGETHISTOGRAMPARAMETERFVPROC', 'PFNGLGETHISTOGRAMPARAMETERIVPROC', +'PFNGLGETMINMAXPROC', 'PFNGLGETMINMAXPARAMETERFVPROC', +'PFNGLGETMINMAXPARAMETERIVPROC', 'PFNGLHISTOGRAMPROC', 'PFNGLMINMAXPROC', +'PFNGLRESETHISTOGRAMPROC', 'PFNGLRESETMINMAXPROC', 'PFNGLTEXIMAGE3DPROC', +'PFNGLTEXSUBIMAGE3DPROC', 'PFNGLCOPYTEXSUBIMAGE3DPROC', 'GL_VERSION_1_3', +'glActiveTexture', 'glClientActiveTexture', 'glMultiTexCoord1d', +'glMultiTexCoord1dv', 'glMultiTexCoord1f', 'glMultiTexCoord1fv', +'glMultiTexCoord1i', 'glMultiTexCoord1iv', 'glMultiTexCoord1s', +'glMultiTexCoord1sv', 'glMultiTexCoord2d', 'glMultiTexCoord2dv', +'glMultiTexCoord2f', 'glMultiTexCoord2fv', 'glMultiTexCoord2i', +'glMultiTexCoord2iv', 'glMultiTexCoord2s', 'glMultiTexCoord2sv', +'glMultiTexCoord3d', 'glMultiTexCoord3dv', 'glMultiTexCoord3f', +'glMultiTexCoord3fv', 'glMultiTexCoord3i', 'glMultiTexCoord3iv', +'glMultiTexCoord3s', 'glMultiTexCoord3sv', 'glMultiTexCoord4d', +'glMultiTexCoord4dv', 'glMultiTexCoord4f', 'glMultiTexCoord4fv', +'glMultiTexCoord4i', 'glMultiTexCoord4iv', 'glMultiTexCoord4s', +'glMultiTexCoord4sv', 'glLoadTransposeMatrixf', 'glLoadTransposeMatrixd', +'glMultTransposeMatrixf', 'glMultTransposeMatrixd', 'glSampleCoverage', +'glCompressedTexImage3D', 'glCompressedTexImage2D', 'glCompressedTexImage1D', +'glCompressedTexSubImage3D', 'glCompressedTexSubImage2D', +'glCompressedTexSubImage1D', 'glGetCompressedTexImage', +'PFNGLACTIVETEXTUREPROC', 'PFNGLCLIENTACTIVETEXTUREPROC', +'PFNGLMULTITEXCOORD1DPROC', 'PFNGLMULTITEXCOORD1DVPROC', +'PFNGLMULTITEXCOORD1FPROC', 'PFNGLMULTITEXCOORD1FVPROC', +'PFNGLMULTITEXCOORD1IPROC', 'PFNGLMULTITEXCOORD1IVPROC', +'PFNGLMULTITEXCOORD1SPROC', 'PFNGLMULTITEXCOORD1SVPROC', +'PFNGLMULTITEXCOORD2DPROC', 'PFNGLMULTITEXCOORD2DVPROC', +'PFNGLMULTITEXCOORD2FPROC', 'PFNGLMULTITEXCOORD2FVPROC', +'PFNGLMULTITEXCOORD2IPROC', 'PFNGLMULTITEXCOORD2IVPROC', +'PFNGLMULTITEXCOORD2SPROC', 'PFNGLMULTITEXCOORD2SVPROC', +'PFNGLMULTITEXCOORD3DPROC', 'PFNGLMULTITEXCOORD3DVPROC', +'PFNGLMULTITEXCOORD3FPROC', 'PFNGLMULTITEXCOORD3FVPROC', +'PFNGLMULTITEXCOORD3IPROC', 'PFNGLMULTITEXCOORD3IVPROC', +'PFNGLMULTITEXCOORD3SPROC', 'PFNGLMULTITEXCOORD3SVPROC', +'PFNGLMULTITEXCOORD4DPROC', 'PFNGLMULTITEXCOORD4DVPROC', +'PFNGLMULTITEXCOORD4FPROC', 'PFNGLMULTITEXCOORD4FVPROC', +'PFNGLMULTITEXCOORD4IPROC', 'PFNGLMULTITEXCOORD4IVPROC', +'PFNGLMULTITEXCOORD4SPROC', 'PFNGLMULTITEXCOORD4SVPROC', +'PFNGLLOADTRANSPOSEMATRIXFPROC', 'PFNGLLOADTRANSPOSEMATRIXDPROC', +'PFNGLMULTTRANSPOSEMATRIXFPROC', 'PFNGLMULTTRANSPOSEMATRIXDPROC', +'PFNGLSAMPLECOVERAGEPROC', 'PFNGLCOMPRESSEDTEXIMAGE3DPROC', +'PFNGLCOMPRESSEDTEXIMAGE2DPROC', 'PFNGLCOMPRESSEDTEXIMAGE1DPROC', +'PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC', 'PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC', +'PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC', 'PFNGLGETCOMPRESSEDTEXIMAGEPROC', +'GL_VERSION_1_4', 'glBlendFuncSeparate', 'glFogCoordf', 'glFogCoordfv', +'glFogCoordd', 'glFogCoorddv', 'glFogCoordPointer', 'glMultiDrawArrays', +'glMultiDrawElements', 'glPointParameterf', 'glPointParameterfv', +'glPointParameteri', 'glPointParameteriv', 'glSecondaryColor3b', +'glSecondaryColor3bv', 'glSecondaryColor3d', 'glSecondaryColor3dv', +'glSecondaryColor3f', 'glSecondaryColor3fv', 'glSecondaryColor3i', +'glSecondaryColor3iv', 'glSecondaryColor3s', 'glSecondaryColor3sv', +'glSecondaryColor3ub', 'glSecondaryColor3ubv', 'glSecondaryColor3ui', +'glSecondaryColor3uiv', 'glSecondaryColor3us', 'glSecondaryColor3usv', +'glSecondaryColorPointer', 'glWindowPos2d', 'glWindowPos2dv', 'glWindowPos2f', +'glWindowPos2fv', 'glWindowPos2i', 'glWindowPos2iv', 'glWindowPos2s', +'glWindowPos2sv', 'glWindowPos3d', 'glWindowPos3dv', 'glWindowPos3f', +'glWindowPos3fv', 'glWindowPos3i', 'glWindowPos3iv', 'glWindowPos3s', +'glWindowPos3sv', 'PFNGLBLENDFUNCSEPARATEPROC', 'PFNGLFOGCOORDFPROC', +'PFNGLFOGCOORDFVPROC', 'PFNGLFOGCOORDDPROC', 'PFNGLFOGCOORDDVPROC', +'PFNGLFOGCOORDPOINTERPROC', 'PFNGLMULTIDRAWARRAYSPROC', +'PFNGLMULTIDRAWELEMENTSPROC', 'PFNGLPOINTPARAMETERFPROC', +'PFNGLPOINTPARAMETERFVPROC', 'PFNGLPOINTPARAMETERIPROC', +'PFNGLPOINTPARAMETERIVPROC', 'PFNGLSECONDARYCOLOR3BPROC', +'PFNGLSECONDARYCOLOR3BVPROC', 'PFNGLSECONDARYCOLOR3DPROC', +'PFNGLSECONDARYCOLOR3DVPROC', 'PFNGLSECONDARYCOLOR3FPROC', +'PFNGLSECONDARYCOLOR3FVPROC', 'PFNGLSECONDARYCOLOR3IPROC', +'PFNGLSECONDARYCOLOR3IVPROC', 'PFNGLSECONDARYCOLOR3SPROC', +'PFNGLSECONDARYCOLOR3SVPROC', 'PFNGLSECONDARYCOLOR3UBPROC', +'PFNGLSECONDARYCOLOR3UBVPROC', 'PFNGLSECONDARYCOLOR3UIPROC', +'PFNGLSECONDARYCOLOR3UIVPROC', 'PFNGLSECONDARYCOLOR3USPROC', +'PFNGLSECONDARYCOLOR3USVPROC', 'PFNGLSECONDARYCOLORPOINTERPROC', +'PFNGLWINDOWPOS2DPROC', 'PFNGLWINDOWPOS2DVPROC', 'PFNGLWINDOWPOS2FPROC', +'PFNGLWINDOWPOS2FVPROC', 'PFNGLWINDOWPOS2IPROC', 'PFNGLWINDOWPOS2IVPROC', +'PFNGLWINDOWPOS2SPROC', 'PFNGLWINDOWPOS2SVPROC', 'PFNGLWINDOWPOS3DPROC', +'PFNGLWINDOWPOS3DVPROC', 'PFNGLWINDOWPOS3FPROC', 'PFNGLWINDOWPOS3FVPROC', +'PFNGLWINDOWPOS3IPROC', 'PFNGLWINDOWPOS3IVPROC', 'PFNGLWINDOWPOS3SPROC', +'PFNGLWINDOWPOS3SVPROC', 'GL_VERSION_1_5', 'glGenQueries', 'glDeleteQueries', +'glIsQuery', 'glBeginQuery', 'glEndQuery', 'glGetQueryiv', +'glGetQueryObjectiv', 'glGetQueryObjectuiv', 'glBindBuffer', +'glDeleteBuffers', 'glGenBuffers', 'glIsBuffer', 'glBufferData', +'glBufferSubData', 'glGetBufferSubData', 'glMapBuffer', 'glUnmapBuffer', +'glGetBufferParameteriv', 'glGetBufferPointerv', 'PFNGLGENQUERIESPROC', +'PFNGLDELETEQUERIESPROC', 'PFNGLISQUERYPROC', 'PFNGLBEGINQUERYPROC', +'PFNGLENDQUERYPROC', 'PFNGLGETQUERYIVPROC', 'PFNGLGETQUERYOBJECTIVPROC', +'PFNGLGETQUERYOBJECTUIVPROC', 'PFNGLBINDBUFFERPROC', 'PFNGLDELETEBUFFERSPROC', +'PFNGLGENBUFFERSPROC', 'PFNGLISBUFFERPROC', 'PFNGLBUFFERDATAPROC', +'PFNGLBUFFERSUBDATAPROC', 'PFNGLGETBUFFERSUBDATAPROC', 'PFNGLMAPBUFFERPROC', +'PFNGLUNMAPBUFFERPROC', 'PFNGLGETBUFFERPARAMETERIVPROC', +'PFNGLGETBUFFERPOINTERVPROC', 'GL_VERSION_2_0', 'glBlendEquationSeparate', +'glDrawBuffers', 'glStencilOpSeparate', 'glStencilFuncSeparate', +'glStencilMaskSeparate', 'glAttachShader', 'glBindAttribLocation', +'glCompileShader', 'glCreateProgram', 'glCreateShader', 'glDeleteProgram', +'glDeleteShader', 'glDetachShader', 'glDisableVertexAttribArray', +'glEnableVertexAttribArray', 'glGetActiveAttrib', 'glGetActiveUniform', +'glGetAttachedShaders', 'glGetAttribLocation', 'glGetProgramiv', +'glGetProgramInfoLog', 'glGetShaderiv', 'glGetShaderInfoLog', +'glGetShaderSource', 'glGetUniformLocation', 'glGetUniformfv', +'glGetUniformiv', 'glGetVertexAttribdv', 'glGetVertexAttribfv', +'glGetVertexAttribiv', 'glGetVertexAttribPointerv', 'glIsProgram', +'glIsShader', 'glLinkProgram', 'glShaderSource', 'glUseProgram', +'glUniform1f', 'glUniform2f', 'glUniform3f', 'glUniform4f', 'glUniform1i', +'glUniform2i', 'glUniform3i', 'glUniform4i', 'glUniform1fv', 'glUniform2fv', +'glUniform3fv', 'glUniform4fv', 'glUniform1iv', 'glUniform2iv', +'glUniform3iv', 'glUniform4iv', 'glUniformMatrix2fv', 'glUniformMatrix3fv', +'glUniformMatrix4fv', 'glValidateProgram', 'glVertexAttrib1d', +'glVertexAttrib1dv', 'glVertexAttrib1f', 'glVertexAttrib1fv', +'glVertexAttrib1s', 'glVertexAttrib1sv', 'glVertexAttrib2d', +'glVertexAttrib2dv', 'glVertexAttrib2f', 'glVertexAttrib2fv', +'glVertexAttrib2s', 'glVertexAttrib2sv', 'glVertexAttrib3d', +'glVertexAttrib3dv', 'glVertexAttrib3f', 'glVertexAttrib3fv', +'glVertexAttrib3s', 'glVertexAttrib3sv', 'glVertexAttrib4Nbv', +'glVertexAttrib4Niv', 'glVertexAttrib4Nsv', 'glVertexAttrib4Nub', +'glVertexAttrib4Nubv', 'glVertexAttrib4Nuiv', 'glVertexAttrib4Nusv', +'glVertexAttrib4bv', 'glVertexAttrib4d', 'glVertexAttrib4dv', +'glVertexAttrib4f', 'glVertexAttrib4fv', 'glVertexAttrib4iv', +'glVertexAttrib4s', 'glVertexAttrib4sv', 'glVertexAttrib4ubv', +'glVertexAttrib4uiv', 'glVertexAttrib4usv', 'glVertexAttribPointer', +'PFNGLBLENDEQUATIONSEPARATEPROC', 'PFNGLDRAWBUFFERSPROC', +'PFNGLSTENCILOPSEPARATEPROC', 'PFNGLSTENCILFUNCSEPARATEPROC', +'PFNGLSTENCILMASKSEPARATEPROC', 'PFNGLATTACHSHADERPROC', +'PFNGLBINDATTRIBLOCATIONPROC', 'PFNGLCOMPILESHADERPROC', +'PFNGLCREATEPROGRAMPROC', 'PFNGLCREATESHADERPROC', 'PFNGLDELETEPROGRAMPROC', +'PFNGLDELETESHADERPROC', 'PFNGLDETACHSHADERPROC', +'PFNGLDISABLEVERTEXATTRIBARRAYPROC', 'PFNGLENABLEVERTEXATTRIBARRAYPROC', +'PFNGLGETACTIVEATTRIBPROC', 'PFNGLGETACTIVEUNIFORMPROC', +'PFNGLGETATTACHEDSHADERSPROC', 'PFNGLGETATTRIBLOCATIONPROC', +'PFNGLGETPROGRAMIVPROC', 'PFNGLGETPROGRAMINFOLOGPROC', 'PFNGLGETSHADERIVPROC', +'PFNGLGETSHADERINFOLOGPROC', 'PFNGLGETSHADERSOURCEPROC', +'PFNGLGETUNIFORMLOCATIONPROC', 'PFNGLGETUNIFORMFVPROC', +'PFNGLGETUNIFORMIVPROC', 'PFNGLGETVERTEXATTRIBDVPROC', +'PFNGLGETVERTEXATTRIBFVPROC', 'PFNGLGETVERTEXATTRIBIVPROC', +'PFNGLGETVERTEXATTRIBPOINTERVPROC', 'PFNGLISPROGRAMPROC', 'PFNGLISSHADERPROC', +'PFNGLLINKPROGRAMPROC', 'PFNGLSHADERSOURCEPROC', 'PFNGLUSEPROGRAMPROC', +'PFNGLUNIFORM1FPROC', 'PFNGLUNIFORM2FPROC', 'PFNGLUNIFORM3FPROC', +'PFNGLUNIFORM4FPROC', 'PFNGLUNIFORM1IPROC', 'PFNGLUNIFORM2IPROC', +'PFNGLUNIFORM3IPROC', 'PFNGLUNIFORM4IPROC', 'PFNGLUNIFORM1FVPROC', +'PFNGLUNIFORM2FVPROC', 'PFNGLUNIFORM3FVPROC', 'PFNGLUNIFORM4FVPROC', +'PFNGLUNIFORM1IVPROC', 'PFNGLUNIFORM2IVPROC', 'PFNGLUNIFORM3IVPROC', +'PFNGLUNIFORM4IVPROC', 'PFNGLUNIFORMMATRIX2FVPROC', +'PFNGLUNIFORMMATRIX3FVPROC', 'PFNGLUNIFORMMATRIX4FVPROC', +'PFNGLVALIDATEPROGRAMPROC', 'PFNGLVERTEXATTRIB1DPROC', +'PFNGLVERTEXATTRIB1DVPROC', 'PFNGLVERTEXATTRIB1FPROC', +'PFNGLVERTEXATTRIB1FVPROC', 'PFNGLVERTEXATTRIB1SPROC', +'PFNGLVERTEXATTRIB1SVPROC', 'PFNGLVERTEXATTRIB2DPROC', +'PFNGLVERTEXATTRIB2DVPROC', 'PFNGLVERTEXATTRIB2FPROC', +'PFNGLVERTEXATTRIB2FVPROC', 'PFNGLVERTEXATTRIB2SPROC', +'PFNGLVERTEXATTRIB2SVPROC', 'PFNGLVERTEXATTRIB3DPROC', +'PFNGLVERTEXATTRIB3DVPROC', 'PFNGLVERTEXATTRIB3FPROC', +'PFNGLVERTEXATTRIB3FVPROC', 'PFNGLVERTEXATTRIB3SPROC', +'PFNGLVERTEXATTRIB3SVPROC', 'PFNGLVERTEXATTRIB4NBVPROC', +'PFNGLVERTEXATTRIB4NIVPROC', 'PFNGLVERTEXATTRIB4NSVPROC', +'PFNGLVERTEXATTRIB4NUBPROC', 'PFNGLVERTEXATTRIB4NUBVPROC', +'PFNGLVERTEXATTRIB4NUIVPROC', 'PFNGLVERTEXATTRIB4NUSVPROC', +'PFNGLVERTEXATTRIB4BVPROC', 'PFNGLVERTEXATTRIB4DPROC', +'PFNGLVERTEXATTRIB4DVPROC', 'PFNGLVERTEXATTRIB4FPROC', +'PFNGLVERTEXATTRIB4FVPROC', 'PFNGLVERTEXATTRIB4IVPROC', +'PFNGLVERTEXATTRIB4SPROC', 'PFNGLVERTEXATTRIB4SVPROC', +'PFNGLVERTEXATTRIB4UBVPROC', 'PFNGLVERTEXATTRIB4UIVPROC', +'PFNGLVERTEXATTRIB4USVPROC', 'PFNGLVERTEXATTRIBPOINTERPROC', 'GL_VERSION_2_1', +'glUniformMatrix2x3fv', 'glUniformMatrix3x2fv', 'glUniformMatrix2x4fv', +'glUniformMatrix4x2fv', 'glUniformMatrix3x4fv', 'glUniformMatrix4x3fv', +'PFNGLUNIFORMMATRIX2X3FVPROC', 'PFNGLUNIFORMMATRIX3X2FVPROC', +'PFNGLUNIFORMMATRIX2X4FVPROC', 'PFNGLUNIFORMMATRIX4X2FVPROC', +'PFNGLUNIFORMMATRIX3X4FVPROC', 'PFNGLUNIFORMMATRIX4X3FVPROC', +'GL_ARB_multitexture', 'glActiveTextureARB', 'glClientActiveTextureARB', +'glMultiTexCoord1dARB', 'glMultiTexCoord1dvARB', 'glMultiTexCoord1fARB', +'glMultiTexCoord1fvARB', 'glMultiTexCoord1iARB', 'glMultiTexCoord1ivARB', +'glMultiTexCoord1sARB', 'glMultiTexCoord1svARB', 'glMultiTexCoord2dARB', +'glMultiTexCoord2dvARB', 'glMultiTexCoord2fARB', 'glMultiTexCoord2fvARB', +'glMultiTexCoord2iARB', 'glMultiTexCoord2ivARB', 'glMultiTexCoord2sARB', +'glMultiTexCoord2svARB', 'glMultiTexCoord3dARB', 'glMultiTexCoord3dvARB', +'glMultiTexCoord3fARB', 'glMultiTexCoord3fvARB', 'glMultiTexCoord3iARB', +'glMultiTexCoord3ivARB', 'glMultiTexCoord3sARB', 'glMultiTexCoord3svARB', +'glMultiTexCoord4dARB', 'glMultiTexCoord4dvARB', 'glMultiTexCoord4fARB', +'glMultiTexCoord4fvARB', 'glMultiTexCoord4iARB', 'glMultiTexCoord4ivARB', +'glMultiTexCoord4sARB', 'glMultiTexCoord4svARB', 'PFNGLACTIVETEXTUREARBPROC', +'PFNGLCLIENTACTIVETEXTUREARBPROC', 'PFNGLMULTITEXCOORD1DARBPROC', +'PFNGLMULTITEXCOORD1DVARBPROC', 'PFNGLMULTITEXCOORD1FARBPROC', +'PFNGLMULTITEXCOORD1FVARBPROC', 'PFNGLMULTITEXCOORD1IARBPROC', +'PFNGLMULTITEXCOORD1IVARBPROC', 'PFNGLMULTITEXCOORD1SARBPROC', +'PFNGLMULTITEXCOORD1SVARBPROC', 'PFNGLMULTITEXCOORD2DARBPROC', +'PFNGLMULTITEXCOORD2DVARBPROC', 'PFNGLMULTITEXCOORD2FARBPROC', +'PFNGLMULTITEXCOORD2FVARBPROC', 'PFNGLMULTITEXCOORD2IARBPROC', +'PFNGLMULTITEXCOORD2IVARBPROC', 'PFNGLMULTITEXCOORD2SARBPROC', +'PFNGLMULTITEXCOORD2SVARBPROC', 'PFNGLMULTITEXCOORD3DARBPROC', +'PFNGLMULTITEXCOORD3DVARBPROC', 'PFNGLMULTITEXCOORD3FARBPROC', +'PFNGLMULTITEXCOORD3FVARBPROC', 'PFNGLMULTITEXCOORD3IARBPROC', +'PFNGLMULTITEXCOORD3IVARBPROC', 'PFNGLMULTITEXCOORD3SARBPROC', +'PFNGLMULTITEXCOORD3SVARBPROC', 'PFNGLMULTITEXCOORD4DARBPROC', +'PFNGLMULTITEXCOORD4DVARBPROC', 'PFNGLMULTITEXCOORD4FARBPROC', +'PFNGLMULTITEXCOORD4FVARBPROC', 'PFNGLMULTITEXCOORD4IARBPROC', +'PFNGLMULTITEXCOORD4IVARBPROC', 'PFNGLMULTITEXCOORD4SARBPROC', +'PFNGLMULTITEXCOORD4SVARBPROC', 'GL_ARB_transpose_matrix', +'glLoadTransposeMatrixfARB', 'glLoadTransposeMatrixdARB', +'glMultTransposeMatrixfARB', 'glMultTransposeMatrixdARB', +'PFNGLLOADTRANSPOSEMATRIXFARBPROC', 'PFNGLLOADTRANSPOSEMATRIXDARBPROC', +'PFNGLMULTTRANSPOSEMATRIXFARBPROC', 'PFNGLMULTTRANSPOSEMATRIXDARBPROC', +'GL_ARB_multisample', 'glSampleCoverageARB', 'PFNGLSAMPLECOVERAGEARBPROC', +'GL_ARB_texture_env_add', 'GL_ARB_texture_cube_map', +'GL_ARB_texture_compression', 'glCompressedTexImage3DARB', +'glCompressedTexImage2DARB', 'glCompressedTexImage1DARB', +'glCompressedTexSubImage3DARB', 'glCompressedTexSubImage2DARB', +'glCompressedTexSubImage1DARB', 'glGetCompressedTexImageARB', +'PFNGLCOMPRESSEDTEXIMAGE3DARBPROC', 'PFNGLCOMPRESSEDTEXIMAGE2DARBPROC', +'PFNGLCOMPRESSEDTEXIMAGE1DARBPROC', 'PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC', +'PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC', 'PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC', +'PFNGLGETCOMPRESSEDTEXIMAGEARBPROC', 'GL_ARB_texture_border_clamp', +'GL_ARB_point_parameters', 'glPointParameterfARB', 'glPointParameterfvARB', +'PFNGLPOINTPARAMETERFARBPROC', 'PFNGLPOINTPARAMETERFVARBPROC', +'GL_ARB_vertex_blend', 'glWeightbvARB', 'glWeightsvARB', 'glWeightivARB', +'glWeightfvARB', 'glWeightdvARB', 'glWeightubvARB', 'glWeightusvARB', +'glWeightuivARB', 'glWeightPointerARB', 'glVertexBlendARB', +'PFNGLWEIGHTBVARBPROC', 'PFNGLWEIGHTSVARBPROC', 'PFNGLWEIGHTIVARBPROC', +'PFNGLWEIGHTFVARBPROC', 'PFNGLWEIGHTDVARBPROC', 'PFNGLWEIGHTUBVARBPROC', +'PFNGLWEIGHTUSVARBPROC', 'PFNGLWEIGHTUIVARBPROC', 'PFNGLWEIGHTPOINTERARBPROC', +'PFNGLVERTEXBLENDARBPROC', 'GL_ARB_matrix_palette', +'glCurrentPaletteMatrixARB', 'glMatrixIndexubvARB', 'glMatrixIndexusvARB', +'glMatrixIndexuivARB', 'glMatrixIndexPointerARB', +'PFNGLCURRENTPALETTEMATRIXARBPROC', 'PFNGLMATRIXINDEXUBVARBPROC', +'PFNGLMATRIXINDEXUSVARBPROC', 'PFNGLMATRIXINDEXUIVARBPROC', +'PFNGLMATRIXINDEXPOINTERARBPROC', 'GL_ARB_texture_env_combine', +'GL_ARB_texture_env_crossbar', 'GL_ARB_texture_env_dot3', +'GL_ARB_texture_mirrored_repeat', 'GL_ARB_depth_texture', 'GL_ARB_shadow', +'GL_ARB_shadow_ambient', 'GL_ARB_window_pos', 'glWindowPos2dARB', +'glWindowPos2dvARB', 'glWindowPos2fARB', 'glWindowPos2fvARB', +'glWindowPos2iARB', 'glWindowPos2ivARB', 'glWindowPos2sARB', +'glWindowPos2svARB', 'glWindowPos3dARB', 'glWindowPos3dvARB', +'glWindowPos3fARB', 'glWindowPos3fvARB', 'glWindowPos3iARB', +'glWindowPos3ivARB', 'glWindowPos3sARB', 'glWindowPos3svARB', +'PFNGLWINDOWPOS2DARBPROC', 'PFNGLWINDOWPOS2DVARBPROC', +'PFNGLWINDOWPOS2FARBPROC', 'PFNGLWINDOWPOS2FVARBPROC', +'PFNGLWINDOWPOS2IARBPROC', 'PFNGLWINDOWPOS2IVARBPROC', +'PFNGLWINDOWPOS2SARBPROC', 'PFNGLWINDOWPOS2SVARBPROC', +'PFNGLWINDOWPOS3DARBPROC', 'PFNGLWINDOWPOS3DVARBPROC', +'PFNGLWINDOWPOS3FARBPROC', 'PFNGLWINDOWPOS3FVARBPROC', +'PFNGLWINDOWPOS3IARBPROC', 'PFNGLWINDOWPOS3IVARBPROC', +'PFNGLWINDOWPOS3SARBPROC', 'PFNGLWINDOWPOS3SVARBPROC', +'GL_ARB_vertex_program', 'glVertexAttrib1dARB', 'glVertexAttrib1dvARB', +'glVertexAttrib1fARB', 'glVertexAttrib1fvARB', 'glVertexAttrib1sARB', +'glVertexAttrib1svARB', 'glVertexAttrib2dARB', 'glVertexAttrib2dvARB', +'glVertexAttrib2fARB', 'glVertexAttrib2fvARB', 'glVertexAttrib2sARB', +'glVertexAttrib2svARB', 'glVertexAttrib3dARB', 'glVertexAttrib3dvARB', +'glVertexAttrib3fARB', 'glVertexAttrib3fvARB', 'glVertexAttrib3sARB', +'glVertexAttrib3svARB', 'glVertexAttrib4NbvARB', 'glVertexAttrib4NivARB', +'glVertexAttrib4NsvARB', 'glVertexAttrib4NubARB', 'glVertexAttrib4NubvARB', +'glVertexAttrib4NuivARB', 'glVertexAttrib4NusvARB', 'glVertexAttrib4bvARB', +'glVertexAttrib4dARB', 'glVertexAttrib4dvARB', 'glVertexAttrib4fARB', +'glVertexAttrib4fvARB', 'glVertexAttrib4ivARB', 'glVertexAttrib4sARB', +'glVertexAttrib4svARB', 'glVertexAttrib4ubvARB', 'glVertexAttrib4uivARB', +'glVertexAttrib4usvARB', 'glVertexAttribPointerARB', +'glEnableVertexAttribArrayARB', 'glDisableVertexAttribArrayARB', +'glProgramStringARB', 'glBindProgramARB', 'glDeleteProgramsARB', +'glGenProgramsARB', 'glProgramEnvParameter4dARB', +'glProgramEnvParameter4dvARB', 'glProgramEnvParameter4fARB', +'glProgramEnvParameter4fvARB', 'glProgramLocalParameter4dARB', +'glProgramLocalParameter4dvARB', 'glProgramLocalParameter4fARB', +'glProgramLocalParameter4fvARB', 'glGetProgramEnvParameterdvARB', +'glGetProgramEnvParameterfvARB', 'glGetProgramLocalParameterdvARB', +'glGetProgramLocalParameterfvARB', 'glGetProgramivARB', +'glGetProgramStringARB', 'glGetVertexAttribdvARB', 'glGetVertexAttribfvARB', +'glGetVertexAttribivARB', 'glGetVertexAttribPointervARB', 'glIsProgramARB', +'PFNGLVERTEXATTRIB1DARBPROC', 'PFNGLVERTEXATTRIB1DVARBPROC', +'PFNGLVERTEXATTRIB1FARBPROC', 'PFNGLVERTEXATTRIB1FVARBPROC', +'PFNGLVERTEXATTRIB1SARBPROC', 'PFNGLVERTEXATTRIB1SVARBPROC', +'PFNGLVERTEXATTRIB2DARBPROC', 'PFNGLVERTEXATTRIB2DVARBPROC', +'PFNGLVERTEXATTRIB2FARBPROC', 'PFNGLVERTEXATTRIB2FVARBPROC', +'PFNGLVERTEXATTRIB2SARBPROC', 'PFNGLVERTEXATTRIB2SVARBPROC', +'PFNGLVERTEXATTRIB3DARBPROC', 'PFNGLVERTEXATTRIB3DVARBPROC', +'PFNGLVERTEXATTRIB3FARBPROC', 'PFNGLVERTEXATTRIB3FVARBPROC', +'PFNGLVERTEXATTRIB3SARBPROC', 'PFNGLVERTEXATTRIB3SVARBPROC', +'PFNGLVERTEXATTRIB4NBVARBPROC', 'PFNGLVERTEXATTRIB4NIVARBPROC', +'PFNGLVERTEXATTRIB4NSVARBPROC', 'PFNGLVERTEXATTRIB4NUBARBPROC', +'PFNGLVERTEXATTRIB4NUBVARBPROC', 'PFNGLVERTEXATTRIB4NUIVARBPROC', +'PFNGLVERTEXATTRIB4NUSVARBPROC', 'PFNGLVERTEXATTRIB4BVARBPROC', +'PFNGLVERTEXATTRIB4DARBPROC', 'PFNGLVERTEXATTRIB4DVARBPROC', +'PFNGLVERTEXATTRIB4FARBPROC', 'PFNGLVERTEXATTRIB4FVARBPROC', +'PFNGLVERTEXATTRIB4IVARBPROC', 'PFNGLVERTEXATTRIB4SARBPROC', +'PFNGLVERTEXATTRIB4SVARBPROC', 'PFNGLVERTEXATTRIB4UBVARBPROC', +'PFNGLVERTEXATTRIB4UIVARBPROC', 'PFNGLVERTEXATTRIB4USVARBPROC', +'PFNGLVERTEXATTRIBPOINTERARBPROC', 'PFNGLENABLEVERTEXATTRIBARRAYARBPROC', +'PFNGLDISABLEVERTEXATTRIBARRAYARBPROC', 'PFNGLPROGRAMSTRINGARBPROC', +'PFNGLBINDPROGRAMARBPROC', 'PFNGLDELETEPROGRAMSARBPROC', +'PFNGLGENPROGRAMSARBPROC', 'PFNGLPROGRAMENVPARAMETER4DARBPROC', +'PFNGLPROGRAMENVPARAMETER4DVARBPROC', 'PFNGLPROGRAMENVPARAMETER4FARBPROC', +'PFNGLPROGRAMENVPARAMETER4FVARBPROC', 'PFNGLPROGRAMLOCALPARAMETER4DARBPROC', +'PFNGLPROGRAMLOCALPARAMETER4DVARBPROC', 'PFNGLPROGRAMLOCALPARAMETER4FARBPROC', +'PFNGLPROGRAMLOCALPARAMETER4FVARBPROC', +'PFNGLGETPROGRAMENVPARAMETERDVARBPROC', +'PFNGLGETPROGRAMENVPARAMETERFVARBPROC', +'PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC', +'PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC', 'PFNGLGETPROGRAMIVARBPROC', +'PFNGLGETPROGRAMSTRINGARBPROC', 'PFNGLGETVERTEXATTRIBDVARBPROC', +'PFNGLGETVERTEXATTRIBFVARBPROC', 'PFNGLGETVERTEXATTRIBIVARBPROC', +'PFNGLGETVERTEXATTRIBPOINTERVARBPROC', 'PFNGLISPROGRAMARBPROC', +'GL_ARB_fragment_program', 'GL_ARB_vertex_buffer_object', 'glBindBufferARB', +'glDeleteBuffersARB', 'glGenBuffersARB', 'glIsBufferARB', 'glBufferDataARB', +'glBufferSubDataARB', 'glGetBufferSubDataARB', 'glMapBufferARB', +'glUnmapBufferARB', 'glGetBufferParameterivARB', 'glGetBufferPointervARB', +'PFNGLBINDBUFFERARBPROC', 'PFNGLDELETEBUFFERSARBPROC', +'PFNGLGENBUFFERSARBPROC', 'PFNGLISBUFFERARBPROC', 'PFNGLBUFFERDATAARBPROC', +'PFNGLBUFFERSUBDATAARBPROC', 'PFNGLGETBUFFERSUBDATAARBPROC', +'PFNGLMAPBUFFERARBPROC', 'PFNGLUNMAPBUFFERARBPROC', +'PFNGLGETBUFFERPARAMETERIVARBPROC', 'PFNGLGETBUFFERPOINTERVARBPROC', +'GL_ARB_occlusion_query', 'glGenQueriesARB', 'glDeleteQueriesARB', +'glIsQueryARB', 'glBeginQueryARB', 'glEndQueryARB', 'glGetQueryivARB', +'glGetQueryObjectivARB', 'glGetQueryObjectuivARB', 'PFNGLGENQUERIESARBPROC', +'PFNGLDELETEQUERIESARBPROC', 'PFNGLISQUERYARBPROC', 'PFNGLBEGINQUERYARBPROC', +'PFNGLENDQUERYARBPROC', 'PFNGLGETQUERYIVARBPROC', +'PFNGLGETQUERYOBJECTIVARBPROC', 'PFNGLGETQUERYOBJECTUIVARBPROC', +'GL_ARB_shader_objects', 'glDeleteObjectARB', 'glGetHandleARB', +'glDetachObjectARB', 'glCreateShaderObjectARB', 'glShaderSourceARB', +'glCompileShaderARB', 'glCreateProgramObjectARB', 'glAttachObjectARB', +'glLinkProgramARB', 'glUseProgramObjectARB', 'glValidateProgramARB', +'glUniform1fARB', 'glUniform2fARB', 'glUniform3fARB', 'glUniform4fARB', +'glUniform1iARB', 'glUniform2iARB', 'glUniform3iARB', 'glUniform4iARB', +'glUniform1fvARB', 'glUniform2fvARB', 'glUniform3fvARB', 'glUniform4fvARB', +'glUniform1ivARB', 'glUniform2ivARB', 'glUniform3ivARB', 'glUniform4ivARB', +'glUniformMatrix2fvARB', 'glUniformMatrix3fvARB', 'glUniformMatrix4fvARB', +'glGetObjectParameterfvARB', 'glGetObjectParameterivARB', 'glGetInfoLogARB', +'glGetAttachedObjectsARB', 'glGetUniformLocationARB', 'glGetActiveUniformARB', +'glGetUniformfvARB', 'glGetUniformivARB', 'glGetShaderSourceARB', +'PFNGLDELETEOBJECTARBPROC', 'PFNGLGETHANDLEARBPROC', +'PFNGLDETACHOBJECTARBPROC', 'PFNGLCREATESHADEROBJECTARBPROC', +'PFNGLSHADERSOURCEARBPROC', 'PFNGLCOMPILESHADERARBPROC', +'PFNGLCREATEPROGRAMOBJECTARBPROC', 'PFNGLATTACHOBJECTARBPROC', +'PFNGLLINKPROGRAMARBPROC', 'PFNGLUSEPROGRAMOBJECTARBPROC', +'PFNGLVALIDATEPROGRAMARBPROC', 'PFNGLUNIFORM1FARBPROC', +'PFNGLUNIFORM2FARBPROC', 'PFNGLUNIFORM3FARBPROC', 'PFNGLUNIFORM4FARBPROC', +'PFNGLUNIFORM1IARBPROC', 'PFNGLUNIFORM2IARBPROC', 'PFNGLUNIFORM3IARBPROC', +'PFNGLUNIFORM4IARBPROC', 'PFNGLUNIFORM1FVARBPROC', 'PFNGLUNIFORM2FVARBPROC', +'PFNGLUNIFORM3FVARBPROC', 'PFNGLUNIFORM4FVARBPROC', 'PFNGLUNIFORM1IVARBPROC', +'PFNGLUNIFORM2IVARBPROC', 'PFNGLUNIFORM3IVARBPROC', 'PFNGLUNIFORM4IVARBPROC', +'PFNGLUNIFORMMATRIX2FVARBPROC', 'PFNGLUNIFORMMATRIX3FVARBPROC', +'PFNGLUNIFORMMATRIX4FVARBPROC', 'PFNGLGETOBJECTPARAMETERFVARBPROC', +'PFNGLGETOBJECTPARAMETERIVARBPROC', 'PFNGLGETINFOLOGARBPROC', +'PFNGLGETATTACHEDOBJECTSARBPROC', 'PFNGLGETUNIFORMLOCATIONARBPROC', +'PFNGLGETACTIVEUNIFORMARBPROC', 'PFNGLGETUNIFORMFVARBPROC', +'PFNGLGETUNIFORMIVARBPROC', 'PFNGLGETSHADERSOURCEARBPROC', +'GL_ARB_vertex_shader', 'glBindAttribLocationARB', 'glGetActiveAttribARB', +'glGetAttribLocationARB', 'PFNGLBINDATTRIBLOCATIONARBPROC', +'PFNGLGETACTIVEATTRIBARBPROC', 'PFNGLGETATTRIBLOCATIONARBPROC', +'GL_ARB_fragment_shader', 'GL_ARB_shading_language_100', +'GL_ARB_texture_non_power_of_two', 'GL_ARB_point_sprite', +'GL_ARB_fragment_program_shadow', 'GL_ARB_draw_buffers', 'glDrawBuffersARB', +'PFNGLDRAWBUFFERSARBPROC', 'GL_ARB_texture_rectangle', +'GL_ARB_color_buffer_float', 'glClampColorARB', 'PFNGLCLAMPCOLORARBPROC', +'GL_ARB_half_float_pixel', 'GL_ARB_texture_float', +'GL_ARB_pixel_buffer_object', 'GL_EXT_abgr', 'GL_EXT_blend_color', +'glBlendColorEXT', 'PFNGLBLENDCOLOREXTPROC', 'GL_EXT_polygon_offset', +'glPolygonOffsetEXT', 'PFNGLPOLYGONOFFSETEXTPROC', 'GL_EXT_texture', +'GL_EXT_texture3D', 'glTexImage3DEXT', 'glTexSubImage3DEXT', +'PFNGLTEXIMAGE3DEXTPROC', 'PFNGLTEXSUBIMAGE3DEXTPROC', +'GL_SGIS_texture_filter4', 'glGetTexFilterFuncSGIS', 'glTexFilterFuncSGIS', +'PFNGLGETTEXFILTERFUNCSGISPROC', 'PFNGLTEXFILTERFUNCSGISPROC', +'GL_EXT_subtexture', 'glTexSubImage1DEXT', 'glTexSubImage2DEXT', +'PFNGLTEXSUBIMAGE1DEXTPROC', 'PFNGLTEXSUBIMAGE2DEXTPROC', +'GL_EXT_copy_texture', 'glCopyTexImage1DEXT', 'glCopyTexImage2DEXT', +'glCopyTexSubImage1DEXT', 'glCopyTexSubImage2DEXT', 'glCopyTexSubImage3DEXT', +'PFNGLCOPYTEXIMAGE1DEXTPROC', 'PFNGLCOPYTEXIMAGE2DEXTPROC', +'PFNGLCOPYTEXSUBIMAGE1DEXTPROC', 'PFNGLCOPYTEXSUBIMAGE2DEXTPROC', +'PFNGLCOPYTEXSUBIMAGE3DEXTPROC', 'GL_EXT_histogram', 'glGetHistogramEXT', +'glGetHistogramParameterfvEXT', 'glGetHistogramParameterivEXT', +'glGetMinmaxEXT', 'glGetMinmaxParameterfvEXT', 'glGetMinmaxParameterivEXT', +'glHistogramEXT', 'glMinmaxEXT', 'glResetHistogramEXT', 'glResetMinmaxEXT', +'PFNGLGETHISTOGRAMEXTPROC', 'PFNGLGETHISTOGRAMPARAMETERFVEXTPROC', +'PFNGLGETHISTOGRAMPARAMETERIVEXTPROC', 'PFNGLGETMINMAXEXTPROC', +'PFNGLGETMINMAXPARAMETERFVEXTPROC', 'PFNGLGETMINMAXPARAMETERIVEXTPROC', +'PFNGLHISTOGRAMEXTPROC', 'PFNGLMINMAXEXTPROC', 'PFNGLRESETHISTOGRAMEXTPROC', +'PFNGLRESETMINMAXEXTPROC', 'GL_EXT_convolution', 'glConvolutionFilter1DEXT', +'glConvolutionFilter2DEXT', 'glConvolutionParameterfEXT', +'glConvolutionParameterfvEXT', 'glConvolutionParameteriEXT', +'glConvolutionParameterivEXT', 'glCopyConvolutionFilter1DEXT', +'glCopyConvolutionFilter2DEXT', 'glGetConvolutionFilterEXT', +'glGetConvolutionParameterfvEXT', 'glGetConvolutionParameterivEXT', +'glGetSeparableFilterEXT', 'glSeparableFilter2DEXT', +'PFNGLCONVOLUTIONFILTER1DEXTPROC', 'PFNGLCONVOLUTIONFILTER2DEXTPROC', +'PFNGLCONVOLUTIONPARAMETERFEXTPROC', 'PFNGLCONVOLUTIONPARAMETERFVEXTPROC', +'PFNGLCONVOLUTIONPARAMETERIEXTPROC', 'PFNGLCONVOLUTIONPARAMETERIVEXTPROC', +'PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC', 'PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC', +'PFNGLGETCONVOLUTIONFILTEREXTPROC', 'PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC', +'PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC', 'PFNGLGETSEPARABLEFILTEREXTPROC', +'PFNGLSEPARABLEFILTER2DEXTPROC', 'GL_EXT_color_matrix', 'GL_SGI_color_table', +'glColorTableSGI', 'glColorTableParameterfvSGI', 'glColorTableParameterivSGI', +'glCopyColorTableSGI', 'glGetColorTableSGI', 'glGetColorTableParameterfvSGI', +'glGetColorTableParameterivSGI', 'PFNGLCOLORTABLESGIPROC', +'PFNGLCOLORTABLEPARAMETERFVSGIPROC', 'PFNGLCOLORTABLEPARAMETERIVSGIPROC', +'PFNGLCOPYCOLORTABLESGIPROC', 'PFNGLGETCOLORTABLESGIPROC', +'PFNGLGETCOLORTABLEPARAMETERFVSGIPROC', +'PFNGLGETCOLORTABLEPARAMETERIVSGIPROC', 'GL_SGIX_pixel_texture', +'glPixelTexGenSGIX', 'PFNGLPIXELTEXGENSGIXPROC', 'GL_SGIS_pixel_texture', +'glPixelTexGenParameteriSGIS', 'glPixelTexGenParameterivSGIS', +'glPixelTexGenParameterfSGIS', 'glPixelTexGenParameterfvSGIS', +'glGetPixelTexGenParameterivSGIS', 'glGetPixelTexGenParameterfvSGIS', +'PFNGLPIXELTEXGENPARAMETERISGISPROC', 'PFNGLPIXELTEXGENPARAMETERIVSGISPROC', +'PFNGLPIXELTEXGENPARAMETERFSGISPROC', 'PFNGLPIXELTEXGENPARAMETERFVSGISPROC', +'PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC', +'PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC', 'GL_SGIS_texture4D', +'glTexImage4DSGIS', 'glTexSubImage4DSGIS', 'PFNGLTEXIMAGE4DSGISPROC', +'PFNGLTEXSUBIMAGE4DSGISPROC', 'GL_SGI_texture_color_table', 'GL_EXT_cmyka', +'GL_EXT_texture_object', 'glAreTexturesResidentEXT', 'glBindTextureEXT', +'glDeleteTexturesEXT', 'glGenTexturesEXT', 'glIsTextureEXT', +'glPrioritizeTexturesEXT', 'PFNGLARETEXTURESRESIDENTEXTPROC', +'PFNGLBINDTEXTUREEXTPROC', 'PFNGLDELETETEXTURESEXTPROC', +'PFNGLGENTEXTURESEXTPROC', 'PFNGLISTEXTUREEXTPROC', +'PFNGLPRIORITIZETEXTURESEXTPROC', 'GL_SGIS_detail_texture', +'glDetailTexFuncSGIS', 'glGetDetailTexFuncSGIS', 'PFNGLDETAILTEXFUNCSGISPROC', +'PFNGLGETDETAILTEXFUNCSGISPROC', 'GL_SGIS_sharpen_texture', +'glSharpenTexFuncSGIS', 'glGetSharpenTexFuncSGIS', +'PFNGLSHARPENTEXFUNCSGISPROC', 'PFNGLGETSHARPENTEXFUNCSGISPROC', +'GL_EXT_packed_pixels', 'GL_SGIS_texture_lod', 'GL_SGIS_multisample', +'glSampleMaskSGIS', 'glSamplePatternSGIS', 'PFNGLSAMPLEMASKSGISPROC', +'PFNGLSAMPLEPATTERNSGISPROC', 'GL_EXT_rescale_normal', 'GL_EXT_vertex_array', +'glArrayElementEXT', 'glColorPointerEXT', 'glDrawArraysEXT', +'glEdgeFlagPointerEXT', 'glGetPointervEXT', 'glIndexPointerEXT', +'glNormalPointerEXT', 'glTexCoordPointerEXT', 'glVertexPointerEXT', +'PFNGLARRAYELEMENTEXTPROC', 'PFNGLCOLORPOINTEREXTPROC', +'PFNGLDRAWARRAYSEXTPROC', 'PFNGLEDGEFLAGPOINTEREXTPROC', +'PFNGLGETPOINTERVEXTPROC', 'PFNGLINDEXPOINTEREXTPROC', +'PFNGLNORMALPOINTEREXTPROC', 'PFNGLTEXCOORDPOINTEREXTPROC', +'PFNGLVERTEXPOINTEREXTPROC', 'GL_EXT_misc_attribute', +'GL_SGIS_generate_mipmap', 'GL_SGIX_clipmap', 'GL_SGIX_shadow', +'GL_SGIS_texture_edge_clamp', 'GL_SGIS_texture_border_clamp', +'GL_EXT_blend_minmax', 'glBlendEquationEXT', 'PFNGLBLENDEQUATIONEXTPROC', +'GL_EXT_blend_subtract', 'GL_EXT_blend_logic_op', 'GL_SGIX_interlace', +'GL_SGIX_pixel_tiles', 'GL_SGIX_texture_select', 'GL_SGIX_sprite', +'glSpriteParameterfSGIX', 'glSpriteParameterfvSGIX', 'glSpriteParameteriSGIX', +'glSpriteParameterivSGIX', 'PFNGLSPRITEPARAMETERFSGIXPROC', +'PFNGLSPRITEPARAMETERFVSGIXPROC', 'PFNGLSPRITEPARAMETERISGIXPROC', +'PFNGLSPRITEPARAMETERIVSGIXPROC', 'GL_SGIX_texture_multi_buffer', +'GL_EXT_point_parameters', 'glPointParameterfEXT', 'glPointParameterfvEXT', +'PFNGLPOINTPARAMETERFEXTPROC', 'PFNGLPOINTPARAMETERFVEXTPROC', +'GL_SGIS_point_parameters', 'glPointParameterfSGIS', 'glPointParameterfvSGIS', +'PFNGLPOINTPARAMETERFSGISPROC', 'PFNGLPOINTPARAMETERFVSGISPROC', +'GL_SGIX_instruments', 'glGetInstrumentsSGIX', 'glInstrumentsBufferSGIX', +'glPollInstrumentsSGIX', 'glReadInstrumentsSGIX', 'glStartInstrumentsSGIX', +'glStopInstrumentsSGIX', 'PFNGLGETINSTRUMENTSSGIXPROC', +'PFNGLINSTRUMENTSBUFFERSGIXPROC', 'PFNGLPOLLINSTRUMENTSSGIXPROC', +'PFNGLREADINSTRUMENTSSGIXPROC', 'PFNGLSTARTINSTRUMENTSSGIXPROC', +'PFNGLSTOPINSTRUMENTSSGIXPROC', 'GL_SGIX_texture_scale_bias', +'GL_SGIX_framezoom', 'glFrameZoomSGIX', 'PFNGLFRAMEZOOMSGIXPROC', +'GL_SGIX_tag_sample_buffer', 'glTagSampleBufferSGIX', +'PFNGLTAGSAMPLEBUFFERSGIXPROC', 'GL_SGIX_polynomial_ffd', +'glDeformationMap3dSGIX', 'glDeformationMap3fSGIX', 'glDeformSGIX', +'glLoadIdentityDeformationMapSGIX', 'PFNGLDEFORMATIONMAP3DSGIXPROC', +'PFNGLDEFORMATIONMAP3FSGIXPROC', 'PFNGLDEFORMSGIXPROC', +'PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC', 'GL_SGIX_reference_plane', +'glReferencePlaneSGIX', 'PFNGLREFERENCEPLANESGIXPROC', 'GL_SGIX_flush_raster', +'glFlushRasterSGIX', 'PFNGLFLUSHRASTERSGIXPROC', 'GL_SGIX_depth_texture', +'GL_SGIS_fog_function', 'glFogFuncSGIS', 'glGetFogFuncSGIS', +'PFNGLFOGFUNCSGISPROC', 'PFNGLGETFOGFUNCSGISPROC', 'GL_SGIX_fog_offset', +'GL_HP_image_transform', 'glImageTransformParameteriHP', +'glImageTransformParameterfHP', 'glImageTransformParameterivHP', +'glImageTransformParameterfvHP', 'glGetImageTransformParameterivHP', +'glGetImageTransformParameterfvHP', 'PFNGLIMAGETRANSFORMPARAMETERIHPPROC', +'PFNGLIMAGETRANSFORMPARAMETERFHPPROC', 'PFNGLIMAGETRANSFORMPARAMETERIVHPPROC', +'PFNGLIMAGETRANSFORMPARAMETERFVHPPROC', +'PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC', +'PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC', 'GL_HP_convolution_border_modes', +'GL_SGIX_texture_add_env', 'GL_EXT_color_subtable', 'glColorSubTableEXT', +'glCopyColorSubTableEXT', 'PFNGLCOLORSUBTABLEEXTPROC', +'PFNGLCOPYCOLORSUBTABLEEXTPROC', 'GL_PGI_vertex_hints', 'GL_PGI_misc_hints', +'glHintPGI', 'PFNGLHINTPGIPROC', 'GL_EXT_paletted_texture', 'glColorTableEXT', +'glGetColorTableEXT', 'glGetColorTableParameterivEXT', +'glGetColorTableParameterfvEXT', 'PFNGLCOLORTABLEEXTPROC', +'PFNGLGETCOLORTABLEEXTPROC', 'PFNGLGETCOLORTABLEPARAMETERIVEXTPROC', +'PFNGLGETCOLORTABLEPARAMETERFVEXTPROC', 'GL_EXT_clip_volume_hint', +'GL_SGIX_list_priority', 'glGetListParameterfvSGIX', +'glGetListParameterivSGIX', 'glListParameterfSGIX', 'glListParameterfvSGIX', +'glListParameteriSGIX', 'glListParameterivSGIX', +'PFNGLGETLISTPARAMETERFVSGIXPROC', 'PFNGLGETLISTPARAMETERIVSGIXPROC', +'PFNGLLISTPARAMETERFSGIXPROC', 'PFNGLLISTPARAMETERFVSGIXPROC', +'PFNGLLISTPARAMETERISGIXPROC', 'PFNGLLISTPARAMETERIVSGIXPROC', +'GL_SGIX_ir_instrument1', 'GL_SGIX_calligraphic_fragment', +'GL_SGIX_texture_lod_bias', 'GL_SGIX_shadow_ambient', 'GL_EXT_index_texture', +'GL_EXT_index_material', 'glIndexMaterialEXT', 'PFNGLINDEXMATERIALEXTPROC', +'GL_EXT_index_func', 'glIndexFuncEXT', 'PFNGLINDEXFUNCEXTPROC', +'GL_EXT_index_array_formats', 'GL_EXT_compiled_vertex_array', +'glLockArraysEXT', 'glUnlockArraysEXT', 'PFNGLLOCKARRAYSEXTPROC', +'PFNGLUNLOCKARRAYSEXTPROC', 'GL_EXT_cull_vertex', 'glCullParameterdvEXT', +'glCullParameterfvEXT', 'PFNGLCULLPARAMETERDVEXTPROC', +'PFNGLCULLPARAMETERFVEXTPROC', 'GL_SGIX_ycrcb', 'GL_SGIX_fragment_lighting', +'glFragmentColorMaterialSGIX', 'glFragmentLightfSGIX', +'glFragmentLightfvSGIX', 'glFragmentLightiSGIX', 'glFragmentLightivSGIX', +'glFragmentLightModelfSGIX', 'glFragmentLightModelfvSGIX', +'glFragmentLightModeliSGIX', 'glFragmentLightModelivSGIX', +'glFragmentMaterialfSGIX', 'glFragmentMaterialfvSGIX', +'glFragmentMaterialiSGIX', 'glFragmentMaterialivSGIX', +'glGetFragmentLightfvSGIX', 'glGetFragmentLightivSGIX', +'glGetFragmentMaterialfvSGIX', 'glGetFragmentMaterialivSGIX', +'glLightEnviSGIX', 'PFNGLFRAGMENTCOLORMATERIALSGIXPROC', +'PFNGLFRAGMENTLIGHTFSGIXPROC', 'PFNGLFRAGMENTLIGHTFVSGIXPROC', +'PFNGLFRAGMENTLIGHTISGIXPROC', 'PFNGLFRAGMENTLIGHTIVSGIXPROC', +'PFNGLFRAGMENTLIGHTMODELFSGIXPROC', 'PFNGLFRAGMENTLIGHTMODELFVSGIXPROC', +'PFNGLFRAGMENTLIGHTMODELISGIXPROC', 'PFNGLFRAGMENTLIGHTMODELIVSGIXPROC', +'PFNGLFRAGMENTMATERIALFSGIXPROC', 'PFNGLFRAGMENTMATERIALFVSGIXPROC', +'PFNGLFRAGMENTMATERIALISGIXPROC', 'PFNGLFRAGMENTMATERIALIVSGIXPROC', +'PFNGLGETFRAGMENTLIGHTFVSGIXPROC', 'PFNGLGETFRAGMENTLIGHTIVSGIXPROC', +'PFNGLGETFRAGMENTMATERIALFVSGIXPROC', 'PFNGLGETFRAGMENTMATERIALIVSGIXPROC', +'PFNGLLIGHTENVISGIXPROC', 'GL_IBM_rasterpos_clip', 'GL_HP_texture_lighting', +'GL_EXT_draw_range_elements', 'glDrawRangeElementsEXT', +'PFNGLDRAWRANGEELEMENTSEXTPROC', 'GL_WIN_phong_shading', +'GL_WIN_specular_fog', 'GL_EXT_light_texture', 'glApplyTextureEXT', +'glTextureLightEXT', 'glTextureMaterialEXT', 'PFNGLAPPLYTEXTUREEXTPROC', +'PFNGLTEXTURELIGHTEXTPROC', 'PFNGLTEXTUREMATERIALEXTPROC', +'GL_SGIX_blend_alpha_minmax', 'GL_EXT_bgra', 'GL_SGIX_async', +'glAsyncMarkerSGIX', 'glFinishAsyncSGIX', 'glPollAsyncSGIX', +'glGenAsyncMarkersSGIX', 'glDeleteAsyncMarkersSGIX', 'glIsAsyncMarkerSGIX', +'PFNGLASYNCMARKERSGIXPROC', 'PFNGLFINISHASYNCSGIXPROC', +'PFNGLPOLLASYNCSGIXPROC', 'PFNGLGENASYNCMARKERSSGIXPROC', +'PFNGLDELETEASYNCMARKERSSGIXPROC', 'PFNGLISASYNCMARKERSGIXPROC', +'GL_SGIX_async_pixel', 'GL_SGIX_async_histogram', 'GL_INTEL_parallel_arrays', +'glVertexPointervINTEL', 'glNormalPointervINTEL', 'glColorPointervINTEL', +'glTexCoordPointervINTEL', 'PFNGLVERTEXPOINTERVINTELPROC', +'PFNGLNORMALPOINTERVINTELPROC', 'PFNGLCOLORPOINTERVINTELPROC', +'PFNGLTEXCOORDPOINTERVINTELPROC', 'GL_HP_occlusion_test', +'GL_EXT_pixel_transform', 'glPixelTransformParameteriEXT', +'glPixelTransformParameterfEXT', 'glPixelTransformParameterivEXT', +'glPixelTransformParameterfvEXT', 'PFNGLPIXELTRANSFORMPARAMETERIEXTPROC', +'PFNGLPIXELTRANSFORMPARAMETERFEXTPROC', +'PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC', +'PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC', 'GL_EXT_pixel_transform_color_table', +'GL_EXT_shared_texture_palette', 'GL_EXT_separate_specular_color', +'GL_EXT_secondary_color', 'glSecondaryColor3bEXT', 'glSecondaryColor3bvEXT', +'glSecondaryColor3dEXT', 'glSecondaryColor3dvEXT', 'glSecondaryColor3fEXT', +'glSecondaryColor3fvEXT', 'glSecondaryColor3iEXT', 'glSecondaryColor3ivEXT', +'glSecondaryColor3sEXT', 'glSecondaryColor3svEXT', 'glSecondaryColor3ubEXT', +'glSecondaryColor3ubvEXT', 'glSecondaryColor3uiEXT', +'glSecondaryColor3uivEXT', 'glSecondaryColor3usEXT', +'glSecondaryColor3usvEXT', 'glSecondaryColorPointerEXT', +'PFNGLSECONDARYCOLOR3BEXTPROC', 'PFNGLSECONDARYCOLOR3BVEXTPROC', +'PFNGLSECONDARYCOLOR3DEXTPROC', 'PFNGLSECONDARYCOLOR3DVEXTPROC', +'PFNGLSECONDARYCOLOR3FEXTPROC', 'PFNGLSECONDARYCOLOR3FVEXTPROC', +'PFNGLSECONDARYCOLOR3IEXTPROC', 'PFNGLSECONDARYCOLOR3IVEXTPROC', +'PFNGLSECONDARYCOLOR3SEXTPROC', 'PFNGLSECONDARYCOLOR3SVEXTPROC', +'PFNGLSECONDARYCOLOR3UBEXTPROC', 'PFNGLSECONDARYCOLOR3UBVEXTPROC', +'PFNGLSECONDARYCOLOR3UIEXTPROC', 'PFNGLSECONDARYCOLOR3UIVEXTPROC', +'PFNGLSECONDARYCOLOR3USEXTPROC', 'PFNGLSECONDARYCOLOR3USVEXTPROC', +'PFNGLSECONDARYCOLORPOINTEREXTPROC', 'GL_EXT_texture_perturb_normal', +'glTextureNormalEXT', 'PFNGLTEXTURENORMALEXTPROC', 'GL_EXT_multi_draw_arrays', +'glMultiDrawArraysEXT', 'glMultiDrawElementsEXT', +'PFNGLMULTIDRAWARRAYSEXTPROC', 'PFNGLMULTIDRAWELEMENTSEXTPROC', +'GL_EXT_fog_coord', 'glFogCoordfEXT', 'glFogCoordfvEXT', 'glFogCoorddEXT', +'glFogCoorddvEXT', 'glFogCoordPointerEXT', 'PFNGLFOGCOORDFEXTPROC', +'PFNGLFOGCOORDFVEXTPROC', 'PFNGLFOGCOORDDEXTPROC', 'PFNGLFOGCOORDDVEXTPROC', +'PFNGLFOGCOORDPOINTEREXTPROC', 'GL_REND_screen_coordinates', +'GL_EXT_coordinate_frame', 'glTangent3bEXT', 'glTangent3bvEXT', +'glTangent3dEXT', 'glTangent3dvEXT', 'glTangent3fEXT', 'glTangent3fvEXT', +'glTangent3iEXT', 'glTangent3ivEXT', 'glTangent3sEXT', 'glTangent3svEXT', +'glBinormal3bEXT', 'glBinormal3bvEXT', 'glBinormal3dEXT', 'glBinormal3dvEXT', +'glBinormal3fEXT', 'glBinormal3fvEXT', 'glBinormal3iEXT', 'glBinormal3ivEXT', +'glBinormal3sEXT', 'glBinormal3svEXT', 'glTangentPointerEXT', +'glBinormalPointerEXT', 'PFNGLTANGENT3BEXTPROC', 'PFNGLTANGENT3BVEXTPROC', +'PFNGLTANGENT3DEXTPROC', 'PFNGLTANGENT3DVEXTPROC', 'PFNGLTANGENT3FEXTPROC', +'PFNGLTANGENT3FVEXTPROC', 'PFNGLTANGENT3IEXTPROC', 'PFNGLTANGENT3IVEXTPROC', +'PFNGLTANGENT3SEXTPROC', 'PFNGLTANGENT3SVEXTPROC', 'PFNGLBINORMAL3BEXTPROC', +'PFNGLBINORMAL3BVEXTPROC', 'PFNGLBINORMAL3DEXTPROC', +'PFNGLBINORMAL3DVEXTPROC', 'PFNGLBINORMAL3FEXTPROC', +'PFNGLBINORMAL3FVEXTPROC', 'PFNGLBINORMAL3IEXTPROC', +'PFNGLBINORMAL3IVEXTPROC', 'PFNGLBINORMAL3SEXTPROC', +'PFNGLBINORMAL3SVEXTPROC', 'PFNGLTANGENTPOINTEREXTPROC', +'PFNGLBINORMALPOINTEREXTPROC', 'GL_EXT_texture_env_combine', +'GL_APPLE_specular_vector', 'GL_APPLE_transform_hint', 'GL_SGIX_fog_scale', +'GL_SUNX_constant_data', 'glFinishTextureSUNX', 'PFNGLFINISHTEXTURESUNXPROC', +'GL_SUN_global_alpha', 'glGlobalAlphaFactorbSUN', 'glGlobalAlphaFactorsSUN', +'glGlobalAlphaFactoriSUN', 'glGlobalAlphaFactorfSUN', +'glGlobalAlphaFactordSUN', 'glGlobalAlphaFactorubSUN', +'glGlobalAlphaFactorusSUN', 'glGlobalAlphaFactoruiSUN', +'PFNGLGLOBALALPHAFACTORBSUNPROC', 'PFNGLGLOBALALPHAFACTORSSUNPROC', +'PFNGLGLOBALALPHAFACTORISUNPROC', 'PFNGLGLOBALALPHAFACTORFSUNPROC', +'PFNGLGLOBALALPHAFACTORDSUNPROC', 'PFNGLGLOBALALPHAFACTORUBSUNPROC', +'PFNGLGLOBALALPHAFACTORUSSUNPROC', 'PFNGLGLOBALALPHAFACTORUISUNPROC', +'GL_SUN_triangle_list', 'glReplacementCodeuiSUN', 'glReplacementCodeusSUN', +'glReplacementCodeubSUN', 'glReplacementCodeuivSUN', +'glReplacementCodeusvSUN', 'glReplacementCodeubvSUN', +'glReplacementCodePointerSUN', 'PFNGLREPLACEMENTCODEUISUNPROC', +'PFNGLREPLACEMENTCODEUSSUNPROC', 'PFNGLREPLACEMENTCODEUBSUNPROC', +'PFNGLREPLACEMENTCODEUIVSUNPROC', 'PFNGLREPLACEMENTCODEUSVSUNPROC', +'PFNGLREPLACEMENTCODEUBVSUNPROC', 'PFNGLREPLACEMENTCODEPOINTERSUNPROC', +'GL_SUN_vertex', 'glColor4ubVertex2fSUN', 'glColor4ubVertex2fvSUN', +'glColor4ubVertex3fSUN', 'glColor4ubVertex3fvSUN', 'glColor3fVertex3fSUN', +'glColor3fVertex3fvSUN', 'glNormal3fVertex3fSUN', 'glNormal3fVertex3fvSUN', +'glColor4fNormal3fVertex3fSUN', 'glColor4fNormal3fVertex3fvSUN', +'glTexCoord2fVertex3fSUN', 'glTexCoord2fVertex3fvSUN', +'glTexCoord4fVertex4fSUN', 'glTexCoord4fVertex4fvSUN', +'glTexCoord2fColor4ubVertex3fSUN', 'glTexCoord2fColor4ubVertex3fvSUN', +'glTexCoord2fColor3fVertex3fSUN', 'glTexCoord2fColor3fVertex3fvSUN', +'glTexCoord2fNormal3fVertex3fSUN', 'glTexCoord2fNormal3fVertex3fvSUN', +'glTexCoord2fColor4fNormal3fVertex3fSUN', +'glTexCoord2fColor4fNormal3fVertex3fvSUN', +'glTexCoord4fColor4fNormal3fVertex4fSUN', +'glTexCoord4fColor4fNormal3fVertex4fvSUN', 'glReplacementCodeuiVertex3fSUN', +'glReplacementCodeuiVertex3fvSUN', 'glReplacementCodeuiColor4ubVertex3fSUN', +'glReplacementCodeuiColor4ubVertex3fvSUN', +'glReplacementCodeuiColor3fVertex3fSUN', +'glReplacementCodeuiColor3fVertex3fvSUN', +'glReplacementCodeuiNormal3fVertex3fSUN', +'glReplacementCodeuiNormal3fVertex3fvSUN', +'glReplacementCodeuiColor4fNormal3fVertex3fSUN', +'glReplacementCodeuiColor4fNormal3fVertex3fvSUN', +'glReplacementCodeuiTexCoord2fVertex3fSUN', +'glReplacementCodeuiTexCoord2fVertex3fvSUN', +'glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN', +'glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN', +'glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN', +'glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN', +'PFNGLCOLOR4UBVERTEX2FSUNPROC', 'PFNGLCOLOR4UBVERTEX2FVSUNPROC', +'PFNGLCOLOR4UBVERTEX3FSUNPROC', 'PFNGLCOLOR4UBVERTEX3FVSUNPROC', +'PFNGLCOLOR3FVERTEX3FSUNPROC', 'PFNGLCOLOR3FVERTEX3FVSUNPROC', +'PFNGLNORMAL3FVERTEX3FSUNPROC', 'PFNGLNORMAL3FVERTEX3FVSUNPROC', +'PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC', 'PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC', +'PFNGLTEXCOORD2FVERTEX3FSUNPROC', 'PFNGLTEXCOORD2FVERTEX3FVSUNPROC', +'PFNGLTEXCOORD4FVERTEX4FSUNPROC', 'PFNGLTEXCOORD4FVERTEX4FVSUNPROC', +'PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC', +'PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC', +'PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC', +'PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC', +'PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC', +'PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC', +'PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC', +'PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC', +'PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC', +'PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC', +'PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC', +'PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC', +'PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC', +'PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC', +'PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC', +'PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC', +'PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC', +'PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC', +'PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC', +'PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC', +'PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC', +'PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC', +'PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC', +'PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC', +'PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC', +'PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC', +'GL_EXT_blend_func_separate', 'glBlendFuncSeparateEXT', +'PFNGLBLENDFUNCSEPARATEEXTPROC', 'GL_INGR_blend_func_separate', +'glBlendFuncSeparateINGR', 'PFNGLBLENDFUNCSEPARATEINGRPROC', +'GL_INGR_color_clamp', 'GL_INGR_interlace_read', 'GL_EXT_stencil_wrap', +'GL_EXT_422_pixels', 'GL_NV_texgen_reflection', +'GL_SUN_convolution_border_modes', 'GL_EXT_texture_env_add', +'GL_EXT_texture_lod_bias', 'GL_EXT_texture_filter_anisotropic', +'GL_EXT_vertex_weighting', 'glVertexWeightfEXT', 'glVertexWeightfvEXT', +'glVertexWeightPointerEXT', 'PFNGLVERTEXWEIGHTFEXTPROC', +'PFNGLVERTEXWEIGHTFVEXTPROC', 'PFNGLVERTEXWEIGHTPOINTEREXTPROC', +'GL_NV_light_max_exponent', 'GL_NV_vertex_array_range', +'glFlushVertexArrayRangeNV', 'glVertexArrayRangeNV', +'PFNGLFLUSHVERTEXARRAYRANGENVPROC', 'PFNGLVERTEXARRAYRANGENVPROC', +'GL_NV_register_combiners', 'glCombinerParameterfvNV', +'glCombinerParameterfNV', 'glCombinerParameterivNV', 'glCombinerParameteriNV', +'glCombinerInputNV', 'glCombinerOutputNV', 'glFinalCombinerInputNV', +'glGetCombinerInputParameterfvNV', 'glGetCombinerInputParameterivNV', +'glGetCombinerOutputParameterfvNV', 'glGetCombinerOutputParameterivNV', +'glGetFinalCombinerInputParameterfvNV', +'glGetFinalCombinerInputParameterivNV', 'PFNGLCOMBINERPARAMETERFVNVPROC', +'PFNGLCOMBINERPARAMETERFNVPROC', 'PFNGLCOMBINERPARAMETERIVNVPROC', +'PFNGLCOMBINERPARAMETERINVPROC', 'PFNGLCOMBINERINPUTNVPROC', +'PFNGLCOMBINEROUTPUTNVPROC', 'PFNGLFINALCOMBINERINPUTNVPROC', +'PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC', +'PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC', +'PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC', +'PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC', +'PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC', +'PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC', 'GL_NV_fog_distance', +'GL_NV_texgen_emboss', 'GL_NV_blend_square', 'GL_NV_texture_env_combine4', +'GL_MESA_resize_buffers', 'glResizeBuffersMESA', 'PFNGLRESIZEBUFFERSMESAPROC', +'GL_MESA_window_pos', 'glWindowPos2dMESA', 'glWindowPos2dvMESA', +'glWindowPos2fMESA', 'glWindowPos2fvMESA', 'glWindowPos2iMESA', +'glWindowPos2ivMESA', 'glWindowPos2sMESA', 'glWindowPos2svMESA', +'glWindowPos3dMESA', 'glWindowPos3dvMESA', 'glWindowPos3fMESA', +'glWindowPos3fvMESA', 'glWindowPos3iMESA', 'glWindowPos3ivMESA', +'glWindowPos3sMESA', 'glWindowPos3svMESA', 'glWindowPos4dMESA', +'glWindowPos4dvMESA', 'glWindowPos4fMESA', 'glWindowPos4fvMESA', +'glWindowPos4iMESA', 'glWindowPos4ivMESA', 'glWindowPos4sMESA', +'glWindowPos4svMESA', 'PFNGLWINDOWPOS2DMESAPROC', 'PFNGLWINDOWPOS2DVMESAPROC', +'PFNGLWINDOWPOS2FMESAPROC', 'PFNGLWINDOWPOS2FVMESAPROC', +'PFNGLWINDOWPOS2IMESAPROC', 'PFNGLWINDOWPOS2IVMESAPROC', +'PFNGLWINDOWPOS2SMESAPROC', 'PFNGLWINDOWPOS2SVMESAPROC', +'PFNGLWINDOWPOS3DMESAPROC', 'PFNGLWINDOWPOS3DVMESAPROC', +'PFNGLWINDOWPOS3FMESAPROC', 'PFNGLWINDOWPOS3FVMESAPROC', +'PFNGLWINDOWPOS3IMESAPROC', 'PFNGLWINDOWPOS3IVMESAPROC', +'PFNGLWINDOWPOS3SMESAPROC', 'PFNGLWINDOWPOS3SVMESAPROC', +'PFNGLWINDOWPOS4DMESAPROC', 'PFNGLWINDOWPOS4DVMESAPROC', +'PFNGLWINDOWPOS4FMESAPROC', 'PFNGLWINDOWPOS4FVMESAPROC', +'PFNGLWINDOWPOS4IMESAPROC', 'PFNGLWINDOWPOS4IVMESAPROC', +'PFNGLWINDOWPOS4SMESAPROC', 'PFNGLWINDOWPOS4SVMESAPROC', +'GL_EXT_texture_compression_s3tc', 'GL_IBM_cull_vertex', +'GL_IBM_multimode_draw_arrays', 'glMultiModeDrawArraysIBM', +'glMultiModeDrawElementsIBM', 'PFNGLMULTIMODEDRAWARRAYSIBMPROC', +'PFNGLMULTIMODEDRAWELEMENTSIBMPROC', 'GL_IBM_vertex_array_lists', +'glColorPointerListIBM', 'glSecondaryColorPointerListIBM', +'glEdgeFlagPointerListIBM', 'glFogCoordPointerListIBM', +'glIndexPointerListIBM', 'glNormalPointerListIBM', 'glTexCoordPointerListIBM', +'glVertexPointerListIBM', 'PFNGLCOLORPOINTERLISTIBMPROC', +'PFNGLSECONDARYCOLORPOINTERLISTIBMPROC', 'PFNGLEDGEFLAGPOINTERLISTIBMPROC', +'PFNGLFOGCOORDPOINTERLISTIBMPROC', 'PFNGLINDEXPOINTERLISTIBMPROC', +'PFNGLNORMALPOINTERLISTIBMPROC', 'PFNGLTEXCOORDPOINTERLISTIBMPROC', +'PFNGLVERTEXPOINTERLISTIBMPROC', 'GL_SGIX_subsample', 'GL_SGIX_ycrcba', +'GL_SGIX_ycrcb_subsample', 'GL_SGIX_depth_pass_instrument', +'GL_3DFX_texture_compression_FXT1', 'GL_3DFX_multisample', 'GL_3DFX_tbuffer', +'glTbufferMask3DFX', 'PFNGLTBUFFERMASK3DFXPROC', 'GL_EXT_multisample', +'glSampleMaskEXT', 'glSamplePatternEXT', 'PFNGLSAMPLEMASKEXTPROC', +'PFNGLSAMPLEPATTERNEXTPROC', 'GL_SGIX_vertex_preclip', +'GL_SGIX_convolution_accuracy', 'GL_SGIX_resample', +'GL_SGIS_point_line_texgen', 'GL_SGIS_texture_color_mask', +'glTextureColorMaskSGIS', 'PFNGLTEXTURECOLORMASKSGISPROC', +'GL_SGIX_igloo_interface', 'glIglooInterfaceSGIX', +'PFNGLIGLOOINTERFACESGIXPROC', 'GL_EXT_texture_env_dot3', +'GL_ATI_texture_mirror_once', 'GL_NV_fence', 'glDeleteFencesNV', +'glGenFencesNV', 'glIsFenceNV', 'glTestFenceNV', 'glGetFenceivNV', +'glFinishFenceNV', 'glSetFenceNV', 'PFNGLDELETEFENCESNVPROC', +'PFNGLGENFENCESNVPROC', 'PFNGLISFENCENVPROC', 'PFNGLTESTFENCENVPROC', +'PFNGLGETFENCEIVNVPROC', 'PFNGLFINISHFENCENVPROC', 'PFNGLSETFENCENVPROC', +'GL_NV_evaluators', 'glMapControlPointsNV', 'glMapParameterivNV', +'glMapParameterfvNV', 'glGetMapControlPointsNV', 'glGetMapParameterivNV', +'glGetMapParameterfvNV', 'glGetMapAttribParameterivNV', +'glGetMapAttribParameterfvNV', 'glEvalMapsNV', 'PFNGLMAPCONTROLPOINTSNVPROC', +'PFNGLMAPPARAMETERIVNVPROC', 'PFNGLMAPPARAMETERFVNVPROC', +'PFNGLGETMAPCONTROLPOINTSNVPROC', 'PFNGLGETMAPPARAMETERIVNVPROC', +'PFNGLGETMAPPARAMETERFVNVPROC', 'PFNGLGETMAPATTRIBPARAMETERIVNVPROC', +'PFNGLGETMAPATTRIBPARAMETERFVNVPROC', 'PFNGLEVALMAPSNVPROC', +'GL_NV_packed_depth_stencil', 'GL_NV_register_combiners2', +'glCombinerStageParameterfvNV', 'glGetCombinerStageParameterfvNV', +'PFNGLCOMBINERSTAGEPARAMETERFVNVPROC', +'PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC', 'GL_NV_texture_compression_vtc', +'GL_NV_texture_rectangle', 'GL_NV_texture_shader', 'GL_NV_texture_shader2', +'GL_NV_vertex_array_range2', 'GL_NV_vertex_program', +'glAreProgramsResidentNV', 'glBindProgramNV', 'glDeleteProgramsNV', +'glExecuteProgramNV', 'glGenProgramsNV', 'glGetProgramParameterdvNV', +'glGetProgramParameterfvNV', 'glGetProgramivNV', 'glGetProgramStringNV', +'glGetTrackMatrixivNV', 'glGetVertexAttribdvNV', 'glGetVertexAttribfvNV', +'glGetVertexAttribivNV', 'glGetVertexAttribPointervNV', 'glIsProgramNV', +'glLoadProgramNV', 'glProgramParameter4dNV', 'glProgramParameter4dvNV', +'glProgramParameter4fNV', 'glProgramParameter4fvNV', +'glProgramParameters4dvNV', 'glProgramParameters4fvNV', +'glRequestResidentProgramsNV', 'glTrackMatrixNV', 'glVertexAttribPointerNV', +'glVertexAttrib1dNV', 'glVertexAttrib1dvNV', 'glVertexAttrib1fNV', +'glVertexAttrib1fvNV', 'glVertexAttrib1sNV', 'glVertexAttrib1svNV', +'glVertexAttrib2dNV', 'glVertexAttrib2dvNV', 'glVertexAttrib2fNV', +'glVertexAttrib2fvNV', 'glVertexAttrib2sNV', 'glVertexAttrib2svNV', +'glVertexAttrib3dNV', 'glVertexAttrib3dvNV', 'glVertexAttrib3fNV', +'glVertexAttrib3fvNV', 'glVertexAttrib3sNV', 'glVertexAttrib3svNV', +'glVertexAttrib4dNV', 'glVertexAttrib4dvNV', 'glVertexAttrib4fNV', +'glVertexAttrib4fvNV', 'glVertexAttrib4sNV', 'glVertexAttrib4svNV', +'glVertexAttrib4ubNV', 'glVertexAttrib4ubvNV', 'glVertexAttribs1dvNV', +'glVertexAttribs1fvNV', 'glVertexAttribs1svNV', 'glVertexAttribs2dvNV', +'glVertexAttribs2fvNV', 'glVertexAttribs2svNV', 'glVertexAttribs3dvNV', +'glVertexAttribs3fvNV', 'glVertexAttribs3svNV', 'glVertexAttribs4dvNV', +'glVertexAttribs4fvNV', 'glVertexAttribs4svNV', 'glVertexAttribs4ubvNV', +'PFNGLAREPROGRAMSRESIDENTNVPROC', 'PFNGLBINDPROGRAMNVPROC', +'PFNGLDELETEPROGRAMSNVPROC', 'PFNGLEXECUTEPROGRAMNVPROC', +'PFNGLGENPROGRAMSNVPROC', 'PFNGLGETPROGRAMPARAMETERDVNVPROC', +'PFNGLGETPROGRAMPARAMETERFVNVPROC', 'PFNGLGETPROGRAMIVNVPROC', +'PFNGLGETPROGRAMSTRINGNVPROC', 'PFNGLGETTRACKMATRIXIVNVPROC', +'PFNGLGETVERTEXATTRIBDVNVPROC', 'PFNGLGETVERTEXATTRIBFVNVPROC', +'PFNGLGETVERTEXATTRIBIVNVPROC', 'PFNGLGETVERTEXATTRIBPOINTERVNVPROC', +'PFNGLISPROGRAMNVPROC', 'PFNGLLOADPROGRAMNVPROC', +'PFNGLPROGRAMPARAMETER4DNVPROC', 'PFNGLPROGRAMPARAMETER4DVNVPROC', +'PFNGLPROGRAMPARAMETER4FNVPROC', 'PFNGLPROGRAMPARAMETER4FVNVPROC', +'PFNGLPROGRAMPARAMETERS4DVNVPROC', 'PFNGLPROGRAMPARAMETERS4FVNVPROC', +'PFNGLREQUESTRESIDENTPROGRAMSNVPROC', 'PFNGLTRACKMATRIXNVPROC', +'PFNGLVERTEXATTRIBPOINTERNVPROC', 'PFNGLVERTEXATTRIB1DNVPROC', +'PFNGLVERTEXATTRIB1DVNVPROC', 'PFNGLVERTEXATTRIB1FNVPROC', +'PFNGLVERTEXATTRIB1FVNVPROC', 'PFNGLVERTEXATTRIB1SNVPROC', +'PFNGLVERTEXATTRIB1SVNVPROC', 'PFNGLVERTEXATTRIB2DNVPROC', +'PFNGLVERTEXATTRIB2DVNVPROC', 'PFNGLVERTEXATTRIB2FNVPROC', +'PFNGLVERTEXATTRIB2FVNVPROC', 'PFNGLVERTEXATTRIB2SNVPROC', +'PFNGLVERTEXATTRIB2SVNVPROC', 'PFNGLVERTEXATTRIB3DNVPROC', +'PFNGLVERTEXATTRIB3DVNVPROC', 'PFNGLVERTEXATTRIB3FNVPROC', +'PFNGLVERTEXATTRIB3FVNVPROC', 'PFNGLVERTEXATTRIB3SNVPROC', +'PFNGLVERTEXATTRIB3SVNVPROC', 'PFNGLVERTEXATTRIB4DNVPROC', +'PFNGLVERTEXATTRIB4DVNVPROC', 'PFNGLVERTEXATTRIB4FNVPROC', +'PFNGLVERTEXATTRIB4FVNVPROC', 'PFNGLVERTEXATTRIB4SNVPROC', +'PFNGLVERTEXATTRIB4SVNVPROC', 'PFNGLVERTEXATTRIB4UBNVPROC', +'PFNGLVERTEXATTRIB4UBVNVPROC', 'PFNGLVERTEXATTRIBS1DVNVPROC', +'PFNGLVERTEXATTRIBS1FVNVPROC', 'PFNGLVERTEXATTRIBS1SVNVPROC', +'PFNGLVERTEXATTRIBS2DVNVPROC', 'PFNGLVERTEXATTRIBS2FVNVPROC', +'PFNGLVERTEXATTRIBS2SVNVPROC', 'PFNGLVERTEXATTRIBS3DVNVPROC', +'PFNGLVERTEXATTRIBS3FVNVPROC', 'PFNGLVERTEXATTRIBS3SVNVPROC', +'PFNGLVERTEXATTRIBS4DVNVPROC', 'PFNGLVERTEXATTRIBS4FVNVPROC', +'PFNGLVERTEXATTRIBS4SVNVPROC', 'PFNGLVERTEXATTRIBS4UBVNVPROC', +'GL_SGIX_texture_coordinate_clamp', 'GL_SGIX_scalebias_hint', +'GL_OML_interlace', 'GL_OML_subsample', 'GL_OML_resample', +'GL_NV_copy_depth_to_color', 'GL_ATI_envmap_bumpmap', +'glTexBumpParameterivATI', 'glTexBumpParameterfvATI', +'glGetTexBumpParameterivATI', 'glGetTexBumpParameterfvATI', +'PFNGLTEXBUMPPARAMETERIVATIPROC', 'PFNGLTEXBUMPPARAMETERFVATIPROC', +'PFNGLGETTEXBUMPPARAMETERIVATIPROC', 'PFNGLGETTEXBUMPPARAMETERFVATIPROC', +'GL_ATI_fragment_shader', 'glGenFragmentShadersATI', +'glBindFragmentShaderATI', 'glDeleteFragmentShaderATI', +'glBeginFragmentShaderATI', 'glEndFragmentShaderATI', 'glPassTexCoordATI', +'glSampleMapATI', 'glColorFragmentOp1ATI', 'glColorFragmentOp2ATI', +'glColorFragmentOp3ATI', 'glAlphaFragmentOp1ATI', 'glAlphaFragmentOp2ATI', +'glAlphaFragmentOp3ATI', 'glSetFragmentShaderConstantATI', +'PFNGLGENFRAGMENTSHADERSATIPROC', 'PFNGLBINDFRAGMENTSHADERATIPROC', +'PFNGLDELETEFRAGMENTSHADERATIPROC', 'PFNGLBEGINFRAGMENTSHADERATIPROC', +'PFNGLENDFRAGMENTSHADERATIPROC', 'PFNGLPASSTEXCOORDATIPROC', +'PFNGLSAMPLEMAPATIPROC', 'PFNGLCOLORFRAGMENTOP1ATIPROC', +'PFNGLCOLORFRAGMENTOP2ATIPROC', 'PFNGLCOLORFRAGMENTOP3ATIPROC', +'PFNGLALPHAFRAGMENTOP1ATIPROC', 'PFNGLALPHAFRAGMENTOP2ATIPROC', +'PFNGLALPHAFRAGMENTOP3ATIPROC', 'PFNGLSETFRAGMENTSHADERCONSTANTATIPROC', +'GL_ATI_pn_triangles', 'glPNTrianglesiATI', 'glPNTrianglesfATI', +'PFNGLPNTRIANGLESIATIPROC', 'PFNGLPNTRIANGLESFATIPROC', +'GL_ATI_vertex_array_object', 'glNewObjectBufferATI', 'glIsObjectBufferATI', +'glUpdateObjectBufferATI', 'glGetObjectBufferfvATI', 'glGetObjectBufferivATI', +'glFreeObjectBufferATI', 'glArrayObjectATI', 'glGetArrayObjectfvATI', +'glGetArrayObjectivATI', 'glVariantArrayObjectATI', +'glGetVariantArrayObjectfvATI', 'glGetVariantArrayObjectivATI', +'PFNGLNEWOBJECTBUFFERATIPROC', 'PFNGLISOBJECTBUFFERATIPROC', +'PFNGLUPDATEOBJECTBUFFERATIPROC', 'PFNGLGETOBJECTBUFFERFVATIPROC', +'PFNGLGETOBJECTBUFFERIVATIPROC', 'PFNGLFREEOBJECTBUFFERATIPROC', +'PFNGLARRAYOBJECTATIPROC', 'PFNGLGETARRAYOBJECTFVATIPROC', +'PFNGLGETARRAYOBJECTIVATIPROC', 'PFNGLVARIANTARRAYOBJECTATIPROC', +'PFNGLGETVARIANTARRAYOBJECTFVATIPROC', 'PFNGLGETVARIANTARRAYOBJECTIVATIPROC', +'GL_EXT_vertex_shader', 'glBeginVertexShaderEXT', 'glEndVertexShaderEXT', +'glBindVertexShaderEXT', 'glGenVertexShadersEXT', 'glDeleteVertexShaderEXT', +'glShaderOp1EXT', 'glShaderOp2EXT', 'glShaderOp3EXT', 'glSwizzleEXT', +'glWriteMaskEXT', 'glInsertComponentEXT', 'glExtractComponentEXT', +'glGenSymbolsEXT', 'glSetInvariantEXT', 'glSetLocalConstantEXT', +'glVariantbvEXT', 'glVariantsvEXT', 'glVariantivEXT', 'glVariantfvEXT', +'glVariantdvEXT', 'glVariantubvEXT', 'glVariantusvEXT', 'glVariantuivEXT', +'glVariantPointerEXT', 'glEnableVariantClientStateEXT', +'glDisableVariantClientStateEXT', 'glBindLightParameterEXT', +'glBindMaterialParameterEXT', 'glBindTexGenParameterEXT', +'glBindTextureUnitParameterEXT', 'glBindParameterEXT', +'glIsVariantEnabledEXT', 'glGetVariantBooleanvEXT', 'glGetVariantIntegervEXT', +'glGetVariantFloatvEXT', 'glGetVariantPointervEXT', +'glGetInvariantBooleanvEXT', 'glGetInvariantIntegervEXT', +'glGetInvariantFloatvEXT', 'glGetLocalConstantBooleanvEXT', +'glGetLocalConstantIntegervEXT', 'glGetLocalConstantFloatvEXT', +'PFNGLBEGINVERTEXSHADEREXTPROC', 'PFNGLENDVERTEXSHADEREXTPROC', +'PFNGLBINDVERTEXSHADEREXTPROC', 'PFNGLGENVERTEXSHADERSEXTPROC', +'PFNGLDELETEVERTEXSHADEREXTPROC', 'PFNGLSHADEROP1EXTPROC', +'PFNGLSHADEROP2EXTPROC', 'PFNGLSHADEROP3EXTPROC', 'PFNGLSWIZZLEEXTPROC', +'PFNGLWRITEMASKEXTPROC', 'PFNGLINSERTCOMPONENTEXTPROC', +'PFNGLEXTRACTCOMPONENTEXTPROC', 'PFNGLGENSYMBOLSEXTPROC', +'PFNGLSETINVARIANTEXTPROC', 'PFNGLSETLOCALCONSTANTEXTPROC', +'PFNGLVARIANTBVEXTPROC', 'PFNGLVARIANTSVEXTPROC', 'PFNGLVARIANTIVEXTPROC', +'PFNGLVARIANTFVEXTPROC', 'PFNGLVARIANTDVEXTPROC', 'PFNGLVARIANTUBVEXTPROC', +'PFNGLVARIANTUSVEXTPROC', 'PFNGLVARIANTUIVEXTPROC', +'PFNGLVARIANTPOINTEREXTPROC', 'PFNGLENABLEVARIANTCLIENTSTATEEXTPROC', +'PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC', 'PFNGLBINDLIGHTPARAMETEREXTPROC', +'PFNGLBINDMATERIALPARAMETEREXTPROC', 'PFNGLBINDTEXGENPARAMETEREXTPROC', +'PFNGLBINDTEXTUREUNITPARAMETEREXTPROC', 'PFNGLBINDPARAMETEREXTPROC', +'PFNGLISVARIANTENABLEDEXTPROC', 'PFNGLGETVARIANTBOOLEANVEXTPROC', +'PFNGLGETVARIANTINTEGERVEXTPROC', 'PFNGLGETVARIANTFLOATVEXTPROC', +'PFNGLGETVARIANTPOINTERVEXTPROC', 'PFNGLGETINVARIANTBOOLEANVEXTPROC', +'PFNGLGETINVARIANTINTEGERVEXTPROC', 'PFNGLGETINVARIANTFLOATVEXTPROC', +'PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC', +'PFNGLGETLOCALCONSTANTINTEGERVEXTPROC', 'PFNGLGETLOCALCONSTANTFLOATVEXTPROC', +'GL_ATI_vertex_streams', 'glVertexStream1sATI', 'glVertexStream1svATI', +'glVertexStream1iATI', 'glVertexStream1ivATI', 'glVertexStream1fATI', +'glVertexStream1fvATI', 'glVertexStream1dATI', 'glVertexStream1dvATI', +'glVertexStream2sATI', 'glVertexStream2svATI', 'glVertexStream2iATI', +'glVertexStream2ivATI', 'glVertexStream2fATI', 'glVertexStream2fvATI', +'glVertexStream2dATI', 'glVertexStream2dvATI', 'glVertexStream3sATI', +'glVertexStream3svATI', 'glVertexStream3iATI', 'glVertexStream3ivATI', +'glVertexStream3fATI', 'glVertexStream3fvATI', 'glVertexStream3dATI', +'glVertexStream3dvATI', 'glVertexStream4sATI', 'glVertexStream4svATI', +'glVertexStream4iATI', 'glVertexStream4ivATI', 'glVertexStream4fATI', +'glVertexStream4fvATI', 'glVertexStream4dATI', 'glVertexStream4dvATI', +'glNormalStream3bATI', 'glNormalStream3bvATI', 'glNormalStream3sATI', +'glNormalStream3svATI', 'glNormalStream3iATI', 'glNormalStream3ivATI', +'glNormalStream3fATI', 'glNormalStream3fvATI', 'glNormalStream3dATI', +'glNormalStream3dvATI', 'glClientActiveVertexStreamATI', +'glVertexBlendEnviATI', 'glVertexBlendEnvfATI', 'PFNGLVERTEXSTREAM1SATIPROC', +'PFNGLVERTEXSTREAM1SVATIPROC', 'PFNGLVERTEXSTREAM1IATIPROC', +'PFNGLVERTEXSTREAM1IVATIPROC', 'PFNGLVERTEXSTREAM1FATIPROC', +'PFNGLVERTEXSTREAM1FVATIPROC', 'PFNGLVERTEXSTREAM1DATIPROC', +'PFNGLVERTEXSTREAM1DVATIPROC', 'PFNGLVERTEXSTREAM2SATIPROC', +'PFNGLVERTEXSTREAM2SVATIPROC', 'PFNGLVERTEXSTREAM2IATIPROC', +'PFNGLVERTEXSTREAM2IVATIPROC', 'PFNGLVERTEXSTREAM2FATIPROC', +'PFNGLVERTEXSTREAM2FVATIPROC', 'PFNGLVERTEXSTREAM2DATIPROC', +'PFNGLVERTEXSTREAM2DVATIPROC', 'PFNGLVERTEXSTREAM3SATIPROC', +'PFNGLVERTEXSTREAM3SVATIPROC', 'PFNGLVERTEXSTREAM3IATIPROC', +'PFNGLVERTEXSTREAM3IVATIPROC', 'PFNGLVERTEXSTREAM3FATIPROC', +'PFNGLVERTEXSTREAM3FVATIPROC', 'PFNGLVERTEXSTREAM3DATIPROC', +'PFNGLVERTEXSTREAM3DVATIPROC', 'PFNGLVERTEXSTREAM4SATIPROC', +'PFNGLVERTEXSTREAM4SVATIPROC', 'PFNGLVERTEXSTREAM4IATIPROC', +'PFNGLVERTEXSTREAM4IVATIPROC', 'PFNGLVERTEXSTREAM4FATIPROC', +'PFNGLVERTEXSTREAM4FVATIPROC', 'PFNGLVERTEXSTREAM4DATIPROC', +'PFNGLVERTEXSTREAM4DVATIPROC', 'PFNGLNORMALSTREAM3BATIPROC', +'PFNGLNORMALSTREAM3BVATIPROC', 'PFNGLNORMALSTREAM3SATIPROC', +'PFNGLNORMALSTREAM3SVATIPROC', 'PFNGLNORMALSTREAM3IATIPROC', +'PFNGLNORMALSTREAM3IVATIPROC', 'PFNGLNORMALSTREAM3FATIPROC', +'PFNGLNORMALSTREAM3FVATIPROC', 'PFNGLNORMALSTREAM3DATIPROC', +'PFNGLNORMALSTREAM3DVATIPROC', 'PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC', +'PFNGLVERTEXBLENDENVIATIPROC', 'PFNGLVERTEXBLENDENVFATIPROC', +'GL_ATI_element_array', 'glElementPointerATI', 'glDrawElementArrayATI', +'glDrawRangeElementArrayATI', 'PFNGLELEMENTPOINTERATIPROC', +'PFNGLDRAWELEMENTARRAYATIPROC', 'PFNGLDRAWRANGEELEMENTARRAYATIPROC', +'GL_SUN_mesh_array', 'glDrawMeshArraysSUN', 'PFNGLDRAWMESHARRAYSSUNPROC', +'GL_SUN_slice_accum', 'GL_NV_multisample_filter_hint', 'GL_NV_depth_clamp', +'GL_NV_occlusion_query', 'glGenOcclusionQueriesNV', +'glDeleteOcclusionQueriesNV', 'glIsOcclusionQueryNV', +'glBeginOcclusionQueryNV', 'glEndOcclusionQueryNV', 'glGetOcclusionQueryivNV', +'glGetOcclusionQueryuivNV', 'PFNGLGENOCCLUSIONQUERIESNVPROC', +'PFNGLDELETEOCCLUSIONQUERIESNVPROC', 'PFNGLISOCCLUSIONQUERYNVPROC', +'PFNGLBEGINOCCLUSIONQUERYNVPROC', 'PFNGLENDOCCLUSIONQUERYNVPROC', +'PFNGLGETOCCLUSIONQUERYIVNVPROC', 'PFNGLGETOCCLUSIONQUERYUIVNVPROC', +'GL_NV_point_sprite', 'glPointParameteriNV', 'glPointParameterivNV', +'PFNGLPOINTPARAMETERINVPROC', 'PFNGLPOINTPARAMETERIVNVPROC', +'GL_NV_texture_shader3', 'GL_NV_vertex_program1_1', 'GL_EXT_shadow_funcs', +'GL_EXT_stencil_two_side', 'glActiveStencilFaceEXT', +'PFNGLACTIVESTENCILFACEEXTPROC', 'GL_ATI_text_fragment_shader', +'GL_APPLE_client_storage', 'GL_APPLE_element_array', 'glElementPointerAPPLE', +'glDrawElementArrayAPPLE', 'glDrawRangeElementArrayAPPLE', +'glMultiDrawElementArrayAPPLE', 'glMultiDrawRangeElementArrayAPPLE', +'PFNGLELEMENTPOINTERAPPLEPROC', 'PFNGLDRAWELEMENTARRAYAPPLEPROC', +'PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC', 'PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC', +'PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC', 'GL_APPLE_fence', +'glGenFencesAPPLE', 'glDeleteFencesAPPLE', 'glSetFenceAPPLE', +'glIsFenceAPPLE', 'glTestFenceAPPLE', 'glFinishFenceAPPLE', +'glTestObjectAPPLE', 'glFinishObjectAPPLE', 'PFNGLGENFENCESAPPLEPROC', +'PFNGLDELETEFENCESAPPLEPROC', 'PFNGLSETFENCEAPPLEPROC', +'PFNGLISFENCEAPPLEPROC', 'PFNGLTESTFENCEAPPLEPROC', +'PFNGLFINISHFENCEAPPLEPROC', 'PFNGLTESTOBJECTAPPLEPROC', +'PFNGLFINISHOBJECTAPPLEPROC', 'GL_APPLE_vertex_array_object', +'glBindVertexArrayAPPLE', 'glDeleteVertexArraysAPPLE', +'glGenVertexArraysAPPLE', 'glIsVertexArrayAPPLE', +'PFNGLBINDVERTEXARRAYAPPLEPROC', 'PFNGLDELETEVERTEXARRAYSAPPLEPROC', +'PFNGLGENVERTEXARRAYSAPPLEPROC', 'PFNGLISVERTEXARRAYAPPLEPROC', +'GL_APPLE_vertex_array_range', 'glVertexArrayRangeAPPLE', +'glFlushVertexArrayRangeAPPLE', 'glVertexArrayParameteriAPPLE', +'PFNGLVERTEXARRAYRANGEAPPLEPROC', 'PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC', +'PFNGLVERTEXARRAYPARAMETERIAPPLEPROC', 'GL_APPLE_ycbcr_422', 'GL_S3_s3tc', +'GL_ATI_draw_buffers', 'glDrawBuffersATI', 'PFNGLDRAWBUFFERSATIPROC', +'GL_ATI_pixel_format_float', 'GL_ATI_texture_env_combine3', +'GL_ATI_texture_float', 'GL_NV_float_buffer', 'GL_NV_fragment_program', +'glProgramNamedParameter4fNV', 'glProgramNamedParameter4dNV', +'glProgramNamedParameter4fvNV', 'glProgramNamedParameter4dvNV', +'glGetProgramNamedParameterfvNV', 'glGetProgramNamedParameterdvNV', +'PFNGLPROGRAMNAMEDPARAMETER4FNVPROC', 'PFNGLPROGRAMNAMEDPARAMETER4DNVPROC', +'PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC', 'PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC', +'PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC', +'PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC', 'GL_NV_half_float', 'glVertex2hNV', +'glVertex2hvNV', 'glVertex3hNV', 'glVertex3hvNV', 'glVertex4hNV', +'glVertex4hvNV', 'glNormal3hNV', 'glNormal3hvNV', 'glColor3hNV', +'glColor3hvNV', 'glColor4hNV', 'glColor4hvNV', 'glTexCoord1hNV', +'glTexCoord1hvNV', 'glTexCoord2hNV', 'glTexCoord2hvNV', 'glTexCoord3hNV', +'glTexCoord3hvNV', 'glTexCoord4hNV', 'glTexCoord4hvNV', 'glMultiTexCoord1hNV', +'glMultiTexCoord1hvNV', 'glMultiTexCoord2hNV', 'glMultiTexCoord2hvNV', +'glMultiTexCoord3hNV', 'glMultiTexCoord3hvNV', 'glMultiTexCoord4hNV', +'glMultiTexCoord4hvNV', 'glFogCoordhNV', 'glFogCoordhvNV', +'glSecondaryColor3hNV', 'glSecondaryColor3hvNV', 'glVertexWeighthNV', +'glVertexWeighthvNV', 'glVertexAttrib1hNV', 'glVertexAttrib1hvNV', +'glVertexAttrib2hNV', 'glVertexAttrib2hvNV', 'glVertexAttrib3hNV', +'glVertexAttrib3hvNV', 'glVertexAttrib4hNV', 'glVertexAttrib4hvNV', +'glVertexAttribs1hvNV', 'glVertexAttribs2hvNV', 'glVertexAttribs3hvNV', +'glVertexAttribs4hvNV', 'PFNGLVERTEX2HNVPROC', 'PFNGLVERTEX2HVNVPROC', +'PFNGLVERTEX3HNVPROC', 'PFNGLVERTEX3HVNVPROC', 'PFNGLVERTEX4HNVPROC', +'PFNGLVERTEX4HVNVPROC', 'PFNGLNORMAL3HNVPROC', 'PFNGLNORMAL3HVNVPROC', +'PFNGLCOLOR3HNVPROC', 'PFNGLCOLOR3HVNVPROC', 'PFNGLCOLOR4HNVPROC', +'PFNGLCOLOR4HVNVPROC', 'PFNGLTEXCOORD1HNVPROC', 'PFNGLTEXCOORD1HVNVPROC', +'PFNGLTEXCOORD2HNVPROC', 'PFNGLTEXCOORD2HVNVPROC', 'PFNGLTEXCOORD3HNVPROC', +'PFNGLTEXCOORD3HVNVPROC', 'PFNGLTEXCOORD4HNVPROC', 'PFNGLTEXCOORD4HVNVPROC', +'PFNGLMULTITEXCOORD1HNVPROC', 'PFNGLMULTITEXCOORD1HVNVPROC', +'PFNGLMULTITEXCOORD2HNVPROC', 'PFNGLMULTITEXCOORD2HVNVPROC', +'PFNGLMULTITEXCOORD3HNVPROC', 'PFNGLMULTITEXCOORD3HVNVPROC', +'PFNGLMULTITEXCOORD4HNVPROC', 'PFNGLMULTITEXCOORD4HVNVPROC', +'PFNGLFOGCOORDHNVPROC', 'PFNGLFOGCOORDHVNVPROC', +'PFNGLSECONDARYCOLOR3HNVPROC', 'PFNGLSECONDARYCOLOR3HVNVPROC', +'PFNGLVERTEXWEIGHTHNVPROC', 'PFNGLVERTEXWEIGHTHVNVPROC', +'PFNGLVERTEXATTRIB1HNVPROC', 'PFNGLVERTEXATTRIB1HVNVPROC', +'PFNGLVERTEXATTRIB2HNVPROC', 'PFNGLVERTEXATTRIB2HVNVPROC', +'PFNGLVERTEXATTRIB3HNVPROC', 'PFNGLVERTEXATTRIB3HVNVPROC', +'PFNGLVERTEXATTRIB4HNVPROC', 'PFNGLVERTEXATTRIB4HVNVPROC', +'PFNGLVERTEXATTRIBS1HVNVPROC', 'PFNGLVERTEXATTRIBS2HVNVPROC', +'PFNGLVERTEXATTRIBS3HVNVPROC', 'PFNGLVERTEXATTRIBS4HVNVPROC', +'GL_NV_pixel_data_range', 'glPixelDataRangeNV', 'glFlushPixelDataRangeNV', +'PFNGLPIXELDATARANGENVPROC', 'PFNGLFLUSHPIXELDATARANGENVPROC', +'GL_NV_primitive_restart', 'glPrimitiveRestartNV', +'glPrimitiveRestartIndexNV', 'PFNGLPRIMITIVERESTARTNVPROC', +'PFNGLPRIMITIVERESTARTINDEXNVPROC', 'GL_NV_texture_expand_normal', +'GL_NV_vertex_program2', 'GL_ATI_map_object_buffer', 'glMapObjectBufferATI', +'glUnmapObjectBufferATI', 'PFNGLMAPOBJECTBUFFERATIPROC', +'PFNGLUNMAPOBJECTBUFFERATIPROC', 'GL_ATI_separate_stencil', +'glStencilOpSeparateATI', 'glStencilFuncSeparateATI', +'PFNGLSTENCILOPSEPARATEATIPROC', 'PFNGLSTENCILFUNCSEPARATEATIPROC', +'GL_ATI_vertex_attrib_array_object', 'glVertexAttribArrayObjectATI', +'glGetVertexAttribArrayObjectfvATI', 'glGetVertexAttribArrayObjectivATI', +'PFNGLVERTEXATTRIBARRAYOBJECTATIPROC', +'PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC', +'PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC', 'GL_OES_read_format', +'GL_EXT_depth_bounds_test', 'glDepthBoundsEXT', 'PFNGLDEPTHBOUNDSEXTPROC', +'GL_EXT_texture_mirror_clamp', 'GL_EXT_blend_equation_separate', +'glBlendEquationSeparateEXT', 'PFNGLBLENDEQUATIONSEPARATEEXTPROC', +'GL_MESA_pack_invert', 'GL_MESA_ycbcr_texture', 'GL_EXT_pixel_buffer_object', +'GL_NV_fragment_program_option', 'GL_NV_fragment_program2', +'GL_NV_vertex_program2_option', 'GL_NV_vertex_program3', +'GL_EXT_framebuffer_object', 'glIsRenderbufferEXT', 'glBindRenderbufferEXT', +'glDeleteRenderbuffersEXT', 'glGenRenderbuffersEXT', +'glRenderbufferStorageEXT', 'glGetRenderbufferParameterivEXT', +'glIsFramebufferEXT', 'glBindFramebufferEXT', 'glDeleteFramebuffersEXT', +'glGenFramebuffersEXT', 'glCheckFramebufferStatusEXT', +'glFramebufferTexture1DEXT', 'glFramebufferTexture2DEXT', +'glFramebufferTexture3DEXT', 'glFramebufferRenderbufferEXT', +'glGetFramebufferAttachmentParameterivEXT', 'glGenerateMipmapEXT', +'PFNGLISRENDERBUFFEREXTPROC', 'PFNGLBINDRENDERBUFFEREXTPROC', +'PFNGLDELETERENDERBUFFERSEXTPROC', 'PFNGLGENRENDERBUFFERSEXTPROC', +'PFNGLRENDERBUFFERSTORAGEEXTPROC', 'PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC', +'PFNGLISFRAMEBUFFEREXTPROC', 'PFNGLBINDFRAMEBUFFEREXTPROC', +'PFNGLDELETEFRAMEBUFFERSEXTPROC', 'PFNGLGENFRAMEBUFFERSEXTPROC', +'PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC', 'PFNGLFRAMEBUFFERTEXTURE1DEXTPROC', +'PFNGLFRAMEBUFFERTEXTURE2DEXTPROC', 'PFNGLFRAMEBUFFERTEXTURE3DEXTPROC', +'PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC', +'PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC', +'PFNGLGENERATEMIPMAPEXTPROC', 'GL_GREMEDY_string_marker', +'glStringMarkerGREMEDY', 'PFNGLSTRINGMARKERGREMEDYPROC', 'GL_EXT_Cg_shader', +'GL_EXT_timer_query', 'glGetQueryObjecti64vEXT', 'glGetQueryObjectui64vEXT', +'PFNGLGETQUERYOBJECTI64VEXTPROC', 'PFNGLGETQUERYOBJECTUI64VEXTPROC', +'GL_EXT_texture_buffer_object', 'glTexBufferEXT', 'PFNGLTEXBUFFEREXTPROC', +'GL_NV_transform_feedback', 'glBeginTransformFeedbackNV', +'glEndTransformFeedbackNV', 'glTransformFeedbackAttribsNV', +'glBindBufferRangeNV', 'glBindBufferOffsetNV', 'glBindBufferBaseNV', +'glTransformFeedbackVaryingsNV', 'glActiveVaryingNV', +'glGetVaryingLocationNV', 'glGetActiveVaryingNV', +'glGetTransformFeedbackVaryingNV', 'PFNGLBEGINTRANSFORMFEEDBACKNVPROC', +'PFNGLENDTRANSFORMFEEDBACKNVPROC', 'PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC', +'PFNGLBINDBUFFERRANGENVPROC', 'PFNGLBINDBUFFEROFFSETNVPROC', +'PFNGLBINDBUFFERBASENVPROC', 'PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC', +'PFNGLACTIVEVARYINGNVPROC', 'PFNGLGETVARYINGLOCATIONNVPROC', +'PFNGLGETACTIVEVARYINGNVPROC', 'PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC', +'GL_NV_depth_buffer_float', 'glDepthRangedNV', 'glClearDepthdNV', +'glDepthBoundsdNV', 'PFNGLDEPTHRANGEDNVPROC', 'PFNGLCLEARDEPTHDNVPROC', +'PFNGLDEPTHBOUNDSDNVPROC', 'GL_EXT_texture_compression_latc', +'GL_EXT_framebuffer_sRGB', 'GL_EXT_texture_shared_exponent', +'GL_EXT_packed_float', 'GL_EXT_texture_array', 'GL_EXT_draw_buffers2', +'glColorMaskIndexedEXT', 'glGetBooleanIndexedvEXT', 'glGetIntegerIndexedvEXT', +'glEnableIndexedEXT', 'glDisableIndexedEXT', 'glIsEnabledIndexedEXT', +'PFNGLCOLORMASKINDEXEDEXTPROC', 'PFNGLGETBOOLEANINDEXEDVEXTPROC', +'PFNGLGETINTEGERINDEXEDVEXTPROC', 'PFNGLENABLEINDEXEDEXTPROC', +'PFNGLDISABLEINDEXEDEXTPROC', 'PFNGLISENABLEDINDEXEDEXTPROC', +'GL_EXT_texture_integer', 'glTexParameterIivEXT', 'glTexParameterIuivEXT', +'glGetTexParameterIivEXT', 'glGetTexParameterIuivEXT', 'glClearColorIiEXT', +'glClearColorIuiEXT', 'PFNGLTEXPARAMETERIIVEXTPROC', +'PFNGLTEXPARAMETERIUIVEXTPROC', 'PFNGLGETTEXPARAMETERIIVEXTPROC', +'PFNGLGETTEXPARAMETERIUIVEXTPROC', 'PFNGLCLEARCOLORIIEXTPROC', +'PFNGLCLEARCOLORIUIEXTPROC', 'GL_EXT_bindable_uniform', 'glUniformBufferEXT', +'glGetUniformBufferSizeEXT', 'glGetUniformOffsetEXT', +'PFNGLUNIFORMBUFFEREXTPROC', 'PFNGLGETUNIFORMBUFFERSIZEEXTPROC', +'PFNGLGETUNIFORMOFFSETEXTPROC', 'GL_EXT_gpu_shader4', 'glGetUniformuivEXT', +'glBindFragDataLocationEXT', 'glGetFragDataLocationEXT', 'glUniform1uiEXT', +'glUniform2uiEXT', 'glUniform3uiEXT', 'glUniform4uiEXT', 'glUniform1uivEXT', +'glUniform2uivEXT', 'glUniform3uivEXT', 'glUniform4uivEXT', +'glVertexAttribI1iEXT', 'glVertexAttribI2iEXT', 'glVertexAttribI3iEXT', +'glVertexAttribI4iEXT', 'glVertexAttribI1uiEXT', 'glVertexAttribI2uiEXT', +'glVertexAttribI3uiEXT', 'glVertexAttribI4uiEXT', 'glVertexAttribI1ivEXT', +'glVertexAttribI2ivEXT', 'glVertexAttribI3ivEXT', 'glVertexAttribI4ivEXT', +'glVertexAttribI1uivEXT', 'glVertexAttribI2uivEXT', 'glVertexAttribI3uivEXT', +'glVertexAttribI4uivEXT', 'glVertexAttribI4bvEXT', 'glVertexAttribI4svEXT', +'glVertexAttribI4ubvEXT', 'glVertexAttribI4usvEXT', +'glVertexAttribIPointerEXT', 'glGetVertexAttribIivEXT', +'glGetVertexAttribIuivEXT', 'PFNGLGETUNIFORMUIVEXTPROC', +'PFNGLBINDFRAGDATALOCATIONEXTPROC', 'PFNGLGETFRAGDATALOCATIONEXTPROC', +'PFNGLUNIFORM1UIEXTPROC', 'PFNGLUNIFORM2UIEXTPROC', 'PFNGLUNIFORM3UIEXTPROC', +'PFNGLUNIFORM4UIEXTPROC', 'PFNGLUNIFORM1UIVEXTPROC', +'PFNGLUNIFORM2UIVEXTPROC', 'PFNGLUNIFORM3UIVEXTPROC', +'PFNGLUNIFORM4UIVEXTPROC', 'PFNGLVERTEXATTRIBI1IEXTPROC', +'PFNGLVERTEXATTRIBI2IEXTPROC', 'PFNGLVERTEXATTRIBI3IEXTPROC', +'PFNGLVERTEXATTRIBI4IEXTPROC', 'PFNGLVERTEXATTRIBI1UIEXTPROC', +'PFNGLVERTEXATTRIBI2UIEXTPROC', 'PFNGLVERTEXATTRIBI3UIEXTPROC', +'PFNGLVERTEXATTRIBI4UIEXTPROC', 'PFNGLVERTEXATTRIBI1IVEXTPROC', +'PFNGLVERTEXATTRIBI2IVEXTPROC', 'PFNGLVERTEXATTRIBI3IVEXTPROC', +'PFNGLVERTEXATTRIBI4IVEXTPROC', 'PFNGLVERTEXATTRIBI1UIVEXTPROC', +'PFNGLVERTEXATTRIBI2UIVEXTPROC', 'PFNGLVERTEXATTRIBI3UIVEXTPROC', +'PFNGLVERTEXATTRIBI4UIVEXTPROC', 'PFNGLVERTEXATTRIBI4BVEXTPROC', +'PFNGLVERTEXATTRIBI4SVEXTPROC', 'PFNGLVERTEXATTRIBI4UBVEXTPROC', +'PFNGLVERTEXATTRIBI4USVEXTPROC', 'PFNGLVERTEXATTRIBIPOINTEREXTPROC', +'PFNGLGETVERTEXATTRIBIIVEXTPROC', 'PFNGLGETVERTEXATTRIBIUIVEXTPROC', +'GL_EXT_geometry_shader4', 'glProgramParameteriEXT', +'glFramebufferTextureEXT', 'glFramebufferTextureLayerEXT', +'glFramebufferTextureFaceEXT', 'PFNGLPROGRAMPARAMETERIEXTPROC', +'PFNGLFRAMEBUFFERTEXTUREEXTPROC', 'PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC', +'PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC', 'GL_NV_geometry_program4', +'glProgramVertexLimitNV', 'PFNGLPROGRAMVERTEXLIMITNVPROC', +'GL_NV_gpu_program4', 'glProgramLocalParameterI4iNV', +'glProgramLocalParameterI4ivNV', 'glProgramLocalParametersI4ivNV', +'glProgramLocalParameterI4uiNV', 'glProgramLocalParameterI4uivNV', +'glProgramLocalParametersI4uivNV', 'glProgramEnvParameterI4iNV', +'glProgramEnvParameterI4ivNV', 'glProgramEnvParametersI4ivNV', +'glProgramEnvParameterI4uiNV', 'glProgramEnvParameterI4uivNV', +'glProgramEnvParametersI4uivNV', 'glGetProgramLocalParameterIivNV', +'glGetProgramLocalParameterIuivNV', 'glGetProgramEnvParameterIivNV', +'glGetProgramEnvParameterIuivNV', 'PFNGLPROGRAMLOCALPARAMETERI4INVPROC', +'PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC', +'PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC', +'PFNGLPROGRAMLOCALPARAMETERI4UINVPROC', +'PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC', +'PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC', 'PFNGLPROGRAMENVPARAMETERI4INVPROC', +'PFNGLPROGRAMENVPARAMETERI4IVNVPROC', 'PFNGLPROGRAMENVPARAMETERSI4IVNVPROC', +'PFNGLPROGRAMENVPARAMETERI4UINVPROC', 'PFNGLPROGRAMENVPARAMETERI4UIVNVPROC', +'PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC', +'PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC', +'PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC', +'PFNGLGETPROGRAMENVPARAMETERIIVNVPROC', +'PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC', 'GL_NV_parameter_buffer_object', +'glProgramBufferParametersfvNV', 'glProgramBufferParametersIivNV', +'glProgramBufferParametersIuivNV', 'PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC', +'PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC', +'PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC', 'GL_EXT_framebuffer_multisample', +'glRenderbufferStorageMultisampleEXT', +'PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC', +'GL_NV_framebuffer_multisample_coverage', +'glRenderbufferStorageMultisampleCoverageNV', +'PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC', +'GL_EXT_framebuffer_blit', 'glBlitFramebufferEXT', +'PFNGLBLITFRAMEBUFFEREXTPROC', 'GL_EXT_draw_instanced', +'glDrawArraysInstancedEXT', 'glDrawElementsInstancedEXT', +'PFNGLDRAWARRAYSINSTANCEDEXTPROC', 'PFNGLDRAWELEMENTSINSTANCEDEXTPROC', +'GL_EXT_texture_compression_rgtc'] +# END GENERATED CONTENT (do not edit above this line) + + + diff --git a/pyglet/gl/glu.py b/pyglet/gl/glu.py new file mode 100644 index 0000000..2644764 --- /dev/null +++ b/pyglet/gl/glu.py @@ -0,0 +1,494 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +'''Wrapper for /usr/include/GL/glu.h + +Generated by tools/gengl.py. +Do not modify this file. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: glu.py 1579 2008-01-15 14:47:19Z Alex.Holkner $' + +from ctypes import * +from pyglet.gl.lib import link_GLU as _link_function +from pyglet.gl.lib import c_ptrdiff_t + +# BEGIN GENERATED CONTENT (do not edit below this line) + +# This content is generated by tools/gengl.py. +# Wrapper for /usr/include/GL/glu.h + + +GLU_EXT_object_space_tess = 1 # /usr/include/GL/glu.h:58 +GLU_EXT_nurbs_tessellator = 1 # /usr/include/GL/glu.h:59 +GLU_FALSE = 0 # /usr/include/GL/glu.h:62 +GLU_TRUE = 1 # /usr/include/GL/glu.h:63 +GLU_VERSION_1_1 = 1 # /usr/include/GL/glu.h:66 +GLU_VERSION_1_2 = 1 # /usr/include/GL/glu.h:67 +GLU_VERSION_1_3 = 1 # /usr/include/GL/glu.h:68 +GLU_VERSION = 100800 # /usr/include/GL/glu.h:71 +GLU_EXTENSIONS = 100801 # /usr/include/GL/glu.h:72 +GLU_INVALID_ENUM = 100900 # /usr/include/GL/glu.h:75 +GLU_INVALID_VALUE = 100901 # /usr/include/GL/glu.h:76 +GLU_OUT_OF_MEMORY = 100902 # /usr/include/GL/glu.h:77 +GLU_INCOMPATIBLE_GL_VERSION = 100903 # /usr/include/GL/glu.h:78 +GLU_INVALID_OPERATION = 100904 # /usr/include/GL/glu.h:79 +GLU_OUTLINE_POLYGON = 100240 # /usr/include/GL/glu.h:83 +GLU_OUTLINE_PATCH = 100241 # /usr/include/GL/glu.h:84 +GLU_NURBS_ERROR = 100103 # /usr/include/GL/glu.h:87 +GLU_ERROR = 100103 # /usr/include/GL/glu.h:88 +GLU_NURBS_BEGIN = 100164 # /usr/include/GL/glu.h:89 +GLU_NURBS_BEGIN_EXT = 100164 # /usr/include/GL/glu.h:90 +GLU_NURBS_VERTEX = 100165 # /usr/include/GL/glu.h:91 +GLU_NURBS_VERTEX_EXT = 100165 # /usr/include/GL/glu.h:92 +GLU_NURBS_NORMAL = 100166 # /usr/include/GL/glu.h:93 +GLU_NURBS_NORMAL_EXT = 100166 # /usr/include/GL/glu.h:94 +GLU_NURBS_COLOR = 100167 # /usr/include/GL/glu.h:95 +GLU_NURBS_COLOR_EXT = 100167 # /usr/include/GL/glu.h:96 +GLU_NURBS_TEXTURE_COORD = 100168 # /usr/include/GL/glu.h:97 +GLU_NURBS_TEX_COORD_EXT = 100168 # /usr/include/GL/glu.h:98 +GLU_NURBS_END = 100169 # /usr/include/GL/glu.h:99 +GLU_NURBS_END_EXT = 100169 # /usr/include/GL/glu.h:100 +GLU_NURBS_BEGIN_DATA = 100170 # /usr/include/GL/glu.h:101 +GLU_NURBS_BEGIN_DATA_EXT = 100170 # /usr/include/GL/glu.h:102 +GLU_NURBS_VERTEX_DATA = 100171 # /usr/include/GL/glu.h:103 +GLU_NURBS_VERTEX_DATA_EXT = 100171 # /usr/include/GL/glu.h:104 +GLU_NURBS_NORMAL_DATA = 100172 # /usr/include/GL/glu.h:105 +GLU_NURBS_NORMAL_DATA_EXT = 100172 # /usr/include/GL/glu.h:106 +GLU_NURBS_COLOR_DATA = 100173 # /usr/include/GL/glu.h:107 +GLU_NURBS_COLOR_DATA_EXT = 100173 # /usr/include/GL/glu.h:108 +GLU_NURBS_TEXTURE_COORD_DATA = 100174 # /usr/include/GL/glu.h:109 +GLU_NURBS_TEX_COORD_DATA_EXT = 100174 # /usr/include/GL/glu.h:110 +GLU_NURBS_END_DATA = 100175 # /usr/include/GL/glu.h:111 +GLU_NURBS_END_DATA_EXT = 100175 # /usr/include/GL/glu.h:112 +GLU_NURBS_ERROR1 = 100251 # /usr/include/GL/glu.h:115 +GLU_NURBS_ERROR2 = 100252 # /usr/include/GL/glu.h:116 +GLU_NURBS_ERROR3 = 100253 # /usr/include/GL/glu.h:117 +GLU_NURBS_ERROR4 = 100254 # /usr/include/GL/glu.h:118 +GLU_NURBS_ERROR5 = 100255 # /usr/include/GL/glu.h:119 +GLU_NURBS_ERROR6 = 100256 # /usr/include/GL/glu.h:120 +GLU_NURBS_ERROR7 = 100257 # /usr/include/GL/glu.h:121 +GLU_NURBS_ERROR8 = 100258 # /usr/include/GL/glu.h:122 +GLU_NURBS_ERROR9 = 100259 # /usr/include/GL/glu.h:123 +GLU_NURBS_ERROR10 = 100260 # /usr/include/GL/glu.h:124 +GLU_NURBS_ERROR11 = 100261 # /usr/include/GL/glu.h:125 +GLU_NURBS_ERROR12 = 100262 # /usr/include/GL/glu.h:126 +GLU_NURBS_ERROR13 = 100263 # /usr/include/GL/glu.h:127 +GLU_NURBS_ERROR14 = 100264 # /usr/include/GL/glu.h:128 +GLU_NURBS_ERROR15 = 100265 # /usr/include/GL/glu.h:129 +GLU_NURBS_ERROR16 = 100266 # /usr/include/GL/glu.h:130 +GLU_NURBS_ERROR17 = 100267 # /usr/include/GL/glu.h:131 +GLU_NURBS_ERROR18 = 100268 # /usr/include/GL/glu.h:132 +GLU_NURBS_ERROR19 = 100269 # /usr/include/GL/glu.h:133 +GLU_NURBS_ERROR20 = 100270 # /usr/include/GL/glu.h:134 +GLU_NURBS_ERROR21 = 100271 # /usr/include/GL/glu.h:135 +GLU_NURBS_ERROR22 = 100272 # /usr/include/GL/glu.h:136 +GLU_NURBS_ERROR23 = 100273 # /usr/include/GL/glu.h:137 +GLU_NURBS_ERROR24 = 100274 # /usr/include/GL/glu.h:138 +GLU_NURBS_ERROR25 = 100275 # /usr/include/GL/glu.h:139 +GLU_NURBS_ERROR26 = 100276 # /usr/include/GL/glu.h:140 +GLU_NURBS_ERROR27 = 100277 # /usr/include/GL/glu.h:141 +GLU_NURBS_ERROR28 = 100278 # /usr/include/GL/glu.h:142 +GLU_NURBS_ERROR29 = 100279 # /usr/include/GL/glu.h:143 +GLU_NURBS_ERROR30 = 100280 # /usr/include/GL/glu.h:144 +GLU_NURBS_ERROR31 = 100281 # /usr/include/GL/glu.h:145 +GLU_NURBS_ERROR32 = 100282 # /usr/include/GL/glu.h:146 +GLU_NURBS_ERROR33 = 100283 # /usr/include/GL/glu.h:147 +GLU_NURBS_ERROR34 = 100284 # /usr/include/GL/glu.h:148 +GLU_NURBS_ERROR35 = 100285 # /usr/include/GL/glu.h:149 +GLU_NURBS_ERROR36 = 100286 # /usr/include/GL/glu.h:150 +GLU_NURBS_ERROR37 = 100287 # /usr/include/GL/glu.h:151 +GLU_AUTO_LOAD_MATRIX = 100200 # /usr/include/GL/glu.h:154 +GLU_CULLING = 100201 # /usr/include/GL/glu.h:155 +GLU_SAMPLING_TOLERANCE = 100203 # /usr/include/GL/glu.h:156 +GLU_DISPLAY_MODE = 100204 # /usr/include/GL/glu.h:157 +GLU_PARAMETRIC_TOLERANCE = 100202 # /usr/include/GL/glu.h:158 +GLU_SAMPLING_METHOD = 100205 # /usr/include/GL/glu.h:159 +GLU_U_STEP = 100206 # /usr/include/GL/glu.h:160 +GLU_V_STEP = 100207 # /usr/include/GL/glu.h:161 +GLU_NURBS_MODE = 100160 # /usr/include/GL/glu.h:162 +GLU_NURBS_MODE_EXT = 100160 # /usr/include/GL/glu.h:163 +GLU_NURBS_TESSELLATOR = 100161 # /usr/include/GL/glu.h:164 +GLU_NURBS_TESSELLATOR_EXT = 100161 # /usr/include/GL/glu.h:165 +GLU_NURBS_RENDERER = 100162 # /usr/include/GL/glu.h:166 +GLU_NURBS_RENDERER_EXT = 100162 # /usr/include/GL/glu.h:167 +GLU_OBJECT_PARAMETRIC_ERROR = 100208 # /usr/include/GL/glu.h:170 +GLU_OBJECT_PARAMETRIC_ERROR_EXT = 100208 # /usr/include/GL/glu.h:171 +GLU_OBJECT_PATH_LENGTH = 100209 # /usr/include/GL/glu.h:172 +GLU_OBJECT_PATH_LENGTH_EXT = 100209 # /usr/include/GL/glu.h:173 +GLU_PATH_LENGTH = 100215 # /usr/include/GL/glu.h:174 +GLU_PARAMETRIC_ERROR = 100216 # /usr/include/GL/glu.h:175 +GLU_DOMAIN_DISTANCE = 100217 # /usr/include/GL/glu.h:176 +GLU_MAP1_TRIM_2 = 100210 # /usr/include/GL/glu.h:179 +GLU_MAP1_TRIM_3 = 100211 # /usr/include/GL/glu.h:180 +GLU_POINT = 100010 # /usr/include/GL/glu.h:183 +GLU_LINE = 100011 # /usr/include/GL/glu.h:184 +GLU_FILL = 100012 # /usr/include/GL/glu.h:185 +GLU_SILHOUETTE = 100013 # /usr/include/GL/glu.h:186 +GLU_SMOOTH = 100000 # /usr/include/GL/glu.h:192 +GLU_FLAT = 100001 # /usr/include/GL/glu.h:193 +GLU_NONE = 100002 # /usr/include/GL/glu.h:194 +GLU_OUTSIDE = 100020 # /usr/include/GL/glu.h:197 +GLU_INSIDE = 100021 # /usr/include/GL/glu.h:198 +GLU_TESS_BEGIN = 100100 # /usr/include/GL/glu.h:201 +GLU_BEGIN = 100100 # /usr/include/GL/glu.h:202 +GLU_TESS_VERTEX = 100101 # /usr/include/GL/glu.h:203 +GLU_VERTEX = 100101 # /usr/include/GL/glu.h:204 +GLU_TESS_END = 100102 # /usr/include/GL/glu.h:205 +GLU_END = 100102 # /usr/include/GL/glu.h:206 +GLU_TESS_ERROR = 100103 # /usr/include/GL/glu.h:207 +GLU_TESS_EDGE_FLAG = 100104 # /usr/include/GL/glu.h:208 +GLU_EDGE_FLAG = 100104 # /usr/include/GL/glu.h:209 +GLU_TESS_COMBINE = 100105 # /usr/include/GL/glu.h:210 +GLU_TESS_BEGIN_DATA = 100106 # /usr/include/GL/glu.h:211 +GLU_TESS_VERTEX_DATA = 100107 # /usr/include/GL/glu.h:212 +GLU_TESS_END_DATA = 100108 # /usr/include/GL/glu.h:213 +GLU_TESS_ERROR_DATA = 100109 # /usr/include/GL/glu.h:214 +GLU_TESS_EDGE_FLAG_DATA = 100110 # /usr/include/GL/glu.h:215 +GLU_TESS_COMBINE_DATA = 100111 # /usr/include/GL/glu.h:216 +GLU_CW = 100120 # /usr/include/GL/glu.h:219 +GLU_CCW = 100121 # /usr/include/GL/glu.h:220 +GLU_INTERIOR = 100122 # /usr/include/GL/glu.h:221 +GLU_EXTERIOR = 100123 # /usr/include/GL/glu.h:222 +GLU_UNKNOWN = 100124 # /usr/include/GL/glu.h:223 +GLU_TESS_WINDING_RULE = 100140 # /usr/include/GL/glu.h:226 +GLU_TESS_BOUNDARY_ONLY = 100141 # /usr/include/GL/glu.h:227 +GLU_TESS_TOLERANCE = 100142 # /usr/include/GL/glu.h:228 +GLU_TESS_ERROR1 = 100151 # /usr/include/GL/glu.h:231 +GLU_TESS_ERROR2 = 100152 # /usr/include/GL/glu.h:232 +GLU_TESS_ERROR3 = 100153 # /usr/include/GL/glu.h:233 +GLU_TESS_ERROR4 = 100154 # /usr/include/GL/glu.h:234 +GLU_TESS_ERROR5 = 100155 # /usr/include/GL/glu.h:235 +GLU_TESS_ERROR6 = 100156 # /usr/include/GL/glu.h:236 +GLU_TESS_ERROR7 = 100157 # /usr/include/GL/glu.h:237 +GLU_TESS_ERROR8 = 100158 # /usr/include/GL/glu.h:238 +GLU_TESS_MISSING_BEGIN_POLYGON = 100151 # /usr/include/GL/glu.h:239 +GLU_TESS_MISSING_BEGIN_CONTOUR = 100152 # /usr/include/GL/glu.h:240 +GLU_TESS_MISSING_END_POLYGON = 100153 # /usr/include/GL/glu.h:241 +GLU_TESS_MISSING_END_CONTOUR = 100154 # /usr/include/GL/glu.h:242 +GLU_TESS_COORD_TOO_LARGE = 100155 # /usr/include/GL/glu.h:243 +GLU_TESS_NEED_COMBINE_CALLBACK = 100156 # /usr/include/GL/glu.h:244 +GLU_TESS_WINDING_ODD = 100130 # /usr/include/GL/glu.h:247 +GLU_TESS_WINDING_NONZERO = 100131 # /usr/include/GL/glu.h:248 +GLU_TESS_WINDING_POSITIVE = 100132 # /usr/include/GL/glu.h:249 +GLU_TESS_WINDING_NEGATIVE = 100133 # /usr/include/GL/glu.h:250 +GLU_TESS_WINDING_ABS_GEQ_TWO = 100134 # /usr/include/GL/glu.h:251 +class struct_GLUnurbs(Structure): + __slots__ = [ + ] +struct_GLUnurbs._fields_ = [ + ('_opaque_struct', c_int) +] + +GLUnurbs = struct_GLUnurbs # /usr/include/GL/glu.h:261 +class struct_GLUquadric(Structure): + __slots__ = [ + ] +struct_GLUquadric._fields_ = [ + ('_opaque_struct', c_int) +] + +GLUquadric = struct_GLUquadric # /usr/include/GL/glu.h:262 +class struct_GLUtesselator(Structure): + __slots__ = [ + ] +struct_GLUtesselator._fields_ = [ + ('_opaque_struct', c_int) +] + +GLUtesselator = struct_GLUtesselator # /usr/include/GL/glu.h:263 +GLUnurbsObj = GLUnurbs # /usr/include/GL/glu.h:266 +GLUquadricObj = GLUquadric # /usr/include/GL/glu.h:267 +GLUtesselatorObj = GLUtesselator # /usr/include/GL/glu.h:268 +GLUtriangulatorObj = GLUtesselator # /usr/include/GL/glu.h:269 +GLU_TESS_MAX_COORD = 9.9999999999999998e+149 # /usr/include/GL/glu.h:271 +_GLUfuncptr = CFUNCTYPE(None) # /usr/include/GL/glu.h:274 +# /usr/include/GL/glu.h:276 +gluBeginCurve = _link_function('gluBeginCurve', None, [POINTER(GLUnurbs)], None) + +# /usr/include/GL/glu.h:277 +gluBeginPolygon = _link_function('gluBeginPolygon', None, [POINTER(GLUtesselator)], None) + +# /usr/include/GL/glu.h:278 +gluBeginSurface = _link_function('gluBeginSurface', None, [POINTER(GLUnurbs)], None) + +# /usr/include/GL/glu.h:279 +gluBeginTrim = _link_function('gluBeginTrim', None, [POINTER(GLUnurbs)], None) + +GLint = c_int # /usr/include/GL/gl.h:58 +GLenum = c_uint # /usr/include/GL/gl.h:53 +GLsizei = c_int # /usr/include/GL/gl.h:59 +# /usr/include/GL/glu.h:280 +gluBuild1DMipmapLevels = _link_function('gluBuild1DMipmapLevels', GLint, [GLenum, GLint, GLsizei, GLenum, GLenum, GLint, GLint, GLint, POINTER(None)], None) + +# /usr/include/GL/glu.h:281 +gluBuild1DMipmaps = _link_function('gluBuild1DMipmaps', GLint, [GLenum, GLint, GLsizei, GLenum, GLenum, POINTER(None)], None) + +# /usr/include/GL/glu.h:282 +gluBuild2DMipmapLevels = _link_function('gluBuild2DMipmapLevels', GLint, [GLenum, GLint, GLsizei, GLsizei, GLenum, GLenum, GLint, GLint, GLint, POINTER(None)], None) + +# /usr/include/GL/glu.h:283 +gluBuild2DMipmaps = _link_function('gluBuild2DMipmaps', GLint, [GLenum, GLint, GLsizei, GLsizei, GLenum, GLenum, POINTER(None)], None) + +# /usr/include/GL/glu.h:284 +gluBuild3DMipmapLevels = _link_function('gluBuild3DMipmapLevels', GLint, [GLenum, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, GLint, GLint, GLint, POINTER(None)], None) + +# /usr/include/GL/glu.h:285 +gluBuild3DMipmaps = _link_function('gluBuild3DMipmaps', GLint, [GLenum, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, POINTER(None)], None) + +GLboolean = c_ubyte # /usr/include/GL/gl.h:54 +GLubyte = c_ubyte # /usr/include/GL/gl.h:60 +# /usr/include/GL/glu.h:286 +gluCheckExtension = _link_function('gluCheckExtension', GLboolean, [POINTER(GLubyte), POINTER(GLubyte)], None) + +GLdouble = c_double # /usr/include/GL/gl.h:65 +# /usr/include/GL/glu.h:287 +gluCylinder = _link_function('gluCylinder', None, [POINTER(GLUquadric), GLdouble, GLdouble, GLdouble, GLint, GLint], None) + +# /usr/include/GL/glu.h:288 +gluDeleteNurbsRenderer = _link_function('gluDeleteNurbsRenderer', None, [POINTER(GLUnurbs)], None) + +# /usr/include/GL/glu.h:289 +gluDeleteQuadric = _link_function('gluDeleteQuadric', None, [POINTER(GLUquadric)], None) + +# /usr/include/GL/glu.h:290 +gluDeleteTess = _link_function('gluDeleteTess', None, [POINTER(GLUtesselator)], None) + +# /usr/include/GL/glu.h:291 +gluDisk = _link_function('gluDisk', None, [POINTER(GLUquadric), GLdouble, GLdouble, GLint, GLint], None) + +# /usr/include/GL/glu.h:292 +gluEndCurve = _link_function('gluEndCurve', None, [POINTER(GLUnurbs)], None) + +# /usr/include/GL/glu.h:293 +gluEndPolygon = _link_function('gluEndPolygon', None, [POINTER(GLUtesselator)], None) + +# /usr/include/GL/glu.h:294 +gluEndSurface = _link_function('gluEndSurface', None, [POINTER(GLUnurbs)], None) + +# /usr/include/GL/glu.h:295 +gluEndTrim = _link_function('gluEndTrim', None, [POINTER(GLUnurbs)], None) + +# /usr/include/GL/glu.h:296 +gluErrorString = _link_function('gluErrorString', POINTER(GLubyte), [GLenum], None) + +GLfloat = c_float # /usr/include/GL/gl.h:63 +# /usr/include/GL/glu.h:297 +gluGetNurbsProperty = _link_function('gluGetNurbsProperty', None, [POINTER(GLUnurbs), GLenum, POINTER(GLfloat)], None) + +# /usr/include/GL/glu.h:298 +gluGetString = _link_function('gluGetString', POINTER(GLubyte), [GLenum], None) + +# /usr/include/GL/glu.h:299 +gluGetTessProperty = _link_function('gluGetTessProperty', None, [POINTER(GLUtesselator), GLenum, POINTER(GLdouble)], None) + +# /usr/include/GL/glu.h:300 +gluLoadSamplingMatrices = _link_function('gluLoadSamplingMatrices', None, [POINTER(GLUnurbs), POINTER(GLfloat), POINTER(GLfloat), POINTER(GLint)], None) + +# /usr/include/GL/glu.h:301 +gluLookAt = _link_function('gluLookAt', None, [GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble, GLdouble], None) + +# /usr/include/GL/glu.h:302 +gluNewNurbsRenderer = _link_function('gluNewNurbsRenderer', POINTER(GLUnurbs), [], None) + +# /usr/include/GL/glu.h:303 +gluNewQuadric = _link_function('gluNewQuadric', POINTER(GLUquadric), [], None) + +# /usr/include/GL/glu.h:304 +gluNewTess = _link_function('gluNewTess', POINTER(GLUtesselator), [], None) + +# /usr/include/GL/glu.h:305 +gluNextContour = _link_function('gluNextContour', None, [POINTER(GLUtesselator), GLenum], None) + +# /usr/include/GL/glu.h:306 +gluNurbsCallback = _link_function('gluNurbsCallback', None, [POINTER(GLUnurbs), GLenum, _GLUfuncptr], None) + +GLvoid = None # /usr/include/GL/gl.h:67 +# /usr/include/GL/glu.h:307 +gluNurbsCallbackData = _link_function('gluNurbsCallbackData', None, [POINTER(GLUnurbs), POINTER(GLvoid)], None) + +# /usr/include/GL/glu.h:308 +gluNurbsCallbackDataEXT = _link_function('gluNurbsCallbackDataEXT', None, [POINTER(GLUnurbs), POINTER(GLvoid)], None) + +# /usr/include/GL/glu.h:309 +gluNurbsCurve = _link_function('gluNurbsCurve', None, [POINTER(GLUnurbs), GLint, POINTER(GLfloat), GLint, POINTER(GLfloat), GLint, GLenum], None) + +# /usr/include/GL/glu.h:310 +gluNurbsProperty = _link_function('gluNurbsProperty', None, [POINTER(GLUnurbs), GLenum, GLfloat], None) + +# /usr/include/GL/glu.h:311 +gluNurbsSurface = _link_function('gluNurbsSurface', None, [POINTER(GLUnurbs), GLint, POINTER(GLfloat), GLint, POINTER(GLfloat), GLint, GLint, POINTER(GLfloat), GLint, GLint, GLenum], None) + +# /usr/include/GL/glu.h:312 +gluOrtho2D = _link_function('gluOrtho2D', None, [GLdouble, GLdouble, GLdouble, GLdouble], None) + +# /usr/include/GL/glu.h:313 +gluPartialDisk = _link_function('gluPartialDisk', None, [POINTER(GLUquadric), GLdouble, GLdouble, GLint, GLint, GLdouble, GLdouble], None) + +# /usr/include/GL/glu.h:314 +gluPerspective = _link_function('gluPerspective', None, [GLdouble, GLdouble, GLdouble, GLdouble], None) + +# /usr/include/GL/glu.h:315 +gluPickMatrix = _link_function('gluPickMatrix', None, [GLdouble, GLdouble, GLdouble, GLdouble, POINTER(GLint)], None) + +# /usr/include/GL/glu.h:316 +gluProject = _link_function('gluProject', GLint, [GLdouble, GLdouble, GLdouble, POINTER(GLdouble), POINTER(GLdouble), POINTER(GLint), POINTER(GLdouble), POINTER(GLdouble), POINTER(GLdouble)], None) + +# /usr/include/GL/glu.h:317 +gluPwlCurve = _link_function('gluPwlCurve', None, [POINTER(GLUnurbs), GLint, POINTER(GLfloat), GLint, GLenum], None) + +# /usr/include/GL/glu.h:318 +gluQuadricCallback = _link_function('gluQuadricCallback', None, [POINTER(GLUquadric), GLenum, _GLUfuncptr], None) + +# /usr/include/GL/glu.h:319 +gluQuadricDrawStyle = _link_function('gluQuadricDrawStyle', None, [POINTER(GLUquadric), GLenum], None) + +# /usr/include/GL/glu.h:320 +gluQuadricNormals = _link_function('gluQuadricNormals', None, [POINTER(GLUquadric), GLenum], None) + +# /usr/include/GL/glu.h:321 +gluQuadricOrientation = _link_function('gluQuadricOrientation', None, [POINTER(GLUquadric), GLenum], None) + +# /usr/include/GL/glu.h:322 +gluQuadricTexture = _link_function('gluQuadricTexture', None, [POINTER(GLUquadric), GLboolean], None) + +# /usr/include/GL/glu.h:323 +gluScaleImage = _link_function('gluScaleImage', GLint, [GLenum, GLsizei, GLsizei, GLenum, POINTER(None), GLsizei, GLsizei, GLenum, POINTER(GLvoid)], None) + +# /usr/include/GL/glu.h:324 +gluSphere = _link_function('gluSphere', None, [POINTER(GLUquadric), GLdouble, GLint, GLint], None) + +# /usr/include/GL/glu.h:325 +gluTessBeginContour = _link_function('gluTessBeginContour', None, [POINTER(GLUtesselator)], None) + +# /usr/include/GL/glu.h:326 +gluTessBeginPolygon = _link_function('gluTessBeginPolygon', None, [POINTER(GLUtesselator), POINTER(GLvoid)], None) + +# /usr/include/GL/glu.h:327 +gluTessCallback = _link_function('gluTessCallback', None, [POINTER(GLUtesselator), GLenum, _GLUfuncptr], None) + +# /usr/include/GL/glu.h:328 +gluTessEndContour = _link_function('gluTessEndContour', None, [POINTER(GLUtesselator)], None) + +# /usr/include/GL/glu.h:329 +gluTessEndPolygon = _link_function('gluTessEndPolygon', None, [POINTER(GLUtesselator)], None) + +# /usr/include/GL/glu.h:330 +gluTessNormal = _link_function('gluTessNormal', None, [POINTER(GLUtesselator), GLdouble, GLdouble, GLdouble], None) + +# /usr/include/GL/glu.h:331 +gluTessProperty = _link_function('gluTessProperty', None, [POINTER(GLUtesselator), GLenum, GLdouble], None) + +# /usr/include/GL/glu.h:332 +gluTessVertex = _link_function('gluTessVertex', None, [POINTER(GLUtesselator), POINTER(GLdouble), POINTER(GLvoid)], None) + +# /usr/include/GL/glu.h:333 +gluUnProject = _link_function('gluUnProject', GLint, [GLdouble, GLdouble, GLdouble, POINTER(GLdouble), POINTER(GLdouble), POINTER(GLint), POINTER(GLdouble), POINTER(GLdouble), POINTER(GLdouble)], None) + +# /usr/include/GL/glu.h:334 +gluUnProject4 = _link_function('gluUnProject4', GLint, [GLdouble, GLdouble, GLdouble, GLdouble, POINTER(GLdouble), POINTER(GLdouble), POINTER(GLint), GLdouble, GLdouble, POINTER(GLdouble), POINTER(GLdouble), POINTER(GLdouble), POINTER(GLdouble)], None) + + +__all__ = ['GLU_EXT_object_space_tess', 'GLU_EXT_nurbs_tessellator', +'GLU_FALSE', 'GLU_TRUE', 'GLU_VERSION_1_1', 'GLU_VERSION_1_2', +'GLU_VERSION_1_3', 'GLU_VERSION', 'GLU_EXTENSIONS', 'GLU_INVALID_ENUM', +'GLU_INVALID_VALUE', 'GLU_OUT_OF_MEMORY', 'GLU_INCOMPATIBLE_GL_VERSION', +'GLU_INVALID_OPERATION', 'GLU_OUTLINE_POLYGON', 'GLU_OUTLINE_PATCH', +'GLU_NURBS_ERROR', 'GLU_ERROR', 'GLU_NURBS_BEGIN', 'GLU_NURBS_BEGIN_EXT', +'GLU_NURBS_VERTEX', 'GLU_NURBS_VERTEX_EXT', 'GLU_NURBS_NORMAL', +'GLU_NURBS_NORMAL_EXT', 'GLU_NURBS_COLOR', 'GLU_NURBS_COLOR_EXT', +'GLU_NURBS_TEXTURE_COORD', 'GLU_NURBS_TEX_COORD_EXT', 'GLU_NURBS_END', +'GLU_NURBS_END_EXT', 'GLU_NURBS_BEGIN_DATA', 'GLU_NURBS_BEGIN_DATA_EXT', +'GLU_NURBS_VERTEX_DATA', 'GLU_NURBS_VERTEX_DATA_EXT', 'GLU_NURBS_NORMAL_DATA', +'GLU_NURBS_NORMAL_DATA_EXT', 'GLU_NURBS_COLOR_DATA', +'GLU_NURBS_COLOR_DATA_EXT', 'GLU_NURBS_TEXTURE_COORD_DATA', +'GLU_NURBS_TEX_COORD_DATA_EXT', 'GLU_NURBS_END_DATA', +'GLU_NURBS_END_DATA_EXT', 'GLU_NURBS_ERROR1', 'GLU_NURBS_ERROR2', +'GLU_NURBS_ERROR3', 'GLU_NURBS_ERROR4', 'GLU_NURBS_ERROR5', +'GLU_NURBS_ERROR6', 'GLU_NURBS_ERROR7', 'GLU_NURBS_ERROR8', +'GLU_NURBS_ERROR9', 'GLU_NURBS_ERROR10', 'GLU_NURBS_ERROR11', +'GLU_NURBS_ERROR12', 'GLU_NURBS_ERROR13', 'GLU_NURBS_ERROR14', +'GLU_NURBS_ERROR15', 'GLU_NURBS_ERROR16', 'GLU_NURBS_ERROR17', +'GLU_NURBS_ERROR18', 'GLU_NURBS_ERROR19', 'GLU_NURBS_ERROR20', +'GLU_NURBS_ERROR21', 'GLU_NURBS_ERROR22', 'GLU_NURBS_ERROR23', +'GLU_NURBS_ERROR24', 'GLU_NURBS_ERROR25', 'GLU_NURBS_ERROR26', +'GLU_NURBS_ERROR27', 'GLU_NURBS_ERROR28', 'GLU_NURBS_ERROR29', +'GLU_NURBS_ERROR30', 'GLU_NURBS_ERROR31', 'GLU_NURBS_ERROR32', +'GLU_NURBS_ERROR33', 'GLU_NURBS_ERROR34', 'GLU_NURBS_ERROR35', +'GLU_NURBS_ERROR36', 'GLU_NURBS_ERROR37', 'GLU_AUTO_LOAD_MATRIX', +'GLU_CULLING', 'GLU_SAMPLING_TOLERANCE', 'GLU_DISPLAY_MODE', +'GLU_PARAMETRIC_TOLERANCE', 'GLU_SAMPLING_METHOD', 'GLU_U_STEP', 'GLU_V_STEP', +'GLU_NURBS_MODE', 'GLU_NURBS_MODE_EXT', 'GLU_NURBS_TESSELLATOR', +'GLU_NURBS_TESSELLATOR_EXT', 'GLU_NURBS_RENDERER', 'GLU_NURBS_RENDERER_EXT', +'GLU_OBJECT_PARAMETRIC_ERROR', 'GLU_OBJECT_PARAMETRIC_ERROR_EXT', +'GLU_OBJECT_PATH_LENGTH', 'GLU_OBJECT_PATH_LENGTH_EXT', 'GLU_PATH_LENGTH', +'GLU_PARAMETRIC_ERROR', 'GLU_DOMAIN_DISTANCE', 'GLU_MAP1_TRIM_2', +'GLU_MAP1_TRIM_3', 'GLU_POINT', 'GLU_LINE', 'GLU_FILL', 'GLU_SILHOUETTE', +'GLU_SMOOTH', 'GLU_FLAT', 'GLU_NONE', 'GLU_OUTSIDE', 'GLU_INSIDE', +'GLU_TESS_BEGIN', 'GLU_BEGIN', 'GLU_TESS_VERTEX', 'GLU_VERTEX', +'GLU_TESS_END', 'GLU_END', 'GLU_TESS_ERROR', 'GLU_TESS_EDGE_FLAG', +'GLU_EDGE_FLAG', 'GLU_TESS_COMBINE', 'GLU_TESS_BEGIN_DATA', +'GLU_TESS_VERTEX_DATA', 'GLU_TESS_END_DATA', 'GLU_TESS_ERROR_DATA', +'GLU_TESS_EDGE_FLAG_DATA', 'GLU_TESS_COMBINE_DATA', 'GLU_CW', 'GLU_CCW', +'GLU_INTERIOR', 'GLU_EXTERIOR', 'GLU_UNKNOWN', 'GLU_TESS_WINDING_RULE', +'GLU_TESS_BOUNDARY_ONLY', 'GLU_TESS_TOLERANCE', 'GLU_TESS_ERROR1', +'GLU_TESS_ERROR2', 'GLU_TESS_ERROR3', 'GLU_TESS_ERROR4', 'GLU_TESS_ERROR5', +'GLU_TESS_ERROR6', 'GLU_TESS_ERROR7', 'GLU_TESS_ERROR8', +'GLU_TESS_MISSING_BEGIN_POLYGON', 'GLU_TESS_MISSING_BEGIN_CONTOUR', +'GLU_TESS_MISSING_END_POLYGON', 'GLU_TESS_MISSING_END_CONTOUR', +'GLU_TESS_COORD_TOO_LARGE', 'GLU_TESS_NEED_COMBINE_CALLBACK', +'GLU_TESS_WINDING_ODD', 'GLU_TESS_WINDING_NONZERO', +'GLU_TESS_WINDING_POSITIVE', 'GLU_TESS_WINDING_NEGATIVE', +'GLU_TESS_WINDING_ABS_GEQ_TWO', 'GLUnurbs', 'GLUquadric', 'GLUtesselator', +'GLUnurbsObj', 'GLUquadricObj', 'GLUtesselatorObj', 'GLUtriangulatorObj', +'GLU_TESS_MAX_COORD', '_GLUfuncptr', 'gluBeginCurve', 'gluBeginPolygon', +'gluBeginSurface', 'gluBeginTrim', 'gluBuild1DMipmapLevels', +'gluBuild1DMipmaps', 'gluBuild2DMipmapLevels', 'gluBuild2DMipmaps', +'gluBuild3DMipmapLevels', 'gluBuild3DMipmaps', 'gluCheckExtension', +'gluCylinder', 'gluDeleteNurbsRenderer', 'gluDeleteQuadric', 'gluDeleteTess', +'gluDisk', 'gluEndCurve', 'gluEndPolygon', 'gluEndSurface', 'gluEndTrim', +'gluErrorString', 'gluGetNurbsProperty', 'gluGetString', 'gluGetTessProperty', +'gluLoadSamplingMatrices', 'gluLookAt', 'gluNewNurbsRenderer', +'gluNewQuadric', 'gluNewTess', 'gluNextContour', 'gluNurbsCallback', +'gluNurbsCallbackData', 'gluNurbsCallbackDataEXT', 'gluNurbsCurve', +'gluNurbsProperty', 'gluNurbsSurface', 'gluOrtho2D', 'gluPartialDisk', +'gluPerspective', 'gluPickMatrix', 'gluProject', 'gluPwlCurve', +'gluQuadricCallback', 'gluQuadricDrawStyle', 'gluQuadricNormals', +'gluQuadricOrientation', 'gluQuadricTexture', 'gluScaleImage', 'gluSphere', +'gluTessBeginContour', 'gluTessBeginPolygon', 'gluTessCallback', +'gluTessEndContour', 'gluTessEndPolygon', 'gluTessNormal', 'gluTessProperty', +'gluTessVertex', 'gluUnProject', 'gluUnProject4'] +# END GENERATED CONTENT (do not edit above this line) + + diff --git a/pyglet/gl/glu_info.py b/pyglet/gl/glu_info.py new file mode 100644 index 0000000..e673a8e --- /dev/null +++ b/pyglet/gl/glu_info.py @@ -0,0 +1,160 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''Information about version and extensions of current GLU implementation. + +Usage:: + + from pyglet.gl import glu_info + + if glu_info.have_extension('GLU_EXT_nurbs_tessellator'): + # ... + +If multiple contexts are in use you can use a separate GLUInfo object for each +context. Call `set_active_context` after switching to the desired context for +each GLUInfo:: + + from pyglet.gl.glu_info import GLUInfo + + info = GLUInfo() + info.set_active_context() + if info.have_version(1, 3): + # ... + +Note that GLUInfo only returns meaningful information if a context has been +created. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: glu_info.py 1979 2008-03-28 15:23:51Z Alex.Holkner $' + +from ctypes import * +import warnings + +from pyglet.gl.glu import * + +class GLUInfo(object): + '''Information interface for the GLU library. + + A default instance is created automatically when the first OpenGL context + is created. You can use the module functions as a convenience for + this default instance's methods. + + If you are using more than one context, you must call `set_active_context` + when the context is active for this `GLUInfo` instance. + ''' + have_context = False + version = '0.0.0' + extensions = [] + + _have_info = False + + def set_active_context(self): + '''Store information for the currently active context. + + This method is called automatically for the default context. + ''' + self.have_context = True + if not self._have_info: + self.extensions = \ + cast(gluGetString(GLU_EXTENSIONS), c_char_p).value.split() + self.version = cast(gluGetString(GLU_VERSION), c_char_p).value + self._have_info = True + + def have_version(self, major, minor=0, release=0): + '''Determine if a version of GLU is supported. + + :Parameters: + `major` : int + The major revision number (typically 1). + `minor` : int + The minor revision number. + `release` : int + The release number. + + :rtype: bool + :return: True if the requested or a later version is supported. + ''' + if not self.have_context: + warnings.warn('No GL context created yet.') + ver = '%s.0.0' % self.version.split(' ', 1)[0] + imajor, iminor, irelease = [int(v) for v in ver.split('.', 3)[:3]] + return imajor > major or \ + (imajor == major and iminor > minor) or \ + (imajor == major and iminor == minor and irelease >= release) + + def get_version(self): + '''Get the current GLU version. + + :return: the GLU version + :rtype: str + ''' + if not self.have_context: + warnings.warn('No GL context created yet.') + return self.version + + def have_extension(self, extension): + '''Determine if a GLU extension is available. + + :Parameters: + `extension` : str + The name of the extension to test for, including its + ``GLU_`` prefix. + + :return: True if the extension is provided by the implementation. + :rtype: bool + ''' + if not self.have_context: + warnings.warn('No GL context created yet.') + return extension in self.extensions + + def get_extensions(self): + '''Get a list of available GLU extensions. + + :return: a list of the available extensions. + :rtype: list of str + ''' + if not self.have_context: + warnings.warn('No GL context created yet.') + return self.extensions + +# Single instance useful for apps with only a single context (or all contexts +# have same GLU driver, common case). +_glu_info = GLUInfo() + +set_active_context = _glu_info.set_active_context +have_version = _glu_info.have_version +get_version = _glu_info.get_version +have_extension = _glu_info.have_extension +get_extensions = _glu_info.get_extensions diff --git a/pyglet/gl/glx.py b/pyglet/gl/glx.py new file mode 100644 index 0000000..6c43b00 --- /dev/null +++ b/pyglet/gl/glx.py @@ -0,0 +1,587 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +'''Wrapper for /usr/include/GL/glx.h + +Do not modify generated portions of this file. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: glx.py 1579 2008-01-15 14:47:19Z Alex.Holkner $' + +from ctypes import * +from pyglet.gl.lib import link_GLX as _link_function +from pyglet.gl.lib import c_ptrdiff_t, c_void + +if not _link_function: + raise ImportError('libGL.so is not available.') + +# BEGIN GENERATED CONTENT (do not edit below this line) + +# This content is generated by tools/gengl.py. +# Wrapper for /usr/include/GL/glx.h + + +GLX_USE_GL = 1 # /usr/include/GL/glx.h:36 +GLX_BUFFER_SIZE = 2 # /usr/include/GL/glx.h:37 +GLX_LEVEL = 3 # /usr/include/GL/glx.h:38 +GLX_RGBA = 4 # /usr/include/GL/glx.h:39 +GLX_DOUBLEBUFFER = 5 # /usr/include/GL/glx.h:40 +GLX_STEREO = 6 # /usr/include/GL/glx.h:41 +GLX_AUX_BUFFERS = 7 # /usr/include/GL/glx.h:42 +GLX_RED_SIZE = 8 # /usr/include/GL/glx.h:43 +GLX_GREEN_SIZE = 9 # /usr/include/GL/glx.h:44 +GLX_BLUE_SIZE = 10 # /usr/include/GL/glx.h:45 +GLX_ALPHA_SIZE = 11 # /usr/include/GL/glx.h:46 +GLX_DEPTH_SIZE = 12 # /usr/include/GL/glx.h:47 +GLX_STENCIL_SIZE = 13 # /usr/include/GL/glx.h:48 +GLX_ACCUM_RED_SIZE = 14 # /usr/include/GL/glx.h:49 +GLX_ACCUM_GREEN_SIZE = 15 # /usr/include/GL/glx.h:50 +GLX_ACCUM_BLUE_SIZE = 16 # /usr/include/GL/glx.h:51 +GLX_ACCUM_ALPHA_SIZE = 17 # /usr/include/GL/glx.h:52 +GLX_BAD_SCREEN = 1 # /usr/include/GL/glx.h:58 +GLX_BAD_ATTRIBUTE = 2 # /usr/include/GL/glx.h:59 +GLX_NO_EXTENSION = 3 # /usr/include/GL/glx.h:60 +GLX_BAD_VISUAL = 4 # /usr/include/GL/glx.h:61 +GLX_BAD_CONTEXT = 5 # /usr/include/GL/glx.h:62 +GLX_BAD_VALUE = 6 # /usr/include/GL/glx.h:63 +GLX_BAD_ENUM = 7 # /usr/include/GL/glx.h:64 +GLX_VENDOR = 1 # /usr/include/GL/glx.h:69 +GLX_VERSION = 2 # /usr/include/GL/glx.h:70 +GLX_EXTENSIONS = 3 # /usr/include/GL/glx.h:71 +# VERSION_1_3 (/usr/include/GL/glx.h:73) +GLX_WINDOW_BIT = 1 # /usr/include/GL/glx.h:74 +GLX_PIXMAP_BIT = 2 # /usr/include/GL/glx.h:75 +GLX_PBUFFER_BIT = 4 # /usr/include/GL/glx.h:76 +GLX_RGBA_BIT = 1 # /usr/include/GL/glx.h:77 +GLX_COLOR_INDEX_BIT = 2 # /usr/include/GL/glx.h:78 +GLX_PBUFFER_CLOBBER_MASK = 134217728 # /usr/include/GL/glx.h:79 +GLX_FRONT_LEFT_BUFFER_BIT = 1 # /usr/include/GL/glx.h:80 +GLX_FRONT_RIGHT_BUFFER_BIT = 2 # /usr/include/GL/glx.h:81 +GLX_BACK_LEFT_BUFFER_BIT = 4 # /usr/include/GL/glx.h:82 +GLX_BACK_RIGHT_BUFFER_BIT = 8 # /usr/include/GL/glx.h:83 +GLX_AUX_BUFFERS_BIT = 16 # /usr/include/GL/glx.h:84 +GLX_DEPTH_BUFFER_BIT = 32 # /usr/include/GL/glx.h:85 +GLX_STENCIL_BUFFER_BIT = 64 # /usr/include/GL/glx.h:86 +GLX_ACCUM_BUFFER_BIT = 128 # /usr/include/GL/glx.h:87 +GLX_CONFIG_CAVEAT = 32 # /usr/include/GL/glx.h:88 +GLX_X_VISUAL_TYPE = 34 # /usr/include/GL/glx.h:89 +GLX_TRANSPARENT_TYPE = 35 # /usr/include/GL/glx.h:90 +GLX_TRANSPARENT_INDEX_VALUE = 36 # /usr/include/GL/glx.h:91 +GLX_TRANSPARENT_RED_VALUE = 37 # /usr/include/GL/glx.h:92 +GLX_TRANSPARENT_GREEN_VALUE = 38 # /usr/include/GL/glx.h:93 +GLX_TRANSPARENT_BLUE_VALUE = 39 # /usr/include/GL/glx.h:94 +GLX_TRANSPARENT_ALPHA_VALUE = 40 # /usr/include/GL/glx.h:95 +GLX_DONT_CARE = 4294967295 # /usr/include/GL/glx.h:96 +GLX_NONE = 32768 # /usr/include/GL/glx.h:97 +GLX_SLOW_CONFIG = 32769 # /usr/include/GL/glx.h:98 +GLX_TRUE_COLOR = 32770 # /usr/include/GL/glx.h:99 +GLX_DIRECT_COLOR = 32771 # /usr/include/GL/glx.h:100 +GLX_PSEUDO_COLOR = 32772 # /usr/include/GL/glx.h:101 +GLX_STATIC_COLOR = 32773 # /usr/include/GL/glx.h:102 +GLX_GRAY_SCALE = 32774 # /usr/include/GL/glx.h:103 +GLX_STATIC_GRAY = 32775 # /usr/include/GL/glx.h:104 +GLX_TRANSPARENT_RGB = 32776 # /usr/include/GL/glx.h:105 +GLX_TRANSPARENT_INDEX = 32777 # /usr/include/GL/glx.h:106 +GLX_VISUAL_ID = 32779 # /usr/include/GL/glx.h:107 +GLX_SCREEN = 32780 # /usr/include/GL/glx.h:108 +GLX_NON_CONFORMANT_CONFIG = 32781 # /usr/include/GL/glx.h:109 +GLX_DRAWABLE_TYPE = 32784 # /usr/include/GL/glx.h:110 +GLX_RENDER_TYPE = 32785 # /usr/include/GL/glx.h:111 +GLX_X_RENDERABLE = 32786 # /usr/include/GL/glx.h:112 +GLX_FBCONFIG_ID = 32787 # /usr/include/GL/glx.h:113 +GLX_RGBA_TYPE = 32788 # /usr/include/GL/glx.h:114 +GLX_COLOR_INDEX_TYPE = 32789 # /usr/include/GL/glx.h:115 +GLX_MAX_PBUFFER_WIDTH = 32790 # /usr/include/GL/glx.h:116 +GLX_MAX_PBUFFER_HEIGHT = 32791 # /usr/include/GL/glx.h:117 +GLX_MAX_PBUFFER_PIXELS = 32792 # /usr/include/GL/glx.h:118 +GLX_PRESERVED_CONTENTS = 32795 # /usr/include/GL/glx.h:119 +GLX_LARGEST_PBUFFER = 32796 # /usr/include/GL/glx.h:120 +GLX_WIDTH = 32797 # /usr/include/GL/glx.h:121 +GLX_HEIGHT = 32798 # /usr/include/GL/glx.h:122 +GLX_EVENT_MASK = 32799 # /usr/include/GL/glx.h:123 +GLX_DAMAGED = 32800 # /usr/include/GL/glx.h:124 +GLX_SAVED = 32801 # /usr/include/GL/glx.h:125 +GLX_WINDOW = 32802 # /usr/include/GL/glx.h:126 +GLX_PBUFFER = 32803 # /usr/include/GL/glx.h:127 +GLX_PBUFFER_HEIGHT = 32832 # /usr/include/GL/glx.h:128 +GLX_PBUFFER_WIDTH = 32833 # /usr/include/GL/glx.h:129 +# VERSION_1_4 (/usr/include/GL/glx.h:132) +GLX_SAMPLE_BUFFERS = 100000 # /usr/include/GL/glx.h:133 +GLX_SAMPLES = 100001 # /usr/include/GL/glx.h:134 +# ARB_get_proc_address (/usr/include/GL/glx.h:137) +__GLXextFuncPtr = CFUNCTYPE(None) # /usr/include/GL/glx.h:138 +XID = c_ulong # /usr/include/X11/X.h:71 +GLXContextID = XID # /usr/include/GL/glx.h:144 +GLXPixmap = XID # /usr/include/GL/glx.h:145 +GLXDrawable = XID # /usr/include/GL/glx.h:146 +GLXPbuffer = XID # /usr/include/GL/glx.h:147 +GLXPbufferSGIX = XID # /usr/include/GL/glx.h:148 +GLXWindow = XID # /usr/include/GL/glx.h:149 +GLXFBConfigID = XID # /usr/include/GL/glx.h:150 +class struct___GLXcontextRec(Structure): + __slots__ = [ + ] +struct___GLXcontextRec._fields_ = [ + ('_opaque_struct', c_int) +] + +GLXContext = POINTER(struct___GLXcontextRec) # /usr/include/GL/glx.h:155 +class struct___GLXFBConfigRec(Structure): + __slots__ = [ + ] +struct___GLXFBConfigRec._fields_ = [ + ('_opaque_struct', c_int) +] + +GLXFBConfig = POINTER(struct___GLXFBConfigRec) # /usr/include/GL/glx.h:160 +class struct_anon_94(Structure): + __slots__ = [ + 'visual', + 'visualid', + 'screen', + 'depth', + 'class', + 'red_mask', + 'green_mask', + 'blue_mask', + 'colormap_size', + 'bits_per_rgb', + ] +class struct_anon_11(Structure): + __slots__ = [ + 'ext_data', + 'visualid', + 'class', + 'red_mask', + 'green_mask', + 'blue_mask', + 'bits_per_rgb', + 'map_entries', + ] +class struct__XExtData(Structure): + __slots__ = [ + 'number', + 'next', + 'free_private', + 'private_data', + ] +XPointer = c_char_p # /usr/include/X11/Xlib.h:108 +struct__XExtData._fields_ = [ + ('number', c_int), + ('next', POINTER(struct__XExtData)), + ('free_private', POINTER(CFUNCTYPE(c_int, POINTER(struct__XExtData)))), + ('private_data', XPointer), +] + +XExtData = struct__XExtData # /usr/include/X11/Xlib.h:187 +VisualID = c_ulong # /usr/include/X11/X.h:81 +struct_anon_11._fields_ = [ + ('ext_data', POINTER(XExtData)), + ('visualid', VisualID), + ('class', c_int), + ('red_mask', c_ulong), + ('green_mask', c_ulong), + ('blue_mask', c_ulong), + ('bits_per_rgb', c_int), + ('map_entries', c_int), +] + +Visual = struct_anon_11 # /usr/include/X11/Xlib.h:270 +struct_anon_94._fields_ = [ + ('visual', POINTER(Visual)), + ('visualid', VisualID), + ('screen', c_int), + ('depth', c_int), + ('class', c_int), + ('red_mask', c_ulong), + ('green_mask', c_ulong), + ('blue_mask', c_ulong), + ('colormap_size', c_int), + ('bits_per_rgb', c_int), +] + +XVisualInfo = struct_anon_94 # /usr/include/X11/Xutil.h:296 +class struct__XDisplay(Structure): + __slots__ = [ + ] +struct__XDisplay._fields_ = [ + ('_opaque_struct', c_int) +] + +Display = struct__XDisplay # /usr/include/X11/Xlib.h:519 +# /usr/include/GL/glx.h:168 +glXChooseVisual = _link_function('glXChooseVisual', POINTER(XVisualInfo), [POINTER(Display), c_int, POINTER(c_int)], 'ARB_get_proc_address') + +# /usr/include/GL/glx.h:171 +glXCopyContext = _link_function('glXCopyContext', None, [POINTER(Display), GLXContext, GLXContext, c_ulong], 'ARB_get_proc_address') + +# /usr/include/GL/glx.h:174 +glXCreateContext = _link_function('glXCreateContext', GLXContext, [POINTER(Display), POINTER(XVisualInfo), GLXContext, c_int], 'ARB_get_proc_address') + +Pixmap = XID # /usr/include/X11/X.h:107 +# /usr/include/GL/glx.h:177 +glXCreateGLXPixmap = _link_function('glXCreateGLXPixmap', GLXPixmap, [POINTER(Display), POINTER(XVisualInfo), Pixmap], 'ARB_get_proc_address') + +# /usr/include/GL/glx.h:180 +glXDestroyContext = _link_function('glXDestroyContext', None, [POINTER(Display), GLXContext], 'ARB_get_proc_address') + +# /usr/include/GL/glx.h:182 +glXDestroyGLXPixmap = _link_function('glXDestroyGLXPixmap', None, [POINTER(Display), GLXPixmap], 'ARB_get_proc_address') + +# /usr/include/GL/glx.h:184 +glXGetConfig = _link_function('glXGetConfig', c_int, [POINTER(Display), POINTER(XVisualInfo), c_int, POINTER(c_int)], 'ARB_get_proc_address') + +# /usr/include/GL/glx.h:187 +glXGetCurrentContext = _link_function('glXGetCurrentContext', GLXContext, [], 'ARB_get_proc_address') + +# /usr/include/GL/glx.h:189 +glXGetCurrentDrawable = _link_function('glXGetCurrentDrawable', GLXDrawable, [], 'ARB_get_proc_address') + +# /usr/include/GL/glx.h:191 +glXIsDirect = _link_function('glXIsDirect', c_int, [POINTER(Display), GLXContext], 'ARB_get_proc_address') + +# /usr/include/GL/glx.h:193 +glXMakeCurrent = _link_function('glXMakeCurrent', c_int, [POINTER(Display), GLXDrawable, GLXContext], 'ARB_get_proc_address') + +# /usr/include/GL/glx.h:196 +glXQueryExtension = _link_function('glXQueryExtension', c_int, [POINTER(Display), POINTER(c_int), POINTER(c_int)], 'ARB_get_proc_address') + +# /usr/include/GL/glx.h:198 +glXQueryVersion = _link_function('glXQueryVersion', c_int, [POINTER(Display), POINTER(c_int), POINTER(c_int)], 'ARB_get_proc_address') + +# /usr/include/GL/glx.h:200 +glXSwapBuffers = _link_function('glXSwapBuffers', None, [POINTER(Display), GLXDrawable], 'ARB_get_proc_address') + +Font = XID # /usr/include/X11/X.h:105 +# /usr/include/GL/glx.h:202 +glXUseXFont = _link_function('glXUseXFont', None, [Font, c_int, c_int, c_int], 'ARB_get_proc_address') + +# /usr/include/GL/glx.h:204 +glXWaitGL = _link_function('glXWaitGL', None, [], 'ARB_get_proc_address') + +# /usr/include/GL/glx.h:206 +glXWaitX = _link_function('glXWaitX', None, [], 'ARB_get_proc_address') + +# VERSION_1_1 (/usr/include/GL/glx.h:209) +GLX_VERSION_1_1 = 1 # /usr/include/GL/glx.h:210 +# /usr/include/GL/glx.h:214 +glXGetClientString = _link_function('glXGetClientString', c_char_p, [POINTER(Display), c_int], 'VERSION_1_1') + +# /usr/include/GL/glx.h:216 +glXQueryServerString = _link_function('glXQueryServerString', c_char_p, [POINTER(Display), c_int, c_int], 'VERSION_1_1') + +# /usr/include/GL/glx.h:218 +glXQueryExtensionsString = _link_function('glXQueryExtensionsString', c_char_p, [POINTER(Display), c_int], 'VERSION_1_1') + +# VERSION_1_2 (/usr/include/GL/glx.h:222) +GLX_VERSION_1_2 = 1 # /usr/include/GL/glx.h:223 +# /usr/include/GL/glx.h:227 +glXGetCurrentDisplay = _link_function('glXGetCurrentDisplay', POINTER(Display), [], 'VERSION_1_2') + +# VERSION_1_3 (/usr/include/GL/glx.h:230) +GLX_VERSION_1_3 = 1 # /usr/include/GL/glx.h:231 +# /usr/include/GL/glx.h:235 +glXChooseFBConfig = _link_function('glXChooseFBConfig', POINTER(GLXFBConfig), [POINTER(Display), c_int, POINTER(c_int), POINTER(c_int)], 'VERSION_1_3') + +# /usr/include/GL/glx.h:238 +glXCreateNewContext = _link_function('glXCreateNewContext', GLXContext, [POINTER(Display), GLXFBConfig, c_int, GLXContext, c_int], 'VERSION_1_3') + +# /usr/include/GL/glx.h:242 +glXCreatePbuffer = _link_function('glXCreatePbuffer', GLXPbuffer, [POINTER(Display), GLXFBConfig, POINTER(c_int)], 'VERSION_1_3') + +# /usr/include/GL/glx.h:245 +glXCreatePixmap = _link_function('glXCreatePixmap', GLXPixmap, [POINTER(Display), GLXFBConfig, Pixmap, POINTER(c_int)], 'VERSION_1_3') + +Window = XID # /usr/include/X11/X.h:101 +# /usr/include/GL/glx.h:248 +glXCreateWindow = _link_function('glXCreateWindow', GLXWindow, [POINTER(Display), GLXFBConfig, Window, POINTER(c_int)], 'VERSION_1_3') + +# /usr/include/GL/glx.h:251 +glXDestroyPbuffer = _link_function('glXDestroyPbuffer', None, [POINTER(Display), GLXPbuffer], 'VERSION_1_3') + +# /usr/include/GL/glx.h:253 +glXDestroyPixmap = _link_function('glXDestroyPixmap', None, [POINTER(Display), GLXPixmap], 'VERSION_1_3') + +# /usr/include/GL/glx.h:255 +glXDestroyWindow = _link_function('glXDestroyWindow', None, [POINTER(Display), GLXWindow], 'VERSION_1_3') + +# /usr/include/GL/glx.h:257 +glXGetCurrentReadDrawable = _link_function('glXGetCurrentReadDrawable', GLXDrawable, [], 'VERSION_1_3') + +# /usr/include/GL/glx.h:259 +glXGetFBConfigAttrib = _link_function('glXGetFBConfigAttrib', c_int, [POINTER(Display), GLXFBConfig, c_int, POINTER(c_int)], 'VERSION_1_3') + +# /usr/include/GL/glx.h:262 +glXGetFBConfigs = _link_function('glXGetFBConfigs', POINTER(GLXFBConfig), [POINTER(Display), c_int, POINTER(c_int)], 'VERSION_1_3') + +# /usr/include/GL/glx.h:264 +glXGetSelectedEvent = _link_function('glXGetSelectedEvent', None, [POINTER(Display), GLXDrawable, POINTER(c_ulong)], 'VERSION_1_3') + +# /usr/include/GL/glx.h:267 +glXGetVisualFromFBConfig = _link_function('glXGetVisualFromFBConfig', POINTER(XVisualInfo), [POINTER(Display), GLXFBConfig], 'VERSION_1_3') + +# /usr/include/GL/glx.h:269 +glXMakeContextCurrent = _link_function('glXMakeContextCurrent', c_int, [POINTER(Display), GLXDrawable, GLXDrawable, GLXContext], 'VERSION_1_3') + +# /usr/include/GL/glx.h:272 +glXQueryContext = _link_function('glXQueryContext', c_int, [POINTER(Display), GLXContext, c_int, POINTER(c_int)], 'VERSION_1_3') + +# /usr/include/GL/glx.h:275 +glXQueryDrawable = _link_function('glXQueryDrawable', None, [POINTER(Display), GLXDrawable, c_int, POINTER(c_uint)], 'VERSION_1_3') + +# /usr/include/GL/glx.h:278 +glXSelectEvent = _link_function('glXSelectEvent', None, [POINTER(Display), GLXDrawable, c_ulong], 'VERSION_1_3') + +PFNGLXGETFBCONFIGSPROC = CFUNCTYPE(POINTER(GLXFBConfig), POINTER(Display), c_int, POINTER(c_int)) # /usr/include/GL/glx.h:281 +PFNGLXCHOOSEFBCONFIGPROC = CFUNCTYPE(POINTER(GLXFBConfig), POINTER(Display), c_int, POINTER(c_int), POINTER(c_int)) # /usr/include/GL/glx.h:282 +PFNGLXGETFBCONFIGATTRIBPROC = CFUNCTYPE(c_int, POINTER(Display), GLXFBConfig, c_int, POINTER(c_int)) # /usr/include/GL/glx.h:283 +PFNGLXGETVISUALFROMFBCONFIGPROC = CFUNCTYPE(POINTER(XVisualInfo), POINTER(Display), GLXFBConfig) # /usr/include/GL/glx.h:284 +PFNGLXCREATEWINDOWPROC = CFUNCTYPE(GLXWindow, POINTER(Display), GLXFBConfig, Window, POINTER(c_int)) # /usr/include/GL/glx.h:285 +PFNGLXDESTROYWINDOWPROC = CFUNCTYPE(None, POINTER(Display), GLXWindow) # /usr/include/GL/glx.h:286 +PFNGLXCREATEPIXMAPPROC = CFUNCTYPE(GLXPixmap, POINTER(Display), GLXFBConfig, Pixmap, POINTER(c_int)) # /usr/include/GL/glx.h:287 +PFNGLXDESTROYPIXMAPPROC = CFUNCTYPE(None, POINTER(Display), GLXPixmap) # /usr/include/GL/glx.h:288 +PFNGLXCREATEPBUFFERPROC = CFUNCTYPE(GLXPbuffer, POINTER(Display), GLXFBConfig, POINTER(c_int)) # /usr/include/GL/glx.h:289 +PFNGLXDESTROYPBUFFERPROC = CFUNCTYPE(None, POINTER(Display), GLXPbuffer) # /usr/include/GL/glx.h:290 +PFNGLXQUERYDRAWABLEPROC = CFUNCTYPE(None, POINTER(Display), GLXDrawable, c_int, POINTER(c_uint)) # /usr/include/GL/glx.h:291 +PFNGLXCREATENEWCONTEXTPROC = CFUNCTYPE(GLXContext, POINTER(Display), GLXFBConfig, c_int, GLXContext, c_int) # /usr/include/GL/glx.h:292 +PFNGLXMAKECONTEXTCURRENTPROC = CFUNCTYPE(c_int, POINTER(Display), GLXDrawable, GLXDrawable, GLXContext) # /usr/include/GL/glx.h:293 +PFNGLXGETCURRENTREADDRAWABLEPROC = CFUNCTYPE(GLXDrawable) # /usr/include/GL/glx.h:294 +PFNGLXGETCURRENTDISPLAYPROC = CFUNCTYPE(POINTER(Display)) # /usr/include/GL/glx.h:295 +PFNGLXQUERYCONTEXTPROC = CFUNCTYPE(c_int, POINTER(Display), GLXContext, c_int, POINTER(c_int)) # /usr/include/GL/glx.h:296 +PFNGLXSELECTEVENTPROC = CFUNCTYPE(None, POINTER(Display), GLXDrawable, c_ulong) # /usr/include/GL/glx.h:297 +PFNGLXGETSELECTEDEVENTPROC = CFUNCTYPE(None, POINTER(Display), GLXDrawable, POINTER(c_ulong)) # /usr/include/GL/glx.h:298 +# VERSION_1_4 (/usr/include/GL/glx.h:302) +GLX_VERSION_1_4 = 1 # /usr/include/GL/glx.h:303 +GLubyte = c_ubyte # /usr/include/GL/gl.h:60 +# /usr/include/GL/glx.h:307 +glXGetProcAddress = _link_function('glXGetProcAddress', __GLXextFuncPtr, [POINTER(GLubyte)], 'VERSION_1_4') + +PFNGLXGETPROCADDRESSPROC = CFUNCTYPE(__GLXextFuncPtr, POINTER(GLubyte)) # /usr/include/GL/glx.h:308 +# ARB_get_proc_address (/usr/include/GL/glx.h:318) +GLX_ARB_get_proc_address = 1 # /usr/include/GL/glx.h:319 +# /usr/include/GL/glx.h:321 +glXGetProcAddressARB = _link_function('glXGetProcAddressARB', POINTER(CFUNCTYPE(None)), [POINTER(GLubyte)], 'ARB_get_proc_address') + +PFNGLXGETPROCADDRESSARBPROC = CFUNCTYPE(__GLXextFuncPtr, POINTER(GLubyte)) # /usr/include/GL/glx.h:322 +class struct_anon_96(Structure): + __slots__ = [ + 'event_type', + 'draw_type', + 'serial', + 'send_event', + 'display', + 'drawable', + 'buffer_mask', + 'aux_buffer', + 'x', + 'y', + 'width', + 'height', + 'count', + ] +struct_anon_96._fields_ = [ + ('event_type', c_int), + ('draw_type', c_int), + ('serial', c_ulong), + ('send_event', c_int), + ('display', POINTER(Display)), + ('drawable', GLXDrawable), + ('buffer_mask', c_uint), + ('aux_buffer', c_uint), + ('x', c_int), + ('y', c_int), + ('width', c_int), + ('height', c_int), + ('count', c_int), +] + +GLXPbufferClobberEvent = struct_anon_96 # /usr/include/GL/glx.h:343 +class struct___GLXEvent(Union): + __slots__ = [ + 'glxpbufferclobber', + 'pad', + ] +struct___GLXEvent._fields_ = [ + ('glxpbufferclobber', GLXPbufferClobberEvent), + ('pad', c_long * 24), +] + +GLXEvent = struct___GLXEvent # /usr/include/GL/glx.h:348 +# GLXEXT_LEGACY (/usr/include/GL/glx.h:350) +# VERSION_1_3 (/usr/include/GL/glxext.h:59) +# VERSION_1_4 (/usr/include/GL/glxext.h:118) +# ARB_get_proc_address (/usr/include/GL/glxext.h:123) +# ARB_multisample (/usr/include/GL/glxext.h:126) +# ARB_fbconfig_float (/usr/include/GL/glxext.h:131) +# SGIS_multisample (/usr/include/GL/glxext.h:136) +# EXT_visual_info (/usr/include/GL/glxext.h:141) +# SGI_swap_control (/usr/include/GL/glxext.h:160) +# SGI_video_sync (/usr/include/GL/glxext.h:163) +# SGI_make_current_read (/usr/include/GL/glxext.h:166) +# SGIX_video_source (/usr/include/GL/glxext.h:169) +# EXT_visual_rating (/usr/include/GL/glxext.h:172) +# EXT_import_context (/usr/include/GL/glxext.h:179) +# SGIX_fbconfig (/usr/include/GL/glxext.h:185) +# SGIX_pbuffer (/usr/include/GL/glxext.h:199) +# SGI_cushion (/usr/include/GL/glxext.h:227) +# SGIX_video_resize (/usr/include/GL/glxext.h:230) +# SGIX_dmbuffer (/usr/include/GL/glxext.h:235) +# SGIX_swap_group (/usr/include/GL/glxext.h:239) +# SGIX_swap_barrier (/usr/include/GL/glxext.h:242) +# SGIS_blended_overlay (/usr/include/GL/glxext.h:245) +# SGIS_shared_multisample (/usr/include/GL/glxext.h:249) +# SUN_get_transparent_index (/usr/include/GL/glxext.h:254) +# 3DFX_multisample (/usr/include/GL/glxext.h:257) +# MESA_copy_sub_buffer (/usr/include/GL/glxext.h:262) +# MESA_pixmap_colormap (/usr/include/GL/glxext.h:265) +# MESA_release_buffers (/usr/include/GL/glxext.h:268) +# MESA_set_3dfx_mode (/usr/include/GL/glxext.h:271) +# SGIX_visual_select_group (/usr/include/GL/glxext.h:276) +# OML_swap_method (/usr/include/GL/glxext.h:280) +# OML_sync_control (/usr/include/GL/glxext.h:287) +# NV_float_buffer (/usr/include/GL/glxext.h:290) +# SGIX_hyperpipe (/usr/include/GL/glxext.h:294) +# MESA_agp_offset (/usr/include/GL/glxext.h:307) +# ARB_get_proc_address (/usr/include/GL/glxext.h:313) +# SGIX_video_source (/usr/include/GL/glxext.h:317) +# SGIX_fbconfig (/usr/include/GL/glxext.h:321) +# SGIX_pbuffer (/usr/include/GL/glxext.h:326) +# VERSION_1_3 (/usr/include/GL/glxext.h:358) +# VERSION_1_4 (/usr/include/GL/glxext.h:400) +# ARB_get_proc_address (/usr/include/GL/glxext.h:408) +# ARB_multisample (/usr/include/GL/glxext.h:416) +# ARB_fbconfig_float (/usr/include/GL/glxext.h:420) +# SGIS_multisample (/usr/include/GL/glxext.h:424) +# EXT_visual_info (/usr/include/GL/glxext.h:428) +# SGI_swap_control (/usr/include/GL/glxext.h:432) +# SGI_video_sync (/usr/include/GL/glxext.h:440) +# SGI_make_current_read (/usr/include/GL/glxext.h:450) +# SGIX_video_source (/usr/include/GL/glxext.h:460) +# EXT_visual_rating (/usr/include/GL/glxext.h:472) +# EXT_import_context (/usr/include/GL/glxext.h:476) +# SGIX_fbconfig (/usr/include/GL/glxext.h:492) +# SGIX_pbuffer (/usr/include/GL/glxext.h:510) +# SGI_cushion (/usr/include/GL/glxext.h:526) +# SGIX_video_resize (/usr/include/GL/glxext.h:534) +# SGIX_dmbuffer (/usr/include/GL/glxext.h:550) +# SGIX_swap_group (/usr/include/GL/glxext.h:560) +# SGIX_swap_barrier (/usr/include/GL/glxext.h:568) +# SUN_get_transparent_index (/usr/include/GL/glxext.h:578) +# MESA_copy_sub_buffer (/usr/include/GL/glxext.h:586) +# MESA_pixmap_colormap (/usr/include/GL/glxext.h:594) +# MESA_release_buffers (/usr/include/GL/glxext.h:602) +# MESA_set_3dfx_mode (/usr/include/GL/glxext.h:610) +# SGIX_visual_select_group (/usr/include/GL/glxext.h:618) +# OML_swap_method (/usr/include/GL/glxext.h:622) +# OML_sync_control (/usr/include/GL/glxext.h:626) +# NV_float_buffer (/usr/include/GL/glxext.h:642) +# SGIX_hyperpipe (/usr/include/GL/glxext.h:646) +# MESA_agp_offset (/usr/include/GL/glxext.h:693) + +__all__ = ['GLX_USE_GL', 'GLX_BUFFER_SIZE', 'GLX_LEVEL', 'GLX_RGBA', +'GLX_DOUBLEBUFFER', 'GLX_STEREO', 'GLX_AUX_BUFFERS', 'GLX_RED_SIZE', +'GLX_GREEN_SIZE', 'GLX_BLUE_SIZE', 'GLX_ALPHA_SIZE', 'GLX_DEPTH_SIZE', +'GLX_STENCIL_SIZE', 'GLX_ACCUM_RED_SIZE', 'GLX_ACCUM_GREEN_SIZE', +'GLX_ACCUM_BLUE_SIZE', 'GLX_ACCUM_ALPHA_SIZE', 'GLX_BAD_SCREEN', +'GLX_BAD_ATTRIBUTE', 'GLX_NO_EXTENSION', 'GLX_BAD_VISUAL', 'GLX_BAD_CONTEXT', +'GLX_BAD_VALUE', 'GLX_BAD_ENUM', 'GLX_VENDOR', 'GLX_VERSION', +'GLX_EXTENSIONS', 'GLX_WINDOW_BIT', 'GLX_PIXMAP_BIT', 'GLX_PBUFFER_BIT', +'GLX_RGBA_BIT', 'GLX_COLOR_INDEX_BIT', 'GLX_PBUFFER_CLOBBER_MASK', +'GLX_FRONT_LEFT_BUFFER_BIT', 'GLX_FRONT_RIGHT_BUFFER_BIT', +'GLX_BACK_LEFT_BUFFER_BIT', 'GLX_BACK_RIGHT_BUFFER_BIT', +'GLX_AUX_BUFFERS_BIT', 'GLX_DEPTH_BUFFER_BIT', 'GLX_STENCIL_BUFFER_BIT', +'GLX_ACCUM_BUFFER_BIT', 'GLX_CONFIG_CAVEAT', 'GLX_X_VISUAL_TYPE', +'GLX_TRANSPARENT_TYPE', 'GLX_TRANSPARENT_INDEX_VALUE', +'GLX_TRANSPARENT_RED_VALUE', 'GLX_TRANSPARENT_GREEN_VALUE', +'GLX_TRANSPARENT_BLUE_VALUE', 'GLX_TRANSPARENT_ALPHA_VALUE', 'GLX_DONT_CARE', +'GLX_NONE', 'GLX_SLOW_CONFIG', 'GLX_TRUE_COLOR', 'GLX_DIRECT_COLOR', +'GLX_PSEUDO_COLOR', 'GLX_STATIC_COLOR', 'GLX_GRAY_SCALE', 'GLX_STATIC_GRAY', +'GLX_TRANSPARENT_RGB', 'GLX_TRANSPARENT_INDEX', 'GLX_VISUAL_ID', 'GLX_SCREEN', +'GLX_NON_CONFORMANT_CONFIG', 'GLX_DRAWABLE_TYPE', 'GLX_RENDER_TYPE', +'GLX_X_RENDERABLE', 'GLX_FBCONFIG_ID', 'GLX_RGBA_TYPE', +'GLX_COLOR_INDEX_TYPE', 'GLX_MAX_PBUFFER_WIDTH', 'GLX_MAX_PBUFFER_HEIGHT', +'GLX_MAX_PBUFFER_PIXELS', 'GLX_PRESERVED_CONTENTS', 'GLX_LARGEST_PBUFFER', +'GLX_WIDTH', 'GLX_HEIGHT', 'GLX_EVENT_MASK', 'GLX_DAMAGED', 'GLX_SAVED', +'GLX_WINDOW', 'GLX_PBUFFER', 'GLX_PBUFFER_HEIGHT', 'GLX_PBUFFER_WIDTH', +'GLX_SAMPLE_BUFFERS', 'GLX_SAMPLES', '__GLXextFuncPtr', 'GLXContextID', +'GLXPixmap', 'GLXDrawable', 'GLXPbuffer', 'GLXPbufferSGIX', 'GLXWindow', +'GLXFBConfigID', 'GLXContext', 'GLXFBConfig', 'glXChooseVisual', +'glXCopyContext', 'glXCreateContext', 'glXCreateGLXPixmap', +'glXDestroyContext', 'glXDestroyGLXPixmap', 'glXGetConfig', +'glXGetCurrentContext', 'glXGetCurrentDrawable', 'glXIsDirect', +'glXMakeCurrent', 'glXQueryExtension', 'glXQueryVersion', 'glXSwapBuffers', +'glXUseXFont', 'glXWaitGL', 'glXWaitX', 'GLX_VERSION_1_1', +'glXGetClientString', 'glXQueryServerString', 'glXQueryExtensionsString', +'GLX_VERSION_1_2', 'glXGetCurrentDisplay', 'GLX_VERSION_1_3', +'glXChooseFBConfig', 'glXCreateNewContext', 'glXCreatePbuffer', +'glXCreatePixmap', 'glXCreateWindow', 'glXDestroyPbuffer', 'glXDestroyPixmap', +'glXDestroyWindow', 'glXGetCurrentReadDrawable', 'glXGetFBConfigAttrib', +'glXGetFBConfigs', 'glXGetSelectedEvent', 'glXGetVisualFromFBConfig', +'glXMakeContextCurrent', 'glXQueryContext', 'glXQueryDrawable', +'glXSelectEvent', 'PFNGLXGETFBCONFIGSPROC', 'PFNGLXCHOOSEFBCONFIGPROC', +'PFNGLXGETFBCONFIGATTRIBPROC', 'PFNGLXGETVISUALFROMFBCONFIGPROC', +'PFNGLXCREATEWINDOWPROC', 'PFNGLXDESTROYWINDOWPROC', 'PFNGLXCREATEPIXMAPPROC', +'PFNGLXDESTROYPIXMAPPROC', 'PFNGLXCREATEPBUFFERPROC', +'PFNGLXDESTROYPBUFFERPROC', 'PFNGLXQUERYDRAWABLEPROC', +'PFNGLXCREATENEWCONTEXTPROC', 'PFNGLXMAKECONTEXTCURRENTPROC', +'PFNGLXGETCURRENTREADDRAWABLEPROC', 'PFNGLXGETCURRENTDISPLAYPROC', +'PFNGLXQUERYCONTEXTPROC', 'PFNGLXSELECTEVENTPROC', +'PFNGLXGETSELECTEDEVENTPROC', 'GLX_VERSION_1_4', 'glXGetProcAddress', +'PFNGLXGETPROCADDRESSPROC', 'GLX_ARB_get_proc_address', +'glXGetProcAddressARB', 'PFNGLXGETPROCADDRESSARBPROC', +'GLXPbufferClobberEvent', 'GLXEvent'] +# END GENERATED CONTENT (do not edit above this line) + +# From glxproto.h +GLXBadContext = 0 +GLXBadContextState = 1 +GLXBadDrawable = 2 +GLXBadPixmap = 3 +GLXBadContextTag = 4 +GLXBadCurrentWindow = 5 +GLXBadRenderRequest = 6 +GLXBadLargeRequest = 7 +GLXUnsupportedPrivateRequest = 8 +GLXBadFBConfig = 9 +GLXBadPbuffer = 10 +GLXBadCurrentDrawable = 11 +GLXBadWindow = 12 + +__all__ += ['GLXBadContext', 'GLXBadContextState', 'GLXBadDrawable', +'GLXBadPixmap', 'GLXBadContextTag', 'GLXBadCurrentWindow', +'GLXBadRenderRequest', 'GLXBadLargeRequest', 'GLXUnsupportedPrivateRequest', +'GLXBadFBConfig', 'GLXBadPbuffer', 'GLXBadCurrentDrawable', 'GLXBadWindow'] + + + diff --git a/pyglet/gl/glx_info.py b/pyglet/gl/glx_info.py new file mode 100644 index 0000000..9892204 --- /dev/null +++ b/pyglet/gl/glx_info.py @@ -0,0 +1,143 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''Information about version and extensions of current GLX implementation. + +Usage:: + + from pyglet.gl import glx_info + + if glx_info.have_extension('GLX_NV_float_buffer'): + # ... + +Or, if using more than one display:: + + from pyglet.gl.glx_info import GLXInfo + + info = GLXInfo(window._display) + if info.get_server_vendor() == 'ATI': + # ... + +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: glx_info.py 1579 2008-01-15 14:47:19Z Alex.Holkner $' + +from ctypes import * + +from pyglet.gl.glx import * +from pyglet.gl.glx import Display + +class GLXInfoException(Exception): + pass + +class GLXInfo(object): + def __init__(self, display=None): + self.display = display + + def set_display(self, display): + self.display = cast(pointer(display), POINTER(Display)) + + def check_display(self): + if not self.display: + raise GLXInfoException('No X11 display has been set yet.') + + def have_version(self, major, minor=0): + self.check_display() + if not glXQueryExtension(self.display, None, None): + raise GLXInfoException('pyglet requires an X server with GLX') + + server_version = self.get_server_version().split()[0] + client_version = self.get_client_version().split()[0] + + server = [int(i) for i in server_version.split('.')] + client = [int(i) for i in client_version.split('.')] + return (tuple(server) >= (major, minor) and + tuple(client) >= (major, minor)) + + def get_server_vendor(self): + self.check_display() + return glXQueryServerString(self.display, 0, GLX_VENDOR) + + def get_server_version(self): + # glXQueryServerString was introduced in GLX 1.1, so we need to use the + # 1.0 function here which queries the server implementation for its + # version. + self.check_display() + major = c_int() + minor = c_int() + if not glXQueryVersion(self.display, byref(major), byref(minor)): + raise GLXInfoException('Could not determine GLX server version') + return '%s.%s'%(major.value, minor.value) + + def get_server_extensions(self): + self.check_display() + return glXQueryServerString(self.display, 0, GLX_EXTENSIONS).split() + + def get_client_vendor(self): + self.check_display() + return glXGetClientString(self.display, GLX_VENDOR) + + def get_client_version(self): + self.check_display() + return glXGetClientString(self.display, GLX_VERSION) + + def get_client_extensions(self): + self.check_display() + return glXGetClientString(self.display, GLX_EXTENSIONS).split() + + def get_extensions(self): + self.check_display() + return glXQueryExtensionsString(self.display, 0).split() + + def have_extension(self, extension): + self.check_display() + if not self.have_version(1, 1): + return False + return extension in self.get_extensions() + +# Single instance suitable for apps that use only a single display. +_glx_info = GLXInfo() + +set_display = _glx_info.set_display +check_display = _glx_info.check_display +have_version = _glx_info.have_version +get_server_vendor = _glx_info.get_server_vendor +get_server_version = _glx_info.get_server_version +get_server_extensions = _glx_info.get_server_extensions +get_client_vendor = _glx_info.get_client_vendor +get_client_version = _glx_info.get_client_version +get_client_extensions = _glx_info.get_client_extensions +get_extensions = _glx_info.get_extensions +have_extension = _glx_info.have_extension diff --git a/pyglet/gl/glxext_arb.py b/pyglet/gl/glxext_arb.py new file mode 100644 index 0000000..c6f65ec --- /dev/null +++ b/pyglet/gl/glxext_arb.py @@ -0,0 +1,756 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +'''Wrapper for http://oss.sgi.com/projects/ogl-sample/ABI/glxext.h + +Generated by tools/gengl.py. +Do not modify this file. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: glxext_arb.py 1579 2008-01-15 14:47:19Z Alex.Holkner $' + +import ctypes +from ctypes import * +from pyglet.gl.lib import link_GLX as _link_function +from pyglet.gl.lib import c_ptrdiff_t + +if not hasattr(ctypes, 'c_int64'): + # XXX TODO completely wrong, but at least can import. + # Can c_longlong still be used? + c_int64 = c_long + c_uint64 = c_ulong + +# BEGIN GENERATED CONTENT (do not edit below this line) + +# This content is generated by tools/gengl.py. +# Wrapper for http://oss.sgi.com/projects/ogl-sample/ABI/glxext.h + + +# VERSION_1_3 (/usr/include/GL/glx.h:73) +# VERSION_1_4 (/usr/include/GL/glx.h:132) +# ARB_get_proc_address (/usr/include/GL/glx.h:137) +# VERSION_1_1 (/usr/include/GL/glx.h:209) +# VERSION_1_2 (/usr/include/GL/glx.h:222) +# VERSION_1_3 (/usr/include/GL/glx.h:230) +# VERSION_1_4 (/usr/include/GL/glx.h:302) +# ARB_get_proc_address (/usr/include/GL/glx.h:318) +# GLXEXT_LEGACY (/usr/include/GL/glx.h:350) +GLAPI = 0 # GL/glxext.h:49 +GLX_GLXEXT_VERSION = 11 # GL/glxext.h:57 +# VERSION_1_3 (GL/glxext.h:59) +# VERSION_1_4 (GL/glxext.h:118) +# ARB_get_proc_address (GL/glxext.h:123) +# ARB_multisample (GL/glxext.h:126) +GLX_SAMPLE_BUFFERS_ARB = 100000 # GL/glxext.h:127 +GLX_SAMPLES_ARB = 100001 # GL/glxext.h:128 +# ARB_fbconfig_float (GL/glxext.h:131) +GLX_RGBA_FLOAT_TYPE_ARB = 8377 # GL/glxext.h:132 +GLX_RGBA_FLOAT_BIT_ARB = 4 # GL/glxext.h:133 +# SGIS_multisample (GL/glxext.h:136) +GLX_SAMPLE_BUFFERS_SGIS = 100000 # GL/glxext.h:137 +GLX_SAMPLES_SGIS = 100001 # GL/glxext.h:138 +# EXT_visual_info (GL/glxext.h:141) +GLX_X_VISUAL_TYPE_EXT = 34 # GL/glxext.h:142 +GLX_TRANSPARENT_TYPE_EXT = 35 # GL/glxext.h:143 +GLX_TRANSPARENT_INDEX_VALUE_EXT = 36 # GL/glxext.h:144 +GLX_TRANSPARENT_RED_VALUE_EXT = 37 # GL/glxext.h:145 +GLX_TRANSPARENT_GREEN_VALUE_EXT = 38 # GL/glxext.h:146 +GLX_TRANSPARENT_BLUE_VALUE_EXT = 39 # GL/glxext.h:147 +GLX_TRANSPARENT_ALPHA_VALUE_EXT = 40 # GL/glxext.h:148 +GLX_NONE_EXT = 32768 # GL/glxext.h:149 +GLX_TRUE_COLOR_EXT = 32770 # GL/glxext.h:150 +GLX_DIRECT_COLOR_EXT = 32771 # GL/glxext.h:151 +GLX_PSEUDO_COLOR_EXT = 32772 # GL/glxext.h:152 +GLX_STATIC_COLOR_EXT = 32773 # GL/glxext.h:153 +GLX_GRAY_SCALE_EXT = 32774 # GL/glxext.h:154 +GLX_STATIC_GRAY_EXT = 32775 # GL/glxext.h:155 +GLX_TRANSPARENT_RGB_EXT = 32776 # GL/glxext.h:156 +GLX_TRANSPARENT_INDEX_EXT = 32777 # GL/glxext.h:157 +# SGI_swap_control (GL/glxext.h:160) +# SGI_video_sync (GL/glxext.h:163) +# SGI_make_current_read (GL/glxext.h:166) +# SGIX_video_source (GL/glxext.h:169) +# EXT_visual_rating (GL/glxext.h:172) +GLX_VISUAL_CAVEAT_EXT = 32 # GL/glxext.h:173 +GLX_SLOW_VISUAL_EXT = 32769 # GL/glxext.h:174 +GLX_NON_CONFORMANT_VISUAL_EXT = 32781 # GL/glxext.h:175 +# EXT_import_context (GL/glxext.h:179) +GLX_SHARE_CONTEXT_EXT = 32778 # GL/glxext.h:180 +GLX_VISUAL_ID_EXT = 32779 # GL/glxext.h:181 +GLX_SCREEN_EXT = 32780 # GL/glxext.h:182 +# SGIX_fbconfig (GL/glxext.h:185) +GLX_WINDOW_BIT_SGIX = 1 # GL/glxext.h:186 +GLX_PIXMAP_BIT_SGIX = 2 # GL/glxext.h:187 +GLX_RGBA_BIT_SGIX = 1 # GL/glxext.h:188 +GLX_COLOR_INDEX_BIT_SGIX = 2 # GL/glxext.h:189 +GLX_DRAWABLE_TYPE_SGIX = 32784 # GL/glxext.h:190 +GLX_RENDER_TYPE_SGIX = 32785 # GL/glxext.h:191 +GLX_X_RENDERABLE_SGIX = 32786 # GL/glxext.h:192 +GLX_FBCONFIG_ID_SGIX = 32787 # GL/glxext.h:193 +GLX_RGBA_TYPE_SGIX = 32788 # GL/glxext.h:194 +GLX_COLOR_INDEX_TYPE_SGIX = 32789 # GL/glxext.h:195 +# SGIX_pbuffer (GL/glxext.h:199) +GLX_PBUFFER_BIT_SGIX = 4 # GL/glxext.h:200 +GLX_BUFFER_CLOBBER_MASK_SGIX = 134217728 # GL/glxext.h:201 +GLX_FRONT_LEFT_BUFFER_BIT_SGIX = 1 # GL/glxext.h:202 +GLX_FRONT_RIGHT_BUFFER_BIT_SGIX = 2 # GL/glxext.h:203 +GLX_BACK_LEFT_BUFFER_BIT_SGIX = 4 # GL/glxext.h:204 +GLX_BACK_RIGHT_BUFFER_BIT_SGIX = 8 # GL/glxext.h:205 +GLX_AUX_BUFFERS_BIT_SGIX = 16 # GL/glxext.h:206 +GLX_DEPTH_BUFFER_BIT_SGIX = 32 # GL/glxext.h:207 +GLX_STENCIL_BUFFER_BIT_SGIX = 64 # GL/glxext.h:208 +GLX_ACCUM_BUFFER_BIT_SGIX = 128 # GL/glxext.h:209 +GLX_SAMPLE_BUFFERS_BIT_SGIX = 256 # GL/glxext.h:210 +GLX_MAX_PBUFFER_WIDTH_SGIX = 32790 # GL/glxext.h:211 +GLX_MAX_PBUFFER_HEIGHT_SGIX = 32791 # GL/glxext.h:212 +GLX_MAX_PBUFFER_PIXELS_SGIX = 32792 # GL/glxext.h:213 +GLX_OPTIMAL_PBUFFER_WIDTH_SGIX = 32793 # GL/glxext.h:214 +GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX = 32794 # GL/glxext.h:215 +GLX_PRESERVED_CONTENTS_SGIX = 32795 # GL/glxext.h:216 +GLX_LARGEST_PBUFFER_SGIX = 32796 # GL/glxext.h:217 +GLX_WIDTH_SGIX = 32797 # GL/glxext.h:218 +GLX_HEIGHT_SGIX = 32798 # GL/glxext.h:219 +GLX_EVENT_MASK_SGIX = 32799 # GL/glxext.h:220 +GLX_DAMAGED_SGIX = 32800 # GL/glxext.h:221 +GLX_SAVED_SGIX = 32801 # GL/glxext.h:222 +GLX_WINDOW_SGIX = 32802 # GL/glxext.h:223 +GLX_PBUFFER_SGIX = 32803 # GL/glxext.h:224 +# SGI_cushion (GL/glxext.h:227) +# SGIX_video_resize (GL/glxext.h:230) +GLX_SYNC_FRAME_SGIX = 0 # GL/glxext.h:231 +GLX_SYNC_SWAP_SGIX = 1 # GL/glxext.h:232 +# SGIX_dmbuffer (GL/glxext.h:235) +GLX_DIGITAL_MEDIA_PBUFFER_SGIX = 32804 # GL/glxext.h:236 +# SGIX_swap_group (GL/glxext.h:239) +# SGIX_swap_barrier (GL/glxext.h:242) +# SGIS_blended_overlay (GL/glxext.h:245) +GLX_BLENDED_RGBA_SGIS = 32805 # GL/glxext.h:246 +# SGIS_shared_multisample (GL/glxext.h:249) +GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS = 32806 # GL/glxext.h:250 +GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS = 32807 # GL/glxext.h:251 +# SUN_get_transparent_index (GL/glxext.h:254) +# 3DFX_multisample (GL/glxext.h:257) +GLX_SAMPLE_BUFFERS_3DFX = 32848 # GL/glxext.h:258 +GLX_SAMPLES_3DFX = 32849 # GL/glxext.h:259 +# MESA_copy_sub_buffer (GL/glxext.h:262) +# MESA_pixmap_colormap (GL/glxext.h:265) +# MESA_release_buffers (GL/glxext.h:268) +# MESA_set_3dfx_mode (GL/glxext.h:271) +GLX_3DFX_WINDOW_MODE_MESA = 1 # GL/glxext.h:272 +GLX_3DFX_FULLSCREEN_MODE_MESA = 2 # GL/glxext.h:273 +# SGIX_visual_select_group (GL/glxext.h:276) +GLX_VISUAL_SELECT_GROUP_SGIX = 32808 # GL/glxext.h:277 +# OML_swap_method (GL/glxext.h:280) +GLX_SWAP_METHOD_OML = 32864 # GL/glxext.h:281 +GLX_SWAP_EXCHANGE_OML = 32865 # GL/glxext.h:282 +GLX_SWAP_COPY_OML = 32866 # GL/glxext.h:283 +GLX_SWAP_UNDEFINED_OML = 32867 # GL/glxext.h:284 +# OML_sync_control (GL/glxext.h:287) +# NV_float_buffer (GL/glxext.h:290) +GLX_FLOAT_COMPONENTS_NV = 8368 # GL/glxext.h:291 +# SGIX_hyperpipe (GL/glxext.h:294) +GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX = 80 # GL/glxext.h:295 +GLX_BAD_HYPERPIPE_CONFIG_SGIX = 91 # GL/glxext.h:296 +GLX_BAD_HYPERPIPE_SGIX = 92 # GL/glxext.h:297 +GLX_HYPERPIPE_DISPLAY_PIPE_SGIX = 1 # GL/glxext.h:298 +GLX_HYPERPIPE_RENDER_PIPE_SGIX = 2 # GL/glxext.h:299 +GLX_PIPE_RECT_SGIX = 1 # GL/glxext.h:300 +GLX_PIPE_RECT_LIMITS_SGIX = 2 # GL/glxext.h:301 +GLX_HYPERPIPE_STEREO_SGIX = 3 # GL/glxext.h:302 +GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX = 4 # GL/glxext.h:303 +GLX_HYPERPIPE_ID_SGIX = 32816 # GL/glxext.h:304 +# MESA_agp_offset (GL/glxext.h:307) +# ARB_get_proc_address (GL/glxext.h:313) +# SGIX_video_source (GL/glxext.h:317) +XID = c_ulong # /usr/include/X11/X.h:71 +GLXVideoSourceSGIX = XID # GL/glxext.h:318 +# SGIX_fbconfig (GL/glxext.h:321) +GLXFBConfigIDSGIX = XID # GL/glxext.h:322 +class struct___GLXFBConfigRec(Structure): + __slots__ = [ + ] +struct___GLXFBConfigRec._fields_ = [ + ('_opaque_struct', c_int) +] + +GLXFBConfigSGIX = POINTER(struct___GLXFBConfigRec) # GL/glxext.h:323 +# SGIX_pbuffer (GL/glxext.h:326) +class struct_anon_199(Structure): + __slots__ = [ + 'type', + 'serial', + 'send_event', + 'display', + 'drawable', + 'event_type', + 'draw_type', + 'mask', + 'x', + 'y', + 'width', + 'height', + 'count', + ] +class struct__XDisplay(Structure): + __slots__ = [ + ] +struct__XDisplay._fields_ = [ + ('_opaque_struct', c_int) +] + +Display = struct__XDisplay # /usr/include/X11/Xlib.h:519 +GLXDrawable = XID # /usr/include/GL/glx.h:146 +struct_anon_199._fields_ = [ + ('type', c_int), + ('serial', c_ulong), + ('send_event', c_int), + ('display', POINTER(Display)), + ('drawable', GLXDrawable), + ('event_type', c_int), + ('draw_type', c_int), + ('mask', c_uint), + ('x', c_int), + ('y', c_int), + ('width', c_int), + ('height', c_int), + ('count', c_int), +] + +GLXBufferClobberEventSGIX = struct_anon_199 # GL/glxext.h:340 +# VERSION_1_3 (GL/glxext.h:358) +# VERSION_1_4 (GL/glxext.h:400) +# ARB_get_proc_address (GL/glxext.h:408) +# ARB_multisample (GL/glxext.h:416) +GLX_ARB_multisample = 1 # GL/glxext.h:417 +# ARB_fbconfig_float (GL/glxext.h:420) +GLX_ARB_fbconfig_float = 1 # GL/glxext.h:421 +# SGIS_multisample (GL/glxext.h:424) +GLX_SGIS_multisample = 1 # GL/glxext.h:425 +# EXT_visual_info (GL/glxext.h:428) +GLX_EXT_visual_info = 1 # GL/glxext.h:429 +# SGI_swap_control (GL/glxext.h:432) +GLX_SGI_swap_control = 1 # GL/glxext.h:433 +# GL/glxext.h:435 +glXSwapIntervalSGI = _link_function('glXSwapIntervalSGI', c_int, [c_int], 'SGI_swap_control') + +PFNGLXSWAPINTERVALSGIPROC = CFUNCTYPE(c_int, c_int) # GL/glxext.h:437 +# SGI_video_sync (GL/glxext.h:440) +GLX_SGI_video_sync = 1 # GL/glxext.h:441 +# GL/glxext.h:443 +glXGetVideoSyncSGI = _link_function('glXGetVideoSyncSGI', c_int, [POINTER(c_uint)], 'SGI_video_sync') + +# GL/glxext.h:444 +glXWaitVideoSyncSGI = _link_function('glXWaitVideoSyncSGI', c_int, [c_int, c_int, POINTER(c_uint)], 'SGI_video_sync') + +PFNGLXGETVIDEOSYNCSGIPROC = CFUNCTYPE(c_int, POINTER(c_uint)) # GL/glxext.h:446 +PFNGLXWAITVIDEOSYNCSGIPROC = CFUNCTYPE(c_int, c_int, c_int, POINTER(c_uint)) # GL/glxext.h:447 +# SGI_make_current_read (GL/glxext.h:450) +GLX_SGI_make_current_read = 1 # GL/glxext.h:451 +class struct___GLXcontextRec(Structure): + __slots__ = [ + ] +struct___GLXcontextRec._fields_ = [ + ('_opaque_struct', c_int) +] + +GLXContext = POINTER(struct___GLXcontextRec) # /usr/include/GL/glx.h:155 +# GL/glxext.h:453 +glXMakeCurrentReadSGI = _link_function('glXMakeCurrentReadSGI', c_int, [POINTER(Display), GLXDrawable, GLXDrawable, GLXContext], 'SGI_make_current_read') + +# GL/glxext.h:454 +glXGetCurrentReadDrawableSGI = _link_function('glXGetCurrentReadDrawableSGI', GLXDrawable, [], 'SGI_make_current_read') + +PFNGLXMAKECURRENTREADSGIPROC = CFUNCTYPE(c_int, POINTER(Display), GLXDrawable, GLXDrawable, GLXContext) # GL/glxext.h:456 +PFNGLXGETCURRENTREADDRAWABLESGIPROC = CFUNCTYPE(GLXDrawable) # GL/glxext.h:457 +# SGIX_video_source (GL/glxext.h:460) +GLX_SGIX_video_source = 1 # GL/glxext.h:461 +# EXT_visual_rating (GL/glxext.h:472) +GLX_EXT_visual_rating = 1 # GL/glxext.h:473 +# EXT_import_context (GL/glxext.h:476) +GLX_EXT_import_context = 1 # GL/glxext.h:477 +# GL/glxext.h:479 +glXGetCurrentDisplayEXT = _link_function('glXGetCurrentDisplayEXT', POINTER(Display), [], 'EXT_import_context') + +# GL/glxext.h:480 +glXQueryContextInfoEXT = _link_function('glXQueryContextInfoEXT', c_int, [POINTER(Display), GLXContext, c_int, POINTER(c_int)], 'EXT_import_context') + +GLXContextID = XID # /usr/include/GL/glx.h:144 +# GL/glxext.h:481 +glXGetContextIDEXT = _link_function('glXGetContextIDEXT', GLXContextID, [GLXContext], 'EXT_import_context') + +# GL/glxext.h:482 +glXImportContextEXT = _link_function('glXImportContextEXT', GLXContext, [POINTER(Display), GLXContextID], 'EXT_import_context') + +# GL/glxext.h:483 +glXFreeContextEXT = _link_function('glXFreeContextEXT', None, [POINTER(Display), GLXContext], 'EXT_import_context') + +PFNGLXGETCURRENTDISPLAYEXTPROC = CFUNCTYPE(POINTER(Display)) # GL/glxext.h:485 +PFNGLXQUERYCONTEXTINFOEXTPROC = CFUNCTYPE(c_int, POINTER(Display), GLXContext, c_int, POINTER(c_int)) # GL/glxext.h:486 +PFNGLXGETCONTEXTIDEXTPROC = CFUNCTYPE(GLXContextID, GLXContext) # GL/glxext.h:487 +PFNGLXIMPORTCONTEXTEXTPROC = CFUNCTYPE(GLXContext, POINTER(Display), GLXContextID) # GL/glxext.h:488 +PFNGLXFREECONTEXTEXTPROC = CFUNCTYPE(None, POINTER(Display), GLXContext) # GL/glxext.h:489 +# SGIX_fbconfig (GL/glxext.h:492) +GLX_SGIX_fbconfig = 1 # GL/glxext.h:493 +# GL/glxext.h:495 +glXGetFBConfigAttribSGIX = _link_function('glXGetFBConfigAttribSGIX', c_int, [POINTER(Display), GLXFBConfigSGIX, c_int, POINTER(c_int)], 'SGIX_fbconfig') + +# GL/glxext.h:496 +glXChooseFBConfigSGIX = _link_function('glXChooseFBConfigSGIX', POINTER(GLXFBConfigSGIX), [POINTER(Display), c_int, POINTER(c_int), POINTER(c_int)], 'SGIX_fbconfig') + +GLXPixmap = XID # /usr/include/GL/glx.h:145 +Pixmap = XID # /usr/include/X11/X.h:107 +# GL/glxext.h:497 +glXCreateGLXPixmapWithConfigSGIX = _link_function('glXCreateGLXPixmapWithConfigSGIX', GLXPixmap, [POINTER(Display), GLXFBConfigSGIX, Pixmap], 'SGIX_fbconfig') + +# GL/glxext.h:498 +glXCreateContextWithConfigSGIX = _link_function('glXCreateContextWithConfigSGIX', GLXContext, [POINTER(Display), GLXFBConfigSGIX, c_int, GLXContext, c_int], 'SGIX_fbconfig') + +class struct_anon_196(Structure): + __slots__ = [ + 'visual', + 'visualid', + 'screen', + 'depth', + 'class', + 'red_mask', + 'green_mask', + 'blue_mask', + 'colormap_size', + 'bits_per_rgb', + ] +class struct_anon_113(Structure): + __slots__ = [ + 'ext_data', + 'visualid', + 'class', + 'red_mask', + 'green_mask', + 'blue_mask', + 'bits_per_rgb', + 'map_entries', + ] +class struct__XExtData(Structure): + __slots__ = [ + 'number', + 'next', + 'free_private', + 'private_data', + ] +XPointer = c_char_p # /usr/include/X11/Xlib.h:108 +struct__XExtData._fields_ = [ + ('number', c_int), + ('next', POINTER(struct__XExtData)), + ('free_private', POINTER(CFUNCTYPE(c_int, POINTER(struct__XExtData)))), + ('private_data', XPointer), +] + +XExtData = struct__XExtData # /usr/include/X11/Xlib.h:187 +VisualID = c_ulong # /usr/include/X11/X.h:81 +struct_anon_113._fields_ = [ + ('ext_data', POINTER(XExtData)), + ('visualid', VisualID), + ('class', c_int), + ('red_mask', c_ulong), + ('green_mask', c_ulong), + ('blue_mask', c_ulong), + ('bits_per_rgb', c_int), + ('map_entries', c_int), +] + +Visual = struct_anon_113 # /usr/include/X11/Xlib.h:270 +struct_anon_196._fields_ = [ + ('visual', POINTER(Visual)), + ('visualid', VisualID), + ('screen', c_int), + ('depth', c_int), + ('class', c_int), + ('red_mask', c_ulong), + ('green_mask', c_ulong), + ('blue_mask', c_ulong), + ('colormap_size', c_int), + ('bits_per_rgb', c_int), +] + +XVisualInfo = struct_anon_196 # /usr/include/X11/Xutil.h:296 +# GL/glxext.h:499 +glXGetVisualFromFBConfigSGIX = _link_function('glXGetVisualFromFBConfigSGIX', POINTER(XVisualInfo), [POINTER(Display), GLXFBConfigSGIX], 'SGIX_fbconfig') + +# GL/glxext.h:500 +glXGetFBConfigFromVisualSGIX = _link_function('glXGetFBConfigFromVisualSGIX', GLXFBConfigSGIX, [POINTER(Display), POINTER(XVisualInfo)], 'SGIX_fbconfig') + +PFNGLXGETFBCONFIGATTRIBSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), GLXFBConfigSGIX, c_int, POINTER(c_int)) # GL/glxext.h:502 +PFNGLXCHOOSEFBCONFIGSGIXPROC = CFUNCTYPE(POINTER(GLXFBConfigSGIX), POINTER(Display), c_int, POINTER(c_int), POINTER(c_int)) # GL/glxext.h:503 +PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC = CFUNCTYPE(GLXPixmap, POINTER(Display), GLXFBConfigSGIX, Pixmap) # GL/glxext.h:504 +PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC = CFUNCTYPE(GLXContext, POINTER(Display), GLXFBConfigSGIX, c_int, GLXContext, c_int) # GL/glxext.h:505 +PFNGLXGETVISUALFROMFBCONFIGSGIXPROC = CFUNCTYPE(POINTER(XVisualInfo), POINTER(Display), GLXFBConfigSGIX) # GL/glxext.h:506 +PFNGLXGETFBCONFIGFROMVISUALSGIXPROC = CFUNCTYPE(GLXFBConfigSGIX, POINTER(Display), POINTER(XVisualInfo)) # GL/glxext.h:507 +# SGIX_pbuffer (GL/glxext.h:510) +GLX_SGIX_pbuffer = 1 # GL/glxext.h:511 +GLXPbufferSGIX = XID # /usr/include/GL/glx.h:148 +# GL/glxext.h:513 +glXCreateGLXPbufferSGIX = _link_function('glXCreateGLXPbufferSGIX', GLXPbufferSGIX, [POINTER(Display), GLXFBConfigSGIX, c_uint, c_uint, POINTER(c_int)], 'SGIX_pbuffer') + +# GL/glxext.h:514 +glXDestroyGLXPbufferSGIX = _link_function('glXDestroyGLXPbufferSGIX', None, [POINTER(Display), GLXPbufferSGIX], 'SGIX_pbuffer') + +# GL/glxext.h:515 +glXQueryGLXPbufferSGIX = _link_function('glXQueryGLXPbufferSGIX', c_int, [POINTER(Display), GLXPbufferSGIX, c_int, POINTER(c_uint)], 'SGIX_pbuffer') + +# GL/glxext.h:516 +glXSelectEventSGIX = _link_function('glXSelectEventSGIX', None, [POINTER(Display), GLXDrawable, c_ulong], 'SGIX_pbuffer') + +# GL/glxext.h:517 +glXGetSelectedEventSGIX = _link_function('glXGetSelectedEventSGIX', None, [POINTER(Display), GLXDrawable, POINTER(c_ulong)], 'SGIX_pbuffer') + +PFNGLXCREATEGLXPBUFFERSGIXPROC = CFUNCTYPE(GLXPbufferSGIX, POINTER(Display), GLXFBConfigSGIX, c_uint, c_uint, POINTER(c_int)) # GL/glxext.h:519 +PFNGLXDESTROYGLXPBUFFERSGIXPROC = CFUNCTYPE(None, POINTER(Display), GLXPbufferSGIX) # GL/glxext.h:520 +PFNGLXQUERYGLXPBUFFERSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), GLXPbufferSGIX, c_int, POINTER(c_uint)) # GL/glxext.h:521 +PFNGLXSELECTEVENTSGIXPROC = CFUNCTYPE(None, POINTER(Display), GLXDrawable, c_ulong) # GL/glxext.h:522 +PFNGLXGETSELECTEDEVENTSGIXPROC = CFUNCTYPE(None, POINTER(Display), GLXDrawable, POINTER(c_ulong)) # GL/glxext.h:523 +# SGI_cushion (GL/glxext.h:526) +GLX_SGI_cushion = 1 # GL/glxext.h:527 +Window = XID # /usr/include/X11/X.h:101 +# GL/glxext.h:529 +glXCushionSGI = _link_function('glXCushionSGI', None, [POINTER(Display), Window, c_float], 'SGI_cushion') + +PFNGLXCUSHIONSGIPROC = CFUNCTYPE(None, POINTER(Display), Window, c_float) # GL/glxext.h:531 +# SGIX_video_resize (GL/glxext.h:534) +GLX_SGIX_video_resize = 1 # GL/glxext.h:535 +# GL/glxext.h:537 +glXBindChannelToWindowSGIX = _link_function('glXBindChannelToWindowSGIX', c_int, [POINTER(Display), c_int, c_int, Window], 'SGIX_video_resize') + +# GL/glxext.h:538 +glXChannelRectSGIX = _link_function('glXChannelRectSGIX', c_int, [POINTER(Display), c_int, c_int, c_int, c_int, c_int, c_int], 'SGIX_video_resize') + +# GL/glxext.h:539 +glXQueryChannelRectSGIX = _link_function('glXQueryChannelRectSGIX', c_int, [POINTER(Display), c_int, c_int, POINTER(c_int), POINTER(c_int), POINTER(c_int), POINTER(c_int)], 'SGIX_video_resize') + +# GL/glxext.h:540 +glXQueryChannelDeltasSGIX = _link_function('glXQueryChannelDeltasSGIX', c_int, [POINTER(Display), c_int, c_int, POINTER(c_int), POINTER(c_int), POINTER(c_int), POINTER(c_int)], 'SGIX_video_resize') + +GLenum = c_uint # /usr/include/GL/gl.h:53 +# GL/glxext.h:541 +glXChannelRectSyncSGIX = _link_function('glXChannelRectSyncSGIX', c_int, [POINTER(Display), c_int, c_int, GLenum], 'SGIX_video_resize') + +PFNGLXBINDCHANNELTOWINDOWSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, c_int, Window) # GL/glxext.h:543 +PFNGLXCHANNELRECTSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, c_int, c_int, c_int, c_int, c_int) # GL/glxext.h:544 +PFNGLXQUERYCHANNELRECTSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, c_int, POINTER(c_int), POINTER(c_int), POINTER(c_int), POINTER(c_int)) # GL/glxext.h:545 +PFNGLXQUERYCHANNELDELTASSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, c_int, POINTER(c_int), POINTER(c_int), POINTER(c_int), POINTER(c_int)) # GL/glxext.h:546 +PFNGLXCHANNELRECTSYNCSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, c_int, GLenum) # GL/glxext.h:547 +# SGIX_dmbuffer (GL/glxext.h:550) +GLX_SGIX_dmbuffer = 1 # GL/glxext.h:551 +# SGIX_swap_group (GL/glxext.h:560) +GLX_SGIX_swap_group = 1 # GL/glxext.h:561 +# GL/glxext.h:563 +glXJoinSwapGroupSGIX = _link_function('glXJoinSwapGroupSGIX', None, [POINTER(Display), GLXDrawable, GLXDrawable], 'SGIX_swap_group') + +PFNGLXJOINSWAPGROUPSGIXPROC = CFUNCTYPE(None, POINTER(Display), GLXDrawable, GLXDrawable) # GL/glxext.h:565 +# SGIX_swap_barrier (GL/glxext.h:568) +GLX_SGIX_swap_barrier = 1 # GL/glxext.h:569 +# GL/glxext.h:571 +glXBindSwapBarrierSGIX = _link_function('glXBindSwapBarrierSGIX', None, [POINTER(Display), GLXDrawable, c_int], 'SGIX_swap_barrier') + +# GL/glxext.h:572 +glXQueryMaxSwapBarriersSGIX = _link_function('glXQueryMaxSwapBarriersSGIX', c_int, [POINTER(Display), c_int, POINTER(c_int)], 'SGIX_swap_barrier') + +PFNGLXBINDSWAPBARRIERSGIXPROC = CFUNCTYPE(None, POINTER(Display), GLXDrawable, c_int) # GL/glxext.h:574 +PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, POINTER(c_int)) # GL/glxext.h:575 +# SUN_get_transparent_index (GL/glxext.h:578) +GLX_SUN_get_transparent_index = 1 # GL/glxext.h:579 +# GL/glxext.h:581 +glXGetTransparentIndexSUN = _link_function('glXGetTransparentIndexSUN', c_int, [POINTER(Display), Window, Window, POINTER(c_long)], 'SUN_get_transparent_index') + +PFNGLXGETTRANSPARENTINDEXSUNPROC = CFUNCTYPE(c_int, POINTER(Display), Window, Window, POINTER(c_long)) # GL/glxext.h:583 +# MESA_copy_sub_buffer (GL/glxext.h:586) +GLX_MESA_copy_sub_buffer = 1 # GL/glxext.h:587 +# GL/glxext.h:589 +glXCopySubBufferMESA = _link_function('glXCopySubBufferMESA', None, [POINTER(Display), GLXDrawable, c_int, c_int, c_int, c_int], 'MESA_copy_sub_buffer') + +PFNGLXCOPYSUBBUFFERMESAPROC = CFUNCTYPE(None, POINTER(Display), GLXDrawable, c_int, c_int, c_int, c_int) # GL/glxext.h:591 +# MESA_pixmap_colormap (GL/glxext.h:594) +GLX_MESA_pixmap_colormap = 1 # GL/glxext.h:595 +Colormap = XID # /usr/include/X11/X.h:109 +# GL/glxext.h:597 +glXCreateGLXPixmapMESA = _link_function('glXCreateGLXPixmapMESA', GLXPixmap, [POINTER(Display), POINTER(XVisualInfo), Pixmap, Colormap], 'MESA_pixmap_colormap') + +PFNGLXCREATEGLXPIXMAPMESAPROC = CFUNCTYPE(GLXPixmap, POINTER(Display), POINTER(XVisualInfo), Pixmap, Colormap) # GL/glxext.h:599 +# MESA_release_buffers (GL/glxext.h:602) +GLX_MESA_release_buffers = 1 # GL/glxext.h:603 +# GL/glxext.h:605 +glXReleaseBuffersMESA = _link_function('glXReleaseBuffersMESA', c_int, [POINTER(Display), GLXDrawable], 'MESA_release_buffers') + +PFNGLXRELEASEBUFFERSMESAPROC = CFUNCTYPE(c_int, POINTER(Display), GLXDrawable) # GL/glxext.h:607 +# MESA_set_3dfx_mode (GL/glxext.h:610) +GLX_MESA_set_3dfx_mode = 1 # GL/glxext.h:611 +# GL/glxext.h:613 +glXSet3DfxModeMESA = _link_function('glXSet3DfxModeMESA', c_int, [c_int], 'MESA_set_3dfx_mode') + +PFNGLXSET3DFXMODEMESAPROC = CFUNCTYPE(c_int, c_int) # GL/glxext.h:615 +# SGIX_visual_select_group (GL/glxext.h:618) +GLX_SGIX_visual_select_group = 1 # GL/glxext.h:619 +# OML_swap_method (GL/glxext.h:622) +GLX_OML_swap_method = 1 # GL/glxext.h:623 +# OML_sync_control (GL/glxext.h:626) +GLX_OML_sync_control = 1 # GL/glxext.h:627 +# GL/glxext.h:629 +glXGetSyncValuesOML = _link_function('glXGetSyncValuesOML', c_int, [POINTER(Display), GLXDrawable, POINTER(c_int64), POINTER(c_int64), POINTER(c_int64)], 'OML_sync_control') + +# GL/glxext.h:630 +glXGetMscRateOML = _link_function('glXGetMscRateOML', c_int, [POINTER(Display), GLXDrawable, POINTER(c_int32), POINTER(c_int32)], 'OML_sync_control') + +# GL/glxext.h:631 +glXSwapBuffersMscOML = _link_function('glXSwapBuffersMscOML', c_int64, [POINTER(Display), GLXDrawable, c_int64, c_int64, c_int64], 'OML_sync_control') + +# GL/glxext.h:632 +glXWaitForMscOML = _link_function('glXWaitForMscOML', c_int, [POINTER(Display), GLXDrawable, c_int64, c_int64, c_int64, POINTER(c_int64), POINTER(c_int64), POINTER(c_int64)], 'OML_sync_control') + +# GL/glxext.h:633 +glXWaitForSbcOML = _link_function('glXWaitForSbcOML', c_int, [POINTER(Display), GLXDrawable, c_int64, POINTER(c_int64), POINTER(c_int64), POINTER(c_int64)], 'OML_sync_control') + +PFNGLXGETSYNCVALUESOMLPROC = CFUNCTYPE(c_int, POINTER(Display), GLXDrawable, POINTER(c_int64), POINTER(c_int64), POINTER(c_int64)) # GL/glxext.h:635 +PFNGLXGETMSCRATEOMLPROC = CFUNCTYPE(c_int, POINTER(Display), GLXDrawable, POINTER(c_int32), POINTER(c_int32)) # GL/glxext.h:636 +PFNGLXSWAPBUFFERSMSCOMLPROC = CFUNCTYPE(c_int64, POINTER(Display), GLXDrawable, c_int64, c_int64, c_int64) # GL/glxext.h:637 +PFNGLXWAITFORMSCOMLPROC = CFUNCTYPE(c_int, POINTER(Display), GLXDrawable, c_int64, c_int64, c_int64, POINTER(c_int64), POINTER(c_int64), POINTER(c_int64)) # GL/glxext.h:638 +PFNGLXWAITFORSBCOMLPROC = CFUNCTYPE(c_int, POINTER(Display), GLXDrawable, c_int64, POINTER(c_int64), POINTER(c_int64), POINTER(c_int64)) # GL/glxext.h:639 +# NV_float_buffer (GL/glxext.h:642) +GLX_NV_float_buffer = 1 # GL/glxext.h:643 +# SGIX_hyperpipe (GL/glxext.h:646) +GLX_SGIX_hyperpipe = 1 # GL/glxext.h:647 +class struct_anon_201(Structure): + __slots__ = [ + 'pipeName', + 'networkId', + ] +struct_anon_201._fields_ = [ + ('pipeName', c_char * 80), + ('networkId', c_int), +] + +GLXHyperpipeNetworkSGIX = struct_anon_201 # GL/glxext.h:652 +class struct_anon_202(Structure): + __slots__ = [ + 'pipeName', + 'channel', + 'participationType', + 'timeSlice', + ] +struct_anon_202._fields_ = [ + ('pipeName', c_char * 80), + ('channel', c_int), + ('participationType', c_uint), + ('timeSlice', c_int), +] + +GLXHyperpipeConfigSGIX = struct_anon_202 # GL/glxext.h:660 +class struct_anon_203(Structure): + __slots__ = [ + 'pipeName', + 'srcXOrigin', + 'srcYOrigin', + 'srcWidth', + 'srcHeight', + 'destXOrigin', + 'destYOrigin', + 'destWidth', + 'destHeight', + ] +struct_anon_203._fields_ = [ + ('pipeName', c_char * 80), + ('srcXOrigin', c_int), + ('srcYOrigin', c_int), + ('srcWidth', c_int), + ('srcHeight', c_int), + ('destXOrigin', c_int), + ('destYOrigin', c_int), + ('destWidth', c_int), + ('destHeight', c_int), +] + +GLXPipeRect = struct_anon_203 # GL/glxext.h:666 +class struct_anon_204(Structure): + __slots__ = [ + 'pipeName', + 'XOrigin', + 'YOrigin', + 'maxHeight', + 'maxWidth', + ] +struct_anon_204._fields_ = [ + ('pipeName', c_char * 80), + ('XOrigin', c_int), + ('YOrigin', c_int), + ('maxHeight', c_int), + ('maxWidth', c_int), +] + +GLXPipeRectLimits = struct_anon_204 # GL/glxext.h:671 +# GL/glxext.h:674 +glXQueryHyperpipeNetworkSGIX = _link_function('glXQueryHyperpipeNetworkSGIX', POINTER(GLXHyperpipeNetworkSGIX), [POINTER(Display), POINTER(c_int)], 'SGIX_hyperpipe') + +# GL/glxext.h:675 +glXHyperpipeConfigSGIX = _link_function('glXHyperpipeConfigSGIX', c_int, [POINTER(Display), c_int, c_int, POINTER(GLXHyperpipeConfigSGIX), POINTER(c_int)], 'SGIX_hyperpipe') + +# GL/glxext.h:676 +glXQueryHyperpipeConfigSGIX = _link_function('glXQueryHyperpipeConfigSGIX', POINTER(GLXHyperpipeConfigSGIX), [POINTER(Display), c_int, POINTER(c_int)], 'SGIX_hyperpipe') + +# GL/glxext.h:677 +glXDestroyHyperpipeConfigSGIX = _link_function('glXDestroyHyperpipeConfigSGIX', c_int, [POINTER(Display), c_int], 'SGIX_hyperpipe') + +# GL/glxext.h:678 +glXBindHyperpipeSGIX = _link_function('glXBindHyperpipeSGIX', c_int, [POINTER(Display), c_int], 'SGIX_hyperpipe') + +# GL/glxext.h:679 +glXQueryHyperpipeBestAttribSGIX = _link_function('glXQueryHyperpipeBestAttribSGIX', c_int, [POINTER(Display), c_int, c_int, c_int, POINTER(None), POINTER(None)], 'SGIX_hyperpipe') + +# GL/glxext.h:680 +glXHyperpipeAttribSGIX = _link_function('glXHyperpipeAttribSGIX', c_int, [POINTER(Display), c_int, c_int, c_int, POINTER(None)], 'SGIX_hyperpipe') + +# GL/glxext.h:681 +glXQueryHyperpipeAttribSGIX = _link_function('glXQueryHyperpipeAttribSGIX', c_int, [POINTER(Display), c_int, c_int, c_int, POINTER(None)], 'SGIX_hyperpipe') + +PFNGLXQUERYHYPERPIPENETWORKSGIXPROC = CFUNCTYPE(POINTER(GLXHyperpipeNetworkSGIX), POINTER(Display), POINTER(c_int)) # GL/glxext.h:683 +PFNGLXHYPERPIPECONFIGSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, c_int, POINTER(GLXHyperpipeConfigSGIX), POINTER(c_int)) # GL/glxext.h:684 +PFNGLXQUERYHYPERPIPECONFIGSGIXPROC = CFUNCTYPE(POINTER(GLXHyperpipeConfigSGIX), POINTER(Display), c_int, POINTER(c_int)) # GL/glxext.h:685 +PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int) # GL/glxext.h:686 +PFNGLXBINDHYPERPIPESGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int) # GL/glxext.h:687 +PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, c_int, c_int, POINTER(None), POINTER(None)) # GL/glxext.h:688 +PFNGLXHYPERPIPEATTRIBSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, c_int, c_int, POINTER(None)) # GL/glxext.h:689 +PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, c_int, c_int, POINTER(None)) # GL/glxext.h:690 +# MESA_agp_offset (GL/glxext.h:693) +GLX_MESA_agp_offset = 1 # GL/glxext.h:694 +# GL/glxext.h:696 +glXGetAGPOffsetMESA = _link_function('glXGetAGPOffsetMESA', c_uint, [POINTER(None)], 'MESA_agp_offset') + +PFNGLXGETAGPOFFSETMESAPROC = CFUNCTYPE(c_uint, POINTER(None)) # GL/glxext.h:698 + +__all__ = ['GLAPI', 'GLX_GLXEXT_VERSION', 'GLX_SAMPLE_BUFFERS_ARB', +'GLX_SAMPLES_ARB', 'GLX_RGBA_FLOAT_TYPE_ARB', 'GLX_RGBA_FLOAT_BIT_ARB', +'GLX_SAMPLE_BUFFERS_SGIS', 'GLX_SAMPLES_SGIS', 'GLX_X_VISUAL_TYPE_EXT', +'GLX_TRANSPARENT_TYPE_EXT', 'GLX_TRANSPARENT_INDEX_VALUE_EXT', +'GLX_TRANSPARENT_RED_VALUE_EXT', 'GLX_TRANSPARENT_GREEN_VALUE_EXT', +'GLX_TRANSPARENT_BLUE_VALUE_EXT', 'GLX_TRANSPARENT_ALPHA_VALUE_EXT', +'GLX_NONE_EXT', 'GLX_TRUE_COLOR_EXT', 'GLX_DIRECT_COLOR_EXT', +'GLX_PSEUDO_COLOR_EXT', 'GLX_STATIC_COLOR_EXT', 'GLX_GRAY_SCALE_EXT', +'GLX_STATIC_GRAY_EXT', 'GLX_TRANSPARENT_RGB_EXT', 'GLX_TRANSPARENT_INDEX_EXT', +'GLX_VISUAL_CAVEAT_EXT', 'GLX_SLOW_VISUAL_EXT', +'GLX_NON_CONFORMANT_VISUAL_EXT', 'GLX_SHARE_CONTEXT_EXT', 'GLX_VISUAL_ID_EXT', +'GLX_SCREEN_EXT', 'GLX_WINDOW_BIT_SGIX', 'GLX_PIXMAP_BIT_SGIX', +'GLX_RGBA_BIT_SGIX', 'GLX_COLOR_INDEX_BIT_SGIX', 'GLX_DRAWABLE_TYPE_SGIX', +'GLX_RENDER_TYPE_SGIX', 'GLX_X_RENDERABLE_SGIX', 'GLX_FBCONFIG_ID_SGIX', +'GLX_RGBA_TYPE_SGIX', 'GLX_COLOR_INDEX_TYPE_SGIX', 'GLX_PBUFFER_BIT_SGIX', +'GLX_BUFFER_CLOBBER_MASK_SGIX', 'GLX_FRONT_LEFT_BUFFER_BIT_SGIX', +'GLX_FRONT_RIGHT_BUFFER_BIT_SGIX', 'GLX_BACK_LEFT_BUFFER_BIT_SGIX', +'GLX_BACK_RIGHT_BUFFER_BIT_SGIX', 'GLX_AUX_BUFFERS_BIT_SGIX', +'GLX_DEPTH_BUFFER_BIT_SGIX', 'GLX_STENCIL_BUFFER_BIT_SGIX', +'GLX_ACCUM_BUFFER_BIT_SGIX', 'GLX_SAMPLE_BUFFERS_BIT_SGIX', +'GLX_MAX_PBUFFER_WIDTH_SGIX', 'GLX_MAX_PBUFFER_HEIGHT_SGIX', +'GLX_MAX_PBUFFER_PIXELS_SGIX', 'GLX_OPTIMAL_PBUFFER_WIDTH_SGIX', +'GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX', 'GLX_PRESERVED_CONTENTS_SGIX', +'GLX_LARGEST_PBUFFER_SGIX', 'GLX_WIDTH_SGIX', 'GLX_HEIGHT_SGIX', +'GLX_EVENT_MASK_SGIX', 'GLX_DAMAGED_SGIX', 'GLX_SAVED_SGIX', +'GLX_WINDOW_SGIX', 'GLX_PBUFFER_SGIX', 'GLX_SYNC_FRAME_SGIX', +'GLX_SYNC_SWAP_SGIX', 'GLX_DIGITAL_MEDIA_PBUFFER_SGIX', +'GLX_BLENDED_RGBA_SGIS', 'GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS', +'GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS', 'GLX_SAMPLE_BUFFERS_3DFX', +'GLX_SAMPLES_3DFX', 'GLX_3DFX_WINDOW_MODE_MESA', +'GLX_3DFX_FULLSCREEN_MODE_MESA', 'GLX_VISUAL_SELECT_GROUP_SGIX', +'GLX_SWAP_METHOD_OML', 'GLX_SWAP_EXCHANGE_OML', 'GLX_SWAP_COPY_OML', +'GLX_SWAP_UNDEFINED_OML', 'GLX_FLOAT_COMPONENTS_NV', +'GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX', 'GLX_BAD_HYPERPIPE_CONFIG_SGIX', +'GLX_BAD_HYPERPIPE_SGIX', 'GLX_HYPERPIPE_DISPLAY_PIPE_SGIX', +'GLX_HYPERPIPE_RENDER_PIPE_SGIX', 'GLX_PIPE_RECT_SGIX', +'GLX_PIPE_RECT_LIMITS_SGIX', 'GLX_HYPERPIPE_STEREO_SGIX', +'GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX', 'GLX_HYPERPIPE_ID_SGIX', +'GLXVideoSourceSGIX', 'GLXFBConfigIDSGIX', 'GLXFBConfigSGIX', +'GLXBufferClobberEventSGIX', 'GLX_ARB_multisample', 'GLX_ARB_fbconfig_float', +'GLX_SGIS_multisample', 'GLX_EXT_visual_info', 'GLX_SGI_swap_control', +'glXSwapIntervalSGI', 'PFNGLXSWAPINTERVALSGIPROC', 'GLX_SGI_video_sync', +'glXGetVideoSyncSGI', 'glXWaitVideoSyncSGI', 'PFNGLXGETVIDEOSYNCSGIPROC', +'PFNGLXWAITVIDEOSYNCSGIPROC', 'GLX_SGI_make_current_read', +'glXMakeCurrentReadSGI', 'glXGetCurrentReadDrawableSGI', +'PFNGLXMAKECURRENTREADSGIPROC', 'PFNGLXGETCURRENTREADDRAWABLESGIPROC', +'GLX_SGIX_video_source', 'GLX_EXT_visual_rating', 'GLX_EXT_import_context', +'glXGetCurrentDisplayEXT', 'glXQueryContextInfoEXT', 'glXGetContextIDEXT', +'glXImportContextEXT', 'glXFreeContextEXT', 'PFNGLXGETCURRENTDISPLAYEXTPROC', +'PFNGLXQUERYCONTEXTINFOEXTPROC', 'PFNGLXGETCONTEXTIDEXTPROC', +'PFNGLXIMPORTCONTEXTEXTPROC', 'PFNGLXFREECONTEXTEXTPROC', 'GLX_SGIX_fbconfig', +'glXGetFBConfigAttribSGIX', 'glXChooseFBConfigSGIX', +'glXCreateGLXPixmapWithConfigSGIX', 'glXCreateContextWithConfigSGIX', +'glXGetVisualFromFBConfigSGIX', 'glXGetFBConfigFromVisualSGIX', +'PFNGLXGETFBCONFIGATTRIBSGIXPROC', 'PFNGLXCHOOSEFBCONFIGSGIXPROC', +'PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC', +'PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC', +'PFNGLXGETVISUALFROMFBCONFIGSGIXPROC', 'PFNGLXGETFBCONFIGFROMVISUALSGIXPROC', +'GLX_SGIX_pbuffer', 'glXCreateGLXPbufferSGIX', 'glXDestroyGLXPbufferSGIX', +'glXQueryGLXPbufferSGIX', 'glXSelectEventSGIX', 'glXGetSelectedEventSGIX', +'PFNGLXCREATEGLXPBUFFERSGIXPROC', 'PFNGLXDESTROYGLXPBUFFERSGIXPROC', +'PFNGLXQUERYGLXPBUFFERSGIXPROC', 'PFNGLXSELECTEVENTSGIXPROC', +'PFNGLXGETSELECTEDEVENTSGIXPROC', 'GLX_SGI_cushion', 'glXCushionSGI', +'PFNGLXCUSHIONSGIPROC', 'GLX_SGIX_video_resize', 'glXBindChannelToWindowSGIX', +'glXChannelRectSGIX', 'glXQueryChannelRectSGIX', 'glXQueryChannelDeltasSGIX', +'glXChannelRectSyncSGIX', 'PFNGLXBINDCHANNELTOWINDOWSGIXPROC', +'PFNGLXCHANNELRECTSGIXPROC', 'PFNGLXQUERYCHANNELRECTSGIXPROC', +'PFNGLXQUERYCHANNELDELTASSGIXPROC', 'PFNGLXCHANNELRECTSYNCSGIXPROC', +'GLX_SGIX_dmbuffer', 'GLX_SGIX_swap_group', 'glXJoinSwapGroupSGIX', +'PFNGLXJOINSWAPGROUPSGIXPROC', 'GLX_SGIX_swap_barrier', +'glXBindSwapBarrierSGIX', 'glXQueryMaxSwapBarriersSGIX', +'PFNGLXBINDSWAPBARRIERSGIXPROC', 'PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC', +'GLX_SUN_get_transparent_index', 'glXGetTransparentIndexSUN', +'PFNGLXGETTRANSPARENTINDEXSUNPROC', 'GLX_MESA_copy_sub_buffer', +'glXCopySubBufferMESA', 'PFNGLXCOPYSUBBUFFERMESAPROC', +'GLX_MESA_pixmap_colormap', 'glXCreateGLXPixmapMESA', +'PFNGLXCREATEGLXPIXMAPMESAPROC', 'GLX_MESA_release_buffers', +'glXReleaseBuffersMESA', 'PFNGLXRELEASEBUFFERSMESAPROC', +'GLX_MESA_set_3dfx_mode', 'glXSet3DfxModeMESA', 'PFNGLXSET3DFXMODEMESAPROC', +'GLX_SGIX_visual_select_group', 'GLX_OML_swap_method', 'GLX_OML_sync_control', +'glXGetSyncValuesOML', 'glXGetMscRateOML', 'glXSwapBuffersMscOML', +'glXWaitForMscOML', 'glXWaitForSbcOML', 'PFNGLXGETSYNCVALUESOMLPROC', +'PFNGLXGETMSCRATEOMLPROC', 'PFNGLXSWAPBUFFERSMSCOMLPROC', +'PFNGLXWAITFORMSCOMLPROC', 'PFNGLXWAITFORSBCOMLPROC', 'GLX_NV_float_buffer', +'GLX_SGIX_hyperpipe', 'GLXHyperpipeNetworkSGIX', 'GLXHyperpipeConfigSGIX', +'GLXPipeRect', 'GLXPipeRectLimits', 'glXQueryHyperpipeNetworkSGIX', +'glXHyperpipeConfigSGIX', 'glXQueryHyperpipeConfigSGIX', +'glXDestroyHyperpipeConfigSGIX', 'glXBindHyperpipeSGIX', +'glXQueryHyperpipeBestAttribSGIX', 'glXHyperpipeAttribSGIX', +'glXQueryHyperpipeAttribSGIX', 'PFNGLXQUERYHYPERPIPENETWORKSGIXPROC', +'PFNGLXHYPERPIPECONFIGSGIXPROC', 'PFNGLXQUERYHYPERPIPECONFIGSGIXPROC', +'PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC', 'PFNGLXBINDHYPERPIPESGIXPROC', +'PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC', 'PFNGLXHYPERPIPEATTRIBSGIXPROC', +'PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC', 'GLX_MESA_agp_offset', +'glXGetAGPOffsetMESA', 'PFNGLXGETAGPOFFSETMESAPROC'] +# END GENERATED CONTENT (do not edit above this line) + + + + diff --git a/pyglet/gl/glxext_mesa.py b/pyglet/gl/glxext_mesa.py new file mode 100644 index 0000000..0b145ce --- /dev/null +++ b/pyglet/gl/glxext_mesa.py @@ -0,0 +1,45 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +'''This file is currently hand-coded; I don't have a MESA header file to build +off. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: glxext_mesa.py 1579 2008-01-15 14:47:19Z Alex.Holkner $' + +import ctypes +from ctypes import * +from pyglet.gl.lib import link_GLX as _link_function + +glXSwapIntervalMESA = _link_function('glXSwapIntervalMESA', c_int, [c_int], 'MESA_swap_control') diff --git a/pyglet/gl/glxext_nv.py b/pyglet/gl/glxext_nv.py new file mode 100644 index 0000000..2cf4208 --- /dev/null +++ b/pyglet/gl/glxext_nv.py @@ -0,0 +1,901 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +'''Wrapper for http://developer.download.nvidia.com/opengl/includes/glxext.h + +Generated by tools/gengl.py. +Do not modify this file. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: glxext_nv.py 1579 2008-01-15 14:47:19Z Alex.Holkner $' + +from ctypes import * +from pyglet.gl.lib import link_GLX as _link_function +from pyglet.gl.lib import c_ptrdiff_t +# BEGIN GENERATED CONTENT (do not edit below this line) + +# This content is generated by tools/gengl.py. +# Wrapper for http://developer.download.nvidia.com/opengl/includes/glxext.h + + +# VERSION_1_3 (/usr/include/GL/glx.h:73) +# VERSION_1_4 (/usr/include/GL/glx.h:132) +# ARB_get_proc_address (/usr/include/GL/glx.h:137) +# VERSION_1_1 (/usr/include/GL/glx.h:209) +# VERSION_1_2 (/usr/include/GL/glx.h:222) +# VERSION_1_3 (/usr/include/GL/glx.h:230) +# VERSION_1_4 (/usr/include/GL/glx.h:302) +# ARB_get_proc_address (/usr/include/GL/glx.h:318) +# GLXEXT_LEGACY (/usr/include/GL/glx.h:350) +GLAPI = 0 # GL/glxext.h:49 +GLX_GLXEXT_VERSION = 10 # GL/glxext.h:57 +# ARB_get_proc_address (GL/glxext.h:59) +# ARB_multisample (GL/glxext.h:62) +GLX_SAMPLE_BUFFERS_ARB = 100000 # GL/glxext.h:63 +GLX_SAMPLES_ARB = 100001 # GL/glxext.h:64 +# ARB_fbconfig_float (GL/glxext.h:67) +GLX_RGBA_FLOAT_TYPE_ARB = 8377 # GL/glxext.h:68 +GLX_RGBA_FLOAT_BIT_ARB = 4 # GL/glxext.h:69 +# SGIS_multisample (GL/glxext.h:72) +GLX_SAMPLE_BUFFERS_SGIS = 100000 # GL/glxext.h:73 +GLX_SAMPLES_SGIS = 100001 # GL/glxext.h:74 +# EXT_visual_info (GL/glxext.h:77) +GLX_X_VISUAL_TYPE_EXT = 34 # GL/glxext.h:78 +GLX_TRANSPARENT_TYPE_EXT = 35 # GL/glxext.h:79 +GLX_TRANSPARENT_INDEX_VALUE_EXT = 36 # GL/glxext.h:80 +GLX_TRANSPARENT_RED_VALUE_EXT = 37 # GL/glxext.h:81 +GLX_TRANSPARENT_GREEN_VALUE_EXT = 38 # GL/glxext.h:82 +GLX_TRANSPARENT_BLUE_VALUE_EXT = 39 # GL/glxext.h:83 +GLX_TRANSPARENT_ALPHA_VALUE_EXT = 40 # GL/glxext.h:84 +GLX_NONE_EXT = 32768 # GL/glxext.h:85 +GLX_TRUE_COLOR_EXT = 32770 # GL/glxext.h:86 +GLX_DIRECT_COLOR_EXT = 32771 # GL/glxext.h:87 +GLX_PSEUDO_COLOR_EXT = 32772 # GL/glxext.h:88 +GLX_STATIC_COLOR_EXT = 32773 # GL/glxext.h:89 +GLX_GRAY_SCALE_EXT = 32774 # GL/glxext.h:90 +GLX_STATIC_GRAY_EXT = 32775 # GL/glxext.h:91 +GLX_TRANSPARENT_RGB_EXT = 32776 # GL/glxext.h:92 +GLX_TRANSPARENT_INDEX_EXT = 32777 # GL/glxext.h:93 +# SGI_swap_control (GL/glxext.h:96) +# SGI_video_sync (GL/glxext.h:99) +# SGI_make_current_read (GL/glxext.h:102) +# SGIX_video_source (GL/glxext.h:105) +# EXT_visual_rating (GL/glxext.h:108) +GLX_VISUAL_CAVEAT_EXT = 32 # GL/glxext.h:109 +GLX_SLOW_VISUAL_EXT = 32769 # GL/glxext.h:110 +GLX_NON_CONFORMANT_VISUAL_EXT = 32781 # GL/glxext.h:111 +# EXT_import_context (GL/glxext.h:115) +GLX_SHARE_CONTEXT_EXT = 32778 # GL/glxext.h:116 +GLX_VISUAL_ID_EXT = 32779 # GL/glxext.h:117 +GLX_SCREEN_EXT = 32780 # GL/glxext.h:118 +# SGIX_fbconfig (GL/glxext.h:121) +GLX_WINDOW_BIT_SGIX = 1 # GL/glxext.h:122 +GLX_PIXMAP_BIT_SGIX = 2 # GL/glxext.h:123 +GLX_RGBA_BIT_SGIX = 1 # GL/glxext.h:124 +GLX_COLOR_INDEX_BIT_SGIX = 2 # GL/glxext.h:125 +GLX_DRAWABLE_TYPE_SGIX = 32784 # GL/glxext.h:126 +GLX_RENDER_TYPE_SGIX = 32785 # GL/glxext.h:127 +GLX_X_RENDERABLE_SGIX = 32786 # GL/glxext.h:128 +GLX_FBCONFIG_ID_SGIX = 32787 # GL/glxext.h:129 +GLX_RGBA_TYPE_SGIX = 32788 # GL/glxext.h:130 +GLX_COLOR_INDEX_TYPE_SGIX = 32789 # GL/glxext.h:131 +# SGIX_pbuffer (GL/glxext.h:135) +GLX_PBUFFER_BIT_SGIX = 4 # GL/glxext.h:136 +GLX_BUFFER_CLOBBER_MASK_SGIX = 134217728 # GL/glxext.h:137 +GLX_FRONT_LEFT_BUFFER_BIT_SGIX = 1 # GL/glxext.h:138 +GLX_FRONT_RIGHT_BUFFER_BIT_SGIX = 2 # GL/glxext.h:139 +GLX_BACK_LEFT_BUFFER_BIT_SGIX = 4 # GL/glxext.h:140 +GLX_BACK_RIGHT_BUFFER_BIT_SGIX = 8 # GL/glxext.h:141 +GLX_AUX_BUFFERS_BIT_SGIX = 16 # GL/glxext.h:142 +GLX_DEPTH_BUFFER_BIT_SGIX = 32 # GL/glxext.h:143 +GLX_STENCIL_BUFFER_BIT_SGIX = 64 # GL/glxext.h:144 +GLX_ACCUM_BUFFER_BIT_SGIX = 128 # GL/glxext.h:145 +GLX_SAMPLE_BUFFERS_BIT_SGIX = 256 # GL/glxext.h:146 +GLX_MAX_PBUFFER_WIDTH_SGIX = 32790 # GL/glxext.h:147 +GLX_MAX_PBUFFER_HEIGHT_SGIX = 32791 # GL/glxext.h:148 +GLX_MAX_PBUFFER_PIXELS_SGIX = 32792 # GL/glxext.h:149 +GLX_OPTIMAL_PBUFFER_WIDTH_SGIX = 32793 # GL/glxext.h:150 +GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX = 32794 # GL/glxext.h:151 +GLX_PRESERVED_CONTENTS_SGIX = 32795 # GL/glxext.h:152 +GLX_LARGEST_PBUFFER_SGIX = 32796 # GL/glxext.h:153 +GLX_WIDTH_SGIX = 32797 # GL/glxext.h:154 +GLX_HEIGHT_SGIX = 32798 # GL/glxext.h:155 +GLX_EVENT_MASK_SGIX = 32799 # GL/glxext.h:156 +GLX_DAMAGED_SGIX = 32800 # GL/glxext.h:157 +GLX_SAVED_SGIX = 32801 # GL/glxext.h:158 +GLX_WINDOW_SGIX = 32802 # GL/glxext.h:159 +GLX_PBUFFER_SGIX = 32803 # GL/glxext.h:160 +# SGI_cushion (GL/glxext.h:163) +# SGIX_video_resize (GL/glxext.h:166) +GLX_SYNC_FRAME_SGIX = 0 # GL/glxext.h:167 +GLX_SYNC_SWAP_SGIX = 1 # GL/glxext.h:168 +# SGIX_dmbuffer (GL/glxext.h:171) +GLX_DIGITAL_MEDIA_PBUFFER_SGIX = 32804 # GL/glxext.h:172 +# SGIX_swap_group (GL/glxext.h:175) +# SGIX_swap_barrier (GL/glxext.h:178) +# SGIS_blended_overlay (GL/glxext.h:181) +GLX_BLENDED_RGBA_SGIS = 32805 # GL/glxext.h:182 +# SGIS_shared_multisample (GL/glxext.h:185) +GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS = 32806 # GL/glxext.h:186 +GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS = 32807 # GL/glxext.h:187 +# SUN_get_transparent_index (GL/glxext.h:190) +# 3DFX_multisample (GL/glxext.h:193) +GLX_SAMPLE_BUFFERS_3DFX = 32848 # GL/glxext.h:194 +GLX_SAMPLES_3DFX = 32849 # GL/glxext.h:195 +# MESA_copy_sub_buffer (GL/glxext.h:198) +# MESA_pixmap_colormap (GL/glxext.h:201) +# MESA_release_buffers (GL/glxext.h:204) +# MESA_set_3dfx_mode (GL/glxext.h:207) +GLX_3DFX_WINDOW_MODE_MESA = 1 # GL/glxext.h:208 +GLX_3DFX_FULLSCREEN_MODE_MESA = 2 # GL/glxext.h:209 +# SGIX_visual_select_group (GL/glxext.h:212) +GLX_VISUAL_SELECT_GROUP_SGIX = 32808 # GL/glxext.h:213 +# OML_swap_method (GL/glxext.h:216) +GLX_SWAP_METHOD_OML = 32864 # GL/glxext.h:217 +GLX_SWAP_EXCHANGE_OML = 32865 # GL/glxext.h:218 +GLX_SWAP_COPY_OML = 32866 # GL/glxext.h:219 +GLX_SWAP_UNDEFINED_OML = 32867 # GL/glxext.h:220 +# OML_sync_control (GL/glxext.h:223) +# NV_float_buffer (GL/glxext.h:226) +GLX_FLOAT_COMPONENTS_NV = 8368 # GL/glxext.h:227 +# SGIX_hyperpipe (GL/glxext.h:230) +GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX = 80 # GL/glxext.h:231 +GLX_BAD_HYPERPIPE_CONFIG_SGIX = 91 # GL/glxext.h:232 +GLX_BAD_HYPERPIPE_SGIX = 92 # GL/glxext.h:233 +GLX_HYPERPIPE_DISPLAY_PIPE_SGIX = 1 # GL/glxext.h:234 +GLX_HYPERPIPE_RENDER_PIPE_SGIX = 2 # GL/glxext.h:235 +GLX_PIPE_RECT_SGIX = 1 # GL/glxext.h:236 +GLX_PIPE_RECT_LIMITS_SGIX = 2 # GL/glxext.h:237 +GLX_HYPERPIPE_STEREO_SGIX = 3 # GL/glxext.h:238 +GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX = 4 # GL/glxext.h:239 +GLX_HYPERPIPE_ID_SGIX = 32816 # GL/glxext.h:240 +# MESA_agp_offset (GL/glxext.h:243) +# ARB_get_proc_address (GL/glxext.h:249) +# SGIX_video_source (GL/glxext.h:256) +XID = c_ulong # /usr/include/X11/X.h:71 +GLXVideoSourceSGIX = XID # GL/glxext.h:257 +# SGIX_fbconfig (GL/glxext.h:260) +GLXFBConfigIDSGIX = XID # GL/glxext.h:261 +class struct___GLXFBConfigRec(Structure): + __slots__ = [ + ] +struct___GLXFBConfigRec._fields_ = [ + ('_opaque_struct', c_int) +] + +GLXFBConfigSGIX = POINTER(struct___GLXFBConfigRec) # GL/glxext.h:262 +# SGIX_pbuffer (GL/glxext.h:265) +class struct_anon_301(Structure): + __slots__ = [ + 'type', + 'serial', + 'send_event', + 'display', + 'drawable', + 'event_type', + 'draw_type', + 'mask', + 'x', + 'y', + 'width', + 'height', + 'count', + ] +class struct__XDisplay(Structure): + __slots__ = [ + ] +struct__XDisplay._fields_ = [ + ('_opaque_struct', c_int) +] + +Display = struct__XDisplay # /usr/include/X11/Xlib.h:519 +GLXDrawable = XID # /usr/include/GL/glx.h:146 +struct_anon_301._fields_ = [ + ('type', c_int), + ('serial', c_ulong), + ('send_event', c_int), + ('display', POINTER(Display)), + ('drawable', GLXDrawable), + ('event_type', c_int), + ('draw_type', c_int), + ('mask', c_uint), + ('x', c_int), + ('y', c_int), + ('width', c_int), + ('height', c_int), + ('count', c_int), +] + +GLXBufferClobberEventSGIX = struct_anon_301 # GL/glxext.h:279 +# NV_swap_group (GL/glxext.h:282) +# NV_video_out (GL/glxext.h:285) +GLXVideoDeviceNV = c_uint # GL/glxext.h:290 +GLX_VIDEO_OUT_COLOR_NV = 8387 # GL/glxext.h:293 +GLX_VIDEO_OUT_ALPHA_NV = 8388 # GL/glxext.h:294 +GLX_VIDEO_OUT_DEPTH_NV = 8389 # GL/glxext.h:295 +GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV = 8390 # GL/glxext.h:296 +GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV = 8391 # GL/glxext.h:297 +GLX_VIDEO_OUT_FRAME_NV = 8392 # GL/glxext.h:300 +GLX_VIDEO_OUT_FIELD_1_NV = 8393 # GL/glxext.h:301 +GLX_VIDEO_OUT_FIELD_2_NV = 8394 # GL/glxext.h:302 +# EXT_texture_from_pixmap (GL/glxext.h:305) +GLX_BIND_TO_TEXTURE_RGB_EXT = 8400 # GL/glxext.h:307 +GLX_BIND_TO_TEXTURE_RGBA_EXT = 8401 # GL/glxext.h:308 +GLX_BIND_TO_MIPMAP_TEXTURE_EXT = 8402 # GL/glxext.h:309 +GLX_BIND_TO_TEXTURE_TARGETS_EXT = 8403 # GL/glxext.h:310 +GLX_Y_INVERTED_EXT = 8404 # GL/glxext.h:311 +GLX_TEXTURE_FORMAT_EXT = 8405 # GL/glxext.h:314 +GLX_TEXTURE_TARGET_EXT = 8406 # GL/glxext.h:315 +GLX_MIPMAP_TEXTURE_EXT = 8407 # GL/glxext.h:316 +GLX_TEXTURE_FORMAT_NONE_EXT = 8408 # GL/glxext.h:319 +GLX_TEXTURE_FORMAT_RGB_EXT = 8409 # GL/glxext.h:320 +GLX_TEXTURE_FORMAT_RGBA_EXT = 8410 # GL/glxext.h:321 +GLX_TEXTURE_1D_BIT_EXT = 1 # GL/glxext.h:324 +GLX_TEXTURE_2D_BIT_EXT = 2 # GL/glxext.h:325 +GLX_TEXTURE_RECTANGLE_BIT_EXT = 4 # GL/glxext.h:326 +GLX_TEXTURE_1D_EXT = 8411 # GL/glxext.h:329 +GLX_TEXTURE_2D_EXT = 8412 # GL/glxext.h:330 +GLX_TEXTURE_RECTANGLE_EXT = 8413 # GL/glxext.h:331 +GLX_FRONT_LEFT_EXT = 8414 # GL/glxext.h:337 +GLX_FRONT_RIGHT_EXT = 8415 # GL/glxext.h:338 +GLX_BACK_LEFT_EXT = 8416 # GL/glxext.h:339 +GLX_BACK_RIGHT_EXT = 8417 # GL/glxext.h:340 +GLX_FRONT_EXT = 8414 # GL/glxext.h:341 +GLX_BACK_EXT = 8416 # GL/glxext.h:342 +GLX_AUX0_EXT = 8418 # GL/glxext.h:343 +GLX_AUX1_EXT = 8419 # GL/glxext.h:344 +GLX_AUX2_EXT = 8420 # GL/glxext.h:345 +GLX_AUX3_EXT = 8421 # GL/glxext.h:346 +GLX_AUX4_EXT = 8422 # GL/glxext.h:347 +GLX_AUX5_EXT = 8423 # GL/glxext.h:348 +GLX_AUX6_EXT = 8424 # GL/glxext.h:349 +GLX_AUX7_EXT = 8425 # GL/glxext.h:350 +GLX_AUX8_EXT = 8426 # GL/glxext.h:351 +GLX_AUX9_EXT = 8427 # GL/glxext.h:352 +# ARB_get_proc_address (GL/glxext.h:373) +# ARB_multisample (GL/glxext.h:377) +GLX_ARB_multisample = 1 # GL/glxext.h:378 +# ARB_fbconfig_float (GL/glxext.h:381) +GLX_ARB_fbconfig_float = 1 # GL/glxext.h:382 +# SGIS_multisample (GL/glxext.h:385) +GLX_SGIS_multisample = 1 # GL/glxext.h:386 +# EXT_visual_info (GL/glxext.h:389) +GLX_EXT_visual_info = 1 # GL/glxext.h:390 +# SGI_swap_control (GL/glxext.h:393) +GLX_SGI_swap_control = 1 # GL/glxext.h:394 +# GL/glxext.h:396 +glXSwapIntervalSGI = _link_function('glXSwapIntervalSGI', c_int, [c_int], 'SGI_swap_control') + +PFNGLXSWAPINTERVALSGIPROC = CFUNCTYPE(c_int, c_int) # GL/glxext.h:398 +# SGI_video_sync (GL/glxext.h:401) +GLX_SGI_video_sync = 1 # GL/glxext.h:402 +# GL/glxext.h:404 +glXGetVideoSyncSGI = _link_function('glXGetVideoSyncSGI', c_int, [POINTER(c_uint)], 'SGI_video_sync') + +# GL/glxext.h:405 +glXWaitVideoSyncSGI = _link_function('glXWaitVideoSyncSGI', c_int, [c_int, c_int, POINTER(c_uint)], 'SGI_video_sync') + +# GL/glxext.h:406 +glXGetRefreshRateSGI = _link_function('glXGetRefreshRateSGI', c_int, [POINTER(c_uint)], 'SGI_video_sync') + +PFNGLXGETVIDEOSYNCSGIPROC = CFUNCTYPE(c_int, POINTER(c_uint)) # GL/glxext.h:408 +PFNGLXWAITVIDEOSYNCSGIPROC = CFUNCTYPE(c_int, c_int, c_int, POINTER(c_uint)) # GL/glxext.h:409 +PFNGLXGETREFRESHRATESGIPROC = CFUNCTYPE(c_int, POINTER(c_uint)) # GL/glxext.h:410 +# SGI_make_current_read (GL/glxext.h:413) +GLX_SGI_make_current_read = 1 # GL/glxext.h:414 +class struct___GLXcontextRec(Structure): + __slots__ = [ + ] +struct___GLXcontextRec._fields_ = [ + ('_opaque_struct', c_int) +] + +GLXContext = POINTER(struct___GLXcontextRec) # /usr/include/GL/glx.h:155 +# GL/glxext.h:416 +glXMakeCurrentReadSGI = _link_function('glXMakeCurrentReadSGI', c_int, [POINTER(Display), GLXDrawable, GLXDrawable, GLXContext], 'SGI_make_current_read') + +# GL/glxext.h:417 +glXGetCurrentReadDrawableSGI = _link_function('glXGetCurrentReadDrawableSGI', GLXDrawable, [], 'SGI_make_current_read') + +PFNGLXMAKECURRENTREADSGIPROC = CFUNCTYPE(c_int, POINTER(Display), GLXDrawable, GLXDrawable, GLXContext) # GL/glxext.h:419 +PFNGLXGETCURRENTREADDRAWABLESGIPROC = CFUNCTYPE(GLXDrawable) # GL/glxext.h:420 +# SGIX_video_source (GL/glxext.h:423) +GLX_SGIX_video_source = 1 # GL/glxext.h:424 +# EXT_visual_rating (GL/glxext.h:435) +GLX_EXT_visual_rating = 1 # GL/glxext.h:436 +# EXT_import_context (GL/glxext.h:439) +GLX_EXT_import_context = 1 # GL/glxext.h:440 +# GL/glxext.h:442 +glXGetCurrentDisplayEXT = _link_function('glXGetCurrentDisplayEXT', POINTER(Display), [], 'EXT_import_context') + +# GL/glxext.h:443 +glXQueryContextInfoEXT = _link_function('glXQueryContextInfoEXT', c_int, [POINTER(Display), GLXContext, c_int, POINTER(c_int)], 'EXT_import_context') + +GLXContextID = XID # /usr/include/GL/glx.h:144 +# GL/glxext.h:444 +glXGetContextIDEXT = _link_function('glXGetContextIDEXT', GLXContextID, [GLXContext], 'EXT_import_context') + +# GL/glxext.h:445 +glXImportContextEXT = _link_function('glXImportContextEXT', GLXContext, [POINTER(Display), GLXContextID], 'EXT_import_context') + +# GL/glxext.h:446 +glXFreeContextEXT = _link_function('glXFreeContextEXT', None, [POINTER(Display), GLXContext], 'EXT_import_context') + +PFNGLXGETCURRENTDISPLAYEXTPROC = CFUNCTYPE(POINTER(Display)) # GL/glxext.h:448 +PFNGLXQUERYCONTEXTINFOEXTPROC = CFUNCTYPE(c_int, POINTER(Display), GLXContext, c_int, POINTER(c_int)) # GL/glxext.h:449 +PFNGLXGETCONTEXTIDEXTPROC = CFUNCTYPE(GLXContextID, GLXContext) # GL/glxext.h:450 +PFNGLXIMPORTCONTEXTEXTPROC = CFUNCTYPE(GLXContext, POINTER(Display), GLXContextID) # GL/glxext.h:451 +PFNGLXFREECONTEXTEXTPROC = CFUNCTYPE(None, POINTER(Display), GLXContext) # GL/glxext.h:452 +# SGIX_fbconfig (GL/glxext.h:455) +GLX_SGIX_fbconfig = 1 # GL/glxext.h:456 +# GL/glxext.h:458 +glXGetFBConfigAttribSGIX = _link_function('glXGetFBConfigAttribSGIX', c_int, [POINTER(Display), GLXFBConfigSGIX, c_int, POINTER(c_int)], 'SGIX_fbconfig') + +# GL/glxext.h:459 +glXChooseFBConfigSGIX = _link_function('glXChooseFBConfigSGIX', POINTER(GLXFBConfigSGIX), [POINTER(Display), c_int, POINTER(c_int), POINTER(c_int)], 'SGIX_fbconfig') + +GLXPixmap = XID # /usr/include/GL/glx.h:145 +Pixmap = XID # /usr/include/X11/X.h:107 +# GL/glxext.h:460 +glXCreateGLXPixmapWithConfigSGIX = _link_function('glXCreateGLXPixmapWithConfigSGIX', GLXPixmap, [POINTER(Display), GLXFBConfigSGIX, Pixmap], 'SGIX_fbconfig') + +# GL/glxext.h:461 +glXCreateContextWithConfigSGIX = _link_function('glXCreateContextWithConfigSGIX', GLXContext, [POINTER(Display), GLXFBConfigSGIX, c_int, GLXContext, c_int], 'SGIX_fbconfig') + +class struct_anon_298(Structure): + __slots__ = [ + 'visual', + 'visualid', + 'screen', + 'depth', + 'class', + 'red_mask', + 'green_mask', + 'blue_mask', + 'colormap_size', + 'bits_per_rgb', + ] +class struct_anon_215(Structure): + __slots__ = [ + 'ext_data', + 'visualid', + 'class', + 'red_mask', + 'green_mask', + 'blue_mask', + 'bits_per_rgb', + 'map_entries', + ] +class struct__XExtData(Structure): + __slots__ = [ + 'number', + 'next', + 'free_private', + 'private_data', + ] +XPointer = c_char_p # /usr/include/X11/Xlib.h:108 +struct__XExtData._fields_ = [ + ('number', c_int), + ('next', POINTER(struct__XExtData)), + ('free_private', POINTER(CFUNCTYPE(c_int, POINTER(struct__XExtData)))), + ('private_data', XPointer), +] + +XExtData = struct__XExtData # /usr/include/X11/Xlib.h:187 +VisualID = c_ulong # /usr/include/X11/X.h:81 +struct_anon_215._fields_ = [ + ('ext_data', POINTER(XExtData)), + ('visualid', VisualID), + ('class', c_int), + ('red_mask', c_ulong), + ('green_mask', c_ulong), + ('blue_mask', c_ulong), + ('bits_per_rgb', c_int), + ('map_entries', c_int), +] + +Visual = struct_anon_215 # /usr/include/X11/Xlib.h:270 +struct_anon_298._fields_ = [ + ('visual', POINTER(Visual)), + ('visualid', VisualID), + ('screen', c_int), + ('depth', c_int), + ('class', c_int), + ('red_mask', c_ulong), + ('green_mask', c_ulong), + ('blue_mask', c_ulong), + ('colormap_size', c_int), + ('bits_per_rgb', c_int), +] + +XVisualInfo = struct_anon_298 # /usr/include/X11/Xutil.h:296 +# GL/glxext.h:462 +glXGetVisualFromFBConfigSGIX = _link_function('glXGetVisualFromFBConfigSGIX', POINTER(XVisualInfo), [POINTER(Display), GLXFBConfigSGIX], 'SGIX_fbconfig') + +# GL/glxext.h:463 +glXGetFBConfigFromVisualSGIX = _link_function('glXGetFBConfigFromVisualSGIX', GLXFBConfigSGIX, [POINTER(Display), POINTER(XVisualInfo)], 'SGIX_fbconfig') + +PFNGLXGETFBCONFIGATTRIBSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), GLXFBConfigSGIX, c_int, POINTER(c_int)) # GL/glxext.h:465 +PFNGLXCHOOSEFBCONFIGSGIXPROC = CFUNCTYPE(POINTER(GLXFBConfigSGIX), POINTER(Display), c_int, POINTER(c_int), POINTER(c_int)) # GL/glxext.h:466 +PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC = CFUNCTYPE(GLXPixmap, POINTER(Display), GLXFBConfigSGIX, Pixmap) # GL/glxext.h:467 +PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC = CFUNCTYPE(GLXContext, POINTER(Display), GLXFBConfigSGIX, c_int, GLXContext, c_int) # GL/glxext.h:468 +PFNGLXGETVISUALFROMFBCONFIGSGIXPROC = CFUNCTYPE(POINTER(XVisualInfo), POINTER(Display), GLXFBConfigSGIX) # GL/glxext.h:469 +PFNGLXGETFBCONFIGFROMVISUALSGIXPROC = CFUNCTYPE(GLXFBConfigSGIX, POINTER(Display), POINTER(XVisualInfo)) # GL/glxext.h:470 +# SGIX_pbuffer (GL/glxext.h:473) +GLX_SGIX_pbuffer = 1 # GL/glxext.h:474 +GLXPbufferSGIX = XID # /usr/include/GL/glx.h:148 +# GL/glxext.h:476 +glXCreateGLXPbufferSGIX = _link_function('glXCreateGLXPbufferSGIX', GLXPbufferSGIX, [POINTER(Display), GLXFBConfigSGIX, c_uint, c_uint, POINTER(c_int)], 'SGIX_pbuffer') + +# GL/glxext.h:477 +glXDestroyGLXPbufferSGIX = _link_function('glXDestroyGLXPbufferSGIX', None, [POINTER(Display), GLXPbufferSGIX], 'SGIX_pbuffer') + +# GL/glxext.h:478 +glXQueryGLXPbufferSGIX = _link_function('glXQueryGLXPbufferSGIX', c_int, [POINTER(Display), GLXPbufferSGIX, c_int, POINTER(c_uint)], 'SGIX_pbuffer') + +# GL/glxext.h:479 +glXSelectEventSGIX = _link_function('glXSelectEventSGIX', None, [POINTER(Display), GLXDrawable, c_ulong], 'SGIX_pbuffer') + +# GL/glxext.h:480 +glXGetSelectedEventSGIX = _link_function('glXGetSelectedEventSGIX', None, [POINTER(Display), GLXDrawable, POINTER(c_ulong)], 'SGIX_pbuffer') + +PFNGLXCREATEGLXPBUFFERSGIXPROC = CFUNCTYPE(GLXPbufferSGIX, POINTER(Display), GLXFBConfigSGIX, c_uint, c_uint, POINTER(c_int)) # GL/glxext.h:482 +PFNGLXDESTROYGLXPBUFFERSGIXPROC = CFUNCTYPE(None, POINTER(Display), GLXPbufferSGIX) # GL/glxext.h:483 +PFNGLXQUERYGLXPBUFFERSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), GLXPbufferSGIX, c_int, POINTER(c_uint)) # GL/glxext.h:484 +PFNGLXSELECTEVENTSGIXPROC = CFUNCTYPE(None, POINTER(Display), GLXDrawable, c_ulong) # GL/glxext.h:485 +PFNGLXGETSELECTEDEVENTSGIXPROC = CFUNCTYPE(None, POINTER(Display), GLXDrawable, POINTER(c_ulong)) # GL/glxext.h:486 +# SGI_cushion (GL/glxext.h:489) +GLX_SGI_cushion = 1 # GL/glxext.h:490 +Window = XID # /usr/include/X11/X.h:101 +# GL/glxext.h:492 +glXCushionSGI = _link_function('glXCushionSGI', None, [POINTER(Display), Window, c_float], 'SGI_cushion') + +PFNGLXCUSHIONSGIPROC = CFUNCTYPE(None, POINTER(Display), Window, c_float) # GL/glxext.h:494 +# SGIX_video_resize (GL/glxext.h:497) +GLX_SGIX_video_resize = 1 # GL/glxext.h:498 +# GL/glxext.h:500 +glXBindChannelToWindowSGIX = _link_function('glXBindChannelToWindowSGIX', c_int, [POINTER(Display), c_int, c_int, Window], 'SGIX_video_resize') + +# GL/glxext.h:501 +glXChannelRectSGIX = _link_function('glXChannelRectSGIX', c_int, [POINTER(Display), c_int, c_int, c_int, c_int, c_int, c_int], 'SGIX_video_resize') + +# GL/glxext.h:502 +glXQueryChannelRectSGIX = _link_function('glXQueryChannelRectSGIX', c_int, [POINTER(Display), c_int, c_int, POINTER(c_int), POINTER(c_int), POINTER(c_int), POINTER(c_int)], 'SGIX_video_resize') + +# GL/glxext.h:503 +glXQueryChannelDeltasSGIX = _link_function('glXQueryChannelDeltasSGIX', c_int, [POINTER(Display), c_int, c_int, POINTER(c_int), POINTER(c_int), POINTER(c_int), POINTER(c_int)], 'SGIX_video_resize') + +GLenum = c_uint # /usr/include/GL/gl.h:53 +# GL/glxext.h:504 +glXChannelRectSyncSGIX = _link_function('glXChannelRectSyncSGIX', c_int, [POINTER(Display), c_int, c_int, GLenum], 'SGIX_video_resize') + +PFNGLXBINDCHANNELTOWINDOWSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, c_int, Window) # GL/glxext.h:506 +PFNGLXCHANNELRECTSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, c_int, c_int, c_int, c_int, c_int) # GL/glxext.h:507 +PFNGLXQUERYCHANNELRECTSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, c_int, POINTER(c_int), POINTER(c_int), POINTER(c_int), POINTER(c_int)) # GL/glxext.h:508 +PFNGLXQUERYCHANNELDELTASSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, c_int, POINTER(c_int), POINTER(c_int), POINTER(c_int), POINTER(c_int)) # GL/glxext.h:509 +PFNGLXCHANNELRECTSYNCSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, c_int, GLenum) # GL/glxext.h:510 +# SGIX_dmbuffer (GL/glxext.h:513) +GLX_SGIX_dmbuffer = 1 # GL/glxext.h:514 +# SGIX_swap_group (GL/glxext.h:523) +GLX_SGIX_swap_group = 1 # GL/glxext.h:524 +# GL/glxext.h:526 +glXJoinSwapGroupSGIX = _link_function('glXJoinSwapGroupSGIX', None, [POINTER(Display), GLXDrawable, GLXDrawable], 'SGIX_swap_group') + +PFNGLXJOINSWAPGROUPSGIXPROC = CFUNCTYPE(None, POINTER(Display), GLXDrawable, GLXDrawable) # GL/glxext.h:528 +# SGIX_swap_barrier (GL/glxext.h:531) +GLX_SGIX_swap_barrier = 1 # GL/glxext.h:532 +# GL/glxext.h:534 +glXBindSwapBarrierSGIX = _link_function('glXBindSwapBarrierSGIX', None, [POINTER(Display), GLXDrawable, c_int], 'SGIX_swap_barrier') + +# GL/glxext.h:535 +glXQueryMaxSwapBarriersSGIX = _link_function('glXQueryMaxSwapBarriersSGIX', c_int, [POINTER(Display), c_int, POINTER(c_int)], 'SGIX_swap_barrier') + +PFNGLXBINDSWAPBARRIERSGIXPROC = CFUNCTYPE(None, POINTER(Display), GLXDrawable, c_int) # GL/glxext.h:537 +PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, POINTER(c_int)) # GL/glxext.h:538 +# SUN_get_transparent_index (GL/glxext.h:541) +GLX_SUN_get_transparent_index = 1 # GL/glxext.h:542 +# GL/glxext.h:544 +glXGetTransparentIndexSUN = _link_function('glXGetTransparentIndexSUN', c_int, [POINTER(Display), Window, Window, POINTER(c_long)], 'SUN_get_transparent_index') + +PFNGLXGETTRANSPARENTINDEXSUNPROC = CFUNCTYPE(c_int, POINTER(Display), Window, Window, POINTER(c_long)) # GL/glxext.h:546 +# MESA_copy_sub_buffer (GL/glxext.h:549) +GLX_MESA_copy_sub_buffer = 1 # GL/glxext.h:550 +# GL/glxext.h:552 +glXCopySubBufferMESA = _link_function('glXCopySubBufferMESA', None, [POINTER(Display), GLXDrawable, c_int, c_int, c_int, c_int], 'MESA_copy_sub_buffer') + +PFNGLXCOPYSUBBUFFERMESAPROC = CFUNCTYPE(None, POINTER(Display), GLXDrawable, c_int, c_int, c_int, c_int) # GL/glxext.h:554 +# MESA_pixmap_colormap (GL/glxext.h:557) +GLX_MESA_pixmap_colormap = 1 # GL/glxext.h:558 +Colormap = XID # /usr/include/X11/X.h:109 +# GL/glxext.h:560 +glXCreateGLXPixmapMESA = _link_function('glXCreateGLXPixmapMESA', GLXPixmap, [POINTER(Display), POINTER(XVisualInfo), Pixmap, Colormap], 'MESA_pixmap_colormap') + +PFNGLXCREATEGLXPIXMAPMESAPROC = CFUNCTYPE(GLXPixmap, POINTER(Display), POINTER(XVisualInfo), Pixmap, Colormap) # GL/glxext.h:562 +# MESA_release_buffers (GL/glxext.h:565) +GLX_MESA_release_buffers = 1 # GL/glxext.h:566 +# GL/glxext.h:568 +glXReleaseBuffersMESA = _link_function('glXReleaseBuffersMESA', c_int, [POINTER(Display), GLXDrawable], 'MESA_release_buffers') + +PFNGLXRELEASEBUFFERSMESAPROC = CFUNCTYPE(c_int, POINTER(Display), GLXDrawable) # GL/glxext.h:570 +# MESA_set_3dfx_mode (GL/glxext.h:573) +GLX_MESA_set_3dfx_mode = 1 # GL/glxext.h:574 +# GL/glxext.h:576 +glXSet3DfxModeMESA = _link_function('glXSet3DfxModeMESA', c_int, [c_int], 'MESA_set_3dfx_mode') + +PFNGLXSET3DFXMODEMESAPROC = CFUNCTYPE(c_int, c_int) # GL/glxext.h:578 +# SGIX_visual_select_group (GL/glxext.h:581) +GLX_SGIX_visual_select_group = 1 # GL/glxext.h:582 +# OML_swap_method (GL/glxext.h:585) +GLX_OML_swap_method = 1 # GL/glxext.h:586 +# OML_sync_control (GL/glxext.h:589) +GLX_OML_sync_control = 1 # GL/glxext.h:590 +# GL/glxext.h:592 +glXGetSyncValuesOML = _link_function('glXGetSyncValuesOML', c_int, [POINTER(Display), GLXDrawable, POINTER(c_int64), POINTER(c_int64), POINTER(c_int64)], 'OML_sync_control') + +# GL/glxext.h:593 +glXGetMscRateOML = _link_function('glXGetMscRateOML', c_int, [POINTER(Display), GLXDrawable, POINTER(c_int32), POINTER(c_int32)], 'OML_sync_control') + +# GL/glxext.h:594 +glXSwapBuffersMscOML = _link_function('glXSwapBuffersMscOML', c_int64, [POINTER(Display), GLXDrawable, c_int64, c_int64, c_int64], 'OML_sync_control') + +# GL/glxext.h:595 +glXWaitForMscOML = _link_function('glXWaitForMscOML', c_int, [POINTER(Display), GLXDrawable, c_int64, c_int64, c_int64, POINTER(c_int64), POINTER(c_int64), POINTER(c_int64)], 'OML_sync_control') + +# GL/glxext.h:596 +glXWaitForSbcOML = _link_function('glXWaitForSbcOML', c_int, [POINTER(Display), GLXDrawable, c_int64, POINTER(c_int64), POINTER(c_int64), POINTER(c_int64)], 'OML_sync_control') + +PFNGLXGETSYNCVALUESOMLPROC = CFUNCTYPE(c_int, POINTER(Display), GLXDrawable, POINTER(c_int64), POINTER(c_int64), POINTER(c_int64)) # GL/glxext.h:598 +PFNGLXGETMSCRATEOMLPROC = CFUNCTYPE(c_int, POINTER(Display), GLXDrawable, POINTER(c_int32), POINTER(c_int32)) # GL/glxext.h:599 +PFNGLXSWAPBUFFERSMSCOMLPROC = CFUNCTYPE(c_int64, POINTER(Display), GLXDrawable, c_int64, c_int64, c_int64) # GL/glxext.h:600 +PFNGLXWAITFORMSCOMLPROC = CFUNCTYPE(c_int, POINTER(Display), GLXDrawable, c_int64, c_int64, c_int64, POINTER(c_int64), POINTER(c_int64), POINTER(c_int64)) # GL/glxext.h:601 +PFNGLXWAITFORSBCOMLPROC = CFUNCTYPE(c_int, POINTER(Display), GLXDrawable, c_int64, POINTER(c_int64), POINTER(c_int64), POINTER(c_int64)) # GL/glxext.h:602 +# NV_float_buffer (GL/glxext.h:605) +GLX_NV_float_buffer = 1 # GL/glxext.h:606 +# SGIX_hyperpipe (GL/glxext.h:609) +GLX_SGIX_hyperpipe = 1 # GL/glxext.h:610 +class struct_anon_302(Structure): + __slots__ = [ + 'pipeName', + 'networkId', + ] +struct_anon_302._fields_ = [ + ('pipeName', c_char * 80), + ('networkId', c_int), +] + +GLXHyperpipeNetworkSGIX = struct_anon_302 # GL/glxext.h:615 +class struct_anon_303(Structure): + __slots__ = [ + 'pipeName', + 'channel', + 'participationType', + 'timeSlice', + ] +struct_anon_303._fields_ = [ + ('pipeName', c_char * 80), + ('channel', c_int), + ('participationType', c_uint), + ('timeSlice', c_int), +] + +GLXHyperpipeConfigSGIX = struct_anon_303 # GL/glxext.h:623 +class struct_anon_304(Structure): + __slots__ = [ + 'pipeName', + 'srcXOrigin', + 'srcYOrigin', + 'srcWidth', + 'srcHeight', + 'destXOrigin', + 'destYOrigin', + 'destWidth', + 'destHeight', + ] +struct_anon_304._fields_ = [ + ('pipeName', c_char * 80), + ('srcXOrigin', c_int), + ('srcYOrigin', c_int), + ('srcWidth', c_int), + ('srcHeight', c_int), + ('destXOrigin', c_int), + ('destYOrigin', c_int), + ('destWidth', c_int), + ('destHeight', c_int), +] + +GLXPipeRect = struct_anon_304 # GL/glxext.h:629 +class struct_anon_305(Structure): + __slots__ = [ + 'pipeName', + 'XOrigin', + 'YOrigin', + 'maxHeight', + 'maxWidth', + ] +struct_anon_305._fields_ = [ + ('pipeName', c_char * 80), + ('XOrigin', c_int), + ('YOrigin', c_int), + ('maxHeight', c_int), + ('maxWidth', c_int), +] + +GLXPipeRectLimits = struct_anon_305 # GL/glxext.h:634 +# GL/glxext.h:637 +glXQueryHyperpipeNetworkSGIX = _link_function('glXQueryHyperpipeNetworkSGIX', POINTER(GLXHyperpipeNetworkSGIX), [POINTER(Display), POINTER(c_int)], 'SGIX_hyperpipe') + +# GL/glxext.h:638 +glXHyperpipeConfigSGIX = _link_function('glXHyperpipeConfigSGIX', c_int, [POINTER(Display), c_int, c_int, POINTER(GLXHyperpipeConfigSGIX), POINTER(c_int)], 'SGIX_hyperpipe') + +# GL/glxext.h:639 +glXQueryHyperpipeConfigSGIX = _link_function('glXQueryHyperpipeConfigSGIX', POINTER(GLXHyperpipeConfigSGIX), [POINTER(Display), c_int, POINTER(c_int)], 'SGIX_hyperpipe') + +# GL/glxext.h:640 +glXDestroyHyperpipeConfigSGIX = _link_function('glXDestroyHyperpipeConfigSGIX', c_int, [POINTER(Display), c_int], 'SGIX_hyperpipe') + +# GL/glxext.h:641 +glXBindHyperpipeSGIX = _link_function('glXBindHyperpipeSGIX', c_int, [POINTER(Display), c_int], 'SGIX_hyperpipe') + +# GL/glxext.h:642 +glXQueryHyperpipeBestAttribSGIX = _link_function('glXQueryHyperpipeBestAttribSGIX', c_int, [POINTER(Display), c_int, c_int, c_int, POINTER(None), POINTER(None)], 'SGIX_hyperpipe') + +# GL/glxext.h:643 +glXHyperpipeAttribSGIX = _link_function('glXHyperpipeAttribSGIX', c_int, [POINTER(Display), c_int, c_int, c_int, POINTER(None)], 'SGIX_hyperpipe') + +# GL/glxext.h:644 +glXQueryHyperpipeAttribSGIX = _link_function('glXQueryHyperpipeAttribSGIX', c_int, [POINTER(Display), c_int, c_int, c_int, POINTER(None)], 'SGIX_hyperpipe') + +PFNGLXQUERYHYPERPIPENETWORKSGIXPROC = CFUNCTYPE(POINTER(GLXHyperpipeNetworkSGIX), POINTER(Display), POINTER(c_int)) # GL/glxext.h:646 +PFNGLXHYPERPIPECONFIGSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, c_int, POINTER(GLXHyperpipeConfigSGIX), POINTER(c_int)) # GL/glxext.h:647 +PFNGLXQUERYHYPERPIPECONFIGSGIXPROC = CFUNCTYPE(POINTER(GLXHyperpipeConfigSGIX), POINTER(Display), c_int, POINTER(c_int)) # GL/glxext.h:648 +PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int) # GL/glxext.h:649 +PFNGLXBINDHYPERPIPESGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int) # GL/glxext.h:650 +PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, c_int, c_int, POINTER(None), POINTER(None)) # GL/glxext.h:651 +PFNGLXHYPERPIPEATTRIBSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, c_int, c_int, POINTER(None)) # GL/glxext.h:652 +PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, c_int, c_int, POINTER(None)) # GL/glxext.h:653 +# MESA_agp_offset (GL/glxext.h:656) +GLX_MESA_agp_offset = 1 # GL/glxext.h:657 +# GL/glxext.h:659 +glXGetAGPOffsetMESA = _link_function('glXGetAGPOffsetMESA', c_uint, [POINTER(None)], 'MESA_agp_offset') + +PFNGLXGETAGPOFFSETMESAPROC = CFUNCTYPE(c_uint, POINTER(None)) # GL/glxext.h:661 +# NV_vertex_array_range (GL/glxext.h:667) +GLX_NV_vertex_array_range = 1 # GL/glxext.h:668 +GLsizei = c_int # /usr/include/GL/gl.h:59 +GLfloat = c_float # /usr/include/GL/gl.h:63 +# GL/glxext.h:670 +glXAllocateMemoryNV = _link_function('glXAllocateMemoryNV', POINTER(c_void), [GLsizei, GLfloat, GLfloat, GLfloat], 'NV_vertex_array_range') + +GLvoid = None # /usr/include/GL/gl.h:67 +# GL/glxext.h:673 +glXFreeMemoryNV = _link_function('glXFreeMemoryNV', None, [POINTER(GLvoid)], 'NV_vertex_array_range') + +PFNGLXALLOCATEMEMORYNVPROC = CFUNCTYPE(POINTER(c_void), GLsizei, GLfloat, GLfloat, GLfloat) # GL/glxext.h:675 +PFNGLXFREEMEMORYNVPROC = CFUNCTYPE(None, POINTER(GLvoid)) # GL/glxext.h:680 +# NV_swap_group (GL/glxext.h:683) +GLX_NV_swap_group = 1 # GL/glxext.h:684 +GLuint = c_uint # /usr/include/GL/gl.h:62 +# GL/glxext.h:686 +glXJoinSwapGroupNV = _link_function('glXJoinSwapGroupNV', c_int, [POINTER(Display), GLXDrawable, GLuint], 'NV_swap_group') + +# GL/glxext.h:689 +glXBindSwapBarrierNV = _link_function('glXBindSwapBarrierNV', c_int, [POINTER(Display), GLuint, GLuint], 'NV_swap_group') + +# GL/glxext.h:691 +glXQuerySwapGroupNV = _link_function('glXQuerySwapGroupNV', c_int, [POINTER(Display), GLXDrawable, POINTER(GLuint), POINTER(GLuint)], 'NV_swap_group') + +# GL/glxext.h:694 +glXQueryMaxSwapGroupsNV = _link_function('glXQueryMaxSwapGroupsNV', c_int, [POINTER(Display), c_int, POINTER(GLuint), POINTER(GLuint)], 'NV_swap_group') + +# GL/glxext.h:697 +glXQueryFrameCountNV = _link_function('glXQueryFrameCountNV', c_int, [POINTER(Display), c_int, POINTER(GLuint)], 'NV_swap_group') + +# GL/glxext.h:699 +glXResetFrameCountNV = _link_function('glXResetFrameCountNV', c_int, [POINTER(Display), c_int], 'NV_swap_group') + +PFNGLXJOINSWAPGROUPNVPROC = CFUNCTYPE(c_int, POINTER(Display), GLXDrawable, GLuint) # GL/glxext.h:701 +PFNGLXBINDSWAPBARRIERNVPROC = CFUNCTYPE(c_int, POINTER(Display), GLuint, GLuint) # GL/glxext.h:705 +PFNGLXQUERYSWAPGROUPNVPROC = CFUNCTYPE(c_int, POINTER(Display), GLXDrawable, POINTER(GLuint), POINTER(GLuint)) # GL/glxext.h:709 +PFNGLXQUERYMAXSWAPGROUPSNVPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, POINTER(GLuint), POINTER(GLuint)) # GL/glxext.h:714 +PFNGLXQUERYFRAMECOUNTNVPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, POINTER(GLuint)) # GL/glxext.h:719 +PFNGLXRESETFRAMECOUNTNVPROC = CFUNCTYPE(c_int, POINTER(Display), c_int) # GL/glxext.h:723 +# NV_video_out (GL/glxext.h:726) +GLX_NV_video_out = 1 # GL/glxext.h:727 +# GL/glxext.h:729 +glXGetVideoDeviceNV = _link_function('glXGetVideoDeviceNV', c_int, [POINTER(Display), c_int, c_int, POINTER(GLXVideoDeviceNV)], 'NV_video_out') + +# GL/glxext.h:732 +glXReleaseVideoDeviceNV = _link_function('glXReleaseVideoDeviceNV', c_int, [POINTER(Display), c_int, GLXVideoDeviceNV], 'NV_video_out') + +GLXPbuffer = XID # /usr/include/GL/glx.h:147 +# GL/glxext.h:735 +glXBindVideoImageNV = _link_function('glXBindVideoImageNV', c_int, [POINTER(Display), GLXVideoDeviceNV, GLXPbuffer, c_int], 'NV_video_out') + +# GL/glxext.h:738 +glXReleaseVideoImageNV = _link_function('glXReleaseVideoImageNV', c_int, [POINTER(Display), GLXPbuffer], 'NV_video_out') + +GLboolean = c_ubyte # /usr/include/GL/gl.h:54 +# GL/glxext.h:740 +glXSendPbufferToVideoNV = _link_function('glXSendPbufferToVideoNV', c_int, [POINTER(Display), GLXPbuffer, c_int, POINTER(c_ulong), GLboolean], 'NV_video_out') + +# GL/glxext.h:745 +glXGetVideoInfoNV = _link_function('glXGetVideoInfoNV', c_int, [POINTER(Display), c_int, GLXVideoDeviceNV, POINTER(c_ulong), POINTER(c_ulong)], 'NV_video_out') + +PFNGLXGETVIDEODEVICENVPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, c_int, POINTER(GLXVideoDeviceNV)) # GL/glxext.h:750 +PFNGLXRELEASEVIDEODEVICENVPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, GLXVideoDeviceNV) # GL/glxext.h:755 +PFNGLXBINDVIDEOIMAGENVPROC = CFUNCTYPE(c_int, POINTER(Display), GLXVideoDeviceNV, GLXPbuffer, c_int) # GL/glxext.h:759 +PFNGLXRELEASEVIDEOIMAGENVPROC = CFUNCTYPE(c_int, POINTER(Display), GLXPbuffer) # GL/glxext.h:764 +PFNGLXSENDPBUFFERTOVIDEONVPROC = CFUNCTYPE(c_int, POINTER(Display), GLXPbuffer, c_int, POINTER(c_ulong), GLboolean) # GL/glxext.h:767 +PFNGLXGETVIDEOINFONVPROC = CFUNCTYPE(c_int, POINTER(Display), c_int, GLXVideoDeviceNV, POINTER(c_ulong), POINTER(c_ulong)) # GL/glxext.h:773 +# EXT_texture_from_pixmap (GL/glxext.h:779) +# GL/glxext.h:782 +glXBindTexImageEXT = _link_function('glXBindTexImageEXT', None, [POINTER(Display), GLXDrawable, c_int, POINTER(c_int)], 'EXT_texture_from_pixmap') + +# GL/glxext.h:784 +glXReleaseTextImageEXT = _link_function('glXReleaseTextImageEXT', None, [POINTER(Display), GLXDrawable, c_int], 'EXT_texture_from_pixmap') + +PFNGLXBINDTEXIMAGEEXTPROC = CFUNCTYPE(None, POINTER(Display), GLXDrawable, c_int, POINTER(c_int)) # GL/glxext.h:787 +PFNGLXRELEASETEXIMAGEEXTPROC = CFUNCTYPE(None, POINTER(Display), GLXDrawable, c_int) # GL/glxext.h:791 + +__all__ = ['GLAPI', 'GLX_GLXEXT_VERSION', 'GLX_SAMPLE_BUFFERS_ARB', +'GLX_SAMPLES_ARB', 'GLX_RGBA_FLOAT_TYPE_ARB', 'GLX_RGBA_FLOAT_BIT_ARB', +'GLX_SAMPLE_BUFFERS_SGIS', 'GLX_SAMPLES_SGIS', 'GLX_X_VISUAL_TYPE_EXT', +'GLX_TRANSPARENT_TYPE_EXT', 'GLX_TRANSPARENT_INDEX_VALUE_EXT', +'GLX_TRANSPARENT_RED_VALUE_EXT', 'GLX_TRANSPARENT_GREEN_VALUE_EXT', +'GLX_TRANSPARENT_BLUE_VALUE_EXT', 'GLX_TRANSPARENT_ALPHA_VALUE_EXT', +'GLX_NONE_EXT', 'GLX_TRUE_COLOR_EXT', 'GLX_DIRECT_COLOR_EXT', +'GLX_PSEUDO_COLOR_EXT', 'GLX_STATIC_COLOR_EXT', 'GLX_GRAY_SCALE_EXT', +'GLX_STATIC_GRAY_EXT', 'GLX_TRANSPARENT_RGB_EXT', 'GLX_TRANSPARENT_INDEX_EXT', +'GLX_VISUAL_CAVEAT_EXT', 'GLX_SLOW_VISUAL_EXT', +'GLX_NON_CONFORMANT_VISUAL_EXT', 'GLX_SHARE_CONTEXT_EXT', 'GLX_VISUAL_ID_EXT', +'GLX_SCREEN_EXT', 'GLX_WINDOW_BIT_SGIX', 'GLX_PIXMAP_BIT_SGIX', +'GLX_RGBA_BIT_SGIX', 'GLX_COLOR_INDEX_BIT_SGIX', 'GLX_DRAWABLE_TYPE_SGIX', +'GLX_RENDER_TYPE_SGIX', 'GLX_X_RENDERABLE_SGIX', 'GLX_FBCONFIG_ID_SGIX', +'GLX_RGBA_TYPE_SGIX', 'GLX_COLOR_INDEX_TYPE_SGIX', 'GLX_PBUFFER_BIT_SGIX', +'GLX_BUFFER_CLOBBER_MASK_SGIX', 'GLX_FRONT_LEFT_BUFFER_BIT_SGIX', +'GLX_FRONT_RIGHT_BUFFER_BIT_SGIX', 'GLX_BACK_LEFT_BUFFER_BIT_SGIX', +'GLX_BACK_RIGHT_BUFFER_BIT_SGIX', 'GLX_AUX_BUFFERS_BIT_SGIX', +'GLX_DEPTH_BUFFER_BIT_SGIX', 'GLX_STENCIL_BUFFER_BIT_SGIX', +'GLX_ACCUM_BUFFER_BIT_SGIX', 'GLX_SAMPLE_BUFFERS_BIT_SGIX', +'GLX_MAX_PBUFFER_WIDTH_SGIX', 'GLX_MAX_PBUFFER_HEIGHT_SGIX', +'GLX_MAX_PBUFFER_PIXELS_SGIX', 'GLX_OPTIMAL_PBUFFER_WIDTH_SGIX', +'GLX_OPTIMAL_PBUFFER_HEIGHT_SGIX', 'GLX_PRESERVED_CONTENTS_SGIX', +'GLX_LARGEST_PBUFFER_SGIX', 'GLX_WIDTH_SGIX', 'GLX_HEIGHT_SGIX', +'GLX_EVENT_MASK_SGIX', 'GLX_DAMAGED_SGIX', 'GLX_SAVED_SGIX', +'GLX_WINDOW_SGIX', 'GLX_PBUFFER_SGIX', 'GLX_SYNC_FRAME_SGIX', +'GLX_SYNC_SWAP_SGIX', 'GLX_DIGITAL_MEDIA_PBUFFER_SGIX', +'GLX_BLENDED_RGBA_SGIS', 'GLX_MULTISAMPLE_SUB_RECT_WIDTH_SGIS', +'GLX_MULTISAMPLE_SUB_RECT_HEIGHT_SGIS', 'GLX_SAMPLE_BUFFERS_3DFX', +'GLX_SAMPLES_3DFX', 'GLX_3DFX_WINDOW_MODE_MESA', +'GLX_3DFX_FULLSCREEN_MODE_MESA', 'GLX_VISUAL_SELECT_GROUP_SGIX', +'GLX_SWAP_METHOD_OML', 'GLX_SWAP_EXCHANGE_OML', 'GLX_SWAP_COPY_OML', +'GLX_SWAP_UNDEFINED_OML', 'GLX_FLOAT_COMPONENTS_NV', +'GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX', 'GLX_BAD_HYPERPIPE_CONFIG_SGIX', +'GLX_BAD_HYPERPIPE_SGIX', 'GLX_HYPERPIPE_DISPLAY_PIPE_SGIX', +'GLX_HYPERPIPE_RENDER_PIPE_SGIX', 'GLX_PIPE_RECT_SGIX', +'GLX_PIPE_RECT_LIMITS_SGIX', 'GLX_HYPERPIPE_STEREO_SGIX', +'GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX', 'GLX_HYPERPIPE_ID_SGIX', +'GLXVideoSourceSGIX', 'GLXFBConfigIDSGIX', 'GLXFBConfigSGIX', +'GLXBufferClobberEventSGIX', 'GLXVideoDeviceNV', 'GLX_VIDEO_OUT_COLOR_NV', +'GLX_VIDEO_OUT_ALPHA_NV', 'GLX_VIDEO_OUT_DEPTH_NV', +'GLX_VIDEO_OUT_COLOR_AND_ALPHA_NV', 'GLX_VIDEO_OUT_COLOR_AND_DEPTH_NV', +'GLX_VIDEO_OUT_FRAME_NV', 'GLX_VIDEO_OUT_FIELD_1_NV', +'GLX_VIDEO_OUT_FIELD_2_NV', 'GLX_BIND_TO_TEXTURE_RGB_EXT', +'GLX_BIND_TO_TEXTURE_RGBA_EXT', 'GLX_BIND_TO_MIPMAP_TEXTURE_EXT', +'GLX_BIND_TO_TEXTURE_TARGETS_EXT', 'GLX_Y_INVERTED_EXT', +'GLX_TEXTURE_FORMAT_EXT', 'GLX_TEXTURE_TARGET_EXT', 'GLX_MIPMAP_TEXTURE_EXT', +'GLX_TEXTURE_FORMAT_NONE_EXT', 'GLX_TEXTURE_FORMAT_RGB_EXT', +'GLX_TEXTURE_FORMAT_RGBA_EXT', 'GLX_TEXTURE_1D_BIT_EXT', +'GLX_TEXTURE_2D_BIT_EXT', 'GLX_TEXTURE_RECTANGLE_BIT_EXT', +'GLX_TEXTURE_1D_EXT', 'GLX_TEXTURE_2D_EXT', 'GLX_TEXTURE_RECTANGLE_EXT', +'GLX_FRONT_LEFT_EXT', 'GLX_FRONT_RIGHT_EXT', 'GLX_BACK_LEFT_EXT', +'GLX_BACK_RIGHT_EXT', 'GLX_FRONT_EXT', 'GLX_BACK_EXT', 'GLX_AUX0_EXT', +'GLX_AUX1_EXT', 'GLX_AUX2_EXT', 'GLX_AUX3_EXT', 'GLX_AUX4_EXT', +'GLX_AUX5_EXT', 'GLX_AUX6_EXT', 'GLX_AUX7_EXT', 'GLX_AUX8_EXT', +'GLX_AUX9_EXT', 'GLX_ARB_multisample', 'GLX_ARB_fbconfig_float', +'GLX_SGIS_multisample', 'GLX_EXT_visual_info', 'GLX_SGI_swap_control', +'glXSwapIntervalSGI', 'PFNGLXSWAPINTERVALSGIPROC', 'GLX_SGI_video_sync', +'glXGetVideoSyncSGI', 'glXWaitVideoSyncSGI', 'glXGetRefreshRateSGI', +'PFNGLXGETVIDEOSYNCSGIPROC', 'PFNGLXWAITVIDEOSYNCSGIPROC', +'PFNGLXGETREFRESHRATESGIPROC', 'GLX_SGI_make_current_read', +'glXMakeCurrentReadSGI', 'glXGetCurrentReadDrawableSGI', +'PFNGLXMAKECURRENTREADSGIPROC', 'PFNGLXGETCURRENTREADDRAWABLESGIPROC', +'GLX_SGIX_video_source', 'GLX_EXT_visual_rating', 'GLX_EXT_import_context', +'glXGetCurrentDisplayEXT', 'glXQueryContextInfoEXT', 'glXGetContextIDEXT', +'glXImportContextEXT', 'glXFreeContextEXT', 'PFNGLXGETCURRENTDISPLAYEXTPROC', +'PFNGLXQUERYCONTEXTINFOEXTPROC', 'PFNGLXGETCONTEXTIDEXTPROC', +'PFNGLXIMPORTCONTEXTEXTPROC', 'PFNGLXFREECONTEXTEXTPROC', 'GLX_SGIX_fbconfig', +'glXGetFBConfigAttribSGIX', 'glXChooseFBConfigSGIX', +'glXCreateGLXPixmapWithConfigSGIX', 'glXCreateContextWithConfigSGIX', +'glXGetVisualFromFBConfigSGIX', 'glXGetFBConfigFromVisualSGIX', +'PFNGLXGETFBCONFIGATTRIBSGIXPROC', 'PFNGLXCHOOSEFBCONFIGSGIXPROC', +'PFNGLXCREATEGLXPIXMAPWITHCONFIGSGIXPROC', +'PFNGLXCREATECONTEXTWITHCONFIGSGIXPROC', +'PFNGLXGETVISUALFROMFBCONFIGSGIXPROC', 'PFNGLXGETFBCONFIGFROMVISUALSGIXPROC', +'GLX_SGIX_pbuffer', 'glXCreateGLXPbufferSGIX', 'glXDestroyGLXPbufferSGIX', +'glXQueryGLXPbufferSGIX', 'glXSelectEventSGIX', 'glXGetSelectedEventSGIX', +'PFNGLXCREATEGLXPBUFFERSGIXPROC', 'PFNGLXDESTROYGLXPBUFFERSGIXPROC', +'PFNGLXQUERYGLXPBUFFERSGIXPROC', 'PFNGLXSELECTEVENTSGIXPROC', +'PFNGLXGETSELECTEDEVENTSGIXPROC', 'GLX_SGI_cushion', 'glXCushionSGI', +'PFNGLXCUSHIONSGIPROC', 'GLX_SGIX_video_resize', 'glXBindChannelToWindowSGIX', +'glXChannelRectSGIX', 'glXQueryChannelRectSGIX', 'glXQueryChannelDeltasSGIX', +'glXChannelRectSyncSGIX', 'PFNGLXBINDCHANNELTOWINDOWSGIXPROC', +'PFNGLXCHANNELRECTSGIXPROC', 'PFNGLXQUERYCHANNELRECTSGIXPROC', +'PFNGLXQUERYCHANNELDELTASSGIXPROC', 'PFNGLXCHANNELRECTSYNCSGIXPROC', +'GLX_SGIX_dmbuffer', 'GLX_SGIX_swap_group', 'glXJoinSwapGroupSGIX', +'PFNGLXJOINSWAPGROUPSGIXPROC', 'GLX_SGIX_swap_barrier', +'glXBindSwapBarrierSGIX', 'glXQueryMaxSwapBarriersSGIX', +'PFNGLXBINDSWAPBARRIERSGIXPROC', 'PFNGLXQUERYMAXSWAPBARRIERSSGIXPROC', +'GLX_SUN_get_transparent_index', 'glXGetTransparentIndexSUN', +'PFNGLXGETTRANSPARENTINDEXSUNPROC', 'GLX_MESA_copy_sub_buffer', +'glXCopySubBufferMESA', 'PFNGLXCOPYSUBBUFFERMESAPROC', +'GLX_MESA_pixmap_colormap', 'glXCreateGLXPixmapMESA', +'PFNGLXCREATEGLXPIXMAPMESAPROC', 'GLX_MESA_release_buffers', +'glXReleaseBuffersMESA', 'PFNGLXRELEASEBUFFERSMESAPROC', +'GLX_MESA_set_3dfx_mode', 'glXSet3DfxModeMESA', 'PFNGLXSET3DFXMODEMESAPROC', +'GLX_SGIX_visual_select_group', 'GLX_OML_swap_method', 'GLX_OML_sync_control', +'glXGetSyncValuesOML', 'glXGetMscRateOML', 'glXSwapBuffersMscOML', +'glXWaitForMscOML', 'glXWaitForSbcOML', 'PFNGLXGETSYNCVALUESOMLPROC', +'PFNGLXGETMSCRATEOMLPROC', 'PFNGLXSWAPBUFFERSMSCOMLPROC', +'PFNGLXWAITFORMSCOMLPROC', 'PFNGLXWAITFORSBCOMLPROC', 'GLX_NV_float_buffer', +'GLX_SGIX_hyperpipe', 'GLXHyperpipeNetworkSGIX', 'GLXHyperpipeConfigSGIX', +'GLXPipeRect', 'GLXPipeRectLimits', 'glXQueryHyperpipeNetworkSGIX', +'glXHyperpipeConfigSGIX', 'glXQueryHyperpipeConfigSGIX', +'glXDestroyHyperpipeConfigSGIX', 'glXBindHyperpipeSGIX', +'glXQueryHyperpipeBestAttribSGIX', 'glXHyperpipeAttribSGIX', +'glXQueryHyperpipeAttribSGIX', 'PFNGLXQUERYHYPERPIPENETWORKSGIXPROC', +'PFNGLXHYPERPIPECONFIGSGIXPROC', 'PFNGLXQUERYHYPERPIPECONFIGSGIXPROC', +'PFNGLXDESTROYHYPERPIPECONFIGSGIXPROC', 'PFNGLXBINDHYPERPIPESGIXPROC', +'PFNGLXQUERYHYPERPIPEBESTATTRIBSGIXPROC', 'PFNGLXHYPERPIPEATTRIBSGIXPROC', +'PFNGLXQUERYHYPERPIPEATTRIBSGIXPROC', 'GLX_MESA_agp_offset', +'glXGetAGPOffsetMESA', 'PFNGLXGETAGPOFFSETMESAPROC', +'GLX_NV_vertex_array_range', 'glXAllocateMemoryNV', 'glXFreeMemoryNV', +'PFNGLXALLOCATEMEMORYNVPROC', 'PFNGLXFREEMEMORYNVPROC', 'GLX_NV_swap_group', +'glXJoinSwapGroupNV', 'glXBindSwapBarrierNV', 'glXQuerySwapGroupNV', +'glXQueryMaxSwapGroupsNV', 'glXQueryFrameCountNV', 'glXResetFrameCountNV', +'PFNGLXJOINSWAPGROUPNVPROC', 'PFNGLXBINDSWAPBARRIERNVPROC', +'PFNGLXQUERYSWAPGROUPNVPROC', 'PFNGLXQUERYMAXSWAPGROUPSNVPROC', +'PFNGLXQUERYFRAMECOUNTNVPROC', 'PFNGLXRESETFRAMECOUNTNVPROC', +'GLX_NV_video_out', 'glXGetVideoDeviceNV', 'glXReleaseVideoDeviceNV', +'glXBindVideoImageNV', 'glXReleaseVideoImageNV', 'glXSendPbufferToVideoNV', +'glXGetVideoInfoNV', 'PFNGLXGETVIDEODEVICENVPROC', +'PFNGLXRELEASEVIDEODEVICENVPROC', 'PFNGLXBINDVIDEOIMAGENVPROC', +'PFNGLXRELEASEVIDEOIMAGENVPROC', 'PFNGLXSENDPBUFFERTOVIDEONVPROC', +'PFNGLXGETVIDEOINFONVPROC', 'glXBindTexImageEXT', 'glXReleaseTextImageEXT', +'PFNGLXBINDTEXIMAGEEXTPROC', 'PFNGLXRELEASETEXIMAGEEXTPROC'] +# END GENERATED CONTENT (do not edit above this line) + + + + diff --git a/pyglet/gl/lib.py b/pyglet/gl/lib.py new file mode 100644 index 0000000..c68b097 --- /dev/null +++ b/pyglet/gl/lib.py @@ -0,0 +1,144 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +''' +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: lib.py 1978 2008-03-28 15:11:48Z Alex.Holkner $' + +import sys +import ctypes + +import pyglet + +__all__ = ['link_GL', 'link_GLU', 'link_AGL', 'link_GLX', 'link_WGL'] + +_debug_gl = pyglet.options['debug_gl'] +_debug_gl_trace = pyglet.options['debug_gl_trace'] +_debug_gl_trace_args = pyglet.options['debug_gl_trace_args'] + +class MissingFunctionException(Exception): + def __init__(self, name, requires=None, suggestions=None): + msg = '%s is not exported by the available OpenGL driver.' % name + if requires: + msg += ' %s is required for this functionality.' % requires + if suggestions: + msg += ' Consider alternative(s) %s.' % ', '.join(suggestions) + Exception.__init__(self, msg) + +def missing_function(name, requires=None, suggestions=None): + def MissingFunction(*args, **kwargs): + raise MissingFunctionException(name, requires, suggestions) + return MissingFunction + +_int_types = (ctypes.c_int16, ctypes.c_int32) +if hasattr(ctypes, 'c_int64'): + # Some builds of ctypes apparently do not have c_int64 + # defined; it's a pretty good bet that these builds do not + # have 64-bit pointers. + _int_types += (ctypes.c_int64,) +for t in _int_types: + if ctypes.sizeof(t) == ctypes.sizeof(ctypes.c_size_t): + c_ptrdiff_t = t + +class c_void(ctypes.Structure): + # c_void_p is a buggy return type, converting to int, so + # POINTER(None) == c_void_p is actually written as + # POINTER(c_void), so it can be treated as a real pointer. + _fields_ = [('dummy', ctypes.c_int)] + +class GLException(Exception): + pass + +def errcheck(result, func, arguments): + if _debug_gl_trace: + try: + name = func.__name__ + except AttributeError: + name = repr(func) + if _debug_gl_trace_args: + trace_args = ', '.join([repr(arg)[:20] for arg in arguments]) + print '%s(%s)' % (name, trace_args) + else: + print name + + from pyglet import gl + context = gl.current_context + if not context: + raise GLException('No GL context; create a Window first') + if not context._gl_begin: + error = gl.glGetError() + if error: + msg = ctypes.cast(gl.gluErrorString(error), ctypes.c_char_p).value + raise GLException(msg) + return result + +def errcheck_glbegin(result, func, arguments): + from pyglet import gl + context = gl.current_context + if not context: + raise GLException('No GL context; create a Window first') + context._gl_begin = True + return result + +def errcheck_glend(result, func, arguments): + from pyglet import gl + context = gl.current_context + if not context: + raise GLException('No GL context; create a Window first') + context._gl_begin = False + return errcheck(result, func, arguments) + +def decorate_function(func, name): + if _debug_gl: + if name == 'glBegin': + func.errcheck = errcheck_glbegin + elif name == 'glEnd': + func.errcheck = errcheck_glend + elif name not in ('glGetError', 'gluErrorString') and \ + name[:3] not in ('glX', 'agl', 'wgl'): + func.errcheck = errcheck + +link_AGL = None +link_GLX = None +link_WGL = None + +if sys.platform in ('win32', 'cygwin'): + from pyglet.gl.lib_wgl import link_GL, link_GLU, link_WGL +elif sys.platform == 'darwin': + from pyglet.gl.lib_agl import link_GL, link_GLU, link_AGL +else: + from pyglet.gl.lib_glx import link_GL, link_GLU, link_GLX + diff --git a/pyglet/gl/lib_agl.py b/pyglet/gl/lib_agl.py new file mode 100644 index 0000000..af0a01b --- /dev/null +++ b/pyglet/gl/lib_agl.py @@ -0,0 +1,74 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +''' +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: $' + +from ctypes import * + +import pyglet.lib +from pyglet.gl.lib import missing_function, decorate_function + +__all__ = ['link_GL', 'link_GLU', 'link_AGL'] + +gl_lib = pyglet.lib.load_library( + framework='/System/Library/Frameworks/OpenGL.framework') +agl_lib = pyglet.lib.load_library( + framework='/System/Library/Frameworks/AGL.framework') + +def link_GL(name, restype, argtypes, requires=None, suggestions=None): + try: + func = getattr(gl_lib, name) + func.restype = restype + func.argtypes = argtypes + decorate_function(func, name) + return func + except AttributeError, e: + return missing_function(name, requires, suggestions) + +link_GLU = link_GL + +def link_AGL(name, restype, argtypes, requires=None, suggestions=None): + try: + func = getattr(agl_lib, name) + func.restype = restype + func.argtypes = argtypes + decorate_function(func, name) + return func + except AttributeError, e: + return missing_function(name, requires, suggestions) + diff --git a/pyglet/gl/lib_glx.py b/pyglet/gl/lib_glx.py new file mode 100644 index 0000000..cd64423 --- /dev/null +++ b/pyglet/gl/lib_glx.py @@ -0,0 +1,92 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +''' +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: lib_glx.py 1579 2008-01-15 14:47:19Z Alex.Holkner $' + +from ctypes import * + +import pyglet.lib +from pyglet.gl.lib import missing_function, decorate_function + +__all__ = ['link_GL', 'link_GLU', 'link_GLX'] + +gl_lib = pyglet.lib.load_library('GL') +glu_lib = pyglet.lib.load_library('GLU') + +# Look for glXGetProcAddressARB extension, use it as fallback (for +# ATI fglrx and DRI drivers). +try: + glXGetProcAddressARB = getattr(gl_lib, 'glXGetProcAddressARB') + glXGetProcAddressARB.restype = POINTER(CFUNCTYPE(None)) + glXGetProcAddressARB.argtypes = [POINTER(c_ubyte)] + _have_getprocaddress = True +except AttributeError: + _have_get_procaddress = False + +def link_GL(name, restype, argtypes, requires=None, suggestions=None): + try: + func = getattr(gl_lib, name) + func.restype = restype + func.argtypes = argtypes + decorate_function(func, name) + return func + except AttributeError, e: + if _have_getprocaddress: + # Fallback if implemented but not in ABI + bname = cast(pointer(create_string_buffer(name)), POINTER(c_ubyte)) + addr = glXGetProcAddressARB(bname) + if addr: + ftype = CFUNCTYPE(*((restype,) + tuple(argtypes))) + func = cast(addr, ftype) + decorate_function(func, name) + return func + + return missing_function(name, requires, suggestions) + +link_GLX = link_GL + +def link_GLU(name, restype, argtypes, requires=None, suggestions=None): + try: + func = getattr(glu_lib, name) + func.restype = restype + func.argtypes = argtypes + decorate_function(func, name) + return func + except AttributeError, e: + return missing_function(name, requires, suggestions) + diff --git a/pyglet/gl/lib_wgl.py b/pyglet/gl/lib_wgl.py new file mode 100644 index 0000000..dd72685 --- /dev/null +++ b/pyglet/gl/lib_wgl.py @@ -0,0 +1,153 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +''' +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: lib_glx.py 597 2007-02-03 16:13:07Z Alex.Holkner $' + +import ctypes +from ctypes import * + +import pyglet +from pyglet.gl.lib import missing_function, decorate_function + +__all__ = ['link_GL', 'link_GLU', 'link_WGL'] + +_debug_trace = pyglet.options['debug_trace'] + +gl_lib = ctypes.windll.opengl32 +glu_lib = ctypes.windll.glu32 +wgl_lib = gl_lib + +if _debug_trace: + from pyglet.lib import _TraceLibrary + gl_lib = _TraceLibrary(gl_lib) + glu_lib = _TraceLibrary(glu_lib) + wgl_lib = _TraceLibrary(wgl_lib) + +try: + wglGetProcAddress = wgl_lib.wglGetProcAddress + wglGetProcAddress.restype = CFUNCTYPE(POINTER(c_int)) + wglGetProcAddress.argtypes = [c_char_p] + _have_get_proc_address = True +except AttributeError: + _have_get_proc_address = False + +class WGLFunctionProxy(object): + __slots__ = ['name', 'requires', 'suggestions', 'ftype', 'func'] + def __init__(self, name, ftype, requires, suggestions): + assert _have_get_proc_address + self.name = name + self.ftype = ftype + self.requires = requires + self.suggestions = suggestions + self.func = None + + def __call__(self, *args, **kwargs): + if self.func: + return self.func(*args, **kwargs) + + from pyglet.gl import current_context + if not current_context: + raise Exception( + 'Call to function "%s" before GL context created' % self.name) + address = wglGetProcAddress(self.name) + if cast(address, POINTER(c_int)): # check cast because address is func + self.func = cast(address, self.ftype) + decorate_function(self.func, self.name) + else: + self.func = missing_function( + self.name, self.requires, self.suggestions) + result = self.func(*args, **kwargs) + return result + +def link_GL(name, restype, argtypes, requires=None, suggestions=None): + try: + func = getattr(gl_lib, name) + func.restype = restype + func.argtypes = argtypes + decorate_function(func, name) + return func + except AttributeError, e: + # Not in opengl32.dll. Try and get a pointer from WGL. + try: + fargs = (restype,) + tuple(argtypes) + ftype = ctypes.WINFUNCTYPE(*fargs) + if _have_get_proc_address: + from pyglet.gl import gl_info + if gl_info.have_context(): + address = wglGetProcAddress(name) + if address: + func = cast(address, ftype) + decorate_function(func, name) + return func + else: + # Insert proxy until we have a context + return WGLFunctionProxy(name, ftype, requires, suggestions) + except: + pass + + return missing_function(name, requires, suggestions) + +def link_GLU(name, restype, argtypes, requires=None, suggestions=None): + try: + func = getattr(glu_lib, name) + func.restype = restype + func.argtypes = argtypes + decorate_function(func, name) + return func + except AttributeError, e: + # Not in glu32.dll. Try and get a pointer from WGL. + try: + fargs = (restype,) + tuple(argtypes) + ftype = ctypes.WINFUNCTYPE(*fargs) + if _have_get_proc_address: + from pyglet.gl import gl_info + if gl_info.have_context(): + address = wglGetProcAddress(name) + if address: + func = cast(address, ftype) + decorate_function(func, name) + return func + else: + # Insert proxy until we have a context + return WGLFunctionProxy(name, ftype, requires, suggestions) + except: + pass + + return missing_function(name, requires, suggestions) + +link_WGL = link_GL diff --git a/pyglet/gl/wgl.py b/pyglet/gl/wgl.py new file mode 100755 index 0000000..5140d7d --- /dev/null +++ b/pyglet/gl/wgl.py @@ -0,0 +1,374 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +'''Wrapper for C:\cygwin\home\Alex\pyglet\tools\wgl.h + +Generated by tools/gengl.py. +Do not modify this file. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: gengl.py 601 2007-02-04 05:36:59Z Alex.Holkner $' + +from ctypes import * +from pyglet.gl.lib import link_WGL as _link_function +from pyglet.gl.lib import c_ptrdiff_t + +if not _link_function: + raise ImportError('opengl32.dll is not available.') + +# BEGIN GENERATED CONTENT (do not edit below this line) + +# This content is generated by tools/gengl.py. +# Wrapper for C:\cygwin\home\Alex\pyglet\tools\wgl.h + + +CONST = 0 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:14 +GLenum = c_uint # C:\cygwin\home\Alex\pyglet\tools\wgl.h:17 +GLboolean = c_ubyte # C:\cygwin\home\Alex\pyglet\tools\wgl.h:18 +GLbitfield = c_uint # C:\cygwin\home\Alex\pyglet\tools\wgl.h:19 +GLbyte = c_char # C:\cygwin\home\Alex\pyglet\tools\wgl.h:20 +GLshort = c_short # C:\cygwin\home\Alex\pyglet\tools\wgl.h:21 +GLint = c_int # C:\cygwin\home\Alex\pyglet\tools\wgl.h:22 +GLsizei = c_int # C:\cygwin\home\Alex\pyglet\tools\wgl.h:23 +GLubyte = c_ubyte # C:\cygwin\home\Alex\pyglet\tools\wgl.h:24 +GLushort = c_ushort # C:\cygwin\home\Alex\pyglet\tools\wgl.h:25 +GLuint = c_uint # C:\cygwin\home\Alex\pyglet\tools\wgl.h:26 +GLfloat = c_float # C:\cygwin\home\Alex\pyglet\tools\wgl.h:27 +GLclampf = c_float # C:\cygwin\home\Alex\pyglet\tools\wgl.h:28 +GLdouble = c_double # C:\cygwin\home\Alex\pyglet\tools\wgl.h:29 +GLclampd = c_double # C:\cygwin\home\Alex\pyglet\tools\wgl.h:30 +GLvoid = None # C:\cygwin\home\Alex\pyglet\tools\wgl.h:31 +INT8 = c_char # C:\cygwin\home\Alex\pyglet\tools\wgl.h:33 +PINT8 = c_char_p # C:\cygwin\home\Alex\pyglet\tools\wgl.h:33 +INT16 = c_short # C:\cygwin\home\Alex\pyglet\tools\wgl.h:34 +PINT16 = POINTER(c_short) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:34 +INT32 = c_int # C:\cygwin\home\Alex\pyglet\tools\wgl.h:35 +PINT32 = POINTER(c_int) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:35 +UINT8 = c_ubyte # C:\cygwin\home\Alex\pyglet\tools\wgl.h:36 +PUINT8 = POINTER(c_ubyte) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:36 +UINT16 = c_ushort # C:\cygwin\home\Alex\pyglet\tools\wgl.h:37 +PUINT16 = POINTER(c_ushort) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:37 +UINT32 = c_uint # C:\cygwin\home\Alex\pyglet\tools\wgl.h:38 +PUINT32 = POINTER(c_uint) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:38 +LONG32 = c_int # C:\cygwin\home\Alex\pyglet\tools\wgl.h:39 +PLONG32 = POINTER(c_int) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:39 +ULONG32 = c_uint # C:\cygwin\home\Alex\pyglet\tools\wgl.h:40 +PULONG32 = POINTER(c_uint) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:40 +DWORD32 = c_uint # C:\cygwin\home\Alex\pyglet\tools\wgl.h:41 +PDWORD32 = POINTER(c_uint) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:41 +INT64 = c_longlong # C:\cygwin\home\Alex\pyglet\tools\wgl.h:42 +PINT64 = POINTER(c_longlong) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:42 +UINT64 = c_ulonglong # C:\cygwin\home\Alex\pyglet\tools\wgl.h:43 +PUINT64 = POINTER(c_ulonglong) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:43 +VOID = None # C:\cygwin\home\Alex\pyglet\tools\wgl.h:45 +LPVOID = POINTER(None) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:45 +LPCSTR = c_char_p # C:\cygwin\home\Alex\pyglet\tools\wgl.h:46 +CHAR = c_char # C:\cygwin\home\Alex\pyglet\tools\wgl.h:47 +BYTE = c_ubyte # C:\cygwin\home\Alex\pyglet\tools\wgl.h:48 +WORD = c_ushort # C:\cygwin\home\Alex\pyglet\tools\wgl.h:49 +USHORT = c_ushort # C:\cygwin\home\Alex\pyglet\tools\wgl.h:49 +UINT = c_uint # C:\cygwin\home\Alex\pyglet\tools\wgl.h:50 +INT = c_int # C:\cygwin\home\Alex\pyglet\tools\wgl.h:51 +INT_PTR = POINTER(c_int) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:51 +BOOL = c_long # C:\cygwin\home\Alex\pyglet\tools\wgl.h:52 +LONG = c_long # C:\cygwin\home\Alex\pyglet\tools\wgl.h:53 +DWORD = c_ulong # C:\cygwin\home\Alex\pyglet\tools\wgl.h:54 +FLOAT = c_float # C:\cygwin\home\Alex\pyglet\tools\wgl.h:55 +COLORREF = DWORD # C:\cygwin\home\Alex\pyglet\tools\wgl.h:56 +LPCOLORREF = POINTER(DWORD) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:56 +HANDLE = POINTER(None) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:58 +HGLRC = HANDLE # C:\cygwin\home\Alex\pyglet\tools\wgl.h:60 +HDC = HANDLE # C:\cygwin\home\Alex\pyglet\tools\wgl.h:61 +PROC = CFUNCTYPE(INT_PTR) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:63 +# C:\cygwin\home\Alex\pyglet\tools\wgl.h:65 +wglCopyContext = _link_function('wglCopyContext', BOOL, [HGLRC, HGLRC, UINT], None) + +# C:\cygwin\home\Alex\pyglet\tools\wgl.h:66 +wglCreateContext = _link_function('wglCreateContext', HGLRC, [HDC], None) + +# C:\cygwin\home\Alex\pyglet\tools\wgl.h:67 +wglCreateLayerContext = _link_function('wglCreateLayerContext', HGLRC, [HDC, c_int], None) + +# C:\cygwin\home\Alex\pyglet\tools\wgl.h:68 +wglDeleteContext = _link_function('wglDeleteContext', BOOL, [HGLRC], None) + +# C:\cygwin\home\Alex\pyglet\tools\wgl.h:69 +wglGetCurrentContext = _link_function('wglGetCurrentContext', HGLRC, [], None) + +# C:\cygwin\home\Alex\pyglet\tools\wgl.h:70 +wglGetCurrentDC = _link_function('wglGetCurrentDC', HDC, [], None) + +# C:\cygwin\home\Alex\pyglet\tools\wgl.h:71 +wglGetProcAddress = _link_function('wglGetProcAddress', PROC, [LPCSTR], None) + +# C:\cygwin\home\Alex\pyglet\tools\wgl.h:72 +wglMakeCurrent = _link_function('wglMakeCurrent', BOOL, [HDC, HGLRC], None) + +# C:\cygwin\home\Alex\pyglet\tools\wgl.h:73 +wglShareLists = _link_function('wglShareLists', BOOL, [HGLRC, HGLRC], None) + +# C:\cygwin\home\Alex\pyglet\tools\wgl.h:74 +wglUseFontBitmapsA = _link_function('wglUseFontBitmapsA', BOOL, [HDC, DWORD, DWORD, DWORD], None) + +# C:\cygwin\home\Alex\pyglet\tools\wgl.h:75 +wglUseFontBitmapsW = _link_function('wglUseFontBitmapsW', BOOL, [HDC, DWORD, DWORD, DWORD], None) + +# C:\cygwin\home\Alex\pyglet\tools\wgl.h:76 +SwapBuffers = _link_function('SwapBuffers', BOOL, [HDC], None) + +class struct__POINTFLOAT(Structure): + __slots__ = [ + 'x', + 'y', + ] +struct__POINTFLOAT._fields_ = [ + ('x', FLOAT), + ('y', FLOAT), +] + +POINTFLOAT = struct__POINTFLOAT # C:\cygwin\home\Alex\pyglet\tools\wgl.h:81 +PPOINTFLOAT = POINTER(struct__POINTFLOAT) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:81 +class struct__GLYPHMETRICSFLOAT(Structure): + __slots__ = [ + 'gmfBlackBoxX', + 'gmfBlackBoxY', + 'gmfptGlyphOrigin', + 'gmfCellIncX', + 'gmfCellIncY', + ] +struct__GLYPHMETRICSFLOAT._fields_ = [ + ('gmfBlackBoxX', FLOAT), + ('gmfBlackBoxY', FLOAT), + ('gmfptGlyphOrigin', POINTFLOAT), + ('gmfCellIncX', FLOAT), + ('gmfCellIncY', FLOAT), +] + +GLYPHMETRICSFLOAT = struct__GLYPHMETRICSFLOAT # C:\cygwin\home\Alex\pyglet\tools\wgl.h:89 +PGLYPHMETRICSFLOAT = POINTER(struct__GLYPHMETRICSFLOAT) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:89 +LPGLYPHMETRICSFLOAT = POINTER(struct__GLYPHMETRICSFLOAT) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:89 +WGL_FONT_LINES = 0 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:91 +WGL_FONT_POLYGONS = 1 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:92 +# C:\cygwin\home\Alex\pyglet\tools\wgl.h:93 +wglUseFontOutlinesA = _link_function('wglUseFontOutlinesA', BOOL, [HDC, DWORD, DWORD, DWORD, FLOAT, FLOAT, c_int, LPGLYPHMETRICSFLOAT], None) + +# C:\cygwin\home\Alex\pyglet\tools\wgl.h:95 +wglUseFontOutlinesW = _link_function('wglUseFontOutlinesW', BOOL, [HDC, DWORD, DWORD, DWORD, FLOAT, FLOAT, c_int, LPGLYPHMETRICSFLOAT], None) + +class struct_tagLAYERPLANEDESCRIPTOR(Structure): + __slots__ = [ + 'nSize', + 'nVersion', + 'dwFlags', + 'iPixelType', + 'cColorBits', + 'cRedBits', + 'cRedShift', + 'cGreenBits', + 'cGreenShift', + 'cBlueBits', + 'cBlueShift', + 'cAlphaBits', + 'cAlphaShift', + 'cAccumBits', + 'cAccumRedBits', + 'cAccumGreenBits', + 'cAccumBlueBits', + 'cAccumAlphaBits', + 'cDepthBits', + 'cStencilBits', + 'cAuxBuffers', + 'iLayerPlane', + 'bReserved', + 'crTransparent', + ] +struct_tagLAYERPLANEDESCRIPTOR._fields_ = [ + ('nSize', WORD), + ('nVersion', WORD), + ('dwFlags', DWORD), + ('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), + ('iLayerPlane', BYTE), + ('bReserved', BYTE), + ('crTransparent', COLORREF), +] + +LAYERPLANEDESCRIPTOR = struct_tagLAYERPLANEDESCRIPTOR # C:\cygwin\home\Alex\pyglet\tools\wgl.h:125 +PLAYERPLANEDESCRIPTOR = POINTER(struct_tagLAYERPLANEDESCRIPTOR) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:125 +LPLAYERPLANEDESCRIPTOR = POINTER(struct_tagLAYERPLANEDESCRIPTOR) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:125 +LPD_DOUBLEBUFFER = 1 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:128 +LPD_STEREO = 2 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:129 +LPD_SUPPORT_GDI = 16 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:130 +LPD_SUPPORT_OPENGL = 32 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:131 +LPD_SHARE_DEPTH = 64 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:132 +LPD_SHARE_STENCIL = 128 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:133 +LPD_SHARE_ACCUM = 256 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:134 +LPD_SWAP_EXCHANGE = 512 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:135 +LPD_SWAP_COPY = 1024 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:136 +LPD_TRANSPARENT = 4096 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:137 +LPD_TYPE_RGBA = 0 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:139 +LPD_TYPE_COLORINDEX = 1 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:140 +WGL_SWAP_MAIN_PLANE = 1 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:143 +WGL_SWAP_OVERLAY1 = 2 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:144 +WGL_SWAP_OVERLAY2 = 4 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:145 +WGL_SWAP_OVERLAY3 = 8 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:146 +WGL_SWAP_OVERLAY4 = 16 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:147 +WGL_SWAP_OVERLAY5 = 32 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:148 +WGL_SWAP_OVERLAY6 = 64 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:149 +WGL_SWAP_OVERLAY7 = 128 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:150 +WGL_SWAP_OVERLAY8 = 256 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:151 +WGL_SWAP_OVERLAY9 = 512 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:152 +WGL_SWAP_OVERLAY10 = 1024 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:153 +WGL_SWAP_OVERLAY11 = 2048 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:154 +WGL_SWAP_OVERLAY12 = 4096 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:155 +WGL_SWAP_OVERLAY13 = 8192 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:156 +WGL_SWAP_OVERLAY14 = 16384 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:157 +WGL_SWAP_OVERLAY15 = 32768 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:158 +WGL_SWAP_UNDERLAY1 = 65536 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:159 +WGL_SWAP_UNDERLAY2 = 131072 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:160 +WGL_SWAP_UNDERLAY3 = 262144 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:161 +WGL_SWAP_UNDERLAY4 = 524288 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:162 +WGL_SWAP_UNDERLAY5 = 1048576 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:163 +WGL_SWAP_UNDERLAY6 = 2097152 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:164 +WGL_SWAP_UNDERLAY7 = 4194304 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:165 +WGL_SWAP_UNDERLAY8 = 8388608 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:166 +WGL_SWAP_UNDERLAY9 = 16777216 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:167 +WGL_SWAP_UNDERLAY10 = 33554432 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:168 +WGL_SWAP_UNDERLAY11 = 67108864 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:169 +WGL_SWAP_UNDERLAY12 = 134217728 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:170 +WGL_SWAP_UNDERLAY13 = 268435456 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:171 +WGL_SWAP_UNDERLAY14 = 536870912 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:172 +WGL_SWAP_UNDERLAY15 = 1073741824 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:173 +# C:\cygwin\home\Alex\pyglet\tools\wgl.h:175 +wglDescribeLayerPlane = _link_function('wglDescribeLayerPlane', BOOL, [HDC, c_int, c_int, UINT, LPLAYERPLANEDESCRIPTOR], None) + +# C:\cygwin\home\Alex\pyglet\tools\wgl.h:177 +wglSetLayerPaletteEntries = _link_function('wglSetLayerPaletteEntries', c_int, [HDC, c_int, c_int, c_int, POINTER(COLORREF)], None) + +# C:\cygwin\home\Alex\pyglet\tools\wgl.h:179 +wglGetLayerPaletteEntries = _link_function('wglGetLayerPaletteEntries', c_int, [HDC, c_int, c_int, c_int, POINTER(COLORREF)], None) + +# C:\cygwin\home\Alex\pyglet\tools\wgl.h:181 +wglRealizeLayerPalette = _link_function('wglRealizeLayerPalette', BOOL, [HDC, c_int, BOOL], None) + +# C:\cygwin\home\Alex\pyglet\tools\wgl.h:182 +wglSwapLayerBuffers = _link_function('wglSwapLayerBuffers', BOOL, [HDC, UINT], None) + +class struct__WGLSWAP(Structure): + __slots__ = [ + 'hdc', + 'uiFlags', + ] +struct__WGLSWAP._fields_ = [ + ('hdc', HDC), + ('uiFlags', UINT), +] + +WGLSWAP = struct__WGLSWAP # C:\cygwin\home\Alex\pyglet\tools\wgl.h:188 +PWGLSWAP = POINTER(struct__WGLSWAP) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:188 +LPWGLSWAP = POINTER(struct__WGLSWAP) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:188 +WGL_SWAPMULTIPLE_MAX = 16 # C:\cygwin\home\Alex\pyglet\tools\wgl.h:190 +# C:\cygwin\home\Alex\pyglet\tools\wgl.h:192 +wglSwapMultipleBuffers = _link_function('wglSwapMultipleBuffers', DWORD, [UINT, POINTER(WGLSWAP)], None) + +class struct_tagRECT(Structure): + __slots__ = [ + 'left', + 'top', + 'right', + 'bottom', + ] +struct_tagRECT._fields_ = [ + ('left', LONG), + ('top', LONG), + ('right', LONG), + ('bottom', LONG), +] + +RECT = struct_tagRECT # C:\cygwin\home\Alex\pyglet\tools\wgl.h:200 +PRECT = POINTER(struct_tagRECT) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:200 +NPRECT = POINTER(struct_tagRECT) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:200 +LPRECT = POINTER(struct_tagRECT) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:200 + +__all__ = ['CONST', 'GLenum', 'GLboolean', 'GLbitfield', 'GLbyte', 'GLshort', +'GLint', 'GLsizei', 'GLubyte', 'GLushort', 'GLuint', 'GLfloat', 'GLclampf', +'GLdouble', 'GLclampd', 'GLvoid', 'INT8', 'PINT8', 'INT16', 'PINT16', 'INT32', +'PINT32', 'UINT8', 'PUINT8', 'UINT16', 'PUINT16', 'UINT32', 'PUINT32', +'LONG32', 'PLONG32', 'ULONG32', 'PULONG32', 'DWORD32', 'PDWORD32', 'INT64', +'PINT64', 'UINT64', 'PUINT64', 'VOID', 'LPVOID', 'LPCSTR', 'CHAR', 'BYTE', +'WORD', 'USHORT', 'UINT', 'INT', 'INT_PTR', 'BOOL', 'LONG', 'DWORD', 'FLOAT', +'COLORREF', 'LPCOLORREF', 'HANDLE', 'HGLRC', 'HDC', 'PROC', 'wglCopyContext', +'wglCreateContext', 'wglCreateLayerContext', 'wglDeleteContext', +'wglGetCurrentContext', 'wglGetCurrentDC', 'wglGetProcAddress', +'wglMakeCurrent', 'wglShareLists', 'wglUseFontBitmapsA', 'wglUseFontBitmapsW', +'SwapBuffers', 'POINTFLOAT', 'PPOINTFLOAT', 'GLYPHMETRICSFLOAT', +'PGLYPHMETRICSFLOAT', 'LPGLYPHMETRICSFLOAT', 'WGL_FONT_LINES', +'WGL_FONT_POLYGONS', 'wglUseFontOutlinesA', 'wglUseFontOutlinesW', +'LAYERPLANEDESCRIPTOR', 'PLAYERPLANEDESCRIPTOR', 'LPLAYERPLANEDESCRIPTOR', +'LPD_DOUBLEBUFFER', 'LPD_STEREO', 'LPD_SUPPORT_GDI', 'LPD_SUPPORT_OPENGL', +'LPD_SHARE_DEPTH', 'LPD_SHARE_STENCIL', 'LPD_SHARE_ACCUM', +'LPD_SWAP_EXCHANGE', 'LPD_SWAP_COPY', 'LPD_TRANSPARENT', 'LPD_TYPE_RGBA', +'LPD_TYPE_COLORINDEX', 'WGL_SWAP_MAIN_PLANE', 'WGL_SWAP_OVERLAY1', +'WGL_SWAP_OVERLAY2', 'WGL_SWAP_OVERLAY3', 'WGL_SWAP_OVERLAY4', +'WGL_SWAP_OVERLAY5', 'WGL_SWAP_OVERLAY6', 'WGL_SWAP_OVERLAY7', +'WGL_SWAP_OVERLAY8', 'WGL_SWAP_OVERLAY9', 'WGL_SWAP_OVERLAY10', +'WGL_SWAP_OVERLAY11', 'WGL_SWAP_OVERLAY12', 'WGL_SWAP_OVERLAY13', +'WGL_SWAP_OVERLAY14', 'WGL_SWAP_OVERLAY15', 'WGL_SWAP_UNDERLAY1', +'WGL_SWAP_UNDERLAY2', 'WGL_SWAP_UNDERLAY3', 'WGL_SWAP_UNDERLAY4', +'WGL_SWAP_UNDERLAY5', 'WGL_SWAP_UNDERLAY6', 'WGL_SWAP_UNDERLAY7', +'WGL_SWAP_UNDERLAY8', 'WGL_SWAP_UNDERLAY9', 'WGL_SWAP_UNDERLAY10', +'WGL_SWAP_UNDERLAY11', 'WGL_SWAP_UNDERLAY12', 'WGL_SWAP_UNDERLAY13', +'WGL_SWAP_UNDERLAY14', 'WGL_SWAP_UNDERLAY15', 'wglDescribeLayerPlane', +'wglSetLayerPaletteEntries', 'wglGetLayerPaletteEntries', +'wglRealizeLayerPalette', 'wglSwapLayerBuffers', 'WGLSWAP', 'PWGLSWAP', +'LPWGLSWAP', 'WGL_SWAPMULTIPLE_MAX', 'wglSwapMultipleBuffers', 'RECT', +'PRECT', 'NPRECT', 'LPRECT'] +# END GENERATED CONTENT (do not edit above this line) + diff --git a/pyglet/gl/wgl_info.py b/pyglet/gl/wgl_info.py new file mode 100644 index 0000000..6a0a2f9 --- /dev/null +++ b/pyglet/gl/wgl_info.py @@ -0,0 +1,71 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''Cached information about version and extensions of current WGL +implementation. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: glx_info.py 615 2007-02-07 13:17:05Z Alex.Holkner $' + +from ctypes import * +import warnings + +from pyglet.gl.lib import MissingFunctionException +from pyglet.gl.gl import * +from pyglet.gl import gl_info +from pyglet.gl.wgl import * +from pyglet.gl.wglext_arb import * + +class WGLInfoException(Exception): + pass + +class WGLInfo(object): + def get_extensions(self): + if not gl_info.have_context(): + warnings.warn("Can't query WGL until a context is created.") + return [] + + try: + return wglGetExtensionsStringEXT().split() + except MissingFunctionException: + return cast(glGetString(GL_EXTENSIONS), c_char_p).value.split() + + def have_extension(self, extension): + return extension in self.get_extensions() + +_wgl_info = WGLInfo() + +get_extensions = _wgl_info.get_extensions +have_extension = _wgl_info.have_extension diff --git a/pyglet/gl/wglext_arb.py b/pyglet/gl/wglext_arb.py new file mode 100644 index 0000000..b715ec8 --- /dev/null +++ b/pyglet/gl/wglext_arb.py @@ -0,0 +1,811 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +'''Wrapper for http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h + +Generated by tools/gengl.py. +Do not modify this file. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: gengl.py 601 2007-02-04 05:36:59Z Alex.Holkner $' + +from ctypes import * +from pyglet.gl.lib import link_WGL as _link_function +from pyglet.gl.lib import c_ptrdiff_t, c_void + + + +# BEGIN GENERATED CONTENT (do not edit below this line) + +# This content is generated by tools/gengl.py. +# Wrapper for http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h + + +# H (C:\cygwin\home\Alex\pyglet\tools\wgl.h:7) +# H (C:\cygwin\home\Alex\pyglet\tools\wgl.h:7) +WIN32_LEAN_AND_MEAN = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:40 +GLAPI = 0 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:51 +WGL_WGLEXT_VERSION = 6 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:59 +# ARB_buffer_region (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:61) +WGL_FRONT_COLOR_BUFFER_BIT_ARB = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:62 +WGL_BACK_COLOR_BUFFER_BIT_ARB = 2 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:63 +WGL_DEPTH_BUFFER_BIT_ARB = 4 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:64 +WGL_STENCIL_BUFFER_BIT_ARB = 8 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:65 +# ARB_multisample (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:68) +WGL_SAMPLE_BUFFERS_ARB = 8257 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:69 +WGL_SAMPLES_ARB = 8258 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:70 +# ARB_extensions_string (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:73) +# ARB_pixel_format (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:76) +WGL_NUMBER_PIXEL_FORMATS_ARB = 8192 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:77 +WGL_DRAW_TO_WINDOW_ARB = 8193 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:78 +WGL_DRAW_TO_BITMAP_ARB = 8194 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:79 +WGL_ACCELERATION_ARB = 8195 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:80 +WGL_NEED_PALETTE_ARB = 8196 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:81 +WGL_NEED_SYSTEM_PALETTE_ARB = 8197 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:82 +WGL_SWAP_LAYER_BUFFERS_ARB = 8198 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:83 +WGL_SWAP_METHOD_ARB = 8199 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:84 +WGL_NUMBER_OVERLAYS_ARB = 8200 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:85 +WGL_NUMBER_UNDERLAYS_ARB = 8201 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:86 +WGL_TRANSPARENT_ARB = 8202 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:87 +WGL_TRANSPARENT_RED_VALUE_ARB = 8247 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:88 +WGL_TRANSPARENT_GREEN_VALUE_ARB = 8248 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:89 +WGL_TRANSPARENT_BLUE_VALUE_ARB = 8249 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:90 +WGL_TRANSPARENT_ALPHA_VALUE_ARB = 8250 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:91 +WGL_TRANSPARENT_INDEX_VALUE_ARB = 8251 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:92 +WGL_SHARE_DEPTH_ARB = 8204 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:93 +WGL_SHARE_STENCIL_ARB = 8205 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:94 +WGL_SHARE_ACCUM_ARB = 512 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:95 +WGL_SUPPORT_GDI_ARB = 512 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:96 +WGL_SUPPORT_OPENGL_ARB = 8208 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:97 +WGL_DOUBLE_BUFFER_ARB = 8209 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:98 +WGL_STEREO_ARB = 8210 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:99 +WGL_PIXEL_TYPE_ARB = 8211 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:100 +WGL_COLOR_BITS_ARB = 8212 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:101 +WGL_RED_BITS_ARB = 8213 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:102 +WGL_RED_SHIFT_ARB = 8214 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:103 +WGL_GREEN_BITS_ARB = 8215 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:104 +WGL_GREEN_SHIFT_ARB = 8216 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:105 +WGL_BLUE_BITS_ARB = 8217 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:106 +WGL_BLUE_SHIFT_ARB = 8218 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:107 +WGL_ALPHA_BITS_ARB = 8219 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:108 +WGL_ALPHA_SHIFT_ARB = 8220 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:109 +WGL_ACCUM_BITS_ARB = 8221 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:110 +WGL_ACCUM_RED_BITS_ARB = 513 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:111 +WGL_ACCUM_GREEN_BITS_ARB = 513 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:112 +WGL_ACCUM_BLUE_BITS_ARB = 8224 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:113 +WGL_ACCUM_ALPHA_BITS_ARB = 8225 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:114 +WGL_DEPTH_BITS_ARB = 8226 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:115 +WGL_STENCIL_BITS_ARB = 8227 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:116 +WGL_AUX_BUFFERS_ARB = 8228 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:117 +WGL_NO_ACCELERATION_ARB = 8229 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:118 +WGL_GENERIC_ACCELERATION_ARB = 8230 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:119 +WGL_FULL_ACCELERATION_ARB = 8231 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:120 +WGL_SWAP_EXCHANGE_ARB = 8232 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:121 +WGL_SWAP_COPY_ARB = 8233 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:122 +WGL_SWAP_UNDEFINED_ARB = 8234 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:123 +WGL_TYPE_RGBA_ARB = 8235 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:124 +WGL_TYPE_COLORINDEX_ARB = 8236 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:125 +# ARB_make_current_read (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:128) +ERROR_INVALID_PIXEL_TYPE_ARB = 8259 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:129 +ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB = 8276 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:130 +# ARB_pbuffer (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:133) +WGL_DRAW_TO_PBUFFER_ARB = 8237 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:134 +WGL_MAX_PBUFFER_PIXELS_ARB = 514 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:135 +WGL_MAX_PBUFFER_WIDTH_ARB = 514 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:136 +WGL_MAX_PBUFFER_HEIGHT_ARB = 8240 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:137 +WGL_PBUFFER_LARGEST_ARB = 8243 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:138 +WGL_PBUFFER_WIDTH_ARB = 8244 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:139 +WGL_PBUFFER_HEIGHT_ARB = 8245 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:140 +WGL_PBUFFER_LOST_ARB = 8246 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:141 +# ARB_render_texture (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:144) +WGL_BIND_TO_TEXTURE_RGB_ARB = 8304 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:145 +WGL_BIND_TO_TEXTURE_RGBA_ARB = 8305 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:146 +WGL_TEXTURE_FORMAT_ARB = 8306 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:147 +WGL_TEXTURE_TARGET_ARB = 8307 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:148 +WGL_MIPMAP_TEXTURE_ARB = 8308 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:149 +WGL_TEXTURE_RGB_ARB = 8309 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:150 +WGL_TEXTURE_RGBA_ARB = 8310 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:151 +WGL_NO_TEXTURE_ARB = 8311 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:152 +WGL_TEXTURE_CUBE_MAP_ARB = 8312 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:153 +WGL_TEXTURE_1D_ARB = 8313 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:154 +WGL_TEXTURE_2D_ARB = 8314 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:155 +WGL_MIPMAP_LEVEL_ARB = 8315 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:156 +WGL_CUBE_MAP_FACE_ARB = 8316 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:157 +WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB = 8317 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:158 +WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB = 519 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:159 +WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB = 519 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:160 +WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB = 8320 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:161 +WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB = 8321 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:162 +WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB = 8322 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:163 +WGL_FRONT_LEFT_ARB = 8323 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:164 +WGL_FRONT_RIGHT_ARB = 8324 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:165 +WGL_BACK_LEFT_ARB = 8325 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:166 +WGL_BACK_RIGHT_ARB = 8326 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:167 +WGL_AUX0_ARB = 8327 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:168 +WGL_AUX1_ARB = 8328 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:169 +WGL_AUX2_ARB = 8329 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:170 +WGL_AUX3_ARB = 8330 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:171 +WGL_AUX4_ARB = 8331 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:172 +WGL_AUX5_ARB = 8332 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:173 +WGL_AUX6_ARB = 8333 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:174 +WGL_AUX7_ARB = 520 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:175 +WGL_AUX8_ARB = 520 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:176 +WGL_AUX9_ARB = 8336 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:177 +# ARB_pixel_format_float (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:180) +WGL_TYPE_RGBA_FLOAT_ARB = 8608 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:181 +# EXT_make_current_read (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:184) +ERROR_INVALID_PIXEL_TYPE_EXT = 8259 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:185 +# EXT_pixel_format (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:188) +WGL_NUMBER_PIXEL_FORMATS_EXT = 8192 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:189 +WGL_DRAW_TO_WINDOW_EXT = 8193 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:190 +WGL_DRAW_TO_BITMAP_EXT = 8194 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:191 +WGL_ACCELERATION_EXT = 8195 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:192 +WGL_NEED_PALETTE_EXT = 8196 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:193 +WGL_NEED_SYSTEM_PALETTE_EXT = 8197 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:194 +WGL_SWAP_LAYER_BUFFERS_EXT = 8198 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:195 +WGL_SWAP_METHOD_EXT = 8199 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:196 +WGL_NUMBER_OVERLAYS_EXT = 8200 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:197 +WGL_NUMBER_UNDERLAYS_EXT = 8201 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:198 +WGL_TRANSPARENT_EXT = 8202 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:199 +WGL_TRANSPARENT_VALUE_EXT = 8203 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:200 +WGL_SHARE_DEPTH_EXT = 8204 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:201 +WGL_SHARE_STENCIL_EXT = 8205 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:202 +WGL_SHARE_ACCUM_EXT = 512 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:203 +WGL_SUPPORT_GDI_EXT = 512 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:204 +WGL_SUPPORT_OPENGL_EXT = 8208 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:205 +WGL_DOUBLE_BUFFER_EXT = 8209 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:206 +WGL_STEREO_EXT = 8210 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:207 +WGL_PIXEL_TYPE_EXT = 8211 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:208 +WGL_COLOR_BITS_EXT = 8212 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:209 +WGL_RED_BITS_EXT = 8213 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:210 +WGL_RED_SHIFT_EXT = 8214 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:211 +WGL_GREEN_BITS_EXT = 8215 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:212 +WGL_GREEN_SHIFT_EXT = 8216 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:213 +WGL_BLUE_BITS_EXT = 8217 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:214 +WGL_BLUE_SHIFT_EXT = 8218 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:215 +WGL_ALPHA_BITS_EXT = 8219 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:216 +WGL_ALPHA_SHIFT_EXT = 8220 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:217 +WGL_ACCUM_BITS_EXT = 8221 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:218 +WGL_ACCUM_RED_BITS_EXT = 513 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:219 +WGL_ACCUM_GREEN_BITS_EXT = 513 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:220 +WGL_ACCUM_BLUE_BITS_EXT = 8224 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:221 +WGL_ACCUM_ALPHA_BITS_EXT = 8225 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:222 +WGL_DEPTH_BITS_EXT = 8226 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:223 +WGL_STENCIL_BITS_EXT = 8227 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:224 +WGL_AUX_BUFFERS_EXT = 8228 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:225 +WGL_NO_ACCELERATION_EXT = 8229 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:226 +WGL_GENERIC_ACCELERATION_EXT = 8230 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:227 +WGL_FULL_ACCELERATION_EXT = 8231 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:228 +WGL_SWAP_EXCHANGE_EXT = 8232 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:229 +WGL_SWAP_COPY_EXT = 8233 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:230 +WGL_SWAP_UNDEFINED_EXT = 8234 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:231 +WGL_TYPE_RGBA_EXT = 8235 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:232 +WGL_TYPE_COLORINDEX_EXT = 8236 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:233 +# EXT_pbuffer (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:236) +WGL_DRAW_TO_PBUFFER_EXT = 8237 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:237 +WGL_MAX_PBUFFER_PIXELS_EXT = 514 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:238 +WGL_MAX_PBUFFER_WIDTH_EXT = 514 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:239 +WGL_MAX_PBUFFER_HEIGHT_EXT = 8240 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:240 +WGL_OPTIMAL_PBUFFER_WIDTH_EXT = 8241 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:241 +WGL_OPTIMAL_PBUFFER_HEIGHT_EXT = 8242 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:242 +WGL_PBUFFER_LARGEST_EXT = 8243 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:243 +WGL_PBUFFER_WIDTH_EXT = 8244 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:244 +WGL_PBUFFER_HEIGHT_EXT = 8245 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:245 +# EXT_depth_float (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:248) +WGL_DEPTH_FLOAT_EXT = 8256 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:249 +# 3DFX_multisample (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:252) +WGL_SAMPLE_BUFFERS_3DFX = 8288 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:253 +WGL_SAMPLES_3DFX = 8289 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:254 +# EXT_multisample (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:257) +WGL_SAMPLE_BUFFERS_EXT = 8257 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:258 +WGL_SAMPLES_EXT = 8258 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:259 +# I3D_digital_video_control (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:262) +WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D = 8272 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:263 +WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D = 8273 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:264 +WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D = 8274 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:265 +WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D = 8275 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:266 +# I3D_gamma (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:269) +WGL_GAMMA_TABLE_SIZE_I3D = 516 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:270 +WGL_GAMMA_EXCLUDE_DESKTOP_I3D = 516 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:271 +# I3D_genlock (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:274) +WGL_GENLOCK_SOURCE_MULTIVIEW_I3D = 8260 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:275 +WGL_GENLOCK_SOURCE_EXTENAL_SYNC_I3D = 8261 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:276 +WGL_GENLOCK_SOURCE_EXTENAL_FIELD_I3D = 8262 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:277 +WGL_GENLOCK_SOURCE_EXTENAL_TTL_I3D = 8263 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:278 +WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D = 8264 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:279 +WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D = 8265 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:280 +WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D = 8266 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:281 +WGL_GENLOCK_SOURCE_EDGE_RISING_I3D = 8267 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:282 +WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D = 8268 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:283 +# I3D_image_buffer (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:286) +WGL_IMAGE_BUFFER_MIN_ACCESS_I3D = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:287 +WGL_IMAGE_BUFFER_LOCK_I3D = 2 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:288 +# I3D_swap_frame_lock (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:291) +# NV_render_depth_texture (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:294) +WGL_BIND_TO_TEXTURE_DEPTH_NV = 8355 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:295 +WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV = 8356 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:296 +WGL_DEPTH_TEXTURE_FORMAT_NV = 8357 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:297 +WGL_TEXTURE_DEPTH_COMPONENT_NV = 8358 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:298 +WGL_DEPTH_COMPONENT_NV = 8359 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:299 +# NV_render_texture_rectangle (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:302) +WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV = 8352 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:303 +WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV = 8353 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:304 +WGL_TEXTURE_RECTANGLE_NV = 8354 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:305 +# ATI_pixel_format_float (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:308) +WGL_TYPE_RGBA_FLOAT_ATI = 8608 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:309 +# NV_float_buffer (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:312) +WGL_FLOAT_COMPONENTS_NV = 8368 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:313 +WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV = 8369 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:314 +WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV = 8370 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:315 +WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV = 8371 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:316 +WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV = 8372 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:317 +WGL_TEXTURE_FLOAT_R_NV = 8373 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:318 +WGL_TEXTURE_FLOAT_RG_NV = 8374 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:319 +WGL_TEXTURE_FLOAT_RGB_NV = 8375 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:320 +WGL_TEXTURE_FLOAT_RGBA_NV = 8376 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:321 +# ARB_pbuffer (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:327) +HANDLE = POINTER(None) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:58 +HPBUFFERARB = HANDLE # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:328 +# EXT_pbuffer (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:330) +HPBUFFEREXT = HANDLE # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:331 +# ARB_buffer_region (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:334) +WGL_ARB_buffer_region = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:335 +HDC = HANDLE # C:\cygwin\home\Alex\pyglet\tools\wgl.h:61 +UINT = c_uint # C:\cygwin\home\Alex\pyglet\tools\wgl.h:50 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:337 +wglCreateBufferRegionARB = _link_function('wglCreateBufferRegionARB', HANDLE, [HDC, c_int, UINT], 'ARB_buffer_region') + +VOID = None # C:\cygwin\home\Alex\pyglet\tools\wgl.h:45 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:338 +wglDeleteBufferRegionARB = _link_function('wglDeleteBufferRegionARB', VOID, [HANDLE], 'ARB_buffer_region') + +BOOL = c_long # C:\cygwin\home\Alex\pyglet\tools\wgl.h:52 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:339 +wglSaveBufferRegionARB = _link_function('wglSaveBufferRegionARB', BOOL, [HANDLE, c_int, c_int, c_int, c_int], 'ARB_buffer_region') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:340 +wglRestoreBufferRegionARB = _link_function('wglRestoreBufferRegionARB', BOOL, [HANDLE, c_int, c_int, c_int, c_int, c_int, c_int], 'ARB_buffer_region') + +PFNWGLCREATEBUFFERREGIONARBPROC = CFUNCTYPE(HANDLE, HDC, c_int, UINT) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:342 +PFNWGLDELETEBUFFERREGIONARBPROC = CFUNCTYPE(VOID, HANDLE) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:343 +PFNWGLSAVEBUFFERREGIONARBPROC = CFUNCTYPE(BOOL, HANDLE, c_int, c_int, c_int, c_int) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:344 +PFNWGLRESTOREBUFFERREGIONARBPROC = CFUNCTYPE(BOOL, HANDLE, c_int, c_int, c_int, c_int, c_int, c_int) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:345 +# ARB_multisample (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:348) +WGL_ARB_multisample = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:349 +# ARB_extensions_string (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:352) +WGL_ARB_extensions_string = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:353 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:355 +wglGetExtensionsStringARB = _link_function('wglGetExtensionsStringARB', c_char_p, [HDC], 'ARB_extensions_string') + +PFNWGLGETEXTENSIONSSTRINGARBPROC = CFUNCTYPE(c_char_p, HDC) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:357 +# ARB_pixel_format (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:360) +WGL_ARB_pixel_format = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:361 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:363 +wglGetPixelFormatAttribivARB = _link_function('wglGetPixelFormatAttribivARB', BOOL, [HDC, c_int, c_int, UINT, POINTER(c_int), POINTER(c_int)], 'ARB_pixel_format') + +FLOAT = c_float # C:\cygwin\home\Alex\pyglet\tools\wgl.h:55 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:364 +wglGetPixelFormatAttribfvARB = _link_function('wglGetPixelFormatAttribfvARB', BOOL, [HDC, c_int, c_int, UINT, POINTER(c_int), POINTER(FLOAT)], 'ARB_pixel_format') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:365 +wglChoosePixelFormatARB = _link_function('wglChoosePixelFormatARB', BOOL, [HDC, POINTER(c_int), POINTER(FLOAT), UINT, POINTER(c_int), POINTER(UINT)], 'ARB_pixel_format') + +PFNWGLGETPIXELFORMATATTRIBIVARBPROC = CFUNCTYPE(BOOL, HDC, c_int, c_int, UINT, POINTER(c_int), POINTER(c_int)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:367 +PFNWGLGETPIXELFORMATATTRIBFVARBPROC = CFUNCTYPE(BOOL, HDC, c_int, c_int, UINT, POINTER(c_int), POINTER(FLOAT)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:368 +PFNWGLCHOOSEPIXELFORMATARBPROC = CFUNCTYPE(BOOL, HDC, POINTER(c_int), POINTER(FLOAT), UINT, POINTER(c_int), POINTER(UINT)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:369 +# ARB_make_current_read (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:372) +WGL_ARB_make_current_read = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:373 +HGLRC = HANDLE # C:\cygwin\home\Alex\pyglet\tools\wgl.h:60 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:375 +wglMakeContextCurrentARB = _link_function('wglMakeContextCurrentARB', BOOL, [HDC, HDC, HGLRC], 'ARB_make_current_read') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:376 +wglGetCurrentReadDCARB = _link_function('wglGetCurrentReadDCARB', HDC, [], 'ARB_make_current_read') + +PFNWGLMAKECONTEXTCURRENTARBPROC = CFUNCTYPE(BOOL, HDC, HDC, HGLRC) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:378 +PFNWGLGETCURRENTREADDCARBPROC = CFUNCTYPE(HDC) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:379 +# ARB_pbuffer (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:382) +WGL_ARB_pbuffer = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:383 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:385 +wglCreatePbufferARB = _link_function('wglCreatePbufferARB', HPBUFFERARB, [HDC, c_int, c_int, c_int, POINTER(c_int)], 'ARB_pbuffer') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:386 +wglGetPbufferDCARB = _link_function('wglGetPbufferDCARB', HDC, [HPBUFFERARB], 'ARB_pbuffer') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:387 +wglReleasePbufferDCARB = _link_function('wglReleasePbufferDCARB', c_int, [HPBUFFERARB, HDC], 'ARB_pbuffer') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:388 +wglDestroyPbufferARB = _link_function('wglDestroyPbufferARB', BOOL, [HPBUFFERARB], 'ARB_pbuffer') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:389 +wglQueryPbufferARB = _link_function('wglQueryPbufferARB', BOOL, [HPBUFFERARB, c_int, POINTER(c_int)], 'ARB_pbuffer') + +PFNWGLCREATEPBUFFERARBPROC = CFUNCTYPE(HPBUFFERARB, HDC, c_int, c_int, c_int, POINTER(c_int)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:391 +PFNWGLGETPBUFFERDCARBPROC = CFUNCTYPE(HDC, HPBUFFERARB) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:392 +PFNWGLRELEASEPBUFFERDCARBPROC = CFUNCTYPE(c_int, HPBUFFERARB, HDC) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:393 +PFNWGLDESTROYPBUFFERARBPROC = CFUNCTYPE(BOOL, HPBUFFERARB) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:394 +PFNWGLQUERYPBUFFERARBPROC = CFUNCTYPE(BOOL, HPBUFFERARB, c_int, POINTER(c_int)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:395 +# ARB_render_texture (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:398) +WGL_ARB_render_texture = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:399 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:401 +wglBindTexImageARB = _link_function('wglBindTexImageARB', BOOL, [HPBUFFERARB, c_int], 'ARB_render_texture') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:402 +wglReleaseTexImageARB = _link_function('wglReleaseTexImageARB', BOOL, [HPBUFFERARB, c_int], 'ARB_render_texture') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:403 +wglSetPbufferAttribARB = _link_function('wglSetPbufferAttribARB', BOOL, [HPBUFFERARB, POINTER(c_int)], 'ARB_render_texture') + +PFNWGLBINDTEXIMAGEARBPROC = CFUNCTYPE(BOOL, HPBUFFERARB, c_int) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:405 +PFNWGLRELEASETEXIMAGEARBPROC = CFUNCTYPE(BOOL, HPBUFFERARB, c_int) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:406 +PFNWGLSETPBUFFERATTRIBARBPROC = CFUNCTYPE(BOOL, HPBUFFERARB, POINTER(c_int)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:407 +# ARB_pixel_format_float (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:410) +WGL_ARB_pixel_format_float = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:411 +# EXT_display_color_table (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:414) +WGL_EXT_display_color_table = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:415 +GLboolean = c_ubyte # C:\cygwin\home\Alex\pyglet\tools\wgl.h:18 +GLushort = c_ushort # C:\cygwin\home\Alex\pyglet\tools\wgl.h:25 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:417 +wglCreateDisplayColorTableEXT = _link_function('wglCreateDisplayColorTableEXT', GLboolean, [GLushort], 'EXT_display_color_table') + +GLuint = c_uint # C:\cygwin\home\Alex\pyglet\tools\wgl.h:26 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:418 +wglLoadDisplayColorTableEXT = _link_function('wglLoadDisplayColorTableEXT', GLboolean, [POINTER(GLushort), GLuint], 'EXT_display_color_table') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:419 +wglBindDisplayColorTableEXT = _link_function('wglBindDisplayColorTableEXT', GLboolean, [GLushort], 'EXT_display_color_table') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:420 +wglDestroyDisplayColorTableEXT = _link_function('wglDestroyDisplayColorTableEXT', VOID, [GLushort], 'EXT_display_color_table') + +PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC = CFUNCTYPE(GLboolean, GLushort) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:422 +PFNWGLLOADDISPLAYCOLORTABLEEXTPROC = CFUNCTYPE(GLboolean, POINTER(GLushort), GLuint) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:423 +PFNWGLBINDDISPLAYCOLORTABLEEXTPROC = CFUNCTYPE(GLboolean, GLushort) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:424 +PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC = CFUNCTYPE(VOID, GLushort) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:425 +# EXT_extensions_string (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:428) +WGL_EXT_extensions_string = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:429 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:431 +wglGetExtensionsStringEXT = _link_function('wglGetExtensionsStringEXT', c_char_p, [], 'EXT_extensions_string') + +PFNWGLGETEXTENSIONSSTRINGEXTPROC = CFUNCTYPE(c_char_p) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:433 +# EXT_make_current_read (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:436) +WGL_EXT_make_current_read = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:437 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:439 +wglMakeContextCurrentEXT = _link_function('wglMakeContextCurrentEXT', BOOL, [HDC, HDC, HGLRC], 'EXT_make_current_read') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:440 +wglGetCurrentReadDCEXT = _link_function('wglGetCurrentReadDCEXT', HDC, [], 'EXT_make_current_read') + +PFNWGLMAKECONTEXTCURRENTEXTPROC = CFUNCTYPE(BOOL, HDC, HDC, HGLRC) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:442 +PFNWGLGETCURRENTREADDCEXTPROC = CFUNCTYPE(HDC) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:443 +# EXT_pbuffer (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:446) +WGL_EXT_pbuffer = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:447 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:449 +wglCreatePbufferEXT = _link_function('wglCreatePbufferEXT', HPBUFFEREXT, [HDC, c_int, c_int, c_int, POINTER(c_int)], 'EXT_pbuffer') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:450 +wglGetPbufferDCEXT = _link_function('wglGetPbufferDCEXT', HDC, [HPBUFFEREXT], 'EXT_pbuffer') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:451 +wglReleasePbufferDCEXT = _link_function('wglReleasePbufferDCEXT', c_int, [HPBUFFEREXT, HDC], 'EXT_pbuffer') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:452 +wglDestroyPbufferEXT = _link_function('wglDestroyPbufferEXT', BOOL, [HPBUFFEREXT], 'EXT_pbuffer') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:453 +wglQueryPbufferEXT = _link_function('wglQueryPbufferEXT', BOOL, [HPBUFFEREXT, c_int, POINTER(c_int)], 'EXT_pbuffer') + +PFNWGLCREATEPBUFFEREXTPROC = CFUNCTYPE(HPBUFFEREXT, HDC, c_int, c_int, c_int, POINTER(c_int)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:455 +PFNWGLGETPBUFFERDCEXTPROC = CFUNCTYPE(HDC, HPBUFFEREXT) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:456 +PFNWGLRELEASEPBUFFERDCEXTPROC = CFUNCTYPE(c_int, HPBUFFEREXT, HDC) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:457 +PFNWGLDESTROYPBUFFEREXTPROC = CFUNCTYPE(BOOL, HPBUFFEREXT) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:458 +PFNWGLQUERYPBUFFEREXTPROC = CFUNCTYPE(BOOL, HPBUFFEREXT, c_int, POINTER(c_int)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:459 +# EXT_pixel_format (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:462) +WGL_EXT_pixel_format = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:463 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:465 +wglGetPixelFormatAttribivEXT = _link_function('wglGetPixelFormatAttribivEXT', BOOL, [HDC, c_int, c_int, UINT, POINTER(c_int), POINTER(c_int)], 'EXT_pixel_format') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:466 +wglGetPixelFormatAttribfvEXT = _link_function('wglGetPixelFormatAttribfvEXT', BOOL, [HDC, c_int, c_int, UINT, POINTER(c_int), POINTER(FLOAT)], 'EXT_pixel_format') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:467 +wglChoosePixelFormatEXT = _link_function('wglChoosePixelFormatEXT', BOOL, [HDC, POINTER(c_int), POINTER(FLOAT), UINT, POINTER(c_int), POINTER(UINT)], 'EXT_pixel_format') + +PFNWGLGETPIXELFORMATATTRIBIVEXTPROC = CFUNCTYPE(BOOL, HDC, c_int, c_int, UINT, POINTER(c_int), POINTER(c_int)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:469 +PFNWGLGETPIXELFORMATATTRIBFVEXTPROC = CFUNCTYPE(BOOL, HDC, c_int, c_int, UINT, POINTER(c_int), POINTER(FLOAT)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:470 +PFNWGLCHOOSEPIXELFORMATEXTPROC = CFUNCTYPE(BOOL, HDC, POINTER(c_int), POINTER(FLOAT), UINT, POINTER(c_int), POINTER(UINT)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:471 +# EXT_swap_control (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:474) +WGL_EXT_swap_control = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:475 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:477 +wglSwapIntervalEXT = _link_function('wglSwapIntervalEXT', BOOL, [c_int], 'EXT_swap_control') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:478 +wglGetSwapIntervalEXT = _link_function('wglGetSwapIntervalEXT', c_int, [], 'EXT_swap_control') + +PFNWGLSWAPINTERVALEXTPROC = CFUNCTYPE(BOOL, c_int) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:480 +PFNWGLGETSWAPINTERVALEXTPROC = CFUNCTYPE(c_int) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:481 +# EXT_depth_float (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:484) +WGL_EXT_depth_float = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:485 +# NV_vertex_array_range (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:488) +WGL_NV_vertex_array_range = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:489 +GLsizei = c_int # C:\cygwin\home\Alex\pyglet\tools\wgl.h:23 +GLfloat = c_float # C:\cygwin\home\Alex\pyglet\tools\wgl.h:27 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:491 +wglAllocateMemoryNV = _link_function('wglAllocateMemoryNV', POINTER(c_void), [GLsizei, GLfloat, GLfloat, GLfloat], 'NV_vertex_array_range') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:492 +wglFreeMemoryNV = _link_function('wglFreeMemoryNV', None, [POINTER(None)], 'NV_vertex_array_range') + +PFNWGLALLOCATEMEMORYNVPROC = CFUNCTYPE(POINTER(c_void), GLsizei, GLfloat, GLfloat, GLfloat) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:494 +PFNWGLFREEMEMORYNVPROC = CFUNCTYPE(None, POINTER(None)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:495 +# 3DFX_multisample (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:498) +WGL_3DFX_multisample = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:499 +# EXT_multisample (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:502) +WGL_EXT_multisample = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:503 +# OML_sync_control (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:506) +WGL_OML_sync_control = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:507 +INT64 = c_longlong # C:\cygwin\home\Alex\pyglet\tools\wgl.h:42 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:509 +wglGetSyncValuesOML = _link_function('wglGetSyncValuesOML', BOOL, [HDC, POINTER(INT64), POINTER(INT64), POINTER(INT64)], 'OML_sync_control') + +INT32 = c_int # C:\cygwin\home\Alex\pyglet\tools\wgl.h:35 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:510 +wglGetMscRateOML = _link_function('wglGetMscRateOML', BOOL, [HDC, POINTER(INT32), POINTER(INT32)], 'OML_sync_control') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:511 +wglSwapBuffersMscOML = _link_function('wglSwapBuffersMscOML', INT64, [HDC, INT64, INT64, INT64], 'OML_sync_control') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:512 +wglSwapLayerBuffersMscOML = _link_function('wglSwapLayerBuffersMscOML', INT64, [HDC, c_int, INT64, INT64, INT64], 'OML_sync_control') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:513 +wglWaitForMscOML = _link_function('wglWaitForMscOML', BOOL, [HDC, INT64, INT64, INT64, POINTER(INT64), POINTER(INT64), POINTER(INT64)], 'OML_sync_control') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:514 +wglWaitForSbcOML = _link_function('wglWaitForSbcOML', BOOL, [HDC, INT64, POINTER(INT64), POINTER(INT64), POINTER(INT64)], 'OML_sync_control') + +PFNWGLGETSYNCVALUESOMLPROC = CFUNCTYPE(BOOL, HDC, POINTER(INT64), POINTER(INT64), POINTER(INT64)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:516 +PFNWGLGETMSCRATEOMLPROC = CFUNCTYPE(BOOL, HDC, POINTER(INT32), POINTER(INT32)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:517 +PFNWGLSWAPBUFFERSMSCOMLPROC = CFUNCTYPE(INT64, HDC, INT64, INT64, INT64) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:518 +PFNWGLSWAPLAYERBUFFERSMSCOMLPROC = CFUNCTYPE(INT64, HDC, c_int, INT64, INT64, INT64) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:519 +PFNWGLWAITFORMSCOMLPROC = CFUNCTYPE(BOOL, HDC, INT64, INT64, INT64, POINTER(INT64), POINTER(INT64), POINTER(INT64)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:520 +PFNWGLWAITFORSBCOMLPROC = CFUNCTYPE(BOOL, HDC, INT64, POINTER(INT64), POINTER(INT64), POINTER(INT64)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:521 +# I3D_digital_video_control (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:524) +WGL_I3D_digital_video_control = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:525 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:527 +wglGetDigitalVideoParametersI3D = _link_function('wglGetDigitalVideoParametersI3D', BOOL, [HDC, c_int, POINTER(c_int)], 'I3D_digital_video_control') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:528 +wglSetDigitalVideoParametersI3D = _link_function('wglSetDigitalVideoParametersI3D', BOOL, [HDC, c_int, POINTER(c_int)], 'I3D_digital_video_control') + +PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC = CFUNCTYPE(BOOL, HDC, c_int, POINTER(c_int)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:530 +PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC = CFUNCTYPE(BOOL, HDC, c_int, POINTER(c_int)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:531 +# I3D_gamma (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:534) +WGL_I3D_gamma = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:535 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:537 +wglGetGammaTableParametersI3D = _link_function('wglGetGammaTableParametersI3D', BOOL, [HDC, c_int, POINTER(c_int)], 'I3D_gamma') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:538 +wglSetGammaTableParametersI3D = _link_function('wglSetGammaTableParametersI3D', BOOL, [HDC, c_int, POINTER(c_int)], 'I3D_gamma') + +USHORT = c_ushort # C:\cygwin\home\Alex\pyglet\tools\wgl.h:49 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:539 +wglGetGammaTableI3D = _link_function('wglGetGammaTableI3D', BOOL, [HDC, c_int, POINTER(USHORT), POINTER(USHORT), POINTER(USHORT)], 'I3D_gamma') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:540 +wglSetGammaTableI3D = _link_function('wglSetGammaTableI3D', BOOL, [HDC, c_int, POINTER(USHORT), POINTER(USHORT), POINTER(USHORT)], 'I3D_gamma') + +PFNWGLGETGAMMATABLEPARAMETERSI3DPROC = CFUNCTYPE(BOOL, HDC, c_int, POINTER(c_int)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:542 +PFNWGLSETGAMMATABLEPARAMETERSI3DPROC = CFUNCTYPE(BOOL, HDC, c_int, POINTER(c_int)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:543 +PFNWGLGETGAMMATABLEI3DPROC = CFUNCTYPE(BOOL, HDC, c_int, POINTER(USHORT), POINTER(USHORT), POINTER(USHORT)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:544 +PFNWGLSETGAMMATABLEI3DPROC = CFUNCTYPE(BOOL, HDC, c_int, POINTER(USHORT), POINTER(USHORT), POINTER(USHORT)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:545 +# I3D_genlock (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:548) +WGL_I3D_genlock = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:549 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:551 +wglEnableGenlockI3D = _link_function('wglEnableGenlockI3D', BOOL, [HDC], 'I3D_genlock') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:552 +wglDisableGenlockI3D = _link_function('wglDisableGenlockI3D', BOOL, [HDC], 'I3D_genlock') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:553 +wglIsEnabledGenlockI3D = _link_function('wglIsEnabledGenlockI3D', BOOL, [HDC, POINTER(BOOL)], 'I3D_genlock') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:554 +wglGenlockSourceI3D = _link_function('wglGenlockSourceI3D', BOOL, [HDC, UINT], 'I3D_genlock') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:555 +wglGetGenlockSourceI3D = _link_function('wglGetGenlockSourceI3D', BOOL, [HDC, POINTER(UINT)], 'I3D_genlock') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:556 +wglGenlockSourceEdgeI3D = _link_function('wglGenlockSourceEdgeI3D', BOOL, [HDC, UINT], 'I3D_genlock') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:557 +wglGetGenlockSourceEdgeI3D = _link_function('wglGetGenlockSourceEdgeI3D', BOOL, [HDC, POINTER(UINT)], 'I3D_genlock') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:558 +wglGenlockSampleRateI3D = _link_function('wglGenlockSampleRateI3D', BOOL, [HDC, UINT], 'I3D_genlock') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:559 +wglGetGenlockSampleRateI3D = _link_function('wglGetGenlockSampleRateI3D', BOOL, [HDC, POINTER(UINT)], 'I3D_genlock') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:560 +wglGenlockSourceDelayI3D = _link_function('wglGenlockSourceDelayI3D', BOOL, [HDC, UINT], 'I3D_genlock') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:561 +wglGetGenlockSourceDelayI3D = _link_function('wglGetGenlockSourceDelayI3D', BOOL, [HDC, POINTER(UINT)], 'I3D_genlock') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:562 +wglQueryGenlockMaxSourceDelayI3D = _link_function('wglQueryGenlockMaxSourceDelayI3D', BOOL, [HDC, POINTER(UINT), POINTER(UINT)], 'I3D_genlock') + +PFNWGLENABLEGENLOCKI3DPROC = CFUNCTYPE(BOOL, HDC) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:564 +PFNWGLDISABLEGENLOCKI3DPROC = CFUNCTYPE(BOOL, HDC) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:565 +PFNWGLISENABLEDGENLOCKI3DPROC = CFUNCTYPE(BOOL, HDC, POINTER(BOOL)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:566 +PFNWGLGENLOCKSOURCEI3DPROC = CFUNCTYPE(BOOL, HDC, UINT) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:567 +PFNWGLGETGENLOCKSOURCEI3DPROC = CFUNCTYPE(BOOL, HDC, POINTER(UINT)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:568 +PFNWGLGENLOCKSOURCEEDGEI3DPROC = CFUNCTYPE(BOOL, HDC, UINT) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:569 +PFNWGLGETGENLOCKSOURCEEDGEI3DPROC = CFUNCTYPE(BOOL, HDC, POINTER(UINT)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:570 +PFNWGLGENLOCKSAMPLERATEI3DPROC = CFUNCTYPE(BOOL, HDC, UINT) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:571 +PFNWGLGETGENLOCKSAMPLERATEI3DPROC = CFUNCTYPE(BOOL, HDC, POINTER(UINT)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:572 +PFNWGLGENLOCKSOURCEDELAYI3DPROC = CFUNCTYPE(BOOL, HDC, UINT) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:573 +PFNWGLGETGENLOCKSOURCEDELAYI3DPROC = CFUNCTYPE(BOOL, HDC, POINTER(UINT)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:574 +PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC = CFUNCTYPE(BOOL, HDC, POINTER(UINT), POINTER(UINT)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:575 +# I3D_image_buffer (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:578) +WGL_I3D_image_buffer = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:579 +LPVOID = POINTER(None) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:45 +DWORD = c_ulong # C:\cygwin\home\Alex\pyglet\tools\wgl.h:54 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:581 +wglCreateImageBufferI3D = _link_function('wglCreateImageBufferI3D', LPVOID, [HDC, DWORD, UINT], 'I3D_image_buffer') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:582 +wglDestroyImageBufferI3D = _link_function('wglDestroyImageBufferI3D', BOOL, [HDC, LPVOID], 'I3D_image_buffer') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:583 +wglAssociateImageBufferEventsI3D = _link_function('wglAssociateImageBufferEventsI3D', BOOL, [HDC, POINTER(HANDLE), POINTER(LPVOID), POINTER(DWORD), UINT], 'I3D_image_buffer') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:584 +wglReleaseImageBufferEventsI3D = _link_function('wglReleaseImageBufferEventsI3D', BOOL, [HDC, POINTER(LPVOID), UINT], 'I3D_image_buffer') + +PFNWGLCREATEIMAGEBUFFERI3DPROC = CFUNCTYPE(LPVOID, HDC, DWORD, UINT) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:586 +PFNWGLDESTROYIMAGEBUFFERI3DPROC = CFUNCTYPE(BOOL, HDC, LPVOID) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:587 +PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC = CFUNCTYPE(BOOL, HDC, POINTER(HANDLE), POINTER(LPVOID), POINTER(DWORD), UINT) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:588 +PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC = CFUNCTYPE(BOOL, HDC, POINTER(LPVOID), UINT) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:589 +# I3D_swap_frame_lock (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:592) +WGL_I3D_swap_frame_lock = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:593 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:595 +wglEnableFrameLockI3D = _link_function('wglEnableFrameLockI3D', BOOL, [], 'I3D_swap_frame_lock') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:596 +wglDisableFrameLockI3D = _link_function('wglDisableFrameLockI3D', BOOL, [], 'I3D_swap_frame_lock') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:597 +wglIsEnabledFrameLockI3D = _link_function('wglIsEnabledFrameLockI3D', BOOL, [POINTER(BOOL)], 'I3D_swap_frame_lock') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:598 +wglQueryFrameLockMasterI3D = _link_function('wglQueryFrameLockMasterI3D', BOOL, [POINTER(BOOL)], 'I3D_swap_frame_lock') + +PFNWGLENABLEFRAMELOCKI3DPROC = CFUNCTYPE(BOOL) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:600 +PFNWGLDISABLEFRAMELOCKI3DPROC = CFUNCTYPE(BOOL) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:601 +PFNWGLISENABLEDFRAMELOCKI3DPROC = CFUNCTYPE(BOOL, POINTER(BOOL)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:602 +PFNWGLQUERYFRAMELOCKMASTERI3DPROC = CFUNCTYPE(BOOL, POINTER(BOOL)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:603 +# I3D_swap_frame_usage (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:606) +WGL_I3D_swap_frame_usage = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:607 +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:609 +wglGetFrameUsageI3D = _link_function('wglGetFrameUsageI3D', BOOL, [POINTER(c_float)], 'I3D_swap_frame_usage') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:610 +wglBeginFrameTrackingI3D = _link_function('wglBeginFrameTrackingI3D', BOOL, [], 'I3D_swap_frame_usage') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:611 +wglEndFrameTrackingI3D = _link_function('wglEndFrameTrackingI3D', BOOL, [], 'I3D_swap_frame_usage') + +# http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:612 +wglQueryFrameTrackingI3D = _link_function('wglQueryFrameTrackingI3D', BOOL, [POINTER(DWORD), POINTER(DWORD), POINTER(c_float)], 'I3D_swap_frame_usage') + +PFNWGLGETFRAMEUSAGEI3DPROC = CFUNCTYPE(BOOL, POINTER(c_float)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:614 +PFNWGLBEGINFRAMETRACKINGI3DPROC = CFUNCTYPE(BOOL) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:615 +PFNWGLENDFRAMETRACKINGI3DPROC = CFUNCTYPE(BOOL) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:616 +PFNWGLQUERYFRAMETRACKINGI3DPROC = CFUNCTYPE(BOOL, POINTER(DWORD), POINTER(DWORD), POINTER(c_float)) # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:617 +# ATI_pixel_format_float (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:620) +WGL_ATI_pixel_format_float = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:621 +# NV_float_buffer (http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:624) +WGL_NV_float_buffer = 1 # http://oss.sgi.com/projects/ogl-sample/ABI/wglext.h:625 + +__all__ = ['WIN32_LEAN_AND_MEAN', 'GLAPI', 'WGL_WGLEXT_VERSION', +'WGL_FRONT_COLOR_BUFFER_BIT_ARB', 'WGL_BACK_COLOR_BUFFER_BIT_ARB', +'WGL_DEPTH_BUFFER_BIT_ARB', 'WGL_STENCIL_BUFFER_BIT_ARB', +'WGL_SAMPLE_BUFFERS_ARB', 'WGL_SAMPLES_ARB', 'WGL_NUMBER_PIXEL_FORMATS_ARB', +'WGL_DRAW_TO_WINDOW_ARB', 'WGL_DRAW_TO_BITMAP_ARB', 'WGL_ACCELERATION_ARB', +'WGL_NEED_PALETTE_ARB', 'WGL_NEED_SYSTEM_PALETTE_ARB', +'WGL_SWAP_LAYER_BUFFERS_ARB', 'WGL_SWAP_METHOD_ARB', +'WGL_NUMBER_OVERLAYS_ARB', 'WGL_NUMBER_UNDERLAYS_ARB', 'WGL_TRANSPARENT_ARB', +'WGL_TRANSPARENT_RED_VALUE_ARB', 'WGL_TRANSPARENT_GREEN_VALUE_ARB', +'WGL_TRANSPARENT_BLUE_VALUE_ARB', 'WGL_TRANSPARENT_ALPHA_VALUE_ARB', +'WGL_TRANSPARENT_INDEX_VALUE_ARB', 'WGL_SHARE_DEPTH_ARB', +'WGL_SHARE_STENCIL_ARB', 'WGL_SHARE_ACCUM_ARB', 'WGL_SUPPORT_GDI_ARB', +'WGL_SUPPORT_OPENGL_ARB', 'WGL_DOUBLE_BUFFER_ARB', 'WGL_STEREO_ARB', +'WGL_PIXEL_TYPE_ARB', 'WGL_COLOR_BITS_ARB', 'WGL_RED_BITS_ARB', +'WGL_RED_SHIFT_ARB', 'WGL_GREEN_BITS_ARB', 'WGL_GREEN_SHIFT_ARB', +'WGL_BLUE_BITS_ARB', 'WGL_BLUE_SHIFT_ARB', 'WGL_ALPHA_BITS_ARB', +'WGL_ALPHA_SHIFT_ARB', 'WGL_ACCUM_BITS_ARB', 'WGL_ACCUM_RED_BITS_ARB', +'WGL_ACCUM_GREEN_BITS_ARB', 'WGL_ACCUM_BLUE_BITS_ARB', +'WGL_ACCUM_ALPHA_BITS_ARB', 'WGL_DEPTH_BITS_ARB', 'WGL_STENCIL_BITS_ARB', +'WGL_AUX_BUFFERS_ARB', 'WGL_NO_ACCELERATION_ARB', +'WGL_GENERIC_ACCELERATION_ARB', 'WGL_FULL_ACCELERATION_ARB', +'WGL_SWAP_EXCHANGE_ARB', 'WGL_SWAP_COPY_ARB', 'WGL_SWAP_UNDEFINED_ARB', +'WGL_TYPE_RGBA_ARB', 'WGL_TYPE_COLORINDEX_ARB', +'ERROR_INVALID_PIXEL_TYPE_ARB', 'ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB', +'WGL_DRAW_TO_PBUFFER_ARB', 'WGL_MAX_PBUFFER_PIXELS_ARB', +'WGL_MAX_PBUFFER_WIDTH_ARB', 'WGL_MAX_PBUFFER_HEIGHT_ARB', +'WGL_PBUFFER_LARGEST_ARB', 'WGL_PBUFFER_WIDTH_ARB', 'WGL_PBUFFER_HEIGHT_ARB', +'WGL_PBUFFER_LOST_ARB', 'WGL_BIND_TO_TEXTURE_RGB_ARB', +'WGL_BIND_TO_TEXTURE_RGBA_ARB', 'WGL_TEXTURE_FORMAT_ARB', +'WGL_TEXTURE_TARGET_ARB', 'WGL_MIPMAP_TEXTURE_ARB', 'WGL_TEXTURE_RGB_ARB', +'WGL_TEXTURE_RGBA_ARB', 'WGL_NO_TEXTURE_ARB', 'WGL_TEXTURE_CUBE_MAP_ARB', +'WGL_TEXTURE_1D_ARB', 'WGL_TEXTURE_2D_ARB', 'WGL_MIPMAP_LEVEL_ARB', +'WGL_CUBE_MAP_FACE_ARB', 'WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB', +'WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB', 'WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB', +'WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB', 'WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB', +'WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB', 'WGL_FRONT_LEFT_ARB', +'WGL_FRONT_RIGHT_ARB', 'WGL_BACK_LEFT_ARB', 'WGL_BACK_RIGHT_ARB', +'WGL_AUX0_ARB', 'WGL_AUX1_ARB', 'WGL_AUX2_ARB', 'WGL_AUX3_ARB', +'WGL_AUX4_ARB', 'WGL_AUX5_ARB', 'WGL_AUX6_ARB', 'WGL_AUX7_ARB', +'WGL_AUX8_ARB', 'WGL_AUX9_ARB', 'WGL_TYPE_RGBA_FLOAT_ARB', +'ERROR_INVALID_PIXEL_TYPE_EXT', 'WGL_NUMBER_PIXEL_FORMATS_EXT', +'WGL_DRAW_TO_WINDOW_EXT', 'WGL_DRAW_TO_BITMAP_EXT', 'WGL_ACCELERATION_EXT', +'WGL_NEED_PALETTE_EXT', 'WGL_NEED_SYSTEM_PALETTE_EXT', +'WGL_SWAP_LAYER_BUFFERS_EXT', 'WGL_SWAP_METHOD_EXT', +'WGL_NUMBER_OVERLAYS_EXT', 'WGL_NUMBER_UNDERLAYS_EXT', 'WGL_TRANSPARENT_EXT', +'WGL_TRANSPARENT_VALUE_EXT', 'WGL_SHARE_DEPTH_EXT', 'WGL_SHARE_STENCIL_EXT', +'WGL_SHARE_ACCUM_EXT', 'WGL_SUPPORT_GDI_EXT', 'WGL_SUPPORT_OPENGL_EXT', +'WGL_DOUBLE_BUFFER_EXT', 'WGL_STEREO_EXT', 'WGL_PIXEL_TYPE_EXT', +'WGL_COLOR_BITS_EXT', 'WGL_RED_BITS_EXT', 'WGL_RED_SHIFT_EXT', +'WGL_GREEN_BITS_EXT', 'WGL_GREEN_SHIFT_EXT', 'WGL_BLUE_BITS_EXT', +'WGL_BLUE_SHIFT_EXT', 'WGL_ALPHA_BITS_EXT', 'WGL_ALPHA_SHIFT_EXT', +'WGL_ACCUM_BITS_EXT', 'WGL_ACCUM_RED_BITS_EXT', 'WGL_ACCUM_GREEN_BITS_EXT', +'WGL_ACCUM_BLUE_BITS_EXT', 'WGL_ACCUM_ALPHA_BITS_EXT', 'WGL_DEPTH_BITS_EXT', +'WGL_STENCIL_BITS_EXT', 'WGL_AUX_BUFFERS_EXT', 'WGL_NO_ACCELERATION_EXT', +'WGL_GENERIC_ACCELERATION_EXT', 'WGL_FULL_ACCELERATION_EXT', +'WGL_SWAP_EXCHANGE_EXT', 'WGL_SWAP_COPY_EXT', 'WGL_SWAP_UNDEFINED_EXT', +'WGL_TYPE_RGBA_EXT', 'WGL_TYPE_COLORINDEX_EXT', 'WGL_DRAW_TO_PBUFFER_EXT', +'WGL_MAX_PBUFFER_PIXELS_EXT', 'WGL_MAX_PBUFFER_WIDTH_EXT', +'WGL_MAX_PBUFFER_HEIGHT_EXT', 'WGL_OPTIMAL_PBUFFER_WIDTH_EXT', +'WGL_OPTIMAL_PBUFFER_HEIGHT_EXT', 'WGL_PBUFFER_LARGEST_EXT', +'WGL_PBUFFER_WIDTH_EXT', 'WGL_PBUFFER_HEIGHT_EXT', 'WGL_DEPTH_FLOAT_EXT', +'WGL_SAMPLE_BUFFERS_3DFX', 'WGL_SAMPLES_3DFX', 'WGL_SAMPLE_BUFFERS_EXT', +'WGL_SAMPLES_EXT', 'WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D', +'WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D', +'WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D', +'WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D', 'WGL_GAMMA_TABLE_SIZE_I3D', +'WGL_GAMMA_EXCLUDE_DESKTOP_I3D', 'WGL_GENLOCK_SOURCE_MULTIVIEW_I3D', +'WGL_GENLOCK_SOURCE_EXTENAL_SYNC_I3D', 'WGL_GENLOCK_SOURCE_EXTENAL_FIELD_I3D', +'WGL_GENLOCK_SOURCE_EXTENAL_TTL_I3D', 'WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D', +'WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D', 'WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D', +'WGL_GENLOCK_SOURCE_EDGE_RISING_I3D', 'WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D', +'WGL_IMAGE_BUFFER_MIN_ACCESS_I3D', 'WGL_IMAGE_BUFFER_LOCK_I3D', +'WGL_BIND_TO_TEXTURE_DEPTH_NV', 'WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV', +'WGL_DEPTH_TEXTURE_FORMAT_NV', 'WGL_TEXTURE_DEPTH_COMPONENT_NV', +'WGL_DEPTH_COMPONENT_NV', 'WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV', +'WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV', 'WGL_TEXTURE_RECTANGLE_NV', +'WGL_TYPE_RGBA_FLOAT_ATI', 'WGL_FLOAT_COMPONENTS_NV', +'WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV', +'WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV', +'WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV', +'WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV', 'WGL_TEXTURE_FLOAT_R_NV', +'WGL_TEXTURE_FLOAT_RG_NV', 'WGL_TEXTURE_FLOAT_RGB_NV', +'WGL_TEXTURE_FLOAT_RGBA_NV', 'HPBUFFERARB', 'HPBUFFEREXT', +'WGL_ARB_buffer_region', 'wglCreateBufferRegionARB', +'wglDeleteBufferRegionARB', 'wglSaveBufferRegionARB', +'wglRestoreBufferRegionARB', 'PFNWGLCREATEBUFFERREGIONARBPROC', +'PFNWGLDELETEBUFFERREGIONARBPROC', 'PFNWGLSAVEBUFFERREGIONARBPROC', +'PFNWGLRESTOREBUFFERREGIONARBPROC', 'WGL_ARB_multisample', +'WGL_ARB_extensions_string', 'wglGetExtensionsStringARB', +'PFNWGLGETEXTENSIONSSTRINGARBPROC', 'WGL_ARB_pixel_format', +'wglGetPixelFormatAttribivARB', 'wglGetPixelFormatAttribfvARB', +'wglChoosePixelFormatARB', 'PFNWGLGETPIXELFORMATATTRIBIVARBPROC', +'PFNWGLGETPIXELFORMATATTRIBFVARBPROC', 'PFNWGLCHOOSEPIXELFORMATARBPROC', +'WGL_ARB_make_current_read', 'wglMakeContextCurrentARB', +'wglGetCurrentReadDCARB', 'PFNWGLMAKECONTEXTCURRENTARBPROC', +'PFNWGLGETCURRENTREADDCARBPROC', 'WGL_ARB_pbuffer', 'wglCreatePbufferARB', +'wglGetPbufferDCARB', 'wglReleasePbufferDCARB', 'wglDestroyPbufferARB', +'wglQueryPbufferARB', 'PFNWGLCREATEPBUFFERARBPROC', +'PFNWGLGETPBUFFERDCARBPROC', 'PFNWGLRELEASEPBUFFERDCARBPROC', +'PFNWGLDESTROYPBUFFERARBPROC', 'PFNWGLQUERYPBUFFERARBPROC', +'WGL_ARB_render_texture', 'wglBindTexImageARB', 'wglReleaseTexImageARB', +'wglSetPbufferAttribARB', 'PFNWGLBINDTEXIMAGEARBPROC', +'PFNWGLRELEASETEXIMAGEARBPROC', 'PFNWGLSETPBUFFERATTRIBARBPROC', +'WGL_ARB_pixel_format_float', 'WGL_EXT_display_color_table', +'wglCreateDisplayColorTableEXT', 'wglLoadDisplayColorTableEXT', +'wglBindDisplayColorTableEXT', 'wglDestroyDisplayColorTableEXT', +'PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC', 'PFNWGLLOADDISPLAYCOLORTABLEEXTPROC', +'PFNWGLBINDDISPLAYCOLORTABLEEXTPROC', 'PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC', +'WGL_EXT_extensions_string', 'wglGetExtensionsStringEXT', +'PFNWGLGETEXTENSIONSSTRINGEXTPROC', 'WGL_EXT_make_current_read', +'wglMakeContextCurrentEXT', 'wglGetCurrentReadDCEXT', +'PFNWGLMAKECONTEXTCURRENTEXTPROC', 'PFNWGLGETCURRENTREADDCEXTPROC', +'WGL_EXT_pbuffer', 'wglCreatePbufferEXT', 'wglGetPbufferDCEXT', +'wglReleasePbufferDCEXT', 'wglDestroyPbufferEXT', 'wglQueryPbufferEXT', +'PFNWGLCREATEPBUFFEREXTPROC', 'PFNWGLGETPBUFFERDCEXTPROC', +'PFNWGLRELEASEPBUFFERDCEXTPROC', 'PFNWGLDESTROYPBUFFEREXTPROC', +'PFNWGLQUERYPBUFFEREXTPROC', 'WGL_EXT_pixel_format', +'wglGetPixelFormatAttribivEXT', 'wglGetPixelFormatAttribfvEXT', +'wglChoosePixelFormatEXT', 'PFNWGLGETPIXELFORMATATTRIBIVEXTPROC', +'PFNWGLGETPIXELFORMATATTRIBFVEXTPROC', 'PFNWGLCHOOSEPIXELFORMATEXTPROC', +'WGL_EXT_swap_control', 'wglSwapIntervalEXT', 'wglGetSwapIntervalEXT', +'PFNWGLSWAPINTERVALEXTPROC', 'PFNWGLGETSWAPINTERVALEXTPROC', +'WGL_EXT_depth_float', 'WGL_NV_vertex_array_range', 'wglAllocateMemoryNV', +'wglFreeMemoryNV', 'PFNWGLALLOCATEMEMORYNVPROC', 'PFNWGLFREEMEMORYNVPROC', +'WGL_3DFX_multisample', 'WGL_EXT_multisample', 'WGL_OML_sync_control', +'wglGetSyncValuesOML', 'wglGetMscRateOML', 'wglSwapBuffersMscOML', +'wglSwapLayerBuffersMscOML', 'wglWaitForMscOML', 'wglWaitForSbcOML', +'PFNWGLGETSYNCVALUESOMLPROC', 'PFNWGLGETMSCRATEOMLPROC', +'PFNWGLSWAPBUFFERSMSCOMLPROC', 'PFNWGLSWAPLAYERBUFFERSMSCOMLPROC', +'PFNWGLWAITFORMSCOMLPROC', 'PFNWGLWAITFORSBCOMLPROC', +'WGL_I3D_digital_video_control', 'wglGetDigitalVideoParametersI3D', +'wglSetDigitalVideoParametersI3D', 'PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC', +'PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC', 'WGL_I3D_gamma', +'wglGetGammaTableParametersI3D', 'wglSetGammaTableParametersI3D', +'wglGetGammaTableI3D', 'wglSetGammaTableI3D', +'PFNWGLGETGAMMATABLEPARAMETERSI3DPROC', +'PFNWGLSETGAMMATABLEPARAMETERSI3DPROC', 'PFNWGLGETGAMMATABLEI3DPROC', +'PFNWGLSETGAMMATABLEI3DPROC', 'WGL_I3D_genlock', 'wglEnableGenlockI3D', +'wglDisableGenlockI3D', 'wglIsEnabledGenlockI3D', 'wglGenlockSourceI3D', +'wglGetGenlockSourceI3D', 'wglGenlockSourceEdgeI3D', +'wglGetGenlockSourceEdgeI3D', 'wglGenlockSampleRateI3D', +'wglGetGenlockSampleRateI3D', 'wglGenlockSourceDelayI3D', +'wglGetGenlockSourceDelayI3D', 'wglQueryGenlockMaxSourceDelayI3D', +'PFNWGLENABLEGENLOCKI3DPROC', 'PFNWGLDISABLEGENLOCKI3DPROC', +'PFNWGLISENABLEDGENLOCKI3DPROC', 'PFNWGLGENLOCKSOURCEI3DPROC', +'PFNWGLGETGENLOCKSOURCEI3DPROC', 'PFNWGLGENLOCKSOURCEEDGEI3DPROC', +'PFNWGLGETGENLOCKSOURCEEDGEI3DPROC', 'PFNWGLGENLOCKSAMPLERATEI3DPROC', +'PFNWGLGETGENLOCKSAMPLERATEI3DPROC', 'PFNWGLGENLOCKSOURCEDELAYI3DPROC', +'PFNWGLGETGENLOCKSOURCEDELAYI3DPROC', +'PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC', 'WGL_I3D_image_buffer', +'wglCreateImageBufferI3D', 'wglDestroyImageBufferI3D', +'wglAssociateImageBufferEventsI3D', 'wglReleaseImageBufferEventsI3D', +'PFNWGLCREATEIMAGEBUFFERI3DPROC', 'PFNWGLDESTROYIMAGEBUFFERI3DPROC', +'PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC', +'PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC', 'WGL_I3D_swap_frame_lock', +'wglEnableFrameLockI3D', 'wglDisableFrameLockI3D', 'wglIsEnabledFrameLockI3D', +'wglQueryFrameLockMasterI3D', 'PFNWGLENABLEFRAMELOCKI3DPROC', +'PFNWGLDISABLEFRAMELOCKI3DPROC', 'PFNWGLISENABLEDFRAMELOCKI3DPROC', +'PFNWGLQUERYFRAMELOCKMASTERI3DPROC', 'WGL_I3D_swap_frame_usage', +'wglGetFrameUsageI3D', 'wglBeginFrameTrackingI3D', 'wglEndFrameTrackingI3D', +'wglQueryFrameTrackingI3D', 'PFNWGLGETFRAMEUSAGEI3DPROC', +'PFNWGLBEGINFRAMETRACKINGI3DPROC', 'PFNWGLENDFRAMETRACKINGI3DPROC', +'PFNWGLQUERYFRAMETRACKINGI3DPROC', 'WGL_ATI_pixel_format_float', +'WGL_NV_float_buffer'] +# END GENERATED CONTENT (do not edit above this line) + + diff --git a/pyglet/gl/wglext_nv.py b/pyglet/gl/wglext_nv.py new file mode 100644 index 0000000..06c0949 --- /dev/null +++ b/pyglet/gl/wglext_nv.py @@ -0,0 +1,909 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +'''Wrapper for http://developer.download.nvidia.com/opengl/includes/wglext.h + +Generated by tools/gengl.py. +Do not modify this file. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: gengl.py 601 2007-02-04 05:36:59Z Alex.Holkner $' + +from ctypes import * +from pyglet.gl.lib import link_WGL as _link_function +from pyglet.gl.lib import c_ptrdiff_t, c_void + +# BEGIN GENERATED CONTENT (do not edit below this line) + +# This content is generated by tools/gengl.py. +# Wrapper for http://developer.download.nvidia.com/opengl/includes/wglext.h + + +# H (C:\cygwin\home\Alex\pyglet\tools\wgl.h:7) +# H (C:\cygwin\home\Alex\pyglet\tools\wgl.h:7) +WIN32_LEAN_AND_MEAN = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:40 +GLAPI = 0 # http://developer.download.nvidia.com/opengl/includes/wglext.h:51 +WGL_WGLEXT_VERSION = 6 # http://developer.download.nvidia.com/opengl/includes/wglext.h:60 +# ARB_buffer_region (http://developer.download.nvidia.com/opengl/includes/wglext.h:62) +WGL_FRONT_COLOR_BUFFER_BIT_ARB = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:63 +WGL_BACK_COLOR_BUFFER_BIT_ARB = 2 # http://developer.download.nvidia.com/opengl/includes/wglext.h:64 +WGL_DEPTH_BUFFER_BIT_ARB = 4 # http://developer.download.nvidia.com/opengl/includes/wglext.h:65 +WGL_STENCIL_BUFFER_BIT_ARB = 8 # http://developer.download.nvidia.com/opengl/includes/wglext.h:66 +# ARB_multisample (http://developer.download.nvidia.com/opengl/includes/wglext.h:69) +WGL_SAMPLE_BUFFERS_ARB = 8257 # http://developer.download.nvidia.com/opengl/includes/wglext.h:70 +WGL_SAMPLES_ARB = 8258 # http://developer.download.nvidia.com/opengl/includes/wglext.h:71 +# ARB_extensions_string (http://developer.download.nvidia.com/opengl/includes/wglext.h:74) +# ARB_pixel_format (http://developer.download.nvidia.com/opengl/includes/wglext.h:77) +WGL_NUMBER_PIXEL_FORMATS_ARB = 8192 # http://developer.download.nvidia.com/opengl/includes/wglext.h:78 +WGL_DRAW_TO_WINDOW_ARB = 8193 # http://developer.download.nvidia.com/opengl/includes/wglext.h:79 +WGL_DRAW_TO_BITMAP_ARB = 8194 # http://developer.download.nvidia.com/opengl/includes/wglext.h:80 +WGL_ACCELERATION_ARB = 8195 # http://developer.download.nvidia.com/opengl/includes/wglext.h:81 +WGL_NEED_PALETTE_ARB = 8196 # http://developer.download.nvidia.com/opengl/includes/wglext.h:82 +WGL_NEED_SYSTEM_PALETTE_ARB = 8197 # http://developer.download.nvidia.com/opengl/includes/wglext.h:83 +WGL_SWAP_LAYER_BUFFERS_ARB = 8198 # http://developer.download.nvidia.com/opengl/includes/wglext.h:84 +WGL_SWAP_METHOD_ARB = 8199 # http://developer.download.nvidia.com/opengl/includes/wglext.h:85 +WGL_NUMBER_OVERLAYS_ARB = 8200 # http://developer.download.nvidia.com/opengl/includes/wglext.h:86 +WGL_NUMBER_UNDERLAYS_ARB = 8201 # http://developer.download.nvidia.com/opengl/includes/wglext.h:87 +WGL_TRANSPARENT_ARB = 8202 # http://developer.download.nvidia.com/opengl/includes/wglext.h:88 +WGL_TRANSPARENT_RED_VALUE_ARB = 8247 # http://developer.download.nvidia.com/opengl/includes/wglext.h:89 +WGL_TRANSPARENT_GREEN_VALUE_ARB = 8248 # http://developer.download.nvidia.com/opengl/includes/wglext.h:90 +WGL_TRANSPARENT_BLUE_VALUE_ARB = 8249 # http://developer.download.nvidia.com/opengl/includes/wglext.h:91 +WGL_TRANSPARENT_ALPHA_VALUE_ARB = 8250 # http://developer.download.nvidia.com/opengl/includes/wglext.h:92 +WGL_TRANSPARENT_INDEX_VALUE_ARB = 8251 # http://developer.download.nvidia.com/opengl/includes/wglext.h:93 +WGL_SHARE_DEPTH_ARB = 8204 # http://developer.download.nvidia.com/opengl/includes/wglext.h:94 +WGL_SHARE_STENCIL_ARB = 8205 # http://developer.download.nvidia.com/opengl/includes/wglext.h:95 +WGL_SHARE_ACCUM_ARB = 512 # http://developer.download.nvidia.com/opengl/includes/wglext.h:96 +WGL_SUPPORT_GDI_ARB = 512 # http://developer.download.nvidia.com/opengl/includes/wglext.h:97 +WGL_SUPPORT_OPENGL_ARB = 8208 # http://developer.download.nvidia.com/opengl/includes/wglext.h:98 +WGL_DOUBLE_BUFFER_ARB = 8209 # http://developer.download.nvidia.com/opengl/includes/wglext.h:99 +WGL_STEREO_ARB = 8210 # http://developer.download.nvidia.com/opengl/includes/wglext.h:100 +WGL_PIXEL_TYPE_ARB = 8211 # http://developer.download.nvidia.com/opengl/includes/wglext.h:101 +WGL_COLOR_BITS_ARB = 8212 # http://developer.download.nvidia.com/opengl/includes/wglext.h:102 +WGL_RED_BITS_ARB = 8213 # http://developer.download.nvidia.com/opengl/includes/wglext.h:103 +WGL_RED_SHIFT_ARB = 8214 # http://developer.download.nvidia.com/opengl/includes/wglext.h:104 +WGL_GREEN_BITS_ARB = 8215 # http://developer.download.nvidia.com/opengl/includes/wglext.h:105 +WGL_GREEN_SHIFT_ARB = 8216 # http://developer.download.nvidia.com/opengl/includes/wglext.h:106 +WGL_BLUE_BITS_ARB = 8217 # http://developer.download.nvidia.com/opengl/includes/wglext.h:107 +WGL_BLUE_SHIFT_ARB = 8218 # http://developer.download.nvidia.com/opengl/includes/wglext.h:108 +WGL_ALPHA_BITS_ARB = 8219 # http://developer.download.nvidia.com/opengl/includes/wglext.h:109 +WGL_ALPHA_SHIFT_ARB = 8220 # http://developer.download.nvidia.com/opengl/includes/wglext.h:110 +WGL_ACCUM_BITS_ARB = 8221 # http://developer.download.nvidia.com/opengl/includes/wglext.h:111 +WGL_ACCUM_RED_BITS_ARB = 513 # http://developer.download.nvidia.com/opengl/includes/wglext.h:112 +WGL_ACCUM_GREEN_BITS_ARB = 513 # http://developer.download.nvidia.com/opengl/includes/wglext.h:113 +WGL_ACCUM_BLUE_BITS_ARB = 8224 # http://developer.download.nvidia.com/opengl/includes/wglext.h:114 +WGL_ACCUM_ALPHA_BITS_ARB = 8225 # http://developer.download.nvidia.com/opengl/includes/wglext.h:115 +WGL_DEPTH_BITS_ARB = 8226 # http://developer.download.nvidia.com/opengl/includes/wglext.h:116 +WGL_STENCIL_BITS_ARB = 8227 # http://developer.download.nvidia.com/opengl/includes/wglext.h:117 +WGL_AUX_BUFFERS_ARB = 8228 # http://developer.download.nvidia.com/opengl/includes/wglext.h:118 +WGL_NO_ACCELERATION_ARB = 8229 # http://developer.download.nvidia.com/opengl/includes/wglext.h:119 +WGL_GENERIC_ACCELERATION_ARB = 8230 # http://developer.download.nvidia.com/opengl/includes/wglext.h:120 +WGL_FULL_ACCELERATION_ARB = 8231 # http://developer.download.nvidia.com/opengl/includes/wglext.h:121 +WGL_SWAP_EXCHANGE_ARB = 8232 # http://developer.download.nvidia.com/opengl/includes/wglext.h:122 +WGL_SWAP_COPY_ARB = 8233 # http://developer.download.nvidia.com/opengl/includes/wglext.h:123 +WGL_SWAP_UNDEFINED_ARB = 8234 # http://developer.download.nvidia.com/opengl/includes/wglext.h:124 +WGL_TYPE_RGBA_ARB = 8235 # http://developer.download.nvidia.com/opengl/includes/wglext.h:125 +WGL_TYPE_COLORINDEX_ARB = 8236 # http://developer.download.nvidia.com/opengl/includes/wglext.h:126 +# ARB_make_current_read (http://developer.download.nvidia.com/opengl/includes/wglext.h:129) +ERROR_INVALID_PIXEL_TYPE_ARB = 8259 # http://developer.download.nvidia.com/opengl/includes/wglext.h:130 +ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB = 8276 # http://developer.download.nvidia.com/opengl/includes/wglext.h:131 +# ARB_pbuffer (http://developer.download.nvidia.com/opengl/includes/wglext.h:134) +WGL_DRAW_TO_PBUFFER_ARB = 8237 # http://developer.download.nvidia.com/opengl/includes/wglext.h:135 +WGL_MAX_PBUFFER_PIXELS_ARB = 514 # http://developer.download.nvidia.com/opengl/includes/wglext.h:136 +WGL_MAX_PBUFFER_WIDTH_ARB = 514 # http://developer.download.nvidia.com/opengl/includes/wglext.h:137 +WGL_MAX_PBUFFER_HEIGHT_ARB = 8240 # http://developer.download.nvidia.com/opengl/includes/wglext.h:138 +WGL_PBUFFER_LARGEST_ARB = 8243 # http://developer.download.nvidia.com/opengl/includes/wglext.h:139 +WGL_PBUFFER_WIDTH_ARB = 8244 # http://developer.download.nvidia.com/opengl/includes/wglext.h:140 +WGL_PBUFFER_HEIGHT_ARB = 8245 # http://developer.download.nvidia.com/opengl/includes/wglext.h:141 +WGL_PBUFFER_LOST_ARB = 8246 # http://developer.download.nvidia.com/opengl/includes/wglext.h:142 +# ARB_render_texture (http://developer.download.nvidia.com/opengl/includes/wglext.h:145) +WGL_BIND_TO_TEXTURE_RGB_ARB = 8304 # http://developer.download.nvidia.com/opengl/includes/wglext.h:146 +WGL_BIND_TO_TEXTURE_RGBA_ARB = 8305 # http://developer.download.nvidia.com/opengl/includes/wglext.h:147 +WGL_TEXTURE_FORMAT_ARB = 8306 # http://developer.download.nvidia.com/opengl/includes/wglext.h:148 +WGL_TEXTURE_TARGET_ARB = 8307 # http://developer.download.nvidia.com/opengl/includes/wglext.h:149 +WGL_MIPMAP_TEXTURE_ARB = 8308 # http://developer.download.nvidia.com/opengl/includes/wglext.h:150 +WGL_TEXTURE_RGB_ARB = 8309 # http://developer.download.nvidia.com/opengl/includes/wglext.h:151 +WGL_TEXTURE_RGBA_ARB = 8310 # http://developer.download.nvidia.com/opengl/includes/wglext.h:152 +WGL_NO_TEXTURE_ARB = 8311 # http://developer.download.nvidia.com/opengl/includes/wglext.h:153 +WGL_TEXTURE_CUBE_MAP_ARB = 8312 # http://developer.download.nvidia.com/opengl/includes/wglext.h:154 +WGL_TEXTURE_1D_ARB = 8313 # http://developer.download.nvidia.com/opengl/includes/wglext.h:155 +WGL_TEXTURE_2D_ARB = 8314 # http://developer.download.nvidia.com/opengl/includes/wglext.h:156 +WGL_MIPMAP_LEVEL_ARB = 8315 # http://developer.download.nvidia.com/opengl/includes/wglext.h:157 +WGL_CUBE_MAP_FACE_ARB = 8316 # http://developer.download.nvidia.com/opengl/includes/wglext.h:158 +WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB = 8317 # http://developer.download.nvidia.com/opengl/includes/wglext.h:159 +WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB = 519 # http://developer.download.nvidia.com/opengl/includes/wglext.h:160 +WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB = 519 # http://developer.download.nvidia.com/opengl/includes/wglext.h:161 +WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB = 8320 # http://developer.download.nvidia.com/opengl/includes/wglext.h:162 +WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB = 8321 # http://developer.download.nvidia.com/opengl/includes/wglext.h:163 +WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB = 8322 # http://developer.download.nvidia.com/opengl/includes/wglext.h:164 +WGL_FRONT_LEFT_ARB = 8323 # http://developer.download.nvidia.com/opengl/includes/wglext.h:165 +WGL_FRONT_RIGHT_ARB = 8324 # http://developer.download.nvidia.com/opengl/includes/wglext.h:166 +WGL_BACK_LEFT_ARB = 8325 # http://developer.download.nvidia.com/opengl/includes/wglext.h:167 +WGL_BACK_RIGHT_ARB = 8326 # http://developer.download.nvidia.com/opengl/includes/wglext.h:168 +WGL_AUX0_ARB = 8327 # http://developer.download.nvidia.com/opengl/includes/wglext.h:169 +WGL_AUX1_ARB = 8328 # http://developer.download.nvidia.com/opengl/includes/wglext.h:170 +WGL_AUX2_ARB = 8329 # http://developer.download.nvidia.com/opengl/includes/wglext.h:171 +WGL_AUX3_ARB = 8330 # http://developer.download.nvidia.com/opengl/includes/wglext.h:172 +WGL_AUX4_ARB = 8331 # http://developer.download.nvidia.com/opengl/includes/wglext.h:173 +WGL_AUX5_ARB = 8332 # http://developer.download.nvidia.com/opengl/includes/wglext.h:174 +WGL_AUX6_ARB = 8333 # http://developer.download.nvidia.com/opengl/includes/wglext.h:175 +WGL_AUX7_ARB = 520 # http://developer.download.nvidia.com/opengl/includes/wglext.h:176 +WGL_AUX8_ARB = 520 # http://developer.download.nvidia.com/opengl/includes/wglext.h:177 +WGL_AUX9_ARB = 8336 # http://developer.download.nvidia.com/opengl/includes/wglext.h:178 +# ARB_pixel_format_float (http://developer.download.nvidia.com/opengl/includes/wglext.h:181) +WGL_TYPE_RGBA_FLOAT_ARB = 8608 # http://developer.download.nvidia.com/opengl/includes/wglext.h:182 +# EXT_make_current_read (http://developer.download.nvidia.com/opengl/includes/wglext.h:185) +ERROR_INVALID_PIXEL_TYPE_EXT = 8259 # http://developer.download.nvidia.com/opengl/includes/wglext.h:186 +# EXT_pixel_format (http://developer.download.nvidia.com/opengl/includes/wglext.h:189) +WGL_NUMBER_PIXEL_FORMATS_EXT = 8192 # http://developer.download.nvidia.com/opengl/includes/wglext.h:190 +WGL_DRAW_TO_WINDOW_EXT = 8193 # http://developer.download.nvidia.com/opengl/includes/wglext.h:191 +WGL_DRAW_TO_BITMAP_EXT = 8194 # http://developer.download.nvidia.com/opengl/includes/wglext.h:192 +WGL_ACCELERATION_EXT = 8195 # http://developer.download.nvidia.com/opengl/includes/wglext.h:193 +WGL_NEED_PALETTE_EXT = 8196 # http://developer.download.nvidia.com/opengl/includes/wglext.h:194 +WGL_NEED_SYSTEM_PALETTE_EXT = 8197 # http://developer.download.nvidia.com/opengl/includes/wglext.h:195 +WGL_SWAP_LAYER_BUFFERS_EXT = 8198 # http://developer.download.nvidia.com/opengl/includes/wglext.h:196 +WGL_SWAP_METHOD_EXT = 8199 # http://developer.download.nvidia.com/opengl/includes/wglext.h:197 +WGL_NUMBER_OVERLAYS_EXT = 8200 # http://developer.download.nvidia.com/opengl/includes/wglext.h:198 +WGL_NUMBER_UNDERLAYS_EXT = 8201 # http://developer.download.nvidia.com/opengl/includes/wglext.h:199 +WGL_TRANSPARENT_EXT = 8202 # http://developer.download.nvidia.com/opengl/includes/wglext.h:200 +WGL_TRANSPARENT_VALUE_EXT = 8203 # http://developer.download.nvidia.com/opengl/includes/wglext.h:201 +WGL_SHARE_DEPTH_EXT = 8204 # http://developer.download.nvidia.com/opengl/includes/wglext.h:202 +WGL_SHARE_STENCIL_EXT = 8205 # http://developer.download.nvidia.com/opengl/includes/wglext.h:203 +WGL_SHARE_ACCUM_EXT = 512 # http://developer.download.nvidia.com/opengl/includes/wglext.h:204 +WGL_SUPPORT_GDI_EXT = 512 # http://developer.download.nvidia.com/opengl/includes/wglext.h:205 +WGL_SUPPORT_OPENGL_EXT = 8208 # http://developer.download.nvidia.com/opengl/includes/wglext.h:206 +WGL_DOUBLE_BUFFER_EXT = 8209 # http://developer.download.nvidia.com/opengl/includes/wglext.h:207 +WGL_STEREO_EXT = 8210 # http://developer.download.nvidia.com/opengl/includes/wglext.h:208 +WGL_PIXEL_TYPE_EXT = 8211 # http://developer.download.nvidia.com/opengl/includes/wglext.h:209 +WGL_COLOR_BITS_EXT = 8212 # http://developer.download.nvidia.com/opengl/includes/wglext.h:210 +WGL_RED_BITS_EXT = 8213 # http://developer.download.nvidia.com/opengl/includes/wglext.h:211 +WGL_RED_SHIFT_EXT = 8214 # http://developer.download.nvidia.com/opengl/includes/wglext.h:212 +WGL_GREEN_BITS_EXT = 8215 # http://developer.download.nvidia.com/opengl/includes/wglext.h:213 +WGL_GREEN_SHIFT_EXT = 8216 # http://developer.download.nvidia.com/opengl/includes/wglext.h:214 +WGL_BLUE_BITS_EXT = 8217 # http://developer.download.nvidia.com/opengl/includes/wglext.h:215 +WGL_BLUE_SHIFT_EXT = 8218 # http://developer.download.nvidia.com/opengl/includes/wglext.h:216 +WGL_ALPHA_BITS_EXT = 8219 # http://developer.download.nvidia.com/opengl/includes/wglext.h:217 +WGL_ALPHA_SHIFT_EXT = 8220 # http://developer.download.nvidia.com/opengl/includes/wglext.h:218 +WGL_ACCUM_BITS_EXT = 8221 # http://developer.download.nvidia.com/opengl/includes/wglext.h:219 +WGL_ACCUM_RED_BITS_EXT = 513 # http://developer.download.nvidia.com/opengl/includes/wglext.h:220 +WGL_ACCUM_GREEN_BITS_EXT = 513 # http://developer.download.nvidia.com/opengl/includes/wglext.h:221 +WGL_ACCUM_BLUE_BITS_EXT = 8224 # http://developer.download.nvidia.com/opengl/includes/wglext.h:222 +WGL_ACCUM_ALPHA_BITS_EXT = 8225 # http://developer.download.nvidia.com/opengl/includes/wglext.h:223 +WGL_DEPTH_BITS_EXT = 8226 # http://developer.download.nvidia.com/opengl/includes/wglext.h:224 +WGL_STENCIL_BITS_EXT = 8227 # http://developer.download.nvidia.com/opengl/includes/wglext.h:225 +WGL_AUX_BUFFERS_EXT = 8228 # http://developer.download.nvidia.com/opengl/includes/wglext.h:226 +WGL_NO_ACCELERATION_EXT = 8229 # http://developer.download.nvidia.com/opengl/includes/wglext.h:227 +WGL_GENERIC_ACCELERATION_EXT = 8230 # http://developer.download.nvidia.com/opengl/includes/wglext.h:228 +WGL_FULL_ACCELERATION_EXT = 8231 # http://developer.download.nvidia.com/opengl/includes/wglext.h:229 +WGL_SWAP_EXCHANGE_EXT = 8232 # http://developer.download.nvidia.com/opengl/includes/wglext.h:230 +WGL_SWAP_COPY_EXT = 8233 # http://developer.download.nvidia.com/opengl/includes/wglext.h:231 +WGL_SWAP_UNDEFINED_EXT = 8234 # http://developer.download.nvidia.com/opengl/includes/wglext.h:232 +WGL_TYPE_RGBA_EXT = 8235 # http://developer.download.nvidia.com/opengl/includes/wglext.h:233 +WGL_TYPE_COLORINDEX_EXT = 8236 # http://developer.download.nvidia.com/opengl/includes/wglext.h:234 +# EXT_pbuffer (http://developer.download.nvidia.com/opengl/includes/wglext.h:237) +WGL_DRAW_TO_PBUFFER_EXT = 8237 # http://developer.download.nvidia.com/opengl/includes/wglext.h:238 +WGL_MAX_PBUFFER_PIXELS_EXT = 514 # http://developer.download.nvidia.com/opengl/includes/wglext.h:239 +WGL_MAX_PBUFFER_WIDTH_EXT = 514 # http://developer.download.nvidia.com/opengl/includes/wglext.h:240 +WGL_MAX_PBUFFER_HEIGHT_EXT = 8240 # http://developer.download.nvidia.com/opengl/includes/wglext.h:241 +WGL_OPTIMAL_PBUFFER_WIDTH_EXT = 8241 # http://developer.download.nvidia.com/opengl/includes/wglext.h:242 +WGL_OPTIMAL_PBUFFER_HEIGHT_EXT = 8242 # http://developer.download.nvidia.com/opengl/includes/wglext.h:243 +WGL_PBUFFER_LARGEST_EXT = 8243 # http://developer.download.nvidia.com/opengl/includes/wglext.h:244 +WGL_PBUFFER_WIDTH_EXT = 8244 # http://developer.download.nvidia.com/opengl/includes/wglext.h:245 +WGL_PBUFFER_HEIGHT_EXT = 8245 # http://developer.download.nvidia.com/opengl/includes/wglext.h:246 +# EXT_depth_float (http://developer.download.nvidia.com/opengl/includes/wglext.h:249) +WGL_DEPTH_FLOAT_EXT = 8256 # http://developer.download.nvidia.com/opengl/includes/wglext.h:250 +# 3DFX_multisample (http://developer.download.nvidia.com/opengl/includes/wglext.h:253) +WGL_SAMPLE_BUFFERS_3DFX = 8288 # http://developer.download.nvidia.com/opengl/includes/wglext.h:254 +WGL_SAMPLES_3DFX = 8289 # http://developer.download.nvidia.com/opengl/includes/wglext.h:255 +# EXT_multisample (http://developer.download.nvidia.com/opengl/includes/wglext.h:258) +WGL_SAMPLE_BUFFERS_EXT = 8257 # http://developer.download.nvidia.com/opengl/includes/wglext.h:259 +WGL_SAMPLES_EXT = 8258 # http://developer.download.nvidia.com/opengl/includes/wglext.h:260 +# I3D_digital_video_control (http://developer.download.nvidia.com/opengl/includes/wglext.h:263) +WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D = 8272 # http://developer.download.nvidia.com/opengl/includes/wglext.h:264 +WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D = 8273 # http://developer.download.nvidia.com/opengl/includes/wglext.h:265 +WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D = 8274 # http://developer.download.nvidia.com/opengl/includes/wglext.h:266 +WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D = 8275 # http://developer.download.nvidia.com/opengl/includes/wglext.h:267 +# I3D_gamma (http://developer.download.nvidia.com/opengl/includes/wglext.h:270) +WGL_GAMMA_TABLE_SIZE_I3D = 516 # http://developer.download.nvidia.com/opengl/includes/wglext.h:271 +WGL_GAMMA_EXCLUDE_DESKTOP_I3D = 516 # http://developer.download.nvidia.com/opengl/includes/wglext.h:272 +# I3D_genlock (http://developer.download.nvidia.com/opengl/includes/wglext.h:275) +WGL_GENLOCK_SOURCE_MULTIVIEW_I3D = 8260 # http://developer.download.nvidia.com/opengl/includes/wglext.h:276 +WGL_GENLOCK_SOURCE_EXTENAL_SYNC_I3D = 8261 # http://developer.download.nvidia.com/opengl/includes/wglext.h:277 +WGL_GENLOCK_SOURCE_EXTENAL_FIELD_I3D = 8262 # http://developer.download.nvidia.com/opengl/includes/wglext.h:278 +WGL_GENLOCK_SOURCE_EXTENAL_TTL_I3D = 8263 # http://developer.download.nvidia.com/opengl/includes/wglext.h:279 +WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D = 8264 # http://developer.download.nvidia.com/opengl/includes/wglext.h:280 +WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D = 8265 # http://developer.download.nvidia.com/opengl/includes/wglext.h:281 +WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D = 8266 # http://developer.download.nvidia.com/opengl/includes/wglext.h:282 +WGL_GENLOCK_SOURCE_EDGE_RISING_I3D = 8267 # http://developer.download.nvidia.com/opengl/includes/wglext.h:283 +WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D = 8268 # http://developer.download.nvidia.com/opengl/includes/wglext.h:284 +# I3D_image_buffer (http://developer.download.nvidia.com/opengl/includes/wglext.h:287) +WGL_IMAGE_BUFFER_MIN_ACCESS_I3D = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:288 +WGL_IMAGE_BUFFER_LOCK_I3D = 2 # http://developer.download.nvidia.com/opengl/includes/wglext.h:289 +# I3D_swap_frame_lock (http://developer.download.nvidia.com/opengl/includes/wglext.h:292) +# NV_render_depth_texture (http://developer.download.nvidia.com/opengl/includes/wglext.h:295) +WGL_BIND_TO_TEXTURE_DEPTH_NV = 8355 # http://developer.download.nvidia.com/opengl/includes/wglext.h:296 +WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV = 8356 # http://developer.download.nvidia.com/opengl/includes/wglext.h:297 +WGL_DEPTH_TEXTURE_FORMAT_NV = 8357 # http://developer.download.nvidia.com/opengl/includes/wglext.h:298 +WGL_TEXTURE_DEPTH_COMPONENT_NV = 8358 # http://developer.download.nvidia.com/opengl/includes/wglext.h:299 +WGL_DEPTH_COMPONENT_NV = 8359 # http://developer.download.nvidia.com/opengl/includes/wglext.h:300 +# NV_render_texture_rectangle (http://developer.download.nvidia.com/opengl/includes/wglext.h:303) +WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV = 8352 # http://developer.download.nvidia.com/opengl/includes/wglext.h:304 +WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV = 8353 # http://developer.download.nvidia.com/opengl/includes/wglext.h:305 +WGL_TEXTURE_RECTANGLE_NV = 8354 # http://developer.download.nvidia.com/opengl/includes/wglext.h:306 +# ATI_pixel_format_float (http://developer.download.nvidia.com/opengl/includes/wglext.h:309) +WGL_TYPE_RGBA_FLOAT_ATI = 8608 # http://developer.download.nvidia.com/opengl/includes/wglext.h:310 +WGL_RGBA_FLOAT_MODE_ATI = 34848 # http://developer.download.nvidia.com/opengl/includes/wglext.h:311 +WGL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI = 34869 # http://developer.download.nvidia.com/opengl/includes/wglext.h:312 +# NV_float_buffer (http://developer.download.nvidia.com/opengl/includes/wglext.h:315) +WGL_FLOAT_COMPONENTS_NV = 8368 # http://developer.download.nvidia.com/opengl/includes/wglext.h:316 +WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV = 8369 # http://developer.download.nvidia.com/opengl/includes/wglext.h:317 +WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV = 8370 # http://developer.download.nvidia.com/opengl/includes/wglext.h:318 +WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV = 8371 # http://developer.download.nvidia.com/opengl/includes/wglext.h:319 +WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV = 8372 # http://developer.download.nvidia.com/opengl/includes/wglext.h:320 +WGL_TEXTURE_FLOAT_R_NV = 8373 # http://developer.download.nvidia.com/opengl/includes/wglext.h:321 +WGL_TEXTURE_FLOAT_RG_NV = 8374 # http://developer.download.nvidia.com/opengl/includes/wglext.h:322 +WGL_TEXTURE_FLOAT_RGB_NV = 8375 # http://developer.download.nvidia.com/opengl/includes/wglext.h:323 +WGL_TEXTURE_FLOAT_RGBA_NV = 8376 # http://developer.download.nvidia.com/opengl/includes/wglext.h:324 +# NV_swap_group (http://developer.download.nvidia.com/opengl/includes/wglext.h:327) +# NV_gpu_affinity (http://developer.download.nvidia.com/opengl/includes/wglext.h:330) +WGL_ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV = 8400 # http://developer.download.nvidia.com/opengl/includes/wglext.h:331 +WGL_ERROR_MISSING_AFFINITY_MASK_NV = 8401 # http://developer.download.nvidia.com/opengl/includes/wglext.h:332 +# ARB_pbuffer (http://developer.download.nvidia.com/opengl/includes/wglext.h:338) +HANDLE = POINTER(None) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:58 +HPBUFFERARB = HANDLE # http://developer.download.nvidia.com/opengl/includes/wglext.h:339 +# EXT_pbuffer (http://developer.download.nvidia.com/opengl/includes/wglext.h:341) +HPBUFFEREXT = HANDLE # http://developer.download.nvidia.com/opengl/includes/wglext.h:342 +# NV_gpu_affinity (http://developer.download.nvidia.com/opengl/includes/wglext.h:345) +HGPUNV = HANDLE # http://developer.download.nvidia.com/opengl/includes/wglext.h:346 +class struct__GPU_DEVICE(Structure): + __slots__ = [ + 'cb', + 'DeviceName', + 'DeviceString', + 'Flags', + 'rcVirtualScreen', + ] +DWORD = c_ulong # C:\cygwin\home\Alex\pyglet\tools\wgl.h:54 +CHAR = c_char # C:\cygwin\home\Alex\pyglet\tools\wgl.h:47 +class struct_tagRECT(Structure): + __slots__ = [ + 'left', + 'top', + 'right', + 'bottom', + ] +LONG = c_long # C:\cygwin\home\Alex\pyglet\tools\wgl.h:53 +struct_tagRECT._fields_ = [ + ('left', LONG), + ('top', LONG), + ('right', LONG), + ('bottom', LONG), +] + +RECT = struct_tagRECT # C:\cygwin\home\Alex\pyglet\tools\wgl.h:200 +struct__GPU_DEVICE._fields_ = [ + ('cb', DWORD), + ('DeviceName', CHAR * 32), + ('DeviceString', CHAR * 128), + ('Flags', DWORD), + ('rcVirtualScreen', RECT), +] + +GPU_DEVICE = struct__GPU_DEVICE # http://developer.download.nvidia.com/opengl/includes/wglext.h:353 +PGPU_DEVICE = POINTER(struct__GPU_DEVICE) # http://developer.download.nvidia.com/opengl/includes/wglext.h:353 +# ARB_buffer_region (http://developer.download.nvidia.com/opengl/includes/wglext.h:356) +WGL_ARB_buffer_region = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:357 +HDC = HANDLE # C:\cygwin\home\Alex\pyglet\tools\wgl.h:61 +UINT = c_uint # C:\cygwin\home\Alex\pyglet\tools\wgl.h:50 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:359 +wglCreateBufferRegionARB = _link_function('wglCreateBufferRegionARB', HANDLE, [HDC, c_int, UINT], 'ARB_buffer_region') + +VOID = None # C:\cygwin\home\Alex\pyglet\tools\wgl.h:45 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:360 +wglDeleteBufferRegionARB = _link_function('wglDeleteBufferRegionARB', VOID, [HANDLE], 'ARB_buffer_region') + +BOOL = c_long # C:\cygwin\home\Alex\pyglet\tools\wgl.h:52 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:361 +wglSaveBufferRegionARB = _link_function('wglSaveBufferRegionARB', BOOL, [HANDLE, c_int, c_int, c_int, c_int], 'ARB_buffer_region') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:362 +wglRestoreBufferRegionARB = _link_function('wglRestoreBufferRegionARB', BOOL, [HANDLE, c_int, c_int, c_int, c_int, c_int, c_int], 'ARB_buffer_region') + +PFNWGLCREATEBUFFERREGIONARBPROC = CFUNCTYPE(HANDLE, HDC, c_int, UINT) # http://developer.download.nvidia.com/opengl/includes/wglext.h:364 +PFNWGLDELETEBUFFERREGIONARBPROC = CFUNCTYPE(VOID, HANDLE) # http://developer.download.nvidia.com/opengl/includes/wglext.h:365 +PFNWGLSAVEBUFFERREGIONARBPROC = CFUNCTYPE(BOOL, HANDLE, c_int, c_int, c_int, c_int) # http://developer.download.nvidia.com/opengl/includes/wglext.h:366 +PFNWGLRESTOREBUFFERREGIONARBPROC = CFUNCTYPE(BOOL, HANDLE, c_int, c_int, c_int, c_int, c_int, c_int) # http://developer.download.nvidia.com/opengl/includes/wglext.h:367 +# ARB_multisample (http://developer.download.nvidia.com/opengl/includes/wglext.h:370) +WGL_ARB_multisample = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:371 +# ARB_extensions_string (http://developer.download.nvidia.com/opengl/includes/wglext.h:374) +WGL_ARB_extensions_string = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:375 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:377 +wglGetExtensionsStringARB = _link_function('wglGetExtensionsStringARB', c_char_p, [HDC], 'ARB_extensions_string') + +PFNWGLGETEXTENSIONSSTRINGARBPROC = CFUNCTYPE(c_char_p, HDC) # http://developer.download.nvidia.com/opengl/includes/wglext.h:379 +# ARB_pixel_format (http://developer.download.nvidia.com/opengl/includes/wglext.h:382) +WGL_ARB_pixel_format = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:383 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:385 +wglGetPixelFormatAttribivARB = _link_function('wglGetPixelFormatAttribivARB', BOOL, [HDC, c_int, c_int, UINT, POINTER(c_int), POINTER(c_int)], 'ARB_pixel_format') + +FLOAT = c_float # C:\cygwin\home\Alex\pyglet\tools\wgl.h:55 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:386 +wglGetPixelFormatAttribfvARB = _link_function('wglGetPixelFormatAttribfvARB', BOOL, [HDC, c_int, c_int, UINT, POINTER(c_int), POINTER(FLOAT)], 'ARB_pixel_format') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:387 +wglChoosePixelFormatARB = _link_function('wglChoosePixelFormatARB', BOOL, [HDC, POINTER(c_int), POINTER(FLOAT), UINT, POINTER(c_int), POINTER(UINT)], 'ARB_pixel_format') + +PFNWGLGETPIXELFORMATATTRIBIVARBPROC = CFUNCTYPE(BOOL, HDC, c_int, c_int, UINT, POINTER(c_int), POINTER(c_int)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:389 +PFNWGLGETPIXELFORMATATTRIBFVARBPROC = CFUNCTYPE(BOOL, HDC, c_int, c_int, UINT, POINTER(c_int), POINTER(FLOAT)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:390 +PFNWGLCHOOSEPIXELFORMATARBPROC = CFUNCTYPE(BOOL, HDC, POINTER(c_int), POINTER(FLOAT), UINT, POINTER(c_int), POINTER(UINT)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:391 +# ARB_make_current_read (http://developer.download.nvidia.com/opengl/includes/wglext.h:394) +WGL_ARB_make_current_read = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:395 +HGLRC = HANDLE # C:\cygwin\home\Alex\pyglet\tools\wgl.h:60 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:397 +wglMakeContextCurrentARB = _link_function('wglMakeContextCurrentARB', BOOL, [HDC, HDC, HGLRC], 'ARB_make_current_read') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:398 +wglGetCurrentReadDCARB = _link_function('wglGetCurrentReadDCARB', HDC, [], 'ARB_make_current_read') + +PFNWGLMAKECONTEXTCURRENTARBPROC = CFUNCTYPE(BOOL, HDC, HDC, HGLRC) # http://developer.download.nvidia.com/opengl/includes/wglext.h:400 +PFNWGLGETCURRENTREADDCARBPROC = CFUNCTYPE(HDC) # http://developer.download.nvidia.com/opengl/includes/wglext.h:401 +# ARB_pbuffer (http://developer.download.nvidia.com/opengl/includes/wglext.h:404) +WGL_ARB_pbuffer = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:405 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:407 +wglCreatePbufferARB = _link_function('wglCreatePbufferARB', HPBUFFERARB, [HDC, c_int, c_int, c_int, POINTER(c_int)], 'ARB_pbuffer') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:408 +wglGetPbufferDCARB = _link_function('wglGetPbufferDCARB', HDC, [HPBUFFERARB], 'ARB_pbuffer') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:409 +wglReleasePbufferDCARB = _link_function('wglReleasePbufferDCARB', c_int, [HPBUFFERARB, HDC], 'ARB_pbuffer') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:410 +wglDestroyPbufferARB = _link_function('wglDestroyPbufferARB', BOOL, [HPBUFFERARB], 'ARB_pbuffer') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:411 +wglQueryPbufferARB = _link_function('wglQueryPbufferARB', BOOL, [HPBUFFERARB, c_int, POINTER(c_int)], 'ARB_pbuffer') + +PFNWGLCREATEPBUFFERARBPROC = CFUNCTYPE(HPBUFFERARB, HDC, c_int, c_int, c_int, POINTER(c_int)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:413 +PFNWGLGETPBUFFERDCARBPROC = CFUNCTYPE(HDC, HPBUFFERARB) # http://developer.download.nvidia.com/opengl/includes/wglext.h:414 +PFNWGLRELEASEPBUFFERDCARBPROC = CFUNCTYPE(c_int, HPBUFFERARB, HDC) # http://developer.download.nvidia.com/opengl/includes/wglext.h:415 +PFNWGLDESTROYPBUFFERARBPROC = CFUNCTYPE(BOOL, HPBUFFERARB) # http://developer.download.nvidia.com/opengl/includes/wglext.h:416 +PFNWGLQUERYPBUFFERARBPROC = CFUNCTYPE(BOOL, HPBUFFERARB, c_int, POINTER(c_int)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:417 +# ARB_render_texture (http://developer.download.nvidia.com/opengl/includes/wglext.h:420) +WGL_ARB_render_texture = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:421 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:423 +wglBindTexImageARB = _link_function('wglBindTexImageARB', BOOL, [HPBUFFERARB, c_int], 'ARB_render_texture') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:424 +wglReleaseTexImageARB = _link_function('wglReleaseTexImageARB', BOOL, [HPBUFFERARB, c_int], 'ARB_render_texture') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:425 +wglSetPbufferAttribARB = _link_function('wglSetPbufferAttribARB', BOOL, [HPBUFFERARB, POINTER(c_int)], 'ARB_render_texture') + +PFNWGLBINDTEXIMAGEARBPROC = CFUNCTYPE(BOOL, HPBUFFERARB, c_int) # http://developer.download.nvidia.com/opengl/includes/wglext.h:427 +PFNWGLRELEASETEXIMAGEARBPROC = CFUNCTYPE(BOOL, HPBUFFERARB, c_int) # http://developer.download.nvidia.com/opengl/includes/wglext.h:428 +PFNWGLSETPBUFFERATTRIBARBPROC = CFUNCTYPE(BOOL, HPBUFFERARB, POINTER(c_int)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:429 +# ARB_pixel_format_float (http://developer.download.nvidia.com/opengl/includes/wglext.h:432) +WGL_ARB_pixel_format_float = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:433 +# EXT_display_color_table (http://developer.download.nvidia.com/opengl/includes/wglext.h:436) +WGL_EXT_display_color_table = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:437 +GLboolean = c_ubyte # C:\cygwin\home\Alex\pyglet\tools\wgl.h:18 +GLushort = c_ushort # C:\cygwin\home\Alex\pyglet\tools\wgl.h:25 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:439 +wglCreateDisplayColorTableEXT = _link_function('wglCreateDisplayColorTableEXT', GLboolean, [GLushort], 'EXT_display_color_table') + +GLuint = c_uint # C:\cygwin\home\Alex\pyglet\tools\wgl.h:26 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:440 +wglLoadDisplayColorTableEXT = _link_function('wglLoadDisplayColorTableEXT', GLboolean, [POINTER(GLushort), GLuint], 'EXT_display_color_table') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:441 +wglBindDisplayColorTableEXT = _link_function('wglBindDisplayColorTableEXT', GLboolean, [GLushort], 'EXT_display_color_table') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:442 +wglDestroyDisplayColorTableEXT = _link_function('wglDestroyDisplayColorTableEXT', VOID, [GLushort], 'EXT_display_color_table') + +PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC = CFUNCTYPE(GLboolean, GLushort) # http://developer.download.nvidia.com/opengl/includes/wglext.h:444 +PFNWGLLOADDISPLAYCOLORTABLEEXTPROC = CFUNCTYPE(GLboolean, POINTER(GLushort), GLuint) # http://developer.download.nvidia.com/opengl/includes/wglext.h:445 +PFNWGLBINDDISPLAYCOLORTABLEEXTPROC = CFUNCTYPE(GLboolean, GLushort) # http://developer.download.nvidia.com/opengl/includes/wglext.h:446 +PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC = CFUNCTYPE(VOID, GLushort) # http://developer.download.nvidia.com/opengl/includes/wglext.h:447 +# EXT_extensions_string (http://developer.download.nvidia.com/opengl/includes/wglext.h:450) +WGL_EXT_extensions_string = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:451 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:453 +wglGetExtensionsStringEXT = _link_function('wglGetExtensionsStringEXT', c_char_p, [], 'EXT_extensions_string') + +PFNWGLGETEXTENSIONSSTRINGEXTPROC = CFUNCTYPE(c_char_p) # http://developer.download.nvidia.com/opengl/includes/wglext.h:455 +# EXT_make_current_read (http://developer.download.nvidia.com/opengl/includes/wglext.h:458) +WGL_EXT_make_current_read = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:459 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:461 +wglMakeContextCurrentEXT = _link_function('wglMakeContextCurrentEXT', BOOL, [HDC, HDC, HGLRC], 'EXT_make_current_read') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:462 +wglGetCurrentReadDCEXT = _link_function('wglGetCurrentReadDCEXT', HDC, [], 'EXT_make_current_read') + +PFNWGLMAKECONTEXTCURRENTEXTPROC = CFUNCTYPE(BOOL, HDC, HDC, HGLRC) # http://developer.download.nvidia.com/opengl/includes/wglext.h:464 +PFNWGLGETCURRENTREADDCEXTPROC = CFUNCTYPE(HDC) # http://developer.download.nvidia.com/opengl/includes/wglext.h:465 +# EXT_pbuffer (http://developer.download.nvidia.com/opengl/includes/wglext.h:468) +WGL_EXT_pbuffer = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:469 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:471 +wglCreatePbufferEXT = _link_function('wglCreatePbufferEXT', HPBUFFEREXT, [HDC, c_int, c_int, c_int, POINTER(c_int)], 'EXT_pbuffer') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:472 +wglGetPbufferDCEXT = _link_function('wglGetPbufferDCEXT', HDC, [HPBUFFEREXT], 'EXT_pbuffer') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:473 +wglReleasePbufferDCEXT = _link_function('wglReleasePbufferDCEXT', c_int, [HPBUFFEREXT, HDC], 'EXT_pbuffer') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:474 +wglDestroyPbufferEXT = _link_function('wglDestroyPbufferEXT', BOOL, [HPBUFFEREXT], 'EXT_pbuffer') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:475 +wglQueryPbufferEXT = _link_function('wglQueryPbufferEXT', BOOL, [HPBUFFEREXT, c_int, POINTER(c_int)], 'EXT_pbuffer') + +PFNWGLCREATEPBUFFEREXTPROC = CFUNCTYPE(HPBUFFEREXT, HDC, c_int, c_int, c_int, POINTER(c_int)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:477 +PFNWGLGETPBUFFERDCEXTPROC = CFUNCTYPE(HDC, HPBUFFEREXT) # http://developer.download.nvidia.com/opengl/includes/wglext.h:478 +PFNWGLRELEASEPBUFFERDCEXTPROC = CFUNCTYPE(c_int, HPBUFFEREXT, HDC) # http://developer.download.nvidia.com/opengl/includes/wglext.h:479 +PFNWGLDESTROYPBUFFEREXTPROC = CFUNCTYPE(BOOL, HPBUFFEREXT) # http://developer.download.nvidia.com/opengl/includes/wglext.h:480 +PFNWGLQUERYPBUFFEREXTPROC = CFUNCTYPE(BOOL, HPBUFFEREXT, c_int, POINTER(c_int)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:481 +# EXT_pixel_format (http://developer.download.nvidia.com/opengl/includes/wglext.h:484) +WGL_EXT_pixel_format = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:485 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:487 +wglGetPixelFormatAttribivEXT = _link_function('wglGetPixelFormatAttribivEXT', BOOL, [HDC, c_int, c_int, UINT, POINTER(c_int), POINTER(c_int)], 'EXT_pixel_format') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:488 +wglGetPixelFormatAttribfvEXT = _link_function('wglGetPixelFormatAttribfvEXT', BOOL, [HDC, c_int, c_int, UINT, POINTER(c_int), POINTER(FLOAT)], 'EXT_pixel_format') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:489 +wglChoosePixelFormatEXT = _link_function('wglChoosePixelFormatEXT', BOOL, [HDC, POINTER(c_int), POINTER(FLOAT), UINT, POINTER(c_int), POINTER(UINT)], 'EXT_pixel_format') + +PFNWGLGETPIXELFORMATATTRIBIVEXTPROC = CFUNCTYPE(BOOL, HDC, c_int, c_int, UINT, POINTER(c_int), POINTER(c_int)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:491 +PFNWGLGETPIXELFORMATATTRIBFVEXTPROC = CFUNCTYPE(BOOL, HDC, c_int, c_int, UINT, POINTER(c_int), POINTER(FLOAT)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:492 +PFNWGLCHOOSEPIXELFORMATEXTPROC = CFUNCTYPE(BOOL, HDC, POINTER(c_int), POINTER(FLOAT), UINT, POINTER(c_int), POINTER(UINT)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:493 +# EXT_swap_control (http://developer.download.nvidia.com/opengl/includes/wglext.h:496) +WGL_EXT_swap_control = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:497 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:499 +wglSwapIntervalEXT = _link_function('wglSwapIntervalEXT', BOOL, [c_int], 'EXT_swap_control') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:500 +wglGetSwapIntervalEXT = _link_function('wglGetSwapIntervalEXT', c_int, [], 'EXT_swap_control') + +PFNWGLSWAPINTERVALEXTPROC = CFUNCTYPE(BOOL, c_int) # http://developer.download.nvidia.com/opengl/includes/wglext.h:502 +PFNWGLGETSWAPINTERVALEXTPROC = CFUNCTYPE(c_int) # http://developer.download.nvidia.com/opengl/includes/wglext.h:503 +# EXT_depth_float (http://developer.download.nvidia.com/opengl/includes/wglext.h:506) +WGL_EXT_depth_float = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:507 +# NV_vertex_array_range (http://developer.download.nvidia.com/opengl/includes/wglext.h:510) +WGL_NV_vertex_array_range = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:511 +GLsizei = c_int # C:\cygwin\home\Alex\pyglet\tools\wgl.h:23 +GLfloat = c_float # C:\cygwin\home\Alex\pyglet\tools\wgl.h:27 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:513 +wglAllocateMemoryNV = _link_function('wglAllocateMemoryNV', POINTER(c_void), [GLsizei, GLfloat, GLfloat, GLfloat], 'NV_vertex_array_range') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:514 +wglFreeMemoryNV = _link_function('wglFreeMemoryNV', None, [POINTER(None)], 'NV_vertex_array_range') + +PFNWGLALLOCATEMEMORYNVPROC = CFUNCTYPE(POINTER(c_void), GLsizei, GLfloat, GLfloat, GLfloat) # http://developer.download.nvidia.com/opengl/includes/wglext.h:516 +PFNWGLFREEMEMORYNVPROC = CFUNCTYPE(None, POINTER(None)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:517 +# 3DFX_multisample (http://developer.download.nvidia.com/opengl/includes/wglext.h:520) +WGL_3DFX_multisample = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:521 +# EXT_multisample (http://developer.download.nvidia.com/opengl/includes/wglext.h:524) +WGL_EXT_multisample = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:525 +# OML_sync_control (http://developer.download.nvidia.com/opengl/includes/wglext.h:528) +WGL_OML_sync_control = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:529 +INT64 = c_longlong # C:\cygwin\home\Alex\pyglet\tools\wgl.h:42 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:531 +wglGetSyncValuesOML = _link_function('wglGetSyncValuesOML', BOOL, [HDC, POINTER(INT64), POINTER(INT64), POINTER(INT64)], 'OML_sync_control') + +INT32 = c_int # C:\cygwin\home\Alex\pyglet\tools\wgl.h:35 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:532 +wglGetMscRateOML = _link_function('wglGetMscRateOML', BOOL, [HDC, POINTER(INT32), POINTER(INT32)], 'OML_sync_control') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:533 +wglSwapBuffersMscOML = _link_function('wglSwapBuffersMscOML', INT64, [HDC, INT64, INT64, INT64], 'OML_sync_control') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:534 +wglSwapLayerBuffersMscOML = _link_function('wglSwapLayerBuffersMscOML', INT64, [HDC, c_int, INT64, INT64, INT64], 'OML_sync_control') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:535 +wglWaitForMscOML = _link_function('wglWaitForMscOML', BOOL, [HDC, INT64, INT64, INT64, POINTER(INT64), POINTER(INT64), POINTER(INT64)], 'OML_sync_control') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:536 +wglWaitForSbcOML = _link_function('wglWaitForSbcOML', BOOL, [HDC, INT64, POINTER(INT64), POINTER(INT64), POINTER(INT64)], 'OML_sync_control') + +PFNWGLGETSYNCVALUESOMLPROC = CFUNCTYPE(BOOL, HDC, POINTER(INT64), POINTER(INT64), POINTER(INT64)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:538 +PFNWGLGETMSCRATEOMLPROC = CFUNCTYPE(BOOL, HDC, POINTER(INT32), POINTER(INT32)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:539 +PFNWGLSWAPBUFFERSMSCOMLPROC = CFUNCTYPE(INT64, HDC, INT64, INT64, INT64) # http://developer.download.nvidia.com/opengl/includes/wglext.h:540 +PFNWGLSWAPLAYERBUFFERSMSCOMLPROC = CFUNCTYPE(INT64, HDC, c_int, INT64, INT64, INT64) # http://developer.download.nvidia.com/opengl/includes/wglext.h:541 +PFNWGLWAITFORMSCOMLPROC = CFUNCTYPE(BOOL, HDC, INT64, INT64, INT64, POINTER(INT64), POINTER(INT64), POINTER(INT64)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:542 +PFNWGLWAITFORSBCOMLPROC = CFUNCTYPE(BOOL, HDC, INT64, POINTER(INT64), POINTER(INT64), POINTER(INT64)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:543 +# I3D_digital_video_control (http://developer.download.nvidia.com/opengl/includes/wglext.h:546) +WGL_I3D_digital_video_control = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:547 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:549 +wglGetDigitalVideoParametersI3D = _link_function('wglGetDigitalVideoParametersI3D', BOOL, [HDC, c_int, POINTER(c_int)], 'I3D_digital_video_control') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:550 +wglSetDigitalVideoParametersI3D = _link_function('wglSetDigitalVideoParametersI3D', BOOL, [HDC, c_int, POINTER(c_int)], 'I3D_digital_video_control') + +PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC = CFUNCTYPE(BOOL, HDC, c_int, POINTER(c_int)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:552 +PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC = CFUNCTYPE(BOOL, HDC, c_int, POINTER(c_int)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:553 +# I3D_gamma (http://developer.download.nvidia.com/opengl/includes/wglext.h:556) +WGL_I3D_gamma = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:557 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:559 +wglGetGammaTableParametersI3D = _link_function('wglGetGammaTableParametersI3D', BOOL, [HDC, c_int, POINTER(c_int)], 'I3D_gamma') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:560 +wglSetGammaTableParametersI3D = _link_function('wglSetGammaTableParametersI3D', BOOL, [HDC, c_int, POINTER(c_int)], 'I3D_gamma') + +USHORT = c_ushort # C:\cygwin\home\Alex\pyglet\tools\wgl.h:49 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:561 +wglGetGammaTableI3D = _link_function('wglGetGammaTableI3D', BOOL, [HDC, c_int, POINTER(USHORT), POINTER(USHORT), POINTER(USHORT)], 'I3D_gamma') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:562 +wglSetGammaTableI3D = _link_function('wglSetGammaTableI3D', BOOL, [HDC, c_int, POINTER(USHORT), POINTER(USHORT), POINTER(USHORT)], 'I3D_gamma') + +PFNWGLGETGAMMATABLEPARAMETERSI3DPROC = CFUNCTYPE(BOOL, HDC, c_int, POINTER(c_int)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:564 +PFNWGLSETGAMMATABLEPARAMETERSI3DPROC = CFUNCTYPE(BOOL, HDC, c_int, POINTER(c_int)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:565 +PFNWGLGETGAMMATABLEI3DPROC = CFUNCTYPE(BOOL, HDC, c_int, POINTER(USHORT), POINTER(USHORT), POINTER(USHORT)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:566 +PFNWGLSETGAMMATABLEI3DPROC = CFUNCTYPE(BOOL, HDC, c_int, POINTER(USHORT), POINTER(USHORT), POINTER(USHORT)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:567 +# I3D_genlock (http://developer.download.nvidia.com/opengl/includes/wglext.h:570) +WGL_I3D_genlock = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:571 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:573 +wglEnableGenlockI3D = _link_function('wglEnableGenlockI3D', BOOL, [HDC], 'I3D_genlock') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:574 +wglDisableGenlockI3D = _link_function('wglDisableGenlockI3D', BOOL, [HDC], 'I3D_genlock') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:575 +wglIsEnabledGenlockI3D = _link_function('wglIsEnabledGenlockI3D', BOOL, [HDC, POINTER(BOOL)], 'I3D_genlock') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:576 +wglGenlockSourceI3D = _link_function('wglGenlockSourceI3D', BOOL, [HDC, UINT], 'I3D_genlock') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:577 +wglGetGenlockSourceI3D = _link_function('wglGetGenlockSourceI3D', BOOL, [HDC, POINTER(UINT)], 'I3D_genlock') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:578 +wglGenlockSourceEdgeI3D = _link_function('wglGenlockSourceEdgeI3D', BOOL, [HDC, UINT], 'I3D_genlock') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:579 +wglGetGenlockSourceEdgeI3D = _link_function('wglGetGenlockSourceEdgeI3D', BOOL, [HDC, POINTER(UINT)], 'I3D_genlock') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:580 +wglGenlockSampleRateI3D = _link_function('wglGenlockSampleRateI3D', BOOL, [HDC, UINT], 'I3D_genlock') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:581 +wglGetGenlockSampleRateI3D = _link_function('wglGetGenlockSampleRateI3D', BOOL, [HDC, POINTER(UINT)], 'I3D_genlock') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:582 +wglGenlockSourceDelayI3D = _link_function('wglGenlockSourceDelayI3D', BOOL, [HDC, UINT], 'I3D_genlock') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:583 +wglGetGenlockSourceDelayI3D = _link_function('wglGetGenlockSourceDelayI3D', BOOL, [HDC, POINTER(UINT)], 'I3D_genlock') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:584 +wglQueryGenlockMaxSourceDelayI3D = _link_function('wglQueryGenlockMaxSourceDelayI3D', BOOL, [HDC, POINTER(UINT), POINTER(UINT)], 'I3D_genlock') + +PFNWGLENABLEGENLOCKI3DPROC = CFUNCTYPE(BOOL, HDC) # http://developer.download.nvidia.com/opengl/includes/wglext.h:586 +PFNWGLDISABLEGENLOCKI3DPROC = CFUNCTYPE(BOOL, HDC) # http://developer.download.nvidia.com/opengl/includes/wglext.h:587 +PFNWGLISENABLEDGENLOCKI3DPROC = CFUNCTYPE(BOOL, HDC, POINTER(BOOL)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:588 +PFNWGLGENLOCKSOURCEI3DPROC = CFUNCTYPE(BOOL, HDC, UINT) # http://developer.download.nvidia.com/opengl/includes/wglext.h:589 +PFNWGLGETGENLOCKSOURCEI3DPROC = CFUNCTYPE(BOOL, HDC, POINTER(UINT)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:590 +PFNWGLGENLOCKSOURCEEDGEI3DPROC = CFUNCTYPE(BOOL, HDC, UINT) # http://developer.download.nvidia.com/opengl/includes/wglext.h:591 +PFNWGLGETGENLOCKSOURCEEDGEI3DPROC = CFUNCTYPE(BOOL, HDC, POINTER(UINT)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:592 +PFNWGLGENLOCKSAMPLERATEI3DPROC = CFUNCTYPE(BOOL, HDC, UINT) # http://developer.download.nvidia.com/opengl/includes/wglext.h:593 +PFNWGLGETGENLOCKSAMPLERATEI3DPROC = CFUNCTYPE(BOOL, HDC, POINTER(UINT)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:594 +PFNWGLGENLOCKSOURCEDELAYI3DPROC = CFUNCTYPE(BOOL, HDC, UINT) # http://developer.download.nvidia.com/opengl/includes/wglext.h:595 +PFNWGLGETGENLOCKSOURCEDELAYI3DPROC = CFUNCTYPE(BOOL, HDC, POINTER(UINT)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:596 +PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC = CFUNCTYPE(BOOL, HDC, POINTER(UINT), POINTER(UINT)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:597 +# I3D_image_buffer (http://developer.download.nvidia.com/opengl/includes/wglext.h:600) +WGL_I3D_image_buffer = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:601 +LPVOID = POINTER(None) # C:\cygwin\home\Alex\pyglet\tools\wgl.h:45 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:603 +wglCreateImageBufferI3D = _link_function('wglCreateImageBufferI3D', LPVOID, [HDC, DWORD, UINT], 'I3D_image_buffer') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:604 +wglDestroyImageBufferI3D = _link_function('wglDestroyImageBufferI3D', BOOL, [HDC, LPVOID], 'I3D_image_buffer') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:605 +wglAssociateImageBufferEventsI3D = _link_function('wglAssociateImageBufferEventsI3D', BOOL, [HDC, POINTER(HANDLE), POINTER(LPVOID), POINTER(DWORD), UINT], 'I3D_image_buffer') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:606 +wglReleaseImageBufferEventsI3D = _link_function('wglReleaseImageBufferEventsI3D', BOOL, [HDC, POINTER(LPVOID), UINT], 'I3D_image_buffer') + +PFNWGLCREATEIMAGEBUFFERI3DPROC = CFUNCTYPE(LPVOID, HDC, DWORD, UINT) # http://developer.download.nvidia.com/opengl/includes/wglext.h:608 +PFNWGLDESTROYIMAGEBUFFERI3DPROC = CFUNCTYPE(BOOL, HDC, LPVOID) # http://developer.download.nvidia.com/opengl/includes/wglext.h:609 +PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC = CFUNCTYPE(BOOL, HDC, POINTER(HANDLE), POINTER(LPVOID), POINTER(DWORD), UINT) # http://developer.download.nvidia.com/opengl/includes/wglext.h:610 +PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC = CFUNCTYPE(BOOL, HDC, POINTER(LPVOID), UINT) # http://developer.download.nvidia.com/opengl/includes/wglext.h:611 +# I3D_swap_frame_lock (http://developer.download.nvidia.com/opengl/includes/wglext.h:614) +WGL_I3D_swap_frame_lock = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:615 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:617 +wglEnableFrameLockI3D = _link_function('wglEnableFrameLockI3D', BOOL, [], 'I3D_swap_frame_lock') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:618 +wglDisableFrameLockI3D = _link_function('wglDisableFrameLockI3D', BOOL, [], 'I3D_swap_frame_lock') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:619 +wglIsEnabledFrameLockI3D = _link_function('wglIsEnabledFrameLockI3D', BOOL, [POINTER(BOOL)], 'I3D_swap_frame_lock') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:620 +wglQueryFrameLockMasterI3D = _link_function('wglQueryFrameLockMasterI3D', BOOL, [POINTER(BOOL)], 'I3D_swap_frame_lock') + +PFNWGLENABLEFRAMELOCKI3DPROC = CFUNCTYPE(BOOL) # http://developer.download.nvidia.com/opengl/includes/wglext.h:622 +PFNWGLDISABLEFRAMELOCKI3DPROC = CFUNCTYPE(BOOL) # http://developer.download.nvidia.com/opengl/includes/wglext.h:623 +PFNWGLISENABLEDFRAMELOCKI3DPROC = CFUNCTYPE(BOOL, POINTER(BOOL)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:624 +PFNWGLQUERYFRAMELOCKMASTERI3DPROC = CFUNCTYPE(BOOL, POINTER(BOOL)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:625 +# I3D_swap_frame_usage (http://developer.download.nvidia.com/opengl/includes/wglext.h:628) +WGL_I3D_swap_frame_usage = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:629 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:631 +wglGetFrameUsageI3D = _link_function('wglGetFrameUsageI3D', BOOL, [POINTER(c_float)], 'I3D_swap_frame_usage') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:632 +wglBeginFrameTrackingI3D = _link_function('wglBeginFrameTrackingI3D', BOOL, [], 'I3D_swap_frame_usage') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:633 +wglEndFrameTrackingI3D = _link_function('wglEndFrameTrackingI3D', BOOL, [], 'I3D_swap_frame_usage') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:634 +wglQueryFrameTrackingI3D = _link_function('wglQueryFrameTrackingI3D', BOOL, [POINTER(DWORD), POINTER(DWORD), POINTER(c_float)], 'I3D_swap_frame_usage') + +PFNWGLGETFRAMEUSAGEI3DPROC = CFUNCTYPE(BOOL, POINTER(c_float)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:636 +PFNWGLBEGINFRAMETRACKINGI3DPROC = CFUNCTYPE(BOOL) # http://developer.download.nvidia.com/opengl/includes/wglext.h:637 +PFNWGLENDFRAMETRACKINGI3DPROC = CFUNCTYPE(BOOL) # http://developer.download.nvidia.com/opengl/includes/wglext.h:638 +PFNWGLQUERYFRAMETRACKINGI3DPROC = CFUNCTYPE(BOOL, POINTER(DWORD), POINTER(DWORD), POINTER(c_float)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:639 +# ATI_pixel_format_float (http://developer.download.nvidia.com/opengl/includes/wglext.h:642) +WGL_ATI_pixel_format_float = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:643 +# NV_render_depth_texture (http://developer.download.nvidia.com/opengl/includes/wglext.h:646) +WGL_NV_render_depth_texture = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:647 +# NV_render_texture_rectangle (http://developer.download.nvidia.com/opengl/includes/wglext.h:650) +WGL_NV_render_texture_rectangle = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:651 +# NV_float_buffer (http://developer.download.nvidia.com/opengl/includes/wglext.h:654) +WGL_NV_float_buffer = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:655 +# NV_swap_group (http://developer.download.nvidia.com/opengl/includes/wglext.h:658) +WGL_NV_swap_group = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:659 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:661 +wglJoinSwapGroupNV = _link_function('wglJoinSwapGroupNV', BOOL, [HDC, GLuint], 'NV_swap_group') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:662 +wglBindSwapBarrierNV = _link_function('wglBindSwapBarrierNV', BOOL, [GLuint, GLuint], 'NV_swap_group') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:663 +wglQuerySwapGroupNV = _link_function('wglQuerySwapGroupNV', BOOL, [HDC, POINTER(GLuint), POINTER(GLuint)], 'NV_swap_group') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:664 +wglQueryMaxSwapGroupsNV = _link_function('wglQueryMaxSwapGroupsNV', BOOL, [HDC, POINTER(GLuint), POINTER(GLuint)], 'NV_swap_group') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:665 +wglQueryFrameCountNV = _link_function('wglQueryFrameCountNV', BOOL, [HDC, POINTER(GLuint)], 'NV_swap_group') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:666 +wglResetFrameCountNV = _link_function('wglResetFrameCountNV', BOOL, [HDC], 'NV_swap_group') + +PFNWGLJOINSWAPGROUPNVPROC = CFUNCTYPE(BOOL, HDC, GLuint) # http://developer.download.nvidia.com/opengl/includes/wglext.h:668 +PFNWGLBINDSWAPBARRIERNVPROC = CFUNCTYPE(BOOL, GLuint, GLuint) # http://developer.download.nvidia.com/opengl/includes/wglext.h:669 +PFNWGLQUERYSWAPGROUPNVPROC = CFUNCTYPE(BOOL, HDC, POINTER(GLuint), POINTER(GLuint)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:670 +PFNWGLQUERYMAXSWAPGROUPSNVPROC = CFUNCTYPE(BOOL, HDC, POINTER(GLuint), POINTER(GLuint)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:671 +PFNWGLQUERYFRAMECOUNTNVPROC = CFUNCTYPE(BOOL, HDC, POINTER(GLuint)) # http://developer.download.nvidia.com/opengl/includes/wglext.h:672 +PFNWGLRESETFRAMECOUNTNVPROC = CFUNCTYPE(BOOL, HDC) # http://developer.download.nvidia.com/opengl/includes/wglext.h:673 +# NV_gpu_affinity (http://developer.download.nvidia.com/opengl/includes/wglext.h:676) +WGL_NV_gpu_affinity = 1 # http://developer.download.nvidia.com/opengl/includes/wglext.h:677 +# http://developer.download.nvidia.com/opengl/includes/wglext.h:679 +wglEnumGpusNV = _link_function('wglEnumGpusNV', BOOL, [UINT, POINTER(HGPUNV)], 'NV_gpu_affinity') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:680 +wglEnumGpuDevicesNV = _link_function('wglEnumGpuDevicesNV', BOOL, [HGPUNV, UINT, PGPU_DEVICE], 'NV_gpu_affinity') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:681 +wglCreateAffinityDCNV = _link_function('wglCreateAffinityDCNV', HDC, [POINTER(HGPUNV)], 'NV_gpu_affinity') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:682 +wglEnumGpusFromAffinityDCNV = _link_function('wglEnumGpusFromAffinityDCNV', BOOL, [HDC, UINT, POINTER(HGPUNV)], 'NV_gpu_affinity') + +# http://developer.download.nvidia.com/opengl/includes/wglext.h:683 +wglDeleteDCNV = _link_function('wglDeleteDCNV', BOOL, [HDC], 'NV_gpu_affinity') + + +__all__ = ['WIN32_LEAN_AND_MEAN', 'GLAPI', 'WGL_WGLEXT_VERSION', +'WGL_FRONT_COLOR_BUFFER_BIT_ARB', 'WGL_BACK_COLOR_BUFFER_BIT_ARB', +'WGL_DEPTH_BUFFER_BIT_ARB', 'WGL_STENCIL_BUFFER_BIT_ARB', +'WGL_SAMPLE_BUFFERS_ARB', 'WGL_SAMPLES_ARB', 'WGL_NUMBER_PIXEL_FORMATS_ARB', +'WGL_DRAW_TO_WINDOW_ARB', 'WGL_DRAW_TO_BITMAP_ARB', 'WGL_ACCELERATION_ARB', +'WGL_NEED_PALETTE_ARB', 'WGL_NEED_SYSTEM_PALETTE_ARB', +'WGL_SWAP_LAYER_BUFFERS_ARB', 'WGL_SWAP_METHOD_ARB', +'WGL_NUMBER_OVERLAYS_ARB', 'WGL_NUMBER_UNDERLAYS_ARB', 'WGL_TRANSPARENT_ARB', +'WGL_TRANSPARENT_RED_VALUE_ARB', 'WGL_TRANSPARENT_GREEN_VALUE_ARB', +'WGL_TRANSPARENT_BLUE_VALUE_ARB', 'WGL_TRANSPARENT_ALPHA_VALUE_ARB', +'WGL_TRANSPARENT_INDEX_VALUE_ARB', 'WGL_SHARE_DEPTH_ARB', +'WGL_SHARE_STENCIL_ARB', 'WGL_SHARE_ACCUM_ARB', 'WGL_SUPPORT_GDI_ARB', +'WGL_SUPPORT_OPENGL_ARB', 'WGL_DOUBLE_BUFFER_ARB', 'WGL_STEREO_ARB', +'WGL_PIXEL_TYPE_ARB', 'WGL_COLOR_BITS_ARB', 'WGL_RED_BITS_ARB', +'WGL_RED_SHIFT_ARB', 'WGL_GREEN_BITS_ARB', 'WGL_GREEN_SHIFT_ARB', +'WGL_BLUE_BITS_ARB', 'WGL_BLUE_SHIFT_ARB', 'WGL_ALPHA_BITS_ARB', +'WGL_ALPHA_SHIFT_ARB', 'WGL_ACCUM_BITS_ARB', 'WGL_ACCUM_RED_BITS_ARB', +'WGL_ACCUM_GREEN_BITS_ARB', 'WGL_ACCUM_BLUE_BITS_ARB', +'WGL_ACCUM_ALPHA_BITS_ARB', 'WGL_DEPTH_BITS_ARB', 'WGL_STENCIL_BITS_ARB', +'WGL_AUX_BUFFERS_ARB', 'WGL_NO_ACCELERATION_ARB', +'WGL_GENERIC_ACCELERATION_ARB', 'WGL_FULL_ACCELERATION_ARB', +'WGL_SWAP_EXCHANGE_ARB', 'WGL_SWAP_COPY_ARB', 'WGL_SWAP_UNDEFINED_ARB', +'WGL_TYPE_RGBA_ARB', 'WGL_TYPE_COLORINDEX_ARB', +'ERROR_INVALID_PIXEL_TYPE_ARB', 'ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB', +'WGL_DRAW_TO_PBUFFER_ARB', 'WGL_MAX_PBUFFER_PIXELS_ARB', +'WGL_MAX_PBUFFER_WIDTH_ARB', 'WGL_MAX_PBUFFER_HEIGHT_ARB', +'WGL_PBUFFER_LARGEST_ARB', 'WGL_PBUFFER_WIDTH_ARB', 'WGL_PBUFFER_HEIGHT_ARB', +'WGL_PBUFFER_LOST_ARB', 'WGL_BIND_TO_TEXTURE_RGB_ARB', +'WGL_BIND_TO_TEXTURE_RGBA_ARB', 'WGL_TEXTURE_FORMAT_ARB', +'WGL_TEXTURE_TARGET_ARB', 'WGL_MIPMAP_TEXTURE_ARB', 'WGL_TEXTURE_RGB_ARB', +'WGL_TEXTURE_RGBA_ARB', 'WGL_NO_TEXTURE_ARB', 'WGL_TEXTURE_CUBE_MAP_ARB', +'WGL_TEXTURE_1D_ARB', 'WGL_TEXTURE_2D_ARB', 'WGL_MIPMAP_LEVEL_ARB', +'WGL_CUBE_MAP_FACE_ARB', 'WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB', +'WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB', 'WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB', +'WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB', 'WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB', +'WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB', 'WGL_FRONT_LEFT_ARB', +'WGL_FRONT_RIGHT_ARB', 'WGL_BACK_LEFT_ARB', 'WGL_BACK_RIGHT_ARB', +'WGL_AUX0_ARB', 'WGL_AUX1_ARB', 'WGL_AUX2_ARB', 'WGL_AUX3_ARB', +'WGL_AUX4_ARB', 'WGL_AUX5_ARB', 'WGL_AUX6_ARB', 'WGL_AUX7_ARB', +'WGL_AUX8_ARB', 'WGL_AUX9_ARB', 'WGL_TYPE_RGBA_FLOAT_ARB', +'ERROR_INVALID_PIXEL_TYPE_EXT', 'WGL_NUMBER_PIXEL_FORMATS_EXT', +'WGL_DRAW_TO_WINDOW_EXT', 'WGL_DRAW_TO_BITMAP_EXT', 'WGL_ACCELERATION_EXT', +'WGL_NEED_PALETTE_EXT', 'WGL_NEED_SYSTEM_PALETTE_EXT', +'WGL_SWAP_LAYER_BUFFERS_EXT', 'WGL_SWAP_METHOD_EXT', +'WGL_NUMBER_OVERLAYS_EXT', 'WGL_NUMBER_UNDERLAYS_EXT', 'WGL_TRANSPARENT_EXT', +'WGL_TRANSPARENT_VALUE_EXT', 'WGL_SHARE_DEPTH_EXT', 'WGL_SHARE_STENCIL_EXT', +'WGL_SHARE_ACCUM_EXT', 'WGL_SUPPORT_GDI_EXT', 'WGL_SUPPORT_OPENGL_EXT', +'WGL_DOUBLE_BUFFER_EXT', 'WGL_STEREO_EXT', 'WGL_PIXEL_TYPE_EXT', +'WGL_COLOR_BITS_EXT', 'WGL_RED_BITS_EXT', 'WGL_RED_SHIFT_EXT', +'WGL_GREEN_BITS_EXT', 'WGL_GREEN_SHIFT_EXT', 'WGL_BLUE_BITS_EXT', +'WGL_BLUE_SHIFT_EXT', 'WGL_ALPHA_BITS_EXT', 'WGL_ALPHA_SHIFT_EXT', +'WGL_ACCUM_BITS_EXT', 'WGL_ACCUM_RED_BITS_EXT', 'WGL_ACCUM_GREEN_BITS_EXT', +'WGL_ACCUM_BLUE_BITS_EXT', 'WGL_ACCUM_ALPHA_BITS_EXT', 'WGL_DEPTH_BITS_EXT', +'WGL_STENCIL_BITS_EXT', 'WGL_AUX_BUFFERS_EXT', 'WGL_NO_ACCELERATION_EXT', +'WGL_GENERIC_ACCELERATION_EXT', 'WGL_FULL_ACCELERATION_EXT', +'WGL_SWAP_EXCHANGE_EXT', 'WGL_SWAP_COPY_EXT', 'WGL_SWAP_UNDEFINED_EXT', +'WGL_TYPE_RGBA_EXT', 'WGL_TYPE_COLORINDEX_EXT', 'WGL_DRAW_TO_PBUFFER_EXT', +'WGL_MAX_PBUFFER_PIXELS_EXT', 'WGL_MAX_PBUFFER_WIDTH_EXT', +'WGL_MAX_PBUFFER_HEIGHT_EXT', 'WGL_OPTIMAL_PBUFFER_WIDTH_EXT', +'WGL_OPTIMAL_PBUFFER_HEIGHT_EXT', 'WGL_PBUFFER_LARGEST_EXT', +'WGL_PBUFFER_WIDTH_EXT', 'WGL_PBUFFER_HEIGHT_EXT', 'WGL_DEPTH_FLOAT_EXT', +'WGL_SAMPLE_BUFFERS_3DFX', 'WGL_SAMPLES_3DFX', 'WGL_SAMPLE_BUFFERS_EXT', +'WGL_SAMPLES_EXT', 'WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D', +'WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D', +'WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D', +'WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D', 'WGL_GAMMA_TABLE_SIZE_I3D', +'WGL_GAMMA_EXCLUDE_DESKTOP_I3D', 'WGL_GENLOCK_SOURCE_MULTIVIEW_I3D', +'WGL_GENLOCK_SOURCE_EXTENAL_SYNC_I3D', 'WGL_GENLOCK_SOURCE_EXTENAL_FIELD_I3D', +'WGL_GENLOCK_SOURCE_EXTENAL_TTL_I3D', 'WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D', +'WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D', 'WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D', +'WGL_GENLOCK_SOURCE_EDGE_RISING_I3D', 'WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D', +'WGL_IMAGE_BUFFER_MIN_ACCESS_I3D', 'WGL_IMAGE_BUFFER_LOCK_I3D', +'WGL_BIND_TO_TEXTURE_DEPTH_NV', 'WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV', +'WGL_DEPTH_TEXTURE_FORMAT_NV', 'WGL_TEXTURE_DEPTH_COMPONENT_NV', +'WGL_DEPTH_COMPONENT_NV', 'WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV', +'WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV', 'WGL_TEXTURE_RECTANGLE_NV', +'WGL_TYPE_RGBA_FLOAT_ATI', 'WGL_RGBA_FLOAT_MODE_ATI', +'WGL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI', 'WGL_FLOAT_COMPONENTS_NV', +'WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV', +'WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV', +'WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV', +'WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV', 'WGL_TEXTURE_FLOAT_R_NV', +'WGL_TEXTURE_FLOAT_RG_NV', 'WGL_TEXTURE_FLOAT_RGB_NV', +'WGL_TEXTURE_FLOAT_RGBA_NV', 'WGL_ERROR_INCOMPATIBLE_AFFINITY_MASKS_NV', +'WGL_ERROR_MISSING_AFFINITY_MASK_NV', 'HPBUFFERARB', 'HPBUFFEREXT', 'HGPUNV', +'GPU_DEVICE', 'PGPU_DEVICE', 'WGL_ARB_buffer_region', +'wglCreateBufferRegionARB', 'wglDeleteBufferRegionARB', +'wglSaveBufferRegionARB', 'wglRestoreBufferRegionARB', +'PFNWGLCREATEBUFFERREGIONARBPROC', 'PFNWGLDELETEBUFFERREGIONARBPROC', +'PFNWGLSAVEBUFFERREGIONARBPROC', 'PFNWGLRESTOREBUFFERREGIONARBPROC', +'WGL_ARB_multisample', 'WGL_ARB_extensions_string', +'wglGetExtensionsStringARB', 'PFNWGLGETEXTENSIONSSTRINGARBPROC', +'WGL_ARB_pixel_format', 'wglGetPixelFormatAttribivARB', +'wglGetPixelFormatAttribfvARB', 'wglChoosePixelFormatARB', +'PFNWGLGETPIXELFORMATATTRIBIVARBPROC', 'PFNWGLGETPIXELFORMATATTRIBFVARBPROC', +'PFNWGLCHOOSEPIXELFORMATARBPROC', 'WGL_ARB_make_current_read', +'wglMakeContextCurrentARB', 'wglGetCurrentReadDCARB', +'PFNWGLMAKECONTEXTCURRENTARBPROC', 'PFNWGLGETCURRENTREADDCARBPROC', +'WGL_ARB_pbuffer', 'wglCreatePbufferARB', 'wglGetPbufferDCARB', +'wglReleasePbufferDCARB', 'wglDestroyPbufferARB', 'wglQueryPbufferARB', +'PFNWGLCREATEPBUFFERARBPROC', 'PFNWGLGETPBUFFERDCARBPROC', +'PFNWGLRELEASEPBUFFERDCARBPROC', 'PFNWGLDESTROYPBUFFERARBPROC', +'PFNWGLQUERYPBUFFERARBPROC', 'WGL_ARB_render_texture', 'wglBindTexImageARB', +'wglReleaseTexImageARB', 'wglSetPbufferAttribARB', +'PFNWGLBINDTEXIMAGEARBPROC', 'PFNWGLRELEASETEXIMAGEARBPROC', +'PFNWGLSETPBUFFERATTRIBARBPROC', 'WGL_ARB_pixel_format_float', +'WGL_EXT_display_color_table', 'wglCreateDisplayColorTableEXT', +'wglLoadDisplayColorTableEXT', 'wglBindDisplayColorTableEXT', +'wglDestroyDisplayColorTableEXT', 'PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC', +'PFNWGLLOADDISPLAYCOLORTABLEEXTPROC', 'PFNWGLBINDDISPLAYCOLORTABLEEXTPROC', +'PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC', 'WGL_EXT_extensions_string', +'wglGetExtensionsStringEXT', 'PFNWGLGETEXTENSIONSSTRINGEXTPROC', +'WGL_EXT_make_current_read', 'wglMakeContextCurrentEXT', +'wglGetCurrentReadDCEXT', 'PFNWGLMAKECONTEXTCURRENTEXTPROC', +'PFNWGLGETCURRENTREADDCEXTPROC', 'WGL_EXT_pbuffer', 'wglCreatePbufferEXT', +'wglGetPbufferDCEXT', 'wglReleasePbufferDCEXT', 'wglDestroyPbufferEXT', +'wglQueryPbufferEXT', 'PFNWGLCREATEPBUFFEREXTPROC', +'PFNWGLGETPBUFFERDCEXTPROC', 'PFNWGLRELEASEPBUFFERDCEXTPROC', +'PFNWGLDESTROYPBUFFEREXTPROC', 'PFNWGLQUERYPBUFFEREXTPROC', +'WGL_EXT_pixel_format', 'wglGetPixelFormatAttribivEXT', +'wglGetPixelFormatAttribfvEXT', 'wglChoosePixelFormatEXT', +'PFNWGLGETPIXELFORMATATTRIBIVEXTPROC', 'PFNWGLGETPIXELFORMATATTRIBFVEXTPROC', +'PFNWGLCHOOSEPIXELFORMATEXTPROC', 'WGL_EXT_swap_control', +'wglSwapIntervalEXT', 'wglGetSwapIntervalEXT', 'PFNWGLSWAPINTERVALEXTPROC', +'PFNWGLGETSWAPINTERVALEXTPROC', 'WGL_EXT_depth_float', +'WGL_NV_vertex_array_range', 'wglAllocateMemoryNV', 'wglFreeMemoryNV', +'PFNWGLALLOCATEMEMORYNVPROC', 'PFNWGLFREEMEMORYNVPROC', +'WGL_3DFX_multisample', 'WGL_EXT_multisample', 'WGL_OML_sync_control', +'wglGetSyncValuesOML', 'wglGetMscRateOML', 'wglSwapBuffersMscOML', +'wglSwapLayerBuffersMscOML', 'wglWaitForMscOML', 'wglWaitForSbcOML', +'PFNWGLGETSYNCVALUESOMLPROC', 'PFNWGLGETMSCRATEOMLPROC', +'PFNWGLSWAPBUFFERSMSCOMLPROC', 'PFNWGLSWAPLAYERBUFFERSMSCOMLPROC', +'PFNWGLWAITFORMSCOMLPROC', 'PFNWGLWAITFORSBCOMLPROC', +'WGL_I3D_digital_video_control', 'wglGetDigitalVideoParametersI3D', +'wglSetDigitalVideoParametersI3D', 'PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC', +'PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC', 'WGL_I3D_gamma', +'wglGetGammaTableParametersI3D', 'wglSetGammaTableParametersI3D', +'wglGetGammaTableI3D', 'wglSetGammaTableI3D', +'PFNWGLGETGAMMATABLEPARAMETERSI3DPROC', +'PFNWGLSETGAMMATABLEPARAMETERSI3DPROC', 'PFNWGLGETGAMMATABLEI3DPROC', +'PFNWGLSETGAMMATABLEI3DPROC', 'WGL_I3D_genlock', 'wglEnableGenlockI3D', +'wglDisableGenlockI3D', 'wglIsEnabledGenlockI3D', 'wglGenlockSourceI3D', +'wglGetGenlockSourceI3D', 'wglGenlockSourceEdgeI3D', +'wglGetGenlockSourceEdgeI3D', 'wglGenlockSampleRateI3D', +'wglGetGenlockSampleRateI3D', 'wglGenlockSourceDelayI3D', +'wglGetGenlockSourceDelayI3D', 'wglQueryGenlockMaxSourceDelayI3D', +'PFNWGLENABLEGENLOCKI3DPROC', 'PFNWGLDISABLEGENLOCKI3DPROC', +'PFNWGLISENABLEDGENLOCKI3DPROC', 'PFNWGLGENLOCKSOURCEI3DPROC', +'PFNWGLGETGENLOCKSOURCEI3DPROC', 'PFNWGLGENLOCKSOURCEEDGEI3DPROC', +'PFNWGLGETGENLOCKSOURCEEDGEI3DPROC', 'PFNWGLGENLOCKSAMPLERATEI3DPROC', +'PFNWGLGETGENLOCKSAMPLERATEI3DPROC', 'PFNWGLGENLOCKSOURCEDELAYI3DPROC', +'PFNWGLGETGENLOCKSOURCEDELAYI3DPROC', +'PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC', 'WGL_I3D_image_buffer', +'wglCreateImageBufferI3D', 'wglDestroyImageBufferI3D', +'wglAssociateImageBufferEventsI3D', 'wglReleaseImageBufferEventsI3D', +'PFNWGLCREATEIMAGEBUFFERI3DPROC', 'PFNWGLDESTROYIMAGEBUFFERI3DPROC', +'PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC', +'PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC', 'WGL_I3D_swap_frame_lock', +'wglEnableFrameLockI3D', 'wglDisableFrameLockI3D', 'wglIsEnabledFrameLockI3D', +'wglQueryFrameLockMasterI3D', 'PFNWGLENABLEFRAMELOCKI3DPROC', +'PFNWGLDISABLEFRAMELOCKI3DPROC', 'PFNWGLISENABLEDFRAMELOCKI3DPROC', +'PFNWGLQUERYFRAMELOCKMASTERI3DPROC', 'WGL_I3D_swap_frame_usage', +'wglGetFrameUsageI3D', 'wglBeginFrameTrackingI3D', 'wglEndFrameTrackingI3D', +'wglQueryFrameTrackingI3D', 'PFNWGLGETFRAMEUSAGEI3DPROC', +'PFNWGLBEGINFRAMETRACKINGI3DPROC', 'PFNWGLENDFRAMETRACKINGI3DPROC', +'PFNWGLQUERYFRAMETRACKINGI3DPROC', 'WGL_ATI_pixel_format_float', +'WGL_NV_render_depth_texture', 'WGL_NV_render_texture_rectangle', +'WGL_NV_float_buffer', 'WGL_NV_swap_group', 'wglJoinSwapGroupNV', +'wglBindSwapBarrierNV', 'wglQuerySwapGroupNV', 'wglQueryMaxSwapGroupsNV', +'wglQueryFrameCountNV', 'wglResetFrameCountNV', 'PFNWGLJOINSWAPGROUPNVPROC', +'PFNWGLBINDSWAPBARRIERNVPROC', 'PFNWGLQUERYSWAPGROUPNVPROC', +'PFNWGLQUERYMAXSWAPGROUPSNVPROC', 'PFNWGLQUERYFRAMECOUNTNVPROC', +'PFNWGLRESETFRAMECOUNTNVPROC', 'WGL_NV_gpu_affinity', 'wglEnumGpusNV', +'wglEnumGpuDevicesNV', 'wglCreateAffinityDCNV', 'wglEnumGpusFromAffinityDCNV', +'wglDeleteDCNV'] +# END GENERATED CONTENT (do not edit above this line) + diff --git a/pyglet/graphics/__init__.py b/pyglet/graphics/__init__.py new file mode 100644 index 0000000..cc16289 --- /dev/null +++ b/pyglet/graphics/__init__.py @@ -0,0 +1,721 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +# $Id:$ + +'''Low-level graphics rendering. + +This module provides an efficient low-level abstraction over OpenGL. It gives +very good performance for rendering OpenGL primitives; far better than the +typical immediate-mode usage and, on modern graphics cards, better than using +display lists in many cases. The module is used internally by other areas of +pyglet. + +See the Programming Guide for details on how to use this graphics API. + +Batches and groups +================== + +Without even needing to understand the details on how to draw primitives with +the graphics API, developers can make use of `Batch` and `Group` +objects to improve performance of sprite and text rendering. + +The `Sprite`, `Label` and `TextLayout` classes all accept a ``batch`` and +``group`` parameter in their constructors. A batch manages a set of objects +that will be drawn all at once, and a group describes the manner in which an +object is drawn. + +The following example creates a batch, adds two sprites to the batch, and then +draws the entire batch:: + + batch = pyglet.graphics.Batch() + car = pyglet.sprite.Sprite(car_image, batch=batch) + boat = pyglet.sprite.Sprite(boat_image, batch=batch) + + def on_draw() + batch.draw() + +Drawing a complete batch is much faster than drawing the items in the batch +individually, especially when those items belong to a common group. + +Groups describe the OpenGL state required for an item. This is for the most +part managed by the sprite and text classes, however you can also use groups +to ensure items are drawn in a particular order. For example, the following +example adds a background sprite which is guaranteed to be drawn before the +car and the boat:: + + batch = pyglet.graphics.Batch() + background = pyglet.graphics.OrderedGroup(0) + foreground = pyglet.graphics.OrderedGroup(1) + + background = pyglet.sprite.Sprite(background_image, + batch=batch, group=background) + car = pyglet.sprite.Sprite(car_image, batch=batch, group=foreground) + boat = pyglet.sprite.Sprite(boat_image, batch=batch, group=foreground) + + def on_draw() + batch.draw() + +It's preferable to manage sprites and text objects within as few batches as +possible. If the drawing of sprites or text objects need to be interleaved +with other drawing that does not use the graphics API, multiple batches will +be required. + +Data item parameters +==================== + +Many of the functions and methods in this module accept any number of ``data`` +parameters as their final parameters. In the documentation these are notated +as ``*data`` in the formal parameter list. + +A data parameter describes a vertex attribute format and an optional sequence +to initialise that attribute. Examples of common attribute formats are: + +``"v3f"`` + Vertex position, specified as three floats. +``"c4B"`` + Vertex color, specifed as four unsigned bytes. +``"t2f"`` + Texture coordinate, specified as two floats. + +See `pyglet.graphics.vertexattribute` for the complete syntax of the vertex +format string. + +When no initial data is to be given, the data item is just the format string. +For example, the following creates a 2 element vertex list with position and +color attributes:: + + vertex_list = pyglet.graphics.vertex_list(2, 'v2f', 'c4B') + +When initial data is required, wrap the format string and the initial data in +a tuple, for example:: + + vertex_list = pyglet.graphics.vertex_list(2, + ('v2f', (0.0, 1.0, 1.0, 0.0)), + ('c4B', (255, 255, 255, 255) * 2)) + +Drawing modes +============= + +Methods in this module that accept a ``mode`` parameter will accept any value +in the OpenGL drawing mode enumeration; for example, ``GL_POINTS``, +``GL_LINES``, ``GL_TRIANGLES``, etc. + +Because of the way the graphics API renders multiple primitives with shared +state, ``GL_POLYGON``, ``GL_LINE_LOOP`` and ``GL_TRIANGLE_FAN`` cannot be used +--- the results are undefined. + +When using ``GL_LINE_STRIP``, ``GL_TRIANGLE_STRIP`` or ``GL_QUAD_STRIP`` care +must be taken to insert degenrate vertices at the beginning and end of each +vertex list. For example, given the vertex list:: + + A, B, C, D + +the correct vertex list to provide the vertex list is:: + + A, A, B, C, D, D + +Alternatively, the ``NV_primitive_restart`` extension can be used if it is +present. This also permits use of ``GL_POLYGON``, ``GL_LINE_LOOP`` and +``GL_TRIANGLE_FAN``. Unfortunatley the extension is not provided by older +video drivers, and requires indexed vertex lists. + +:since: pyglet 1.1 +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: $' + +import ctypes + +import pyglet +from pyglet.gl import * +from pyglet import gl +from pyglet.graphics import vertexbuffer, vertexattribute, vertexdomain + +_debug_graphics_batch = pyglet.options['debug_graphics_batch'] + +def draw(size, mode, *data): + '''Draw a primitive immediately. + + :Parameters: + `size` : int + Number of vertices given + `mode` : int + OpenGL drawing mode, e.g. ``GL_TRIANGLES`` + `data` : data items + Attribute formats and data. See the module summary for + details. + + ''' + glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT) + + buffers = [] + for format, array in data: + attribute = vertexattribute.create_attribute(format) + assert size == len(array) // attribute.count, \ + 'Data for %s is incorrect length' % format + buffer = vertexbuffer.create_mappable_buffer( + size * attribute.stride, vbo=False) + + attribute.set_region(buffer, 0, size, array) + attribute.enable() + attribute.set_pointer(buffer.ptr) + buffers.append(buffer) + + glDrawArrays(mode, 0, size) + glFlush() + + glPopClientAttrib() + +def draw_indexed(size, mode, indices, *data): + '''Draw a primitive with indexed vertices immediately. + + :Parameters: + `size` : int + Number of vertices given + `mode` : int + OpenGL drawing mode, e.g. ``GL_TRIANGLES`` + `indices` : sequence of int + Sequence of integers giving indices into the vertex list. + `data` : data items + Attribute formats and data. See the module summary for details. + + ''' + glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT) + + buffers = [] + for format, array in data: + attribute = vertexattribute.create_attribute(format) + assert size == len(array) // attribute.count, \ + 'Data for %s is incorrect length' % format + buffer = vertexbuffer.create_mappable_buffer( + size * attribute.stride, vbo=False) + + attribute.set_region(buffer, 0, size, array) + attribute.enable() + attribute.set_pointer(buffer.ptr) + buffers.append(buffer) + + if size <= 0xff: + index_type = GL_UNSIGNED_BYTE + index_c_type = ctypes.c_ubyte + elif size <= 0xffff: + index_type = GL_UNSIGNED_SHORT + index_c_type = ctypes.c_ushort + else: + index_type = GL_UNSIGNED_INT + index_c_type = ctypes.c_uint + + index_array = (index_c_type * len(indices))(*indices) + glDrawElements(mode, len(indices), index_type, index_array) + glFlush() + + glPopClientAttrib() + +def _parse_data(data): + '''Given a list of data items, returns (formats, initial_arrays).''' + assert data, 'No attribute formats given' + + # Return tuple (formats, initial_arrays). + formats = [] + initial_arrays = [] + for i, format in enumerate(data): + if isinstance(format, tuple): + format, array = format + initial_arrays.append((i, array)) + formats.append(format) + formats = tuple(formats) + return formats, initial_arrays + +def _get_default_batch(): + shared_object_space = gl.current_context.object_space + try: + return shared_object_space.pyglet_graphics_default_batch + except AttributeError: + shared_object_space.pyglet_graphics_default_batch = Batch() + return shared_object_space.pyglet_graphics_default_batch + +def vertex_list(count, *data): + '''Create a `VertexList` not associated with a batch, group or mode. + + :Parameters: + `count` : int + The number of vertices in the list. + `data` : data items + Attribute formats and initial data for the vertex list. See the + module summary for details. + + :rtype: `VertexList` + ''' + # Note that mode=0 because the default batch is never drawn: vertex lists + # returned from this function are drawn directly by the app. + return _get_default_batch().add(count, 0, None, *data) + +def vertex_list_indexed(count, indices, *data): + '''Create an `IndexedVertexList` not associated with a batch, group or mode. + + :Parameters: + `count` : int + The number of vertices in the list. + `indices` : sequence + Sequence of integers giving indices into the vertex list. + `data` : data items + Attribute formats and initial data for the vertex list. See the + module summary for details. + + :rtype: `IndexedVertexList` + ''' + # Note that mode=0 because the default batch is never drawn: vertex lists + # returned from this function are drawn directly by the app. + return _get_default_batch().add_indexed(count, 0, None, indices, *data) + +class Batch(object): + '''Manage a collection of vertex lists for batched rendering. + + Vertex lists are added to a `Batch` using the `add` and `add_indexed` + methods. An optional group can be specified along with the vertex list, + which gives the OpenGL state required for its rendering. Vertex lists + with shared mode and group are allocated into adjacent areas of memory and + sent to the graphics card in a single operation. + + Call `VertexList.delete` to remove a vertex list from the batch. + ''' + def __init__(self): + '''Create a graphics batch.''' + # Mapping to find domain. + # group -> (attributes, mode, indexed) -> domain + self.group_map = {} + + # Mapping of group to list of children. + self.group_children = {} + + # List of top-level groups + self.top_groups = [] + + self._draw_list = [] + self._draw_list_dirty = False + + def add(self, count, mode, group, *data): + '''Add a vertex list to the batch. + + :Parameters: + `count` : int + The number of vertices in the list. + `mode` : int + OpenGL drawing mode enumeration; for example, one of + ``GL_POINTS``, ``GL_LINES``, ``GL_TRIANGLES``, etc. + See the module summary for additional information. + `group` : `Group` + Group of the vertex list, or ``None`` if no group is required. + `data` : data items + Attribute formats and initial data for the vertex list. See + the module summary for details. + + :rtype: `VertexList` + ''' + formats, initial_arrays = _parse_data(data) + domain = self._get_domain(False, mode, group, formats) + domain.__formats = formats + + # Create vertex list and initialize + vlist = domain.create(count) + for i, array in initial_arrays: + vlist._set_attribute_data(i, array) + + return vlist + + def add_indexed(self, count, mode, group, indices, *data): + '''Add an indexed vertex list to the batch. + + :Parameters: + `count` : int + The number of vertices in the list. + `mode` : int + OpenGL drawing mode enumeration; for example, one of + ``GL_POINTS``, ``GL_LINES``, ``GL_TRIANGLES``, etc. + See the module summary for additional information. + `group` : `Group` + Group of the vertex list, or ``None`` if no group is required. + `indices` : sequence + Sequence of integers giving indices into the vertex list. + `data` : data items + Attribute formats and initial data for the vertex list. See + the module summary for details. + + :rtype: `IndexedVertexList` + ''' + formats, initial_arrays = _parse_data(data) + domain = self._get_domain(True, mode, group, formats) + + # Create vertex list and initialize + vlist = domain.create(count, len(indices)) + start = vlist.start + vlist._set_index_data(map(lambda i: i + start, indices)) + for i, array in initial_arrays: + vlist._set_attribute_data(i, array) + + return vlist + + def migrate(self, vertex_list, mode, group, batch): + '''Migrate a vertex list to another batch and/or group. + + `vertex_list` and `mode` together identify the vertex list to migrate. + `group` and `batch` are new owners of the vertex list after migration. + + The results are undefined if `mode` is not correct or if `vertex_list` + does not belong to this batch (they are not checked and will not + necessarily throw an exception immediately). + + `batch` can remain unchanged if only a group change is desired. + + :Parameters: + `vertex_list` : `VertexList` + A vertex list currently belonging to this batch. + `mode` : int + The current GL drawing mode of the vertex list. + `group` : `Group` + The new group to migrate to. + `batch` : `Batch` + The batch to migrate to (or the current batch). + + ''' + formats = vertex_list.domain.__formats + domain = batch._get_domain(False, mode, group, formats) + vertex_list.migrate(domain) + + def _get_domain(self, indexed, mode, group, formats): + if group is None: + group = null_group + + # Batch group + if group not in self.group_map: + self._add_group(group) + + domain_map = self.group_map[group] + + # Find domain given formats, indices and mode + key = (formats, mode, indexed) + try: + domain = domain_map[key] + except KeyError: + # Create domain + if indexed: + domain = vertexdomain.create_indexed_domain(*formats) + else: + domain = vertexdomain.create_domain(*formats) + domain_map[key] = domain + self._draw_list_dirty = True + + return domain + + def _add_group(self, group): + self.group_map[group] = {} + if group.parent is None: + self.top_groups.append(group) + else: + if group.parent not in self.group_map: + self._add_group(group.parent) + if group.parent not in self.group_children: + self.group_children[group.parent] = [] + self.group_children[group.parent].append(group) + self._draw_list_dirty = True + + def _update_draw_list(self): + '''Visit group tree in preorder and create a list of bound methods + to call. + ''' + + def visit(group): + draw_list = [] + + # Draw domains using this group + domain_map = self.group_map[group] + for (formats, mode, indexed), domain in list(domain_map.items()): + # Remove unused domains from batch + if domain._is_empty(): + del domain_map[(formats, mode, indexed)] + continue + draw_list.append( + (lambda d, m: lambda: d.draw(m))(domain, mode)) + + # Sort and visit child groups of this group + children = self.group_children.get(group) + if children: + children.sort() + for child in list(children): + draw_list.extend(visit(child)) + + if children or domain_map: + return [group.set_state] + draw_list + [group.unset_state] + else: + # Remove unused group from batch + del self.group_map[group] + if group.parent: + self.group_children[group.parent].remove(group) + try: + del self.group_children[group] + except KeyError: + pass + try: + self.top_groups.remove(group) + except ValueError: + pass + return [] + + self._draw_list = [] + + self.top_groups.sort() + for group in list(self.top_groups): + self._draw_list.extend(visit(group)) + + self._draw_list_dirty = False + + if _debug_graphics_batch: + self._dump_draw_list() + + def _dump_draw_list(self): + def dump(group, indent=''): + print indent, 'Begin group', group + domain_map = self.group_map[group] + for _, domain in domain_map.items(): + print indent, ' ', domain + for start, size in zip(*domain.allocator.get_allocated_regions()): + print indent, ' ', 'Region %d size %d:' % (start, size) + for key, attribute in domain.attribute_names.items(): + print indent, ' ', + try: + region = attribute.get_region(attribute.buffer, + start, size) + print key, region.array[:] + except: + print key, '(unmappable)' + for child in self.group_children.get(group, ()): + dump(child, indent + ' ') + print indent, 'End group', group + + print 'Draw list for %r:' % self + for group in self.top_groups: + dump(group) + + def draw(self): + '''Draw the batch. + ''' + if self._draw_list_dirty: + self._update_draw_list() + + for func in self._draw_list: + func() + + def draw_subset(self, vertex_lists): + '''Draw only some vertex lists in the batch. + + The use of this method is highly discouraged, as it is quite + inefficient. Usually an application can be redesigned so that batches + can always be drawn in their entirety, using `draw`. + + The given vertex lists must belong to this batch; behaviour is + undefined if this condition is not met. + + :Parameters: + `vertex_lists` : sequence of `VertexList` or `IndexedVertexList` + Vertex lists to draw. + + ''' + # Horrendously inefficient. + def visit(group): + group.set_state() + + # Draw domains using this group + domain_map = self.group_map[group] + for (_, mode, _), domain in domain_map.items(): + for list in vertex_lists: + if list.domain is domain: + list.draw(mode) + + # Sort and visit child groups of this group + children = self.group_children.get(group) + if children: + children.sort() + for child in children: + visit(child) + + group.unset_state() + + self.top_groups.sort() + for group in self.top_groups: + visit(group) + +class Group(object): + '''Group of common OpenGL state. + + Before a vertex list is rendered, its group's OpenGL state is set; as are + that state's ancestors' states. This can be defined arbitrarily on + subclasses; the default state change has no effect, and groups vertex + lists only in the order in which they are drawn. + ''' + def __init__(self, parent=None): + '''Create a group. + + :Parameters: + `parent` : `Group` + Group to contain this group; its state will be set before this + state's. + + ''' + self.parent = parent + + def set_state(self): + '''Apply the OpenGL state change. + + The default implementation does nothing.''' + pass + + def unset_state(self): + '''Repeal the OpenGL state change. + + The default implementation does nothing.''' + pass + + def set_state_recursive(self): + '''Set this group and its ancestry. + + Call this method if you are using a group in isolation: the + parent groups will be called in top-down order, with this class's + `set` being called last. + ''' + if self.parent: + self.parent.set_state_recursive() + self.set_state() + + def unset_state_recursive(self): + '''Unset this group and its ancestry. + + The inverse of `set_state_recursive`. + ''' + self.unset_state() + if self.parent: + self.parent.unset_state_recursive() + +class NullGroup(Group): + '''The default group class used when ``None`` is given to a batch. + + This implementation has no effect. + ''' + pass + +#: The default group. +#: +#: :type: `Group` +null_group = NullGroup() + +class TextureGroup(Group): + '''A group that enables and binds a texture. + + Texture groups are equal if their textures' targets and names are equal. + ''' + # Don't use this, create your own group classes that are more specific. + # This is just an example. + def __init__(self, texture, parent=None): + '''Create a texture group. + + :Parameters: + `texture` : `Texture` + Texture to bind. + `parent` : `Group` + Parent group. + + ''' + super(TextureGroup, self).__init__(parent) + self.texture = texture + + def set_state(self): + glEnable(self.texture.target) + glBindTexture(self.texture.target, self.texture.id) + + def unset_state(self): + glDisable(self.texture.target) + + def __hash__(self): + return hash((self.texture.target, self.texture.id, self.parent)) + + def __eq__(self, other): + return (self.__class__ is other.__class__ and + self.texture.target == other.texture.target and + self.texture.id == other.texture.id and + self.parent == other.parent) + + def __repr__(self): + return '%s(id=%d)' % (self.__class__.__name__, self.texture.id) + +class OrderedGroup(Group): + '''A group with partial order. + + Ordered groups with a common parent are rendered in ascending order of + their ``order`` field. This is a useful way to render multiple layers of + a scene within a single batch. + ''' + # This can be useful as a top-level group, or as a superclass for other + # groups that need to be ordered. + # + # As a top-level group it's useful because graphics can be composited in a + # known order even if they don't know about each other or share any known + # group. + def __init__(self, order, parent=None): + '''Create an ordered group. + + :Parameters: + `order` : int + Order of this group. + `parent` : `Group` + Parent of this group. + + ''' + super(OrderedGroup, self).__init__(parent) + self.order = order + + def __cmp__(self, other): + if isinstance(other, OrderedGroup): + return cmp(self.order, other.order) + return -1 + + def __eq__(self, other): + return (self.__class__ is other.__class__ and + self.order == other.order and + self.parent == other.parent) + + def __hash__(self): + return hash((self.order, self.parent)) + + def __repr__(self): + return '%s(%d)' % (self.__class__.__name__, self.order) diff --git a/pyglet/graphics/allocation.py b/pyglet/graphics/allocation.py new file mode 100644 index 0000000..b212393 --- /dev/null +++ b/pyglet/graphics/allocation.py @@ -0,0 +1,390 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +# $Id:$ + +'''Memory allocation algorithm for vertex arrays and buffers. + +The region allocator is used to allocate vertex indices within a vertex +domain's multiple buffers. ("Buffer" refers to any abstract buffer presented +by `pyglet.graphics.vertexbuffer`. + +The allocator will at times request more space from the buffers. The current +policy is to double the buffer size when there is not enough room to fulfil an +allocation. The buffer is never resized smaller. + +The allocator maintains references to free space only; it is the caller's +responsibility to mantain the allocated regions. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: $' + +# Common cases: +# -regions will be the same size (instances of same object, e.g. sprites) +# -regions will not usually be resized (only exception is text) +# -alignment of 4 vertices (glyphs, sprites, images, ...) +# +# Optimise for: +# -keeping regions adjacent, reduce the number of entries in glMultiDrawArrays +# -finding large blocks of allocated regions quickly (for drawing) +# -finding block of unallocated space is the _uncommon_ case! +# +# Decisions: +# -don't over-allocate regions to any alignment -- this would require more +# work in finding the allocated spaces (for drawing) and would result in +# more entries in glMultiDrawArrays +# -don't move blocks when they truncate themselves. try not to allocate the +# space they freed too soon (they will likely need grow back into it later, +# and growing will usually require a reallocation). +# -allocator does not track individual allocated regions. Trusts caller +# to provide accurate (start, size) tuple, which completely describes +# a region from the allocator's point of view. +# -this means that compacting is probably not feasible, or would be hideously +# expensive + +class AllocatorMemoryException(Exception): + '''The buffer is not large enough to fulfil an allocation. + + Raised by `Allocator` methods when the operation failed due to lack of + buffer space. The buffer should be increased to at least + requested_capacity and then the operation retried (guaranteed to + pass second time). + ''' + + def __init__(self, requested_capacity): + self.requested_capacity = requested_capacity + +class Allocator(object): + '''Buffer space allocation implementation.''' + def __init__(self, capacity): + '''Create an allocator for a buffer of the specified capacity. + + :Parameters: + `capacity` : int + Maximum size of the buffer. + + ''' + self.capacity = capacity + + # Allocated blocks. Start index and size in parallel lists. + # + # # = allocated, - = free + # + # 0 3 5 15 20 24 40 + # |###--##########-----####----------------------| + # + # starts = [0, 5, 20] + # sizes = [3, 10, 4] + # + # To calculate free blocks: + # for i in range(0, len(starts)): + # free_start[i] = starts[i] + sizes[i] + # free_size[i] = starts[i+1] - free_start[i] + # free_size[i+1] = self.capacity - free_start[-1] + + self.starts = [] + self.sizes = [] + + def set_capacity(self, size): + '''Resize the maximum buffer size. + + The capaity cannot be reduced. + + :Parameters: + `size` : int + New maximum size of the buffer. + + ''' + assert size > self.capacity + self.capacity = size + + def alloc(self, size): + '''Allocate memory in the buffer. + + Raises `AllocatorMemoryException` if the allocation cannot be + fulfilled. + + :Parameters: + `size` : int + Size of region to allocate. + + :rtype: int + :return: Starting index of the allocated region. + ''' + assert size > 0 + + # return start + # or raise AllocatorMemoryException + + if not self.starts: + if size <= self.capacity: + self.starts.append(0) + self.sizes.append(size) + return 0 + else: + raise AllocatorMemoryException(size) + + # Allocate in a free space + free_start = self.starts[0] + self.sizes[0] + for i, (alloc_start, alloc_size) in \ + enumerate(zip(self.starts[1:], self.sizes[1:])): + # Danger! + # i is actually index - 1 because of slicing above... + # starts[i] points to the block before this free space + # starts[i+1] points to the block after this free space, and is + # always valid. + free_size = alloc_start - free_start + if free_size == size: + # Merge previous block with this one (removing this free space) + self.sizes[i] += free_size + alloc_size + del self.starts[i+1] + del self.sizes[i+1] + return free_start + elif free_size > size: + # Increase size of previous block to intrude into this free + # space. + self.sizes[i] += size + return free_start + free_start = alloc_start + alloc_size + + # Allocate at end of capacity + free_size = self.capacity - free_start + if free_size >= size: + self.sizes[-1] += size + return free_start + + raise AllocatorMemoryException(self.capacity + size - free_size) + + def realloc(self, start, size, new_size): + '''Reallocate a region of the buffer. + + This is more efficient than separate `dealloc` and `alloc` calls, as + the region can often be resized in-place. + + Raises `AllocatorMemoryException` if the allocation cannot be + fulfilled. + + :Parameters: + `start` : int + Current starting index of the region. + `size` : int + Current size of the region. + `new_size` : int + New size of the region. + + ''' + assert size > 0 and new_size > 0 + + # return start + # or raise AllocatorMemoryException + + # Truncation is the same as deallocating the tail cruft + if new_size < size: + self.dealloc(start + new_size, size - new_size) + return start + + # Find which block it lives in + for i, (alloc_start, alloc_size) in \ + enumerate(zip(*(self.starts, self.sizes))): + p = start - alloc_start + if p >= 0 and size <= alloc_size - p: + break + if not (p >= 0 and size <= alloc_size - p): + print zip(self.starts, self.sizes) + print start, size, new_size + print p, alloc_start, alloc_size + assert p >= 0 and size <= alloc_size - p, 'Region not allocated' + + if size == alloc_size - p: + # Region is at end of block. Find how much free space is after + # it. + is_final_block = i == len(self.starts) - 1 + if not is_final_block: + free_size = self.starts[i + 1] - (start + size) + else: + free_size = self.capacity - (start + size) + + # TODO If region is an entire block being an island in free space, + # can possibly extend in both directions. + + if free_size == new_size - size and not is_final_block: + # Merge block with next (region is expanded in place to + # exactly fill the free space) + self.sizes[i] += free_size + self.sizes[i + 1] + del self.starts[i + 1] + del self.sizes[i + 1] + return start + elif free_size > new_size - size: + # Expand region in place + self.sizes[i] += new_size - size + return start + + # The block must be repositioned. Dealloc then alloc. + + # But don't do this! If alloc fails, we've already silently dealloc'd + # the original block. + # self.dealloc(start, size) + # return self.alloc(new_size) + + # It must be alloc'd first. We're not missing an optimisation + # here, because if freeing the block would've allowed for the block to + # be placed in the resulting free space, one of the above in-place + # checks would've found it. + result = self.alloc(new_size) + self.dealloc(start, size) + return result + + def dealloc(self, start, size): + '''Free a region of the buffer. + + :Parameters: + `start` : int + Starting index of the region. + `size` : int + Size of the region. + + ''' + assert size > 0 + assert self.starts + + # Find which block needs to be split + for i, (alloc_start, alloc_size) in \ + enumerate(zip(*(self.starts, self.sizes))): + p = start - alloc_start + if p >= 0 and size <= alloc_size - p: + break + + # Assert we left via the break + assert p >= 0 and size <= alloc_size - p, 'Region not allocated' + + if p == 0 and size == alloc_size: + # Remove entire block + del self.starts[i] + del self.sizes[i] + elif p == 0: + # Truncate beginning of block + self.starts[i] += size + self.sizes[i] -= size + elif size == alloc_size - p: + # Truncate end of block + self.sizes[i] -= size + else: + # Reduce size of left side, insert block at right side + # $ = dealloc'd block, # = alloc'd region from same block + # + # <------8------> + # <-5-><-6-><-7-> + # 1 2 3 4 + # #####$$$$$##### + # + # 1 = alloc_start + # 2 = start + # 3 = start + size + # 4 = alloc_start + alloc_size + # 5 = start - alloc_start = p + # 6 = size + # 7 = {8} - ({5} + {6}) = alloc_size - (p + size) + # 8 = alloc_size + # + self.sizes[i] = p + self.starts.insert(i + 1, start + size) + self.sizes.insert(i + 1, alloc_size - (p + size)) + + def get_allocated_regions(self): + '''Get a list of (aggregate) allocated regions. + + The result of this method is ``(starts, sizes)``, where ``starts`` is + a list of starting indices of the regions and ``sizes`` their + corresponding lengths. + + :rtype: (list, list) + ''' + # return (starts, sizes); len(starts) == len(sizes) + return (self.starts, self.sizes) + + def get_fragmented_free_size(self): + '''Returns the amount of space unused, not including the final + free block. + + :rtype: int + ''' + if not self.starts: + return 0 + + # Variation of search for free block. + total_free = 0 + free_start = self.starts[0] + self.sizes[0] + for i, (alloc_start, alloc_size) in \ + enumerate(zip(self.starts[1:], self.sizes[1:])): + total_free += alloc_start - free_start + free_start = alloc_start + alloc_size + + return total_free + + def get_free_size(self): + '''Return the amount of space unused. + + :rtype: int + ''' + if not self.starts: + return self.capacity + + free_end = self.capacity - (self.starts[-1] + self.sizes[-1]) + return self.get_fragmented_free_size() + free_end + + def get_usage(self): + '''Return fraction of capacity currently allocated. + + :rtype: float + ''' + return 1. - self.get_free_size() / float(self.capacity) + + def get_fragmentation(self): + '''Return fraction of free space that is not expandable. + + :rtype: float + ''' + free_size = self.get_free_size() + if free_size == 0: + return 0. + return self.get_fragmented_free_size() / float(self.get_free_size()) + + def _is_empty(self): + return not self.starts + + def __str__(self): + return 'allocs=' + repr(zip(self.starts, self.sizes)) + + def __repr__(self): + return '<%s %s>' % (self.__class__.__name__, str(self)) diff --git a/pyglet/graphics/vertexattribute.py b/pyglet/graphics/vertexattribute.py new file mode 100644 index 0000000..ee4ef0c --- /dev/null +++ b/pyglet/graphics/vertexattribute.py @@ -0,0 +1,506 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +# $Id:$ + +'''Access byte arrays as arrays of vertex attributes. + +Use `create_attribute` to create an attribute accessor given a simple format +string. Alternatively, the classes may be constructed directly. + +Attribute format strings +======================== + +An attribute format string specifies the format of a vertex attribute. Format +strings are accepted by the `create_attribute` function as well as most +methods in the `pyglet.graphics` module. + +Format strings have the following (BNF) syntax:: + + attribute ::= ( name | index 'g' 'n'? ) count type + +``name`` describes the vertex attribute, and is one of the following +constants for the predefined attributes: + +``c`` + Vertex color +``e`` + Edge flag +``f`` + Fog coordinate +``n`` + Normal vector +``s`` + Secondary color +``t`` + Texture coordinate +``v`` + Vertex coordinate + +You can alternatively create a generic indexed vertex attribute by +specifying its index in decimal followed by the constant ``g``. For +example, ``0g`` specifies the generic vertex attribute with index 0. +If the optional constant ``n`` is present after the ``g``, the +attribute is normalised to the range ``[0, 1]`` or ``[-1, 1]`` within +the range of the data type. + +``count`` gives the number of data components in the attribute. For +example, a 3D vertex position has a count of 3. Some attributes +constrain the possible counts that can be used; for example, a normal +vector must have a count of 3. + +``type`` gives the data type of each component of the attribute. The +following types can be used: + +``b`` + ``GLbyte`` +``B`` + ``GLubyte`` +``s`` + ``GLshort`` +``S`` + ``GLushort`` +``i`` + ``GLint`` +``I`` + ``GLuint`` +``f`` + ``GLfloat`` +``d`` + ``GLdouble`` + +Some attributes constrain the possible data types; for example, +normal vectors must use one of the signed data types. The use of +some data types, while not illegal, may have severe performance +concerns. For example, the use of ``GLdouble`` is discouraged, +and colours should be specified with ``GLubyte``. + +Whitespace is prohibited within the format string. + +Some examples follow: + +``v3f`` + 3-float vertex position +``c4b`` + 4-byte colour +``1eb`` + Edge flag +``0g3f`` + 3-float generic vertex attribute 0 +``1gn1i`` + Integer generic vertex attribute 1, normalized to [-1, 1] +``2gn4B`` + 4-byte generic vertex attribute 2, normalized to [0, 1] (because + the type is unsigned) + +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: $' + +import ctypes +import re + +from pyglet.gl import * +from pyglet.graphics import vertexbuffer + +_c_types = { + GL_BYTE: ctypes.c_byte, + GL_UNSIGNED_BYTE: ctypes.c_ubyte, + GL_SHORT: ctypes.c_short, + GL_UNSIGNED_SHORT: ctypes.c_ushort, + GL_INT: ctypes.c_int, + GL_UNSIGNED_INT: ctypes.c_uint, + GL_FLOAT: ctypes.c_float, + GL_DOUBLE: ctypes.c_double, +} + +_gl_types = { + 'b': GL_BYTE, + 'B': GL_UNSIGNED_BYTE, + 's': GL_SHORT, + 'S': GL_UNSIGNED_SHORT, + 'i': GL_INT, + 'I': GL_UNSIGNED_INT, + 'f': GL_FLOAT, + 'd': GL_DOUBLE, +} + +_attribute_format_re = re.compile(r''' + (?P + [cefnstv] | + (?P[0-9]+) g + (?Pn?)) + (?P[1234]) + (?P[bBsSiIfd]) +''', re.VERBOSE) + +_attribute_cache = {} + +def _align(v, align): + return ((v - 1) & ~(align - 1)) + align + +def interleave_attributes(attributes): + '''Interleave attribute offsets. + + Adjusts the offsets and strides of the given attributes so that + they are interleaved. Alignment constraints are respected. + + :Parameters: + `attributes` : sequence of `AbstractAttribute` + Attributes to interleave in-place. + + ''' + stride = 0 + max_size = 0 + for attribute in attributes: + stride = _align(stride, attribute.align) + attribute.offset = stride + stride += attribute.size + max_size = max(max_size, attribute.size) + stride = _align(stride, max_size) + for attribute in attributes: + attribute.stride = stride + +def serialize_attributes(count, attributes): + '''Serialize attribute offsets. + + Adjust the offsets of the given attributes so that they are + packed serially against each other for `count` vertices. + + :Parameters: + `count` : int + Number of vertices. + `attributes` : sequence of `AbstractAttribute` + Attributes to serialze in-place. + + ''' + offset = 0 + for attribute in attributes: + offset = _align(offset, attribute.align) + attribute.offset = offset + offset += count * attribute.stride + +def create_attribute(format): + '''Create a vertex attribute description from a format string. + + The initial stride and offset of the attribute will be 0. + + :Parameters: + `format` : str + Attribute format string. See the module summary for details. + + :rtype: `AbstractAttribute` + ''' + try: + cls, args = _attribute_cache[format] + return cls(*args) + except KeyError: + pass + + match = _attribute_format_re.match(format) + assert match, 'Invalid attribute format %r' % format + count = int(match.group('count')) + gl_type = _gl_types[match.group('type')] + generic_index = match.group('generic_index') + if generic_index: + normalized = match.group('generic_normalized') + attr_class = GenericAttribute + args = int(generic_index), normalized, count, gl_type + else: + name = match.group('name') + attr_class = _attribute_classes[name] + if attr_class._fixed_count: + assert count == attr_class._fixed_count, \ + 'Attributes named "%s" must have count of %d' % ( + name, attr_class._fixed_count) + args = (gl_type,) + else: + args = (count, gl_type) + + _attribute_cache[format] = attr_class, args + return attr_class(*args) + +class AbstractAttribute(object): + '''Abstract accessor for an attribute in a mapped buffer. + ''' + + _fixed_count = None + + def __init__(self, count, gl_type): + '''Create the attribute accessor. + + :Parameters: + `count` : int + Number of components in the attribute. + `gl_type` : int + OpenGL type enumerant; for example, ``GL_FLOAT`` + + ''' + assert count in (1, 2, 3, 4), 'Component count out of range' + self.gl_type = gl_type + self.c_type = _c_types[gl_type] + self.count = count + self.align = ctypes.sizeof(self.c_type) + self.size = count * self.align + self.stride = self.size + self.offset = 0 + + def enable(self): + '''Enable the attribute using ``glEnableClientState``.''' + raise NotImplementedError('abstract') + + def set_pointer(self, offset): + '''Setup this attribute to point to the currently bound buffer at + the given offset. + + ``offset`` should be based on the currently bound buffer's ``ptr`` + member. + + :Parameters: + `offset` : int + Pointer offset to the currently bound buffer for this + attribute. + + ''' + raise NotImplementedError('abstract') + + def get_region(self, buffer, start, count): + '''Map a buffer region using this attribute as an accessor. + + The returned region can be modified as if the buffer was a contiguous + array of this attribute (though it may actually be interleaved or + otherwise non-contiguous). + + The returned region consists of a contiguous array of component + data elements. For example, if this attribute uses 3 floats per + vertex, and the `count` parameter is 4, the number of floats mapped + will be ``3 * 4 = 12``. + + :Parameters: + `buffer` : `AbstractMappable` + The buffer to map. + `start` : int + Offset of the first vertex to map. + `count` : int + Number of vertices to map + + :rtype: `AbstractBufferRegion` + ''' + byte_start = self.stride * start + byte_size = self.stride * count + array_count = self.count * count + if self.stride == self.size: + # non-interleaved + ptr_type = ctypes.POINTER(self.c_type * array_count) + return buffer.get_region(byte_start, byte_size, ptr_type) + else: + # interleaved + byte_start += self.offset + byte_size -= self.offset + elem_stride = self.stride // ctypes.sizeof(self.c_type) + elem_offset = self.offset // ctypes.sizeof(self.c_type) + ptr_type = ctypes.POINTER( + self.c_type * (count * elem_stride - elem_offset)) + region = buffer.get_region(byte_start, byte_size, ptr_type) + return vertexbuffer.IndirectArrayRegion( + region, array_count, self.count, elem_stride) + + def set_region(self, buffer, start, count, data): + '''Set the data over a region of the buffer. + + :Parameters: + `buffer` : AbstractMappable` + The buffer to modify. + `start` : int + Offset of the first vertex to set. + `count` : int + Number of vertices to set. + `data` : sequence + Sequence of data components. + + ''' + if self.stride == self.size: + # non-interleaved + byte_start = self.stride * start + byte_size = self.stride * count + array_count = self.count * count + data = (self.c_type * array_count)(*data) + buffer.set_data_region(data, byte_start, byte_size) + else: + # interleaved + region = self.get_region(buffer, start, count) + region[:] = data + +class ColorAttribute(AbstractAttribute): + '''Color vertex attribute.''' + + plural = 'colors' + + def __init__(self, count, gl_type): + assert count in (3, 4), 'Color attributes must have count of 3 or 4' + super(ColorAttribute, self).__init__(count, gl_type) + + def enable(self): + glEnableClientState(GL_COLOR_ARRAY) + + def set_pointer(self, pointer): + glColorPointer(self.count, self.gl_type, self.stride, + self.offset + pointer) + +class EdgeFlagAttribute(AbstractAttribute): + '''Edge flag attribute.''' + + plural = 'edge_flags' + _fixed_count = 1 + + def __init__(self, gl_type): + assert gl_type in (GL_BYTE, GL_UNSIGNED_BYTE, GL_BOOL), \ + 'Edge flag attribute must have boolean type' + super(EdgeFlagAttribute, self).__init__(1, gl_type) + + def enable(self): + glEnableClientState(GL_EDGE_FLAG_ARRAY) + + def set_pointer(self, pointer): + glEdgeFlagPointer(self.stride, self.offset + pointer) + +class FogCoordAttribute(AbstractAttribute): + '''Fog coordinate attribute.''' + + plural = 'fog_coords' + + def __init__(self, count, gl_type): + super(FogCoordAttribute, self).__init__(count, gl_type) + + def enable(self): + glEnableClientState(GL_FOG_COORD_ARRAY) + + def set_pointer(self, pointer): + glFogCoordPointer(self.count, self.gl_type, self.stride, + self.offset + pointer) + +class NormalAttribute(AbstractAttribute): + '''Normal vector attribute.''' + + plural = 'normals' + _fixed_count = 3 + + def __init__(self, gl_type): + assert gl_type in (GL_BYTE, GL_SHORT, GL_INT, GL_FLOAT, GL_DOUBLE), \ + 'Normal attribute must have signed type' + super(NormalAttribute, self).__init__(3, gl_type) + + def enable(self): + glEnableClientState(GL_NORMAL_ARRAY) + + def set_pointer(self, pointer): + glNormalPointer(self.gl_type, self.stride, self.offset + pointer) + +class SecondaryColorAttribute(AbstractAttribute): + '''Secondary color attribute.''' + + plural = 'secondary_colors' + _fixed_count = 3 + + def __init__(self, gl_type): + super(SecondaryColorAttribute, self).__init__(3, gl_type) + + def enable(self): + glEnableClientState(GL_SECONDARY_COLOR_ARRAY) + + def set_pointer(self, pointer): + glSecondaryColorPointer(3, self.gl_type, self.stride, + self.offset + pointer) + +class TexCoordAttribute(AbstractAttribute): + '''Texture coordinate attribute.''' + + plural = 'tex_coords' + + def __init__(self, count, gl_type): + assert gl_type in (GL_SHORT, GL_INT, GL_INT, GL_FLOAT, GL_DOUBLE), \ + 'Texture coord attribute must have non-byte signed type' + super(TexCoordAttribute, self).__init__(count, gl_type) + + def enable(self): + glEnableClientState(GL_TEXTURE_COORD_ARRAY) + + def set_pointer(self, pointer): + glTexCoordPointer(self.count, self.gl_type, self.stride, + self.offset + pointer) + +class VertexAttribute(AbstractAttribute): + '''Vertex coordinate attribute.''' + + plural = 'vertices' + + def __init__(self, count, gl_type): + assert count > 1, \ + 'Vertex attribute must have count of 2, 3 or 4' + assert gl_type in (GL_SHORT, GL_INT, GL_INT, GL_FLOAT, GL_DOUBLE), \ + 'Vertex attribute must have signed type larger than byte' + super(VertexAttribute, self).__init__(count, gl_type) + + def enable(self): + glEnableClientState(GL_VERTEX_ARRAY) + + def set_pointer(self, pointer): + glVertexPointer(self.count, self.gl_type, self.stride, + self.offset + pointer) + +class GenericAttribute(AbstractAttribute): + '''Generic vertex attribute, used by shader programs.''' + + def __init__(self, index, normalized, count, gl_type): + self.normalized = bool(normalized) + self.index = index + super(GenericAttribute, self).__init__(count, gl_type) + + def enable(self): + glEnableVertexAttribArray(self.index) + + def set_pointer(self, pointer): + glVertexAttribPointer(self.index, self.count, self.gl_type, + self.normalized, self.stride, + self.offset + pointer) + +_attribute_classes = { + 'c': ColorAttribute, + 'e': EdgeFlagAttribute, + 'f': FogCoordAttribute, + 'n': NormalAttribute, + 's': SecondaryColorAttribute, + 't': TexCoordAttribute, + 'v': VertexAttribute, +} diff --git a/pyglet/graphics/vertexbuffer.py b/pyglet/graphics/vertexbuffer.py new file mode 100644 index 0000000..b5226d8 --- /dev/null +++ b/pyglet/graphics/vertexbuffer.py @@ -0,0 +1,597 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +# $Id:$ + +'''Byte abstractions of Vertex Buffer Objects and vertex arrays. + +Use `create_buffer` or `create_mappable_buffer` to create a Vertex Buffer +Object, or a vertex array if VBOs are not supported by the current context. + +Buffers can optionally be created "mappable" (incorporating the +`AbstractMappable` mix-in). In this case the buffer provides a ``get_region`` +method which provides the most efficient path for updating partial data within +the buffer. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: $' + +import ctypes +import sys + +import pyglet +from pyglet.gl import * +from pyglet.gl import gl_info + +_enable_vbo = pyglet.options['graphics_vbo'] + +# Enable workaround permanently if any VBO is created on a context that has +# this workaround. (On systems with multiple contexts where one is +# unaffected, the workaround will be enabled unconditionally on all of the +# contexts anyway. This is completely unlikely anyway). +_workaround_vbo_finish = False + +def create_buffer(size, + target=GL_ARRAY_BUFFER, + usage=GL_DYNAMIC_DRAW, + vbo=True): + '''Create a buffer of vertex data. + + :Parameters: + `size` : int + Size of the buffer, in bytes + `target` : int + OpenGL target buffer + `usage` : int + OpenGL usage constant + `vbo` : bool + True if a `VertexBufferObject` should be created if the driver + supports it; otherwise only a `VertexArray` is created. + + :rtype: `AbstractBuffer` + ''' + from pyglet import gl + if (vbo and + gl_info.have_version(1, 5) and + _enable_vbo and + not gl.current_context._workaround_vbo): + return VertexBufferObject(size, target, usage) + else: + return VertexArray(size) + +def create_mappable_buffer(size, + target=GL_ARRAY_BUFFER, + usage=GL_DYNAMIC_DRAW, + vbo=True): + '''Create a mappable buffer of vertex data. + + :Parameters: + `size` : int + Size of the buffer, in bytes + `target` : int + OpenGL target buffer + `usage` : int + OpenGL usage constant + `vbo` : bool + True if a `VertexBufferObject` should be created if the driver + supports it; otherwise only a `VertexArray` is created. + + :rtype: `AbstractBuffer` with `AbstractMappable` + ''' + from pyglet import gl + if (vbo and + gl_info.have_version(1, 5) and + _enable_vbo and + not gl.current_context._workaround_vbo): + return MappableVertexBufferObject(size, target, usage) + else: + return VertexArray(size) + +class AbstractBuffer(object): + '''Abstract buffer of byte data. + + :Ivariables: + `size` : int + Size of buffer, in bytes + `ptr` : int + Memory offset of the buffer, as used by the ``glVertexPointer`` + family of functions + `target` : int + OpenGL buffer target, for example ``GL_ARRAY_BUFFER`` + `usage` : int + OpenGL buffer usage, for example ``GL_DYNAMIC_DRAW`` + + ''' + + ptr = 0 + size = 0 + + def bind(self): + '''Bind this buffer to its OpenGL target.''' + raise NotImplementedError('abstract') + + def unbind(self): + '''Reset the buffer's OpenGL target.''' + raise NotImplementedError('abstract') + + def set_data(self, data): + '''Set the entire contents of the buffer. + + :Parameters: + `data` : sequence of int or ctypes pointer + The byte array to set. + + ''' + raise NotImplementedError('abstract') + + def set_data_region(self, data, start, length): + '''Set part of the buffer contents. + + :Parameters: + `data` : sequence of int or ctypes pointer + The byte array of data to set + `start` : int + Offset to start replacing data + `length` : int + Length of region to replace + + ''' + raise NotImplementedError('abstract') + + def map(self, invalidate=False): + '''Map the entire buffer into system memory. + + The mapped region must be subsequently unmapped with `unmap` before + performing any other operations on the buffer. + + :Parameters: + `invalidate` : bool + If True, the initial contents of the mapped block need not + reflect the actual contents of the buffer. + + :rtype: ``POINTER(ctypes.c_ubyte)`` + :return: Pointer to the mapped block in memory + ''' + raise NotImplementedError('abstract') + + def unmap(self): + '''Unmap a previously mapped memory block.''' + raise NotImplementedError('abstract') + + def resize(self, size): + '''Resize the buffer to a new size. + + :Parameters: + `size` : int + New size of the buffer, in bytes + + ''' + + def delete(self): + '''Delete this buffer, reducing system resource usage.''' + raise NotImplementedError('abstract') + +class AbstractMappable(object): + def get_region(self, start, size, ptr_type): + '''Map a region of the buffer into a ctypes array of the desired + type. This region does not need to be unmapped, but will become + invalid if the buffer is resized. + + Note that although a pointer type is required, an array is mapped. + For example:: + + get_region(0, ctypes.sizeof(c_int) * 20, ctypes.POINTER(c_int * 20)) + + will map bytes 0 to 80 of the buffer to an array of 20 ints. + + Changes to the array may not be recognised until the region's + `AbstractBufferRegion.invalidate` method is called. + + :Parameters: + `start` : int + Offset into the buffer to map from, in bytes + `size` : int + Size of the buffer region to map, in bytes + `ptr_type` : ctypes pointer type + Pointer type describing the array format to create + + :rtype: `AbstractBufferRegion` + ''' + raise NotImplementedError('abstract') + +class VertexArray(AbstractBuffer, AbstractMappable): + '''A ctypes implementation of a vertex array. + + Many of the methods on this class are effectively no-op's, such as `bind`, + `unbind`, `map`, `unmap` and `delete`; they exist in order to present + a consistent interface with `VertexBufferObject`. + + This buffer type is also mappable, and so `get_region` can be used. + ''' + + def __init__(self, size): + self.size = size + + self.array = (ctypes.c_byte * size)() + self.ptr = ctypes.cast(self.array, ctypes.c_void_p).value + + def bind(self): + pass + + def unbind(self): + pass + + def set_data(self, data): + ctypes.memmove(self.ptr, data, self.size) + + def set_data_region(self, data, start, length): + ctypes.memmove(self.ptr + start, data, length) + + def map(self, invalidate=False): + return self.array + + def unmap(self): + pass + + def get_region(self, start, size, ptr_type): + array = ctypes.cast(self.ptr + start, ptr_type).contents + return VertexArrayRegion(array) + + def delete(self): + pass + + def resize(self, size): + array = (ctypes.c_byte * size)() + ctypes.memmove(array, self.array, min(size, self.size)) + self.size = size + self.array = array + self.ptr = ctypes.cast(self.array, ctypes.c_void_p).value + + +class VertexBufferObject(AbstractBuffer): + '''Lightweight representation of an OpenGL VBO. + + The data in the buffer is not replicated in any system memory (unless it + is done so by the video driver). While this can improve memory usage and + possibly performance, updates to the buffer are relatively slow. + + This class does not implement `AbstractMappable`, and so has no + ``get_region`` method. See `MappableVertexBufferObject` for a VBO class + that does implement ``get_region``. + ''' + + def __init__(self, size, target, usage): + self.size = size + self.target = target + self.usage = usage + self._context = pyglet.gl.current_context + + id = GLuint() + glGenBuffers(1, id) + self.id = id.value + glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT) + glBindBuffer(target, self.id) + glBufferData(target, self.size, None, self.usage) + glPopClientAttrib() + + global _workaround_vbo_finish + if pyglet.gl.current_context._workaround_vbo_finish: + _workaround_vbo_finish = True + + def bind(self): + glBindBuffer(self.target, self.id) + + def unbind(self): + glBindBuffer(self.target, 0) + + def set_data(self, data): + glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT) + glBindBuffer(self.target, self.id) + glBufferData(self.target, self.size, data, self.usage) + glPopClientAttrib() + + def set_data_region(self, data, start, length): + glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT) + glBindBuffer(self.target, self.id) + glBufferSubData(self.target, start, length, data) + glPopClientAttrib() + + def map(self, invalidate=False): + glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT) + glBindBuffer(self.target, self.id) + if invalidate: + glBufferData(self.target, self.size, None, self.usage) + ptr = ctypes.cast(glMapBuffer(self.target, GL_WRITE_ONLY), + ctypes.POINTER(ctypes.c_byte * self.size)).contents + glPopClientAttrib() + return ptr + + def unmap(self): + glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT) + glUnmapBuffer(self.target) + glPopClientAttrib() + + def __del__(self): + try: + if self.id is not None: + self._context.delete_buffer(self.id) + except: + pass + + def delete(self): + id = GLuint(self.id) + glDeleteBuffers(1, id) + self.id = None + + def resize(self, size): + # Map, create a copy, then reinitialize. + temp = (ctypes.c_byte * size)() + + glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT) + glBindBuffer(self.target, self.id) + data = glMapBuffer(self.target, GL_READ_ONLY) + ctypes.memmove(temp, data, min(size, self.size)) + glUnmapBuffer(self.target) + + self.size = size + glBufferData(self.target, self.size, temp, self.usage) + glPopClientAttrib() + +class MappableVertexBufferObject(VertexBufferObject, AbstractMappable): + '''A VBO with system-memory backed store. + + Updates to the data via `set_data`, `set_data_region` and `map` will be + held in local memory until `bind` is called. The advantage is that fewer + OpenGL calls are needed, increasing performance. + + There may also be less performance penalty for resizing this buffer. + + Updates to data via `map` are committed immediately. + ''' + def __init__(self, size, target, usage): + super(MappableVertexBufferObject, self).__init__(size, target, usage) + self.data = (ctypes.c_byte * size)() + self.data_ptr = ctypes.cast(self.data, ctypes.c_void_p).value + self._dirty_min = sys.maxint + self._dirty_max = 0 + + def bind(self): + # Commit pending data + super(MappableVertexBufferObject, self).bind() + size = self._dirty_max - self._dirty_min + if size > 0: + if size == self.size: + glBufferData(self.target, self.size, self.data, self.usage) + else: + glBufferSubData(self.target, self._dirty_min, size, + self.data_ptr + self._dirty_min) + self._dirty_min = sys.maxint + self._dirty_max = 0 + + def set_data(self, data): + super(MappableVertexBufferObject, self).set_data(data) + ctypes.memmove(self.data, data, self.size) + self._dirty_min = 0 + self._dirty_max = self.size + + def set_data_region(self, data, start, length): + ctypes.memmove(self.data_ptr + start, data, length) + self._dirty_min = min(start, self._dirty_min) + self._dirty_max = max(start + length, self._dirty_max) + + def map(self, invalidate=False): + self._dirty_min = 0 + self._dirty_max = self.size + return self.data + + def unmap(self): + pass + + def get_region(self, start, size, ptr_type): + array = ctypes.cast(self.data_ptr + start, ptr_type).contents + return VertexBufferObjectRegion(self, start, start + size, array) + + def resize(self, size): + data = (ctypes.c_byte * size)() + ctypes.memmove(data, self.data, min(size, self.size)) + self.data = data + self.data_ptr = ctypes.cast(self.data, ctypes.c_void_p).value + + self.size = size + glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT) + glBindBuffer(self.target, self.id) + glBufferData(self.target, self.size, self.data, self.usage) + glPopClientAttrib() + + self._dirty_min = sys.maxint + self._dirty_max = 0 + +class AbstractBufferRegion(object): + '''A mapped region of a buffer. + + Buffer regions are obtained using `AbstractMappable.get_region`. + + :Ivariables: + `array` : ctypes array + Array of data, of the type and count requested by ``get_region``. + + ''' + def invalidate(self): + '''Mark this region as changed. + + The buffer may not be updated with the latest contents of the + array until this method is called. (However, it may not be updated + until the next time the buffer is used, for efficiency). + ''' + pass + +class VertexBufferObjectRegion(AbstractBufferRegion): + '''A mapped region of a VBO.''' + def __init__(self, buffer, start, end, array): + self.buffer = buffer + self.start = start + self.end = end + self.array = array + + def invalidate(self): + buffer = self.buffer + buffer._dirty_min = min(buffer._dirty_min, self.start) + buffer._dirty_max = max(buffer._dirty_max, self.end) + +class VertexArrayRegion(AbstractBufferRegion): + '''A mapped region of a vertex array. + + The `invalidate` method is a no-op but is provided in order to present + a consistent interface with `VertexBufferObjectRegion`. + ''' + def __init__(self, array): + self.array = array + +class IndirectArrayRegion(AbstractBufferRegion): + '''A mapped region in which data elements are not necessarily contiguous. + + This region class is used to wrap buffer regions in which the data + must be accessed with some stride. For example, in an interleaved buffer + this region can be used to access a single interleaved component as if the + data was contiguous. + ''' + def __init__(self, region, size, component_count, component_stride): + '''Wrap a buffer region. + + Use the `component_count` and `component_stride` parameters to specify + the data layout of the encapsulated region. For example, if RGBA + data is to be accessed as if it were packed RGB, ``component_count`` + would be set to 3 and ``component_stride`` to 4. If the region + contains 10 RGBA tuples, the ``size`` parameter is ``3 * 10 = 30``. + + :Parameters: + `region` : `AbstractBufferRegion` + The region with interleaved data + `size` : int + The number of elements that this region will provide access to. + `component_count` : int + The number of elements that are contiguous before some must + be skipped. + `component_stride` : int + The number of elements of interleaved data separating + the contiguous sections. + + ''' + self.region = region + self.size = size + self.count = component_count + self.stride = component_stride + self.array = self + + def __repr__(self): + return 'IndirectArrayRegion(size=%d, count=%d, stride=%d)' % ( + self.size, self.count, self.stride) + + def __getitem__(self, index): + count = self.count + if not isinstance(index, slice): + elem = index // count + j = index % count + return self.region.array[elem * self.stride + j] + + start = index.start or 0 + stop = index.stop + step = index.step or 1 + if start < 0: + start = self.size + start + if stop is None: + stop = self.size + elif stop < 0: + stop = self.size + stop + + assert step == 1 or step % count == 0, \ + 'Step must be multiple of component count' + + data_start = (start // count) * self.stride + start % count + data_stop = (stop // count) * self.stride + stop % count + data_step = step * self.stride + + # TODO stepped getitem is probably wrong, see setitem for correct. + value_step = step * count + + # ctypes does not support stepped slicing, so do the work in a list + # and copy it back. + data = self.region.array[:] + value = [0] * ((stop - start) // step) + stride = self.stride + for i in range(count): + value[i::value_step] = \ + data[data_start + i:data_stop + i:data_step] + return value + + def __setitem__(self, index, value): + count = self.count + if not isinstance(index, slice): + elem = index // count + j = index % count + self.region.array[elem * self.stride + j] = value + return + + start = index.start or 0 + stop = index.stop + step = index.step or 1 + if start < 0: + start = self.size + start + if stop is None: + stop = self.size + elif stop < 0: + stop = self.size + stop + + assert step == 1 or step % count == 0, \ + 'Step must be multiple of component count' + + data_start = (start // count) * self.stride + start % count + data_stop = (stop // count) * self.stride + stop % count + + # ctypes does not support stepped slicing, so do the work in a list + # and copy it back. + data = self.region.array[:] + if step == 1: + data_step = self.stride + value_step = count + for i in range(count): + data[data_start + i:data_stop + i:data_step] = \ + value[i::value_step] + else: + data_step = (step // count) * self.stride + data[data_start:data_stop:data_step] = value + self.region.array[:] = data + + def invalidate(self): + self.region.invalidate() diff --git a/pyglet/graphics/vertexdomain.py b/pyglet/graphics/vertexdomain.py new file mode 100644 index 0000000..d9e43a0 --- /dev/null +++ b/pyglet/graphics/vertexdomain.py @@ -0,0 +1,778 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +# $Id:$ + +'''Manage related vertex attributes within a single vertex domain. + +A vertex "domain" consists of a set of attribute descriptions that together +describe the layout of one or more vertex buffers which are used together to +specify the vertices in a primitive. Additionally, the domain manages the +buffers used to store the data and will resize them as necessary to accomodate +new vertices. + +Domains can optionally be indexed, in which case they also manage a buffer +containing vertex indices. This buffer is grown separately and has no size +relation to the attribute buffers. + +Applications can create vertices (and optionally, indices) within a domain +with the `VertexDomain.create` method. This returns a `VertexList` +representing the list of vertices created. The vertex attribute data within +the group can be modified, and the changes will be made to the underlying +buffers automatically. + +The entire domain can be efficiently drawn in one step with the +`VertexDomain.draw` method, assuming all the vertices comprise primitives of +the same OpenGL primitive mode. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: $' + +import ctypes +import re + +from pyglet.gl import * +from pyglet.graphics import allocation, vertexattribute, vertexbuffer + +_usage_format_re = re.compile(r''' + (?P[^/]*) + (/ (?P static|dynamic|stream|none))? +''', re.VERBOSE) + +_gl_usages = { + 'static': GL_STATIC_DRAW, + 'dynamic': GL_DYNAMIC_DRAW, + 'stream': GL_STREAM_DRAW, + 'none': GL_STREAM_DRAW_ARB, # Force no VBO +} + +def _nearest_pow2(v): + # From http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2 + # Credit: Sean Anderson + v -= 1 + v |= v >> 1 + v |= v >> 2 + v |= v >> 4 + v |= v >> 8 + v |= v >> 16 + return v + 1 + +def create_attribute_usage(format): + '''Create an attribute and usage pair from a format string. The + format string is as documented in `pyglet.graphics.vertexattribute`, with + the addition of an optional usage component:: + + usage ::= attribute ( '/' ('static' | 'dynamic' | 'stream' | 'none') )? + + If the usage is not given it defaults to 'dynamic'. The usage corresponds + to the OpenGL VBO usage hint, and for ``static`` also indicates a + preference for interleaved arrays. If ``none`` is specified a buffer + object is not created, and vertex data is stored in system memory. + + Some examples: + + ``v3f/stream`` + 3D vertex position using floats, for stream usage + ``c4b/static`` + 4-byte color attribute, for static usage + + :return: attribute, usage + ''' + match = _usage_format_re.match(format) + attribute_format = match.group('attribute') + attribute = vertexattribute.create_attribute(attribute_format) + usage = match.group('usage') + if usage: + vbo = not usage == 'none' + usage = _gl_usages[usage] + else: + usage = GL_DYNAMIC_DRAW + vbo = True + + return (attribute, usage, vbo) + +def create_domain(*attribute_usage_formats): + '''Create a vertex domain covering the given attribute usage formats. + See documentation for `create_attribute_usage` and + `pyglet.graphics.vertexattribute.create_attribute` for the grammar of + these format strings. + + :rtype: `VertexDomain` + ''' + attribute_usages = [create_attribute_usage(f) \ + for f in attribute_usage_formats] + return VertexDomain(attribute_usages) + +def create_indexed_domain(*attribute_usage_formats): + '''Create an indexed vertex domain covering the given attribute usage + formats. See documentation for `create_attribute_usage` and + `pyglet.graphics.vertexattribute.create_attribute` for the grammar of + these format strings. + + :rtype: `VertexDomain` + ''' + attribute_usages = [create_attribute_usage(f) \ + for f in attribute_usage_formats] + return IndexedVertexDomain(attribute_usages) + +class VertexDomain(object): + '''Management of a set of vertex lists. + + Construction of a vertex domain is usually done with the `create_domain` + function. + ''' + _version = 0 + _initial_count = 16 + + def __init__(self, attribute_usages): + self.allocator = allocation.Allocator(self._initial_count) + + static_attributes = [] + attributes = [] + self.buffer_attributes = [] # list of (buffer, attributes) + for attribute, usage, vbo in attribute_usages: + if usage == GL_STATIC_DRAW: + # Group attributes for interleaved buffer + static_attributes.append(attribute) + attributes.append(attribute) + else: + # Create non-interleaved buffer + attributes.append(attribute) + attribute.buffer = vertexbuffer.create_mappable_buffer( + attribute.stride * self.allocator.capacity, + usage=usage, vbo=vbo) + attribute.buffer.element_size = attribute.stride + attribute.buffer.attributes = (attribute,) + self.buffer_attributes.append( + (attribute.buffer, (attribute,))) + + # Create buffer for interleaved data + if static_attributes: + vertexattribute.interleave_attributes(static_attributes) + stride = static_attributes[0].stride + buffer = vertexbuffer.create_mappable_buffer( + stride * self.allocator.capacity, usage=GL_STATIC_DRAW) + buffer.element_size = stride + self.buffer_attributes.append( + (buffer, static_attributes)) + + for attribute in static_attributes: + attribute.buffer = buffer + + # Create named attributes for each attribute + self.attributes = attributes + self.attribute_names = {} + for attribute in attributes: + if isinstance(attribute, vertexattribute.GenericAttribute): + index = attribute.index + if 'generic' not in self.attributes: + self.attribute_names['generic'] = {} + assert index not in self.attribute_names['generic'], \ + 'More than one generic attribute with index %d' % index + self.attribute_names['generic'][index] = attribute + else: + name = attribute.plural + assert name not in self.attributes, \ + 'More than one "%s" attribute given' % name + self.attribute_names[name] = attribute + + def __del__(self): + # Break circular refs that Python GC seems to miss even when forced + # collection. + for attribute in self.attributes: + del attribute.buffer + + def _safe_alloc(self, count): + '''Allocate vertices, resizing the buffers if necessary.''' + try: + return self.allocator.alloc(count) + except allocation.AllocatorMemoryException, e: + capacity = _nearest_pow2(e.requested_capacity) + self._version += 1 + for buffer, _ in self.buffer_attributes: + buffer.resize(capacity * buffer.element_size) + self.allocator.set_capacity(capacity) + return self.allocator.alloc(count) + + def _safe_realloc(self, start, count, new_count): + '''Reallocate vertices, resizing the buffers if necessary.''' + try: + return self.allocator.realloc(start, count, new_count) + except allocation.AllocatorMemoryException, e: + capacity = _nearest_pow2(e.requested_capacity) + self._version += 1 + for buffer, _ in self.buffer_attributes: + buffer.resize(capacity * buffer.element_size) + self.allocator.set_capacity(capacity) + return self.allocator.realloc(start, count, new_count) + + def create(self, count): + '''Create a `VertexList` in this domain. + + :Parameters: + `count` : int + Number of vertices to create. + + :rtype: `VertexList` + ''' + start = self._safe_alloc(count) + return VertexList(self, start, count) + + def draw(self, mode, vertex_list=None): + '''Draw vertices in the domain. + + If `vertex_list` is not specified, all vertices in the domain are + drawn. This is the most efficient way to render primitives. + + If `vertex_list` specifies a `VertexList`, only primitives in that + list will be drawn. + + :Parameters: + `mode` : int + OpenGL drawing mode, e.g. ``GL_POINTS``, ``GL_LINES``, etc. + `vertex_list` : `VertexList` + Vertex list to draw, or ``None`` for all lists in this domain. + + ''' + glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT) + for buffer, attributes in self.buffer_attributes: + buffer.bind() + for attribute in attributes: + attribute.enable() + attribute.set_pointer(attribute.buffer.ptr) + if vertexbuffer._workaround_vbo_finish: + glFinish() + + if vertex_list is not None: + glDrawArrays(mode, vertex_list.start, vertex_list.count) + else: + starts, sizes = self.allocator.get_allocated_regions() + primcount = len(starts) + if primcount == 0: + pass + elif primcount == 1: + # Common case + glDrawArrays(mode, starts[0], sizes[0]) + elif gl_info.have_version(1, 4): + starts = (GLint * primcount)(*starts) + sizes = (GLsizei * primcount)(*sizes) + glMultiDrawArrays(mode, starts, sizes, primcount) + else: + for start, size in zip(starts, sizes): + glDrawArrays(mode, start, size) + + for buffer, _ in self.buffer_attributes: + buffer.unbind() + glPopClientAttrib() + + def _is_empty(self): + return not self.allocator.starts + + def __repr__(self): + return '<%s@%x %s>' % (self.__class__.__name__, id(self), + self.allocator) + +class VertexList(object): + '''A list of vertices within a `VertexDomain`. Use + `VertexDomain.create` to construct this list. + ''' + + def __init__(self, domain, start, count): + # TODO make private + self.domain = domain + self.start = start + self.count = count + + def get_size(self): + '''Get the number of vertices in the list. + + :rtype: int + ''' + return self.count + + def get_domain(self): + '''Get the domain this vertex list belongs to. + + :rtype: `VertexDomain` + ''' + return self.domain + + def draw(self, mode): + '''Draw this vertex list in the given OpenGL mode. + + :Parameters: + `mode` : int + OpenGL drawing mode, e.g. ``GL_POINTS``, ``GL_LINES``, etc. + + ''' + self.domain.draw(mode, self) + + def resize(self, count): + '''Resize this group. + + :Parameters: + `count` : int + New number of vertices in the list. + + ''' + new_start = self.domain._safe_realloc(self.start, self.count, count) + if new_start != self.start: + # Copy contents to new location + for attribute in self.domain.attributes: + old = attribute.get_region(attribute.buffer, + self.start, self.count) + new = attribute.get_region(attribute.buffer, + new_start, self.count) + new.array[:] = old.array[:] + new.invalidate() + self.start = new_start + self.count = count + + self._colors_cache_version = None + self._fog_coords_cache_version = None + self._edge_flags_cache_version = None + self._normals_cache_version = None + self._secondary_colors_cache_version = None + self._tex_coords_cache_version = None + self._vertices_cache_version = None + + def delete(self): + '''Delete this group.''' + self.domain.allocator.dealloc(self.start, self.count) + + def migrate(self, domain): + '''Move this group from its current domain and add to the specified + one. Attributes on domains must match. (In practice, used to change + parent state of some vertices). + + :Parameters: + `domain` : `VertexDomain` + Domain to migrate this vertex list to. + + ''' + assert domain.attribute_names.keys() == \ + self.domain.attribute_names.keys(), 'Domain attributes must match.' + + new_start = domain._safe_alloc(self.count) + for key, old_attribute in self.domain.attribute_names.items(): + old = old_attribute.get_region(old_attribute.buffer, + self.start, self.count) + new_attribute = domain.attribute_names[key] + new = new_attribute.get_region(new_attribute.buffer, + new_start, self.count) + new.array[:] = old.array[:] + new.invalidate() + + self.domain.allocator.dealloc(self.start, self.count) + self.domain = domain + self.start = new_start + + self._colors_cache_version = None + self._fog_coords_cache_version = None + self._edge_flags_cache_version = None + self._normals_cache_version = None + self._secondary_colors_cache_version = None + self._tex_coords_cache_version = None + self._vertices_cache_version = None + + def _set_attribute_data(self, i, data): + attribute = self.domain.attributes[i] + # TODO without region + region = attribute.get_region(attribute.buffer, self.start, self.count) + region.array[:] = data + region.invalidate() + + # --- + + def _get_colors(self): + if (self._colors_cache_version != self.domain._version): + domain = self.domain + attribute = domain.attribute_names['colors'] + self._colors_cache = attribute.get_region( + attribute.buffer, self.start, self.count) + self._colors_cache_version = domain._version + + region = self._colors_cache + region.invalidate() + return region.array + + def _set_colors(self, data): + self._get_colors()[:] = data + + _colors_cache = None + _colors_cache_version = None + colors = property(_get_colors, _set_colors, + doc='''Array of color data.''') + + # --- + + def _get_fog_coords(self): + if (self._fog_coords_cache_version != self.domain._version): + domain = self.domain + attribute = domain.attribute_names['fog_coords'] + self._fog_coords_cache = attribute.get_region( + attribute.buffer, self.start, self.count) + self._fog_coords_cache_version = domain._version + + region = self._fog_coords_cache + region.invalidate() + return region.array + + def _set_fog_coords(self, data): + self._get_fog_coords()[:] = data + + _fog_coords_cache = None + _fog_coords_cache_version = None + fog_coords = property(_get_fog_coords, _set_fog_coords, + doc='''Array of fog coordinate data.''') + + # --- + + def _get_edge_flags(self): + if (self._edge_flags_cache_version != self.domain._version): + domain = self.domain + attribute = domain.attribute_names['edge_flags'] + self._edge_flags_cache = attribute.get_region( + attribute.buffer, self.start, self.count) + self._edge_flags_cache_version = domain._version + + region = self._edge_flags_cache + region.invalidate() + return region.array + + def _set_edge_flags(self, data): + self._get_edge_flags()[:] = data + + _edge_flags_cache = None + _edge_flags_cache_version = None + edge_flags = property(_get_edge_flags, _set_edge_flags, + doc='''Array of edge flag data.''') + + # --- + + def _get_normals(self): + if (self._normals_cache_version != self.domain._version): + domain = self.domain + attribute = domain.attribute_names['normals'] + self._normals_cache = attribute.get_region( + attribute.buffer, self.start, self.count) + self._normals_cache_version = domain._version + + region = self._normals_cache + region.invalidate() + return region.array + + def _set_normals(self, data): + self._get_normals()[:] = data + + _normals_cache = None + _normals_cache_version = None + normals = property(_get_normals, _set_normals, + doc='''Array of normal vector data.''') + + # --- + + def _get_secondary_colors(self): + if (self._secondary_colors_cache_version != self.domain._version): + domain = self.domain + attribute = domain.attribute_names['secondary_colors'] + self._secondary_colors_cache = attribute.get_region( + attribute.buffer, self.start, self.count) + self._secondary_colors_cache_version = domain._version + + region = self._secondary_colors_cache + region.invalidate() + return region.array + + def _set_secondary_colors(self, data): + self._get_secondary_colors()[:] = data + + _secondary_colors_cache = None + _secondary_colors_cache_version = None + secondary_colors = property(_get_secondary_colors, _set_secondary_colors, + doc='''Array of secondary color data.''') + + # --- + + _tex_coords_cache = None + _tex_coords_cache_version = None + + def _get_tex_coords(self): + if (self._tex_coords_cache_version != self.domain._version): + domain = self.domain + attribute = domain.attribute_names['tex_coords'] + self._tex_coords_cache = attribute.get_region( + attribute.buffer, self.start, self.count) + self._tex_coords_cache_version = domain._version + + region = self._tex_coords_cache + region.invalidate() + return region.array + + def _set_tex_coords(self, data): + self._get_tex_coords()[:] = data + + tex_coords = property(_get_tex_coords, _set_tex_coords, + doc='''Array of texture coordinate data.''') + + # --- + + _vertices_cache = None + _vertices_cache_version = None + + def _get_vertices(self): + if (self._vertices_cache_version != self.domain._version): + domain = self.domain + attribute = domain.attribute_names['vertices'] + self._vertices_cache = attribute.get_region( + attribute.buffer, self.start, self.count) + self._vertices_cache_version = domain._version + + region = self._vertices_cache + region.invalidate() + return region.array + + def _set_vertices(self, data): + self._get_vertices()[:] = data + + vertices = property(_get_vertices, _set_vertices, + doc='''Array of vertex coordinate data.''') + +class IndexedVertexDomain(VertexDomain): + '''Management of a set of indexed vertex lists. + + Construction of an indexed vertex domain is usually done with the + `create_indexed_domain` function. + ''' + _initial_index_count = 16 + + def __init__(self, attribute_usages, index_gl_type=GL_UNSIGNED_INT): + super(IndexedVertexDomain, self).__init__(attribute_usages) + + self.index_allocator = allocation.Allocator(self._initial_index_count) + + self.index_gl_type = index_gl_type + self.index_c_type = vertexattribute._c_types[index_gl_type] + self.index_element_size = ctypes.sizeof(self.index_c_type) + self.index_buffer = vertexbuffer.create_mappable_buffer( + self.index_allocator.capacity * self.index_element_size, + target=GL_ELEMENT_ARRAY_BUFFER) + + def _safe_index_alloc(self, count): + '''Allocate indices, resizing the buffers if necessary.''' + try: + return self.index_allocator.alloc(count) + except allocation.AllocatorMemoryException, e: + capacity = _nearest_pow2(e.requested_capacity) + self._version += 1 + self.index_buffer.resize(capacity * self.index_element_size) + self.index_allocator.set_capacity(capacity) + return self.index_allocator.alloc(count) + + def _safe_index_realloc(self, start, count, new_count): + '''Reallocate indices, resizing the buffers if necessary.''' + try: + return self.index_allocator.realloc(start, count, new_count) + except allocation.AllocatorMemoryException, e: + capacity = _nearest_pow2(e.requested_capacity) + self._version += 1 + self.index_buffer.resize(capacity * self.index_element_size) + self.index_allocator.set_capacity(capacity) + return self.index_allocator.realloc(start, count, new_count) + + def create(self, count, index_count): + '''Create an `IndexedVertexList` in this domain. + + :Parameters: + `count` : int + Number of vertices to create + `index_count` + Number of indices to create + + ''' + start = self._safe_alloc(count) + index_start = self._safe_index_alloc(index_count) + return IndexedVertexList(self, start, count, index_start, index_count) + + def get_index_region(self, start, count): + '''Get a region of the index buffer. + + :Parameters: + `start` : int + Start of the region to map. + `count` : int + Number of indices to map. + + :rtype: Array of int + ''' + byte_start = self.index_element_size * start + byte_count = self.index_element_size * count + ptr_type = ctypes.POINTER(self.index_c_type * count) + return self.index_buffer.get_region(byte_start, byte_count, ptr_type) + + def draw(self, mode, vertex_list=None): + '''Draw vertices in the domain. + + If `vertex_list` is not specified, all vertices in the domain are + drawn. This is the most efficient way to render primitives. + + If `vertex_list` specifies a `VertexList`, only primitives in that + list will be drawn. + + :Parameters: + `mode` : int + OpenGL drawing mode, e.g. ``GL_POINTS``, ``GL_LINES``, etc. + `vertex_list` : `IndexedVertexList` + Vertex list to draw, or ``None`` for all lists in this domain. + + ''' + glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT) + for buffer, attributes in self.buffer_attributes: + buffer.bind() + for attribute in attributes: + attribute.enable() + attribute.set_pointer(attribute.buffer.ptr) + self.index_buffer.bind() + if vertexbuffer._workaround_vbo_finish: + glFinish() + + if vertex_list is not None: + glDrawElements(mode, vertex_list.index_count, self.index_gl_type, + self.index_buffer.ptr + + vertex_list.index_start * self.index_element_size) + else: + starts, sizes = self.index_allocator.get_allocated_regions() + primcount = len(starts) + if primcount == 0: + pass + elif primcount == 1: + # Common case + glDrawElements(mode, sizes[0], self.index_gl_type, + self.index_buffer.ptr + starts[0]) + elif gl_info.have_version(1, 4): + if not isinstance(self.index_buffer, + vertexbuffer.VertexBufferObject): + starts = [s + self.index_buffer.ptr for s in starts] + starts = (GLuint * primcount)(*starts) + sizes = (GLsizei * primcount)(*sizes) + glMultiDrawElements(mode, sizes, self.index_gl_type, starts, + primcount) + else: + for start, size in zip(starts, sizes): + glDrawElements(mode, size, self.index_gl_type, + self.index_buffer.ptr + + start * self.index_element_size) + + self.index_buffer.unbind() + for buffer, _ in self.buffer_attributes: + buffer.unbind() + glPopClientAttrib() + +class IndexedVertexList(VertexList): + '''A list of vertices within an `IndexedVertexDomain` that are indexed. + Use `IndexedVertexDomain.create` to construct this list. + ''' + def __init__(self, domain, start, count, index_start, index_count): + super(IndexedVertexList, self).__init__(domain, start, count) + + self.index_start = index_start + self.index_count = index_count + + def draw(self, mode): + self.domain.draw(mode, self) + + def resize(self, count, index_count): + '''Resize this group. + + :Parameters: + `count` : int + New number of vertices in the list. + `index_count` : int + New number of indices in the list. + + ''' + old_start = self.start + super(IndexedVertexList, self).resize(count) + + # Change indices (because vertices moved) + if old_start != self.start: + diff = self.start - old_start + self.indices[:] = map(lambda i: i + diff, self.indices) + + # Resize indices + new_start = self.domain._safe_index_realloc( + self.index_start, self.index_count, index_count) + if new_start != self.index_start: + old = self.domain.get_index_region( + self.index_start, self.index_count) + new = self.domain.get_index_region( + self.index_start, self.index_count) + new.array[:] = old.array[:] + new.invalidate() + self.index_start = new_start + self.index_count = index_count + self._indices_cache_version = None + + def delete(self): + '''Delete this group.''' + super(IndexedVertexList, self).delete() + self.domain.index_allocator.dealloc(self.index_start, self.index_count) + + def _set_index_data(self, data): + # TODO without region + region = self.domain.get_index_region( + self.index_start, self.index_count) + region.array[:] = data + region.invalidate() + + # --- + + def _get_indices(self): + if self._indices_cache_version != self.domain._version: + domain = self.domain + self._indices_cache = domain.get_index_region( + self.index_start, self.index_count) + self._indices_cache_version = domain._version + + region = self._indices_cache + region.invalidate() + return region.array + + def _set_indices(self, data): + self._get_indices()[:] = data + + _indices_cache = None + _indices_cache_version = None + indices = property(_get_indices, _set_indices, + doc='''Array of index data.''') diff --git a/pyglet/image/__init__.py b/pyglet/image/__init__.py new file mode 100644 index 0000000..85de0ca --- /dev/null +++ b/pyglet/image/__init__.py @@ -0,0 +1,2501 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''Image load, capture and high-level texture functions. + +Only basic functionality is described here; for full reference see the +accompanying documentation. + +To load an image:: + + from pyglet import image + pic = image.load('picture.png') + +The supported image file types include PNG, BMP, GIF, JPG, and many more, +somewhat depending on the operating system. To load an image from a file-like +object instead of a filename:: + + pic = image.load('hint.jpg', file=fileobj) + +The hint helps the module locate an appropriate decoder to use based on the +file extension. It is optional. + +Once loaded, images can be used directly by most other modules of pyglet. All +images have a width and height you can access:: + + width, height = pic.width, pic.height + +You can extract a region of an image (this keeps the original image intact; +the memory is shared efficiently):: + + subimage = pic.get_region(x, y, width, height) + +Remember that y-coordinates are always increasing upwards. + +Drawing images +-------------- + +To draw an image at some point on the screen:: + + pic.blit(x, y, z) + +This assumes an appropriate view transform and projection have been applied. + +Some images have an intrinsic "anchor point": this is the point which will be +aligned to the ``x`` and ``y`` coordinates when the image is drawn. By +default the anchor point is the lower-left corner of the image. You can use +the anchor point to center an image at a given point, for example:: + + pic.anchor_x = pic.width // 2 + pic.anchor_y = pic.height // 2 + pic.blit(x, y, z) + +Texture access +-------------- + +If you are using OpenGL directly, you can access the image as a texture:: + + texture = pic.get_texture() + +(This is the most efficient way to obtain a texture; some images are +immediately loaded as textures, whereas others go through an intermediate +form). To use a texture with pyglet.gl:: + + from pyglet.gl import * + glEnable(texture.target) # typically target is GL_TEXTURE_2D + glBindTexture(texture.target, texture.id) + # ... draw with the texture + +Pixel access +------------ + +To access raw pixel data of an image:: + + rawimage = pic.get_image_data() + +(If the image has just been loaded this will be a very quick operation; +however if the image is a texture a relatively expensive readback operation +will occur). The pixels can be accessed as a string:: + + format = 'RGBA' + pitch = rawimage.width * len(format) + pixels = rawimage.get_data(format, pitch) + +"format" strings consist of characters that give the byte order of each color +component. For example, if rawimage.format is 'RGBA', there are four color +components: red, green, blue and alpha, in that order. Other common format +strings are 'RGB', 'LA' (luminance, alpha) and 'I' (intensity). + +The "pitch" of an image is the number of bytes in a row (this may validly be +more than the number required to make up the width of the image, it is common +to see this for word alignment). If "pitch" is negative the rows of the image +are ordered from top to bottom, otherwise they are ordered from bottom to top. + +Retrieving data with the format and pitch given in `ImageData.format` and +`ImageData.pitch` avoids the need for data conversion (assuming you can make +use of the data in this arbitrary format). + +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: __init__.py 2253 2008-09-10 23:57:35Z Alex.Holkner $' + +import sys +import re +import warnings +import weakref + +from ctypes import * +from math import ceil +from StringIO import StringIO + +from pyglet import gl +from pyglet.gl import * +from pyglet.gl import gl_info +from pyglet import graphics +from pyglet.window import * + +from pyglet.image import atlas + +class ImageException(Exception): + pass + +def load(filename, file=None, decoder=None): + '''Load an image from a file. + + :note: You can make no assumptions about the return type; usually it will + be ImageData or CompressedImageData, but decoders are free to return + any subclass of AbstractImage. + + :Parameters: + `filename` : str + Used to guess the image format, and to load the file if `file` is + unspecified. + `file` : file-like object or None + Source of image data in any supported format. + `decoder` : ImageDecoder or None + If unspecified, all decoders that are registered for the filename + extension are tried. If none succeed, the exception from the + first decoder is raised. + + :rtype: AbstractImage + ''' + + if not file: + file = open(filename, 'rb') + if not hasattr(file, 'seek'): + file = StringIO(file.read()) + + if decoder: + return decoder.decode(file, filename) + else: + first_exception = None + for decoder in codecs.get_decoders(filename): + try: + image = decoder.decode(file, filename) + return image + except codecs.ImageDecodeException, e: + first_exception = first_exception or e + file.seek(0) + + if not first_exception: + raise codecs.ImageDecodeException('No image decoders are available') + raise first_exception + +def create(width, height, pattern=None): + '''Create an image optionally filled with the given pattern. + + :note: You can make no assumptions about the return type; usually it will + be ImageData or CompressedImageData, but patterns are free to return + any subclass of AbstractImage. + + :Parameters: + `width` : int + Width of image to create + `height` : int + Height of image to create + `pattern` : ImagePattern or None + Pattern to fill image with. If unspecified, the image will + intially be transparent. + + :rtype: AbstractImage + ''' + if not pattern: + pattern = SolidColorImagePattern() + return pattern.create_image(width, height) + +class ImagePattern(object): + '''Abstract image creation class.''' + def create_image(width, height): + '''Create an image of the given size. + + :Parameters: + `width` : int + Width of image to create + `height` : int + Height of image to create + + :rtype: AbstractImage + ''' + raise NotImplementedError('abstract') + +class SolidColorImagePattern(ImagePattern): + '''Creates an image filled with a solid color.''' + + def __init__(self, color=(0, 0, 0, 0)): + '''Create a solid image pattern with the given color. + + :Parameters: + `color` : (int, int, int, int) + 4-tuple of ints in range [0,255] giving RGBA components of + color to fill with. + + ''' + self.color = '%c%c%c%c' % color + + def create_image(self, width, height): + data = self.color * width * height + return ImageData(width, height, 'RGBA', data) + +class CheckerImagePattern(ImagePattern): + '''Create an image with a tileable checker image. + ''' + + def __init__(self, color1=(150,150,150,255), color2=(200,200,200,255)): + '''Initialise with the given colors. + + :Parameters: + `color1` : (int, int, int, int) + 4-tuple of ints in range [0,255] giving RGBA components of + color to fill with. This color appears in the top-left and + bottom-right corners of the image. + `color2` : (int, int, int, int) + 4-tuple of ints in range [0,255] giving RGBA components of + color to fill with. This color appears in the top-right and + bottom-left corners of the image. + + ''' + self.color1 = '%c%c%c%c' % color1 + self.color2 = '%c%c%c%c' % color2 + + def create_image(self, width, height): + hw = width/2 + hh = height/2 + row1 = self.color1 * hw + self.color2 * hw + row2 = self.color2 * hw + self.color1 * hw + data = row1 * hh + row2 * hh + return ImageData(width, height, 'RGBA', data) + +class AbstractImage(object): + '''Abstract class representing an image. + + :Ivariables: + `width` : int + Width of image + `height` : int + Height of image + `anchor_x` : int + X coordinate of anchor, relative to left edge of image data + `anchor_y` : int + Y coordinate of anchor, relative to bottom edge of image data + ''' + anchor_x = 0 + anchor_y = 0 + + def __init__(self, width, height): + self.width = width + self.height = height + + def __repr__(self): + return '<%s %dx%d>' % (self.__class__.__name__, self.width, self.height) + + def get_image_data(self): + '''Get an ImageData view of this image. + + Changes to the returned instance may or may not be reflected in this + image. + + :rtype: `ImageData` + + :since: pyglet 1.1 + ''' + raise ImageException('Cannot retrieve image data for %r' % self) + + image_data = property(lambda self: self.get_image_data(), + doc='''An `ImageData` view of this image. + + Changes to the returned instance may or may not be reflected in this + image. Read-only. + + :deprecated: Use `get_image_data`. + + :type: `ImageData` + ''') + + def get_texture(self, rectangle=False): + '''A `Texture` view of this image. + + By default, textures are created with dimensions that are powers of + two. Smaller images will return a `TextureRegion` that covers just + the image portion of the larger texture. This restriction is required + on older video cards, and for compressed textures, or where texture + repeat modes will be used, or where mipmapping is desired. + + If the `rectangle` parameter is ``True``, this restriction is ignored + and a texture the size of the image may be created if the driver + supports the ``GL_ARB_texture_rectangle`` or + ``GL_NV_texture_rectangle`` extensions. If the extensions are not + present or the image already is a texture, the `rectangle` parameter + is ignored. + + Examine `Texture.target` to determine if the returned texture is a + rectangle (``GL_TEXTURE_RECTANGLE_ARB`` or + ``GL_TEXTURE_RECTANGLE_NV``) or not (``GL_TEXTURE_2D``). + + Changes to the returned instance may or may not be reflected in this + image. + + :Parameters: + `rectangle` : bool + True if the texture can be created as a rectangle. + + :rtype: `Texture` + + :since: pyglet 1.1 + ''' + raise ImageException('Cannot retrieve texture for %r' % self) + + texture = property(lambda self: self.get_texture(), + doc='''Get a `Texture` view of this image. + + Changes to the returned instance may or may not be reflected in this + image. + + :deprecated: Use `get_texture`. + + :type: `Texture` + ''') + + def get_mipmapped_texture(self): + '''Retrieve a `Texture` instance with all mipmap levels filled in. + + Requires that image dimensions be powers of 2. + + :rtype: `Texture` + + :since: pyglet 1.1 + ''' + raise ImageException('Cannot retrieve mipmapped texture for %r' % self) + + mipmapped_texture = property(lambda self: self.get_mipmapped_texture(), + doc='''A Texture view of this image. + + The returned Texture will have mipmaps filled in for all levels. + Requires that image dimensions be powers of 2. Read-only. + + :deprecated: Use `get_mipmapped_texture`. + + :type: `Texture` + ''') + + def get_region(self, x, y, width, height): + '''Retrieve a rectangular region of this image. + + :Parameters: + `x` : int + Left edge of region. + `y` : int + Bottom edge of region. + `width` : int + Width of region. + `height` : int + Height of region. + + :rtype: AbstractImage + ''' + raise ImageException('Cannot get region for %r' % self) + + def save(self, filename=None, file=None, encoder=None): + '''Save this image to a file. + + :Parameters: + `filename` : str + Used to set the image file format, and to open the output file + if `file` is unspecified. + `file` : file-like object or None + File to write image data to. + `encoder` : ImageEncoder or None + If unspecified, all encoders matching the filename extension + are tried. If all fail, the exception from the first one + attempted is raised. + + ''' + if not file: + file = open(filename, 'wb') + + if encoder: + encoder.encode(self, file, filename) + else: + first_exception = None + for encoder in codecs.get_encoders(filename): + try: + encoder.encode(self, file, filename) + return + except codecs.ImageDecodeException, e: + first_exception = first_exception or e + file.seek(0) + + if not first_exception: + raise codecs.ImageEncodeException( + 'No image encoders are available') + raise first_exception + + def blit(self, x, y, z=0): + '''Draw this image to the active framebuffers. + + The image will be drawn with the lower-left corner at + (``x -`` `anchor_x`, ``y -`` `anchor_y`, ``z``). + ''' + raise ImageException('Cannot blit %r.' % self) + + def blit_into(self, source, x, y, z): + '''Draw `source` on this image. + + `source` will be copied into this image such that its anchor point + is aligned with the `x` and `y` parameters. If this image is a 3D + texture, the `z` coordinate gives the image slice to copy into. + + Note that if `source` is larger than this image (or the positioning + would cause the copy to go out of bounds) then you must pass a + region of `source` to this method, typically using get_region(). + ''' + raise ImageException('Cannot blit images onto %r.' % self) + + def blit_to_texture(self, target, level, x, y, z=0): + '''Draw this image on the currently bound texture at `target`. + + This image is copied into the texture such that this image's anchor + point is aligned with the given `x` and `y` coordinates of the + destination texture. If the currently bound texture is a 3D texture, + the `z` coordinate gives the image slice to blit into. + ''' + raise ImageException('Cannot blit %r to a texture.' % self) + +class AbstractImageSequence(object): + '''Abstract sequence of images. + + The sequence is useful for storing image animations or slices of a volume. + For efficient access, use the `texture_sequence` member. The class + also implements the sequence interface (`__len__`, `__getitem__`, + `__setitem__`). + ''' + def get_texture_sequence(self): + '''Get a TextureSequence. + + :rtype: `TextureSequence` + + :since: pyglet 1.1 + ''' + raise NotImplementedError('abstract') + + texture_sequence = property(lambda self: self.get_texture_sequence(), + doc='''Access this image sequence as a texture sequence. + + :deprecated: Use `get_texture_sequence` + + :type: `TextureSequence` + ''') + + def get_animation(self, period, loop=True): + '''Create an animation over this image sequence for the given constant + framerate. + + :Parameters + `period` : float + Number of seconds to display each frame. + `loop` : bool + If True, the animation will loop continuously. + + :rtype: `Animation` + + :since: pyglet 1.1 + ''' + return Animation.from_image_sequence(self, period, loop) + + def __getitem__(self, slice): + '''Retrieve a (list of) image. + + :rtype: AbstractImage + ''' + raise NotImplementedError('abstract') + + def __setitem__(self, slice, image): + '''Replace one or more images in the sequence. + + :Parameters: + `image` : `AbstractImage` + The replacement image. The actual instance may not be used, + depending on this implementation. + + ''' + raise NotImplementedError('abstract') + + def __len__(self): + raise NotImplementedError('abstract') + + def __iter__(self): + '''Iterate over the images in sequence. + + :rtype: Iterator + + :since: pyglet 1.1 + ''' + raise NotImplementedError('abstract') + +class TextureSequence(AbstractImageSequence): + '''Interface for a sequence of textures. + + Typical implementations store multiple `TextureRegion` s within one + `Texture` so as to minimise state changes. + ''' + def get_texture_sequence(self): + return self + +class UniformTextureSequence(TextureSequence): + '''Interface for a sequence of textures, each with the same dimensions. + + :Ivariables: + `item_width` : int + Width of each texture in the sequence. + `item_height` : int + Height of each texture in the sequence. + + ''' + def _get_item_width(self): + raise NotImplementedError('abstract') + item_width = property(_get_item_width) + + def _get_item_height(self): + raise NotImplementedError('abstract') + item_height = property(_get_item_height) + +class ImageData(AbstractImage): + '''An image represented as a string of unsigned bytes. + + :Ivariables: + `data` : str + Pixel data, encoded according to `format` and `pitch`. + `format` : str + The format string to use when reading or writing `data`. + `pitch` : int + Number of bytes per row. Negative values indicate a top-to-bottom + arrangement. + + Setting the `format` and `pitch` instance variables and reading `data` is + deprecated; use `get_data` and `set_data` in new applications. (Reading + `format` and `pitch` to obtain the current encoding is not deprecated). + ''' + + _swap1_pattern = re.compile('(.)', re.DOTALL) + _swap2_pattern = re.compile('(.)(.)', re.DOTALL) + _swap3_pattern = re.compile('(.)(.)(.)', re.DOTALL) + _swap4_pattern = re.compile('(.)(.)(.)(.)', re.DOTALL) + + _current_texture = None + _current_mipmap_texture = None + + def __init__(self, width, height, format, data, pitch=None): + '''Initialise image data. + + :Parameters: + `width` : int + Width of image data + `height` : int + Height of image data + `format` : str + A valid format string, such as 'RGB', 'RGBA', 'ARGB', etc. + `data` : sequence + String or array/list of bytes giving the decoded data. + `pitch` : int or None + If specified, the number of bytes per row. Negative values + indicate a top-to-bottom arrangement. Defaults to + ``width * len(format)``. + + ''' + super(ImageData, self).__init__(width, height) + + self._current_format = self._desired_format = format.upper() + self._current_data = data + if not pitch: + pitch = width * len(format) + self._current_pitch = self.pitch = pitch + self.mipmap_images = [] + + def __getstate__(self): + return { + 'width': self.width, + 'height': self.height, + '_current_data': + self.get_data(self._current_format, self._current_pitch), + '_current_format': self._current_format, + '_desired_format': self._desired_format, + '_current_pitch': self._current_pitch, + 'pitch': self.pitch, + 'mipmap_images': self.mipmap_images + } + + def get_image_data(self): + return self + + def _set_format(self, format): + self._desired_format = format.upper() + self._current_texture = None + + format = property(lambda self: self._desired_format, _set_format, + doc='''Format string of the data. Read-write. + + :type: str + ''') + + def _get_data(self): + if self._current_pitch != self.pitch or \ + self._current_format != self.format: + self._current_data = self._convert(self.format, self.pitch) + self._current_format = self.format + self._current_pitch = self.pitch + + self._ensure_string_data() + return self._current_data + + def _set_data(self, data): + self._current_data = data + self._current_format = self.format + self._current_pitch = self.pitch + self._current_texture = None + self._current_mipmapped_texture = None + + data = property(_get_data, _set_data, + doc='''The byte data of the image. Read-write. + + :deprecated: Use `get_data` and `set_data`. + + :type: sequence of bytes, or str + ''') + + def get_data(self, format, pitch): + '''Get the byte data of the image. + + :Parameters: + `format` : str + Format string of the return data. + `pitch` : int + Number of bytes per row. Negative values indicate a + top-to-bottom arrangement. + + :since: pyglet 1.1 + + :rtype: sequence of bytes, or str + ''' + if format == self._current_format and pitch == self._current_pitch: + return self._current_data + return self._convert(format, pitch) + + def set_data(self, format, pitch, data): + '''Set the byte data of the image. + + :Parameters: + `format` : str + Format string of the return data. + `pitch` : int + Number of bytes per row. Negative values indicate a + top-to-bottom arrangement. + `data` : str or sequence of bytes + Image data. + + :since: pyglet 1.1 + ''' + self._current_format = format + self._current_pitch = pitch + self._current_data = data + self._current_texture = None + self._current_mipmapped_texture = None + + def set_mipmap_image(self, level, image): + '''Set a mipmap image for a particular level. + + The mipmap image will be applied to textures obtained via + `get_mipmapped_texture`. + + :Parameters: + `level` : int + Mipmap level to set image at, must be >= 1. + `image` : AbstractImage + Image to set. Must have correct dimensions for that mipmap + level (i.e., width >> level, height >> level) + ''' + + if level == 0: + raise ImageException( + 'Cannot set mipmap image at level 0 (it is this image)') + + if not _is_pow2(self.width) or not _is_pow2(self.height): + raise ImageException( + 'Image dimensions must be powers of 2 to use mipmaps.') + + # Check dimensions of mipmap + width, height = self.width, self.height + for i in range(level): + width >>= 1 + height >>= 1 + if width != image.width or height != image.height: + raise ImageException( + 'Mipmap image has wrong dimensions for level %d' % level) + + # Extend mipmap_images list to required level + self.mipmap_images += [None] * (level - len(self.mipmap_images)) + self.mipmap_images[level - 1] = image + + def create_texture(self, cls, rectangle=False): + '''Create a texture containing this image. + + If the image's dimensions are not powers of 2, a TextureRegion of + a larger Texture will be returned that matches the dimensions of this + image. + + :Parameters: + `cls` : class (subclass of Texture) + Class to construct. + `rectangle` : bool + ``True`` if a rectangle can be created; see + `AbstractImage.get_texture`. + + **Since:** pyglet 1.1 + + :rtype: cls or cls.region_class + ''' + internalformat = self._get_internalformat(self.format) + texture = cls.create(self.width, self.height, internalformat, rectangle) + if self.anchor_x or self.anchor_y: + texture.anchor_x = self.anchor_x + texture.anchor_y = self.anchor_y + + self.blit_to_texture(texture.target, texture.level, + self.anchor_x, self.anchor_y, 0, None) + + return texture + + def get_texture(self, rectangle=False): + if not self._current_texture: + self._current_texture = self.create_texture(Texture, rectangle) + return self._current_texture + + def get_mipmapped_texture(self): + '''Return a Texture with mipmaps. + + If `set_mipmap_image` has been called with at least one image, the set + of images defined will be used. Otherwise, mipmaps will be + automatically generated. + + The texture dimensions must be powers of 2 to use mipmaps. + + :rtype: `Texture` + + :since: pyglet 1.1 + ''' + if self._current_mipmap_texture: + return self._current_mipmap_texture + + if not _is_pow2(self.width) or not _is_pow2(self.height): + raise ImageException( + 'Image dimensions must be powers of 2 to use mipmaps.') + + texture = Texture.create_for_size( + GL_TEXTURE_2D, self.width, self.height) + if self.anchor_x or self.anchor_y: + texture.anchor_x = self.anchor_x + texture.anchor_y = self.anchor_y + + internalformat = self._get_internalformat(self.format) + + glBindTexture(texture.target, texture.id) + glTexParameteri(texture.target, GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_LINEAR) + + if self.mipmap_images: + self.blit_to_texture(texture.target, texture.level, + self.anchor_x, self.anchor_y, 0, internalformat) + level = 0 + for image in self.mipmap_images: + level += 1 + if image: + image.blit_to_texture(texture.target, level, + self.anchor_x, self.anchor_y, 0, internalformat) + # TODO: should set base and max mipmap level if some mipmaps + # are missing. + elif gl_info.have_version(1, 4): + glTexParameteri(texture.target, GL_GENERATE_MIPMAP, GL_TRUE) + self.blit_to_texture(texture.target, texture.level, + self.anchor_x, self.anchor_y, 0, internalformat) + else: + raise NotImplementedError('TODO: gluBuild2DMipmaps') + + self._current_mipmap_texture = texture + return texture + + def get_region(self, x, y, width, height): + '''Retrieve a rectangular region of this image data. + + :Parameters: + `x` : int + Left edge of region. + `y` : int + Bottom edge of region. + `width` : int + Width of region. + `height` : int + Height of region. + + :rtype: ImageDataRegion + ''' + return ImageDataRegion(x, y, width, height, self) + + def blit(self, x, y, z=0, width=None, height=None): + self.get_texture().blit(x, y, z, width, height) + + def blit_to_texture(self, target, level, x, y, z, internalformat=None): + '''Draw this image to to the currently bound texture at `target`. + + This image's anchor point will be aligned to the given `x` and `y` + coordinates. If the currently bound texture is a 3D texture, the `z` + parameter gives the image slice to blit into. + + If `internalformat` is specified, glTexImage is used to initialise + the texture; otherwise, glTexSubImage is used to update a region. + ''' + x -= self.anchor_x + y -= self.anchor_y + + data_format = self.format + data_pitch = abs(self._current_pitch) + + # Determine pixel format from format string + matrix = None + format, type = self._get_gl_format_and_type(data_format) + if format is None: + if (len(data_format) in (3, 4) and + gl_info.have_extension('GL_ARB_imaging')): + # Construct a color matrix to convert to GL_RGBA + def component_column(component): + try: + pos = 'RGBA'.index(component) + return [0] * pos + [1] + [0] * (3 - pos) + except ValueError: + return [0, 0, 0, 0] + # pad to avoid index exceptions + lookup_format = data_format + 'XXX' + matrix = (component_column(lookup_format[0]) + + component_column(lookup_format[1]) + + component_column(lookup_format[2]) + + component_column(lookup_format[3])) + format = { + 3: GL_RGB, + 4: GL_RGBA}.get(len(data_format)) + type = GL_UNSIGNED_BYTE + + glMatrixMode(GL_COLOR) + glPushMatrix() + glLoadMatrixf((GLfloat * 16)(*matrix)) + else: + # Need to convert data to a standard form + data_format = { + 1: 'L', + 2: 'LA', + 3: 'RGB', + 4: 'RGBA'}.get(len(data_format)) + format, type = self._get_gl_format_and_type(data_format) + + # Workaround: don't use GL_UNPACK_ROW_LENGTH + if gl.current_context._workaround_unpack_row_length: + data_pitch = self.width * len(data_format) + + # Get data in required format (hopefully will be the same format it's + # already in, unless that's an obscure format, upside-down or the + # driver is old). + data = self._convert(data_format, data_pitch) + + if data_pitch & 0x1: + alignment = 1 + elif data_pitch & 0x2: + alignment = 2 + else: + alignment = 4 + row_length = data_pitch / len(data_format) + glPushClientAttrib(GL_CLIENT_PIXEL_STORE_BIT) + glPixelStorei(GL_UNPACK_ALIGNMENT, alignment) + glPixelStorei(GL_UNPACK_ROW_LENGTH, row_length) + self._apply_region_unpack() + + if target == GL_TEXTURE_3D: + assert not internalformat + glTexSubImage3D(target, level, + x, y, z, + self.width, self.height, 1, + format, type, + data) + elif internalformat: + glTexImage2D(target, level, + internalformat, + self.width, self.height, + 0, + format, type, + data) + else: + glTexSubImage2D(target, level, + x, y, + self.width, self.height, + format, type, + data) + glPopClientAttrib() + + if matrix: + glPopMatrix() + glMatrixMode(GL_MODELVIEW) + + # Flush image upload before data get GC'd. + glFlush() + + def _apply_region_unpack(self): + pass + + def _convert(self, format, pitch): + '''Return data in the desired format; does not alter this instance's + current format or pitch. + ''' + if format == self._current_format and pitch == self._current_pitch: + return self._current_data + + self._ensure_string_data() + data = self._current_data + current_pitch = self._current_pitch + current_format = self._current_format + sign_pitch = current_pitch / abs(current_pitch) + if format != self._current_format: + # Create replacement string, e.g. r'\4\1\2\3' to convert RGBA to + # ARGB + repl = '' + for c in format: + try: + idx = current_format.index(c) + 1 + except ValueError: + idx = 1 + repl += r'\%d' % idx + + if len(current_format) == 1: + swap_pattern = self._swap1_pattern + elif len(current_format) == 2: + swap_pattern = self._swap2_pattern + elif len(current_format) == 3: + swap_pattern = self._swap3_pattern + elif len(current_format) == 4: + swap_pattern = self._swap4_pattern + else: + raise ImageException( + 'Current image format is wider than 32 bits.') + + packed_pitch = self.width * len(current_format) + if abs(self._current_pitch) != packed_pitch: + # Pitch is wider than pixel data, need to go row-by-row. + rows = re.findall( + '.' * abs(self._current_pitch), data, re.DOTALL) + rows = [swap_pattern.sub(repl, r[:packed_pitch]) for r in rows] + data = ''.join(rows) + else: + # Rows are tightly packed, apply regex over whole image. + data = swap_pattern.sub(repl, data) + + # After conversion, rows will always be tightly packed + current_pitch = sign_pitch * (len(format) * self.width) + + if pitch != current_pitch: + diff = abs(current_pitch) - abs(pitch) + if diff > 0: + # New pitch is shorter than old pitch, chop bytes off each row + pattern = re.compile( + '(%s)%s' % ('.' * abs(pitch), '.' * diff), re.DOTALL) + data = pattern.sub(r'\1', data) + elif diff < 0: + # New pitch is longer than old pitch, add '0' bytes to each row + pattern = re.compile( + '(%s)' % ('.' * abs(current_pitch)), re.DOTALL) + pad = '.' * -diff + data = pattern.sub(r'\1%s' % pad, data) + + if current_pitch * pitch < 0: + # Pitch differs in sign, swap row order + rows = re.findall('.' * abs(pitch), data, re.DOTALL) + rows.reverse() + data = ''.join(rows) + + return data + + def _ensure_string_data(self): + if type(self._current_data) is not str: + buf = create_string_buffer(len(self._current_data)) + memmove(buf, self._current_data, len(self._current_data)) + self._current_data = buf.raw + + def _get_gl_format_and_type(self, format): + if format == 'I': + return GL_LUMINANCE, GL_UNSIGNED_BYTE + elif format == 'L': + return GL_LUMINANCE, GL_UNSIGNED_BYTE + elif format == 'LA': + return GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE + elif format == 'R': + return GL_RED, GL_UNSIGNED_BYTE + elif format == 'G': + return GL_GREEN, GL_UNSIGNED_BYTE + elif format == 'B': + return GL_BLUE, GL_UNSIGNED_BYTE + elif format == 'A': + return GL_ALPHA, GL_UNSIGNED_BYTE + elif format == 'RGB': + return GL_RGB, GL_UNSIGNED_BYTE + elif format == 'RGBA': + return GL_RGBA, GL_UNSIGNED_BYTE + elif (format == 'ARGB' and + gl_info.have_extension('GL_EXT_bgra') and + gl_info.have_extension('GL_APPLE_packed_pixels')): + return GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV + elif (format == 'ABGR' and + gl_info.have_extension('GL_EXT_abgr')): + return GL_ABGR_EXT, GL_UNSIGNED_BYTE + elif (format == 'BGR' and + gl_info.have_extension('GL_EXT_bgra')): + return GL_BGR, GL_UNSIGNED_BYTE + elif (format == 'BGRA' and + gl_info.have_extension('GL_EXT_bgra')): + return GL_BGRA, GL_UNSIGNED_BYTE + + return None, None + + def _get_internalformat(self, format): + if len(format) == 4: + return GL_RGBA + elif len(format) == 3: + return GL_RGB + elif len(format) == 2: + return GL_LUMINANCE_ALPHA + elif format == 'A': + return GL_ALPHA + elif format == 'L': + return GL_LUMINANCE + elif format == 'I': + return GL_INTENSITY + return GL_RGBA + +class ImageDataRegion(ImageData): + def __init__(self, x, y, width, height, image_data): + super(ImageDataRegion, self).__init__(width, height, + image_data._current_format, image_data._current_data, + image_data._current_pitch) + self.x = x + self.y = y + + def __getstate__(self): + return { + 'width': self.width, + 'height': self.height, + '_current_data': + self.get_data(self._current_format, self._current_pitch), + '_current_format': self._current_format, + '_desired_format': self._desired_format, + '_current_pitch': self._current_pitch, + 'pitch': self.pitch, + 'mipmap_images': self.mipmap_images, + 'x': self.x, + 'y': self.y + } + + def _get_data(self): + # Crop the data first + x1 = len(self._current_format) * self.x + x2 = len(self._current_format) * (self.x + self.width) + + self._ensure_string_data() + data = self._convert(self._current_format, abs(self._current_pitch)) + rows = re.findall('.' * abs(self._current_pitch), data, re.DOTALL) + rows = [row[x1:x2] for row in rows[self.y:self.y+self.height]] + self._current_data = ''.join(rows) + self._current_pitch = self.width * len(self._current_format) + self._current_texture = None + self.x = 0 + self.y = 0 + + return super(ImageDataRegion, self)._get_data() + + def _set_data(self, data): + self.x = 0 + self.y = 0 + super(ImageDataRegion, self)._set_data(data) + + data = property(_get_data, _set_data) + + def get_data(self, format, pitch): + x1 = len(self._current_format) * self.x + x2 = len(self._current_format) * (self.x + self.width) + + self._ensure_string_data() + data = self._convert(self._current_format, abs(self._current_pitch)) + rows = re.findall('.' * abs(self._current_pitch), data, re.DOTALL) + rows = [row[x1:x2] for row in rows[self.y:self.y+self.height]] + self._current_data = ''.join(rows) + self._current_pitch = self.width * len(self._current_format) + self._current_texture = None + self.x = 0 + self.y = 0 + + return super(ImageDataRegion, self).get_data(format, pitch) + + def _apply_region_unpack(self): + glPixelStorei(GL_UNPACK_SKIP_PIXELS, self.x) + glPixelStorei(GL_UNPACK_SKIP_ROWS, self.y) + + def _ensure_string_data(self): + super(ImageDataRegion, self)._ensure_string_data() + + def get_region(self, x, y, width, height): + x += self.x + y += self.y + return super(ImageDataRegion, self).get_region(x, y, width, height) + +class CompressedImageData(AbstractImage): + '''Image representing some compressed data suitable for direct uploading + to driver. + ''' + + _current_texture = None + _current_mipmapped_texture = None + + def __init__(self, width, height, gl_format, data, + extension=None, decoder=None): + '''Construct a CompressedImageData with the given compressed data. + + :Parameters: + `width` : int + Width of image + `height` : int + Height of image + `gl_format` : int + GL constant giving format of compressed data; for example, + ``GL_COMPRESSED_RGBA_S3TC_DXT5_EXT``. + `data` : sequence + String or array/list of bytes giving compressed image data. + `extension` : str or None + If specified, gives the name of a GL extension to check for + before creating a texture. + `decoder` : function(data, width, height) -> AbstractImage + A function to decode the compressed data, to be used if the + required extension is not present. + + ''' + if not _is_pow2(width) or not _is_pow2(height): + raise ImageException('Dimensions of %r must be powers of 2' % self) + + super(CompressedImageData, self).__init__(width, height) + self.data = data + self.gl_format = gl_format + self.extension = extension + self.decoder = decoder + self.mipmap_data = [] + + def set_mipmap_data(self, level, data): + '''Set data for a mipmap level. + + Supplied data gives a compressed image for the given mipmap level. + The image must be of the correct dimensions for the level + (i.e., width >> level, height >> level); but this is not checked. If + any mipmap levels are specified, they are used; otherwise, mipmaps for + `mipmapped_texture` are generated automatically. + + :Parameters: + `level` : int + Level of mipmap image to set. + `data` : sequence + String or array/list of bytes giving compressed image data. + Data must be in same format as specified in constructor. + + ''' + # Extend mipmap_data list to required level + self.mipmap_data += [None] * (level - len(self.mipmap_data)) + self.mipmap_data[level - 1] = data + + def _have_extension(self): + return self.extension is None or gl_info.have_extension(self.extension) + + def _verify_driver_supported(self): + '''Assert that the extension required for this image data is + supported. + + Raises `ImageException` if not. + ''' + + if not self._have_extension(): + raise ImageException('%s is required to decode %r' % \ + (self.extension, self)) + + def get_texture(self, rectangle=False): + if self._current_texture: + return self._current_texture + + texture = Texture.create_for_size( + GL_TEXTURE_2D, self.width, self.height) + if self.anchor_x or self.anchor_y: + texture.anchor_x = self.anchor_x + texture.anchor_y = self.anchor_y + + glBindTexture(texture.target, texture.id) + glTexParameteri(texture.target, GL_TEXTURE_MIN_FILTER, GL_LINEAR) + + if self._have_extension(): + glCompressedTexImage2DARB(texture.target, texture.level, + self.gl_format, + self.width, self.height, 0, + len(self.data), self.data) + else: + image = self.decoder(self.data, self.width, self.height) + texture = image.get_texture() + assert texture.width == self.width + assert texture.height == self.height + + glFlush() + self._current_texture = texture + return texture + + def get_mipmapped_texture(self): + if self._current_mipmap_texture: + return self._current_mipmap_texture + + if not self._have_extension(): + # TODO mip-mapped software decoded compressed textures. For now, + # just return a non-mipmapped texture. + return self.get_texture() + + texture = Texture.create_for_size( + GL_TEXTURE_2D, self.width, self.height) + if self.anchor_x or self.anchor_y: + texture.anchor_x = self.anchor_x + texture.anchor_y = self.anchor_y + + glBindTexture(texture.target, texture.id) + + glTexParameteri(texture.target, GL_TEXTURE_MIN_FILTER, + GL_LINEAR_MIPMAP_LINEAR) + + if not self.mipmap_data: + if not gl_info.have_version(1, 4): + raise ImageException( + 'Require GL 1.4 to generate mipmaps for compressed textures') + glTexParameteri(texture.target, GL_GENERATE_MIPMAP, GL_TRUE) + + glCompressedTexImage2DARB(texture.target, texture.level, + self.gl_format, + self.width, self.height, 0, + len(self.data), self.data) + + width, height = self.width, self.height + level = 0 + for data in self.mipmap_data: + width >>= 1 + height >>= 1 + level += 1 + glCompressedTexImage2DARB(texture.target, level, + self.gl_format, + width, height, 0, + len(data), data) + + glFlush() + + self._current_mipmap_texture = texture + return texture + + def blit_to_texture(self, target, level, x, y, z): + self._verify_driver_supported() + + if target == GL_TEXTURE_3D: + glCompressedTexSubImage3DARB(target, level, + x - self.anchor_x, y - self.anchor_y, z, + self.width, self.height, 1, + self.gl_format, + len(self.data), self.data) + else: + glCompressedTexSubImage2DARB(target, level, + x - self.anchor_x, y - self.anchor_y, + self.width, self.height, + self.gl_format, + len(self.data), self.data) + +def _nearest_pow2(v): + # From http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2 + # Credit: Sean Anderson + v -= 1 + v |= v >> 1 + v |= v >> 2 + v |= v >> 4 + v |= v >> 8 + v |= v >> 16 + return v + 1 + +def _is_pow2(v): + # http://graphics.stanford.edu/~seander/bithacks.html#DetermineIfPowerOf2 + return (v & (v - 1)) == 0 + +class Texture(AbstractImage): + '''An image loaded into video memory that can be efficiently drawn + to the framebuffer. + + Typically you will get an instance of Texture by accessing the `texture` + member of any other AbstractImage. + + :Ivariables: + `region_class` : class (subclass of TextureRegion) + Class to use when constructing regions of this texture. + `tex_coords` : tuple + 12-tuple of float, named (u1, v1, r1, u2, v2, r2, ...). u, v, r + give the 3D texture coordinates for vertices 1-4. The vertices + are specified in the order bottom-left, bottom-right, top-right + and top-left. + `target` : int + The GL texture target (e.g., ``GL_TEXTURE_2D``). + `level` : int + The mipmap level of this texture. + + ''' + + region_class = None # Set to TextureRegion after it's defined + tex_coords = (0., 0., 0., 1., 0., 0., 1., 1., 0., 0., 1., 0.) + tex_coords_order = (0, 1, 2, 3) + level = 0 + images = 1 + x = y = z = 0 + + def __init__(self, width, height, target, id): + super(Texture, self).__init__(width, height) + self.target = target + self.id = id + self._context = gl.current_context + + def delete(self): + '''Delete the texture from video memory. + + :deprecated: Textures are automatically released during object + finalization. + ''' + warnings.warn( + 'Texture.delete() is deprecated; textures are ' + 'released through GC now') + self._context.delete_texture(self.id) + self.id = 0 + + def __del__(self): + try: + self._context.delete_texture(self.id) + except: + pass + + @classmethod + def create(cls, width, height, internalformat=GL_RGBA, rectangle=False): + '''Create an empty Texture. + + If `rectangle` is ``False`` or the appropriate driver extensions are + not available, a larger texture than requested will be created, and + a `TextureRegion` corresponding to the requested size will be + returned. + + :Parameters: + `width` : int + Width of the texture. + `height` : int + Height of the texture. + `internalformat` : int + GL constant giving the internal format of the texture; for + example, ``GL_RGBA``. + `rectangle` : bool + ``True`` if a rectangular texture is permitted. See + `AbstractImage.get_texture`. + + :rtype: `Texture` + + :since: pyglet 1.1 + ''' + target = GL_TEXTURE_2D + if rectangle: + if _is_pow2(width) and _is_pow2(height): + rectangle = False + elif gl_info.have_extension('GL_ARB_texture_rectangle'): + target = GL_TEXTURE_RECTANGLE_ARB + elif gl_info.have_extension('GL_NV_texture_rectangle'): + target = GL_TEXTURE_RECTANGLE_NV + else: + rectangle = False + + if rectangle: + texture_width = width + texture_height = height + else: + texture_width = _nearest_pow2(width) + texture_height = _nearest_pow2(height) + + id = GLuint() + glGenTextures(1, byref(id)) + glBindTexture(target, id.value) + glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR) + + blank = (GLubyte * (texture_width * texture_height * 4))() + glTexImage2D(target, 0, + internalformat, + texture_width, texture_height, + 0, + GL_RGBA, GL_UNSIGNED_BYTE, + blank) + + texture = cls(texture_width, texture_height, target, id.value) + if rectangle: + texture.tex_coords = (0., 0., 0., + width, 0., 0., + width, height, 0., + 0., height, 0.) + + glFlush() + + if texture_width == width and texture_height == height: + return texture + + return texture.get_region(0, 0, width, height) + + @classmethod + def create_for_size(cls, target, min_width, min_height, + internalformat=None): + '''Create a Texture with dimensions at least min_width, min_height. + On return, the texture will be bound. + + :Parameters: + `target` : int + GL constant giving texture target to use, typically + ``GL_TEXTURE_2D``. + `min_width` : int + Minimum width of texture (may be increased to create a power + of 2). + `min_height` : int + Minimum height of texture (may be increased to create a power + of 2). + `internalformat` : int + GL constant giving internal format of texture; for example, + ``GL_RGBA``. If unspecified, the texture will not be + initialised (only the texture name will be created on the + instance). If specified, the image will be initialised + to this format with zero'd data. + + :rtype: `Texture` + ''' + if target not in (GL_TEXTURE_RECTANGLE_NV, GL_TEXTURE_RECTANGLE_ARB): + width = _nearest_pow2(min_width) + height = _nearest_pow2(min_height) + tex_coords = cls.tex_coords + else: + width = min_width + height = min_height + tex_coords = (0., 0., 0., + width, 0., 0., + width, height, 0., + 0., height, 0.) + id = GLuint() + glGenTextures(1, byref(id)) + glBindTexture(target, id.value) + glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_LINEAR) + + if internalformat is not None: + blank = (GLubyte * (width * height * 4))() + glTexImage2D(target, 0, + internalformat, + width, height, + 0, + GL_RGBA, GL_UNSIGNED_BYTE, + blank) + glFlush() + + texture = cls(width, height, target, id.value) + texture.tex_coords = tex_coords + return texture + + def get_image_data(self, z=0): + '''Get the image data of this texture. + + Changes to the returned instance will not be reflected in this + texture. + + :Parameters: + `z` : int + For 3D textures, the image slice to retrieve. + + :rtype: `ImageData` + ''' + glBindTexture(self.target, self.id) + + # Always extract complete RGBA data. Could check internalformat + # to only extract used channels. XXX + format = 'RGBA' + gl_format = GL_RGBA + + glPushClientAttrib(GL_CLIENT_PIXEL_STORE_BIT) + glPixelStorei(GL_PACK_ALIGNMENT, 1) + buffer = \ + (GLubyte * (self.width * self.height * self.images * len(format)))() + glGetTexImage(self.target, self.level, + gl_format, GL_UNSIGNED_BYTE, buffer) + glPopClientAttrib() + + data = ImageData(self.width, self.height, format, buffer) + if self.images > 1: + data = data.get_region(0, z * self.height, self.width, self.height) + return data + + image_data = property(lambda self: self.get_image_data(), + doc='''An ImageData view of this texture. + + Changes to the returned instance will not be reflected in this + texture. If the texture is a 3D texture, the first image will be + returned. See also `get_image_data`. Read-only. + + :deprecated: Use `get_image_data`. + + :type: `ImageData` + ''') + + def get_texture(self, rectangle=False): + return self + + # no implementation of blit_to_texture yet (could use aux buffer) + + def blit(self, x, y, z=0, width=None, height=None): + t = self.tex_coords + x1 = x - self.anchor_x + y1 = y - self.anchor_y + x2 = x1 + (width is None and self.width or width) + y2 = y1 + (height is None and self.height or height) + array = (GLfloat * 32)( + t[0], t[1], t[2], 1., + x1, y1, z, 1., + t[3], t[4], t[5], 1., + x2, y1, z, 1., + t[6], t[7], t[8], 1., + x2, y2, z, 1., + t[9], t[10], t[11], 1., + x1, y2, z, 1.) + + glPushAttrib(GL_ENABLE_BIT) + glEnable(self.target) + glBindTexture(self.target, self.id) + glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT) + glInterleavedArrays(GL_T4F_V4F, 0, array) + glDrawArrays(GL_QUADS, 0, 4) + glPopClientAttrib() + glPopAttrib() + + def blit_into(self, source, x, y, z): + glBindTexture(self.target, self.id) + source.blit_to_texture(self.target, self.level, x, y, z) + + def get_region(self, x, y, width, height): + return self.region_class(x, y, 0, width, height, self) + + def get_transform(self, flip_x=False, flip_y=False, rotate=0): + '''Create a copy of this image applying a simple transformation. + + The transformation is applied to the texture coordinates only; + `get_image_data` will return the untransformed data. The + transformation is applied around the anchor point. + + :Parameters: + `flip_x` : bool + If True, the returned image will be flipped horizontally. + `flip_y` : bool + If True, the returned image will be flipped vertically. + `rotate` : int + Degrees of clockwise rotation of the returned image. Only + 90-degree increments are supported. + + :rtype: `TextureRegion` + ''' + transform = self.get_region(0, 0, self.width, self.height) + bl, br, tr, tl = 0, 1, 2, 3 + transform.anchor_x = self.anchor_x + transform.anchor_y = self.anchor_y + if flip_x: + bl, br, tl, tr = br, bl, tr, tl + transform.anchor_x = self.width - self.anchor_x + if flip_y: + bl, br, tl, tr = tl, tr, bl, br + transform.anchor_y = self.height - self.anchor_y + rotate %= 360 + if rotate < 0: + rotate += 360 + if rotate == 0: + pass + elif rotate == 90: + bl, br, tr, tl = br, tr, tl, bl + transform.anchor_x, transform.anchor_y = \ + transform.anchor_y, \ + transform.width - transform.anchor_x + elif rotate == 180: + bl, br, tr, tl = tr, tl, bl, br + transform.anchor_x = transform.width - transform.anchor_x + transform.anchor_y = transform.height - transform.anchor_y + elif rotate == 270: + bl, br, tr, tl = tl, bl, br, tr + transform.anchor_x, transform.anchor_y = \ + transform.height - transform.anchor_y, \ + transform.anchor_x + else: + assert False, 'Only 90 degree rotations are supported.' + if rotate in (90, 270): + transform.width, transform.height = \ + transform.height, transform.width + transform._set_tex_coords_order(bl, br, tr, tl) + return transform + + def _set_tex_coords_order(self, bl, br, tr, tl): + tex_coords = (self.tex_coords[:3], + self.tex_coords[3:6], + self.tex_coords[6:9], + self.tex_coords[9:]) + self.tex_coords = \ + tex_coords[bl] + tex_coords[br] + tex_coords[tr] + tex_coords[tl] + + order = self.tex_coords_order + self.tex_coords_order = \ + (order[bl], order[br], order[tr], order[tl]) + +class TextureRegion(Texture): + '''A rectangular region of a texture, presented as if it were + a separate texture. + ''' + + def __init__(self, x, y, z, width, height, owner): + super(TextureRegion, self).__init__( + width, height, owner.target, owner.id) + + self.x = x + self.y = y + self.z = z + self.owner = owner + owner_u1 = owner.tex_coords[0] + owner_v1 = owner.tex_coords[1] + owner_u2 = owner.tex_coords[3] + owner_v2 = owner.tex_coords[7] + scale_u = owner_u2 - owner_u1 + scale_v = owner_v2 - owner_v1 + u1 = x / float(owner.width) * scale_u + owner_u1 + v1 = y / float(owner.height) * scale_v + owner_v1 + u2 = (x + width) / float(owner.width) * scale_u + owner_u1 + v2 = (y + height) / float(owner.height) * scale_v + owner_v1 + r = z / float(owner.images) + owner.tex_coords[2] + self.tex_coords = (u1, v1, r, u2, v1, r, u2, v2, r, u1, v2, r) + + def get_image_data(self): + image_data = self.owner.get_image_data(self.z) + return image_data.get_region(self.x, self.y, self.width, self.height) + + def get_region(self, x, y, width, height): + x += self.x + y += self.y + region = self.region_class(x, y, self.z, width, height, self.owner) + region._set_tex_coords_order(*self.tex_coords_order) + return region + + def blit_into(self, source, x, y, z): + self.owner.blit_into(source, x + self.x, y + self.y, z + self.z) + + def __del__(self): + # only the owner Texture should handle deletion + pass + +Texture.region_class = TextureRegion + +class Texture3D(Texture, UniformTextureSequence): + '''A texture with more than one image slice. + + Use `create_for_images` or `create_for_image_grid` classmethod to + construct. + ''' + item_width = 0 + item_height = 0 + items = () + + @classmethod + def create_for_images(cls, images, internalformat=GL_RGBA): + item_width = images[0].width + item_height = images[0].height + for image in images: + if image.width != item_width or image.height != item_height: + raise ImageException('Images do not have same dimensions.') + + depth = len(images) + if not gl_info.have_version(2,0): + depth = _nearest_pow2(depth) + + texture = cls.create_for_size(GL_TEXTURE_3D, item_width, item_height) + if images[0].anchor_x or images[0].anchor_y: + texture.anchor_x = self.anchor_x + texture.anchor_y = self.anchor_y + + texture.images = depth + + blank = (GLubyte * (texture.width * texture.height * texture.images))() + glBindTexture(texture.target, texture.id) + glTexImage3D(texture.target, texture.level, + internalformat, + texture.width, texture.height, texture.images, 0, + GL_ALPHA, GL_UNSIGNED_BYTE, + blank) + + items = [] + for i, image in enumerate(images): + item = cls.region_class(0, 0, i, item_width, item_height, texture) + items.append(item) + image.blit_to_texture(texture.target, texture.level, + image.anchor_x, image.anchor_y, i) + + glFlush() + + texture.items = items + texture.item_width = item_width + texture.item_height = item_height + return texture + + @classmethod + def create_for_image_grid(cls, grid, internalformat=GL_RGBA): + return cls.create_for_images(grid[:], internalformat) + + def __len__(self): + return len(self.items) + + def __getitem__(self, index): + return self.items[index] + + def __setitem__(self, index, value): + if type(index) is slice: + for item, image in zip(self[index], value): + image.blit_to_texture(self.target, self.level, + image.anchor_x, image.anchor_y, item.z) + else: + value.blit_to_texture(self.target, self.level, + value.anchor_x, value.anchor_y, self[index].z) + + def __iter__(self): + return iter(self.items) + +class TileableTexture(Texture): + '''A texture that can be tiled efficiently. + + Use `create_for_image` classmethod to construct. + ''' + def __init__(self, width, height, target, id): + if not _is_pow2(width) or not _is_pow2(height): + raise ImageException( + 'TileableTexture requires dimensions that are powers of 2') + super(TileableTexture, self).__init__(width, height, target, id) + + def get_region(self, x, y, width, height): + raise ImageException('Cannot get region of %r' % self) + + def blit_tiled(self, x, y, z, width, height): + '''Blit this texture tiled over the given area. + + The image will be tiled with the bottom-left corner of the destination + rectangle aligned with the anchor point of this texture. + ''' + u1 = self.anchor_x / float(self.width) + v1 = self.anchor_y / float(self.height) + u2 = u1 + width / float(self.width) + v2 = v1 + height / float(self.height) + w, h = width, height + t = self.tex_coords + array = (GLfloat * 32)( + u1, v1, t[2], 1., + x, y, z, 1., + u2, v1, t[5], 1., + x + w, y, z, 1., + u2, v2, t[8], 1., + x + w, y + h, z, 1., + u1, v2, t[11], 1., + x, y + h, z, 1.) + + glPushAttrib(GL_ENABLE_BIT) + glEnable(self.target) + glBindTexture(self.target, self.id) + glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT) + glInterleavedArrays(GL_T4F_V4F, 0, array) + glDrawArrays(GL_QUADS, 0, 4) + glPopClientAttrib() + glPopAttrib() + + @classmethod + def create_for_image(cls, image): + if not _is_pow2(image.width) or not _is_pow2(image.height): + # Potentially unnecessary conversion if a GL format exists. + image = image.get_image_data() + texture_width = _nearest_pow2(image.width) + texture_height = _nearest_pow2(image.height) + newdata = c_buffer(texture_width * texture_height * 4) + gluScaleImage(GL_RGBA, + image.width, image.height, + GL_UNSIGNED_BYTE, + image.get_data('RGBA', image.width * 4), + texture_width, + texture_height, + GL_UNSIGNED_BYTE, + newdata) + image = ImageData(texture_width, texture_height, image.format, + newdata) + + image = image.get_image_data() + return image.create_texture(cls) + +class DepthTexture(Texture): + '''A texture with depth samples (typically 24-bit).''' + def blit_into(self, source, x, y, z): + glBindTexture(self.target, self.id) + source.blit_to_texture(self.level, x, y, z) + +class BufferManager(object): + '''Manages the set of framebuffers for a context. + + Use `get_buffer_manager` to obtain the instance of this class for the + current context. + ''' + def __init__(self): + self.color_buffer = None + self.depth_buffer = None + + aux_buffers = GLint() + glGetIntegerv(GL_AUX_BUFFERS, byref(aux_buffers)) + self.free_aux_buffers = [GL_AUX0, + GL_AUX1, + GL_AUX2, + GL_AUX3][:aux_buffers.value] + + stencil_bits = GLint() + glGetIntegerv(GL_STENCIL_BITS, byref(stencil_bits)) + self.free_stencil_bits = range(stencil_bits.value) + + self.refs = [] + + def get_viewport(self): + '''Get the current OpenGL viewport dimensions. + + :rtype: 4-tuple of float. + :return: Left, top, right and bottom dimensions. + ''' + viewport = (GLint * 4)() + glGetIntegerv(GL_VIEWPORT, viewport) + return viewport + + def get_color_buffer(self): + '''Get the color buffer. + + :rtype: `ColorBufferImage` + ''' + viewport = self.get_viewport() + viewport_width = viewport[2] + viewport_height = viewport[3] + if (not self.color_buffer or + viewport_width != self.color_buffer.width or + viewport_height != self.color_buffer.height): + self.color_buffer = ColorBufferImage(*viewport) + return self.color_buffer + + def get_aux_buffer(self): + '''Get a free auxilliary buffer. + + If not aux buffers are available, `ImageException` is raised. Buffers + are released when they are garbage collected. + + :rtype: `ColorBufferImage` + ''' + if not self.free_aux_buffers: + raise ImageException('No free aux buffer is available.') + + gl_buffer = self.free_aux_buffers.pop(0) + viewport = self.get_viewport() + buffer = ColorBufferImage(*viewport) + buffer.gl_buffer = gl_buffer + + def release_buffer(ref, self=self): + self.free_aux_buffers.insert(0, gl_buffer) + self.refs.append(weakref.ref(buffer, release_buffer)) + + return buffer + + def get_depth_buffer(self): + '''Get the depth buffer. + + :rtype: `DepthBufferImage` + ''' + viewport = self.get_viewport() + viewport_width = viewport[2] + viewport_height = viewport[3] + if (not self.depth_buffer or + viewport_width != self.depth_buffer.width or + viewport_height != self.depth_buffer.height): + self.depth_buffer = DepthBufferImage(*viewport) + return self.depth_buffer + + def get_buffer_mask(self): + '''Get a free bitmask buffer. + + A bitmask buffer is a buffer referencing a single bit in the stencil + buffer. If no bits are free, `ImageException` is raised. Bits are + released when the bitmask buffer is garbage collected. + + :rtype: `BufferImageMask` + ''' + if not self.free_stencil_bits: + raise ImageException('No free stencil bits are available.') + + stencil_bit = self.free_stencil_bits.pop(0) + viewport = self.get_viewport() + buffer = BufferImageMask(x, y, width, height) + buffer.stencil_bit = stencil_bit + + def release_buffer(ref, self=self): + self.free_stencil_bits.insert(0, stencil_bit) + self.refs.append(weakref.ref(buffer, release_buffer)) + + return buffer + +def get_buffer_manager(): + '''Get the buffer manager for the current OpenGL context. + + :rtype: `BufferManager` + ''' + context = gl.current_context + if not hasattr(context, 'image_buffer_manager'): + context.image_buffer_manager = BufferManager() + return context.image_buffer_manager + +# XXX BufferImage could be generalised to support EXT_framebuffer_object's +# renderbuffer. +class BufferImage(AbstractImage): + '''An abstract framebuffer. + ''' + #: The OpenGL read and write target for this buffer. + gl_buffer = GL_BACK + + #: The OpenGL format constant for image data. + gl_format = 0 + + #: The format string used for image data. + format = '' + + owner = None + + # TODO: enable methods + + def __init__(self, x, y, width, height): + self.x = x + self.y = y + self.width = width + self.height = height + + def get_image_data(self): + buffer = (GLubyte * (len(self.format) * self.width * self.height))() + + x = self.x + y = self.y + if self.owner: + x += self.owner.x + y += self.owner.y + + glReadBuffer(self.gl_buffer) + glPushClientAttrib(GL_CLIENT_PIXEL_STORE_BIT) + glPixelStorei(GL_PACK_ALIGNMENT, 1) + glReadPixels(x, y, self.width, self.height, + self.gl_format, GL_UNSIGNED_BYTE, buffer) + glPopClientAttrib() + + return ImageData(self.width, self.height, self.format, buffer) + + def get_region(self, x, y, width, height): + if self.owner: + return self.owner.get_region(x + self.x, y + self.y, width, height) + + region = self.__class__(x + self.x, y + self.y, width, height) + region.gl_buffer = self.gl_buffer + region.owner = self + return region + +class ColorBufferImage(BufferImage): + '''A color framebuffer. + + This class is used to wrap both the primary color buffer (i.e., the back + buffer) or any one of the auxilliary buffers. + ''' + gl_format = GL_RGBA + format = 'RGBA' + + def get_texture(self, rectangle=False): + texture = Texture.create(self.width, self.height, GL_RGBA, rectangle) + self.blit_to_texture(texture.target, texture.level, + self.anchor_x, self.anchor_y, 0) + return texture + + def blit_to_texture(self, target, level, x, y, z): + glReadBuffer(self.gl_buffer) + glCopyTexSubImage2D(target, level, + x - self.anchor_x, y - self.anchor_y, + self.x, self.y, self.width, self.height) + +class DepthBufferImage(BufferImage): + '''The depth buffer. + ''' + gl_format = GL_DEPTH_COMPONENT + format = 'L' + + def get_texture(self, rectangle=False): + assert rectangle == False, \ + 'Depth textures cannot be rectangular' + if not _is_pow2(self.width) or not _is_pow2(self.height): + raise ImageException( + 'Depth texture requires that buffer dimensions be powers of 2') + + texture = DepthTexture.create_for_size(GL_TEXTURE_2D, + self.width, self.height) + if self.anchor_x or self.anchor_y: + texture.anchor_x = self.anchor_x + texture.anchor_y = self.anchor_y + + glReadBuffer(self.gl_buffer) + glCopyTexImage2D(texture.target, 0, + GL_DEPTH_COMPONENT, + self.x, self.y, self.width, self.height, + 0) + return texture + + def blit_to_texture(self, target, level, x, y, z): + glReadBuffer(self.gl_buffer) + glCopyTexSubImage2D(target, level, + x - self.anchor_x, y - self.anchor_y, + self.x, self.y, self.width, self.height) + + +class BufferImageMask(BufferImage): + '''A single bit of the stencil buffer. + ''' + gl_format = GL_STENCIL_INDEX + format = 'L' + + # TODO mask methods + +class ImageGrid(AbstractImage, AbstractImageSequence): + '''An imaginary grid placed over an image allowing easy access to + regular regions of that image. + + The grid can be accessed either as a complete image, or as a sequence + of images. The most useful applications are to access the grid + as a `TextureGrid`:: + + image_grid = ImageGrid(...) + texture_grid = image_grid.get_texture_sequence() + + or as a `Texture3D`:: + + image_grid = ImageGrid(...) + texture_3d = Texture3D.create_for_image_grid(image_grid) + + ''' + _items = () + _texture_grid = None + + def __init__(self, image, rows, columns, + item_width=None, item_height=None, + row_padding=0, column_padding=0): + '''Construct a grid for the given image. + + You can specify parameters for the grid, for example setting + the padding between cells. Grids are always aligned to the + bottom-left corner of the image. + + :Parameters: + `image` : AbstractImage + Image over which to construct the grid. + `rows` : int + Number of rows in the grid. + `columns` : int + Number of columns in the grid. + `item_width` : int + Width of each column. If unspecified, is calculated such + that the entire image width is used. + `item_height` : int + Height of each row. If unspecified, is calculated such that + the entire image height is used. + `row_padding` : int + Pixels separating adjacent rows. The padding is only + inserted between rows, not at the edges of the grid. + `column_padding` : int + Pixels separating adjacent columns. The padding is only + inserted between columns, not at the edges of the grid. + ''' + super(ImageGrid, self).__init__(image.width, image.height) + + if item_width is None: + item_width = \ + int((image.width - column_padding * (columns - 1)) / columns) + if item_height is None: + item_height = \ + int((image.height - row_padding * (rows - 1)) / rows) + self.image = image + self.rows = rows + self.columns = columns + self.item_width = item_width + self.item_height = item_height + self.row_padding = row_padding + self.column_padding = column_padding + + def get_texture(self, rectangle=False): + return self.image.get_texture(rectangle) + + def get_image_data(self): + return self.image.get_image_data() + + def get_texture_sequence(self): + if not self._texture_grid: + self._texture_grid = TextureGrid(self) + return self._texture_grid + + def __len__(self): + return self.rows * self.columns + + def _update_items(self): + if not self._items: + self._items = [] + y = 0 + for row in range(self.rows): + x = 0 + for col in range(self.columns): + self._items.append(self.image.get_region( + x, y, self.item_width, self.item_height)) + x += self.item_width + self.column_padding + y += self.item_height + self.row_padding + + def __getitem__(self, index): + self._update_items() + # TODO tuples + return self._items[index] + + def __iter__(self): + self._update_items() + return iter(self._items) + +class TextureGrid(TextureRegion, UniformTextureSequence): + '''A texture containing a regular grid of texture regions. + + To construct, create an `ImageGrid` first:: + + image_grid = ImageGrid(...) + texture_grid = TextureGrid(image_grid) + + The texture grid can be accessed as a single texture, or as a sequence + of `TextureRegion`. When accessing as a sequence, you can specify + integer indexes, in which the images are arranged in rows from the + bottom-left to the top-right:: + + # assume the texture_grid is 3x3: + current_texture = texture_grid[3] # get the middle-left image + + You can also specify tuples in the sequence methods, which are addressed + as ``row, column``:: + + # equivalent to the previous example: + current_texture = texture_grid[1, 0] + + When using tuples in a slice, the returned sequence is over the + rectangular region defined by the slice:: + + # returns center, center-right, center-top, top-right images in that + # order: + images = texture_grid[(1,1):] + # equivalent to + images = texture_grid[(1,1):(3,3)] + + ''' + items = () + rows = 1 + columns = 1 + item_width = 0 + item_height = 0 + + def __init__(self, grid): + image = grid.get_texture() + if isinstance(image, TextureRegion): + owner = image.owner + else: + owner = image + + super(TextureGrid, self).__init__( + image.x, image.y, image.z, image.width, image.height, owner) + + items = [] + y = 0 + for row in range(grid.rows): + x = 0 + for col in range(grid.columns): + items.append( + self.get_region(x, y, grid.item_width, grid.item_height)) + x += grid.item_width + grid.column_padding + y += grid.item_height + grid.row_padding + + self.items = items + self.rows = grid.rows + self.columns = grid.columns + self.item_width = grid.item_width + self.item_height = grid.item_height + + def get(self, row, column): + return self[(row, column)] + + def __getitem__(self, index): + if type(index) is slice: + if type(index.start) is not tuple and \ + type(index.stop) is not tuple: + return self.items[index] + else: + row1 = 0 + col1 = 0 + row2 = self.rows + col2 = self.columns + if type(index.start) is tuple: + row1, col1 = index.start + elif type(index.start) is int: + row1 = index.start / self.columns + col1 = index.start % self.columns + assert row1 >= 0 and col1 >= 0 and \ + row1 < self.rows and col1 < self.columns + + if type(index.stop) is tuple: + row2, col2 = index.stop + elif type(index.stop) is int: + row2 = index.stop / self.columns + col2 = index.stop % self.columns + assert row2 >= 0 and col2 >= 0 and \ + row2 <= self.rows and col2 <= self.columns + + result = [] + i = row1 * self.columns + for row in range(row1, row2): + result += self.items[i+col1:i+col2] + i += self.columns + return result + else: + if type(index) is tuple: + row, column = index + assert row >= 0 and column >= 0 and \ + row < self.rows and column < self.columns + return self.items[row * self.columns + column] + elif type(index) is int: + return self.items[index] + + def __setitem__(self, index, value): + if type(index) is slice: + for region, image in zip(self[index], value): + if image.width != self.item_width or \ + image.height != self.item_height: + raise ImageException('Image has incorrect dimensions') + image.blit_into(region, image.anchor_x, image.anchor_y, 0) + else: + image = value + if image.width != self.item_width or \ + image.height != self.item_height: + raise ImageException('Image has incorrect dimensions') + image.blit_into(self[index], image.anchor_x, image.anchor_y, 0) + + def __len__(self): + return len(self.items) + + def __iter__(self): + return iter(self.items) + +# -------------------------------------------------------------------------- +# Animation stuff here. Vote on if this should be in pyglet.image.animation +# or just leave it tacked on here. + +# TODO: +# conversion Animation -> media.Source +# move to another module? +# pyglet.animation? +# pyglet.image.animation? + +def load_animation(filename, file=None, decoder=None): + '''Load an animation from a file. + + Currently, the only supported format is GIF. + + :Parameters: + `filename` : str + Used to guess the animation format, and to load the file if `file` + is unspecified. + `file` : file-like object or None + File object containing the animation stream. + `decoder` : ImageDecoder or None + If unspecified, all decoders that are registered for the filename + extension are tried. If none succeed, the exception from the + first decoder is raised. + + :rtype: Animation + ''' + if not file: + file = open(filename, 'rb') + if not hasattr(file, 'seek'): + file = StringIO(file.read()) + + if decoder: + return decoder.decode(file, filename) + else: + first_exception = None + for decoder in codecs.get_animation_decoders(filename): + try: + image = decoder.decode_animation(file, filename) + return image + except codecs.ImageDecodeException, e: + first_exception = first_exception or e + file.seek(0) + + if not first_exception: + raise codecs.ImageDecodeException('No image decoders are available') + raise first_exception + +class Animation(object): + '''Sequence of images with timing information. + + If no frames of the animation have a duration of ``None``, the animation + loops continuously; otherwise the animation stops at the first frame with + duration of ``None``. + + :Ivariables: + `frames` : list of `AnimationFrame` + The frames that make up the animation. + + ''' + def __init__(self, frames): + '''Create an animation directly from a list of frames. + + :Parameters: + `frames` : list of `AnimationFrame` + The frames that make up the animation. + + ''' + assert len(frames) + self.frames = frames + + def add_to_texture_bin(self, bin): + '''Add the images of the animation to a `TextureBin`. + + The animation frames are modified in-place to refer to the texture bin + regions. + + :Parameters: + `bin` : `TextureBin` + Texture bin to upload animation frames into. + + ''' + for frame in self.frames: + frame.image = bin.add(frame.image) + + def get_transform(self, flip_x=False, flip_y=False, rotate=0): + '''Create a copy of this animation applying a simple transformation. + + The transformation is applied around the image's anchor point of + each frame. The texture data is shared between the original animation + and the transformed animation. + + :Parameters: + `flip_x` : bool + If True, the returned animation will be flipped horizontally. + `flip_y` : bool + If True, the returned animation will be flipped vertically. + `rotate` : int + Degrees of clockwise rotation of the returned animation. Only + 90-degree increments are supported. + + :rtype: `Animation` + ''' + frames = [AnimationFrame( + frame.image.get_texture().get_transform( + flip_x, flip_y, rotate), frame.duration) \ + for frame in self.frames] + return Animation(frames) + + def get_duration(self): + '''Get the total duration of the animation in seconds. + + :rtype: float + ''' + return sum([frame.duration for frame in self.frames \ + if frame.duration is not None]) + + def get_max_width(self): + '''Get the maximum image frame width. + + This method is useful for determining texture space requirements: due + to the use of ``anchor_x`` the actual required playback area may be + larger. + + :rtype: int + ''' + return max([frame.image.width for frame in self.frames]) + + def get_max_height(self): + '''Get the maximum image frame height. + + This method is useful for determining texture space requirements: due + to the use of ``anchor_y`` the actual required playback area may be + larger. + + :rtype: int + ''' + return max([frame.image.height for frame in self.frames]) + + @classmethod + def from_image_sequence(cls, sequence, period, loop=True): + '''Create an animation from a list of images and a constant framerate. + + :Parameters: + `sequence` : list of `AbstractImage` + Images that make up the animation, in sequence. + `period` : float + Number of seconds to display each image. + `loop` : bool + If True, the animation will loop continuously. + + :rtype: `Animation` + ''' + frames = [AnimationFrame(image, period) for image in sequence] + if not loop: + frames[-1].duration = None + return cls(frames) + +class AnimationFrame(object): + '''A single frame of an animation. + ''' + def __init__(self, image, duration): + '''Create an animation frame from an image. + + :Parameters: + `image` : `AbstractImage` + The image of this frame. + `duration` : float + Number of seconds to display the frame, or ``None`` if it is + the last frame in the animation. + + ''' + self.image = image + self.duration = duration + + def __repr__(self): + return 'AnimationFrame(%r, %r)' % (self.image, self.duration) + + +# Initialise default codecs +from pyglet.image import codecs as _codecs +_codecs.add_default_image_codecs() diff --git a/pyglet/image/atlas.py b/pyglet/image/atlas.py new file mode 100644 index 0000000..6d6226a --- /dev/null +++ b/pyglet/image/atlas.py @@ -0,0 +1,259 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''Group multiple small images into larger textures. + +This module is used by `pyglet.resource` to efficiently pack small images into +larger textures. `TextureAtlas` maintains one texture; `TextureBin` manages a +collection of atlases of a given size. + +Example usage:: + + # Load images from disk + car_image = pyglet.image.load('car.png') + boat_image = pyglet.image.load('boat.png') + + # Pack these images into one or more textures + bin = TextureBin() + car_texture = bin.add(car_image) + boat_texture = bin.add(boat_image) + +The result of `TextureBin.add` is a `TextureRegion` containing the image. +Once added, an image cannot be removed from a bin (or an atlas); nor can a +list of images be obtained from a given bin or atlas -- it is the +application's responsibility to keep track of the regions returned by the +``add`` methods. + +:since: pyglet 1.1 +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: $' + +import pyglet + +class AllocatorException(Exception): + '''The allocator does not have sufficient free space for the requested + image size.''' + pass + +class _Strip(object): + def __init__(self, y, max_height): + self.x = 0 + self.y = y + self.max_height = max_height + self.y2 = y + + def add(self, width, height): + assert width > 0 and height > 0 + assert height <= self.max_height + + x, y = self.x, self.y + self.x += width + self.y2 = max(self.y + height, self.y2) + return x, y + + def compact(self): + self.max_height = self.y2 - self.y + +class Allocator(object): + '''Rectangular area allocation algorithm. + + Initialise with a given ``width`` and ``height``, then repeatedly + call `alloc` to retrieve free regions of the area and protect that + area from future allocations. + + `Allocator` uses a fairly simple strips-based algorithm. It performs best + when rectangles are allocated in decreasing height order. + ''' + def __init__(self, width, height): + '''Create an `Allocator` of the given size. + + :Parameters: + `width` : int + Width of the allocation region. + `height` : int + Height of the allocation region. + + ''' + assert width > 0 and height > 0 + self.width = width + self.height = height + self.strips = [_Strip(0, height)] + self.used_area = 0 + + def alloc(self, width, height): + '''Get a free area in the allocator of the given size. + + After calling `alloc`, the requested area will no longer be used. + If there is not enough room to fit the given area `AllocatorException` + is raised. + + :Parameters: + `width` : int + Width of the area to allocate. + `height` : int + Height of the area to allocate. + + :rtype: int, int + :return: The X and Y coordinates of the bottom-left corner of the + allocated region. + ''' + for strip in self.strips: + if self.width - strip.x >= width and strip.max_height >= height: + self.used_area += width * height + return strip.add(width, height) + + if self.width >= width and self.height - strip.y2 >= height: + self.used_area += width * height + strip.compact() + newstrip = _Strip(strip.y2, self.height - strip.y2) + self.strips.append(newstrip) + return newstrip.add(width, height) + + raise AllocatorException('No more space in %r for box %dx%d' % ( + self, width, height)) + + def get_usage(self): + '''Get the fraction of area already allocated. + + This method is useful for debugging and profiling only. + + :rtype: float + ''' + return self.used_area / float(self.width * self.height) + + def get_fragmentation(self): + '''Get the fraction of area that's unlikely to ever be used, based on + current allocation behaviour. + + This method is useful for debugging and profiling only. + + :rtype: float + ''' + # The total unused area in each compacted strip is summed. + if not self.strips: + return 0. + possible_area = self.strips[-1].y2 * width + return 1.0 - self.used_area / float(possible_area) + +class TextureAtlas(object): + '''Collection of images within a texture. + ''' + def __init__(self, width=256, height=256): + '''Create a texture atlas of the given size. + + :Parameters: + `width` : int + Width of the underlying texture. + `height` : int + Height of the underlying texture. + + ''' + self.texture = pyglet.image.Texture.create( + width, height, pyglet.gl.GL_RGBA, rectangle=True) + self.allocator = Allocator(width, height) + + def add(self, img): + '''Add an image to the atlas. + + This method will fail if the given image cannot be transferred + directly to a texture (for example, if it is another texture). + `ImageData` is the usual image type for this method. + + `AllocatorException` will be raised if there is no room in the atlas + for the image. + + :Parameters: + `img` : `AbstractImage` + The image to add. + + :rtype: `TextureRegion` + :return: The region of the atlas containing the newly added image. + ''' + + x, y = self.allocator.alloc(img.width, img.height) + self.texture.blit_into(img, x, y, 0) + region = self.texture.get_region(x, y, img.width, img.height) + return region + +class TextureBin(object): + '''Collection of texture atlases. + + `TextureBin` maintains a collection of texture atlases, and creates new + ones as necessary to accomodate images added to the bin. + ''' + def __init__(self, texture_width=256, texture_height=256): + '''Create a texture bin for holding atlases of the given size. + + :Parameters: + `texture_width` : int + Width of texture atlases to create. + `texture_height` : int + Height of texture atlases to create. + + ''' + self.atlases = [] + self.texture_width = texture_width + self.texture_height = texture_height + + def add(self, img): + '''Add an image into this texture bin. + + This method calls `TextureAtlas.add` for the first atlas that has room + for the image. + + `AllocatorException` is raised if the image exceeds the dimensions of + ``texture_width`` and ``texture_height``. + + :Parameters: + `img` : `AbstractImage` + The image to add. + + :rtype: `TextureRegion` + :return: The region of an atlas containing the newly added image. + ''' + for atlas in list(self.atlases): + try: + return atlas.add(img) + except AllocatorException: + # Remove atlases that are no longer useful (this is so their + # textures can later be freed if the images inside them get + # collected). + if img.width < 64 and img.height < 64: + self.atlases.remove(atlas) + + atlas = TextureAtlas(self.texture_width, self.texture_height) + self.atlases.append(atlas) + return atlas.add(img) diff --git a/pyglet/image/codecs/__init__.py b/pyglet/image/codecs/__init__.py new file mode 100644 index 0000000..8a9c1d5 --- /dev/null +++ b/pyglet/image/codecs/__init__.py @@ -0,0 +1,231 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''Collection of image encoders and decoders. + +Modules must subclass ImageDecoder and ImageEncoder for each method of +decoding/encoding they support. + +Modules must also implement the two functions:: + + def get_decoders(): + # Return a list of ImageDecoder instances or [] + return [] + + def get_encoders(): + # Return a list of ImageEncoder instances or [] + return [] + +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: $' + +import os.path + +_decoders = [] # List of registered ImageDecoders +_decoder_extensions = {} # Map str -> list of matching ImageDecoders +_decoder_animation_extensions = {} + # Map str -> list of matching ImageDecoders +_encoders = [] # List of registered ImageEncoders +_encoder_extensions = {} # Map str -> list of matching ImageEncoders + +class ImageDecodeException(Exception): + pass + +class ImageEncodeException(Exception): + pass + +class ImageDecoder(object): + def get_file_extensions(self): + '''Return a list of accepted file extensions, e.g. ['.png', '.bmp'] + Lower-case only. + ''' + return [] + + def get_animation_file_extensions(self): + '''Return a list of accepted file extensions, e.g. ['.gif', '.flc'] + Lower-case only. + ''' + return [] + + def decode(self, file, filename): + '''Decode the given file object and return an instance of `Image`. + Throws ImageDecodeException if there is an error. filename + can be a file type hint. + ''' + raise NotImplementedError() + + def decode_animation(self, file, filename): + '''Decode the given file object and return an instance of `Animation`. + Throws ImageDecodeException if there is an error. filename + can be a file type hint. + ''' + raise ImageDecodeException('This decoder cannot decode animations.') + +class ImageEncoder(object): + def get_file_extensions(self): + '''Return a list of accepted file extensions, e.g. ['.png', '.bmp'] + Lower-case only. + ''' + return [] + + def encode(self, image, file, filename, options={}): + '''Encode the given image to the given file. filename + provides a hint to the file format desired. options are + encoder-specific, and unknown options should be ignored or + issue warnings. + ''' + raise NotImplementedError() + +def get_encoders(filename=None): + '''Get an ordered list of encoders to attempt. filename can be used + as a hint for the filetype. + ''' + encoders = [] + if filename: + extension = os.path.splitext(filename)[1].lower() + encoders += _encoder_extensions.get(extension, []) + encoders += [e for e in _encoders if e not in encoders] + return encoders + +def get_decoders(filename=None): + '''Get an ordered list of decoders to attempt. filename can be used + as a hint for the filetype. + ''' + decoders = [] + if filename: + extension = os.path.splitext(filename)[1].lower() + decoders += _decoder_extensions.get(extension, []) + decoders += [e for e in _decoders if e not in decoders] + return decoders + +def get_animation_decoders(filename=None): + '''Get an ordered list of decoders to attempt. filename can be used + as a hint for the filetype. + ''' + decoders = [] + if filename: + extension = os.path.splitext(filename)[1].lower() + decoders += _decoder_animation_extensions.get(extension, []) + decoders += [e for e in _decoders if e not in decoders] + return decoders + +def add_decoders(module): + '''Add a decoder module. The module must define `get_decoders`. Once + added, the appropriate decoders defined in the codec will be returned by + pyglet.image.codecs.get_decoders. + ''' + for decoder in module.get_decoders(): + _decoders.append(decoder) + for extension in decoder.get_file_extensions(): + if extension not in _decoder_extensions: + _decoder_extensions[extension] = [] + _decoder_extensions[extension].append(decoder) + for extension in decoder.get_animation_file_extensions(): + if extension not in _decoder_animation_extensions: + _decoder_animation_extensions[extension] = [] + _decoder_animation_extensions[extension].append(decoder) + +def add_encoders(module): + '''Add an encoder module. The module must define `get_encoders`. Once + added, the appropriate encoders defined in the codec will be returned by + pyglet.image.codecs.get_encoders. + ''' + for encoder in module.get_encoders(): + _encoders.append(encoder) + for extension in encoder.get_file_extensions(): + if extension not in _encoder_extensions: + _encoder_extensions[extension] = [] + _encoder_extensions[extension].append(encoder) + +def add_default_image_codecs(): + # Add the codecs we know about. These should be listed in order of + # preference. This is called automatically by pyglet.image. + + # Compressed texture in DDS format + try: + from pyglet.image.codecs import dds + add_encoders(dds) + add_decoders(dds) + except ImportError: + pass + + # Mac OS X default: QuickTime + try: + import pyglet.image.codecs.quicktime + add_encoders(quicktime) + add_decoders(quicktime) + except ImportError: + pass + + # Windows XP default: GDI+ + try: + import pyglet.image.codecs.gdiplus + add_encoders(gdiplus) + add_decoders(gdiplus) + except ImportError: + pass + + # Linux default: GdkPixbuf 2.0 + try: + import pyglet.image.codecs.gdkpixbuf2 + add_encoders(gdkpixbuf2) + add_decoders(gdkpixbuf2) + except ImportError: + pass + + # Fallback: PIL + try: + import pyglet.image.codecs.pil + add_encoders(pil) + add_decoders(pil) + except ImportError: + pass + + # Fallback: PNG loader (slow) + try: + import pyglet.image.codecs.png + add_encoders(png) + add_decoders(png) + except ImportError: + pass + + # Fallback: BMP loader (slow) + try: + import pyglet.image.codecs.bmp + add_encoders(bmp) + add_decoders(bmp) + except ImportError: + pass diff --git a/pyglet/image/codecs/bmp.py b/pyglet/image/codecs/bmp.py new file mode 100644 index 0000000..5d7daa5 --- /dev/null +++ b/pyglet/image/codecs/bmp.py @@ -0,0 +1,359 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''Decoder for BMP files. + +Currently supports version 3 and 4 bitmaps with BI_RGB and BI_BITFIELDS +encoding. Alpha channel is supported for 32-bit BI_RGB only. +''' + +# Official docs are at +# http://msdn2.microsoft.com/en-us/library/ms532311.aspx +# +# But some details including alignment and bit/byte order are omitted; see +# http://www.fileformat.info/format/bmp/egff.htm + +__docformat__ = 'restructuredtext' +__version__ = '$Id: bmp.py 2019 2008-04-18 14:30:48Z Alex.Holkner $' + +import ctypes + +from pyglet.image import ImageData +from pyglet.image.codecs import ImageDecoder, ImageDecodeException + +BYTE = ctypes.c_ubyte +WORD = ctypes.c_uint16 +DWORD = ctypes.c_uint32 +LONG = ctypes.c_int32 +FXPT2DOT30 = ctypes.c_uint32 + +BI_RGB = 0 +BI_RLE8 = 1 +BI_RLE4 = 2 +BI_BITFIELDS = 3 + +class BITMAPFILEHEADER(ctypes.LittleEndianStructure): + _pack_ = 1 + _fields_ = [ + ('bfType', WORD), + ('bfSize', DWORD), + ('bfReserved1', WORD), + ('bfReserved2', WORD), + ('bfOffBits', DWORD) + ] + +class BITMAPINFOHEADER(ctypes.LittleEndianStructure): + _pack_ = 1 + _fields_ = [ + ('biSize', DWORD), + ('biWidth', LONG), + ('biHeight', LONG), + ('biPlanes', WORD), + ('biBitCount', WORD), + ('biCompression', DWORD), + ('biSizeImage', DWORD), + ('biXPelsPerMeter', LONG), + ('biYPelsPerMeter', LONG), + ('biClrUsed', DWORD), + ('biClrImportant', DWORD) + ] + +CIEXYZTRIPLE = FXPT2DOT30 * 9 + +class BITMAPV4HEADER(ctypes.LittleEndianStructure): + _pack_ = 1 + _fields_ = [ + ('biSize', DWORD), + ('biWidth', LONG), + ('biHeight', LONG), + ('biPlanes', WORD), + ('biBitCount', WORD), + ('biCompression', DWORD), + ('biSizeImage', DWORD), + ('biXPelsPerMeter', LONG), + ('biYPelsPerMeter', LONG), + ('biClrUsed', DWORD), + ('biClrImportant', DWORD), + ('bV4RedMask', DWORD), + ('bV4GreenMask', DWORD), + ('bV4BlueMask', DWORD), + ('bV4AlphaMask', DWORD), + ('bV4CSType', DWORD), + ('bV4Endpoints', CIEXYZTRIPLE), + ('bV4GammaRed', DWORD), + ('bV4GammaGreen', DWORD), + ('bV4GammaBlue', DWORD), + ] + +class RGBFields(ctypes.LittleEndianStructure): + _pack_ = 1 + _fields_ = [ + ('red', DWORD), + ('green', DWORD), + ('blue', DWORD), + ] + + +class RGBQUAD(ctypes.LittleEndianStructure): + _pack_ = 1 + _fields_ = [ + ('rgbBlue', BYTE), + ('rgbGreen', BYTE), + ('rgbRed', BYTE), + ('rgbReserved', BYTE) + ] + + def __repr__(self): + return '<%d, %d, %d>' % (self.rgbRed, self.rgbGreen, self.rgbBlue) + +def ptr_add(ptr, offset): + address = ctypes.addressof(ptr.contents) + offset + return ctypes.pointer(type(ptr.contents).from_address(address)) + +def to_ctypes(buffer, offset, type): + if offset + ctypes.sizeof(type) > len(buffer): + raise ImageDecodeException('BMP file is truncated') + ptr = ptr_add(ctypes.pointer(buffer), offset) + return ctypes.cast(ptr, ctypes.POINTER(type)).contents + +class BMPImageDecoder(ImageDecoder): + def get_file_extensions(self): + return ['.bmp'] + + def decode(self, file, filename): + if not file: + file = open(filename, 'rb') + bytes = file.read() + buffer = ctypes.c_buffer(bytes) + + if bytes[:2] != 'BM': + raise ImageDecodeException( + 'Not a Windows bitmap file: %r' % (filename or file)) + + file_header = to_ctypes(buffer, 0, BITMAPFILEHEADER) + bits_offset = file_header.bfOffBits + info_header_offset = ctypes.sizeof(BITMAPFILEHEADER) + info_header = to_ctypes(buffer, info_header_offset, BITMAPINFOHEADER) + palette_offset = info_header_offset + info_header.biSize + + if info_header.biSize < ctypes.sizeof(BITMAPINFOHEADER): + raise ImageDecodeException( + 'Unsupported BMP type: %r' % (filename or file)) + + width = info_header.biWidth + height = info_header.biHeight + if width <= 0 or info_header.biPlanes != 1: + raise ImageDecodeException( + 'BMP file has corrupt parameters: %r' % (filename or file)) + pitch_sign = height < 0 and -1 or 1 + height = abs(height) + + compression = info_header.biCompression + if compression not in (BI_RGB, BI_BITFIELDS): + raise ImageDecodeException( + 'Unsupported compression: %r' % (filename or file)) + + clr_used = 0 + bitcount = info_header.biBitCount + if bitcount == 1: + pitch = (width + 7) // 8 + bits_type = ctypes.c_ubyte + decoder = decode_1bit + elif bitcount == 4: + pitch = (width + 1) // 2 + bits_type = ctypes.c_ubyte + decoder = decode_4bit + elif bitcount == 8: + bits_type = ctypes.c_ubyte + pitch = width + decoder = decode_8bit + elif bitcount == 16: + pitch = width * 2 + bits_type = ctypes.c_uint16 + decoder = decode_bitfields + elif bitcount == 24: + pitch = width * 3 + bits_type = ctypes.c_ubyte + decoder = decode_24bit + elif bitcount == 32: + pitch = width * 4 + if compression == BI_RGB: + decoder = decode_32bit_rgb + bits_type = ctypes.c_ubyte + elif compression == BI_BITFIELDS: + decoder = decode_bitfields + bits_type = ctypes.c_uint32 + else: + raise ImageDecodeException( + 'Unsupported compression: %r' % (filename or file)) + else: + raise ImageDecodeException( + 'Unsupported bit count %d: %r' % (bitcount, filename or file)) + + pitch = (pitch + 3) & ~3 + packed_width = pitch // ctypes.sizeof(bits_type) + + if bitcount < 16 and compression == BI_RGB: + clr_used = info_header.biClrUsed or (1 << bitcount) + palette = to_ctypes(buffer, palette_offset, RGBQUAD * clr_used) + bits = to_ctypes(buffer, bits_offset, + bits_type * packed_width * height) + return decoder(bits, palette, width, height, pitch, pitch_sign) + elif bitcount >= 16 and compression == BI_RGB: + bits = to_ctypes(buffer, bits_offset, + bits_type * (packed_width * height)) + return decoder(bits, None, width, height, pitch, pitch_sign) + elif compression == BI_BITFIELDS: + if info_header.biSize >= ctypes.sizeof(BITMAPV4HEADER): + info_header = to_ctypes(buffer, info_header_offset, + BITMAPV4HEADER) + r_mask = info_header.bV4RedMask + g_mask = info_header.bV4GreenMask + b_mask = info_header.bV4BlueMask + else: + fields_offset = info_header_offset + \ + ctypes.sizeof(BITMAPINFOHEADER) + fields = to_ctypes(buffer, fields_offset, RGBFields) + r_mask = fields.red + g_mask = fields.green + b_mask = fields.blue + class _BitsArray(ctypes.LittleEndianStructure): + _pack_ = 1 + _fields_ = [ + ('data', bits_type * packed_width * height), + ] + bits = to_ctypes(buffer, bits_offset, _BitsArray).data + return decoder(bits, r_mask, g_mask, b_mask, + width, height, pitch, pitch_sign) + +def decode_1bit(bits, palette, width, height, pitch, pitch_sign): + rgb_pitch = (((pitch << 3) + 7) & ~0x7) * 3 + buffer = (ctypes.c_ubyte * (height * rgb_pitch))() + i = 0 + for row in bits: + for packed in row: + for _ in range(8): + rgb = palette[(packed & 0x80) >> 7] + buffer[i] = rgb.rgbRed + buffer[i + 1] = rgb.rgbGreen + buffer[i + 2] = rgb.rgbBlue + i += 3 + packed <<= 1 + + return ImageData(width, height, 'RGB', buffer, pitch_sign * rgb_pitch) + +def decode_4bit(bits, palette, width, height, pitch, pitch_sign): + rgb_pitch = (((pitch << 1) + 1) & ~0x1) * 3 + buffer = (ctypes.c_ubyte * (height * rgb_pitch))() + i = 0 + for row in bits: + for packed in row: + for index in ((packed & 0xf0) >> 4, packed & 0xf): + rgb = palette[index] + buffer[i] = rgb.rgbRed + buffer[i + 1] = rgb.rgbGreen + buffer[i + 2] = rgb.rgbBlue + i += 3 + + return ImageData(width, height, 'RGB', buffer, pitch_sign * rgb_pitch) + +def decode_8bit(bits, palette, width, height, pitch, pitch_sign): + rgb_pitch = pitch * 3 + buffer = (ctypes.c_ubyte * (height * rgb_pitch))() + i = 0 + for row in bits: + for index in row: + rgb = palette[index] + buffer[i] = rgb.rgbRed + buffer[i + 1] = rgb.rgbGreen + buffer[i + 2] = rgb.rgbBlue + i += 3 + + return ImageData(width, height, 'RGB', buffer, pitch_sign * rgb_pitch) + + +def decode_24bit(bits, palette, width, height, pitch, pitch_sign): + buffer = (ctypes.c_ubyte * (height * pitch))() + ctypes.memmove(buffer, bits, len(buffer)) + return ImageData(width, height, 'BGR', buffer, pitch_sign * pitch) + +def decode_32bit_rgb(bits, palette, width, height, pitch, pitch_sign): + buffer = (ctypes.c_ubyte * (height * pitch))() + ctypes.memmove(buffer, bits, len(buffer)) + return ImageData(width, height, 'BGRA', buffer, pitch_sign * pitch) + +def get_shift(mask): + if not mask: + return 0 + + # Shift down + shift = 0 + while not (1 << shift) & mask: + shift += 1 + + # Shift up + shift_up = 0 + while (mask >> shift) >> shift_up: + shift_up += 1 + + s = shift - (8 - shift_up) + if s < 0: + return 0, -s + else: + return s, 0 + +def decode_bitfields(bits, r_mask, g_mask, b_mask, + width, height, pitch, pitch_sign): + r_shift1, r_shift2 = get_shift(r_mask) + g_shift1, g_shift2 = get_shift(g_mask) + b_shift1, b_shift2 = get_shift(b_mask) + + rgb_pitch = 3 * len(bits[0]) + buffer = (ctypes.c_ubyte * (height * rgb_pitch))() + + i = 0 + for row in bits: + for packed in row: + buffer[i] = (packed & r_mask) >> r_shift1 << r_shift2 + buffer[i+1] = (packed & g_mask) >> g_shift1 << g_shift2 + buffer[i+2] = (packed & b_mask) >> b_shift1 << b_shift2 + i += 3 + + return ImageData(width, height, 'RGB', buffer, pitch_sign * rgb_pitch) + +def get_decoders(): + return [BMPImageDecoder()] + +def get_encoders(): + return [] diff --git a/pyglet/image/codecs/dds.py b/pyglet/image/codecs/dds.py new file mode 100644 index 0000000..06575df --- /dev/null +++ b/pyglet/image/codecs/dds.py @@ -0,0 +1,238 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''DDS texture loader. + +Reference: http://msdn2.microsoft.com/en-us/library/bb172993.aspx +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: dds.py 1579 2008-01-15 14:47:19Z Alex.Holkner $' + +from ctypes import * +import struct + +from pyglet.gl import * +from pyglet.gl import gl_info +from pyglet.image import CompressedImageData +from pyglet.image import codecs +from pyglet.image.codecs import s3tc + +class DDSException(codecs.ImageDecodeException): + pass + +# dwFlags of DDSURFACEDESC2 +DDSD_CAPS = 0x00000001 +DDSD_HEIGHT = 0x00000002 +DDSD_WIDTH = 0x00000004 +DDSD_PITCH = 0x00000008 +DDSD_PIXELFORMAT = 0x00001000 +DDSD_MIPMAPCOUNT = 0x00020000 +DDSD_LINEARSIZE = 0x00080000 +DDSD_DEPTH = 0x00800000 + +# ddpfPixelFormat of DDSURFACEDESC2 +DDPF_ALPHAPIXELS = 0x00000001 +DDPF_FOURCC = 0x00000004 +DDPF_RGB = 0x00000040 + +# dwCaps1 of DDSCAPS2 +DDSCAPS_COMPLEX = 0x00000008 +DDSCAPS_TEXTURE = 0x00001000 +DDSCAPS_MIPMAP = 0x00400000 + +# dwCaps2 of DDSCAPS2 +DDSCAPS2_CUBEMAP = 0x00000200 +DDSCAPS2_CUBEMAP_POSITIVEX = 0x00000400 +DDSCAPS2_CUBEMAP_NEGATIVEX = 0x00000800 +DDSCAPS2_CUBEMAP_POSITIVEY = 0x00001000 +DDSCAPS2_CUBEMAP_NEGATIVEY = 0x00002000 +DDSCAPS2_CUBEMAP_POSITIVEZ = 0x00004000 +DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x00008000 +DDSCAPS2_VOLUME = 0x00200000 + +class _filestruct(object): + def __init__(self, data): + if len(data) < self.get_size(): + raise DDSException('Not a DDS file') + items = struct.unpack(self.get_format(), data) + for field, value in map(None, self._fields, items): + setattr(self, field[0], value) + + def __repr__(self): + name = self.__class__.__name__ + return '%s(%s)' % \ + (name, (', \n%s' % (' ' * (len(name) + 1))).join( \ + ['%s = %s' % (field[0], repr(getattr(self, field[0]))) \ + for field in self._fields])) + + @classmethod + def get_format(cls): + return '<' + ''.join([f[1] for f in cls._fields]) + + @classmethod + def get_size(cls): + return struct.calcsize(cls.get_format()) + +class DDSURFACEDESC2(_filestruct): + _fields = [ + ('dwMagic', '4s'), + ('dwSize', 'I'), + ('dwFlags', 'I'), + ('dwHeight', 'I'), + ('dwWidth', 'I'), + ('dwPitchOrLinearSize', 'I'), + ('dwDepth', 'I'), + ('dwMipMapCount', 'I'), + ('dwReserved1', '44s'), + ('ddpfPixelFormat', '32s'), + ('dwCaps1', 'I'), + ('dwCaps2', 'I'), + ('dwCapsReserved', '8s'), + ('dwReserved2', 'I') + ] + + def __init__(self, data): + super(DDSURFACEDESC2, self).__init__(data) + self.ddpfPixelFormat = DDPIXELFORMAT(self.ddpfPixelFormat) + + +class DDPIXELFORMAT(_filestruct): + _fields = [ + ('dwSize', 'I'), + ('dwFlags', 'I'), + ('dwFourCC', '4s'), + ('dwRGBBitCount', 'I'), + ('dwRBitMask', 'I'), + ('dwGBitMask', 'I'), + ('dwBBitMask', 'I'), + ('dwRGBAlphaBitMask', 'I') + ] + +_compression_formats = { + ('DXT1', False): (GL_COMPRESSED_RGB_S3TC_DXT1_EXT, s3tc.decode_dxt1_rgb), + ('DXT1', True): (GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, s3tc.decode_dxt1_rgba), + ('DXT3', False): (GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, s3tc.decode_dxt3), + ('DXT3', True): (GL_COMPRESSED_RGBA_S3TC_DXT3_EXT, s3tc.decode_dxt3), + ('DXT5', False): (GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, s3tc.decode_dxt5), + ('DXT5', True): (GL_COMPRESSED_RGBA_S3TC_DXT5_EXT, s3tc.decode_dxt5), +} + +def _check_error(): + e = glGetError() + if e != 0: + print 'GL error %d' % e + +class DDSImageDecoder(codecs.ImageDecoder): + def get_file_extensions(self): + return ['.dds'] + + def decode(self, file, filename): + header = file.read(DDSURFACEDESC2.get_size()) + desc = DDSURFACEDESC2(header) + if desc.dwMagic != 'DDS ' or desc.dwSize != 124: + raise DDSException('Invalid DDS file (incorrect header).') + + width = desc.dwWidth + height = desc.dwHeight + compressed = False + volume = False + mipmaps = 1 + + if desc.dwFlags & DDSD_PITCH: + pitch = desc.dwPitchOrLinearSize + elif desc.dwFlags & DDSD_LINEARSIZE: + image_size = desc.dwPitchOrLinearSize + compressed = True + + if desc.dwFlags & DDSD_DEPTH: + raise DDSException('Volume DDS files unsupported') + volume = True + depth = desc.dwDepth + + if desc.dwFlags & DDSD_MIPMAPCOUNT: + mipmaps = desc.dwMipMapCount + + if desc.ddpfPixelFormat.dwSize != 32: + raise DDSException('Invalid DDS file (incorrect pixel format).') + + if desc.dwCaps2 & DDSCAPS2_CUBEMAP: + raise DDSException('Cubemap DDS files unsupported') + + if not desc.ddpfPixelFormat.dwFlags & DDPF_FOURCC: + raise DDSException('Uncompressed DDS textures not supported.') + + has_alpha = desc.ddpfPixelFormat.dwRGBAlphaBitMask != 0 + + format = None + format, decoder = _compression_formats.get( + (desc.ddpfPixelFormat.dwFourCC, has_alpha), None) + if not format: + raise DDSException('Unsupported texture compression %s' % \ + desc.ddpfPixelFormat.dwFourCC) + + if format == GL_COMPRESSED_RGB_S3TC_DXT1_EXT: + block_size = 8 + else: + block_size = 16 + + datas = [] + w, h = width, height + for i in range(mipmaps): + if not w and not h: + break + if not w: + w = 1 + if not h: + h = 1 + size = ((w + 3) / 4) * ((h + 3) / 4) * block_size + data = file.read(size) + datas.append(data) + w >>= 1 + h >>= 1 + + image = CompressedImageData(width, height, format, datas[0], + 'GL_EXT_texture_compression_s3tc', decoder) + level = 0 + for data in datas[1:]: + level += 1 + image.set_mipmap_data(level, data) + + return image + +def get_decoders(): + return [DDSImageDecoder()] + +def get_encoders(): + return [] diff --git a/pyglet/image/codecs/gdiplus.py b/pyglet/image/codecs/gdiplus.py new file mode 100644 index 0000000..342cbc7 --- /dev/null +++ b/pyglet/image/codecs/gdiplus.py @@ -0,0 +1,273 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +''' +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: pil.py 163 2006-11-13 04:15:46Z Alex.Holkner $' + +from ctypes import * + +from pyglet.gl import * +from pyglet.image import * +from pyglet.image.codecs import * +from pyglet.window.win32.constants import * +from pyglet.window.win32.types import * + +ole32 = windll.ole32 +kernel32 = windll.kernel32 +gdiplus = windll.gdiplus + +LPSTREAM = c_void_p +REAL = c_float + +PixelFormat1bppIndexed = 196865 +PixelFormat4bppIndexed = 197634 +PixelFormat8bppIndexed = 198659 +PixelFormat16bppGrayScale = 1052676 +PixelFormat16bppRGB555 = 135173 +PixelFormat16bppRGB565 = 135174 +PixelFormat16bppARGB1555 = 397319 +PixelFormat24bppRGB = 137224 +PixelFormat32bppRGB = 139273 +PixelFormat32bppARGB = 2498570 +PixelFormat32bppPARGB = 925707 +PixelFormat48bppRGB = 1060876 +PixelFormat64bppARGB = 3424269 +PixelFormat64bppPARGB = 29622286 +PixelFormatMax = 15 + +ImageLockModeRead = 1 +ImageLockModeWrite = 2 +ImageLockModeUserInputBuf = 4 + +class GdiplusStartupInput(Structure): + _fields_ = [ + ('GdiplusVersion', c_uint32), + ('DebugEventCallback', c_void_p), + ('SuppressBackgroundThread', BOOL), + ('SuppressExternalCodecs', BOOL) + ] + +class GdiplusStartupOutput(Structure): + _fields = [ + ('NotificationHookProc', c_void_p), + ('NotificationUnhookProc', c_void_p) + ] + +class BitmapData(Structure): + _fields_ = [ + ('Width', c_uint), + ('Height', c_uint), + ('Stride', c_int), + ('PixelFormat', c_int), + ('Scan0', POINTER(c_byte)), + ('Reserved', POINTER(c_uint)) + ] + +class Rect(Structure): + _fields_ = [ + ('X', c_int), + ('Y', c_int), + ('Width', c_int), + ('Height', c_int) + ] + +kernel32.GlobalAlloc.restype = HGLOBAL +kernel32.GlobalLock.restype = c_void_p + +PropertyTagFrameDelay = 0x5100 + +class PropertyItem(Structure): + _fields_ = [ + ('id', c_uint), + ('length', c_ulong), + ('type', c_short), + ('value', c_void_p) + ] + +class GDIPlusDecoder(ImageDecoder): + def get_file_extensions(self): + return ['.bmp', '.gif', '.jpg', '.jpeg', '.exif', '.png', '.tif', + '.tiff'] + + def get_animation_file_extensions(self): + # TIFF also supported as a multi-page image; but that's not really an + # animation, is it? + return ['.gif'] + + def _load_bitmap(self, file, filename): + data = file.read() + + # Create a HGLOBAL with image data + hglob = kernel32.GlobalAlloc(GMEM_MOVEABLE, len(data)) + ptr = kernel32.GlobalLock(hglob) + memmove(ptr, data, len(data)) + kernel32.GlobalUnlock(hglob) + + # Create IStream for the HGLOBAL + stream = LPSTREAM() + ole32.CreateStreamOnHGlobal(hglob, True, byref(stream)) + + # Load image from stream + bitmap = c_void_p() + status = gdiplus.GdipCreateBitmapFromStream(stream, byref(bitmap)) + if status != 0: + # TODO release stream + raise ImageDecodeException( + 'GDI+ cannot load %r' % (filename or file)) + + return bitmap + + def _get_image(self, bitmap): + # Get size of image (Bitmap subclasses Image) + width = REAL() + height = REAL() + gdiplus.GdipGetImageDimension(bitmap, byref(width), byref(height)) + width = int(width.value) + height = int(height.value) + + # Get image pixel format + pf = c_int() + gdiplus.GdipGetImagePixelFormat(bitmap, byref(pf)) + pf = pf.value + + # Reverse from what's documented because of Intel little-endianness. + format = 'BGRA' + if pf == PixelFormat24bppRGB: + format = 'BGR' + elif pf == PixelFormat32bppRGB: + pass + elif pf == PixelFormat32bppARGB: + pass + elif pf in (PixelFormat16bppARGB1555, PixelFormat32bppPARGB, + PixelFormat64bppARGB, PixelFormat64bppPARGB): + pf = PixelFormat32bppARGB + else: + format = 'BGR' + pf = PixelFormat24bppRGB + + # Lock pixel data in best format + rect = Rect() + rect.X = 0 + rect.Y = 0 + rect.Width = width + rect.Height = height + bitmap_data = BitmapData() + gdiplus.GdipBitmapLockBits(bitmap, + byref(rect), ImageLockModeRead, pf, byref(bitmap_data)) + + # Create buffer for RawImage + buffer = create_string_buffer(bitmap_data.Stride * height) + memmove(buffer, bitmap_data.Scan0, len(buffer)) + + # Unlock data + gdiplus.GdipBitmapUnlockBits(bitmap, byref(bitmap_data)) + + return ImageData(width, height, format, buffer, -bitmap_data.Stride) + + def _delete_bitmap(self, bitmap): + # Release image and stream + gdiplus.GdipDisposeImage(bitmap) + # TODO: How to call IUnknown::Release on stream? + + def decode(self, file, filename): + bitmap = self._load_bitmap(file, filename) + image = self._get_image(bitmap) + self._delete_bitmap(bitmap) + return image + + def decode_animation(self, file, filename): + bitmap = self._load_bitmap(file, filename) + + dimension_count = c_uint() + gdiplus.GdipImageGetFrameDimensionsCount(bitmap, byref(dimension_count)) + if dimension_count.value < 1: + self._delete_bitmap(bitmap) + raise ImageDecodeException('Image has no frame dimensions') + + # XXX Make sure this dimension is time? + dimensions = (c_void_p * dimension_count.value)() + gdiplus.GdipImageGetFrameDimensionsList(bitmap, dimensions, + dimension_count.value) + + frame_count = c_uint() + gdiplus.GdipImageGetFrameCount(bitmap, dimensions, byref(frame_count)) + + prop_id = PropertyTagFrameDelay + prop_size = c_uint() + gdiplus.GdipGetPropertyItemSize(bitmap, prop_id, byref(prop_size)) + + prop_buffer = c_buffer(prop_size.value) + prop_item = cast(prop_buffer, POINTER(PropertyItem)).contents + gdiplus.GdipGetPropertyItem(bitmap, prop_id, prop_size.value, + prop_buffer) + + # XXX Sure it's long? + n_delays = prop_item.length / sizeof(c_long) + delays = cast(prop_item.value, POINTER(c_long * n_delays)).contents + + frames = [] + + for i in range(frame_count.value): + gdiplus.GdipImageSelectActiveFrame(bitmap, dimensions, i) + image = self._get_image(bitmap) + + delay = delays[i] + if delay <= 1: + delay = 10 + frames.append(AnimationFrame(image, delay/100.)) + + self._delete_bitmap(bitmap) + + return Animation(frames) + +def get_decoders(): + return [GDIPlusDecoder()] + +def get_encoders(): + return [] + +def init(): + token = c_ulong() + startup_in = GdiplusStartupInput() + startup_in.GdiplusVersion = 1 + startup_out = GdiplusStartupOutput() + gdiplus.GdiplusStartup(byref(token), byref(startup_in), byref(startup_out)) + + # Shutdown later? + # gdiplus.GdiplusShutdown(token) + +init() diff --git a/pyglet/image/codecs/gdkpixbuf2.py b/pyglet/image/codecs/gdkpixbuf2.py new file mode 100644 index 0000000..2956d72 --- /dev/null +++ b/pyglet/image/codecs/gdkpixbuf2.py @@ -0,0 +1,165 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +''' +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: gdkpixbuf2.py 1939 2008-03-21 11:48:12Z Alex.Holkner $' + +from ctypes import * + +from pyglet.gl import * +from pyglet.image import * +from pyglet.image.codecs import * +from pyglet.image.codecs import gif + +import pyglet.lib +import pyglet.window + +gdk = pyglet.lib.load_library('gdk-x11-2.0') +gdkpixbuf = pyglet.lib.load_library('gdk_pixbuf-2.0') + +GdkPixbufLoader = c_void_p +GdkPixbuf = c_void_p +gdkpixbuf.gdk_pixbuf_loader_new.restype = GdkPixbufLoader +gdkpixbuf.gdk_pixbuf_loader_get_pixbuf.restype = GdkPixbuf +gdkpixbuf.gdk_pixbuf_get_pixels.restype = c_void_p +gdkpixbuf.gdk_pixbuf_loader_get_animation.restype = c_void_p +gdkpixbuf.gdk_pixbuf_animation_get_iter.restype = c_void_p +gdkpixbuf.gdk_pixbuf_animation_iter_get_pixbuf.restype = GdkPixbuf + +class GTimeVal(Structure): + _fields_ = [ + ('tv_sec', c_long), + ('tv_usec', c_long) + ] + +class GdkPixbuf2ImageDecoder(ImageDecoder): + def get_file_extensions(self): + return ['.png', '.xpm', '.jpg', '.jpeg', '.tif', '.tiff', '.pnm', + '.ras', '.bmp', '.gif'] + + def get_animation_file_extensions(self): + return ['.gif', '.ani'] + + def _load(self, file, filename, load_func): + data = file.read() + err = c_int() + loader = gdkpixbuf.gdk_pixbuf_loader_new() + gdkpixbuf.gdk_pixbuf_loader_write(loader, data, len(data), byref(err)) + result = load_func(loader) + if not gdkpixbuf.gdk_pixbuf_loader_close(loader, byref(err)): + raise ImageDecodeException(filename) + if not result: + raise ImageDecodeException('Unable to load: %s' % filename) + return result + + def _pixbuf_to_image(self, pixbuf): + # Get format and dimensions + width = gdkpixbuf.gdk_pixbuf_get_width(pixbuf) + height = gdkpixbuf.gdk_pixbuf_get_height(pixbuf) + channels = gdkpixbuf.gdk_pixbuf_get_n_channels(pixbuf) + rowstride = gdkpixbuf.gdk_pixbuf_get_rowstride(pixbuf) + has_alpha = gdkpixbuf.gdk_pixbuf_get_has_alpha(pixbuf) + pixels = gdkpixbuf.gdk_pixbuf_get_pixels(pixbuf) + + # Copy pixel data. + buffer = (c_ubyte * (rowstride * height))() + memmove(buffer, pixels, rowstride * (height - 1) + width * channels) + + # Release pixbuf + gdk.g_object_unref(pixbuf) + + # Determine appropriate GL type + if channels == 3: + format = 'RGB' + else: + format = 'RGBA' + + return ImageData(width, height, format, buffer, -rowstride) + + def decode(self, file, filename): + pixbuf = self._load(file, filename, + gdkpixbuf.gdk_pixbuf_loader_get_pixbuf) + + return self._pixbuf_to_image(pixbuf) + + def decode_animation(self, file, filename): + # Extract GIF control data. If it's not a GIF, this method will + # raise. + gif_stream = gif.read(file) + delays = [image.delay for image in gif_stream.images] + + # Get GDK animation iterator + file.seek(0) + anim = self._load(file, filename, + gdkpixbuf.gdk_pixbuf_loader_get_animation) + time = GTimeVal(0, 0) + iter = gdkpixbuf.gdk_pixbuf_animation_get_iter(anim, byref(time)) + + frames = [] + + # Extract each image + for control_delay in delays: + pixbuf = gdkpixbuf.gdk_pixbuf_animation_iter_get_pixbuf(iter) + image = self._pixbuf_to_image(pixbuf) + frames.append(AnimationFrame(image, control_delay)) + + gdk_delay = gdkpixbuf.gdk_pixbuf_animation_iter_get_delay_time(iter) + gdk_delay *= 1000 # milliseconds to microseconds + # Compare gdk_delay to control_delay for interest only. + #print control_delay, gdk_delay / 1000000. + + if gdk_delay == -1: + break + + us = time.tv_usec + gdk_delay + time.tv_sec += us // 1000000 + time.tv_usec = us % 1000000 + gdkpixbuf.gdk_pixbuf_animation_iter_advance(iter, byref(time)) + + return Animation(frames) + +def get_decoders(): + return [GdkPixbuf2ImageDecoder()] + +def get_encoders(): + return [] + +def init(): + gdk.g_type_init() + +init() + diff --git a/pyglet/image/codecs/gif.py b/pyglet/image/codecs/gif.py new file mode 100644 index 0000000..4751cf0 --- /dev/null +++ b/pyglet/image/codecs/gif.py @@ -0,0 +1,169 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''Read GIF control data. + +http://www.w3.org/Graphics/GIF/spec-gif89a.txt +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: gif.py 1938 2008-03-21 11:47:05Z Alex.Holkner $' + +import struct + +from pyglet.image.codecs import ImageDecodeException + +class GIFStream(object): + def __init__(self): + self.images = [] + +class GIFImage(object): + delay = None + +class GraphicsScope(object): + delay = None + +# Appendix A. +LABEL_EXTENSION_INTRODUCER = 0x21 +LABEL_GRAPHIC_CONTROL_EXTENSION = 0xf9 +LABEL_IMAGE_DESCRIPTOR = 0x2c +LABEL_TRAILER = 0x3b + +def unpack(format, file): + size = struct.calcsize(format) + data = file.read(size) + if len(data) < size: + raise ImageDecodeException('Unexpected EOF') + return struct.unpack(format, data) + +def read_byte(file): + data = file.read(1) + if not len(data): + raise ImageDecodeException('Unexpected EOF') + return ord(data) + +def read(file): + '''Read a GIF file stream. + + :rtype: GIFStream + ''' + # 17. Header + signature = file.read(3) + version = file.read(3) + if signature != 'GIF': + raise ImageDecodeException('Not a GIF stream') + + stream = GIFStream() + + # 18. Logical screen descriptor + (logical_screen_width, + logical_screen_height, + fields, + background_color_index, + pixel_aspect_ratio) = unpack('HHBBB', file) + global_color_table_flag = fields & 0x80 + global_color_table_size = fields & 0x7 + + # 19. Global color table + if global_color_table_flag: + global_color_table = file.read(6 << global_color_table_size) + + # * + graphics_scope = GraphicsScope() + block_type = read_byte(file) + + while block_type != LABEL_TRAILER: + if block_type == LABEL_IMAGE_DESCRIPTOR: + read_table_based_image(file, stream, graphics_scope) + graphics_scope = GraphicsScope() + elif block_type == LABEL_EXTENSION_INTRODUCER: + extension_block_type = read_byte(file) + if extension_block_type == LABEL_GRAPHIC_CONTROL_EXTENSION: + read_graphic_control_extension(file, stream, graphics_scope) + else: + skip_data_sub_blocks(file) + else: + # Skip bytes until a valid start character is found + print block_type + pass + block_type = read_byte(file) + + return stream + +def skip_data_sub_blocks(file): + # 15. Data sub-blocks + block_size = read_byte(file) + while block_size != 0: + data = file.read(block_size) + block_size = read_byte(file) + +def read_table_based_image(file, stream, graphics_scope): + gif_image = GIFImage() + stream.images.append(gif_image) + gif_image.delay = graphics_scope.delay + + # 20. Image descriptor + (image_left_position, + image_top_position, + image_width, + image_height, + fields) = unpack('HHHHB', file) + + local_color_table_flag = fields & 0x80 + local_color_table_size = fields & 0x7 + + # 21. Local color table + if local_color_table_flag: + local_color_table = file.read(6 << local_color_table_size) + + # 22. Table based image data + lzw_code_size = file.read(1) + skip_data_sub_blocks(file) + +def read_graphic_control_extension(file, stream, graphics_scope): + # 23. Graphic control extension + (block_size, + fields, + delay_time, + transparent_color_index, + terminator) = unpack('BBHBB', file) + if block_size != 4: + raise ImageFormatException('Incorrect block size') + + if delay_time: + # Follow Firefox/Mac behaviour: use 100ms delay for any delay + # less than 10ms. + if delay_time <= 1: + delay_time = 10 + graphics_scope.delay = float(delay_time) / 100 diff --git a/pyglet/image/codecs/pil.py b/pyglet/image/codecs/pil.py new file mode 100644 index 0000000..58d3ce0 --- /dev/null +++ b/pyglet/image/codecs/pil.py @@ -0,0 +1,110 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +''' +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: pil.py 1768 2008-02-17 12:45:54Z Alex.Holkner $' + +import os.path + +from pyglet.gl import * +from pyglet.image import * +from pyglet.image.codecs import * + +import Image + +class PILImageDecoder(ImageDecoder): + def get_file_extensions(self): + # Only most common ones shown here + return ['.bmp', '.cur', '.gif', '.ico', '.jpg', '.jpeg', '.pcx', '.png', + '.tga', '.tif', '.tiff', '.xbm', '.xpm'] + + def decode(self, file, filename): + try: + image = Image.open(file) + except Exception, e: + raise ImageDecodeException( + 'PIL cannot read %r: %s' % (filename or file, e)) + + image = image.transpose(Image.FLIP_TOP_BOTTOM) + + # Convert bitmap and palette images to component + if image.mode in ('1', 'P'): + image = image.convert() + + if image.mode not in ('L', 'LA', 'RGB', 'RGBA'): + raise ImageDecodeException('Unsupported mode "%s"' % image.mode) + type = GL_UNSIGNED_BYTE + width, height = image.size + + return ImageData(width, height, image.mode, image.tostring()) + +class PILImageEncoder(ImageEncoder): + def get_file_extensions(self): + # Most common only + return ['.bmp', '.eps', '.gif', '.jpg', '.jpeg', + '.pcx', '.png', '.ppm', '.tiff', '.xbm'] + + def encode(self, image, file, filename): + # File format is guessed from filename extension, otherwise defaults + # to PNG. + pil_format = (filename and os.path.splitext(filename)[1][1:]) or 'png' + + if pil_format.lower() == 'jpg': + pil_format = 'JPEG' + + image = image.get_image_data() + format = image.format + if format != 'RGB': + # Only save in RGB or RGBA formats. + format = 'RGBA' + pitch = -(image.width * len(format)) + + # Note: Don't try and use frombuffer(..); different versions of + # PIL will orient the image differently. + pil_image = Image.fromstring( + format, (image.width, image.height), image.get_data(format, pitch)) + + try: + pil_image.save(file, pil_format) + except Exception, e: + raise ImageEncodeException(e) + +def get_decoders(): + return [PILImageDecoder()] + +def get_encoders(): + return [PILImageEncoder()] diff --git a/pyglet/image/codecs/png.py b/pyglet/image/codecs/png.py new file mode 100644 index 0000000..7af632b --- /dev/null +++ b/pyglet/image/codecs/png.py @@ -0,0 +1,110 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''Encoder and decoder for PNG files, using PyPNG (pypng.py). +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: $' + +import array + +from pyglet.gl import * +from pyglet.image import * +from pyglet.image.codecs import * + +import pyglet.image.codecs.pypng + +class PNGImageDecoder(ImageDecoder): + def get_file_extensions(self): + return ['.png'] + + def decode(self, file, filename): + try: + reader = pyglet.image.codecs.pypng.Reader(file=file) + width, height, pixels, metadata = reader.read() + except Exception, e: + raise ImageDecodeException( + 'PyPNG cannot read %r: %s' % (filename or file, e)) + + if metadata['greyscale']: + if metadata['has_alpha']: + format = 'LA' + else: + format = 'L' + else: + if metadata['has_alpha']: + format = 'RGBA' + else: + format = 'RGB' + pitch = len(format) * width + return ImageData(width, height, format, pixels.tostring(), -pitch) + +class PNGImageEncoder(ImageEncoder): + def get_file_extensions(self): + return ['.png'] + + def encode(self, image, file, filename): + image = image.get_image_data() + + has_alpha = 'A' in image.format + greyscale = len(image.format) < 3 + if has_alpha: + if greyscale: + image.format = 'LA' + else: + image.format = 'RGBA' + else: + if greyscale: + image.format = 'L' + else: + image.format = 'RGB' + + image.pitch = -(image.width * len(image.format)) + + writer = pyglet.image.codecs.pypng.Writer( + image.width, image.height, + bytes_per_sample=1, + greyscale=greyscale, + has_alpha=has_alpha) + + data = array.array('B') + data.fromstring(image.data) + writer.write_array(file, data) + +def get_decoders(): + return [PNGImageDecoder()] + +def get_encoders(): + return [PNGImageEncoder()] diff --git a/pyglet/image/codecs/pypng.py b/pyglet/image/codecs/pypng.py new file mode 100644 index 0000000..fba3275 --- /dev/null +++ b/pyglet/image/codecs/pypng.py @@ -0,0 +1,1092 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +# png.py - PNG encoder in pure Python +# Copyright (C) 2006 Johann C. Rocholl +# Modifications for pyglet by Alex Holkner +# +# Permission is hereby granted, free of charge, to any person +# obtaining a copy of this software and associated documentation files +# (the "Software"), to deal in the Software without restriction, +# including without limitation the rights to use, copy, modify, merge, +# publish, distribute, sublicense, and/or sell copies of the Software, +# and to permit persons to whom the Software is furnished to do so, +# subject to the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +# Contributors (alphabetical): +# Nicko van Someren +# +# Changelog (recent first): +# 2006-06-17 Nicko: Reworked into a class, faster interlacing. +# 2006-06-17 Johann: Very simple prototype PNG decoder. +# 2006-06-17 Nicko: Test suite with various image generators. +# 2006-06-17 Nicko: Alpha-channel, grey-scale, 16-bit/plane support. +# 2006-06-15 Johann: Scanline iterator interface for large input files. +# 2006-06-09 Johann: Very simple prototype PNG encoder. + + +""" +Pure Python PNG Reader/Writer + +This is an implementation of a subset of the PNG specification at +http://www.w3.org/TR/2003/REC-PNG-20031110 in pure Python. It reads +and writes PNG files with 8/16/24/32/48/64 bits per pixel (greyscale, +RGB, RGBA, with 8 or 16 bits per layer), with a number of options. For +help, type "import png; help(png)" in your python interpreter. + +This file can also be used as a command-line utility to convert PNM +files to PNG. The interface is similar to that of the pnmtopng program +from the netpbm package. Type "python png.py --help" at the shell +prompt for usage and a list of options. +""" + + +__revision__ = '$Rev$' +__date__ = '$Date$' +__author__ = '$Author$' + + +import sys +import zlib +import struct +import math +from array import array + + +_adam7 = ((0, 0, 8, 8), + (4, 0, 8, 8), + (0, 4, 4, 8), + (2, 0, 4, 4), + (0, 2, 2, 4), + (1, 0, 2, 2), + (0, 1, 1, 2)) + + +def interleave_planes(ipixels, apixels, ipsize, apsize): + """ + Interleave color planes, e.g. RGB + A = RGBA. + + Return an array of pixels consisting of the ipsize bytes of data + from each pixel in ipixels followed by the apsize bytes of data + from each pixel in apixels, for an image of size width x height. + """ + itotal = len(ipixels) + atotal = len(apixels) + newtotal = itotal + atotal + newpsize = ipsize + apsize + # Set up the output buffer + out = array('B') + # It's annoying that there is no cheap way to set the array size :-( + out.extend(ipixels) + out.extend(apixels) + # Interleave in the pixel data + for i in range(ipsize): + out[i:newtotal:newpsize] = ipixels[i:itotal:ipsize] + for i in range(apsize): + out[i+ipsize:newtotal:newpsize] = apixels[i:atotal:apsize] + return out + +class Error(Exception): + pass + +class Writer: + """ + PNG encoder in pure Python. + """ + + def __init__(self, width, height, + transparent=None, + background=None, + gamma=None, + greyscale=False, + has_alpha=False, + bytes_per_sample=1, + compression=None, + interlaced=False, + chunk_limit=2**20): + """ + Create a PNG encoder object. + + Arguments: + width, height - size of the image in pixels + transparent - create a tRNS chunk + background - create a bKGD chunk + gamma - create a gAMA chunk + greyscale - input data is greyscale, not RGB + has_alpha - input data has alpha channel (RGBA) + bytes_per_sample - 8-bit or 16-bit input data + compression - zlib compression level (1-9) + chunk_limit - write multiple IDAT chunks to save memory + + If specified, the transparent and background parameters must + be a tuple with three integer values for red, green, blue, or + a simple integer (or singleton tuple) for a greyscale image. + + If specified, the gamma parameter must be a float value. + + """ + if width <= 0 or height <= 0: + raise ValueError("width and height must be greater than zero") + + if has_alpha and transparent is not None: + raise ValueError( + "transparent color not allowed with alpha channel") + + if bytes_per_sample < 1 or bytes_per_sample > 2: + raise ValueError("bytes per sample must be 1 or 2") + + if transparent is not None: + if greyscale: + if type(transparent) is not int: + raise ValueError( + "transparent color for greyscale must be integer") + else: + if not (len(transparent) == 3 and + type(transparent[0]) is int and + type(transparent[1]) is int and + type(transparent[2]) is int): + raise ValueError( + "transparent color must be a triple of integers") + + if background is not None: + if greyscale: + if type(background) is not int: + raise ValueError( + "background color for greyscale must be integer") + else: + if not (len(background) == 3 and + type(background[0]) is int and + type(background[1]) is int and + type(background[2]) is int): + raise ValueError( + "background color must be a triple of integers") + + self.width = width + self.height = height + self.transparent = transparent + self.background = background + self.gamma = gamma + self.greyscale = greyscale + self.has_alpha = has_alpha + self.bytes_per_sample = bytes_per_sample + self.compression = compression + self.chunk_limit = chunk_limit + self.interlaced = interlaced + + if self.greyscale: + self.color_depth = 1 + if self.has_alpha: + self.color_type = 4 + self.psize = self.bytes_per_sample * 2 + else: + self.color_type = 0 + self.psize = self.bytes_per_sample + else: + self.color_depth = 3 + if self.has_alpha: + self.color_type = 6 + self.psize = self.bytes_per_sample * 4 + else: + self.color_type = 2 + self.psize = self.bytes_per_sample * 3 + + def write_chunk(self, outfile, tag, data): + """ + Write a PNG chunk to the output file, including length and checksum. + """ + # http://www.w3.org/TR/PNG/#5Chunk-layout + outfile.write(struct.pack("!I", len(data))) + outfile.write(tag) + outfile.write(data) + checksum = zlib.crc32(tag) + checksum = zlib.crc32(data, checksum) + # Avoid DeprecationWarning: struct integer overflow masking + # with Python2.5/Windows. + checksum = checksum & 0xffffffff + outfile.write(struct.pack("!I", checksum)) + + def write(self, outfile, scanlines): + """ + Write a PNG image to the output file. + """ + # http://www.w3.org/TR/PNG/#5PNG-file-signature + outfile.write(struct.pack("8B", 137, 80, 78, 71, 13, 10, 26, 10)) + + # http://www.w3.org/TR/PNG/#11IHDR + if self.interlaced: + interlaced = 1 + else: + interlaced = 0 + self.write_chunk(outfile, 'IHDR', + struct.pack("!2I5B", self.width, self.height, + self.bytes_per_sample * 8, + self.color_type, 0, 0, interlaced)) + + # http://www.w3.org/TR/PNG/#11tRNS + if self.transparent is not None: + if self.greyscale: + self.write_chunk(outfile, 'tRNS', + struct.pack("!1H", *self.transparent)) + else: + self.write_chunk(outfile, 'tRNS', + struct.pack("!3H", *self.transparent)) + + # http://www.w3.org/TR/PNG/#11bKGD + if self.background is not None: + if self.greyscale: + self.write_chunk(outfile, 'bKGD', + struct.pack("!1H", *self.background)) + else: + self.write_chunk(outfile, 'bKGD', + struct.pack("!3H", *self.background)) + + # http://www.w3.org/TR/PNG/#11gAMA + if self.gamma is not None: + self.write_chunk(outfile, 'gAMA', + struct.pack("!L", int(self.gamma * 100000))) + + # http://www.w3.org/TR/PNG/#11IDAT + if self.compression is not None: + compressor = zlib.compressobj(self.compression) + else: + compressor = zlib.compressobj() + + data = array('B') + for scanline in scanlines: + data.append(0) + data.extend(scanline) + if len(data) > self.chunk_limit: + compressed = compressor.compress(data.tostring()) + if len(compressed): + # print >> sys.stderr, len(data), len(compressed) + self.write_chunk(outfile, 'IDAT', compressed) + data = array('B') + if len(data): + compressed = compressor.compress(data.tostring()) + else: + compressed = '' + flushed = compressor.flush() + if len(compressed) or len(flushed): + # print >> sys.stderr, len(data), len(compressed), len(flushed) + self.write_chunk(outfile, 'IDAT', compressed + flushed) + + # http://www.w3.org/TR/PNG/#11IEND + self.write_chunk(outfile, 'IEND', '') + + def write_array(self, outfile, pixels): + """ + Encode a pixel array to PNG and write output file. + """ + if self.interlaced: + self.write(outfile, self.array_scanlines_interlace(pixels)) + else: + self.write(outfile, self.array_scanlines(pixels)) + + def convert_ppm(self, ppmfile, outfile): + """ + Convert a PPM file containing raw pixel data into a PNG file + with the parameters set in the writer object. + """ + if self.interlaced: + pixels = array('B') + pixels.fromfile(ppmfile, + self.bytes_per_sample * self.color_depth * + self.width * self.height) + self.write(outfile, self.array_scanlines_interlace(pixels)) + else: + self.write(outfile, self.file_scanlines(ppmfile)) + + def convert_ppm_and_pgm(self, ppmfile, pgmfile, outfile): + """ + Convert a PPM and PGM file containing raw pixel data into a + PNG outfile with the parameters set in the writer object. + """ + pixels = array('B') + pixels.fromfile(ppmfile, + self.bytes_per_sample * self.color_depth * + self.width * self.height) + apixels = array('B') + apixels.fromfile(pgmfile, + self.bytes_per_sample * + self.width * self.height) + pixels = interleave_planes(pixels, apixels, + self.bytes_per_sample * self.color_depth, + self.bytes_per_sample) + if self.interlaced: + self.write(outfile, self.array_scanlines_interlace(pixels)) + else: + self.write(outfile, self.array_scanlines(pixels)) + + def file_scanlines(self, infile): + """ + Generator for scanlines from an input file. + """ + row_bytes = self.psize * self.width + for y in range(self.height): + scanline = array('B') + scanline.fromfile(infile, row_bytes) + yield scanline + + def array_scanlines(self, pixels): + """ + Generator for scanlines from an array. + """ + row_bytes = self.width * self.psize + stop = 0 + for y in range(self.height): + start = stop + stop = start + row_bytes + yield pixels[start:stop] + + def old_array_scanlines_interlace(self, pixels): + """ + Generator for interlaced scanlines from an array. + http://www.w3.org/TR/PNG/#8InterlaceMethods + """ + row_bytes = self.psize * self.width + for xstart, ystart, xstep, ystep in _adam7: + for y in range(ystart, self.height, ystep): + if xstart < self.width: + if xstep == 1: + offset = y*row_bytes + yield pixels[offset:offset+row_bytes] + else: + row = array('B') + offset = y*row_bytes + xstart* self.psize + skip = self.psize * xstep + for x in range(xstart, self.width, xstep): + row.extend(pixels[offset:offset + self.psize]) + offset += skip + yield row + + def array_scanlines_interlace(self, pixels): + """ + Generator for interlaced scanlines from an array. + http://www.w3.org/TR/PNG/#8InterlaceMethods + """ + row_bytes = self.psize * self.width + for xstart, ystart, xstep, ystep in _adam7: + for y in range(ystart, self.height, ystep): + if xstart >= self.width: + continue + if xstep == 1: + offset = y * row_bytes + yield pixels[offset:offset+row_bytes] + else: + row = array('B') + # Note we want the ceiling of (self.width - xstart) / xtep + row_len = self.psize * ( + (self.width - xstart + xstep - 1) / xstep) + # There's no easier way to set the length of an array + row.extend(pixels[0:row_len]) + offset = y * row_bytes + xstart * self.psize + end_offset = (y+1) * row_bytes + skip = self.psize * xstep + for i in range(self.psize): + row[i:row_len:self.psize] = \ + pixels[offset+i:end_offset:skip] + yield row + +class _readable: + """ + A simple file-like interface for strings and arrays. + """ + + def __init__(self, buf): + self.buf = buf + self.offset = 0 + + def read(self, n): + r = buf[offset:offset+n] + if isinstance(r, array): + r = r.tostring() + offset += n + return r + +class Reader: + """ + PNG decoder in pure Python. + """ + + def __init__(self, _guess=None, **kw): + """ + Create a PNG decoder object. + + The constructor expects exactly one keyword argument. If you + supply a positional argument instead, it will guess the input + type. You can choose among the following arguments: + filename - name of PNG input file + file - object with a read() method + pixels - array or string with PNG data + + """ + if ((_guess is not None and len(kw) != 0) or + (_guess is None and len(kw) != 1)): + raise TypeError("Reader() takes exactly 1 argument") + + if _guess is not None: + if isinstance(_guess, array): + kw["pixels"] = _guess + elif isinstance(_guess, str): + kw["filename"] = _guess + elif isinstance(_guess, file): + kw["file"] = _guess + + if "filename" in kw: + self.file = file(kw["filename"]) + elif "file" in kw: + self.file = kw["file"] + elif "pixels" in kw: + self.file = _readable(kw["pixels"]) + else: + raise TypeError("expecting filename, file or pixels array") + + def read_chunk(self): + """ + Read a PNG chunk from the input file, return tag name and data. + """ + # http://www.w3.org/TR/PNG/#5Chunk-layout + try: + data_bytes, tag = struct.unpack('!I4s', self.file.read(8)) + except struct.error: + raise ValueError('Chunk too short for header') + data = self.file.read(data_bytes) + if len(data) != data_bytes: + raise ValueError('Chunk %s too short for required %i data octets' + % (tag, data_bytes)) + checksum = self.file.read(4) + if len(checksum) != 4: + raise ValueError('Chunk %s too short for checksum', tag) + verify = zlib.crc32(tag) + verify = zlib.crc32(data, verify) + verify = struct.pack('!i', verify) + if checksum != verify: + # print repr(checksum) + (a,) = struct.unpack('!I', checksum) + (b,) = struct.unpack('!I', verify) + raise ValueError("Checksum error in %s chunk: 0x%X != 0x%X" + % (tag, a, b)) + return tag, data + + def _reconstruct_sub(self, offset, xstep, ystep): + """ + Reverse sub filter. + """ + pixels = self.pixels + a_offset = offset + offset += self.psize * xstep + if xstep == 1: + for index in range(self.psize, self.row_bytes): + x = pixels[offset] + a = pixels[a_offset] + pixels[offset] = (x + a) & 0xff + offset += 1 + a_offset += 1 + else: + byte_step = self.psize * xstep + for index in range(byte_step, self.row_bytes, byte_step): + for i in range(self.psize): + x = pixels[offset + i] + a = pixels[a_offset + i] + pixels[offset + i] = (x + a) & 0xff + offset += self.psize * xstep + a_offset += self.psize * xstep + + def _reconstruct_up(self, offset, xstep, ystep): + """ + Reverse up filter. + """ + pixels = self.pixels + b_offset = offset - (self.row_bytes * ystep) + if xstep == 1: + for index in range(self.row_bytes): + x = pixels[offset] + b = pixels[b_offset] + pixels[offset] = (x + b) & 0xff + offset += 1 + b_offset += 1 + else: + for index in range(0, self.row_bytes, xstep * self.psize): + for i in range(self.psize): + x = pixels[offset + i] + b = pixels[b_offset + i] + pixels[offset + i] = (x + b) & 0xff + offset += self.psize * xstep + b_offset += self.psize * xstep + + def _reconstruct_average(self, offset, xstep, ystep): + """ + Reverse average filter. + """ + pixels = self.pixels + a_offset = offset - (self.psize * xstep) + b_offset = offset - (self.row_bytes * ystep) + if xstep == 1: + for index in range(self.row_bytes): + x = pixels[offset] + if index < self.psize: + a = 0 + else: + a = pixels[a_offset] + if b_offset < 0: + b = 0 + else: + b = pixels[b_offset] + pixels[offset] = (x + ((a + b) >> 1)) & 0xff + offset += 1 + a_offset += 1 + b_offset += 1 + else: + for index in range(0, self.row_bytes, self.psize * xstep): + for i in range(self.psize): + x = pixels[offset+i] + if index < self.psize: + a = 0 + else: + a = pixels[a_offset + i] + if b_offset < 0: + b = 0 + else: + b = pixels[b_offset + i] + pixels[offset + i] = (x + ((a + b) >> 1)) & 0xff + offset += self.psize * xstep + a_offset += self.psize * xstep + b_offset += self.psize * xstep + + def _reconstruct_paeth(self, offset, xstep, ystep): + """ + Reverse Paeth filter. + """ + pixels = self.pixels + a_offset = offset - (self.psize * xstep) + b_offset = offset - (self.row_bytes * ystep) + c_offset = b_offset - (self.psize * xstep) + # There's enough inside this loop that it's probably not worth + # optimising for xstep == 1 + for index in range(0, self.row_bytes, self.psize * xstep): + for i in range(self.psize): + x = pixels[offset+i] + if index < self.psize: + a = c = 0 + b = pixels[b_offset+i] + else: + a = pixels[a_offset+i] + b = pixels[b_offset+i] + c = pixels[c_offset+i] + p = a + b - c + pa = abs(p - a) + pb = abs(p - b) + pc = abs(p - c) + if pa <= pb and pa <= pc: + pr = a + elif pb <= pc: + pr = b + else: + pr = c + pixels[offset+i] = (x + pr) & 0xff + offset += self.psize * xstep + a_offset += self.psize * xstep + b_offset += self.psize * xstep + c_offset += self.psize * xstep + + # N.B. PNG files with 'up', 'average' or 'paeth' filters on the + # first line of a pass are legal. The code above for 'average' + # deals with this case explicitly. For up we map to the null + # filter and for paeth we map to the sub filter. + + def reconstruct_line(self, filter_type, first_line, offset, xstep, ystep): + # print >> sys.stderr, "Filter type %s, first_line=%s" % ( + # filter_type, first_line) + filter_type += (first_line << 8) + if filter_type == 1 or filter_type == 0x101 or filter_type == 0x104: + self._reconstruct_sub(offset, xstep, ystep) + elif filter_type == 2: + self._reconstruct_up(offset, xstep, ystep) + elif filter_type == 3 or filter_type == 0x103: + self._reconstruct_average(offset, xstep, ystep) + elif filter_type == 4: + self._reconstruct_paeth(offset, xstep, ystep) + return + + def deinterlace(self, scanlines): + # print >> sys.stderr, ("Reading interlaced, w=%s, r=%s, planes=%s," + + # " bpp=%s") % (self.width, self.height, self.planes, self.bps) + a = array('B') + self.pixels = a + # Make the array big enough + temp = scanlines[0:self.width*self.height*self.psize] + a.extend(temp) + source_offset = 0 + for xstart, ystart, xstep, ystep in _adam7: + # print >> sys.stderr, "Adam7: start=%s,%s step=%s,%s" % ( + # xstart, ystart, xstep, ystep) + filter_first_line = 1 + for y in range(ystart, self.height, ystep): + if xstart >= self.width: + continue + filter_type = scanlines[source_offset] + source_offset += 1 + if xstep == 1: + offset = y * self.row_bytes + a[offset:offset+self.row_bytes] = \ + scanlines[source_offset:source_offset + self.row_bytes] + source_offset += self.row_bytes + else: + # Note we want the ceiling of (width - xstart) / xtep + row_len = self.psize * ( + (self.width - xstart + xstep - 1) / xstep) + offset = y * self.row_bytes + xstart * self.psize + end_offset = (y+1) * self.row_bytes + skip = self.psize * xstep + for i in range(self.psize): + a[offset+i:end_offset:skip] = \ + scanlines[source_offset + i: + source_offset + row_len: + self.psize] + source_offset += row_len + if filter_type: + self.reconstruct_line(filter_type, filter_first_line, + offset, xstep, ystep) + filter_first_line = 0 + return a + + def read_flat(self, scanlines): + a = array('B') + self.pixels = a + offset = 0 + source_offset = 0 + filter_first_line = 1 + for y in range(self.height): + filter_type = scanlines[source_offset] + source_offset += 1 + a.extend(scanlines[source_offset: source_offset + self.row_bytes]) + if filter_type: + self.reconstruct_line(filter_type, filter_first_line, + offset, 1, 1) + filter_first_line = 0 + offset += self.row_bytes + source_offset += self.row_bytes + return a + + def read(self): + """ + Read a simple PNG file, return width, height, pixels and image metadata + + This function is a very early prototype with limited flexibility + and excessive use of memory. + """ + signature = self.file.read(8) + if (signature != struct.pack("8B", 137, 80, 78, 71, 13, 10, 26, 10)): + raise Error("PNG file has invalid header") + compressed = [] + image_metadata = {} + while True: + try: + tag, data = self.read_chunk() + except ValueError, e: + raise Error('Chunk error: ' + e.args[0]) + + # print >> sys.stderr, tag, len(data) + if tag == 'IHDR': # http://www.w3.org/TR/PNG/#11IHDR + (width, height, bits_per_sample, color_type, + compression_method, filter_method, + interlaced) = struct.unpack("!2I5B", data) + bps = bits_per_sample / 8 + if bps == 0: + raise Error("unsupported pixel depth") + if bps > 2 or bits_per_sample != (bps * 8): + raise Error("invalid pixel depth") + if color_type == 0: + greyscale = True + has_alpha = False + planes = 1 + elif color_type == 2: + greyscale = False + has_alpha = False + planes = 3 + elif color_type == 4: + greyscale = True + has_alpha = True + planes = 2 + elif color_type == 6: + greyscale = False + has_alpha = True + planes = 4 + else: + raise Error("unknown PNG colour type %s" % color_type) + if compression_method != 0: + raise Error("unknown compression method") + if filter_method != 0: + raise Error("unknown filter method") + self.bps = bps + self.planes = planes + self.psize = bps * planes + self.width = width + self.height = height + self.row_bytes = width * self.psize + elif tag == 'IDAT': # http://www.w3.org/TR/PNG/#11IDAT + compressed.append(data) + elif tag == 'bKGD': + if greyscale: + image_metadata["background"] = struct.unpack("!1H", data) + else: + image_metadata["background"] = struct.unpack("!3H", data) + elif tag == 'tRNS': + if greyscale: + image_metadata["transparent"] = struct.unpack("!1H", data) + else: + image_metadata["transparent"] = struct.unpack("!3H", data) + elif tag == 'gAMA': + image_metadata["gamma"] = ( + struct.unpack("!L", data)[0]) / 100000.0 + elif tag == 'IEND': # http://www.w3.org/TR/PNG/#11IEND + break + scanlines = array('B', zlib.decompress(''.join(compressed))) + if interlaced: + pixels = self.deinterlace(scanlines) + else: + pixels = self.read_flat(scanlines) + image_metadata["greyscale"] = greyscale + image_metadata["has_alpha"] = has_alpha + image_metadata["bytes_per_sample"] = bps + image_metadata["interlaced"] = interlaced + return width, height, pixels, image_metadata + + +def test_suite(options): + """ + Run regression test and write PNG file to stdout. + """ + + # Below is a big stack of test image generators + + def test_gradient_horizontal_lr(x, y): + return x + + def test_gradient_horizontal_rl(x, y): + return 1-x + + def test_gradient_vertical_tb(x, y): + return y + + def test_gradient_vertical_bt(x, y): + return 1-y + + def test_radial_tl(x, y): + return max(1-math.sqrt(x*x+y*y), 0.0) + + def test_radial_center(x, y): + return test_radial_tl(x-0.5, y-0.5) + + def test_radial_tr(x, y): + return test_radial_tl(1-x, y) + + def test_radial_bl(x, y): + return test_radial_tl(x, 1-y) + + def test_radial_br(x, y): + return test_radial_tl(1-x, 1-y) + + def test_stripe(x, n): + return 1.0*(int(x*n) & 1) + + def test_stripe_h_2(x, y): + return test_stripe(x, 2) + + def test_stripe_h_4(x, y): + return test_stripe(x, 4) + + def test_stripe_h_10(x, y): + return test_stripe(x, 10) + + def test_stripe_v_2(x, y): + return test_stripe(y, 2) + + def test_stripe_v_4(x, y): + return test_stripe(y, 4) + + def test_stripe_v_10(x, y): + return test_stripe(y, 10) + + def test_stripe_lr_10(x, y): + return test_stripe(x+y, 10) + + def test_stripe_rl_10(x, y): + return test_stripe(x-y, 10) + + def test_checker(x, y, n): + return 1.0*((int(x*n) & 1) ^ (int(y*n) & 1)) + + def test_checker_8(x, y): + return test_checker(x, y, 8) + + def test_checker_15(x, y): + return test_checker(x, y, 15) + + def test_zero(x, y): + return 0 + + def test_one(x, y): + return 1 + + test_patterns = { + "GLR": test_gradient_horizontal_lr, + "GRL": test_gradient_horizontal_rl, + "GTB": test_gradient_vertical_tb, + "GBT": test_gradient_vertical_bt, + "RTL": test_radial_tl, + "RTR": test_radial_tr, + "RBL": test_radial_bl, + "RBR": test_radial_br, + "RCTR": test_radial_center, + "HS2": test_stripe_h_2, + "HS4": test_stripe_h_4, + "HS10": test_stripe_h_10, + "VS2": test_stripe_v_2, + "VS4": test_stripe_v_4, + "VS10": test_stripe_v_10, + "LRS": test_stripe_lr_10, + "RLS": test_stripe_rl_10, + "CK8": test_checker_8, + "CK15": test_checker_15, + "ZERO": test_zero, + "ONE": test_one, + } + + def test_pattern(width, height, depth, pattern): + a = array('B') + fw = float(width) + fh = float(height) + pfun = test_patterns[pattern] + if depth == 1: + for y in range(height): + for x in range(width): + a.append(int(pfun(float(x)/fw, float(y)/fh) * 255)) + elif depth == 2: + for y in range(height): + for x in range(width): + v = int(pfun(float(x)/fw, float(y)/fh) * 65535) + a.append(v >> 8) + a.append(v & 0xff) + return a + + def test_rgba(size=256, depth=1, + red="GTB", green="GLR", blue="RTL", alpha=None): + r = test_pattern(size, size, depth, red) + g = test_pattern(size, size, depth, green) + b = test_pattern(size, size, depth, blue) + if alpha: + a = test_pattern(size, size, depth, alpha) + i = interleave_planes(r, g, depth, depth) + i = interleave_planes(i, b, 2 * depth, depth) + if alpha: + i = interleave_planes(i, a, 3 * depth, depth) + return i + + # The body of test_suite() + size = 256 + if options.test_size: + size = options.test_size + depth = 1 + if options.test_deep: + depth = 2 + + kwargs = {} + if options.test_red: + kwargs["red"] = options.test_red + if options.test_green: + kwargs["green"] = options.test_green + if options.test_blue: + kwargs["blue"] = options.test_blue + if options.test_alpha: + kwargs["alpha"] = options.test_alpha + pixels = test_rgba(size, depth, **kwargs) + + writer = Writer(size, size, + bytes_per_sample=depth, + transparent=options.transparent, + background=options.background, + gamma=options.gamma, + has_alpha=options.test_alpha, + compression=options.compression, + interlaced=options.interlace) + writer.write_array(sys.stdout, pixels) + + +def read_pnm_header(infile, supported='P6'): + """ + Read a PNM header, return width and height of the image in pixels. + """ + header = [] + while len(header) < 4: + line = infile.readline() + sharp = line.find('#') + if sharp > -1: + line = line[:sharp] + header.extend(line.split()) + if len(header) == 3 and header[0] == 'P4': + break # PBM doesn't have maxval + if header[0] not in supported: + raise NotImplementedError('file format %s not supported' % header[0]) + if header[0] != 'P4' and header[3] != '255': + raise NotImplementedError('maxval %s not supported' % header[3]) + return int(header[1]), int(header[2]) + + +def color_triple(color): + """ + Convert a command line color value to a RGB triple of integers. + FIXME: Somewhere we need support for greyscale backgrounds etc. + """ + if color.startswith('#') and len(color) == 4: + return (int(color[1], 16), + int(color[2], 16), + int(color[3], 16)) + if color.startswith('#') and len(color) == 7: + return (int(color[1:3], 16), + int(color[3:5], 16), + int(color[5:7], 16)) + elif color.startswith('#') and len(color) == 13: + return (int(color[1:5], 16), + int(color[5:9], 16), + int(color[9:13], 16)) + + +def _main(): + """ + Run the PNG encoder with options from the command line. + """ + # Parse command line arguments + from optparse import OptionParser + version = '%prog ' + __revision__.strip('$').replace('Rev: ', 'r') + parser = OptionParser(version=version) + parser.set_usage("%prog [options] [pnmfile]") + parser.add_option("-i", "--interlace", + default=False, action="store_true", + help="create an interlaced PNG file (Adam7)") + parser.add_option("-t", "--transparent", + action="store", type="string", metavar="color", + help="mark the specified color as transparent") + parser.add_option("-b", "--background", + action="store", type="string", metavar="color", + help="save the specified background color") + parser.add_option("-a", "--alpha", + action="store", type="string", metavar="pgmfile", + help="alpha channel transparency (RGBA)") + parser.add_option("-g", "--gamma", + action="store", type="float", metavar="value", + help="save the specified gamma value") + parser.add_option("-c", "--compression", + action="store", type="int", metavar="level", + help="zlib compression level (0-9)") + parser.add_option("-T", "--test", + default=False, action="store_true", + help="create a test image") + parser.add_option("-R", "--test-red", + action="store", type="string", metavar="pattern", + help="test pattern for the red image layer") + parser.add_option("-G", "--test-green", + action="store", type="string", metavar="pattern", + help="test pattern for the green image layer") + parser.add_option("-B", "--test-blue", + action="store", type="string", metavar="pattern", + help="test pattern for the blue image layer") + parser.add_option("-A", "--test-alpha", + action="store", type="string", metavar="pattern", + help="test pattern for the alpha image layer") + parser.add_option("-D", "--test-deep", + default=False, action="store_true", + help="use test patterns with 16 bits per layer") + parser.add_option("-S", "--test-size", + action="store", type="int", metavar="size", + help="width and height of the test image") + (options, args) = parser.parse_args() + + # Convert options + if options.transparent is not None: + options.transparent = color_triple(options.transparent) + if options.background is not None: + options.background = color_triple(options.background) + + # Run regression tests + if options.test: + return test_suite(options) + + # Prepare input and output files + if len(args) == 0: + ppmfilename = '-' + ppmfile = sys.stdin + elif len(args) == 1: + ppmfilename = args[0] + ppmfile = open(ppmfilename, 'rb') + else: + parser.error("more than one input file") + outfile = sys.stdout + + # Encode PNM to PNG + width, height = read_pnm_header(ppmfile) + writer = Writer(width, height, + transparent=options.transparent, + background=options.background, + has_alpha=options.alpha is not None, + gamma=options.gamma, + compression=options.compression) + if options.alpha is not None: + pgmfile = open(options.alpha, 'rb') + awidth, aheight = read_pnm_header(pgmfile, 'P5') + if (awidth, aheight) != (width, height): + raise ValueError("alpha channel image size mismatch" + + " (%s has %sx%s but %s has %sx%s)" + % (ppmfilename, width, height, + options.alpha, awidth, aheight)) + writer.convert_ppm_and_pgm(ppmfile, pgmfile, outfile, + interlace=options.interlace) + else: + writer.convert_ppm(ppmfile, outfile, + interlace=options.interlace) + + +if __name__ == '__main__': + _main() diff --git a/pyglet/image/codecs/quicktime.py b/pyglet/image/codecs/quicktime.py new file mode 100644 index 0000000..79cc1cb --- /dev/null +++ b/pyglet/image/codecs/quicktime.py @@ -0,0 +1,287 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +''' +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: pil.py 163 2006-11-13 04:15:46Z Alex.Holkner $' + +import sys + +from ctypes import * + +from pyglet.gl import * +from pyglet.image import * +from pyglet.image.codecs import * + +from pyglet.window.carbon import carbon, quicktime, _oscheck +from pyglet.window.carbon.constants import _name +from pyglet.window.carbon.types import * + +Handle = POINTER(POINTER(c_byte)) + +GWorldPtr = c_void_p +carbon.NewHandle.restype = Handle +HandleDataHandlerSubType = _name('hndl') +PointerDataHandlerSubType = _name('ptr ') +kDataHCanRead = 1 +kDataRefExtensionFileName = _name('fnam') +kDataRefExtensionMIMEType = _name('mime') +ComponentInstance = c_void_p + +k1MonochromePixelFormat = 0x00000001 +k2IndexedPixelFormat = 0x00000002 +k4IndexedPixelFormat = 0x00000004 +k8IndexedPixelFormat = 0x00000008 +k16BE555PixelFormat = 0x00000010 +k24RGBPixelFormat = 0x00000018 +k32ARGBPixelFormat = 0x00000020 +k32BGRAPixelFormat = _name('BGRA') +k1IndexedGrayPixelFormat = 0x00000021 +k2IndexedGrayPixelFormat = 0x00000022 +k4IndexedGrayPixelFormat = 0x00000024 +k8IndexedGrayPixelFormat = 0x00000028 +kNativeEndianPixMap = 1 << 8 + +newMovieActive = 1 +noErr = 0 +movieTrackMediaType = 1 << 0 +movieTrackCharacteristic = 1 << 1 +movieTrackEnabledOnly = 1 << 2 +VisualMediaCharacteristic = _name('eyes') +nextTimeMediaSample = 1 + +class PointerDataRefRecord(Structure): + _fields_ = [ + ('data', c_void_p), + ('dataLength', c_long) + ] + +def Str255(value): + return create_string_buffer(chr(len(value)) + value) + +class QuickTimeImageDecoder(ImageDecoder): + def get_file_extensions(self): + # Only most common ones shown here + return ['.bmp', '.cur', '.gif', '.ico', '.jpg', '.jpeg', '.pcx', '.png', + '.tga', '.tif', '.tiff', '.xbm', '.xpm'] + + def get_animation_file_extensions(self): + return ['.gif'] + + def _get_data_ref(self, file, filename): + self._data_hold = data = create_string_buffer(file.read()) + + dataref = carbon.NewHandle(sizeof(PointerDataRefRecord)) + datarec = cast(dataref, + POINTER(POINTER(PointerDataRefRecord))).contents.contents + datarec.data = addressof(data) + datarec.dataLength = len(data) + + self._data_handler_holder = data_handler = ComponentInstance() + r = quicktime.OpenADataHandler(dataref, PointerDataHandlerSubType, + None, 0, None, kDataHCanRead, byref(data_handler)) + _oscheck(r) + + extension_handle = Handle() + + self._filename_hold = filename = Str255(filename) + r = carbon.PtrToHand(filename, byref(extension_handle), len(filename)) + r = quicktime.DataHSetDataRefExtension(data_handler, extension_handle, + kDataRefExtensionFileName) + _oscheck(r) + quicktime.DisposeHandle(extension_handle) + + quicktime.DisposeHandle(dataref) + + dataref = c_void_p() + r = quicktime.DataHGetDataRef(data_handler, byref(dataref)) + _oscheck(r) + + quicktime.CloseComponent(data_handler) + + return dataref + + def _get_formats(self): + # TODO choose 24 bit where appropriate. + if sys.byteorder == 'big': + format = 'ARGB' + qtformat = k32ARGBPixelFormat + else: + format = 'BGRA' + qtformat = k32BGRAPixelFormat + return format, qtformat + + def decode(self, file, filename): + dataref = self._get_data_ref(file, filename) + importer = ComponentInstance() + quicktime.GetGraphicsImporterForDataRef(dataref, + PointerDataHandlerSubType, byref(importer)) + + if not importer: + raise ImageDecodeException(filename or file) + + rect = Rect() + quicktime.GraphicsImportGetNaturalBounds(importer, byref(rect)) + width = rect.right + height = rect.bottom + + format, qtformat = self._get_formats() + + buffer = (c_byte * (width * height * len(format)))() + world = GWorldPtr() + quicktime.QTNewGWorldFromPtr(byref(world), qtformat, + byref(rect), c_void_p(), c_void_p(), 0, buffer, + len(format) * width) + + quicktime.GraphicsImportSetGWorld(importer, world, c_void_p()) + result = quicktime.GraphicsImportDraw(importer) + quicktime.DisposeGWorld(world) + + if result != 0: + raise ImageDecodeException(filename or file) + + pitch = len(format) * width + + return ImageData(width, height, format, buffer, -pitch) + + def decode_animation(self, file, filename): + # TODO: Stop playing chicken with the GC + # TODO: Cleanup in errors + + quicktime.EnterMovies() + + data_ref = self._get_data_ref(file, filename) + if not data_ref: + raise ImageDecodeException(filename or file) + + movie = c_void_p() + id = c_short() + result = quicktime.NewMovieFromDataRef(byref(movie), + newMovieActive, + 0, + data_ref, + PointerDataHandlerSubType) + + if not movie: + #_oscheck(result) + raise ImageDecodeException(filename or file) + quicktime.GoToBeginningOfMovie(movie) + + time_scale = float(quicktime.GetMovieTimeScale(movie)) + + format, qtformat = self._get_formats() + + # Get movie width and height + rect = Rect() + quicktime.GetMovieBox(movie, byref(rect)) + width = rect.right + height = rect.bottom + pitch = len(format) * width + + # Set gworld + buffer = (c_byte * (width * height * len(format)))() + world = GWorldPtr() + quicktime.QTNewGWorldFromPtr(byref(world), qtformat, + byref(rect), c_void_p(), c_void_p(), 0, buffer, + len(format) * width) + quicktime.SetGWorld(world, 0) + quicktime.SetMovieGWorld(movie, world, 0) + + visual = quicktime.GetMovieIndTrackType(movie, 1, + VisualMediaCharacteristic, + movieTrackCharacteristic) + if not visual: + raise ImageDecodeException('No video track') + + time = 0 + + interesting_time = c_int() + quicktime.GetTrackNextInterestingTime( + visual, + nextTimeMediaSample, + time, + 1, + byref(interesting_time), + None) + duration = interesting_time.value / time_scale + + frames = [] + + while time >= 0: + result = quicktime.GetMoviesError() + if result == noErr: + # force redraw + result = quicktime.UpdateMovie(movie) + if result == noErr: + # process movie + quicktime.MoviesTask(movie, 0) + result = quicktime.GetMoviesError() + _oscheck(result) + + buffer_copy = (c_byte * len(buffer))() + memmove(buffer_copy, buffer, len(buffer)) + image = ImageData(width, height, format, buffer_copy, -pitch) + frames.append(AnimationFrame(image, duration)) + + interesting_time = c_int() + duration = c_int() + quicktime.GetTrackNextInterestingTime( + visual, + nextTimeMediaSample, + time, + 1, + byref(interesting_time), + byref(duration)) + + quicktime.SetMovieTimeValue(movie, interesting_time) + time = interesting_time.value + duration = duration.value / time_scale + if duration <= 0.01: + duration = 0.1 + + quicktime.DisposeMovie(movie) + carbon.DisposeHandle(data_ref) + + quicktime.ExitMovies() + + return Animation(frames) + +def get_decoders(): + return [QuickTimeImageDecoder()] + +def get_encoders(): + return [] + diff --git a/pyglet/image/codecs/s3tc.py b/pyglet/image/codecs/s3tc.py new file mode 100644 index 0000000..ce7d45e --- /dev/null +++ b/pyglet/image/codecs/s3tc.py @@ -0,0 +1,386 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +# $Id:$ + +'''Software decoder for S3TC compressed texture (i.e., DDS). + +http://oss.sgi.com/projects/ogl-sample/registry/EXT/texture_compression_s3tc.txt +''' + +import ctypes +import re +import sys + +from pyglet.gl import * +from pyglet.gl import gl_info +from pyglet.image import AbstractImage, Texture + +split_8byte = re.compile('.' * 8, flags=re.DOTALL) +split_16byte = re.compile('.' * 16, flags=re.DOTALL) + +class PackedImageData(AbstractImage): + _current_texture = None + + def __init__(self, width, height, format, packed_format, data): + super(PackedImageData, self).__init__(width, height) + self.format = format + self.packed_format = packed_format + self.data = data + + def unpack(self): + if self.packed_format == GL_UNSIGNED_SHORT_5_6_5: + # Unpack to GL_RGB. Assume self.data is already 16-bit + i = 0 + out = (c_ubyte * (self.width * self.height * 3))() + for c in self.data: + out[i+2] = (c & 0x1f) << 3 + out[i+1] = (c & 0x7e0) >> 3 + out[i] = (c & 0xf800) >> 8 + i += 3 + self.data = out + self.packed_format = GL_UNSIGNED_BYTE + + def _get_texture(self): + if self._current_texture: + return self._current_texture + + texture = Texture.create_for_size( + GL_TEXTURE_2D, self.width, self.height) + glBindTexture(texture.target, texture.id) + glTexParameteri(texture.target, GL_TEXTURE_MIN_FILTER, GL_LINEAR) + + if not gl_info.have_version(1, 2) or True: + self.unpack() + + glTexImage2D(texture.target, texture.level, + self.format, self.width, self.height, 0, + self.format, self.packed_format, self.data) + + self._current_texture = texture + return texture + + texture = property(_get_texture) + +def decode_dxt1_rgb(data, width, height): + # Decode to 16-bit RGB UNSIGNED_SHORT_5_6_5 + out = (ctypes.c_uint16 * (width * height))() + + # Read 8 bytes at a time + image_offset = 0 + col = 0 + for c0_lo, c0_hi, c1_lo, c1_hi, b0, b1, b2, b3 in split_8byte.findall(data): + color0 = ord(c0_lo) | ord(c0_hi) << 8 + color1 = ord(c1_lo) | ord(c1_hi) << 8 + bits = ord(b0) | ord(b1) << 8 | ord(b2) << 16 | ord(b3) << 24 + + r0 = color0 & 0x1f + g0 = (color0 & 0x7e0) >> 5 + b0 = (color0 & 0xf800) >> 11 + r1 = color1 & 0x1f + g1 = (color1 & 0x7e0) >> 5 + b1 = (color1 & 0xf800) >> 11 + + # i is the dest ptr for this block + i = image_offset + for y in range(4): + for x in range(4): + code = bits & 0x3 + + if code == 0: + out[i] = color0 + elif code == 1: + out[i] = color1 + elif code == 3 and color0 <= color1: + out[i] = 0 + else: + if code == 2 and color0 > color1: + r = (2 * r0 + r1) / 3 + g = (2 * g0 + g1) / 3 + b = (2 * b0 + b1) / 3 + elif code == 3 and color0 > color1: + r = (r0 + 2 * r1) / 3 + g = (g0 + 2 * g1) / 3 + b = (b0 + 2 * b1) / 3 + else: + assert code == 2 and color0 <= color1 + r = (r0 + r1) / 2 + g = (g0 + g1) / 2 + b = (b0 + b1) / 2 + out[i] = r | g << 5 | b << 11 + + bits >>= 2 + i += 1 + i += width - 4 + + # Move dest ptr to next 4x4 block + advance_row = (image_offset + 4) % width == 0 + image_offset += width * 3 * advance_row + 4 + + return PackedImageData(width, height, + GL_RGB, GL_UNSIGNED_SHORT_5_6_5, out) + +def decode_dxt1_rgba(data, width, height): + # Decode to GL_RGBA + out = (ctypes.c_ubyte * (width * height * 4))() + pitch = width << 2 + + # Read 8 bytes at a time + image_offset = 0 + col = 0 + for c0_lo, c0_hi, c1_lo, c1_hi, b0, b1, b2, b3 in split_8byte.findall(data): + color0 = ord(c0_lo) | ord(c0_hi) << 8 + color1 = ord(c1_lo) | ord(c1_hi) << 8 + bits = ord(b0) | ord(b1) << 8 | ord(b2) << 16 | ord(b3) << 24 + + r0 = color0 & 0x1f + g0 = (color0 & 0x7e0) >> 5 + b0 = (color0 & 0xf800) >> 11 + r1 = color1 & 0x1f + g1 = (color1 & 0x7e0) >> 5 + b1 = (color1 & 0xf800) >> 11 + + # i is the dest ptr for this block + i = image_offset + for y in range(4): + for x in range(4): + code = bits & 0x3 + a = 255 + + if code == 0: + r, g, b = r0, g0, b0 + elif code == 1: + r, g, b = r1, g1, b1 + elif code == 3 and color0 <= color1: + r = g = b = a = 0 + else: + if code == 2 and color0 > color1: + r = (2 * r0 + r1) / 3 + g = (2 * g0 + g1) / 3 + b = (2 * b0 + b1) / 3 + elif code == 3 and color0 > color1: + r = (r0 + 2 * r1) / 3 + g = (g0 + 2 * g1) / 3 + b = (b0 + 2 * b1) / 3 + else: + assert code == 2 and color0 <= color1 + r = (r0 + r1) / 2 + g = (g0 + g1) / 2 + b = (b0 + b1) / 2 + + out[i] = b << 3 + out[i+1] = g << 2 + out[i+2] = r << 3 + out[i+3] = a << 4 + + bits >>= 2 + i += 4 + i += pitch - 16 + + # Move dest ptr to next 4x4 block + advance_row = (image_offset + 16) % pitch == 0 + image_offset += pitch * 3 * advance_row + 16 + + return PackedImageData(width, height, GL_RGBA, GL_UNSIGNED_BYTE, out) + + +def decode_dxt3(data, width, height): + # Decode to GL_RGBA + out = (ctypes.c_ubyte * (width * height * 4))() + pitch = width << 2 + + # Read 16 bytes at a time + image_offset = 0 + col = 0 + for (a0, a1, a2, a3, a4, a5, a6, a7, + c0_lo, c0_hi, c1_lo, c1_hi, + b0, b1, b2, b3) in split_16byte.findall(data): + color0 = ord(c0_lo) | ord(c0_hi) << 8 + color1 = ord(c1_lo) | ord(c1_hi) << 8 + bits = ord(b0) | ord(b1) << 8 | ord(b2) << 16 | ord(b3) << 24 + alpha = ord(a0) | ord(a1) << 8 | ord(a2) << 16 | ord(a3) << 24 | \ + ord(a4) << 32 | ord(a5) << 40 | ord(a6) << 48 | ord(a7) << 56 + + r0 = color0 & 0x1f + g0 = (color0 & 0x7e0) >> 5 + b0 = (color0 & 0xf800) >> 11 + r1 = color1 & 0x1f + g1 = (color1 & 0x7e0) >> 5 + b1 = (color1 & 0xf800) >> 11 + + # i is the dest ptr for this block + i = image_offset + for y in range(4): + for x in range(4): + code = bits & 0x3 + a = alpha & 0xf + + if code == 0: + r, g, b = r0, g0, b0 + elif code == 1: + r, g, b = r1, g1, b1 + elif code == 3 and color0 <= color1: + r = g = b = 0 + else: + if code == 2 and color0 > color1: + r = (2 * r0 + r1) / 3 + g = (2 * g0 + g1) / 3 + b = (2 * b0 + b1) / 3 + elif code == 3 and color0 > color1: + r = (r0 + 2 * r1) / 3 + g = (g0 + 2 * g1) / 3 + b = (b0 + 2 * b1) / 3 + else: + assert code == 2 and color0 <= color1 + r = (r0 + r1) / 2 + g = (g0 + g1) / 2 + b = (b0 + b1) / 2 + + out[i] = b << 3 + out[i+1] = g << 2 + out[i+2] = r << 3 + out[i+3] = a << 4 + + bits >>= 2 + alpha >>= 4 + i += 4 + i += pitch - 16 + + # Move dest ptr to next 4x4 block + advance_row = (image_offset + 16) % pitch == 0 + image_offset += pitch * 3 * advance_row + 16 + + return PackedImageData(width, height, GL_RGBA, GL_UNSIGNED_BYTE, out) + +def decode_dxt5(data, width, height): + # Decode to GL_RGBA + out = (ctypes.c_ubyte * (width * height * 4))() + pitch = width << 2 + + # Read 16 bytes at a time + image_offset = 0 + col = 0 + for (alpha0, alpha1, ab0, ab1, ab2, ab3, ab4, ab5, + c0_lo, c0_hi, c1_lo, c1_hi, + b0, b1, b2, b3) in split_16byte.findall(data): + color0 = ord(c0_lo) | ord(c0_hi) << 8 + color1 = ord(c1_lo) | ord(c1_hi) << 8 + alpha0 = ord(alpha0) + alpha1 = ord(alpha1) + bits = ord(b0) | ord(b1) << 8 | ord(b2) << 16 | ord(b3) << 24 + abits = ord(ab0) | ord(ab1) << 8 | ord(ab2) << 16 | ord(ab3) << 24 | \ + ord(ab4) << 32 | ord(ab5) << 40 + + r0 = color0 & 0x1f + g0 = (color0 & 0x7e0) >> 5 + b0 = (color0 & 0xf800) >> 11 + r1 = color1 & 0x1f + g1 = (color1 & 0x7e0) >> 5 + b1 = (color1 & 0xf800) >> 11 + + # i is the dest ptr for this block + i = image_offset + for y in range(4): + for x in range(4): + code = bits & 0x3 + acode = abits & 0x7 + + if code == 0: + r, g, b = r0, g0, b0 + elif code == 1: + r, g, b = r1, g1, b1 + elif code == 3 and color0 <= color1: + r = g = b = 0 + else: + if code == 2 and color0 > color1: + r = (2 * r0 + r1) / 3 + g = (2 * g0 + g1) / 3 + b = (2 * b0 + b1) / 3 + elif code == 3 and color0 > color1: + r = (r0 + 2 * r1) / 3 + g = (g0 + 2 * g1) / 3 + b = (b0 + 2 * b1) / 3 + else: + assert code == 2 and color0 <= color1 + r = (r0 + r1) / 2 + g = (g0 + g1) / 2 + b = (b0 + b1) / 2 + + if acode == 0: + a = alpha0 + elif acode == 1: + a = alpha1 + elif alpha0 > alpha1: + if acode == 2: + a = (6 * alpha0 + 1 * alpha1) / 7 + elif acode == 3: + a = (5 * alpha0 + 2 * alpha1) / 7 + elif acode == 4: + a = (4 * alpha0 + 3 * alpha1) / 7 + elif acode == 5: + a = (3 * alpha0 + 4 * alpha1) / 7 + elif acode == 6: + a = (2 * alpha0 + 5 * alpha1) / 7 + else: + assert acode == 7 + a = (1 * alpha0 + 6 * alpha1) / 7 + else: + if acode == 2: + a = (4 * alpha0 + 1 * alpha1) / 5 + elif acode == 3: + a = (3 * alpha0 + 2 * alpha1) / 5 + elif acode == 4: + a = (2 * alpha0 + 3 * alpha1) / 5 + elif acode == 5: + a = (1 * alpha0 + 4 * alpha1) / 5 + elif acode == 6: + a = 0 + else: + assert acode == 7 + a = 255 + + out[i] = b << 3 + out[i+1] = g << 2 + out[i+2] = r << 3 + out[i+3] = a + + bits >>= 2 + abits >>= 3 + i += 4 + i += pitch - 16 + + # Move dest ptr to next 4x4 block + advance_row = (image_offset + 16) % pitch == 0 + image_offset += pitch * 3 * advance_row + 16 + + return PackedImageData(width, height, GL_RGBA, GL_UNSIGNED_BYTE, out) diff --git a/pyglet/info.py b/pyglet/info.py new file mode 100644 index 0000000..a16cecb --- /dev/null +++ b/pyglet/info.py @@ -0,0 +1,191 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''Get environment information useful for debugging. + +Intended usage is to create a file for bug reports, e.g.:: + + python -m pyglet.info > info.txt + +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: $' + +_first_heading = True +def _heading(heading): + global _first_heading + if not _first_heading: + print + else: + _first_heading = False + print heading + print '-' * 78 + +def dump_python(): + '''Dump Python version and environment to stdout.''' + import os + import sys + print 'sys.version:', sys.version + print 'sys.platform:', sys.platform + print 'os.getcwd():', os.getcwd() + for key, value in os.environ.items(): + if key.startswith('PYGLET_'): + print "os.environ['%s']: %s" % (key, value) + +def dump_pyglet(): + '''Dump pyglet version and options.''' + import pyglet + print 'pyglet.version:', pyglet.version + print 'pyglet.__file__:', pyglet.__file__ + for key, value in pyglet.options.items(): + print "pyglet.options['%s'] = %r" % (key, value) + +def dump_window(): + '''Dump display, windowm, screen and default config info.''' + import pyglet.window + platform = pyglet.window.get_platform() + print 'platform:', repr(platform) + display = platform.get_default_display() + print 'display:', repr(display) + screens = display.get_screens() + for i, screen in enumerate(screens): + print 'screens[%d]: %r' % (i, screen) + window = pyglet.window.Window(visible=False) + for key, value in window.config.get_gl_attributes(): + print "config['%s'] = %r" % (key, value) + print 'context:', repr(window.context) + window.close() + +def dump_gl(): + '''Dump GL info.''' + from pyglet.gl import gl_info + print 'gl_info.get_version():', gl_info.get_version() + print 'gl_info.get_vendor():', gl_info.get_vendor() + print 'gl_info.get_renderer():', gl_info.get_renderer() + print 'gl_info.get_extensions():' + extensions = list(gl_info.get_extensions()) + extensions.sort() + for name in extensions: + print ' ', name + +def dump_glu(): + '''Dump GLU info.''' + from pyglet.gl import glu_info + print 'glu_info.get_version():', glu_info.get_version() + print 'glu_info.get_extensions():' + extensions = list(glu_info.get_extensions()) + extensions.sort() + for name in extensions: + print ' ', name + +def dump_glx(): + '''Dump GLX info.''' + try: + from pyglet.gl import glx_info + except: + print 'GLX not available.' + return + import pyglet + window = pyglet.window.Window(visible=False) + print 'context.is_direct():', window.context.is_direct() + window.close() + + if not glx_info.have_version(1, 1): + print 'Version: < 1.1' + else: + print 'glx_info.get_server_vendor():', glx_info.get_server_vendor() + print 'glx_info.get_server_version():', glx_info.get_server_version() + print 'glx_info.get_server_extensions():' + for name in glx_info.get_server_extensions(): + print ' ', name + print 'glx_info.get_client_vendor():', glx_info.get_client_vendor() + print 'glx_info.get_client_version():', glx_info.get_client_version() + print 'glx_info.get_client_extensions():' + for name in glx_info.get_client_extensions(): + print ' ', name + print 'glx_info.get_extensions():' + for name in glx_info.get_extensions(): + print ' ', name + +def dump_media(): + '''Dump pyglet.media info.''' + import pyglet.media + print 'driver:', pyglet.media.driver.__name__ + +def dump_avbin(): + '''Dump AVbin info.''' + try: + import pyglet.media.avbin + print 'Library:', pyglet.media.avbin.av + print 'AVbin version:', pyglet.media.avbin.av.avbin_get_version() + print 'FFmpeg revision:', \ + pyglet.media.avbin.av.avbin_get_ffmpeg_revision() + except: + print 'AVbin not available.' + +def dump_al(): + '''Dump OpenAL info.''' + try: + from pyglet.media.drivers import openal + print 'Library:', openal.al._lib + print 'Version:', openal.get_version() + print 'Extensions:' + for extension in openal.get_extensions(): + print ' ', extension + except: + print 'OpenAL not available.' + +def _try_dump(heading, func): + _heading(heading) + try: + func() + except: + import traceback + traceback.print_exc() + +def dump(): + '''Dump all information to stdout.''' + _try_dump('Python', dump_python) + _try_dump('pyglet', dump_pyglet) + _try_dump('pyglet.window', dump_window) + _try_dump('pyglet.gl.gl_info', dump_gl) + _try_dump('pyglet.gl.glu_info', dump_glu) + _try_dump('pyglet.gl.glx_info', dump_glx) + _try_dump('pyglet.media', dump_media) + _try_dump('pyglet.media.avbin', dump_avbin) + _try_dump('pyglet.media.drivers.openal', dump_al) + +if __name__ == '__main__': + dump() diff --git a/pyglet/lib.py b/pyglet/lib.py new file mode 100644 index 0000000..06d48a7 --- /dev/null +++ b/pyglet/lib.py @@ -0,0 +1,303 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +'''Functions for loading dynamic libraries. + +These extend and correct ctypes functions. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: $' + +import os +import re +import sys + +import ctypes +import ctypes.util + +import pyglet + +_debug_lib = pyglet.options['debug_lib'] +_debug_trace = pyglet.options['debug_trace'] + +class _TraceFunction(object): + def __init__(self, func): + self.__dict__['_func'] = func + + def __str__(self): + return self._func.__name__ + + def __call__(self, *args, **kwargs): + return self._func(*args, **kwargs) + + def __getattr__(self, name): + return getattr(self._func, name) + + def __setattr__(self, name, value): + setattr(self._func, name, value) + +class _TraceLibrary(object): + def __init__(self, library): + self._library = library + print library + + def __getattr__(self, name): + func = getattr(self._library, name) + f = _TraceFunction(func) + return f + +class LibraryLoader(object): + def load_library(self, *names, **kwargs): + '''Find and load a library. + + More than one name can be specified, they will be tried in order. + Platform-specific library names (given as kwargs) are tried first. + + Raises ImportError if library is not found. + ''' + if 'framework' in kwargs and self.platform == 'darwin': + return self.load_framework(kwargs['framework']) + + platform_names = kwargs.get(self.platform, []) + if type(platform_names) in (str, unicode): + platform_names = [platform_names] + elif type(platform_names) is tuple: + platform_names = list(platform_names) + + if self.platform == 'linux2': + platform_names.extend(['lib%s.so' % n for n in names]) + + platform_names.extend(names) + for name in platform_names: + try: + lib = ctypes.cdll.LoadLibrary(name) + if _debug_lib: + print name + if _debug_trace: + lib = _TraceLibrary(lib) + return lib + except OSError: + path = self.find_library(name) + if path: + try: + lib = ctypes.cdll.LoadLibrary(path) + if _debug_lib: + print path + if _debug_trace: + lib = _TraceLibrary(lib) + return lib + except OSError: + pass + raise ImportError('Library "%s" not found.' % names[0]) + + find_library = lambda self, name: ctypes.util.find_library(name) + + platform = sys.platform + if platform == 'cygwin': + platform = 'win32' + + def load_framework(self, path): + raise RuntimeError("Can't load framework on this platform.") + +class MachOLibraryLoader(LibraryLoader): + def __init__(self): + if 'LD_LIBRARY_PATH' in os.environ: + self.ld_library_path = os.environ['LD_LIBRARY_PATH'].split(':') + else: + self.ld_library_path = [] + + if 'DYLD_LIBRARY_PATH' in os.environ: + self.dyld_library_path = os.environ['DYLD_LIBRARY_PATH'].split(':') + else: + self.dyld_library_path = [] + + if 'DYLD_FALLBACK_LIBRARY_PATH' in os.environ: + self.dyld_fallback_library_path = \ + os.environ['DYLD_FALLBACK_LIBRARY_PATH'].split(':') + else: + self.dyld_fallback_library_path = [ + os.path.expanduser('~/lib'), + '/usr/local/lib', + '/usr/lib'] + + def find_library(self, path): + '''Implements the dylib search as specified in Apple documentation: + + http://developer.apple.com/documentation/DeveloperTools/Conceptual/DynamicLibraries/Articles/DynamicLibraryUsageGuidelines.html + + Before commencing the standard search, the method first checks + the bundle's ``Frameworks`` directory if the application is running + within a bundle (OS X .app). + ''' + + libname = os.path.basename(path) + search_path = [] + + if hasattr(sys, 'frozen') and sys.frozen == 'macosx_app': + search_path.append(os.path.join( + os.environ['RESOURCEPATH'], + '..', + 'Frameworks', + libname)) + + if '/' in path: + search_path.extend( + [os.path.join(p, libname) \ + for p in self.dyld_library_path]) + search_path.append(path) + search_path.extend( + [os.path.join(p, libname) \ + for p in self.dyld_fallback_library_path]) + else: + search_path.extend( + [os.path.join(p, libname) \ + for p in self.ld_library_path]) + search_path.extend( + [os.path.join(p, libname) \ + for p in self.dyld_library_path]) + search_path.append(path) + search_path.extend( + [os.path.join(p, libname) \ + for p in self.dyld_fallback_library_path]) + + for path in search_path: + if os.path.exists(path): + return path + + return None + + def find_framework(self, path): + '''Implement runtime framework search as described by: + + http://developer.apple.com/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/FrameworkBinding.html + ''' + + # e.g. path == '/System/Library/Frameworks/OpenGL.framework' + # name == 'OpenGL' + # return '/System/Library/Frameworks/OpenGL.framework/OpenGL' + name = os.path.splitext(os.path.split(path)[1])[0] + + realpath = os.path.join(path, name) + if os.path.exists(realpath): + return realpath + + for dir in ('/Library/Frameworks', + '/System/Library/Frameworks'): + realpath = os.path.join(dir, '%s.framework' % name, name) + if os.path.exists(realpath): + return realpath + + return None + + def load_framework(self, path): + realpath = self.find_framework(path) + if realpath: + lib = ctypes.cdll.LoadLibrary(realpath) + if _debug_lib: + print realpath + if _debug_trace: + lib = _TraceLibrary(lib) + return lib + + raise ImportError("Can't find framework %s." % path) + +class LinuxLibraryLoader(LibraryLoader): + _ld_so_cache = None + + def _create_ld_so_cache(self): + # Recreate search path followed by ld.so. This is going to be + # slow to build, and incorrect (ld.so uses ld.so.cache, which may + # not be up-to-date). Used only as fallback for distros without + # /sbin/ldconfig. + # + # We assume the DT_RPATH and DT_RUNPATH binary sections are omitted. + + directories = [] + try: + directories.extend(os.environ['LD_LIBRARY_PATH'].split(':')) + except KeyError: + pass + + try: + directories.extend([dir.strip() for dir in open('/etc/ld.so.conf')]) + except IOError: + pass + + directories.extend(['/lib', '/usr/lib']) + + cache = {} + lib_re = re.compile('lib(.*)\.so') + for dir in directories: + try: + for file in os.listdir(dir): + if '.so' not in file: + continue + + # Index by filename + path = os.path.join(dir, file) + if file not in cache: + cache[file] = path + + # Index by library name + match = lib_re.match(file) + if match: + library = match.group(1) + if library not in cache: + cache[library] = path + except OSError: + pass + + self._ld_so_cache = cache + + def find_library(self, path): + # ctypes tries ldconfig, gcc and objdump. If none of these are + # present, we implement the ld-linux.so search path as described in + # the man page. + + result = ctypes.util.find_library(path) + if result: + return result + + if self._ld_so_cache is None: + self._create_ld_so_cache() + + return self._ld_so_cache.get(path) + +if sys.platform == 'darwin': + loader = MachOLibraryLoader() +elif sys.platform == 'linux2': + loader = LinuxLibraryLoader() +else: + loader = LibraryLoader() +load_library = loader.load_library diff --git a/pyglet/media/__init__.py b/pyglet/media/__init__.py new file mode 100644 index 0000000..2f521d6 --- /dev/null +++ b/pyglet/media/__init__.py @@ -0,0 +1,1404 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +# $Id: __init__.py 2154 2008-08-05 22:53:37Z Alex.Holkner $ + +'''Audio and video playback. + +pyglet can play WAV files, and if AVbin is installed, many other audio and +video formats. + +Playback is handled by the `Player` class, which reads raw data from `Source` +objects and provides methods for pausing, seeking, adjusting the volume, and +so on. The `Player` class implements a the best available audio device +(currently, only OpenAL is supported):: + + player = Player() + +A `Source` is used to decode arbitrary audio and video files. It is +associated with a single player by "queuing" it:: + + source = load('background_music.mp3') + player.queue(source) + +Use the `Player` to control playback. + +If the source contains video, the `Source.video_format` attribute will be +non-None, and the `Player.texture` attribute will contain the current video +image synchronised to the audio. + +Decoding sounds can be processor-intensive and may introduce latency, +particularly for short sounds that must be played quickly, such as bullets or +explosions. You can force such sounds to be decoded and retained in memory +rather than streamed from disk by wrapping the source in a `StaticSource`:: + + bullet_sound = StaticSource(load('bullet.wav')) + +The other advantage of a `StaticSource` is that it can be queued on any number +of players, and so played many times simultaneously. + +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: __init__.py 2154 2008-08-05 22:53:37Z Alex.Holkner $' + +import ctypes +import sys +import time +import StringIO + +import pyglet +from pyglet import clock +from pyglet import event + +_debug_media = pyglet.options['debug_media'] + +class MediaException(Exception): + pass + +class MediaFormatException(MediaException): + pass + +class CannotSeekException(MediaException): + pass + +class AudioFormat(object): + '''Audio details. + + An instance of this class is provided by sources with audio tracks. You + should not modify the fields, as they are used internally to describe the + format of data provided by the source. + + :Ivariables: + `channels` : int + The number of channels: 1 for mono or 2 for stereo (pyglet does + not yet support surround-sound sources). + `sample_size` : int + Bits per sample; only 8 or 16 are supported. + `sample_rate` : int + Samples per second (in Hertz). + + ''' + + def __init__(self, channels, sample_size, sample_rate): + self.channels = channels + self.sample_size = sample_size + self.sample_rate = sample_rate + + # Convenience + self.bytes_per_sample = (sample_size >> 3) * channels + self.bytes_per_second = self.bytes_per_sample * sample_rate + + def __eq__(self, other): + return (self.channels == other.channels and + self.sample_size == other.sample_size and + self.sample_rate == other.sample_rate) + + def __ne__(self, other): + return not self.__eq__(other) + + def __repr__(self): + return '%s(channels=%d, sample_size=%d, sample_rate=%d)' % ( + self.__class__.__name__, self.channels, self.sample_size, + self.sample_rate) + +class VideoFormat(object): + '''Video details. + + An instance of this class is provided by sources with a video track. You + should not modify the fields. + + Note that the sample aspect has no relation to the aspect ratio of the + video image. For example, a video image of 640x480 with sample aspect 2.0 + should be displayed at 1280x480. It is the responsibility of the + application to perform this scaling. + + :Ivariables: + `width` : int + Width of video image, in pixels. + `height` : int + Height of video image, in pixels. + `sample_aspect` : float + Aspect ratio (width over height) of a single video pixel. + + ''' + + def __init__(self, width, height, sample_aspect=1.0): + self.width = width + self.height = height + self.sample_aspect = sample_aspect + +class AudioData(object): + '''A single packet of audio data. + + This class is used internally by pyglet. + + :Ivariables: + `data` : str or ctypes array or pointer + Sample data. + `length` : int + Size of sample data, in bytes. + `timestamp` : float + Time of the first sample, in seconds. + `duration` : float + Total data duration, in seconds. + + ''' + def __init__(self, data, length, timestamp, duration): + self.data = data + self.length = length + self.timestamp = timestamp + self.duration = duration + + def consume(self, bytes, audio_format): + '''Remove some data from beginning of packet.''' + if bytes == self.length: + self.data = None + self.length = 0 + self.timestamp += self.duration + self.duration = 0. + return + elif bytes == 0: + return + + if not isinstance(self.data, str): + # XXX Create a string buffer for the whole packet then + # chop it up. Could do some pointer arith here and + # save a bit of data pushing, but my guess is this is + # faster than fudging aruond with ctypes (and easier). + data = ctypes.create_string_buffer(self.length) + ctypes.memmove(data, self.data, self.length) + self.data = data + self.data = self.data[bytes:] + self.length -= bytes + self.duration -= bytes / float(audio_format.bytes_per_second) + self.timestamp += bytes / float(audio_format.bytes_per_second) + + def get_string_data(self): + '''Return data as a string.''' + if type(self.data) is str: + return self.data + + buf = ctypes.create_string_buffer(self.length) + ctypes.memmove(buf, self.data, self.length) + return buf.raw + +class AudioPlayer(object): + '''Abstract low-level interface for playing audio. + + AudioPlayer has no knowledge of sources or eos behaviour. Once + created, its audio format cannot be modified. The player will attempt + to recover automatically from a buffer underrun (but this is not + guaranteed). + + Applications should not use this class directly, but instead use `Player`. + + :Ivariables: + `audio_format` : `AudioFormat` + The player's audio format (read-only). + + ''' + + UPDATE_PERIOD = 0.15 + + def __init__(self, audio_format): + '''Create a new audio player for the given audio format. + + :Parameters: + `audio_format` : `AudioFormat` + Audio format parameters. + + ''' + self.audio_format = audio_format + + def get_write_size(self): + '''Return the maximum number of bytes that can be written. + + This is used as a hint for preparing data for `write`, not as a strict + contract. + + :rtype: int + ''' + raise NotImplementedError('abstract') + + def write(self, audio_data): + '''Write audio_data to the stream. + + This method calls `AudioData.consume` to remove data actually written. + + :Parameters: + `audio_data` : `AudioData` + Data to write. + + ''' + raise NotImplementedError('abstract') + + def write_eos(self): + '''Write an EOS marker to the stream at the current write point.''' + raise NotImplementedError('abstract') + + def write_end(self): + '''Mark that there will be no more audio data past the current write + point. + + This does not produce an EOS, but is required to prevent data + underrun artifacts. + ''' + raise NotImplementedError('abstract') + + def play(self): + '''Begin playback.''' + raise NotImplementedError('abstract') + + def stop(self): + '''Stop playback.''' + raise NotImplementedError('abstract') + + def clear(self): + '''Clear all buffered data and prepare for replacement data. + + The player should be stopped before calling this method. + ''' + raise NotImplementedError('abstract') + + def pump(self): + '''Called once per loop iteration before checking for eos + triggers.''' + raise NotImplementedError('abstract') + + def get_time(self): + '''Return best guess of current playback time. The time is relative + to the timestamps provided in the data supplied to `write`. The time + is meaningless unless proper care has been taken to clear EOS markers. + + :rtype: float + :return: current play cursor time, in seconds. + ''' + raise NotImplementedError('abstract') + + def clear_eos(self): + '''Check if an EOS marker has been passed, and clear it. + + This method should be called repeatedly to clear all pending EOS + markers. + + :rtype: bool + :return: True if an EOS marker was cleared. + ''' + raise NotImplementedError('abstract') + + def set_volume(self, volume): + '''See `Player.volume`.''' + pass + + def set_position(self, position): + '''See `Player.position`.''' + pass + + def set_min_distance(self, min_distance): + '''See `Player.min_distance`.''' + pass + + def set_max_distance(self, max_distance): + '''See `Player.max_distance`.''' + pass + + def set_pitch(self, pitch): + '''See `Player.pitch`.''' + pass + + def set_cone_orientation(self, cone_orientation): + '''See `Player.cone_orientation`.''' + pass + + def set_cone_inner_angle(self, cone_inner_angle): + '''See `Player.cone_inner_angle`.''' + pass + + def set_cone_outer_angle(self, cone_outer_angle): + '''See `Player.cone_outer_angle`.''' + pass + + def set_cone_outer_gain(self, cone_outer_gain): + '''See `Player.cone_outer_gain`.''' + pass + +class Source(object): + '''An audio and/or video source. + + :Ivariables: + `audio_format` : `AudioFormat` + Format of the audio in this source, or None if the source is + silent. + `video_format` : `VideoFormat` + Format of the video in this source, or None if there is no + video. + ''' + + _duration = None + + audio_format = None + video_format = None + + def _get_duration(self): + return self._duration + + duration = property(lambda self: self._get_duration(), + doc='''The length of the source, in seconds. + + Not all source durations can be determined; in this case the value + is None. + + Read-only. + + :type: float + ''') + + def play(self): + '''Play the source. + + This is a convenience method which creates a ManagedSoundPlayer for + this source and plays it immediately. + + :rtype: `ManagedSoundPlayer` + ''' + player = ManagedSoundPlayer() + player.queue(self) + player.play() + return player + + def get_animation(self): + '''Import all video frames into memory as an `Animation`. + + An empty animation will be returned if the source has no video. + Otherwise, the animation will contain all unplayed video frames (the + entire source, if it has not been queued on a player). After creating + the animation, the source will be at EOS. + + This method is unsuitable for videos running longer than a + few seconds. + + :since: pyglet 1.1 + + :rtype: `pyglet.image.Animation` + ''' + from pyglet.image import Animation, AnimationFrame + if not self.video_format: + return Animation([]) + else: + # Create a dummy player for the source to push its textures onto. + frames = [] + last_ts = 0 + next_ts = self.get_next_video_timestamp() + while next_ts is not None: + image = self.get_next_video_frame() + assert image is not None + delay = next_ts - last_ts + frames.append(AnimationFrame(image, delay)) + last_ts = next_ts + next_ts = self.get_next_video_timestamp() + return Animation(frames) + + def get_next_video_timestamp(self): + '''Get the timestamp of the next video frame. + + :since: pyglet 1.1 + + :rtype: float + :return: The next timestamp, or ``None`` if there are no more video + frames. + ''' + pass + + def get_next_video_frame(self): + '''Get the next video frame. + + Video frames may share memory: the previous frame may be invalidated + or corrupted when this method is called unless the application has + made a copy of it. + + :since: pyglet 1.1 + + :rtype: `pyglet.image.AbstractImage` + :return: The next video frame image, or ``None`` if there are no more + video frames. + ''' + pass + + # Internal methods that Players call on the source: + + def _play(self): + '''Begin decoding in real-time.''' + pass + + def _pause(self): + '''Pause decoding, but remain prerolled.''' + pass + + def _stop(self): + '''Stop forever and clean up.''' + pass + + def _seek(self, timestamp): + '''Seek to given timestamp.''' + raise CannotSeekException() + + def _get_queue_source(self): + '''Return the `Source` to be used as the queue source for a player. + + Default implementation returns self.''' + return self + + def _get_audio_data(self, bytes): + '''Get next packet of audio data. + + :Parameters: + `bytes` : int + Maximum number of bytes of data to return. + + :rtype: `AudioData` + :return: Next packet of audio data, or None if there is no (more) + data. + ''' + return None + + def _init_texture(self, player): + '''Create the player's texture.''' + pass + + def _update_texture(self, player, timestamp): + '''Update the texture on player.''' + pass + + def _release_texture(self, player): + '''Release the player's texture.''' + pass + +class StreamingSource(Source): + '''A source that is decoded as it is being played, and can only be + queued once. + ''' + + _is_queued = False + + is_queued = property(lambda self: self._is_queued, + doc='''Determine if this source has been queued + on a `Player` yet. + + Read-only. + + :type: bool + ''') + + def _get_queue_source(self): + '''Return the `Source` to be used as the queue source for a player. + + Default implementation returns self.''' + if self._is_queued: + raise MediaException('This source is already queued on a player.') + self._is_queued = True + return self + +class StaticSource(Source): + '''A source that has been completely decoded in memory. This source can + be queued onto multiple players any number of times. + ''' + + def __init__(self, source): + '''Construct a `StaticSource` for the data in `source`. + + :Parameters: + `source` : `Source` + The source to read and decode audio and video data from. + + ''' + source = source._get_queue_source() + if source.video_format: + raise NotImplementedException( + 'Static sources not supported for video yet.') + + self.audio_format = source.audio_format + if not self.audio_format: + return + + # TODO enable time-insensitive playback + source._play() + + # Arbitrary: number of bytes to request at a time. + buffer_size = 1 << 20 # 1 MB + + # Naive implementation. Driver-specific implementations may override + # to load static audio data into device (or at least driver) memory. + data = StringIO.StringIO() + while True: + audio_data = source._get_audio_data(buffer_size) + if not audio_data: + break + data.write(audio_data.get_string_data()) + self._data = data.getvalue() + + def _get_queue_source(self): + return StaticMemorySource(self._data, self.audio_format) + + def _get_audio_data(self, bytes): + raise RuntimeError('StaticSource cannot be queued.') + +class StaticMemorySource(StaticSource): + '''Helper class for default implementation of `StaticSource`. Do not use + directly.''' + + def __init__(self, data, audio_format): + '''Construct a memory source over the given data buffer. + ''' + self._file = StringIO.StringIO(data) + self._max_offset = len(data) + self.audio_format = audio_format + self._duration = len(data) / float(audio_format.bytes_per_second) + + def _seek(self, timestamp): + offset = int(timestamp * self.audio_format.bytes_per_second) + + # Align to sample + if self.audio_format.bytes_per_sample == 2: + offset &= 0xfffffffe + elif self.audio_format.bytes_per_sample == 4: + offset &= 0xfffffffc + + self._file.seek(offset) + + def _get_audio_data(self, bytes): + offset = self._file.tell() + timestamp = float(offset) / self.audio_format.bytes_per_second + + # Align to sample size + if self.audio_format.bytes_per_sample == 2: + bytes &= 0xfffffffe + elif self.audio_format.bytes_per_sample == 4: + bytes &= 0xfffffffc + + data = self._file.read(bytes) + if not len(data): + return None + + duration = float(len(data)) / self.audio_format.bytes_per_second + return AudioData(data, len(data), timestamp, duration) + +class Player(event.EventDispatcher): + '''A sound and/or video player. + + Queue sources on this player to play them. + ''' + + #: The player will pause when it reaches the end of the stream. + EOS_PAUSE = 'pause' + #: The player will loop the current stream continuosly. + EOS_LOOP = 'loop' + #: The player will move on to the next queued stream when it reaches the + #: end of the current source. If there is no source queued, the player + #: will pause. + EOS_NEXT = 'next' + #: The player will stop entirely; valid only for ManagedSoundPlayer. + EOS_STOP = 'stop' + + # Source and queuing attributes + _source_read_index = 0 + _eos_action = EOS_NEXT + _playing = False + + # If True and _playing is False, user is currently seeking while paused; + # should refrain from filling the audio buffer. + _pause_seek = False + + # Override audio timestamp for seeking and silent video + _timestamp = None + + # Used to track timestamp for silent sources + _last_system_time = 0. + + # Audio attributes + _audio = None + _audio_finished = False + _next_audio_data = None + + # Video attributes + _texture = None + + # Spacialisation attributes, preserved between audio players + _volume = 1.0 + _min_distance = 1.0 + _max_distance = 100000000. + + _position = (0, 0, 0) + _pitch = 1.0 + + _cone_orientation = (0, 0, 1) + _cone_inner_angle = 360. + _cone_outer_angle = 360. + _cone_outer_gain = 1. + + def __init__(self): + self._sources = [] + + def _create_audio(self): + '''Create _audio for sources[0]. + + Reuses existing _audio if it exists and is compatible. + ''' + if not self._sources: + return + + source = self._sources[0] + if not source.audio_format: + self._audio = None + return + + if self._audio: + self._audio_finished = False + if self._audio.audio_format == source.audio_format: + return + else: + self._audio = None + + self._audio = audio_player_class(source.audio_format) + self._audio.set_volume(self._volume) + self._audio.set_min_distance(self._min_distance) + self._audio.set_max_distance(self._max_distance) + self._audio.set_position(self._position) + self._audio.set_pitch(self._pitch) + self._audio.set_cone_orientation(self._cone_orientation) + self._audio.set_cone_inner_angle(self._cone_inner_angle) + self._audio.set_cone_outer_angle(self._cone_outer_angle) + self._audio.set_cone_outer_gain(self._cone_outer_gain) + + def _fill_audio(self): + '''Ensure _audio is full.''' + if not self._audio or self._audio_finished: + return + + write_size = self._audio.get_write_size() + if not write_size: + return + + for audio_data, audio_format in self._get_audio_data(write_size): + if audio_data == 'eos': + self._audio.write_eos() + continue + elif audio_data == 'end': + self._audio.write_end() + self._audio_finished = True + return + if audio_format != self._audio.audio_format: + self._next_audio_data = audio_format, audio_data + return + length = audio_data.length + self._audio.write(audio_data) + if audio_data.length: + self._next_audio_data = audio_format, audio_data + return + + write_size -= length + if write_size <= 0: + return + + def _get_audio_data(self, bytes): + '''Yields pairs of (audio_data, audio_format).''' + if self._next_audio_data: + audio_format, audio_data = self._next_audio_data + self._next_audio_data = None + bytes -= audio_data.length + yield audio_data, audio_format + + try: + source = self._sources[self._source_read_index] + except IndexError: + source = None + + while source and bytes > 4: # bytes > 4 compensates for alignment loss + audio_data = source._get_audio_data(bytes) + if audio_data: + bytes -= audio_data.length + yield audio_data, source.audio_format + else: + yield 'eos', source.audio_format + if self._eos_action == self.EOS_NEXT: + self._source_read_index += 1 + try: + source = self._sources[self._source_read_index] + source._play() + except IndexError: + source = None + elif self._eos_action == self.EOS_LOOP: + source._seek(0) + elif self._eos_action == self.EOS_PAUSE: + source = None + elif self._eos_action == self.EOS_STOP: + source = None + else: + assert False, 'Invalid eos_action' + source = None + + if not source: + yield 'end', None + + def _update_schedule(self): + clock.unschedule(self.dispatch_events) + if self._playing and self._sources: + interval = 1000. + if self._sources[0].video_format: + interval = min(interval, 1/24.) + if self._audio: + interval = min(interval, self._audio.UPDATE_PERIOD) + clock.schedule_interval_soft(self.dispatch_events, interval) + + def queue(self, source): + '''Queue the source on this player. + + If the player has no source, the player will be paused immediately + on this source. + + :Parameters: + `source` : Source + The source to queue. + + ''' + self._sources.append(source._get_queue_source()) + if len(self._sources) == 1: + self._source_read_index = 0 + self._begin_source() + + def play(self): + '''Begin playing the current source. + + This has no effect if the player is already playing. + ''' + self._playing = True + self._pause_seek = False + + if self._audio: + self._timestamp = None + self._audio.play() + else: + self._last_system_time = time.time() + + self.dispatch_events() + self._update_schedule() + + def pause(self): + '''Pause playback of the current source. + + This has no effect if the player is already paused. + ''' + self._playing = False + self._pause_seek = False + + if self._audio: + self._audio.stop() + self._update_schedule() + + def seek(self, timestamp): + '''Seek for playback to the indicated timestamp in seconds on the + current source. If the timestamp is outside the duration of the + source, it will be clamped to the end. + + :Parameters: + `timestamp` : float + Timestamp to seek to. + ''' + if not self._sources: + return + + if not self._playing: + self._pause_seek = True + + self._audio_finished = False + source = self._sources[0] + self._source_read_index = 0 + self._next_audio_data = None + source._seek(timestamp) + self._timestamp = timestamp + + if self._audio: + self._audio.stop() + self._audio.clear() + else: + self._last_system_time = time.time() + + self.dispatch_events() + + def next(self): + '''Move immediately to the next queued source. + + There may be a gap in playback while the audio buffer is refilled. + ''' + if not self._sources: + return + + if self._audio: + self._audio.stop() + self._audio.clear() + else: + self._last_system_time = time.time() + self._timestamp = 0. + + self._next_source() + + def _next_source(self): + if not self._sources: + self._update_schedule() + return + + self._source_read_index = max(0, self._source_read_index - 1) + source = self._sources.pop(0) + source._release_texture(self) + source._stop() + self._begin_source() + + def _begin_source(self): + if not self._sources: + return + + source = self._sources[0] + source._init_texture(self) + self._create_audio() + self._fill_audio() + + if not self._audio: + self._timestamp = 0. + + if self._playing: + self.play() + self._update_schedule() + + def _on_eos(self): + '''Internal method when EOS is encountered. Returns False if + dispatch_events should be immediately aborted.''' + if self._eos_action == self.EOS_NEXT: + self._next_source() + elif self._eos_action == self.EOS_PAUSE: + self._playing = False + self._timestamp = self._sources[0].duration + elif self._eos_action == self.EOS_STOP: + self.stop() + self._sources = [] + return False + self.dispatch_event('on_eos') + return True + + def dispatch_events(self, dt=None): + '''Dispatch any pending events and perform regular heartbeat functions + to maintain playback. + + :Parameters: + `dt` : None + Ignored (for compatibility with `pyglet.clock.schedule`) + + :deprecated: Since pyglet 1.1, Player objects schedule themselves on + the default clock automatically. Applications should not call + this method. + + ''' + if not self._sources: + return + + if not self._pause_seek: + self._fill_audio() + + if self._audio: + underrun = self._audio.pump() + while self._audio.clear_eos(): + if not self._on_eos(): + return + if underrun: + self._audio.UPDATE_PERIOD *= 0.75 + self._audio.__class__.UPDATE_PERIOD *= 0.75 + self._update_schedule() + if _debug_media: + print '%r underrun: reducing update period to %.2f' % \ + (self._audio, self._audio.UPDATE_PERIOD) + else: + if self._playing: + t = time.time() + self._timestamp += t - self._last_system_time + self._last_system_time = t + while self._timestamp > self._sources[0].duration: + if not self._on_eos(): + return + if self._eos_action == self.EOS_LOOP: + self._timestamp -= self._sources[0].duration + + if self._texture: + self._sources[0]._update_texture(self, self._get_time()) + + def _get_time(self): + if self._timestamp is not None: + return self._timestamp + elif self._audio: + return self._audio.get_time() + + time = property(lambda self: self._get_time(), + doc='''Retrieve the current playback time of the current + source. + + The playback time is a float expressed in seconds, with 0.0 being + the beginning of the sound. The playback time returned represents + the time encoded in the source, and may not reflect actual time + passed due to pitch shifting or pausing. + + Read-only. + + :type: float + ''') + + def _get_source(self): + if self._sources: + return self._sources[0] + + source = property(lambda self: self._get_source(), + doc='''Return the current source. + + Read-only. + + :type: Source + ''') + + def _set_eos_action(self, action): + self._eos_action = action + + eos_action = property(lambda self: self._eos_action, + _set_eos_action, + doc='''Set the behaviour of the player when it + reaches the end of the current source. + + This must be one of the constants `EOS_NEXT`, `EOS_PAUSE` or + `EOS_LOOP`. + + :type: str + ''') + + playing = property(lambda self: self._playing, + doc='''Determine if the player state is playing. + + The `playing` property is irrespective of whether or not there is + actually a source to play. If `playing` is True and a source is + queued, it will begin playing immediately. If `playing` is False, + it is implied that the player is paused. There is no other possible + state. + + Read-only. + + :type: bool + ''') + + def _set_volume(self, volume): + self._volume = volume + if self._audio: + self._audio.set_volume(volume) + + volume = property(lambda self: self._volume, + lambda self, volume: self._set_volume(volume), + doc='''The volume level of sound playback. + + The nominal level is 1.0, and 0.0 is silence. + + The volume level is affected by the distance from the listener (if + positioned). + + :type: float + ''') + + def _set_position(self, position): + self._position = position + if self._audio: + self._audio.set_position(position) + + position = property(lambda self: self._position, + lambda self, position: self._set_position(position), + doc='''The position of the sound in 3D space. + + The position is given as a tuple of floats (x, y, z). The unit + defaults to meters, but can be modified with the listener + properties. + + :type: 3-tuple of float + ''') + + def _set_min_distance(self, min_distance): + self._min_distance = min_distance + if self._audio: + self._audio.set_min_distance(min_distance) + + min_distance = property(lambda self: self._min_distance, + lambda self, v: self._set_min_distance(v), + doc='''The distance beyond which the sound volume + drops by half, and within which no attenuation is applied. + + The minimum distance controls how quickly a sound is attenuated + as it moves away from the listener. The gain is clamped at the + nominal value within the min distance. By default the value is + 1.0. + + The unit defaults to meters, but can be modified with the listener + properties. + + :type: float + ''') + + def _set_max_distance(self, max_distance): + self._max_distance = max_distance + if self._audio: + self._audio.set_max_distance(max_distance) + + max_distance = property(lambda self: self._max_distance, + lambda self, v: self._set_max_distance(v), + doc='''The distance at which no further attenuation + is applied. + + When the distance from the listener to the player is greater than + this value, attenuation is calculated as if the distance + were value. By default the maximum distance is infinity. + + The unit defaults to meters, but can be modified with the listener + properties. + + :type: float + ''') + + def _set_pitch(self, pitch): + self._pitch = pitch + if self._audio: + self._audio.set_pitch(pitch) + + pitch = property(lambda self: self._pitch, + lambda self, pitch: self._set_pitch(pitch), + doc='''The pitch shift to apply to the sound. + + The nominal pitch is 1.0. A pitch of 2.0 will sound one octave + higher, and play twice as fast. A pitch of 0.5 will sound one octave + lower, and play twice as slow. A pitch of 0.0 is not permitted. + + :type: float + ''') + + def _set_cone_orientation(self, cone_orientation): + self._cone_orientation = cone_orientation + if self._audio: + self._audio.set_cone_orientation(cone_orientation) + + cone_orientation = property(lambda self: self._cone_orientation, + lambda self, c: self._set_cone_orientation(c), + doc='''The direction of the sound in 3D space. + + The direction is specified as a tuple of floats (x, y, z), and has no + unit. The default direction is (0, 0, -1). Directional effects are + only noticeable if the other cone properties are changed from their + default values. + + :type: 3-tuple of float + ''') + + def _set_cone_inner_angle(self, cone_inner_angle): + self._cone_inner_angle = cone_inner_angle + if self._audio: + self._audio.set_cone_inner_angle(cone_inner_angle) + + cone_inner_angle = property(lambda self: self._cone_inner_angle, + lambda self, a: self._set_cone_inner_angle(a), + doc='''The interior angle of the inner cone. + + The angle is given in degrees, and defaults to 360. When the listener + is positioned within the volume defined by the inner cone, the sound + is played at normal gain (see `volume`). + + :type: float + ''') + + def _set_cone_outer_angle(self, cone_outer_angle): + self._cone_outer_angle = cone_outer_angle + if self._audio: + self._audio.set_cone_outer_angle(cone_outer_angle) + + cone_outer_angle = property(lambda self: self._cone_outer_angle, + lambda self, a: self._set_cone_outer_angle(a), + doc='''The interior angle of the outer cone. + + The angle is given in degrees, and defaults to 360. When the listener + is positioned within the volume defined by the outer cone, but outside + the volume defined by the inner cone, the gain applied is a smooth + interpolation between `volume` and `cone_outer_gain`. + + :type: float + ''') + + def _set_cone_outer_gain(self, cone_outer_gain): + self._cone_outer_gain = cone_outer_gain + if self._audio: + self._audio.set_cone_outer_gain(cone_outer_gain) + + cone_outer_gain = property(lambda self: self._cone_outer_gain, + lambda self, g: self._set_cone_outer_gain(g), + doc='''The gain applied outside the cone. + + When the listener is positioned outside the volume defined by the + outer cone, this gain is applied instead of `volume`. + + :type: float + ''') + + def get_texture(self): + '''Get the texture for the current video frame. + + You should call this method every time you display a frame + of video, as multiple textures might be used. The return value will + be `None` if there is no video in the current source. + + :since: pyglet 1.1 + + :rtype: `pyglet.image.Texture` + ''' + return self._texture + + texture = property(lambda self: self._texture, + doc='''The video texture. + + You should rerequest this property every time you display a frame + of video, as multiple textures might be used. This property will + be `None` if there is no video in the current source. + + :deprecated: Use `get_texture`. + + :type: `pyglet.image.Texture` + ''') + + if getattr(sys, 'is_epydoc', False): + def on_eos(): + '''The player has reached the end of the current source. + + This event is dispatched regardless of the EOS action. You + can alter the EOS action in this event handler, however playback + may stutter as the media device will not have enough time to + decode and buffer the new data in advance. + + :event: + ''' +Player.register_event_type('on_eos') + +class ManagedSoundPlayer(Player): + '''A player which takes care of updating its own audio buffers. + + This player will continue playing the sound until the sound is + finished, even if the application discards the player early. + + Only one source can be queued on the player; the player will be + discarded when the source finishes. + ''' + + #: The only possible end of stream action for a managed player. + EOS_STOP = 'stop' + + _eos_action = EOS_STOP + eos_action = property(lambda self: EOS_STOP, + doc='''The fixed eos_action is `EOS_STOP`, + in which the player is discarded as soon as the source has + finished. + + Read-only. + + :type: str + ''') + + def __init__(self): + super(ManagedSoundPlayer, self).__init__() + managed_players.append(self) + + def stop(self): + self._timestamp = 0. + clock.unschedule(self.dispatch_events) + managed_players.remove(self) + +class Listener(object): + '''The listener properties for positional audio. + + You can obtain the singleton instance of this class as + `pyglet.media.listener`. + ''' + _volume = 1.0 + _position = (0, 0, 0) + _forward_orientation = (0, 0, -1) + _up_orientation = (0, 1, 0) + + def _set_volume(self, volume): + raise NotImplementedError('abstract') + + volume = property(lambda self: self._volume, + lambda self, volume: self._set_volume(volume), + doc='''The master volume for sound playback. + + All sound volumes are multiplied by this master volume before being + played. A value of 0 will silence playback (but still consume + resources). The nominal volume is 1.0. + + :type: float + ''') + + def _set_position(self, position): + raise NotImplementedError('abstract') + + position = property(lambda self: self._position, + lambda self, position: self._set_position(position), + doc='''The position of the listener in 3D space. + + The position is given as a tuple of floats (x, y, z). The unit + defaults to meters, but can be modified with the listener + properties. + + :type: 3-tuple of float + ''') + + def _set_forward_orientation(self, orientation): + raise NotImplementedError('abstract') + + forward_orientation = property(lambda self: self._forward_orientation, + lambda self, o: self._set_forward_orientation(o), + doc='''A vector giving the direction the + listener is facing. + + The orientation is given as a tuple of floats (x, y, z), and has + no unit. The forward orientation should be orthagonal to the + up orientation. + + :type: 3-tuple of float + ''') + + def _set_up_orientation(self, orientation): + raise NotImplementedError('abstract') + + up_orientation = property(lambda self: self._up_orientation, + lambda self, o: self._set_up_orientation(o), + doc='''A vector giving the "up" orientation + of the listener. + + The orientation is given as a tuple of floats (x, y, z), and has + no unit. The up orientation should be orthagonal to the + forward orientation. + + :type: 3-tuple of float + ''') + + +if getattr(sys, 'is_epydoc', False): + #: The singleton listener. + #: + #: :type: `Listener` + listener = Listener() + + #: Indication of the presence of AVbin. When `have_avbin` is ``True`` + #: pyglet will be able to play back compressed media streams such as + #: MP3, OGG and various video formats. If ``False`` only uncompressed + #: Wave files can be loaded. + #: + #: :type: bool + have_avbin = False +else: + # Find best available sound driver according to user preference + import pyglet + driver = None + for driver_name in pyglet.options['audio']: + try: + driver_name = 'pyglet.media.drivers.' + driver_name + __import__(driver_name) + driver = sys.modules[driver_name] + driver.driver_init() + break + except (ImportError, AttributeError, MediaException): + pass + + if not driver: + raise ImportError('No suitable audio driver could be loaded.') + + audio_player_class = driver.driver_audio_player_class + listener = driver.driver_listener + + # Find best available source loader + have_avbin = False + try: + from pyglet.media import avbin + _source_class = avbin.AVbinSource + have_avbin = True + except ImportError: + from pyglet.media import riff + _source_class = riff.WaveSource + +# Pretend to import some common audio drivers so that py2exe/py2app +# are fooled into packagin them. +if False: + import pyglet.media.drivers.silent + import pyglet.media.drivers.openal + import pyglet.media.drivers.directsound + import pyglet.media.drivers.alsa + +def load(filename, file=None, streaming=True): + '''Load a source from a file. + + Currently the `file` argument is not supported; media files must exist + as real paths. + + :Parameters: + `filename` : str + Filename of the media file to load. + `file` : file-like object + Not yet supported. + `streaming` : bool + If False, a `StaticSource` will be returned; otherwise (default) a + `StreamingSource` is created. + + :rtype: `Source` + ''' + source = _source_class(filename, file) + if not streaming: + source = StaticSource(source) + return source + +managed_players = [] +def dispatch_events(): + '''Process managed audio events. + + You must call this function regularly (typically once per run loop + iteration) in order to keep audio buffers of managed players full. + + :deprecated: Since pyglet 1.1, Player objects schedule themselves on + the default clock automatically. Applications should not call this + method. + + ''' + for player in managed_players: + player.dispatch_events() diff --git a/pyglet/media/avbin.py b/pyglet/media/avbin.py new file mode 100644 index 0000000..19ba867 --- /dev/null +++ b/pyglet/media/avbin.py @@ -0,0 +1,477 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''Use avbin to decode audio and video media. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: avbin.py 2084 2008-05-27 12:42:19Z Alex.Holkner $' + +from pyglet.media import (MediaFormatException, StreamingSource, + VideoFormat, AudioFormat, AudioData) + +import pyglet +from pyglet import gl +from pyglet.gl import gl_info +from pyglet import image +import pyglet.lib + +import ctypes + +av = pyglet.lib.load_library('avbin', + darwin='/usr/local/lib/libavbin.dylib') + +AVBIN_RESULT_ERROR = -1 +AVBIN_RESULT_OK = 0 +AVbinResult = ctypes.c_int + +AVBIN_STREAM_TYPE_UNKNOWN = 0 +AVBIN_STREAM_TYPE_VIDEO = 1 +AVBIN_STREAM_TYPE_AUDIO = 2 +AVbinStreamType = ctypes.c_int + +AVBIN_SAMPLE_FORMAT_U8 = 0 +AVBIN_SAMPLE_FORMAT_S16 = 1 +AVBIN_SAMPLE_FORMAT_S24 = 2 +AVBIN_SAMPLE_FORMAT_S32 = 3 +AVBIN_SAMPLE_FORMAT_FLOAT = 4 +AVbinSampleFormat = ctypes.c_int + +AVBIN_LOG_QUIET = -8 +AVBIN_LOG_PANIC = 0 +AVBIN_LOG_FATAL = 8 +AVBIN_LOG_ERROR = 16 +AVBIN_LOG_WARNING = 24 +AVBIN_LOG_INFO = 32 +AVBIN_LOG_VERBOSE = 40 +AVBIN_LOG_DEBUG = 48 +AVbinLogLevel = ctypes.c_int + +AVbinFileP = ctypes.c_void_p +AVbinStreamP = ctypes.c_void_p + +Timestamp = ctypes.c_int64 + +class AVbinFileInfo(ctypes.Structure): + _fields_ = [ + ('structure_size', ctypes.c_size_t), + ('n_streams', ctypes.c_int), + ('start_time', Timestamp), + ('duration', Timestamp), + ('title', ctypes.c_char * 512), + ('author', ctypes.c_char * 512), + ('copyright', ctypes.c_char * 512), + ('comment', ctypes.c_char * 512), + ('album', ctypes.c_char * 512), + ('year', ctypes.c_int), + ('track', ctypes.c_int), + ('genre', ctypes.c_char * 32), + ] + +class _AVbinStreamInfoVideo(ctypes.Structure): + _fields_ = [ + ('width', ctypes.c_uint), + ('height', ctypes.c_uint), + ('sample_aspect_num', ctypes.c_int), + ('sample_aspect_den', ctypes.c_int), + ] + +class _AVbinStreamInfoAudio(ctypes.Structure): + _fields_ = [ + ('sample_format', ctypes.c_int), + ('sample_rate', ctypes.c_uint), + ('sample_bits', ctypes.c_uint), + ('channels', ctypes.c_uint), + ] + +class _AVbinStreamInfoUnion(ctypes.Union): + _fields_ = [ + ('video', _AVbinStreamInfoVideo), + ('audio', _AVbinStreamInfoAudio), + ] + +class AVbinStreamInfo(ctypes.Structure): + _fields_ = [ + ('structure_size', ctypes.c_size_t), + ('type', ctypes.c_int), + ('u', _AVbinStreamInfoUnion) + ] + +class AVbinPacket(ctypes.Structure): + _fields_ = [ + ('structure_size', ctypes.c_size_t), + ('timestamp', Timestamp), + ('stream_index', ctypes.c_int), + ('data', ctypes.POINTER(ctypes.c_uint8)), + ('size', ctypes.c_size_t), + ] + +AVbinLogCallback = ctypes.CFUNCTYPE(None, + ctypes.c_char_p, ctypes.c_int, ctypes.c_char_p) + +av.avbin_get_version.restype = ctypes.c_int +av.avbin_get_ffmpeg_revision.restype = ctypes.c_int +av.avbin_get_audio_buffer_size.restype = ctypes.c_size_t +av.avbin_have_feature.restype = ctypes.c_int +av.avbin_have_feature.argtypes = [ctypes.c_char_p] + +av.avbin_init.restype = AVbinResult +av.avbin_set_log_level.restype = AVbinResult +av.avbin_set_log_level.argtypes = [AVbinLogLevel] +av.avbin_set_log_callback.argtypes = [AVbinLogCallback] + +av.avbin_open_filename.restype = AVbinFileP +av.avbin_open_filename.argtypes = [ctypes.c_char_p] +av.avbin_close_file.argtypes = [AVbinFileP] +av.avbin_seek_file.argtypes = [AVbinFileP, Timestamp] +av.avbin_file_info.argtypes = [AVbinFileP, ctypes.POINTER(AVbinFileInfo)] +av.avbin_stream_info.argtypes = [AVbinFileP, ctypes.c_int, + ctypes.POINTER(AVbinStreamInfo)] + +av.avbin_open_stream.restype = ctypes.c_void_p +av.avbin_open_stream.argtypes = [AVbinFileP, ctypes.c_int] +av.avbin_close_stream.argtypes = [AVbinStreamP] + +av.avbin_read.argtypes = [AVbinFileP, ctypes.POINTER(AVbinPacket)] +av.avbin_read.restype = AVbinResult +av.avbin_decode_audio.restype = ctypes.c_int +av.avbin_decode_audio.argtypes = [AVbinStreamP, + ctypes.c_void_p, ctypes.c_size_t, + ctypes.c_void_p, ctypes.POINTER(ctypes.c_int)] +av.avbin_decode_video.restype = ctypes.c_int +av.avbin_decode_video.argtypes = [AVbinStreamP, + ctypes.c_void_p, ctypes.c_size_t, + ctypes.c_void_p] + +def get_version(): + return av.avbin_get_version() + +class AVbinException(MediaFormatException): + pass + +def timestamp_from_avbin(timestamp): + return float(timestamp) / 1000000 + +def timestamp_to_avbin(timestamp): + return int(timestamp * 1000000) + +class BufferedPacket(object): + def __init__(self, packet): + self.timestamp = packet.timestamp + self.stream_index = packet.stream_index + self.data = (ctypes.c_uint8 * packet.size)() + self.size = packet.size + ctypes.memmove(self.data, packet.data, self.size) + +class BufferedImage(object): + def __init__(self, image, timestamp): + self.image = image + self.timestamp = timestamp + +class AVbinSource(StreamingSource): + def __init__(self, filename, file=None): + if file is not None: + raise NotImplementedError('TODO: Load from file stream') + + self._file = av.avbin_open_filename(filename) + if not self._file: + raise AVbinException('Could not open "%s"' % filename) + + self._video_stream = None + self._audio_stream = None + + file_info = AVbinFileInfo() + file_info.structure_size = ctypes.sizeof(file_info) + av.avbin_file_info(self._file, ctypes.byref(file_info)) + self._duration = timestamp_from_avbin(file_info.duration) + + # Pick the first video and audio streams found, ignore others. + for i in range(file_info.n_streams): + info = AVbinStreamInfo() + info.structure_size = ctypes.sizeof(info) + av.avbin_stream_info(self._file, i, info) + + if (info.type == AVBIN_STREAM_TYPE_VIDEO and + not self._video_stream): + + stream = av.avbin_open_stream(self._file, i) + if not stream: + continue + + self.video_format = VideoFormat( + width=info.u.video.width, + height=info.u.video.height) + if info.u.video.sample_aspect_num != 0: + self.video_format.sample_aspect = ( + float(info.u.video.sample_aspect_num) / + info.u.video.sample_aspect_den) + self._video_stream = stream + self._video_stream_index = i + + elif (info.type == AVBIN_STREAM_TYPE_AUDIO and + info.u.audio.sample_bits in (8, 16) and + info.u.audio.channels in (1, 2) and + not self._audio_stream): + + stream = av.avbin_open_stream(self._file, i) + if not stream: + continue + + self.audio_format = AudioFormat( + channels=info.u.audio.channels, + sample_size=info.u.audio.sample_bits, + sample_rate=info.u.audio.sample_rate) + self._audio_stream = stream + self._audio_stream_index = i + + self._packet = AVbinPacket() + self._packet.structure_size = ctypes.sizeof(self._packet) + self._packet.stream_index = -1 + self._buffered_packets = [] + + self._buffer_streams = [] + self._buffered_images = [] + if self.audio_format: + self._audio_packet_ptr = 0 + self._audio_packet_size = 0 + self._audio_packet_timestamp = 0 + self._audio_buffer = \ + (ctypes.c_uint8 * av.avbin_get_audio_buffer_size())() + self._buffer_streams.append(self._audio_stream_index) + + if self.video_format: + self._buffer_streams.append(self._video_stream_index) + self._force_next_video_image = True + self._last_video_timestamp = None + + def __del__(self): + try: + if self._video_stream: + av.avbin_close_stream(self._video_stream) + if self._audio_stream: + av.avbin_close_stream(self._audio_stream) + av.avbin_close_file(self._file) + except: + pass + + def _seek(self, timestamp): + av.avbin_seek_file(self._file, timestamp_to_avbin(timestamp)) + self._buffered_packets = [] + self._buffered_images = [] + self._audio_packet_size = 0 + self._force_next_video_image = True + self._last_video_timestamp = None + + def _get_packet_for_stream(self, stream_index): + # See if a packet has already been buffered + for packet in self._buffered_packets: + if packet.stream_index == stream_index: + self._buffered_packets.remove(packet) + return packet + + # XXX This is ugly and needs tuning per-codec. Replace with an + # explicit API for disabling unused streams (e.g. for silent driver). + ''' + # Make sure we're not buffering packets that are being ignored + for buffer in self._buffered_packets, self._buffered_images: + if len(buffer) > 20: + buffer.pop(0) + ''' + + # Read more packets, buffering each interesting one until we get to + # the one we want or reach end of file. + while True: + if av.avbin_read(self._file, self._packet) != AVBIN_RESULT_OK: + return None + elif self._packet.stream_index == stream_index: + return self._packet + elif self._packet.stream_index == self._video_stream_index: + buffered_image = self._decode_video_packet(self._packet) + if buffered_image: + self._buffered_images.append(buffered_image) + elif self._packet.stream_index in self._buffer_streams: + self._buffered_packets.append(BufferedPacket(self._packet)) + + def _get_audio_data(self, bytes): + # XXX bytes currently ignored + while True: + while self._audio_packet_size > 0: + size_out = ctypes.c_int(len(self._audio_buffer)) + + #print self._audio_stream, self._audio_packet_ptr, self._audio_packet_size, self._audio_buffer, size_out + used = av.avbin_decode_audio(self._audio_stream, + self._audio_packet_ptr, self._audio_packet_size, + self._audio_buffer, size_out) + + if used < 0: + self._audio_packet_size = 0 + break + + self._audio_packet_ptr.value += used + self._audio_packet_size -= used + + if size_out.value <= 0: + continue + + buffer = ctypes.string_at(self._audio_buffer, size_out) + duration = \ + float(len(buffer)) / self.audio_format.bytes_per_second + timestamp = self._audio_packet_timestamp + self._audio_packet_timestamp += duration + return AudioData(buffer, len(buffer), timestamp, duration) + + packet = self._get_packet_for_stream(self._audio_stream_index) + if not packet: + return None + + self._audio_packet_timestamp = \ + timestamp_from_avbin(packet.timestamp) + self._audio_packet = packet # keep from GC + self._audio_packet_ptr = ctypes.cast(packet.data, + ctypes.c_void_p) + self._audio_packet_size = packet.size + + def _init_texture(self, player): + if not self.video_format: + return + + width = self.video_format.width + height = self.video_format.height + if gl_info.have_extension('GL_ARB_texture_rectangle'): + texture = image.Texture.create_for_size( + gl.GL_TEXTURE_RECTANGLE_ARB, width, height, + internalformat=gl.GL_RGB) + else: + texture = image.Texture.create_for_size( + gl.GL_TEXTURE_2D, width, height, internalformat=gl.GL_RGB) + if texture.width != width or texture.height != height: + texture = texture.get_region(0, 0, width, height) + player._texture = texture + + # Flip texture coords (good enough for simple apps). + t = list(player._texture.tex_coords) + player._texture.tex_coords = t[9:12] + t[6:9] + t[3:6] + t[:3] + + def _decode_video_packet(self, packet): + timestamp = timestamp_from_avbin(packet.timestamp) + + width = self.video_format.width + height = self.video_format.height + pitch = width * 3 + buffer = (ctypes.c_uint8 * (pitch * height))() + result = av.avbin_decode_video(self._video_stream, + packet.data, packet.size, + buffer) + if result < 0: + return None + + return BufferedImage( + image.ImageData(width, height, 'RGB', buffer, pitch), + timestamp) + + def _next_image(self): + img = None + while not img: + packet = self._get_packet_for_stream(self._video_stream_index) + if not packet: + return + img = self._decode_video_packet(packet) + + return img + + def get_next_video_timestamp(self): + if not self.video_format: + return + + try: + img = self._buffered_images[0] + except IndexError: + img = self._next_image() + self._buffered_images.append(img) + + if img: + return img.timestamp + + def get_next_video_frame(self): + if not self.video_format: + return + + try: + img = self._buffered_images.pop(0) + except IndexError: + img = self._next_image() + + if img: + self._last_video_timestamp = img.timestamp + self._force_next_video_image = False + return img.image + + def _update_texture(self, player, timestamp): + if not self.video_format: + return + + if self._last_video_timestamp > timestamp: + return + + img = None + i = 0 + while (not img or + (img.timestamp < timestamp and + not self._force_next_video_image) ): + if self._buffered_images: + img = self._buffered_images.pop(0) + else: + packet = self._get_packet_for_stream(self._video_stream_index) + if not packet: + return + img = self._decode_video_packet(packet) + + # Emergency loop exit when timestamps are bad + i += 1 + if i > 60: + break + + if img: + player._texture.blit_into(img.image, 0, 0, 0) + self._last_video_timestamp = img.timestamp + self._force_next_video_image = False + + def _release_texture(self, player): + player._texture = None + +av.avbin_init() +if pyglet.options['debug_media']: + av.avbin_set_log_level(AVBIN_LOG_DEBUG) +else: + av.avbin_set_log_level(AVBIN_LOG_QUIET) diff --git a/pyglet/media/drivers/__init__.py b/pyglet/media/drivers/__init__.py new file mode 100644 index 0000000..3c67e20 --- /dev/null +++ b/pyglet/media/drivers/__init__.py @@ -0,0 +1,34 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + diff --git a/pyglet/media/drivers/alsa/__init__.py b/pyglet/media/drivers/alsa/__init__.py new file mode 100644 index 0000000..19b6425 --- /dev/null +++ b/pyglet/media/drivers/alsa/__init__.py @@ -0,0 +1,301 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''Linux ALSA audio implementation. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: __init__.py 2084 2008-05-27 12:42:19Z Alex.Holkner $' + +import ctypes + +import pyglet +from pyglet.media import AudioPlayer, Listener, MediaException + +from pyglet.media.drivers.alsa import asound + +alsa_debug = None +if pyglet.options['debug_media']: + alsa_debug = 'alsa.log' + +class ALSAException(MediaException): + pass + +if alsa_debug: + def check(err): + if err < 0: + raise ALSAException(asound.snd_strerror(err)) + return err +else: + check = lambda v: v + +class ALSAAudioPlayer(AudioPlayer): + _device_name = 'default' + _buffer_time = 0.3 + _min_write_bytes = 10000 + + def __init__(self, audio_format): + super(ALSAAudioPlayer, self).__init__(audio_format) + + format = { + 8: asound.SND_PCM_FORMAT_U8, + 16: asound.SND_PCM_FORMAT_S16, + 24: asound.SND_PCM_FORMAT_S24, # probably won't work + 32: asound.SND_PCM_FORMAT_S32 + }.get(audio_format.sample_size) + if format is None: + raise ALSAException('Unsupported audio format.') + + self.pcm = ctypes.POINTER(asound.snd_pcm_t)() + self.hwparams = ctypes.POINTER(asound.snd_pcm_hw_params_t)() + self.swparams = ctypes.POINTER(asound.snd_pcm_sw_params_t)() + + check(asound.snd_pcm_open(ctypes.byref(self.pcm), + self._device_name, + asound.SND_PCM_STREAM_PLAYBACK, + asound.SND_PCM_NONBLOCK)) + check(asound.snd_pcm_hw_params_malloc(ctypes.byref(self.hwparams))) + check(asound.snd_pcm_sw_params_malloc(ctypes.byref(self.swparams))) + check(asound.snd_pcm_hw_params_any(self.pcm, self.hwparams)) + + check(asound.snd_pcm_hw_params_set_access(self.pcm, self.hwparams, + asound.SND_PCM_ACCESS_RW_INTERLEAVED)) + check(asound.snd_pcm_hw_params_set_format(self.pcm, self.hwparams, + format)) + check(asound.snd_pcm_hw_params_set_channels(self.pcm, self.hwparams, + audio_format.channels)) + + rate = ctypes.c_uint(audio_format.sample_rate) + dir = ctypes.c_int(0) + check(asound.snd_pcm_hw_params_set_rate_near(self.pcm, self.hwparams, + rate, dir)) + # Note actual sample rate is in rate.value. Ignored for now because + # difference is negligible. + + buffer_size = int(self._buffer_time * audio_format.sample_rate) + bs = asound.snd_pcm_uframes_t(buffer_size) + check(asound.snd_pcm_hw_params_set_buffer_size_near(self.pcm, + self.hwparams, bs)) + # Actual buffer size is in bs.value. Ignored for now. + + check(asound.snd_pcm_hw_params(self.pcm, self.hwparams)) + + if alsa_debug: + asound.snd_output_printf(debug_output, + 'New device: %s\n' % self._device_name) + check(asound.snd_pcm_dump(self.pcm, debug_output)) + + self.can_pause = asound.snd_pcm_hw_params_can_pause(self.hwparams) + + # List of (alsatime, timestamp) + self._timestamps = [] + self._stop_alsatime = None + self._eos_count = 0 + self._playing = False + + def __del__(self): + try: + check(asound.snd_pcm_close(self.pcm)) + except: + pass + + def get_write_size(self): + state = asound.snd_pcm_state(self.pcm) + if state == asound.SND_PCM_STATE_PAUSED: + return 0 + + avail = max(0, asound.snd_pcm_avail_update(self.pcm)) + bytes = avail * self.audio_format.bytes_per_sample + if bytes < self._min_write_bytes: + return 0 + return bytes + + def write(self, audio_data): + samples = audio_data.length // self.audio_format.bytes_per_sample + samples_out = asound.snd_pcm_writei(self.pcm, audio_data.data, + samples) + if samples_out < 0: + if samples_out == -11: # EAGAIN + return + elif samples_out == -32: # EPIPE (xrun) + check(asound.snd_pcm_prepare(self.pcm)) + return + else: + raise ALSAException(asound.snd_strerror(samples_out)) + + delay = asound.snd_pcm_sframes_t() + check(asound.snd_pcm_delay(self.pcm, delay)) + alsatime = self._get_asound_time() + \ + delay.value / float(self.audio_format.sample_rate) + + self._timestamps.append((alsatime, audio_data.timestamp)) + + audio_data.consume(samples_out * self.audio_format.bytes_per_sample, + self.audio_format) + + def write_eos(self): + if self._timestamps: + self._timestamps.append((None, None)) + + def write_end(self): + pass + + def play(self): + if self._playing: + return + + state = asound.snd_pcm_state(self.pcm) + if self.can_pause and state == asound.SND_PCM_STATE_PAUSED: + check(asound.snd_pcm_pause(self.pcm, 0)) + elif state not in (asound.SND_PCM_STATE_RUNNING, + asound.SND_PCM_STATE_PREPARED): + check(asound.snd_pcm_prepare(self.pcm)) + self._playing = True + + if self._stop_alsatime is not None: + diff = self._get_asound_time() - self._stop_alsatime + self._timestamps = [(a + diff, t) for a, t in self._timestamps] + self._stop_alsatime = None + + def stop(self): + if not self._playing: + return + + if self.can_pause and self._playing: + check(asound.snd_pcm_pause(self.pcm, 1)) + self._stop_alsatime = self._get_asound_time() + else: + # Hardware can't pause, so we'll just drop everything that's + # been buffered. Improvement could be to rebuffer data that + # wasn't played. + self.clear() + self._playing = False + + def clear(self): + check(asound.snd_pcm_drop(self.pcm)) + self._stop_alsatime = None + self._timestamps = [] + + def _get_asound_time(self): + status = ctypes.POINTER(asound.snd_pcm_status_t)() + timestamp = asound.snd_timestamp_t() + + check(asound.snd_pcm_status_malloc(ctypes.byref(status))) + check(asound.snd_pcm_status(self.pcm, status)) + asound.snd_pcm_status_get_tstamp(status, ctypes.byref(timestamp)) + asound.snd_pcm_status_free(status) + return timestamp.tv_sec + timestamp.tv_usec * 0.000001 + + def pump(self): + underrun = False + + if self._stop_alsatime is not None: + return underrun + + # Check that ALSA's still playing + if self._playing: + state = asound.snd_pcm_state(self.pcm) + if state not in (asound.SND_PCM_STATE_RUNNING, + asound.SND_PCM_STATE_PREPARED): + # Underrun! + check(asound.snd_pcm_prepare(self.pcm)) + underrun = True + + alsatime = self._get_asound_time() + try: + while self._timestamps[0][0] < alsatime: + self._timestamps.pop(0) + while self._timestamps[0][0] is None: + self._eos_count += 1 + self._timestamps.pop(0) + except IndexError: + pass + + return underrun + + def get_time(self): + if self._stop_alsatime is None: + alsatime = self._get_asound_time() + else: + alsatime = self._stop_alsatime + + if not self._timestamps: + self._playing = False + return 0.0 + + alsats, ts = self._timestamps[0] + t = alsatime - alsats + ts + return t + + def clear_eos(self): + if self._eos_count > 0: + self._eos_count -= 1 + return True + return False + +class ALSAListener(Listener): + def _set_volume(self, volume): + # TODO master volume + self._volume = volume + + # All other properties are silently ignored. + + def _set_position(self, position): + self._position = position + + def _set_velocity(self, velocity): + self._velocity = velocity + + def _set_forward_orientation(self, orientation): + self._forward_orientation = orientation + + def _set_up_orientation(self, orientation): + self._up_orientation = orientation + + def _set_doppler_factor(self, factor): + self._doppler_factor = factor + + def _set_speed_of_sound(self, speed_of_sound): + self._speed_of_sound = speed_of_sound + +def driver_init(): + global debug_output + debug_output = ctypes.POINTER(asound.snd_output_t)() + if alsa_debug: + check(asound.snd_output_stdio_open(ctypes.byref(debug_output), + alsa_debug, + 'w')) + +driver_listener = ALSAListener() +driver_audio_player_class = ALSAAudioPlayer diff --git a/pyglet/media/drivers/alsa/asound.py b/pyglet/media/drivers/alsa/asound.py new file mode 100644 index 0000000..2929df7 --- /dev/null +++ b/pyglet/media/drivers/alsa/asound.py @@ -0,0 +1,9673 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +'''Wrapper for asound + +Generated with: +tools/wraptypes/wrap.py -o asound.py -lasound /usr/include/alsa/alisp.h /usr/include/alsa/asoundef.h /usr/include/alsa/asoundlib.h /usr/include/alsa/conf.h /usr/include/alsa/control.h /usr/include/alsa/control_external.h /usr/include/alsa/conv.h /usr/include/alsa/error.h /usr/include/alsa/global.h /usr/include/alsa/hwdep.h /usr/include/alsa/iatomic.h /usr/include/alsa/input.h /usr/include/alsa/instr.h /usr/include/alsa/mixer.h /usr/include/alsa/mixer_abst.h /usr/include/alsa/pcm.h /usr/include/alsa/pcm_external.h /usr/include/alsa/pcm_extplug.h /usr/include/alsa/pcm_ioplug.h /usr/include/alsa/pcm_old.h /usr/include/alsa/pcm_plugin.h /usr/include/alsa/pcm_rate.h /usr/include/alsa/rawmidi.h /usr/include/alsa/seq.h /usr/include/alsa/seq_event.h /usr/include/alsa/seq_midi_event.h /usr/include/alsa/seqmid.h /usr/include/alsa/timer.h /usr/include/alsa/version.h + + -- And then hacked to work with libasound.so, grep for XXX + +Do not regenerate this file. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: asound.py 1579 2008-01-15 14:47:19Z Alex.Holkner $' + +import ctypes +from ctypes import * + +import pyglet.lib + +_lib = pyglet.lib.load_library('asound') + +_int_types = (c_int16, c_int32) +if hasattr(ctypes, 'c_int64'): + # Some builds of ctypes apparently do not have c_int64 + # defined; it's a pretty good bet that these builds do not + # have 64-bit pointers. + _int_types += (ctypes.c_int64,) +for t in _int_types: + if sizeof(t) == sizeof(c_size_t): + c_ptrdiff_t = t + +class c_void(Structure): + # c_void_p is a buggy return type, converting to int, so + # POINTER(None) == c_void_p is actually written as + # POINTER(c_void), so it can be treated as a real pointer. + _fields_ = [('dummy', c_int)] + + + +class struct_alisp_cfg(Structure): + __slots__ = [ + ] +struct_alisp_cfg._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/alisp.h:39 +alsa_lisp_default_cfg_free = _lib.alsa_lisp_default_cfg_free +alsa_lisp_default_cfg_free.restype = None +alsa_lisp_default_cfg_free.argtypes = [POINTER(struct_alisp_cfg)] + +class struct_alisp_cfg(Structure): + __slots__ = [ + ] +struct_alisp_cfg._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct_alisp_instance(Structure): + __slots__ = [ + ] +struct_alisp_instance._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/alisp.h:40 +alsa_lisp = _lib.alsa_lisp +alsa_lisp.restype = c_int +alsa_lisp.argtypes = [POINTER(struct_alisp_cfg), POINTER(POINTER(struct_alisp_instance))] + +class struct_alisp_instance(Structure): + __slots__ = [ + ] +struct_alisp_instance._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/alisp.h:41 +alsa_lisp_free = _lib.alsa_lisp_free +alsa_lisp_free.restype = None +alsa_lisp_free.argtypes = [POINTER(struct_alisp_instance)] + +class struct_alisp_instance(Structure): + __slots__ = [ + ] +struct_alisp_instance._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct_alisp_seq_iterator(Structure): + __slots__ = [ + ] +struct_alisp_seq_iterator._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/alisp.h:48 +alsa_lisp_result_free = _lib.alsa_lisp_result_free +alsa_lisp_result_free.restype = None +alsa_lisp_result_free.argtypes = [POINTER(struct_alisp_instance), POINTER(struct_alisp_seq_iterator)] + +class struct_alisp_instance(Structure): + __slots__ = [ + ] +struct_alisp_instance._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct_alisp_seq_iterator(Structure): + __slots__ = [ + ] +struct_alisp_seq_iterator._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/alisp.h:50 +alsa_lisp_seq_first = _lib.alsa_lisp_seq_first +alsa_lisp_seq_first.restype = c_int +alsa_lisp_seq_first.argtypes = [POINTER(struct_alisp_instance), c_char_p, POINTER(POINTER(struct_alisp_seq_iterator))] + +class struct_alisp_seq_iterator(Structure): + __slots__ = [ + ] +struct_alisp_seq_iterator._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/alisp.h:52 +alsa_lisp_seq_next = _lib.alsa_lisp_seq_next +alsa_lisp_seq_next.restype = c_int +alsa_lisp_seq_next.argtypes = [POINTER(POINTER(struct_alisp_seq_iterator))] + +class struct_alisp_seq_iterator(Structure): + __slots__ = [ + ] +struct_alisp_seq_iterator._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/alisp.h:53 +alsa_lisp_seq_count = _lib.alsa_lisp_seq_count +alsa_lisp_seq_count.restype = c_int +alsa_lisp_seq_count.argtypes = [POINTER(struct_alisp_seq_iterator)] + +class struct_alisp_seq_iterator(Structure): + __slots__ = [ + ] +struct_alisp_seq_iterator._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/alisp.h:54 +alsa_lisp_seq_integer = _lib.alsa_lisp_seq_integer +alsa_lisp_seq_integer.restype = c_int +alsa_lisp_seq_integer.argtypes = [POINTER(struct_alisp_seq_iterator), POINTER(c_long)] + +class struct_alisp_seq_iterator(Structure): + __slots__ = [ + ] +struct_alisp_seq_iterator._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/alisp.h:55 +alsa_lisp_seq_pointer = _lib.alsa_lisp_seq_pointer +alsa_lisp_seq_pointer.restype = c_int +alsa_lisp_seq_pointer.argtypes = [POINTER(struct_alisp_seq_iterator), c_char_p, POINTER(POINTER(None))] + +IEC958_AES0_PROFESSIONAL = 1 # /usr/include/alsa/asoundef.h:96 +IEC958_AES0_NONAUDIO = 2 # /usr/include/alsa/asoundef.h:97 +IEC958_AES0_PRO_EMPHASIS = 28 # /usr/include/alsa/asoundef.h:98 +IEC958_AES0_PRO_EMPHASIS_NOTID = 0 # /usr/include/alsa/asoundef.h:99 +IEC958_AES0_PRO_EMPHASIS_NONE = 4 # /usr/include/alsa/asoundef.h:100 +IEC958_AES0_PRO_EMPHASIS_5015 = 12 # /usr/include/alsa/asoundef.h:101 +IEC958_AES0_PRO_EMPHASIS_CCITT = 28 # /usr/include/alsa/asoundef.h:102 +IEC958_AES0_PRO_FREQ_UNLOCKED = 32 # /usr/include/alsa/asoundef.h:103 +IEC958_AES0_PRO_FS = 192 # /usr/include/alsa/asoundef.h:104 +IEC958_AES0_PRO_FS_NOTID = 0 # /usr/include/alsa/asoundef.h:105 +IEC958_AES0_PRO_FS_44100 = 64 # /usr/include/alsa/asoundef.h:106 +IEC958_AES0_PRO_FS_48000 = 128 # /usr/include/alsa/asoundef.h:107 +IEC958_AES0_PRO_FS_32000 = 192 # /usr/include/alsa/asoundef.h:108 +IEC958_AES0_CON_NOT_COPYRIGHT = 4 # /usr/include/alsa/asoundef.h:109 +IEC958_AES0_CON_EMPHASIS = 56 # /usr/include/alsa/asoundef.h:110 +IEC958_AES0_CON_EMPHASIS_NONE = 0 # /usr/include/alsa/asoundef.h:111 +IEC958_AES0_CON_EMPHASIS_5015 = 8 # /usr/include/alsa/asoundef.h:112 +IEC958_AES0_CON_MODE = 192 # /usr/include/alsa/asoundef.h:113 +IEC958_AES1_PRO_MODE = 15 # /usr/include/alsa/asoundef.h:114 +IEC958_AES1_PRO_MODE_NOTID = 0 # /usr/include/alsa/asoundef.h:115 +IEC958_AES1_PRO_MODE_STEREOPHONIC = 2 # /usr/include/alsa/asoundef.h:116 +IEC958_AES1_PRO_MODE_SINGLE = 4 # /usr/include/alsa/asoundef.h:117 +IEC958_AES1_PRO_MODE_TWO = 8 # /usr/include/alsa/asoundef.h:118 +IEC958_AES1_PRO_MODE_PRIMARY = 12 # /usr/include/alsa/asoundef.h:119 +IEC958_AES1_PRO_MODE_BYTE3 = 15 # /usr/include/alsa/asoundef.h:120 +IEC958_AES1_PRO_USERBITS = 240 # /usr/include/alsa/asoundef.h:121 +IEC958_AES1_PRO_USERBITS_NOTID = 0 # /usr/include/alsa/asoundef.h:122 +IEC958_AES1_PRO_USERBITS_192 = 128 # /usr/include/alsa/asoundef.h:123 +IEC958_AES1_PRO_USERBITS_UDEF = 192 # /usr/include/alsa/asoundef.h:124 +IEC958_AES1_CON_CATEGORY = 127 # /usr/include/alsa/asoundef.h:125 +IEC958_AES1_CON_GENERAL = 0 # /usr/include/alsa/asoundef.h:126 +IEC958_AES1_CON_EXPERIMENTAL = 64 # /usr/include/alsa/asoundef.h:127 +IEC958_AES1_CON_SOLIDMEM_MASK = 15 # /usr/include/alsa/asoundef.h:128 +IEC958_AES1_CON_SOLIDMEM_ID = 8 # /usr/include/alsa/asoundef.h:129 +IEC958_AES1_CON_BROADCAST1_MASK = 7 # /usr/include/alsa/asoundef.h:130 +IEC958_AES1_CON_BROADCAST1_ID = 4 # /usr/include/alsa/asoundef.h:131 +IEC958_AES1_CON_DIGDIGCONV_MASK = 7 # /usr/include/alsa/asoundef.h:132 +IEC958_AES1_CON_DIGDIGCONV_ID = 2 # /usr/include/alsa/asoundef.h:133 +IEC958_AES1_CON_ADC_COPYRIGHT_MASK = 31 # /usr/include/alsa/asoundef.h:134 +IEC958_AES1_CON_ADC_COPYRIGHT_ID = 6 # /usr/include/alsa/asoundef.h:135 +IEC958_AES1_CON_ADC_MASK = 31 # /usr/include/alsa/asoundef.h:136 +IEC958_AES1_CON_ADC_ID = 22 # /usr/include/alsa/asoundef.h:137 +IEC958_AES1_CON_BROADCAST2_MASK = 15 # /usr/include/alsa/asoundef.h:138 +IEC958_AES1_CON_BROADCAST2_ID = 14 # /usr/include/alsa/asoundef.h:139 +IEC958_AES1_CON_LASEROPT_MASK = 7 # /usr/include/alsa/asoundef.h:140 +IEC958_AES1_CON_LASEROPT_ID = 1 # /usr/include/alsa/asoundef.h:141 +IEC958_AES1_CON_MUSICAL_MASK = 7 # /usr/include/alsa/asoundef.h:142 +IEC958_AES1_CON_MUSICAL_ID = 5 # /usr/include/alsa/asoundef.h:143 +IEC958_AES1_CON_MAGNETIC_MASK = 7 # /usr/include/alsa/asoundef.h:144 +IEC958_AES1_CON_MAGNETIC_ID = 3 # /usr/include/alsa/asoundef.h:145 +IEC958_AES1_CON_IEC908_CD = 1 # /usr/include/alsa/asoundef.h:146 +IEC958_AES1_CON_NON_IEC908_CD = 9 # /usr/include/alsa/asoundef.h:147 +IEC958_AES1_CON_PCM_CODER = 2 # /usr/include/alsa/asoundef.h:148 +IEC958_AES1_CON_SAMPLER = 34 # /usr/include/alsa/asoundef.h:149 +IEC958_AES1_CON_MIXER = 18 # /usr/include/alsa/asoundef.h:150 +IEC958_AES1_CON_RATE_CONVERTER = 26 # /usr/include/alsa/asoundef.h:151 +IEC958_AES1_CON_SYNTHESIZER = 5 # /usr/include/alsa/asoundef.h:152 +IEC958_AES1_CON_MICROPHONE = 13 # /usr/include/alsa/asoundef.h:153 +IEC958_AES1_CON_DAT = 3 # /usr/include/alsa/asoundef.h:154 +IEC958_AES1_CON_VCR = 11 # /usr/include/alsa/asoundef.h:155 +IEC958_AES1_CON_ORIGINAL = 128 # /usr/include/alsa/asoundef.h:156 +IEC958_AES2_PRO_SBITS = 7 # /usr/include/alsa/asoundef.h:157 +IEC958_AES2_PRO_SBITS_20 = 2 # /usr/include/alsa/asoundef.h:158 +IEC958_AES2_PRO_SBITS_24 = 4 # /usr/include/alsa/asoundef.h:159 +IEC958_AES2_PRO_SBITS_UDEF = 6 # /usr/include/alsa/asoundef.h:160 +IEC958_AES2_PRO_WORDLEN = 56 # /usr/include/alsa/asoundef.h:161 +IEC958_AES2_PRO_WORDLEN_NOTID = 0 # /usr/include/alsa/asoundef.h:162 +IEC958_AES2_PRO_WORDLEN_22_18 = 16 # /usr/include/alsa/asoundef.h:163 +IEC958_AES2_PRO_WORDLEN_23_19 = 32 # /usr/include/alsa/asoundef.h:164 +IEC958_AES2_PRO_WORDLEN_24_20 = 40 # /usr/include/alsa/asoundef.h:165 +IEC958_AES2_PRO_WORDLEN_20_16 = 48 # /usr/include/alsa/asoundef.h:166 +IEC958_AES2_CON_SOURCE = 15 # /usr/include/alsa/asoundef.h:167 +IEC958_AES2_CON_SOURCE_UNSPEC = 0 # /usr/include/alsa/asoundef.h:168 +IEC958_AES2_CON_CHANNEL = 240 # /usr/include/alsa/asoundef.h:169 +IEC958_AES2_CON_CHANNEL_UNSPEC = 0 # /usr/include/alsa/asoundef.h:170 +IEC958_AES3_CON_FS = 15 # /usr/include/alsa/asoundef.h:171 +IEC958_AES3_CON_FS_44100 = 0 # /usr/include/alsa/asoundef.h:172 +IEC958_AES3_CON_FS_48000 = 2 # /usr/include/alsa/asoundef.h:173 +IEC958_AES3_CON_FS_32000 = 3 # /usr/include/alsa/asoundef.h:174 +IEC958_AES3_CON_CLOCK = 48 # /usr/include/alsa/asoundef.h:175 +IEC958_AES3_CON_CLOCK_1000PPM = 0 # /usr/include/alsa/asoundef.h:176 +IEC958_AES3_CON_CLOCK_50PPM = 16 # /usr/include/alsa/asoundef.h:177 +IEC958_AES3_CON_CLOCK_VARIABLE = 32 # /usr/include/alsa/asoundef.h:178 +MIDI_CHANNELS = 16 # /usr/include/alsa/asoundef.h:188 +MIDI_GM_DRUM_CHANNEL = 9 # /usr/include/alsa/asoundef.h:189 +MIDI_CMD_NOTE_OFF = 128 # /usr/include/alsa/asoundef.h:197 +MIDI_CMD_NOTE_ON = 144 # /usr/include/alsa/asoundef.h:198 +MIDI_CMD_NOTE_PRESSURE = 160 # /usr/include/alsa/asoundef.h:199 +MIDI_CMD_CONTROL = 176 # /usr/include/alsa/asoundef.h:200 +MIDI_CMD_PGM_CHANGE = 192 # /usr/include/alsa/asoundef.h:201 +MIDI_CMD_CHANNEL_PRESSURE = 208 # /usr/include/alsa/asoundef.h:202 +MIDI_CMD_BENDER = 224 # /usr/include/alsa/asoundef.h:203 +MIDI_CMD_COMMON_SYSEX = 240 # /usr/include/alsa/asoundef.h:205 +MIDI_CMD_COMMON_MTC_QUARTER = 241 # /usr/include/alsa/asoundef.h:206 +MIDI_CMD_COMMON_SONG_POS = 242 # /usr/include/alsa/asoundef.h:207 +MIDI_CMD_COMMON_SONG_SELECT = 243 # /usr/include/alsa/asoundef.h:208 +MIDI_CMD_COMMON_TUNE_REQUEST = 246 # /usr/include/alsa/asoundef.h:209 +MIDI_CMD_COMMON_SYSEX_END = 247 # /usr/include/alsa/asoundef.h:210 +MIDI_CMD_COMMON_CLOCK = 248 # /usr/include/alsa/asoundef.h:211 +MIDI_CMD_COMMON_START = 250 # /usr/include/alsa/asoundef.h:212 +MIDI_CMD_COMMON_CONTINUE = 251 # /usr/include/alsa/asoundef.h:213 +MIDI_CMD_COMMON_STOP = 252 # /usr/include/alsa/asoundef.h:214 +MIDI_CMD_COMMON_SENSING = 254 # /usr/include/alsa/asoundef.h:215 +MIDI_CMD_COMMON_RESET = 255 # /usr/include/alsa/asoundef.h:216 +MIDI_CTL_MSB_BANK = 0 # /usr/include/alsa/asoundef.h:226 +MIDI_CTL_MSB_MODWHEEL = 1 # /usr/include/alsa/asoundef.h:227 +MIDI_CTL_MSB_BREATH = 2 # /usr/include/alsa/asoundef.h:228 +MIDI_CTL_MSB_FOOT = 4 # /usr/include/alsa/asoundef.h:229 +MIDI_CTL_MSB_PORTAMENTO_TIME = 5 # /usr/include/alsa/asoundef.h:230 +MIDI_CTL_MSB_DATA_ENTRY = 6 # /usr/include/alsa/asoundef.h:231 +MIDI_CTL_MSB_MAIN_VOLUME = 7 # /usr/include/alsa/asoundef.h:232 +MIDI_CTL_MSB_BALANCE = 8 # /usr/include/alsa/asoundef.h:233 +MIDI_CTL_MSB_PAN = 10 # /usr/include/alsa/asoundef.h:234 +MIDI_CTL_MSB_EXPRESSION = 11 # /usr/include/alsa/asoundef.h:235 +MIDI_CTL_MSB_EFFECT1 = 12 # /usr/include/alsa/asoundef.h:236 +MIDI_CTL_MSB_EFFECT2 = 13 # /usr/include/alsa/asoundef.h:237 +MIDI_CTL_MSB_GENERAL_PURPOSE1 = 16 # /usr/include/alsa/asoundef.h:238 +MIDI_CTL_MSB_GENERAL_PURPOSE2 = 17 # /usr/include/alsa/asoundef.h:239 +MIDI_CTL_MSB_GENERAL_PURPOSE3 = 18 # /usr/include/alsa/asoundef.h:240 +MIDI_CTL_MSB_GENERAL_PURPOSE4 = 19 # /usr/include/alsa/asoundef.h:241 +MIDI_CTL_LSB_BANK = 32 # /usr/include/alsa/asoundef.h:242 +MIDI_CTL_LSB_MODWHEEL = 33 # /usr/include/alsa/asoundef.h:243 +MIDI_CTL_LSB_BREATH = 34 # /usr/include/alsa/asoundef.h:244 +MIDI_CTL_LSB_FOOT = 36 # /usr/include/alsa/asoundef.h:245 +MIDI_CTL_LSB_PORTAMENTO_TIME = 37 # /usr/include/alsa/asoundef.h:246 +MIDI_CTL_LSB_DATA_ENTRY = 38 # /usr/include/alsa/asoundef.h:247 +MIDI_CTL_LSB_MAIN_VOLUME = 39 # /usr/include/alsa/asoundef.h:248 +MIDI_CTL_LSB_BALANCE = 40 # /usr/include/alsa/asoundef.h:249 +MIDI_CTL_LSB_PAN = 42 # /usr/include/alsa/asoundef.h:250 +MIDI_CTL_LSB_EXPRESSION = 43 # /usr/include/alsa/asoundef.h:251 +MIDI_CTL_LSB_EFFECT1 = 44 # /usr/include/alsa/asoundef.h:252 +MIDI_CTL_LSB_EFFECT2 = 45 # /usr/include/alsa/asoundef.h:253 +MIDI_CTL_LSB_GENERAL_PURPOSE1 = 48 # /usr/include/alsa/asoundef.h:254 +MIDI_CTL_LSB_GENERAL_PURPOSE2 = 49 # /usr/include/alsa/asoundef.h:255 +MIDI_CTL_LSB_GENERAL_PURPOSE3 = 50 # /usr/include/alsa/asoundef.h:256 +MIDI_CTL_LSB_GENERAL_PURPOSE4 = 51 # /usr/include/alsa/asoundef.h:257 +MIDI_CTL_SUSTAIN = 64 # /usr/include/alsa/asoundef.h:258 +MIDI_CTL_PORTAMENTO = 65 # /usr/include/alsa/asoundef.h:259 +MIDI_CTL_SOSTENUTO = 66 # /usr/include/alsa/asoundef.h:260 +MIDI_CTL_SUSTENUTO = 66 # /usr/include/alsa/asoundef.h:261 +MIDI_CTL_SOFT_PEDAL = 67 # /usr/include/alsa/asoundef.h:262 +MIDI_CTL_LEGATO_FOOTSWITCH = 68 # /usr/include/alsa/asoundef.h:263 +MIDI_CTL_HOLD2 = 69 # /usr/include/alsa/asoundef.h:264 +MIDI_CTL_SC1_SOUND_VARIATION = 70 # /usr/include/alsa/asoundef.h:265 +MIDI_CTL_SC2_TIMBRE = 71 # /usr/include/alsa/asoundef.h:266 +MIDI_CTL_SC3_RELEASE_TIME = 72 # /usr/include/alsa/asoundef.h:267 +MIDI_CTL_SC4_ATTACK_TIME = 73 # /usr/include/alsa/asoundef.h:268 +MIDI_CTL_SC5_BRIGHTNESS = 74 # /usr/include/alsa/asoundef.h:269 +MIDI_CTL_SC6 = 75 # /usr/include/alsa/asoundef.h:270 +MIDI_CTL_SC7 = 76 # /usr/include/alsa/asoundef.h:271 +MIDI_CTL_SC8 = 77 # /usr/include/alsa/asoundef.h:272 +MIDI_CTL_SC9 = 78 # /usr/include/alsa/asoundef.h:273 +MIDI_CTL_SC10 = 79 # /usr/include/alsa/asoundef.h:274 +MIDI_CTL_GENERAL_PURPOSE5 = 80 # /usr/include/alsa/asoundef.h:275 +MIDI_CTL_GENERAL_PURPOSE6 = 81 # /usr/include/alsa/asoundef.h:276 +MIDI_CTL_GENERAL_PURPOSE7 = 82 # /usr/include/alsa/asoundef.h:277 +MIDI_CTL_GENERAL_PURPOSE8 = 83 # /usr/include/alsa/asoundef.h:278 +MIDI_CTL_PORTAMENTO_CONTROL = 84 # /usr/include/alsa/asoundef.h:279 +MIDI_CTL_E1_REVERB_DEPTH = 91 # /usr/include/alsa/asoundef.h:280 +MIDI_CTL_E2_TREMOLO_DEPTH = 92 # /usr/include/alsa/asoundef.h:281 +MIDI_CTL_E3_CHORUS_DEPTH = 93 # /usr/include/alsa/asoundef.h:282 +MIDI_CTL_E4_DETUNE_DEPTH = 94 # /usr/include/alsa/asoundef.h:283 +MIDI_CTL_E5_PHASER_DEPTH = 95 # /usr/include/alsa/asoundef.h:284 +MIDI_CTL_DATA_INCREMENT = 96 # /usr/include/alsa/asoundef.h:285 +MIDI_CTL_DATA_DECREMENT = 97 # /usr/include/alsa/asoundef.h:286 +MIDI_CTL_NONREG_PARM_NUM_LSB = 98 # /usr/include/alsa/asoundef.h:287 +MIDI_CTL_NONREG_PARM_NUM_MSB = 99 # /usr/include/alsa/asoundef.h:288 +MIDI_CTL_REGIST_PARM_NUM_LSB = 100 # /usr/include/alsa/asoundef.h:289 +MIDI_CTL_REGIST_PARM_NUM_MSB = 101 # /usr/include/alsa/asoundef.h:290 +MIDI_CTL_ALL_SOUNDS_OFF = 120 # /usr/include/alsa/asoundef.h:291 +MIDI_CTL_RESET_CONTROLLERS = 121 # /usr/include/alsa/asoundef.h:292 +MIDI_CTL_LOCAL_CONTROL_SWITCH = 122 # /usr/include/alsa/asoundef.h:293 +MIDI_CTL_ALL_NOTES_OFF = 123 # /usr/include/alsa/asoundef.h:294 +MIDI_CTL_OMNI_OFF = 124 # /usr/include/alsa/asoundef.h:295 +MIDI_CTL_OMNI_ON = 125 # /usr/include/alsa/asoundef.h:296 +MIDI_CTL_MONO1 = 126 # /usr/include/alsa/asoundef.h:297 +MIDI_CTL_MONO2 = 127 # /usr/include/alsa/asoundef.h:298 +IEC958_AES0_PROFESSIONAL = 1 # /usr/include/alsa/asoundef.h:41 +IEC958_AES0_NONAUDIO = 2 # /usr/include/alsa/asoundef.h:42 +IEC958_AES0_PRO_EMPHASIS = 28 # /usr/include/alsa/asoundef.h:43 +IEC958_AES0_PRO_EMPHASIS_NOTID = 0 # /usr/include/alsa/asoundef.h:44 +IEC958_AES0_PRO_EMPHASIS_NONE = 4 # /usr/include/alsa/asoundef.h:45 +IEC958_AES0_PRO_EMPHASIS_5015 = 12 # /usr/include/alsa/asoundef.h:46 +IEC958_AES0_PRO_EMPHASIS_CCITT = 28 # /usr/include/alsa/asoundef.h:47 +IEC958_AES0_PRO_FREQ_UNLOCKED = 32 # /usr/include/alsa/asoundef.h:48 +IEC958_AES0_PRO_FS = 192 # /usr/include/alsa/asoundef.h:49 +IEC958_AES0_PRO_FS_NOTID = 0 # /usr/include/alsa/asoundef.h:50 +IEC958_AES0_PRO_FS_44100 = 64 # /usr/include/alsa/asoundef.h:51 +IEC958_AES0_PRO_FS_48000 = 128 # /usr/include/alsa/asoundef.h:52 +IEC958_AES0_PRO_FS_32000 = 192 # /usr/include/alsa/asoundef.h:53 +IEC958_AES0_CON_NOT_COPYRIGHT = 4 # /usr/include/alsa/asoundef.h:54 +IEC958_AES0_CON_EMPHASIS = 56 # /usr/include/alsa/asoundef.h:55 +IEC958_AES0_CON_EMPHASIS_NONE = 0 # /usr/include/alsa/asoundef.h:56 +IEC958_AES0_CON_EMPHASIS_5015 = 8 # /usr/include/alsa/asoundef.h:57 +IEC958_AES0_CON_MODE = 192 # /usr/include/alsa/asoundef.h:58 +IEC958_AES1_PRO_MODE = 15 # /usr/include/alsa/asoundef.h:59 +IEC958_AES1_PRO_MODE_NOTID = 0 # /usr/include/alsa/asoundef.h:60 +IEC958_AES1_PRO_MODE_STEREOPHONIC = 2 # /usr/include/alsa/asoundef.h:61 +IEC958_AES1_PRO_MODE_SINGLE = 4 # /usr/include/alsa/asoundef.h:62 +IEC958_AES1_PRO_MODE_TWO = 8 # /usr/include/alsa/asoundef.h:63 +IEC958_AES1_PRO_MODE_PRIMARY = 12 # /usr/include/alsa/asoundef.h:64 +IEC958_AES1_PRO_MODE_BYTE3 = 15 # /usr/include/alsa/asoundef.h:65 +IEC958_AES1_PRO_USERBITS = 240 # /usr/include/alsa/asoundef.h:66 +IEC958_AES1_PRO_USERBITS_NOTID = 0 # /usr/include/alsa/asoundef.h:67 +IEC958_AES1_PRO_USERBITS_192 = 128 # /usr/include/alsa/asoundef.h:68 +IEC958_AES1_PRO_USERBITS_UDEF = 192 # /usr/include/alsa/asoundef.h:69 +IEC958_AES1_CON_CATEGORY = 127 # /usr/include/alsa/asoundef.h:70 +IEC958_AES1_CON_GENERAL = 0 # /usr/include/alsa/asoundef.h:71 +IEC958_AES1_CON_EXPERIMENTAL = 64 # /usr/include/alsa/asoundef.h:72 +IEC958_AES1_CON_SOLIDMEM_MASK = 15 # /usr/include/alsa/asoundef.h:73 +IEC958_AES1_CON_SOLIDMEM_ID = 8 # /usr/include/alsa/asoundef.h:74 +IEC958_AES1_CON_BROADCAST1_MASK = 7 # /usr/include/alsa/asoundef.h:75 +IEC958_AES1_CON_BROADCAST1_ID = 4 # /usr/include/alsa/asoundef.h:76 +IEC958_AES1_CON_DIGDIGCONV_MASK = 7 # /usr/include/alsa/asoundef.h:77 +IEC958_AES1_CON_DIGDIGCONV_ID = 2 # /usr/include/alsa/asoundef.h:78 +IEC958_AES1_CON_ADC_COPYRIGHT_MASK = 31 # /usr/include/alsa/asoundef.h:79 +IEC958_AES1_CON_ADC_COPYRIGHT_ID = 6 # /usr/include/alsa/asoundef.h:80 +IEC958_AES1_CON_ADC_MASK = 31 # /usr/include/alsa/asoundef.h:81 +IEC958_AES1_CON_ADC_ID = 22 # /usr/include/alsa/asoundef.h:82 +IEC958_AES1_CON_BROADCAST2_MASK = 15 # /usr/include/alsa/asoundef.h:83 +IEC958_AES1_CON_BROADCAST2_ID = 14 # /usr/include/alsa/asoundef.h:84 +IEC958_AES1_CON_LASEROPT_MASK = 7 # /usr/include/alsa/asoundef.h:85 +IEC958_AES1_CON_LASEROPT_ID = 1 # /usr/include/alsa/asoundef.h:86 +IEC958_AES1_CON_MUSICAL_MASK = 7 # /usr/include/alsa/asoundef.h:87 +IEC958_AES1_CON_MUSICAL_ID = 5 # /usr/include/alsa/asoundef.h:88 +IEC958_AES1_CON_MAGNETIC_MASK = 7 # /usr/include/alsa/asoundef.h:89 +IEC958_AES1_CON_MAGNETIC_ID = 3 # /usr/include/alsa/asoundef.h:90 +IEC958_AES1_CON_IEC908_CD = 1 # /usr/include/alsa/asoundef.h:91 +IEC958_AES1_CON_NON_IEC908_CD = 9 # /usr/include/alsa/asoundef.h:92 +IEC958_AES1_CON_PCM_CODER = 2 # /usr/include/alsa/asoundef.h:93 +IEC958_AES1_CON_SAMPLER = 34 # /usr/include/alsa/asoundef.h:94 +IEC958_AES1_CON_MIXER = 18 # /usr/include/alsa/asoundef.h:95 +IEC958_AES1_CON_RATE_CONVERTER = 26 # /usr/include/alsa/asoundef.h:96 +IEC958_AES1_CON_SYNTHESIZER = 5 # /usr/include/alsa/asoundef.h:97 +IEC958_AES1_CON_MICROPHONE = 13 # /usr/include/alsa/asoundef.h:98 +IEC958_AES1_CON_DAT = 3 # /usr/include/alsa/asoundef.h:99 +IEC958_AES1_CON_VCR = 11 # /usr/include/alsa/asoundef.h:100 +IEC958_AES1_CON_ORIGINAL = 128 # /usr/include/alsa/asoundef.h:101 +IEC958_AES2_PRO_SBITS = 7 # /usr/include/alsa/asoundef.h:102 +IEC958_AES2_PRO_SBITS_20 = 2 # /usr/include/alsa/asoundef.h:103 +IEC958_AES2_PRO_SBITS_24 = 4 # /usr/include/alsa/asoundef.h:104 +IEC958_AES2_PRO_SBITS_UDEF = 6 # /usr/include/alsa/asoundef.h:105 +IEC958_AES2_PRO_WORDLEN = 56 # /usr/include/alsa/asoundef.h:106 +IEC958_AES2_PRO_WORDLEN_NOTID = 0 # /usr/include/alsa/asoundef.h:107 +IEC958_AES2_PRO_WORDLEN_22_18 = 16 # /usr/include/alsa/asoundef.h:108 +IEC958_AES2_PRO_WORDLEN_23_19 = 32 # /usr/include/alsa/asoundef.h:109 +IEC958_AES2_PRO_WORDLEN_24_20 = 40 # /usr/include/alsa/asoundef.h:110 +IEC958_AES2_PRO_WORDLEN_20_16 = 48 # /usr/include/alsa/asoundef.h:111 +IEC958_AES2_CON_SOURCE = 15 # /usr/include/alsa/asoundef.h:112 +IEC958_AES2_CON_SOURCE_UNSPEC = 0 # /usr/include/alsa/asoundef.h:113 +IEC958_AES2_CON_CHANNEL = 240 # /usr/include/alsa/asoundef.h:114 +IEC958_AES2_CON_CHANNEL_UNSPEC = 0 # /usr/include/alsa/asoundef.h:115 +IEC958_AES3_CON_FS = 15 # /usr/include/alsa/asoundef.h:116 +IEC958_AES3_CON_FS_44100 = 0 # /usr/include/alsa/asoundef.h:117 +IEC958_AES3_CON_FS_48000 = 2 # /usr/include/alsa/asoundef.h:118 +IEC958_AES3_CON_FS_32000 = 3 # /usr/include/alsa/asoundef.h:119 +IEC958_AES3_CON_CLOCK = 48 # /usr/include/alsa/asoundef.h:120 +IEC958_AES3_CON_CLOCK_1000PPM = 0 # /usr/include/alsa/asoundef.h:121 +IEC958_AES3_CON_CLOCK_50PPM = 16 # /usr/include/alsa/asoundef.h:122 +IEC958_AES3_CON_CLOCK_VARIABLE = 32 # /usr/include/alsa/asoundef.h:123 +MIDI_CHANNELS = 16 # /usr/include/alsa/asoundef.h:133 +MIDI_GM_DRUM_CHANNEL = 9 # /usr/include/alsa/asoundef.h:134 +MIDI_CMD_NOTE_OFF = 128 # /usr/include/alsa/asoundef.h:142 +MIDI_CMD_NOTE_ON = 144 # /usr/include/alsa/asoundef.h:143 +MIDI_CMD_NOTE_PRESSURE = 160 # /usr/include/alsa/asoundef.h:144 +MIDI_CMD_CONTROL = 176 # /usr/include/alsa/asoundef.h:145 +MIDI_CMD_PGM_CHANGE = 192 # /usr/include/alsa/asoundef.h:146 +MIDI_CMD_CHANNEL_PRESSURE = 208 # /usr/include/alsa/asoundef.h:147 +MIDI_CMD_BENDER = 224 # /usr/include/alsa/asoundef.h:148 +MIDI_CMD_COMMON_SYSEX = 240 # /usr/include/alsa/asoundef.h:150 +MIDI_CMD_COMMON_MTC_QUARTER = 241 # /usr/include/alsa/asoundef.h:151 +MIDI_CMD_COMMON_SONG_POS = 242 # /usr/include/alsa/asoundef.h:152 +MIDI_CMD_COMMON_SONG_SELECT = 243 # /usr/include/alsa/asoundef.h:153 +MIDI_CMD_COMMON_TUNE_REQUEST = 246 # /usr/include/alsa/asoundef.h:154 +MIDI_CMD_COMMON_SYSEX_END = 247 # /usr/include/alsa/asoundef.h:155 +MIDI_CMD_COMMON_CLOCK = 248 # /usr/include/alsa/asoundef.h:156 +MIDI_CMD_COMMON_START = 250 # /usr/include/alsa/asoundef.h:157 +MIDI_CMD_COMMON_CONTINUE = 251 # /usr/include/alsa/asoundef.h:158 +MIDI_CMD_COMMON_STOP = 252 # /usr/include/alsa/asoundef.h:159 +MIDI_CMD_COMMON_SENSING = 254 # /usr/include/alsa/asoundef.h:160 +MIDI_CMD_COMMON_RESET = 255 # /usr/include/alsa/asoundef.h:161 +MIDI_CTL_MSB_BANK = 0 # /usr/include/alsa/asoundef.h:171 +MIDI_CTL_MSB_MODWHEEL = 1 # /usr/include/alsa/asoundef.h:172 +MIDI_CTL_MSB_BREATH = 2 # /usr/include/alsa/asoundef.h:173 +MIDI_CTL_MSB_FOOT = 4 # /usr/include/alsa/asoundef.h:174 +MIDI_CTL_MSB_PORTAMENTO_TIME = 5 # /usr/include/alsa/asoundef.h:175 +MIDI_CTL_MSB_DATA_ENTRY = 6 # /usr/include/alsa/asoundef.h:176 +MIDI_CTL_MSB_MAIN_VOLUME = 7 # /usr/include/alsa/asoundef.h:177 +MIDI_CTL_MSB_BALANCE = 8 # /usr/include/alsa/asoundef.h:178 +MIDI_CTL_MSB_PAN = 10 # /usr/include/alsa/asoundef.h:179 +MIDI_CTL_MSB_EXPRESSION = 11 # /usr/include/alsa/asoundef.h:180 +MIDI_CTL_MSB_EFFECT1 = 12 # /usr/include/alsa/asoundef.h:181 +MIDI_CTL_MSB_EFFECT2 = 13 # /usr/include/alsa/asoundef.h:182 +MIDI_CTL_MSB_GENERAL_PURPOSE1 = 16 # /usr/include/alsa/asoundef.h:183 +MIDI_CTL_MSB_GENERAL_PURPOSE2 = 17 # /usr/include/alsa/asoundef.h:184 +MIDI_CTL_MSB_GENERAL_PURPOSE3 = 18 # /usr/include/alsa/asoundef.h:185 +MIDI_CTL_MSB_GENERAL_PURPOSE4 = 19 # /usr/include/alsa/asoundef.h:186 +MIDI_CTL_LSB_BANK = 32 # /usr/include/alsa/asoundef.h:187 +MIDI_CTL_LSB_MODWHEEL = 33 # /usr/include/alsa/asoundef.h:188 +MIDI_CTL_LSB_BREATH = 34 # /usr/include/alsa/asoundef.h:189 +MIDI_CTL_LSB_FOOT = 36 # /usr/include/alsa/asoundef.h:190 +MIDI_CTL_LSB_PORTAMENTO_TIME = 37 # /usr/include/alsa/asoundef.h:191 +MIDI_CTL_LSB_DATA_ENTRY = 38 # /usr/include/alsa/asoundef.h:192 +MIDI_CTL_LSB_MAIN_VOLUME = 39 # /usr/include/alsa/asoundef.h:193 +MIDI_CTL_LSB_BALANCE = 40 # /usr/include/alsa/asoundef.h:194 +MIDI_CTL_LSB_PAN = 42 # /usr/include/alsa/asoundef.h:195 +MIDI_CTL_LSB_EXPRESSION = 43 # /usr/include/alsa/asoundef.h:196 +MIDI_CTL_LSB_EFFECT1 = 44 # /usr/include/alsa/asoundef.h:197 +MIDI_CTL_LSB_EFFECT2 = 45 # /usr/include/alsa/asoundef.h:198 +MIDI_CTL_LSB_GENERAL_PURPOSE1 = 48 # /usr/include/alsa/asoundef.h:199 +MIDI_CTL_LSB_GENERAL_PURPOSE2 = 49 # /usr/include/alsa/asoundef.h:200 +MIDI_CTL_LSB_GENERAL_PURPOSE3 = 50 # /usr/include/alsa/asoundef.h:201 +MIDI_CTL_LSB_GENERAL_PURPOSE4 = 51 # /usr/include/alsa/asoundef.h:202 +MIDI_CTL_SUSTAIN = 64 # /usr/include/alsa/asoundef.h:203 +MIDI_CTL_PORTAMENTO = 65 # /usr/include/alsa/asoundef.h:204 +MIDI_CTL_SOSTENUTO = 66 # /usr/include/alsa/asoundef.h:205 +MIDI_CTL_SUSTENUTO = 66 # /usr/include/alsa/asoundef.h:206 +MIDI_CTL_SOFT_PEDAL = 67 # /usr/include/alsa/asoundef.h:207 +MIDI_CTL_LEGATO_FOOTSWITCH = 68 # /usr/include/alsa/asoundef.h:208 +MIDI_CTL_HOLD2 = 69 # /usr/include/alsa/asoundef.h:209 +MIDI_CTL_SC1_SOUND_VARIATION = 70 # /usr/include/alsa/asoundef.h:210 +MIDI_CTL_SC2_TIMBRE = 71 # /usr/include/alsa/asoundef.h:211 +MIDI_CTL_SC3_RELEASE_TIME = 72 # /usr/include/alsa/asoundef.h:212 +MIDI_CTL_SC4_ATTACK_TIME = 73 # /usr/include/alsa/asoundef.h:213 +MIDI_CTL_SC5_BRIGHTNESS = 74 # /usr/include/alsa/asoundef.h:214 +MIDI_CTL_SC6 = 75 # /usr/include/alsa/asoundef.h:215 +MIDI_CTL_SC7 = 76 # /usr/include/alsa/asoundef.h:216 +MIDI_CTL_SC8 = 77 # /usr/include/alsa/asoundef.h:217 +MIDI_CTL_SC9 = 78 # /usr/include/alsa/asoundef.h:218 +MIDI_CTL_SC10 = 79 # /usr/include/alsa/asoundef.h:219 +MIDI_CTL_GENERAL_PURPOSE5 = 80 # /usr/include/alsa/asoundef.h:220 +MIDI_CTL_GENERAL_PURPOSE6 = 81 # /usr/include/alsa/asoundef.h:221 +MIDI_CTL_GENERAL_PURPOSE7 = 82 # /usr/include/alsa/asoundef.h:222 +MIDI_CTL_GENERAL_PURPOSE8 = 83 # /usr/include/alsa/asoundef.h:223 +MIDI_CTL_PORTAMENTO_CONTROL = 84 # /usr/include/alsa/asoundef.h:224 +MIDI_CTL_E1_REVERB_DEPTH = 91 # /usr/include/alsa/asoundef.h:225 +MIDI_CTL_E2_TREMOLO_DEPTH = 92 # /usr/include/alsa/asoundef.h:226 +MIDI_CTL_E3_CHORUS_DEPTH = 93 # /usr/include/alsa/asoundef.h:227 +MIDI_CTL_E4_DETUNE_DEPTH = 94 # /usr/include/alsa/asoundef.h:228 +MIDI_CTL_E5_PHASER_DEPTH = 95 # /usr/include/alsa/asoundef.h:229 +MIDI_CTL_DATA_INCREMENT = 96 # /usr/include/alsa/asoundef.h:230 +MIDI_CTL_DATA_DECREMENT = 97 # /usr/include/alsa/asoundef.h:231 +MIDI_CTL_NONREG_PARM_NUM_LSB = 98 # /usr/include/alsa/asoundef.h:232 +MIDI_CTL_NONREG_PARM_NUM_MSB = 99 # /usr/include/alsa/asoundef.h:233 +MIDI_CTL_REGIST_PARM_NUM_LSB = 100 # /usr/include/alsa/asoundef.h:234 +MIDI_CTL_REGIST_PARM_NUM_MSB = 101 # /usr/include/alsa/asoundef.h:235 +MIDI_CTL_ALL_SOUNDS_OFF = 120 # /usr/include/alsa/asoundef.h:236 +MIDI_CTL_RESET_CONTROLLERS = 121 # /usr/include/alsa/asoundef.h:237 +MIDI_CTL_LOCAL_CONTROL_SWITCH = 122 # /usr/include/alsa/asoundef.h:238 +MIDI_CTL_ALL_NOTES_OFF = 123 # /usr/include/alsa/asoundef.h:239 +MIDI_CTL_OMNI_OFF = 124 # /usr/include/alsa/asoundef.h:240 +MIDI_CTL_OMNI_ON = 125 # /usr/include/alsa/asoundef.h:241 +MIDI_CTL_MONO1 = 126 # /usr/include/alsa/asoundef.h:242 +MIDI_CTL_MONO2 = 127 # /usr/include/alsa/asoundef.h:243 +SND_LIB_MAJOR = 1 # /usr/include/alsa/version.h:5 +SND_LIB_MINOR = 0 # /usr/include/alsa/version.h:6 +SND_LIB_SUBMINOR = 14 # /usr/include/alsa/version.h:7 +SND_LIB_EXTRAVER = 100003 # /usr/include/alsa/version.h:8 +SND_LIB_VERSION = 65550 # /usr/include/alsa/version.h:10 +# /usr/include/alsa/global.h:47 +snd_asoundlib_version = _lib.snd_asoundlib_version +snd_asoundlib_version.restype = c_char_p +snd_asoundlib_version.argtypes = [] + +# /usr/include/alsa/global.h:100 +snd_dlopen = _lib.snd_dlopen +snd_dlopen.restype = POINTER(c_void) +snd_dlopen.argtypes = [c_char_p, c_int] + +# /usr/include/alsa/global.h:101 +snd_dlsym = _lib.snd_dlsym +snd_dlsym.restype = POINTER(c_void) +snd_dlsym.argtypes = [POINTER(None), c_char_p, c_char_p] + +# /usr/include/alsa/global.h:102 +snd_dlclose = _lib.snd_dlclose +snd_dlclose.restype = c_int +snd_dlclose.argtypes = [POINTER(None)] + +class struct__snd_async_handler(Structure): + __slots__ = [ + ] +struct__snd_async_handler._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_async_handler(Structure): + __slots__ = [ + ] +struct__snd_async_handler._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_async_handler_t = struct__snd_async_handler # /usr/include/alsa/global.h:111 +snd_async_callback_t = CFUNCTYPE(None, POINTER(snd_async_handler_t)) # /usr/include/alsa/global.h:118 +# /usr/include/alsa/global.h:120 +snd_async_add_handler = _lib.snd_async_add_handler +snd_async_add_handler.restype = c_int +snd_async_add_handler.argtypes = [POINTER(POINTER(snd_async_handler_t)), c_int, snd_async_callback_t, POINTER(None)] + +# /usr/include/alsa/global.h:122 +snd_async_del_handler = _lib.snd_async_del_handler +snd_async_del_handler.restype = c_int +snd_async_del_handler.argtypes = [POINTER(snd_async_handler_t)] + +# /usr/include/alsa/global.h:123 +snd_async_handler_get_fd = _lib.snd_async_handler_get_fd +snd_async_handler_get_fd.restype = c_int +snd_async_handler_get_fd.argtypes = [POINTER(snd_async_handler_t)] + +# /usr/include/alsa/global.h:124 +snd_async_handler_get_signo = _lib.snd_async_handler_get_signo +snd_async_handler_get_signo.restype = c_int +snd_async_handler_get_signo.argtypes = [POINTER(snd_async_handler_t)] + +# /usr/include/alsa/global.h:125 +snd_async_handler_get_callback_private = _lib.snd_async_handler_get_callback_private +snd_async_handler_get_callback_private.restype = POINTER(c_void) +snd_async_handler_get_callback_private.argtypes = [POINTER(snd_async_handler_t)] + +class struct_snd_shm_area(Structure): + __slots__ = [ + ] +struct_snd_shm_area._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/global.h:127 +snd_shm_area_create = _lib.snd_shm_area_create +snd_shm_area_create.restype = POINTER(struct_snd_shm_area) +snd_shm_area_create.argtypes = [c_int, POINTER(None)] + +class struct_snd_shm_area(Structure): + __slots__ = [ + ] +struct_snd_shm_area._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct_snd_shm_area(Structure): + __slots__ = [ + ] +struct_snd_shm_area._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/global.h:128 +snd_shm_area_share = _lib.snd_shm_area_share +snd_shm_area_share.restype = POINTER(struct_snd_shm_area) +snd_shm_area_share.argtypes = [POINTER(struct_snd_shm_area)] + +class struct_snd_shm_area(Structure): + __slots__ = [ + ] +struct_snd_shm_area._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/global.h:129 +snd_shm_area_destroy = _lib.snd_shm_area_destroy +snd_shm_area_destroy.restype = c_int +snd_shm_area_destroy.argtypes = [POINTER(struct_snd_shm_area)] + +# /usr/include/alsa/global.h:131 +snd_user_file = _lib.snd_user_file +snd_user_file.restype = c_int +snd_user_file.argtypes = [c_char_p, POINTER(c_char_p)] + + +# XXX from `man gettimeofday` +class struct_timeval(Structure): + _fields_ = [ + ('tv_sec', c_long), + ('tv_usec', c_long) + ] + +snd_timestamp_t = struct_timeval # /usr/include/alsa/global.h:146 + + +# XXX wrong, but not used ATM +class struct_timespec(Structure): + __slots__ = [ + ] +struct_timespec._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct_timespec(Structure): + __slots__ = [ + ] +struct_timespec._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_htimestamp_t = struct_timespec # /usr/include/alsa/global.h:148 +class struct__snd_input(Structure): + __slots__ = [ + ] +struct__snd_input._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_input(Structure): + __slots__ = [ + ] +struct__snd_input._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_input_t = struct__snd_input # /usr/include/alsa/input.h:54 +enum__snd_input_type = c_int +SND_INPUT_STDIO = 1 +SND_INPUT_BUFFER = 2 +snd_input_type_t = enum__snd_input_type # /usr/include/alsa/input.h:62 +# /usr/include/alsa/input.h:64 +snd_input_stdio_open = _lib.snd_input_stdio_open +snd_input_stdio_open.restype = c_int +snd_input_stdio_open.argtypes = [POINTER(POINTER(snd_input_t)), c_char_p, c_char_p] + +class struct__IO_FILE(Structure): + __slots__ = [ + ] +struct__IO_FILE._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__IO_FILE(Structure): + __slots__ = [ + ] +struct__IO_FILE._fields_ = [ + ('_opaque_struct', c_int) +] + +FILE = struct__IO_FILE # /usr/include/gentoo-multilib/amd64/stdio.h:46 +# /usr/include/alsa/input.h:65 +snd_input_stdio_attach = _lib.snd_input_stdio_attach +snd_input_stdio_attach.restype = c_int +snd_input_stdio_attach.argtypes = [POINTER(POINTER(snd_input_t)), POINTER(FILE), c_int] + +__ssize_t = c_long # /usr/include/gentoo-multilib/amd64/bits/types.h:183 +ssize_t = __ssize_t # /usr/include/gentoo-multilib/amd64/unistd.h:189 +# /usr/include/alsa/input.h:66 +snd_input_buffer_open = _lib.snd_input_buffer_open +snd_input_buffer_open.restype = c_int +snd_input_buffer_open.argtypes = [POINTER(POINTER(snd_input_t)), c_char_p, ssize_t] + +# /usr/include/alsa/input.h:67 +snd_input_close = _lib.snd_input_close +snd_input_close.restype = c_int +snd_input_close.argtypes = [POINTER(snd_input_t)] + +# /usr/include/alsa/input.h:68 +snd_input_scanf = _lib.snd_input_scanf +snd_input_scanf.restype = c_int +snd_input_scanf.argtypes = [POINTER(snd_input_t), c_char_p] + +# /usr/include/alsa/input.h:73 +snd_input_gets = _lib.snd_input_gets +snd_input_gets.restype = c_char_p +snd_input_gets.argtypes = [POINTER(snd_input_t), c_char_p, c_size_t] + +# /usr/include/alsa/input.h:74 +snd_input_getc = _lib.snd_input_getc +snd_input_getc.restype = c_int +snd_input_getc.argtypes = [POINTER(snd_input_t)] + +# /usr/include/alsa/input.h:75 +snd_input_ungetc = _lib.snd_input_ungetc +snd_input_ungetc.restype = c_int +snd_input_ungetc.argtypes = [POINTER(snd_input_t), c_int] + +SND_ERROR_BEGIN = 500000 # /usr/include/alsa/error.h:41 +SND_ERROR_INCOMPATIBLE_VERSION = 500000 # /usr/include/alsa/error.h:42 +SND_ERROR_ALISP_NIL = 500001 # /usr/include/alsa/error.h:43 +# /usr/include/alsa/error.h:45 +snd_strerror = _lib.snd_strerror +snd_strerror.restype = c_char_p +snd_strerror.argtypes = [c_int] + +snd_lib_error_handler_t = CFUNCTYPE(None, c_char_p, c_int, c_char_p, c_int, c_char_p) # /usr/include/alsa/error.h:59 +# /usr/include/alsa/error.h:61 +snd_lib_error_set_handler = _lib.snd_lib_error_set_handler +snd_lib_error_set_handler.restype = c_int +snd_lib_error_set_handler.argtypes = [snd_lib_error_handler_t] + +SND_CONFIG_DLSYM_VERSION_EVALUATE = 0 # /usr/include/alsa/conf.h:43 +SND_CONFIG_DLSYM_VERSION_HOOK = 0 # /usr/include/alsa/conf.h:45 +enum__snd_config_type = c_int +SND_CONFIG_TYPE_INTEGER = 1 +SND_CONFIG_TYPE_INTEGER64 = 2 +SND_CONFIG_TYPE_REAL = 3 +SND_CONFIG_TYPE_STRING = 4 +SND_CONFIG_TYPE_POINTER = 5 +SND_CONFIG_TYPE_COMPOUND = 1024 +snd_config_type_t = enum__snd_config_type # /usr/include/alsa/conf.h:61 +class struct__snd_config(Structure): + __slots__ = [ + ] +struct__snd_config._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_config(Structure): + __slots__ = [ + ] +struct__snd_config._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_config_t = struct__snd_config # /usr/include/alsa/conf.h:69 +class struct__snd_config_iterator(Structure): + __slots__ = [ + ] +struct__snd_config_iterator._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_config_iterator(Structure): + __slots__ = [ + ] +struct__snd_config_iterator._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_config_iterator_t = POINTER(struct__snd_config_iterator) # /usr/include/alsa/conf.h:77 +class struct__snd_config_update(Structure): + __slots__ = [ + ] +struct__snd_config_update._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_config_update(Structure): + __slots__ = [ + ] +struct__snd_config_update._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_config_update_t = struct__snd_config_update # /usr/include/alsa/conf.h:83 +# /usr/include/alsa/conf.h:87 +snd_config_top = _lib.snd_config_top +snd_config_top.restype = c_int +snd_config_top.argtypes = [POINTER(POINTER(snd_config_t))] + +# /usr/include/alsa/conf.h:89 +snd_config_load = _lib.snd_config_load +snd_config_load.restype = c_int +snd_config_load.argtypes = [POINTER(snd_config_t), POINTER(snd_input_t)] + +# /usr/include/alsa/conf.h:90 +snd_config_load_override = _lib.snd_config_load_override +snd_config_load_override.restype = c_int +snd_config_load_override.argtypes = [POINTER(snd_config_t), POINTER(snd_input_t)] + +class struct__snd_output(Structure): + __slots__ = [ + ] +struct__snd_output._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_output(Structure): + __slots__ = [ + ] +struct__snd_output._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_output_t = struct__snd_output # /usr/include/alsa/output.h:54 + +# XXX output.h was not generated because of varargs, but we need this.. +snd_output_stdio_open = _lib.snd_output_stdio_open +snd_output_stdio_open.restype = c_int +snd_output_stdio_open.argtypes = [POINTER(POINTER(snd_output_t)), c_char_p, c_char_p] + +# XXX no args for varargs function (python can do formatting) +snd_output_printf = _lib.snd_output_printf +snd_output_printf.restype = c_int +snd_output_printf.argtypes = [POINTER(snd_output_t), c_char_p] + +# /usr/include/alsa/conf.h:91 +snd_config_save = _lib.snd_config_save +snd_config_save.restype = c_int +snd_config_save.argtypes = [POINTER(snd_config_t), POINTER(snd_output_t)] + +# /usr/include/alsa/conf.h:92 +snd_config_update = _lib.snd_config_update +snd_config_update.restype = c_int +snd_config_update.argtypes = [] + +# /usr/include/alsa/conf.h:93 +snd_config_update_r = _lib.snd_config_update_r +snd_config_update_r.restype = c_int +snd_config_update_r.argtypes = [POINTER(POINTER(snd_config_t)), POINTER(POINTER(snd_config_update_t)), c_char_p] + +# /usr/include/alsa/conf.h:94 +snd_config_update_free = _lib.snd_config_update_free +snd_config_update_free.restype = c_int +snd_config_update_free.argtypes = [POINTER(snd_config_update_t)] + +# /usr/include/alsa/conf.h:95 +snd_config_update_free_global = _lib.snd_config_update_free_global +snd_config_update_free_global.restype = c_int +snd_config_update_free_global.argtypes = [] + +# /usr/include/alsa/conf.h:97 +snd_config_search = _lib.snd_config_search +snd_config_search.restype = c_int +snd_config_search.argtypes = [POINTER(snd_config_t), c_char_p, POINTER(POINTER(snd_config_t))] + +# /usr/include/alsa/conf.h:99 +snd_config_searchv = _lib.snd_config_searchv +snd_config_searchv.restype = c_int +snd_config_searchv.argtypes = [POINTER(snd_config_t), POINTER(POINTER(snd_config_t))] + +# /usr/include/alsa/conf.h:101 +snd_config_search_definition = _lib.snd_config_search_definition +snd_config_search_definition.restype = c_int +snd_config_search_definition.argtypes = [POINTER(snd_config_t), c_char_p, c_char_p, POINTER(POINTER(snd_config_t))] + +# /usr/include/alsa/conf.h:105 +snd_config_expand = _lib.snd_config_expand +snd_config_expand.restype = c_int +snd_config_expand.argtypes = [POINTER(snd_config_t), POINTER(snd_config_t), c_char_p, POINTER(snd_config_t), POINTER(POINTER(snd_config_t))] + +# /usr/include/alsa/conf.h:108 +snd_config_evaluate = _lib.snd_config_evaluate +snd_config_evaluate.restype = c_int +snd_config_evaluate.argtypes = [POINTER(snd_config_t), POINTER(snd_config_t), POINTER(snd_config_t), POINTER(POINTER(snd_config_t))] + +# /usr/include/alsa/conf.h:111 +snd_config_add = _lib.snd_config_add +snd_config_add.restype = c_int +snd_config_add.argtypes = [POINTER(snd_config_t), POINTER(snd_config_t)] + +# /usr/include/alsa/conf.h:112 +snd_config_delete = _lib.snd_config_delete +snd_config_delete.restype = c_int +snd_config_delete.argtypes = [POINTER(snd_config_t)] + +# /usr/include/alsa/conf.h:113 +snd_config_delete_compound_members = _lib.snd_config_delete_compound_members +snd_config_delete_compound_members.restype = c_int +snd_config_delete_compound_members.argtypes = [POINTER(snd_config_t)] + +# /usr/include/alsa/conf.h:114 +snd_config_copy = _lib.snd_config_copy +snd_config_copy.restype = c_int +snd_config_copy.argtypes = [POINTER(POINTER(snd_config_t)), POINTER(snd_config_t)] + +# /usr/include/alsa/conf.h:116 +snd_config_make = _lib.snd_config_make +snd_config_make.restype = c_int +snd_config_make.argtypes = [POINTER(POINTER(snd_config_t)), c_char_p, snd_config_type_t] + +# /usr/include/alsa/conf.h:118 +snd_config_make_integer = _lib.snd_config_make_integer +snd_config_make_integer.restype = c_int +snd_config_make_integer.argtypes = [POINTER(POINTER(snd_config_t)), c_char_p] + +# /usr/include/alsa/conf.h:119 +snd_config_make_integer64 = _lib.snd_config_make_integer64 +snd_config_make_integer64.restype = c_int +snd_config_make_integer64.argtypes = [POINTER(POINTER(snd_config_t)), c_char_p] + +# /usr/include/alsa/conf.h:120 +snd_config_make_real = _lib.snd_config_make_real +snd_config_make_real.restype = c_int +snd_config_make_real.argtypes = [POINTER(POINTER(snd_config_t)), c_char_p] + +# /usr/include/alsa/conf.h:121 +snd_config_make_string = _lib.snd_config_make_string +snd_config_make_string.restype = c_int +snd_config_make_string.argtypes = [POINTER(POINTER(snd_config_t)), c_char_p] + +# /usr/include/alsa/conf.h:122 +snd_config_make_pointer = _lib.snd_config_make_pointer +snd_config_make_pointer.restype = c_int +snd_config_make_pointer.argtypes = [POINTER(POINTER(snd_config_t)), c_char_p] + +# /usr/include/alsa/conf.h:123 +snd_config_make_compound = _lib.snd_config_make_compound +snd_config_make_compound.restype = c_int +snd_config_make_compound.argtypes = [POINTER(POINTER(snd_config_t)), c_char_p, c_int] + +# /usr/include/alsa/conf.h:125 +snd_config_imake_integer = _lib.snd_config_imake_integer +snd_config_imake_integer.restype = c_int +snd_config_imake_integer.argtypes = [POINTER(POINTER(snd_config_t)), c_char_p, c_long] + +# /usr/include/alsa/conf.h:126 +snd_config_imake_integer64 = _lib.snd_config_imake_integer64 +snd_config_imake_integer64.restype = c_int +snd_config_imake_integer64.argtypes = [POINTER(POINTER(snd_config_t)), c_char_p, c_longlong] + +# /usr/include/alsa/conf.h:127 +snd_config_imake_real = _lib.snd_config_imake_real +snd_config_imake_real.restype = c_int +snd_config_imake_real.argtypes = [POINTER(POINTER(snd_config_t)), c_char_p, c_double] + +# /usr/include/alsa/conf.h:128 +snd_config_imake_string = _lib.snd_config_imake_string +snd_config_imake_string.restype = c_int +snd_config_imake_string.argtypes = [POINTER(POINTER(snd_config_t)), c_char_p, c_char_p] + +# /usr/include/alsa/conf.h:129 +snd_config_imake_pointer = _lib.snd_config_imake_pointer +snd_config_imake_pointer.restype = c_int +snd_config_imake_pointer.argtypes = [POINTER(POINTER(snd_config_t)), c_char_p, POINTER(None)] + +# /usr/include/alsa/conf.h:131 +snd_config_get_type = _lib.snd_config_get_type +snd_config_get_type.restype = snd_config_type_t +snd_config_get_type.argtypes = [POINTER(snd_config_t)] + +# /usr/include/alsa/conf.h:133 +snd_config_set_id = _lib.snd_config_set_id +snd_config_set_id.restype = c_int +snd_config_set_id.argtypes = [POINTER(snd_config_t), c_char_p] + +# /usr/include/alsa/conf.h:134 +snd_config_set_integer = _lib.snd_config_set_integer +snd_config_set_integer.restype = c_int +snd_config_set_integer.argtypes = [POINTER(snd_config_t), c_long] + +# /usr/include/alsa/conf.h:135 +snd_config_set_integer64 = _lib.snd_config_set_integer64 +snd_config_set_integer64.restype = c_int +snd_config_set_integer64.argtypes = [POINTER(snd_config_t), c_longlong] + +# /usr/include/alsa/conf.h:136 +snd_config_set_real = _lib.snd_config_set_real +snd_config_set_real.restype = c_int +snd_config_set_real.argtypes = [POINTER(snd_config_t), c_double] + +# /usr/include/alsa/conf.h:137 +snd_config_set_string = _lib.snd_config_set_string +snd_config_set_string.restype = c_int +snd_config_set_string.argtypes = [POINTER(snd_config_t), c_char_p] + +# /usr/include/alsa/conf.h:138 +snd_config_set_ascii = _lib.snd_config_set_ascii +snd_config_set_ascii.restype = c_int +snd_config_set_ascii.argtypes = [POINTER(snd_config_t), c_char_p] + +# /usr/include/alsa/conf.h:139 +snd_config_set_pointer = _lib.snd_config_set_pointer +snd_config_set_pointer.restype = c_int +snd_config_set_pointer.argtypes = [POINTER(snd_config_t), POINTER(None)] + +# /usr/include/alsa/conf.h:140 +snd_config_get_id = _lib.snd_config_get_id +snd_config_get_id.restype = c_int +snd_config_get_id.argtypes = [POINTER(snd_config_t), POINTER(c_char_p)] + +# /usr/include/alsa/conf.h:141 +snd_config_get_integer = _lib.snd_config_get_integer +snd_config_get_integer.restype = c_int +snd_config_get_integer.argtypes = [POINTER(snd_config_t), POINTER(c_long)] + +# /usr/include/alsa/conf.h:142 +snd_config_get_integer64 = _lib.snd_config_get_integer64 +snd_config_get_integer64.restype = c_int +snd_config_get_integer64.argtypes = [POINTER(snd_config_t), POINTER(c_longlong)] + +# /usr/include/alsa/conf.h:143 +snd_config_get_real = _lib.snd_config_get_real +snd_config_get_real.restype = c_int +snd_config_get_real.argtypes = [POINTER(snd_config_t), POINTER(c_double)] + +# /usr/include/alsa/conf.h:144 +snd_config_get_ireal = _lib.snd_config_get_ireal +snd_config_get_ireal.restype = c_int +snd_config_get_ireal.argtypes = [POINTER(snd_config_t), POINTER(c_double)] + +# /usr/include/alsa/conf.h:145 +snd_config_get_string = _lib.snd_config_get_string +snd_config_get_string.restype = c_int +snd_config_get_string.argtypes = [POINTER(snd_config_t), POINTER(c_char_p)] + +# /usr/include/alsa/conf.h:146 +snd_config_get_ascii = _lib.snd_config_get_ascii +snd_config_get_ascii.restype = c_int +snd_config_get_ascii.argtypes = [POINTER(snd_config_t), POINTER(c_char_p)] + +# /usr/include/alsa/conf.h:147 +snd_config_get_pointer = _lib.snd_config_get_pointer +snd_config_get_pointer.restype = c_int +snd_config_get_pointer.argtypes = [POINTER(snd_config_t), POINTER(POINTER(None))] + +# /usr/include/alsa/conf.h:148 +snd_config_test_id = _lib.snd_config_test_id +snd_config_test_id.restype = c_int +snd_config_test_id.argtypes = [POINTER(snd_config_t), c_char_p] + +# /usr/include/alsa/conf.h:150 +snd_config_iterator_first = _lib.snd_config_iterator_first +snd_config_iterator_first.restype = snd_config_iterator_t +snd_config_iterator_first.argtypes = [POINTER(snd_config_t)] + +# /usr/include/alsa/conf.h:151 +snd_config_iterator_next = _lib.snd_config_iterator_next +snd_config_iterator_next.restype = snd_config_iterator_t +snd_config_iterator_next.argtypes = [snd_config_iterator_t] + +# /usr/include/alsa/conf.h:152 +snd_config_iterator_end = _lib.snd_config_iterator_end +snd_config_iterator_end.restype = snd_config_iterator_t +snd_config_iterator_end.argtypes = [POINTER(snd_config_t)] + +# /usr/include/alsa/conf.h:153 +snd_config_iterator_entry = _lib.snd_config_iterator_entry +snd_config_iterator_entry.restype = POINTER(snd_config_t) +snd_config_iterator_entry.argtypes = [snd_config_iterator_t] + +# /usr/include/alsa/conf.h:168 +snd_config_get_bool_ascii = _lib.snd_config_get_bool_ascii +snd_config_get_bool_ascii.restype = c_int +snd_config_get_bool_ascii.argtypes = [c_char_p] + +# /usr/include/alsa/conf.h:169 +snd_config_get_bool = _lib.snd_config_get_bool +snd_config_get_bool.restype = c_int +snd_config_get_bool.argtypes = [POINTER(snd_config_t)] + +# /usr/include/alsa/conf.h:170 +snd_config_get_ctl_iface_ascii = _lib.snd_config_get_ctl_iface_ascii +snd_config_get_ctl_iface_ascii.restype = c_int +snd_config_get_ctl_iface_ascii.argtypes = [c_char_p] + +# /usr/include/alsa/conf.h:171 +snd_config_get_ctl_iface = _lib.snd_config_get_ctl_iface +snd_config_get_ctl_iface.restype = c_int +snd_config_get_ctl_iface.argtypes = [POINTER(snd_config_t)] + +class struct_snd_devname(Structure): + __slots__ = [ + ] +struct_snd_devname._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct_snd_devname(Structure): + __slots__ = [ + ] +struct_snd_devname._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_devname_t = struct_snd_devname # /usr/include/alsa/conf.h:178 +# /usr/include/alsa/conf.h:189 +snd_names_list = _lib.snd_names_list +snd_names_list.restype = c_int +snd_names_list.argtypes = [c_char_p, POINTER(POINTER(snd_devname_t))] + +# /usr/include/alsa/conf.h:190 +snd_names_list_free = _lib.snd_names_list_free +snd_names_list_free.restype = None +snd_names_list_free.argtypes = [POINTER(snd_devname_t)] + +SND_PCM_DLSYM_VERSION = 0 # /usr/include/alsa/pcm.h:43 +class struct__snd_pcm_info(Structure): + __slots__ = [ + ] +struct__snd_pcm_info._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_pcm_info(Structure): + __slots__ = [ + ] +struct__snd_pcm_info._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_pcm_info_t = struct__snd_pcm_info # /usr/include/alsa/pcm.h:46 +class struct__snd_pcm_hw_params(Structure): + __slots__ = [ + ] +struct__snd_pcm_hw_params._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_pcm_hw_params(Structure): + __slots__ = [ + ] +struct__snd_pcm_hw_params._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_pcm_hw_params_t = struct__snd_pcm_hw_params # /usr/include/alsa/pcm.h:48 +class struct__snd_pcm_sw_params(Structure): + __slots__ = [ + ] +struct__snd_pcm_sw_params._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_pcm_sw_params(Structure): + __slots__ = [ + ] +struct__snd_pcm_sw_params._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_pcm_sw_params_t = struct__snd_pcm_sw_params # /usr/include/alsa/pcm.h:50 +class struct__snd_pcm_status(Structure): + __slots__ = [ + ] +struct__snd_pcm_status._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_pcm_status(Structure): + __slots__ = [ + ] +struct__snd_pcm_status._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_pcm_status_t = struct__snd_pcm_status # /usr/include/alsa/pcm.h:52 +class struct__snd_pcm_access_mask(Structure): + __slots__ = [ + ] +struct__snd_pcm_access_mask._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_pcm_access_mask(Structure): + __slots__ = [ + ] +struct__snd_pcm_access_mask._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_pcm_access_mask_t = struct__snd_pcm_access_mask # /usr/include/alsa/pcm.h:54 +class struct__snd_pcm_format_mask(Structure): + __slots__ = [ + ] +struct__snd_pcm_format_mask._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_pcm_format_mask(Structure): + __slots__ = [ + ] +struct__snd_pcm_format_mask._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_pcm_format_mask_t = struct__snd_pcm_format_mask # /usr/include/alsa/pcm.h:56 +class struct__snd_pcm_subformat_mask(Structure): + __slots__ = [ + ] +struct__snd_pcm_subformat_mask._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_pcm_subformat_mask(Structure): + __slots__ = [ + ] +struct__snd_pcm_subformat_mask._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_pcm_subformat_mask_t = struct__snd_pcm_subformat_mask # /usr/include/alsa/pcm.h:58 +enum__snd_pcm_class = c_int +SND_PCM_CLASS_GENERIC = 0 +SND_PCM_CLASS_MULTI = 1 +SND_PCM_CLASS_MODEM = 2 +SND_PCM_CLASS_DIGITIZER = 3 +SND_PCM_CLASS_LAST = 0 +snd_pcm_class_t = enum__snd_pcm_class # /usr/include/alsa/pcm.h:72 +enum__snd_pcm_subclass = c_int +SND_PCM_SUBCLASS_GENERIC_MIX = 0 +SND_PCM_SUBCLASS_MULTI_MIX = 1 +SND_PCM_SUBCLASS_LAST = 0 +snd_pcm_subclass_t = enum__snd_pcm_subclass # /usr/include/alsa/pcm.h:81 +enum__snd_pcm_stream = c_int +SND_PCM_STREAM_PLAYBACK = 0 +SND_PCM_STREAM_CAPTURE = 1 +SND_PCM_STREAM_LAST = 0 +snd_pcm_stream_t = enum__snd_pcm_stream # /usr/include/alsa/pcm.h:90 +enum__snd_pcm_access = c_int +SND_PCM_ACCESS_MMAP_INTERLEAVED = 0 +SND_PCM_ACCESS_MMAP_NONINTERLEAVED = 1 +SND_PCM_ACCESS_MMAP_COMPLEX = 2 +SND_PCM_ACCESS_RW_INTERLEAVED = 3 +SND_PCM_ACCESS_RW_NONINTERLEAVED = 4 +SND_PCM_ACCESS_LAST = 0 +snd_pcm_access_t = enum__snd_pcm_access # /usr/include/alsa/pcm.h:105 +enum__snd_pcm_format = c_int +SND_PCM_FORMAT_UNKNOWN = 1 +SND_PCM_FORMAT_S8 = 0 +SND_PCM_FORMAT_U8 = 1 +SND_PCM_FORMAT_S16_LE = 2 +SND_PCM_FORMAT_S16_BE = 3 +SND_PCM_FORMAT_U16_LE = 4 +SND_PCM_FORMAT_U16_BE = 5 +SND_PCM_FORMAT_S24_LE = 6 +SND_PCM_FORMAT_S24_BE = 7 +SND_PCM_FORMAT_U24_LE = 8 +SND_PCM_FORMAT_U24_BE = 9 +SND_PCM_FORMAT_S32_LE = 10 +SND_PCM_FORMAT_S32_BE = 11 +SND_PCM_FORMAT_U32_LE = 12 +SND_PCM_FORMAT_U32_BE = 13 +SND_PCM_FORMAT_FLOAT_LE = 14 +SND_PCM_FORMAT_FLOAT_BE = 15 +SND_PCM_FORMAT_FLOAT64_LE = 16 +SND_PCM_FORMAT_FLOAT64_BE = 17 +SND_PCM_FORMAT_IEC958_SUBFRAME_LE = 18 +SND_PCM_FORMAT_IEC958_SUBFRAME_BE = 19 +SND_PCM_FORMAT_MU_LAW = 20 +SND_PCM_FORMAT_A_LAW = 21 +SND_PCM_FORMAT_IMA_ADPCM = 22 +SND_PCM_FORMAT_MPEG = 23 +SND_PCM_FORMAT_GSM = 24 +SND_PCM_FORMAT_SPECIAL = 31 +SND_PCM_FORMAT_S24_3LE = 32 +SND_PCM_FORMAT_S24_3BE = 33 +SND_PCM_FORMAT_U24_3LE = 34 +SND_PCM_FORMAT_U24_3BE = 35 +SND_PCM_FORMAT_S20_3LE = 36 +SND_PCM_FORMAT_S20_3BE = 37 +SND_PCM_FORMAT_U20_3LE = 38 +SND_PCM_FORMAT_U20_3BE = 39 +SND_PCM_FORMAT_S18_3LE = 40 +SND_PCM_FORMAT_S18_3BE = 41 +SND_PCM_FORMAT_U18_3LE = 42 +SND_PCM_FORMAT_U18_3BE = 43 +SND_PCM_FORMAT_LAST = 0 + +# XXX wraptypes didn't pick up byte order detection +import sys +if sys.byteorder == 'little': + SND_PCM_FORMAT_S16 = SND_PCM_FORMAT_S16_LE + SND_PCM_FORMAT_U16 = SND_PCM_FORMAT_U16_LE + SND_PCM_FORMAT_S24 = SND_PCM_FORMAT_S24_LE + SND_PCM_FORMAT_U24 = SND_PCM_FORMAT_U24_LE + SND_PCM_FORMAT_S32 = SND_PCM_FORMAT_S32_LE + SND_PCM_FORMAT_U32 = SND_PCM_FORMAT_U32_LE + SND_PCM_FORMAT_FLOAT = SND_PCM_FORMAT_FLOAT_LE + SND_PCM_FORMAT_FLOAT64 = SND_PCM_FORMAT_FLOAT64_LE + SND_PCM_FORMAT_IEC958_SUBFRAME = SND_PCM_FORMAT_IEC958_SUBFRAME_LE +else: + SND_PCM_FORMAT_S16 = SND_PCM_FORMAT_S16_BE + SND_PCM_FORMAT_U16 = SND_PCM_FORMAT_U16_BE + SND_PCM_FORMAT_S24 = SND_PCM_FORMAT_S24_BE + SND_PCM_FORMAT_U24 = SND_PCM_FORMAT_U24_BE + SND_PCM_FORMAT_S32 = SND_PCM_FORMAT_S32_BE + SND_PCM_FORMAT_U32 = SND_PCM_FORMAT_U32_BE + SND_PCM_FORMAT_FLOAT = SND_PCM_FORMAT_FLOAT_BE + SND_PCM_FORMAT_FLOAT64 = SND_PCM_FORMAT_FLOAT64_BE + SND_PCM_FORMAT_IEC958_SUBFRAME = SND_PCM_FORMAT_IEC958_SUBFRAME_BE + +snd_pcm_format_t = enum__snd_pcm_format # /usr/include/alsa/pcm.h:230 +enum__snd_pcm_subformat = c_int +SND_PCM_SUBFORMAT_STD = 0 +SND_PCM_SUBFORMAT_LAST = 0 +snd_pcm_subformat_t = enum__snd_pcm_subformat # /usr/include/alsa/pcm.h:237 +enum__snd_pcm_state = c_int +SND_PCM_STATE_OPEN = 0 +SND_PCM_STATE_SETUP = 1 +SND_PCM_STATE_PREPARED = 2 +SND_PCM_STATE_RUNNING = 3 +SND_PCM_STATE_XRUN = 4 +SND_PCM_STATE_DRAINING = 5 +SND_PCM_STATE_PAUSED = 6 +SND_PCM_STATE_SUSPENDED = 7 +SND_PCM_STATE_DISCONNECTED = 8 +SND_PCM_STATE_LAST = 0 +snd_pcm_state_t = enum__snd_pcm_state # /usr/include/alsa/pcm.h:260 +enum__snd_pcm_start = c_int +SND_PCM_START_DATA = 0 +SND_PCM_START_EXPLICIT = 1 +SND_PCM_START_LAST = 0 +snd_pcm_start_t = enum__snd_pcm_start # /usr/include/alsa/pcm.h:269 +enum__snd_pcm_xrun = c_int +SND_PCM_XRUN_NONE = 0 +SND_PCM_XRUN_STOP = 1 +SND_PCM_XRUN_LAST = 0 +snd_pcm_xrun_t = enum__snd_pcm_xrun # /usr/include/alsa/pcm.h:278 +enum__snd_pcm_tstamp = c_int +SND_PCM_TSTAMP_NONE = 0 +SND_PCM_TSTAMP_MMAP = 1 +SND_PCM_TSTAMP_LAST = 0 +snd_pcm_tstamp_t = enum__snd_pcm_tstamp # /usr/include/alsa/pcm.h:287 +snd_pcm_uframes_t = c_ulong # /usr/include/alsa/pcm.h:290 +snd_pcm_sframes_t = c_long # /usr/include/alsa/pcm.h:292 +SND_PCM_NONBLOCK = 1 # /usr/include/alsa/pcm.h:295 +SND_PCM_ASYNC = 2 # /usr/include/alsa/pcm.h:297 +class struct__snd_pcm(Structure): + __slots__ = [ + ] +struct__snd_pcm._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_pcm(Structure): + __slots__ = [ + ] +struct__snd_pcm._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_pcm_t = struct__snd_pcm # /usr/include/alsa/pcm.h:300 +enum__snd_pcm_type = c_int +snd_pcm_type_t = enum__snd_pcm_type # /usr/include/alsa/pcm.h:369 +class struct__snd_pcm_channel_area(Structure): + __slots__ = [ + 'addr', + 'first', + 'step', + ] +struct__snd_pcm_channel_area._fields_ = [ + ('addr', POINTER(None)), + ('first', c_uint), + ('step', c_uint), +] + +snd_pcm_channel_area_t = struct__snd_pcm_channel_area # /usr/include/alsa/pcm.h:379 +class struct__snd_pcm_sync_id(Union): + __slots__ = [ + 'id', + 'id16', + 'id32', + ] +struct__snd_pcm_sync_id._fields_ = [ + ('id', c_ubyte * 16), + ('id16', c_ushort * 8), + ('id32', c_uint * 4), +] + +snd_pcm_sync_id_t = struct__snd_pcm_sync_id # /usr/include/alsa/pcm.h:389 +class struct__snd_pcm_scope(Structure): + __slots__ = [ + ] +struct__snd_pcm_scope._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_pcm_scope(Structure): + __slots__ = [ + ] +struct__snd_pcm_scope._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_pcm_scope_t = struct__snd_pcm_scope # /usr/include/alsa/pcm.h:392 +# /usr/include/alsa/pcm.h:394 +snd_pcm_open = _lib.snd_pcm_open +snd_pcm_open.restype = c_int +snd_pcm_open.argtypes = [POINTER(POINTER(snd_pcm_t)), c_char_p, snd_pcm_stream_t, c_int] + +# /usr/include/alsa/pcm.h:396 +snd_pcm_open_lconf = _lib.snd_pcm_open_lconf +snd_pcm_open_lconf.restype = c_int +snd_pcm_open_lconf.argtypes = [POINTER(POINTER(snd_pcm_t)), c_char_p, snd_pcm_stream_t, c_int, POINTER(snd_config_t)] + +# /usr/include/alsa/pcm.h:400 +snd_pcm_close = _lib.snd_pcm_close +snd_pcm_close.restype = c_int +snd_pcm_close.argtypes = [POINTER(snd_pcm_t)] + +# /usr/include/alsa/pcm.h:401 +snd_pcm_name = _lib.snd_pcm_name +snd_pcm_name.restype = c_char_p +snd_pcm_name.argtypes = [POINTER(snd_pcm_t)] + +# /usr/include/alsa/pcm.h:402 +snd_pcm_type = _lib.snd_pcm_type +snd_pcm_type.restype = snd_pcm_type_t +snd_pcm_type.argtypes = [POINTER(snd_pcm_t)] + +# /usr/include/alsa/pcm.h:403 +snd_pcm_stream = _lib.snd_pcm_stream +snd_pcm_stream.restype = snd_pcm_stream_t +snd_pcm_stream.argtypes = [POINTER(snd_pcm_t)] + +# /usr/include/alsa/pcm.h:404 +snd_pcm_poll_descriptors_count = _lib.snd_pcm_poll_descriptors_count +snd_pcm_poll_descriptors_count.restype = c_int +snd_pcm_poll_descriptors_count.argtypes = [POINTER(snd_pcm_t)] + +class struct_pollfd(Structure): + __slots__ = [ + ] +struct_pollfd._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/pcm.h:405 +snd_pcm_poll_descriptors = _lib.snd_pcm_poll_descriptors +snd_pcm_poll_descriptors.restype = c_int +snd_pcm_poll_descriptors.argtypes = [POINTER(snd_pcm_t), POINTER(struct_pollfd), c_uint] + +class struct_pollfd(Structure): + __slots__ = [ + ] +struct_pollfd._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/pcm.h:406 +snd_pcm_poll_descriptors_revents = _lib.snd_pcm_poll_descriptors_revents +snd_pcm_poll_descriptors_revents.restype = c_int +snd_pcm_poll_descriptors_revents.argtypes = [POINTER(snd_pcm_t), POINTER(struct_pollfd), c_uint, POINTER(c_ushort)] + +# /usr/include/alsa/pcm.h:407 +snd_pcm_nonblock = _lib.snd_pcm_nonblock +snd_pcm_nonblock.restype = c_int +snd_pcm_nonblock.argtypes = [POINTER(snd_pcm_t), c_int] + +# /usr/include/alsa/pcm.h:408 +snd_async_add_pcm_handler = _lib.snd_async_add_pcm_handler +snd_async_add_pcm_handler.restype = c_int +snd_async_add_pcm_handler.argtypes = [POINTER(POINTER(snd_async_handler_t)), POINTER(snd_pcm_t), snd_async_callback_t, POINTER(None)] + +# /usr/include/alsa/pcm.h:410 +snd_async_handler_get_pcm = _lib.snd_async_handler_get_pcm +snd_async_handler_get_pcm.restype = POINTER(snd_pcm_t) +snd_async_handler_get_pcm.argtypes = [POINTER(snd_async_handler_t)] + +# /usr/include/alsa/pcm.h:411 +snd_pcm_info = _lib.snd_pcm_info +snd_pcm_info.restype = c_int +snd_pcm_info.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_info_t)] + +# /usr/include/alsa/pcm.h:412 +snd_pcm_hw_params_current = _lib.snd_pcm_hw_params_current +snd_pcm_hw_params_current.restype = c_int +snd_pcm_hw_params_current.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t)] + +# /usr/include/alsa/pcm.h:413 +snd_pcm_hw_params = _lib.snd_pcm_hw_params +snd_pcm_hw_params.restype = c_int +snd_pcm_hw_params.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t)] + +# /usr/include/alsa/pcm.h:414 +snd_pcm_hw_free = _lib.snd_pcm_hw_free +snd_pcm_hw_free.restype = c_int +snd_pcm_hw_free.argtypes = [POINTER(snd_pcm_t)] + +# /usr/include/alsa/pcm.h:415 +snd_pcm_sw_params_current = _lib.snd_pcm_sw_params_current +snd_pcm_sw_params_current.restype = c_int +snd_pcm_sw_params_current.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_sw_params_t)] + +# /usr/include/alsa/pcm.h:416 +snd_pcm_sw_params = _lib.snd_pcm_sw_params +snd_pcm_sw_params.restype = c_int +snd_pcm_sw_params.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_sw_params_t)] + +# /usr/include/alsa/pcm.h:417 +snd_pcm_prepare = _lib.snd_pcm_prepare +snd_pcm_prepare.restype = c_int +snd_pcm_prepare.argtypes = [POINTER(snd_pcm_t)] + +# /usr/include/alsa/pcm.h:418 +snd_pcm_reset = _lib.snd_pcm_reset +snd_pcm_reset.restype = c_int +snd_pcm_reset.argtypes = [POINTER(snd_pcm_t)] + +# /usr/include/alsa/pcm.h:419 +snd_pcm_status = _lib.snd_pcm_status +snd_pcm_status.restype = c_int +snd_pcm_status.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_status_t)] + +# /usr/include/alsa/pcm.h:420 +snd_pcm_start = _lib.snd_pcm_start +snd_pcm_start.restype = c_int +snd_pcm_start.argtypes = [POINTER(snd_pcm_t)] + +# /usr/include/alsa/pcm.h:421 +snd_pcm_drop = _lib.snd_pcm_drop +snd_pcm_drop.restype = c_int +snd_pcm_drop.argtypes = [POINTER(snd_pcm_t)] + +# /usr/include/alsa/pcm.h:422 +snd_pcm_drain = _lib.snd_pcm_drain +snd_pcm_drain.restype = c_int +snd_pcm_drain.argtypes = [POINTER(snd_pcm_t)] + +# /usr/include/alsa/pcm.h:423 +snd_pcm_pause = _lib.snd_pcm_pause +snd_pcm_pause.restype = c_int +snd_pcm_pause.argtypes = [POINTER(snd_pcm_t), c_int] + +# /usr/include/alsa/pcm.h:424 +snd_pcm_state = _lib.snd_pcm_state +snd_pcm_state.restype = snd_pcm_state_t +snd_pcm_state.argtypes = [POINTER(snd_pcm_t)] + +# /usr/include/alsa/pcm.h:425 +snd_pcm_hwsync = _lib.snd_pcm_hwsync +snd_pcm_hwsync.restype = c_int +snd_pcm_hwsync.argtypes = [POINTER(snd_pcm_t)] + +# /usr/include/alsa/pcm.h:426 +snd_pcm_delay = _lib.snd_pcm_delay +snd_pcm_delay.restype = c_int +snd_pcm_delay.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_sframes_t)] + +# /usr/include/alsa/pcm.h:427 +snd_pcm_resume = _lib.snd_pcm_resume +snd_pcm_resume.restype = c_int +snd_pcm_resume.argtypes = [POINTER(snd_pcm_t)] + +# /usr/include/alsa/pcm.h:428 +snd_pcm_avail_update = _lib.snd_pcm_avail_update +snd_pcm_avail_update.restype = snd_pcm_sframes_t +snd_pcm_avail_update.argtypes = [POINTER(snd_pcm_t)] + +# /usr/include/alsa/pcm.h:429 +snd_pcm_rewind = _lib.snd_pcm_rewind +snd_pcm_rewind.restype = snd_pcm_sframes_t +snd_pcm_rewind.argtypes = [POINTER(snd_pcm_t), snd_pcm_uframes_t] + +# /usr/include/alsa/pcm.h:430 +snd_pcm_forward = _lib.snd_pcm_forward +snd_pcm_forward.restype = snd_pcm_sframes_t +snd_pcm_forward.argtypes = [POINTER(snd_pcm_t), snd_pcm_uframes_t] + +# /usr/include/alsa/pcm.h:431 +snd_pcm_writei = _lib.snd_pcm_writei +snd_pcm_writei.restype = snd_pcm_sframes_t +snd_pcm_writei.argtypes = [POINTER(snd_pcm_t), POINTER(None), snd_pcm_uframes_t] + +# /usr/include/alsa/pcm.h:432 +snd_pcm_readi = _lib.snd_pcm_readi +snd_pcm_readi.restype = snd_pcm_sframes_t +snd_pcm_readi.argtypes = [POINTER(snd_pcm_t), POINTER(None), snd_pcm_uframes_t] + +# /usr/include/alsa/pcm.h:433 +snd_pcm_writen = _lib.snd_pcm_writen +snd_pcm_writen.restype = snd_pcm_sframes_t +snd_pcm_writen.argtypes = [POINTER(snd_pcm_t), POINTER(POINTER(None)), snd_pcm_uframes_t] + +# /usr/include/alsa/pcm.h:434 +snd_pcm_readn = _lib.snd_pcm_readn +snd_pcm_readn.restype = snd_pcm_sframes_t +snd_pcm_readn.argtypes = [POINTER(snd_pcm_t), POINTER(POINTER(None)), snd_pcm_uframes_t] + +# /usr/include/alsa/pcm.h:435 +snd_pcm_wait = _lib.snd_pcm_wait +snd_pcm_wait.restype = c_int +snd_pcm_wait.argtypes = [POINTER(snd_pcm_t), c_int] + +# /usr/include/alsa/pcm.h:437 +snd_pcm_link = _lib.snd_pcm_link +snd_pcm_link.restype = c_int +snd_pcm_link.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_t)] + +# /usr/include/alsa/pcm.h:438 +snd_pcm_unlink = _lib.snd_pcm_unlink +snd_pcm_unlink.restype = c_int +snd_pcm_unlink.argtypes = [POINTER(snd_pcm_t)] + +# /usr/include/alsa/pcm.h:445 +snd_pcm_recover = _lib.snd_pcm_recover +snd_pcm_recover.restype = c_int +snd_pcm_recover.argtypes = [POINTER(snd_pcm_t), c_int, c_int] + +# /usr/include/alsa/pcm.h:446 +snd_pcm_set_params = _lib.snd_pcm_set_params +snd_pcm_set_params.restype = c_int +snd_pcm_set_params.argtypes = [POINTER(snd_pcm_t), snd_pcm_format_t, snd_pcm_access_t, c_uint, c_uint, c_int, c_uint] + +# /usr/include/alsa/pcm.h:453 +snd_pcm_get_params = _lib.snd_pcm_get_params +snd_pcm_get_params.restype = c_int +snd_pcm_get_params.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_uframes_t), POINTER(snd_pcm_uframes_t)] + +# /usr/include/alsa/pcm.h:466 +snd_pcm_info_sizeof = _lib.snd_pcm_info_sizeof +snd_pcm_info_sizeof.restype = c_size_t +snd_pcm_info_sizeof.argtypes = [] + +# /usr/include/alsa/pcm.h:472 +snd_pcm_info_malloc = _lib.snd_pcm_info_malloc +snd_pcm_info_malloc.restype = c_int +snd_pcm_info_malloc.argtypes = [POINTER(POINTER(snd_pcm_info_t))] + +# /usr/include/alsa/pcm.h:473 +snd_pcm_info_free = _lib.snd_pcm_info_free +snd_pcm_info_free.restype = None +snd_pcm_info_free.argtypes = [POINTER(snd_pcm_info_t)] + +# /usr/include/alsa/pcm.h:474 +snd_pcm_info_copy = _lib.snd_pcm_info_copy +snd_pcm_info_copy.restype = None +snd_pcm_info_copy.argtypes = [POINTER(snd_pcm_info_t), POINTER(snd_pcm_info_t)] + +# /usr/include/alsa/pcm.h:475 +snd_pcm_info_get_device = _lib.snd_pcm_info_get_device +snd_pcm_info_get_device.restype = c_uint +snd_pcm_info_get_device.argtypes = [POINTER(snd_pcm_info_t)] + +# /usr/include/alsa/pcm.h:476 +snd_pcm_info_get_subdevice = _lib.snd_pcm_info_get_subdevice +snd_pcm_info_get_subdevice.restype = c_uint +snd_pcm_info_get_subdevice.argtypes = [POINTER(snd_pcm_info_t)] + +# /usr/include/alsa/pcm.h:477 +snd_pcm_info_get_stream = _lib.snd_pcm_info_get_stream +snd_pcm_info_get_stream.restype = snd_pcm_stream_t +snd_pcm_info_get_stream.argtypes = [POINTER(snd_pcm_info_t)] + +# /usr/include/alsa/pcm.h:478 +snd_pcm_info_get_card = _lib.snd_pcm_info_get_card +snd_pcm_info_get_card.restype = c_int +snd_pcm_info_get_card.argtypes = [POINTER(snd_pcm_info_t)] + +# /usr/include/alsa/pcm.h:479 +snd_pcm_info_get_id = _lib.snd_pcm_info_get_id +snd_pcm_info_get_id.restype = c_char_p +snd_pcm_info_get_id.argtypes = [POINTER(snd_pcm_info_t)] + +# /usr/include/alsa/pcm.h:480 +snd_pcm_info_get_name = _lib.snd_pcm_info_get_name +snd_pcm_info_get_name.restype = c_char_p +snd_pcm_info_get_name.argtypes = [POINTER(snd_pcm_info_t)] + +# /usr/include/alsa/pcm.h:481 +snd_pcm_info_get_subdevice_name = _lib.snd_pcm_info_get_subdevice_name +snd_pcm_info_get_subdevice_name.restype = c_char_p +snd_pcm_info_get_subdevice_name.argtypes = [POINTER(snd_pcm_info_t)] + +# /usr/include/alsa/pcm.h:482 +snd_pcm_info_get_class = _lib.snd_pcm_info_get_class +snd_pcm_info_get_class.restype = snd_pcm_class_t +snd_pcm_info_get_class.argtypes = [POINTER(snd_pcm_info_t)] + +# /usr/include/alsa/pcm.h:483 +snd_pcm_info_get_subclass = _lib.snd_pcm_info_get_subclass +snd_pcm_info_get_subclass.restype = snd_pcm_subclass_t +snd_pcm_info_get_subclass.argtypes = [POINTER(snd_pcm_info_t)] + +# /usr/include/alsa/pcm.h:484 +snd_pcm_info_get_subdevices_count = _lib.snd_pcm_info_get_subdevices_count +snd_pcm_info_get_subdevices_count.restype = c_uint +snd_pcm_info_get_subdevices_count.argtypes = [POINTER(snd_pcm_info_t)] + +# /usr/include/alsa/pcm.h:485 +snd_pcm_info_get_subdevices_avail = _lib.snd_pcm_info_get_subdevices_avail +snd_pcm_info_get_subdevices_avail.restype = c_uint +snd_pcm_info_get_subdevices_avail.argtypes = [POINTER(snd_pcm_info_t)] + +# /usr/include/alsa/pcm.h:486 +snd_pcm_info_get_sync = _lib.snd_pcm_info_get_sync +snd_pcm_info_get_sync.restype = snd_pcm_sync_id_t +snd_pcm_info_get_sync.argtypes = [POINTER(snd_pcm_info_t)] + +# /usr/include/alsa/pcm.h:487 +snd_pcm_info_set_device = _lib.snd_pcm_info_set_device +snd_pcm_info_set_device.restype = None +snd_pcm_info_set_device.argtypes = [POINTER(snd_pcm_info_t), c_uint] + +# /usr/include/alsa/pcm.h:488 +snd_pcm_info_set_subdevice = _lib.snd_pcm_info_set_subdevice +snd_pcm_info_set_subdevice.restype = None +snd_pcm_info_set_subdevice.argtypes = [POINTER(snd_pcm_info_t), c_uint] + +# /usr/include/alsa/pcm.h:489 +snd_pcm_info_set_stream = _lib.snd_pcm_info_set_stream +snd_pcm_info_set_stream.restype = None +snd_pcm_info_set_stream.argtypes = [POINTER(snd_pcm_info_t), snd_pcm_stream_t] + +# /usr/include/alsa/pcm.h:500 +snd_pcm_hw_params_any = _lib.snd_pcm_hw_params_any +snd_pcm_hw_params_any.restype = c_int +snd_pcm_hw_params_any.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t)] + +# /usr/include/alsa/pcm.h:502 +snd_pcm_hw_params_can_mmap_sample_resolution = _lib.snd_pcm_hw_params_can_mmap_sample_resolution +snd_pcm_hw_params_can_mmap_sample_resolution.restype = c_int +snd_pcm_hw_params_can_mmap_sample_resolution.argtypes = [POINTER(snd_pcm_hw_params_t)] + +# /usr/include/alsa/pcm.h:503 +snd_pcm_hw_params_is_double = _lib.snd_pcm_hw_params_is_double +snd_pcm_hw_params_is_double.restype = c_int +snd_pcm_hw_params_is_double.argtypes = [POINTER(snd_pcm_hw_params_t)] + +# /usr/include/alsa/pcm.h:504 +snd_pcm_hw_params_is_batch = _lib.snd_pcm_hw_params_is_batch +snd_pcm_hw_params_is_batch.restype = c_int +snd_pcm_hw_params_is_batch.argtypes = [POINTER(snd_pcm_hw_params_t)] + +# /usr/include/alsa/pcm.h:505 +snd_pcm_hw_params_is_block_transfer = _lib.snd_pcm_hw_params_is_block_transfer +snd_pcm_hw_params_is_block_transfer.restype = c_int +snd_pcm_hw_params_is_block_transfer.argtypes = [POINTER(snd_pcm_hw_params_t)] + +# /usr/include/alsa/pcm.h:506 +snd_pcm_hw_params_can_overrange = _lib.snd_pcm_hw_params_can_overrange +snd_pcm_hw_params_can_overrange.restype = c_int +snd_pcm_hw_params_can_overrange.argtypes = [POINTER(snd_pcm_hw_params_t)] + +# /usr/include/alsa/pcm.h:507 +snd_pcm_hw_params_can_pause = _lib.snd_pcm_hw_params_can_pause +snd_pcm_hw_params_can_pause.restype = c_int +snd_pcm_hw_params_can_pause.argtypes = [POINTER(snd_pcm_hw_params_t)] + +# /usr/include/alsa/pcm.h:508 +snd_pcm_hw_params_can_resume = _lib.snd_pcm_hw_params_can_resume +snd_pcm_hw_params_can_resume.restype = c_int +snd_pcm_hw_params_can_resume.argtypes = [POINTER(snd_pcm_hw_params_t)] + +# /usr/include/alsa/pcm.h:509 +snd_pcm_hw_params_is_half_duplex = _lib.snd_pcm_hw_params_is_half_duplex +snd_pcm_hw_params_is_half_duplex.restype = c_int +snd_pcm_hw_params_is_half_duplex.argtypes = [POINTER(snd_pcm_hw_params_t)] + +# /usr/include/alsa/pcm.h:510 +snd_pcm_hw_params_is_joint_duplex = _lib.snd_pcm_hw_params_is_joint_duplex +snd_pcm_hw_params_is_joint_duplex.restype = c_int +snd_pcm_hw_params_is_joint_duplex.argtypes = [POINTER(snd_pcm_hw_params_t)] + +# /usr/include/alsa/pcm.h:511 +snd_pcm_hw_params_can_sync_start = _lib.snd_pcm_hw_params_can_sync_start +snd_pcm_hw_params_can_sync_start.restype = c_int +snd_pcm_hw_params_can_sync_start.argtypes = [POINTER(snd_pcm_hw_params_t)] + +# /usr/include/alsa/pcm.h:512 +snd_pcm_hw_params_get_rate_numden = _lib.snd_pcm_hw_params_get_rate_numden +snd_pcm_hw_params_get_rate_numden.restype = c_int +snd_pcm_hw_params_get_rate_numden.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_uint)] + +# /usr/include/alsa/pcm.h:515 +snd_pcm_hw_params_get_sbits = _lib.snd_pcm_hw_params_get_sbits +snd_pcm_hw_params_get_sbits.restype = c_int +snd_pcm_hw_params_get_sbits.argtypes = [POINTER(snd_pcm_hw_params_t)] + +# /usr/include/alsa/pcm.h:516 +snd_pcm_hw_params_get_fifo_size = _lib.snd_pcm_hw_params_get_fifo_size +snd_pcm_hw_params_get_fifo_size.restype = c_int +snd_pcm_hw_params_get_fifo_size.argtypes = [POINTER(snd_pcm_hw_params_t)] + +# /usr/include/alsa/pcm.h:544 +snd_pcm_hw_params_sizeof = _lib.snd_pcm_hw_params_sizeof +snd_pcm_hw_params_sizeof.restype = c_size_t +snd_pcm_hw_params_sizeof.argtypes = [] + +# /usr/include/alsa/pcm.h:550 +snd_pcm_hw_params_malloc = _lib.snd_pcm_hw_params_malloc +snd_pcm_hw_params_malloc.restype = c_int +snd_pcm_hw_params_malloc.argtypes = [POINTER(POINTER(snd_pcm_hw_params_t))] + +# /usr/include/alsa/pcm.h:551 +snd_pcm_hw_params_free = _lib.snd_pcm_hw_params_free +snd_pcm_hw_params_free.restype = None +snd_pcm_hw_params_free.argtypes = [POINTER(snd_pcm_hw_params_t)] + +# /usr/include/alsa/pcm.h:552 +snd_pcm_hw_params_copy = _lib.snd_pcm_hw_params_copy +snd_pcm_hw_params_copy.restype = None +snd_pcm_hw_params_copy.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_hw_params_t)] + +# /usr/include/alsa/pcm.h:556 +snd_pcm_hw_params_get_access = _lib.snd_pcm_hw_params_get_access +snd_pcm_hw_params_get_access.restype = c_int +snd_pcm_hw_params_get_access.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_access_t)] + +# /usr/include/alsa/pcm.h:557 +snd_pcm_hw_params_test_access = _lib.snd_pcm_hw_params_test_access +snd_pcm_hw_params_test_access.restype = c_int +snd_pcm_hw_params_test_access.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), snd_pcm_access_t] + +# /usr/include/alsa/pcm.h:558 +snd_pcm_hw_params_set_access = _lib.snd_pcm_hw_params_set_access +snd_pcm_hw_params_set_access.restype = c_int +snd_pcm_hw_params_set_access.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), snd_pcm_access_t] + +# /usr/include/alsa/pcm.h:559 +snd_pcm_hw_params_set_access_first = _lib.snd_pcm_hw_params_set_access_first +snd_pcm_hw_params_set_access_first.restype = c_int +snd_pcm_hw_params_set_access_first.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_access_t)] + +# /usr/include/alsa/pcm.h:560 +snd_pcm_hw_params_set_access_last = _lib.snd_pcm_hw_params_set_access_last +snd_pcm_hw_params_set_access_last.restype = c_int +snd_pcm_hw_params_set_access_last.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_access_t)] + +# /usr/include/alsa/pcm.h:561 +snd_pcm_hw_params_set_access_mask = _lib.snd_pcm_hw_params_set_access_mask +snd_pcm_hw_params_set_access_mask.restype = c_int +snd_pcm_hw_params_set_access_mask.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_access_mask_t)] + +# /usr/include/alsa/pcm.h:562 +snd_pcm_hw_params_get_access_mask = _lib.snd_pcm_hw_params_get_access_mask +snd_pcm_hw_params_get_access_mask.restype = c_int +snd_pcm_hw_params_get_access_mask.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_access_mask_t)] + +# /usr/include/alsa/pcm.h:564 +snd_pcm_hw_params_get_format = _lib.snd_pcm_hw_params_get_format +snd_pcm_hw_params_get_format.restype = c_int +snd_pcm_hw_params_get_format.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_format_t)] + +# /usr/include/alsa/pcm.h:565 +snd_pcm_hw_params_test_format = _lib.snd_pcm_hw_params_test_format +snd_pcm_hw_params_test_format.restype = c_int +snd_pcm_hw_params_test_format.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), snd_pcm_format_t] + +# /usr/include/alsa/pcm.h:566 +snd_pcm_hw_params_set_format = _lib.snd_pcm_hw_params_set_format +snd_pcm_hw_params_set_format.restype = c_int +snd_pcm_hw_params_set_format.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), snd_pcm_format_t] + +# /usr/include/alsa/pcm.h:567 +snd_pcm_hw_params_set_format_first = _lib.snd_pcm_hw_params_set_format_first +snd_pcm_hw_params_set_format_first.restype = c_int +snd_pcm_hw_params_set_format_first.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_format_t)] + +# /usr/include/alsa/pcm.h:568 +snd_pcm_hw_params_set_format_last = _lib.snd_pcm_hw_params_set_format_last +snd_pcm_hw_params_set_format_last.restype = c_int +snd_pcm_hw_params_set_format_last.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_format_t)] + +# /usr/include/alsa/pcm.h:569 +snd_pcm_hw_params_set_format_mask = _lib.snd_pcm_hw_params_set_format_mask +snd_pcm_hw_params_set_format_mask.restype = c_int +snd_pcm_hw_params_set_format_mask.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_format_mask_t)] + +# /usr/include/alsa/pcm.h:570 +snd_pcm_hw_params_get_format_mask = _lib.snd_pcm_hw_params_get_format_mask +snd_pcm_hw_params_get_format_mask.restype = None +snd_pcm_hw_params_get_format_mask.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_format_mask_t)] + +# /usr/include/alsa/pcm.h:572 +snd_pcm_hw_params_get_subformat = _lib.snd_pcm_hw_params_get_subformat +snd_pcm_hw_params_get_subformat.restype = c_int +snd_pcm_hw_params_get_subformat.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_subformat_t)] + +# /usr/include/alsa/pcm.h:573 +snd_pcm_hw_params_test_subformat = _lib.snd_pcm_hw_params_test_subformat +snd_pcm_hw_params_test_subformat.restype = c_int +snd_pcm_hw_params_test_subformat.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), snd_pcm_subformat_t] + +# /usr/include/alsa/pcm.h:574 +snd_pcm_hw_params_set_subformat = _lib.snd_pcm_hw_params_set_subformat +snd_pcm_hw_params_set_subformat.restype = c_int +snd_pcm_hw_params_set_subformat.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), snd_pcm_subformat_t] + +# /usr/include/alsa/pcm.h:575 +snd_pcm_hw_params_set_subformat_first = _lib.snd_pcm_hw_params_set_subformat_first +snd_pcm_hw_params_set_subformat_first.restype = c_int +snd_pcm_hw_params_set_subformat_first.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_subformat_t)] + +# /usr/include/alsa/pcm.h:576 +snd_pcm_hw_params_set_subformat_last = _lib.snd_pcm_hw_params_set_subformat_last +snd_pcm_hw_params_set_subformat_last.restype = c_int +snd_pcm_hw_params_set_subformat_last.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_subformat_t)] + +# /usr/include/alsa/pcm.h:577 +snd_pcm_hw_params_set_subformat_mask = _lib.snd_pcm_hw_params_set_subformat_mask +snd_pcm_hw_params_set_subformat_mask.restype = c_int +snd_pcm_hw_params_set_subformat_mask.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_subformat_mask_t)] + +# /usr/include/alsa/pcm.h:578 +snd_pcm_hw_params_get_subformat_mask = _lib.snd_pcm_hw_params_get_subformat_mask +snd_pcm_hw_params_get_subformat_mask.restype = None +snd_pcm_hw_params_get_subformat_mask.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_subformat_mask_t)] + +# /usr/include/alsa/pcm.h:580 +snd_pcm_hw_params_get_channels = _lib.snd_pcm_hw_params_get_channels +snd_pcm_hw_params_get_channels.restype = c_int +snd_pcm_hw_params_get_channels.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(c_uint)] + +# /usr/include/alsa/pcm.h:581 +snd_pcm_hw_params_get_channels_min = _lib.snd_pcm_hw_params_get_channels_min +snd_pcm_hw_params_get_channels_min.restype = c_int +snd_pcm_hw_params_get_channels_min.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(c_uint)] + +# /usr/include/alsa/pcm.h:582 +snd_pcm_hw_params_get_channels_max = _lib.snd_pcm_hw_params_get_channels_max +snd_pcm_hw_params_get_channels_max.restype = c_int +snd_pcm_hw_params_get_channels_max.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(c_uint)] + +# /usr/include/alsa/pcm.h:583 +snd_pcm_hw_params_test_channels = _lib.snd_pcm_hw_params_test_channels +snd_pcm_hw_params_test_channels.restype = c_int +snd_pcm_hw_params_test_channels.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), c_uint] + +# /usr/include/alsa/pcm.h:584 +snd_pcm_hw_params_set_channels = _lib.snd_pcm_hw_params_set_channels +snd_pcm_hw_params_set_channels.restype = c_int +snd_pcm_hw_params_set_channels.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), c_uint] + +# /usr/include/alsa/pcm.h:585 +snd_pcm_hw_params_set_channels_min = _lib.snd_pcm_hw_params_set_channels_min +snd_pcm_hw_params_set_channels_min.restype = c_int +snd_pcm_hw_params_set_channels_min.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint)] + +# /usr/include/alsa/pcm.h:586 +snd_pcm_hw_params_set_channels_max = _lib.snd_pcm_hw_params_set_channels_max +snd_pcm_hw_params_set_channels_max.restype = c_int +snd_pcm_hw_params_set_channels_max.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint)] + +# /usr/include/alsa/pcm.h:587 +snd_pcm_hw_params_set_channels_minmax = _lib.snd_pcm_hw_params_set_channels_minmax +snd_pcm_hw_params_set_channels_minmax.restype = c_int +snd_pcm_hw_params_set_channels_minmax.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_uint)] + +# /usr/include/alsa/pcm.h:588 +snd_pcm_hw_params_set_channels_near = _lib.snd_pcm_hw_params_set_channels_near +snd_pcm_hw_params_set_channels_near.restype = c_int +snd_pcm_hw_params_set_channels_near.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint)] + +# /usr/include/alsa/pcm.h:589 +snd_pcm_hw_params_set_channels_first = _lib.snd_pcm_hw_params_set_channels_first +snd_pcm_hw_params_set_channels_first.restype = c_int +snd_pcm_hw_params_set_channels_first.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint)] + +# /usr/include/alsa/pcm.h:590 +snd_pcm_hw_params_set_channels_last = _lib.snd_pcm_hw_params_set_channels_last +snd_pcm_hw_params_set_channels_last.restype = c_int +snd_pcm_hw_params_set_channels_last.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint)] + +# /usr/include/alsa/pcm.h:592 +snd_pcm_hw_params_get_rate = _lib.snd_pcm_hw_params_get_rate +snd_pcm_hw_params_get_rate.restype = c_int +snd_pcm_hw_params_get_rate.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:593 +snd_pcm_hw_params_get_rate_min = _lib.snd_pcm_hw_params_get_rate_min +snd_pcm_hw_params_get_rate_min.restype = c_int +snd_pcm_hw_params_get_rate_min.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:594 +snd_pcm_hw_params_get_rate_max = _lib.snd_pcm_hw_params_get_rate_max +snd_pcm_hw_params_get_rate_max.restype = c_int +snd_pcm_hw_params_get_rate_max.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:595 +snd_pcm_hw_params_test_rate = _lib.snd_pcm_hw_params_test_rate +snd_pcm_hw_params_test_rate.restype = c_int +snd_pcm_hw_params_test_rate.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), c_uint, c_int] + +# /usr/include/alsa/pcm.h:596 +snd_pcm_hw_params_set_rate = _lib.snd_pcm_hw_params_set_rate +snd_pcm_hw_params_set_rate.restype = c_int +snd_pcm_hw_params_set_rate.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), c_uint, c_int] + +# /usr/include/alsa/pcm.h:597 +snd_pcm_hw_params_set_rate_min = _lib.snd_pcm_hw_params_set_rate_min +snd_pcm_hw_params_set_rate_min.restype = c_int +snd_pcm_hw_params_set_rate_min.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:598 +snd_pcm_hw_params_set_rate_max = _lib.snd_pcm_hw_params_set_rate_max +snd_pcm_hw_params_set_rate_max.restype = c_int +snd_pcm_hw_params_set_rate_max.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:599 +snd_pcm_hw_params_set_rate_minmax = _lib.snd_pcm_hw_params_set_rate_minmax +snd_pcm_hw_params_set_rate_minmax.restype = c_int +snd_pcm_hw_params_set_rate_minmax.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:600 +snd_pcm_hw_params_set_rate_near = _lib.snd_pcm_hw_params_set_rate_near +snd_pcm_hw_params_set_rate_near.restype = c_int +snd_pcm_hw_params_set_rate_near.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:601 +snd_pcm_hw_params_set_rate_first = _lib.snd_pcm_hw_params_set_rate_first +snd_pcm_hw_params_set_rate_first.restype = c_int +snd_pcm_hw_params_set_rate_first.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:602 +snd_pcm_hw_params_set_rate_last = _lib.snd_pcm_hw_params_set_rate_last +snd_pcm_hw_params_set_rate_last.restype = c_int +snd_pcm_hw_params_set_rate_last.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:603 +snd_pcm_hw_params_set_rate_resample = _lib.snd_pcm_hw_params_set_rate_resample +snd_pcm_hw_params_set_rate_resample.restype = c_int +snd_pcm_hw_params_set_rate_resample.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), c_uint] + +# /usr/include/alsa/pcm.h:604 +snd_pcm_hw_params_get_rate_resample = _lib.snd_pcm_hw_params_get_rate_resample +snd_pcm_hw_params_get_rate_resample.restype = c_int +snd_pcm_hw_params_get_rate_resample.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint)] + +# /usr/include/alsa/pcm.h:605 +snd_pcm_hw_params_set_export_buffer = _lib.snd_pcm_hw_params_set_export_buffer +snd_pcm_hw_params_set_export_buffer.restype = c_int +snd_pcm_hw_params_set_export_buffer.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), c_uint] + +# /usr/include/alsa/pcm.h:606 +snd_pcm_hw_params_get_export_buffer = _lib.snd_pcm_hw_params_get_export_buffer +snd_pcm_hw_params_get_export_buffer.restype = c_int +snd_pcm_hw_params_get_export_buffer.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint)] + +# /usr/include/alsa/pcm.h:608 +snd_pcm_hw_params_get_period_time = _lib.snd_pcm_hw_params_get_period_time +snd_pcm_hw_params_get_period_time.restype = c_int +snd_pcm_hw_params_get_period_time.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:609 +snd_pcm_hw_params_get_period_time_min = _lib.snd_pcm_hw_params_get_period_time_min +snd_pcm_hw_params_get_period_time_min.restype = c_int +snd_pcm_hw_params_get_period_time_min.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:610 +snd_pcm_hw_params_get_period_time_max = _lib.snd_pcm_hw_params_get_period_time_max +snd_pcm_hw_params_get_period_time_max.restype = c_int +snd_pcm_hw_params_get_period_time_max.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:611 +snd_pcm_hw_params_test_period_time = _lib.snd_pcm_hw_params_test_period_time +snd_pcm_hw_params_test_period_time.restype = c_int +snd_pcm_hw_params_test_period_time.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), c_uint, c_int] + +# /usr/include/alsa/pcm.h:612 +snd_pcm_hw_params_set_period_time = _lib.snd_pcm_hw_params_set_period_time +snd_pcm_hw_params_set_period_time.restype = c_int +snd_pcm_hw_params_set_period_time.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), c_uint, c_int] + +# /usr/include/alsa/pcm.h:613 +snd_pcm_hw_params_set_period_time_min = _lib.snd_pcm_hw_params_set_period_time_min +snd_pcm_hw_params_set_period_time_min.restype = c_int +snd_pcm_hw_params_set_period_time_min.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:614 +snd_pcm_hw_params_set_period_time_max = _lib.snd_pcm_hw_params_set_period_time_max +snd_pcm_hw_params_set_period_time_max.restype = c_int +snd_pcm_hw_params_set_period_time_max.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:615 +snd_pcm_hw_params_set_period_time_minmax = _lib.snd_pcm_hw_params_set_period_time_minmax +snd_pcm_hw_params_set_period_time_minmax.restype = c_int +snd_pcm_hw_params_set_period_time_minmax.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:616 +snd_pcm_hw_params_set_period_time_near = _lib.snd_pcm_hw_params_set_period_time_near +snd_pcm_hw_params_set_period_time_near.restype = c_int +snd_pcm_hw_params_set_period_time_near.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:617 +snd_pcm_hw_params_set_period_time_first = _lib.snd_pcm_hw_params_set_period_time_first +snd_pcm_hw_params_set_period_time_first.restype = c_int +snd_pcm_hw_params_set_period_time_first.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:618 +snd_pcm_hw_params_set_period_time_last = _lib.snd_pcm_hw_params_set_period_time_last +snd_pcm_hw_params_set_period_time_last.restype = c_int +snd_pcm_hw_params_set_period_time_last.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:620 +snd_pcm_hw_params_get_period_size = _lib.snd_pcm_hw_params_get_period_size +snd_pcm_hw_params_get_period_size.restype = c_int +snd_pcm_hw_params_get_period_size.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_uframes_t), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:621 +snd_pcm_hw_params_get_period_size_min = _lib.snd_pcm_hw_params_get_period_size_min +snd_pcm_hw_params_get_period_size_min.restype = c_int +snd_pcm_hw_params_get_period_size_min.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_uframes_t), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:622 +snd_pcm_hw_params_get_period_size_max = _lib.snd_pcm_hw_params_get_period_size_max +snd_pcm_hw_params_get_period_size_max.restype = c_int +snd_pcm_hw_params_get_period_size_max.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_uframes_t), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:623 +snd_pcm_hw_params_test_period_size = _lib.snd_pcm_hw_params_test_period_size +snd_pcm_hw_params_test_period_size.restype = c_int +snd_pcm_hw_params_test_period_size.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), snd_pcm_uframes_t, c_int] + +# /usr/include/alsa/pcm.h:624 +snd_pcm_hw_params_set_period_size = _lib.snd_pcm_hw_params_set_period_size +snd_pcm_hw_params_set_period_size.restype = c_int +snd_pcm_hw_params_set_period_size.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), snd_pcm_uframes_t, c_int] + +# /usr/include/alsa/pcm.h:625 +snd_pcm_hw_params_set_period_size_min = _lib.snd_pcm_hw_params_set_period_size_min +snd_pcm_hw_params_set_period_size_min.restype = c_int +snd_pcm_hw_params_set_period_size_min.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_uframes_t), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:626 +snd_pcm_hw_params_set_period_size_max = _lib.snd_pcm_hw_params_set_period_size_max +snd_pcm_hw_params_set_period_size_max.restype = c_int +snd_pcm_hw_params_set_period_size_max.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_uframes_t), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:627 +snd_pcm_hw_params_set_period_size_minmax = _lib.snd_pcm_hw_params_set_period_size_minmax +snd_pcm_hw_params_set_period_size_minmax.restype = c_int +snd_pcm_hw_params_set_period_size_minmax.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_uframes_t), POINTER(c_int), POINTER(snd_pcm_uframes_t), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:628 +snd_pcm_hw_params_set_period_size_near = _lib.snd_pcm_hw_params_set_period_size_near +snd_pcm_hw_params_set_period_size_near.restype = c_int +snd_pcm_hw_params_set_period_size_near.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_uframes_t), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:629 +snd_pcm_hw_params_set_period_size_first = _lib.snd_pcm_hw_params_set_period_size_first +snd_pcm_hw_params_set_period_size_first.restype = c_int +snd_pcm_hw_params_set_period_size_first.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_uframes_t), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:630 +snd_pcm_hw_params_set_period_size_last = _lib.snd_pcm_hw_params_set_period_size_last +snd_pcm_hw_params_set_period_size_last.restype = c_int +snd_pcm_hw_params_set_period_size_last.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_uframes_t), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:631 +snd_pcm_hw_params_set_period_size_integer = _lib.snd_pcm_hw_params_set_period_size_integer +snd_pcm_hw_params_set_period_size_integer.restype = c_int +snd_pcm_hw_params_set_period_size_integer.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t)] + +# /usr/include/alsa/pcm.h:633 +snd_pcm_hw_params_get_periods = _lib.snd_pcm_hw_params_get_periods +snd_pcm_hw_params_get_periods.restype = c_int +snd_pcm_hw_params_get_periods.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:634 +snd_pcm_hw_params_get_periods_min = _lib.snd_pcm_hw_params_get_periods_min +snd_pcm_hw_params_get_periods_min.restype = c_int +snd_pcm_hw_params_get_periods_min.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:635 +snd_pcm_hw_params_get_periods_max = _lib.snd_pcm_hw_params_get_periods_max +snd_pcm_hw_params_get_periods_max.restype = c_int +snd_pcm_hw_params_get_periods_max.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:636 +snd_pcm_hw_params_test_periods = _lib.snd_pcm_hw_params_test_periods +snd_pcm_hw_params_test_periods.restype = c_int +snd_pcm_hw_params_test_periods.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), c_uint, c_int] + +# /usr/include/alsa/pcm.h:637 +snd_pcm_hw_params_set_periods = _lib.snd_pcm_hw_params_set_periods +snd_pcm_hw_params_set_periods.restype = c_int +snd_pcm_hw_params_set_periods.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), c_uint, c_int] + +# /usr/include/alsa/pcm.h:638 +snd_pcm_hw_params_set_periods_min = _lib.snd_pcm_hw_params_set_periods_min +snd_pcm_hw_params_set_periods_min.restype = c_int +snd_pcm_hw_params_set_periods_min.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:639 +snd_pcm_hw_params_set_periods_max = _lib.snd_pcm_hw_params_set_periods_max +snd_pcm_hw_params_set_periods_max.restype = c_int +snd_pcm_hw_params_set_periods_max.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:640 +snd_pcm_hw_params_set_periods_minmax = _lib.snd_pcm_hw_params_set_periods_minmax +snd_pcm_hw_params_set_periods_minmax.restype = c_int +snd_pcm_hw_params_set_periods_minmax.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:641 +snd_pcm_hw_params_set_periods_near = _lib.snd_pcm_hw_params_set_periods_near +snd_pcm_hw_params_set_periods_near.restype = c_int +snd_pcm_hw_params_set_periods_near.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:642 +snd_pcm_hw_params_set_periods_first = _lib.snd_pcm_hw_params_set_periods_first +snd_pcm_hw_params_set_periods_first.restype = c_int +snd_pcm_hw_params_set_periods_first.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:643 +snd_pcm_hw_params_set_periods_last = _lib.snd_pcm_hw_params_set_periods_last +snd_pcm_hw_params_set_periods_last.restype = c_int +snd_pcm_hw_params_set_periods_last.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:644 +snd_pcm_hw_params_set_periods_integer = _lib.snd_pcm_hw_params_set_periods_integer +snd_pcm_hw_params_set_periods_integer.restype = c_int +snd_pcm_hw_params_set_periods_integer.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t)] + +# /usr/include/alsa/pcm.h:646 +snd_pcm_hw_params_get_buffer_time = _lib.snd_pcm_hw_params_get_buffer_time +snd_pcm_hw_params_get_buffer_time.restype = c_int +snd_pcm_hw_params_get_buffer_time.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:647 +snd_pcm_hw_params_get_buffer_time_min = _lib.snd_pcm_hw_params_get_buffer_time_min +snd_pcm_hw_params_get_buffer_time_min.restype = c_int +snd_pcm_hw_params_get_buffer_time_min.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:648 +snd_pcm_hw_params_get_buffer_time_max = _lib.snd_pcm_hw_params_get_buffer_time_max +snd_pcm_hw_params_get_buffer_time_max.restype = c_int +snd_pcm_hw_params_get_buffer_time_max.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:649 +snd_pcm_hw_params_test_buffer_time = _lib.snd_pcm_hw_params_test_buffer_time +snd_pcm_hw_params_test_buffer_time.restype = c_int +snd_pcm_hw_params_test_buffer_time.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), c_uint, c_int] + +# /usr/include/alsa/pcm.h:650 +snd_pcm_hw_params_set_buffer_time = _lib.snd_pcm_hw_params_set_buffer_time +snd_pcm_hw_params_set_buffer_time.restype = c_int +snd_pcm_hw_params_set_buffer_time.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), c_uint, c_int] + +# /usr/include/alsa/pcm.h:651 +snd_pcm_hw_params_set_buffer_time_min = _lib.snd_pcm_hw_params_set_buffer_time_min +snd_pcm_hw_params_set_buffer_time_min.restype = c_int +snd_pcm_hw_params_set_buffer_time_min.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:652 +snd_pcm_hw_params_set_buffer_time_max = _lib.snd_pcm_hw_params_set_buffer_time_max +snd_pcm_hw_params_set_buffer_time_max.restype = c_int +snd_pcm_hw_params_set_buffer_time_max.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:653 +snd_pcm_hw_params_set_buffer_time_minmax = _lib.snd_pcm_hw_params_set_buffer_time_minmax +snd_pcm_hw_params_set_buffer_time_minmax.restype = c_int +snd_pcm_hw_params_set_buffer_time_minmax.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:654 +snd_pcm_hw_params_set_buffer_time_near = _lib.snd_pcm_hw_params_set_buffer_time_near +snd_pcm_hw_params_set_buffer_time_near.restype = c_int +snd_pcm_hw_params_set_buffer_time_near.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:655 +snd_pcm_hw_params_set_buffer_time_first = _lib.snd_pcm_hw_params_set_buffer_time_first +snd_pcm_hw_params_set_buffer_time_first.restype = c_int +snd_pcm_hw_params_set_buffer_time_first.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:656 +snd_pcm_hw_params_set_buffer_time_last = _lib.snd_pcm_hw_params_set_buffer_time_last +snd_pcm_hw_params_set_buffer_time_last.restype = c_int +snd_pcm_hw_params_set_buffer_time_last.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:658 +snd_pcm_hw_params_get_buffer_size = _lib.snd_pcm_hw_params_get_buffer_size +snd_pcm_hw_params_get_buffer_size.restype = c_int +snd_pcm_hw_params_get_buffer_size.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_uframes_t)] + +# /usr/include/alsa/pcm.h:659 +snd_pcm_hw_params_get_buffer_size_min = _lib.snd_pcm_hw_params_get_buffer_size_min +snd_pcm_hw_params_get_buffer_size_min.restype = c_int +snd_pcm_hw_params_get_buffer_size_min.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_uframes_t)] + +# /usr/include/alsa/pcm.h:660 +snd_pcm_hw_params_get_buffer_size_max = _lib.snd_pcm_hw_params_get_buffer_size_max +snd_pcm_hw_params_get_buffer_size_max.restype = c_int +snd_pcm_hw_params_get_buffer_size_max.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_uframes_t)] + +# /usr/include/alsa/pcm.h:661 +snd_pcm_hw_params_test_buffer_size = _lib.snd_pcm_hw_params_test_buffer_size +snd_pcm_hw_params_test_buffer_size.restype = c_int +snd_pcm_hw_params_test_buffer_size.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), snd_pcm_uframes_t] + +# /usr/include/alsa/pcm.h:662 +snd_pcm_hw_params_set_buffer_size = _lib.snd_pcm_hw_params_set_buffer_size +snd_pcm_hw_params_set_buffer_size.restype = c_int +snd_pcm_hw_params_set_buffer_size.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), snd_pcm_uframes_t] + +# /usr/include/alsa/pcm.h:663 +snd_pcm_hw_params_set_buffer_size_min = _lib.snd_pcm_hw_params_set_buffer_size_min +snd_pcm_hw_params_set_buffer_size_min.restype = c_int +snd_pcm_hw_params_set_buffer_size_min.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_uframes_t)] + +# /usr/include/alsa/pcm.h:664 +snd_pcm_hw_params_set_buffer_size_max = _lib.snd_pcm_hw_params_set_buffer_size_max +snd_pcm_hw_params_set_buffer_size_max.restype = c_int +snd_pcm_hw_params_set_buffer_size_max.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_uframes_t)] + +# /usr/include/alsa/pcm.h:665 +snd_pcm_hw_params_set_buffer_size_minmax = _lib.snd_pcm_hw_params_set_buffer_size_minmax +snd_pcm_hw_params_set_buffer_size_minmax.restype = c_int +snd_pcm_hw_params_set_buffer_size_minmax.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_uframes_t), POINTER(snd_pcm_uframes_t)] + +# /usr/include/alsa/pcm.h:666 +snd_pcm_hw_params_set_buffer_size_near = _lib.snd_pcm_hw_params_set_buffer_size_near +snd_pcm_hw_params_set_buffer_size_near.restype = c_int +snd_pcm_hw_params_set_buffer_size_near.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_uframes_t)] + +# /usr/include/alsa/pcm.h:667 +snd_pcm_hw_params_set_buffer_size_first = _lib.snd_pcm_hw_params_set_buffer_size_first +snd_pcm_hw_params_set_buffer_size_first.restype = c_int +snd_pcm_hw_params_set_buffer_size_first.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_uframes_t)] + +# /usr/include/alsa/pcm.h:668 +snd_pcm_hw_params_set_buffer_size_last = _lib.snd_pcm_hw_params_set_buffer_size_last +snd_pcm_hw_params_set_buffer_size_last.restype = c_int +snd_pcm_hw_params_set_buffer_size_last.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_uframes_t)] + +# /usr/include/alsa/pcm.h:670 +snd_pcm_hw_params_get_tick_time = _lib.snd_pcm_hw_params_get_tick_time +snd_pcm_hw_params_get_tick_time.restype = c_int +snd_pcm_hw_params_get_tick_time.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:671 +snd_pcm_hw_params_get_tick_time_min = _lib.snd_pcm_hw_params_get_tick_time_min +snd_pcm_hw_params_get_tick_time_min.restype = c_int +snd_pcm_hw_params_get_tick_time_min.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:672 +snd_pcm_hw_params_get_tick_time_max = _lib.snd_pcm_hw_params_get_tick_time_max +snd_pcm_hw_params_get_tick_time_max.restype = c_int +snd_pcm_hw_params_get_tick_time_max.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:673 +snd_pcm_hw_params_test_tick_time = _lib.snd_pcm_hw_params_test_tick_time +snd_pcm_hw_params_test_tick_time.restype = c_int +snd_pcm_hw_params_test_tick_time.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), c_uint, c_int] + +# /usr/include/alsa/pcm.h:674 +snd_pcm_hw_params_set_tick_time = _lib.snd_pcm_hw_params_set_tick_time +snd_pcm_hw_params_set_tick_time.restype = c_int +snd_pcm_hw_params_set_tick_time.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), c_uint, c_int] + +# /usr/include/alsa/pcm.h:675 +snd_pcm_hw_params_set_tick_time_min = _lib.snd_pcm_hw_params_set_tick_time_min +snd_pcm_hw_params_set_tick_time_min.restype = c_int +snd_pcm_hw_params_set_tick_time_min.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:676 +snd_pcm_hw_params_set_tick_time_max = _lib.snd_pcm_hw_params_set_tick_time_max +snd_pcm_hw_params_set_tick_time_max.restype = c_int +snd_pcm_hw_params_set_tick_time_max.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:677 +snd_pcm_hw_params_set_tick_time_minmax = _lib.snd_pcm_hw_params_set_tick_time_minmax +snd_pcm_hw_params_set_tick_time_minmax.restype = c_int +snd_pcm_hw_params_set_tick_time_minmax.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:678 +snd_pcm_hw_params_set_tick_time_near = _lib.snd_pcm_hw_params_set_tick_time_near +snd_pcm_hw_params_set_tick_time_near.restype = c_int +snd_pcm_hw_params_set_tick_time_near.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:679 +snd_pcm_hw_params_set_tick_time_first = _lib.snd_pcm_hw_params_set_tick_time_first +snd_pcm_hw_params_set_tick_time_first.restype = c_int +snd_pcm_hw_params_set_tick_time_first.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:680 +snd_pcm_hw_params_set_tick_time_last = _lib.snd_pcm_hw_params_set_tick_time_last +snd_pcm_hw_params_set_tick_time_last.restype = c_int +snd_pcm_hw_params_set_tick_time_last.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_hw_params_t), POINTER(c_uint), POINTER(c_int)] + +# /usr/include/alsa/pcm.h:684 +snd_pcm_hw_params_get_min_align = _lib.snd_pcm_hw_params_get_min_align +snd_pcm_hw_params_get_min_align.restype = c_int +snd_pcm_hw_params_get_min_align.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(snd_pcm_uframes_t)] + +# /usr/include/alsa/pcm.h:695 +snd_pcm_sw_params_sizeof = _lib.snd_pcm_sw_params_sizeof +snd_pcm_sw_params_sizeof.restype = c_size_t +snd_pcm_sw_params_sizeof.argtypes = [] + +# /usr/include/alsa/pcm.h:701 +snd_pcm_sw_params_malloc = _lib.snd_pcm_sw_params_malloc +snd_pcm_sw_params_malloc.restype = c_int +snd_pcm_sw_params_malloc.argtypes = [POINTER(POINTER(snd_pcm_sw_params_t))] + +# /usr/include/alsa/pcm.h:702 +snd_pcm_sw_params_free = _lib.snd_pcm_sw_params_free +snd_pcm_sw_params_free.restype = None +snd_pcm_sw_params_free.argtypes = [POINTER(snd_pcm_sw_params_t)] + +# /usr/include/alsa/pcm.h:703 +snd_pcm_sw_params_copy = _lib.snd_pcm_sw_params_copy +snd_pcm_sw_params_copy.restype = None +snd_pcm_sw_params_copy.argtypes = [POINTER(snd_pcm_sw_params_t), POINTER(snd_pcm_sw_params_t)] + +# /usr/include/alsa/pcm.h:704 +snd_pcm_sw_params_get_boundary = _lib.snd_pcm_sw_params_get_boundary +snd_pcm_sw_params_get_boundary.restype = c_int +snd_pcm_sw_params_get_boundary.argtypes = [POINTER(snd_pcm_sw_params_t), POINTER(snd_pcm_uframes_t)] + +# /usr/include/alsa/pcm.h:708 +snd_pcm_sw_params_set_tstamp_mode = _lib.snd_pcm_sw_params_set_tstamp_mode +snd_pcm_sw_params_set_tstamp_mode.restype = c_int +snd_pcm_sw_params_set_tstamp_mode.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_sw_params_t), snd_pcm_tstamp_t] + +# /usr/include/alsa/pcm.h:709 +snd_pcm_sw_params_get_tstamp_mode = _lib.snd_pcm_sw_params_get_tstamp_mode +snd_pcm_sw_params_get_tstamp_mode.restype = c_int +snd_pcm_sw_params_get_tstamp_mode.argtypes = [POINTER(snd_pcm_sw_params_t), POINTER(snd_pcm_tstamp_t)] + +# /usr/include/alsa/pcm.h:710 +snd_pcm_sw_params_set_sleep_min = _lib.snd_pcm_sw_params_set_sleep_min +snd_pcm_sw_params_set_sleep_min.restype = c_int +snd_pcm_sw_params_set_sleep_min.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_sw_params_t), c_uint] + +# /usr/include/alsa/pcm.h:711 +snd_pcm_sw_params_get_sleep_min = _lib.snd_pcm_sw_params_get_sleep_min +snd_pcm_sw_params_get_sleep_min.restype = c_int +snd_pcm_sw_params_get_sleep_min.argtypes = [POINTER(snd_pcm_sw_params_t), POINTER(c_uint)] + +# /usr/include/alsa/pcm.h:712 +snd_pcm_sw_params_set_avail_min = _lib.snd_pcm_sw_params_set_avail_min +snd_pcm_sw_params_set_avail_min.restype = c_int +snd_pcm_sw_params_set_avail_min.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_sw_params_t), snd_pcm_uframes_t] + +# /usr/include/alsa/pcm.h:713 +snd_pcm_sw_params_get_avail_min = _lib.snd_pcm_sw_params_get_avail_min +snd_pcm_sw_params_get_avail_min.restype = c_int +snd_pcm_sw_params_get_avail_min.argtypes = [POINTER(snd_pcm_sw_params_t), POINTER(snd_pcm_uframes_t)] + +# /usr/include/alsa/pcm.h:714 +snd_pcm_sw_params_set_xfer_align = _lib.snd_pcm_sw_params_set_xfer_align +snd_pcm_sw_params_set_xfer_align.restype = c_int +snd_pcm_sw_params_set_xfer_align.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_sw_params_t), snd_pcm_uframes_t] + +# /usr/include/alsa/pcm.h:715 +snd_pcm_sw_params_get_xfer_align = _lib.snd_pcm_sw_params_get_xfer_align +snd_pcm_sw_params_get_xfer_align.restype = c_int +snd_pcm_sw_params_get_xfer_align.argtypes = [POINTER(snd_pcm_sw_params_t), POINTER(snd_pcm_uframes_t)] + +# /usr/include/alsa/pcm.h:716 +snd_pcm_sw_params_set_start_threshold = _lib.snd_pcm_sw_params_set_start_threshold +snd_pcm_sw_params_set_start_threshold.restype = c_int +snd_pcm_sw_params_set_start_threshold.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_sw_params_t), snd_pcm_uframes_t] + +# /usr/include/alsa/pcm.h:717 +snd_pcm_sw_params_get_start_threshold = _lib.snd_pcm_sw_params_get_start_threshold +snd_pcm_sw_params_get_start_threshold.restype = c_int +snd_pcm_sw_params_get_start_threshold.argtypes = [POINTER(snd_pcm_sw_params_t), POINTER(snd_pcm_uframes_t)] + +# /usr/include/alsa/pcm.h:718 +snd_pcm_sw_params_set_stop_threshold = _lib.snd_pcm_sw_params_set_stop_threshold +snd_pcm_sw_params_set_stop_threshold.restype = c_int +snd_pcm_sw_params_set_stop_threshold.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_sw_params_t), snd_pcm_uframes_t] + +# /usr/include/alsa/pcm.h:719 +snd_pcm_sw_params_get_stop_threshold = _lib.snd_pcm_sw_params_get_stop_threshold +snd_pcm_sw_params_get_stop_threshold.restype = c_int +snd_pcm_sw_params_get_stop_threshold.argtypes = [POINTER(snd_pcm_sw_params_t), POINTER(snd_pcm_uframes_t)] + +# /usr/include/alsa/pcm.h:720 +snd_pcm_sw_params_set_silence_threshold = _lib.snd_pcm_sw_params_set_silence_threshold +snd_pcm_sw_params_set_silence_threshold.restype = c_int +snd_pcm_sw_params_set_silence_threshold.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_sw_params_t), snd_pcm_uframes_t] + +# /usr/include/alsa/pcm.h:721 +snd_pcm_sw_params_get_silence_threshold = _lib.snd_pcm_sw_params_get_silence_threshold +snd_pcm_sw_params_get_silence_threshold.restype = c_int +snd_pcm_sw_params_get_silence_threshold.argtypes = [POINTER(snd_pcm_sw_params_t), POINTER(snd_pcm_uframes_t)] + +# /usr/include/alsa/pcm.h:722 +snd_pcm_sw_params_set_silence_size = _lib.snd_pcm_sw_params_set_silence_size +snd_pcm_sw_params_set_silence_size.restype = c_int +snd_pcm_sw_params_set_silence_size.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_sw_params_t), snd_pcm_uframes_t] + +# /usr/include/alsa/pcm.h:723 +snd_pcm_sw_params_get_silence_size = _lib.snd_pcm_sw_params_get_silence_size +snd_pcm_sw_params_get_silence_size.restype = c_int +snd_pcm_sw_params_get_silence_size.argtypes = [POINTER(snd_pcm_sw_params_t), POINTER(snd_pcm_uframes_t)] + +# /usr/include/alsa/pcm.h:743 +snd_pcm_access_mask_sizeof = _lib.snd_pcm_access_mask_sizeof +snd_pcm_access_mask_sizeof.restype = c_size_t +snd_pcm_access_mask_sizeof.argtypes = [] + +# /usr/include/alsa/pcm.h:749 +snd_pcm_access_mask_malloc = _lib.snd_pcm_access_mask_malloc +snd_pcm_access_mask_malloc.restype = c_int +snd_pcm_access_mask_malloc.argtypes = [POINTER(POINTER(snd_pcm_access_mask_t))] + +# /usr/include/alsa/pcm.h:750 +snd_pcm_access_mask_free = _lib.snd_pcm_access_mask_free +snd_pcm_access_mask_free.restype = None +snd_pcm_access_mask_free.argtypes = [POINTER(snd_pcm_access_mask_t)] + +# /usr/include/alsa/pcm.h:751 +snd_pcm_access_mask_copy = _lib.snd_pcm_access_mask_copy +snd_pcm_access_mask_copy.restype = None +snd_pcm_access_mask_copy.argtypes = [POINTER(snd_pcm_access_mask_t), POINTER(snd_pcm_access_mask_t)] + +# /usr/include/alsa/pcm.h:752 +snd_pcm_access_mask_none = _lib.snd_pcm_access_mask_none +snd_pcm_access_mask_none.restype = None +snd_pcm_access_mask_none.argtypes = [POINTER(snd_pcm_access_mask_t)] + +# /usr/include/alsa/pcm.h:753 +snd_pcm_access_mask_any = _lib.snd_pcm_access_mask_any +snd_pcm_access_mask_any.restype = None +snd_pcm_access_mask_any.argtypes = [POINTER(snd_pcm_access_mask_t)] + +# /usr/include/alsa/pcm.h:754 +snd_pcm_access_mask_test = _lib.snd_pcm_access_mask_test +snd_pcm_access_mask_test.restype = c_int +snd_pcm_access_mask_test.argtypes = [POINTER(snd_pcm_access_mask_t), snd_pcm_access_t] + +# /usr/include/alsa/pcm.h:755 +snd_pcm_access_mask_empty = _lib.snd_pcm_access_mask_empty +snd_pcm_access_mask_empty.restype = c_int +snd_pcm_access_mask_empty.argtypes = [POINTER(snd_pcm_access_mask_t)] + +# /usr/include/alsa/pcm.h:756 +snd_pcm_access_mask_set = _lib.snd_pcm_access_mask_set +snd_pcm_access_mask_set.restype = None +snd_pcm_access_mask_set.argtypes = [POINTER(snd_pcm_access_mask_t), snd_pcm_access_t] + +# /usr/include/alsa/pcm.h:757 +snd_pcm_access_mask_reset = _lib.snd_pcm_access_mask_reset +snd_pcm_access_mask_reset.restype = None +snd_pcm_access_mask_reset.argtypes = [POINTER(snd_pcm_access_mask_t), snd_pcm_access_t] + +# /usr/include/alsa/pcm.h:768 +snd_pcm_format_mask_sizeof = _lib.snd_pcm_format_mask_sizeof +snd_pcm_format_mask_sizeof.restype = c_size_t +snd_pcm_format_mask_sizeof.argtypes = [] + +# /usr/include/alsa/pcm.h:774 +snd_pcm_format_mask_malloc = _lib.snd_pcm_format_mask_malloc +snd_pcm_format_mask_malloc.restype = c_int +snd_pcm_format_mask_malloc.argtypes = [POINTER(POINTER(snd_pcm_format_mask_t))] + +# /usr/include/alsa/pcm.h:775 +snd_pcm_format_mask_free = _lib.snd_pcm_format_mask_free +snd_pcm_format_mask_free.restype = None +snd_pcm_format_mask_free.argtypes = [POINTER(snd_pcm_format_mask_t)] + +# /usr/include/alsa/pcm.h:776 +snd_pcm_format_mask_copy = _lib.snd_pcm_format_mask_copy +snd_pcm_format_mask_copy.restype = None +snd_pcm_format_mask_copy.argtypes = [POINTER(snd_pcm_format_mask_t), POINTER(snd_pcm_format_mask_t)] + +# /usr/include/alsa/pcm.h:777 +snd_pcm_format_mask_none = _lib.snd_pcm_format_mask_none +snd_pcm_format_mask_none.restype = None +snd_pcm_format_mask_none.argtypes = [POINTER(snd_pcm_format_mask_t)] + +# /usr/include/alsa/pcm.h:778 +snd_pcm_format_mask_any = _lib.snd_pcm_format_mask_any +snd_pcm_format_mask_any.restype = None +snd_pcm_format_mask_any.argtypes = [POINTER(snd_pcm_format_mask_t)] + +# /usr/include/alsa/pcm.h:779 +snd_pcm_format_mask_test = _lib.snd_pcm_format_mask_test +snd_pcm_format_mask_test.restype = c_int +snd_pcm_format_mask_test.argtypes = [POINTER(snd_pcm_format_mask_t), snd_pcm_format_t] + +# /usr/include/alsa/pcm.h:780 +snd_pcm_format_mask_empty = _lib.snd_pcm_format_mask_empty +snd_pcm_format_mask_empty.restype = c_int +snd_pcm_format_mask_empty.argtypes = [POINTER(snd_pcm_format_mask_t)] + +# /usr/include/alsa/pcm.h:781 +snd_pcm_format_mask_set = _lib.snd_pcm_format_mask_set +snd_pcm_format_mask_set.restype = None +snd_pcm_format_mask_set.argtypes = [POINTER(snd_pcm_format_mask_t), snd_pcm_format_t] + +# /usr/include/alsa/pcm.h:782 +snd_pcm_format_mask_reset = _lib.snd_pcm_format_mask_reset +snd_pcm_format_mask_reset.restype = None +snd_pcm_format_mask_reset.argtypes = [POINTER(snd_pcm_format_mask_t), snd_pcm_format_t] + +# /usr/include/alsa/pcm.h:793 +snd_pcm_subformat_mask_sizeof = _lib.snd_pcm_subformat_mask_sizeof +snd_pcm_subformat_mask_sizeof.restype = c_size_t +snd_pcm_subformat_mask_sizeof.argtypes = [] + +# /usr/include/alsa/pcm.h:799 +snd_pcm_subformat_mask_malloc = _lib.snd_pcm_subformat_mask_malloc +snd_pcm_subformat_mask_malloc.restype = c_int +snd_pcm_subformat_mask_malloc.argtypes = [POINTER(POINTER(snd_pcm_subformat_mask_t))] + +# /usr/include/alsa/pcm.h:800 +snd_pcm_subformat_mask_free = _lib.snd_pcm_subformat_mask_free +snd_pcm_subformat_mask_free.restype = None +snd_pcm_subformat_mask_free.argtypes = [POINTER(snd_pcm_subformat_mask_t)] + +# /usr/include/alsa/pcm.h:801 +snd_pcm_subformat_mask_copy = _lib.snd_pcm_subformat_mask_copy +snd_pcm_subformat_mask_copy.restype = None +snd_pcm_subformat_mask_copy.argtypes = [POINTER(snd_pcm_subformat_mask_t), POINTER(snd_pcm_subformat_mask_t)] + +# /usr/include/alsa/pcm.h:802 +snd_pcm_subformat_mask_none = _lib.snd_pcm_subformat_mask_none +snd_pcm_subformat_mask_none.restype = None +snd_pcm_subformat_mask_none.argtypes = [POINTER(snd_pcm_subformat_mask_t)] + +# /usr/include/alsa/pcm.h:803 +snd_pcm_subformat_mask_any = _lib.snd_pcm_subformat_mask_any +snd_pcm_subformat_mask_any.restype = None +snd_pcm_subformat_mask_any.argtypes = [POINTER(snd_pcm_subformat_mask_t)] + +# /usr/include/alsa/pcm.h:804 +snd_pcm_subformat_mask_test = _lib.snd_pcm_subformat_mask_test +snd_pcm_subformat_mask_test.restype = c_int +snd_pcm_subformat_mask_test.argtypes = [POINTER(snd_pcm_subformat_mask_t), snd_pcm_subformat_t] + +# /usr/include/alsa/pcm.h:805 +snd_pcm_subformat_mask_empty = _lib.snd_pcm_subformat_mask_empty +snd_pcm_subformat_mask_empty.restype = c_int +snd_pcm_subformat_mask_empty.argtypes = [POINTER(snd_pcm_subformat_mask_t)] + +# /usr/include/alsa/pcm.h:806 +snd_pcm_subformat_mask_set = _lib.snd_pcm_subformat_mask_set +snd_pcm_subformat_mask_set.restype = None +snd_pcm_subformat_mask_set.argtypes = [POINTER(snd_pcm_subformat_mask_t), snd_pcm_subformat_t] + +# /usr/include/alsa/pcm.h:807 +snd_pcm_subformat_mask_reset = _lib.snd_pcm_subformat_mask_reset +snd_pcm_subformat_mask_reset.restype = None +snd_pcm_subformat_mask_reset.argtypes = [POINTER(snd_pcm_subformat_mask_t), snd_pcm_subformat_t] + +# /usr/include/alsa/pcm.h:818 +snd_pcm_status_sizeof = _lib.snd_pcm_status_sizeof +snd_pcm_status_sizeof.restype = c_size_t +snd_pcm_status_sizeof.argtypes = [] + +# /usr/include/alsa/pcm.h:824 +snd_pcm_status_malloc = _lib.snd_pcm_status_malloc +snd_pcm_status_malloc.restype = c_int +snd_pcm_status_malloc.argtypes = [POINTER(POINTER(snd_pcm_status_t))] + +# /usr/include/alsa/pcm.h:825 +snd_pcm_status_free = _lib.snd_pcm_status_free +snd_pcm_status_free.restype = None +snd_pcm_status_free.argtypes = [POINTER(snd_pcm_status_t)] + +# /usr/include/alsa/pcm.h:826 +snd_pcm_status_copy = _lib.snd_pcm_status_copy +snd_pcm_status_copy.restype = None +snd_pcm_status_copy.argtypes = [POINTER(snd_pcm_status_t), POINTER(snd_pcm_status_t)] + +# /usr/include/alsa/pcm.h:827 +snd_pcm_status_get_state = _lib.snd_pcm_status_get_state +snd_pcm_status_get_state.restype = snd_pcm_state_t +snd_pcm_status_get_state.argtypes = [POINTER(snd_pcm_status_t)] + +# /usr/include/alsa/pcm.h:828 +snd_pcm_status_get_trigger_tstamp = _lib.snd_pcm_status_get_trigger_tstamp +snd_pcm_status_get_trigger_tstamp.restype = None +snd_pcm_status_get_trigger_tstamp.argtypes = [POINTER(snd_pcm_status_t), POINTER(snd_timestamp_t)] + +# /usr/include/alsa/pcm.h:829 +snd_pcm_status_get_trigger_htstamp = _lib.snd_pcm_status_get_trigger_htstamp +snd_pcm_status_get_trigger_htstamp.restype = None +snd_pcm_status_get_trigger_htstamp.argtypes = [POINTER(snd_pcm_status_t), POINTER(snd_htimestamp_t)] + +# /usr/include/alsa/pcm.h:830 +snd_pcm_status_get_tstamp = _lib.snd_pcm_status_get_tstamp +snd_pcm_status_get_tstamp.restype = None +snd_pcm_status_get_tstamp.argtypes = [POINTER(snd_pcm_status_t), POINTER(snd_timestamp_t)] + +# /usr/include/alsa/pcm.h:831 +snd_pcm_status_get_htstamp = _lib.snd_pcm_status_get_htstamp +snd_pcm_status_get_htstamp.restype = None +snd_pcm_status_get_htstamp.argtypes = [POINTER(snd_pcm_status_t), POINTER(snd_htimestamp_t)] + +# /usr/include/alsa/pcm.h:832 +snd_pcm_status_get_delay = _lib.snd_pcm_status_get_delay +snd_pcm_status_get_delay.restype = snd_pcm_sframes_t +snd_pcm_status_get_delay.argtypes = [POINTER(snd_pcm_status_t)] + +# /usr/include/alsa/pcm.h:833 +snd_pcm_status_get_avail = _lib.snd_pcm_status_get_avail +snd_pcm_status_get_avail.restype = snd_pcm_uframes_t +snd_pcm_status_get_avail.argtypes = [POINTER(snd_pcm_status_t)] + +# /usr/include/alsa/pcm.h:834 +snd_pcm_status_get_avail_max = _lib.snd_pcm_status_get_avail_max +snd_pcm_status_get_avail_max.restype = snd_pcm_uframes_t +snd_pcm_status_get_avail_max.argtypes = [POINTER(snd_pcm_status_t)] + +# /usr/include/alsa/pcm.h:835 +snd_pcm_status_get_overrange = _lib.snd_pcm_status_get_overrange +snd_pcm_status_get_overrange.restype = snd_pcm_uframes_t +snd_pcm_status_get_overrange.argtypes = [POINTER(snd_pcm_status_t)] + +# /usr/include/alsa/pcm.h:846 +snd_pcm_type_name = _lib.snd_pcm_type_name +snd_pcm_type_name.restype = c_char_p +snd_pcm_type_name.argtypes = [snd_pcm_type_t] + +# /usr/include/alsa/pcm.h:847 +snd_pcm_stream_name = _lib.snd_pcm_stream_name +snd_pcm_stream_name.restype = c_char_p +snd_pcm_stream_name.argtypes = [snd_pcm_stream_t] + +# /usr/include/alsa/pcm.h:848 +snd_pcm_access_name = _lib.snd_pcm_access_name +snd_pcm_access_name.restype = c_char_p +snd_pcm_access_name.argtypes = [snd_pcm_access_t] + +# /usr/include/alsa/pcm.h:849 +snd_pcm_format_name = _lib.snd_pcm_format_name +snd_pcm_format_name.restype = c_char_p +snd_pcm_format_name.argtypes = [snd_pcm_format_t] + +# /usr/include/alsa/pcm.h:850 +snd_pcm_format_description = _lib.snd_pcm_format_description +snd_pcm_format_description.restype = c_char_p +snd_pcm_format_description.argtypes = [snd_pcm_format_t] + +# /usr/include/alsa/pcm.h:851 +snd_pcm_subformat_name = _lib.snd_pcm_subformat_name +snd_pcm_subformat_name.restype = c_char_p +snd_pcm_subformat_name.argtypes = [snd_pcm_subformat_t] + +# /usr/include/alsa/pcm.h:852 +snd_pcm_subformat_description = _lib.snd_pcm_subformat_description +snd_pcm_subformat_description.restype = c_char_p +snd_pcm_subformat_description.argtypes = [snd_pcm_subformat_t] + +# /usr/include/alsa/pcm.h:853 +snd_pcm_format_value = _lib.snd_pcm_format_value +snd_pcm_format_value.restype = snd_pcm_format_t +snd_pcm_format_value.argtypes = [c_char_p] + +# /usr/include/alsa/pcm.h:854 +snd_pcm_tstamp_mode_name = _lib.snd_pcm_tstamp_mode_name +snd_pcm_tstamp_mode_name.restype = c_char_p +snd_pcm_tstamp_mode_name.argtypes = [snd_pcm_tstamp_t] + +# /usr/include/alsa/pcm.h:855 +snd_pcm_state_name = _lib.snd_pcm_state_name +snd_pcm_state_name.restype = c_char_p +snd_pcm_state_name.argtypes = [snd_pcm_state_t] + +# /usr/include/alsa/pcm.h:866 +snd_pcm_dump = _lib.snd_pcm_dump +snd_pcm_dump.restype = c_int +snd_pcm_dump.argtypes = [POINTER(snd_pcm_t), POINTER(snd_output_t)] + +# /usr/include/alsa/pcm.h:867 +snd_pcm_dump_hw_setup = _lib.snd_pcm_dump_hw_setup +snd_pcm_dump_hw_setup.restype = c_int +snd_pcm_dump_hw_setup.argtypes = [POINTER(snd_pcm_t), POINTER(snd_output_t)] + +# /usr/include/alsa/pcm.h:868 +snd_pcm_dump_sw_setup = _lib.snd_pcm_dump_sw_setup +snd_pcm_dump_sw_setup.restype = c_int +snd_pcm_dump_sw_setup.argtypes = [POINTER(snd_pcm_t), POINTER(snd_output_t)] + +# /usr/include/alsa/pcm.h:869 +snd_pcm_dump_setup = _lib.snd_pcm_dump_setup +snd_pcm_dump_setup.restype = c_int +snd_pcm_dump_setup.argtypes = [POINTER(snd_pcm_t), POINTER(snd_output_t)] + +# /usr/include/alsa/pcm.h:870 +snd_pcm_hw_params_dump = _lib.snd_pcm_hw_params_dump +snd_pcm_hw_params_dump.restype = c_int +snd_pcm_hw_params_dump.argtypes = [POINTER(snd_pcm_hw_params_t), POINTER(snd_output_t)] + +# /usr/include/alsa/pcm.h:871 +snd_pcm_sw_params_dump = _lib.snd_pcm_sw_params_dump +snd_pcm_sw_params_dump.restype = c_int +snd_pcm_sw_params_dump.argtypes = [POINTER(snd_pcm_sw_params_t), POINTER(snd_output_t)] + +# /usr/include/alsa/pcm.h:872 +snd_pcm_status_dump = _lib.snd_pcm_status_dump +snd_pcm_status_dump.restype = c_int +snd_pcm_status_dump.argtypes = [POINTER(snd_pcm_status_t), POINTER(snd_output_t)] + +# /usr/include/alsa/pcm.h:883 +snd_pcm_mmap_begin = _lib.snd_pcm_mmap_begin +snd_pcm_mmap_begin.restype = c_int +snd_pcm_mmap_begin.argtypes = [POINTER(snd_pcm_t), POINTER(POINTER(snd_pcm_channel_area_t)), POINTER(snd_pcm_uframes_t), POINTER(snd_pcm_uframes_t)] + +# /usr/include/alsa/pcm.h:887 +snd_pcm_mmap_commit = _lib.snd_pcm_mmap_commit +snd_pcm_mmap_commit.restype = snd_pcm_sframes_t +snd_pcm_mmap_commit.argtypes = [POINTER(snd_pcm_t), snd_pcm_uframes_t, snd_pcm_uframes_t] + +# /usr/include/alsa/pcm.h:890 +snd_pcm_mmap_writei = _lib.snd_pcm_mmap_writei +snd_pcm_mmap_writei.restype = snd_pcm_sframes_t +snd_pcm_mmap_writei.argtypes = [POINTER(snd_pcm_t), POINTER(None), snd_pcm_uframes_t] + +# /usr/include/alsa/pcm.h:891 +snd_pcm_mmap_readi = _lib.snd_pcm_mmap_readi +snd_pcm_mmap_readi.restype = snd_pcm_sframes_t +snd_pcm_mmap_readi.argtypes = [POINTER(snd_pcm_t), POINTER(None), snd_pcm_uframes_t] + +# /usr/include/alsa/pcm.h:892 +snd_pcm_mmap_writen = _lib.snd_pcm_mmap_writen +snd_pcm_mmap_writen.restype = snd_pcm_sframes_t +snd_pcm_mmap_writen.argtypes = [POINTER(snd_pcm_t), POINTER(POINTER(None)), snd_pcm_uframes_t] + +# /usr/include/alsa/pcm.h:893 +snd_pcm_mmap_readn = _lib.snd_pcm_mmap_readn +snd_pcm_mmap_readn.restype = snd_pcm_sframes_t +snd_pcm_mmap_readn.argtypes = [POINTER(snd_pcm_t), POINTER(POINTER(None)), snd_pcm_uframes_t] + +# /usr/include/alsa/pcm.h:904 +snd_pcm_format_signed = _lib.snd_pcm_format_signed +snd_pcm_format_signed.restype = c_int +snd_pcm_format_signed.argtypes = [snd_pcm_format_t] + +# /usr/include/alsa/pcm.h:905 +snd_pcm_format_unsigned = _lib.snd_pcm_format_unsigned +snd_pcm_format_unsigned.restype = c_int +snd_pcm_format_unsigned.argtypes = [snd_pcm_format_t] + +# /usr/include/alsa/pcm.h:906 +snd_pcm_format_linear = _lib.snd_pcm_format_linear +snd_pcm_format_linear.restype = c_int +snd_pcm_format_linear.argtypes = [snd_pcm_format_t] + +# /usr/include/alsa/pcm.h:907 +snd_pcm_format_float = _lib.snd_pcm_format_float +snd_pcm_format_float.restype = c_int +snd_pcm_format_float.argtypes = [snd_pcm_format_t] + +# /usr/include/alsa/pcm.h:908 +snd_pcm_format_little_endian = _lib.snd_pcm_format_little_endian +snd_pcm_format_little_endian.restype = c_int +snd_pcm_format_little_endian.argtypes = [snd_pcm_format_t] + +# /usr/include/alsa/pcm.h:909 +snd_pcm_format_big_endian = _lib.snd_pcm_format_big_endian +snd_pcm_format_big_endian.restype = c_int +snd_pcm_format_big_endian.argtypes = [snd_pcm_format_t] + +# /usr/include/alsa/pcm.h:910 +snd_pcm_format_cpu_endian = _lib.snd_pcm_format_cpu_endian +snd_pcm_format_cpu_endian.restype = c_int +snd_pcm_format_cpu_endian.argtypes = [snd_pcm_format_t] + +# /usr/include/alsa/pcm.h:911 +snd_pcm_format_width = _lib.snd_pcm_format_width +snd_pcm_format_width.restype = c_int +snd_pcm_format_width.argtypes = [snd_pcm_format_t] + +# /usr/include/alsa/pcm.h:912 +snd_pcm_format_physical_width = _lib.snd_pcm_format_physical_width +snd_pcm_format_physical_width.restype = c_int +snd_pcm_format_physical_width.argtypes = [snd_pcm_format_t] + +# /usr/include/alsa/pcm.h:913 +snd_pcm_build_linear_format = _lib.snd_pcm_build_linear_format +snd_pcm_build_linear_format.restype = snd_pcm_format_t +snd_pcm_build_linear_format.argtypes = [c_int, c_int, c_int, c_int] + +# /usr/include/alsa/pcm.h:914 +snd_pcm_format_size = _lib.snd_pcm_format_size +snd_pcm_format_size.restype = ssize_t +snd_pcm_format_size.argtypes = [snd_pcm_format_t, c_size_t] + +u_int8_t = c_ubyte # /usr/include/gentoo-multilib/amd64/sys/types.h:174 +# /usr/include/alsa/pcm.h:915 +snd_pcm_format_silence = _lib.snd_pcm_format_silence +snd_pcm_format_silence.restype = u_int8_t +snd_pcm_format_silence.argtypes = [snd_pcm_format_t] + +u_int16_t = c_uint # /usr/include/gentoo-multilib/amd64/sys/types.h:175 +# /usr/include/alsa/pcm.h:916 +snd_pcm_format_silence_16 = _lib.snd_pcm_format_silence_16 +snd_pcm_format_silence_16.restype = u_int16_t +snd_pcm_format_silence_16.argtypes = [snd_pcm_format_t] + +u_int32_t = c_uint # /usr/include/gentoo-multilib/amd64/sys/types.h:176 +# /usr/include/alsa/pcm.h:917 +snd_pcm_format_silence_32 = _lib.snd_pcm_format_silence_32 +snd_pcm_format_silence_32.restype = u_int32_t +snd_pcm_format_silence_32.argtypes = [snd_pcm_format_t] + +u_int64_t = c_ulong # /usr/include/gentoo-multilib/amd64/sys/types.h:178 +# /usr/include/alsa/pcm.h:918 +snd_pcm_format_silence_64 = _lib.snd_pcm_format_silence_64 +snd_pcm_format_silence_64.restype = u_int64_t +snd_pcm_format_silence_64.argtypes = [snd_pcm_format_t] + +# /usr/include/alsa/pcm.h:919 +snd_pcm_format_set_silence = _lib.snd_pcm_format_set_silence +snd_pcm_format_set_silence.restype = c_int +snd_pcm_format_set_silence.argtypes = [snd_pcm_format_t, POINTER(None), c_uint] + +# /usr/include/alsa/pcm.h:921 +snd_pcm_bytes_to_frames = _lib.snd_pcm_bytes_to_frames +snd_pcm_bytes_to_frames.restype = snd_pcm_sframes_t +snd_pcm_bytes_to_frames.argtypes = [POINTER(snd_pcm_t), ssize_t] + +# /usr/include/alsa/pcm.h:922 +snd_pcm_frames_to_bytes = _lib.snd_pcm_frames_to_bytes +snd_pcm_frames_to_bytes.restype = ssize_t +snd_pcm_frames_to_bytes.argtypes = [POINTER(snd_pcm_t), snd_pcm_sframes_t] + +# /usr/include/alsa/pcm.h:923 +snd_pcm_bytes_to_samples = _lib.snd_pcm_bytes_to_samples +snd_pcm_bytes_to_samples.restype = c_long +snd_pcm_bytes_to_samples.argtypes = [POINTER(snd_pcm_t), ssize_t] + +# /usr/include/alsa/pcm.h:924 +snd_pcm_samples_to_bytes = _lib.snd_pcm_samples_to_bytes +snd_pcm_samples_to_bytes.restype = ssize_t +snd_pcm_samples_to_bytes.argtypes = [POINTER(snd_pcm_t), c_long] + +# /usr/include/alsa/pcm.h:926 +snd_pcm_area_silence = _lib.snd_pcm_area_silence +snd_pcm_area_silence.restype = c_int +snd_pcm_area_silence.argtypes = [POINTER(snd_pcm_channel_area_t), snd_pcm_uframes_t, c_uint, snd_pcm_format_t] + +# /usr/include/alsa/pcm.h:928 +snd_pcm_areas_silence = _lib.snd_pcm_areas_silence +snd_pcm_areas_silence.restype = c_int +snd_pcm_areas_silence.argtypes = [POINTER(snd_pcm_channel_area_t), snd_pcm_uframes_t, c_uint, snd_pcm_uframes_t, snd_pcm_format_t] + +# /usr/include/alsa/pcm.h:930 +snd_pcm_area_copy = _lib.snd_pcm_area_copy +snd_pcm_area_copy.restype = c_int +snd_pcm_area_copy.argtypes = [POINTER(snd_pcm_channel_area_t), snd_pcm_uframes_t, POINTER(snd_pcm_channel_area_t), snd_pcm_uframes_t, c_uint, snd_pcm_format_t] + +# /usr/include/alsa/pcm.h:933 +snd_pcm_areas_copy = _lib.snd_pcm_areas_copy +snd_pcm_areas_copy.restype = c_int +snd_pcm_areas_copy.argtypes = [POINTER(snd_pcm_channel_area_t), snd_pcm_uframes_t, POINTER(snd_pcm_channel_area_t), snd_pcm_uframes_t, c_uint, snd_pcm_uframes_t, snd_pcm_format_t] + +enum__snd_pcm_hook_type = c_int +SND_PCM_HOOK_TYPE_HW_PARAMS = 0 +SND_PCM_HOOK_TYPE_HW_FREE = 1 +SND_PCM_HOOK_TYPE_CLOSE = 2 +SND_PCM_HOOK_TYPE_LAST = 0 +snd_pcm_hook_type_t = enum__snd_pcm_hook_type # /usr/include/alsa/pcm.h:952 +class struct__snd_pcm_hook(Structure): + __slots__ = [ + ] +struct__snd_pcm_hook._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_pcm_hook(Structure): + __slots__ = [ + ] +struct__snd_pcm_hook._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_pcm_hook_t = struct__snd_pcm_hook # /usr/include/alsa/pcm.h:955 +snd_pcm_hook_func_t = CFUNCTYPE(c_int, POINTER(snd_pcm_hook_t)) # /usr/include/alsa/pcm.h:957 +# /usr/include/alsa/pcm.h:958 +snd_pcm_hook_get_pcm = _lib.snd_pcm_hook_get_pcm +snd_pcm_hook_get_pcm.restype = POINTER(snd_pcm_t) +snd_pcm_hook_get_pcm.argtypes = [POINTER(snd_pcm_hook_t)] + +# /usr/include/alsa/pcm.h:959 +snd_pcm_hook_get_private = _lib.snd_pcm_hook_get_private +snd_pcm_hook_get_private.restype = POINTER(c_void) +snd_pcm_hook_get_private.argtypes = [POINTER(snd_pcm_hook_t)] + +# /usr/include/alsa/pcm.h:960 +snd_pcm_hook_set_private = _lib.snd_pcm_hook_set_private +snd_pcm_hook_set_private.restype = None +snd_pcm_hook_set_private.argtypes = [POINTER(snd_pcm_hook_t), POINTER(None)] + +# /usr/include/alsa/pcm.h:961 +snd_pcm_hook_add = _lib.snd_pcm_hook_add +snd_pcm_hook_add.restype = c_int +snd_pcm_hook_add.argtypes = [POINTER(POINTER(snd_pcm_hook_t)), POINTER(snd_pcm_t), snd_pcm_hook_type_t, snd_pcm_hook_func_t, POINTER(None)] + +# /usr/include/alsa/pcm.h:964 +snd_pcm_hook_remove = _lib.snd_pcm_hook_remove +snd_pcm_hook_remove.restype = c_int +snd_pcm_hook_remove.argtypes = [POINTER(snd_pcm_hook_t)] + +class struct__snd_pcm_scope_ops(Structure): + __slots__ = [ + 'enable', + 'disable', + 'start', + 'stop', + 'update', + 'reset', + 'close', + ] +struct__snd_pcm_scope_ops._fields_ = [ + ('enable', POINTER(CFUNCTYPE(c_int, POINTER(snd_pcm_scope_t)))), + ('disable', POINTER(CFUNCTYPE(None, POINTER(snd_pcm_scope_t)))), + ('start', POINTER(CFUNCTYPE(None, POINTER(snd_pcm_scope_t)))), + ('stop', POINTER(CFUNCTYPE(None, POINTER(snd_pcm_scope_t)))), + ('update', POINTER(CFUNCTYPE(None, POINTER(snd_pcm_scope_t)))), + ('reset', POINTER(CFUNCTYPE(None, POINTER(snd_pcm_scope_t)))), + ('close', POINTER(CFUNCTYPE(None, POINTER(snd_pcm_scope_t)))), +] + +snd_pcm_scope_ops_t = struct__snd_pcm_scope_ops # /usr/include/alsa/pcm.h:1005 +# /usr/include/alsa/pcm.h:1007 +snd_pcm_meter_get_bufsize = _lib.snd_pcm_meter_get_bufsize +snd_pcm_meter_get_bufsize.restype = snd_pcm_uframes_t +snd_pcm_meter_get_bufsize.argtypes = [POINTER(snd_pcm_t)] + +# /usr/include/alsa/pcm.h:1008 +snd_pcm_meter_get_channels = _lib.snd_pcm_meter_get_channels +snd_pcm_meter_get_channels.restype = c_uint +snd_pcm_meter_get_channels.argtypes = [POINTER(snd_pcm_t)] + +# /usr/include/alsa/pcm.h:1009 +snd_pcm_meter_get_rate = _lib.snd_pcm_meter_get_rate +snd_pcm_meter_get_rate.restype = c_uint +snd_pcm_meter_get_rate.argtypes = [POINTER(snd_pcm_t)] + +# /usr/include/alsa/pcm.h:1010 +snd_pcm_meter_get_now = _lib.snd_pcm_meter_get_now +snd_pcm_meter_get_now.restype = snd_pcm_uframes_t +snd_pcm_meter_get_now.argtypes = [POINTER(snd_pcm_t)] + +# /usr/include/alsa/pcm.h:1011 +snd_pcm_meter_get_boundary = _lib.snd_pcm_meter_get_boundary +snd_pcm_meter_get_boundary.restype = snd_pcm_uframes_t +snd_pcm_meter_get_boundary.argtypes = [POINTER(snd_pcm_t)] + +# /usr/include/alsa/pcm.h:1012 +snd_pcm_meter_add_scope = _lib.snd_pcm_meter_add_scope +snd_pcm_meter_add_scope.restype = c_int +snd_pcm_meter_add_scope.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_scope_t)] + +# /usr/include/alsa/pcm.h:1013 +snd_pcm_meter_search_scope = _lib.snd_pcm_meter_search_scope +snd_pcm_meter_search_scope.restype = POINTER(snd_pcm_scope_t) +snd_pcm_meter_search_scope.argtypes = [POINTER(snd_pcm_t), c_char_p] + +# /usr/include/alsa/pcm.h:1014 +snd_pcm_scope_malloc = _lib.snd_pcm_scope_malloc +snd_pcm_scope_malloc.restype = c_int +snd_pcm_scope_malloc.argtypes = [POINTER(POINTER(snd_pcm_scope_t))] + +# /usr/include/alsa/pcm.h:1015 +snd_pcm_scope_set_ops = _lib.snd_pcm_scope_set_ops +snd_pcm_scope_set_ops.restype = None +snd_pcm_scope_set_ops.argtypes = [POINTER(snd_pcm_scope_t), POINTER(snd_pcm_scope_ops_t)] + +# /usr/include/alsa/pcm.h:1016 +snd_pcm_scope_set_name = _lib.snd_pcm_scope_set_name +snd_pcm_scope_set_name.restype = None +snd_pcm_scope_set_name.argtypes = [POINTER(snd_pcm_scope_t), c_char_p] + +# /usr/include/alsa/pcm.h:1017 +snd_pcm_scope_get_name = _lib.snd_pcm_scope_get_name +snd_pcm_scope_get_name.restype = c_char_p +snd_pcm_scope_get_name.argtypes = [POINTER(snd_pcm_scope_t)] + +# /usr/include/alsa/pcm.h:1018 +snd_pcm_scope_get_callback_private = _lib.snd_pcm_scope_get_callback_private +snd_pcm_scope_get_callback_private.restype = POINTER(c_void) +snd_pcm_scope_get_callback_private.argtypes = [POINTER(snd_pcm_scope_t)] + +# /usr/include/alsa/pcm.h:1019 +snd_pcm_scope_set_callback_private = _lib.snd_pcm_scope_set_callback_private +snd_pcm_scope_set_callback_private.restype = None +snd_pcm_scope_set_callback_private.argtypes = [POINTER(snd_pcm_scope_t), POINTER(None)] + +# /usr/include/alsa/pcm.h:1020 +snd_pcm_scope_s16_open = _lib.snd_pcm_scope_s16_open +snd_pcm_scope_s16_open.restype = c_int +snd_pcm_scope_s16_open.argtypes = [POINTER(snd_pcm_t), c_char_p, POINTER(POINTER(snd_pcm_scope_t))] + +# /usr/include/alsa/pcm.h:1022 +snd_pcm_scope_s16_get_channel_buffer = _lib.snd_pcm_scope_s16_get_channel_buffer +snd_pcm_scope_s16_get_channel_buffer.restype = POINTER(c_int16) +snd_pcm_scope_s16_get_channel_buffer.argtypes = [POINTER(snd_pcm_scope_t), c_uint] + +enum__snd_spcm_latency = c_int +SND_SPCM_LATENCY_STANDARD = 0 +SND_SPCM_LATENCY_MEDIUM = 1 +SND_SPCM_LATENCY_REALTIME = 2 +snd_spcm_latency_t = enum__snd_spcm_latency # /usr/include/alsa/pcm.h:1045 +enum__snd_spcm_xrun_type = c_int +SND_SPCM_XRUN_IGNORE = 0 +SND_SPCM_XRUN_STOP = 1 +snd_spcm_xrun_type_t = enum__snd_spcm_xrun_type # /usr/include/alsa/pcm.h:1053 +enum__snd_spcm_duplex_type = c_int +SND_SPCM_DUPLEX_LIBERAL = 0 +SND_SPCM_DUPLEX_PEDANTIC = 1 +snd_spcm_duplex_type_t = enum__snd_spcm_duplex_type # /usr/include/alsa/pcm.h:1061 +# /usr/include/alsa/pcm.h:1063 +snd_spcm_init = _lib.snd_spcm_init +snd_spcm_init.restype = c_int +snd_spcm_init.argtypes = [POINTER(snd_pcm_t), c_uint, c_uint, snd_pcm_format_t, snd_pcm_subformat_t, snd_spcm_latency_t, snd_pcm_access_t, snd_spcm_xrun_type_t] + +# /usr/include/alsa/pcm.h:1072 +snd_spcm_init_duplex = _lib.snd_spcm_init_duplex +snd_spcm_init_duplex.restype = c_int +snd_spcm_init_duplex.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_t), c_uint, c_uint, snd_pcm_format_t, snd_pcm_subformat_t, snd_spcm_latency_t, snd_pcm_access_t, snd_spcm_xrun_type_t, snd_spcm_duplex_type_t] + +# /usr/include/alsa/pcm.h:1083 +snd_spcm_init_get_params = _lib.snd_spcm_init_get_params +snd_spcm_init_get_params.restype = c_int +snd_spcm_init_get_params.argtypes = [POINTER(snd_pcm_t), POINTER(c_uint), POINTER(snd_pcm_uframes_t), POINTER(snd_pcm_uframes_t)] + +# /usr/include/alsa/pcm.h:1098 +snd_pcm_start_mode_name = _lib.snd_pcm_start_mode_name +snd_pcm_start_mode_name.restype = c_char_p +snd_pcm_start_mode_name.argtypes = [snd_pcm_start_t] + +# /usr/include/alsa/pcm.h:1099 +snd_pcm_xrun_mode_name = _lib.snd_pcm_xrun_mode_name +snd_pcm_xrun_mode_name.restype = c_char_p +snd_pcm_xrun_mode_name.argtypes = [snd_pcm_xrun_t] + +# /usr/include/alsa/pcm.h:1100 +snd_pcm_sw_params_set_start_mode = _lib.snd_pcm_sw_params_set_start_mode +snd_pcm_sw_params_set_start_mode.restype = c_int +snd_pcm_sw_params_set_start_mode.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_sw_params_t), snd_pcm_start_t] + +# /usr/include/alsa/pcm.h:1101 +snd_pcm_sw_params_get_start_mode = _lib.snd_pcm_sw_params_get_start_mode +snd_pcm_sw_params_get_start_mode.restype = snd_pcm_start_t +snd_pcm_sw_params_get_start_mode.argtypes = [POINTER(snd_pcm_sw_params_t)] + +# /usr/include/alsa/pcm.h:1102 +snd_pcm_sw_params_set_xrun_mode = _lib.snd_pcm_sw_params_set_xrun_mode +snd_pcm_sw_params_set_xrun_mode.restype = c_int +snd_pcm_sw_params_set_xrun_mode.argtypes = [POINTER(snd_pcm_t), POINTER(snd_pcm_sw_params_t), snd_pcm_xrun_t] + +# /usr/include/alsa/pcm.h:1103 +snd_pcm_sw_params_get_xrun_mode = _lib.snd_pcm_sw_params_get_xrun_mode +snd_pcm_sw_params_get_xrun_mode.restype = snd_pcm_xrun_t +snd_pcm_sw_params_get_xrun_mode.argtypes = [POINTER(snd_pcm_sw_params_t)] + +SND_RAWMIDI_DLSYM_VERSION = 0 # /usr/include/alsa/rawmidi.h:42 +class struct__snd_rawmidi_info(Structure): + __slots__ = [ + ] +struct__snd_rawmidi_info._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_rawmidi_info(Structure): + __slots__ = [ + ] +struct__snd_rawmidi_info._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_rawmidi_info_t = struct__snd_rawmidi_info # /usr/include/alsa/rawmidi.h:45 +class struct__snd_rawmidi_params(Structure): + __slots__ = [ + ] +struct__snd_rawmidi_params._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_rawmidi_params(Structure): + __slots__ = [ + ] +struct__snd_rawmidi_params._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_rawmidi_params_t = struct__snd_rawmidi_params # /usr/include/alsa/rawmidi.h:47 +class struct__snd_rawmidi_status(Structure): + __slots__ = [ + ] +struct__snd_rawmidi_status._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_rawmidi_status(Structure): + __slots__ = [ + ] +struct__snd_rawmidi_status._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_rawmidi_status_t = struct__snd_rawmidi_status # /usr/include/alsa/rawmidi.h:49 +enum__snd_rawmidi_stream = c_int +SND_RAWMIDI_STREAM_OUTPUT = 0 +SND_RAWMIDI_STREAM_INPUT = 1 +SND_RAWMIDI_STREAM_LAST = 0 +snd_rawmidi_stream_t = enum__snd_rawmidi_stream # /usr/include/alsa/rawmidi.h:58 +SND_RAWMIDI_APPEND = 1 # /usr/include/alsa/rawmidi.h:61 +SND_RAWMIDI_NONBLOCK = 2 # /usr/include/alsa/rawmidi.h:63 +SND_RAWMIDI_SYNC = 4 # /usr/include/alsa/rawmidi.h:65 +class struct__snd_rawmidi(Structure): + __slots__ = [ + ] +struct__snd_rawmidi._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_rawmidi(Structure): + __slots__ = [ + ] +struct__snd_rawmidi._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_rawmidi_t = struct__snd_rawmidi # /usr/include/alsa/rawmidi.h:68 +enum__snd_rawmidi_type = c_int +SND_RAWMIDI_TYPE_HW = 1 +SND_RAWMIDI_TYPE_SHM = 2 +SND_RAWMIDI_TYPE_INET = 3 +SND_RAWMIDI_TYPE_VIRTUAL = 4 +snd_rawmidi_type_t = enum__snd_rawmidi_type # /usr/include/alsa/rawmidi.h:80 +# /usr/include/alsa/rawmidi.h:82 +snd_rawmidi_open = _lib.snd_rawmidi_open +snd_rawmidi_open.restype = c_int +snd_rawmidi_open.argtypes = [POINTER(POINTER(snd_rawmidi_t)), POINTER(POINTER(snd_rawmidi_t)), c_char_p, c_int] + +# /usr/include/alsa/rawmidi.h:84 +snd_rawmidi_open_lconf = _lib.snd_rawmidi_open_lconf +snd_rawmidi_open_lconf.restype = c_int +snd_rawmidi_open_lconf.argtypes = [POINTER(POINTER(snd_rawmidi_t)), POINTER(POINTER(snd_rawmidi_t)), c_char_p, c_int, POINTER(snd_config_t)] + +# /usr/include/alsa/rawmidi.h:86 +snd_rawmidi_close = _lib.snd_rawmidi_close +snd_rawmidi_close.restype = c_int +snd_rawmidi_close.argtypes = [POINTER(snd_rawmidi_t)] + +# /usr/include/alsa/rawmidi.h:87 +snd_rawmidi_poll_descriptors_count = _lib.snd_rawmidi_poll_descriptors_count +snd_rawmidi_poll_descriptors_count.restype = c_int +snd_rawmidi_poll_descriptors_count.argtypes = [POINTER(snd_rawmidi_t)] + +class struct_pollfd(Structure): + __slots__ = [ + ] +struct_pollfd._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/rawmidi.h:88 +snd_rawmidi_poll_descriptors = _lib.snd_rawmidi_poll_descriptors +snd_rawmidi_poll_descriptors.restype = c_int +snd_rawmidi_poll_descriptors.argtypes = [POINTER(snd_rawmidi_t), POINTER(struct_pollfd), c_uint] + +class struct_pollfd(Structure): + __slots__ = [ + ] +struct_pollfd._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/rawmidi.h:89 +snd_rawmidi_poll_descriptors_revents = _lib.snd_rawmidi_poll_descriptors_revents +snd_rawmidi_poll_descriptors_revents.restype = c_int +snd_rawmidi_poll_descriptors_revents.argtypes = [POINTER(snd_rawmidi_t), POINTER(struct_pollfd), c_uint, POINTER(c_ushort)] + +# /usr/include/alsa/rawmidi.h:90 +snd_rawmidi_nonblock = _lib.snd_rawmidi_nonblock +snd_rawmidi_nonblock.restype = c_int +snd_rawmidi_nonblock.argtypes = [POINTER(snd_rawmidi_t), c_int] + +# /usr/include/alsa/rawmidi.h:91 +snd_rawmidi_info_sizeof = _lib.snd_rawmidi_info_sizeof +snd_rawmidi_info_sizeof.restype = c_size_t +snd_rawmidi_info_sizeof.argtypes = [] + +# /usr/include/alsa/rawmidi.h:97 +snd_rawmidi_info_malloc = _lib.snd_rawmidi_info_malloc +snd_rawmidi_info_malloc.restype = c_int +snd_rawmidi_info_malloc.argtypes = [POINTER(POINTER(snd_rawmidi_info_t))] + +# /usr/include/alsa/rawmidi.h:98 +snd_rawmidi_info_free = _lib.snd_rawmidi_info_free +snd_rawmidi_info_free.restype = None +snd_rawmidi_info_free.argtypes = [POINTER(snd_rawmidi_info_t)] + +# /usr/include/alsa/rawmidi.h:99 +snd_rawmidi_info_copy = _lib.snd_rawmidi_info_copy +snd_rawmidi_info_copy.restype = None +snd_rawmidi_info_copy.argtypes = [POINTER(snd_rawmidi_info_t), POINTER(snd_rawmidi_info_t)] + +# /usr/include/alsa/rawmidi.h:100 +snd_rawmidi_info_get_device = _lib.snd_rawmidi_info_get_device +snd_rawmidi_info_get_device.restype = c_uint +snd_rawmidi_info_get_device.argtypes = [POINTER(snd_rawmidi_info_t)] + +# /usr/include/alsa/rawmidi.h:101 +snd_rawmidi_info_get_subdevice = _lib.snd_rawmidi_info_get_subdevice +snd_rawmidi_info_get_subdevice.restype = c_uint +snd_rawmidi_info_get_subdevice.argtypes = [POINTER(snd_rawmidi_info_t)] + +# /usr/include/alsa/rawmidi.h:102 +snd_rawmidi_info_get_stream = _lib.snd_rawmidi_info_get_stream +snd_rawmidi_info_get_stream.restype = snd_rawmidi_stream_t +snd_rawmidi_info_get_stream.argtypes = [POINTER(snd_rawmidi_info_t)] + +# /usr/include/alsa/rawmidi.h:103 +snd_rawmidi_info_get_card = _lib.snd_rawmidi_info_get_card +snd_rawmidi_info_get_card.restype = c_int +snd_rawmidi_info_get_card.argtypes = [POINTER(snd_rawmidi_info_t)] + +# /usr/include/alsa/rawmidi.h:104 +snd_rawmidi_info_get_flags = _lib.snd_rawmidi_info_get_flags +snd_rawmidi_info_get_flags.restype = c_uint +snd_rawmidi_info_get_flags.argtypes = [POINTER(snd_rawmidi_info_t)] + +# /usr/include/alsa/rawmidi.h:105 +snd_rawmidi_info_get_id = _lib.snd_rawmidi_info_get_id +snd_rawmidi_info_get_id.restype = c_char_p +snd_rawmidi_info_get_id.argtypes = [POINTER(snd_rawmidi_info_t)] + +# /usr/include/alsa/rawmidi.h:106 +snd_rawmidi_info_get_name = _lib.snd_rawmidi_info_get_name +snd_rawmidi_info_get_name.restype = c_char_p +snd_rawmidi_info_get_name.argtypes = [POINTER(snd_rawmidi_info_t)] + +# /usr/include/alsa/rawmidi.h:107 +snd_rawmidi_info_get_subdevice_name = _lib.snd_rawmidi_info_get_subdevice_name +snd_rawmidi_info_get_subdevice_name.restype = c_char_p +snd_rawmidi_info_get_subdevice_name.argtypes = [POINTER(snd_rawmidi_info_t)] + +# /usr/include/alsa/rawmidi.h:108 +snd_rawmidi_info_get_subdevices_count = _lib.snd_rawmidi_info_get_subdevices_count +snd_rawmidi_info_get_subdevices_count.restype = c_uint +snd_rawmidi_info_get_subdevices_count.argtypes = [POINTER(snd_rawmidi_info_t)] + +# /usr/include/alsa/rawmidi.h:109 +snd_rawmidi_info_get_subdevices_avail = _lib.snd_rawmidi_info_get_subdevices_avail +snd_rawmidi_info_get_subdevices_avail.restype = c_uint +snd_rawmidi_info_get_subdevices_avail.argtypes = [POINTER(snd_rawmidi_info_t)] + +# /usr/include/alsa/rawmidi.h:110 +snd_rawmidi_info_set_device = _lib.snd_rawmidi_info_set_device +snd_rawmidi_info_set_device.restype = None +snd_rawmidi_info_set_device.argtypes = [POINTER(snd_rawmidi_info_t), c_uint] + +# /usr/include/alsa/rawmidi.h:111 +snd_rawmidi_info_set_subdevice = _lib.snd_rawmidi_info_set_subdevice +snd_rawmidi_info_set_subdevice.restype = None +snd_rawmidi_info_set_subdevice.argtypes = [POINTER(snd_rawmidi_info_t), c_uint] + +# /usr/include/alsa/rawmidi.h:112 +snd_rawmidi_info_set_stream = _lib.snd_rawmidi_info_set_stream +snd_rawmidi_info_set_stream.restype = None +snd_rawmidi_info_set_stream.argtypes = [POINTER(snd_rawmidi_info_t), snd_rawmidi_stream_t] + +# /usr/include/alsa/rawmidi.h:113 +snd_rawmidi_info = _lib.snd_rawmidi_info +snd_rawmidi_info.restype = c_int +snd_rawmidi_info.argtypes = [POINTER(snd_rawmidi_t), POINTER(snd_rawmidi_info_t)] + +# /usr/include/alsa/rawmidi.h:114 +snd_rawmidi_params_sizeof = _lib.snd_rawmidi_params_sizeof +snd_rawmidi_params_sizeof.restype = c_size_t +snd_rawmidi_params_sizeof.argtypes = [] + +# /usr/include/alsa/rawmidi.h:120 +snd_rawmidi_params_malloc = _lib.snd_rawmidi_params_malloc +snd_rawmidi_params_malloc.restype = c_int +snd_rawmidi_params_malloc.argtypes = [POINTER(POINTER(snd_rawmidi_params_t))] + +# /usr/include/alsa/rawmidi.h:121 +snd_rawmidi_params_free = _lib.snd_rawmidi_params_free +snd_rawmidi_params_free.restype = None +snd_rawmidi_params_free.argtypes = [POINTER(snd_rawmidi_params_t)] + +# /usr/include/alsa/rawmidi.h:122 +snd_rawmidi_params_copy = _lib.snd_rawmidi_params_copy +snd_rawmidi_params_copy.restype = None +snd_rawmidi_params_copy.argtypes = [POINTER(snd_rawmidi_params_t), POINTER(snd_rawmidi_params_t)] + +# /usr/include/alsa/rawmidi.h:123 +snd_rawmidi_params_set_buffer_size = _lib.snd_rawmidi_params_set_buffer_size +snd_rawmidi_params_set_buffer_size.restype = c_int +snd_rawmidi_params_set_buffer_size.argtypes = [POINTER(snd_rawmidi_t), POINTER(snd_rawmidi_params_t), c_size_t] + +# /usr/include/alsa/rawmidi.h:124 +snd_rawmidi_params_get_buffer_size = _lib.snd_rawmidi_params_get_buffer_size +snd_rawmidi_params_get_buffer_size.restype = c_size_t +snd_rawmidi_params_get_buffer_size.argtypes = [POINTER(snd_rawmidi_params_t)] + +# /usr/include/alsa/rawmidi.h:125 +snd_rawmidi_params_set_avail_min = _lib.snd_rawmidi_params_set_avail_min +snd_rawmidi_params_set_avail_min.restype = c_int +snd_rawmidi_params_set_avail_min.argtypes = [POINTER(snd_rawmidi_t), POINTER(snd_rawmidi_params_t), c_size_t] + +# /usr/include/alsa/rawmidi.h:126 +snd_rawmidi_params_get_avail_min = _lib.snd_rawmidi_params_get_avail_min +snd_rawmidi_params_get_avail_min.restype = c_size_t +snd_rawmidi_params_get_avail_min.argtypes = [POINTER(snd_rawmidi_params_t)] + +# /usr/include/alsa/rawmidi.h:127 +snd_rawmidi_params_set_no_active_sensing = _lib.snd_rawmidi_params_set_no_active_sensing +snd_rawmidi_params_set_no_active_sensing.restype = c_int +snd_rawmidi_params_set_no_active_sensing.argtypes = [POINTER(snd_rawmidi_t), POINTER(snd_rawmidi_params_t), c_int] + +# /usr/include/alsa/rawmidi.h:128 +snd_rawmidi_params_get_no_active_sensing = _lib.snd_rawmidi_params_get_no_active_sensing +snd_rawmidi_params_get_no_active_sensing.restype = c_int +snd_rawmidi_params_get_no_active_sensing.argtypes = [POINTER(snd_rawmidi_params_t)] + +# /usr/include/alsa/rawmidi.h:129 +snd_rawmidi_params = _lib.snd_rawmidi_params +snd_rawmidi_params.restype = c_int +snd_rawmidi_params.argtypes = [POINTER(snd_rawmidi_t), POINTER(snd_rawmidi_params_t)] + +# /usr/include/alsa/rawmidi.h:130 +snd_rawmidi_params_current = _lib.snd_rawmidi_params_current +snd_rawmidi_params_current.restype = c_int +snd_rawmidi_params_current.argtypes = [POINTER(snd_rawmidi_t), POINTER(snd_rawmidi_params_t)] + +# /usr/include/alsa/rawmidi.h:131 +snd_rawmidi_status_sizeof = _lib.snd_rawmidi_status_sizeof +snd_rawmidi_status_sizeof.restype = c_size_t +snd_rawmidi_status_sizeof.argtypes = [] + +# /usr/include/alsa/rawmidi.h:137 +snd_rawmidi_status_malloc = _lib.snd_rawmidi_status_malloc +snd_rawmidi_status_malloc.restype = c_int +snd_rawmidi_status_malloc.argtypes = [POINTER(POINTER(snd_rawmidi_status_t))] + +# /usr/include/alsa/rawmidi.h:138 +snd_rawmidi_status_free = _lib.snd_rawmidi_status_free +snd_rawmidi_status_free.restype = None +snd_rawmidi_status_free.argtypes = [POINTER(snd_rawmidi_status_t)] + +# /usr/include/alsa/rawmidi.h:139 +snd_rawmidi_status_copy = _lib.snd_rawmidi_status_copy +snd_rawmidi_status_copy.restype = None +snd_rawmidi_status_copy.argtypes = [POINTER(snd_rawmidi_status_t), POINTER(snd_rawmidi_status_t)] + +# /usr/include/alsa/rawmidi.h:140 +snd_rawmidi_status_get_tstamp = _lib.snd_rawmidi_status_get_tstamp +snd_rawmidi_status_get_tstamp.restype = None +snd_rawmidi_status_get_tstamp.argtypes = [POINTER(snd_rawmidi_status_t), POINTER(snd_htimestamp_t)] + +# /usr/include/alsa/rawmidi.h:141 +snd_rawmidi_status_get_avail = _lib.snd_rawmidi_status_get_avail +snd_rawmidi_status_get_avail.restype = c_size_t +snd_rawmidi_status_get_avail.argtypes = [POINTER(snd_rawmidi_status_t)] + +# /usr/include/alsa/rawmidi.h:142 +snd_rawmidi_status_get_xruns = _lib.snd_rawmidi_status_get_xruns +snd_rawmidi_status_get_xruns.restype = c_size_t +snd_rawmidi_status_get_xruns.argtypes = [POINTER(snd_rawmidi_status_t)] + +# /usr/include/alsa/rawmidi.h:143 +snd_rawmidi_status = _lib.snd_rawmidi_status +snd_rawmidi_status.restype = c_int +snd_rawmidi_status.argtypes = [POINTER(snd_rawmidi_t), POINTER(snd_rawmidi_status_t)] + +# /usr/include/alsa/rawmidi.h:144 +snd_rawmidi_drain = _lib.snd_rawmidi_drain +snd_rawmidi_drain.restype = c_int +snd_rawmidi_drain.argtypes = [POINTER(snd_rawmidi_t)] + +# /usr/include/alsa/rawmidi.h:145 +snd_rawmidi_drop = _lib.snd_rawmidi_drop +snd_rawmidi_drop.restype = c_int +snd_rawmidi_drop.argtypes = [POINTER(snd_rawmidi_t)] + +# /usr/include/alsa/rawmidi.h:146 +snd_rawmidi_write = _lib.snd_rawmidi_write +snd_rawmidi_write.restype = ssize_t +snd_rawmidi_write.argtypes = [POINTER(snd_rawmidi_t), POINTER(None), c_size_t] + +# /usr/include/alsa/rawmidi.h:147 +snd_rawmidi_read = _lib.snd_rawmidi_read +snd_rawmidi_read.restype = ssize_t +snd_rawmidi_read.argtypes = [POINTER(snd_rawmidi_t), POINTER(None), c_size_t] + +# /usr/include/alsa/rawmidi.h:148 +snd_rawmidi_name = _lib.snd_rawmidi_name +snd_rawmidi_name.restype = c_char_p +snd_rawmidi_name.argtypes = [POINTER(snd_rawmidi_t)] + +# /usr/include/alsa/rawmidi.h:149 +snd_rawmidi_type = _lib.snd_rawmidi_type +snd_rawmidi_type.restype = snd_rawmidi_type_t +snd_rawmidi_type.argtypes = [POINTER(snd_rawmidi_t)] + +# /usr/include/alsa/rawmidi.h:150 +snd_rawmidi_stream = _lib.snd_rawmidi_stream +snd_rawmidi_stream.restype = snd_rawmidi_stream_t +snd_rawmidi_stream.argtypes = [POINTER(snd_rawmidi_t)] + +SND_TIMER_DLSYM_VERSION = 0 # /usr/include/alsa/timer.h:42 +SND_TIMER_QUERY_DLSYM_VERSION = 0 # /usr/include/alsa/timer.h:44 +class struct__snd_timer_id(Structure): + __slots__ = [ + ] +struct__snd_timer_id._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_timer_id(Structure): + __slots__ = [ + ] +struct__snd_timer_id._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_timer_id_t = struct__snd_timer_id # /usr/include/alsa/timer.h:47 +class struct__snd_timer_ginfo(Structure): + __slots__ = [ + ] +struct__snd_timer_ginfo._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_timer_ginfo(Structure): + __slots__ = [ + ] +struct__snd_timer_ginfo._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_timer_ginfo_t = struct__snd_timer_ginfo # /usr/include/alsa/timer.h:49 +class struct__snd_timer_gparams(Structure): + __slots__ = [ + ] +struct__snd_timer_gparams._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_timer_gparams(Structure): + __slots__ = [ + ] +struct__snd_timer_gparams._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_timer_gparams_t = struct__snd_timer_gparams # /usr/include/alsa/timer.h:51 +class struct__snd_timer_gstatus(Structure): + __slots__ = [ + ] +struct__snd_timer_gstatus._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_timer_gstatus(Structure): + __slots__ = [ + ] +struct__snd_timer_gstatus._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_timer_gstatus_t = struct__snd_timer_gstatus # /usr/include/alsa/timer.h:53 +class struct__snd_timer_info(Structure): + __slots__ = [ + ] +struct__snd_timer_info._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_timer_info(Structure): + __slots__ = [ + ] +struct__snd_timer_info._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_timer_info_t = struct__snd_timer_info # /usr/include/alsa/timer.h:55 +class struct__snd_timer_params(Structure): + __slots__ = [ + ] +struct__snd_timer_params._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_timer_params(Structure): + __slots__ = [ + ] +struct__snd_timer_params._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_timer_params_t = struct__snd_timer_params # /usr/include/alsa/timer.h:57 +class struct__snd_timer_status(Structure): + __slots__ = [ + ] +struct__snd_timer_status._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_timer_status(Structure): + __slots__ = [ + ] +struct__snd_timer_status._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_timer_status_t = struct__snd_timer_status # /usr/include/alsa/timer.h:59 +enum__snd_timer_class = c_int +SND_TIMER_CLASS_NONE = 1 +SND_TIMER_CLASS_SLAVE = 0 +SND_TIMER_CLASS_GLOBAL = 1 +SND_TIMER_CLASS_CARD = 2 +SND_TIMER_CLASS_PCM = 3 +SND_TIMER_CLASS_LAST = 0 +snd_timer_class_t = enum__snd_timer_class # /usr/include/alsa/timer.h:68 +enum__snd_timer_slave_class = c_int +SND_TIMER_SCLASS_NONE = 0 +SND_TIMER_SCLASS_APPLICATION = 1 +SND_TIMER_SCLASS_SEQUENCER = 2 +SND_TIMER_SCLASS_OSS_SEQUENCER = 3 +SND_TIMER_SCLASS_LAST = 0 +snd_timer_slave_class_t = enum__snd_timer_slave_class # /usr/include/alsa/timer.h:77 +enum__snd_timer_event = c_int +SND_TIMER_EVENT_RESOLUTION = 0 +SND_TIMER_EVENT_TICK = 1 +SND_TIMER_EVENT_START = 2 +SND_TIMER_EVENT_STOP = 3 +SND_TIMER_EVENT_CONTINUE = 4 +SND_TIMER_EVENT_PAUSE = 5 +SND_TIMER_EVENT_EARLY = 6 +SND_TIMER_EVENT_SUSPEND = 7 +SND_TIMER_EVENT_RESUME = 8 +SND_TIMER_EVENT_MSTART = 9 +SND_TIMER_EVENT_MSTOP = 10 +SND_TIMER_EVENT_MCONTINUE = 11 +SND_TIMER_EVENT_MPAUSE = 12 +SND_TIMER_EVENT_MSUSPEND = 13 +SND_TIMER_EVENT_MRESUME = 14 +snd_timer_event_t = enum__snd_timer_event # /usr/include/alsa/timer.h:97 +class struct__snd_timer_read(Structure): + __slots__ = [ + 'resolution', + 'ticks', + ] +struct__snd_timer_read._fields_ = [ + ('resolution', c_uint), + ('ticks', c_uint), +] + +snd_timer_read_t = struct__snd_timer_read # /usr/include/alsa/timer.h:103 +class struct__snd_timer_tread(Structure): + __slots__ = [ + 'event', + 'tstamp', + 'val', + ] +struct__snd_timer_tread._fields_ = [ + ('event', snd_timer_event_t), + ('tstamp', snd_htimestamp_t), + ('val', c_uint), +] + +snd_timer_tread_t = struct__snd_timer_tread # /usr/include/alsa/timer.h:110 +SND_TIMER_GLOBAL_SYSTEM = 0 # /usr/include/alsa/timer.h:113 +SND_TIMER_GLOBAL_RTC = 1 # /usr/include/alsa/timer.h:115 +SND_TIMER_GLOBAL_HPET = 2 # /usr/include/alsa/timer.h:117 +SND_TIMER_OPEN_NONBLOCK = 1 # /usr/include/alsa/timer.h:120 +SND_TIMER_OPEN_TREAD = 2 # /usr/include/alsa/timer.h:122 +enum__snd_timer_type = c_int +SND_TIMER_TYPE_HW = 0 +SND_TIMER_TYPE_SHM = 1 +SND_TIMER_TYPE_INET = 2 +snd_timer_type_t = enum__snd_timer_type # /usr/include/alsa/timer.h:132 +class struct__snd_timer_query(Structure): + __slots__ = [ + ] +struct__snd_timer_query._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_timer_query(Structure): + __slots__ = [ + ] +struct__snd_timer_query._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_timer_query_t = struct__snd_timer_query # /usr/include/alsa/timer.h:135 +class struct__snd_timer(Structure): + __slots__ = [ + ] +struct__snd_timer._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_timer(Structure): + __slots__ = [ + ] +struct__snd_timer._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_timer_t = struct__snd_timer # /usr/include/alsa/timer.h:137 +# /usr/include/alsa/timer.h:140 +snd_timer_query_open = _lib.snd_timer_query_open +snd_timer_query_open.restype = c_int +snd_timer_query_open.argtypes = [POINTER(POINTER(snd_timer_query_t)), c_char_p, c_int] + +# /usr/include/alsa/timer.h:141 +snd_timer_query_open_lconf = _lib.snd_timer_query_open_lconf +snd_timer_query_open_lconf.restype = c_int +snd_timer_query_open_lconf.argtypes = [POINTER(POINTER(snd_timer_query_t)), c_char_p, c_int, POINTER(snd_config_t)] + +# /usr/include/alsa/timer.h:142 +snd_timer_query_close = _lib.snd_timer_query_close +snd_timer_query_close.restype = c_int +snd_timer_query_close.argtypes = [POINTER(snd_timer_query_t)] + +# /usr/include/alsa/timer.h:143 +snd_timer_query_next_device = _lib.snd_timer_query_next_device +snd_timer_query_next_device.restype = c_int +snd_timer_query_next_device.argtypes = [POINTER(snd_timer_query_t), POINTER(snd_timer_id_t)] + +# /usr/include/alsa/timer.h:144 +snd_timer_query_info = _lib.snd_timer_query_info +snd_timer_query_info.restype = c_int +snd_timer_query_info.argtypes = [POINTER(snd_timer_query_t), POINTER(snd_timer_ginfo_t)] + +# /usr/include/alsa/timer.h:145 +snd_timer_query_params = _lib.snd_timer_query_params +snd_timer_query_params.restype = c_int +snd_timer_query_params.argtypes = [POINTER(snd_timer_query_t), POINTER(snd_timer_gparams_t)] + +# /usr/include/alsa/timer.h:146 +snd_timer_query_status = _lib.snd_timer_query_status +snd_timer_query_status.restype = c_int +snd_timer_query_status.argtypes = [POINTER(snd_timer_query_t), POINTER(snd_timer_gstatus_t)] + +# /usr/include/alsa/timer.h:148 +snd_timer_open = _lib.snd_timer_open +snd_timer_open.restype = c_int +snd_timer_open.argtypes = [POINTER(POINTER(snd_timer_t)), c_char_p, c_int] + +# /usr/include/alsa/timer.h:149 +snd_timer_open_lconf = _lib.snd_timer_open_lconf +snd_timer_open_lconf.restype = c_int +snd_timer_open_lconf.argtypes = [POINTER(POINTER(snd_timer_t)), c_char_p, c_int, POINTER(snd_config_t)] + +# /usr/include/alsa/timer.h:150 +snd_timer_close = _lib.snd_timer_close +snd_timer_close.restype = c_int +snd_timer_close.argtypes = [POINTER(snd_timer_t)] + +# /usr/include/alsa/timer.h:151 +snd_async_add_timer_handler = _lib.snd_async_add_timer_handler +snd_async_add_timer_handler.restype = c_int +snd_async_add_timer_handler.argtypes = [POINTER(POINTER(snd_async_handler_t)), POINTER(snd_timer_t), snd_async_callback_t, POINTER(None)] + +# /usr/include/alsa/timer.h:153 +snd_async_handler_get_timer = _lib.snd_async_handler_get_timer +snd_async_handler_get_timer.restype = POINTER(snd_timer_t) +snd_async_handler_get_timer.argtypes = [POINTER(snd_async_handler_t)] + +# /usr/include/alsa/timer.h:154 +snd_timer_poll_descriptors_count = _lib.snd_timer_poll_descriptors_count +snd_timer_poll_descriptors_count.restype = c_int +snd_timer_poll_descriptors_count.argtypes = [POINTER(snd_timer_t)] + +class struct_pollfd(Structure): + __slots__ = [ + ] +struct_pollfd._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/timer.h:155 +snd_timer_poll_descriptors = _lib.snd_timer_poll_descriptors +snd_timer_poll_descriptors.restype = c_int +snd_timer_poll_descriptors.argtypes = [POINTER(snd_timer_t), POINTER(struct_pollfd), c_uint] + +class struct_pollfd(Structure): + __slots__ = [ + ] +struct_pollfd._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/timer.h:156 +snd_timer_poll_descriptors_revents = _lib.snd_timer_poll_descriptors_revents +snd_timer_poll_descriptors_revents.restype = c_int +snd_timer_poll_descriptors_revents.argtypes = [POINTER(snd_timer_t), POINTER(struct_pollfd), c_uint, POINTER(c_ushort)] + +# /usr/include/alsa/timer.h:157 +snd_timer_info = _lib.snd_timer_info +snd_timer_info.restype = c_int +snd_timer_info.argtypes = [POINTER(snd_timer_t), POINTER(snd_timer_info_t)] + +# /usr/include/alsa/timer.h:158 +snd_timer_params = _lib.snd_timer_params +snd_timer_params.restype = c_int +snd_timer_params.argtypes = [POINTER(snd_timer_t), POINTER(snd_timer_params_t)] + +# /usr/include/alsa/timer.h:159 +snd_timer_status = _lib.snd_timer_status +snd_timer_status.restype = c_int +snd_timer_status.argtypes = [POINTER(snd_timer_t), POINTER(snd_timer_status_t)] + +# /usr/include/alsa/timer.h:160 +snd_timer_start = _lib.snd_timer_start +snd_timer_start.restype = c_int +snd_timer_start.argtypes = [POINTER(snd_timer_t)] + +# /usr/include/alsa/timer.h:161 +snd_timer_stop = _lib.snd_timer_stop +snd_timer_stop.restype = c_int +snd_timer_stop.argtypes = [POINTER(snd_timer_t)] + +# /usr/include/alsa/timer.h:162 +snd_timer_continue = _lib.snd_timer_continue +snd_timer_continue.restype = c_int +snd_timer_continue.argtypes = [POINTER(snd_timer_t)] + +# /usr/include/alsa/timer.h:163 +snd_timer_read = _lib.snd_timer_read +snd_timer_read.restype = ssize_t +snd_timer_read.argtypes = [POINTER(snd_timer_t), POINTER(None), c_size_t] + +# /usr/include/alsa/timer.h:165 +snd_timer_id_sizeof = _lib.snd_timer_id_sizeof +snd_timer_id_sizeof.restype = c_size_t +snd_timer_id_sizeof.argtypes = [] + +# /usr/include/alsa/timer.h:168 +snd_timer_id_malloc = _lib.snd_timer_id_malloc +snd_timer_id_malloc.restype = c_int +snd_timer_id_malloc.argtypes = [POINTER(POINTER(snd_timer_id_t))] + +# /usr/include/alsa/timer.h:169 +snd_timer_id_free = _lib.snd_timer_id_free +snd_timer_id_free.restype = None +snd_timer_id_free.argtypes = [POINTER(snd_timer_id_t)] + +# /usr/include/alsa/timer.h:170 +snd_timer_id_copy = _lib.snd_timer_id_copy +snd_timer_id_copy.restype = None +snd_timer_id_copy.argtypes = [POINTER(snd_timer_id_t), POINTER(snd_timer_id_t)] + +# /usr/include/alsa/timer.h:172 +snd_timer_id_set_class = _lib.snd_timer_id_set_class +snd_timer_id_set_class.restype = None +snd_timer_id_set_class.argtypes = [POINTER(snd_timer_id_t), c_int] + +# /usr/include/alsa/timer.h:173 +snd_timer_id_get_class = _lib.snd_timer_id_get_class +snd_timer_id_get_class.restype = c_int +snd_timer_id_get_class.argtypes = [POINTER(snd_timer_id_t)] + +# /usr/include/alsa/timer.h:174 +snd_timer_id_set_sclass = _lib.snd_timer_id_set_sclass +snd_timer_id_set_sclass.restype = None +snd_timer_id_set_sclass.argtypes = [POINTER(snd_timer_id_t), c_int] + +# /usr/include/alsa/timer.h:175 +snd_timer_id_get_sclass = _lib.snd_timer_id_get_sclass +snd_timer_id_get_sclass.restype = c_int +snd_timer_id_get_sclass.argtypes = [POINTER(snd_timer_id_t)] + +# /usr/include/alsa/timer.h:176 +snd_timer_id_set_card = _lib.snd_timer_id_set_card +snd_timer_id_set_card.restype = None +snd_timer_id_set_card.argtypes = [POINTER(snd_timer_id_t), c_int] + +# /usr/include/alsa/timer.h:177 +snd_timer_id_get_card = _lib.snd_timer_id_get_card +snd_timer_id_get_card.restype = c_int +snd_timer_id_get_card.argtypes = [POINTER(snd_timer_id_t)] + +# /usr/include/alsa/timer.h:178 +snd_timer_id_set_device = _lib.snd_timer_id_set_device +snd_timer_id_set_device.restype = None +snd_timer_id_set_device.argtypes = [POINTER(snd_timer_id_t), c_int] + +# /usr/include/alsa/timer.h:179 +snd_timer_id_get_device = _lib.snd_timer_id_get_device +snd_timer_id_get_device.restype = c_int +snd_timer_id_get_device.argtypes = [POINTER(snd_timer_id_t)] + +# /usr/include/alsa/timer.h:180 +snd_timer_id_set_subdevice = _lib.snd_timer_id_set_subdevice +snd_timer_id_set_subdevice.restype = None +snd_timer_id_set_subdevice.argtypes = [POINTER(snd_timer_id_t), c_int] + +# /usr/include/alsa/timer.h:181 +snd_timer_id_get_subdevice = _lib.snd_timer_id_get_subdevice +snd_timer_id_get_subdevice.restype = c_int +snd_timer_id_get_subdevice.argtypes = [POINTER(snd_timer_id_t)] + +# /usr/include/alsa/timer.h:183 +snd_timer_ginfo_sizeof = _lib.snd_timer_ginfo_sizeof +snd_timer_ginfo_sizeof.restype = c_size_t +snd_timer_ginfo_sizeof.argtypes = [] + +# /usr/include/alsa/timer.h:186 +snd_timer_ginfo_malloc = _lib.snd_timer_ginfo_malloc +snd_timer_ginfo_malloc.restype = c_int +snd_timer_ginfo_malloc.argtypes = [POINTER(POINTER(snd_timer_ginfo_t))] + +# /usr/include/alsa/timer.h:187 +snd_timer_ginfo_free = _lib.snd_timer_ginfo_free +snd_timer_ginfo_free.restype = None +snd_timer_ginfo_free.argtypes = [POINTER(snd_timer_ginfo_t)] + +# /usr/include/alsa/timer.h:188 +snd_timer_ginfo_copy = _lib.snd_timer_ginfo_copy +snd_timer_ginfo_copy.restype = None +snd_timer_ginfo_copy.argtypes = [POINTER(snd_timer_ginfo_t), POINTER(snd_timer_ginfo_t)] + +# /usr/include/alsa/timer.h:190 +snd_timer_ginfo_set_tid = _lib.snd_timer_ginfo_set_tid +snd_timer_ginfo_set_tid.restype = c_int +snd_timer_ginfo_set_tid.argtypes = [POINTER(snd_timer_ginfo_t), POINTER(snd_timer_id_t)] + +# /usr/include/alsa/timer.h:191 +snd_timer_ginfo_get_tid = _lib.snd_timer_ginfo_get_tid +snd_timer_ginfo_get_tid.restype = POINTER(snd_timer_id_t) +snd_timer_ginfo_get_tid.argtypes = [POINTER(snd_timer_ginfo_t)] + +# /usr/include/alsa/timer.h:192 +snd_timer_ginfo_get_flags = _lib.snd_timer_ginfo_get_flags +snd_timer_ginfo_get_flags.restype = c_uint +snd_timer_ginfo_get_flags.argtypes = [POINTER(snd_timer_ginfo_t)] + +# /usr/include/alsa/timer.h:193 +snd_timer_ginfo_get_card = _lib.snd_timer_ginfo_get_card +snd_timer_ginfo_get_card.restype = c_int +snd_timer_ginfo_get_card.argtypes = [POINTER(snd_timer_ginfo_t)] + +# /usr/include/alsa/timer.h:194 +snd_timer_ginfo_get_id = _lib.snd_timer_ginfo_get_id +snd_timer_ginfo_get_id.restype = c_char_p +snd_timer_ginfo_get_id.argtypes = [POINTER(snd_timer_ginfo_t)] + +# /usr/include/alsa/timer.h:195 +snd_timer_ginfo_get_name = _lib.snd_timer_ginfo_get_name +snd_timer_ginfo_get_name.restype = c_char_p +snd_timer_ginfo_get_name.argtypes = [POINTER(snd_timer_ginfo_t)] + +# /usr/include/alsa/timer.h:196 +snd_timer_ginfo_get_resolution = _lib.snd_timer_ginfo_get_resolution +snd_timer_ginfo_get_resolution.restype = c_ulong +snd_timer_ginfo_get_resolution.argtypes = [POINTER(snd_timer_ginfo_t)] + +# /usr/include/alsa/timer.h:197 +snd_timer_ginfo_get_resolution_min = _lib.snd_timer_ginfo_get_resolution_min +snd_timer_ginfo_get_resolution_min.restype = c_ulong +snd_timer_ginfo_get_resolution_min.argtypes = [POINTER(snd_timer_ginfo_t)] + +# /usr/include/alsa/timer.h:198 +snd_timer_ginfo_get_resolution_max = _lib.snd_timer_ginfo_get_resolution_max +snd_timer_ginfo_get_resolution_max.restype = c_ulong +snd_timer_ginfo_get_resolution_max.argtypes = [POINTER(snd_timer_ginfo_t)] + +# /usr/include/alsa/timer.h:199 +snd_timer_ginfo_get_clients = _lib.snd_timer_ginfo_get_clients +snd_timer_ginfo_get_clients.restype = c_uint +snd_timer_ginfo_get_clients.argtypes = [POINTER(snd_timer_ginfo_t)] + +# /usr/include/alsa/timer.h:201 +snd_timer_info_sizeof = _lib.snd_timer_info_sizeof +snd_timer_info_sizeof.restype = c_size_t +snd_timer_info_sizeof.argtypes = [] + +# /usr/include/alsa/timer.h:204 +snd_timer_info_malloc = _lib.snd_timer_info_malloc +snd_timer_info_malloc.restype = c_int +snd_timer_info_malloc.argtypes = [POINTER(POINTER(snd_timer_info_t))] + +# /usr/include/alsa/timer.h:205 +snd_timer_info_free = _lib.snd_timer_info_free +snd_timer_info_free.restype = None +snd_timer_info_free.argtypes = [POINTER(snd_timer_info_t)] + +# /usr/include/alsa/timer.h:206 +snd_timer_info_copy = _lib.snd_timer_info_copy +snd_timer_info_copy.restype = None +snd_timer_info_copy.argtypes = [POINTER(snd_timer_info_t), POINTER(snd_timer_info_t)] + +# /usr/include/alsa/timer.h:208 +snd_timer_info_is_slave = _lib.snd_timer_info_is_slave +snd_timer_info_is_slave.restype = c_int +snd_timer_info_is_slave.argtypes = [POINTER(snd_timer_info_t)] + +# /usr/include/alsa/timer.h:209 +snd_timer_info_get_card = _lib.snd_timer_info_get_card +snd_timer_info_get_card.restype = c_int +snd_timer_info_get_card.argtypes = [POINTER(snd_timer_info_t)] + +# /usr/include/alsa/timer.h:210 +snd_timer_info_get_id = _lib.snd_timer_info_get_id +snd_timer_info_get_id.restype = c_char_p +snd_timer_info_get_id.argtypes = [POINTER(snd_timer_info_t)] + +# /usr/include/alsa/timer.h:211 +snd_timer_info_get_name = _lib.snd_timer_info_get_name +snd_timer_info_get_name.restype = c_char_p +snd_timer_info_get_name.argtypes = [POINTER(snd_timer_info_t)] + +# /usr/include/alsa/timer.h:212 +snd_timer_info_get_resolution = _lib.snd_timer_info_get_resolution +snd_timer_info_get_resolution.restype = c_long +snd_timer_info_get_resolution.argtypes = [POINTER(snd_timer_info_t)] + +# /usr/include/alsa/timer.h:214 +snd_timer_params_sizeof = _lib.snd_timer_params_sizeof +snd_timer_params_sizeof.restype = c_size_t +snd_timer_params_sizeof.argtypes = [] + +# /usr/include/alsa/timer.h:217 +snd_timer_params_malloc = _lib.snd_timer_params_malloc +snd_timer_params_malloc.restype = c_int +snd_timer_params_malloc.argtypes = [POINTER(POINTER(snd_timer_params_t))] + +# /usr/include/alsa/timer.h:218 +snd_timer_params_free = _lib.snd_timer_params_free +snd_timer_params_free.restype = None +snd_timer_params_free.argtypes = [POINTER(snd_timer_params_t)] + +# /usr/include/alsa/timer.h:219 +snd_timer_params_copy = _lib.snd_timer_params_copy +snd_timer_params_copy.restype = None +snd_timer_params_copy.argtypes = [POINTER(snd_timer_params_t), POINTER(snd_timer_params_t)] + +# /usr/include/alsa/timer.h:221 +snd_timer_params_set_auto_start = _lib.snd_timer_params_set_auto_start +snd_timer_params_set_auto_start.restype = c_int +snd_timer_params_set_auto_start.argtypes = [POINTER(snd_timer_params_t), c_int] + +# /usr/include/alsa/timer.h:222 +snd_timer_params_get_auto_start = _lib.snd_timer_params_get_auto_start +snd_timer_params_get_auto_start.restype = c_int +snd_timer_params_get_auto_start.argtypes = [POINTER(snd_timer_params_t)] + +# /usr/include/alsa/timer.h:223 +snd_timer_params_set_exclusive = _lib.snd_timer_params_set_exclusive +snd_timer_params_set_exclusive.restype = c_int +snd_timer_params_set_exclusive.argtypes = [POINTER(snd_timer_params_t), c_int] + +# /usr/include/alsa/timer.h:224 +snd_timer_params_get_exclusive = _lib.snd_timer_params_get_exclusive +snd_timer_params_get_exclusive.restype = c_int +snd_timer_params_get_exclusive.argtypes = [POINTER(snd_timer_params_t)] + +# /usr/include/alsa/timer.h:225 +snd_timer_params_set_early_event = _lib.snd_timer_params_set_early_event +snd_timer_params_set_early_event.restype = c_int +snd_timer_params_set_early_event.argtypes = [POINTER(snd_timer_params_t), c_int] + +# /usr/include/alsa/timer.h:226 +snd_timer_params_get_early_event = _lib.snd_timer_params_get_early_event +snd_timer_params_get_early_event.restype = c_int +snd_timer_params_get_early_event.argtypes = [POINTER(snd_timer_params_t)] + +# /usr/include/alsa/timer.h:227 +snd_timer_params_set_ticks = _lib.snd_timer_params_set_ticks +snd_timer_params_set_ticks.restype = None +snd_timer_params_set_ticks.argtypes = [POINTER(snd_timer_params_t), c_long] + +# /usr/include/alsa/timer.h:228 +snd_timer_params_get_ticks = _lib.snd_timer_params_get_ticks +snd_timer_params_get_ticks.restype = c_long +snd_timer_params_get_ticks.argtypes = [POINTER(snd_timer_params_t)] + +# /usr/include/alsa/timer.h:229 +snd_timer_params_set_queue_size = _lib.snd_timer_params_set_queue_size +snd_timer_params_set_queue_size.restype = None +snd_timer_params_set_queue_size.argtypes = [POINTER(snd_timer_params_t), c_long] + +# /usr/include/alsa/timer.h:230 +snd_timer_params_get_queue_size = _lib.snd_timer_params_get_queue_size +snd_timer_params_get_queue_size.restype = c_long +snd_timer_params_get_queue_size.argtypes = [POINTER(snd_timer_params_t)] + +# /usr/include/alsa/timer.h:231 +snd_timer_params_set_filter = _lib.snd_timer_params_set_filter +snd_timer_params_set_filter.restype = None +snd_timer_params_set_filter.argtypes = [POINTER(snd_timer_params_t), c_uint] + +# /usr/include/alsa/timer.h:232 +snd_timer_params_get_filter = _lib.snd_timer_params_get_filter +snd_timer_params_get_filter.restype = c_uint +snd_timer_params_get_filter.argtypes = [POINTER(snd_timer_params_t)] + +# /usr/include/alsa/timer.h:234 +snd_timer_status_sizeof = _lib.snd_timer_status_sizeof +snd_timer_status_sizeof.restype = c_size_t +snd_timer_status_sizeof.argtypes = [] + +# /usr/include/alsa/timer.h:237 +snd_timer_status_malloc = _lib.snd_timer_status_malloc +snd_timer_status_malloc.restype = c_int +snd_timer_status_malloc.argtypes = [POINTER(POINTER(snd_timer_status_t))] + +# /usr/include/alsa/timer.h:238 +snd_timer_status_free = _lib.snd_timer_status_free +snd_timer_status_free.restype = None +snd_timer_status_free.argtypes = [POINTER(snd_timer_status_t)] + +# /usr/include/alsa/timer.h:239 +snd_timer_status_copy = _lib.snd_timer_status_copy +snd_timer_status_copy.restype = None +snd_timer_status_copy.argtypes = [POINTER(snd_timer_status_t), POINTER(snd_timer_status_t)] + +# /usr/include/alsa/timer.h:241 +snd_timer_status_get_timestamp = _lib.snd_timer_status_get_timestamp +snd_timer_status_get_timestamp.restype = snd_htimestamp_t +snd_timer_status_get_timestamp.argtypes = [POINTER(snd_timer_status_t)] + +# /usr/include/alsa/timer.h:242 +snd_timer_status_get_resolution = _lib.snd_timer_status_get_resolution +snd_timer_status_get_resolution.restype = c_long +snd_timer_status_get_resolution.argtypes = [POINTER(snd_timer_status_t)] + +# /usr/include/alsa/timer.h:243 +snd_timer_status_get_lost = _lib.snd_timer_status_get_lost +snd_timer_status_get_lost.restype = c_long +snd_timer_status_get_lost.argtypes = [POINTER(snd_timer_status_t)] + +# /usr/include/alsa/timer.h:244 +snd_timer_status_get_overrun = _lib.snd_timer_status_get_overrun +snd_timer_status_get_overrun.restype = c_long +snd_timer_status_get_overrun.argtypes = [POINTER(snd_timer_status_t)] + +# /usr/include/alsa/timer.h:245 +snd_timer_status_get_queue = _lib.snd_timer_status_get_queue +snd_timer_status_get_queue.restype = c_long +snd_timer_status_get_queue.argtypes = [POINTER(snd_timer_status_t)] + +# /usr/include/alsa/timer.h:248 +snd_timer_info_get_ticks = _lib.snd_timer_info_get_ticks +snd_timer_info_get_ticks.restype = c_long +snd_timer_info_get_ticks.argtypes = [POINTER(snd_timer_info_t)] + +SND_HWDEP_DLSYM_VERSION = 0 # /usr/include/alsa/hwdep.h:42 +class struct__snd_hwdep_info(Structure): + __slots__ = [ + ] +struct__snd_hwdep_info._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_hwdep_info(Structure): + __slots__ = [ + ] +struct__snd_hwdep_info._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_hwdep_info_t = struct__snd_hwdep_info # /usr/include/alsa/hwdep.h:45 +class struct__snd_hwdep_dsp_status(Structure): + __slots__ = [ + ] +struct__snd_hwdep_dsp_status._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_hwdep_dsp_status(Structure): + __slots__ = [ + ] +struct__snd_hwdep_dsp_status._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_hwdep_dsp_status_t = struct__snd_hwdep_dsp_status # /usr/include/alsa/hwdep.h:48 +class struct__snd_hwdep_dsp_image(Structure): + __slots__ = [ + ] +struct__snd_hwdep_dsp_image._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_hwdep_dsp_image(Structure): + __slots__ = [ + ] +struct__snd_hwdep_dsp_image._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_hwdep_dsp_image_t = struct__snd_hwdep_dsp_image # /usr/include/alsa/hwdep.h:51 +enum__snd_hwdep_iface = c_int +SND_HWDEP_IFACE_OPL2 = 0 +SND_HWDEP_IFACE_OPL3 = 1 +SND_HWDEP_IFACE_OPL4 = 2 +SND_HWDEP_IFACE_SB16CSP = 3 +SND_HWDEP_IFACE_EMU10K1 = 4 +SND_HWDEP_IFACE_YSS225 = 5 +SND_HWDEP_IFACE_ICS2115 = 6 +SND_HWDEP_IFACE_SSCAPE = 7 +SND_HWDEP_IFACE_VX = 8 +SND_HWDEP_IFACE_MIXART = 9 +SND_HWDEP_IFACE_USX2Y = 10 +SND_HWDEP_IFACE_EMUX_WAVETABLE = 11 +SND_HWDEP_IFACE_BLUETOOTH = 12 +SND_HWDEP_IFACE_USX2Y_PCM = 13 +SND_HWDEP_IFACE_PCXHR = 14 +SND_HWDEP_IFACE_SB_RC = 15 +SND_HWDEP_IFACE_LAST = 0 +snd_hwdep_iface_t = enum__snd_hwdep_iface # /usr/include/alsa/hwdep.h:73 +SND_HWDEP_OPEN_READ = 0 # /usr/include/alsa/hwdep.h:76 +SND_HWDEP_OPEN_WRITE = 1 # /usr/include/alsa/hwdep.h:78 +SND_HWDEP_OPEN_DUPLEX = 2 # /usr/include/alsa/hwdep.h:80 +SND_HWDEP_OPEN_NONBLOCK = 2048 # /usr/include/alsa/hwdep.h:82 +enum__snd_hwdep_type = c_int +SND_HWDEP_TYPE_HW = 1 +SND_HWDEP_TYPE_SHM = 2 +SND_HWDEP_TYPE_INET = 3 +snd_hwdep_type_t = enum__snd_hwdep_type # /usr/include/alsa/hwdep.h:92 +class struct__snd_hwdep(Structure): + __slots__ = [ + ] +struct__snd_hwdep._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_hwdep(Structure): + __slots__ = [ + ] +struct__snd_hwdep._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_hwdep_t = struct__snd_hwdep # /usr/include/alsa/hwdep.h:95 +# /usr/include/alsa/hwdep.h:97 +snd_hwdep_open = _lib.snd_hwdep_open +snd_hwdep_open.restype = c_int +snd_hwdep_open.argtypes = [POINTER(POINTER(snd_hwdep_t)), c_char_p, c_int] + +# /usr/include/alsa/hwdep.h:98 +snd_hwdep_close = _lib.snd_hwdep_close +snd_hwdep_close.restype = c_int +snd_hwdep_close.argtypes = [POINTER(snd_hwdep_t)] + +class struct_pollfd(Structure): + __slots__ = [ + ] +struct_pollfd._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/hwdep.h:99 +snd_hwdep_poll_descriptors = _lib.snd_hwdep_poll_descriptors +snd_hwdep_poll_descriptors.restype = c_int +snd_hwdep_poll_descriptors.argtypes = [POINTER(snd_hwdep_t), POINTER(struct_pollfd), c_uint] + +class struct_pollfd(Structure): + __slots__ = [ + ] +struct_pollfd._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/hwdep.h:100 +snd_hwdep_poll_descriptors_revents = _lib.snd_hwdep_poll_descriptors_revents +snd_hwdep_poll_descriptors_revents.restype = c_int +snd_hwdep_poll_descriptors_revents.argtypes = [POINTER(snd_hwdep_t), POINTER(struct_pollfd), c_uint, POINTER(c_ushort)] + +# /usr/include/alsa/hwdep.h:101 +snd_hwdep_nonblock = _lib.snd_hwdep_nonblock +snd_hwdep_nonblock.restype = c_int +snd_hwdep_nonblock.argtypes = [POINTER(snd_hwdep_t), c_int] + +# /usr/include/alsa/hwdep.h:102 +snd_hwdep_info = _lib.snd_hwdep_info +snd_hwdep_info.restype = c_int +snd_hwdep_info.argtypes = [POINTER(snd_hwdep_t), POINTER(snd_hwdep_info_t)] + +# /usr/include/alsa/hwdep.h:103 +snd_hwdep_dsp_status = _lib.snd_hwdep_dsp_status +snd_hwdep_dsp_status.restype = c_int +snd_hwdep_dsp_status.argtypes = [POINTER(snd_hwdep_t), POINTER(snd_hwdep_dsp_status_t)] + +# /usr/include/alsa/hwdep.h:104 +snd_hwdep_dsp_load = _lib.snd_hwdep_dsp_load +snd_hwdep_dsp_load.restype = c_int +snd_hwdep_dsp_load.argtypes = [POINTER(snd_hwdep_t), POINTER(snd_hwdep_dsp_image_t)] + +# /usr/include/alsa/hwdep.h:105 +snd_hwdep_ioctl = _lib.snd_hwdep_ioctl +snd_hwdep_ioctl.restype = c_int +snd_hwdep_ioctl.argtypes = [POINTER(snd_hwdep_t), c_uint, POINTER(None)] + +# /usr/include/alsa/hwdep.h:106 +snd_hwdep_write = _lib.snd_hwdep_write +snd_hwdep_write.restype = ssize_t +snd_hwdep_write.argtypes = [POINTER(snd_hwdep_t), POINTER(None), c_size_t] + +# /usr/include/alsa/hwdep.h:107 +snd_hwdep_read = _lib.snd_hwdep_read +snd_hwdep_read.restype = ssize_t +snd_hwdep_read.argtypes = [POINTER(snd_hwdep_t), POINTER(None), c_size_t] + +# /usr/include/alsa/hwdep.h:109 +snd_hwdep_info_sizeof = _lib.snd_hwdep_info_sizeof +snd_hwdep_info_sizeof.restype = c_size_t +snd_hwdep_info_sizeof.argtypes = [] + +# /usr/include/alsa/hwdep.h:112 +snd_hwdep_info_malloc = _lib.snd_hwdep_info_malloc +snd_hwdep_info_malloc.restype = c_int +snd_hwdep_info_malloc.argtypes = [POINTER(POINTER(snd_hwdep_info_t))] + +# /usr/include/alsa/hwdep.h:113 +snd_hwdep_info_free = _lib.snd_hwdep_info_free +snd_hwdep_info_free.restype = None +snd_hwdep_info_free.argtypes = [POINTER(snd_hwdep_info_t)] + +# /usr/include/alsa/hwdep.h:114 +snd_hwdep_info_copy = _lib.snd_hwdep_info_copy +snd_hwdep_info_copy.restype = None +snd_hwdep_info_copy.argtypes = [POINTER(snd_hwdep_info_t), POINTER(snd_hwdep_info_t)] + +# /usr/include/alsa/hwdep.h:116 +snd_hwdep_info_get_device = _lib.snd_hwdep_info_get_device +snd_hwdep_info_get_device.restype = c_uint +snd_hwdep_info_get_device.argtypes = [POINTER(snd_hwdep_info_t)] + +# /usr/include/alsa/hwdep.h:117 +snd_hwdep_info_get_card = _lib.snd_hwdep_info_get_card +snd_hwdep_info_get_card.restype = c_int +snd_hwdep_info_get_card.argtypes = [POINTER(snd_hwdep_info_t)] + +# /usr/include/alsa/hwdep.h:118 +snd_hwdep_info_get_id = _lib.snd_hwdep_info_get_id +snd_hwdep_info_get_id.restype = c_char_p +snd_hwdep_info_get_id.argtypes = [POINTER(snd_hwdep_info_t)] + +# /usr/include/alsa/hwdep.h:119 +snd_hwdep_info_get_name = _lib.snd_hwdep_info_get_name +snd_hwdep_info_get_name.restype = c_char_p +snd_hwdep_info_get_name.argtypes = [POINTER(snd_hwdep_info_t)] + +# /usr/include/alsa/hwdep.h:120 +snd_hwdep_info_get_iface = _lib.snd_hwdep_info_get_iface +snd_hwdep_info_get_iface.restype = snd_hwdep_iface_t +snd_hwdep_info_get_iface.argtypes = [POINTER(snd_hwdep_info_t)] + +# /usr/include/alsa/hwdep.h:121 +snd_hwdep_info_set_device = _lib.snd_hwdep_info_set_device +snd_hwdep_info_set_device.restype = None +snd_hwdep_info_set_device.argtypes = [POINTER(snd_hwdep_info_t), c_uint] + +# /usr/include/alsa/hwdep.h:123 +snd_hwdep_dsp_status_sizeof = _lib.snd_hwdep_dsp_status_sizeof +snd_hwdep_dsp_status_sizeof.restype = c_size_t +snd_hwdep_dsp_status_sizeof.argtypes = [] + +# /usr/include/alsa/hwdep.h:126 +snd_hwdep_dsp_status_malloc = _lib.snd_hwdep_dsp_status_malloc +snd_hwdep_dsp_status_malloc.restype = c_int +snd_hwdep_dsp_status_malloc.argtypes = [POINTER(POINTER(snd_hwdep_dsp_status_t))] + +# /usr/include/alsa/hwdep.h:127 +snd_hwdep_dsp_status_free = _lib.snd_hwdep_dsp_status_free +snd_hwdep_dsp_status_free.restype = None +snd_hwdep_dsp_status_free.argtypes = [POINTER(snd_hwdep_dsp_status_t)] + +# /usr/include/alsa/hwdep.h:128 +snd_hwdep_dsp_status_copy = _lib.snd_hwdep_dsp_status_copy +snd_hwdep_dsp_status_copy.restype = None +snd_hwdep_dsp_status_copy.argtypes = [POINTER(snd_hwdep_dsp_status_t), POINTER(snd_hwdep_dsp_status_t)] + +# /usr/include/alsa/hwdep.h:130 +snd_hwdep_dsp_status_get_version = _lib.snd_hwdep_dsp_status_get_version +snd_hwdep_dsp_status_get_version.restype = c_uint +snd_hwdep_dsp_status_get_version.argtypes = [POINTER(snd_hwdep_dsp_status_t)] + +# /usr/include/alsa/hwdep.h:131 +snd_hwdep_dsp_status_get_id = _lib.snd_hwdep_dsp_status_get_id +snd_hwdep_dsp_status_get_id.restype = c_char_p +snd_hwdep_dsp_status_get_id.argtypes = [POINTER(snd_hwdep_dsp_status_t)] + +# /usr/include/alsa/hwdep.h:132 +snd_hwdep_dsp_status_get_num_dsps = _lib.snd_hwdep_dsp_status_get_num_dsps +snd_hwdep_dsp_status_get_num_dsps.restype = c_uint +snd_hwdep_dsp_status_get_num_dsps.argtypes = [POINTER(snd_hwdep_dsp_status_t)] + +# /usr/include/alsa/hwdep.h:133 +snd_hwdep_dsp_status_get_dsp_loaded = _lib.snd_hwdep_dsp_status_get_dsp_loaded +snd_hwdep_dsp_status_get_dsp_loaded.restype = c_uint +snd_hwdep_dsp_status_get_dsp_loaded.argtypes = [POINTER(snd_hwdep_dsp_status_t)] + +# /usr/include/alsa/hwdep.h:134 +snd_hwdep_dsp_status_get_chip_ready = _lib.snd_hwdep_dsp_status_get_chip_ready +snd_hwdep_dsp_status_get_chip_ready.restype = c_uint +snd_hwdep_dsp_status_get_chip_ready.argtypes = [POINTER(snd_hwdep_dsp_status_t)] + +# /usr/include/alsa/hwdep.h:136 +snd_hwdep_dsp_image_sizeof = _lib.snd_hwdep_dsp_image_sizeof +snd_hwdep_dsp_image_sizeof.restype = c_size_t +snd_hwdep_dsp_image_sizeof.argtypes = [] + +# /usr/include/alsa/hwdep.h:139 +snd_hwdep_dsp_image_malloc = _lib.snd_hwdep_dsp_image_malloc +snd_hwdep_dsp_image_malloc.restype = c_int +snd_hwdep_dsp_image_malloc.argtypes = [POINTER(POINTER(snd_hwdep_dsp_image_t))] + +# /usr/include/alsa/hwdep.h:140 +snd_hwdep_dsp_image_free = _lib.snd_hwdep_dsp_image_free +snd_hwdep_dsp_image_free.restype = None +snd_hwdep_dsp_image_free.argtypes = [POINTER(snd_hwdep_dsp_image_t)] + +# /usr/include/alsa/hwdep.h:141 +snd_hwdep_dsp_image_copy = _lib.snd_hwdep_dsp_image_copy +snd_hwdep_dsp_image_copy.restype = None +snd_hwdep_dsp_image_copy.argtypes = [POINTER(snd_hwdep_dsp_image_t), POINTER(snd_hwdep_dsp_image_t)] + +# /usr/include/alsa/hwdep.h:143 +snd_hwdep_dsp_image_get_index = _lib.snd_hwdep_dsp_image_get_index +snd_hwdep_dsp_image_get_index.restype = c_uint +snd_hwdep_dsp_image_get_index.argtypes = [POINTER(snd_hwdep_dsp_image_t)] + +# /usr/include/alsa/hwdep.h:144 +snd_hwdep_dsp_image_get_name = _lib.snd_hwdep_dsp_image_get_name +snd_hwdep_dsp_image_get_name.restype = c_char_p +snd_hwdep_dsp_image_get_name.argtypes = [POINTER(snd_hwdep_dsp_image_t)] + +# /usr/include/alsa/hwdep.h:145 +snd_hwdep_dsp_image_get_image = _lib.snd_hwdep_dsp_image_get_image +snd_hwdep_dsp_image_get_image.restype = POINTER(c_void) +snd_hwdep_dsp_image_get_image.argtypes = [POINTER(snd_hwdep_dsp_image_t)] + +# /usr/include/alsa/hwdep.h:146 +snd_hwdep_dsp_image_get_length = _lib.snd_hwdep_dsp_image_get_length +snd_hwdep_dsp_image_get_length.restype = c_size_t +snd_hwdep_dsp_image_get_length.argtypes = [POINTER(snd_hwdep_dsp_image_t)] + +# /usr/include/alsa/hwdep.h:148 +snd_hwdep_dsp_image_set_index = _lib.snd_hwdep_dsp_image_set_index +snd_hwdep_dsp_image_set_index.restype = None +snd_hwdep_dsp_image_set_index.argtypes = [POINTER(snd_hwdep_dsp_image_t), c_uint] + +# /usr/include/alsa/hwdep.h:149 +snd_hwdep_dsp_image_set_name = _lib.snd_hwdep_dsp_image_set_name +snd_hwdep_dsp_image_set_name.restype = None +snd_hwdep_dsp_image_set_name.argtypes = [POINTER(snd_hwdep_dsp_image_t), c_char_p] + +# /usr/include/alsa/hwdep.h:150 +snd_hwdep_dsp_image_set_image = _lib.snd_hwdep_dsp_image_set_image +snd_hwdep_dsp_image_set_image.restype = None +snd_hwdep_dsp_image_set_image.argtypes = [POINTER(snd_hwdep_dsp_image_t), POINTER(None)] + +# /usr/include/alsa/hwdep.h:151 +snd_hwdep_dsp_image_set_length = _lib.snd_hwdep_dsp_image_set_length +snd_hwdep_dsp_image_set_length.restype = None +snd_hwdep_dsp_image_set_length.argtypes = [POINTER(snd_hwdep_dsp_image_t), c_size_t] + +SND_CONTROL_DLSYM_VERSION = 0 # /usr/include/alsa/control.h:43 +class struct_snd_aes_iec958(Structure): + __slots__ = [ + 'status', + 'subcode', + 'pad', + 'dig_subframe', + ] +struct_snd_aes_iec958._fields_ = [ + ('status', c_ubyte * 24), + ('subcode', c_ubyte * 147), + ('pad', c_ubyte), + ('dig_subframe', c_ubyte * 4), +] + +snd_aes_iec958_t = struct_snd_aes_iec958 # /usr/include/alsa/control.h:51 +class struct__snd_ctl_card_info(Structure): + __slots__ = [ + ] +struct__snd_ctl_card_info._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_ctl_card_info(Structure): + __slots__ = [ + ] +struct__snd_ctl_card_info._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_ctl_card_info_t = struct__snd_ctl_card_info # /usr/include/alsa/control.h:54 +class struct__snd_ctl_elem_id(Structure): + __slots__ = [ + ] +struct__snd_ctl_elem_id._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_ctl_elem_id(Structure): + __slots__ = [ + ] +struct__snd_ctl_elem_id._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_ctl_elem_id_t = struct__snd_ctl_elem_id # /usr/include/alsa/control.h:57 +class struct__snd_ctl_elem_list(Structure): + __slots__ = [ + ] +struct__snd_ctl_elem_list._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_ctl_elem_list(Structure): + __slots__ = [ + ] +struct__snd_ctl_elem_list._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_ctl_elem_list_t = struct__snd_ctl_elem_list # /usr/include/alsa/control.h:60 +class struct__snd_ctl_elem_info(Structure): + __slots__ = [ + ] +struct__snd_ctl_elem_info._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_ctl_elem_info(Structure): + __slots__ = [ + ] +struct__snd_ctl_elem_info._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_ctl_elem_info_t = struct__snd_ctl_elem_info # /usr/include/alsa/control.h:63 +class struct__snd_ctl_elem_value(Structure): + __slots__ = [ + ] +struct__snd_ctl_elem_value._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_ctl_elem_value(Structure): + __slots__ = [ + ] +struct__snd_ctl_elem_value._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_ctl_elem_value_t = struct__snd_ctl_elem_value # /usr/include/alsa/control.h:66 +class struct__snd_ctl_event(Structure): + __slots__ = [ + ] +struct__snd_ctl_event._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_ctl_event(Structure): + __slots__ = [ + ] +struct__snd_ctl_event._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_ctl_event_t = struct__snd_ctl_event # /usr/include/alsa/control.h:69 +enum__snd_ctl_elem_type = c_int +SND_CTL_ELEM_TYPE_NONE = 0 +SND_CTL_ELEM_TYPE_BOOLEAN = 1 +SND_CTL_ELEM_TYPE_INTEGER = 2 +SND_CTL_ELEM_TYPE_ENUMERATED = 3 +SND_CTL_ELEM_TYPE_BYTES = 4 +SND_CTL_ELEM_TYPE_IEC958 = 5 +SND_CTL_ELEM_TYPE_INTEGER64 = 6 +SND_CTL_ELEM_TYPE_LAST = 0 +snd_ctl_elem_type_t = enum__snd_ctl_elem_type # /usr/include/alsa/control.h:88 +enum__snd_ctl_elem_iface = c_int +SND_CTL_ELEM_IFACE_CARD = 0 +SND_CTL_ELEM_IFACE_HWDEP = 1 +SND_CTL_ELEM_IFACE_MIXER = 2 +SND_CTL_ELEM_IFACE_PCM = 3 +SND_CTL_ELEM_IFACE_RAWMIDI = 4 +SND_CTL_ELEM_IFACE_TIMER = 5 +SND_CTL_ELEM_IFACE_SEQUENCER = 6 +SND_CTL_ELEM_IFACE_LAST = 0 +snd_ctl_elem_iface_t = enum__snd_ctl_elem_iface # /usr/include/alsa/control.h:107 +enum__snd_ctl_event_type = c_int +SND_CTL_EVENT_ELEM = 0 +SND_CTL_EVENT_LAST = 0 +snd_ctl_event_type_t = enum__snd_ctl_event_type # /usr/include/alsa/control.h:114 +SND_CTL_EVENT_MASK_REMOVE = -1 # /usr/include/alsa/control.h:118 +SND_CTL_EVENT_MASK_VALUE = 1 # /usr/include/alsa/control.h:120 +SND_CTL_EVENT_MASK_INFO = 2 # /usr/include/alsa/control.h:122 +SND_CTL_EVENT_MASK_ADD = 4 # /usr/include/alsa/control.h:124 +SND_CTL_EVENT_MASK_TLV = 8 # /usr/include/alsa/control.h:126 +SND_CTL_POWER_MASK = 65280 # /usr/include/alsa/control.h:155 +SND_CTL_POWER_D0 = 0 # /usr/include/alsa/control.h:157 +SND_CTL_POWER_D1 = 256 # /usr/include/alsa/control.h:159 +SND_CTL_POWER_D2 = 512 # /usr/include/alsa/control.h:161 +SND_CTL_POWER_D3 = 768 # /usr/include/alsa/control.h:163 +SND_CTL_POWER_D3hot = 768 # /usr/include/alsa/control.h:165 +SND_CTL_POWER_D3cold = 769 # /usr/include/alsa/control.h:167 +SND_CTL_TLVT_CONTAINER = 0 # /usr/include/alsa/control.h:170 +SND_CTL_TLVT_DB_SCALE = 1 # /usr/include/alsa/control.h:172 +SND_CTL_TLVT_DB_LINEAR = 2 # /usr/include/alsa/control.h:174 +SND_CTL_TLVT_DB_RANGE = 3 # /usr/include/alsa/control.h:176 +SND_CTL_TLV_DB_GAIN_MUTE = -9999999 # /usr/include/alsa/control.h:179 +enum__snd_ctl_type = c_int +SND_CTL_TYPE_HW = 1 +SND_CTL_TYPE_SHM = 2 +SND_CTL_TYPE_INET = 3 +SND_CTL_TYPE_EXT = 4 +snd_ctl_type_t = enum__snd_ctl_type # /usr/include/alsa/control.h:191 +SND_CTL_NONBLOCK = 1 # /usr/include/alsa/control.h:194 +SND_CTL_ASYNC = 2 # /usr/include/alsa/control.h:197 +SND_CTL_READONLY = 4 # /usr/include/alsa/control.h:200 +class struct__snd_ctl(Structure): + __slots__ = [ + ] +struct__snd_ctl._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_ctl(Structure): + __slots__ = [ + ] +struct__snd_ctl._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_ctl_t = struct__snd_ctl # /usr/include/alsa/control.h:203 +SND_SCTL_NOFREE = 1 # /usr/include/alsa/control.h:206 +class struct__snd_sctl(Structure): + __slots__ = [ + ] +struct__snd_sctl._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_sctl(Structure): + __slots__ = [ + ] +struct__snd_sctl._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_sctl_t = struct__snd_sctl # /usr/include/alsa/control.h:209 +# /usr/include/alsa/control.h:211 +snd_card_load = _lib.snd_card_load +snd_card_load.restype = c_int +snd_card_load.argtypes = [c_int] + +# /usr/include/alsa/control.h:212 +snd_card_next = _lib.snd_card_next +snd_card_next.restype = c_int +snd_card_next.argtypes = [POINTER(c_int)] + +# /usr/include/alsa/control.h:213 +snd_card_get_index = _lib.snd_card_get_index +snd_card_get_index.restype = c_int +snd_card_get_index.argtypes = [c_char_p] + +# /usr/include/alsa/control.h:214 +snd_card_get_name = _lib.snd_card_get_name +snd_card_get_name.restype = c_int +snd_card_get_name.argtypes = [c_int, POINTER(c_char_p)] + +# /usr/include/alsa/control.h:215 +snd_card_get_longname = _lib.snd_card_get_longname +snd_card_get_longname.restype = c_int +snd_card_get_longname.argtypes = [c_int, POINTER(c_char_p)] + +''' Issue 144: These were added in 1.0.14 +# /usr/include/alsa/control.h:217 +snd_device_name_hint = _lib.snd_device_name_hint +snd_device_name_hint.restype = c_int +snd_device_name_hint.argtypes = [c_int, c_char_p, POINTER(POINTER(POINTER(None)))] + +# /usr/include/alsa/control.h:218 +snd_device_name_free_hint = _lib.snd_device_name_free_hint +snd_device_name_free_hint.restype = c_int +snd_device_name_free_hint.argtypes = [POINTER(POINTER(None))] + +# /usr/include/alsa/control.h:219 +snd_device_name_get_hint = _lib.snd_device_name_get_hint +snd_device_name_get_hint.restype = c_char_p +snd_device_name_get_hint.argtypes = [POINTER(None), c_char_p] +''' + +# /usr/include/alsa/control.h:221 +snd_ctl_open = _lib.snd_ctl_open +snd_ctl_open.restype = c_int +snd_ctl_open.argtypes = [POINTER(POINTER(snd_ctl_t)), c_char_p, c_int] + +# /usr/include/alsa/control.h:222 +snd_ctl_open_lconf = _lib.snd_ctl_open_lconf +snd_ctl_open_lconf.restype = c_int +snd_ctl_open_lconf.argtypes = [POINTER(POINTER(snd_ctl_t)), c_char_p, c_int, POINTER(snd_config_t)] + +# /usr/include/alsa/control.h:223 +snd_ctl_close = _lib.snd_ctl_close +snd_ctl_close.restype = c_int +snd_ctl_close.argtypes = [POINTER(snd_ctl_t)] + +# /usr/include/alsa/control.h:224 +snd_ctl_nonblock = _lib.snd_ctl_nonblock +snd_ctl_nonblock.restype = c_int +snd_ctl_nonblock.argtypes = [POINTER(snd_ctl_t), c_int] + +# /usr/include/alsa/control.h:225 +snd_async_add_ctl_handler = _lib.snd_async_add_ctl_handler +snd_async_add_ctl_handler.restype = c_int +snd_async_add_ctl_handler.argtypes = [POINTER(POINTER(snd_async_handler_t)), POINTER(snd_ctl_t), snd_async_callback_t, POINTER(None)] + +# /usr/include/alsa/control.h:227 +snd_async_handler_get_ctl = _lib.snd_async_handler_get_ctl +snd_async_handler_get_ctl.restype = POINTER(snd_ctl_t) +snd_async_handler_get_ctl.argtypes = [POINTER(snd_async_handler_t)] + +# /usr/include/alsa/control.h:228 +snd_ctl_poll_descriptors_count = _lib.snd_ctl_poll_descriptors_count +snd_ctl_poll_descriptors_count.restype = c_int +snd_ctl_poll_descriptors_count.argtypes = [POINTER(snd_ctl_t)] + +class struct_pollfd(Structure): + __slots__ = [ + ] +struct_pollfd._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/control.h:229 +snd_ctl_poll_descriptors = _lib.snd_ctl_poll_descriptors +snd_ctl_poll_descriptors.restype = c_int +snd_ctl_poll_descriptors.argtypes = [POINTER(snd_ctl_t), POINTER(struct_pollfd), c_uint] + +class struct_pollfd(Structure): + __slots__ = [ + ] +struct_pollfd._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/control.h:230 +snd_ctl_poll_descriptors_revents = _lib.snd_ctl_poll_descriptors_revents +snd_ctl_poll_descriptors_revents.restype = c_int +snd_ctl_poll_descriptors_revents.argtypes = [POINTER(snd_ctl_t), POINTER(struct_pollfd), c_uint, POINTER(c_ushort)] + +# /usr/include/alsa/control.h:231 +snd_ctl_subscribe_events = _lib.snd_ctl_subscribe_events +snd_ctl_subscribe_events.restype = c_int +snd_ctl_subscribe_events.argtypes = [POINTER(snd_ctl_t), c_int] + +# /usr/include/alsa/control.h:232 +snd_ctl_card_info = _lib.snd_ctl_card_info +snd_ctl_card_info.restype = c_int +snd_ctl_card_info.argtypes = [POINTER(snd_ctl_t), POINTER(snd_ctl_card_info_t)] + +# /usr/include/alsa/control.h:233 +snd_ctl_elem_list = _lib.snd_ctl_elem_list +snd_ctl_elem_list.restype = c_int +snd_ctl_elem_list.argtypes = [POINTER(snd_ctl_t), POINTER(snd_ctl_elem_list_t)] + +# /usr/include/alsa/control.h:234 +snd_ctl_elem_info = _lib.snd_ctl_elem_info +snd_ctl_elem_info.restype = c_int +snd_ctl_elem_info.argtypes = [POINTER(snd_ctl_t), POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:235 +snd_ctl_elem_read = _lib.snd_ctl_elem_read +snd_ctl_elem_read.restype = c_int +snd_ctl_elem_read.argtypes = [POINTER(snd_ctl_t), POINTER(snd_ctl_elem_value_t)] + +# /usr/include/alsa/control.h:236 +snd_ctl_elem_write = _lib.snd_ctl_elem_write +snd_ctl_elem_write.restype = c_int +snd_ctl_elem_write.argtypes = [POINTER(snd_ctl_t), POINTER(snd_ctl_elem_value_t)] + +# /usr/include/alsa/control.h:237 +snd_ctl_elem_lock = _lib.snd_ctl_elem_lock +snd_ctl_elem_lock.restype = c_int +snd_ctl_elem_lock.argtypes = [POINTER(snd_ctl_t), POINTER(snd_ctl_elem_id_t)] + +# /usr/include/alsa/control.h:238 +snd_ctl_elem_unlock = _lib.snd_ctl_elem_unlock +snd_ctl_elem_unlock.restype = c_int +snd_ctl_elem_unlock.argtypes = [POINTER(snd_ctl_t), POINTER(snd_ctl_elem_id_t)] + +# /usr/include/alsa/control.h:239 +snd_ctl_elem_tlv_read = _lib.snd_ctl_elem_tlv_read +snd_ctl_elem_tlv_read.restype = c_int +snd_ctl_elem_tlv_read.argtypes = [POINTER(snd_ctl_t), POINTER(snd_ctl_elem_id_t), POINTER(c_uint), c_uint] + +# /usr/include/alsa/control.h:241 +snd_ctl_elem_tlv_write = _lib.snd_ctl_elem_tlv_write +snd_ctl_elem_tlv_write.restype = c_int +snd_ctl_elem_tlv_write.argtypes = [POINTER(snd_ctl_t), POINTER(snd_ctl_elem_id_t), POINTER(c_uint)] + +# /usr/include/alsa/control.h:243 +snd_ctl_elem_tlv_command = _lib.snd_ctl_elem_tlv_command +snd_ctl_elem_tlv_command.restype = c_int +snd_ctl_elem_tlv_command.argtypes = [POINTER(snd_ctl_t), POINTER(snd_ctl_elem_id_t), POINTER(c_uint)] + +# /usr/include/alsa/control.h:245 +snd_ctl_hwdep_next_device = _lib.snd_ctl_hwdep_next_device +snd_ctl_hwdep_next_device.restype = c_int +snd_ctl_hwdep_next_device.argtypes = [POINTER(snd_ctl_t), POINTER(c_int)] + +# /usr/include/alsa/control.h:246 +snd_ctl_hwdep_info = _lib.snd_ctl_hwdep_info +snd_ctl_hwdep_info.restype = c_int +snd_ctl_hwdep_info.argtypes = [POINTER(snd_ctl_t), POINTER(snd_hwdep_info_t)] + +# /usr/include/alsa/control.h:247 +snd_ctl_pcm_next_device = _lib.snd_ctl_pcm_next_device +snd_ctl_pcm_next_device.restype = c_int +snd_ctl_pcm_next_device.argtypes = [POINTER(snd_ctl_t), POINTER(c_int)] + +# /usr/include/alsa/control.h:248 +snd_ctl_pcm_info = _lib.snd_ctl_pcm_info +snd_ctl_pcm_info.restype = c_int +snd_ctl_pcm_info.argtypes = [POINTER(snd_ctl_t), POINTER(snd_pcm_info_t)] + +# /usr/include/alsa/control.h:249 +snd_ctl_pcm_prefer_subdevice = _lib.snd_ctl_pcm_prefer_subdevice +snd_ctl_pcm_prefer_subdevice.restype = c_int +snd_ctl_pcm_prefer_subdevice.argtypes = [POINTER(snd_ctl_t), c_int] + +# /usr/include/alsa/control.h:250 +snd_ctl_rawmidi_next_device = _lib.snd_ctl_rawmidi_next_device +snd_ctl_rawmidi_next_device.restype = c_int +snd_ctl_rawmidi_next_device.argtypes = [POINTER(snd_ctl_t), POINTER(c_int)] + +# /usr/include/alsa/control.h:251 +snd_ctl_rawmidi_info = _lib.snd_ctl_rawmidi_info +snd_ctl_rawmidi_info.restype = c_int +snd_ctl_rawmidi_info.argtypes = [POINTER(snd_ctl_t), POINTER(snd_rawmidi_info_t)] + +# /usr/include/alsa/control.h:252 +snd_ctl_rawmidi_prefer_subdevice = _lib.snd_ctl_rawmidi_prefer_subdevice +snd_ctl_rawmidi_prefer_subdevice.restype = c_int +snd_ctl_rawmidi_prefer_subdevice.argtypes = [POINTER(snd_ctl_t), c_int] + +# /usr/include/alsa/control.h:253 +snd_ctl_set_power_state = _lib.snd_ctl_set_power_state +snd_ctl_set_power_state.restype = c_int +snd_ctl_set_power_state.argtypes = [POINTER(snd_ctl_t), c_uint] + +# /usr/include/alsa/control.h:254 +snd_ctl_get_power_state = _lib.snd_ctl_get_power_state +snd_ctl_get_power_state.restype = c_int +snd_ctl_get_power_state.argtypes = [POINTER(snd_ctl_t), POINTER(c_uint)] + +# /usr/include/alsa/control.h:256 +snd_ctl_read = _lib.snd_ctl_read +snd_ctl_read.restype = c_int +snd_ctl_read.argtypes = [POINTER(snd_ctl_t), POINTER(snd_ctl_event_t)] + +# /usr/include/alsa/control.h:257 +snd_ctl_wait = _lib.snd_ctl_wait +snd_ctl_wait.restype = c_int +snd_ctl_wait.argtypes = [POINTER(snd_ctl_t), c_int] + +# /usr/include/alsa/control.h:258 +snd_ctl_name = _lib.snd_ctl_name +snd_ctl_name.restype = c_char_p +snd_ctl_name.argtypes = [POINTER(snd_ctl_t)] + +# /usr/include/alsa/control.h:259 +snd_ctl_type = _lib.snd_ctl_type +snd_ctl_type.restype = snd_ctl_type_t +snd_ctl_type.argtypes = [POINTER(snd_ctl_t)] + +# /usr/include/alsa/control.h:261 +snd_ctl_elem_type_name = _lib.snd_ctl_elem_type_name +snd_ctl_elem_type_name.restype = c_char_p +snd_ctl_elem_type_name.argtypes = [snd_ctl_elem_type_t] + +# /usr/include/alsa/control.h:262 +snd_ctl_elem_iface_name = _lib.snd_ctl_elem_iface_name +snd_ctl_elem_iface_name.restype = c_char_p +snd_ctl_elem_iface_name.argtypes = [snd_ctl_elem_iface_t] + +# /usr/include/alsa/control.h:263 +snd_ctl_event_type_name = _lib.snd_ctl_event_type_name +snd_ctl_event_type_name.restype = c_char_p +snd_ctl_event_type_name.argtypes = [snd_ctl_event_type_t] + +# /usr/include/alsa/control.h:265 +snd_ctl_event_elem_get_mask = _lib.snd_ctl_event_elem_get_mask +snd_ctl_event_elem_get_mask.restype = c_uint +snd_ctl_event_elem_get_mask.argtypes = [POINTER(snd_ctl_event_t)] + +# /usr/include/alsa/control.h:266 +snd_ctl_event_elem_get_numid = _lib.snd_ctl_event_elem_get_numid +snd_ctl_event_elem_get_numid.restype = c_uint +snd_ctl_event_elem_get_numid.argtypes = [POINTER(snd_ctl_event_t)] + +# /usr/include/alsa/control.h:267 +snd_ctl_event_elem_get_id = _lib.snd_ctl_event_elem_get_id +snd_ctl_event_elem_get_id.restype = None +snd_ctl_event_elem_get_id.argtypes = [POINTER(snd_ctl_event_t), POINTER(snd_ctl_elem_id_t)] + +# /usr/include/alsa/control.h:268 +snd_ctl_event_elem_get_interface = _lib.snd_ctl_event_elem_get_interface +snd_ctl_event_elem_get_interface.restype = snd_ctl_elem_iface_t +snd_ctl_event_elem_get_interface.argtypes = [POINTER(snd_ctl_event_t)] + +# /usr/include/alsa/control.h:269 +snd_ctl_event_elem_get_device = _lib.snd_ctl_event_elem_get_device +snd_ctl_event_elem_get_device.restype = c_uint +snd_ctl_event_elem_get_device.argtypes = [POINTER(snd_ctl_event_t)] + +# /usr/include/alsa/control.h:270 +snd_ctl_event_elem_get_subdevice = _lib.snd_ctl_event_elem_get_subdevice +snd_ctl_event_elem_get_subdevice.restype = c_uint +snd_ctl_event_elem_get_subdevice.argtypes = [POINTER(snd_ctl_event_t)] + +# /usr/include/alsa/control.h:271 +snd_ctl_event_elem_get_name = _lib.snd_ctl_event_elem_get_name +snd_ctl_event_elem_get_name.restype = c_char_p +snd_ctl_event_elem_get_name.argtypes = [POINTER(snd_ctl_event_t)] + +# /usr/include/alsa/control.h:272 +snd_ctl_event_elem_get_index = _lib.snd_ctl_event_elem_get_index +snd_ctl_event_elem_get_index.restype = c_uint +snd_ctl_event_elem_get_index.argtypes = [POINTER(snd_ctl_event_t)] + +# /usr/include/alsa/control.h:274 +snd_ctl_elem_list_alloc_space = _lib.snd_ctl_elem_list_alloc_space +snd_ctl_elem_list_alloc_space.restype = c_int +snd_ctl_elem_list_alloc_space.argtypes = [POINTER(snd_ctl_elem_list_t), c_uint] + +# /usr/include/alsa/control.h:275 +snd_ctl_elem_list_free_space = _lib.snd_ctl_elem_list_free_space +snd_ctl_elem_list_free_space.restype = None +snd_ctl_elem_list_free_space.argtypes = [POINTER(snd_ctl_elem_list_t)] + +# /usr/include/alsa/control.h:277 +snd_ctl_elem_id_sizeof = _lib.snd_ctl_elem_id_sizeof +snd_ctl_elem_id_sizeof.restype = c_size_t +snd_ctl_elem_id_sizeof.argtypes = [] + +# /usr/include/alsa/control.h:283 +snd_ctl_elem_id_malloc = _lib.snd_ctl_elem_id_malloc +snd_ctl_elem_id_malloc.restype = c_int +snd_ctl_elem_id_malloc.argtypes = [POINTER(POINTER(snd_ctl_elem_id_t))] + +# /usr/include/alsa/control.h:284 +snd_ctl_elem_id_free = _lib.snd_ctl_elem_id_free +snd_ctl_elem_id_free.restype = None +snd_ctl_elem_id_free.argtypes = [POINTER(snd_ctl_elem_id_t)] + +# /usr/include/alsa/control.h:285 +snd_ctl_elem_id_clear = _lib.snd_ctl_elem_id_clear +snd_ctl_elem_id_clear.restype = None +snd_ctl_elem_id_clear.argtypes = [POINTER(snd_ctl_elem_id_t)] + +# /usr/include/alsa/control.h:286 +snd_ctl_elem_id_copy = _lib.snd_ctl_elem_id_copy +snd_ctl_elem_id_copy.restype = None +snd_ctl_elem_id_copy.argtypes = [POINTER(snd_ctl_elem_id_t), POINTER(snd_ctl_elem_id_t)] + +# /usr/include/alsa/control.h:287 +snd_ctl_elem_id_get_numid = _lib.snd_ctl_elem_id_get_numid +snd_ctl_elem_id_get_numid.restype = c_uint +snd_ctl_elem_id_get_numid.argtypes = [POINTER(snd_ctl_elem_id_t)] + +# /usr/include/alsa/control.h:288 +snd_ctl_elem_id_get_interface = _lib.snd_ctl_elem_id_get_interface +snd_ctl_elem_id_get_interface.restype = snd_ctl_elem_iface_t +snd_ctl_elem_id_get_interface.argtypes = [POINTER(snd_ctl_elem_id_t)] + +# /usr/include/alsa/control.h:289 +snd_ctl_elem_id_get_device = _lib.snd_ctl_elem_id_get_device +snd_ctl_elem_id_get_device.restype = c_uint +snd_ctl_elem_id_get_device.argtypes = [POINTER(snd_ctl_elem_id_t)] + +# /usr/include/alsa/control.h:290 +snd_ctl_elem_id_get_subdevice = _lib.snd_ctl_elem_id_get_subdevice +snd_ctl_elem_id_get_subdevice.restype = c_uint +snd_ctl_elem_id_get_subdevice.argtypes = [POINTER(snd_ctl_elem_id_t)] + +# /usr/include/alsa/control.h:291 +snd_ctl_elem_id_get_name = _lib.snd_ctl_elem_id_get_name +snd_ctl_elem_id_get_name.restype = c_char_p +snd_ctl_elem_id_get_name.argtypes = [POINTER(snd_ctl_elem_id_t)] + +# /usr/include/alsa/control.h:292 +snd_ctl_elem_id_get_index = _lib.snd_ctl_elem_id_get_index +snd_ctl_elem_id_get_index.restype = c_uint +snd_ctl_elem_id_get_index.argtypes = [POINTER(snd_ctl_elem_id_t)] + +# /usr/include/alsa/control.h:293 +snd_ctl_elem_id_set_numid = _lib.snd_ctl_elem_id_set_numid +snd_ctl_elem_id_set_numid.restype = None +snd_ctl_elem_id_set_numid.argtypes = [POINTER(snd_ctl_elem_id_t), c_uint] + +# /usr/include/alsa/control.h:294 +snd_ctl_elem_id_set_interface = _lib.snd_ctl_elem_id_set_interface +snd_ctl_elem_id_set_interface.restype = None +snd_ctl_elem_id_set_interface.argtypes = [POINTER(snd_ctl_elem_id_t), snd_ctl_elem_iface_t] + +# /usr/include/alsa/control.h:295 +snd_ctl_elem_id_set_device = _lib.snd_ctl_elem_id_set_device +snd_ctl_elem_id_set_device.restype = None +snd_ctl_elem_id_set_device.argtypes = [POINTER(snd_ctl_elem_id_t), c_uint] + +# /usr/include/alsa/control.h:296 +snd_ctl_elem_id_set_subdevice = _lib.snd_ctl_elem_id_set_subdevice +snd_ctl_elem_id_set_subdevice.restype = None +snd_ctl_elem_id_set_subdevice.argtypes = [POINTER(snd_ctl_elem_id_t), c_uint] + +# /usr/include/alsa/control.h:297 +snd_ctl_elem_id_set_name = _lib.snd_ctl_elem_id_set_name +snd_ctl_elem_id_set_name.restype = None +snd_ctl_elem_id_set_name.argtypes = [POINTER(snd_ctl_elem_id_t), c_char_p] + +# /usr/include/alsa/control.h:298 +snd_ctl_elem_id_set_index = _lib.snd_ctl_elem_id_set_index +snd_ctl_elem_id_set_index.restype = None +snd_ctl_elem_id_set_index.argtypes = [POINTER(snd_ctl_elem_id_t), c_uint] + +# /usr/include/alsa/control.h:300 +snd_ctl_card_info_sizeof = _lib.snd_ctl_card_info_sizeof +snd_ctl_card_info_sizeof.restype = c_size_t +snd_ctl_card_info_sizeof.argtypes = [] + +# /usr/include/alsa/control.h:306 +snd_ctl_card_info_malloc = _lib.snd_ctl_card_info_malloc +snd_ctl_card_info_malloc.restype = c_int +snd_ctl_card_info_malloc.argtypes = [POINTER(POINTER(snd_ctl_card_info_t))] + +# /usr/include/alsa/control.h:307 +snd_ctl_card_info_free = _lib.snd_ctl_card_info_free +snd_ctl_card_info_free.restype = None +snd_ctl_card_info_free.argtypes = [POINTER(snd_ctl_card_info_t)] + +# /usr/include/alsa/control.h:308 +snd_ctl_card_info_clear = _lib.snd_ctl_card_info_clear +snd_ctl_card_info_clear.restype = None +snd_ctl_card_info_clear.argtypes = [POINTER(snd_ctl_card_info_t)] + +# /usr/include/alsa/control.h:309 +snd_ctl_card_info_copy = _lib.snd_ctl_card_info_copy +snd_ctl_card_info_copy.restype = None +snd_ctl_card_info_copy.argtypes = [POINTER(snd_ctl_card_info_t), POINTER(snd_ctl_card_info_t)] + +# /usr/include/alsa/control.h:310 +snd_ctl_card_info_get_card = _lib.snd_ctl_card_info_get_card +snd_ctl_card_info_get_card.restype = c_int +snd_ctl_card_info_get_card.argtypes = [POINTER(snd_ctl_card_info_t)] + +# /usr/include/alsa/control.h:311 +snd_ctl_card_info_get_id = _lib.snd_ctl_card_info_get_id +snd_ctl_card_info_get_id.restype = c_char_p +snd_ctl_card_info_get_id.argtypes = [POINTER(snd_ctl_card_info_t)] + +# /usr/include/alsa/control.h:312 +snd_ctl_card_info_get_driver = _lib.snd_ctl_card_info_get_driver +snd_ctl_card_info_get_driver.restype = c_char_p +snd_ctl_card_info_get_driver.argtypes = [POINTER(snd_ctl_card_info_t)] + +# /usr/include/alsa/control.h:313 +snd_ctl_card_info_get_name = _lib.snd_ctl_card_info_get_name +snd_ctl_card_info_get_name.restype = c_char_p +snd_ctl_card_info_get_name.argtypes = [POINTER(snd_ctl_card_info_t)] + +# /usr/include/alsa/control.h:314 +snd_ctl_card_info_get_longname = _lib.snd_ctl_card_info_get_longname +snd_ctl_card_info_get_longname.restype = c_char_p +snd_ctl_card_info_get_longname.argtypes = [POINTER(snd_ctl_card_info_t)] + +# /usr/include/alsa/control.h:315 +snd_ctl_card_info_get_mixername = _lib.snd_ctl_card_info_get_mixername +snd_ctl_card_info_get_mixername.restype = c_char_p +snd_ctl_card_info_get_mixername.argtypes = [POINTER(snd_ctl_card_info_t)] + +# /usr/include/alsa/control.h:316 +snd_ctl_card_info_get_components = _lib.snd_ctl_card_info_get_components +snd_ctl_card_info_get_components.restype = c_char_p +snd_ctl_card_info_get_components.argtypes = [POINTER(snd_ctl_card_info_t)] + +# /usr/include/alsa/control.h:318 +snd_ctl_event_sizeof = _lib.snd_ctl_event_sizeof +snd_ctl_event_sizeof.restype = c_size_t +snd_ctl_event_sizeof.argtypes = [] + +# /usr/include/alsa/control.h:324 +snd_ctl_event_malloc = _lib.snd_ctl_event_malloc +snd_ctl_event_malloc.restype = c_int +snd_ctl_event_malloc.argtypes = [POINTER(POINTER(snd_ctl_event_t))] + +# /usr/include/alsa/control.h:325 +snd_ctl_event_free = _lib.snd_ctl_event_free +snd_ctl_event_free.restype = None +snd_ctl_event_free.argtypes = [POINTER(snd_ctl_event_t)] + +# /usr/include/alsa/control.h:326 +snd_ctl_event_clear = _lib.snd_ctl_event_clear +snd_ctl_event_clear.restype = None +snd_ctl_event_clear.argtypes = [POINTER(snd_ctl_event_t)] + +# /usr/include/alsa/control.h:327 +snd_ctl_event_copy = _lib.snd_ctl_event_copy +snd_ctl_event_copy.restype = None +snd_ctl_event_copy.argtypes = [POINTER(snd_ctl_event_t), POINTER(snd_ctl_event_t)] + +# /usr/include/alsa/control.h:328 +snd_ctl_event_get_type = _lib.snd_ctl_event_get_type +snd_ctl_event_get_type.restype = snd_ctl_event_type_t +snd_ctl_event_get_type.argtypes = [POINTER(snd_ctl_event_t)] + +# /usr/include/alsa/control.h:330 +snd_ctl_elem_list_sizeof = _lib.snd_ctl_elem_list_sizeof +snd_ctl_elem_list_sizeof.restype = c_size_t +snd_ctl_elem_list_sizeof.argtypes = [] + +# /usr/include/alsa/control.h:336 +snd_ctl_elem_list_malloc = _lib.snd_ctl_elem_list_malloc +snd_ctl_elem_list_malloc.restype = c_int +snd_ctl_elem_list_malloc.argtypes = [POINTER(POINTER(snd_ctl_elem_list_t))] + +# /usr/include/alsa/control.h:337 +snd_ctl_elem_list_free = _lib.snd_ctl_elem_list_free +snd_ctl_elem_list_free.restype = None +snd_ctl_elem_list_free.argtypes = [POINTER(snd_ctl_elem_list_t)] + +# /usr/include/alsa/control.h:338 +snd_ctl_elem_list_clear = _lib.snd_ctl_elem_list_clear +snd_ctl_elem_list_clear.restype = None +snd_ctl_elem_list_clear.argtypes = [POINTER(snd_ctl_elem_list_t)] + +# /usr/include/alsa/control.h:339 +snd_ctl_elem_list_copy = _lib.snd_ctl_elem_list_copy +snd_ctl_elem_list_copy.restype = None +snd_ctl_elem_list_copy.argtypes = [POINTER(snd_ctl_elem_list_t), POINTER(snd_ctl_elem_list_t)] + +# /usr/include/alsa/control.h:340 +snd_ctl_elem_list_set_offset = _lib.snd_ctl_elem_list_set_offset +snd_ctl_elem_list_set_offset.restype = None +snd_ctl_elem_list_set_offset.argtypes = [POINTER(snd_ctl_elem_list_t), c_uint] + +# /usr/include/alsa/control.h:341 +snd_ctl_elem_list_get_used = _lib.snd_ctl_elem_list_get_used +snd_ctl_elem_list_get_used.restype = c_uint +snd_ctl_elem_list_get_used.argtypes = [POINTER(snd_ctl_elem_list_t)] + +# /usr/include/alsa/control.h:342 +snd_ctl_elem_list_get_count = _lib.snd_ctl_elem_list_get_count +snd_ctl_elem_list_get_count.restype = c_uint +snd_ctl_elem_list_get_count.argtypes = [POINTER(snd_ctl_elem_list_t)] + +# /usr/include/alsa/control.h:343 +snd_ctl_elem_list_get_id = _lib.snd_ctl_elem_list_get_id +snd_ctl_elem_list_get_id.restype = None +snd_ctl_elem_list_get_id.argtypes = [POINTER(snd_ctl_elem_list_t), c_uint, POINTER(snd_ctl_elem_id_t)] + +# /usr/include/alsa/control.h:344 +snd_ctl_elem_list_get_numid = _lib.snd_ctl_elem_list_get_numid +snd_ctl_elem_list_get_numid.restype = c_uint +snd_ctl_elem_list_get_numid.argtypes = [POINTER(snd_ctl_elem_list_t), c_uint] + +# /usr/include/alsa/control.h:345 +snd_ctl_elem_list_get_interface = _lib.snd_ctl_elem_list_get_interface +snd_ctl_elem_list_get_interface.restype = snd_ctl_elem_iface_t +snd_ctl_elem_list_get_interface.argtypes = [POINTER(snd_ctl_elem_list_t), c_uint] + +# /usr/include/alsa/control.h:346 +snd_ctl_elem_list_get_device = _lib.snd_ctl_elem_list_get_device +snd_ctl_elem_list_get_device.restype = c_uint +snd_ctl_elem_list_get_device.argtypes = [POINTER(snd_ctl_elem_list_t), c_uint] + +# /usr/include/alsa/control.h:347 +snd_ctl_elem_list_get_subdevice = _lib.snd_ctl_elem_list_get_subdevice +snd_ctl_elem_list_get_subdevice.restype = c_uint +snd_ctl_elem_list_get_subdevice.argtypes = [POINTER(snd_ctl_elem_list_t), c_uint] + +# /usr/include/alsa/control.h:348 +snd_ctl_elem_list_get_name = _lib.snd_ctl_elem_list_get_name +snd_ctl_elem_list_get_name.restype = c_char_p +snd_ctl_elem_list_get_name.argtypes = [POINTER(snd_ctl_elem_list_t), c_uint] + +# /usr/include/alsa/control.h:349 +snd_ctl_elem_list_get_index = _lib.snd_ctl_elem_list_get_index +snd_ctl_elem_list_get_index.restype = c_uint +snd_ctl_elem_list_get_index.argtypes = [POINTER(snd_ctl_elem_list_t), c_uint] + +# /usr/include/alsa/control.h:351 +snd_ctl_elem_info_sizeof = _lib.snd_ctl_elem_info_sizeof +snd_ctl_elem_info_sizeof.restype = c_size_t +snd_ctl_elem_info_sizeof.argtypes = [] + +# /usr/include/alsa/control.h:357 +snd_ctl_elem_info_malloc = _lib.snd_ctl_elem_info_malloc +snd_ctl_elem_info_malloc.restype = c_int +snd_ctl_elem_info_malloc.argtypes = [POINTER(POINTER(snd_ctl_elem_info_t))] + +# /usr/include/alsa/control.h:358 +snd_ctl_elem_info_free = _lib.snd_ctl_elem_info_free +snd_ctl_elem_info_free.restype = None +snd_ctl_elem_info_free.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:359 +snd_ctl_elem_info_clear = _lib.snd_ctl_elem_info_clear +snd_ctl_elem_info_clear.restype = None +snd_ctl_elem_info_clear.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:360 +snd_ctl_elem_info_copy = _lib.snd_ctl_elem_info_copy +snd_ctl_elem_info_copy.restype = None +snd_ctl_elem_info_copy.argtypes = [POINTER(snd_ctl_elem_info_t), POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:361 +snd_ctl_elem_info_get_type = _lib.snd_ctl_elem_info_get_type +snd_ctl_elem_info_get_type.restype = snd_ctl_elem_type_t +snd_ctl_elem_info_get_type.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:362 +snd_ctl_elem_info_is_readable = _lib.snd_ctl_elem_info_is_readable +snd_ctl_elem_info_is_readable.restype = c_int +snd_ctl_elem_info_is_readable.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:363 +snd_ctl_elem_info_is_writable = _lib.snd_ctl_elem_info_is_writable +snd_ctl_elem_info_is_writable.restype = c_int +snd_ctl_elem_info_is_writable.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:364 +snd_ctl_elem_info_is_volatile = _lib.snd_ctl_elem_info_is_volatile +snd_ctl_elem_info_is_volatile.restype = c_int +snd_ctl_elem_info_is_volatile.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:365 +snd_ctl_elem_info_is_inactive = _lib.snd_ctl_elem_info_is_inactive +snd_ctl_elem_info_is_inactive.restype = c_int +snd_ctl_elem_info_is_inactive.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:366 +snd_ctl_elem_info_is_locked = _lib.snd_ctl_elem_info_is_locked +snd_ctl_elem_info_is_locked.restype = c_int +snd_ctl_elem_info_is_locked.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:367 +snd_ctl_elem_info_is_tlv_readable = _lib.snd_ctl_elem_info_is_tlv_readable +snd_ctl_elem_info_is_tlv_readable.restype = c_int +snd_ctl_elem_info_is_tlv_readable.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:368 +snd_ctl_elem_info_is_tlv_writable = _lib.snd_ctl_elem_info_is_tlv_writable +snd_ctl_elem_info_is_tlv_writable.restype = c_int +snd_ctl_elem_info_is_tlv_writable.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:369 +snd_ctl_elem_info_is_tlv_commandable = _lib.snd_ctl_elem_info_is_tlv_commandable +snd_ctl_elem_info_is_tlv_commandable.restype = c_int +snd_ctl_elem_info_is_tlv_commandable.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:370 +snd_ctl_elem_info_is_owner = _lib.snd_ctl_elem_info_is_owner +snd_ctl_elem_info_is_owner.restype = c_int +snd_ctl_elem_info_is_owner.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:371 +snd_ctl_elem_info_is_user = _lib.snd_ctl_elem_info_is_user +snd_ctl_elem_info_is_user.restype = c_int +snd_ctl_elem_info_is_user.argtypes = [POINTER(snd_ctl_elem_info_t)] + +__pid_t = c_int # /usr/include/gentoo-multilib/amd64/bits/types.h:146 +pid_t = __pid_t # /usr/include/gentoo-multilib/amd64/unistd.h:229 +# /usr/include/alsa/control.h:372 +snd_ctl_elem_info_get_owner = _lib.snd_ctl_elem_info_get_owner +snd_ctl_elem_info_get_owner.restype = pid_t +snd_ctl_elem_info_get_owner.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:373 +snd_ctl_elem_info_get_count = _lib.snd_ctl_elem_info_get_count +snd_ctl_elem_info_get_count.restype = c_uint +snd_ctl_elem_info_get_count.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:374 +snd_ctl_elem_info_get_min = _lib.snd_ctl_elem_info_get_min +snd_ctl_elem_info_get_min.restype = c_long +snd_ctl_elem_info_get_min.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:375 +snd_ctl_elem_info_get_max = _lib.snd_ctl_elem_info_get_max +snd_ctl_elem_info_get_max.restype = c_long +snd_ctl_elem_info_get_max.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:376 +snd_ctl_elem_info_get_step = _lib.snd_ctl_elem_info_get_step +snd_ctl_elem_info_get_step.restype = c_long +snd_ctl_elem_info_get_step.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:377 +snd_ctl_elem_info_get_min64 = _lib.snd_ctl_elem_info_get_min64 +snd_ctl_elem_info_get_min64.restype = c_longlong +snd_ctl_elem_info_get_min64.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:378 +snd_ctl_elem_info_get_max64 = _lib.snd_ctl_elem_info_get_max64 +snd_ctl_elem_info_get_max64.restype = c_longlong +snd_ctl_elem_info_get_max64.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:379 +snd_ctl_elem_info_get_step64 = _lib.snd_ctl_elem_info_get_step64 +snd_ctl_elem_info_get_step64.restype = c_longlong +snd_ctl_elem_info_get_step64.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:380 +snd_ctl_elem_info_get_items = _lib.snd_ctl_elem_info_get_items +snd_ctl_elem_info_get_items.restype = c_uint +snd_ctl_elem_info_get_items.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:381 +snd_ctl_elem_info_set_item = _lib.snd_ctl_elem_info_set_item +snd_ctl_elem_info_set_item.restype = None +snd_ctl_elem_info_set_item.argtypes = [POINTER(snd_ctl_elem_info_t), c_uint] + +# /usr/include/alsa/control.h:382 +snd_ctl_elem_info_get_item_name = _lib.snd_ctl_elem_info_get_item_name +snd_ctl_elem_info_get_item_name.restype = c_char_p +snd_ctl_elem_info_get_item_name.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:383 +snd_ctl_elem_info_get_dimensions = _lib.snd_ctl_elem_info_get_dimensions +snd_ctl_elem_info_get_dimensions.restype = c_int +snd_ctl_elem_info_get_dimensions.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:384 +snd_ctl_elem_info_get_dimension = _lib.snd_ctl_elem_info_get_dimension +snd_ctl_elem_info_get_dimension.restype = c_int +snd_ctl_elem_info_get_dimension.argtypes = [POINTER(snd_ctl_elem_info_t), c_uint] + +# /usr/include/alsa/control.h:385 +snd_ctl_elem_info_get_id = _lib.snd_ctl_elem_info_get_id +snd_ctl_elem_info_get_id.restype = None +snd_ctl_elem_info_get_id.argtypes = [POINTER(snd_ctl_elem_info_t), POINTER(snd_ctl_elem_id_t)] + +# /usr/include/alsa/control.h:386 +snd_ctl_elem_info_get_numid = _lib.snd_ctl_elem_info_get_numid +snd_ctl_elem_info_get_numid.restype = c_uint +snd_ctl_elem_info_get_numid.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:387 +snd_ctl_elem_info_get_interface = _lib.snd_ctl_elem_info_get_interface +snd_ctl_elem_info_get_interface.restype = snd_ctl_elem_iface_t +snd_ctl_elem_info_get_interface.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:388 +snd_ctl_elem_info_get_device = _lib.snd_ctl_elem_info_get_device +snd_ctl_elem_info_get_device.restype = c_uint +snd_ctl_elem_info_get_device.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:389 +snd_ctl_elem_info_get_subdevice = _lib.snd_ctl_elem_info_get_subdevice +snd_ctl_elem_info_get_subdevice.restype = c_uint +snd_ctl_elem_info_get_subdevice.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:390 +snd_ctl_elem_info_get_name = _lib.snd_ctl_elem_info_get_name +snd_ctl_elem_info_get_name.restype = c_char_p +snd_ctl_elem_info_get_name.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:391 +snd_ctl_elem_info_get_index = _lib.snd_ctl_elem_info_get_index +snd_ctl_elem_info_get_index.restype = c_uint +snd_ctl_elem_info_get_index.argtypes = [POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:392 +snd_ctl_elem_info_set_id = _lib.snd_ctl_elem_info_set_id +snd_ctl_elem_info_set_id.restype = None +snd_ctl_elem_info_set_id.argtypes = [POINTER(snd_ctl_elem_info_t), POINTER(snd_ctl_elem_id_t)] + +# /usr/include/alsa/control.h:393 +snd_ctl_elem_info_set_numid = _lib.snd_ctl_elem_info_set_numid +snd_ctl_elem_info_set_numid.restype = None +snd_ctl_elem_info_set_numid.argtypes = [POINTER(snd_ctl_elem_info_t), c_uint] + +# /usr/include/alsa/control.h:394 +snd_ctl_elem_info_set_interface = _lib.snd_ctl_elem_info_set_interface +snd_ctl_elem_info_set_interface.restype = None +snd_ctl_elem_info_set_interface.argtypes = [POINTER(snd_ctl_elem_info_t), snd_ctl_elem_iface_t] + +# /usr/include/alsa/control.h:395 +snd_ctl_elem_info_set_device = _lib.snd_ctl_elem_info_set_device +snd_ctl_elem_info_set_device.restype = None +snd_ctl_elem_info_set_device.argtypes = [POINTER(snd_ctl_elem_info_t), c_uint] + +# /usr/include/alsa/control.h:396 +snd_ctl_elem_info_set_subdevice = _lib.snd_ctl_elem_info_set_subdevice +snd_ctl_elem_info_set_subdevice.restype = None +snd_ctl_elem_info_set_subdevice.argtypes = [POINTER(snd_ctl_elem_info_t), c_uint] + +# /usr/include/alsa/control.h:397 +snd_ctl_elem_info_set_name = _lib.snd_ctl_elem_info_set_name +snd_ctl_elem_info_set_name.restype = None +snd_ctl_elem_info_set_name.argtypes = [POINTER(snd_ctl_elem_info_t), c_char_p] + +# /usr/include/alsa/control.h:398 +snd_ctl_elem_info_set_index = _lib.snd_ctl_elem_info_set_index +snd_ctl_elem_info_set_index.restype = None +snd_ctl_elem_info_set_index.argtypes = [POINTER(snd_ctl_elem_info_t), c_uint] + +# /usr/include/alsa/control.h:400 +snd_ctl_elem_add_integer = _lib.snd_ctl_elem_add_integer +snd_ctl_elem_add_integer.restype = c_int +snd_ctl_elem_add_integer.argtypes = [POINTER(snd_ctl_t), POINTER(snd_ctl_elem_id_t), c_uint, c_long, c_long, c_long] + +# /usr/include/alsa/control.h:401 +snd_ctl_elem_add_integer64 = _lib.snd_ctl_elem_add_integer64 +snd_ctl_elem_add_integer64.restype = c_int +snd_ctl_elem_add_integer64.argtypes = [POINTER(snd_ctl_t), POINTER(snd_ctl_elem_id_t), c_uint, c_longlong, c_longlong, c_longlong] + +# /usr/include/alsa/control.h:402 +snd_ctl_elem_add_boolean = _lib.snd_ctl_elem_add_boolean +snd_ctl_elem_add_boolean.restype = c_int +snd_ctl_elem_add_boolean.argtypes = [POINTER(snd_ctl_t), POINTER(snd_ctl_elem_id_t), c_uint] + +# /usr/include/alsa/control.h:403 +snd_ctl_elem_add_iec958 = _lib.snd_ctl_elem_add_iec958 +snd_ctl_elem_add_iec958.restype = c_int +snd_ctl_elem_add_iec958.argtypes = [POINTER(snd_ctl_t), POINTER(snd_ctl_elem_id_t)] + +# /usr/include/alsa/control.h:404 +snd_ctl_elem_remove = _lib.snd_ctl_elem_remove +snd_ctl_elem_remove.restype = c_int +snd_ctl_elem_remove.argtypes = [POINTER(snd_ctl_t), POINTER(snd_ctl_elem_id_t)] + +# /usr/include/alsa/control.h:406 +snd_ctl_elem_value_sizeof = _lib.snd_ctl_elem_value_sizeof +snd_ctl_elem_value_sizeof.restype = c_size_t +snd_ctl_elem_value_sizeof.argtypes = [] + +# /usr/include/alsa/control.h:412 +snd_ctl_elem_value_malloc = _lib.snd_ctl_elem_value_malloc +snd_ctl_elem_value_malloc.restype = c_int +snd_ctl_elem_value_malloc.argtypes = [POINTER(POINTER(snd_ctl_elem_value_t))] + +# /usr/include/alsa/control.h:413 +snd_ctl_elem_value_free = _lib.snd_ctl_elem_value_free +snd_ctl_elem_value_free.restype = None +snd_ctl_elem_value_free.argtypes = [POINTER(snd_ctl_elem_value_t)] + +# /usr/include/alsa/control.h:414 +snd_ctl_elem_value_clear = _lib.snd_ctl_elem_value_clear +snd_ctl_elem_value_clear.restype = None +snd_ctl_elem_value_clear.argtypes = [POINTER(snd_ctl_elem_value_t)] + +# /usr/include/alsa/control.h:415 +snd_ctl_elem_value_copy = _lib.snd_ctl_elem_value_copy +snd_ctl_elem_value_copy.restype = None +snd_ctl_elem_value_copy.argtypes = [POINTER(snd_ctl_elem_value_t), POINTER(snd_ctl_elem_value_t)] + +# /usr/include/alsa/control.h:416 +snd_ctl_elem_value_get_id = _lib.snd_ctl_elem_value_get_id +snd_ctl_elem_value_get_id.restype = None +snd_ctl_elem_value_get_id.argtypes = [POINTER(snd_ctl_elem_value_t), POINTER(snd_ctl_elem_id_t)] + +# /usr/include/alsa/control.h:417 +snd_ctl_elem_value_get_numid = _lib.snd_ctl_elem_value_get_numid +snd_ctl_elem_value_get_numid.restype = c_uint +snd_ctl_elem_value_get_numid.argtypes = [POINTER(snd_ctl_elem_value_t)] + +# /usr/include/alsa/control.h:418 +snd_ctl_elem_value_get_interface = _lib.snd_ctl_elem_value_get_interface +snd_ctl_elem_value_get_interface.restype = snd_ctl_elem_iface_t +snd_ctl_elem_value_get_interface.argtypes = [POINTER(snd_ctl_elem_value_t)] + +# /usr/include/alsa/control.h:419 +snd_ctl_elem_value_get_device = _lib.snd_ctl_elem_value_get_device +snd_ctl_elem_value_get_device.restype = c_uint +snd_ctl_elem_value_get_device.argtypes = [POINTER(snd_ctl_elem_value_t)] + +# /usr/include/alsa/control.h:420 +snd_ctl_elem_value_get_subdevice = _lib.snd_ctl_elem_value_get_subdevice +snd_ctl_elem_value_get_subdevice.restype = c_uint +snd_ctl_elem_value_get_subdevice.argtypes = [POINTER(snd_ctl_elem_value_t)] + +# /usr/include/alsa/control.h:421 +snd_ctl_elem_value_get_name = _lib.snd_ctl_elem_value_get_name +snd_ctl_elem_value_get_name.restype = c_char_p +snd_ctl_elem_value_get_name.argtypes = [POINTER(snd_ctl_elem_value_t)] + +# /usr/include/alsa/control.h:422 +snd_ctl_elem_value_get_index = _lib.snd_ctl_elem_value_get_index +snd_ctl_elem_value_get_index.restype = c_uint +snd_ctl_elem_value_get_index.argtypes = [POINTER(snd_ctl_elem_value_t)] + +# /usr/include/alsa/control.h:423 +snd_ctl_elem_value_set_id = _lib.snd_ctl_elem_value_set_id +snd_ctl_elem_value_set_id.restype = None +snd_ctl_elem_value_set_id.argtypes = [POINTER(snd_ctl_elem_value_t), POINTER(snd_ctl_elem_id_t)] + +# /usr/include/alsa/control.h:424 +snd_ctl_elem_value_set_numid = _lib.snd_ctl_elem_value_set_numid +snd_ctl_elem_value_set_numid.restype = None +snd_ctl_elem_value_set_numid.argtypes = [POINTER(snd_ctl_elem_value_t), c_uint] + +# /usr/include/alsa/control.h:425 +snd_ctl_elem_value_set_interface = _lib.snd_ctl_elem_value_set_interface +snd_ctl_elem_value_set_interface.restype = None +snd_ctl_elem_value_set_interface.argtypes = [POINTER(snd_ctl_elem_value_t), snd_ctl_elem_iface_t] + +# /usr/include/alsa/control.h:426 +snd_ctl_elem_value_set_device = _lib.snd_ctl_elem_value_set_device +snd_ctl_elem_value_set_device.restype = None +snd_ctl_elem_value_set_device.argtypes = [POINTER(snd_ctl_elem_value_t), c_uint] + +# /usr/include/alsa/control.h:427 +snd_ctl_elem_value_set_subdevice = _lib.snd_ctl_elem_value_set_subdevice +snd_ctl_elem_value_set_subdevice.restype = None +snd_ctl_elem_value_set_subdevice.argtypes = [POINTER(snd_ctl_elem_value_t), c_uint] + +# /usr/include/alsa/control.h:428 +snd_ctl_elem_value_set_name = _lib.snd_ctl_elem_value_set_name +snd_ctl_elem_value_set_name.restype = None +snd_ctl_elem_value_set_name.argtypes = [POINTER(snd_ctl_elem_value_t), c_char_p] + +# /usr/include/alsa/control.h:429 +snd_ctl_elem_value_set_index = _lib.snd_ctl_elem_value_set_index +snd_ctl_elem_value_set_index.restype = None +snd_ctl_elem_value_set_index.argtypes = [POINTER(snd_ctl_elem_value_t), c_uint] + +# /usr/include/alsa/control.h:430 +snd_ctl_elem_value_get_boolean = _lib.snd_ctl_elem_value_get_boolean +snd_ctl_elem_value_get_boolean.restype = c_int +snd_ctl_elem_value_get_boolean.argtypes = [POINTER(snd_ctl_elem_value_t), c_uint] + +# /usr/include/alsa/control.h:431 +snd_ctl_elem_value_get_integer = _lib.snd_ctl_elem_value_get_integer +snd_ctl_elem_value_get_integer.restype = c_long +snd_ctl_elem_value_get_integer.argtypes = [POINTER(snd_ctl_elem_value_t), c_uint] + +# /usr/include/alsa/control.h:432 +snd_ctl_elem_value_get_integer64 = _lib.snd_ctl_elem_value_get_integer64 +snd_ctl_elem_value_get_integer64.restype = c_longlong +snd_ctl_elem_value_get_integer64.argtypes = [POINTER(snd_ctl_elem_value_t), c_uint] + +# /usr/include/alsa/control.h:433 +snd_ctl_elem_value_get_enumerated = _lib.snd_ctl_elem_value_get_enumerated +snd_ctl_elem_value_get_enumerated.restype = c_uint +snd_ctl_elem_value_get_enumerated.argtypes = [POINTER(snd_ctl_elem_value_t), c_uint] + +# /usr/include/alsa/control.h:434 +snd_ctl_elem_value_get_byte = _lib.snd_ctl_elem_value_get_byte +snd_ctl_elem_value_get_byte.restype = c_ubyte +snd_ctl_elem_value_get_byte.argtypes = [POINTER(snd_ctl_elem_value_t), c_uint] + +# /usr/include/alsa/control.h:435 +snd_ctl_elem_value_set_boolean = _lib.snd_ctl_elem_value_set_boolean +snd_ctl_elem_value_set_boolean.restype = None +snd_ctl_elem_value_set_boolean.argtypes = [POINTER(snd_ctl_elem_value_t), c_uint, c_long] + +# /usr/include/alsa/control.h:436 +snd_ctl_elem_value_set_integer = _lib.snd_ctl_elem_value_set_integer +snd_ctl_elem_value_set_integer.restype = None +snd_ctl_elem_value_set_integer.argtypes = [POINTER(snd_ctl_elem_value_t), c_uint, c_long] + +# /usr/include/alsa/control.h:437 +snd_ctl_elem_value_set_integer64 = _lib.snd_ctl_elem_value_set_integer64 +snd_ctl_elem_value_set_integer64.restype = None +snd_ctl_elem_value_set_integer64.argtypes = [POINTER(snd_ctl_elem_value_t), c_uint, c_longlong] + +# /usr/include/alsa/control.h:438 +snd_ctl_elem_value_set_enumerated = _lib.snd_ctl_elem_value_set_enumerated +snd_ctl_elem_value_set_enumerated.restype = None +snd_ctl_elem_value_set_enumerated.argtypes = [POINTER(snd_ctl_elem_value_t), c_uint, c_uint] + +# /usr/include/alsa/control.h:439 +snd_ctl_elem_value_set_byte = _lib.snd_ctl_elem_value_set_byte +snd_ctl_elem_value_set_byte.restype = None +snd_ctl_elem_value_set_byte.argtypes = [POINTER(snd_ctl_elem_value_t), c_uint, c_ubyte] + +# /usr/include/alsa/control.h:440 +snd_ctl_elem_set_bytes = _lib.snd_ctl_elem_set_bytes +snd_ctl_elem_set_bytes.restype = None +snd_ctl_elem_set_bytes.argtypes = [POINTER(snd_ctl_elem_value_t), POINTER(None), c_size_t] + +# /usr/include/alsa/control.h:441 +snd_ctl_elem_value_get_bytes = _lib.snd_ctl_elem_value_get_bytes +snd_ctl_elem_value_get_bytes.restype = POINTER(c_void) +snd_ctl_elem_value_get_bytes.argtypes = [POINTER(snd_ctl_elem_value_t)] + +# /usr/include/alsa/control.h:442 +snd_ctl_elem_value_get_iec958 = _lib.snd_ctl_elem_value_get_iec958 +snd_ctl_elem_value_get_iec958.restype = None +snd_ctl_elem_value_get_iec958.argtypes = [POINTER(snd_ctl_elem_value_t), POINTER(snd_aes_iec958_t)] + +# /usr/include/alsa/control.h:443 +snd_ctl_elem_value_set_iec958 = _lib.snd_ctl_elem_value_set_iec958 +snd_ctl_elem_value_set_iec958.restype = None +snd_ctl_elem_value_set_iec958.argtypes = [POINTER(snd_ctl_elem_value_t), POINTER(snd_aes_iec958_t)] + +class struct__snd_hctl_elem(Structure): + __slots__ = [ + ] +struct__snd_hctl_elem._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_hctl_elem(Structure): + __slots__ = [ + ] +struct__snd_hctl_elem._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_hctl_elem_t = struct__snd_hctl_elem # /usr/include/alsa/control.h:454 +class struct__snd_hctl(Structure): + __slots__ = [ + ] +struct__snd_hctl._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_hctl(Structure): + __slots__ = [ + ] +struct__snd_hctl._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_hctl_t = struct__snd_hctl # /usr/include/alsa/control.h:457 +snd_hctl_compare_t = CFUNCTYPE(c_int, POINTER(snd_hctl_elem_t), POINTER(snd_hctl_elem_t)) # /usr/include/alsa/control.h:465 +# /usr/include/alsa/control.h:467 +snd_hctl_compare_fast = _lib.snd_hctl_compare_fast +snd_hctl_compare_fast.restype = c_int +snd_hctl_compare_fast.argtypes = [POINTER(snd_hctl_elem_t), POINTER(snd_hctl_elem_t)] + +snd_hctl_callback_t = CFUNCTYPE(c_int, POINTER(snd_hctl_t), c_uint, POINTER(snd_hctl_elem_t)) # /usr/include/alsa/control.h:476 +snd_hctl_elem_callback_t = CFUNCTYPE(c_int, POINTER(snd_hctl_elem_t), c_uint) # /usr/include/alsa/control.h:485 +# /usr/include/alsa/control.h:488 +snd_hctl_open = _lib.snd_hctl_open +snd_hctl_open.restype = c_int +snd_hctl_open.argtypes = [POINTER(POINTER(snd_hctl_t)), c_char_p, c_int] + +# /usr/include/alsa/control.h:489 +snd_hctl_open_ctl = _lib.snd_hctl_open_ctl +snd_hctl_open_ctl.restype = c_int +snd_hctl_open_ctl.argtypes = [POINTER(POINTER(snd_hctl_t)), POINTER(snd_ctl_t)] + +# /usr/include/alsa/control.h:490 +snd_hctl_close = _lib.snd_hctl_close +snd_hctl_close.restype = c_int +snd_hctl_close.argtypes = [POINTER(snd_hctl_t)] + +# /usr/include/alsa/control.h:491 +snd_hctl_nonblock = _lib.snd_hctl_nonblock +snd_hctl_nonblock.restype = c_int +snd_hctl_nonblock.argtypes = [POINTER(snd_hctl_t), c_int] + +# /usr/include/alsa/control.h:492 +snd_hctl_poll_descriptors_count = _lib.snd_hctl_poll_descriptors_count +snd_hctl_poll_descriptors_count.restype = c_int +snd_hctl_poll_descriptors_count.argtypes = [POINTER(snd_hctl_t)] + +class struct_pollfd(Structure): + __slots__ = [ + ] +struct_pollfd._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/control.h:493 +snd_hctl_poll_descriptors = _lib.snd_hctl_poll_descriptors +snd_hctl_poll_descriptors.restype = c_int +snd_hctl_poll_descriptors.argtypes = [POINTER(snd_hctl_t), POINTER(struct_pollfd), c_uint] + +class struct_pollfd(Structure): + __slots__ = [ + ] +struct_pollfd._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/control.h:494 +snd_hctl_poll_descriptors_revents = _lib.snd_hctl_poll_descriptors_revents +snd_hctl_poll_descriptors_revents.restype = c_int +snd_hctl_poll_descriptors_revents.argtypes = [POINTER(snd_hctl_t), POINTER(struct_pollfd), c_uint, POINTER(c_ushort)] + +# /usr/include/alsa/control.h:495 +snd_hctl_get_count = _lib.snd_hctl_get_count +snd_hctl_get_count.restype = c_uint +snd_hctl_get_count.argtypes = [POINTER(snd_hctl_t)] + +# /usr/include/alsa/control.h:496 +snd_hctl_set_compare = _lib.snd_hctl_set_compare +snd_hctl_set_compare.restype = c_int +snd_hctl_set_compare.argtypes = [POINTER(snd_hctl_t), snd_hctl_compare_t] + +# /usr/include/alsa/control.h:497 +snd_hctl_first_elem = _lib.snd_hctl_first_elem +snd_hctl_first_elem.restype = POINTER(snd_hctl_elem_t) +snd_hctl_first_elem.argtypes = [POINTER(snd_hctl_t)] + +# /usr/include/alsa/control.h:498 +snd_hctl_last_elem = _lib.snd_hctl_last_elem +snd_hctl_last_elem.restype = POINTER(snd_hctl_elem_t) +snd_hctl_last_elem.argtypes = [POINTER(snd_hctl_t)] + +# /usr/include/alsa/control.h:499 +snd_hctl_find_elem = _lib.snd_hctl_find_elem +snd_hctl_find_elem.restype = POINTER(snd_hctl_elem_t) +snd_hctl_find_elem.argtypes = [POINTER(snd_hctl_t), POINTER(snd_ctl_elem_id_t)] + +# /usr/include/alsa/control.h:500 +snd_hctl_set_callback = _lib.snd_hctl_set_callback +snd_hctl_set_callback.restype = None +snd_hctl_set_callback.argtypes = [POINTER(snd_hctl_t), snd_hctl_callback_t] + +# /usr/include/alsa/control.h:501 +snd_hctl_set_callback_private = _lib.snd_hctl_set_callback_private +snd_hctl_set_callback_private.restype = None +snd_hctl_set_callback_private.argtypes = [POINTER(snd_hctl_t), POINTER(None)] + +# /usr/include/alsa/control.h:502 +snd_hctl_get_callback_private = _lib.snd_hctl_get_callback_private +snd_hctl_get_callback_private.restype = POINTER(c_void) +snd_hctl_get_callback_private.argtypes = [POINTER(snd_hctl_t)] + +# /usr/include/alsa/control.h:503 +snd_hctl_load = _lib.snd_hctl_load +snd_hctl_load.restype = c_int +snd_hctl_load.argtypes = [POINTER(snd_hctl_t)] + +# /usr/include/alsa/control.h:504 +snd_hctl_free = _lib.snd_hctl_free +snd_hctl_free.restype = c_int +snd_hctl_free.argtypes = [POINTER(snd_hctl_t)] + +# /usr/include/alsa/control.h:505 +snd_hctl_handle_events = _lib.snd_hctl_handle_events +snd_hctl_handle_events.restype = c_int +snd_hctl_handle_events.argtypes = [POINTER(snd_hctl_t)] + +# /usr/include/alsa/control.h:506 +snd_hctl_name = _lib.snd_hctl_name +snd_hctl_name.restype = c_char_p +snd_hctl_name.argtypes = [POINTER(snd_hctl_t)] + +# /usr/include/alsa/control.h:507 +snd_hctl_wait = _lib.snd_hctl_wait +snd_hctl_wait.restype = c_int +snd_hctl_wait.argtypes = [POINTER(snd_hctl_t), c_int] + +# /usr/include/alsa/control.h:508 +snd_hctl_ctl = _lib.snd_hctl_ctl +snd_hctl_ctl.restype = POINTER(snd_ctl_t) +snd_hctl_ctl.argtypes = [POINTER(snd_hctl_t)] + +# /usr/include/alsa/control.h:510 +snd_hctl_elem_next = _lib.snd_hctl_elem_next +snd_hctl_elem_next.restype = POINTER(snd_hctl_elem_t) +snd_hctl_elem_next.argtypes = [POINTER(snd_hctl_elem_t)] + +# /usr/include/alsa/control.h:511 +snd_hctl_elem_prev = _lib.snd_hctl_elem_prev +snd_hctl_elem_prev.restype = POINTER(snd_hctl_elem_t) +snd_hctl_elem_prev.argtypes = [POINTER(snd_hctl_elem_t)] + +# /usr/include/alsa/control.h:512 +snd_hctl_elem_info = _lib.snd_hctl_elem_info +snd_hctl_elem_info.restype = c_int +snd_hctl_elem_info.argtypes = [POINTER(snd_hctl_elem_t), POINTER(snd_ctl_elem_info_t)] + +# /usr/include/alsa/control.h:513 +snd_hctl_elem_read = _lib.snd_hctl_elem_read +snd_hctl_elem_read.restype = c_int +snd_hctl_elem_read.argtypes = [POINTER(snd_hctl_elem_t), POINTER(snd_ctl_elem_value_t)] + +# /usr/include/alsa/control.h:514 +snd_hctl_elem_write = _lib.snd_hctl_elem_write +snd_hctl_elem_write.restype = c_int +snd_hctl_elem_write.argtypes = [POINTER(snd_hctl_elem_t), POINTER(snd_ctl_elem_value_t)] + +# /usr/include/alsa/control.h:515 +snd_hctl_elem_tlv_read = _lib.snd_hctl_elem_tlv_read +snd_hctl_elem_tlv_read.restype = c_int +snd_hctl_elem_tlv_read.argtypes = [POINTER(snd_hctl_elem_t), POINTER(c_uint), c_uint] + +# /usr/include/alsa/control.h:516 +snd_hctl_elem_tlv_write = _lib.snd_hctl_elem_tlv_write +snd_hctl_elem_tlv_write.restype = c_int +snd_hctl_elem_tlv_write.argtypes = [POINTER(snd_hctl_elem_t), POINTER(c_uint)] + +# /usr/include/alsa/control.h:517 +snd_hctl_elem_tlv_command = _lib.snd_hctl_elem_tlv_command +snd_hctl_elem_tlv_command.restype = c_int +snd_hctl_elem_tlv_command.argtypes = [POINTER(snd_hctl_elem_t), POINTER(c_uint)] + +# /usr/include/alsa/control.h:519 +snd_hctl_elem_get_hctl = _lib.snd_hctl_elem_get_hctl +snd_hctl_elem_get_hctl.restype = POINTER(snd_hctl_t) +snd_hctl_elem_get_hctl.argtypes = [POINTER(snd_hctl_elem_t)] + +# /usr/include/alsa/control.h:521 +snd_hctl_elem_get_id = _lib.snd_hctl_elem_get_id +snd_hctl_elem_get_id.restype = None +snd_hctl_elem_get_id.argtypes = [POINTER(snd_hctl_elem_t), POINTER(snd_ctl_elem_id_t)] + +# /usr/include/alsa/control.h:522 +snd_hctl_elem_get_numid = _lib.snd_hctl_elem_get_numid +snd_hctl_elem_get_numid.restype = c_uint +snd_hctl_elem_get_numid.argtypes = [POINTER(snd_hctl_elem_t)] + +# /usr/include/alsa/control.h:523 +snd_hctl_elem_get_interface = _lib.snd_hctl_elem_get_interface +snd_hctl_elem_get_interface.restype = snd_ctl_elem_iface_t +snd_hctl_elem_get_interface.argtypes = [POINTER(snd_hctl_elem_t)] + +# /usr/include/alsa/control.h:524 +snd_hctl_elem_get_device = _lib.snd_hctl_elem_get_device +snd_hctl_elem_get_device.restype = c_uint +snd_hctl_elem_get_device.argtypes = [POINTER(snd_hctl_elem_t)] + +# /usr/include/alsa/control.h:525 +snd_hctl_elem_get_subdevice = _lib.snd_hctl_elem_get_subdevice +snd_hctl_elem_get_subdevice.restype = c_uint +snd_hctl_elem_get_subdevice.argtypes = [POINTER(snd_hctl_elem_t)] + +# /usr/include/alsa/control.h:526 +snd_hctl_elem_get_name = _lib.snd_hctl_elem_get_name +snd_hctl_elem_get_name.restype = c_char_p +snd_hctl_elem_get_name.argtypes = [POINTER(snd_hctl_elem_t)] + +# /usr/include/alsa/control.h:527 +snd_hctl_elem_get_index = _lib.snd_hctl_elem_get_index +snd_hctl_elem_get_index.restype = c_uint +snd_hctl_elem_get_index.argtypes = [POINTER(snd_hctl_elem_t)] + +# /usr/include/alsa/control.h:528 +snd_hctl_elem_set_callback = _lib.snd_hctl_elem_set_callback +snd_hctl_elem_set_callback.restype = None +snd_hctl_elem_set_callback.argtypes = [POINTER(snd_hctl_elem_t), snd_hctl_elem_callback_t] + +# /usr/include/alsa/control.h:529 +snd_hctl_elem_get_callback_private = _lib.snd_hctl_elem_get_callback_private +snd_hctl_elem_get_callback_private.restype = POINTER(c_void) +snd_hctl_elem_get_callback_private.argtypes = [POINTER(snd_hctl_elem_t)] + +# /usr/include/alsa/control.h:530 +snd_hctl_elem_set_callback_private = _lib.snd_hctl_elem_set_callback_private +snd_hctl_elem_set_callback_private.restype = None +snd_hctl_elem_set_callback_private.argtypes = [POINTER(snd_hctl_elem_t), POINTER(None)] + +# /usr/include/alsa/control.h:543 +snd_sctl_build = _lib.snd_sctl_build +snd_sctl_build.restype = c_int +snd_sctl_build.argtypes = [POINTER(POINTER(snd_sctl_t)), POINTER(snd_ctl_t), POINTER(snd_config_t), POINTER(snd_config_t), c_int] + +# /usr/include/alsa/control.h:545 +snd_sctl_free = _lib.snd_sctl_free +snd_sctl_free.restype = c_int +snd_sctl_free.argtypes = [POINTER(snd_sctl_t)] + +# /usr/include/alsa/control.h:546 +snd_sctl_install = _lib.snd_sctl_install +snd_sctl_install.restype = c_int +snd_sctl_install.argtypes = [POINTER(snd_sctl_t)] + +# /usr/include/alsa/control.h:547 +snd_sctl_remove = _lib.snd_sctl_remove +snd_sctl_remove.restype = c_int +snd_sctl_remove.argtypes = [POINTER(snd_sctl_t)] + +class struct__snd_mixer(Structure): + __slots__ = [ + ] +struct__snd_mixer._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_mixer(Structure): + __slots__ = [ + ] +struct__snd_mixer._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_mixer_t = struct__snd_mixer # /usr/include/alsa/mixer.h:42 +class struct__snd_mixer_class(Structure): + __slots__ = [ + ] +struct__snd_mixer_class._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_mixer_class(Structure): + __slots__ = [ + ] +struct__snd_mixer_class._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_mixer_class_t = struct__snd_mixer_class # /usr/include/alsa/mixer.h:44 +class struct__snd_mixer_elem(Structure): + __slots__ = [ + ] +struct__snd_mixer_elem._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_mixer_elem(Structure): + __slots__ = [ + ] +struct__snd_mixer_elem._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_mixer_elem_t = struct__snd_mixer_elem # /usr/include/alsa/mixer.h:46 +snd_mixer_callback_t = CFUNCTYPE(c_int, POINTER(snd_mixer_t), c_uint, POINTER(snd_mixer_elem_t)) # /usr/include/alsa/mixer.h:55 +snd_mixer_elem_callback_t = CFUNCTYPE(c_int, POINTER(snd_mixer_elem_t), c_uint) # /usr/include/alsa/mixer.h:65 +snd_mixer_compare_t = CFUNCTYPE(c_int, POINTER(snd_mixer_elem_t), POINTER(snd_mixer_elem_t)) # /usr/include/alsa/mixer.h:74 +snd_mixer_event_t = CFUNCTYPE(c_int, POINTER(snd_mixer_class_t), c_uint, POINTER(snd_hctl_elem_t), POINTER(snd_mixer_elem_t)) # /usr/include/alsa/mixer.h:85 +enum__snd_mixer_elem_type = c_int +SND_MIXER_ELEM_SIMPLE = 1 +SND_MIXER_ELEM_LAST = 0 +snd_mixer_elem_type_t = enum__snd_mixer_elem_type # /usr/include/alsa/mixer.h:94 +# /usr/include/alsa/mixer.h:96 +snd_mixer_open = _lib.snd_mixer_open +snd_mixer_open.restype = c_int +snd_mixer_open.argtypes = [POINTER(POINTER(snd_mixer_t)), c_int] + +# /usr/include/alsa/mixer.h:97 +snd_mixer_close = _lib.snd_mixer_close +snd_mixer_close.restype = c_int +snd_mixer_close.argtypes = [POINTER(snd_mixer_t)] + +# /usr/include/alsa/mixer.h:98 +snd_mixer_first_elem = _lib.snd_mixer_first_elem +snd_mixer_first_elem.restype = POINTER(snd_mixer_elem_t) +snd_mixer_first_elem.argtypes = [POINTER(snd_mixer_t)] + +# /usr/include/alsa/mixer.h:99 +snd_mixer_last_elem = _lib.snd_mixer_last_elem +snd_mixer_last_elem.restype = POINTER(snd_mixer_elem_t) +snd_mixer_last_elem.argtypes = [POINTER(snd_mixer_t)] + +# /usr/include/alsa/mixer.h:100 +snd_mixer_handle_events = _lib.snd_mixer_handle_events +snd_mixer_handle_events.restype = c_int +snd_mixer_handle_events.argtypes = [POINTER(snd_mixer_t)] + +# /usr/include/alsa/mixer.h:101 +snd_mixer_attach = _lib.snd_mixer_attach +snd_mixer_attach.restype = c_int +snd_mixer_attach.argtypes = [POINTER(snd_mixer_t), c_char_p] + +# /usr/include/alsa/mixer.h:102 +snd_mixer_attach_hctl = _lib.snd_mixer_attach_hctl +snd_mixer_attach_hctl.restype = c_int +snd_mixer_attach_hctl.argtypes = [POINTER(snd_mixer_t), POINTER(snd_hctl_t)] + +# /usr/include/alsa/mixer.h:103 +snd_mixer_detach = _lib.snd_mixer_detach +snd_mixer_detach.restype = c_int +snd_mixer_detach.argtypes = [POINTER(snd_mixer_t), c_char_p] + +# /usr/include/alsa/mixer.h:104 +snd_mixer_detach_hctl = _lib.snd_mixer_detach_hctl +snd_mixer_detach_hctl.restype = c_int +snd_mixer_detach_hctl.argtypes = [POINTER(snd_mixer_t), POINTER(snd_hctl_t)] + +# /usr/include/alsa/mixer.h:105 +snd_mixer_get_hctl = _lib.snd_mixer_get_hctl +snd_mixer_get_hctl.restype = c_int +snd_mixer_get_hctl.argtypes = [POINTER(snd_mixer_t), c_char_p, POINTER(POINTER(snd_hctl_t))] + +# /usr/include/alsa/mixer.h:106 +snd_mixer_poll_descriptors_count = _lib.snd_mixer_poll_descriptors_count +snd_mixer_poll_descriptors_count.restype = c_int +snd_mixer_poll_descriptors_count.argtypes = [POINTER(snd_mixer_t)] + +class struct_pollfd(Structure): + __slots__ = [ + ] +struct_pollfd._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/mixer.h:107 +snd_mixer_poll_descriptors = _lib.snd_mixer_poll_descriptors +snd_mixer_poll_descriptors.restype = c_int +snd_mixer_poll_descriptors.argtypes = [POINTER(snd_mixer_t), POINTER(struct_pollfd), c_uint] + +class struct_pollfd(Structure): + __slots__ = [ + ] +struct_pollfd._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/mixer.h:108 +snd_mixer_poll_descriptors_revents = _lib.snd_mixer_poll_descriptors_revents +snd_mixer_poll_descriptors_revents.restype = c_int +snd_mixer_poll_descriptors_revents.argtypes = [POINTER(snd_mixer_t), POINTER(struct_pollfd), c_uint, POINTER(c_ushort)] + +# /usr/include/alsa/mixer.h:109 +snd_mixer_load = _lib.snd_mixer_load +snd_mixer_load.restype = c_int +snd_mixer_load.argtypes = [POINTER(snd_mixer_t)] + +# /usr/include/alsa/mixer.h:110 +snd_mixer_free = _lib.snd_mixer_free +snd_mixer_free.restype = None +snd_mixer_free.argtypes = [POINTER(snd_mixer_t)] + +# /usr/include/alsa/mixer.h:111 +snd_mixer_wait = _lib.snd_mixer_wait +snd_mixer_wait.restype = c_int +snd_mixer_wait.argtypes = [POINTER(snd_mixer_t), c_int] + +# /usr/include/alsa/mixer.h:112 +snd_mixer_set_compare = _lib.snd_mixer_set_compare +snd_mixer_set_compare.restype = c_int +snd_mixer_set_compare.argtypes = [POINTER(snd_mixer_t), snd_mixer_compare_t] + +# /usr/include/alsa/mixer.h:113 +snd_mixer_set_callback = _lib.snd_mixer_set_callback +snd_mixer_set_callback.restype = None +snd_mixer_set_callback.argtypes = [POINTER(snd_mixer_t), snd_mixer_callback_t] + +# /usr/include/alsa/mixer.h:114 +snd_mixer_get_callback_private = _lib.snd_mixer_get_callback_private +snd_mixer_get_callback_private.restype = POINTER(c_void) +snd_mixer_get_callback_private.argtypes = [POINTER(snd_mixer_t)] + +# /usr/include/alsa/mixer.h:115 +snd_mixer_set_callback_private = _lib.snd_mixer_set_callback_private +snd_mixer_set_callback_private.restype = None +snd_mixer_set_callback_private.argtypes = [POINTER(snd_mixer_t), POINTER(None)] + +# /usr/include/alsa/mixer.h:116 +snd_mixer_get_count = _lib.snd_mixer_get_count +snd_mixer_get_count.restype = c_uint +snd_mixer_get_count.argtypes = [POINTER(snd_mixer_t)] + +# /usr/include/alsa/mixer.h:117 +snd_mixer_class_unregister = _lib.snd_mixer_class_unregister +snd_mixer_class_unregister.restype = c_int +snd_mixer_class_unregister.argtypes = [POINTER(snd_mixer_class_t)] + +# /usr/include/alsa/mixer.h:119 +snd_mixer_elem_next = _lib.snd_mixer_elem_next +snd_mixer_elem_next.restype = POINTER(snd_mixer_elem_t) +snd_mixer_elem_next.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:120 +snd_mixer_elem_prev = _lib.snd_mixer_elem_prev +snd_mixer_elem_prev.restype = POINTER(snd_mixer_elem_t) +snd_mixer_elem_prev.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:121 +snd_mixer_elem_set_callback = _lib.snd_mixer_elem_set_callback +snd_mixer_elem_set_callback.restype = None +snd_mixer_elem_set_callback.argtypes = [POINTER(snd_mixer_elem_t), snd_mixer_elem_callback_t] + +# /usr/include/alsa/mixer.h:122 +snd_mixer_elem_get_callback_private = _lib.snd_mixer_elem_get_callback_private +snd_mixer_elem_get_callback_private.restype = POINTER(c_void) +snd_mixer_elem_get_callback_private.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:123 +snd_mixer_elem_set_callback_private = _lib.snd_mixer_elem_set_callback_private +snd_mixer_elem_set_callback_private.restype = None +snd_mixer_elem_set_callback_private.argtypes = [POINTER(snd_mixer_elem_t), POINTER(None)] + +# /usr/include/alsa/mixer.h:124 +snd_mixer_elem_get_type = _lib.snd_mixer_elem_get_type +snd_mixer_elem_get_type.restype = snd_mixer_elem_type_t +snd_mixer_elem_get_type.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:126 +snd_mixer_class_register = _lib.snd_mixer_class_register +snd_mixer_class_register.restype = c_int +snd_mixer_class_register.argtypes = [POINTER(snd_mixer_class_t), POINTER(snd_mixer_t)] + +''' +# XXX these two functions don't exist in my libasound.so +# /usr/include/alsa/mixer.h:127 +snd_mixer_add_elem = _lib.snd_mixer_add_elem +snd_mixer_add_elem.restype = c_int +snd_mixer_add_elem.argtypes = [POINTER(snd_mixer_t), POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:128 +snd_mixer_remove_elem = _lib.snd_mixer_remove_elem +snd_mixer_remove_elem.restype = c_int +snd_mixer_remove_elem.argtypes = [POINTER(snd_mixer_t), POINTER(snd_mixer_elem_t)] +''' + +# /usr/include/alsa/mixer.h:129 +snd_mixer_elem_new = _lib.snd_mixer_elem_new +snd_mixer_elem_new.restype = c_int +snd_mixer_elem_new.argtypes = [POINTER(POINTER(snd_mixer_elem_t)), snd_mixer_elem_type_t, c_int, POINTER(None), CFUNCTYPE(None, POINTER(snd_mixer_elem_t))] + +# /usr/include/alsa/mixer.h:134 +snd_mixer_elem_add = _lib.snd_mixer_elem_add +snd_mixer_elem_add.restype = c_int +snd_mixer_elem_add.argtypes = [POINTER(snd_mixer_elem_t), POINTER(snd_mixer_class_t)] + +# /usr/include/alsa/mixer.h:135 +snd_mixer_elem_remove = _lib.snd_mixer_elem_remove +snd_mixer_elem_remove.restype = c_int +snd_mixer_elem_remove.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:136 +snd_mixer_elem_free = _lib.snd_mixer_elem_free +snd_mixer_elem_free.restype = None +snd_mixer_elem_free.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:137 +snd_mixer_elem_info = _lib.snd_mixer_elem_info +snd_mixer_elem_info.restype = c_int +snd_mixer_elem_info.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:138 +snd_mixer_elem_value = _lib.snd_mixer_elem_value +snd_mixer_elem_value.restype = c_int +snd_mixer_elem_value.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:139 +snd_mixer_elem_attach = _lib.snd_mixer_elem_attach +snd_mixer_elem_attach.restype = c_int +snd_mixer_elem_attach.argtypes = [POINTER(snd_mixer_elem_t), POINTER(snd_hctl_elem_t)] + +# /usr/include/alsa/mixer.h:140 +snd_mixer_elem_detach = _lib.snd_mixer_elem_detach +snd_mixer_elem_detach.restype = c_int +snd_mixer_elem_detach.argtypes = [POINTER(snd_mixer_elem_t), POINTER(snd_hctl_elem_t)] + +# /usr/include/alsa/mixer.h:141 +snd_mixer_elem_empty = _lib.snd_mixer_elem_empty +snd_mixer_elem_empty.restype = c_int +snd_mixer_elem_empty.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:142 +snd_mixer_elem_get_private = _lib.snd_mixer_elem_get_private +snd_mixer_elem_get_private.restype = POINTER(c_void) +snd_mixer_elem_get_private.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:144 +snd_mixer_class_sizeof = _lib.snd_mixer_class_sizeof +snd_mixer_class_sizeof.restype = c_size_t +snd_mixer_class_sizeof.argtypes = [] + +# /usr/include/alsa/mixer.h:150 +snd_mixer_class_malloc = _lib.snd_mixer_class_malloc +snd_mixer_class_malloc.restype = c_int +snd_mixer_class_malloc.argtypes = [POINTER(POINTER(snd_mixer_class_t))] + +# /usr/include/alsa/mixer.h:151 +snd_mixer_class_free = _lib.snd_mixer_class_free +snd_mixer_class_free.restype = None +snd_mixer_class_free.argtypes = [POINTER(snd_mixer_class_t)] + +# /usr/include/alsa/mixer.h:152 +snd_mixer_class_copy = _lib.snd_mixer_class_copy +snd_mixer_class_copy.restype = None +snd_mixer_class_copy.argtypes = [POINTER(snd_mixer_class_t), POINTER(snd_mixer_class_t)] + +# /usr/include/alsa/mixer.h:153 +snd_mixer_class_get_mixer = _lib.snd_mixer_class_get_mixer +snd_mixer_class_get_mixer.restype = POINTER(snd_mixer_t) +snd_mixer_class_get_mixer.argtypes = [POINTER(snd_mixer_class_t)] + +# /usr/include/alsa/mixer.h:154 +snd_mixer_class_get_event = _lib.snd_mixer_class_get_event +snd_mixer_class_get_event.restype = snd_mixer_event_t +snd_mixer_class_get_event.argtypes = [POINTER(snd_mixer_class_t)] + +# /usr/include/alsa/mixer.h:155 +snd_mixer_class_get_private = _lib.snd_mixer_class_get_private +snd_mixer_class_get_private.restype = POINTER(c_void) +snd_mixer_class_get_private.argtypes = [POINTER(snd_mixer_class_t)] + +# /usr/include/alsa/mixer.h:156 +snd_mixer_class_get_compare = _lib.snd_mixer_class_get_compare +snd_mixer_class_get_compare.restype = snd_mixer_compare_t +snd_mixer_class_get_compare.argtypes = [POINTER(snd_mixer_class_t)] + +# /usr/include/alsa/mixer.h:157 +snd_mixer_class_set_event = _lib.snd_mixer_class_set_event +snd_mixer_class_set_event.restype = c_int +snd_mixer_class_set_event.argtypes = [POINTER(snd_mixer_class_t), snd_mixer_event_t] + +# /usr/include/alsa/mixer.h:158 +snd_mixer_class_set_private = _lib.snd_mixer_class_set_private +snd_mixer_class_set_private.restype = c_int +snd_mixer_class_set_private.argtypes = [POINTER(snd_mixer_class_t), POINTER(None)] + +# /usr/include/alsa/mixer.h:159 +snd_mixer_class_set_private_free = _lib.snd_mixer_class_set_private_free +snd_mixer_class_set_private_free.restype = c_int +snd_mixer_class_set_private_free.argtypes = [POINTER(snd_mixer_class_t), CFUNCTYPE(None, POINTER(snd_mixer_class_t))] + +# /usr/include/alsa/mixer.h:160 +snd_mixer_class_set_compare = _lib.snd_mixer_class_set_compare +snd_mixer_class_set_compare.restype = c_int +snd_mixer_class_set_compare.argtypes = [POINTER(snd_mixer_class_t), snd_mixer_compare_t] + +enum__snd_mixer_selem_channel_id = c_int +SND_MIXER_SCHN_UNKNOWN = 1 +SND_MIXER_SCHN_FRONT_LEFT = 0 +SND_MIXER_SCHN_FRONT_RIGHT = 1 +SND_MIXER_SCHN_REAR_LEFT = 2 +SND_MIXER_SCHN_REAR_RIGHT = 3 +SND_MIXER_SCHN_FRONT_CENTER = 4 +SND_MIXER_SCHN_WOOFER = 5 +SND_MIXER_SCHN_SIDE_LEFT = 6 +SND_MIXER_SCHN_SIDE_RIGHT = 7 +SND_MIXER_SCHN_REAR_CENTER = 8 +SND_MIXER_SCHN_LAST = 31 +SND_MIXER_SCHN_MONO = 0 +snd_mixer_selem_channel_id_t = enum__snd_mixer_selem_channel_id # /usr/include/alsa/mixer.h:196 +class struct__snd_mixer_selem_id(Structure): + __slots__ = [ + ] +struct__snd_mixer_selem_id._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_mixer_selem_id(Structure): + __slots__ = [ + ] +struct__snd_mixer_selem_id._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_mixer_selem_id_t = struct__snd_mixer_selem_id # /usr/include/alsa/mixer.h:221 +# /usr/include/alsa/mixer.h:223 +snd_mixer_selem_channel_name = _lib.snd_mixer_selem_channel_name +snd_mixer_selem_channel_name.restype = c_char_p +snd_mixer_selem_channel_name.argtypes = [snd_mixer_selem_channel_id_t] + +class struct_snd_mixer_selem_regopt(Structure): + __slots__ = [ + ] +struct_snd_mixer_selem_regopt._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/mixer.h:225 +snd_mixer_selem_register = _lib.snd_mixer_selem_register +snd_mixer_selem_register.restype = c_int +snd_mixer_selem_register.argtypes = [POINTER(snd_mixer_t), POINTER(struct_snd_mixer_selem_regopt), POINTER(POINTER(snd_mixer_class_t))] + +# /usr/include/alsa/mixer.h:228 +snd_mixer_selem_get_id = _lib.snd_mixer_selem_get_id +snd_mixer_selem_get_id.restype = None +snd_mixer_selem_get_id.argtypes = [POINTER(snd_mixer_elem_t), POINTER(snd_mixer_selem_id_t)] + +# /usr/include/alsa/mixer.h:230 +snd_mixer_selem_get_name = _lib.snd_mixer_selem_get_name +snd_mixer_selem_get_name.restype = c_char_p +snd_mixer_selem_get_name.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:231 +snd_mixer_selem_get_index = _lib.snd_mixer_selem_get_index +snd_mixer_selem_get_index.restype = c_uint +snd_mixer_selem_get_index.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:232 +snd_mixer_find_selem = _lib.snd_mixer_find_selem +snd_mixer_find_selem.restype = POINTER(snd_mixer_elem_t) +snd_mixer_find_selem.argtypes = [POINTER(snd_mixer_t), POINTER(snd_mixer_selem_id_t)] + +# /usr/include/alsa/mixer.h:235 +snd_mixer_selem_is_active = _lib.snd_mixer_selem_is_active +snd_mixer_selem_is_active.restype = c_int +snd_mixer_selem_is_active.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:236 +snd_mixer_selem_is_playback_mono = _lib.snd_mixer_selem_is_playback_mono +snd_mixer_selem_is_playback_mono.restype = c_int +snd_mixer_selem_is_playback_mono.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:237 +snd_mixer_selem_has_playback_channel = _lib.snd_mixer_selem_has_playback_channel +snd_mixer_selem_has_playback_channel.restype = c_int +snd_mixer_selem_has_playback_channel.argtypes = [POINTER(snd_mixer_elem_t), snd_mixer_selem_channel_id_t] + +# /usr/include/alsa/mixer.h:238 +snd_mixer_selem_is_capture_mono = _lib.snd_mixer_selem_is_capture_mono +snd_mixer_selem_is_capture_mono.restype = c_int +snd_mixer_selem_is_capture_mono.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:239 +snd_mixer_selem_has_capture_channel = _lib.snd_mixer_selem_has_capture_channel +snd_mixer_selem_has_capture_channel.restype = c_int +snd_mixer_selem_has_capture_channel.argtypes = [POINTER(snd_mixer_elem_t), snd_mixer_selem_channel_id_t] + +# /usr/include/alsa/mixer.h:240 +snd_mixer_selem_get_capture_group = _lib.snd_mixer_selem_get_capture_group +snd_mixer_selem_get_capture_group.restype = c_int +snd_mixer_selem_get_capture_group.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:241 +snd_mixer_selem_has_common_volume = _lib.snd_mixer_selem_has_common_volume +snd_mixer_selem_has_common_volume.restype = c_int +snd_mixer_selem_has_common_volume.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:242 +snd_mixer_selem_has_playback_volume = _lib.snd_mixer_selem_has_playback_volume +snd_mixer_selem_has_playback_volume.restype = c_int +snd_mixer_selem_has_playback_volume.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:243 +snd_mixer_selem_has_playback_volume_joined = _lib.snd_mixer_selem_has_playback_volume_joined +snd_mixer_selem_has_playback_volume_joined.restype = c_int +snd_mixer_selem_has_playback_volume_joined.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:244 +snd_mixer_selem_has_capture_volume = _lib.snd_mixer_selem_has_capture_volume +snd_mixer_selem_has_capture_volume.restype = c_int +snd_mixer_selem_has_capture_volume.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:245 +snd_mixer_selem_has_capture_volume_joined = _lib.snd_mixer_selem_has_capture_volume_joined +snd_mixer_selem_has_capture_volume_joined.restype = c_int +snd_mixer_selem_has_capture_volume_joined.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:246 +snd_mixer_selem_has_common_switch = _lib.snd_mixer_selem_has_common_switch +snd_mixer_selem_has_common_switch.restype = c_int +snd_mixer_selem_has_common_switch.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:247 +snd_mixer_selem_has_playback_switch = _lib.snd_mixer_selem_has_playback_switch +snd_mixer_selem_has_playback_switch.restype = c_int +snd_mixer_selem_has_playback_switch.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:248 +snd_mixer_selem_has_playback_switch_joined = _lib.snd_mixer_selem_has_playback_switch_joined +snd_mixer_selem_has_playback_switch_joined.restype = c_int +snd_mixer_selem_has_playback_switch_joined.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:249 +snd_mixer_selem_has_capture_switch = _lib.snd_mixer_selem_has_capture_switch +snd_mixer_selem_has_capture_switch.restype = c_int +snd_mixer_selem_has_capture_switch.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:250 +snd_mixer_selem_has_capture_switch_joined = _lib.snd_mixer_selem_has_capture_switch_joined +snd_mixer_selem_has_capture_switch_joined.restype = c_int +snd_mixer_selem_has_capture_switch_joined.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:251 +snd_mixer_selem_has_capture_switch_exclusive = _lib.snd_mixer_selem_has_capture_switch_exclusive +snd_mixer_selem_has_capture_switch_exclusive.restype = c_int +snd_mixer_selem_has_capture_switch_exclusive.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:253 +snd_mixer_selem_get_playback_volume = _lib.snd_mixer_selem_get_playback_volume +snd_mixer_selem_get_playback_volume.restype = c_int +snd_mixer_selem_get_playback_volume.argtypes = [POINTER(snd_mixer_elem_t), snd_mixer_selem_channel_id_t, POINTER(c_long)] + +# /usr/include/alsa/mixer.h:254 +snd_mixer_selem_get_capture_volume = _lib.snd_mixer_selem_get_capture_volume +snd_mixer_selem_get_capture_volume.restype = c_int +snd_mixer_selem_get_capture_volume.argtypes = [POINTER(snd_mixer_elem_t), snd_mixer_selem_channel_id_t, POINTER(c_long)] + +# /usr/include/alsa/mixer.h:255 +snd_mixer_selem_get_playback_dB = _lib.snd_mixer_selem_get_playback_dB +snd_mixer_selem_get_playback_dB.restype = c_int +snd_mixer_selem_get_playback_dB.argtypes = [POINTER(snd_mixer_elem_t), snd_mixer_selem_channel_id_t, POINTER(c_long)] + +# /usr/include/alsa/mixer.h:256 +snd_mixer_selem_get_capture_dB = _lib.snd_mixer_selem_get_capture_dB +snd_mixer_selem_get_capture_dB.restype = c_int +snd_mixer_selem_get_capture_dB.argtypes = [POINTER(snd_mixer_elem_t), snd_mixer_selem_channel_id_t, POINTER(c_long)] + +# /usr/include/alsa/mixer.h:257 +snd_mixer_selem_get_playback_switch = _lib.snd_mixer_selem_get_playback_switch +snd_mixer_selem_get_playback_switch.restype = c_int +snd_mixer_selem_get_playback_switch.argtypes = [POINTER(snd_mixer_elem_t), snd_mixer_selem_channel_id_t, POINTER(c_int)] + +# /usr/include/alsa/mixer.h:258 +snd_mixer_selem_get_capture_switch = _lib.snd_mixer_selem_get_capture_switch +snd_mixer_selem_get_capture_switch.restype = c_int +snd_mixer_selem_get_capture_switch.argtypes = [POINTER(snd_mixer_elem_t), snd_mixer_selem_channel_id_t, POINTER(c_int)] + +# /usr/include/alsa/mixer.h:259 +snd_mixer_selem_set_playback_volume = _lib.snd_mixer_selem_set_playback_volume +snd_mixer_selem_set_playback_volume.restype = c_int +snd_mixer_selem_set_playback_volume.argtypes = [POINTER(snd_mixer_elem_t), snd_mixer_selem_channel_id_t, c_long] + +# /usr/include/alsa/mixer.h:260 +snd_mixer_selem_set_capture_volume = _lib.snd_mixer_selem_set_capture_volume +snd_mixer_selem_set_capture_volume.restype = c_int +snd_mixer_selem_set_capture_volume.argtypes = [POINTER(snd_mixer_elem_t), snd_mixer_selem_channel_id_t, c_long] + +# /usr/include/alsa/mixer.h:261 +snd_mixer_selem_set_playback_dB = _lib.snd_mixer_selem_set_playback_dB +snd_mixer_selem_set_playback_dB.restype = c_int +snd_mixer_selem_set_playback_dB.argtypes = [POINTER(snd_mixer_elem_t), snd_mixer_selem_channel_id_t, c_long, c_int] + +# /usr/include/alsa/mixer.h:262 +snd_mixer_selem_set_capture_dB = _lib.snd_mixer_selem_set_capture_dB +snd_mixer_selem_set_capture_dB.restype = c_int +snd_mixer_selem_set_capture_dB.argtypes = [POINTER(snd_mixer_elem_t), snd_mixer_selem_channel_id_t, c_long, c_int] + +# /usr/include/alsa/mixer.h:263 +snd_mixer_selem_set_playback_volume_all = _lib.snd_mixer_selem_set_playback_volume_all +snd_mixer_selem_set_playback_volume_all.restype = c_int +snd_mixer_selem_set_playback_volume_all.argtypes = [POINTER(snd_mixer_elem_t), c_long] + +# /usr/include/alsa/mixer.h:264 +snd_mixer_selem_set_capture_volume_all = _lib.snd_mixer_selem_set_capture_volume_all +snd_mixer_selem_set_capture_volume_all.restype = c_int +snd_mixer_selem_set_capture_volume_all.argtypes = [POINTER(snd_mixer_elem_t), c_long] + +# /usr/include/alsa/mixer.h:265 +snd_mixer_selem_set_playback_dB_all = _lib.snd_mixer_selem_set_playback_dB_all +snd_mixer_selem_set_playback_dB_all.restype = c_int +snd_mixer_selem_set_playback_dB_all.argtypes = [POINTER(snd_mixer_elem_t), c_long, c_int] + +# /usr/include/alsa/mixer.h:266 +snd_mixer_selem_set_capture_dB_all = _lib.snd_mixer_selem_set_capture_dB_all +snd_mixer_selem_set_capture_dB_all.restype = c_int +snd_mixer_selem_set_capture_dB_all.argtypes = [POINTER(snd_mixer_elem_t), c_long, c_int] + +# /usr/include/alsa/mixer.h:267 +snd_mixer_selem_set_playback_switch = _lib.snd_mixer_selem_set_playback_switch +snd_mixer_selem_set_playback_switch.restype = c_int +snd_mixer_selem_set_playback_switch.argtypes = [POINTER(snd_mixer_elem_t), snd_mixer_selem_channel_id_t, c_int] + +# /usr/include/alsa/mixer.h:268 +snd_mixer_selem_set_capture_switch = _lib.snd_mixer_selem_set_capture_switch +snd_mixer_selem_set_capture_switch.restype = c_int +snd_mixer_selem_set_capture_switch.argtypes = [POINTER(snd_mixer_elem_t), snd_mixer_selem_channel_id_t, c_int] + +# /usr/include/alsa/mixer.h:269 +snd_mixer_selem_set_playback_switch_all = _lib.snd_mixer_selem_set_playback_switch_all +snd_mixer_selem_set_playback_switch_all.restype = c_int +snd_mixer_selem_set_playback_switch_all.argtypes = [POINTER(snd_mixer_elem_t), c_int] + +# /usr/include/alsa/mixer.h:270 +snd_mixer_selem_set_capture_switch_all = _lib.snd_mixer_selem_set_capture_switch_all +snd_mixer_selem_set_capture_switch_all.restype = c_int +snd_mixer_selem_set_capture_switch_all.argtypes = [POINTER(snd_mixer_elem_t), c_int] + +# /usr/include/alsa/mixer.h:271 +snd_mixer_selem_get_playback_volume_range = _lib.snd_mixer_selem_get_playback_volume_range +snd_mixer_selem_get_playback_volume_range.restype = c_int +snd_mixer_selem_get_playback_volume_range.argtypes = [POINTER(snd_mixer_elem_t), POINTER(c_long), POINTER(c_long)] + +# /usr/include/alsa/mixer.h:273 +snd_mixer_selem_get_playback_dB_range = _lib.snd_mixer_selem_get_playback_dB_range +snd_mixer_selem_get_playback_dB_range.restype = c_int +snd_mixer_selem_get_playback_dB_range.argtypes = [POINTER(snd_mixer_elem_t), POINTER(c_long), POINTER(c_long)] + +# /usr/include/alsa/mixer.h:275 +snd_mixer_selem_set_playback_volume_range = _lib.snd_mixer_selem_set_playback_volume_range +snd_mixer_selem_set_playback_volume_range.restype = c_int +snd_mixer_selem_set_playback_volume_range.argtypes = [POINTER(snd_mixer_elem_t), c_long, c_long] + +# /usr/include/alsa/mixer.h:277 +snd_mixer_selem_get_capture_volume_range = _lib.snd_mixer_selem_get_capture_volume_range +snd_mixer_selem_get_capture_volume_range.restype = c_int +snd_mixer_selem_get_capture_volume_range.argtypes = [POINTER(snd_mixer_elem_t), POINTER(c_long), POINTER(c_long)] + +# /usr/include/alsa/mixer.h:279 +snd_mixer_selem_get_capture_dB_range = _lib.snd_mixer_selem_get_capture_dB_range +snd_mixer_selem_get_capture_dB_range.restype = c_int +snd_mixer_selem_get_capture_dB_range.argtypes = [POINTER(snd_mixer_elem_t), POINTER(c_long), POINTER(c_long)] + +# /usr/include/alsa/mixer.h:281 +snd_mixer_selem_set_capture_volume_range = _lib.snd_mixer_selem_set_capture_volume_range +snd_mixer_selem_set_capture_volume_range.restype = c_int +snd_mixer_selem_set_capture_volume_range.argtypes = [POINTER(snd_mixer_elem_t), c_long, c_long] + +# /usr/include/alsa/mixer.h:284 +snd_mixer_selem_is_enumerated = _lib.snd_mixer_selem_is_enumerated +snd_mixer_selem_is_enumerated.restype = c_int +snd_mixer_selem_is_enumerated.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:285 +snd_mixer_selem_is_enum_playback = _lib.snd_mixer_selem_is_enum_playback +snd_mixer_selem_is_enum_playback.restype = c_int +snd_mixer_selem_is_enum_playback.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:286 +snd_mixer_selem_is_enum_capture = _lib.snd_mixer_selem_is_enum_capture +snd_mixer_selem_is_enum_capture.restype = c_int +snd_mixer_selem_is_enum_capture.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:287 +snd_mixer_selem_get_enum_items = _lib.snd_mixer_selem_get_enum_items +snd_mixer_selem_get_enum_items.restype = c_int +snd_mixer_selem_get_enum_items.argtypes = [POINTER(snd_mixer_elem_t)] + +# /usr/include/alsa/mixer.h:288 +snd_mixer_selem_get_enum_item_name = _lib.snd_mixer_selem_get_enum_item_name +snd_mixer_selem_get_enum_item_name.restype = c_int +snd_mixer_selem_get_enum_item_name.argtypes = [POINTER(snd_mixer_elem_t), c_uint, c_size_t, c_char_p] + +# /usr/include/alsa/mixer.h:289 +snd_mixer_selem_get_enum_item = _lib.snd_mixer_selem_get_enum_item +snd_mixer_selem_get_enum_item.restype = c_int +snd_mixer_selem_get_enum_item.argtypes = [POINTER(snd_mixer_elem_t), snd_mixer_selem_channel_id_t, POINTER(c_uint)] + +# /usr/include/alsa/mixer.h:290 +snd_mixer_selem_set_enum_item = _lib.snd_mixer_selem_set_enum_item +snd_mixer_selem_set_enum_item.restype = c_int +snd_mixer_selem_set_enum_item.argtypes = [POINTER(snd_mixer_elem_t), snd_mixer_selem_channel_id_t, c_uint] + +# /usr/include/alsa/mixer.h:292 +snd_mixer_selem_id_sizeof = _lib.snd_mixer_selem_id_sizeof +snd_mixer_selem_id_sizeof.restype = c_size_t +snd_mixer_selem_id_sizeof.argtypes = [] + +# /usr/include/alsa/mixer.h:298 +snd_mixer_selem_id_malloc = _lib.snd_mixer_selem_id_malloc +snd_mixer_selem_id_malloc.restype = c_int +snd_mixer_selem_id_malloc.argtypes = [POINTER(POINTER(snd_mixer_selem_id_t))] + +# /usr/include/alsa/mixer.h:299 +snd_mixer_selem_id_free = _lib.snd_mixer_selem_id_free +snd_mixer_selem_id_free.restype = None +snd_mixer_selem_id_free.argtypes = [POINTER(snd_mixer_selem_id_t)] + +# /usr/include/alsa/mixer.h:300 +snd_mixer_selem_id_copy = _lib.snd_mixer_selem_id_copy +snd_mixer_selem_id_copy.restype = None +snd_mixer_selem_id_copy.argtypes = [POINTER(snd_mixer_selem_id_t), POINTER(snd_mixer_selem_id_t)] + +# /usr/include/alsa/mixer.h:301 +snd_mixer_selem_id_get_name = _lib.snd_mixer_selem_id_get_name +snd_mixer_selem_id_get_name.restype = c_char_p +snd_mixer_selem_id_get_name.argtypes = [POINTER(snd_mixer_selem_id_t)] + +# /usr/include/alsa/mixer.h:302 +snd_mixer_selem_id_get_index = _lib.snd_mixer_selem_id_get_index +snd_mixer_selem_id_get_index.restype = c_uint +snd_mixer_selem_id_get_index.argtypes = [POINTER(snd_mixer_selem_id_t)] + +# /usr/include/alsa/mixer.h:303 +snd_mixer_selem_id_set_name = _lib.snd_mixer_selem_id_set_name +snd_mixer_selem_id_set_name.restype = None +snd_mixer_selem_id_set_name.argtypes = [POINTER(snd_mixer_selem_id_t), c_char_p] + +# /usr/include/alsa/mixer.h:304 +snd_mixer_selem_id_set_index = _lib.snd_mixer_selem_id_set_index +snd_mixer_selem_id_set_index.restype = None +snd_mixer_selem_id_set_index.argtypes = [POINTER(snd_mixer_selem_id_t), c_uint] + +snd_seq_event_type_t = c_ubyte # /usr/include/alsa/seq_event.h:41 +class struct_snd_seq_addr(Structure): + __slots__ = [ + 'client', + 'port', + ] +struct_snd_seq_addr._fields_ = [ + ('client', c_ubyte), + ('port', c_ubyte), +] + +snd_seq_addr_t = struct_snd_seq_addr # /usr/include/alsa/seq_event.h:239 +class struct_snd_seq_connect(Structure): + __slots__ = [ + 'sender', + 'dest', + ] +struct_snd_seq_connect._fields_ = [ + ('sender', snd_seq_addr_t), + ('dest', snd_seq_addr_t), +] + +snd_seq_connect_t = struct_snd_seq_connect # /usr/include/alsa/seq_event.h:245 +class struct_snd_seq_real_time(Structure): + __slots__ = [ + 'tv_sec', + 'tv_nsec', + ] +struct_snd_seq_real_time._fields_ = [ + ('tv_sec', c_uint), + ('tv_nsec', c_uint), +] + +snd_seq_real_time_t = struct_snd_seq_real_time # /usr/include/alsa/seq_event.h:252 +snd_seq_tick_time_t = c_uint # /usr/include/alsa/seq_event.h:255 +class struct_snd_seq_timestamp(Union): + __slots__ = [ + 'tick', + 'time', + ] +struct_snd_seq_timestamp._fields_ = [ + ('tick', snd_seq_tick_time_t), + ('time', struct_snd_seq_real_time), +] + +snd_seq_timestamp_t = struct_snd_seq_timestamp # /usr/include/alsa/seq_event.h:261 +SND_SEQ_TIME_STAMP_TICK = 0 # /usr/include/alsa/seq_event.h:269 +SND_SEQ_TIME_STAMP_REAL = 1 # /usr/include/alsa/seq_event.h:270 +SND_SEQ_TIME_STAMP_MASK = 1 # /usr/include/alsa/seq_event.h:271 +SND_SEQ_TIME_MODE_ABS = 0 # /usr/include/alsa/seq_event.h:273 +SND_SEQ_TIME_MODE_REL = 2 # /usr/include/alsa/seq_event.h:274 +SND_SEQ_TIME_MODE_MASK = 2 # /usr/include/alsa/seq_event.h:275 +SND_SEQ_EVENT_LENGTH_FIXED = 0 # /usr/include/alsa/seq_event.h:277 +SND_SEQ_EVENT_LENGTH_VARIABLE = 4 # /usr/include/alsa/seq_event.h:278 +SND_SEQ_EVENT_LENGTH_VARUSR = 8 # /usr/include/alsa/seq_event.h:279 +SND_SEQ_EVENT_LENGTH_MASK = 12 # /usr/include/alsa/seq_event.h:280 +SND_SEQ_PRIORITY_NORMAL = 0 # /usr/include/alsa/seq_event.h:282 +SND_SEQ_PRIORITY_HIGH = 16 # /usr/include/alsa/seq_event.h:283 +SND_SEQ_PRIORITY_MASK = 16 # /usr/include/alsa/seq_event.h:284 +class struct_snd_seq_ev_note(Structure): + __slots__ = [ + 'channel', + 'note', + 'velocity', + 'off_velocity', + 'duration', + ] +struct_snd_seq_ev_note._fields_ = [ + ('channel', c_ubyte), + ('note', c_ubyte), + ('velocity', c_ubyte), + ('off_velocity', c_ubyte), + ('duration', c_uint), +] + +snd_seq_ev_note_t = struct_snd_seq_ev_note # /usr/include/alsa/seq_event.h:294 +class struct_snd_seq_ev_ctrl(Structure): + __slots__ = [ + 'channel', + 'unused', + 'param', + 'value', + ] +struct_snd_seq_ev_ctrl._fields_ = [ + ('channel', c_ubyte), + ('unused', c_ubyte * 3), + ('param', c_uint), + ('value', c_int), +] + +snd_seq_ev_ctrl_t = struct_snd_seq_ev_ctrl # /usr/include/alsa/seq_event.h:302 +class struct_snd_seq_ev_raw8(Structure): + __slots__ = [ + 'd', + ] +struct_snd_seq_ev_raw8._fields_ = [ + ('d', c_ubyte * 12), +] + +snd_seq_ev_raw8_t = struct_snd_seq_ev_raw8 # /usr/include/alsa/seq_event.h:307 +class struct_snd_seq_ev_raw32(Structure): + __slots__ = [ + 'd', + ] +struct_snd_seq_ev_raw32._fields_ = [ + ('d', c_uint * 3), +] + +snd_seq_ev_raw32_t = struct_snd_seq_ev_raw32 # /usr/include/alsa/seq_event.h:312 +class struct_snd_seq_ev_ext(Structure): + __slots__ = [ + 'len', + 'ptr', + ] +struct_snd_seq_ev_ext._fields_ = [ + ('len', c_uint), + ('ptr', POINTER(None)), +] + +snd_seq_ev_ext_t = struct_snd_seq_ev_ext # /usr/include/alsa/seq_event.h:318 +snd_seq_instr_cluster_t = c_uint # /usr/include/alsa/seq_event.h:321 +class struct_snd_seq_instr(Structure): + __slots__ = [ + 'cluster', + 'std', + 'bank', + 'prg', + ] +struct_snd_seq_instr._fields_ = [ + ('cluster', snd_seq_instr_cluster_t), + ('std', c_uint), + ('bank', c_ushort), + ('prg', c_ushort), +] + +snd_seq_instr_t = struct_snd_seq_instr # /usr/include/alsa/seq_event.h:329 +class struct_snd_seq_ev_sample(Structure): + __slots__ = [ + 'std', + 'bank', + 'prg', + ] +struct_snd_seq_ev_sample._fields_ = [ + ('std', c_uint), + ('bank', c_ushort), + ('prg', c_ushort), +] + +snd_seq_ev_sample_t = struct_snd_seq_ev_sample # /usr/include/alsa/seq_event.h:336 +class struct_snd_seq_ev_cluster(Structure): + __slots__ = [ + 'cluster', + ] +struct_snd_seq_ev_cluster._fields_ = [ + ('cluster', snd_seq_instr_cluster_t), +] + +snd_seq_ev_cluster_t = struct_snd_seq_ev_cluster # /usr/include/alsa/seq_event.h:341 +snd_seq_position_t = c_uint # /usr/include/alsa/seq_event.h:344 +enum_snd_seq_stop_mode = c_int +SND_SEQ_SAMPLE_STOP_IMMEDIATELY = 0 +SND_SEQ_SAMPLE_STOP_VENVELOPE = 1 +SND_SEQ_SAMPLE_STOP_LOOP = 2 +snd_seq_stop_mode_t = enum_snd_seq_stop_mode # /usr/include/alsa/seq_event.h:351 +snd_seq_frequency_t = c_int # /usr/include/alsa/seq_event.h:354 +class struct_snd_seq_ev_volume(Structure): + __slots__ = [ + 'volume', + 'lr', + 'fr', + 'du', + ] +struct_snd_seq_ev_volume._fields_ = [ + ('volume', c_short), + ('lr', c_short), + ('fr', c_short), + ('du', c_short), +] + +snd_seq_ev_volume_t = struct_snd_seq_ev_volume # /usr/include/alsa/seq_event.h:362 +class struct_snd_seq_ev_loop(Structure): + __slots__ = [ + 'start', + 'end', + ] +struct_snd_seq_ev_loop._fields_ = [ + ('start', c_uint), + ('end', c_uint), +] + +snd_seq_ev_loop_t = struct_snd_seq_ev_loop # /usr/include/alsa/seq_event.h:368 +class struct_snd_seq_ev_sample_control(Structure): + __slots__ = [ + 'channel', + 'unused', + 'param', + ] +class struct_anon_27(Union): + __slots__ = [ + 'sample', + 'cluster', + 'position', + 'stop_mode', + 'frequency', + 'volume', + 'loop', + 'raw8', + ] +struct_anon_27._fields_ = [ + ('sample', snd_seq_ev_sample_t), + ('cluster', snd_seq_ev_cluster_t), + ('position', snd_seq_position_t), + ('stop_mode', snd_seq_stop_mode_t), + ('frequency', snd_seq_frequency_t), + ('volume', snd_seq_ev_volume_t), + ('loop', snd_seq_ev_loop_t), + ('raw8', c_ubyte * 8), +] + +struct_snd_seq_ev_sample_control._fields_ = [ + ('channel', c_ubyte), + ('unused', c_ubyte * 3), + ('param', struct_anon_27), +] + +snd_seq_ev_sample_control_t = struct_snd_seq_ev_sample_control # /usr/include/alsa/seq_event.h:384 +class struct_snd_seq_ev_instr_begin(Structure): + __slots__ = [ + 'timeout', + ] +struct_snd_seq_ev_instr_begin._fields_ = [ + ('timeout', c_int), +] + +snd_seq_ev_instr_begin_t = struct_snd_seq_ev_instr_begin # /usr/include/alsa/seq_event.h:391 +class struct_snd_seq_result(Structure): + __slots__ = [ + 'event', + 'result', + ] +struct_snd_seq_result._fields_ = [ + ('event', c_int), + ('result', c_int), +] + +snd_seq_result_t = struct_snd_seq_result # /usr/include/alsa/seq_event.h:397 +class struct_snd_seq_queue_skew(Structure): + __slots__ = [ + 'value', + 'base', + ] +struct_snd_seq_queue_skew._fields_ = [ + ('value', c_uint), + ('base', c_uint), +] + +snd_seq_queue_skew_t = struct_snd_seq_queue_skew # /usr/include/alsa/seq_event.h:403 +class struct_snd_seq_ev_queue_control(Structure): + __slots__ = [ + 'queue', + 'unused', + 'param', + ] +class struct_anon_28(Union): + __slots__ = [ + 'value', + 'time', + 'position', + 'skew', + 'd32', + 'd8', + ] +struct_anon_28._fields_ = [ + ('value', c_int), + ('time', snd_seq_timestamp_t), + ('position', c_uint), + ('skew', snd_seq_queue_skew_t), + ('d32', c_uint * 2), + ('d8', c_ubyte * 8), +] + +struct_snd_seq_ev_queue_control._fields_ = [ + ('queue', c_ubyte), + ('unused', c_ubyte * 3), + ('param', struct_anon_28), +] + +snd_seq_ev_queue_control_t = struct_snd_seq_ev_queue_control # /usr/include/alsa/seq_event.h:417 +class struct_snd_seq_event(Structure): + __slots__ = [ + 'type', + 'flags', + 'tag', + 'queue', + 'time', + 'source', + 'dest', + 'data', + ] +class struct_anon_29(Union): + __slots__ = [ + 'note', + 'control', + 'raw8', + 'raw32', + 'ext', + 'queue', + 'time', + 'addr', + 'connect', + 'result', + 'instr_begin', + 'sample', + ] +struct_anon_29._fields_ = [ + ('note', snd_seq_ev_note_t), + ('control', snd_seq_ev_ctrl_t), + ('raw8', snd_seq_ev_raw8_t), + ('raw32', snd_seq_ev_raw32_t), + ('ext', snd_seq_ev_ext_t), + ('queue', snd_seq_ev_queue_control_t), + ('time', snd_seq_timestamp_t), + ('addr', snd_seq_addr_t), + ('connect', snd_seq_connect_t), + ('result', snd_seq_result_t), + ('instr_begin', snd_seq_ev_instr_begin_t), + ('sample', snd_seq_ev_sample_control_t), +] + +struct_snd_seq_event._fields_ = [ + ('type', snd_seq_event_type_t), + ('flags', c_ubyte), + ('tag', c_ubyte), + ('queue', c_ubyte), + ('time', snd_seq_timestamp_t), + ('source', snd_seq_addr_t), + ('dest', snd_seq_addr_t), + ('data', struct_anon_29), +] + +snd_seq_event_t = struct_snd_seq_event # /usr/include/alsa/seq_event.h:446 +SND_SEQ_DLSYM_VERSION = 0 # /usr/include/alsa/seq.h:44 +class struct__snd_seq(Structure): + __slots__ = [ + ] +struct__snd_seq._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_seq(Structure): + __slots__ = [ + ] +struct__snd_seq._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_seq_t = struct__snd_seq # /usr/include/alsa/seq.h:47 +SND_SEQ_OPEN_OUTPUT = 1 # /usr/include/alsa/seq.h:61 +SND_SEQ_OPEN_INPUT = 2 # /usr/include/alsa/seq.h:62 +SND_SEQ_OPEN_DUPLEX = 3 # /usr/include/alsa/seq.h:63 +SND_SEQ_NONBLOCK = 1 # /usr/include/alsa/seq.h:68 +enum__snd_seq_type = c_int +SND_SEQ_TYPE_HW = 1 +SND_SEQ_TYPE_SHM = 2 +SND_SEQ_TYPE_INET = 3 +snd_seq_type_t = enum__snd_seq_type # /usr/include/alsa/seq.h:75 +SND_SEQ_ADDRESS_UNKNOWN = 253 # /usr/include/alsa/seq.h:78 +SND_SEQ_ADDRESS_SUBSCRIBERS = 254 # /usr/include/alsa/seq.h:79 +SND_SEQ_ADDRESS_BROADCAST = 255 # /usr/include/alsa/seq.h:80 +SND_SEQ_CLIENT_SYSTEM = 0 # /usr/include/alsa/seq.h:83 +# /usr/include/alsa/seq.h:87 +snd_seq_open = _lib.snd_seq_open +snd_seq_open.restype = c_int +snd_seq_open.argtypes = [POINTER(POINTER(snd_seq_t)), c_char_p, c_int, c_int] + +# /usr/include/alsa/seq.h:88 +snd_seq_open_lconf = _lib.snd_seq_open_lconf +snd_seq_open_lconf.restype = c_int +snd_seq_open_lconf.argtypes = [POINTER(POINTER(snd_seq_t)), c_char_p, c_int, c_int, POINTER(snd_config_t)] + +# /usr/include/alsa/seq.h:89 +snd_seq_name = _lib.snd_seq_name +snd_seq_name.restype = c_char_p +snd_seq_name.argtypes = [POINTER(snd_seq_t)] + +# /usr/include/alsa/seq.h:90 +snd_seq_type = _lib.snd_seq_type +snd_seq_type.restype = snd_seq_type_t +snd_seq_type.argtypes = [POINTER(snd_seq_t)] + +# /usr/include/alsa/seq.h:91 +snd_seq_close = _lib.snd_seq_close +snd_seq_close.restype = c_int +snd_seq_close.argtypes = [POINTER(snd_seq_t)] + +# /usr/include/alsa/seq.h:92 +snd_seq_poll_descriptors_count = _lib.snd_seq_poll_descriptors_count +snd_seq_poll_descriptors_count.restype = c_int +snd_seq_poll_descriptors_count.argtypes = [POINTER(snd_seq_t), c_short] + +class struct_pollfd(Structure): + __slots__ = [ + ] +struct_pollfd._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/seq.h:93 +snd_seq_poll_descriptors = _lib.snd_seq_poll_descriptors +snd_seq_poll_descriptors.restype = c_int +snd_seq_poll_descriptors.argtypes = [POINTER(snd_seq_t), POINTER(struct_pollfd), c_uint, c_short] + +class struct_pollfd(Structure): + __slots__ = [ + ] +struct_pollfd._fields_ = [ + ('_opaque_struct', c_int) +] + +# /usr/include/alsa/seq.h:94 +snd_seq_poll_descriptors_revents = _lib.snd_seq_poll_descriptors_revents +snd_seq_poll_descriptors_revents.restype = c_int +snd_seq_poll_descriptors_revents.argtypes = [POINTER(snd_seq_t), POINTER(struct_pollfd), c_uint, POINTER(c_ushort)] + +# /usr/include/alsa/seq.h:95 +snd_seq_nonblock = _lib.snd_seq_nonblock +snd_seq_nonblock.restype = c_int +snd_seq_nonblock.argtypes = [POINTER(snd_seq_t), c_int] + +# /usr/include/alsa/seq.h:96 +snd_seq_client_id = _lib.snd_seq_client_id +snd_seq_client_id.restype = c_int +snd_seq_client_id.argtypes = [POINTER(snd_seq_t)] + +# /usr/include/alsa/seq.h:98 +snd_seq_get_output_buffer_size = _lib.snd_seq_get_output_buffer_size +snd_seq_get_output_buffer_size.restype = c_size_t +snd_seq_get_output_buffer_size.argtypes = [POINTER(snd_seq_t)] + +# /usr/include/alsa/seq.h:99 +snd_seq_get_input_buffer_size = _lib.snd_seq_get_input_buffer_size +snd_seq_get_input_buffer_size.restype = c_size_t +snd_seq_get_input_buffer_size.argtypes = [POINTER(snd_seq_t)] + +# /usr/include/alsa/seq.h:100 +snd_seq_set_output_buffer_size = _lib.snd_seq_set_output_buffer_size +snd_seq_set_output_buffer_size.restype = c_int +snd_seq_set_output_buffer_size.argtypes = [POINTER(snd_seq_t), c_size_t] + +# /usr/include/alsa/seq.h:101 +snd_seq_set_input_buffer_size = _lib.snd_seq_set_input_buffer_size +snd_seq_set_input_buffer_size.restype = c_int +snd_seq_set_input_buffer_size.argtypes = [POINTER(snd_seq_t), c_size_t] + +class struct__snd_seq_system_info(Structure): + __slots__ = [ + ] +struct__snd_seq_system_info._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_seq_system_info(Structure): + __slots__ = [ + ] +struct__snd_seq_system_info._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_seq_system_info_t = struct__snd_seq_system_info # /usr/include/alsa/seq.h:104 +# /usr/include/alsa/seq.h:106 +snd_seq_system_info_sizeof = _lib.snd_seq_system_info_sizeof +snd_seq_system_info_sizeof.restype = c_size_t +snd_seq_system_info_sizeof.argtypes = [] + +# /usr/include/alsa/seq.h:110 +snd_seq_system_info_malloc = _lib.snd_seq_system_info_malloc +snd_seq_system_info_malloc.restype = c_int +snd_seq_system_info_malloc.argtypes = [POINTER(POINTER(snd_seq_system_info_t))] + +# /usr/include/alsa/seq.h:111 +snd_seq_system_info_free = _lib.snd_seq_system_info_free +snd_seq_system_info_free.restype = None +snd_seq_system_info_free.argtypes = [POINTER(snd_seq_system_info_t)] + +# /usr/include/alsa/seq.h:112 +snd_seq_system_info_copy = _lib.snd_seq_system_info_copy +snd_seq_system_info_copy.restype = None +snd_seq_system_info_copy.argtypes = [POINTER(snd_seq_system_info_t), POINTER(snd_seq_system_info_t)] + +# /usr/include/alsa/seq.h:114 +snd_seq_system_info_get_queues = _lib.snd_seq_system_info_get_queues +snd_seq_system_info_get_queues.restype = c_int +snd_seq_system_info_get_queues.argtypes = [POINTER(snd_seq_system_info_t)] + +# /usr/include/alsa/seq.h:115 +snd_seq_system_info_get_clients = _lib.snd_seq_system_info_get_clients +snd_seq_system_info_get_clients.restype = c_int +snd_seq_system_info_get_clients.argtypes = [POINTER(snd_seq_system_info_t)] + +# /usr/include/alsa/seq.h:116 +snd_seq_system_info_get_ports = _lib.snd_seq_system_info_get_ports +snd_seq_system_info_get_ports.restype = c_int +snd_seq_system_info_get_ports.argtypes = [POINTER(snd_seq_system_info_t)] + +# /usr/include/alsa/seq.h:117 +snd_seq_system_info_get_channels = _lib.snd_seq_system_info_get_channels +snd_seq_system_info_get_channels.restype = c_int +snd_seq_system_info_get_channels.argtypes = [POINTER(snd_seq_system_info_t)] + +# /usr/include/alsa/seq.h:118 +snd_seq_system_info_get_cur_clients = _lib.snd_seq_system_info_get_cur_clients +snd_seq_system_info_get_cur_clients.restype = c_int +snd_seq_system_info_get_cur_clients.argtypes = [POINTER(snd_seq_system_info_t)] + +# /usr/include/alsa/seq.h:119 +snd_seq_system_info_get_cur_queues = _lib.snd_seq_system_info_get_cur_queues +snd_seq_system_info_get_cur_queues.restype = c_int +snd_seq_system_info_get_cur_queues.argtypes = [POINTER(snd_seq_system_info_t)] + +# /usr/include/alsa/seq.h:121 +snd_seq_system_info = _lib.snd_seq_system_info +snd_seq_system_info.restype = c_int +snd_seq_system_info.argtypes = [POINTER(snd_seq_t), POINTER(snd_seq_system_info_t)] + +class struct__snd_seq_client_info(Structure): + __slots__ = [ + ] +struct__snd_seq_client_info._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_seq_client_info(Structure): + __slots__ = [ + ] +struct__snd_seq_client_info._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_seq_client_info_t = struct__snd_seq_client_info # /usr/include/alsa/seq.h:134 +enum_snd_seq_client_type = c_int +SND_SEQ_USER_CLIENT = 1 +SND_SEQ_KERNEL_CLIENT = 2 +snd_seq_client_type_t = enum_snd_seq_client_type # /usr/include/alsa/seq.h:140 +# /usr/include/alsa/seq.h:142 +snd_seq_client_info_sizeof = _lib.snd_seq_client_info_sizeof +snd_seq_client_info_sizeof.restype = c_size_t +snd_seq_client_info_sizeof.argtypes = [] + +# /usr/include/alsa/seq.h:146 +snd_seq_client_info_malloc = _lib.snd_seq_client_info_malloc +snd_seq_client_info_malloc.restype = c_int +snd_seq_client_info_malloc.argtypes = [POINTER(POINTER(snd_seq_client_info_t))] + +# /usr/include/alsa/seq.h:147 +snd_seq_client_info_free = _lib.snd_seq_client_info_free +snd_seq_client_info_free.restype = None +snd_seq_client_info_free.argtypes = [POINTER(snd_seq_client_info_t)] + +# /usr/include/alsa/seq.h:148 +snd_seq_client_info_copy = _lib.snd_seq_client_info_copy +snd_seq_client_info_copy.restype = None +snd_seq_client_info_copy.argtypes = [POINTER(snd_seq_client_info_t), POINTER(snd_seq_client_info_t)] + +# /usr/include/alsa/seq.h:150 +snd_seq_client_info_get_client = _lib.snd_seq_client_info_get_client +snd_seq_client_info_get_client.restype = c_int +snd_seq_client_info_get_client.argtypes = [POINTER(snd_seq_client_info_t)] + +# /usr/include/alsa/seq.h:151 +snd_seq_client_info_get_type = _lib.snd_seq_client_info_get_type +snd_seq_client_info_get_type.restype = snd_seq_client_type_t +snd_seq_client_info_get_type.argtypes = [POINTER(snd_seq_client_info_t)] + +# /usr/include/alsa/seq.h:152 +snd_seq_client_info_get_name = _lib.snd_seq_client_info_get_name +snd_seq_client_info_get_name.restype = c_char_p +snd_seq_client_info_get_name.argtypes = [POINTER(snd_seq_client_info_t)] + +# /usr/include/alsa/seq.h:153 +snd_seq_client_info_get_broadcast_filter = _lib.snd_seq_client_info_get_broadcast_filter +snd_seq_client_info_get_broadcast_filter.restype = c_int +snd_seq_client_info_get_broadcast_filter.argtypes = [POINTER(snd_seq_client_info_t)] + +# /usr/include/alsa/seq.h:154 +snd_seq_client_info_get_error_bounce = _lib.snd_seq_client_info_get_error_bounce +snd_seq_client_info_get_error_bounce.restype = c_int +snd_seq_client_info_get_error_bounce.argtypes = [POINTER(snd_seq_client_info_t)] + +# /usr/include/alsa/seq.h:155 +snd_seq_client_info_get_event_filter = _lib.snd_seq_client_info_get_event_filter +snd_seq_client_info_get_event_filter.restype = POINTER(c_ubyte) +snd_seq_client_info_get_event_filter.argtypes = [POINTER(snd_seq_client_info_t)] + +# /usr/include/alsa/seq.h:156 +snd_seq_client_info_get_num_ports = _lib.snd_seq_client_info_get_num_ports +snd_seq_client_info_get_num_ports.restype = c_int +snd_seq_client_info_get_num_ports.argtypes = [POINTER(snd_seq_client_info_t)] + +# /usr/include/alsa/seq.h:157 +snd_seq_client_info_get_event_lost = _lib.snd_seq_client_info_get_event_lost +snd_seq_client_info_get_event_lost.restype = c_int +snd_seq_client_info_get_event_lost.argtypes = [POINTER(snd_seq_client_info_t)] + +# /usr/include/alsa/seq.h:159 +snd_seq_client_info_set_client = _lib.snd_seq_client_info_set_client +snd_seq_client_info_set_client.restype = None +snd_seq_client_info_set_client.argtypes = [POINTER(snd_seq_client_info_t), c_int] + +# /usr/include/alsa/seq.h:160 +snd_seq_client_info_set_name = _lib.snd_seq_client_info_set_name +snd_seq_client_info_set_name.restype = None +snd_seq_client_info_set_name.argtypes = [POINTER(snd_seq_client_info_t), c_char_p] + +# /usr/include/alsa/seq.h:161 +snd_seq_client_info_set_broadcast_filter = _lib.snd_seq_client_info_set_broadcast_filter +snd_seq_client_info_set_broadcast_filter.restype = None +snd_seq_client_info_set_broadcast_filter.argtypes = [POINTER(snd_seq_client_info_t), c_int] + +# /usr/include/alsa/seq.h:162 +snd_seq_client_info_set_error_bounce = _lib.snd_seq_client_info_set_error_bounce +snd_seq_client_info_set_error_bounce.restype = None +snd_seq_client_info_set_error_bounce.argtypes = [POINTER(snd_seq_client_info_t), c_int] + +# /usr/include/alsa/seq.h:163 +snd_seq_client_info_set_event_filter = _lib.snd_seq_client_info_set_event_filter +snd_seq_client_info_set_event_filter.restype = None +snd_seq_client_info_set_event_filter.argtypes = [POINTER(snd_seq_client_info_t), POINTER(c_ubyte)] + +# /usr/include/alsa/seq.h:165 +snd_seq_get_client_info = _lib.snd_seq_get_client_info +snd_seq_get_client_info.restype = c_int +snd_seq_get_client_info.argtypes = [POINTER(snd_seq_t), POINTER(snd_seq_client_info_t)] + +# /usr/include/alsa/seq.h:166 +snd_seq_get_any_client_info = _lib.snd_seq_get_any_client_info +snd_seq_get_any_client_info.restype = c_int +snd_seq_get_any_client_info.argtypes = [POINTER(snd_seq_t), c_int, POINTER(snd_seq_client_info_t)] + +# /usr/include/alsa/seq.h:167 +snd_seq_set_client_info = _lib.snd_seq_set_client_info +snd_seq_set_client_info.restype = c_int +snd_seq_set_client_info.argtypes = [POINTER(snd_seq_t), POINTER(snd_seq_client_info_t)] + +# /usr/include/alsa/seq.h:168 +snd_seq_query_next_client = _lib.snd_seq_query_next_client +snd_seq_query_next_client.restype = c_int +snd_seq_query_next_client.argtypes = [POINTER(snd_seq_t), POINTER(snd_seq_client_info_t)] + +class struct__snd_seq_client_pool(Structure): + __slots__ = [ + ] +struct__snd_seq_client_pool._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_seq_client_pool(Structure): + __slots__ = [ + ] +struct__snd_seq_client_pool._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_seq_client_pool_t = struct__snd_seq_client_pool # /usr/include/alsa/seq.h:174 +# /usr/include/alsa/seq.h:176 +snd_seq_client_pool_sizeof = _lib.snd_seq_client_pool_sizeof +snd_seq_client_pool_sizeof.restype = c_size_t +snd_seq_client_pool_sizeof.argtypes = [] + +# /usr/include/alsa/seq.h:180 +snd_seq_client_pool_malloc = _lib.snd_seq_client_pool_malloc +snd_seq_client_pool_malloc.restype = c_int +snd_seq_client_pool_malloc.argtypes = [POINTER(POINTER(snd_seq_client_pool_t))] + +# /usr/include/alsa/seq.h:181 +snd_seq_client_pool_free = _lib.snd_seq_client_pool_free +snd_seq_client_pool_free.restype = None +snd_seq_client_pool_free.argtypes = [POINTER(snd_seq_client_pool_t)] + +# /usr/include/alsa/seq.h:182 +snd_seq_client_pool_copy = _lib.snd_seq_client_pool_copy +snd_seq_client_pool_copy.restype = None +snd_seq_client_pool_copy.argtypes = [POINTER(snd_seq_client_pool_t), POINTER(snd_seq_client_pool_t)] + +# /usr/include/alsa/seq.h:184 +snd_seq_client_pool_get_client = _lib.snd_seq_client_pool_get_client +snd_seq_client_pool_get_client.restype = c_int +snd_seq_client_pool_get_client.argtypes = [POINTER(snd_seq_client_pool_t)] + +# /usr/include/alsa/seq.h:185 +snd_seq_client_pool_get_output_pool = _lib.snd_seq_client_pool_get_output_pool +snd_seq_client_pool_get_output_pool.restype = c_size_t +snd_seq_client_pool_get_output_pool.argtypes = [POINTER(snd_seq_client_pool_t)] + +# /usr/include/alsa/seq.h:186 +snd_seq_client_pool_get_input_pool = _lib.snd_seq_client_pool_get_input_pool +snd_seq_client_pool_get_input_pool.restype = c_size_t +snd_seq_client_pool_get_input_pool.argtypes = [POINTER(snd_seq_client_pool_t)] + +# /usr/include/alsa/seq.h:187 +snd_seq_client_pool_get_output_room = _lib.snd_seq_client_pool_get_output_room +snd_seq_client_pool_get_output_room.restype = c_size_t +snd_seq_client_pool_get_output_room.argtypes = [POINTER(snd_seq_client_pool_t)] + +# /usr/include/alsa/seq.h:188 +snd_seq_client_pool_get_output_free = _lib.snd_seq_client_pool_get_output_free +snd_seq_client_pool_get_output_free.restype = c_size_t +snd_seq_client_pool_get_output_free.argtypes = [POINTER(snd_seq_client_pool_t)] + +# /usr/include/alsa/seq.h:189 +snd_seq_client_pool_get_input_free = _lib.snd_seq_client_pool_get_input_free +snd_seq_client_pool_get_input_free.restype = c_size_t +snd_seq_client_pool_get_input_free.argtypes = [POINTER(snd_seq_client_pool_t)] + +# /usr/include/alsa/seq.h:190 +snd_seq_client_pool_set_output_pool = _lib.snd_seq_client_pool_set_output_pool +snd_seq_client_pool_set_output_pool.restype = None +snd_seq_client_pool_set_output_pool.argtypes = [POINTER(snd_seq_client_pool_t), c_size_t] + +# /usr/include/alsa/seq.h:191 +snd_seq_client_pool_set_input_pool = _lib.snd_seq_client_pool_set_input_pool +snd_seq_client_pool_set_input_pool.restype = None +snd_seq_client_pool_set_input_pool.argtypes = [POINTER(snd_seq_client_pool_t), c_size_t] + +# /usr/include/alsa/seq.h:192 +snd_seq_client_pool_set_output_room = _lib.snd_seq_client_pool_set_output_room +snd_seq_client_pool_set_output_room.restype = None +snd_seq_client_pool_set_output_room.argtypes = [POINTER(snd_seq_client_pool_t), c_size_t] + +# /usr/include/alsa/seq.h:194 +snd_seq_get_client_pool = _lib.snd_seq_get_client_pool +snd_seq_get_client_pool.restype = c_int +snd_seq_get_client_pool.argtypes = [POINTER(snd_seq_t), POINTER(snd_seq_client_pool_t)] + +# /usr/include/alsa/seq.h:195 +snd_seq_set_client_pool = _lib.snd_seq_set_client_pool +snd_seq_set_client_pool.restype = c_int +snd_seq_set_client_pool.argtypes = [POINTER(snd_seq_t), POINTER(snd_seq_client_pool_t)] + +class struct__snd_seq_port_info(Structure): + __slots__ = [ + ] +struct__snd_seq_port_info._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_seq_port_info(Structure): + __slots__ = [ + ] +struct__snd_seq_port_info._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_seq_port_info_t = struct__snd_seq_port_info # /usr/include/alsa/seq.h:209 +SND_SEQ_PORT_SYSTEM_TIMER = 0 # /usr/include/alsa/seq.h:212 +SND_SEQ_PORT_SYSTEM_ANNOUNCE = 1 # /usr/include/alsa/seq.h:213 +SND_SEQ_PORT_CAP_READ = 1 # /usr/include/alsa/seq.h:216 +SND_SEQ_PORT_CAP_WRITE = 2 # /usr/include/alsa/seq.h:217 +SND_SEQ_PORT_CAP_SYNC_READ = 4 # /usr/include/alsa/seq.h:219 +SND_SEQ_PORT_CAP_SYNC_WRITE = 8 # /usr/include/alsa/seq.h:220 +SND_SEQ_PORT_CAP_DUPLEX = 16 # /usr/include/alsa/seq.h:222 +SND_SEQ_PORT_CAP_SUBS_READ = 32 # /usr/include/alsa/seq.h:224 +SND_SEQ_PORT_CAP_SUBS_WRITE = 64 # /usr/include/alsa/seq.h:225 +SND_SEQ_PORT_CAP_NO_EXPORT = 128 # /usr/include/alsa/seq.h:226 +SND_SEQ_PORT_TYPE_SPECIFIC = 1 # /usr/include/alsa/seq.h:230 +SND_SEQ_PORT_TYPE_MIDI_GENERIC = 2 # /usr/include/alsa/seq.h:232 +SND_SEQ_PORT_TYPE_MIDI_GM = 4 # /usr/include/alsa/seq.h:234 +SND_SEQ_PORT_TYPE_MIDI_GS = 8 # /usr/include/alsa/seq.h:236 +SND_SEQ_PORT_TYPE_MIDI_XG = 16 # /usr/include/alsa/seq.h:238 +SND_SEQ_PORT_TYPE_MIDI_MT32 = 32 # /usr/include/alsa/seq.h:240 +SND_SEQ_PORT_TYPE_MIDI_GM2 = 64 # /usr/include/alsa/seq.h:242 +SND_SEQ_PORT_TYPE_SYNTH = 1024 # /usr/include/alsa/seq.h:245 +SND_SEQ_PORT_TYPE_DIRECT_SAMPLE = 2048 # /usr/include/alsa/seq.h:248 +SND_SEQ_PORT_TYPE_SAMPLE = 4096 # /usr/include/alsa/seq.h:251 +SND_SEQ_PORT_TYPE_HARDWARE = 65536 # /usr/include/alsa/seq.h:253 +SND_SEQ_PORT_TYPE_SOFTWARE = 131072 # /usr/include/alsa/seq.h:255 +SND_SEQ_PORT_TYPE_SYNTHESIZER = 262144 # /usr/include/alsa/seq.h:257 +SND_SEQ_PORT_TYPE_PORT = 524288 # /usr/include/alsa/seq.h:260 +SND_SEQ_PORT_TYPE_APPLICATION = 1048576 # /usr/include/alsa/seq.h:262 +# /usr/include/alsa/seq.h:265 +snd_seq_port_info_sizeof = _lib.snd_seq_port_info_sizeof +snd_seq_port_info_sizeof.restype = c_size_t +snd_seq_port_info_sizeof.argtypes = [] + +# /usr/include/alsa/seq.h:269 +snd_seq_port_info_malloc = _lib.snd_seq_port_info_malloc +snd_seq_port_info_malloc.restype = c_int +snd_seq_port_info_malloc.argtypes = [POINTER(POINTER(snd_seq_port_info_t))] + +# /usr/include/alsa/seq.h:270 +snd_seq_port_info_free = _lib.snd_seq_port_info_free +snd_seq_port_info_free.restype = None +snd_seq_port_info_free.argtypes = [POINTER(snd_seq_port_info_t)] + +# /usr/include/alsa/seq.h:271 +snd_seq_port_info_copy = _lib.snd_seq_port_info_copy +snd_seq_port_info_copy.restype = None +snd_seq_port_info_copy.argtypes = [POINTER(snd_seq_port_info_t), POINTER(snd_seq_port_info_t)] + +# /usr/include/alsa/seq.h:273 +snd_seq_port_info_get_client = _lib.snd_seq_port_info_get_client +snd_seq_port_info_get_client.restype = c_int +snd_seq_port_info_get_client.argtypes = [POINTER(snd_seq_port_info_t)] + +# /usr/include/alsa/seq.h:274 +snd_seq_port_info_get_port = _lib.snd_seq_port_info_get_port +snd_seq_port_info_get_port.restype = c_int +snd_seq_port_info_get_port.argtypes = [POINTER(snd_seq_port_info_t)] + +# /usr/include/alsa/seq.h:275 +snd_seq_port_info_get_addr = _lib.snd_seq_port_info_get_addr +snd_seq_port_info_get_addr.restype = POINTER(snd_seq_addr_t) +snd_seq_port_info_get_addr.argtypes = [POINTER(snd_seq_port_info_t)] + +# /usr/include/alsa/seq.h:276 +snd_seq_port_info_get_name = _lib.snd_seq_port_info_get_name +snd_seq_port_info_get_name.restype = c_char_p +snd_seq_port_info_get_name.argtypes = [POINTER(snd_seq_port_info_t)] + +# /usr/include/alsa/seq.h:277 +snd_seq_port_info_get_capability = _lib.snd_seq_port_info_get_capability +snd_seq_port_info_get_capability.restype = c_uint +snd_seq_port_info_get_capability.argtypes = [POINTER(snd_seq_port_info_t)] + +# /usr/include/alsa/seq.h:278 +snd_seq_port_info_get_type = _lib.snd_seq_port_info_get_type +snd_seq_port_info_get_type.restype = c_uint +snd_seq_port_info_get_type.argtypes = [POINTER(snd_seq_port_info_t)] + +# /usr/include/alsa/seq.h:279 +snd_seq_port_info_get_midi_channels = _lib.snd_seq_port_info_get_midi_channels +snd_seq_port_info_get_midi_channels.restype = c_int +snd_seq_port_info_get_midi_channels.argtypes = [POINTER(snd_seq_port_info_t)] + +# /usr/include/alsa/seq.h:280 +snd_seq_port_info_get_midi_voices = _lib.snd_seq_port_info_get_midi_voices +snd_seq_port_info_get_midi_voices.restype = c_int +snd_seq_port_info_get_midi_voices.argtypes = [POINTER(snd_seq_port_info_t)] + +# /usr/include/alsa/seq.h:281 +snd_seq_port_info_get_synth_voices = _lib.snd_seq_port_info_get_synth_voices +snd_seq_port_info_get_synth_voices.restype = c_int +snd_seq_port_info_get_synth_voices.argtypes = [POINTER(snd_seq_port_info_t)] + +# /usr/include/alsa/seq.h:282 +snd_seq_port_info_get_read_use = _lib.snd_seq_port_info_get_read_use +snd_seq_port_info_get_read_use.restype = c_int +snd_seq_port_info_get_read_use.argtypes = [POINTER(snd_seq_port_info_t)] + +# /usr/include/alsa/seq.h:283 +snd_seq_port_info_get_write_use = _lib.snd_seq_port_info_get_write_use +snd_seq_port_info_get_write_use.restype = c_int +snd_seq_port_info_get_write_use.argtypes = [POINTER(snd_seq_port_info_t)] + +# /usr/include/alsa/seq.h:284 +snd_seq_port_info_get_port_specified = _lib.snd_seq_port_info_get_port_specified +snd_seq_port_info_get_port_specified.restype = c_int +snd_seq_port_info_get_port_specified.argtypes = [POINTER(snd_seq_port_info_t)] + +# /usr/include/alsa/seq.h:285 +snd_seq_port_info_get_timestamping = _lib.snd_seq_port_info_get_timestamping +snd_seq_port_info_get_timestamping.restype = c_int +snd_seq_port_info_get_timestamping.argtypes = [POINTER(snd_seq_port_info_t)] + +# /usr/include/alsa/seq.h:286 +snd_seq_port_info_get_timestamp_real = _lib.snd_seq_port_info_get_timestamp_real +snd_seq_port_info_get_timestamp_real.restype = c_int +snd_seq_port_info_get_timestamp_real.argtypes = [POINTER(snd_seq_port_info_t)] + +# /usr/include/alsa/seq.h:287 +snd_seq_port_info_get_timestamp_queue = _lib.snd_seq_port_info_get_timestamp_queue +snd_seq_port_info_get_timestamp_queue.restype = c_int +snd_seq_port_info_get_timestamp_queue.argtypes = [POINTER(snd_seq_port_info_t)] + +# /usr/include/alsa/seq.h:289 +snd_seq_port_info_set_client = _lib.snd_seq_port_info_set_client +snd_seq_port_info_set_client.restype = None +snd_seq_port_info_set_client.argtypes = [POINTER(snd_seq_port_info_t), c_int] + +# /usr/include/alsa/seq.h:290 +snd_seq_port_info_set_port = _lib.snd_seq_port_info_set_port +snd_seq_port_info_set_port.restype = None +snd_seq_port_info_set_port.argtypes = [POINTER(snd_seq_port_info_t), c_int] + +# /usr/include/alsa/seq.h:291 +snd_seq_port_info_set_addr = _lib.snd_seq_port_info_set_addr +snd_seq_port_info_set_addr.restype = None +snd_seq_port_info_set_addr.argtypes = [POINTER(snd_seq_port_info_t), POINTER(snd_seq_addr_t)] + +# /usr/include/alsa/seq.h:292 +snd_seq_port_info_set_name = _lib.snd_seq_port_info_set_name +snd_seq_port_info_set_name.restype = None +snd_seq_port_info_set_name.argtypes = [POINTER(snd_seq_port_info_t), c_char_p] + +# /usr/include/alsa/seq.h:293 +snd_seq_port_info_set_capability = _lib.snd_seq_port_info_set_capability +snd_seq_port_info_set_capability.restype = None +snd_seq_port_info_set_capability.argtypes = [POINTER(snd_seq_port_info_t), c_uint] + +# /usr/include/alsa/seq.h:294 +snd_seq_port_info_set_type = _lib.snd_seq_port_info_set_type +snd_seq_port_info_set_type.restype = None +snd_seq_port_info_set_type.argtypes = [POINTER(snd_seq_port_info_t), c_uint] + +# /usr/include/alsa/seq.h:295 +snd_seq_port_info_set_midi_channels = _lib.snd_seq_port_info_set_midi_channels +snd_seq_port_info_set_midi_channels.restype = None +snd_seq_port_info_set_midi_channels.argtypes = [POINTER(snd_seq_port_info_t), c_int] + +# /usr/include/alsa/seq.h:296 +snd_seq_port_info_set_midi_voices = _lib.snd_seq_port_info_set_midi_voices +snd_seq_port_info_set_midi_voices.restype = None +snd_seq_port_info_set_midi_voices.argtypes = [POINTER(snd_seq_port_info_t), c_int] + +# /usr/include/alsa/seq.h:297 +snd_seq_port_info_set_synth_voices = _lib.snd_seq_port_info_set_synth_voices +snd_seq_port_info_set_synth_voices.restype = None +snd_seq_port_info_set_synth_voices.argtypes = [POINTER(snd_seq_port_info_t), c_int] + +# /usr/include/alsa/seq.h:298 +snd_seq_port_info_set_port_specified = _lib.snd_seq_port_info_set_port_specified +snd_seq_port_info_set_port_specified.restype = None +snd_seq_port_info_set_port_specified.argtypes = [POINTER(snd_seq_port_info_t), c_int] + +# /usr/include/alsa/seq.h:299 +snd_seq_port_info_set_timestamping = _lib.snd_seq_port_info_set_timestamping +snd_seq_port_info_set_timestamping.restype = None +snd_seq_port_info_set_timestamping.argtypes = [POINTER(snd_seq_port_info_t), c_int] + +# /usr/include/alsa/seq.h:300 +snd_seq_port_info_set_timestamp_real = _lib.snd_seq_port_info_set_timestamp_real +snd_seq_port_info_set_timestamp_real.restype = None +snd_seq_port_info_set_timestamp_real.argtypes = [POINTER(snd_seq_port_info_t), c_int] + +# /usr/include/alsa/seq.h:301 +snd_seq_port_info_set_timestamp_queue = _lib.snd_seq_port_info_set_timestamp_queue +snd_seq_port_info_set_timestamp_queue.restype = None +snd_seq_port_info_set_timestamp_queue.argtypes = [POINTER(snd_seq_port_info_t), c_int] + +# /usr/include/alsa/seq.h:303 +snd_seq_create_port = _lib.snd_seq_create_port +snd_seq_create_port.restype = c_int +snd_seq_create_port.argtypes = [POINTER(snd_seq_t), POINTER(snd_seq_port_info_t)] + +# /usr/include/alsa/seq.h:304 +snd_seq_delete_port = _lib.snd_seq_delete_port +snd_seq_delete_port.restype = c_int +snd_seq_delete_port.argtypes = [POINTER(snd_seq_t), c_int] + +# /usr/include/alsa/seq.h:305 +snd_seq_get_port_info = _lib.snd_seq_get_port_info +snd_seq_get_port_info.restype = c_int +snd_seq_get_port_info.argtypes = [POINTER(snd_seq_t), c_int, POINTER(snd_seq_port_info_t)] + +# /usr/include/alsa/seq.h:306 +snd_seq_get_any_port_info = _lib.snd_seq_get_any_port_info +snd_seq_get_any_port_info.restype = c_int +snd_seq_get_any_port_info.argtypes = [POINTER(snd_seq_t), c_int, c_int, POINTER(snd_seq_port_info_t)] + +# /usr/include/alsa/seq.h:307 +snd_seq_set_port_info = _lib.snd_seq_set_port_info +snd_seq_set_port_info.restype = c_int +snd_seq_set_port_info.argtypes = [POINTER(snd_seq_t), c_int, POINTER(snd_seq_port_info_t)] + +# /usr/include/alsa/seq.h:308 +snd_seq_query_next_port = _lib.snd_seq_query_next_port +snd_seq_query_next_port.restype = c_int +snd_seq_query_next_port.argtypes = [POINTER(snd_seq_t), POINTER(snd_seq_port_info_t)] + +class struct__snd_seq_port_subscribe(Structure): + __slots__ = [ + ] +struct__snd_seq_port_subscribe._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_seq_port_subscribe(Structure): + __slots__ = [ + ] +struct__snd_seq_port_subscribe._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_seq_port_subscribe_t = struct__snd_seq_port_subscribe # /usr/include/alsa/seq.h:321 +# /usr/include/alsa/seq.h:323 +snd_seq_port_subscribe_sizeof = _lib.snd_seq_port_subscribe_sizeof +snd_seq_port_subscribe_sizeof.restype = c_size_t +snd_seq_port_subscribe_sizeof.argtypes = [] + +# /usr/include/alsa/seq.h:327 +snd_seq_port_subscribe_malloc = _lib.snd_seq_port_subscribe_malloc +snd_seq_port_subscribe_malloc.restype = c_int +snd_seq_port_subscribe_malloc.argtypes = [POINTER(POINTER(snd_seq_port_subscribe_t))] + +# /usr/include/alsa/seq.h:328 +snd_seq_port_subscribe_free = _lib.snd_seq_port_subscribe_free +snd_seq_port_subscribe_free.restype = None +snd_seq_port_subscribe_free.argtypes = [POINTER(snd_seq_port_subscribe_t)] + +# /usr/include/alsa/seq.h:329 +snd_seq_port_subscribe_copy = _lib.snd_seq_port_subscribe_copy +snd_seq_port_subscribe_copy.restype = None +snd_seq_port_subscribe_copy.argtypes = [POINTER(snd_seq_port_subscribe_t), POINTER(snd_seq_port_subscribe_t)] + +# /usr/include/alsa/seq.h:331 +snd_seq_port_subscribe_get_sender = _lib.snd_seq_port_subscribe_get_sender +snd_seq_port_subscribe_get_sender.restype = POINTER(snd_seq_addr_t) +snd_seq_port_subscribe_get_sender.argtypes = [POINTER(snd_seq_port_subscribe_t)] + +# /usr/include/alsa/seq.h:332 +snd_seq_port_subscribe_get_dest = _lib.snd_seq_port_subscribe_get_dest +snd_seq_port_subscribe_get_dest.restype = POINTER(snd_seq_addr_t) +snd_seq_port_subscribe_get_dest.argtypes = [POINTER(snd_seq_port_subscribe_t)] + +# /usr/include/alsa/seq.h:333 +snd_seq_port_subscribe_get_queue = _lib.snd_seq_port_subscribe_get_queue +snd_seq_port_subscribe_get_queue.restype = c_int +snd_seq_port_subscribe_get_queue.argtypes = [POINTER(snd_seq_port_subscribe_t)] + +# /usr/include/alsa/seq.h:334 +snd_seq_port_subscribe_get_exclusive = _lib.snd_seq_port_subscribe_get_exclusive +snd_seq_port_subscribe_get_exclusive.restype = c_int +snd_seq_port_subscribe_get_exclusive.argtypes = [POINTER(snd_seq_port_subscribe_t)] + +# /usr/include/alsa/seq.h:335 +snd_seq_port_subscribe_get_time_update = _lib.snd_seq_port_subscribe_get_time_update +snd_seq_port_subscribe_get_time_update.restype = c_int +snd_seq_port_subscribe_get_time_update.argtypes = [POINTER(snd_seq_port_subscribe_t)] + +# /usr/include/alsa/seq.h:336 +snd_seq_port_subscribe_get_time_real = _lib.snd_seq_port_subscribe_get_time_real +snd_seq_port_subscribe_get_time_real.restype = c_int +snd_seq_port_subscribe_get_time_real.argtypes = [POINTER(snd_seq_port_subscribe_t)] + +# /usr/include/alsa/seq.h:338 +snd_seq_port_subscribe_set_sender = _lib.snd_seq_port_subscribe_set_sender +snd_seq_port_subscribe_set_sender.restype = None +snd_seq_port_subscribe_set_sender.argtypes = [POINTER(snd_seq_port_subscribe_t), POINTER(snd_seq_addr_t)] + +# /usr/include/alsa/seq.h:339 +snd_seq_port_subscribe_set_dest = _lib.snd_seq_port_subscribe_set_dest +snd_seq_port_subscribe_set_dest.restype = None +snd_seq_port_subscribe_set_dest.argtypes = [POINTER(snd_seq_port_subscribe_t), POINTER(snd_seq_addr_t)] + +# /usr/include/alsa/seq.h:340 +snd_seq_port_subscribe_set_queue = _lib.snd_seq_port_subscribe_set_queue +snd_seq_port_subscribe_set_queue.restype = None +snd_seq_port_subscribe_set_queue.argtypes = [POINTER(snd_seq_port_subscribe_t), c_int] + +# /usr/include/alsa/seq.h:341 +snd_seq_port_subscribe_set_exclusive = _lib.snd_seq_port_subscribe_set_exclusive +snd_seq_port_subscribe_set_exclusive.restype = None +snd_seq_port_subscribe_set_exclusive.argtypes = [POINTER(snd_seq_port_subscribe_t), c_int] + +# /usr/include/alsa/seq.h:342 +snd_seq_port_subscribe_set_time_update = _lib.snd_seq_port_subscribe_set_time_update +snd_seq_port_subscribe_set_time_update.restype = None +snd_seq_port_subscribe_set_time_update.argtypes = [POINTER(snd_seq_port_subscribe_t), c_int] + +# /usr/include/alsa/seq.h:343 +snd_seq_port_subscribe_set_time_real = _lib.snd_seq_port_subscribe_set_time_real +snd_seq_port_subscribe_set_time_real.restype = None +snd_seq_port_subscribe_set_time_real.argtypes = [POINTER(snd_seq_port_subscribe_t), c_int] + +# /usr/include/alsa/seq.h:345 +snd_seq_get_port_subscription = _lib.snd_seq_get_port_subscription +snd_seq_get_port_subscription.restype = c_int +snd_seq_get_port_subscription.argtypes = [POINTER(snd_seq_t), POINTER(snd_seq_port_subscribe_t)] + +# /usr/include/alsa/seq.h:346 +snd_seq_subscribe_port = _lib.snd_seq_subscribe_port +snd_seq_subscribe_port.restype = c_int +snd_seq_subscribe_port.argtypes = [POINTER(snd_seq_t), POINTER(snd_seq_port_subscribe_t)] + +# /usr/include/alsa/seq.h:347 +snd_seq_unsubscribe_port = _lib.snd_seq_unsubscribe_port +snd_seq_unsubscribe_port.restype = c_int +snd_seq_unsubscribe_port.argtypes = [POINTER(snd_seq_t), POINTER(snd_seq_port_subscribe_t)] + +class struct__snd_seq_query_subscribe(Structure): + __slots__ = [ + ] +struct__snd_seq_query_subscribe._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_seq_query_subscribe(Structure): + __slots__ = [ + ] +struct__snd_seq_query_subscribe._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_seq_query_subscribe_t = struct__snd_seq_query_subscribe # /usr/include/alsa/seq.h:353 +enum_anon_30 = c_int +SND_SEQ_QUERY_SUBS_READ = 1 +SND_SEQ_QUERY_SUBS_WRITE = 2 +snd_seq_query_subs_type_t = enum_anon_30 # /usr/include/alsa/seq.h:359 +# /usr/include/alsa/seq.h:361 +snd_seq_query_subscribe_sizeof = _lib.snd_seq_query_subscribe_sizeof +snd_seq_query_subscribe_sizeof.restype = c_size_t +snd_seq_query_subscribe_sizeof.argtypes = [] + +# /usr/include/alsa/seq.h:365 +snd_seq_query_subscribe_malloc = _lib.snd_seq_query_subscribe_malloc +snd_seq_query_subscribe_malloc.restype = c_int +snd_seq_query_subscribe_malloc.argtypes = [POINTER(POINTER(snd_seq_query_subscribe_t))] + +# /usr/include/alsa/seq.h:366 +snd_seq_query_subscribe_free = _lib.snd_seq_query_subscribe_free +snd_seq_query_subscribe_free.restype = None +snd_seq_query_subscribe_free.argtypes = [POINTER(snd_seq_query_subscribe_t)] + +# /usr/include/alsa/seq.h:367 +snd_seq_query_subscribe_copy = _lib.snd_seq_query_subscribe_copy +snd_seq_query_subscribe_copy.restype = None +snd_seq_query_subscribe_copy.argtypes = [POINTER(snd_seq_query_subscribe_t), POINTER(snd_seq_query_subscribe_t)] + +# /usr/include/alsa/seq.h:369 +snd_seq_query_subscribe_get_client = _lib.snd_seq_query_subscribe_get_client +snd_seq_query_subscribe_get_client.restype = c_int +snd_seq_query_subscribe_get_client.argtypes = [POINTER(snd_seq_query_subscribe_t)] + +# /usr/include/alsa/seq.h:370 +snd_seq_query_subscribe_get_port = _lib.snd_seq_query_subscribe_get_port +snd_seq_query_subscribe_get_port.restype = c_int +snd_seq_query_subscribe_get_port.argtypes = [POINTER(snd_seq_query_subscribe_t)] + +# /usr/include/alsa/seq.h:371 +snd_seq_query_subscribe_get_root = _lib.snd_seq_query_subscribe_get_root +snd_seq_query_subscribe_get_root.restype = POINTER(snd_seq_addr_t) +snd_seq_query_subscribe_get_root.argtypes = [POINTER(snd_seq_query_subscribe_t)] + +# /usr/include/alsa/seq.h:372 +snd_seq_query_subscribe_get_type = _lib.snd_seq_query_subscribe_get_type +snd_seq_query_subscribe_get_type.restype = snd_seq_query_subs_type_t +snd_seq_query_subscribe_get_type.argtypes = [POINTER(snd_seq_query_subscribe_t)] + +# /usr/include/alsa/seq.h:373 +snd_seq_query_subscribe_get_index = _lib.snd_seq_query_subscribe_get_index +snd_seq_query_subscribe_get_index.restype = c_int +snd_seq_query_subscribe_get_index.argtypes = [POINTER(snd_seq_query_subscribe_t)] + +# /usr/include/alsa/seq.h:374 +snd_seq_query_subscribe_get_num_subs = _lib.snd_seq_query_subscribe_get_num_subs +snd_seq_query_subscribe_get_num_subs.restype = c_int +snd_seq_query_subscribe_get_num_subs.argtypes = [POINTER(snd_seq_query_subscribe_t)] + +# /usr/include/alsa/seq.h:375 +snd_seq_query_subscribe_get_addr = _lib.snd_seq_query_subscribe_get_addr +snd_seq_query_subscribe_get_addr.restype = POINTER(snd_seq_addr_t) +snd_seq_query_subscribe_get_addr.argtypes = [POINTER(snd_seq_query_subscribe_t)] + +# /usr/include/alsa/seq.h:376 +snd_seq_query_subscribe_get_queue = _lib.snd_seq_query_subscribe_get_queue +snd_seq_query_subscribe_get_queue.restype = c_int +snd_seq_query_subscribe_get_queue.argtypes = [POINTER(snd_seq_query_subscribe_t)] + +# /usr/include/alsa/seq.h:377 +snd_seq_query_subscribe_get_exclusive = _lib.snd_seq_query_subscribe_get_exclusive +snd_seq_query_subscribe_get_exclusive.restype = c_int +snd_seq_query_subscribe_get_exclusive.argtypes = [POINTER(snd_seq_query_subscribe_t)] + +# /usr/include/alsa/seq.h:378 +snd_seq_query_subscribe_get_time_update = _lib.snd_seq_query_subscribe_get_time_update +snd_seq_query_subscribe_get_time_update.restype = c_int +snd_seq_query_subscribe_get_time_update.argtypes = [POINTER(snd_seq_query_subscribe_t)] + +# /usr/include/alsa/seq.h:379 +snd_seq_query_subscribe_get_time_real = _lib.snd_seq_query_subscribe_get_time_real +snd_seq_query_subscribe_get_time_real.restype = c_int +snd_seq_query_subscribe_get_time_real.argtypes = [POINTER(snd_seq_query_subscribe_t)] + +# /usr/include/alsa/seq.h:381 +snd_seq_query_subscribe_set_client = _lib.snd_seq_query_subscribe_set_client +snd_seq_query_subscribe_set_client.restype = None +snd_seq_query_subscribe_set_client.argtypes = [POINTER(snd_seq_query_subscribe_t), c_int] + +# /usr/include/alsa/seq.h:382 +snd_seq_query_subscribe_set_port = _lib.snd_seq_query_subscribe_set_port +snd_seq_query_subscribe_set_port.restype = None +snd_seq_query_subscribe_set_port.argtypes = [POINTER(snd_seq_query_subscribe_t), c_int] + +# /usr/include/alsa/seq.h:383 +snd_seq_query_subscribe_set_root = _lib.snd_seq_query_subscribe_set_root +snd_seq_query_subscribe_set_root.restype = None +snd_seq_query_subscribe_set_root.argtypes = [POINTER(snd_seq_query_subscribe_t), POINTER(snd_seq_addr_t)] + +# /usr/include/alsa/seq.h:384 +snd_seq_query_subscribe_set_type = _lib.snd_seq_query_subscribe_set_type +snd_seq_query_subscribe_set_type.restype = None +snd_seq_query_subscribe_set_type.argtypes = [POINTER(snd_seq_query_subscribe_t), snd_seq_query_subs_type_t] + +# /usr/include/alsa/seq.h:385 +snd_seq_query_subscribe_set_index = _lib.snd_seq_query_subscribe_set_index +snd_seq_query_subscribe_set_index.restype = None +snd_seq_query_subscribe_set_index.argtypes = [POINTER(snd_seq_query_subscribe_t), c_int] + +# /usr/include/alsa/seq.h:387 +snd_seq_query_port_subscribers = _lib.snd_seq_query_port_subscribers +snd_seq_query_port_subscribers.restype = c_int +snd_seq_query_port_subscribers.argtypes = [POINTER(snd_seq_t), POINTER(snd_seq_query_subscribe_t)] + +class struct__snd_seq_queue_info(Structure): + __slots__ = [ + ] +struct__snd_seq_queue_info._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_seq_queue_info(Structure): + __slots__ = [ + ] +struct__snd_seq_queue_info._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_seq_queue_info_t = struct__snd_seq_queue_info # /usr/include/alsa/seq.h:400 +class struct__snd_seq_queue_status(Structure): + __slots__ = [ + ] +struct__snd_seq_queue_status._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_seq_queue_status(Structure): + __slots__ = [ + ] +struct__snd_seq_queue_status._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_seq_queue_status_t = struct__snd_seq_queue_status # /usr/include/alsa/seq.h:402 +class struct__snd_seq_queue_tempo(Structure): + __slots__ = [ + ] +struct__snd_seq_queue_tempo._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_seq_queue_tempo(Structure): + __slots__ = [ + ] +struct__snd_seq_queue_tempo._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_seq_queue_tempo_t = struct__snd_seq_queue_tempo # /usr/include/alsa/seq.h:404 +class struct__snd_seq_queue_timer(Structure): + __slots__ = [ + ] +struct__snd_seq_queue_timer._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_seq_queue_timer(Structure): + __slots__ = [ + ] +struct__snd_seq_queue_timer._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_seq_queue_timer_t = struct__snd_seq_queue_timer # /usr/include/alsa/seq.h:406 +SND_SEQ_QUEUE_DIRECT = 253 # /usr/include/alsa/seq.h:409 +# /usr/include/alsa/seq.h:411 +snd_seq_queue_info_sizeof = _lib.snd_seq_queue_info_sizeof +snd_seq_queue_info_sizeof.restype = c_size_t +snd_seq_queue_info_sizeof.argtypes = [] + +# /usr/include/alsa/seq.h:415 +snd_seq_queue_info_malloc = _lib.snd_seq_queue_info_malloc +snd_seq_queue_info_malloc.restype = c_int +snd_seq_queue_info_malloc.argtypes = [POINTER(POINTER(snd_seq_queue_info_t))] + +# /usr/include/alsa/seq.h:416 +snd_seq_queue_info_free = _lib.snd_seq_queue_info_free +snd_seq_queue_info_free.restype = None +snd_seq_queue_info_free.argtypes = [POINTER(snd_seq_queue_info_t)] + +# /usr/include/alsa/seq.h:417 +snd_seq_queue_info_copy = _lib.snd_seq_queue_info_copy +snd_seq_queue_info_copy.restype = None +snd_seq_queue_info_copy.argtypes = [POINTER(snd_seq_queue_info_t), POINTER(snd_seq_queue_info_t)] + +# /usr/include/alsa/seq.h:419 +snd_seq_queue_info_get_queue = _lib.snd_seq_queue_info_get_queue +snd_seq_queue_info_get_queue.restype = c_int +snd_seq_queue_info_get_queue.argtypes = [POINTER(snd_seq_queue_info_t)] + +# /usr/include/alsa/seq.h:420 +snd_seq_queue_info_get_name = _lib.snd_seq_queue_info_get_name +snd_seq_queue_info_get_name.restype = c_char_p +snd_seq_queue_info_get_name.argtypes = [POINTER(snd_seq_queue_info_t)] + +# /usr/include/alsa/seq.h:421 +snd_seq_queue_info_get_owner = _lib.snd_seq_queue_info_get_owner +snd_seq_queue_info_get_owner.restype = c_int +snd_seq_queue_info_get_owner.argtypes = [POINTER(snd_seq_queue_info_t)] + +# /usr/include/alsa/seq.h:422 +snd_seq_queue_info_get_locked = _lib.snd_seq_queue_info_get_locked +snd_seq_queue_info_get_locked.restype = c_int +snd_seq_queue_info_get_locked.argtypes = [POINTER(snd_seq_queue_info_t)] + +# /usr/include/alsa/seq.h:423 +snd_seq_queue_info_get_flags = _lib.snd_seq_queue_info_get_flags +snd_seq_queue_info_get_flags.restype = c_uint +snd_seq_queue_info_get_flags.argtypes = [POINTER(snd_seq_queue_info_t)] + +# /usr/include/alsa/seq.h:425 +snd_seq_queue_info_set_name = _lib.snd_seq_queue_info_set_name +snd_seq_queue_info_set_name.restype = None +snd_seq_queue_info_set_name.argtypes = [POINTER(snd_seq_queue_info_t), c_char_p] + +# /usr/include/alsa/seq.h:426 +snd_seq_queue_info_set_owner = _lib.snd_seq_queue_info_set_owner +snd_seq_queue_info_set_owner.restype = None +snd_seq_queue_info_set_owner.argtypes = [POINTER(snd_seq_queue_info_t), c_int] + +# /usr/include/alsa/seq.h:427 +snd_seq_queue_info_set_locked = _lib.snd_seq_queue_info_set_locked +snd_seq_queue_info_set_locked.restype = None +snd_seq_queue_info_set_locked.argtypes = [POINTER(snd_seq_queue_info_t), c_int] + +# /usr/include/alsa/seq.h:428 +snd_seq_queue_info_set_flags = _lib.snd_seq_queue_info_set_flags +snd_seq_queue_info_set_flags.restype = None +snd_seq_queue_info_set_flags.argtypes = [POINTER(snd_seq_queue_info_t), c_uint] + +# /usr/include/alsa/seq.h:430 +snd_seq_create_queue = _lib.snd_seq_create_queue +snd_seq_create_queue.restype = c_int +snd_seq_create_queue.argtypes = [POINTER(snd_seq_t), POINTER(snd_seq_queue_info_t)] + +# /usr/include/alsa/seq.h:431 +snd_seq_alloc_named_queue = _lib.snd_seq_alloc_named_queue +snd_seq_alloc_named_queue.restype = c_int +snd_seq_alloc_named_queue.argtypes = [POINTER(snd_seq_t), c_char_p] + +# /usr/include/alsa/seq.h:432 +snd_seq_alloc_queue = _lib.snd_seq_alloc_queue +snd_seq_alloc_queue.restype = c_int +snd_seq_alloc_queue.argtypes = [POINTER(snd_seq_t)] + +# /usr/include/alsa/seq.h:433 +snd_seq_free_queue = _lib.snd_seq_free_queue +snd_seq_free_queue.restype = c_int +snd_seq_free_queue.argtypes = [POINTER(snd_seq_t), c_int] + +# /usr/include/alsa/seq.h:434 +snd_seq_get_queue_info = _lib.snd_seq_get_queue_info +snd_seq_get_queue_info.restype = c_int +snd_seq_get_queue_info.argtypes = [POINTER(snd_seq_t), c_int, POINTER(snd_seq_queue_info_t)] + +# /usr/include/alsa/seq.h:435 +snd_seq_set_queue_info = _lib.snd_seq_set_queue_info +snd_seq_set_queue_info.restype = c_int +snd_seq_set_queue_info.argtypes = [POINTER(snd_seq_t), c_int, POINTER(snd_seq_queue_info_t)] + +# /usr/include/alsa/seq.h:436 +snd_seq_query_named_queue = _lib.snd_seq_query_named_queue +snd_seq_query_named_queue.restype = c_int +snd_seq_query_named_queue.argtypes = [POINTER(snd_seq_t), c_char_p] + +# /usr/include/alsa/seq.h:438 +snd_seq_get_queue_usage = _lib.snd_seq_get_queue_usage +snd_seq_get_queue_usage.restype = c_int +snd_seq_get_queue_usage.argtypes = [POINTER(snd_seq_t), c_int] + +# /usr/include/alsa/seq.h:439 +snd_seq_set_queue_usage = _lib.snd_seq_set_queue_usage +snd_seq_set_queue_usage.restype = c_int +snd_seq_set_queue_usage.argtypes = [POINTER(snd_seq_t), c_int, c_int] + +# /usr/include/alsa/seq.h:443 +snd_seq_queue_status_sizeof = _lib.snd_seq_queue_status_sizeof +snd_seq_queue_status_sizeof.restype = c_size_t +snd_seq_queue_status_sizeof.argtypes = [] + +# /usr/include/alsa/seq.h:447 +snd_seq_queue_status_malloc = _lib.snd_seq_queue_status_malloc +snd_seq_queue_status_malloc.restype = c_int +snd_seq_queue_status_malloc.argtypes = [POINTER(POINTER(snd_seq_queue_status_t))] + +# /usr/include/alsa/seq.h:448 +snd_seq_queue_status_free = _lib.snd_seq_queue_status_free +snd_seq_queue_status_free.restype = None +snd_seq_queue_status_free.argtypes = [POINTER(snd_seq_queue_status_t)] + +# /usr/include/alsa/seq.h:449 +snd_seq_queue_status_copy = _lib.snd_seq_queue_status_copy +snd_seq_queue_status_copy.restype = None +snd_seq_queue_status_copy.argtypes = [POINTER(snd_seq_queue_status_t), POINTER(snd_seq_queue_status_t)] + +# /usr/include/alsa/seq.h:451 +snd_seq_queue_status_get_queue = _lib.snd_seq_queue_status_get_queue +snd_seq_queue_status_get_queue.restype = c_int +snd_seq_queue_status_get_queue.argtypes = [POINTER(snd_seq_queue_status_t)] + +# /usr/include/alsa/seq.h:452 +snd_seq_queue_status_get_events = _lib.snd_seq_queue_status_get_events +snd_seq_queue_status_get_events.restype = c_int +snd_seq_queue_status_get_events.argtypes = [POINTER(snd_seq_queue_status_t)] + +# /usr/include/alsa/seq.h:453 +snd_seq_queue_status_get_tick_time = _lib.snd_seq_queue_status_get_tick_time +snd_seq_queue_status_get_tick_time.restype = snd_seq_tick_time_t +snd_seq_queue_status_get_tick_time.argtypes = [POINTER(snd_seq_queue_status_t)] + +# /usr/include/alsa/seq.h:454 +snd_seq_queue_status_get_real_time = _lib.snd_seq_queue_status_get_real_time +snd_seq_queue_status_get_real_time.restype = POINTER(snd_seq_real_time_t) +snd_seq_queue_status_get_real_time.argtypes = [POINTER(snd_seq_queue_status_t)] + +# /usr/include/alsa/seq.h:455 +snd_seq_queue_status_get_status = _lib.snd_seq_queue_status_get_status +snd_seq_queue_status_get_status.restype = c_uint +snd_seq_queue_status_get_status.argtypes = [POINTER(snd_seq_queue_status_t)] + +# /usr/include/alsa/seq.h:457 +snd_seq_get_queue_status = _lib.snd_seq_get_queue_status +snd_seq_get_queue_status.restype = c_int +snd_seq_get_queue_status.argtypes = [POINTER(snd_seq_t), c_int, POINTER(snd_seq_queue_status_t)] + +# /usr/include/alsa/seq.h:461 +snd_seq_queue_tempo_sizeof = _lib.snd_seq_queue_tempo_sizeof +snd_seq_queue_tempo_sizeof.restype = c_size_t +snd_seq_queue_tempo_sizeof.argtypes = [] + +# /usr/include/alsa/seq.h:465 +snd_seq_queue_tempo_malloc = _lib.snd_seq_queue_tempo_malloc +snd_seq_queue_tempo_malloc.restype = c_int +snd_seq_queue_tempo_malloc.argtypes = [POINTER(POINTER(snd_seq_queue_tempo_t))] + +# /usr/include/alsa/seq.h:466 +snd_seq_queue_tempo_free = _lib.snd_seq_queue_tempo_free +snd_seq_queue_tempo_free.restype = None +snd_seq_queue_tempo_free.argtypes = [POINTER(snd_seq_queue_tempo_t)] + +# /usr/include/alsa/seq.h:467 +snd_seq_queue_tempo_copy = _lib.snd_seq_queue_tempo_copy +snd_seq_queue_tempo_copy.restype = None +snd_seq_queue_tempo_copy.argtypes = [POINTER(snd_seq_queue_tempo_t), POINTER(snd_seq_queue_tempo_t)] + +# /usr/include/alsa/seq.h:469 +snd_seq_queue_tempo_get_queue = _lib.snd_seq_queue_tempo_get_queue +snd_seq_queue_tempo_get_queue.restype = c_int +snd_seq_queue_tempo_get_queue.argtypes = [POINTER(snd_seq_queue_tempo_t)] + +# /usr/include/alsa/seq.h:470 +snd_seq_queue_tempo_get_tempo = _lib.snd_seq_queue_tempo_get_tempo +snd_seq_queue_tempo_get_tempo.restype = c_uint +snd_seq_queue_tempo_get_tempo.argtypes = [POINTER(snd_seq_queue_tempo_t)] + +# /usr/include/alsa/seq.h:471 +snd_seq_queue_tempo_get_ppq = _lib.snd_seq_queue_tempo_get_ppq +snd_seq_queue_tempo_get_ppq.restype = c_int +snd_seq_queue_tempo_get_ppq.argtypes = [POINTER(snd_seq_queue_tempo_t)] + +# /usr/include/alsa/seq.h:472 +snd_seq_queue_tempo_get_skew = _lib.snd_seq_queue_tempo_get_skew +snd_seq_queue_tempo_get_skew.restype = c_uint +snd_seq_queue_tempo_get_skew.argtypes = [POINTER(snd_seq_queue_tempo_t)] + +# /usr/include/alsa/seq.h:473 +snd_seq_queue_tempo_get_skew_base = _lib.snd_seq_queue_tempo_get_skew_base +snd_seq_queue_tempo_get_skew_base.restype = c_uint +snd_seq_queue_tempo_get_skew_base.argtypes = [POINTER(snd_seq_queue_tempo_t)] + +# /usr/include/alsa/seq.h:474 +snd_seq_queue_tempo_set_tempo = _lib.snd_seq_queue_tempo_set_tempo +snd_seq_queue_tempo_set_tempo.restype = None +snd_seq_queue_tempo_set_tempo.argtypes = [POINTER(snd_seq_queue_tempo_t), c_uint] + +# /usr/include/alsa/seq.h:475 +snd_seq_queue_tempo_set_ppq = _lib.snd_seq_queue_tempo_set_ppq +snd_seq_queue_tempo_set_ppq.restype = None +snd_seq_queue_tempo_set_ppq.argtypes = [POINTER(snd_seq_queue_tempo_t), c_int] + +# /usr/include/alsa/seq.h:476 +snd_seq_queue_tempo_set_skew = _lib.snd_seq_queue_tempo_set_skew +snd_seq_queue_tempo_set_skew.restype = None +snd_seq_queue_tempo_set_skew.argtypes = [POINTER(snd_seq_queue_tempo_t), c_uint] + +# /usr/include/alsa/seq.h:477 +snd_seq_queue_tempo_set_skew_base = _lib.snd_seq_queue_tempo_set_skew_base +snd_seq_queue_tempo_set_skew_base.restype = None +snd_seq_queue_tempo_set_skew_base.argtypes = [POINTER(snd_seq_queue_tempo_t), c_uint] + +# /usr/include/alsa/seq.h:479 +snd_seq_get_queue_tempo = _lib.snd_seq_get_queue_tempo +snd_seq_get_queue_tempo.restype = c_int +snd_seq_get_queue_tempo.argtypes = [POINTER(snd_seq_t), c_int, POINTER(snd_seq_queue_tempo_t)] + +# /usr/include/alsa/seq.h:480 +snd_seq_set_queue_tempo = _lib.snd_seq_set_queue_tempo +snd_seq_set_queue_tempo.restype = c_int +snd_seq_set_queue_tempo.argtypes = [POINTER(snd_seq_t), c_int, POINTER(snd_seq_queue_tempo_t)] + +enum_anon_31 = c_int +SND_SEQ_TIMER_ALSA = 0 +SND_SEQ_TIMER_MIDI_CLOCK = 1 +SND_SEQ_TIMER_MIDI_TICK = 2 +snd_seq_queue_timer_type_t = enum_anon_31 # /usr/include/alsa/seq.h:490 +# /usr/include/alsa/seq.h:492 +snd_seq_queue_timer_sizeof = _lib.snd_seq_queue_timer_sizeof +snd_seq_queue_timer_sizeof.restype = c_size_t +snd_seq_queue_timer_sizeof.argtypes = [] + +# /usr/include/alsa/seq.h:496 +snd_seq_queue_timer_malloc = _lib.snd_seq_queue_timer_malloc +snd_seq_queue_timer_malloc.restype = c_int +snd_seq_queue_timer_malloc.argtypes = [POINTER(POINTER(snd_seq_queue_timer_t))] + +# /usr/include/alsa/seq.h:497 +snd_seq_queue_timer_free = _lib.snd_seq_queue_timer_free +snd_seq_queue_timer_free.restype = None +snd_seq_queue_timer_free.argtypes = [POINTER(snd_seq_queue_timer_t)] + +# /usr/include/alsa/seq.h:498 +snd_seq_queue_timer_copy = _lib.snd_seq_queue_timer_copy +snd_seq_queue_timer_copy.restype = None +snd_seq_queue_timer_copy.argtypes = [POINTER(snd_seq_queue_timer_t), POINTER(snd_seq_queue_timer_t)] + +# /usr/include/alsa/seq.h:500 +snd_seq_queue_timer_get_queue = _lib.snd_seq_queue_timer_get_queue +snd_seq_queue_timer_get_queue.restype = c_int +snd_seq_queue_timer_get_queue.argtypes = [POINTER(snd_seq_queue_timer_t)] + +# /usr/include/alsa/seq.h:501 +snd_seq_queue_timer_get_type = _lib.snd_seq_queue_timer_get_type +snd_seq_queue_timer_get_type.restype = snd_seq_queue_timer_type_t +snd_seq_queue_timer_get_type.argtypes = [POINTER(snd_seq_queue_timer_t)] + +# /usr/include/alsa/seq.h:502 +snd_seq_queue_timer_get_id = _lib.snd_seq_queue_timer_get_id +snd_seq_queue_timer_get_id.restype = POINTER(snd_timer_id_t) +snd_seq_queue_timer_get_id.argtypes = [POINTER(snd_seq_queue_timer_t)] + +# /usr/include/alsa/seq.h:503 +snd_seq_queue_timer_get_resolution = _lib.snd_seq_queue_timer_get_resolution +snd_seq_queue_timer_get_resolution.restype = c_uint +snd_seq_queue_timer_get_resolution.argtypes = [POINTER(snd_seq_queue_timer_t)] + +# /usr/include/alsa/seq.h:505 +snd_seq_queue_timer_set_type = _lib.snd_seq_queue_timer_set_type +snd_seq_queue_timer_set_type.restype = None +snd_seq_queue_timer_set_type.argtypes = [POINTER(snd_seq_queue_timer_t), snd_seq_queue_timer_type_t] + +# /usr/include/alsa/seq.h:506 +snd_seq_queue_timer_set_id = _lib.snd_seq_queue_timer_set_id +snd_seq_queue_timer_set_id.restype = None +snd_seq_queue_timer_set_id.argtypes = [POINTER(snd_seq_queue_timer_t), POINTER(snd_timer_id_t)] + +# /usr/include/alsa/seq.h:507 +snd_seq_queue_timer_set_resolution = _lib.snd_seq_queue_timer_set_resolution +snd_seq_queue_timer_set_resolution.restype = None +snd_seq_queue_timer_set_resolution.argtypes = [POINTER(snd_seq_queue_timer_t), c_uint] + +# /usr/include/alsa/seq.h:509 +snd_seq_get_queue_timer = _lib.snd_seq_get_queue_timer +snd_seq_get_queue_timer.restype = c_int +snd_seq_get_queue_timer.argtypes = [POINTER(snd_seq_t), c_int, POINTER(snd_seq_queue_timer_t)] + +# /usr/include/alsa/seq.h:510 +snd_seq_set_queue_timer = _lib.snd_seq_set_queue_timer +snd_seq_set_queue_timer.restype = c_int +snd_seq_set_queue_timer.argtypes = [POINTER(snd_seq_t), c_int, POINTER(snd_seq_queue_timer_t)] + +# /usr/include/alsa/seq.h:521 +snd_seq_free_event = _lib.snd_seq_free_event +snd_seq_free_event.restype = c_int +snd_seq_free_event.argtypes = [POINTER(snd_seq_event_t)] + +# /usr/include/alsa/seq.h:522 +snd_seq_event_length = _lib.snd_seq_event_length +snd_seq_event_length.restype = ssize_t +snd_seq_event_length.argtypes = [POINTER(snd_seq_event_t)] + +# /usr/include/alsa/seq.h:523 +snd_seq_event_output = _lib.snd_seq_event_output +snd_seq_event_output.restype = c_int +snd_seq_event_output.argtypes = [POINTER(snd_seq_t), POINTER(snd_seq_event_t)] + +# /usr/include/alsa/seq.h:524 +snd_seq_event_output_buffer = _lib.snd_seq_event_output_buffer +snd_seq_event_output_buffer.restype = c_int +snd_seq_event_output_buffer.argtypes = [POINTER(snd_seq_t), POINTER(snd_seq_event_t)] + +# /usr/include/alsa/seq.h:525 +snd_seq_event_output_direct = _lib.snd_seq_event_output_direct +snd_seq_event_output_direct.restype = c_int +snd_seq_event_output_direct.argtypes = [POINTER(snd_seq_t), POINTER(snd_seq_event_t)] + +# /usr/include/alsa/seq.h:526 +snd_seq_event_input = _lib.snd_seq_event_input +snd_seq_event_input.restype = c_int +snd_seq_event_input.argtypes = [POINTER(snd_seq_t), POINTER(POINTER(snd_seq_event_t))] + +# /usr/include/alsa/seq.h:527 +snd_seq_event_input_pending = _lib.snd_seq_event_input_pending +snd_seq_event_input_pending.restype = c_int +snd_seq_event_input_pending.argtypes = [POINTER(snd_seq_t), c_int] + +# /usr/include/alsa/seq.h:528 +snd_seq_drain_output = _lib.snd_seq_drain_output +snd_seq_drain_output.restype = c_int +snd_seq_drain_output.argtypes = [POINTER(snd_seq_t)] + +# /usr/include/alsa/seq.h:529 +snd_seq_event_output_pending = _lib.snd_seq_event_output_pending +snd_seq_event_output_pending.restype = c_int +snd_seq_event_output_pending.argtypes = [POINTER(snd_seq_t)] + +# /usr/include/alsa/seq.h:530 +snd_seq_extract_output = _lib.snd_seq_extract_output +snd_seq_extract_output.restype = c_int +snd_seq_extract_output.argtypes = [POINTER(snd_seq_t), POINTER(POINTER(snd_seq_event_t))] + +# /usr/include/alsa/seq.h:531 +snd_seq_drop_output = _lib.snd_seq_drop_output +snd_seq_drop_output.restype = c_int +snd_seq_drop_output.argtypes = [POINTER(snd_seq_t)] + +# /usr/include/alsa/seq.h:532 +snd_seq_drop_output_buffer = _lib.snd_seq_drop_output_buffer +snd_seq_drop_output_buffer.restype = c_int +snd_seq_drop_output_buffer.argtypes = [POINTER(snd_seq_t)] + +# /usr/include/alsa/seq.h:533 +snd_seq_drop_input = _lib.snd_seq_drop_input +snd_seq_drop_input.restype = c_int +snd_seq_drop_input.argtypes = [POINTER(snd_seq_t)] + +# /usr/include/alsa/seq.h:534 +snd_seq_drop_input_buffer = _lib.snd_seq_drop_input_buffer +snd_seq_drop_input_buffer.restype = c_int +snd_seq_drop_input_buffer.argtypes = [POINTER(snd_seq_t)] + +class struct__snd_seq_remove_events(Structure): + __slots__ = [ + ] +struct__snd_seq_remove_events._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_seq_remove_events(Structure): + __slots__ = [ + ] +struct__snd_seq_remove_events._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_seq_remove_events_t = struct__snd_seq_remove_events # /usr/include/alsa/seq.h:537 +SND_SEQ_REMOVE_INPUT = 1 # /usr/include/alsa/seq.h:540 +SND_SEQ_REMOVE_OUTPUT = 2 # /usr/include/alsa/seq.h:541 +SND_SEQ_REMOVE_DEST = 4 # /usr/include/alsa/seq.h:542 +SND_SEQ_REMOVE_DEST_CHANNEL = 8 # /usr/include/alsa/seq.h:543 +SND_SEQ_REMOVE_TIME_BEFORE = 16 # /usr/include/alsa/seq.h:544 +SND_SEQ_REMOVE_TIME_AFTER = 32 # /usr/include/alsa/seq.h:545 +SND_SEQ_REMOVE_TIME_TICK = 64 # /usr/include/alsa/seq.h:546 +SND_SEQ_REMOVE_EVENT_TYPE = 128 # /usr/include/alsa/seq.h:547 +SND_SEQ_REMOVE_IGNORE_OFF = 256 # /usr/include/alsa/seq.h:548 +SND_SEQ_REMOVE_TAG_MATCH = 512 # /usr/include/alsa/seq.h:549 +# /usr/include/alsa/seq.h:551 +snd_seq_remove_events_sizeof = _lib.snd_seq_remove_events_sizeof +snd_seq_remove_events_sizeof.restype = c_size_t +snd_seq_remove_events_sizeof.argtypes = [] + +# /usr/include/alsa/seq.h:555 +snd_seq_remove_events_malloc = _lib.snd_seq_remove_events_malloc +snd_seq_remove_events_malloc.restype = c_int +snd_seq_remove_events_malloc.argtypes = [POINTER(POINTER(snd_seq_remove_events_t))] + +# /usr/include/alsa/seq.h:556 +snd_seq_remove_events_free = _lib.snd_seq_remove_events_free +snd_seq_remove_events_free.restype = None +snd_seq_remove_events_free.argtypes = [POINTER(snd_seq_remove_events_t)] + +# /usr/include/alsa/seq.h:557 +snd_seq_remove_events_copy = _lib.snd_seq_remove_events_copy +snd_seq_remove_events_copy.restype = None +snd_seq_remove_events_copy.argtypes = [POINTER(snd_seq_remove_events_t), POINTER(snd_seq_remove_events_t)] + +# /usr/include/alsa/seq.h:559 +snd_seq_remove_events_get_condition = _lib.snd_seq_remove_events_get_condition +snd_seq_remove_events_get_condition.restype = c_uint +snd_seq_remove_events_get_condition.argtypes = [POINTER(snd_seq_remove_events_t)] + +# /usr/include/alsa/seq.h:560 +snd_seq_remove_events_get_queue = _lib.snd_seq_remove_events_get_queue +snd_seq_remove_events_get_queue.restype = c_int +snd_seq_remove_events_get_queue.argtypes = [POINTER(snd_seq_remove_events_t)] + +# /usr/include/alsa/seq.h:561 +snd_seq_remove_events_get_time = _lib.snd_seq_remove_events_get_time +snd_seq_remove_events_get_time.restype = POINTER(snd_seq_timestamp_t) +snd_seq_remove_events_get_time.argtypes = [POINTER(snd_seq_remove_events_t)] + +# /usr/include/alsa/seq.h:562 +snd_seq_remove_events_get_dest = _lib.snd_seq_remove_events_get_dest +snd_seq_remove_events_get_dest.restype = POINTER(snd_seq_addr_t) +snd_seq_remove_events_get_dest.argtypes = [POINTER(snd_seq_remove_events_t)] + +# /usr/include/alsa/seq.h:563 +snd_seq_remove_events_get_channel = _lib.snd_seq_remove_events_get_channel +snd_seq_remove_events_get_channel.restype = c_int +snd_seq_remove_events_get_channel.argtypes = [POINTER(snd_seq_remove_events_t)] + +# /usr/include/alsa/seq.h:564 +snd_seq_remove_events_get_event_type = _lib.snd_seq_remove_events_get_event_type +snd_seq_remove_events_get_event_type.restype = c_int +snd_seq_remove_events_get_event_type.argtypes = [POINTER(snd_seq_remove_events_t)] + +# /usr/include/alsa/seq.h:565 +snd_seq_remove_events_get_tag = _lib.snd_seq_remove_events_get_tag +snd_seq_remove_events_get_tag.restype = c_int +snd_seq_remove_events_get_tag.argtypes = [POINTER(snd_seq_remove_events_t)] + +# /usr/include/alsa/seq.h:567 +snd_seq_remove_events_set_condition = _lib.snd_seq_remove_events_set_condition +snd_seq_remove_events_set_condition.restype = None +snd_seq_remove_events_set_condition.argtypes = [POINTER(snd_seq_remove_events_t), c_uint] + +# /usr/include/alsa/seq.h:568 +snd_seq_remove_events_set_queue = _lib.snd_seq_remove_events_set_queue +snd_seq_remove_events_set_queue.restype = None +snd_seq_remove_events_set_queue.argtypes = [POINTER(snd_seq_remove_events_t), c_int] + +# /usr/include/alsa/seq.h:569 +snd_seq_remove_events_set_time = _lib.snd_seq_remove_events_set_time +snd_seq_remove_events_set_time.restype = None +snd_seq_remove_events_set_time.argtypes = [POINTER(snd_seq_remove_events_t), POINTER(snd_seq_timestamp_t)] + +# /usr/include/alsa/seq.h:570 +snd_seq_remove_events_set_dest = _lib.snd_seq_remove_events_set_dest +snd_seq_remove_events_set_dest.restype = None +snd_seq_remove_events_set_dest.argtypes = [POINTER(snd_seq_remove_events_t), POINTER(snd_seq_addr_t)] + +# /usr/include/alsa/seq.h:571 +snd_seq_remove_events_set_channel = _lib.snd_seq_remove_events_set_channel +snd_seq_remove_events_set_channel.restype = None +snd_seq_remove_events_set_channel.argtypes = [POINTER(snd_seq_remove_events_t), c_int] + +# /usr/include/alsa/seq.h:572 +snd_seq_remove_events_set_event_type = _lib.snd_seq_remove_events_set_event_type +snd_seq_remove_events_set_event_type.restype = None +snd_seq_remove_events_set_event_type.argtypes = [POINTER(snd_seq_remove_events_t), c_int] + +# /usr/include/alsa/seq.h:573 +snd_seq_remove_events_set_tag = _lib.snd_seq_remove_events_set_tag +snd_seq_remove_events_set_tag.restype = None +snd_seq_remove_events_set_tag.argtypes = [POINTER(snd_seq_remove_events_t), c_int] + +# /usr/include/alsa/seq.h:575 +snd_seq_remove_events = _lib.snd_seq_remove_events +snd_seq_remove_events.restype = c_int +snd_seq_remove_events.argtypes = [POINTER(snd_seq_t), POINTER(snd_seq_remove_events_t)] + +# /usr/include/alsa/seq.h:586 +snd_seq_set_bit = _lib.snd_seq_set_bit +snd_seq_set_bit.restype = None +snd_seq_set_bit.argtypes = [c_int, POINTER(None)] + +# /usr/include/alsa/seq.h:587 +snd_seq_change_bit = _lib.snd_seq_change_bit +snd_seq_change_bit.restype = c_int +snd_seq_change_bit.argtypes = [c_int, POINTER(None)] + +# /usr/include/alsa/seq.h:588 +snd_seq_get_bit = _lib.snd_seq_get_bit +snd_seq_get_bit.restype = c_int +snd_seq_get_bit.argtypes = [c_int, POINTER(None)] + +# /usr/include/alsa/seqmid.h:288 +snd_seq_control_queue = _lib.snd_seq_control_queue +snd_seq_control_queue.restype = c_int +snd_seq_control_queue.argtypes = [POINTER(snd_seq_t), c_int, c_int, c_int, POINTER(snd_seq_event_t)] + +# /usr/include/alsa/seqmid.h:328 +snd_seq_create_simple_port = _lib.snd_seq_create_simple_port +snd_seq_create_simple_port.restype = c_int +snd_seq_create_simple_port.argtypes = [POINTER(snd_seq_t), c_char_p, c_uint, c_uint] + +# /usr/include/alsa/seqmid.h:331 +snd_seq_delete_simple_port = _lib.snd_seq_delete_simple_port +snd_seq_delete_simple_port.restype = c_int +snd_seq_delete_simple_port.argtypes = [POINTER(snd_seq_t), c_int] + +# /usr/include/alsa/seqmid.h:336 +snd_seq_connect_from = _lib.snd_seq_connect_from +snd_seq_connect_from.restype = c_int +snd_seq_connect_from.argtypes = [POINTER(snd_seq_t), c_int, c_int, c_int] + +# /usr/include/alsa/seqmid.h:337 +snd_seq_connect_to = _lib.snd_seq_connect_to +snd_seq_connect_to.restype = c_int +snd_seq_connect_to.argtypes = [POINTER(snd_seq_t), c_int, c_int, c_int] + +# /usr/include/alsa/seqmid.h:338 +snd_seq_disconnect_from = _lib.snd_seq_disconnect_from +snd_seq_disconnect_from.restype = c_int +snd_seq_disconnect_from.argtypes = [POINTER(snd_seq_t), c_int, c_int, c_int] + +# /usr/include/alsa/seqmid.h:339 +snd_seq_disconnect_to = _lib.snd_seq_disconnect_to +snd_seq_disconnect_to.restype = c_int +snd_seq_disconnect_to.argtypes = [POINTER(snd_seq_t), c_int, c_int, c_int] + +# /usr/include/alsa/seqmid.h:344 +snd_seq_set_client_name = _lib.snd_seq_set_client_name +snd_seq_set_client_name.restype = c_int +snd_seq_set_client_name.argtypes = [POINTER(snd_seq_t), c_char_p] + +# /usr/include/alsa/seqmid.h:345 +snd_seq_set_client_event_filter = _lib.snd_seq_set_client_event_filter +snd_seq_set_client_event_filter.restype = c_int +snd_seq_set_client_event_filter.argtypes = [POINTER(snd_seq_t), c_int] + +# /usr/include/alsa/seqmid.h:346 +snd_seq_set_client_pool_output = _lib.snd_seq_set_client_pool_output +snd_seq_set_client_pool_output.restype = c_int +snd_seq_set_client_pool_output.argtypes = [POINTER(snd_seq_t), c_size_t] + +# /usr/include/alsa/seqmid.h:347 +snd_seq_set_client_pool_output_room = _lib.snd_seq_set_client_pool_output_room +snd_seq_set_client_pool_output_room.restype = c_int +snd_seq_set_client_pool_output_room.argtypes = [POINTER(snd_seq_t), c_size_t] + +# /usr/include/alsa/seqmid.h:348 +snd_seq_set_client_pool_input = _lib.snd_seq_set_client_pool_input +snd_seq_set_client_pool_input.restype = c_int +snd_seq_set_client_pool_input.argtypes = [POINTER(snd_seq_t), c_size_t] + +# /usr/include/alsa/seqmid.h:350 +snd_seq_sync_output_queue = _lib.snd_seq_sync_output_queue +snd_seq_sync_output_queue.restype = c_int +snd_seq_sync_output_queue.argtypes = [POINTER(snd_seq_t)] + +# /usr/include/alsa/seqmid.h:355 +snd_seq_parse_address = _lib.snd_seq_parse_address +snd_seq_parse_address.restype = c_int +snd_seq_parse_address.argtypes = [POINTER(snd_seq_t), POINTER(snd_seq_addr_t), c_char_p] + +# /usr/include/alsa/seqmid.h:360 +snd_seq_reset_pool_output = _lib.snd_seq_reset_pool_output +snd_seq_reset_pool_output.restype = c_int +snd_seq_reset_pool_output.argtypes = [POINTER(snd_seq_t)] + +# /usr/include/alsa/seqmid.h:361 +snd_seq_reset_pool_input = _lib.snd_seq_reset_pool_input +snd_seq_reset_pool_input.restype = c_int +snd_seq_reset_pool_input.argtypes = [POINTER(snd_seq_t)] + +class struct_snd_midi_event(Structure): + __slots__ = [ + ] +struct_snd_midi_event._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct_snd_midi_event(Structure): + __slots__ = [ + ] +struct_snd_midi_event._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_midi_event_t = struct_snd_midi_event # /usr/include/alsa/seq_midi_event.h:43 +# /usr/include/alsa/seq_midi_event.h:45 +snd_midi_event_new = _lib.snd_midi_event_new +snd_midi_event_new.restype = c_int +snd_midi_event_new.argtypes = [c_size_t, POINTER(POINTER(snd_midi_event_t))] + +# /usr/include/alsa/seq_midi_event.h:46 +snd_midi_event_resize_buffer = _lib.snd_midi_event_resize_buffer +snd_midi_event_resize_buffer.restype = c_int +snd_midi_event_resize_buffer.argtypes = [POINTER(snd_midi_event_t), c_size_t] + +# /usr/include/alsa/seq_midi_event.h:47 +snd_midi_event_free = _lib.snd_midi_event_free +snd_midi_event_free.restype = None +snd_midi_event_free.argtypes = [POINTER(snd_midi_event_t)] + +# /usr/include/alsa/seq_midi_event.h:48 +snd_midi_event_init = _lib.snd_midi_event_init +snd_midi_event_init.restype = None +snd_midi_event_init.argtypes = [POINTER(snd_midi_event_t)] + +# /usr/include/alsa/seq_midi_event.h:49 +snd_midi_event_reset_encode = _lib.snd_midi_event_reset_encode +snd_midi_event_reset_encode.restype = None +snd_midi_event_reset_encode.argtypes = [POINTER(snd_midi_event_t)] + +# /usr/include/alsa/seq_midi_event.h:50 +snd_midi_event_reset_decode = _lib.snd_midi_event_reset_decode +snd_midi_event_reset_decode.restype = None +snd_midi_event_reset_decode.argtypes = [POINTER(snd_midi_event_t)] + +# /usr/include/alsa/seq_midi_event.h:51 +snd_midi_event_no_status = _lib.snd_midi_event_no_status +snd_midi_event_no_status.restype = None +snd_midi_event_no_status.argtypes = [POINTER(snd_midi_event_t), c_int] + +# /usr/include/alsa/seq_midi_event.h:53 +snd_midi_event_encode = _lib.snd_midi_event_encode +snd_midi_event_encode.restype = c_long +snd_midi_event_encode.argtypes = [POINTER(snd_midi_event_t), POINTER(c_ubyte), c_long, POINTER(snd_seq_event_t)] + +# /usr/include/alsa/seq_midi_event.h:54 +snd_midi_event_encode_byte = _lib.snd_midi_event_encode_byte +snd_midi_event_encode_byte.restype = c_int +snd_midi_event_encode_byte.argtypes = [POINTER(snd_midi_event_t), c_int, POINTER(snd_seq_event_t)] + +# /usr/include/alsa/seq_midi_event.h:56 +snd_midi_event_decode = _lib.snd_midi_event_decode +snd_midi_event_decode.restype = c_long +snd_midi_event_decode.argtypes = [POINTER(snd_midi_event_t), POINTER(c_ubyte), c_long, POINTER(snd_seq_event_t)] + +class struct__snd_instr_header(Structure): + __slots__ = [ + ] +struct__snd_instr_header._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_instr_header(Structure): + __slots__ = [ + ] +struct__snd_instr_header._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_instr_header_t = struct__snd_instr_header # /usr/include/alsa/instr.h:44 +# /usr/include/alsa/instr.h:46 +snd_instr_header_sizeof = _lib.snd_instr_header_sizeof +snd_instr_header_sizeof.restype = c_size_t +snd_instr_header_sizeof.argtypes = [] + +# /usr/include/alsa/instr.h:53 +snd_instr_header_malloc = _lib.snd_instr_header_malloc +snd_instr_header_malloc.restype = c_int +snd_instr_header_malloc.argtypes = [POINTER(POINTER(snd_instr_header_t)), c_size_t] + +# /usr/include/alsa/instr.h:54 +snd_instr_header_free = _lib.snd_instr_header_free +snd_instr_header_free.restype = None +snd_instr_header_free.argtypes = [POINTER(snd_instr_header_t)] + +# /usr/include/alsa/instr.h:55 +snd_instr_header_copy = _lib.snd_instr_header_copy +snd_instr_header_copy.restype = None +snd_instr_header_copy.argtypes = [POINTER(snd_instr_header_t), POINTER(snd_instr_header_t)] + +# /usr/include/alsa/instr.h:57 +snd_instr_header_get_id = _lib.snd_instr_header_get_id +snd_instr_header_get_id.restype = POINTER(snd_seq_instr_t) +snd_instr_header_get_id.argtypes = [POINTER(snd_instr_header_t)] + +# /usr/include/alsa/instr.h:58 +snd_instr_header_get_cluster = _lib.snd_instr_header_get_cluster +snd_instr_header_get_cluster.restype = snd_seq_instr_cluster_t +snd_instr_header_get_cluster.argtypes = [POINTER(snd_instr_header_t)] + +# /usr/include/alsa/instr.h:59 +snd_instr_header_get_cmd = _lib.snd_instr_header_get_cmd +snd_instr_header_get_cmd.restype = c_uint +snd_instr_header_get_cmd.argtypes = [POINTER(snd_instr_header_t)] + +# /usr/include/alsa/instr.h:60 +snd_instr_header_get_len = _lib.snd_instr_header_get_len +snd_instr_header_get_len.restype = c_size_t +snd_instr_header_get_len.argtypes = [POINTER(snd_instr_header_t)] + +# /usr/include/alsa/instr.h:61 +snd_instr_header_get_name = _lib.snd_instr_header_get_name +snd_instr_header_get_name.restype = c_char_p +snd_instr_header_get_name.argtypes = [POINTER(snd_instr_header_t)] + +# /usr/include/alsa/instr.h:62 +snd_instr_header_get_type = _lib.snd_instr_header_get_type +snd_instr_header_get_type.restype = c_int +snd_instr_header_get_type.argtypes = [POINTER(snd_instr_header_t)] + +# /usr/include/alsa/instr.h:63 +snd_instr_header_get_format = _lib.snd_instr_header_get_format +snd_instr_header_get_format.restype = c_char_p +snd_instr_header_get_format.argtypes = [POINTER(snd_instr_header_t)] + +# /usr/include/alsa/instr.h:64 +snd_instr_header_get_alias = _lib.snd_instr_header_get_alias +snd_instr_header_get_alias.restype = POINTER(snd_seq_instr_t) +snd_instr_header_get_alias.argtypes = [POINTER(snd_instr_header_t)] + +# /usr/include/alsa/instr.h:65 +snd_instr_header_get_data = _lib.snd_instr_header_get_data +snd_instr_header_get_data.restype = POINTER(c_void) +snd_instr_header_get_data.argtypes = [POINTER(snd_instr_header_t)] + +# /usr/include/alsa/instr.h:66 +snd_instr_header_get_follow_alias = _lib.snd_instr_header_get_follow_alias +snd_instr_header_get_follow_alias.restype = c_int +snd_instr_header_get_follow_alias.argtypes = [POINTER(snd_instr_header_t)] + +# /usr/include/alsa/instr.h:68 +snd_instr_header_set_id = _lib.snd_instr_header_set_id +snd_instr_header_set_id.restype = None +snd_instr_header_set_id.argtypes = [POINTER(snd_instr_header_t), POINTER(snd_seq_instr_t)] + +# /usr/include/alsa/instr.h:69 +snd_instr_header_set_cluster = _lib.snd_instr_header_set_cluster +snd_instr_header_set_cluster.restype = None +snd_instr_header_set_cluster.argtypes = [POINTER(snd_instr_header_t), snd_seq_instr_cluster_t] + +# /usr/include/alsa/instr.h:70 +snd_instr_header_set_cmd = _lib.snd_instr_header_set_cmd +snd_instr_header_set_cmd.restype = None +snd_instr_header_set_cmd.argtypes = [POINTER(snd_instr_header_t), c_uint] + +# /usr/include/alsa/instr.h:71 +snd_instr_header_set_len = _lib.snd_instr_header_set_len +snd_instr_header_set_len.restype = None +snd_instr_header_set_len.argtypes = [POINTER(snd_instr_header_t), c_size_t] + +# /usr/include/alsa/instr.h:72 +snd_instr_header_set_name = _lib.snd_instr_header_set_name +snd_instr_header_set_name.restype = None +snd_instr_header_set_name.argtypes = [POINTER(snd_instr_header_t), c_char_p] + +# /usr/include/alsa/instr.h:73 +snd_instr_header_set_type = _lib.snd_instr_header_set_type +snd_instr_header_set_type.restype = None +snd_instr_header_set_type.argtypes = [POINTER(snd_instr_header_t), c_int] + +# /usr/include/alsa/instr.h:74 +snd_instr_header_set_format = _lib.snd_instr_header_set_format +snd_instr_header_set_format.restype = None +snd_instr_header_set_format.argtypes = [POINTER(snd_instr_header_t), c_char_p] + +# /usr/include/alsa/instr.h:75 +snd_instr_header_set_alias = _lib.snd_instr_header_set_alias +snd_instr_header_set_alias.restype = None +snd_instr_header_set_alias.argtypes = [POINTER(snd_instr_header_t), POINTER(snd_seq_instr_t)] + +# /usr/include/alsa/instr.h:76 +snd_instr_header_set_follow_alias = _lib.snd_instr_header_set_follow_alias +snd_instr_header_set_follow_alias.restype = None +snd_instr_header_set_follow_alias.argtypes = [POINTER(snd_instr_header_t), c_int] + +SND_SEQ_INSTR_ATYPE_DATA = 0 # /usr/include/alsa/instr.h:84 +SND_SEQ_INSTR_ATYPE_ALIAS = 1 # /usr/include/alsa/instr.h:85 +SND_SEQ_INSTR_TYPE0_DLS1 = 1 # /usr/include/alsa/instr.h:98 +SND_SEQ_INSTR_TYPE0_DLS2 = 2 # /usr/include/alsa/instr.h:99 +SND_SEQ_INSTR_TYPE1_SIMPLE = 1 # /usr/include/alsa/instr.h:100 +SND_SEQ_INSTR_TYPE1_SOUNDFONT = 2 # /usr/include/alsa/instr.h:101 +SND_SEQ_INSTR_TYPE1_GUS_PATCH = 4 # /usr/include/alsa/instr.h:102 +SND_SEQ_INSTR_TYPE1_INTERWAVE = 8 # /usr/include/alsa/instr.h:103 +SND_SEQ_INSTR_TYPE2_OPL2_3 = 1 # /usr/include/alsa/instr.h:104 +SND_SEQ_INSTR_TYPE2_OPL4 = 2 # /usr/include/alsa/instr.h:105 +SND_SEQ_INSTR_PUT_CMD_CREATE = 0 # /usr/include/alsa/instr.h:108 +SND_SEQ_INSTR_PUT_CMD_REPLACE = 1 # /usr/include/alsa/instr.h:109 +SND_SEQ_INSTR_PUT_CMD_MODIFY = 2 # /usr/include/alsa/instr.h:110 +SND_SEQ_INSTR_PUT_CMD_ADD = 3 # /usr/include/alsa/instr.h:111 +SND_SEQ_INSTR_PUT_CMD_REMOVE = 4 # /usr/include/alsa/instr.h:112 +SND_SEQ_INSTR_GET_CMD_FULL = 0 # /usr/include/alsa/instr.h:115 +SND_SEQ_INSTR_GET_CMD_PARTIAL = 1 # /usr/include/alsa/instr.h:116 +SND_SEQ_INSTR_QUERY_FOLLOW_ALIAS = 1 # /usr/include/alsa/instr.h:119 +SND_SEQ_INSTR_FREE_CMD_ALL = 0 # /usr/include/alsa/instr.h:122 +SND_SEQ_INSTR_FREE_CMD_PRIVATE = 1 # /usr/include/alsa/instr.h:123 +SND_SEQ_INSTR_FREE_CMD_CLUSTER = 2 # /usr/include/alsa/instr.h:124 +SND_SEQ_INSTR_FREE_CMD_SINGLE = 3 # /usr/include/alsa/instr.h:125 +snd_instr_fm_t = None # /usr/include/alsa/instr.h:133 +# /usr/include/alsa/instr.h:135 +snd_instr_fm_convert_to_stream = _lib.snd_instr_fm_convert_to_stream +snd_instr_fm_convert_to_stream.restype = c_int +snd_instr_fm_convert_to_stream.argtypes = [POINTER(snd_instr_fm_t), c_char_p, POINTER(POINTER(snd_instr_header_t)), POINTER(c_size_t)] + +# /usr/include/alsa/instr.h:136 +snd_instr_fm_convert_from_stream = _lib.snd_instr_fm_convert_from_stream +snd_instr_fm_convert_from_stream.restype = c_int +snd_instr_fm_convert_from_stream.argtypes = [POINTER(snd_instr_header_t), c_size_t, POINTER(POINTER(snd_instr_fm_t))] + +# /usr/include/alsa/instr.h:137 +snd_instr_fm_free = _lib.snd_instr_fm_free +snd_instr_fm_free.restype = c_int +snd_instr_fm_free.argtypes = [POINTER(snd_instr_fm_t)] + +snd_instr_simple_t = None # /usr/include/alsa/instr.h:145 +# /usr/include/alsa/instr.h:147 +snd_instr_simple_convert_to_stream = _lib.snd_instr_simple_convert_to_stream +snd_instr_simple_convert_to_stream.restype = c_int +snd_instr_simple_convert_to_stream.argtypes = [POINTER(snd_instr_simple_t), c_char_p, POINTER(POINTER(snd_instr_header_t)), POINTER(c_size_t)] + +# /usr/include/alsa/instr.h:148 +snd_instr_simple_convert_from_stream = _lib.snd_instr_simple_convert_from_stream +snd_instr_simple_convert_from_stream.restype = c_int +snd_instr_simple_convert_from_stream.argtypes = [POINTER(snd_instr_header_t), c_size_t, POINTER(POINTER(snd_instr_simple_t))] + +# /usr/include/alsa/instr.h:149 +snd_instr_simple_free = _lib.snd_instr_simple_free +snd_instr_simple_free.restype = c_int +snd_instr_simple_free.argtypes = [POINTER(snd_instr_simple_t)] + +snd_instr_iwffff_t = None # /usr/include/alsa/instr.h:157 +class struct__snd_iwffff_handle(Structure): + __slots__ = [ + ] +struct__snd_iwffff_handle._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct__snd_iwffff_handle(Structure): + __slots__ = [ + ] +struct__snd_iwffff_handle._fields_ = [ + ('_opaque_struct', c_int) +] + +snd_iwffff_handle_t = struct__snd_iwffff_handle # /usr/include/alsa/instr.h:159 +# /usr/include/alsa/instr.h:161 +snd_instr_iwffff_open = _lib.snd_instr_iwffff_open +snd_instr_iwffff_open.restype = c_int +snd_instr_iwffff_open.argtypes = [POINTER(POINTER(snd_iwffff_handle_t)), c_char_p, c_char_p] + +# /usr/include/alsa/instr.h:162 +snd_instr_iwffff_open_rom = _lib.snd_instr_iwffff_open_rom +snd_instr_iwffff_open_rom.restype = c_int +snd_instr_iwffff_open_rom.argtypes = [POINTER(POINTER(snd_iwffff_handle_t)), c_int, c_int, c_int] + +# /usr/include/alsa/instr.h:163 +snd_instr_iwffff_open_rom_file = _lib.snd_instr_iwffff_open_rom_file +snd_instr_iwffff_open_rom_file.restype = c_int +snd_instr_iwffff_open_rom_file.argtypes = [POINTER(POINTER(snd_iwffff_handle_t)), c_char_p, c_int, c_int] + +# /usr/include/alsa/instr.h:164 +snd_instr_iwffff_close = _lib.snd_instr_iwffff_close +snd_instr_iwffff_close.restype = c_int +snd_instr_iwffff_close.argtypes = [POINTER(snd_iwffff_handle_t)] + +# /usr/include/alsa/instr.h:165 +snd_instr_iwffff_load = _lib.snd_instr_iwffff_load +snd_instr_iwffff_load.restype = c_int +snd_instr_iwffff_load.argtypes = [POINTER(snd_iwffff_handle_t), c_int, c_int, POINTER(POINTER(snd_instr_iwffff_t))] + +# /usr/include/alsa/instr.h:166 +snd_instr_iwffff_convert_to_stream = _lib.snd_instr_iwffff_convert_to_stream +snd_instr_iwffff_convert_to_stream.restype = c_int +snd_instr_iwffff_convert_to_stream.argtypes = [POINTER(snd_instr_iwffff_t), c_char_p, POINTER(POINTER(snd_instr_header_t)), POINTER(c_size_t)] + +# /usr/include/alsa/instr.h:167 +snd_instr_iwffff_convert_from_stream = _lib.snd_instr_iwffff_convert_from_stream +snd_instr_iwffff_convert_from_stream.restype = c_int +snd_instr_iwffff_convert_from_stream.argtypes = [POINTER(snd_instr_header_t), c_size_t, POINTER(POINTER(snd_instr_iwffff_t))] + +# /usr/include/alsa/instr.h:168 +snd_instr_iwffff_free = _lib.snd_instr_iwffff_free +snd_instr_iwffff_free.restype = c_int +snd_instr_iwffff_free.argtypes = [POINTER(snd_instr_iwffff_t)] + + +__all__ = ['alsa_lisp_default_cfg_free', 'alsa_lisp', 'alsa_lisp_free', +'alsa_lisp_result_free', 'alsa_lisp_seq_first', 'alsa_lisp_seq_next', +'alsa_lisp_seq_count', 'alsa_lisp_seq_integer', 'alsa_lisp_seq_pointer', +'IEC958_AES0_PROFESSIONAL', 'IEC958_AES0_NONAUDIO', +'IEC958_AES0_PRO_EMPHASIS', 'IEC958_AES0_PRO_EMPHASIS_NOTID', +'IEC958_AES0_PRO_EMPHASIS_NONE', 'IEC958_AES0_PRO_EMPHASIS_5015', +'IEC958_AES0_PRO_EMPHASIS_CCITT', 'IEC958_AES0_PRO_FREQ_UNLOCKED', +'IEC958_AES0_PRO_FS', 'IEC958_AES0_PRO_FS_NOTID', 'IEC958_AES0_PRO_FS_44100', +'IEC958_AES0_PRO_FS_48000', 'IEC958_AES0_PRO_FS_32000', +'IEC958_AES0_CON_NOT_COPYRIGHT', 'IEC958_AES0_CON_EMPHASIS', +'IEC958_AES0_CON_EMPHASIS_NONE', 'IEC958_AES0_CON_EMPHASIS_5015', +'IEC958_AES0_CON_MODE', 'IEC958_AES1_PRO_MODE', 'IEC958_AES1_PRO_MODE_NOTID', +'IEC958_AES1_PRO_MODE_STEREOPHONIC', 'IEC958_AES1_PRO_MODE_SINGLE', +'IEC958_AES1_PRO_MODE_TWO', 'IEC958_AES1_PRO_MODE_PRIMARY', +'IEC958_AES1_PRO_MODE_BYTE3', 'IEC958_AES1_PRO_USERBITS', +'IEC958_AES1_PRO_USERBITS_NOTID', 'IEC958_AES1_PRO_USERBITS_192', +'IEC958_AES1_PRO_USERBITS_UDEF', 'IEC958_AES1_CON_CATEGORY', +'IEC958_AES1_CON_GENERAL', 'IEC958_AES1_CON_EXPERIMENTAL', +'IEC958_AES1_CON_SOLIDMEM_MASK', 'IEC958_AES1_CON_SOLIDMEM_ID', +'IEC958_AES1_CON_BROADCAST1_MASK', 'IEC958_AES1_CON_BROADCAST1_ID', +'IEC958_AES1_CON_DIGDIGCONV_MASK', 'IEC958_AES1_CON_DIGDIGCONV_ID', +'IEC958_AES1_CON_ADC_COPYRIGHT_MASK', 'IEC958_AES1_CON_ADC_COPYRIGHT_ID', +'IEC958_AES1_CON_ADC_MASK', 'IEC958_AES1_CON_ADC_ID', +'IEC958_AES1_CON_BROADCAST2_MASK', 'IEC958_AES1_CON_BROADCAST2_ID', +'IEC958_AES1_CON_LASEROPT_MASK', 'IEC958_AES1_CON_LASEROPT_ID', +'IEC958_AES1_CON_MUSICAL_MASK', 'IEC958_AES1_CON_MUSICAL_ID', +'IEC958_AES1_CON_MAGNETIC_MASK', 'IEC958_AES1_CON_MAGNETIC_ID', +'IEC958_AES1_CON_IEC908_CD', 'IEC958_AES1_CON_NON_IEC908_CD', +'IEC958_AES1_CON_PCM_CODER', 'IEC958_AES1_CON_SAMPLER', +'IEC958_AES1_CON_MIXER', 'IEC958_AES1_CON_RATE_CONVERTER', +'IEC958_AES1_CON_SYNTHESIZER', 'IEC958_AES1_CON_MICROPHONE', +'IEC958_AES1_CON_DAT', 'IEC958_AES1_CON_VCR', 'IEC958_AES1_CON_ORIGINAL', +'IEC958_AES2_PRO_SBITS', 'IEC958_AES2_PRO_SBITS_20', +'IEC958_AES2_PRO_SBITS_24', 'IEC958_AES2_PRO_SBITS_UDEF', +'IEC958_AES2_PRO_WORDLEN', 'IEC958_AES2_PRO_WORDLEN_NOTID', +'IEC958_AES2_PRO_WORDLEN_22_18', 'IEC958_AES2_PRO_WORDLEN_23_19', +'IEC958_AES2_PRO_WORDLEN_24_20', 'IEC958_AES2_PRO_WORDLEN_20_16', +'IEC958_AES2_CON_SOURCE', 'IEC958_AES2_CON_SOURCE_UNSPEC', +'IEC958_AES2_CON_CHANNEL', 'IEC958_AES2_CON_CHANNEL_UNSPEC', +'IEC958_AES3_CON_FS', 'IEC958_AES3_CON_FS_44100', 'IEC958_AES3_CON_FS_48000', +'IEC958_AES3_CON_FS_32000', 'IEC958_AES3_CON_CLOCK', +'IEC958_AES3_CON_CLOCK_1000PPM', 'IEC958_AES3_CON_CLOCK_50PPM', +'IEC958_AES3_CON_CLOCK_VARIABLE', 'MIDI_CHANNELS', 'MIDI_GM_DRUM_CHANNEL', +'MIDI_CMD_NOTE_OFF', 'MIDI_CMD_NOTE_ON', 'MIDI_CMD_NOTE_PRESSURE', +'MIDI_CMD_CONTROL', 'MIDI_CMD_PGM_CHANGE', 'MIDI_CMD_CHANNEL_PRESSURE', +'MIDI_CMD_BENDER', 'MIDI_CMD_COMMON_SYSEX', 'MIDI_CMD_COMMON_MTC_QUARTER', +'MIDI_CMD_COMMON_SONG_POS', 'MIDI_CMD_COMMON_SONG_SELECT', +'MIDI_CMD_COMMON_TUNE_REQUEST', 'MIDI_CMD_COMMON_SYSEX_END', +'MIDI_CMD_COMMON_CLOCK', 'MIDI_CMD_COMMON_START', 'MIDI_CMD_COMMON_CONTINUE', +'MIDI_CMD_COMMON_STOP', 'MIDI_CMD_COMMON_SENSING', 'MIDI_CMD_COMMON_RESET', +'MIDI_CTL_MSB_BANK', 'MIDI_CTL_MSB_MODWHEEL', 'MIDI_CTL_MSB_BREATH', +'MIDI_CTL_MSB_FOOT', 'MIDI_CTL_MSB_PORTAMENTO_TIME', +'MIDI_CTL_MSB_DATA_ENTRY', 'MIDI_CTL_MSB_MAIN_VOLUME', 'MIDI_CTL_MSB_BALANCE', +'MIDI_CTL_MSB_PAN', 'MIDI_CTL_MSB_EXPRESSION', 'MIDI_CTL_MSB_EFFECT1', +'MIDI_CTL_MSB_EFFECT2', 'MIDI_CTL_MSB_GENERAL_PURPOSE1', +'MIDI_CTL_MSB_GENERAL_PURPOSE2', 'MIDI_CTL_MSB_GENERAL_PURPOSE3', +'MIDI_CTL_MSB_GENERAL_PURPOSE4', 'MIDI_CTL_LSB_BANK', 'MIDI_CTL_LSB_MODWHEEL', +'MIDI_CTL_LSB_BREATH', 'MIDI_CTL_LSB_FOOT', 'MIDI_CTL_LSB_PORTAMENTO_TIME', +'MIDI_CTL_LSB_DATA_ENTRY', 'MIDI_CTL_LSB_MAIN_VOLUME', 'MIDI_CTL_LSB_BALANCE', +'MIDI_CTL_LSB_PAN', 'MIDI_CTL_LSB_EXPRESSION', 'MIDI_CTL_LSB_EFFECT1', +'MIDI_CTL_LSB_EFFECT2', 'MIDI_CTL_LSB_GENERAL_PURPOSE1', +'MIDI_CTL_LSB_GENERAL_PURPOSE2', 'MIDI_CTL_LSB_GENERAL_PURPOSE3', +'MIDI_CTL_LSB_GENERAL_PURPOSE4', 'MIDI_CTL_SUSTAIN', 'MIDI_CTL_PORTAMENTO', +'MIDI_CTL_SOSTENUTO', 'MIDI_CTL_SUSTENUTO', 'MIDI_CTL_SOFT_PEDAL', +'MIDI_CTL_LEGATO_FOOTSWITCH', 'MIDI_CTL_HOLD2', +'MIDI_CTL_SC1_SOUND_VARIATION', 'MIDI_CTL_SC2_TIMBRE', +'MIDI_CTL_SC3_RELEASE_TIME', 'MIDI_CTL_SC4_ATTACK_TIME', +'MIDI_CTL_SC5_BRIGHTNESS', 'MIDI_CTL_SC6', 'MIDI_CTL_SC7', 'MIDI_CTL_SC8', +'MIDI_CTL_SC9', 'MIDI_CTL_SC10', 'MIDI_CTL_GENERAL_PURPOSE5', +'MIDI_CTL_GENERAL_PURPOSE6', 'MIDI_CTL_GENERAL_PURPOSE7', +'MIDI_CTL_GENERAL_PURPOSE8', 'MIDI_CTL_PORTAMENTO_CONTROL', +'MIDI_CTL_E1_REVERB_DEPTH', 'MIDI_CTL_E2_TREMOLO_DEPTH', +'MIDI_CTL_E3_CHORUS_DEPTH', 'MIDI_CTL_E4_DETUNE_DEPTH', +'MIDI_CTL_E5_PHASER_DEPTH', 'MIDI_CTL_DATA_INCREMENT', +'MIDI_CTL_DATA_DECREMENT', 'MIDI_CTL_NONREG_PARM_NUM_LSB', +'MIDI_CTL_NONREG_PARM_NUM_MSB', 'MIDI_CTL_REGIST_PARM_NUM_LSB', +'MIDI_CTL_REGIST_PARM_NUM_MSB', 'MIDI_CTL_ALL_SOUNDS_OFF', +'MIDI_CTL_RESET_CONTROLLERS', 'MIDI_CTL_LOCAL_CONTROL_SWITCH', +'MIDI_CTL_ALL_NOTES_OFF', 'MIDI_CTL_OMNI_OFF', 'MIDI_CTL_OMNI_ON', +'MIDI_CTL_MONO1', 'MIDI_CTL_MONO2', 'IEC958_AES0_PROFESSIONAL', +'IEC958_AES0_NONAUDIO', 'IEC958_AES0_PRO_EMPHASIS', +'IEC958_AES0_PRO_EMPHASIS_NOTID', 'IEC958_AES0_PRO_EMPHASIS_NONE', +'IEC958_AES0_PRO_EMPHASIS_5015', 'IEC958_AES0_PRO_EMPHASIS_CCITT', +'IEC958_AES0_PRO_FREQ_UNLOCKED', 'IEC958_AES0_PRO_FS', +'IEC958_AES0_PRO_FS_NOTID', 'IEC958_AES0_PRO_FS_44100', +'IEC958_AES0_PRO_FS_48000', 'IEC958_AES0_PRO_FS_32000', +'IEC958_AES0_CON_NOT_COPYRIGHT', 'IEC958_AES0_CON_EMPHASIS', +'IEC958_AES0_CON_EMPHASIS_NONE', 'IEC958_AES0_CON_EMPHASIS_5015', +'IEC958_AES0_CON_MODE', 'IEC958_AES1_PRO_MODE', 'IEC958_AES1_PRO_MODE_NOTID', +'IEC958_AES1_PRO_MODE_STEREOPHONIC', 'IEC958_AES1_PRO_MODE_SINGLE', +'IEC958_AES1_PRO_MODE_TWO', 'IEC958_AES1_PRO_MODE_PRIMARY', +'IEC958_AES1_PRO_MODE_BYTE3', 'IEC958_AES1_PRO_USERBITS', +'IEC958_AES1_PRO_USERBITS_NOTID', 'IEC958_AES1_PRO_USERBITS_192', +'IEC958_AES1_PRO_USERBITS_UDEF', 'IEC958_AES1_CON_CATEGORY', +'IEC958_AES1_CON_GENERAL', 'IEC958_AES1_CON_EXPERIMENTAL', +'IEC958_AES1_CON_SOLIDMEM_MASK', 'IEC958_AES1_CON_SOLIDMEM_ID', +'IEC958_AES1_CON_BROADCAST1_MASK', 'IEC958_AES1_CON_BROADCAST1_ID', +'IEC958_AES1_CON_DIGDIGCONV_MASK', 'IEC958_AES1_CON_DIGDIGCONV_ID', +'IEC958_AES1_CON_ADC_COPYRIGHT_MASK', 'IEC958_AES1_CON_ADC_COPYRIGHT_ID', +'IEC958_AES1_CON_ADC_MASK', 'IEC958_AES1_CON_ADC_ID', +'IEC958_AES1_CON_BROADCAST2_MASK', 'IEC958_AES1_CON_BROADCAST2_ID', +'IEC958_AES1_CON_LASEROPT_MASK', 'IEC958_AES1_CON_LASEROPT_ID', +'IEC958_AES1_CON_MUSICAL_MASK', 'IEC958_AES1_CON_MUSICAL_ID', +'IEC958_AES1_CON_MAGNETIC_MASK', 'IEC958_AES1_CON_MAGNETIC_ID', +'IEC958_AES1_CON_IEC908_CD', 'IEC958_AES1_CON_NON_IEC908_CD', +'IEC958_AES1_CON_PCM_CODER', 'IEC958_AES1_CON_SAMPLER', +'IEC958_AES1_CON_MIXER', 'IEC958_AES1_CON_RATE_CONVERTER', +'IEC958_AES1_CON_SYNTHESIZER', 'IEC958_AES1_CON_MICROPHONE', +'IEC958_AES1_CON_DAT', 'IEC958_AES1_CON_VCR', 'IEC958_AES1_CON_ORIGINAL', +'IEC958_AES2_PRO_SBITS', 'IEC958_AES2_PRO_SBITS_20', +'IEC958_AES2_PRO_SBITS_24', 'IEC958_AES2_PRO_SBITS_UDEF', +'IEC958_AES2_PRO_WORDLEN', 'IEC958_AES2_PRO_WORDLEN_NOTID', +'IEC958_AES2_PRO_WORDLEN_22_18', 'IEC958_AES2_PRO_WORDLEN_23_19', +'IEC958_AES2_PRO_WORDLEN_24_20', 'IEC958_AES2_PRO_WORDLEN_20_16', +'IEC958_AES2_CON_SOURCE', 'IEC958_AES2_CON_SOURCE_UNSPEC', +'IEC958_AES2_CON_CHANNEL', 'IEC958_AES2_CON_CHANNEL_UNSPEC', +'IEC958_AES3_CON_FS', 'IEC958_AES3_CON_FS_44100', 'IEC958_AES3_CON_FS_48000', +'IEC958_AES3_CON_FS_32000', 'IEC958_AES3_CON_CLOCK', +'IEC958_AES3_CON_CLOCK_1000PPM', 'IEC958_AES3_CON_CLOCK_50PPM', +'IEC958_AES3_CON_CLOCK_VARIABLE', 'MIDI_CHANNELS', 'MIDI_GM_DRUM_CHANNEL', +'MIDI_CMD_NOTE_OFF', 'MIDI_CMD_NOTE_ON', 'MIDI_CMD_NOTE_PRESSURE', +'MIDI_CMD_CONTROL', 'MIDI_CMD_PGM_CHANGE', 'MIDI_CMD_CHANNEL_PRESSURE', +'MIDI_CMD_BENDER', 'MIDI_CMD_COMMON_SYSEX', 'MIDI_CMD_COMMON_MTC_QUARTER', +'MIDI_CMD_COMMON_SONG_POS', 'MIDI_CMD_COMMON_SONG_SELECT', +'MIDI_CMD_COMMON_TUNE_REQUEST', 'MIDI_CMD_COMMON_SYSEX_END', +'MIDI_CMD_COMMON_CLOCK', 'MIDI_CMD_COMMON_START', 'MIDI_CMD_COMMON_CONTINUE', +'MIDI_CMD_COMMON_STOP', 'MIDI_CMD_COMMON_SENSING', 'MIDI_CMD_COMMON_RESET', +'MIDI_CTL_MSB_BANK', 'MIDI_CTL_MSB_MODWHEEL', 'MIDI_CTL_MSB_BREATH', +'MIDI_CTL_MSB_FOOT', 'MIDI_CTL_MSB_PORTAMENTO_TIME', +'MIDI_CTL_MSB_DATA_ENTRY', 'MIDI_CTL_MSB_MAIN_VOLUME', 'MIDI_CTL_MSB_BALANCE', +'MIDI_CTL_MSB_PAN', 'MIDI_CTL_MSB_EXPRESSION', 'MIDI_CTL_MSB_EFFECT1', +'MIDI_CTL_MSB_EFFECT2', 'MIDI_CTL_MSB_GENERAL_PURPOSE1', +'MIDI_CTL_MSB_GENERAL_PURPOSE2', 'MIDI_CTL_MSB_GENERAL_PURPOSE3', +'MIDI_CTL_MSB_GENERAL_PURPOSE4', 'MIDI_CTL_LSB_BANK', 'MIDI_CTL_LSB_MODWHEEL', +'MIDI_CTL_LSB_BREATH', 'MIDI_CTL_LSB_FOOT', 'MIDI_CTL_LSB_PORTAMENTO_TIME', +'MIDI_CTL_LSB_DATA_ENTRY', 'MIDI_CTL_LSB_MAIN_VOLUME', 'MIDI_CTL_LSB_BALANCE', +'MIDI_CTL_LSB_PAN', 'MIDI_CTL_LSB_EXPRESSION', 'MIDI_CTL_LSB_EFFECT1', +'MIDI_CTL_LSB_EFFECT2', 'MIDI_CTL_LSB_GENERAL_PURPOSE1', +'MIDI_CTL_LSB_GENERAL_PURPOSE2', 'MIDI_CTL_LSB_GENERAL_PURPOSE3', +'MIDI_CTL_LSB_GENERAL_PURPOSE4', 'MIDI_CTL_SUSTAIN', 'MIDI_CTL_PORTAMENTO', +'MIDI_CTL_SOSTENUTO', 'MIDI_CTL_SUSTENUTO', 'MIDI_CTL_SOFT_PEDAL', +'MIDI_CTL_LEGATO_FOOTSWITCH', 'MIDI_CTL_HOLD2', +'MIDI_CTL_SC1_SOUND_VARIATION', 'MIDI_CTL_SC2_TIMBRE', +'MIDI_CTL_SC3_RELEASE_TIME', 'MIDI_CTL_SC4_ATTACK_TIME', +'MIDI_CTL_SC5_BRIGHTNESS', 'MIDI_CTL_SC6', 'MIDI_CTL_SC7', 'MIDI_CTL_SC8', +'MIDI_CTL_SC9', 'MIDI_CTL_SC10', 'MIDI_CTL_GENERAL_PURPOSE5', +'MIDI_CTL_GENERAL_PURPOSE6', 'MIDI_CTL_GENERAL_PURPOSE7', +'MIDI_CTL_GENERAL_PURPOSE8', 'MIDI_CTL_PORTAMENTO_CONTROL', +'MIDI_CTL_E1_REVERB_DEPTH', 'MIDI_CTL_E2_TREMOLO_DEPTH', +'MIDI_CTL_E3_CHORUS_DEPTH', 'MIDI_CTL_E4_DETUNE_DEPTH', +'MIDI_CTL_E5_PHASER_DEPTH', 'MIDI_CTL_DATA_INCREMENT', +'MIDI_CTL_DATA_DECREMENT', 'MIDI_CTL_NONREG_PARM_NUM_LSB', +'MIDI_CTL_NONREG_PARM_NUM_MSB', 'MIDI_CTL_REGIST_PARM_NUM_LSB', +'MIDI_CTL_REGIST_PARM_NUM_MSB', 'MIDI_CTL_ALL_SOUNDS_OFF', +'MIDI_CTL_RESET_CONTROLLERS', 'MIDI_CTL_LOCAL_CONTROL_SWITCH', +'MIDI_CTL_ALL_NOTES_OFF', 'MIDI_CTL_OMNI_OFF', 'MIDI_CTL_OMNI_ON', +'MIDI_CTL_MONO1', 'MIDI_CTL_MONO2', 'SND_LIB_MAJOR', 'SND_LIB_MINOR', +'SND_LIB_SUBMINOR', 'SND_LIB_EXTRAVER', 'SND_LIB_VERSION', +'snd_asoundlib_version', 'snd_dlopen', 'snd_dlsym', 'snd_dlclose', +'snd_async_handler_t', 'snd_async_callback_t', 'snd_async_add_handler', +'snd_async_del_handler', 'snd_async_handler_get_fd', +'snd_async_handler_get_signo', 'snd_async_handler_get_callback_private', +'snd_shm_area_create', 'snd_shm_area_share', 'snd_shm_area_destroy', +'snd_user_file', 'snd_timestamp_t', 'snd_htimestamp_t', 'snd_input_t', +'snd_input_type_t', 'SND_INPUT_STDIO', 'SND_INPUT_BUFFER', +'snd_input_stdio_open', 'snd_input_stdio_attach', 'snd_input_buffer_open', +'snd_input_close', 'snd_input_scanf', 'snd_input_gets', 'snd_input_getc', +'snd_input_ungetc', 'SND_ERROR_BEGIN', 'SND_ERROR_INCOMPATIBLE_VERSION', +'SND_ERROR_ALISP_NIL', 'snd_strerror', 'snd_lib_error_handler_t', +'snd_lib_error_set_handler', 'SND_CONFIG_DLSYM_VERSION_EVALUATE', +'SND_CONFIG_DLSYM_VERSION_HOOK', 'snd_config_type_t', +'SND_CONFIG_TYPE_INTEGER', 'SND_CONFIG_TYPE_INTEGER64', +'SND_CONFIG_TYPE_REAL', 'SND_CONFIG_TYPE_STRING', 'SND_CONFIG_TYPE_POINTER', +'SND_CONFIG_TYPE_COMPOUND', 'snd_config_t', 'snd_config_iterator_t', +'snd_config_update_t', 'snd_config_top', 'snd_config_load', +'snd_config_load_override', 'snd_config_save', 'snd_config_update', +'snd_config_update_r', 'snd_config_update_free', +'snd_config_update_free_global', 'snd_config_search', 'snd_config_searchv', +'snd_config_search_definition', 'snd_config_expand', 'snd_config_evaluate', +'snd_config_add', 'snd_config_delete', 'snd_config_delete_compound_members', +'snd_config_copy', 'snd_config_make', 'snd_config_make_integer', +'snd_config_make_integer64', 'snd_config_make_real', 'snd_config_make_string', +'snd_config_make_pointer', 'snd_config_make_compound', +'snd_config_imake_integer', 'snd_config_imake_integer64', +'snd_config_imake_real', 'snd_config_imake_string', +'snd_config_imake_pointer', 'snd_config_get_type', 'snd_config_set_id', +'snd_config_set_integer', 'snd_config_set_integer64', 'snd_config_set_real', +'snd_config_set_string', 'snd_config_set_ascii', 'snd_config_set_pointer', +'snd_config_get_id', 'snd_config_get_integer', 'snd_config_get_integer64', +'snd_config_get_real', 'snd_config_get_ireal', 'snd_config_get_string', +'snd_config_get_ascii', 'snd_config_get_pointer', 'snd_config_test_id', +'snd_config_iterator_first', 'snd_config_iterator_next', +'snd_config_iterator_end', 'snd_config_iterator_entry', +'snd_config_get_bool_ascii', 'snd_config_get_bool', +'snd_config_get_ctl_iface_ascii', 'snd_config_get_ctl_iface', 'snd_devname_t', +'snd_names_list', 'snd_names_list_free', 'SND_PCM_DLSYM_VERSION', +'snd_pcm_info_t', 'snd_pcm_hw_params_t', 'snd_pcm_sw_params_t', +'snd_pcm_status_t', 'snd_pcm_access_mask_t', 'snd_pcm_format_mask_t', +'snd_pcm_subformat_mask_t', 'snd_pcm_class_t', 'SND_PCM_CLASS_GENERIC', +'SND_PCM_CLASS_MULTI', 'SND_PCM_CLASS_MODEM', 'SND_PCM_CLASS_DIGITIZER', +'SND_PCM_CLASS_LAST', 'snd_pcm_subclass_t', 'SND_PCM_SUBCLASS_GENERIC_MIX', +'SND_PCM_SUBCLASS_MULTI_MIX', 'SND_PCM_SUBCLASS_LAST', 'snd_pcm_stream_t', +'SND_PCM_STREAM_PLAYBACK', 'SND_PCM_STREAM_CAPTURE', 'SND_PCM_STREAM_LAST', +'snd_pcm_access_t', 'SND_PCM_ACCESS_MMAP_INTERLEAVED', +'SND_PCM_ACCESS_MMAP_NONINTERLEAVED', 'SND_PCM_ACCESS_MMAP_COMPLEX', +'SND_PCM_ACCESS_RW_INTERLEAVED', 'SND_PCM_ACCESS_RW_NONINTERLEAVED', +'SND_PCM_ACCESS_LAST', 'snd_pcm_format_t', 'SND_PCM_FORMAT_UNKNOWN', +'SND_PCM_FORMAT_S8', 'SND_PCM_FORMAT_U8', 'SND_PCM_FORMAT_S16_LE', +'SND_PCM_FORMAT_S16_BE', 'SND_PCM_FORMAT_U16_LE', 'SND_PCM_FORMAT_U16_BE', +'SND_PCM_FORMAT_S24_LE', 'SND_PCM_FORMAT_S24_BE', 'SND_PCM_FORMAT_U24_LE', +'SND_PCM_FORMAT_U24_BE', 'SND_PCM_FORMAT_S32_LE', 'SND_PCM_FORMAT_S32_BE', +'SND_PCM_FORMAT_U32_LE', 'SND_PCM_FORMAT_U32_BE', 'SND_PCM_FORMAT_FLOAT_LE', +'SND_PCM_FORMAT_FLOAT_BE', 'SND_PCM_FORMAT_FLOAT64_LE', +'SND_PCM_FORMAT_FLOAT64_BE', 'SND_PCM_FORMAT_IEC958_SUBFRAME_LE', +'SND_PCM_FORMAT_IEC958_SUBFRAME_BE', 'SND_PCM_FORMAT_MU_LAW', +'SND_PCM_FORMAT_A_LAW', 'SND_PCM_FORMAT_IMA_ADPCM', 'SND_PCM_FORMAT_MPEG', +'SND_PCM_FORMAT_GSM', 'SND_PCM_FORMAT_SPECIAL', 'SND_PCM_FORMAT_S24_3LE', +'SND_PCM_FORMAT_S24_3BE', 'SND_PCM_FORMAT_U24_3LE', 'SND_PCM_FORMAT_U24_3BE', +'SND_PCM_FORMAT_S20_3LE', 'SND_PCM_FORMAT_S20_3BE', 'SND_PCM_FORMAT_U20_3LE', +'SND_PCM_FORMAT_U20_3BE', 'SND_PCM_FORMAT_S18_3LE', 'SND_PCM_FORMAT_S18_3BE', +'SND_PCM_FORMAT_U18_3LE', 'SND_PCM_FORMAT_U18_3BE', 'SND_PCM_FORMAT_LAST', +'SND_PCM_FORMAT_S16', 'SND_PCM_FORMAT_U16', 'SND_PCM_FORMAT_S24', +'SND_PCM_FORMAT_U24', 'SND_PCM_FORMAT_S32', 'SND_PCM_FORMAT_U32', +'SND_PCM_FORMAT_FLOAT', 'SND_PCM_FORMAT_FLOAT64', +'SND_PCM_FORMAT_IEC958_SUBFRAME', 'snd_pcm_subformat_t', +'SND_PCM_SUBFORMAT_STD', 'SND_PCM_SUBFORMAT_LAST', 'snd_pcm_state_t', +'SND_PCM_STATE_OPEN', 'SND_PCM_STATE_SETUP', 'SND_PCM_STATE_PREPARED', +'SND_PCM_STATE_RUNNING', 'SND_PCM_STATE_XRUN', 'SND_PCM_STATE_DRAINING', +'SND_PCM_STATE_PAUSED', 'SND_PCM_STATE_SUSPENDED', +'SND_PCM_STATE_DISCONNECTED', 'SND_PCM_STATE_LAST', 'snd_pcm_start_t', +'SND_PCM_START_DATA', 'SND_PCM_START_EXPLICIT', 'SND_PCM_START_LAST', +'snd_pcm_xrun_t', 'SND_PCM_XRUN_NONE', 'SND_PCM_XRUN_STOP', +'SND_PCM_XRUN_LAST', 'snd_pcm_tstamp_t', 'SND_PCM_TSTAMP_NONE', +'SND_PCM_TSTAMP_MMAP', 'SND_PCM_TSTAMP_LAST', 'snd_pcm_uframes_t', +'snd_pcm_sframes_t', 'SND_PCM_NONBLOCK', 'SND_PCM_ASYNC', 'snd_pcm_t', +'snd_pcm_type_t', 'snd_pcm_channel_area_t', 'snd_pcm_sync_id_t', +'snd_pcm_scope_t', 'snd_pcm_open', 'snd_pcm_open_lconf', 'snd_pcm_close', +'snd_pcm_name', 'snd_pcm_type', 'snd_pcm_stream', +'snd_pcm_poll_descriptors_count', 'snd_pcm_poll_descriptors', +'snd_pcm_poll_descriptors_revents', 'snd_pcm_nonblock', +'snd_async_add_pcm_handler', 'snd_async_handler_get_pcm', 'snd_pcm_info', +'snd_pcm_hw_params_current', 'snd_pcm_hw_params', 'snd_pcm_hw_free', +'snd_pcm_sw_params_current', 'snd_pcm_sw_params', 'snd_pcm_prepare', +'snd_pcm_reset', 'snd_pcm_status', 'snd_pcm_start', 'snd_pcm_drop', +'snd_pcm_drain', 'snd_pcm_pause', 'snd_pcm_state', 'snd_pcm_hwsync', +'snd_pcm_delay', 'snd_pcm_resume', 'snd_pcm_avail_update', 'snd_pcm_rewind', +'snd_pcm_forward', 'snd_pcm_writei', 'snd_pcm_readi', 'snd_pcm_writen', +'snd_pcm_readn', 'snd_pcm_wait', 'snd_pcm_link', 'snd_pcm_unlink', +'snd_pcm_recover', 'snd_pcm_set_params', 'snd_pcm_get_params', +'snd_pcm_info_sizeof', 'snd_pcm_info_malloc', 'snd_pcm_info_free', +'snd_pcm_info_copy', 'snd_pcm_info_get_device', 'snd_pcm_info_get_subdevice', +'snd_pcm_info_get_stream', 'snd_pcm_info_get_card', 'snd_pcm_info_get_id', +'snd_pcm_info_get_name', 'snd_pcm_info_get_subdevice_name', +'snd_pcm_info_get_class', 'snd_pcm_info_get_subclass', +'snd_pcm_info_get_subdevices_count', 'snd_pcm_info_get_subdevices_avail', +'snd_pcm_info_get_sync', 'snd_pcm_info_set_device', +'snd_pcm_info_set_subdevice', 'snd_pcm_info_set_stream', +'snd_pcm_hw_params_any', 'snd_pcm_hw_params_can_mmap_sample_resolution', +'snd_pcm_hw_params_is_double', 'snd_pcm_hw_params_is_batch', +'snd_pcm_hw_params_is_block_transfer', 'snd_pcm_hw_params_can_overrange', +'snd_pcm_hw_params_can_pause', 'snd_pcm_hw_params_can_resume', +'snd_pcm_hw_params_is_half_duplex', 'snd_pcm_hw_params_is_joint_duplex', +'snd_pcm_hw_params_can_sync_start', 'snd_pcm_hw_params_get_rate_numden', +'snd_pcm_hw_params_get_sbits', 'snd_pcm_hw_params_get_fifo_size', +'snd_pcm_hw_params_sizeof', 'snd_pcm_hw_params_malloc', +'snd_pcm_hw_params_free', 'snd_pcm_hw_params_copy', +'snd_pcm_hw_params_get_access', 'snd_pcm_hw_params_test_access', +'snd_pcm_hw_params_set_access', 'snd_pcm_hw_params_set_access_first', +'snd_pcm_hw_params_set_access_last', 'snd_pcm_hw_params_set_access_mask', +'snd_pcm_hw_params_get_access_mask', 'snd_pcm_hw_params_get_format', +'snd_pcm_hw_params_test_format', 'snd_pcm_hw_params_set_format', +'snd_pcm_hw_params_set_format_first', 'snd_pcm_hw_params_set_format_last', +'snd_pcm_hw_params_set_format_mask', 'snd_pcm_hw_params_get_format_mask', +'snd_pcm_hw_params_get_subformat', 'snd_pcm_hw_params_test_subformat', +'snd_pcm_hw_params_set_subformat', 'snd_pcm_hw_params_set_subformat_first', +'snd_pcm_hw_params_set_subformat_last', +'snd_pcm_hw_params_set_subformat_mask', +'snd_pcm_hw_params_get_subformat_mask', 'snd_pcm_hw_params_get_channels', +'snd_pcm_hw_params_get_channels_min', 'snd_pcm_hw_params_get_channels_max', +'snd_pcm_hw_params_test_channels', 'snd_pcm_hw_params_set_channels', +'snd_pcm_hw_params_set_channels_min', 'snd_pcm_hw_params_set_channels_max', +'snd_pcm_hw_params_set_channels_minmax', +'snd_pcm_hw_params_set_channels_near', 'snd_pcm_hw_params_set_channels_first', +'snd_pcm_hw_params_set_channels_last', 'snd_pcm_hw_params_get_rate', +'snd_pcm_hw_params_get_rate_min', 'snd_pcm_hw_params_get_rate_max', +'snd_pcm_hw_params_test_rate', 'snd_pcm_hw_params_set_rate', +'snd_pcm_hw_params_set_rate_min', 'snd_pcm_hw_params_set_rate_max', +'snd_pcm_hw_params_set_rate_minmax', 'snd_pcm_hw_params_set_rate_near', +'snd_pcm_hw_params_set_rate_first', 'snd_pcm_hw_params_set_rate_last', +'snd_pcm_hw_params_set_rate_resample', 'snd_pcm_hw_params_get_rate_resample', +'snd_pcm_hw_params_set_export_buffer', 'snd_pcm_hw_params_get_export_buffer', +'snd_pcm_hw_params_get_period_time', 'snd_pcm_hw_params_get_period_time_min', +'snd_pcm_hw_params_get_period_time_max', 'snd_pcm_hw_params_test_period_time', +'snd_pcm_hw_params_set_period_time', 'snd_pcm_hw_params_set_period_time_min', +'snd_pcm_hw_params_set_period_time_max', +'snd_pcm_hw_params_set_period_time_minmax', +'snd_pcm_hw_params_set_period_time_near', +'snd_pcm_hw_params_set_period_time_first', +'snd_pcm_hw_params_set_period_time_last', 'snd_pcm_hw_params_get_period_size', +'snd_pcm_hw_params_get_period_size_min', +'snd_pcm_hw_params_get_period_size_max', 'snd_pcm_hw_params_test_period_size', +'snd_pcm_hw_params_set_period_size', 'snd_pcm_hw_params_set_period_size_min', +'snd_pcm_hw_params_set_period_size_max', +'snd_pcm_hw_params_set_period_size_minmax', +'snd_pcm_hw_params_set_period_size_near', +'snd_pcm_hw_params_set_period_size_first', +'snd_pcm_hw_params_set_period_size_last', +'snd_pcm_hw_params_set_period_size_integer', 'snd_pcm_hw_params_get_periods', +'snd_pcm_hw_params_get_periods_min', 'snd_pcm_hw_params_get_periods_max', +'snd_pcm_hw_params_test_periods', 'snd_pcm_hw_params_set_periods', +'snd_pcm_hw_params_set_periods_min', 'snd_pcm_hw_params_set_periods_max', +'snd_pcm_hw_params_set_periods_minmax', 'snd_pcm_hw_params_set_periods_near', +'snd_pcm_hw_params_set_periods_first', 'snd_pcm_hw_params_set_periods_last', +'snd_pcm_hw_params_set_periods_integer', 'snd_pcm_hw_params_get_buffer_time', +'snd_pcm_hw_params_get_buffer_time_min', +'snd_pcm_hw_params_get_buffer_time_max', 'snd_pcm_hw_params_test_buffer_time', +'snd_pcm_hw_params_set_buffer_time', 'snd_pcm_hw_params_set_buffer_time_min', +'snd_pcm_hw_params_set_buffer_time_max', +'snd_pcm_hw_params_set_buffer_time_minmax', +'snd_pcm_hw_params_set_buffer_time_near', +'snd_pcm_hw_params_set_buffer_time_first', +'snd_pcm_hw_params_set_buffer_time_last', 'snd_pcm_hw_params_get_buffer_size', +'snd_pcm_hw_params_get_buffer_size_min', +'snd_pcm_hw_params_get_buffer_size_max', 'snd_pcm_hw_params_test_buffer_size', +'snd_pcm_hw_params_set_buffer_size', 'snd_pcm_hw_params_set_buffer_size_min', +'snd_pcm_hw_params_set_buffer_size_max', +'snd_pcm_hw_params_set_buffer_size_minmax', +'snd_pcm_hw_params_set_buffer_size_near', +'snd_pcm_hw_params_set_buffer_size_first', +'snd_pcm_hw_params_set_buffer_size_last', 'snd_pcm_hw_params_get_tick_time', +'snd_pcm_hw_params_get_tick_time_min', 'snd_pcm_hw_params_get_tick_time_max', +'snd_pcm_hw_params_test_tick_time', 'snd_pcm_hw_params_set_tick_time', +'snd_pcm_hw_params_set_tick_time_min', 'snd_pcm_hw_params_set_tick_time_max', +'snd_pcm_hw_params_set_tick_time_minmax', +'snd_pcm_hw_params_set_tick_time_near', +'snd_pcm_hw_params_set_tick_time_first', +'snd_pcm_hw_params_set_tick_time_last', 'snd_pcm_hw_params_get_min_align', +'snd_pcm_sw_params_sizeof', 'snd_pcm_sw_params_malloc', +'snd_pcm_sw_params_free', 'snd_pcm_sw_params_copy', +'snd_pcm_sw_params_get_boundary', 'snd_pcm_sw_params_set_tstamp_mode', +'snd_pcm_sw_params_get_tstamp_mode', 'snd_pcm_sw_params_set_sleep_min', +'snd_pcm_sw_params_get_sleep_min', 'snd_pcm_sw_params_set_avail_min', +'snd_pcm_sw_params_get_avail_min', 'snd_pcm_sw_params_set_xfer_align', +'snd_pcm_sw_params_get_xfer_align', 'snd_pcm_sw_params_set_start_threshold', +'snd_pcm_sw_params_get_start_threshold', +'snd_pcm_sw_params_set_stop_threshold', +'snd_pcm_sw_params_get_stop_threshold', +'snd_pcm_sw_params_set_silence_threshold', +'snd_pcm_sw_params_get_silence_threshold', +'snd_pcm_sw_params_set_silence_size', 'snd_pcm_sw_params_get_silence_size', +'snd_pcm_access_mask_sizeof', 'snd_pcm_access_mask_malloc', +'snd_pcm_access_mask_free', 'snd_pcm_access_mask_copy', +'snd_pcm_access_mask_none', 'snd_pcm_access_mask_any', +'snd_pcm_access_mask_test', 'snd_pcm_access_mask_empty', +'snd_pcm_access_mask_set', 'snd_pcm_access_mask_reset', +'snd_pcm_format_mask_sizeof', 'snd_pcm_format_mask_malloc', +'snd_pcm_format_mask_free', 'snd_pcm_format_mask_copy', +'snd_pcm_format_mask_none', 'snd_pcm_format_mask_any', +'snd_pcm_format_mask_test', 'snd_pcm_format_mask_empty', +'snd_pcm_format_mask_set', 'snd_pcm_format_mask_reset', +'snd_pcm_subformat_mask_sizeof', 'snd_pcm_subformat_mask_malloc', +'snd_pcm_subformat_mask_free', 'snd_pcm_subformat_mask_copy', +'snd_pcm_subformat_mask_none', 'snd_pcm_subformat_mask_any', +'snd_pcm_subformat_mask_test', 'snd_pcm_subformat_mask_empty', +'snd_pcm_subformat_mask_set', 'snd_pcm_subformat_mask_reset', +'snd_pcm_status_sizeof', 'snd_pcm_status_malloc', 'snd_pcm_status_free', +'snd_pcm_status_copy', 'snd_pcm_status_get_state', +'snd_pcm_status_get_trigger_tstamp', 'snd_pcm_status_get_trigger_htstamp', +'snd_pcm_status_get_tstamp', 'snd_pcm_status_get_htstamp', +'snd_pcm_status_get_delay', 'snd_pcm_status_get_avail', +'snd_pcm_status_get_avail_max', 'snd_pcm_status_get_overrange', +'snd_pcm_type_name', 'snd_pcm_stream_name', 'snd_pcm_access_name', +'snd_pcm_format_name', 'snd_pcm_format_description', 'snd_pcm_subformat_name', +'snd_pcm_subformat_description', 'snd_pcm_format_value', +'snd_pcm_tstamp_mode_name', 'snd_pcm_state_name', 'snd_pcm_dump', +'snd_pcm_dump_hw_setup', 'snd_pcm_dump_sw_setup', 'snd_pcm_dump_setup', +'snd_pcm_hw_params_dump', 'snd_pcm_sw_params_dump', 'snd_pcm_status_dump', +'snd_pcm_mmap_begin', 'snd_pcm_mmap_commit', 'snd_pcm_mmap_writei', +'snd_pcm_mmap_readi', 'snd_pcm_mmap_writen', 'snd_pcm_mmap_readn', +'snd_pcm_format_signed', 'snd_pcm_format_unsigned', 'snd_pcm_format_linear', +'snd_pcm_format_float', 'snd_pcm_format_little_endian', +'snd_pcm_format_big_endian', 'snd_pcm_format_cpu_endian', +'snd_pcm_format_width', 'snd_pcm_format_physical_width', +'snd_pcm_build_linear_format', 'snd_pcm_format_size', +'snd_pcm_format_silence', 'snd_pcm_format_silence_16', +'snd_pcm_format_silence_32', 'snd_pcm_format_silence_64', +'snd_pcm_format_set_silence', 'snd_pcm_bytes_to_frames', +'snd_pcm_frames_to_bytes', 'snd_pcm_bytes_to_samples', +'snd_pcm_samples_to_bytes', 'snd_pcm_area_silence', 'snd_pcm_areas_silence', +'snd_pcm_area_copy', 'snd_pcm_areas_copy', 'snd_pcm_hook_type_t', +'SND_PCM_HOOK_TYPE_HW_PARAMS', 'SND_PCM_HOOK_TYPE_HW_FREE', +'SND_PCM_HOOK_TYPE_CLOSE', 'SND_PCM_HOOK_TYPE_LAST', 'snd_pcm_hook_t', +'snd_pcm_hook_func_t', 'snd_pcm_hook_get_pcm', 'snd_pcm_hook_get_private', +'snd_pcm_hook_set_private', 'snd_pcm_hook_add', 'snd_pcm_hook_remove', +'snd_pcm_scope_ops_t', 'snd_pcm_meter_get_bufsize', +'snd_pcm_meter_get_channels', 'snd_pcm_meter_get_rate', +'snd_pcm_meter_get_now', 'snd_pcm_meter_get_boundary', +'snd_pcm_meter_add_scope', 'snd_pcm_meter_search_scope', +'snd_pcm_scope_malloc', 'snd_pcm_scope_set_ops', 'snd_pcm_scope_set_name', +'snd_pcm_scope_get_name', 'snd_pcm_scope_get_callback_private', +'snd_pcm_scope_set_callback_private', 'snd_pcm_scope_s16_open', +'snd_pcm_scope_s16_get_channel_buffer', 'snd_spcm_latency_t', +'SND_SPCM_LATENCY_STANDARD', 'SND_SPCM_LATENCY_MEDIUM', +'SND_SPCM_LATENCY_REALTIME', 'snd_spcm_xrun_type_t', 'SND_SPCM_XRUN_IGNORE', +'SND_SPCM_XRUN_STOP', 'snd_spcm_duplex_type_t', 'SND_SPCM_DUPLEX_LIBERAL', +'SND_SPCM_DUPLEX_PEDANTIC', 'snd_spcm_init', 'snd_spcm_init_duplex', +'snd_spcm_init_get_params', 'snd_pcm_start_mode_name', +'snd_pcm_xrun_mode_name', 'snd_pcm_sw_params_set_start_mode', +'snd_pcm_sw_params_get_start_mode', 'snd_pcm_sw_params_set_xrun_mode', +'snd_pcm_sw_params_get_xrun_mode', 'SND_RAWMIDI_DLSYM_VERSION', +'snd_rawmidi_info_t', 'snd_rawmidi_params_t', 'snd_rawmidi_status_t', +'snd_rawmidi_stream_t', 'SND_RAWMIDI_STREAM_OUTPUT', +'SND_RAWMIDI_STREAM_INPUT', 'SND_RAWMIDI_STREAM_LAST', 'SND_RAWMIDI_APPEND', +'SND_RAWMIDI_NONBLOCK', 'SND_RAWMIDI_SYNC', 'snd_rawmidi_t', +'snd_rawmidi_type_t', 'SND_RAWMIDI_TYPE_HW', 'SND_RAWMIDI_TYPE_SHM', +'SND_RAWMIDI_TYPE_INET', 'SND_RAWMIDI_TYPE_VIRTUAL', 'snd_rawmidi_open', +'snd_rawmidi_open_lconf', 'snd_rawmidi_close', +'snd_rawmidi_poll_descriptors_count', 'snd_rawmidi_poll_descriptors', +'snd_rawmidi_poll_descriptors_revents', 'snd_rawmidi_nonblock', +'snd_rawmidi_info_sizeof', 'snd_rawmidi_info_malloc', 'snd_rawmidi_info_free', +'snd_rawmidi_info_copy', 'snd_rawmidi_info_get_device', +'snd_rawmidi_info_get_subdevice', 'snd_rawmidi_info_get_stream', +'snd_rawmidi_info_get_card', 'snd_rawmidi_info_get_flags', +'snd_rawmidi_info_get_id', 'snd_rawmidi_info_get_name', +'snd_rawmidi_info_get_subdevice_name', +'snd_rawmidi_info_get_subdevices_count', +'snd_rawmidi_info_get_subdevices_avail', 'snd_rawmidi_info_set_device', +'snd_rawmidi_info_set_subdevice', 'snd_rawmidi_info_set_stream', +'snd_rawmidi_info', 'snd_rawmidi_params_sizeof', 'snd_rawmidi_params_malloc', +'snd_rawmidi_params_free', 'snd_rawmidi_params_copy', +'snd_rawmidi_params_set_buffer_size', 'snd_rawmidi_params_get_buffer_size', +'snd_rawmidi_params_set_avail_min', 'snd_rawmidi_params_get_avail_min', +'snd_rawmidi_params_set_no_active_sensing', +'snd_rawmidi_params_get_no_active_sensing', 'snd_rawmidi_params', +'snd_rawmidi_params_current', 'snd_rawmidi_status_sizeof', +'snd_rawmidi_status_malloc', 'snd_rawmidi_status_free', +'snd_rawmidi_status_copy', 'snd_rawmidi_status_get_tstamp', +'snd_rawmidi_status_get_avail', 'snd_rawmidi_status_get_xruns', +'snd_rawmidi_status', 'snd_rawmidi_drain', 'snd_rawmidi_drop', +'snd_rawmidi_write', 'snd_rawmidi_read', 'snd_rawmidi_name', +'snd_rawmidi_type', 'snd_rawmidi_stream', 'SND_TIMER_DLSYM_VERSION', +'SND_TIMER_QUERY_DLSYM_VERSION', 'snd_timer_id_t', 'snd_timer_ginfo_t', +'snd_timer_gparams_t', 'snd_timer_gstatus_t', 'snd_timer_info_t', +'snd_timer_params_t', 'snd_timer_status_t', 'snd_timer_class_t', +'SND_TIMER_CLASS_NONE', 'SND_TIMER_CLASS_SLAVE', 'SND_TIMER_CLASS_GLOBAL', +'SND_TIMER_CLASS_CARD', 'SND_TIMER_CLASS_PCM', 'SND_TIMER_CLASS_LAST', +'snd_timer_slave_class_t', 'SND_TIMER_SCLASS_NONE', +'SND_TIMER_SCLASS_APPLICATION', 'SND_TIMER_SCLASS_SEQUENCER', +'SND_TIMER_SCLASS_OSS_SEQUENCER', 'SND_TIMER_SCLASS_LAST', +'snd_timer_event_t', 'SND_TIMER_EVENT_RESOLUTION', 'SND_TIMER_EVENT_TICK', +'SND_TIMER_EVENT_START', 'SND_TIMER_EVENT_STOP', 'SND_TIMER_EVENT_CONTINUE', +'SND_TIMER_EVENT_PAUSE', 'SND_TIMER_EVENT_EARLY', 'SND_TIMER_EVENT_SUSPEND', +'SND_TIMER_EVENT_RESUME', 'SND_TIMER_EVENT_MSTART', 'SND_TIMER_EVENT_MSTOP', +'SND_TIMER_EVENT_MCONTINUE', 'SND_TIMER_EVENT_MPAUSE', +'SND_TIMER_EVENT_MSUSPEND', 'SND_TIMER_EVENT_MRESUME', 'snd_timer_read_t', +'snd_timer_tread_t', 'SND_TIMER_GLOBAL_SYSTEM', 'SND_TIMER_GLOBAL_RTC', +'SND_TIMER_GLOBAL_HPET', 'SND_TIMER_OPEN_NONBLOCK', 'SND_TIMER_OPEN_TREAD', +'snd_timer_type_t', 'SND_TIMER_TYPE_HW', 'SND_TIMER_TYPE_SHM', +'SND_TIMER_TYPE_INET', 'snd_timer_query_t', 'snd_timer_t', +'snd_timer_query_open', 'snd_timer_query_open_lconf', 'snd_timer_query_close', +'snd_timer_query_next_device', 'snd_timer_query_info', +'snd_timer_query_params', 'snd_timer_query_status', 'snd_timer_open', +'snd_timer_open_lconf', 'snd_timer_close', 'snd_async_add_timer_handler', +'snd_async_handler_get_timer', 'snd_timer_poll_descriptors_count', +'snd_timer_poll_descriptors', 'snd_timer_poll_descriptors_revents', +'snd_timer_info', 'snd_timer_params', 'snd_timer_status', 'snd_timer_start', +'snd_timer_stop', 'snd_timer_continue', 'snd_timer_read', +'snd_timer_id_sizeof', 'snd_timer_id_malloc', 'snd_timer_id_free', +'snd_timer_id_copy', 'snd_timer_id_set_class', 'snd_timer_id_get_class', +'snd_timer_id_set_sclass', 'snd_timer_id_get_sclass', 'snd_timer_id_set_card', +'snd_timer_id_get_card', 'snd_timer_id_set_device', 'snd_timer_id_get_device', +'snd_timer_id_set_subdevice', 'snd_timer_id_get_subdevice', +'snd_timer_ginfo_sizeof', 'snd_timer_ginfo_malloc', 'snd_timer_ginfo_free', +'snd_timer_ginfo_copy', 'snd_timer_ginfo_set_tid', 'snd_timer_ginfo_get_tid', +'snd_timer_ginfo_get_flags', 'snd_timer_ginfo_get_card', +'snd_timer_ginfo_get_id', 'snd_timer_ginfo_get_name', +'snd_timer_ginfo_get_resolution', 'snd_timer_ginfo_get_resolution_min', +'snd_timer_ginfo_get_resolution_max', 'snd_timer_ginfo_get_clients', +'snd_timer_info_sizeof', 'snd_timer_info_malloc', 'snd_timer_info_free', +'snd_timer_info_copy', 'snd_timer_info_is_slave', 'snd_timer_info_get_card', +'snd_timer_info_get_id', 'snd_timer_info_get_name', +'snd_timer_info_get_resolution', 'snd_timer_params_sizeof', +'snd_timer_params_malloc', 'snd_timer_params_free', 'snd_timer_params_copy', +'snd_timer_params_set_auto_start', 'snd_timer_params_get_auto_start', +'snd_timer_params_set_exclusive', 'snd_timer_params_get_exclusive', +'snd_timer_params_set_early_event', 'snd_timer_params_get_early_event', +'snd_timer_params_set_ticks', 'snd_timer_params_get_ticks', +'snd_timer_params_set_queue_size', 'snd_timer_params_get_queue_size', +'snd_timer_params_set_filter', 'snd_timer_params_get_filter', +'snd_timer_status_sizeof', 'snd_timer_status_malloc', 'snd_timer_status_free', +'snd_timer_status_copy', 'snd_timer_status_get_timestamp', +'snd_timer_status_get_resolution', 'snd_timer_status_get_lost', +'snd_timer_status_get_overrun', 'snd_timer_status_get_queue', +'snd_timer_info_get_ticks', 'SND_HWDEP_DLSYM_VERSION', 'snd_hwdep_info_t', +'snd_hwdep_dsp_status_t', 'snd_hwdep_dsp_image_t', 'snd_hwdep_iface_t', +'SND_HWDEP_IFACE_OPL2', 'SND_HWDEP_IFACE_OPL3', 'SND_HWDEP_IFACE_OPL4', +'SND_HWDEP_IFACE_SB16CSP', 'SND_HWDEP_IFACE_EMU10K1', +'SND_HWDEP_IFACE_YSS225', 'SND_HWDEP_IFACE_ICS2115', 'SND_HWDEP_IFACE_SSCAPE', +'SND_HWDEP_IFACE_VX', 'SND_HWDEP_IFACE_MIXART', 'SND_HWDEP_IFACE_USX2Y', +'SND_HWDEP_IFACE_EMUX_WAVETABLE', 'SND_HWDEP_IFACE_BLUETOOTH', +'SND_HWDEP_IFACE_USX2Y_PCM', 'SND_HWDEP_IFACE_PCXHR', 'SND_HWDEP_IFACE_SB_RC', +'SND_HWDEP_IFACE_LAST', 'SND_HWDEP_OPEN_READ', 'SND_HWDEP_OPEN_WRITE', +'SND_HWDEP_OPEN_DUPLEX', 'SND_HWDEP_OPEN_NONBLOCK', 'snd_hwdep_type_t', +'SND_HWDEP_TYPE_HW', 'SND_HWDEP_TYPE_SHM', 'SND_HWDEP_TYPE_INET', +'snd_hwdep_t', 'snd_hwdep_open', 'snd_hwdep_close', +'snd_hwdep_poll_descriptors', 'snd_hwdep_poll_descriptors_revents', +'snd_hwdep_nonblock', 'snd_hwdep_info', 'snd_hwdep_dsp_status', +'snd_hwdep_dsp_load', 'snd_hwdep_ioctl', 'snd_hwdep_write', 'snd_hwdep_read', +'snd_hwdep_info_sizeof', 'snd_hwdep_info_malloc', 'snd_hwdep_info_free', +'snd_hwdep_info_copy', 'snd_hwdep_info_get_device', 'snd_hwdep_info_get_card', +'snd_hwdep_info_get_id', 'snd_hwdep_info_get_name', +'snd_hwdep_info_get_iface', 'snd_hwdep_info_set_device', +'snd_hwdep_dsp_status_sizeof', 'snd_hwdep_dsp_status_malloc', +'snd_hwdep_dsp_status_free', 'snd_hwdep_dsp_status_copy', +'snd_hwdep_dsp_status_get_version', 'snd_hwdep_dsp_status_get_id', +'snd_hwdep_dsp_status_get_num_dsps', 'snd_hwdep_dsp_status_get_dsp_loaded', +'snd_hwdep_dsp_status_get_chip_ready', 'snd_hwdep_dsp_image_sizeof', +'snd_hwdep_dsp_image_malloc', 'snd_hwdep_dsp_image_free', +'snd_hwdep_dsp_image_copy', 'snd_hwdep_dsp_image_get_index', +'snd_hwdep_dsp_image_get_name', 'snd_hwdep_dsp_image_get_image', +'snd_hwdep_dsp_image_get_length', 'snd_hwdep_dsp_image_set_index', +'snd_hwdep_dsp_image_set_name', 'snd_hwdep_dsp_image_set_image', +'snd_hwdep_dsp_image_set_length', 'SND_CONTROL_DLSYM_VERSION', +'snd_aes_iec958_t', 'snd_ctl_card_info_t', 'snd_ctl_elem_id_t', +'snd_ctl_elem_list_t', 'snd_ctl_elem_info_t', 'snd_ctl_elem_value_t', +'snd_ctl_event_t', 'snd_ctl_elem_type_t', 'SND_CTL_ELEM_TYPE_NONE', +'SND_CTL_ELEM_TYPE_BOOLEAN', 'SND_CTL_ELEM_TYPE_INTEGER', +'SND_CTL_ELEM_TYPE_ENUMERATED', 'SND_CTL_ELEM_TYPE_BYTES', +'SND_CTL_ELEM_TYPE_IEC958', 'SND_CTL_ELEM_TYPE_INTEGER64', +'SND_CTL_ELEM_TYPE_LAST', 'snd_ctl_elem_iface_t', 'SND_CTL_ELEM_IFACE_CARD', +'SND_CTL_ELEM_IFACE_HWDEP', 'SND_CTL_ELEM_IFACE_MIXER', +'SND_CTL_ELEM_IFACE_PCM', 'SND_CTL_ELEM_IFACE_RAWMIDI', +'SND_CTL_ELEM_IFACE_TIMER', 'SND_CTL_ELEM_IFACE_SEQUENCER', +'SND_CTL_ELEM_IFACE_LAST', 'snd_ctl_event_type_t', 'SND_CTL_EVENT_ELEM', +'SND_CTL_EVENT_LAST', 'SND_CTL_EVENT_MASK_REMOVE', 'SND_CTL_EVENT_MASK_VALUE', +'SND_CTL_EVENT_MASK_INFO', 'SND_CTL_EVENT_MASK_ADD', 'SND_CTL_EVENT_MASK_TLV', +'SND_CTL_POWER_MASK', 'SND_CTL_POWER_D0', 'SND_CTL_POWER_D1', +'SND_CTL_POWER_D2', 'SND_CTL_POWER_D3', 'SND_CTL_POWER_D3hot', +'SND_CTL_POWER_D3cold', 'SND_CTL_TLVT_CONTAINER', 'SND_CTL_TLVT_DB_SCALE', +'SND_CTL_TLVT_DB_LINEAR', 'SND_CTL_TLVT_DB_RANGE', 'SND_CTL_TLV_DB_GAIN_MUTE', +'snd_ctl_type_t', 'SND_CTL_TYPE_HW', 'SND_CTL_TYPE_SHM', 'SND_CTL_TYPE_INET', +'SND_CTL_TYPE_EXT', 'SND_CTL_NONBLOCK', 'SND_CTL_ASYNC', 'SND_CTL_READONLY', +'snd_ctl_t', 'SND_SCTL_NOFREE', 'snd_sctl_t', 'snd_card_load', +'snd_card_next', 'snd_card_get_index', 'snd_card_get_name', +'snd_card_get_longname', 'snd_device_name_hint', 'snd_device_name_free_hint', +'snd_device_name_get_hint', 'snd_ctl_open', 'snd_ctl_open_lconf', +'snd_ctl_close', 'snd_ctl_nonblock', 'snd_async_add_ctl_handler', +'snd_async_handler_get_ctl', 'snd_ctl_poll_descriptors_count', +'snd_ctl_poll_descriptors', 'snd_ctl_poll_descriptors_revents', +'snd_ctl_subscribe_events', 'snd_ctl_card_info', 'snd_ctl_elem_list', +'snd_ctl_elem_info', 'snd_ctl_elem_read', 'snd_ctl_elem_write', +'snd_ctl_elem_lock', 'snd_ctl_elem_unlock', 'snd_ctl_elem_tlv_read', +'snd_ctl_elem_tlv_write', 'snd_ctl_elem_tlv_command', +'snd_ctl_hwdep_next_device', 'snd_ctl_hwdep_info', 'snd_ctl_pcm_next_device', +'snd_ctl_pcm_info', 'snd_ctl_pcm_prefer_subdevice', +'snd_ctl_rawmidi_next_device', 'snd_ctl_rawmidi_info', +'snd_ctl_rawmidi_prefer_subdevice', 'snd_ctl_set_power_state', +'snd_ctl_get_power_state', 'snd_ctl_read', 'snd_ctl_wait', 'snd_ctl_name', +'snd_ctl_type', 'snd_ctl_elem_type_name', 'snd_ctl_elem_iface_name', +'snd_ctl_event_type_name', 'snd_ctl_event_elem_get_mask', +'snd_ctl_event_elem_get_numid', 'snd_ctl_event_elem_get_id', +'snd_ctl_event_elem_get_interface', 'snd_ctl_event_elem_get_device', +'snd_ctl_event_elem_get_subdevice', 'snd_ctl_event_elem_get_name', +'snd_ctl_event_elem_get_index', 'snd_ctl_elem_list_alloc_space', +'snd_ctl_elem_list_free_space', 'snd_ctl_elem_id_sizeof', +'snd_ctl_elem_id_malloc', 'snd_ctl_elem_id_free', 'snd_ctl_elem_id_clear', +'snd_ctl_elem_id_copy', 'snd_ctl_elem_id_get_numid', +'snd_ctl_elem_id_get_interface', 'snd_ctl_elem_id_get_device', +'snd_ctl_elem_id_get_subdevice', 'snd_ctl_elem_id_get_name', +'snd_ctl_elem_id_get_index', 'snd_ctl_elem_id_set_numid', +'snd_ctl_elem_id_set_interface', 'snd_ctl_elem_id_set_device', +'snd_ctl_elem_id_set_subdevice', 'snd_ctl_elem_id_set_name', +'snd_ctl_elem_id_set_index', 'snd_ctl_card_info_sizeof', +'snd_ctl_card_info_malloc', 'snd_ctl_card_info_free', +'snd_ctl_card_info_clear', 'snd_ctl_card_info_copy', +'snd_ctl_card_info_get_card', 'snd_ctl_card_info_get_id', +'snd_ctl_card_info_get_driver', 'snd_ctl_card_info_get_name', +'snd_ctl_card_info_get_longname', 'snd_ctl_card_info_get_mixername', +'snd_ctl_card_info_get_components', 'snd_ctl_event_sizeof', +'snd_ctl_event_malloc', 'snd_ctl_event_free', 'snd_ctl_event_clear', +'snd_ctl_event_copy', 'snd_ctl_event_get_type', 'snd_ctl_elem_list_sizeof', +'snd_ctl_elem_list_malloc', 'snd_ctl_elem_list_free', +'snd_ctl_elem_list_clear', 'snd_ctl_elem_list_copy', +'snd_ctl_elem_list_set_offset', 'snd_ctl_elem_list_get_used', +'snd_ctl_elem_list_get_count', 'snd_ctl_elem_list_get_id', +'snd_ctl_elem_list_get_numid', 'snd_ctl_elem_list_get_interface', +'snd_ctl_elem_list_get_device', 'snd_ctl_elem_list_get_subdevice', +'snd_ctl_elem_list_get_name', 'snd_ctl_elem_list_get_index', +'snd_ctl_elem_info_sizeof', 'snd_ctl_elem_info_malloc', +'snd_ctl_elem_info_free', 'snd_ctl_elem_info_clear', 'snd_ctl_elem_info_copy', +'snd_ctl_elem_info_get_type', 'snd_ctl_elem_info_is_readable', +'snd_ctl_elem_info_is_writable', 'snd_ctl_elem_info_is_volatile', +'snd_ctl_elem_info_is_inactive', 'snd_ctl_elem_info_is_locked', +'snd_ctl_elem_info_is_tlv_readable', 'snd_ctl_elem_info_is_tlv_writable', +'snd_ctl_elem_info_is_tlv_commandable', 'snd_ctl_elem_info_is_owner', +'snd_ctl_elem_info_is_user', 'snd_ctl_elem_info_get_owner', +'snd_ctl_elem_info_get_count', 'snd_ctl_elem_info_get_min', +'snd_ctl_elem_info_get_max', 'snd_ctl_elem_info_get_step', +'snd_ctl_elem_info_get_min64', 'snd_ctl_elem_info_get_max64', +'snd_ctl_elem_info_get_step64', 'snd_ctl_elem_info_get_items', +'snd_ctl_elem_info_set_item', 'snd_ctl_elem_info_get_item_name', +'snd_ctl_elem_info_get_dimensions', 'snd_ctl_elem_info_get_dimension', +'snd_ctl_elem_info_get_id', 'snd_ctl_elem_info_get_numid', +'snd_ctl_elem_info_get_interface', 'snd_ctl_elem_info_get_device', +'snd_ctl_elem_info_get_subdevice', 'snd_ctl_elem_info_get_name', +'snd_ctl_elem_info_get_index', 'snd_ctl_elem_info_set_id', +'snd_ctl_elem_info_set_numid', 'snd_ctl_elem_info_set_interface', +'snd_ctl_elem_info_set_device', 'snd_ctl_elem_info_set_subdevice', +'snd_ctl_elem_info_set_name', 'snd_ctl_elem_info_set_index', +'snd_ctl_elem_add_integer', 'snd_ctl_elem_add_integer64', +'snd_ctl_elem_add_boolean', 'snd_ctl_elem_add_iec958', 'snd_ctl_elem_remove', +'snd_ctl_elem_value_sizeof', 'snd_ctl_elem_value_malloc', +'snd_ctl_elem_value_free', 'snd_ctl_elem_value_clear', +'snd_ctl_elem_value_copy', 'snd_ctl_elem_value_get_id', +'snd_ctl_elem_value_get_numid', 'snd_ctl_elem_value_get_interface', +'snd_ctl_elem_value_get_device', 'snd_ctl_elem_value_get_subdevice', +'snd_ctl_elem_value_get_name', 'snd_ctl_elem_value_get_index', +'snd_ctl_elem_value_set_id', 'snd_ctl_elem_value_set_numid', +'snd_ctl_elem_value_set_interface', 'snd_ctl_elem_value_set_device', +'snd_ctl_elem_value_set_subdevice', 'snd_ctl_elem_value_set_name', +'snd_ctl_elem_value_set_index', 'snd_ctl_elem_value_get_boolean', +'snd_ctl_elem_value_get_integer', 'snd_ctl_elem_value_get_integer64', +'snd_ctl_elem_value_get_enumerated', 'snd_ctl_elem_value_get_byte', +'snd_ctl_elem_value_set_boolean', 'snd_ctl_elem_value_set_integer', +'snd_ctl_elem_value_set_integer64', 'snd_ctl_elem_value_set_enumerated', +'snd_ctl_elem_value_set_byte', 'snd_ctl_elem_set_bytes', +'snd_ctl_elem_value_get_bytes', 'snd_ctl_elem_value_get_iec958', +'snd_ctl_elem_value_set_iec958', 'snd_hctl_elem_t', 'snd_hctl_t', +'snd_hctl_compare_t', 'snd_hctl_compare_fast', 'snd_hctl_callback_t', +'snd_hctl_elem_callback_t', 'snd_hctl_open', 'snd_hctl_open_ctl', +'snd_hctl_close', 'snd_hctl_nonblock', 'snd_hctl_poll_descriptors_count', +'snd_hctl_poll_descriptors', 'snd_hctl_poll_descriptors_revents', +'snd_hctl_get_count', 'snd_hctl_set_compare', 'snd_hctl_first_elem', +'snd_hctl_last_elem', 'snd_hctl_find_elem', 'snd_hctl_set_callback', +'snd_hctl_set_callback_private', 'snd_hctl_get_callback_private', +'snd_hctl_load', 'snd_hctl_free', 'snd_hctl_handle_events', 'snd_hctl_name', +'snd_hctl_wait', 'snd_hctl_ctl', 'snd_hctl_elem_next', 'snd_hctl_elem_prev', +'snd_hctl_elem_info', 'snd_hctl_elem_read', 'snd_hctl_elem_write', +'snd_hctl_elem_tlv_read', 'snd_hctl_elem_tlv_write', +'snd_hctl_elem_tlv_command', 'snd_hctl_elem_get_hctl', 'snd_hctl_elem_get_id', +'snd_hctl_elem_get_numid', 'snd_hctl_elem_get_interface', +'snd_hctl_elem_get_device', 'snd_hctl_elem_get_subdevice', +'snd_hctl_elem_get_name', 'snd_hctl_elem_get_index', +'snd_hctl_elem_set_callback', 'snd_hctl_elem_get_callback_private', +'snd_hctl_elem_set_callback_private', 'snd_sctl_build', 'snd_sctl_free', +'snd_sctl_install', 'snd_sctl_remove', 'snd_mixer_t', 'snd_mixer_class_t', +'snd_mixer_elem_t', 'snd_mixer_callback_t', 'snd_mixer_elem_callback_t', +'snd_mixer_compare_t', 'snd_mixer_event_t', 'snd_mixer_elem_type_t', +'SND_MIXER_ELEM_SIMPLE', 'SND_MIXER_ELEM_LAST', 'snd_mixer_open', +'snd_mixer_close', 'snd_mixer_first_elem', 'snd_mixer_last_elem', +'snd_mixer_handle_events', 'snd_mixer_attach', 'snd_mixer_attach_hctl', +'snd_mixer_detach', 'snd_mixer_detach_hctl', 'snd_mixer_get_hctl', +'snd_mixer_poll_descriptors_count', 'snd_mixer_poll_descriptors', +'snd_mixer_poll_descriptors_revents', 'snd_mixer_load', 'snd_mixer_free', +'snd_mixer_wait', 'snd_mixer_set_compare', 'snd_mixer_set_callback', +'snd_mixer_get_callback_private', 'snd_mixer_set_callback_private', +'snd_mixer_get_count', 'snd_mixer_class_unregister', 'snd_mixer_elem_next', +'snd_mixer_elem_prev', 'snd_mixer_elem_set_callback', +'snd_mixer_elem_get_callback_private', 'snd_mixer_elem_set_callback_private', +'snd_mixer_elem_get_type', 'snd_mixer_class_register', 'snd_mixer_add_elem', +'snd_mixer_remove_elem', 'snd_mixer_elem_new', 'snd_mixer_elem_add', +'snd_mixer_elem_remove', 'snd_mixer_elem_free', 'snd_mixer_elem_info', +'snd_mixer_elem_value', 'snd_mixer_elem_attach', 'snd_mixer_elem_detach', +'snd_mixer_elem_empty', 'snd_mixer_elem_get_private', +'snd_mixer_class_sizeof', 'snd_mixer_class_malloc', 'snd_mixer_class_free', +'snd_mixer_class_copy', 'snd_mixer_class_get_mixer', +'snd_mixer_class_get_event', 'snd_mixer_class_get_private', +'snd_mixer_class_get_compare', 'snd_mixer_class_set_event', +'snd_mixer_class_set_private', 'snd_mixer_class_set_private_free', +'snd_mixer_class_set_compare', 'snd_mixer_selem_channel_id_t', +'SND_MIXER_SCHN_UNKNOWN', 'SND_MIXER_SCHN_FRONT_LEFT', +'SND_MIXER_SCHN_FRONT_RIGHT', 'SND_MIXER_SCHN_REAR_LEFT', +'SND_MIXER_SCHN_REAR_RIGHT', 'SND_MIXER_SCHN_FRONT_CENTER', +'SND_MIXER_SCHN_WOOFER', 'SND_MIXER_SCHN_SIDE_LEFT', +'SND_MIXER_SCHN_SIDE_RIGHT', 'SND_MIXER_SCHN_REAR_CENTER', +'SND_MIXER_SCHN_LAST', 'SND_MIXER_SCHN_MONO', 'snd_mixer_selem_id_t', +'snd_mixer_selem_channel_name', 'snd_mixer_selem_register', +'snd_mixer_selem_get_id', 'snd_mixer_selem_get_name', +'snd_mixer_selem_get_index', 'snd_mixer_find_selem', +'snd_mixer_selem_is_active', 'snd_mixer_selem_is_playback_mono', +'snd_mixer_selem_has_playback_channel', 'snd_mixer_selem_is_capture_mono', +'snd_mixer_selem_has_capture_channel', 'snd_mixer_selem_get_capture_group', +'snd_mixer_selem_has_common_volume', 'snd_mixer_selem_has_playback_volume', +'snd_mixer_selem_has_playback_volume_joined', +'snd_mixer_selem_has_capture_volume', +'snd_mixer_selem_has_capture_volume_joined', +'snd_mixer_selem_has_common_switch', 'snd_mixer_selem_has_playback_switch', +'snd_mixer_selem_has_playback_switch_joined', +'snd_mixer_selem_has_capture_switch', +'snd_mixer_selem_has_capture_switch_joined', +'snd_mixer_selem_has_capture_switch_exclusive', +'snd_mixer_selem_get_playback_volume', 'snd_mixer_selem_get_capture_volume', +'snd_mixer_selem_get_playback_dB', 'snd_mixer_selem_get_capture_dB', +'snd_mixer_selem_get_playback_switch', 'snd_mixer_selem_get_capture_switch', +'snd_mixer_selem_set_playback_volume', 'snd_mixer_selem_set_capture_volume', +'snd_mixer_selem_set_playback_dB', 'snd_mixer_selem_set_capture_dB', +'snd_mixer_selem_set_playback_volume_all', +'snd_mixer_selem_set_capture_volume_all', +'snd_mixer_selem_set_playback_dB_all', 'snd_mixer_selem_set_capture_dB_all', +'snd_mixer_selem_set_playback_switch', 'snd_mixer_selem_set_capture_switch', +'snd_mixer_selem_set_playback_switch_all', +'snd_mixer_selem_set_capture_switch_all', +'snd_mixer_selem_get_playback_volume_range', +'snd_mixer_selem_get_playback_dB_range', +'snd_mixer_selem_set_playback_volume_range', +'snd_mixer_selem_get_capture_volume_range', +'snd_mixer_selem_get_capture_dB_range', +'snd_mixer_selem_set_capture_volume_range', 'snd_mixer_selem_is_enumerated', +'snd_mixer_selem_is_enum_playback', 'snd_mixer_selem_is_enum_capture', +'snd_mixer_selem_get_enum_items', 'snd_mixer_selem_get_enum_item_name', +'snd_mixer_selem_get_enum_item', 'snd_mixer_selem_set_enum_item', +'snd_mixer_selem_id_sizeof', 'snd_mixer_selem_id_malloc', +'snd_mixer_selem_id_free', 'snd_mixer_selem_id_copy', +'snd_mixer_selem_id_get_name', 'snd_mixer_selem_id_get_index', +'snd_mixer_selem_id_set_name', 'snd_mixer_selem_id_set_index', +'snd_seq_event_type_t', 'snd_seq_addr_t', 'snd_seq_connect_t', +'snd_seq_real_time_t', 'snd_seq_tick_time_t', 'snd_seq_timestamp_t', +'SND_SEQ_TIME_STAMP_TICK', 'SND_SEQ_TIME_STAMP_REAL', +'SND_SEQ_TIME_STAMP_MASK', 'SND_SEQ_TIME_MODE_ABS', 'SND_SEQ_TIME_MODE_REL', +'SND_SEQ_TIME_MODE_MASK', 'SND_SEQ_EVENT_LENGTH_FIXED', +'SND_SEQ_EVENT_LENGTH_VARIABLE', 'SND_SEQ_EVENT_LENGTH_VARUSR', +'SND_SEQ_EVENT_LENGTH_MASK', 'SND_SEQ_PRIORITY_NORMAL', +'SND_SEQ_PRIORITY_HIGH', 'SND_SEQ_PRIORITY_MASK', 'snd_seq_ev_note_t', +'snd_seq_ev_ctrl_t', 'snd_seq_ev_raw8_t', 'snd_seq_ev_raw32_t', +'snd_seq_ev_ext_t', 'snd_seq_instr_cluster_t', 'snd_seq_instr_t', +'snd_seq_ev_sample_t', 'snd_seq_ev_cluster_t', 'snd_seq_position_t', +'snd_seq_stop_mode_t', 'SND_SEQ_SAMPLE_STOP_IMMEDIATELY', +'SND_SEQ_SAMPLE_STOP_VENVELOPE', 'SND_SEQ_SAMPLE_STOP_LOOP', +'snd_seq_frequency_t', 'snd_seq_ev_volume_t', 'snd_seq_ev_loop_t', +'snd_seq_ev_sample_control_t', 'snd_seq_ev_instr_begin_t', 'snd_seq_result_t', +'snd_seq_queue_skew_t', 'snd_seq_ev_queue_control_t', 'snd_seq_event_t', +'SND_SEQ_DLSYM_VERSION', 'snd_seq_t', 'SND_SEQ_OPEN_OUTPUT', +'SND_SEQ_OPEN_INPUT', 'SND_SEQ_OPEN_DUPLEX', 'SND_SEQ_NONBLOCK', +'snd_seq_type_t', 'SND_SEQ_TYPE_HW', 'SND_SEQ_TYPE_SHM', 'SND_SEQ_TYPE_INET', +'SND_SEQ_ADDRESS_UNKNOWN', 'SND_SEQ_ADDRESS_SUBSCRIBERS', +'SND_SEQ_ADDRESS_BROADCAST', 'SND_SEQ_CLIENT_SYSTEM', 'snd_seq_open', +'snd_seq_open_lconf', 'snd_seq_name', 'snd_seq_type', 'snd_seq_close', +'snd_seq_poll_descriptors_count', 'snd_seq_poll_descriptors', +'snd_seq_poll_descriptors_revents', 'snd_seq_nonblock', 'snd_seq_client_id', +'snd_seq_get_output_buffer_size', 'snd_seq_get_input_buffer_size', +'snd_seq_set_output_buffer_size', 'snd_seq_set_input_buffer_size', +'snd_seq_system_info_t', 'snd_seq_system_info_sizeof', +'snd_seq_system_info_malloc', 'snd_seq_system_info_free', +'snd_seq_system_info_copy', 'snd_seq_system_info_get_queues', +'snd_seq_system_info_get_clients', 'snd_seq_system_info_get_ports', +'snd_seq_system_info_get_channels', 'snd_seq_system_info_get_cur_clients', +'snd_seq_system_info_get_cur_queues', 'snd_seq_system_info', +'snd_seq_client_info_t', 'snd_seq_client_type_t', 'SND_SEQ_USER_CLIENT', +'SND_SEQ_KERNEL_CLIENT', 'snd_seq_client_info_sizeof', +'snd_seq_client_info_malloc', 'snd_seq_client_info_free', +'snd_seq_client_info_copy', 'snd_seq_client_info_get_client', +'snd_seq_client_info_get_type', 'snd_seq_client_info_get_name', +'snd_seq_client_info_get_broadcast_filter', +'snd_seq_client_info_get_error_bounce', +'snd_seq_client_info_get_event_filter', 'snd_seq_client_info_get_num_ports', +'snd_seq_client_info_get_event_lost', 'snd_seq_client_info_set_client', +'snd_seq_client_info_set_name', 'snd_seq_client_info_set_broadcast_filter', +'snd_seq_client_info_set_error_bounce', +'snd_seq_client_info_set_event_filter', 'snd_seq_get_client_info', +'snd_seq_get_any_client_info', 'snd_seq_set_client_info', +'snd_seq_query_next_client', 'snd_seq_client_pool_t', +'snd_seq_client_pool_sizeof', 'snd_seq_client_pool_malloc', +'snd_seq_client_pool_free', 'snd_seq_client_pool_copy', +'snd_seq_client_pool_get_client', 'snd_seq_client_pool_get_output_pool', +'snd_seq_client_pool_get_input_pool', 'snd_seq_client_pool_get_output_room', +'snd_seq_client_pool_get_output_free', 'snd_seq_client_pool_get_input_free', +'snd_seq_client_pool_set_output_pool', 'snd_seq_client_pool_set_input_pool', +'snd_seq_client_pool_set_output_room', 'snd_seq_get_client_pool', +'snd_seq_set_client_pool', 'snd_seq_port_info_t', 'SND_SEQ_PORT_SYSTEM_TIMER', +'SND_SEQ_PORT_SYSTEM_ANNOUNCE', 'SND_SEQ_PORT_CAP_READ', +'SND_SEQ_PORT_CAP_WRITE', 'SND_SEQ_PORT_CAP_SYNC_READ', +'SND_SEQ_PORT_CAP_SYNC_WRITE', 'SND_SEQ_PORT_CAP_DUPLEX', +'SND_SEQ_PORT_CAP_SUBS_READ', 'SND_SEQ_PORT_CAP_SUBS_WRITE', +'SND_SEQ_PORT_CAP_NO_EXPORT', 'SND_SEQ_PORT_TYPE_SPECIFIC', +'SND_SEQ_PORT_TYPE_MIDI_GENERIC', 'SND_SEQ_PORT_TYPE_MIDI_GM', +'SND_SEQ_PORT_TYPE_MIDI_GS', 'SND_SEQ_PORT_TYPE_MIDI_XG', +'SND_SEQ_PORT_TYPE_MIDI_MT32', 'SND_SEQ_PORT_TYPE_MIDI_GM2', +'SND_SEQ_PORT_TYPE_SYNTH', 'SND_SEQ_PORT_TYPE_DIRECT_SAMPLE', +'SND_SEQ_PORT_TYPE_SAMPLE', 'SND_SEQ_PORT_TYPE_HARDWARE', +'SND_SEQ_PORT_TYPE_SOFTWARE', 'SND_SEQ_PORT_TYPE_SYNTHESIZER', +'SND_SEQ_PORT_TYPE_PORT', 'SND_SEQ_PORT_TYPE_APPLICATION', +'snd_seq_port_info_sizeof', 'snd_seq_port_info_malloc', +'snd_seq_port_info_free', 'snd_seq_port_info_copy', +'snd_seq_port_info_get_client', 'snd_seq_port_info_get_port', +'snd_seq_port_info_get_addr', 'snd_seq_port_info_get_name', +'snd_seq_port_info_get_capability', 'snd_seq_port_info_get_type', +'snd_seq_port_info_get_midi_channels', 'snd_seq_port_info_get_midi_voices', +'snd_seq_port_info_get_synth_voices', 'snd_seq_port_info_get_read_use', +'snd_seq_port_info_get_write_use', 'snd_seq_port_info_get_port_specified', +'snd_seq_port_info_get_timestamping', 'snd_seq_port_info_get_timestamp_real', +'snd_seq_port_info_get_timestamp_queue', 'snd_seq_port_info_set_client', +'snd_seq_port_info_set_port', 'snd_seq_port_info_set_addr', +'snd_seq_port_info_set_name', 'snd_seq_port_info_set_capability', +'snd_seq_port_info_set_type', 'snd_seq_port_info_set_midi_channels', +'snd_seq_port_info_set_midi_voices', 'snd_seq_port_info_set_synth_voices', +'snd_seq_port_info_set_port_specified', 'snd_seq_port_info_set_timestamping', +'snd_seq_port_info_set_timestamp_real', +'snd_seq_port_info_set_timestamp_queue', 'snd_seq_create_port', +'snd_seq_delete_port', 'snd_seq_get_port_info', 'snd_seq_get_any_port_info', +'snd_seq_set_port_info', 'snd_seq_query_next_port', +'snd_seq_port_subscribe_t', 'snd_seq_port_subscribe_sizeof', +'snd_seq_port_subscribe_malloc', 'snd_seq_port_subscribe_free', +'snd_seq_port_subscribe_copy', 'snd_seq_port_subscribe_get_sender', +'snd_seq_port_subscribe_get_dest', 'snd_seq_port_subscribe_get_queue', +'snd_seq_port_subscribe_get_exclusive', +'snd_seq_port_subscribe_get_time_update', +'snd_seq_port_subscribe_get_time_real', 'snd_seq_port_subscribe_set_sender', +'snd_seq_port_subscribe_set_dest', 'snd_seq_port_subscribe_set_queue', +'snd_seq_port_subscribe_set_exclusive', +'snd_seq_port_subscribe_set_time_update', +'snd_seq_port_subscribe_set_time_real', 'snd_seq_get_port_subscription', +'snd_seq_subscribe_port', 'snd_seq_unsubscribe_port', +'snd_seq_query_subscribe_t', 'snd_seq_query_subs_type_t', +'SND_SEQ_QUERY_SUBS_READ', 'SND_SEQ_QUERY_SUBS_WRITE', +'snd_seq_query_subscribe_sizeof', 'snd_seq_query_subscribe_malloc', +'snd_seq_query_subscribe_free', 'snd_seq_query_subscribe_copy', +'snd_seq_query_subscribe_get_client', 'snd_seq_query_subscribe_get_port', +'snd_seq_query_subscribe_get_root', 'snd_seq_query_subscribe_get_type', +'snd_seq_query_subscribe_get_index', 'snd_seq_query_subscribe_get_num_subs', +'snd_seq_query_subscribe_get_addr', 'snd_seq_query_subscribe_get_queue', +'snd_seq_query_subscribe_get_exclusive', +'snd_seq_query_subscribe_get_time_update', +'snd_seq_query_subscribe_get_time_real', 'snd_seq_query_subscribe_set_client', +'snd_seq_query_subscribe_set_port', 'snd_seq_query_subscribe_set_root', +'snd_seq_query_subscribe_set_type', 'snd_seq_query_subscribe_set_index', +'snd_seq_query_port_subscribers', 'snd_seq_queue_info_t', +'snd_seq_queue_status_t', 'snd_seq_queue_tempo_t', 'snd_seq_queue_timer_t', +'SND_SEQ_QUEUE_DIRECT', 'snd_seq_queue_info_sizeof', +'snd_seq_queue_info_malloc', 'snd_seq_queue_info_free', +'snd_seq_queue_info_copy', 'snd_seq_queue_info_get_queue', +'snd_seq_queue_info_get_name', 'snd_seq_queue_info_get_owner', +'snd_seq_queue_info_get_locked', 'snd_seq_queue_info_get_flags', +'snd_seq_queue_info_set_name', 'snd_seq_queue_info_set_owner', +'snd_seq_queue_info_set_locked', 'snd_seq_queue_info_set_flags', +'snd_seq_create_queue', 'snd_seq_alloc_named_queue', 'snd_seq_alloc_queue', +'snd_seq_free_queue', 'snd_seq_get_queue_info', 'snd_seq_set_queue_info', +'snd_seq_query_named_queue', 'snd_seq_get_queue_usage', +'snd_seq_set_queue_usage', 'snd_seq_queue_status_sizeof', +'snd_seq_queue_status_malloc', 'snd_seq_queue_status_free', +'snd_seq_queue_status_copy', 'snd_seq_queue_status_get_queue', +'snd_seq_queue_status_get_events', 'snd_seq_queue_status_get_tick_time', +'snd_seq_queue_status_get_real_time', 'snd_seq_queue_status_get_status', +'snd_seq_get_queue_status', 'snd_seq_queue_tempo_sizeof', +'snd_seq_queue_tempo_malloc', 'snd_seq_queue_tempo_free', +'snd_seq_queue_tempo_copy', 'snd_seq_queue_tempo_get_queue', +'snd_seq_queue_tempo_get_tempo', 'snd_seq_queue_tempo_get_ppq', +'snd_seq_queue_tempo_get_skew', 'snd_seq_queue_tempo_get_skew_base', +'snd_seq_queue_tempo_set_tempo', 'snd_seq_queue_tempo_set_ppq', +'snd_seq_queue_tempo_set_skew', 'snd_seq_queue_tempo_set_skew_base', +'snd_seq_get_queue_tempo', 'snd_seq_set_queue_tempo', +'snd_seq_queue_timer_type_t', 'SND_SEQ_TIMER_ALSA', +'SND_SEQ_TIMER_MIDI_CLOCK', 'SND_SEQ_TIMER_MIDI_TICK', +'snd_seq_queue_timer_sizeof', 'snd_seq_queue_timer_malloc', +'snd_seq_queue_timer_free', 'snd_seq_queue_timer_copy', +'snd_seq_queue_timer_get_queue', 'snd_seq_queue_timer_get_type', +'snd_seq_queue_timer_get_id', 'snd_seq_queue_timer_get_resolution', +'snd_seq_queue_timer_set_type', 'snd_seq_queue_timer_set_id', +'snd_seq_queue_timer_set_resolution', 'snd_seq_get_queue_timer', +'snd_seq_set_queue_timer', 'snd_seq_free_event', 'snd_seq_event_length', +'snd_seq_event_output', 'snd_seq_event_output_buffer', +'snd_seq_event_output_direct', 'snd_seq_event_input', +'snd_seq_event_input_pending', 'snd_seq_drain_output', +'snd_seq_event_output_pending', 'snd_seq_extract_output', +'snd_seq_drop_output', 'snd_seq_drop_output_buffer', 'snd_seq_drop_input', +'snd_seq_drop_input_buffer', 'snd_seq_remove_events_t', +'SND_SEQ_REMOVE_INPUT', 'SND_SEQ_REMOVE_OUTPUT', 'SND_SEQ_REMOVE_DEST', +'SND_SEQ_REMOVE_DEST_CHANNEL', 'SND_SEQ_REMOVE_TIME_BEFORE', +'SND_SEQ_REMOVE_TIME_AFTER', 'SND_SEQ_REMOVE_TIME_TICK', +'SND_SEQ_REMOVE_EVENT_TYPE', 'SND_SEQ_REMOVE_IGNORE_OFF', +'SND_SEQ_REMOVE_TAG_MATCH', 'snd_seq_remove_events_sizeof', +'snd_seq_remove_events_malloc', 'snd_seq_remove_events_free', +'snd_seq_remove_events_copy', 'snd_seq_remove_events_get_condition', +'snd_seq_remove_events_get_queue', 'snd_seq_remove_events_get_time', +'snd_seq_remove_events_get_dest', 'snd_seq_remove_events_get_channel', +'snd_seq_remove_events_get_event_type', 'snd_seq_remove_events_get_tag', +'snd_seq_remove_events_set_condition', 'snd_seq_remove_events_set_queue', +'snd_seq_remove_events_set_time', 'snd_seq_remove_events_set_dest', +'snd_seq_remove_events_set_channel', 'snd_seq_remove_events_set_event_type', +'snd_seq_remove_events_set_tag', 'snd_seq_remove_events', 'snd_seq_set_bit', +'snd_seq_change_bit', 'snd_seq_get_bit', 'snd_seq_control_queue', +'snd_seq_create_simple_port', 'snd_seq_delete_simple_port', +'snd_seq_connect_from', 'snd_seq_connect_to', 'snd_seq_disconnect_from', +'snd_seq_disconnect_to', 'snd_seq_set_client_name', +'snd_seq_set_client_event_filter', 'snd_seq_set_client_pool_output', +'snd_seq_set_client_pool_output_room', 'snd_seq_set_client_pool_input', +'snd_seq_sync_output_queue', 'snd_seq_parse_address', +'snd_seq_reset_pool_output', 'snd_seq_reset_pool_input', 'snd_midi_event_t', +'snd_midi_event_new', 'snd_midi_event_resize_buffer', 'snd_midi_event_free', +'snd_midi_event_init', 'snd_midi_event_reset_encode', +'snd_midi_event_reset_decode', 'snd_midi_event_no_status', +'snd_midi_event_encode', 'snd_midi_event_encode_byte', +'snd_midi_event_decode', 'snd_instr_header_t', 'snd_instr_header_sizeof', +'snd_instr_header_malloc', 'snd_instr_header_free', 'snd_instr_header_copy', +'snd_instr_header_get_id', 'snd_instr_header_get_cluster', +'snd_instr_header_get_cmd', 'snd_instr_header_get_len', +'snd_instr_header_get_name', 'snd_instr_header_get_type', +'snd_instr_header_get_format', 'snd_instr_header_get_alias', +'snd_instr_header_get_data', 'snd_instr_header_get_follow_alias', +'snd_instr_header_set_id', 'snd_instr_header_set_cluster', +'snd_instr_header_set_cmd', 'snd_instr_header_set_len', +'snd_instr_header_set_name', 'snd_instr_header_set_type', +'snd_instr_header_set_format', 'snd_instr_header_set_alias', +'snd_instr_header_set_follow_alias', 'SND_SEQ_INSTR_ATYPE_DATA', +'SND_SEQ_INSTR_ATYPE_ALIAS', 'SND_SEQ_INSTR_TYPE0_DLS1', +'SND_SEQ_INSTR_TYPE0_DLS2', 'SND_SEQ_INSTR_TYPE1_SIMPLE', +'SND_SEQ_INSTR_TYPE1_SOUNDFONT', 'SND_SEQ_INSTR_TYPE1_GUS_PATCH', +'SND_SEQ_INSTR_TYPE1_INTERWAVE', 'SND_SEQ_INSTR_TYPE2_OPL2_3', +'SND_SEQ_INSTR_TYPE2_OPL4', 'SND_SEQ_INSTR_PUT_CMD_CREATE', +'SND_SEQ_INSTR_PUT_CMD_REPLACE', 'SND_SEQ_INSTR_PUT_CMD_MODIFY', +'SND_SEQ_INSTR_PUT_CMD_ADD', 'SND_SEQ_INSTR_PUT_CMD_REMOVE', +'SND_SEQ_INSTR_GET_CMD_FULL', 'SND_SEQ_INSTR_GET_CMD_PARTIAL', +'SND_SEQ_INSTR_QUERY_FOLLOW_ALIAS', 'SND_SEQ_INSTR_FREE_CMD_ALL', +'SND_SEQ_INSTR_FREE_CMD_PRIVATE', 'SND_SEQ_INSTR_FREE_CMD_CLUSTER', +'SND_SEQ_INSTR_FREE_CMD_SINGLE', 'snd_instr_fm_t', +'snd_instr_fm_convert_to_stream', 'snd_instr_fm_convert_from_stream', +'snd_instr_fm_free', 'snd_instr_simple_t', +'snd_instr_simple_convert_to_stream', 'snd_instr_simple_convert_from_stream', +'snd_instr_simple_free', 'snd_instr_iwffff_t', 'snd_iwffff_handle_t', +'snd_instr_iwffff_open', 'snd_instr_iwffff_open_rom', +'snd_instr_iwffff_open_rom_file', 'snd_instr_iwffff_close', +'snd_instr_iwffff_load', 'snd_instr_iwffff_convert_to_stream', +'snd_instr_iwffff_convert_from_stream', 'snd_instr_iwffff_free'] diff --git a/pyglet/media/drivers/directsound/__init__.py b/pyglet/media/drivers/directsound/__init__.py new file mode 100644 index 0000000..07a0a6d --- /dev/null +++ b/pyglet/media/drivers/directsound/__init__.py @@ -0,0 +1,394 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''Windows DirectSound audio implementation. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: $' + +import ctypes +import math +import time + +from pyglet.media import AudioPlayer, Listener, MediaException + +from pyglet.media.drivers.directsound import lib_dsound as lib +from pyglet.window.win32 import _user32 + +class DirectSoundException(MediaException): + pass + +def _db(gain): + '''Convert linear gain in range [0.0, 1.0] to 100ths of dB.''' + if gain <= 0: + return -10000 + return max(-10000, min(int(1000 * math.log(min(gain, 1))), 0)) + +class DirectSoundAudioPlayer(AudioPlayer): + _buffer_size = 44800 * 1 + _update_buffer_size = _buffer_size // 4 + _buffer_size_secs = None + + _cone_inner_angle = 360 + _cone_outer_angle = 360 + + UPDATE_PERIOD = 0.05 + + def __init__(self, audio_format): + super(DirectSoundAudioPlayer, self).__init__(audio_format) + + self._playing = False + self._timestamp = 0. + + self._buffer = None + self._buffer_playing = False + self._data_size = 0 # amount of buffer filled by this player + self._play_cursor = 0 + self._buffer_time = 0. # ts of buffer at buffer_time_pos + self._buffer_time_pos = 0 + self._write_cursor = 0 + self._timestamps = [] + self._eos_count = 0 + self._dirty_size = 0 + + wfx = lib.WAVEFORMATEX() + wfx.wFormatTag = lib.WAVE_FORMAT_PCM + wfx.nChannels = audio_format.channels + wfx.nSamplesPerSec = audio_format.sample_rate + wfx.wBitsPerSample = audio_format.sample_size + wfx.nBlockAlign = wfx.wBitsPerSample * wfx.nChannels // 8 + wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign + + dsbdesc = lib.DSBUFFERDESC() + dsbdesc.dwSize = ctypes.sizeof(dsbdesc) + dsbdesc.dwFlags = (lib.DSBCAPS_GLOBALFOCUS | + lib.DSBCAPS_GETCURRENTPOSITION2 | + lib.DSBCAPS_CTRLFREQUENCY | + lib.DSBCAPS_CTRLVOLUME) + if audio_format.channels == 1: + dsbdesc.dwFlags |= lib.DSBCAPS_CTRL3D + dsbdesc.dwBufferBytes = self._buffer_size + dsbdesc.lpwfxFormat = ctypes.pointer(wfx) + + self._buffer = lib.IDirectSoundBuffer() + dsound.CreateSoundBuffer(dsbdesc, ctypes.byref(self._buffer), None) + + if audio_format.channels == 1: + self._buffer3d = lib.IDirectSound3DBuffer() + self._buffer.QueryInterface(lib.IID_IDirectSound3DBuffer, + ctypes.byref(self._buffer3d)) + else: + self._buffer3d = None + + self._buffer_size_secs = \ + self._buffer_size / float(audio_format.bytes_per_second) + self._buffer.SetCurrentPosition(0) + + def __del__(self): + try: + self._buffer.Stop() + self._buffer.Release() + if self._buffer3d: + self._buffer3d.Release() + except: + pass + + def get_write_size(self): + if self._data_size < self._buffer_size: + return self._buffer_size - self._data_size + + play_cursor = self._play_cursor + if self._write_cursor == play_cursor and self._buffer_playing: + # Polling too fast, no play cursor movement + return 0 + elif self._write_cursor == play_cursor and not self._playing: + # Paused and up-to-date + return 0 + elif self._write_cursor < play_cursor: + # Play cursor ahead of write cursor + write_size = play_cursor - self._write_cursor + else: + # Play cursor behind write cursor, wraps around + write_size = self._buffer_size - self._write_cursor + play_cursor + + if write_size < self._update_buffer_size and not self._dirty_size: + return 0 + + return write_size + + def write(self, audio_data, length=None): + # Pass audio_data=None, length>0 to write silence + if length is None: + write_size = self.get_write_size() + length = min(audio_data.length, write_size) + if length == 0: + return 0 + + if self._data_size < self._buffer_size: + self._data_size = min(self._data_size + length, self._buffer_size) + + p1 = ctypes.c_void_p() + l1 = lib.DWORD() + p2 = ctypes.c_void_p() + l2 = lib.DWORD() + self._buffer.Lock(self._write_cursor, length, + ctypes.byref(p1), l1, ctypes.byref(p2), l2, 0) + assert length == l1.value + l2.value + + if audio_data: + if self._write_cursor >= self._play_cursor: + wc = self._write_cursor + else: + wc = self._write_cursor + self._buffer_size + self._timestamps.append((wc, audio_data.timestamp)) + + ctypes.memmove(p1, audio_data.data, l1.value) + audio_data.consume(l1.value, self.audio_format) + if l2.value: + ctypes.memmove(p2, audio_data.data, l2.value) + audio_data.consume(l2.value, self.audio_format) + else: + ctypes.memset(p1, 0, l1.value) + if l2.value: + ctypes.memset(p2, 0, l2.value) + pass + self._buffer.Unlock(p1, l1, p2, l2) + + self._write_cursor += length + self._write_cursor %= self._buffer_size + + def write_eos(self): + if self._write_cursor > self._play_cursor: + wc = self._write_cursor + else: + wc = self._write_cursor + self._buffer_size + self._timestamps.append((wc, 'eos')) + + def write_end(self): + if not self._dirty_size: + self._dirty_size = self._buffer_size + + def pump(self): + # Update play cursor, check for wraparound and EOS markers + play_cursor = lib.DWORD() + self._buffer.GetCurrentPosition(play_cursor, None) + if play_cursor.value < self._play_cursor: + # Wrapped around + self._buffer_time_pos -= self._buffer_size + self._timestamps = \ + [(a - self._buffer_size, t) for a, t in self._timestamps] + self._play_cursor = play_cursor.value + + try: + while self._timestamps[0][0] < self._play_cursor: + pos, timestamp = self._timestamps.pop(0) + if timestamp == 'eos': + self._eos_count += 1 + else: + self._buffer_time = timestamp + self._buffer_time_pos = pos + except IndexError: + pass + + self._timestamp = self._buffer_time + \ + (self._play_cursor - self._buffer_time_pos) \ + / float(self.audio_format.bytes_per_second) + + # Write silence + if self._dirty_size: + write_size = self.get_write_size() + length = min(write_size, self._dirty_size) + self.write(None, length) + self._dirty_size -= length + if self._dirty_size < 0: + self._dirty_size = 0 + + if self._playing and not self._buffer_playing: + self._buffer.Play(0, 0, lib.DSBPLAY_LOOPING) + self._buffer_playing = True + + def get_time(self): + return self._timestamp + + def play(self): + if self._playing: + return + + self._playing = True + + self._buffer.Play(0, 0, lib.DSBPLAY_LOOPING) + self._buffer_playing = True + + def stop(self): + if not self._playing: + return + + self._playing = False + + self._buffer.Stop() + self._buffer_playing = False + + def clear(self): + self._eos_count = 0 + self._timestamps = [] + self._write_cursor = 0 + self._buffer.SetCurrentPosition(0) + self._buffer_time = 0. + self._buffer_time_pos = 0 + self._data_size = 0 + + def clear_eos(self): + if self._eos_count > 0: + self._eos_count -= 1 + return True + return False + + def _get_source(self): + if self._sources: + return self._sources[0] + return None + + def set_volume(self, volume): + volume = _db(volume) + self._buffer.SetVolume(volume) + + def set_position(self, position): + if self._buffer3d: + x, y, z = position + self._buffer3d.SetPosition(x, y, -z, lib.DS3D_IMMEDIATE) + + def set_min_distance(self, min_distance): + if self._buffer3d: + self._buffer3d.SetMinDistance(min_distance, lib.DS3D_IMMEDIATE) + + def set_max_distance(self, max_distance): + if self._buffer3d: + self._buffer3d.SetMaxDistance(max_distance, lib.DS3D_IMMEDIATE) + + def set_pitch(self, pitch): + frequency = int(pitch * self.audio_format.sample_rate) + self._buffer.SetFrequency(frequency) + + def set_cone_orientation(self, cone_orientation): + if self._buffer3d: + x, y, z = cone_orientation + self._buffer3d.SetConeOrientation(x, y, -z, lib.DS3D_IMMEDIATE) + + def set_cone_inner_angle(self, cone_inner_angle): + if self._buffer3d: + self._cone_inner_angle = int(cone_inner_angle) + self._set_cone_angles() + + def set_cone_outer_angle(self, cone_outer_angle): + if self._buffer3d: + self._cone_outer_angle = int(cone_outer_angle) + self._set_cone_angles() + + def _set_cone_angles(self): + inner = min(self._cone_inner_angle, self._cone_outer_angle) + outer = max(self._cone_inner_angle, self._cone_outer_angle) + self._buffer3d.SetConeAngles(inner, outer, lib.DS3D_IMMEDIATE) + + def set_cone_outer_gain(self, cone_outer_gain): + if self._buffer3d: + volume = _db(cone_outer_gain) + self._buffer3d.SetConeOutsideVolume(volume, lib.DS3D_IMMEDIATE) + +class DirectSoundListener(Listener): + def _init(self): + # Called after driver_init() + self._buffer = lib.IDirectSoundBuffer() + dsbd = lib.DSBUFFERDESC() + dsbd.dwSize = ctypes.sizeof(dsbd) + dsbd.dwFlags = (lib.DSBCAPS_CTRL3D | + lib.DSBCAPS_CTRLVOLUME | + lib.DSBCAPS_PRIMARYBUFFER) + dsound.CreateSoundBuffer(dsbd, ctypes.byref(self._buffer), None) + + self._listener = lib.IDirectSound3DListener() + self._buffer.QueryInterface(lib.IID_IDirectSound3DListener, + ctypes.byref(self._listener)) + + + def __del__(self): + try: + self._buffer.Release() + self._listener.Release() + except: + pass + + def _set_volume(self, volume): + self._volume = volume + self._buffer.SetVolume(_db(volume)) + + def _set_position(self, position): + self._position = position + x, y, z = position + self._listener.SetPosition(x, y, -z, lib.DS3D_IMMEDIATE) + + def _set_forward_orientation(self, orientation): + self._forward_orientation = orientation + self._set_orientation() + + def _set_up_orientation(self, orientation): + self._up_orientation = orientation + self._set_orientation() + + def _set_orientation(self): + x, y, z = self._forward_orientation + ux, uy, uz = self._up_orientation + self._listener.SetOrientation(x, y, -z, ux, uy, -uz, lib.DS3D_IMMEDIATE) + +dsound = None +def driver_init(): + global dsound + dsound = lib.IDirectSound() + lib.DirectSoundCreate(None, ctypes.byref(dsound), None) + + # A trick used by mplayer.. use desktop as window handle since it would + # be complex to use pyglet window handles (and what to do when application + # is audio only?). + hwnd = _user32.GetDesktopWindow() + dsound.SetCooperativeLevel(hwnd, lib.DSSCL_NORMAL) + + driver_listener._init() + + # Force a context switch, as some Windows audio drivers don't get time + # to process short sounds if Python hogs all the CPU. See issue #163. + from pyglet import clock + clock.Clock._force_sleep = True + +driver_listener = DirectSoundListener() +driver_audio_player_class = DirectSoundAudioPlayer diff --git a/pyglet/media/drivers/directsound/lib_dsound.py b/pyglet/media/drivers/directsound/lib_dsound.py new file mode 100644 index 0000000..40b9a90 --- /dev/null +++ b/pyglet/media/drivers/directsound/lib_dsound.py @@ -0,0 +1,408 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +# $Id:$ + +import ctypes +from pyglet import com + +lib = ctypes.oledll.dsound + +DWORD = ctypes.c_uint32 +LPDWORD = ctypes.POINTER(DWORD) +LONG = ctypes.c_long +LPLONG = ctypes.POINTER(LONG) +WORD = ctypes.c_uint16 +HWND = DWORD +LPUNKNOWN = ctypes.c_void_p + +D3DVALUE = ctypes.c_float +PD3DVALUE = ctypes.POINTER(D3DVALUE) + +class D3DVECTOR(ctypes.Structure): + _fields_ = [ + ('x', ctypes.c_float), + ('y', ctypes.c_float), + ('z', ctypes.c_float), + ] +PD3DVECTOR = ctypes.POINTER(D3DVECTOR) + +class WAVEFORMATEX(ctypes.Structure): + _fields_ = [ + ('wFormatTag', WORD), + ('nChannels', WORD), + ('nSamplesPerSec', DWORD), + ('nAvgBytesPerSec', DWORD), + ('nBlockAlign', WORD), + ('wBitsPerSample', WORD), + ('cbSize', WORD), + ] +LPWAVEFORMATEX = ctypes.POINTER(WAVEFORMATEX) +WAVE_FORMAT_PCM = 1 + +class DSCAPS(ctypes.Structure): + _fields_ = [ + ('dwSize', DWORD), + ('dwFlags', DWORD), + ('dwMinSecondarySampleRate', DWORD), + ('dwMaxSecondarySampleRate', DWORD), + ('dwPrimaryBuffers', DWORD), + ('dwMaxHwMixingAllBuffers', DWORD), + ('dwMaxHwMixingStaticBuffers', DWORD), + ('dwMaxHwMixingStreamingBuffers', DWORD), + ('dwFreeHwMixingAllBuffers', DWORD), + ('dwFreeHwMixingStaticBuffers', DWORD), + ('dwFreeHwMixingStreamingBuffers', DWORD), + ('dwMaxHw3DAllBuffers', DWORD), + ('dwMaxHw3DStaticBuffers', DWORD), + ('dwMaxHw3DStreamingBuffers', DWORD), + ('dwFreeHw3DAllBuffers', DWORD), + ('dwFreeHw3DStaticBuffers', DWORD), + ('dwFreeHw3DStreamingBuffers', DWORD), + ('dwTotalHwMemBytes', DWORD), + ('dwFreeHwMemBytes', DWORD), + ('dwMaxContigFreeHwMemBytes', DWORD), + ('dwUnlockTransferRateHwBuffers', DWORD), + ('dwPlayCpuOverheadSwBuffers', DWORD), + ('dwReserved1', DWORD), + ('dwReserved2', DWORD) + ] +LPDSCAPS = ctypes.POINTER(DSCAPS) + +class DSBCAPS(ctypes.Structure): + _fields_ = [ + ('dwSize', DWORD), + ('dwFlags', DWORD), + ('dwBufferBytes', DWORD), + ('dwUnlockTransferRate', DWORD), + ('dwPlayCpuOverhead', DWORD), + ] +LPDSBCAPS = ctypes.POINTER(DSBCAPS) + +class DSBUFFERDESC(ctypes.Structure): + _fields_ = [ + ('dwSize', DWORD), + ('dwFlags', DWORD), + ('dwBufferBytes', DWORD), + ('dwReserved', DWORD), + ('lpwfxFormat', LPWAVEFORMATEX), + ] +LPDSBUFFERDESC = ctypes.POINTER(DSBUFFERDESC) + +class DS3DBUFFER(ctypes.Structure): + _fields_ = [ + ('dwSize', DWORD), + ('vPosition', D3DVECTOR), + ('vVelocity', D3DVECTOR), + ('dwInsideConeAngle', DWORD), + ('dwOutsideConeAngle', DWORD), + ('vConeOrientation', D3DVECTOR), + ('lConeOutsideVolume', LONG), + ('flMinDistance', D3DVALUE), + ('flMaxDistance', D3DVALUE), + ('dwMode', DWORD), + ] +LPDS3DBUFFER = ctypes.POINTER(DS3DBUFFER) + +class DS3DLISTENER(ctypes.Structure): + _fields_ = [ + ('dwSize', DWORD), + ('vPosition', D3DVECTOR), + ('vVelocity', D3DVECTOR), + ('vOrientFront', D3DVECTOR), + ('vOrientTop', D3DVECTOR), + ('flDistanceFactor', D3DVALUE), + ('flRolloffFactor', D3DVALUE), + ('flDopplerFactor', D3DVALUE), + ] +LPDS3DLISTENER = ctypes.POINTER(DS3DLISTENER) + +class IDirectSoundBuffer(com.IUnknown): + _methods_ = [ + ('GetCaps', + com.STDMETHOD(LPDSBCAPS)), + ('GetCurrentPosition', + com.STDMETHOD(LPDWORD, LPDWORD)), + ('GetFormat', + com.STDMETHOD(LPWAVEFORMATEX, DWORD, LPDWORD)), + ('GetVolume', + com.STDMETHOD(LPLONG)), + ('GetPan', + com.STDMETHOD(LPLONG)), + ('GetFrequency', + com.STDMETHOD(LPDWORD)), + ('GetStatus', + com.STDMETHOD(LPDWORD)), + ('Initialize', + com.STDMETHOD(ctypes.c_void_p, LPDSBUFFERDESC)), + ('Lock', + com.STDMETHOD(DWORD, DWORD, + ctypes.POINTER(ctypes.c_void_p), LPDWORD, + ctypes.POINTER(ctypes.c_void_p), LPDWORD, + DWORD)), + ('Play', + com.STDMETHOD(DWORD, DWORD, DWORD)), + ('SetCurrentPosition', + com.STDMETHOD(DWORD)), + ('SetFormat', + com.STDMETHOD(LPWAVEFORMATEX)), + ('SetVolume', + com.STDMETHOD(LONG)), + ('SetPan', + com.STDMETHOD(LONG)), + ('SetFrequency', + com.STDMETHOD(DWORD)), + ('Stop', + com.STDMETHOD()), + ('Unlock', + com.STDMETHOD(ctypes.c_void_p, DWORD, ctypes.c_void_p, DWORD)), + ('Restore', + com.STDMETHOD()), + ] + +IID_IDirectSound3DListener = com.GUID( + 0x279AFA84, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60) + +class IDirectSound3DListener(com.IUnknown): + _methods_ = [ + ('GetAllParameters', + com.STDMETHOD(LPDS3DLISTENER)), + ('GetDistanceFactor', + com.STDMETHOD(PD3DVALUE)), + ('GetDopplerFactor', + com.STDMETHOD(PD3DVALUE)), + ('GetOrientation', + com.STDMETHOD(PD3DVECTOR)), + ('GetPosition', + com.STDMETHOD(PD3DVECTOR)), + ('GetRolloffFactor', + com.STDMETHOD(PD3DVALUE)), + ('GetVelocity', + com.STDMETHOD(PD3DVECTOR)), + ('SetAllParameters', + com.STDMETHOD(LPDS3DLISTENER)), + ('SetDistanceFactor', + com.STDMETHOD(D3DVALUE, DWORD)), + ('SetDopplerFactor', + com.STDMETHOD(D3DVALUE, DWORD)), + ('SetOrientation', + com.STDMETHOD(D3DVALUE, D3DVALUE, D3DVALUE, + D3DVALUE, D3DVALUE, D3DVALUE, DWORD)), + ('SetPosition', + com.STDMETHOD(D3DVALUE, D3DVALUE, D3DVALUE, DWORD)), + ('SetRolloffFactor', + com.STDMETHOD(D3DVALUE, DWORD)), + ('SetVelocity', + com.STDMETHOD(D3DVALUE, D3DVALUE, D3DVALUE, DWORD)), + ('CommitDeferredSettings', + com.STDMETHOD()), + ] + +IID_IDirectSound3DBuffer = com.GUID( + 0x279AFA86, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60) + +class IDirectSound3DBuffer(com.IUnknown): + _methods_ = [ + ('GetAllParameters', + com.STDMETHOD(LPDS3DBUFFER)), + ('GetConeAngles', + com.STDMETHOD(LPDWORD, LPDWORD)), + ('GetConeOrientation', + com.STDMETHOD(PD3DVECTOR)), + ('GetConeOutsideVolume', + com.STDMETHOD(LPLONG)), + ('GetMaxDistance', + com.STDMETHOD(PD3DVALUE)), + ('GetMinDistance', + com.STDMETHOD(PD3DVALUE)), + ('GetMode', + com.STDMETHOD(LPDWORD)), + ('GetPosition', + com.STDMETHOD(PD3DVECTOR)), + ('GetVelocity', + com.STDMETHOD(PD3DVECTOR)), + ('SetAllParameters', + com.STDMETHOD(LPDS3DBUFFER, DWORD)), + ('SetConeAngles', + com.STDMETHOD(DWORD, DWORD, DWORD)), + ('SetConeOrientation', + com.STDMETHOD(D3DVALUE, D3DVALUE, D3DVALUE, DWORD)), + ('SetConeOutsideVolume', + com.STDMETHOD(LONG, DWORD)), + ('SetMaxDistance', + com.STDMETHOD(D3DVALUE, DWORD)), + ('SetMinDistance', + com.STDMETHOD(D3DVALUE, DWORD)), + ('SetMode', + com.STDMETHOD(DWORD, DWORD)), + ('SetPosition', + com.STDMETHOD(D3DVALUE, D3DVALUE, D3DVALUE, DWORD)), + ('SetVelocity', + com.STDMETHOD(D3DVALUE, D3DVALUE, D3DVALUE, DWORD)), + ] + +class IDirectSound(com.IUnknown): + _methods_ = [ + ('CreateSoundBuffer', + com.STDMETHOD(LPDSBUFFERDESC, + ctypes.POINTER(IDirectSoundBuffer), + LPUNKNOWN)), + ('GetCaps', + com.STDMETHOD(LPDSCAPS)), + ('DuplicateSoundBuffer', + com.STDMETHOD(IDirectSoundBuffer, + ctypes.POINTER(IDirectSoundBuffer))), + ('SetCooperativeLevel', + com.STDMETHOD(HWND, DWORD)), + ('Compact', + com.STDMETHOD()), + ('GetSpeakerConfig', + com.STDMETHOD(LPDWORD)), + ('SetSpeakerConfig', + com.STDMETHOD(DWORD)), + ('Initialize', + com.STDMETHOD(com.LPGUID)), + ] + _type_ = com.COMInterface + +DirectSoundCreate = lib.DirectSoundCreate +DirectSoundCreate.argtypes = \ + [com.LPGUID, ctypes.POINTER(IDirectSound), ctypes.c_void_p] + +DSCAPS_PRIMARYMONO = 0x00000001 +DSCAPS_PRIMARYSTEREO = 0x00000002 +DSCAPS_PRIMARY8BIT = 0x00000004 +DSCAPS_PRIMARY16BIT = 0x00000008 +DSCAPS_CONTINUOUSRATE = 0x00000010 +DSCAPS_EMULDRIVER = 0x00000020 +DSCAPS_CERTIFIED = 0x00000040 +DSCAPS_SECONDARYMONO = 0x00000100 +DSCAPS_SECONDARYSTEREO = 0x00000200 +DSCAPS_SECONDARY8BIT = 0x00000400 +DSCAPS_SECONDARY16BIT = 0x00000800 + +DSSCL_NORMAL = 0x00000001 +DSSCL_PRIORITY = 0x00000002 +DSSCL_EXCLUSIVE = 0x00000003 +DSSCL_WRITEPRIMARY = 0x00000004 + +DSSPEAKER_DIRECTOUT = 0x00000000 +DSSPEAKER_HEADPHONE = 0x00000001 +DSSPEAKER_MONO = 0x00000002 +DSSPEAKER_QUAD = 0x00000003 +DSSPEAKER_STEREO = 0x00000004 +DSSPEAKER_SURROUND = 0x00000005 +DSSPEAKER_5POINT1 = 0x00000006 +DSSPEAKER_7POINT1 = 0x00000007 + +DSSPEAKER_GEOMETRY_MIN = 0x00000005 # 5 degrees +DSSPEAKER_GEOMETRY_NARROW = 0x0000000A # 10 degrees +DSSPEAKER_GEOMETRY_WIDE = 0x00000014 # 20 degrees +DSSPEAKER_GEOMETRY_MAX = 0x000000B4 # 180 degrees + +DSBCAPS_PRIMARYBUFFER = 0x00000001 +DSBCAPS_STATIC = 0x00000002 +DSBCAPS_LOCHARDWARE = 0x00000004 +DSBCAPS_LOCSOFTWARE = 0x00000008 +DSBCAPS_CTRL3D = 0x00000010 +DSBCAPS_CTRLFREQUENCY = 0x00000020 +DSBCAPS_CTRLPAN = 0x00000040 +DSBCAPS_CTRLVOLUME = 0x00000080 +DSBCAPS_CTRLPOSITIONNOTIFY = 0x00000100 +DSBCAPS_CTRLFX = 0x00000200 +DSBCAPS_STICKYFOCUS = 0x00004000 +DSBCAPS_GLOBALFOCUS = 0x00008000 +DSBCAPS_GETCURRENTPOSITION2 = 0x00010000 +DSBCAPS_MUTE3DATMAXDISTANCE = 0x00020000 +DSBCAPS_LOCDEFER = 0x00040000 + +DSBPLAY_LOOPING = 0x00000001 +DSBPLAY_LOCHARDWARE = 0x00000002 +DSBPLAY_LOCSOFTWARE = 0x00000004 +DSBPLAY_TERMINATEBY_TIME = 0x00000008 +DSBPLAY_TERMINATEBY_DISTANCE = 0x000000010 +DSBPLAY_TERMINATEBY_PRIORITY = 0x000000020 + +DSBSTATUS_PLAYING = 0x00000001 +DSBSTATUS_BUFFERLOST = 0x00000002 +DSBSTATUS_LOOPING = 0x00000004 +DSBSTATUS_LOCHARDWARE = 0x00000008 +DSBSTATUS_LOCSOFTWARE = 0x00000010 +DSBSTATUS_TERMINATED = 0x00000020 + +DSBLOCK_FROMWRITECURSOR = 0x00000001 +DSBLOCK_ENTIREBUFFER = 0x00000002 + +DSBFREQUENCY_MIN = 100 +DSBFREQUENCY_MAX = 100000 +DSBFREQUENCY_ORIGINAL = 0 + +DSBPAN_LEFT = -10000 +DSBPAN_CENTER = 0 +DSBPAN_RIGHT = 10000 + +DSBVOLUME_MIN = -10000 +DSBVOLUME_MAX = 0 + +DSBSIZE_MIN = 4 +DSBSIZE_MAX = 0x0FFFFFFF +DSBSIZE_FX_MIN = 150 # NOTE: Milliseconds, not bytes + +DS3DMODE_NORMAL = 0x00000000 +DS3DMODE_HEADRELATIVE = 0x00000001 +DS3DMODE_DISABLE = 0x00000002 + +DS3D_IMMEDIATE = 0x00000000 +DS3D_DEFERRED = 0x00000001 + +DS3D_MINDISTANCEFACTOR = -1000000.0 # XXX FLT_MIN +DS3D_MAXDISTANCEFACTOR = 1000000.0 # XXX FLT_MAX +DS3D_DEFAULTDISTANCEFACTOR = 1.0 + +DS3D_MINROLLOFFFACTOR = 0.0 +DS3D_MAXROLLOFFFACTOR = 10.0 +DS3D_DEFAULTROLLOFFFACTOR = 1.0 + +DS3D_MINDOPPLERFACTOR = 0.0 +DS3D_MAXDOPPLERFACTOR = 10.0 +DS3D_DEFAULTDOPPLERFACTOR = 1.0 + +DS3D_DEFAULTMINDISTANCE = 1.0 +DS3D_DEFAULTMAXDISTANCE = 1000000000.0 + +DS3D_MINCONEANGLE = 0 +DS3D_MAXCONEANGLE = 360 +DS3D_DEFAULTCONEANGLE = 360 + +DS3D_DEFAULTCONEOUTSIDEVOLUME = DSBVOLUME_MAX + diff --git a/pyglet/media/drivers/openal/__init__.py b/pyglet/media/drivers/openal/__init__.py new file mode 100644 index 0000000..a6111cd --- /dev/null +++ b/pyglet/media/drivers/openal/__init__.py @@ -0,0 +1,360 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +# $Id: __init__.py 2270 2008-09-21 08:01:58Z Alex.Holkner $ + +import ctypes +import sys +import time + +from pyglet.media import AudioPlayer, Listener, MediaException + +from pyglet.media.drivers.openal import lib_openal as al +from pyglet.media.drivers.openal import lib_alc as alc + +class OpenALException(MediaException): + pass + +def _split_nul_strings(s): + # NUL-separated list of strings, double-NUL-terminated. + nul = False + i = 0 + while True: + if s[i] == '\0': + if nul: + break + else: + nul = True + else: + nul = False + i += 1 + s = s[:i - 1] + return s.split('\0') + +def get_version(): + major = alc.ALCint() + minor = alc.ALCint() + alc.alcGetIntegerv(_device, alc.ALC_MAJOR_VERSION, + ctypes.sizeof(major), major) + alc.alcGetIntegerv(_device, alc.ALC_MINOR_VERSION, + ctypes.sizeof(minor), minor) + return major.value, minor.value + +def have_version(major, minor): + return (major, minor) <= get_version() + +def get_extensions(): + extensions = alc.alcGetString(_device, alc.ALC_EXTENSIONS) + + # Check for null pointer + if not ctypes.cast(extensions, ctypes.c_void_p).value: + return [] + + if sys.platform == 'darwin': + return ctypes.cast(extensions, ctypes.c_char_p).value.split(' ') + else: + return _split_nul_strings(extensions) + +def have_extension(extension): + return extension in get_extensions() + +format_map = { + (1, 8): al.AL_FORMAT_MONO8, + (1, 16): al.AL_FORMAT_MONO16, + (2, 8): al.AL_FORMAT_STEREO8, + (2, 16): al.AL_FORMAT_STEREO16, +} + +class OpenALAudioPlayer(AudioPlayer): + #: Seconds ahead to buffer audio. Keep small for low latency, but large + #: enough to avoid underruns. (0.05 is the minimum for my 2.2 GHz Linux) + _update_buffer_time = 0.2 + + #: Minimum size of an OpenAL buffer worth bothering with + _min_buffer_size = 512 + + #: Maximum size of an OpenAL buffer, in bytes. TODO: use OpenAL maximum + _max_buffer_size = 65536 + + UPDATE_PERIOD = 0.05 + + def __init__(self, audio_format): + super(OpenALAudioPlayer, self).__init__(audio_format) + + try: + self._al_format = format_map[(audio_format.channels, + audio_format.sample_size)] + except KeyError: + raise OpenALException('Unsupported audio format.') + + self._al_source = al.ALuint() + al.alGenSources(1, self._al_source) + + # Seconds of audio currently queued not processed (estimate) + self._buffered_time = 0.0 + + # Seconds of audio into current (head) buffer + self._current_buffer_time = 0.0 + + # List of (timestamp, duration) corresponding to currently queued AL + # buffers + self._timestamps = [] + + # OpenAL 1.0 timestamp interpolation + self._timestamp_system_time = 0.0 + + # Desired play state (True even if stopped due to underrun) + self._playing = False + + # Timestamp when paused + self._pause_timestamp = 0.0 + + self._eos_count = 0 + + def __del__(self): + try: + al.alDeleteSources(1, self._al_source) + except: + pass + + def get_write_size(self): + t = self._buffered_time - self._current_buffer_time + size = int(max(0, self._update_buffer_time - t) * \ + self.audio_format.bytes_per_second) + if size < self._min_buffer_size: + size = 0 + return size + + def write(self, audio_data): + buffer = al.ALuint() + al.alGenBuffers(1, buffer) + al.alBufferData(buffer, + self._al_format, + audio_data.data, + audio_data.length, + self.audio_format.sample_rate) + al.alSourceQueueBuffers(self._al_source, 1, ctypes.byref(buffer)) + + self._buffered_time += audio_data.duration + self._timestamps.append((audio_data.timestamp, audio_data.duration)) + audio_data.consume(audio_data.length, self.audio_format) + + def write_eos(self): + if self._timestamps: + self._timestamps.append((None, None)) + + def write_end(self): + pass + + def play(self): + if self._playing: + return + + self._playing = True + self._al_play() + if not _have_1_1: + self._timestamp_system_time = time.time() + + def _al_play(self): + if not self._timestamps: + return + state = al.ALint() + al.alGetSourcei(self._al_source, al.AL_SOURCE_STATE, state) + if state.value != al.AL_PLAYING: + al.alSourcePlay(self._al_source) + + def stop(self): + if not self._playing: + return + + self._pause_timestamp = self.get_time() + al.alSourcePause(self._al_source) + self._playing = False + + def clear(self): + al.alSourceStop(self._al_source) + self._playing = False + + processed = al.ALint() + al.alGetSourcei(self._al_source, al.AL_BUFFERS_PROCESSED, processed) + if processed.value: + buffers = (al.ALuint * processed.value)() + al.alSourceUnqueueBuffers(self._al_source, len(buffers), buffers) + al.alDeleteBuffers(len(buffers), buffers) + + self._pause_timestamp = 0.0 + self._buffered_time = 0.0 + self._current_buffer_time = 0.0 + self._timestamps = [] + + def pump(self): + + # Release spent buffers + processed = al.ALint() + al.alGetSourcei(self._al_source, al.AL_BUFFERS_PROCESSED, processed) + processed = processed.value + if processed: + buffers = (al.ALuint * processed)() + al.alSourceUnqueueBuffers(self._al_source, len(buffers), buffers) + al.alDeleteBuffers(len(buffers), buffers) + + # Pop timestamps and check for eos markers + try: + while processed: + if not _have_1_1: + self._timestamp_system_time = time.time() + _, duration = self._timestamps.pop(0) + self._buffered_time -= duration + while self._timestamps[0][0] is None: + self._eos_count += 1 + self._timestamps.pop(0) + processed -= 1 + except IndexError: + pass + + if _have_1_1: + samples = al.ALint() + al.alGetSourcei(self._al_source, al.AL_SAMPLE_OFFSET, samples) + self._current_buffer_time = samples.value / \ + float(self.audio_format.sample_rate) + else: + # Interpolate system time past buffer timestamp + self._current_buffer_time = time.time() - \ + self._timestamp_system_time + + # Check for underrun + if self._playing: + state = al.ALint() + al.alGetSourcei(self._al_source, al.AL_SOURCE_STATE, state) + if state.value != al.AL_PLAYING: + al.alSourcePlay(self._al_source) + return True # underrun notification + + def get_time(self): + state = al.ALint() + al.alGetSourcei(self._al_source, al.AL_SOURCE_STATE, state) + if not self._playing: + return self._pause_timestamp + + if not self._timestamps: + return self._pause_timestamp + + ts, _ = self._timestamps[0] + + return ts + self._current_buffer_time + + def clear_eos(self): + while self._eos_count > 0: + self._eos_count -= 1 + return True + return False + + def set_volume(self, volume): + al.alSourcef(self._al_source, al.AL_GAIN, max(0, volume)) + + def set_position(self, position): + x, y, z = position + al.alSource3f(self._al_source, al.AL_POSITION, x, y, z) + + def set_min_distance(self, min_distance): + al.alSourcef(self._al_source, al.AL_REFERENCE_DISTANCE, min_distance) + + def set_max_distance(self, max_distance): + al.alSourcef(self._al_source, al.AL_MAX_DISTANCE, max_distance) + + def set_pitch(self, pitch): + al.alSourcef(self._al_source, al.AL_PITCH, max(0, pitch)) + + def set_cone_orientation(self, cone_orientation): + x, y, z = cone_orientation + al.alSource3f(self._al_source, al.AL_DIRECTION, x, y, z) + + def set_cone_inner_angle(self, cone_inner_angle): + al.alSourcef(self._al_source, al.AL_CONE_INNER_ANGLE, cone_inner_angle) + + def set_cone_outer_angle(self, cone_outer_angle): + al.alSourcef(self._al_source, al.AL_CONE_OUTER_ANGLE, cone_outer_angle) + + def set_cone_outer_gain(self, cone_outer_gain): + al.alSourcef(self._al_source, al.AL_CONE_OUTER_GAIN, cone_outer_gain) + +class OpenALListener(Listener): + def _set_volume(self, volume): + al.alListenerf(al.AL_GAIN, volume) + self._volume = volume + + def _set_position(self, position): + x, y, z = position + al.alListener3f(al.AL_POSITION, x, y, z) + self._position = position + + def _set_forward_orientation(self, orientation): + val = (al.ALfloat * 6)(*(orientation + self._up_orientation)) + al.alListenerfv(al.AL_ORIENTATION, val) + self._forward_orientation = orientation + + def _set_up_orientation(self, orientation): + val = (al.ALfloat * 6)(*(self._forward_orientation + orientation)) + al.alListenerfv(al.AL_ORIENTATION, val) + self._up_orientation = orientation + +_device = None +_have_1_1 = False + +def driver_init(device_name = None): + global _device + global _have_1_1 + + # TODO devices must be enumerated on Windows, otherwise 1.0 context is + # returned. + + _device = alc.alcOpenDevice(device_name) + if not _device: + raise OpenALException('No OpenAL device.') + + alcontext = alc.alcCreateContext(_device, None) + alc.alcMakeContextCurrent(alcontext) + + if have_version(1, 1): + # Good version info to cache + _have_1_1 = True + + # See issue #163. + import sys + if sys.platform in ('win32', 'cygwin'): + from pyglet import clock + clock.Clock._force_sleep = True + +driver_listener = OpenALListener() +driver_audio_player_class = OpenALAudioPlayer + diff --git a/pyglet/media/drivers/openal/lib_alc.py b/pyglet/media/drivers/openal/lib_alc.py new file mode 100644 index 0000000..613a878 --- /dev/null +++ b/pyglet/media/drivers/openal/lib_alc.py @@ -0,0 +1,286 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +'''Wrapper for openal + +Generated with: +../tools/wraptypes/wrap.py /usr/include/AL/alc.h -lopenal -olib_alc.py + +.. Hacked to fix ALCvoid argtypes. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: lib_alc.py 1579 2008-01-15 14:47:19Z Alex.Holkner $' + +import ctypes +from ctypes import * +import sys + +import pyglet.lib + +_lib = pyglet.lib.load_library('openal', win32='openal32', + framework='/System/Library/Frameworks/OpenAL.framework') + +_int_types = (c_int16, c_int32) +if hasattr(ctypes, 'c_int64'): + # Some builds of ctypes apparently do not have c_int64 + # defined; it's a pretty good bet that these builds do not + # have 64-bit pointers. + _int_types += (ctypes.c_int64,) +for t in _int_types: + if sizeof(t) == sizeof(c_size_t): + c_ptrdiff_t = t + +class c_void(Structure): + # c_void_p is a buggy return type, converting to int, so + # POINTER(None) == c_void_p is actually written as + # POINTER(c_void), so it can be treated as a real pointer. + _fields_ = [('dummy', c_int)] + + + +ALC_API = 0 # /usr/include/AL/alc.h:19 +ALCAPI = 0 # /usr/include/AL/alc.h:37 +ALC_INVALID = 0 # /usr/include/AL/alc.h:39 +ALC_VERSION_0_1 = 1 # /usr/include/AL/alc.h:42 +class struct_ALCdevice_struct(Structure): + __slots__ = [ + ] +struct_ALCdevice_struct._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct_ALCdevice_struct(Structure): + __slots__ = [ + ] +struct_ALCdevice_struct._fields_ = [ + ('_opaque_struct', c_int) +] + +ALCdevice = struct_ALCdevice_struct # /usr/include/AL/alc.h:44 +class struct_ALCcontext_struct(Structure): + __slots__ = [ + ] +struct_ALCcontext_struct._fields_ = [ + ('_opaque_struct', c_int) +] + +class struct_ALCcontext_struct(Structure): + __slots__ = [ + ] +struct_ALCcontext_struct._fields_ = [ + ('_opaque_struct', c_int) +] + +ALCcontext = struct_ALCcontext_struct # /usr/include/AL/alc.h:45 +ALCboolean = c_char # /usr/include/AL/alc.h:49 +ALCchar = c_char # /usr/include/AL/alc.h:52 +ALCbyte = c_char # /usr/include/AL/alc.h:55 +ALCubyte = c_ubyte # /usr/include/AL/alc.h:58 +ALCshort = c_short # /usr/include/AL/alc.h:61 +ALCushort = c_ushort # /usr/include/AL/alc.h:64 +ALCint = c_int # /usr/include/AL/alc.h:67 +ALCuint = c_uint # /usr/include/AL/alc.h:70 +ALCsizei = c_int # /usr/include/AL/alc.h:73 +ALCenum = c_int # /usr/include/AL/alc.h:76 +ALCfloat = c_float # /usr/include/AL/alc.h:79 +ALCdouble = c_double # /usr/include/AL/alc.h:82 +ALCvoid = None # /usr/include/AL/alc.h:85 +ALC_FALSE = 0 # /usr/include/AL/alc.h:91 +ALC_TRUE = 1 # /usr/include/AL/alc.h:94 +ALC_FREQUENCY = 4103 # /usr/include/AL/alc.h:99 +ALC_REFRESH = 4104 # /usr/include/AL/alc.h:104 +ALC_SYNC = 4105 # /usr/include/AL/alc.h:109 +ALC_MONO_SOURCES = 4112 # /usr/include/AL/alc.h:114 +ALC_STEREO_SOURCES = 4113 # /usr/include/AL/alc.h:119 +ALC_NO_ERROR = 0 # /usr/include/AL/alc.h:128 +ALC_INVALID_DEVICE = 40961 # /usr/include/AL/alc.h:133 +ALC_INVALID_CONTEXT = 40962 # /usr/include/AL/alc.h:138 +ALC_INVALID_ENUM = 40963 # /usr/include/AL/alc.h:143 +ALC_INVALID_VALUE = 40964 # /usr/include/AL/alc.h:148 +ALC_OUT_OF_MEMORY = 40965 # /usr/include/AL/alc.h:153 +ALC_DEFAULT_DEVICE_SPECIFIER = 4100 # /usr/include/AL/alc.h:159 +ALC_DEVICE_SPECIFIER = 4101 # /usr/include/AL/alc.h:160 +ALC_EXTENSIONS = 4102 # /usr/include/AL/alc.h:161 +ALC_MAJOR_VERSION = 4096 # /usr/include/AL/alc.h:163 +ALC_MINOR_VERSION = 4097 # /usr/include/AL/alc.h:164 +ALC_ATTRIBUTES_SIZE = 4098 # /usr/include/AL/alc.h:166 +ALC_ALL_ATTRIBUTES = 4099 # /usr/include/AL/alc.h:167 +ALC_CAPTURE_DEVICE_SPECIFIER = 784 # /usr/include/AL/alc.h:172 +ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER = 785 # /usr/include/AL/alc.h:173 +ALC_CAPTURE_SAMPLES = 786 # /usr/include/AL/alc.h:174 +# /usr/include/AL/alc.h:180 +alcCreateContext = _lib.alcCreateContext +alcCreateContext.restype = POINTER(ALCcontext) +alcCreateContext.argtypes = [POINTER(ALCdevice), POINTER(ALCint)] + +# /usr/include/AL/alc.h:182 +alcMakeContextCurrent = _lib.alcMakeContextCurrent +alcMakeContextCurrent.restype = ALCboolean +alcMakeContextCurrent.argtypes = [POINTER(ALCcontext)] + +# /usr/include/AL/alc.h:184 +alcProcessContext = _lib.alcProcessContext +alcProcessContext.restype = None +alcProcessContext.argtypes = [POINTER(ALCcontext)] + +# /usr/include/AL/alc.h:186 +alcSuspendContext = _lib.alcSuspendContext +alcSuspendContext.restype = None +alcSuspendContext.argtypes = [POINTER(ALCcontext)] + +# /usr/include/AL/alc.h:188 +alcDestroyContext = _lib.alcDestroyContext +alcDestroyContext.restype = None +alcDestroyContext.argtypes = [POINTER(ALCcontext)] + +# /usr/include/AL/alc.h:190 +alcGetCurrentContext = _lib.alcGetCurrentContext +alcGetCurrentContext.restype = POINTER(ALCcontext) +alcGetCurrentContext.argtypes = [] + +# /usr/include/AL/alc.h:192 +alcGetContextsDevice = _lib.alcGetContextsDevice +alcGetContextsDevice.restype = POINTER(ALCdevice) +alcGetContextsDevice.argtypes = [POINTER(ALCcontext)] + +# /usr/include/AL/alc.h:198 +alcOpenDevice = _lib.alcOpenDevice +alcOpenDevice.restype = POINTER(ALCdevice) +alcOpenDevice.argtypes = [POINTER(ALCchar)] + +# /usr/include/AL/alc.h:200 +alcCloseDevice = _lib.alcCloseDevice +alcCloseDevice.restype = ALCboolean +alcCloseDevice.argtypes = [POINTER(ALCdevice)] + +# /usr/include/AL/alc.h:207 +alcGetError = _lib.alcGetError +alcGetError.restype = ALCenum +alcGetError.argtypes = [POINTER(ALCdevice)] + +# /usr/include/AL/alc.h:215 +alcIsExtensionPresent = _lib.alcIsExtensionPresent +alcIsExtensionPresent.restype = ALCboolean +alcIsExtensionPresent.argtypes = [POINTER(ALCdevice), POINTER(ALCchar)] + +# /usr/include/AL/alc.h:217 +alcGetProcAddress = _lib.alcGetProcAddress +alcGetProcAddress.restype = POINTER(c_void) +alcGetProcAddress.argtypes = [POINTER(ALCdevice), POINTER(ALCchar)] + +# /usr/include/AL/alc.h:219 +alcGetEnumValue = _lib.alcGetEnumValue +alcGetEnumValue.restype = ALCenum +alcGetEnumValue.argtypes = [POINTER(ALCdevice), POINTER(ALCchar)] + +# /usr/include/AL/alc.h:225 +alcGetString = _lib.alcGetString +alcGetString.restype = POINTER(ALCchar) +alcGetString.argtypes = [POINTER(ALCdevice), ALCenum] + +# /usr/include/AL/alc.h:227 +alcGetIntegerv = _lib.alcGetIntegerv +alcGetIntegerv.restype = None +alcGetIntegerv.argtypes = [POINTER(ALCdevice), ALCenum, ALCsizei, POINTER(ALCint)] + +# /usr/include/AL/alc.h:233 +alcCaptureOpenDevice = _lib.alcCaptureOpenDevice +alcCaptureOpenDevice.restype = POINTER(ALCdevice) +alcCaptureOpenDevice.argtypes = [POINTER(ALCchar), ALCuint, ALCenum, ALCsizei] + +# /usr/include/AL/alc.h:235 +alcCaptureCloseDevice = _lib.alcCaptureCloseDevice +alcCaptureCloseDevice.restype = ALCboolean +alcCaptureCloseDevice.argtypes = [POINTER(ALCdevice)] + +# /usr/include/AL/alc.h:237 +alcCaptureStart = _lib.alcCaptureStart +alcCaptureStart.restype = None +alcCaptureStart.argtypes = [POINTER(ALCdevice)] + +# /usr/include/AL/alc.h:239 +alcCaptureStop = _lib.alcCaptureStop +alcCaptureStop.restype = None +alcCaptureStop.argtypes = [POINTER(ALCdevice)] + +# /usr/include/AL/alc.h:241 +alcCaptureSamples = _lib.alcCaptureSamples +alcCaptureSamples.restype = None +alcCaptureSamples.argtypes = [POINTER(ALCdevice), POINTER(ALCvoid), ALCsizei] + +LPALCCREATECONTEXT = CFUNCTYPE(POINTER(ALCcontext), POINTER(ALCdevice), POINTER(ALCint)) # /usr/include/AL/alc.h:246 +LPALCMAKECONTEXTCURRENT = CFUNCTYPE(ALCboolean, POINTER(ALCcontext)) # /usr/include/AL/alc.h:247 +LPALCPROCESSCONTEXT = CFUNCTYPE(None, POINTER(ALCcontext)) # /usr/include/AL/alc.h:248 +LPALCSUSPENDCONTEXT = CFUNCTYPE(None, POINTER(ALCcontext)) # /usr/include/AL/alc.h:249 +LPALCDESTROYCONTEXT = CFUNCTYPE(None, POINTER(ALCcontext)) # /usr/include/AL/alc.h:250 +LPALCGETCURRENTCONTEXT = CFUNCTYPE(POINTER(ALCcontext)) # /usr/include/AL/alc.h:251 +LPALCGETCONTEXTSDEVICE = CFUNCTYPE(POINTER(ALCdevice), POINTER(ALCcontext)) # /usr/include/AL/alc.h:252 +LPALCOPENDEVICE = CFUNCTYPE(POINTER(ALCdevice), POINTER(ALCchar)) # /usr/include/AL/alc.h:253 +LPALCCLOSEDEVICE = CFUNCTYPE(ALCboolean, POINTER(ALCdevice)) # /usr/include/AL/alc.h:254 +LPALCGETERROR = CFUNCTYPE(ALCenum, POINTER(ALCdevice)) # /usr/include/AL/alc.h:255 +LPALCISEXTENSIONPRESENT = CFUNCTYPE(ALCboolean, POINTER(ALCdevice), POINTER(ALCchar)) # /usr/include/AL/alc.h:256 +LPALCGETPROCADDRESS = CFUNCTYPE(POINTER(c_void), POINTER(ALCdevice), POINTER(ALCchar)) # /usr/include/AL/alc.h:257 +LPALCGETENUMVALUE = CFUNCTYPE(ALCenum, POINTER(ALCdevice), POINTER(ALCchar)) # /usr/include/AL/alc.h:258 +LPALCGETSTRING = CFUNCTYPE(POINTER(ALCchar), POINTER(ALCdevice), ALCenum) # /usr/include/AL/alc.h:259 +LPALCGETINTEGERV = CFUNCTYPE(None, POINTER(ALCdevice), ALCenum, ALCsizei, POINTER(ALCint)) # /usr/include/AL/alc.h:260 +LPALCCAPTUREOPENDEVICE = CFUNCTYPE(POINTER(ALCdevice), POINTER(ALCchar), ALCuint, ALCenum, ALCsizei) # /usr/include/AL/alc.h:261 +LPALCCAPTURECLOSEDEVICE = CFUNCTYPE(ALCboolean, POINTER(ALCdevice)) # /usr/include/AL/alc.h:262 +LPALCCAPTURESTART = CFUNCTYPE(None, POINTER(ALCdevice)) # /usr/include/AL/alc.h:263 +LPALCCAPTURESTOP = CFUNCTYPE(None, POINTER(ALCdevice)) # /usr/include/AL/alc.h:264 +LPALCCAPTURESAMPLES = CFUNCTYPE(None, POINTER(ALCdevice), POINTER(ALCvoid), ALCsizei) # /usr/include/AL/alc.h:265 + +__all__ = ['ALC_API', 'ALCAPI', 'ALC_INVALID', 'ALC_VERSION_0_1', 'ALCdevice', +'ALCcontext', 'ALCboolean', 'ALCchar', 'ALCbyte', 'ALCubyte', 'ALCshort', +'ALCushort', 'ALCint', 'ALCuint', 'ALCsizei', 'ALCenum', 'ALCfloat', +'ALCdouble', 'ALCvoid', 'ALC_FALSE', 'ALC_TRUE', 'ALC_FREQUENCY', +'ALC_REFRESH', 'ALC_SYNC', 'ALC_MONO_SOURCES', 'ALC_STEREO_SOURCES', +'ALC_NO_ERROR', 'ALC_INVALID_DEVICE', 'ALC_INVALID_CONTEXT', +'ALC_INVALID_ENUM', 'ALC_INVALID_VALUE', 'ALC_OUT_OF_MEMORY', +'ALC_DEFAULT_DEVICE_SPECIFIER', 'ALC_DEVICE_SPECIFIER', 'ALC_EXTENSIONS', +'ALC_MAJOR_VERSION', 'ALC_MINOR_VERSION', 'ALC_ATTRIBUTES_SIZE', +'ALC_ALL_ATTRIBUTES', 'ALC_CAPTURE_DEVICE_SPECIFIER', +'ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER', 'ALC_CAPTURE_SAMPLES', +'alcCreateContext', 'alcMakeContextCurrent', 'alcProcessContext', +'alcSuspendContext', 'alcDestroyContext', 'alcGetCurrentContext', +'alcGetContextsDevice', 'alcOpenDevice', 'alcCloseDevice', 'alcGetError', +'alcIsExtensionPresent', 'alcGetProcAddress', 'alcGetEnumValue', +'alcGetString', 'alcGetIntegerv', 'alcCaptureOpenDevice', +'alcCaptureCloseDevice', 'alcCaptureStart', 'alcCaptureStop', +'alcCaptureSamples', 'LPALCCREATECONTEXT', 'LPALCMAKECONTEXTCURRENT', +'LPALCPROCESSCONTEXT', 'LPALCSUSPENDCONTEXT', 'LPALCDESTROYCONTEXT', +'LPALCGETCURRENTCONTEXT', 'LPALCGETCONTEXTSDEVICE', 'LPALCOPENDEVICE', +'LPALCCLOSEDEVICE', 'LPALCGETERROR', 'LPALCISEXTENSIONPRESENT', +'LPALCGETPROCADDRESS', 'LPALCGETENUMVALUE', 'LPALCGETSTRING', +'LPALCGETINTEGERV', 'LPALCCAPTUREOPENDEVICE', 'LPALCCAPTURECLOSEDEVICE', +'LPALCCAPTURESTART', 'LPALCCAPTURESTOP', 'LPALCCAPTURESAMPLES'] diff --git a/pyglet/media/drivers/openal/lib_openal.py b/pyglet/media/drivers/openal/lib_openal.py new file mode 100644 index 0000000..c150ccc --- /dev/null +++ b/pyglet/media/drivers/openal/lib_openal.py @@ -0,0 +1,655 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +'''Wrapper for openal + +Generated with: +../tools/wraptypes/wrap.py /usr/include/AL/al.h -lopenal -olib_openal.py + +.. Hacked to remove non-existant library functions. + +TODO add alGetError check. + +.. alListener3i and alListeneriv are present in my OS X 10.4 but not another +10.4 user's installation. They've also been removed for compatibility. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: lib_openal.py 2270 2008-09-21 08:01:58Z Alex.Holkner $' + +import ctypes +from ctypes import * +import sys + +import pyglet.lib + +_lib = pyglet.lib.load_library('openal', win32='openal32', + framework='/System/Library/Frameworks/OpenAL.framework') + +_int_types = (c_int16, c_int32) +if hasattr(ctypes, 'c_int64'): + # Some builds of ctypes apparently do not have c_int64 + # defined; it's a pretty good bet that these builds do not + # have 64-bit pointers. + _int_types += (ctypes.c_int64,) +for t in _int_types: + if sizeof(t) == sizeof(c_size_t): + c_ptrdiff_t = t + +class c_void(Structure): + # c_void_p is a buggy return type, converting to int, so + # POINTER(None) == c_void_p is actually written as + # POINTER(c_void), so it can be treated as a real pointer. + _fields_ = [('dummy', c_int)] + + + +AL_API = 0 # /usr/include/AL/al.h:39 +ALAPI = 0 # /usr/include/AL/al.h:59 +AL_INVALID = -1 # /usr/include/AL/al.h:61 +AL_ILLEGAL_ENUM = 0 # /usr/include/AL/al.h:62 +AL_ILLEGAL_COMMAND = 0 # /usr/include/AL/al.h:63 +ALboolean = c_int # Better return type than c_char, as generated +ALchar = c_char # /usr/include/AL/al.h:73 +ALbyte = c_char # /usr/include/AL/al.h:76 +ALubyte = c_ubyte # /usr/include/AL/al.h:79 +ALshort = c_short # /usr/include/AL/al.h:82 +ALushort = c_ushort # /usr/include/AL/al.h:85 +ALint = c_int # /usr/include/AL/al.h:88 +ALuint = c_uint # /usr/include/AL/al.h:91 +ALsizei = c_int # /usr/include/AL/al.h:94 +ALenum = c_int # /usr/include/AL/al.h:97 +ALfloat = c_float # /usr/include/AL/al.h:100 +ALdouble = c_double # /usr/include/AL/al.h:103 +ALvoid = None # /usr/include/AL/al.h:106 +AL_NONE = 0 # /usr/include/AL/al.h:112 +AL_FALSE = 0 # /usr/include/AL/al.h:115 +AL_TRUE = 1 # /usr/include/AL/al.h:118 +AL_SOURCE_RELATIVE = 514 # /usr/include/AL/al.h:121 +AL_CONE_INNER_ANGLE = 4097 # /usr/include/AL/al.h:130 +AL_CONE_OUTER_ANGLE = 4098 # /usr/include/AL/al.h:137 +AL_PITCH = 4099 # /usr/include/AL/al.h:145 +AL_POSITION = 4100 # /usr/include/AL/al.h:157 +AL_DIRECTION = 4101 # /usr/include/AL/al.h:160 +AL_VELOCITY = 4102 # /usr/include/AL/al.h:163 +AL_LOOPING = 4103 # /usr/include/AL/al.h:171 +AL_BUFFER = 4105 # /usr/include/AL/al.h:178 +AL_GAIN = 4106 # /usr/include/AL/al.h:191 +AL_MIN_GAIN = 4109 # /usr/include/AL/al.h:200 +AL_MAX_GAIN = 4110 # /usr/include/AL/al.h:209 +AL_ORIENTATION = 4111 # /usr/include/AL/al.h:216 +AL_SOURCE_STATE = 4112 # /usr/include/AL/al.h:221 +AL_INITIAL = 4113 # /usr/include/AL/al.h:222 +AL_PLAYING = 4114 # /usr/include/AL/al.h:223 +AL_PAUSED = 4115 # /usr/include/AL/al.h:224 +AL_STOPPED = 4116 # /usr/include/AL/al.h:225 +AL_BUFFERS_QUEUED = 4117 # /usr/include/AL/al.h:230 +AL_BUFFERS_PROCESSED = 4118 # /usr/include/AL/al.h:231 +AL_SEC_OFFSET = 4132 # /usr/include/AL/al.h:236 +AL_SAMPLE_OFFSET = 4133 # /usr/include/AL/al.h:237 +AL_BYTE_OFFSET = 4134 # /usr/include/AL/al.h:238 +AL_SOURCE_TYPE = 4135 # /usr/include/AL/al.h:246 +AL_STATIC = 4136 # /usr/include/AL/al.h:247 +AL_STREAMING = 4137 # /usr/include/AL/al.h:248 +AL_UNDETERMINED = 4144 # /usr/include/AL/al.h:249 +AL_FORMAT_MONO8 = 4352 # /usr/include/AL/al.h:252 +AL_FORMAT_MONO16 = 4353 # /usr/include/AL/al.h:253 +AL_FORMAT_STEREO8 = 4354 # /usr/include/AL/al.h:254 +AL_FORMAT_STEREO16 = 4355 # /usr/include/AL/al.h:255 +AL_REFERENCE_DISTANCE = 4128 # /usr/include/AL/al.h:265 +AL_ROLLOFF_FACTOR = 4129 # /usr/include/AL/al.h:273 +AL_CONE_OUTER_GAIN = 4130 # /usr/include/AL/al.h:282 +AL_MAX_DISTANCE = 4131 # /usr/include/AL/al.h:292 +AL_FREQUENCY = 8193 # /usr/include/AL/al.h:300 +AL_BITS = 8194 # /usr/include/AL/al.h:301 +AL_CHANNELS = 8195 # /usr/include/AL/al.h:302 +AL_SIZE = 8196 # /usr/include/AL/al.h:303 +AL_UNUSED = 8208 # /usr/include/AL/al.h:310 +AL_PENDING = 8209 # /usr/include/AL/al.h:311 +AL_PROCESSED = 8210 # /usr/include/AL/al.h:312 +AL_NO_ERROR = 0 # /usr/include/AL/al.h:316 +AL_INVALID_NAME = 40961 # /usr/include/AL/al.h:321 +AL_INVALID_ENUM = 40962 # /usr/include/AL/al.h:326 +AL_INVALID_VALUE = 40963 # /usr/include/AL/al.h:331 +AL_INVALID_OPERATION = 40964 # /usr/include/AL/al.h:336 +AL_OUT_OF_MEMORY = 40965 # /usr/include/AL/al.h:342 +AL_VENDOR = 45057 # /usr/include/AL/al.h:346 +AL_VERSION = 45058 # /usr/include/AL/al.h:347 +AL_RENDERER = 45059 # /usr/include/AL/al.h:348 +AL_EXTENSIONS = 45060 # /usr/include/AL/al.h:349 +AL_DOPPLER_FACTOR = 49152 # /usr/include/AL/al.h:356 +AL_DOPPLER_VELOCITY = 49153 # /usr/include/AL/al.h:361 +AL_SPEED_OF_SOUND = 49155 # /usr/include/AL/al.h:366 +AL_DISTANCE_MODEL = 53248 # /usr/include/AL/al.h:375 +AL_INVERSE_DISTANCE = 53249 # /usr/include/AL/al.h:376 +AL_INVERSE_DISTANCE_CLAMPED = 53250 # /usr/include/AL/al.h:377 +AL_LINEAR_DISTANCE = 53251 # /usr/include/AL/al.h:378 +AL_LINEAR_DISTANCE_CLAMPED = 53252 # /usr/include/AL/al.h:379 +AL_EXPONENT_DISTANCE = 53253 # /usr/include/AL/al.h:380 +AL_EXPONENT_DISTANCE_CLAMPED = 53254 # /usr/include/AL/al.h:381 +# /usr/include/AL/al.h:386 +alEnable = _lib.alEnable +alEnable.restype = None +alEnable.argtypes = [ALenum] + +# /usr/include/AL/al.h:388 +alDisable = _lib.alDisable +alDisable.restype = None +alDisable.argtypes = [ALenum] + +# /usr/include/AL/al.h:390 +alIsEnabled = _lib.alIsEnabled +alIsEnabled.restype = ALboolean +alIsEnabled.argtypes = [ALenum] + +# /usr/include/AL/al.h:396 +alGetString = _lib.alGetString +alGetString.restype = POINTER(ALchar) +alGetString.argtypes = [ALenum] + +# /usr/include/AL/al.h:398 +alGetBooleanv = _lib.alGetBooleanv +alGetBooleanv.restype = None +alGetBooleanv.argtypes = [ALenum, POINTER(ALboolean)] + +# /usr/include/AL/al.h:400 +alGetIntegerv = _lib.alGetIntegerv +alGetIntegerv.restype = None +alGetIntegerv.argtypes = [ALenum, POINTER(ALint)] + +# /usr/include/AL/al.h:402 +alGetFloatv = _lib.alGetFloatv +alGetFloatv.restype = None +alGetFloatv.argtypes = [ALenum, POINTER(ALfloat)] + +# /usr/include/AL/al.h:404 +alGetDoublev = _lib.alGetDoublev +alGetDoublev.restype = None +alGetDoublev.argtypes = [ALenum, POINTER(ALdouble)] + +# /usr/include/AL/al.h:406 +alGetBoolean = _lib.alGetBoolean +alGetBoolean.restype = ALboolean +alGetBoolean.argtypes = [ALenum] + +# /usr/include/AL/al.h:408 +alGetInteger = _lib.alGetInteger +alGetInteger.restype = ALint +alGetInteger.argtypes = [ALenum] + +# /usr/include/AL/al.h:410 +alGetFloat = _lib.alGetFloat +alGetFloat.restype = ALfloat +alGetFloat.argtypes = [ALenum] + +# /usr/include/AL/al.h:412 +alGetDouble = _lib.alGetDouble +alGetDouble.restype = ALdouble +alGetDouble.argtypes = [ALenum] + +# /usr/include/AL/al.h:419 +alGetError = _lib.alGetError +alGetError.restype = ALenum +alGetError.argtypes = [] + +# /usr/include/AL/al.h:427 +alIsExtensionPresent = _lib.alIsExtensionPresent +alIsExtensionPresent.restype = ALboolean +alIsExtensionPresent.argtypes = [POINTER(ALchar)] + +# /usr/include/AL/al.h:429 +alGetProcAddress = _lib.alGetProcAddress +alGetProcAddress.restype = POINTER(c_void) +alGetProcAddress.argtypes = [POINTER(ALchar)] + +# /usr/include/AL/al.h:431 +alGetEnumValue = _lib.alGetEnumValue +alGetEnumValue.restype = ALenum +alGetEnumValue.argtypes = [POINTER(ALchar)] + +# /usr/include/AL/al.h:450 +alListenerf = _lib.alListenerf +alListenerf.restype = None +alListenerf.argtypes = [ALenum, ALfloat] + +# /usr/include/AL/al.h:452 +alListener3f = _lib.alListener3f +alListener3f.restype = None +alListener3f.argtypes = [ALenum, ALfloat, ALfloat, ALfloat] + +# /usr/include/AL/al.h:454 +alListenerfv = _lib.alListenerfv +alListenerfv.restype = None +alListenerfv.argtypes = [ALenum, POINTER(ALfloat)] + +# /usr/include/AL/al.h:456 +alListeneri = _lib.alListeneri +alListeneri.restype = None +alListeneri.argtypes = [ALenum, ALint] + +# /usr/include/AL/al.h:458 +#alListener3i = _lib.alListener3i +#alListener3i.restype = None +#alListener3i.argtypes = [ALenum, ALint, ALint, ALint] + +# /usr/include/AL/al.h:460 +#alListeneriv = _lib.alListeneriv +#alListeneriv.restype = None +#alListeneriv.argtypes = [ALenum, POINTER(ALint)] + +# /usr/include/AL/al.h:465 +alGetListenerf = _lib.alGetListenerf +alGetListenerf.restype = None +alGetListenerf.argtypes = [ALenum, POINTER(ALfloat)] + +# /usr/include/AL/al.h:467 +alGetListener3f = _lib.alGetListener3f +alGetListener3f.restype = None +alGetListener3f.argtypes = [ALenum, POINTER(ALfloat), POINTER(ALfloat), POINTER(ALfloat)] + +# /usr/include/AL/al.h:469 +alGetListenerfv = _lib.alGetListenerfv +alGetListenerfv.restype = None +alGetListenerfv.argtypes = [ALenum, POINTER(ALfloat)] + +# /usr/include/AL/al.h:471 +alGetListeneri = _lib.alGetListeneri +alGetListeneri.restype = None +alGetListeneri.argtypes = [ALenum, POINTER(ALint)] + +# /usr/include/AL/al.h:473 +alGetListener3i = _lib.alGetListener3i +alGetListener3i.restype = None +alGetListener3i.argtypes = [ALenum, POINTER(ALint), POINTER(ALint), POINTER(ALint)] + +# /usr/include/AL/al.h:475 +alGetListeneriv = _lib.alGetListeneriv +alGetListeneriv.restype = None +alGetListeneriv.argtypes = [ALenum, POINTER(ALint)] + +# /usr/include/AL/al.h:512 +alGenSources = _lib.alGenSources +alGenSources.restype = None +alGenSources.argtypes = [ALsizei, POINTER(ALuint)] + +# /usr/include/AL/al.h:515 +alDeleteSources = _lib.alDeleteSources +alDeleteSources.restype = None +alDeleteSources.argtypes = [ALsizei, POINTER(ALuint)] + +# /usr/include/AL/al.h:518 +alIsSource = _lib.alIsSource +alIsSource.restype = ALboolean +alIsSource.argtypes = [ALuint] + +# /usr/include/AL/al.h:523 +alSourcef = _lib.alSourcef +alSourcef.restype = None +alSourcef.argtypes = [ALuint, ALenum, ALfloat] + +# /usr/include/AL/al.h:525 +alSource3f = _lib.alSource3f +alSource3f.restype = None +alSource3f.argtypes = [ALuint, ALenum, ALfloat, ALfloat, ALfloat] + +# /usr/include/AL/al.h:527 +alSourcefv = _lib.alSourcefv +alSourcefv.restype = None +alSourcefv.argtypes = [ALuint, ALenum, POINTER(ALfloat)] + +# /usr/include/AL/al.h:529 +alSourcei = _lib.alSourcei +alSourcei.restype = None +alSourcei.argtypes = [ALuint, ALenum, ALint] + +# /usr/include/AL/al.h:531 +#alSource3i = _lib.alSource3i +#alSource3i.restype = None +#alSource3i.argtypes = [ALuint, ALenum, ALint, ALint, ALint] + +# /usr/include/AL/al.h:533 +#alSourceiv = _lib.alSourceiv +#alSourceiv.restype = None +#alSourceiv.argtypes = [ALuint, ALenum, POINTER(ALint)] + +# /usr/include/AL/al.h:538 +alGetSourcef = _lib.alGetSourcef +alGetSourcef.restype = None +alGetSourcef.argtypes = [ALuint, ALenum, POINTER(ALfloat)] + +# /usr/include/AL/al.h:540 +alGetSource3f = _lib.alGetSource3f +alGetSource3f.restype = None +alGetSource3f.argtypes = [ALuint, ALenum, POINTER(ALfloat), POINTER(ALfloat), POINTER(ALfloat)] + +# /usr/include/AL/al.h:542 +alGetSourcefv = _lib.alGetSourcefv +alGetSourcefv.restype = None +alGetSourcefv.argtypes = [ALuint, ALenum, POINTER(ALfloat)] + +# /usr/include/AL/al.h:544 +alGetSourcei = _lib.alGetSourcei +alGetSourcei.restype = None +alGetSourcei.argtypes = [ALuint, ALenum, POINTER(ALint)] + +# /usr/include/AL/al.h:546 +#alGetSource3i = _lib.alGetSource3i +#alGetSource3i.restype = None +#alGetSource3i.argtypes = [ALuint, ALenum, POINTER(ALint), POINTER(ALint), POINTER(ALint)] + +# /usr/include/AL/al.h:548 +alGetSourceiv = _lib.alGetSourceiv +alGetSourceiv.restype = None +alGetSourceiv.argtypes = [ALuint, ALenum, POINTER(ALint)] + +# /usr/include/AL/al.h:556 +alSourcePlayv = _lib.alSourcePlayv +alSourcePlayv.restype = None +alSourcePlayv.argtypes = [ALsizei, POINTER(ALuint)] + +# /usr/include/AL/al.h:559 +alSourceStopv = _lib.alSourceStopv +alSourceStopv.restype = None +alSourceStopv.argtypes = [ALsizei, POINTER(ALuint)] + +# /usr/include/AL/al.h:562 +alSourceRewindv = _lib.alSourceRewindv +alSourceRewindv.restype = None +alSourceRewindv.argtypes = [ALsizei, POINTER(ALuint)] + +# /usr/include/AL/al.h:565 +alSourcePausev = _lib.alSourcePausev +alSourcePausev.restype = None +alSourcePausev.argtypes = [ALsizei, POINTER(ALuint)] + +# /usr/include/AL/al.h:572 +alSourcePlay = _lib.alSourcePlay +alSourcePlay.restype = None +alSourcePlay.argtypes = [ALuint] + +# /usr/include/AL/al.h:575 +alSourceStop = _lib.alSourceStop +alSourceStop.restype = None +alSourceStop.argtypes = [ALuint] + +# /usr/include/AL/al.h:578 +alSourceRewind = _lib.alSourceRewind +alSourceRewind.restype = None +alSourceRewind.argtypes = [ALuint] + +# /usr/include/AL/al.h:581 +alSourcePause = _lib.alSourcePause +alSourcePause.restype = None +alSourcePause.argtypes = [ALuint] + +# /usr/include/AL/al.h:586 +alSourceQueueBuffers = _lib.alSourceQueueBuffers +alSourceQueueBuffers.restype = None +alSourceQueueBuffers.argtypes = [ALuint, ALsizei, POINTER(ALuint)] + +# /usr/include/AL/al.h:588 +alSourceUnqueueBuffers = _lib.alSourceUnqueueBuffers +alSourceUnqueueBuffers.restype = None +alSourceUnqueueBuffers.argtypes = [ALuint, ALsizei, POINTER(ALuint)] + +# /usr/include/AL/al.h:606 +alGenBuffers = _lib.alGenBuffers +alGenBuffers.restype = None +alGenBuffers.argtypes = [ALsizei, POINTER(ALuint)] + +# /usr/include/AL/al.h:609 +alDeleteBuffers = _lib.alDeleteBuffers +alDeleteBuffers.restype = None +alDeleteBuffers.argtypes = [ALsizei, POINTER(ALuint)] + +# /usr/include/AL/al.h:612 +alIsBuffer = _lib.alIsBuffer +alIsBuffer.restype = ALboolean +alIsBuffer.argtypes = [ALuint] + +# /usr/include/AL/al.h:615 +alBufferData = _lib.alBufferData +alBufferData.restype = None +alBufferData.argtypes = [ALuint, ALenum, POINTER(ALvoid), ALsizei, ALsizei] + +# /usr/include/AL/al.h:620 +alBufferf = _lib.alBufferf +alBufferf.restype = None +alBufferf.argtypes = [ALuint, ALenum, ALfloat] + +# /usr/include/AL/al.h:622 +alBuffer3f = _lib.alBuffer3f +alBuffer3f.restype = None +alBuffer3f.argtypes = [ALuint, ALenum, ALfloat, ALfloat, ALfloat] + +# /usr/include/AL/al.h:624 +alBufferfv = _lib.alBufferfv +alBufferfv.restype = None +alBufferfv.argtypes = [ALuint, ALenum, POINTER(ALfloat)] + +# /usr/include/AL/al.h:626 +alBufferi = _lib.alBufferi +alBufferi.restype = None +alBufferi.argtypes = [ALuint, ALenum, ALint] + +# /usr/include/AL/al.h:628 +alBuffer3i = _lib.alBuffer3i +alBuffer3i.restype = None +alBuffer3i.argtypes = [ALuint, ALenum, ALint, ALint, ALint] + +# /usr/include/AL/al.h:630 +alBufferiv = _lib.alBufferiv +alBufferiv.restype = None +alBufferiv.argtypes = [ALuint, ALenum, POINTER(ALint)] + +# /usr/include/AL/al.h:635 +alGetBufferf = _lib.alGetBufferf +alGetBufferf.restype = None +alGetBufferf.argtypes = [ALuint, ALenum, POINTER(ALfloat)] + +# /usr/include/AL/al.h:637 +alGetBuffer3f = _lib.alGetBuffer3f +alGetBuffer3f.restype = None +alGetBuffer3f.argtypes = [ALuint, ALenum, POINTER(ALfloat), POINTER(ALfloat), POINTER(ALfloat)] + +# /usr/include/AL/al.h:639 +alGetBufferfv = _lib.alGetBufferfv +alGetBufferfv.restype = None +alGetBufferfv.argtypes = [ALuint, ALenum, POINTER(ALfloat)] + +# /usr/include/AL/al.h:641 +alGetBufferi = _lib.alGetBufferi +alGetBufferi.restype = None +alGetBufferi.argtypes = [ALuint, ALenum, POINTER(ALint)] + +# /usr/include/AL/al.h:643 +alGetBuffer3i = _lib.alGetBuffer3i +alGetBuffer3i.restype = None +alGetBuffer3i.argtypes = [ALuint, ALenum, POINTER(ALint), POINTER(ALint), POINTER(ALint)] + +# /usr/include/AL/al.h:645 +alGetBufferiv = _lib.alGetBufferiv +alGetBufferiv.restype = None +alGetBufferiv.argtypes = [ALuint, ALenum, POINTER(ALint)] + +# /usr/include/AL/al.h:651 +alDopplerFactor = _lib.alDopplerFactor +alDopplerFactor.restype = None +alDopplerFactor.argtypes = [ALfloat] + +# /usr/include/AL/al.h:653 +alDopplerVelocity = _lib.alDopplerVelocity +alDopplerVelocity.restype = None +alDopplerVelocity.argtypes = [ALfloat] + +# /usr/include/AL/al.h:655 +alSpeedOfSound = _lib.alSpeedOfSound +alSpeedOfSound.restype = None +alSpeedOfSound.argtypes = [ALfloat] + +# /usr/include/AL/al.h:657 +alDistanceModel = _lib.alDistanceModel +alDistanceModel.restype = None +alDistanceModel.argtypes = [ALenum] + +LPALENABLE = CFUNCTYPE(None, ALenum) # /usr/include/AL/al.h:662 +LPALDISABLE = CFUNCTYPE(None, ALenum) # /usr/include/AL/al.h:663 +LPALISENABLED = CFUNCTYPE(ALboolean, ALenum) # /usr/include/AL/al.h:664 +LPALGETSTRING = CFUNCTYPE(POINTER(ALchar), ALenum) # /usr/include/AL/al.h:665 +LPALGETBOOLEANV = CFUNCTYPE(None, ALenum, POINTER(ALboolean)) # /usr/include/AL/al.h:666 +LPALGETINTEGERV = CFUNCTYPE(None, ALenum, POINTER(ALint)) # /usr/include/AL/al.h:667 +LPALGETFLOATV = CFUNCTYPE(None, ALenum, POINTER(ALfloat)) # /usr/include/AL/al.h:668 +LPALGETDOUBLEV = CFUNCTYPE(None, ALenum, POINTER(ALdouble)) # /usr/include/AL/al.h:669 +LPALGETBOOLEAN = CFUNCTYPE(ALboolean, ALenum) # /usr/include/AL/al.h:670 +LPALGETINTEGER = CFUNCTYPE(ALint, ALenum) # /usr/include/AL/al.h:671 +LPALGETFLOAT = CFUNCTYPE(ALfloat, ALenum) # /usr/include/AL/al.h:672 +LPALGETDOUBLE = CFUNCTYPE(ALdouble, ALenum) # /usr/include/AL/al.h:673 +LPALGETERROR = CFUNCTYPE(ALenum) # /usr/include/AL/al.h:674 +LPALISEXTENSIONPRESENT = CFUNCTYPE(ALboolean, POINTER(ALchar)) # /usr/include/AL/al.h:675 +LPALGETPROCADDRESS = CFUNCTYPE(POINTER(c_void), POINTER(ALchar)) # /usr/include/AL/al.h:676 +LPALGETENUMVALUE = CFUNCTYPE(ALenum, POINTER(ALchar)) # /usr/include/AL/al.h:677 +LPALLISTENERF = CFUNCTYPE(None, ALenum, ALfloat) # /usr/include/AL/al.h:678 +LPALLISTENER3F = CFUNCTYPE(None, ALenum, ALfloat, ALfloat, ALfloat) # /usr/include/AL/al.h:679 +LPALLISTENERFV = CFUNCTYPE(None, ALenum, POINTER(ALfloat)) # /usr/include/AL/al.h:680 +LPALLISTENERI = CFUNCTYPE(None, ALenum, ALint) # /usr/include/AL/al.h:681 +LPALLISTENER3I = CFUNCTYPE(None, ALenum, ALint, ALint, ALint) # /usr/include/AL/al.h:682 +LPALLISTENERIV = CFUNCTYPE(None, ALenum, POINTER(ALint)) # /usr/include/AL/al.h:683 +LPALGETLISTENERF = CFUNCTYPE(None, ALenum, POINTER(ALfloat)) # /usr/include/AL/al.h:684 +LPALGETLISTENER3F = CFUNCTYPE(None, ALenum, POINTER(ALfloat), POINTER(ALfloat), POINTER(ALfloat)) # /usr/include/AL/al.h:685 +LPALGETLISTENERFV = CFUNCTYPE(None, ALenum, POINTER(ALfloat)) # /usr/include/AL/al.h:686 +LPALGETLISTENERI = CFUNCTYPE(None, ALenum, POINTER(ALint)) # /usr/include/AL/al.h:687 +LPALGETLISTENER3I = CFUNCTYPE(None, ALenum, POINTER(ALint), POINTER(ALint), POINTER(ALint)) # /usr/include/AL/al.h:688 +LPALGETLISTENERIV = CFUNCTYPE(None, ALenum, POINTER(ALint)) # /usr/include/AL/al.h:689 +LPALGENSOURCES = CFUNCTYPE(None, ALsizei, POINTER(ALuint)) # /usr/include/AL/al.h:690 +LPALDELETESOURCES = CFUNCTYPE(None, ALsizei, POINTER(ALuint)) # /usr/include/AL/al.h:691 +LPALISSOURCE = CFUNCTYPE(ALboolean, ALuint) # /usr/include/AL/al.h:692 +LPALSOURCEF = CFUNCTYPE(None, ALuint, ALenum, ALfloat) # /usr/include/AL/al.h:693 +LPALSOURCE3F = CFUNCTYPE(None, ALuint, ALenum, ALfloat, ALfloat, ALfloat) # /usr/include/AL/al.h:694 +LPALSOURCEFV = CFUNCTYPE(None, ALuint, ALenum, POINTER(ALfloat)) # /usr/include/AL/al.h:695 +LPALSOURCEI = CFUNCTYPE(None, ALuint, ALenum, ALint) # /usr/include/AL/al.h:696 +LPALSOURCE3I = CFUNCTYPE(None, ALuint, ALenum, ALint, ALint, ALint) # /usr/include/AL/al.h:697 +LPALSOURCEIV = CFUNCTYPE(None, ALuint, ALenum, POINTER(ALint)) # /usr/include/AL/al.h:698 +LPALGETSOURCEF = CFUNCTYPE(None, ALuint, ALenum, POINTER(ALfloat)) # /usr/include/AL/al.h:699 +LPALGETSOURCE3F = CFUNCTYPE(None, ALuint, ALenum, POINTER(ALfloat), POINTER(ALfloat), POINTER(ALfloat)) # /usr/include/AL/al.h:700 +LPALGETSOURCEFV = CFUNCTYPE(None, ALuint, ALenum, POINTER(ALfloat)) # /usr/include/AL/al.h:701 +LPALGETSOURCEI = CFUNCTYPE(None, ALuint, ALenum, POINTER(ALint)) # /usr/include/AL/al.h:702 +LPALGETSOURCE3I = CFUNCTYPE(None, ALuint, ALenum, POINTER(ALint), POINTER(ALint), POINTER(ALint)) # /usr/include/AL/al.h:703 +LPALGETSOURCEIV = CFUNCTYPE(None, ALuint, ALenum, POINTER(ALint)) # /usr/include/AL/al.h:704 +LPALSOURCEPLAYV = CFUNCTYPE(None, ALsizei, POINTER(ALuint)) # /usr/include/AL/al.h:705 +LPALSOURCESTOPV = CFUNCTYPE(None, ALsizei, POINTER(ALuint)) # /usr/include/AL/al.h:706 +LPALSOURCEREWINDV = CFUNCTYPE(None, ALsizei, POINTER(ALuint)) # /usr/include/AL/al.h:707 +LPALSOURCEPAUSEV = CFUNCTYPE(None, ALsizei, POINTER(ALuint)) # /usr/include/AL/al.h:708 +LPALSOURCEPLAY = CFUNCTYPE(None, ALuint) # /usr/include/AL/al.h:709 +LPALSOURCESTOP = CFUNCTYPE(None, ALuint) # /usr/include/AL/al.h:710 +LPALSOURCEREWIND = CFUNCTYPE(None, ALuint) # /usr/include/AL/al.h:711 +LPALSOURCEPAUSE = CFUNCTYPE(None, ALuint) # /usr/include/AL/al.h:712 +LPALSOURCEQUEUEBUFFERS = CFUNCTYPE(None, ALuint, ALsizei, POINTER(ALuint)) # /usr/include/AL/al.h:713 +LPALSOURCEUNQUEUEBUFFERS = CFUNCTYPE(None, ALuint, ALsizei, POINTER(ALuint)) # /usr/include/AL/al.h:714 +LPALGENBUFFERS = CFUNCTYPE(None, ALsizei, POINTER(ALuint)) # /usr/include/AL/al.h:715 +LPALDELETEBUFFERS = CFUNCTYPE(None, ALsizei, POINTER(ALuint)) # /usr/include/AL/al.h:716 +LPALISBUFFER = CFUNCTYPE(ALboolean, ALuint) # /usr/include/AL/al.h:717 +LPALBUFFERDATA = CFUNCTYPE(None, ALuint, ALenum, POINTER(ALvoid), ALsizei, ALsizei) # /usr/include/AL/al.h:718 +LPALBUFFERF = CFUNCTYPE(None, ALuint, ALenum, ALfloat) # /usr/include/AL/al.h:719 +LPALBUFFER3F = CFUNCTYPE(None, ALuint, ALenum, ALfloat, ALfloat, ALfloat) # /usr/include/AL/al.h:720 +LPALBUFFERFV = CFUNCTYPE(None, ALuint, ALenum, POINTER(ALfloat)) # /usr/include/AL/al.h:721 +LPALBUFFERI = CFUNCTYPE(None, ALuint, ALenum, ALint) # /usr/include/AL/al.h:722 +LPALBUFFER3I = CFUNCTYPE(None, ALuint, ALenum, ALint, ALint, ALint) # /usr/include/AL/al.h:723 +LPALBUFFERIV = CFUNCTYPE(None, ALuint, ALenum, POINTER(ALint)) # /usr/include/AL/al.h:724 +LPALGETBUFFERF = CFUNCTYPE(None, ALuint, ALenum, POINTER(ALfloat)) # /usr/include/AL/al.h:725 +LPALGETBUFFER3F = CFUNCTYPE(None, ALuint, ALenum, POINTER(ALfloat), POINTER(ALfloat), POINTER(ALfloat)) # /usr/include/AL/al.h:726 +LPALGETBUFFERFV = CFUNCTYPE(None, ALuint, ALenum, POINTER(ALfloat)) # /usr/include/AL/al.h:727 +LPALGETBUFFERI = CFUNCTYPE(None, ALuint, ALenum, POINTER(ALint)) # /usr/include/AL/al.h:728 +LPALGETBUFFER3I = CFUNCTYPE(None, ALuint, ALenum, POINTER(ALint), POINTER(ALint), POINTER(ALint)) # /usr/include/AL/al.h:729 +LPALGETBUFFERIV = CFUNCTYPE(None, ALuint, ALenum, POINTER(ALint)) # /usr/include/AL/al.h:730 +LPALDOPPLERFACTOR = CFUNCTYPE(None, ALfloat) # /usr/include/AL/al.h:731 +LPALDOPPLERVELOCITY = CFUNCTYPE(None, ALfloat) # /usr/include/AL/al.h:732 +LPALSPEEDOFSOUND = CFUNCTYPE(None, ALfloat) # /usr/include/AL/al.h:733 +LPALDISTANCEMODEL = CFUNCTYPE(None, ALenum) # /usr/include/AL/al.h:734 + +__all__ = ['AL_API', 'ALAPI', 'AL_INVALID', 'AL_ILLEGAL_ENUM', +'AL_ILLEGAL_COMMAND', 'ALboolean', 'ALchar', 'ALbyte', 'ALubyte', 'ALshort', +'ALushort', 'ALint', 'ALuint', 'ALsizei', 'ALenum', 'ALfloat', 'ALdouble', +'ALvoid', 'AL_NONE', 'AL_FALSE', 'AL_TRUE', 'AL_SOURCE_RELATIVE', +'AL_CONE_INNER_ANGLE', 'AL_CONE_OUTER_ANGLE', 'AL_PITCH', 'AL_POSITION', +'AL_DIRECTION', 'AL_VELOCITY', 'AL_LOOPING', 'AL_BUFFER', 'AL_GAIN', +'AL_MIN_GAIN', 'AL_MAX_GAIN', 'AL_ORIENTATION', 'AL_SOURCE_STATE', +'AL_INITIAL', 'AL_PLAYING', 'AL_PAUSED', 'AL_STOPPED', 'AL_BUFFERS_QUEUED', +'AL_BUFFERS_PROCESSED', 'AL_SEC_OFFSET', 'AL_SAMPLE_OFFSET', 'AL_BYTE_OFFSET', +'AL_SOURCE_TYPE', 'AL_STATIC', 'AL_STREAMING', 'AL_UNDETERMINED', +'AL_FORMAT_MONO8', 'AL_FORMAT_MONO16', 'AL_FORMAT_STEREO8', +'AL_FORMAT_STEREO16', 'AL_REFERENCE_DISTANCE', 'AL_ROLLOFF_FACTOR', +'AL_CONE_OUTER_GAIN', 'AL_MAX_DISTANCE', 'AL_FREQUENCY', 'AL_BITS', +'AL_CHANNELS', 'AL_SIZE', 'AL_UNUSED', 'AL_PENDING', 'AL_PROCESSED', +'AL_NO_ERROR', 'AL_INVALID_NAME', 'AL_INVALID_ENUM', 'AL_INVALID_VALUE', +'AL_INVALID_OPERATION', 'AL_OUT_OF_MEMORY', 'AL_VENDOR', 'AL_VERSION', +'AL_RENDERER', 'AL_EXTENSIONS', 'AL_DOPPLER_FACTOR', 'AL_DOPPLER_VELOCITY', +'AL_SPEED_OF_SOUND', 'AL_DISTANCE_MODEL', 'AL_INVERSE_DISTANCE', +'AL_INVERSE_DISTANCE_CLAMPED', 'AL_LINEAR_DISTANCE', +'AL_LINEAR_DISTANCE_CLAMPED', 'AL_EXPONENT_DISTANCE', +'AL_EXPONENT_DISTANCE_CLAMPED', 'alEnable', 'alDisable', 'alIsEnabled', +'alGetString', 'alGetBooleanv', 'alGetIntegerv', 'alGetFloatv', +'alGetDoublev', 'alGetBoolean', 'alGetInteger', 'alGetFloat', 'alGetDouble', +'alGetError', 'alIsExtensionPresent', 'alGetProcAddress', 'alGetEnumValue', +'alListenerf', 'alListener3f', 'alListenerfv', 'alListeneri', 'alListener3i', +'alListeneriv', 'alGetListenerf', 'alGetListener3f', 'alGetListenerfv', +'alGetListeneri', 'alGetListener3i', 'alGetListeneriv', 'alGenSources', +'alDeleteSources', 'alIsSource', 'alSourcef', 'alSource3f', 'alSourcefv', +'alSourcei', 'alSource3i', 'alSourceiv', 'alGetSourcef', 'alGetSource3f', +'alGetSourcefv', 'alGetSourcei', 'alGetSource3i', 'alGetSourceiv', +'alSourcePlayv', 'alSourceStopv', 'alSourceRewindv', 'alSourcePausev', +'alSourcePlay', 'alSourceStop', 'alSourceRewind', 'alSourcePause', +'alSourceQueueBuffers', 'alSourceUnqueueBuffers', 'alGenBuffers', +'alDeleteBuffers', 'alIsBuffer', 'alBufferData', 'alBufferf', 'alBuffer3f', +'alBufferfv', 'alBufferi', 'alBuffer3i', 'alBufferiv', 'alGetBufferf', +'alGetBuffer3f', 'alGetBufferfv', 'alGetBufferi', 'alGetBuffer3i', +'alGetBufferiv', 'alDopplerFactor', 'alDopplerVelocity', 'alSpeedOfSound', +'alDistanceModel', 'LPALENABLE', 'LPALDISABLE', 'LPALISENABLED', +'LPALGETSTRING', 'LPALGETBOOLEANV', 'LPALGETINTEGERV', 'LPALGETFLOATV', +'LPALGETDOUBLEV', 'LPALGETBOOLEAN', 'LPALGETINTEGER', 'LPALGETFLOAT', +'LPALGETDOUBLE', 'LPALGETERROR', 'LPALISEXTENSIONPRESENT', +'LPALGETPROCADDRESS', 'LPALGETENUMVALUE', 'LPALLISTENERF', 'LPALLISTENER3F', +'LPALLISTENERFV', 'LPALLISTENERI', 'LPALLISTENER3I', 'LPALLISTENERIV', +'LPALGETLISTENERF', 'LPALGETLISTENER3F', 'LPALGETLISTENERFV', +'LPALGETLISTENERI', 'LPALGETLISTENER3I', 'LPALGETLISTENERIV', +'LPALGENSOURCES', 'LPALDELETESOURCES', 'LPALISSOURCE', 'LPALSOURCEF', +'LPALSOURCE3F', 'LPALSOURCEFV', 'LPALSOURCEI', 'LPALSOURCE3I', 'LPALSOURCEIV', +'LPALGETSOURCEF', 'LPALGETSOURCE3F', 'LPALGETSOURCEFV', 'LPALGETSOURCEI', +'LPALGETSOURCE3I', 'LPALGETSOURCEIV', 'LPALSOURCEPLAYV', 'LPALSOURCESTOPV', +'LPALSOURCEREWINDV', 'LPALSOURCEPAUSEV', 'LPALSOURCEPLAY', 'LPALSOURCESTOP', +'LPALSOURCEREWIND', 'LPALSOURCEPAUSE', 'LPALSOURCEQUEUEBUFFERS', +'LPALSOURCEUNQUEUEBUFFERS', 'LPALGENBUFFERS', 'LPALDELETEBUFFERS', +'LPALISBUFFER', 'LPALBUFFERDATA', 'LPALBUFFERF', 'LPALBUFFER3F', +'LPALBUFFERFV', 'LPALBUFFERI', 'LPALBUFFER3I', 'LPALBUFFERIV', +'LPALGETBUFFERF', 'LPALGETBUFFER3F', 'LPALGETBUFFERFV', 'LPALGETBUFFERI', +'LPALGETBUFFER3I', 'LPALGETBUFFERIV', 'LPALDOPPLERFACTOR', +'LPALDOPPLERVELOCITY', 'LPALSPEEDOFSOUND', 'LPALDISTANCEMODEL'] diff --git a/pyglet/media/drivers/silent.py b/pyglet/media/drivers/silent.py new file mode 100644 index 0000000..7d79656 --- /dev/null +++ b/pyglet/media/drivers/silent.py @@ -0,0 +1,158 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''Fallback driver producing no audio. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: silent.py 1680 2008-01-27 09:13:50Z Alex.Holkner $' + +import time + +from pyglet.media import AudioPlayer, Listener, AudioData +from pyglet.media import MediaException + +class SilentAudioPlayer(AudioPlayer): + UPDATE_PERIOD = 0.1 + + def __init__(self, audio_format): + super(SilentAudioPlayer, self).__init__(audio_format) + + self._playing = False + self._eos_count = 0 + + self._audio_data_list = [] + self._head_time = 0.0 + self._head_timestamp = 0.0 + self._head_system_time = time.time() + + def get_write_size(self): + bytes = int(self.audio_format.bytes_per_second * self.UPDATE_PERIOD) + return max(0, bytes - sum( + [a.length for a in self._audio_data_list if a is not None])) + + def write(self, audio_data): + if not self._audio_data_list: + self._head_time = 0.0 + self._head_timestamp = audio_data.timestamp + self._head_system_time = time.time() + self._audio_data_list.append( + AudioData(None, + audio_data.length, + audio_data.timestamp, + audio_data.duration)) + audio_data.consume(audio_data.length, self.audio_format) + + def write_eos(self): + if self._audio_data_list: + self._audio_data_list.append(None) + + def write_end(self): + pass + + def play(self): + self._playing = True + self._head_system_time = time.time() + + def stop(self): + self._playing = False + self._head_time = time.time() - self._head_system_time + + def clear(self): + self._audio_data_list = [] + self._head_time = 0.0 + self._head_system_time = time.time() + self._eos_count = 0 + + def pump(self): + if not self._playing: + return + system_time = time.time() + head_time = system_time - self._head_system_time + try: + while head_time >= self._audio_data_list[0].duration: + head_time -= self._audio_data_list[0].duration + self._audio_data_list.pop(0) + while self._audio_data_list[0] is None: + self._eos_count += 1 + self._audio_data_list.pop(0) + self._head_timestamp = self._audio_data_list[0].timestamp + self._head_system_time = system_time - head_time + except IndexError: + pass + + def get_time(self): + if not self._audio_data_list: + return time.time() - self._head_system_time + self._head_timestamp + + if self._playing: + system_time = time.time() + head_time = system_time - self._head_system_time + return head_time + self._audio_data_list[0].timestamp + else: + return self._audio_data_list[0].timestamp + self._head_time + + def clear_eos(self): + if self._eos_count: + self._eos_count -= 1 + return True + return False + +class SilentListener(Listener): + def _set_volume(self, volume): + self._volume = volume + + def _set_position(self, position): + self._position = position + + def _set_velocity(self, velocity): + self._velocity = velocity + + def _set_forward_orientation(self, orientation): + self._forward_orientation = orientation + + def _set_up_orientation(self, orientation): + self._up_orientation = orientation + + def _set_doppler_factor(self, factor): + self._doppler_factor = factor + + def _set_speed_of_sound(self, speed_of_sound): + self._speed_of_sound = speed_of_sound + +def driver_init(): + pass + +driver_listener = SilentListener() +driver_audio_player_class = SilentAudioPlayer diff --git a/pyglet/media/procedural.py b/pyglet/media/procedural.py new file mode 100644 index 0000000..1ec93bc --- /dev/null +++ b/pyglet/media/procedural.py @@ -0,0 +1,181 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- +# $Id:$ + +from pyglet.media import Source, AudioFormat, AudioData + +import ctypes +import os +import math + +class ProceduralSource(Source): + def __init__(self, duration, sample_rate=44800, sample_size=16): + self._duration = float(duration) + self.audio_format = AudioFormat( + channels=1, + sample_size=sample_size, + sample_rate=sample_rate) + + self._offset = 0 + self._bytes_per_sample = sample_size >> 3 + self._bytes_per_second = self._bytes_per_sample * sample_rate + self._max_offset = int(self._bytes_per_second * self._duration) + + if self._bytes_per_sample == 2: + self._max_offset &= 0xfffffffe + + def _get_audio_data(self, bytes): + bytes = min(bytes, self._max_offset - self._offset) + if bytes <= 0: + return None + + timestamp = float(self._offset) / self._bytes_per_second + duration = float(bytes) / self._bytes_per_second + data = self._generate_data(bytes, self._offset) + self._offset += bytes + is_eos = self._offset >= self._max_offset + + return AudioData(data, + bytes, + timestamp, + duration) + + def _generate_data(self, bytes, offset): + '''Generate `bytes` bytes of data. + + Return data as ctypes array or string. + ''' + raise NotImplementedError('abstract') + + def _seek(self, timestamp): + self._offset = int(timestamp * self._bytes_per_second) + + # Bound within duration + self._offset = min(max(self._offset, 0), self._max_offset) + + # Align to sample + if self._bytes_per_sample == 2: + self._offset &= 0xfffffffe + +class Silence(ProceduralSource): + def _generate_data(self, bytes, offset): + if self._bytes_per_sample == 1: + return '\127' * bytes + else: + return '\0' * bytes + +class WhiteNoise(ProceduralSource): + def _generate_data(self, bytes, offset): + return os.urandom(bytes) + +class Sine(ProceduralSource): + def __init__(self, duration, frequency=440, **kwargs): + super(Sine, self).__init__(duration, **kwargs) + self.frequency = frequency + + def _generate_data(self, bytes, offset): + if self._bytes_per_sample == 1: + start = offset + samples = bytes + bias = 127 + amplitude = 127 + data = (ctypes.c_ubyte * samples)() + else: + start = offset >> 1 + samples = bytes >> 1 + bias = 0 + amplitude = 32767 + data = (ctypes.c_short * samples)() + step = self.frequency * (math.pi * 2) / self.audio_format.sample_rate + for i in range(samples): + data[i] = int(math.sin(step * (i + start)) * amplitude + bias) + return data + +class Saw(ProceduralSource): + def __init__(self, duration, frequency=440, **kwargs): + super(Saw, self).__init__(duration, **kwargs) + self.frequency = frequency + + def _generate_data(self, bytes, offset): + # XXX TODO consider offset + if self._bytes_per_sample == 1: + samples = bytes + value = 127 + max = 255 + min = 0 + data = (ctypes.c_ubyte * samples)() + else: + samples = bytes >> 1 + value = 0 + max = 32767 + min = -32768 + data = (ctypes.c_short * samples)() + step = (max - min) * 2 * self.frequency / self.audio_format.sample_rate + for i in range(samples): + value += step + if value > max: + value = max - (value - max) + step = -step + if value < min: + value = min - (value - min) + step = -step + data[i] = value + return data + +class Square(ProceduralSource): + def __init__(self, duration, frequency=440, **kwargs): + super(Square, self).__init__(duration, **kwargs) + self.frequency = frequency + + def _generate_data(self, bytes, offset): + # XXX TODO consider offset + if self._bytes_per_sample == 1: + samples = bytes + value = 0 + amplitude = 255 + data = (ctypes.c_ubyte * samples)() + else: + samples = bytes >> 1 + value = -32768 + amplitude = 65535 + data = (ctypes.c_short * samples)() + period = self.audio_format.sample_rate / self.frequency / 2 + count = 0 + for i in range(samples): + count += 1 + if count == period: + value = amplitude - value + count = 0 + data[i] = value + return data diff --git a/pyglet/media/riff.py b/pyglet/media/riff.py new file mode 100644 index 0000000..dcaac88 --- /dev/null +++ b/pyglet/media/riff.py @@ -0,0 +1,249 @@ +# ---------------------------------------------------------------------------- +# pyglet +# Copyright (c) 2006-2008 Alex Holkner +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of pyglet nor the names of its +# contributors may be used to endorse or promote products +# derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# ---------------------------------------------------------------------------- + +'''Simple Python-only RIFF reader, supports uncompressed WAV files. +''' + +__docformat__ = 'restructuredtext' +__version__ = '$Id: riff.py 2005 2008-04-13 01:03:03Z Alex.Holkner $' + +# RIFF reference: +# http://www.saettler.com/RIFFMCI/riffmci.html +# +# More readable WAVE summaries: +# +# http://www.borg.com/~jglatt/tech/wave.htm +# http://www.sonicspot.com/guide/wavefiles.html + +from pyglet.media import StreamingSource, AudioData, AudioFormat +from pyglet.media import MediaFormatException + +import ctypes +import struct +import StringIO + +WAVE_FORMAT_PCM = 0x0001 +IBM_FORMAT_MULAW = 0x0101 +IBM_FORMAT_ALAW = 0x0102 +IBM_FORMAT_ADPCM = 0x0103 + +class RIFFFormatException(MediaFormatException): + pass + +class WAVEFormatException(RIFFFormatException): + pass + +class RIFFChunk(object): + header_fmt = '<4sL' + header_length = struct.calcsize(header_fmt) + + def __init__(self, file, name, length, offset): + self.file = file + self.name = name + self.length = length + self.offset = offset + + def get_data(self): + self.file.seek(self.offset) + return self.file.read(self.length) + + def __repr__(self): + return '%s(%r, offset=%r, length=%r)' % ( + self.__class__.__name__, + self.name, + self.offset, + self.length) + +class RIFFForm(object): + _chunks = None + + def __init__(self, file, offset): + self.file = file + self.offset = offset + + def get_chunks(self): + if self._chunks: + return self._chunks + + self._chunks = [] + self.file.seek(self.offset) + offset = self.offset + while True: + header = self.file.read(RIFFChunk.header_length) + if not header: + break + name, length = struct.unpack(RIFFChunk.header_fmt, header) + offset += RIFFChunk.header_length + + cls = self._chunk_types.get(name, RIFFChunk) + chunk = cls(self.file, name, length, offset) + self._chunks.append(chunk) + + offset += length + if offset & 0x3 != 0: + offset = (offset | 0x3) + 1 + self.file.seek(offset) + return self._chunks + + def __repr__(self): + return '%s(offset=%r)' % (self.__class__.__name__, self.offset) + +class RIFFType(RIFFChunk): + def __init__(self, *args, **kwargs): + super(RIFFType, self).__init__(*args, **kwargs) + + self.file.seek(self.offset) + form = self.file.read(4) + if form != 'WAVE': + raise RIFFFormatException('Unsupported RIFF form "%s"' % form) + + self.form = WaveForm(self.file, self.offset + 4) + +class RIFFFile(RIFFForm): + _chunk_types = { + 'RIFF': RIFFType, + } + + def __init__(self, file): + if not hasattr(file, 'seek'): + file = StringIO.StringIO(file.read()) + + super(RIFFFile, self).__init__(file, 0) + + def get_wave_form(self): + chunks = self.get_chunks() + if len(chunks) == 1 and isinstance(chunks[0], RIFFType): + return chunks[0].form + +class WaveFormatChunk(RIFFChunk): + def __init__(self, *args, **kwargs): + super(WaveFormatChunk, self).__init__(*args, **kwargs) + + fmt = '