pyglet-1.1.4/0002700013464101346420000000000011505734504011212 5ustar yohyohpyglet-1.1.4/PKG-INFO0000600013464101346420000000201711317255174012311 0ustar yohyohMetadata-Version: 1.0 Name: pyglet Version: 1.1.4 Summary: Cross-platform windowing and multimedia library Home-page: http://www.pyglet.org/ Author: Alex Holkner Author-email: Alex.Holkner@gmail.com License: BSD Download-URL: http://www.pyglet.org/download.html Description: pyglet provides an object-oriented programming interface for developing games and other visually-rich applications for Windows, Mac OS X and Linux. Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: MacOS X Classifier: Environment :: Win32 (MS Windows) Classifier: Environment :: X11 Applications Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: BSD License Classifier: Operating System :: MacOS :: MacOS X Classifier: Operating System :: Microsoft :: Windows Classifier: Operating System :: POSIX :: Linux Classifier: Programming Language :: Python Classifier: Topic :: Games/Entertainment Classifier: Topic :: Software Development :: Libraries :: Python Modules pyglet-1.1.4/tests/0002700013464101346420000000000011505734504012354 5ustar yohyohpyglet-1.1.4/tests/text/0002700013464101346420000000000011317255174013342 5ustar yohyohpyglet-1.1.4/tests/text/CONTENT_VALIGN_BOTTOM.py0000600013464101346420000001201111266427715017152 0ustar yohyoh#!/usr/bin/env python '''Test content_valign = 'bottom' property of IncrementalTextLayout. Examine and type over the text in the window that appears. The window contents can be scrolled with the mouse wheel. When the content height is less than the window height, the content should be aligned to the bottom of the window. Press ESC to exit the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: STYLE.py 1754 2008-02-10 13:26:52Z Alex.Holkner $' import unittest from pyglet import app from pyglet import gl from pyglet import graphics from pyglet import text from pyglet.text import caret from pyglet.text import layout from pyglet import window from pyglet.window import key, mouse doctext = '''CONTENT_VALIGN_BOTTOM.py test document. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas aliquet quam sit amet enim. Donec iaculis, magna vitae imperdiet convallis, lectus sem ultricies nulla, non fringilla quam felis tempus velit. Etiam et velit. Integer euismod. Aliquam a diam. Donec sed ante. Mauris enim pede, dapibus sed, dapibus vitae, consectetuer in, est. Donec aliquam risus eu ipsum. Integer et tortor. Ut accumsan risus sed ante. Aliquam dignissim, massa a imperdiet fermentum, orci dolor facilisis ante, ut vulputate nisi nunc sed massa. Morbi sodales hendrerit tortor. Nunc id tortor ut lacus mollis malesuada. Sed nibh tellus, rhoncus et, egestas eu, laoreet eu, urna. Vestibulum massa leo, convallis et, pharetra vitae, iaculis at, ante. Pellentesque volutpat porta enim. Morbi ac nunc eget mi pretium viverra. Pellentesque felis risus, lobortis vitae, malesuada vitae, bibendum eu, tortor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus dapibus tortor ac neque. Curabitur pulvinar bibendum lectus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam tellus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla turpis leo, rhoncus vel, euismod non, consequat sed, massa. Quisque ultricies. Aliquam fringilla faucibus est. Proin nec felis eget felis suscipit vehicula. Etiam quam. Aliquam at ligula. Aenean quis dolor. Suspendisse potenti. Sed lacinia leo eu est. Nam pede ligula, molestie nec, tincidunt vel, posuere in, tellus. Donec fringilla dictum dolor. Aenean tellus orci, viverra id, vehicula eget, tempor a, dui. Morbi eu dolor nec lacus fringilla dapibus. Nulla facilisi. Nulla posuere. Nunc interdum. Donec convallis libero vitae odio. Aenean metus lectus, faucibus in, malesuada at, fringilla nec, risus. Integer enim. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin bibendum felis vel neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec ipsum dui, euismod at, dictum eu, congue tincidunt, urna. Sed quis odio. Integer aliquam pretium augue. Vivamus nonummy, dolor vel viverra rutrum, lacus dui congue pede, vel sodales dui diam nec libero. Morbi et leo sit amet quam sollicitudin laoreet. Vivamus suscipit. Duis arcu eros, iaculis ut, vehicula in, elementum a, sapien. Phasellus ut tellus. Integer feugiat nunc eget odio. Morbi accumsan nonummy ipsum. Donec condimentum, tortor non faucibus luctus, neque mi mollis magna, nec gravida risus elit nec ipsum. Donec nec sem. Maecenas varius libero quis diam. Curabitur pulvinar. Morbi at sem eget mauris tempor vulputate. Aenean eget turpis. ''' class TestWindow(window.Window): def __init__(self, *args, **kwargs): super(TestWindow, self).__init__(*args, **kwargs) self.batch = graphics.Batch() self.document = text.decode_text(doctext) self.margin = 2 self.layout = layout.IncrementalTextLayout(self.document, self.width - self.margin * 2, self.height - self.margin * 2, multiline=True, batch=self.batch) self.layout.content_valign = 'bottom' self.caret = caret.Caret(self.layout) self.push_handlers(self.caret) self.set_mouse_cursor(self.get_system_mouse_cursor('text')) def on_resize(self, width, height): super(TestWindow, self).on_resize(width, height) self.layout.begin_update() self.layout.x = self.margin self.layout.y = self.margin self.layout.width = width - self.margin * 2 self.layout.height = height - self.margin * 2 self.layout.end_update() def on_mouse_scroll(self, x, y, scroll_x, scroll_y): self.layout.view_x -= scroll_x self.layout.view_y += scroll_y * 16 def on_draw(self): gl.glClearColor(1, 1, 1, 1) self.clear() self.batch.draw() def on_key_press(self, symbol, modifiers): super(TestWindow, self).on_key_press(symbol, modifiers) if symbol == key.TAB: self.caret.on_text('\t') class TestCase(unittest.TestCase): def test(self): self.window = TestWindow(resizable=True, visible=False) self.window.set_visible() app.run() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/text/PLAIN.py0000600013464101346420000001147711266427715014576 0ustar yohyoh#!/usr/bin/env python '''Test an unformatted document is editable. Examine and type over the text in the window that appears. The window contents can be scrolled with the mouse wheel. Press ESC to exit the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: STYLE.py 1754 2008-02-10 13:26:52Z Alex.Holkner $' import unittest from pyglet import app from pyglet import gl from pyglet import graphics from pyglet import text from pyglet.text import caret from pyglet.text import layout from pyglet import window from pyglet.window import key, mouse doctext = '''PLAIN.py test document. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas aliquet quam sit amet enim. Donec iaculis, magna vitae imperdiet convallis, lectus sem ultricies nulla, non fringilla quam felis tempus velit. Etiam et velit. Integer euismod. Aliquam a diam. Donec sed ante. Mauris enim pede, dapibus sed, dapibus vitae, consectetuer in, est. Donec aliquam risus eu ipsum. Integer et tortor. Ut accumsan risus sed ante. Aliquam dignissim, massa a imperdiet fermentum, orci dolor facilisis ante, ut vulputate nisi nunc sed massa. Morbi sodales hendrerit tortor. Nunc id tortor ut lacus mollis malesuada. Sed nibh tellus, rhoncus et, egestas eu, laoreet eu, urna. Vestibulum massa leo, convallis et, pharetra vitae, iaculis at, ante. Pellentesque volutpat porta enim. Morbi ac nunc eget mi pretium viverra. Pellentesque felis risus, lobortis vitae, malesuada vitae, bibendum eu, tortor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus dapibus tortor ac neque. Curabitur pulvinar bibendum lectus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam tellus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla turpis leo, rhoncus vel, euismod non, consequat sed, massa. Quisque ultricies. Aliquam fringilla faucibus est. Proin nec felis eget felis suscipit vehicula. Etiam quam. Aliquam at ligula. Aenean quis dolor. Suspendisse potenti. Sed lacinia leo eu est. Nam pede ligula, molestie nec, tincidunt vel, posuere in, tellus. Donec fringilla dictum dolor. Aenean tellus orci, viverra id, vehicula eget, tempor a, dui. Morbi eu dolor nec lacus fringilla dapibus. Nulla facilisi. Nulla posuere. Nunc interdum. Donec convallis libero vitae odio. Aenean metus lectus, faucibus in, malesuada at, fringilla nec, risus. Integer enim. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin bibendum felis vel neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec ipsum dui, euismod at, dictum eu, congue tincidunt, urna. Sed quis odio. Integer aliquam pretium augue. Vivamus nonummy, dolor vel viverra rutrum, lacus dui congue pede, vel sodales dui diam nec libero. Morbi et leo sit amet quam sollicitudin laoreet. Vivamus suscipit. Duis arcu eros, iaculis ut, vehicula in, elementum a, sapien. Phasellus ut tellus. Integer feugiat nunc eget odio. Morbi accumsan nonummy ipsum. Donec condimentum, tortor non faucibus luctus, neque mi mollis magna, nec gravida risus elit nec ipsum. Donec nec sem. Maecenas varius libero quis diam. Curabitur pulvinar. Morbi at sem eget mauris tempor vulputate. Aenean eget turpis. ''' class TestWindow(window.Window): def __init__(self, *args, **kwargs): super(TestWindow, self).__init__(*args, **kwargs) self.batch = graphics.Batch() self.document = text.decode_text(doctext) self.margin = 2 self.layout = layout.IncrementalTextLayout(self.document, self.width - self.margin * 2, self.height - self.margin * 2, multiline=True, batch=self.batch) self.caret = caret.Caret(self.layout) self.push_handlers(self.caret) self.set_mouse_cursor(self.get_system_mouse_cursor('text')) def on_resize(self, width, height): super(TestWindow, self).on_resize(width, height) self.layout.begin_update() self.layout.x = self.margin self.layout.y = self.margin self.layout.width = width - self.margin * 2 self.layout.height = height - self.margin * 2 self.layout.end_update() def on_mouse_scroll(self, x, y, scroll_x, scroll_y): self.layout.view_x -= scroll_x self.layout.view_y += scroll_y * 16 def on_draw(self): gl.glClearColor(1, 1, 1, 1) self.clear() self.batch.draw() def on_key_press(self, symbol, modifiers): super(TestWindow, self).on_key_press(symbol, modifiers) if symbol == key.TAB: self.caret.on_text('\t') class TestCase(unittest.TestCase): def test(self): self.window = TestWindow(resizable=True, visible=False) self.window.set_visible() app.run() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/text/__init__.py0000600013464101346420000000000011266427715015446 0ustar yohyohpyglet-1.1.4/tests/text/EMPTY.py0000600013464101346420000000245611266427715014626 0ustar yohyoh#!/usr/bin/env python '''Test that an empty document doesn't break. Press ESC to exit the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: STYLE.py 1754 2008-02-10 13:26:52Z Alex.Holkner $' __noninteractive = True import unittest from pyglet import app from pyglet import gl from pyglet import graphics from pyglet.text import caret from pyglet.text import document from pyglet.text import layout from pyglet import window from pyglet.window import key, mouse class TestWindow(window.Window): def __init__(self, doctype, *args, **kwargs): super(TestWindow, self).__init__(*args, **kwargs) self.batch = graphics.Batch() self.document = doctype() self.layout = layout.IncrementalTextLayout(self.document, self.width, self.height, batch=self.batch) def on_draw(self): gl.glClearColor(1, 1, 1, 1) self.clear() self.batch.draw() class TestCase(unittest.TestCase): def testUnformatted(self): self.window = TestWindow(document.UnformattedDocument) self.window.dispatch_events() self.window.close() def testFormatted(self): self.window = TestWindow(document.FormattedDocument) self.window.dispatch_events() self.window.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/text/ELEMENT.py0000600013464101346420000001521311266427715015014 0ustar yohyoh#!/usr/bin/env python '''Test that inline elements are positioned correctly and are repositioned within an incremental layout. Examine and type over the text in the window that appears. There are several elements drawn with grey boxes. These should maintain their sizes and relative document positions as the text is scrolled and edited. Press ESC to exit the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: ELEMENT.py 1898 2008-03-08 04:44:17Z Alex.Holkner $' import unittest import pyglet from pyglet.text import caret, document, layout doctext = '''ELEMENT.py test document. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fusce venenatis pharetra libero. Phasellus lacinia nisi feugiat felis. Sed id magna in nisl cursus consectetuer. Aliquam aliquam lectus eu magna. Praesent sit amet ipsum vitae nisl mattis commodo. Aenean pulvinar facilisis lectus. Phasellus sodales risus sit amet lectus. Suspendisse in turpis. Vestibulum ac mi accumsan eros commodo tincidunt. Nullam velit. In pulvinar, dui sit amet ullamcorper dictum, dui risus ultricies nisl, a dignissim sapien enim sit amet tortor. Pellentesque fringilla, massa sit amet bibendum blandit, pede leo commodo mi, eleifend feugiat neque tortor dapibus mauris. Morbi nunc arcu, tincidunt vel, blandit non, iaculis vel, libero. Vestibulum sed metus vel velit scelerisque varius. Vivamus a tellus. Proin nec orci vel elit molestie venenatis. Aenean fringilla, lorem vel fringilla bibendum, nibh mi varius mi, eget semper ipsum ligula ut urna. Nullam tempor convallis augue. Sed at dui. Nunc faucibus pretium ipsum. Sed ultricies ligula a arcu. Pellentesque vel urna in augue euismod hendrerit. Donec consequat. Morbi convallis nulla at ante bibendum auctor. In augue mi, tincidunt a, porta ac, tempor sit amet, sapien. In sollicitudin risus. Vivamus leo turpis, elementum sed, accumsan eu, scelerisque at, augue. Ut eu tortor non sem vulputate bibendum. Fusce ultricies ultrices lorem. In hac habitasse platea dictumst. Morbi ac ipsum. Nam tellus sem, congue in, fermentum a, ullamcorper vel, mauris. Etiam erat tortor, facilisis ut, blandit id, placerat sed, orci. Donec quam eros, bibendum eu, ultricies id, mattis eu, tellus. Ut hendrerit erat vel ligula. Sed tellus. Quisque imperdiet ornare diam. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed neque quam, pretium et, malesuada sed, porttitor eu, leo. Sed varius ornare augue. Maecenas pede dui, nonummy eu, ullamcorper sed, lobortis id, sem. In sed leo. Nulla ornare. Curabitur dui. Cras ipsum. Cras massa augue, sodales nec, ultricies at, fermentum in, turpis. Aenean lorem lectus, fermentum et, lacinia quis, ullamcorper ac, purus. Pellentesque pharetra diam at elit. Donec dolor. Aenean turpis orci, aliquam vitae, fermentum et, consectetuer sed, lacus. Maecenas pulvinar, nisi sit amet lobortis rhoncus, est ipsum ullamcorper mauris, nec cursus felis neque et dolor. Nulla venenatis sapien vitae lectus. Praesent in risus. In imperdiet adipiscing nisi. Quisque volutpat, ante sed vehicula sodales, nisi quam bibendum turpis, id bibendum pede enim porttitor tellus. Aliquam velit. Pellentesque at mauris quis libero fermentum cursus. Integer bibendum scelerisque elit. Curabitur justo tellus, vehicula luctus, consequat vitae, convallis quis, nunc. Fusce libero nulla, convallis eu, dignissim sit amet, sagittis ac, odio. Morbi dictum tincidunt nisi. Curabitur hendrerit. Aliquam eleifend sodales leo. Donec interdum. Nam vulputate, purus in euismod bibendum, pede mi pellentesque dolor, at viverra quam tellus eget pede. Suspendisse varius mi id felis. Aenean in velit eu nisi suscipit mollis. Suspendisse vitae augue et diam volutpat luctus. Mauris et lorem. In mauris. Morbi commodo rutrum nibh. Pellentesque lobortis. Sed eget urna ut massa venenatis luctus. Morbi egestas purus eget ante pulvinar vulputate. Suspendisse sollicitudin. Cras tortor erat, semper vehicula, suscipit non, facilisis ut, est. Aenean quis libero varius nisl fringilla mollis. Donec viverra. Phasellus mi tortor, pulvinar id, pulvinar in, lacinia nec, massa. Curabitur lectus erat, volutpat at, volutpat at, pharetra nec, turpis. Donec ornare nonummy leo. Donec consectetuer posuere metus. Quisque tincidunt risus facilisis dui. Ut suscipit turpis in massa. Aliquam erat volutpat. ''' class TestElement(document.InlineElement): vertex_list = None def place(self, layout, x, y): self.vertex_list = layout.batch.add(4, pyglet.gl.GL_QUADS, layout.top_group, 'v2i', ('c4B', [200, 200, 200, 255] * 4)) y += self.descent w = self.advance h = self.ascent - self.descent self.vertex_list.vertices[:] = (x, y, x + w, y, x + w, y + h, x, y + h) def remove(self, layout): self.vertex_list.delete() del self.vertex_list class TestWindow(pyglet.window.Window): def __init__(self, *args, **kwargs): super(TestWindow, self).__init__(*args, **kwargs) self.batch = pyglet.graphics.Batch() self.document = pyglet.text.decode_attributed(doctext) for i in range(0, len(doctext), 300): self.document.insert_element(i, TestElement(60, -10, 70)) self.margin = 2 self.layout = layout.IncrementalTextLayout(self.document, self.width - self.margin * 2, self.height - self.margin * 2, multiline=True, batch=self.batch) self.caret = caret.Caret(self.layout) self.push_handlers(self.caret) self.set_mouse_cursor(self.get_system_mouse_cursor('text')) def on_resize(self, width, height): super(TestWindow, self).on_resize(width, height) self.layout.begin_update() self.layout.x = self.margin self.layout.y = self.margin self.layout.width = width - self.margin * 2 self.layout.height = height - self.margin * 2 self.layout.end_update() def on_mouse_scroll(self, x, y, scroll_x, scroll_y): self.layout.view_x -= scroll_x self.layout.view_y += scroll_y * 16 def on_draw(self): pyglet.gl.glClearColor(1, 1, 1, 1) self.clear() self.batch.draw() def on_key_press(self, symbol, modifiers): super(TestWindow, self).on_key_press(symbol, modifiers) if symbol == pyglet.window.key.TAB: self.caret.on_text('\t') class TestCase(unittest.TestCase): def test(self): self.window = TestWindow(resizable=True, visible=False) self.window.set_visible() pyglet.app.run() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/text/CONTENT_VALIGN_CENTER.py0000600013464101346420000001201111266427715017126 0ustar yohyoh#!/usr/bin/env python '''Test content_valign = 'center' property of IncrementalTextLayout. Examine and type over the text in the window that appears. The window contents can be scrolled with the mouse wheel. When the content height is less than the window height, the content should be aligned to the center of the window. Press ESC to exit the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: STYLE.py 1754 2008-02-10 13:26:52Z Alex.Holkner $' import unittest from pyglet import app from pyglet import gl from pyglet import graphics from pyglet import text from pyglet.text import caret from pyglet.text import layout from pyglet import window from pyglet.window import key, mouse doctext = '''CONTENT_VALIGN_CENTER.py test document. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas aliquet quam sit amet enim. Donec iaculis, magna vitae imperdiet convallis, lectus sem ultricies nulla, non fringilla quam felis tempus velit. Etiam et velit. Integer euismod. Aliquam a diam. Donec sed ante. Mauris enim pede, dapibus sed, dapibus vitae, consectetuer in, est. Donec aliquam risus eu ipsum. Integer et tortor. Ut accumsan risus sed ante. Aliquam dignissim, massa a imperdiet fermentum, orci dolor facilisis ante, ut vulputate nisi nunc sed massa. Morbi sodales hendrerit tortor. Nunc id tortor ut lacus mollis malesuada. Sed nibh tellus, rhoncus et, egestas eu, laoreet eu, urna. Vestibulum massa leo, convallis et, pharetra vitae, iaculis at, ante. Pellentesque volutpat porta enim. Morbi ac nunc eget mi pretium viverra. Pellentesque felis risus, lobortis vitae, malesuada vitae, bibendum eu, tortor. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus dapibus tortor ac neque. Curabitur pulvinar bibendum lectus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aliquam tellus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla turpis leo, rhoncus vel, euismod non, consequat sed, massa. Quisque ultricies. Aliquam fringilla faucibus est. Proin nec felis eget felis suscipit vehicula. Etiam quam. Aliquam at ligula. Aenean quis dolor. Suspendisse potenti. Sed lacinia leo eu est. Nam pede ligula, molestie nec, tincidunt vel, posuere in, tellus. Donec fringilla dictum dolor. Aenean tellus orci, viverra id, vehicula eget, tempor a, dui. Morbi eu dolor nec lacus fringilla dapibus. Nulla facilisi. Nulla posuere. Nunc interdum. Donec convallis libero vitae odio. Aenean metus lectus, faucibus in, malesuada at, fringilla nec, risus. Integer enim. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin bibendum felis vel neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec ipsum dui, euismod at, dictum eu, congue tincidunt, urna. Sed quis odio. Integer aliquam pretium augue. Vivamus nonummy, dolor vel viverra rutrum, lacus dui congue pede, vel sodales dui diam nec libero. Morbi et leo sit amet quam sollicitudin laoreet. Vivamus suscipit. Duis arcu eros, iaculis ut, vehicula in, elementum a, sapien. Phasellus ut tellus. Integer feugiat nunc eget odio. Morbi accumsan nonummy ipsum. Donec condimentum, tortor non faucibus luctus, neque mi mollis magna, nec gravida risus elit nec ipsum. Donec nec sem. Maecenas varius libero quis diam. Curabitur pulvinar. Morbi at sem eget mauris tempor vulputate. Aenean eget turpis. ''' class TestWindow(window.Window): def __init__(self, *args, **kwargs): super(TestWindow, self).__init__(*args, **kwargs) self.batch = graphics.Batch() self.document = text.decode_text(doctext) self.margin = 2 self.layout = layout.IncrementalTextLayout(self.document, self.width - self.margin * 2, self.height - self.margin * 2, multiline=True, batch=self.batch) self.layout.content_valign = 'center' self.caret = caret.Caret(self.layout) self.push_handlers(self.caret) self.set_mouse_cursor(self.get_system_mouse_cursor('text')) def on_resize(self, width, height): super(TestWindow, self).on_resize(width, height) self.layout.begin_update() self.layout.x = self.margin self.layout.y = self.margin self.layout.width = width - self.margin * 2 self.layout.height = height - self.margin * 2 self.layout.end_update() def on_mouse_scroll(self, x, y, scroll_x, scroll_y): self.layout.view_x -= scroll_x self.layout.view_y += scroll_y * 16 def on_draw(self): gl.glClearColor(1, 1, 1, 1) self.clear() self.batch.draw() def on_key_press(self, symbol, modifiers): super(TestWindow, self).on_key_press(symbol, modifiers) if symbol == key.TAB: self.caret.on_text('\t') class TestCase(unittest.TestCase): def test(self): self.window = TestWindow(resizable=True, visible=False) self.window.set_visible() app.run() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/text/RUNLIST.py0000700013464101346420000002142011266427715015061 0ustar yohyoh#!/usr/bin/python # $Id:$ from pyglet.text import runlist import unittest __noninteractive = True class TestStyleRuns(unittest.TestCase): def check_value(self, runs, value): for i, style in enumerate(value): self.assertTrue(runs[i] == style, repr(runs.runs)) self.check_optimal(runs) self.check_continuous(runs) self.check_iter(runs, value) self.check_iter_range(runs, value) def check_optimal(self, runs): last_style = None for _, _, style in runs: self.assertTrue(style != last_style) last_style = style def check_continuous(self, runs): next_start = 0 for start, end, _ in runs: self.assertTrue(start == next_start) next_start = end def check_iter(self, runs, value): for start, end, style in runs: for v in value[start:end]: self.assertTrue(v == style) def check_iter_range(self, runs, value): for interval in range(1, len(value)): it = runs.get_run_iterator() for start in range(0, len(value), interval): end = min(start + interval, len(value)) for s, e, style in it.ranges(start, end): for v in value[s:e]: self.assertTrue(v == style, (start, end, s, e, style)) def check_empty(self, runs, value): start, end, style = iter(runs).next() self.assertTrue(start == 0) self.assertTrue(end == 0) self.assertTrue(style == value) def test_zero(self): runs = runlist.RunList(0, 'x') it = iter(runs) start, end, s = it.next() self.assertTrue(start == 0) self.assertTrue(end == 0) self.assertTrue(s == 'x') self.assertRaises(StopIteration, it.next) self.check_optimal(runs) def test_initial(self): runs = runlist.RunList(10, 'x') it = iter(runs) start, end, s = it.next() self.assertTrue(start == 0) self.assertTrue(end == 10) self.assertTrue(s == 'x') self.assertRaises(StopIteration, it.next) self.check_value(runs, 'x' * 10) def test_set1(self): runs = runlist.RunList(10, 'a') runs.set_run(2, 8, 'b') self.check_value(runs, 'aabbbbbbaa') def test_set1_start(self): runs = runlist.RunList(10, 'a') runs.set_run(0, 5, 'b') self.check_value(runs, 'bbbbbaaaaa') def test_set1_end(self): runs = runlist.RunList(10, 'a') runs.set_run(5, 10, 'b') self.check_value(runs, 'aaaaabbbbb') def test_set1_all(self): runs = runlist.RunList(10, 'a') runs.set_run(0, 10, 'b') self.check_value(runs, 'bbbbbbbbbb') def test_set1_1(self): runs = runlist.RunList(10, 'a') runs.set_run(1, 2, 'b') self.check_value(runs, 'abaaaaaaaa') def test_set_overlapped(self): runs = runlist.RunList(10, 'a') runs.set_run(0, 5, 'b') self.check_value(runs, 'bbbbbaaaaa') runs.set_run(5, 10, 'c') self.check_value(runs, 'bbbbbccccc') runs.set_run(3, 7, 'd') self.check_value(runs, 'bbbddddccc') runs.set_run(4, 6, 'e') self.check_value(runs, 'bbbdeedccc') runs.set_run(5, 9, 'f') self.check_value(runs, 'bbbdeffffc') runs.set_run(2, 3, 'g') self.check_value(runs, 'bbgdeffffc') runs.set_run(1, 3, 'h') self.check_value(runs, 'bhhdeffffc') runs.set_run(1, 9, 'i') self.check_value(runs, 'biiiiiiiic') runs.set_run(0, 10, 'j') self.check_value(runs, 'jjjjjjjjjj') def test_insert_empty(self): runs = runlist.RunList(0, 'a') runs.insert(0, 10) self.check_value(runs, 'aaaaaaaaaa') def test_insert_beginning(self): runs = runlist.RunList(5, 'a') runs.set_run(1, 4, 'b') self.check_value(runs, 'abbba') runs.insert(0, 3) self.check_value(runs, 'aaaabbba') def test_insert_beginning_1(self): runs = runlist.RunList(5, 'a') self.check_value(runs, 'aaaaa') runs.insert(0, 1) runs.set_run(0, 1, 'a') self.check_value(runs, 'aaaaaa') runs.insert(0, 1) runs.set_run(0, 1, 'a') self.check_value(runs, 'aaaaaaa') runs.insert(0, 1) runs.set_run(0, 1, 'a') self.check_value(runs, 'aaaaaaaa') def test_insert_beginning_2(self): runs = runlist.RunList(5, 'a') self.check_value(runs, 'aaaaa') runs.insert(0, 1) runs.set_run(0, 1, 'b') self.check_value(runs, 'baaaaa') runs.insert(0, 1) runs.set_run(0, 1, 'c') self.check_value(runs, 'cbaaaaa') runs.insert(0, 1) runs.set_run(0, 1, 'c') self.check_value(runs, 'ccbaaaaa') def test_insert_1(self): runs = runlist.RunList(5, 'a') runs.set_run(1, 4, 'b') self.check_value(runs, 'abbba') runs.insert(1, 3) self.check_value(runs, 'aaaabbba') def test_insert_2(self): runs = runlist.RunList(5, 'a') runs.set_run(1, 2, 'b') self.check_value(runs, 'abaaa') runs.insert(2, 3) self.check_value(runs, 'abbbbaaa') def test_insert_end(self): runs = runlist.RunList(5, 'a') runs.set_run(4, 5, 'b') self.check_value(runs, 'aaaab') runs.insert(5, 3) self.check_value(runs, 'aaaabbbb') def test_insert_almost_end(self): runs = runlist.RunList(5, 'a') runs.set_run(0, 3, 'b') runs.set_run(4, 5, 'c') self.check_value(runs, 'bbbac') runs.insert(4, 3) self.check_value(runs, 'bbbaaaac') def test_delete_1_beginning(self): runs = runlist.RunList(5, 'a') self.check_value(runs, 'aaaaa') runs.delete(0, 3) self.check_value(runs, 'aa') def test_delete_1_middle(self): runs = runlist.RunList(5, 'a') self.check_value(runs, 'aaaaa') runs.delete(1, 4) self.check_value(runs, 'aa') def test_delete_1_end(self): runs = runlist.RunList(5, 'a') self.check_value(runs, 'aaaaa') runs.delete(2, 5) self.check_value(runs, 'aa') def test_delete_1_all(self): runs = runlist.RunList(5, 'a') self.check_value(runs, 'aaaaa') runs.delete(0, 5) self.check_value(runs, '') self.check_empty(runs, 'a') def create_runs1(self): runs = runlist.RunList(10, 'a') runs.set_run(1, 10, 'b') runs.set_run(2, 10, 'c') runs.set_run(3, 10, 'd') runs.set_run(4, 10, 'e') runs.set_run(5, 10, 'f') runs.set_run(6, 10, 'g') runs.set_run(7, 10, 'h') runs.set_run(8, 10, 'i') runs.set_run(9, 10, 'j') self.check_value(runs, 'abcdefghij') return runs def create_runs2(self): runs = runlist.RunList(10, 'a') runs.set_run(4, 7, 'b') runs.set_run(7, 10, 'c') self.check_value(runs, 'aaaabbbccc') return runs def test_delete2(self): runs = self.create_runs1() runs.delete(0, 5) self.check_value(runs, 'fghij') def test_delete3(self): runs = self.create_runs1() runs.delete(2, 8) self.check_value(runs, 'abij') def test_delete4(self): runs = self.create_runs2() runs.delete(0, 5) self.check_value(runs, 'bbccc') def test_delete5(self): runs = self.create_runs2() runs.delete(5, 10) self.check_value(runs, 'aaaab') def test_delete6(self): runs = self.create_runs2() runs.delete(0, 8) self.check_value(runs, 'cc') def test_delete7(self): runs = self.create_runs2() runs.delete(2, 10) self.check_value(runs, 'aa') def test_delete8(self): runs = self.create_runs2() runs.delete(3, 8) self.check_value(runs, 'aaacc') def test_delete9(self): runs = self.create_runs2() runs.delete(7, 8) self.check_value(runs, 'aaaabbbcc') def test_delete10(self): runs = self.create_runs2() runs.delete(8, 9) self.check_value(runs, 'aaaabbbcc') def test_delete11(self): runs = self.create_runs2() runs.delete(9, 10) self.check_value(runs, 'aaaabbbcc') def test_delete12(self): runs = self.create_runs2() runs.delete(4, 5) self.check_value(runs, 'aaaabbccc') def test_delete13(self): runs = self.create_runs2() runs.delete(5, 6) self.check_value(runs, 'aaaabbccc') def test_delete14(self): runs = self.create_runs2() runs.delete(6, 7) self.check_value(runs, 'aaaabbccc') if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/text/STYLE.py0000600013464101346420000002532711266427715014632 0ustar yohyoh#!/usr/bin/env python '''Test that character and paragraph-level style is adhered to correctly in incremental layout. Examine and type over the text in the window that appears. The window contents can be scrolled with the mouse wheel. There are no formatting commands, however formatting should be preserved as expected when entering or replacing text and resizing the window. Press ESC to exit the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: STYLE.py 2091 2008-05-29 13:45:22Z Alex.Holkner $' import unittest from pyglet import app from pyglet import gl from pyglet import graphics from pyglet import text from pyglet.text import caret from pyglet.text import layout from pyglet import window from pyglet.window import key, mouse doctext = '''STYLE.py test document. {font_size 24}This is 24pt text.{font_size 12} This is 12pt text (as is everything that follows). This text has some {bold True}bold character style{bold False}, some {italic True}italic character style{italic False}, some {underline [0, 0, 0, 255]}underlined text{underline None}, {underline [255, 0, 0, 255]}underline in red{underline None}, a {color [255, 0, 0, 255]}change {color [0, 255, 0, 255]}in {color [0, 0, 255, 255]}color{color None}, and in {background_color [255, 255, 0, 255]}background {background_color [0, 255, 255, 255]}color{background_color None}. {kerning '2pt'}This sentence has 2pt kerning.{kerning 0} {kerning '-1pt'}This sentence has negative 1pt kerning.{kerning 0} Superscript is emulated by setting a positive baseline offset and reducing the font size, as in a{font_size 9}{baseline '4pt'}2{font_size None}{baseline 0} + b{font_size 9}{baseline '4pt'}2{font_size None}{baseline 0} = c{font_size 9}{baseline '4pt'}2{font_size None}{baseline 0}. Subscript is similarly emulated with a negative baseline offset, as in H{font_size 9}{baseline '-3pt'}2{font_size None}{baseline 0}O. This paragraph uses {font_name 'Courier New'}Courier New{font_name None} and {font_name 'Times New Roman'}Times New Roman{font_name None} fonts. {.leading '5pt'}This paragraph has 5pts leading. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. {.leading None}{.line_spacing '12pt'}This paragraph has constant line spacing of 12pt. When an {font_size 18}18pt font is used{font_size None}, the text overlaps and the baselines stay equally spaced. Lorem ipsum dolor sit amet, consectetur adipisicing elit, {font_size 18}sed do eiusmod tempor incididunt ut labore et dolore{font_size None} magna aliqua. {.line_spacing None}{.indent '20pt'}This paragraph has a 20pt indent. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. {.indent None}{.tab_stops [300, 500]}Tablated data:{#x09}Player{#x09}Score{} {#x09}Alice{#x09}30,000{} {#x09}Bob{#x09}20,000{} {#x09}Candice{#x09}10,000{} {#x09}David{#x09}500 {.indent None}{.align 'right'}This paragraph is right aligned. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. {.align 'center'}This paragraph is centered. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. {.align 'left'}{.margin_left 50}This paragraph has a 50 pixel left margin. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. {.margin_left 0}{.margin_right '50px'}This paragraph has a 50 pixel right margin. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. {.margin_left 200}{.margin_right 200}This paragraph has 200 pixel left and right margins. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. {.align 'right'}{.margin_left 100}{.margin_right 100}This paragraph is right-aligned, and has 100 pixel left and right margins. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. {.align 'center'}{.margin_left 100}{.margin_right 100}This paragraph is centered, and has 100 pixel left and right margins. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. {.align 'left'}{.margin_left 0}{.margin_right 0}{.wrap False}This paragraph does not word-wrap. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. {.wrap True}{.margin_bottom 15}This and the following two paragraphs have a 15 pixel vertical margin separating them. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.{} Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.{} Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.{} {.margin_bottom 0}{.margin_top 30}This and the following two paragraphs have a 30 pixel vertical margin (this time, the top margin is used instead of the bottom margin). There is a 45 pixel margin between this paragraph and the previous one.{} Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.{} Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.{} ''' class TestWindow(window.Window): def __init__(self, *args, **kwargs): super(TestWindow, self).__init__(*args, **kwargs) self.batch = graphics.Batch() self.document = text.decode_attributed(doctext) self.margin = 2 self.layout = layout.IncrementalTextLayout(self.document, self.width - self.margin * 2, self.height - self.margin * 2, multiline=True, batch=self.batch) self.caret = caret.Caret(self.layout) self.push_handlers(self.caret) self.set_mouse_cursor(self.get_system_mouse_cursor('text')) def on_resize(self, width, height): super(TestWindow, self).on_resize(width, height) self.layout.begin_update() self.layout.x = self.margin self.layout.y = self.margin self.layout.width = width - self.margin * 2 self.layout.height = height - self.margin * 2 self.layout.end_update() def on_mouse_scroll(self, x, y, scroll_x, scroll_y): self.layout.view_x -= scroll_x self.layout.view_y += scroll_y * 16 def on_draw(self): gl.glClearColor(1, 1, 1, 1) self.clear() self.batch.draw() def on_key_press(self, symbol, modifiers): super(TestWindow, self).on_key_press(symbol, modifiers) if symbol == key.TAB: self.caret.on_text('\t') class TestCase(unittest.TestCase): def test(self): self.window = TestWindow(resizable=True, visible=False) self.window.set_visible() app.run() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/text/HTML.py0000600013464101346420000001742011266427715014471 0ustar yohyoh#!/usr/bin/env python '''Test that HTML data is decoded into a formatted document. Press ESC to exit the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: ELEMENT.py 1764 2008-02-16 05:24:46Z Alex.Holkner $' import unittest import pyglet from pyglet.text import caret, document, layout doctext = ''' (metadata including title is not displayed.) Test document

HTML test document

Several paragraphs of HTML formatted text follow. Ensure they are formatted as they are described. Here is a copyright symbol: © and again, using hexadecimal ref: ©.

This paragraph has some bold and italic and bold italic text.

This paragraph has some emphasis and strong and emphatic strong text.

This paragraph demonstrates superscript: a2 + b2 = c2; and subscript: H2O.

This paragraph uses the <font> element: Courier New, size 1, size 2, size 3, size 4, size 5, size 6, size 7.

This paragraph uses relative sizes: size 5size 3

Font color changes to red, green and pastel blue using a hexidecimal number.

This text is underlined. This text is underlined and green.

Heading 1

Heading 2

Heading 3

Heading 4

Heading 5
Heading 6

Centered paragraph.

Right-aligned paragraph.

<div> element instead of paragraph.
This sentence should start a new paragraph, as the div is nested.
This sentence should start a new paragraph, as the nested div was closed.
This text is preformatted.
Hard line breaks
   Indentation.  Inline formatting is still ok.

This paragraph
has a
line break
after every
two words.

This paragraph is blockquote. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Nested blockquote. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Here is a quotation. The previous paragraph mentioned, Lorem ipsum dolor sit amet, ....
  • Unordered list, level 1. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
  • Item 2. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
  • Item 3. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
    • A nested list. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
    • Item 3.2. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
  • Unordered list with circle bullets.
  • Item 2.
  • Unordered list with square bullets.
  • Item 2.
  1. Numbered list.
  2. Item 2.
  3. Item 3.
  4. Item 10
  5. Item 11
  1. Numbered list starting at 12.
  2. Item 13.
  1. Numbered list with "a" type
  2. Item 2
  3. Item 3
  1. Numbered list with "A" type
  2. Item 2
  3. Item 3
  1. Numbered list with "i" type
  2. Item 2
  3. Item 3
  1. Numbered list with "I" type
  2. Item 2
  3. Item 3
Here's a definition list:
Term
Definition.
Term
Definition.
Term
Definition.
''' class TestWindow(pyglet.window.Window): def __init__(self, *args, **kwargs): super(TestWindow, self).__init__(*args, **kwargs) self.batch = pyglet.graphics.Batch() self.document = pyglet.text.decode_html(doctext) self.margin = 2 self.layout = layout.IncrementalTextLayout(self.document, self.width - self.margin * 2, self.height - self.margin * 2, multiline=True, batch=self.batch) self.caret = caret.Caret(self.layout) self.push_handlers(self.caret) self.set_mouse_cursor(self.get_system_mouse_cursor('text')) def on_resize(self, width, height): super(TestWindow, self).on_resize(width, height) self.layout.begin_update() self.layout.x = self.margin self.layout.y = self.margin self.layout.width = width - self.margin * 2 self.layout.height = height - self.margin * 2 self.layout.end_update() def on_mouse_scroll(self, x, y, scroll_x, scroll_y): self.layout.view_x -= scroll_x self.layout.view_y += scroll_y * 16 def on_draw(self): pyglet.gl.glClearColor(1, 1, 1, 1) self.clear() self.batch.draw() def on_key_press(self, symbol, modifiers): super(TestWindow, self).on_key_press(symbol, modifiers) if symbol == pyglet.window.key.TAB: self.caret.on_text('\t') class TestCase(unittest.TestCase): def test(self): self.window = TestWindow(resizable=True, visible=False) self.window.set_visible() pyglet.app.run() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/resource/0002700013464101346420000000000011317255174014205 5ustar yohyohpyglet-1.1.4/tests/resource/RES_LOAD_IMAGE.py0000700013464101346420000000504111266427720016713 0ustar yohyoh#!/usr/bin/python # $Id:$ import os import sys import unittest from pyglet.gl import * from pyglet import image from pyglet import resource from pyglet import window __noninteractive = True # Test image is laid out # M R # B G # In this test the image is sampled at four points from top-right clockwise: # R G B M (red, green, blue, magenta) class TestCase(unittest.TestCase): def setUp(self): self.w = window.Window(width=10, height=10) self.w.dispatch_events() resource.path.append('@' + __name__) resource.reindex() def tearDown(self): self.w.close() def check(self, img, colors): glClear(GL_COLOR_BUFFER_BIT) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST) img.blit(img.anchor_x, img.anchor_y) buffer = image.get_buffer_manager().get_color_buffer().get_image_data() bytes = buffer.get_data('RGBA', buffer.width * 4) def sample(x, y): i = y * buffer.pitch + x * len(buffer.format) r, g, b, _ = bytes[i:i+len(buffer.format)] if type(r) is str: r, g, b = map(ord, (r, g, b)) return { (255, 0, 0): 'r', (0, 255, 0): 'g', (0, 0, 255): 'b', (255, 0, 255): 'm'}.get((r, g, b), 'x') samples = ''.join([ sample(3, 3), sample(3, 0), sample(0, 0), sample(0, 3)]) self.assertTrue(samples == colors, samples) def test0(self): self.check(resource.image('rgbm.png'), 'rgbm') def test2(self): self.check(resource.image('rgbm.png', flip_x=True), 'mbgr') def test3(self): self.check(resource.image('rgbm.png', flip_y=True), 'grmb') def test4(self): self.check(resource.image('rgbm.png', flip_x=True, flip_y=True), 'bmrg') def test5(self): self.check(resource.image('rgbm.png', rotate=90), 'mrgb') def test5a(self): self.check(resource.image('rgbm.png', rotate=-270), 'mrgb') def test6(self): self.check(resource.image('rgbm.png', rotate=180), 'bmrg') def test6a(self): self.check(resource.image('rgbm.png', rotate=-180), 'bmrg') def test7(self): self.check(resource.image('rgbm.png', rotate=270), 'gbmr') def test7a(self): self.check(resource.image('rgbm.png', rotate=-90), 'gbmr') if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/resource/__init__.py0000600013464101346420000000000011266427720016305 0ustar yohyohpyglet-1.1.4/tests/resource/dir2/0002700013464101346420000000000011317255174015045 5ustar yohyohpyglet-1.1.4/tests/resource/dir2/file.txt0000600013464101346420000000000311266427720016517 0ustar yohyohF6 pyglet-1.1.4/tests/resource/RES_LOAD.py0000600013464101346420000000724211266427720016015 0ustar yohyoh#!/usr/bin/env python ''' ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' __noninteractive = True ''' Layout: . (script home) file.txt F1 dir1/ file.txt F2 dir1/ file.txt F3 res.zip/ file.txt F7 dir1/ file.txt F8 dir1/ file.txt F9 dir2/ file.txt F6 ''' import os import sys import unittest from pyglet import resource class TestCase(unittest.TestCase): def setUp(self): self.script_home = os.path.dirname(__file__) def check(self, path, result): self.check_file(path, 'file.txt', result) def check_file(self, path, file, result): loader = resource.Loader(path, script_home=self.script_home) self.assertTrue(loader.file(file).read() == '%s\n' % result) def checkFail(self, path): loader = resource.Loader(path, script_home=self.script_home) self.assertRaises(resource.ResourceNotFoundException, loader.file, 'file.txt') def test1(self): self.check(None, 'F1') def test2(self): self.check('', 'F1') def test2a(self): self.check('.', 'F1') def test2b(self): self.checkFail(()) def test2c(self): self.checkFail('foo') def test2d(self): self.checkFail(['foo']) def test2e(self): self.check(['foo', '.'], 'F1') def test3(self): self.check(['.', 'dir1'], 'F1') def test4(self): self.check(['dir1'], 'F2') def test5(self): self.check(['dir1', '.'], 'F2') def test6(self): self.check(['dir1/dir1'], 'F3') def test7(self): self.check(['dir1', 'dir1/dir1'], 'F2') def test8(self): self.check(['dir1/dir1', 'dir1'], 'F3') def test9(self): self.check('dir1/res.zip', 'F7') def test9a(self): self.check('dir1/res.zip/', 'F7') def test10(self): self.check('dir1/res.zip/dir1', 'F8') def test10a(self): self.check('dir1/res.zip/dir1/', 'F8') def test11(self): self.check(['dir1/res.zip/dir1', 'dir1/res.zip'], 'F8') def test12(self): self.check(['dir1/res.zip', 'dir1/res.zip/dir1'], 'F7') def test12a(self): self.check(['dir1/res.zip', 'dir1/res.zip/dir1/dir1'], 'F7') def test12b(self): self.check(['dir1/res.zip/dir1/dir1/', 'dir1/res.zip/dir1'], 'F9') def test12c(self): self.check(['dir1/res.zip/dir1/dir1', 'dir1/res.zip/dir1'], 'F9') def test13(self): self.check(['dir1', 'dir2'], 'F2') def test14(self): self.check(['dir2', 'dir1'], 'F6') # path tests def test15(self): self.check_file([''], 'dir1/file.txt', 'F2') def test15a(self): self.check_file([''], 'dir1/dir1/file.txt', 'F3') def test15b(self): self.check_file(['dir1'], 'dir1/file.txt', 'F3') def test15c(self): self.check_file([''], 'dir2/file.txt', 'F6') def test15d(self): self.check_file(['.'], 'dir2/file.txt', 'F6') # zip path tests def test16(self): self.check_file(['dir1/res.zip'], 'dir1/file.txt', 'F8') def test16a(self): self.check_file(['dir1/res.zip/'], 'dir1/file.txt', 'F8') def test16a(self): self.check_file(['dir1/res.zip/'], 'dir1/dir1/file.txt', 'F9') def test16b(self): self.check_file(['dir1/res.zip/dir1'], 'dir1/file.txt', 'F9') def test16c(self): self.check_file(['dir1/res.zip/dir1/'], 'dir1/file.txt', 'F9') if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/resource/dir1/0002700013464101346420000000000011317255174015044 5ustar yohyohpyglet-1.1.4/tests/resource/dir1/res.zip0000600013464101346420000000126111266427720016362 0ustar yohyohPK 7dir1/UT bGɊbGUxPK 7Jafile.txtUT bGbGUxF7 PK 7 dir1/dir1/UT bGɊbGUxPK 7Ledir1/dir1/file.txtUT bGbGUxF9 PK 7}| dir1/file.txtUT bGbGUxF8 PK 7 Adir1/UTbGUxPK 7Ja 8file.txtUTbGUxPK 7 Avdir1/dir1/UTbGUxPK 7Le dir1/dir1/file.txtUTbGUxPK 7}| dir1/file.txtUTbGUxPK]>pyglet-1.1.4/tests/resource/dir1/dir1/0002700013464101346420000000000011317255174015703 5ustar yohyohpyglet-1.1.4/tests/resource/dir1/dir1/file.txt0000600013464101346420000000000311266427720017355 0ustar yohyohF3 pyglet-1.1.4/tests/resource/dir1/file.txt0000600013464101346420000000000311266427720016516 0ustar yohyohF2 pyglet-1.1.4/tests/resource/rgbm.png0000700013464101346420000000025211266427720015643 0ustar yohyohPNG  IHDR& ) pHYs  tIME 4ktEXtCommentCreated with The GIMPd%n IDATc🁁 0B 2w )@+IENDB`pyglet-1.1.4/tests/resource/file.txt0000600013464101346420000000000311266427720015657 0ustar yohyohF1 pyglet-1.1.4/tests/regression/0002700013464101346420000000000011317255174014536 5ustar yohyohpyglet-1.1.4/tests/regression/__init__.py0000600013464101346420000000113111266427714016647 0ustar yohyoh#!/usr/bin/env python ''' ''' __docformat__ = 'restructuredtext' __version__ = '$Id: __init__.py 661 2007-02-17 00:23:30Z Alex.Holkner $' import unittest from pyglet.image import get_buffer_manager class ImageRegressionTestCase(unittest.TestCase): _enable_regression_image = False _enable_interactive = True _captured_image = None def capture_regression_image(self): if not self._enable_regression_image: return False self._captured_image = \ get_buffer_manager().get_color_buffer().image_data return not self._enable_interactive pyglet-1.1.4/tests/regression/images/0002700013464101346420000000000011317255174016003 5ustar yohyohpyglet-1.1.4/tests/regression/images/DELETEME0000600013464101346420000000021411266427714017113 0ustar yohyohThis file exists only to facilitate the creation of the tests/regression/images directory, which should otherwise be empty in distribution. pyglet-1.1.4/tests/__init__.py0000600013464101346420000000000011266427720014456 0ustar yohyohpyglet-1.1.4/tests/media/0002700013464101346420000000000011317255174013435 5ustar yohyohpyglet-1.1.4/tests/media/PLAYER_EOS_NEXT.py0000700013464101346420000000130311266427712016347 0ustar yohyoh#!/usr/bin/env python '''Test that audio playback works. You should hear a tone at 440Hz (A above middle C) for 1.0 seconds. The test will exit immediately after. You may want to turn down the volume of your speakers. ''' import unittest from pyglet import media from pyglet.media import procedural class TEST_CASE(unittest.TestCase): def test_method(self): source1 = procedural.Sine(0.5) source2 = procedural.Sine(0.5) player = media.Player() player.queue(source1) player.queue(source2) player.play() while player.source: player.dispatch_events() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/media/PLAYER_PLAY_QUEUE.py0000700013464101346420000000116211266427712016577 0ustar yohyoh#!/usr/bin/env python '''Test that audio playback works. You should hear white noise (static) for 0.5 seconds. The test will exit immediately after. You may want to turn down the volume of your speakers. ''' import unittest from pyglet import media from pyglet.media import procedural class TEST_CASE(unittest.TestCase): def test_method(self): source = procedural.WhiteNoise(0.5) player = media.Player() player.play() player.queue(source) while player.source: player.dispatch_events() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/media/__init__.py0000600013464101346420000000000011266427712015536 0ustar yohyohpyglet-1.1.4/tests/media/PLAYER_STATIC_STATIC.py0000700013464101346420000000131411266427712017123 0ustar yohyoh#!/usr/bin/env python '''Test that audio playback works. You should hear white noise (static) for 0.5 seconds. The test will exit immediately after. You may want to turn down the volume of your speakers. ''' import unittest from pyglet import media from pyglet.media import procedural class TEST_CASE(unittest.TestCase): def test_method(self): source = procedural.WhiteNoise(0.5) source = media.StaticSource(source) source = media.StaticSource(source) player = media.Player() player.queue(source) player.play() while player.source: player.dispatch_events() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/media/PLAYER_PAUSE_QUEUE.py0000700013464101346420000000121611266427712016707 0ustar yohyoh#!/usr/bin/env python '''Test that audio playback works. You should hear white noise (static) for 0.5 seconds. The test will exit immediately after. You may want to turn down the volume of your speakers. ''' import unittest from pyglet import media from pyglet.media import procedural class TEST_CASE(unittest.TestCase): def test_method(self): source = procedural.WhiteNoise(0.5) player = media.Player() player.pause() player.queue(source) while player.source: player.dispatch_events() player.play() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/media/PLAYER_PAUSE.py0000700013464101346420000000175011266427712015746 0ustar yohyoh#!/usr/bin/env python '''Test that audio playback works. You should hear white noise (static) for 0.25 seconds, then a 0.5 second pause then another 0.25 seconds of noise. The test will exit immediately after. You may want to turn down the volume of your speakers. ''' import unittest import time from pyglet import media from pyglet.media import procedural class TEST_CASE(unittest.TestCase): def test_method(self): source = procedural.WhiteNoise(0.5) player = media.Player() player.queue(source) player.play() start_time = time.time() stage = 0 while player.source: if stage == 0 and time.time() - start_time > 0.25: player.pause() stage = 1 if stage == 1 and time.time() - start_time > 0.75: player.play() stage = 2 player.dispatch_events() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/media/PLAYER_QUEUE_PLAY.py0000700013464101346420000000116211266427712016577 0ustar yohyoh#!/usr/bin/env python '''Test that audio playback works. You should hear white noise (static) for 0.5 seconds. The test will exit immediately after. You may want to turn down the volume of your speakers. ''' import unittest from pyglet import media from pyglet.media import procedural class TEST_CASE(unittest.TestCase): def test_method(self): source = procedural.WhiteNoise(0.5) player = media.Player() player.queue(source) player.play() while player.source: player.dispatch_events() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/clock/0002700013464101346420000000000011317255174013451 5ustar yohyohpyglet-1.1.4/tests/clock/__init__.py0000600013464101346420000000000011266427720015551 0ustar yohyohpyglet-1.1.4/tests/clock/SCHEDULE_ONCE.py0000600013464101346420000000256411266427720016033 0ustar yohyoh#!/usr/bin/env python '''Test that a scheduled function gets called every once with the correct time delta. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: TICK.py 310 2006-12-23 15:56:35Z Alex.Holkner $' import time import unittest from pyglet import clock __noninteractive = True class SCHEDULE_ONCE(unittest.TestCase): callback_1_count = 0 callback_2_count = 0 callback_3_count = 0 def callback_1(self, dt): self.assertTrue(abs(dt - 0.1) < 0.01) self.callback_1_count += 1 def callback_2(self, dt): self.assertTrue(abs(dt - 0.35) < 0.01) self.callback_2_count += 1 def callback_3(self, dt): self.assertTrue(abs(dt - 0.07) < 0.01) self.callback_3_count += 1 def clear(self): self.callback_1_count = 0 self.callback_2_count = 0 self.callback_3_count = 0 def test_schedule_once(self): self.clear() clock.set_default(clock.Clock()) clock.schedule_once(self.callback_1, 0.1) clock.schedule_once(self.callback_2, 0.35) clock.schedule_once(self.callback_3, 0.07) t = 0 while t < 1: t += clock.tick() self.assertTrue(self.callback_1_count == 1) self.assertTrue(self.callback_2_count == 1) self.assertTrue(self.callback_3_count == 1) if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/clock/MULTICORE.py0000600013464101346420000000170611266427720015373 0ustar yohyoh#!/usr/bin/env python # Contributed by Claudio Canepa # Integrated by Ben Smith """ There is the possibility that time.clock be non monotonic in multicore hardware, due to the underlaying use of win32 QueryPerformanceCounter. If your update is seeing a negative dt, then time.clock is probably the culprit. AMD or Intel Patches for multicore may fix this problem (if you see it at all)""" __docformat__ = 'restructuredtext' __version__ = '$Id$' import time import unittest __noninteractive = True class MULTICORE(unittest.TestCase): def test_multicore(self): failures = 0 old_time = time.clock() end_time = time.time() + 3 while time.time() < end_time: t = time.clock() if t < old_time: failures += 1 old_time = t time.sleep(0.001) self.assertTrue(failures == 0) if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/clock/FPS.py0000600013464101346420000000127211266427720014456 0ustar yohyoh#!/usr/bin/env python '''Test that the clock returns a reasonable average FPS calculation when stimulated at 5 Hz. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: FPS.py 2529 2009-10-12 17:39:44Z benjamin.coder.smith@gmail.com $' import time import unittest from pyglet import clock __noninteractive = True class FPS(unittest.TestCase): def test_fps(self): clock.set_default(clock.Clock()) self.assertTrue(clock.get_fps() == 0) clock.tick() for i in range(10): time.sleep(0.2) clock.tick() result = clock.get_fps() self.assertTrue(abs(result - 5.0) < 0.05) if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/clock/SCHEDULE.py0000600013464101346420000000401211266427720015215 0ustar yohyoh#!/usr/bin/env python '''Test that a scheduled function gets called every tick with the correct time delta. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: TICK.py 310 2006-12-23 15:56:35Z Alex.Holkner $' import time import unittest from pyglet import clock __noninteractive = True class SCHEDULE(unittest.TestCase): callback_dt = None callback_count = 0 def callback(self, dt): self.callback_dt = dt self.callback_count += 1 def test_schedule(self): clock.set_default(clock.Clock()) clock.schedule(self.callback) result = clock.tick() self.assertTrue(result == self.callback_dt) self.callback_dt = None time.sleep(1) result = clock.tick() self.assertTrue(result == self.callback_dt) self.callback_dt = None time.sleep(1) result = clock.tick() self.assertTrue(result == self.callback_dt) def test_unschedule(self): clock.set_default(clock.Clock()) clock.schedule(self.callback) result = clock.tick() self.assertTrue(result == self.callback_dt) self.callback_dt = None time.sleep(1) clock.unschedule(self.callback) result = clock.tick() self.assertTrue(self.callback_dt == None) def test_schedule_multiple(self): clock.set_default(clock.Clock()) clock.schedule(self.callback) clock.schedule(self.callback) self.callback_count = 0 clock.tick() self.assertTrue(self.callback_count == 2) clock.tick() self.assertTrue(self.callback_count == 4) def test_schedule_multiple(self): clock.set_default(clock.Clock()) clock.schedule(self.callback) clock.schedule(self.callback) self.callback_count = 0 clock.tick() self.assertTrue(self.callback_count == 2) clock.unschedule(self.callback) clock.tick() self.assertTrue(self.callback_count == 2) if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/clock/TICK.py0000600013464101346420000000133011266427720014553 0ustar yohyoh#!/usr/bin/env python '''Test that the clock tick function returns the elaspsed time between frames, in seconds. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: TICK.py 748 2007-03-14 14:58:46Z Alex.Holkner $' import time import unittest from pyglet import clock __noninteractive = True class TICK(unittest.TestCase): def test_tick(self): clock.set_default(clock.Clock()) result = clock.tick() self.assertTrue(result == 0) time.sleep(1) result_1 = clock.tick() time.sleep(1) result_2 = clock.tick() self.assertTrue(abs(result_1 - 1.0) < 0.05) self.assertTrue(abs(result_2 - 1.0) < 0.05) if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/clock/FPS_LIMIT.py0000600013464101346420000000132511266427720015413 0ustar yohyoh#!/usr/bin/env python '''Test that the clock effectively limits the FPS to 20 Hz when requested. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: FPS_LIMIT.py 748 2007-03-14 14:58:46Z Alex.Holkner $' import time import unittest from pyglet import clock __noninteractive = True class FPS_LIMIT(unittest.TestCase): def test_fps_limit(self): clock.set_default(clock.Clock()) clock.set_fps_limit(20) self.assertTrue(clock.get_fps() == 0) t1 = time.time() clock.tick() # One to get it going for i in range(20): clock.tick() t2 = time.time() self.assertTrue(abs((t2 - t1) - 1.) < 0.05) if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/clock/SCHEDULE_INTERVAL.py0000600013464101346420000000274111266427720016530 0ustar yohyoh#!/usr/bin/env python '''Test that a scheduled function gets called every interval with the correct time delta. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: TICK.py 310 2006-12-23 15:56:35Z Alex.Holkner $' import time import unittest from pyglet import clock __noninteractive = True class SCHEDULE_INTERVAL(unittest.TestCase): callback_1_count = 0 callback_2_count = 0 callback_3_count = 0 def callback_1(self, dt): self.assertTrue(abs(dt - 0.1) < 0.06) self.callback_1_count += 1 def callback_2(self, dt): self.assertTrue(abs(dt - 0.35) < 0.06) self.callback_2_count += 1 def callback_3(self, dt): self.assertTrue(abs(dt - 0.07) < 0.06) self.callback_3_count += 1 def clear(self): self.callback_1_count = 0 self.callback_2_count = 0 self.callback_3_count = 0 def test_schedule_interval(self): self.clear() clock.set_default(clock.Clock()) clock.schedule_interval(self.callback_1, 0.1) clock.schedule_interval(self.callback_2, 0.35) clock.schedule_interval(self.callback_3, 0.07) t = 0 while t < 2.04: # number chosen to avoid +/- 1 errors in div t += clock.tick() self.assertTrue(self.callback_1_count == int(t / 0.1)) self.assertTrue(self.callback_2_count == int(t / 0.35)) self.assertTrue(self.callback_3_count == int(t / 0.07)) if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/font/0002700013464101346420000000000011317255174013324 5ustar yohyohpyglet-1.1.4/tests/font/VALIGN.py0000600013464101346420000000202211266427716014660 0ustar yohyoh#!/usr/bin/env python '''Test that font.Text vertical alignment works. Four labels will be aligned top, center, baseline and bottom. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet import gl from pyglet import font import base_text class TEST_VALIGN(base_text.TextTestBase): font_name = '' window_size = 600, 200 def render(self): fnt = font.load('', self.font_size) h = fnt.ascent - fnt.descent w = self.window.width self.labels = [] x = 0 for align in 'top center baseline bottom'.split(): label = align.upper() + 'y' self.labels.append(font.Text(fnt, label, x, 50, valign=align)) x += self.labels[-1].width def draw(self): gl.glColor3f(1, 1, 1) gl.glBegin(gl.GL_LINES) gl.glVertex2f(0, 50) gl.glVertex2f(self.window.width, 50) gl.glEnd() for label in self.labels: label.draw() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/font/ADD_FONT.py0000600013464101346420000000310311266427716015117 0ustar yohyoh#!/usr/bin/env python '''Test that a font distributed with the application can be displayed. Four lines of text should be displayed, each in a different variant (bold/italic/regular) of Action Man at 24pt. The Action Man fonts are included in the test directory (tests/font) as action_man*.ttf. Press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import os import unittest from pyglet import font import base_text base_path = os.path.dirname(__file__) class TEST_ADD_FONT(base_text.TextTestBase): font_name = 'Action Man' def render(self): font.add_file(os.path.join(base_path, 'action_man.ttf')) font.add_file(os.path.join(base_path, 'action_man_bold.ttf')) font.add_file(os.path.join(base_path, 'action_man_italic.ttf')) font.add_file(os.path.join(base_path, 'action_man_bold_italic.ttf')) fnt = font.load('Action Man', self.font_size) fnt_b = font.load('Action Man', self.font_size, bold=True) fnt_i = font.load('Action Man', self.font_size, italic=True) fnt_bi = font.load('Action Man', self.font_size, bold=True, italic=True) h = fnt.ascent - fnt.descent self.labels = [ font.Text(fnt, 'Action Man', 10, 10 + 3 * h), font.Text(fnt_i, 'Action Man Italic', 10, 10 + 2 * h), font.Text(fnt_b, 'Action Man Bold', 10, 10 + h), font.Text(fnt_bi, 'Action Man Bold Italic', 10, 10) ] def draw(self): for label in self.labels: label.draw() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/font/HALIGN.py0000600013464101346420000000167311266427716014655 0ustar yohyoh#!/usr/bin/env python '''Test that font.Text horizontal alignment works. Three labels will be rendered aligned left, center and right. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet import font import base_text class TEST_HALIGN(base_text.TextTestBase): font_name = '' def render(self): fnt = font.load('', self.font_size) h = fnt.ascent - fnt.descent w = self.window.width self.labels = [ font.Text(fnt, 'LEFT', 0, 10 + 3 * h, width=w, halign='left'), font.Text(fnt, 'CENTER', 0, 10 + 2 * h, width=w, halign='center'), font.Text(fnt, 'RIGHT', 0, 10 + h, width=w, halign='right'), ] def on_resize(self, width, height): for label in self.labels: label.width = width def draw(self): for label in self.labels: label.draw() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/font/__init__.py0000600013464101346420000000000011266427716015431 0ustar yohyohpyglet-1.1.4/tests/font/WRAP_INVARIANT.py0000600013464101346420000000150111266427716016065 0ustar yohyoh#!/usr/bin/env python '''Test that text will not wrap when its width is set to its calculated width. You should be able to clearly see "TEST TEST" on a single line (not two) and "SPAM SPAM SPAM" over two lines, not three. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest import base_text from pyglet import font class TEST_WRAP_INVARIANT(base_text.TextTestBase): font_name = '' text = 'TEST TEST' def render(self): fnt = font.load('', 24) self.label1 = font.Text(fnt, 'TEST TEST', 10, 150) self.label1.width = self.label1.width self.label2 = font.Text(fnt, 'SPAM SPAM\nSPAM', 10, 50) self.label2.width = self.label2.width def draw(self): self.label1.draw() self.label2.draw() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/font/README0000600013464101346420000000016111266427716014210 0ustar yohyohAction Man font (action_man.ttf and action_man_italic.ttf) from http://www.webpagepublicity.com/free-fonts.html pyglet-1.1.4/tests/font/SET_DPI.py0000600013464101346420000000241311266427716015033 0ustar yohyoh#!/usr/bin/env python '''Test that a specific DPI can be set to render the text with. Some text in Action Man font will be displayed. A green box should exactly bound the top and bottom of the text. Press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import os import unittest from pyglet.gl import * from pyglet import font import base_text base_path = os.path.dirname(__file__) class TEST_ADD_FONT(base_text.TextTestBase): font_name = 'Action Man' def render(self): font.add_file(os.path.join(base_path, 'action_man.ttf')) # Hard-code 16-pt at 100 DPI, and hard-code the pixel coordinates # we see that font at when DPI-specified rendering is correct. fnt = font.load('Action Man', 16, dpi=120) self.text = font.Text(fnt, 'The DPI is 120', 10, 10) def draw(self): self.text.draw() x1 = self.text.x x2 = self.text.x + self.text.width y1 = 9 y2 = 27 glPushAttrib(GL_CURRENT_BIT) glColor3f(0, 1, 0) glBegin(GL_LINE_LOOP) glVertex2f(x1, y1) glVertex2f(x2, y1) glVertex2f(x2, y2) glVertex2f(x1, y2) glEnd() glPopAttrib() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/font/base_text.py0000600013464101346420000000234511266427716015666 0ustar yohyoh#!/usr/bin/env python '''Base class for text tests. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest import sys from pyglet.gl import * from pyglet import font from pyglet.window import * from pyglet.window.event import * from tests.regression import ImageRegressionTestCase class TextTestBase(ImageRegressionTestCase): font_name = '' font_size = 24 text = 'Quickly brown fox' window_size = 200, 200 def on_expose(self): glClearColor(0.5, 0, 0, 1) glClear(GL_COLOR_BUFFER_BIT) glLoadIdentity() self.draw() self.window.flip() if self.capture_regression_image(): self.window.exit_handler.has_exit = True def render(self): fnt = font.load(self.font_name, self.font_size) self.label = font.Text(fnt, self.text, 10, 10) def draw(self): self.label.draw() def test_main(self): width, height = self.window_size self.window = w = Window(width, height, visible=False, resizable=True) w.push_handlers(self) self.render() w.set_visible() while not w.has_exit: w.dispatch_events() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/font/action_man_bold.ttf0000600013464101346420000013752011266427716017171 0ustar yohyohLTSH~[OS/2vVcmap=Dcvt * fpgmgasp glyf)hdmx'ԯ head#F?6hhea $hmtxx$kern#$G<loca?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  ~Sax  " & 0 : !" !R`x   & 0 9 !"E_)myjd }~_`abcdfegihjlkmnpoqrsutvxwzy{|}\i,K PXY _^-, EiD`-,*!-, F%FRX#Y Id F had%F hadRX#eY/ SXi TX!@Yi TX!@eYY:-, F%FRX#Y F jad%F jadRX#Y/-,K &PXQXD@DY!! EPXD!YY-, EiD` E}iD`-,*-J,f&;.'.7>7>7>7>7>'.7&>+ > '5)#  %+/  /:!4$0;#A ki.fbW 07>z> B!"@"1`0/ =4%$4@ 1"Cq!D#.'.?65>7>#.'.7>7>7>36 +#   &++&%        ?%QMD #H$'-Y-' AT[$TPE$*+X-&M%$" $:^ox#+".7"&#.'&'.5>7>7'&'.7>7>63>7>5#632#90*& "! *6;"/! 4 #*$4)xh"c(   ( 29<' &18"!* 2*$ 8/!?3.!.*1dU@//01'.'..'#"&'&547>7>7.'.7&>3>76.'.'.7>7>7>7>$0/   &J!!) C*-b5  &*4   ]- .1"F$ "+6m6( +02h8  +6 *I#2   0K,5U/ 1 A #A##D# eQ!   )%-*" # 5l51(275'A?Um@;/01'.7>767'&'.7>7>76>7>7.7&>6>'."72>?5>.#&767> $-3<|7.7>7>36#.'.'>6.'3?>I 3 '?BC!3bXO!!7%!6I)/"*6>J7l00'&#D!$H$ J#$F&!& 3! 0%ZTB 9)*^2 " B?9*<#"QYb3-UJ<>DK)%E?6-1 !)/$   !F  -:./2LKt! @ //01#.67>7>763  /,   F(O&'$  G[b)&K$%" %+*WmlR4%&'.'.7>7>7>(39g,X{,(# =13a,d61 V,/( #p?=1&!5ZYdphkH +/: &TY`&NMI"@_$2@+01'.5467>7>7>76&'.'.5>76 fH!QcwG2' /PB615 *31K  !/8EzgQ>7{6xa<&1 ;JT,_gU?7.'>767>7>2>7c*S( B! ' 3!*4" * '17-&"* 4$A$%+. 2- 0+ )$3;  '/&!#(0(  <&#)#'_FI:@/01"##.'"'.'.7>?>2236F(#D#1&&;* ;JP!"8*$ !L@*&=(5FL /'* LA,$$""$ 3;K5" @ //01%&#"'.7>7>7&/ # '-4 + $C?:$;975-05, @+01&'&'.7>732232$+yy5"36B$':%  0< 8($C$"7F#9**92&'.7>7>7>7>7> v#,2#$,;$A#?H&-6!  =#@ !D"2(6"9n5:t:EEys6, %l<@5..+?01'".'.7>7>72%>.'>7> @AQ`l:;cP<,) A:CVf<^fA!$;.#3% 0%!9/$ ob1V@#+G[0bpsi1dQ5Cs#STO@+&8@_RCC?2!+8Tj:@/?01&'.67>7>7>&'.7>7   ,'D     (6!$:'YYYY)*2&" 234NNQQ0.-");2">KU, (kR%'".7>7>7>76.#&'.7>7>>76&LSV(^a!2  )7m8,# =6")2 1DP(TYB@>H, ,Ajd@W?01'.'.7>7>7>7>7654.'".'.5>7>7>7>7'.'.7>7>725)>Q--fmt:$; "$ <9h1*! OK0-@%0\0(C4[-&L)  /5.&.$$_77&6'.#"&'.'.7>7>7>7>76>7>7>7>*%"0 *G "A<:6/ %<$),1 56;x< "(.  #,Z%D A = ;2#$(&Y*1-0   $17>267>7>?6&'#.'.7>7>7>7>7>&>R4L_32qy@"7!!772-)&! 1-+,T,D!'5   4+*`0;x7>7>76>26.&367> ]E"Q\c3-SH=/9 C**0;'?"$;+:~>G*&&F!":#*1^$"%fN'B1/?$FZrm4jhb, # :m7,U/865W*" 7#>!$&%^!k; @ 4?01.7>767>7.#&&'.7>7> U)5k97#8%,PN 9;v+/8(7.7>7>26.#"3267>6.#"3> 8L,$<( W>?TN56@":L+'B- `B IPU,P13@ 7. $3:'2"#+3+1]QB:HS-T<+?+01.74547>7>7>7'"&'.7>7>7>2%4.'&32>7>)24?S;%  3;?MG+& .(*nC.i4]10-#4^G+ 72.'>yA}=5xo\ & 7>3'".7>6!5$;56( *  #(7! !2<9)A6"==$:I> &'.'.7>7>72 -: 8+;F6$S'- #'6(/6 0;0$#B3&7B%E@= E%9f04- 4WM(1@/01"&'.'.'>7>7>7>&,M$)P+C=/ '-4a39;&GEBA' 0'-8&-'!>#', -[/#D#$I@==CC*/+/01'!.7>7>72323636322&'.'&>7>32;672%.)  %&L&(*   !G;&% )0sp,!#(Q()+.1  1/+ A' ", !6(".  *T/@%/01'.'>7>7.'.547>7T *1/]06;,8IHCE$!>:9?z8%1*& =&A+)0d2&N&' &N0+2kOc@_U4JUJ??013#"#&'.7>7>7>7.'&.7>7>'.7&>6.^{=;5  $B}:4(*2BC,)-10`,&?%( );I'PXD02,W/?%*L@"$:G#&L9Lt\M%'%   +5!4-&#G $ : .!,-OD7-+&-.E"C5 0J*&B..Dko@LV=hVhG^8++??01#&'.7>7>.'.'.7>6>76."76#".'.7>7>2.'&3>$6$#Wah3VM#H9$.7>7>7>726.'53232>\;' C "0\.,X%  7$8&: J$+8J3.T #/  !?  / l'8 E! @  .4-C#>w:A{?fd(]Q= &O,*R);;0^\[-,_21f3l:Of'.'.7>7>76547>7>7>766.&>7>6&/"767>@[m6@C>?@"5(   $09=?C94'-%7ON&.( (M##sE>/>u54PAm[J"4  /9<}@:s:;w=#""##B#!6,"  '2<"7>76.'.7>7>2v'0(B  $*H;.(. e<3^*;!'  I30s<@xk[$%;% [J"UfuA-SKC8G, *##@#-$9H#KT:o.37* ) ->i()68P/0kt|?}k3bL-'5<q/X@L+01'.7>7>7>7>7>7>7>7>7646.'.'#">7>+Ia:5O-J5   $)U+2a1LsZ; #(*0  /RI@7,DP<,=G$&PVYUeV @+!?01'.'.'&67>7>76#.>6>7>76O"NUX++WXX-$G  $@9EGQM 9('qs 6llh6!?-"29NN#B3 G@BI*l4"4,%F#QUf\ ,:!,!  B#+<$+ #4B%-T*;"$5(3eT@/?01'.'.'.7>7>7>7>7'.'"#">7>6$+>~?6i3&.   :0;)1b36k6'L;! '-[-!C!,U-+T*80"% (P(0_-'FJQQ}*H  /B+" #S*- me@ ? / 7+??01'.'.7>7>36.'.'&7>7>76&5#"&'.7>7>7>72 bH"Q\e5Bs`M@? bJ"Vbn;bK# #@:")QJA56  )6B$4/("!B"#B#5  <>?BB6H( 2hT)I6 ,Kb4iu`.UA&A5 % %7#DRG> 7''.f5 9  4RcU_l @ j+01%&'.'46'6'"&#'.'&'.7>7>7>7>7>7>762665654&67>7>0+"&C,?24 &=+   ( -P II .$4&  <4 '!#Q) @ BBGH#E  (:M%H%JJKK76</*&&^1%J%'K&/-.ZW-8!$5>@E4q;v<9okb@8?01%'.'.5>7267>'>7>7>'##"&'.7>7>2763>76  B;.  B   #G 5AF JL(L$$>*#(M(  @Z0 -  UUXX$J$ #1"  ,$#@ !A!#D#*O*(P($KKJ# ClynX@?01&#".'.'.74>6>7>7>'.'"&'.7>6y%)  1&4:>9_O@6I (3* &%   $D# %/gf-@   y|=~{u4% *DU+]k" #0>v=,%&)Bj4~z  =!.#  D+ ,Xg%&'.'.''.'&6765476&7>7>7>7>7>76>7>2!/Q05j5))*/(/'2e47:=+8$-X,"-Y- }$ *!(M(QO,TXV*&M" $-2&L&436.X/-Y-#QL>$3e30\0" &10N<" !52/A}A59<S_> @..+01%'.'.746'>767>76>7>76M $LPR(QR)D6( - (+  9p:6m6!< $ $6E$HP3^]vj72( "/?{?8m87o8%MKH  7ct%'.'&76&7.'.'.''.'&5&67>7>7>76>7>7 %+4$ Lt/ 7.#    .!-J%   # !)(@0!2f519D+7R:# ` 3**O)u D! -/^32d3,*:00:0.&OUde][2b./)3A!PN&VU!KC3.H[cf. > @ LIEW]@/XB$++/01%".'.'#.'.'.7>7>7>7>7>'4&7>7>K(7$6QA50]0 )$. )-$+A2' %.!.>%   #C>50IU&ff:/[/-Y-A:',_d#D#da'WTJ(;IMM"7o87m3 @@??%L# 1HV(1c11`37>6%6.'>7>o FE UfxCAmXB/ KE!Wfq:8hZH"407Q;( %-F6'"s8kS2.Ne5m{rb1S< 6N0-dik$&[P7,FZ``)9s7;0 ,DP$T:m5M @0C$+?01'.7>7>76&7&6754>>366&'.#&>7>35G)Yj#9F"'   (CV..X/V999   &TH0 3c-)#1^UJ@H  #F##E#&?) -5&M&BBKIEE /T=$=>;2/  *C-5f3& "*m/X@%0@++/01%#.''".'.7>7>6>'.'67.'.7&>2>':##k;9aO=/% D<M`q?:bN8%+*!-<*!*,$% '/M ,&,M$39)DX/^myo4fQ1*I^2gp3fe`+ > @2e1<0!7JS#VY$XP= %3;!% )4hgNi @T5?01%&'.'.''.7>7>76&'&67>7>366.">7> 7` ? ?H  "'$4"  )8#aa$D<4*)A-1r@?u71+$ =z>3^-*%t$ -(-V,Bx9)"@"-V,,"5@!JIMM3_10]0A5$ !-8H@s02Q/c6138!}6j5&  (lf@?01'.'.'&67>7>7/#.'.547>7>6'&'.'&7267>6R.DU-]kB|: /1%XYTD. &O&&N&$IFA eNIg@mR H>D#5j.*! ?"> N, 6cVI^@    %,1   ==BHJZ;'.7>7>7>'.'&7>7>76#+Eq7B# ! =. '  BC  #)mmRR3!& ^*P'#(8#0^.[]gf-.   0D^^ @3>!+?01'.'.7>7>7>'6&7>7>72>7>7>7>7>7>D  $%H]p@0ZNA2%  %; /1  "*!  &5%/  6#$$$$""$b_C{]7.B'K^>y>=z>985I[c+GGHHFA2 %.1c24d31c11^0B7!".mWS @N3 +/01'.'.'.'.'&'&7>7>76>7>7>7>7>7m +)B$3?L,0  /#3(     08 (#0:69s<>z>HE#H9"7>z> %.6VKQP!   <OM=u:2.$-=A`j@U]R]>(++01.''.'.67>7>76>7>7>667>7>7>7A  /*1?O02P>,1@P1)G:,   )##0C1'. /-$ B('D  )   /DI=/]0-+[U(SG0'AR('VG- 2@$;y{{>fc*_WD"9D-W,!Z]!D :z}~>'L%$1)$-a14h3C?II/].6+7(&W\Q@B?01%.'.'.'.'>7>7>7.'.7>7>>7+-& 2K <$")2!7 !*Q*  @  ")( *= 5;F.5' :O\+'R*>t#$+NI@?8/!; =<:<|=MK<>A!#BH+b\Q+8Iz7.'.7>76>7>7>7>7>:'/]),R#" $&>*+3-E2" '4!% #$,4&$FB?GI\^-Y-*$5E$4db^/ 5HT*TX9/#->{>.' >&N'"H +74lK@ 552??01%'.'.'>7>7.""#"&'.7>767>7262>?6 , af6m5 2 1BJ"SX/+(-Z+$!*/ae(*4r_;?'5s<4j,XU 7,$=(* 2Bztq8}  %%5V>KBXRIN  +CmI @6+/01%#.'.7>7>7>7>7>'.#7672#.3g3-Z%)    \[**,U,   C" * 0' $j8KLNN=}|z:'/$   HHII4/" ','@?01%.'&'.'.7>76$+#&4']E   %A#.S$/)C"7(9C#@# A# '#G$djHG;s<6l8qG@ 11*>*E!++/01'.5>7>33>767>7>7>7465.##".7>7>7  ]Z),,V,  "B#* #.2f3-Z$* >|{z<&/(    II32"'0& #j7M.@%/01#.'.''.'.'>7>7"((!3 -'--2:%(:-%  $ $-[-9p9  ))LJG$GA7 5EK"&LOQ\$%$'.'&5>7>763323T$' +0@f388 @ @>4(0  ,#  &2 @+01.'6&7> .?(#% /GS%#$+,[,l?M%&'.'4&'&#"&"'.'.7>7>7>72.'.'2&$0#C )+$F$$#: 8#K19J\:4Q:%    )7( >x6+ ? $J#0\0*""B uqpk.fV;-I[,Y][X;>>pBB>{88{@l-AY@3B+?01'.'.5>7>765>7>36.#>6.>,*_0)Q)8k89O $4>E$E9Z52m(  I(?/G0'5" @ +$8MnmI@B:+?01'&'.'.'67>7>36.'.7>7>l .(> 7$-F4'  #(<{5-%%i<9|A8fVD1$ SK!Yl|BT3, 3)+! A!+,DP%VY!PJ8 %!'0  ?Z!*"=R/]mp7hN.T;BHMSe*L@++01'.'.7>7>7>7>7>766545.'.'"'>7>O"8O1.tH7R 3G+@v11;*-.+  *PF:0.I::eE A.,e3HHLL @ > 'N@)2),p~-+(?@???>0@$H{jb @ S+?01.'.'.7>7>7>7>'">7>6>7>76yT`g/3gil8#@  / @KP$VV0$!*S*(O&&B 6k65j64%%.5h52e/!  D}?@F/( 2H;42)E"EH~}>z>$/  $1" 2("  #1+! (/20]-@ !3 " c[@-:+01">7>##"'.7>7>7>7>76547>7>7>7> %6m62-& 54*T!! !A! =<  %*8  J-.^0#M$$G##5  ##I$ Q*HJ,V,&/BO%12c2JIHH 0E  %9skX@ 6 ' 1+??01'.'.767>2/&>7>5.7>7>7o O@IS[/=n^L8( f^-rC@3  3h`T".!HABY7-1-. $'PQR*!8,7l6[J&@/"?W3at m7U9#4#&)A-,afj42vgEFiy3  #/%#+8+Gcm @dZm ++01%.'.76&7#"&''.7>7>7>5467>7>76632676&7>5>76&7&674>$)'3h5: "*2<   6@!  @ (O(0"+=$ {$)Cq6'O(,V, = =&>V`+3d35h50c11_1%J#%  -P_'VW  !!#B##D#?3+BP&(O()R*p2 @-0++01%.'.'.7>7>7>7>76$    *C  (L&%  :9r:aaaa!C!1$#M&7n79q9>x<9q{oP @:=++01#'.'.7>33>757>7>5>76'.'.74676{/DL'GhEBo\H- !(+" A(  D7>7>5>7>7>7>76>7>71#-*#(R(#(/ '2=!   #>  Bw?59@$4%  :N;7+cW?},"%+CC1+# 64::8)>Ta+6k69k9//9m9 >  H&((9w<3,  1<4H$D#:qx`='.'.'&545>7>7>7>7>76>7>76 8HQ%)UWX,/Y  #2 4< LG @#4%.,E7,! %(*[/9m9:u;3b31`1;2#0N]%UUVV,X, >! 1(^h%.'&67>76'".'.'.''.'.767>7>76>7>7 $1(  %AK\@)    .: '# " %.,!(@+R+'0?-$7)  0+,=??SC#,:w<>x=?}?#E#!B#>C)QV7g52* +ޗff%XQA$6@BG#E##D#&O&H+\[ @JAV+?01%.'.''.'>7>7>5>7>7>764&5&547>7$3"1E6,.V( )0$   &  +5F 50!  >5&5IT#acKK1a18*)4(O((O)GGEE-X,+(  %R)BB|/Y/UTUU"XO7 &'Q+.cmlGlB@9(0 ++??01'".'.7>7>2>'.&7>7>[K%]kw@4)  {h3[D',H\0ds|g4\D&+H\1d8:r91$+8@ECBB@;.)6.XVSn.G@ +01'.'.7>7>7>'>7>766.'.#&>7>%9I&Ug/%; G_l0XH"0   >": 6c-+%2\TJGf#MN:.*F$qq":u98o78N1#1GRY <1d17  %,Ao0\@9  41(1A++???01%/.'#.'.7>7>6>'.'&267.7>7>!'  %b3;n_M6 A>Whw@:cQ<, @>(%G=/"8+ !&% P$ $* 7>7>7>7>7>7>366.&##>7>&-*OH?5n8! %)  #/00 B (SPL!!+%.5{G9G*A$  @ =  :s33A'#1FE# - > 2*"*-_10]03c23267>76&'.#"'.'.7>7>3'.'.#&>7>32Z PE!RZ`1I>:.!0-KR/`(  -V,+V-,OA1 $4C$KU9l0+!(1 ;< *Q$!/  $D *U*%D;2$aI'>,)#*3>%#   -/-; /A&KQ+OF=3.#+3$ I)-)   $19`F@?01&#&.67>7>76&'&'.7>7>7>7>*$#J$9   -$?@  0*"@&28#B#KK*U)#H=. 7 8wx-W-,X,C;+Qny26i68k8KI  7'  "5b^G@ 08(5++?01'.'.67>7>76>7>'.54>W J<K[i;BxcJ!D(#    !%D\:   ,-##qd0_K/'Ie;:y{~>EB$+ #-[.NNNP$I Ei{5ed*R*8-'0WG@C'/+?+01".'.'.'.'.'.7>76>7>7>7>7$E!%4J8'%"    $& !! ) (!05g35f5om/pfQ E$MPQQUV(.' "+T*QQRO9v<76&7&67>7>36>7>7>7667>7>7>w%=4$+',E#F*.2>+%8*     #1( !P*%)/ , !  " '*  yfd`X' 'v~RO*YL7$4@ BG&G&&L&:t:7o8.# +=]Y'ONI! *NQ3a2#$)  .krt:_X @??01%".'.'.7>7>7>7.'.7>76>7>7>7.&.&6*">#9+  #6$ &.Y,  B  #)< ,-$  6' ?S^*@?01'".7>7.'.7>76>7>7>?*6;kYD?) .&!0$ "*# $0k782- &F"%H&VdA'0a[&W^c1]a& $1^0MH[X.Z-/8gI>7>7>76'.'.7>7>7.7>7>IQS'.X-*LE##D#"E%9,%4:GJ*  6EL"YY9o98p88/N]c-ge$C-?wrq:?}?7"'.7>3.7>7>'.'&76!+C30"-:  @4!-@I - >67>7>76 "  ,%H%#H#a.&L&!B !(.-[-@~@>|>EC< '23d3m/`''.'.7&>>'.'.'>7.7>7>7..7>7662+,@J . ?3>CG"#<!"*"-$ #$ %%L#&'( !+B3/!,9 ! ?4!(5 @HM*H6(  ;$" '*%"(-1+(-*&)U3  '/' !&/9A#,TNH -\p9@/01"&'.'"&#.'.'>7>36>7>o%.5k9#=-3/))(0456"70;A"2(H#  ' (,/'   +mb&!}mb&!oU"&%T&.t s&/D&5q,&A',&A@ ,U&A,&AI,&A+,&Ar{!&E^{&E@"{U&E{&E&I&I@WuU&InV&IU+&N1!&Ol&O@1 \&O&O&OTb&UA b&U@bX&Ub&UoBalH@ +01'.''"&'.'&6767&'.7>7>7>767^&0 @  $3   9*  5DJ  -#'E   !G;$?( UUQS%L#"79t:!,&0.]/!B<5 #M&1_1#9,r, @//01#"&'.7>7>326&'.#7>'C03t>:a$#*=0/u>i)*24(*i;>q,-29-*l2) (,$-jWd@X ]9 b++01'"&'&'>76.'&65465.'.7>7>7>7>7>76>% 5 A&.@J# Hs)*(A.8@I) (" 6Y '& a) !:8.Z.5f5 "*)>0$ (O&$  !D"6Z<9INA!<2#,.* &M(D/)e57<($ ]fe%@<.##DQQDQ .??+///01.'.7>7"'.'.7>7>7>7>#"'&6>7>76Uag/4hkm9#C, .,  9GK *BLP$UT0%"(((*$SK< !OB)#(M*  D~??F2*1I;44,6C"HK6k6/&*NM$-$0#3*.5,$0_00].A!#2 $ '.7>20-+E9K) 0Rl>.N#E79C=Zk1:pW2+ !Q@hj@`;9"4""7%%++?01.'#".'&54'>7>'&''.7>7>76545.'.7>7>7>3   @ %4?!   A  .&F3 bN$:$ WGDW.[/TSjj( - bc-Y-"9*$%''(~~@@BC?~?1_1*(')6,.C(6l69p9 H>IU^1V9:;    Dh@rM\++?01'.7&>7>7>76&'.#.7>7>7>74&'.#"'.'.7>7>7>7>7>7>7P~Q)/# ,$"C6#0 '&# !-?%K$    +2D  "cqw7"GD@- '/@ VvQ ,0' &5A' ;$!)3* <   $,V,ssNL-1C,*\0/]0&L&6m70^`[/*V%4B&4=F$#A>;^33mA.Si@ '7v/++?+01.'#".'.7>7>66&'.&>3>4&"#>7>6&5>7>7>7>.'32326.G\4  %#E?B?{sf)+=%*E\64{HFt`#M7%:IW0F?9n9 A?<6$=%*Y5:+K;$103+T%$-;K`1' )4#   C?ym`&$  -C.*ht|>Hu24V= #C]7o]R(E10&  "3=B 7_*(I+O(>LX   &I&L.]/.\.!Dd.^WK:=!A  =v@ 8(h00+?+01#&'.767>66&'.&3267>#.'7>7>72#"&'.7>7>32)>Q/_ou[-O9}h0tHFp\!H6 &7IV/1aXNCK)6=JB=)LG?1% 4 q @hb/?01&'&67>7"&'.''.'467>7'#.5>7>7>'"#.'.7>3>7>72>32>7>72  +"&."  " #D#  % : 65g4*R*) $ .  !  ,9!A!#IGB+ B ' "&N&TR ff  $ # D #D#.\.   -9s<(Q&,$"#K'D"#&I@/01'.7>7>7>32  $4F.! '  $  $SF.- *O&$#m-#"&'.7>7>2'.'.7>7>76h'1/.!2 "/3#1 +  ."77!(>0$93 &@j{@Q@CN :@}l+???+01".'.76&'"&&#".7&67>7>7>72>76'.'67>36>7>76%7>'32$QVZ+,WYZ-73-$**$I$) $0.#63kBHUdSR9* #ppgm3h5!>/"1:ML$A3 #DBA AI*T0J<1=<<l0!3*%" 0j6 /[.(")B@ECqk.bR: *8!( B!*;#* %5C%,S*!$7)3GC5xAz:IW@>.6E&+/?01'&''.7>7.7>7>2>7.'>2>7> 8( ID UgxDBt-  /$ #$( IG!Xgr:3d*#8'X 7R;'NTQ  (@1&#D6`0Xcs8lT12*2  '1;88jsrb3T;*)" "/+FZaa)xy %:F Ijn:Z@ SSVV+//01'&''.65&#.'.7>?5>3623&'.7&>7622726l&#F##3(&;) ;HO"#7*" !J?)@ ?*yv&0G!10..]/& %?*6HO!-'+ KA+!&M& 3(B (.  &VYs@@@+/01'"36#'".7"&#.'>7>7.'.7>7.'.7>76>7>7>7>U*5$D7*'1@= 0M@&*1*T+%1)*0?E9)&,!  "*"  D##@ 1. &F"%H&3i7!1!++2+(2(*3%/$&'$.$DGCD&  %0_0KG;q:6m62/8j{@Q@CN :@}l+???+01".'.76&'"&&#".7&67>7>7>72>76'.'67>36>7>76%7>'32$QVZ+,WYZ-73-$**$I$) $0.#63kBHUdSR9* #ppgm3h5!>/"1:ML$A3 #DBA AI*T0J<1=<<l0!3*%" 0j6 /[.(")B@ECqk.bR: *8!( B!*;#* %5C%,S*!$7)3GC5xAu:J[@T-K+/?01'"&''.7>7.7>7>>7&#&>>73>7> YK#\ly??r,   /$F! ! WM#]mx?TF"25(V#A8,!Mba3!>4) ( zg5\E&-*2  &1'.'.7>7.#.'.7>7676323667>7>76$9G$&J90?%)K!#Y*$(%B/.D*!C6 I}-QE8/)'.-ELr\L& &)B !+6 4-&$F % 9/ +lPl='.'.7>7>'.'&7>7>7O/:#B7!4%p $+1!$! '6* 3#C"3#3?T>{> A! @ ._-2!  ::A5hhg4.fbX!9t=%O@?01%.'.'>7>7'.'.'>7>76 H,!1("' #,2-17!,/(S'%J# 5e3#H#&!4-))$#,215<#'m,>"/4:7>7.'.74>.5>7>7.'.7>7"+216<$&3f4#I$&!4-))#p#-1-26 " )Q(&I& ") 2)#'!$A=:72&(&:s;1^06)$/358=#$?;70*&4/X.8o7$& -4:>BoI-E@(/01%#&'.7>7>2'&'.7>7>32'.'.7>7>76j!1;1 0%= ,9 6$8 #; 5"<-: 4 r3$A ;(F6'#"7& Gmb&!@mb&!H s&/t gj@ p"a*8"??+01.''.'.7>7>76>#"'&>7>36>7>76>.'2>7>Wbg04ikn91) 5C?lZG3' TI%Zeo9L5BF1% "(''(#RK: 5i43h34&$/3e31f-  E|??E1U?215Q<*&,C2# !1G:35.# &,0/Ka4j{s^.P;")4%$ #.#2*# !0*! (/20].E!"33.$ZO7,EX__)9768:0+AN#Ugj@ p"a*8"??+01.''.'.7>7>76>#"'&>7>36>7>76>.'2>7>Wbg04ikn91) 5C?lZG3' TI$Zfo9L5BF1% "(''(#RK: 5i43h34&$/3e31f-  E|??E1U?215Q<*&,C2# !1G:35.# &,0/Ka4j{s^.P;")4%$ #.#2*# !0*! (/20].E!"33.$ZO7,EX__)9768:0+AN#U6+ @++01'.'.7>732"(UU+ 9GM!7!MC-$0&) 2-"@  +/+01&'.7>7262$+(O&][/Z,6'=IN"s9#.'.7>'.'.7>7< '!+  &++!  (!/$  %*(.$ .:@"FGI& /:>>@BU#  0:A BDG$ /9<A9s9.7&67>7>7>72%.7>7>767@3"&)  * %) ?2  &( 8  '/ )TF(# $  03b3,'(2@WJ'"&1B|;;5* (3<r @//01#.'.7>3'!."  $*+! (% /<@ CEG$ .9?>0o @/?01.7>7>72?1!'( 7%.!( SG(#(1A|<;6))3iR6K@**((+/01'.7>6&'.'.7>7232232'.7>6D%(;# 0: 9( ') 9IO!00]0(B#'8"  1=;*A#D$!7G#8*)7C&/)+)$D%#9G" 7''8@&Y?:&9?cTm @e/+01.''"&'.5>7.7>7.'>7>76>6>36&'.&73>7>.9<6..( =v3 ?BG'(5< 3.$# 90Q\H58:>!" = X1+ZK03H,*R)  m$;635s7>7:&7[PI$ %/559?#*9;-( /BL# #":41.'>,"B1+5% @ //01.'>7>7.'.7>7%/67:>"+880%6\PI$ ";50-'@,!C1+:' .AM" "]Aplj@0+01'.#6#"'"&'.'&67>7"&'".7>7>7"#".7>7>7>7>7636m&/ @ !M?'*2$2  2- 5EL 8* 4EK  '&E   !I:%?(  ) 8+)WW%L#"7DE&L&%/(-)",&1  5h34-"#M&1a0$8< @+01'.7>63B$&:$"0; 8(H9("9F#8*)9DK5 @ //01%&#"'.5>7>7&/#:"'-4 * $C?:$>q55-0J;;%.7>7>7>7>72%".7>7>76C0!((   ) %) >3  &) !&0 ) WTE)$ $  12a3,''2@UI("&0!@>=;6* )3<.Ys.'.7>6'"&'.7>7>76'".7>7>7>7>76'.7&>66.&3>7>>/#">>7654.#&3676543 )(%l<74.&.RqE=f-RsE}c9831r9:o00=3a}$.VRQ([\՛#I&&1%D!MK{w "0>v1(6`z=-YPD.853s "'   .!   0$#(    *-  mbW&!UZ&%mb&!O U&%U&%@ &)W&)y&).&)@ s&/< s\&/s&/@D&5< DZ&5D&5@ U*@ /01#&'.''.7>7>728#$0  + !  &+/52*#% #/,!A!#B#  (62/,&#,-k: 5@/01"&'.'&.'.74>7>36267>7>3  ;w>2 !/ ( ')Y-/ !-%  ( P$ 0 *,$  !+.P,'"&'.7>7>6&'.#7>;,-h74V 7**j75X#%+$$3(:6a#$..%$_28e&(-/(&`,* (,$-Q,@/01.'.7>76>7>9%*062*$ # # ( :k-,$&-036(   #D#!A!   &V&3bQ&S%I @B+//+01'.'.7>7>7>'465>7.'.7>7>76&574>2)1"9*%Q#0  (=)'  l*#$I&'&   !PF1!-5uJ9/ %*&O($%  ,!K>&$-o:&9 @&Y ?Z@,/01&'.7>7>76&767>72>76&'&'">7>"7I+Xg$#"'  #6(* #K#'K#@a> 1%L#2b-*"3aXKBG  69 -46:3l!JB1  !-[- Qn(,+ "%80. $ $+?Z@,/01&'.7>7>76&767>72>76&'&'">7>"7I+Xg$#"'  #6(* #K#'K#@a> 1%L#2b-*"3aXKBG  69 -46:3l!JB1  !-[- Qn(,+ "%80. $ $+5, @+01&'&'.7>732232$+yy5"7.7>7>7 8& #/)#"3')/&!(.,/4+4R& 3.&'-/ "2,((,1%2+%>mi@:SS??01'&'.'.'"36'&#3236&267>7>76&'.'&#"'".7>7>5&".7>7>7> -&B 7#!5,# $PA',6(O( "PA'$&O( ;{4%-% *4::z@O12B- &6=  * 1?F!aBJQV+*KD;.!4(+!A )-7 #;,) " 9-"$& '1  5-% -=::N$/ ( "$.$- UC 4$'3@HM                                                                                                                                                                                                                                                                                                                                                                                  #!|_<\z\c|l\2<JUemT1_;fK2A+ePZ\{&t^J5W5mjvlqZ0 hUZmqPv0~yj'}{1v 0mm&1DDDDWV<o.j1De"zjH"u&])l't)mm\\:K0=iKCeW]D,JWm&m&&.+ KKm *    HAUCDEFGHJKMNOQSX!K"#'*,-./137 t  w R  A  Ym!#!'!/!1!4,!5!6K!7!9!P!U!V`!W!Yq!!B!C!D!E!O!Q!TR"!"9" m"""4"5"6"7"Y"R"#!# ##R#U#Y#Z$!$6$7$H$8$ $$9$A$E$H$I$R$U$% %%%6%7%9%B%C%D%E%F%G%H%I%J%K%L%M%N%O%P%Q%R%U%V%W%X%Y%Z&!&A& w&&' Y''''A'E'H'I'N'O'R'U'Y'( (((A(E(I(O(U(Y))A)B)C)D)E)F)G)I)J)M)N)L)K)O)P)R)S)T)U)W)V)Y)Z*!~*Af*E*O*U* K*`**I*+/+E+O+Y++#+'+1+U+V+W,4`,6,9,Y,,#,',/,1,5,J,U,W---A-C-D-E-I-J-N-O-Uw-Yq.!. ...A.E.I.O.U.Y/!/4/6/7/8/9/ K////A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/Z/0!0A0E0 00m1511 1=1]1\11!14w16m17191A1U24m26`272Yc22#2'2129w2E2O2U3 w33933A3H3I3J3K3L3M3N3P3R3U3V3W3Y34!=4/4AU4E4H4I4O4R4j4 N44#41484M45 \5A5D5G5M5P5S5Y56'6Aj6I6O6U66{6 q6 66#616R6,7!7/7A7E7H7I7;7O7U7Y777 7 \777#7'71747D7M7R788/8#8'818E8U8Y9!R9/939Am9E9;9O99~9 999#919C9Q9 :::/:':A:I:U:Y;D;*AGATmAWABBBUBYB {BBBCKCCCCDVDYD )DDCEVEYEFEFOF FwGGGAGEGIGOGRGYGGGGGFGHYH HHHHHOIVI IIIIJ DJRJqJJJJ~JOKEKOKYKKL4qLYLMUMYM MMMMNUNVNYN NNNNNOOGOVOWOXOYO HOOOOOOP PPPYQ QQQQRCRDRERG{RIRKRLRMRNROtRPRQ~RVtRWRYmR fRRXS SSWSSSSSTYTTT,TOwU NU~UUUUV DVNVAcVEVOVVVwW tWWAWEWHWOWWWWCWDWXEXXXCXDXOXQY YYAcYEYOY`YYCYDYQZ ZEZZZD[*^u; ;n K% f I N @  j!IU<nm2#ZV  }!!"4"#5#$]$%\%&]&'i(#()>)*-*+^+,5,---... .+.7.B.N.Z.f.q.|.........../ //!/,/8/D/P/\/001f12:3345p5567L789`9::;j;<]#>W>>?H?y?@$@/@:@A#AeBB.BfBCCCCD DD#D.D9DEDQD]DiDuDDDE+EuEEEEEFLFXFdFGGH H8 8B7F}/J p   n   ^+  Copyright (c) Iconian Fonts/ShyFonts Type Foundry, 2000.Action ManBoldIconianFonts/ShyFontsTypeFoundry: Action Man Bold: 2000Action Man Boldver 1.0; 2000. Freeware for non-commercial use.ActionMan-BoldAction Man Bold is a trademark of the Iconian Fonts/ShyFonts Type Foundry.Copyright (c) Iconian Fonts/ShyFonts Type Foundry, 2000.Action ManBoldIconianFonts/ShyFontsTypeFoundry: Action Man Bold: 2000Action Man Boldver 1.0; 2000. Freeware for non-commercial use.ActionMan-BoldAction Man Bold is a trademark of the Iconian Fonts/ShyFonts Type Foundry.{  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcefghijklmnpqrstuvwxyz{|}~euro++pyglet-1.1.4/tests/font/action_man_italic.ttf0000600013464101346420000014042011266427716017507 0ustar yohyohLTSH~[OS/2uXVcmap=Dcvt  fpgmgasp glyfkZhdmxcU(p headѺD86hhea 6p$hmtx$kern&{#xlocaivtmaxp6 nameX<(post堩HprepuV 3&3#SHYFA !"I<  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  ~Sax  " & 0 : !" !R`x   & 0 9 !"E_)myjd }~_`abcdfegihjlkmnpoqrsutvxwzy{|}8G,K PXY _^-, EiD`-,*!-, F%FRX#Y Id F had%F hadRX#eY/ SXi TX!@Yi TX!@eYY:-, F%FRX#Y F jad%F jadRX#Y/-,K &PXQXD@DY!! EPXD!YY-, EiD` E}iD`-,*-j 9A"7.>7>7>7>7>7>'.547>6%h96x>"B!"B!-S)* *26&+% -98M!> @7//01.>?>7>7>76.>7>7>? !+      '   &2" !86--9>'  #B#&*-[&96/>LP#DB:&+1_Cpx@/01#"&##".>7&'.>7&'.7>367&'&'&67>7>76>7>2>7#6 )-(%$  3 -W, !44 2:: 2267 &/  *R* &  /%v =.W  *M*  5%#28.  &04% TP ! 4- $/,&  * "*R) @VB4/+01#"#.'.'"#.'>7>7>765.'4&?>3>76.'.'.7>7>7>7>763 -/   ?  #,23l5   C -RA/   ?AD%)% $4d3# +36:p70 #+& ! 0  +  ,'" ) 54:   &G$&N&.A)    .$#''  3e30* %7: !CZo @Uu?,//+01'&'.>7>7>76#.7>7>767>7.67>7>76>7.7>>&'"7>Fbt<7N   =+)m580$ O=K  %2CE  !G/-s9@J?38<3I  '/$ 3)95$ &6rZ46//333`,/:1qXPӛ$$"9KJ$6g,/@ 0Um3:u01%0-*`0#06)#,55/ ..4+#) IVr@)?01.'.67>7&'.67>7>72.'.>.'.#"7267>0w> R<?@?1VH;  >R`/. +8@!BB(SJ=! (-Z3%!  L%+Q, % 3g53.$ $e:+)M ~};x,'7!!MTZ0/UH74L$&'!?81,*&  (  *'!  !"- '3,$Y?R @ //01#".545>7>763&4&   #0#F!IF=6X*CB: !%&M{1%.'.'&67>7>7>'-0*&EN #&uKNq/f. (lh! T94$  2YTalfeD#%- *^QHCf&  64'.'.7>7>7>7>.'.7>760d-ivB  7f]S$Lq&!4gF   #+/*Q".,-t3t`; &  7#.'.7>7>7.'.7>723>7>7>7>78?z>#E$   '' <   ;$G#) ?  ' !,$52,A <#  7&  ;$ )%$ / 404- "*R* ,hE@/01"#.>7&#&#"#"/.7>7>767>232,T, ) ' "$+%#%  $%%&# N$  7DI # IK!(,X,m @ //01%&#"'.7>7>7 )/&(,S+-1551.#+7e00* iX  '&'.7>73223262Dzy  =@@-$?4 & % % @?01%'.67>36 %> % &.5&6#.:,! ,9f)@/01.7>7>7>7>7>7> (2367>72>76.>7>&uQ(ckp58P6 &&uM%Yen9Yt@** 2%*H>30P /*"GB;1I~h]-S?#+EY-]ime.`O3Bn,KH&E5-BK!NP"OPK<(,:@ D4@.?01&'&>7>7>7>'.7>7@$#L$- @#@   '/"2 UTUU+*)$--.LKON::8 "1(&6B"PHW%'.67>7>7>7>."#.67>7>>7>76$RVV*0__\,  +3:PN @9/ 7s7 ,@ APV)YR'  &17EG7263>7>7>7>.".'.7>7>7>7>&'.7>7>7>726CVd65qtr5&    ? B>;3' TY1 &)7o72+!  777,S-  =BD!"HGF!1K )39?Y,+8j`W$%=*!60(-49%( &" 8',2  11*% * S0#B?;2Xr=k'.7&67>7>7>7.'.'&67>7>7>767373>7>7>7      #+!    =2jbSH&)U0+-2  R*,Z$B#B$)@#!&)Y+ A ? .("H$0-& )&/9r67p30-% .6c26m; \[&M'#",9m90]/0 9Ff@C?01'.'&67>7>367>7>7>.#'.'&67>7>7>7>32&&>6Qfu<;~<&!89Dw971(  9t78m9: 25 ":~~:/ ,X-,\-').nwz9F^-q?ui]()H23* T0159 #;!&G&(;?{?7>7>72>3>."767>\%U*\ac/+F6% (}E!EKT0: *Q,4b#'TUT'<1&  $,Z,,R - $46x35F ^H%?.-="@Roj3if`, 5g3BH' &0wO8, <' H#, )**hp /I?#.67>767>7"&'.#"#'.7>7>&B ty" )'$ I'kj ;"&-`0.$-" DT\+]U"J:3_1Ÿ>53'27>7.7>7>326.#767>6.#"367> D]m6&="wH$NPP&Gs$&B/1o:)G+ ~L%RUU(Hk  $&L# : *%L!7 -#J# 6 1C 26bQ<6IX2K5- 31/H1`&)? 3FY5P91#?51}&2'A#5)%?5)7", 3< H0G@6)@)?+01&?>7>7>7'"&'&67>7>32'6.&7>7>,P)OXe> 0>/R *b56n3?gTlH4f0+I:*  !/9vhO /bZN#/w~w2qjY'VQ:x?,A120y72'.67>6M:(  '-!  ! %.2)40/)"*:  "2<'  '4{o2@/01'.'&67>/.67>7>76!+14 "-5!W0&(* K(037-#45* /69d.# 2Z+0) p3@#/01.'.'.'.'.'&7>7>7>7 0% $@! ( )/27l7:9:abBD - .  (!8. 3n5)P%>P#H@/01'&.67>7232367672&'.7>7>2327>6K# >EE(  5) %'tn 0H ++-   =/C  $ ( " '!?. @! //01.7>7>7.'.>7>7(027n7;;;abA}B  / 4.-5_' )$!?.7t:-X, /!M-  "JQg @6JX/?01"##"#&'.7>7>7>76.#""&7>7>#.'.7>6 Uequs5 !$%'M& 2$:p1( +5:LK62) 0=3n8$:<"!82  1 %10(!#D  (");,2"*I>2)$ *vK7<#5&%8Pn@RZAi?+01#&'.7>7>323>.'.'.7>6>7>7>.&76#".'&67>6.'#">luW+bff0QC;+ *6?!D@"$ &+$B6& Z?:328&<~^GtU :JW/  ),7.'.'.7>7>7>7>76>547233>5 1  ,4g71d1 %!# E),[09v<?HT2*A <](*K!$53*l% 8$J$  H# %7;r7>~ %D('Q*6::pn666-p:<{?   $0L7Qn'.54>7>7>7>7>7>766&'.'>7>6&'.'767>Xly9EGB<&,  37 "lz}5>p.' 48B  /=1   4n43.%  &NPO'&B6' "CD!A8,L* ",6!C6Q64q*   16., #*>&D 9AH$,"/(/6= KIG@2B?+01'.'.'.#&7267>7>76.'.7>7>21"(#&(#-YRHDg bC%N&:# ^63w6?jWB- -*a-kty:5<%  %6^!&16L-[yvf1^J,M:8qN/R'.7>7>7>7>7>7>7>7>76>&'.'#"#2>7>HSkFDH'6     .3<%,V,1`0HwX9  "*005H5+ <4hd_+-UK=CM99dG "7F&026(O'(N(8sro6  #Fcv20.-pxz9^['?N&(X]c^FX@4A7A+?+01'.'&7>7>7>766'.267>22>7>76o S]ZU4!'!ANcBHFNH( r{3 9t:9t7- .68OR(NC1 %MMN&LMj+?N!23A7qqr8RI #0  (T*  !.! *;H'6b3!$<'AW@3?01'.'&>7>7>7>7>7>7>3'.#">7>2 #,.CB878   C! (*tB".3e37k3:) 9;V' ?!  /40_00a-+    !B"&O()S&,6!FHI$NPsp1"  %6%) -i5% * Kd@0@ ?+01'.'&67>7>6.'.'&7>7>7>7&'&67>7>7>760 /X*_dg2@`F/.*^,gns8]9 !67!+]\W%Oi 1C'>>:3H (M')O( >~?@<0. 0aP'E4,H^1d{mX,S?&<5  (;%HXMC#;)+1r;3 + !/HW69t%.5&>7>5"&#'.'.7>7>7>7>7>7>7626>7>7>7>+ !+    4$E#%F# 3'  5=   '#9 #'TT   $% )& !40'  "9;:*S(MN7#($:#F$JIKK671-% D& &H%&J&   -Z--X-.)"1;;|?4p=w;8o H^%'.'&67>3276327>7>7>7>7".7>7>273?26368.  !C!&H 4=3 =EH IED<,?$&N&    ($  2 Z   %    UUXX-[- ! + ""2$J%&K%? > 1fec- 8yLV @, +/01'#"#".'.747>3>7>7>76&'#.7>6q# )D/1=L21t66M6$  '  ' 1'!#<$9 4% !&ha#  x{:wup3,)+CS([d$/7>7>7>7>7>7>7>7>76>7> %  $N(!8  )R       $1#%   ^^+Z&(M*5i6,'  5}  $J$eeYY.<* #%&K&0624-[-,X,CA7*T+'CB =&,G;"'751A?359D97%'.'&67>7>76>7>76? QRQJ&4"#Z35z>2a32c3.b_-,% 6("?~@h?01%'&54'>7>7>7>7&'&67>''.'&67>7>7>76>7>7~B/ /   G{oe1" 5> )   *&03#J*!=CO4+ KK!CHN,@L    adg)U+ < ??K7 9-7x<>{;EHH" @ 0./'+#"E#^aUT6n`L*5n6$E#"XX JE7 N::{=  >@@ +?{>:t"4Y@/01%.'.'.'.7467>7>7>76>7>7>7>3K":6@' )&   %" 1 C%26@,$+    %" $2#$& C)Q)9.6NZ'ij056*T+*S*40"%]b#B#NN4f]P1;_a'OLH! D#B@?{?B;),?I"1_1pp 9K>@&7?+01'.'&67>7>6>'6&#&>7>,_,kw~?>Y3%.FT&Y"I9N@4?01'.67>7>7>7>7>7>7>7>326'.'&>7> 9L\0ij   +;2(+2#$M$1Z/P&$ !,h`L>?:4)0[RE;>&$F$!B#6#)&G&BBIJEF #A699,A7-5Q4>y:* $+3 K3_ @!/?01%#.''".'&67>7>7>36>7>.'2>7.'.7>> 9 *$7>?0H4"  *~V'anv;8O3'%-9H."+( !/OD:uC  %#(%  54H ,-1[#/#"8H&M[+sh2bN1*G[/aj3ge`*.Q(,sEEA9)6JS$DEA6%!2: #;.567!=FLd @R4?01%.'.'.''.'&67>7>7>7>7>7>6>.&267>h #&6& 5yD  %A#*<"A  !+3caB[ '5=CL:f-(!   C# @ *Q)+62IIMM1a1.]04+ ?31{B"?:43J 0j:16<#)+#! >~<.!(1 fJc @J:?01'.'6&?>7>&'.>7>2'.'.#&7267>2EWd1gb:e, ),)cgfYG &R'(O&!A;4&  8FRXaed/;oV4'$9;$<>>d ! B!#B $C7* 3[PC89((N+  %9R6 *6<@0]WPF;*9V:  %$f<  +6 6:@2255+/01&'.7>7>7>7&54&5>7>7>76%/36j30]-/[0#+9'. %+\$&EIK;qpTN # mmmmIE6  ./Y-]]pm  #& K8V@/?01'.'&67>7>?>767>7>767>7>D   %_B(_io7-M=*  .1  54$  49 5SA29k6%!$') "#H$$F$$F$ea:iP/,=%HX>w>=y> .../BQX&CBED,V*' =V`' &N%+ $%~h3Q@L/01'.'&67>7>767465>7>7>7>7>7>7a ,#D ,[..b8>GL'   &'%7 2+(.[-#L'%(- 321c2HHEB @4+{? .AHpp:*!;@CMN8m6/,"(47:s&'.'#.'&>7>7>7>76>7>7>2>7>7>7>?6" & !V<BKU.8F GUd:#6& J, ?HT4 )  3a#BcRJ)!#.# !1($&A#   )* F:0`1.+*UP&NC.8)-e2-j[<+9(UVW*#A#UT5l\D6+S* ]^2b.9E <2IT"2c2[R$NQQ)YX+T*&/DP&%8S @D/?01%.'.'.7>7>7>7.'.67>7>>7>7"$#( 5h3/4;"%" HU[* D !   *]1),0" at~; + r &5=GHEF=6';(  6f`^/$G&NL;=?!  "H$1f1:n80.' #,I}wz0H5G.67>7.7>7>763>7>7>: )17BEI[]*O)&"-98lie2(BS*TX-$#*>z>&8BG"GEB I,IJ @2/??01%'.'.7>7>767.""#&'.7>?26>7>76 )jg7o2   5B,#I(+*%C$$ !U\](T*-`H"j;RXK?gl * . ')#!SL*  */ -I6NCYUKS$ VLF%'.'&547>7>7>7>7>'&7>72"(QH 23.iL bT!  $\h 75  &R* $  -..LKNNyu  ;% $GGII202   i) @ +/01%.'&'.'>7>76& ! ' "   C $3; C >  > dhGG:p9556 #VI'.7>7>37>7>7>7>7>7>7&.7>76I/kL bS#  !1b355  LU !'  23zu  ;&  $GGII302 $% &/KLNg-@$/01#".'.'#.'.7>7>7   :p9 $ .59<>D&"(    NKKM %HEC!B?5 3AH #FHK(%%.7>763363321&Z^^*77:<'0)&)I @//01.67>7>7) &( /#   +=H  #2DJ 'I?Q@0?01%.7>7'&".'&67>7>7>72>7>&'32 #))  10/+Y.9 %) 19>>H#OZf:/;  !  Ki--K%QPQ*# (4e2-X-($48ppo7jh+bT;+BR'Y]ZX99;PNN$JGB9JNNWI1Jc @7?01'.'&67>7>767>7>3>.">>.67>Xo}=}o  (-.P$5B@>>w,  )4= ,-}  0`31Y;pO."3h51c& JQ'MB2=kYE0!#&R*(Q&9l95? !-8> $GC?X42l'%L0++%8T#=0!8+!@ @.7>36.'&67>7>$$$)5(-TJA9] 3n94; 3:>=|<6U?) #,d-ny>Ki &, B !**AN$TX*R);. %$ 0' (!;N-Xe{k4cM-L96B+Q'.'&67>7>7>7>7>7>7>>7>&'.#&#">7>/{:B$7"?  $G!?ve$"   */4  #3)$+-a`X$Piq8`C $*V.HHLL =@ A!.')ky $41, )Y[\,>v>:t7.C(NFH^ @>H /+01.'.7>7>7>7>7>#&'&>7>6>7>76*ckm36nom40 ,u?>#9?AmV+."!D"-`0/[ ;w=;w9$ ,69LN)L?. KK%LLK$+:+A5..':CE}|2#&'.67>7>7>7>7>7>7>7>7>7>7> !! 7n76n$) ? =#D #*WXX+ % *!  )    V,-Y-'M($E!!  84&P( E#._05f53,)9B/4d3;=*O)(L(*:   / I_ @7 +01'.'&67>7>.#&367>7>7>7'.54?>7>35*yN$UYZ+:`H/ &/v8>1$   3rrn.b}(  ;03k-+C  67  .*UUS)166k6UE#>-!=S0^mg5S6 ( ,E.]o&TTL:#2()^35/     D0+ F>b @A+01%.7>7>7#"&''.67>7>7>7>7>767267>7>767>@>t;'L$,   ) -/ #'5$0)$N&JV1e2$  *"&   & E {&$-.]01c15f5=>; 9LT%2a35h50c10]0D?4*DQ!]] 1b1#D#CD1*&8B(P(*O)9p9qq J-%.'>7>7>7>7>76 *9'   "H$$I& !-  *,%#GA3   .7n9aa__;7.@?7l7:q:37>7>7>767.'.'&7>76~#$F$ 8A'8+,u9?\A( -""  ".!   2R C effg8i33:.K`2fx '_/7>7>7>7>7>76>7>7 $ 1 !-     *( '   -7I5%$     .XVU*"EHI&!(/dX-A4{%)EB2*==96 :(6l7.^.0^10,3qmd'3>()6:@C 62$'0    :N,N(8ns9>'.'&67>7>7>7>7>7>7667>7>76FRV(VP*C   )3$$-.$ !M(&K 5r7#D#@ %.)?2'#* %%$N(+9n9:s;3b31_1.(*"!OUTVV5i2  %(;w%.7>7>7>5.'>7>'&#.'&7&6767>7>7>76>7>7>7>3 ##  :& =AI-  3K!      )+sE# #' *I#:o>3! *.    -)%  ":QQQN*[WO "KLLH_a#B#"D!! %NT9:#$1g3TS#@"% 3GTXX'#D##D#(O(G"$;c%.'.'.''.7>7>7>7>7>76>7>7>7>7> &0 ' ! '"  %(( $((1 )6(  #/     #:/2, "07]T?z?9p96k6-X,0'C,&O&*Q)GGEE#PLD #G&NKL? 5g5ST B %!GF.1mmE <K<@'6?+01'".'&67>7>2>.'&>*a/ow{;8U:#(*a/nvz;9T;" :1&OJD8P>6@l[I<.tb1XB%*FX/_muc1YB%+FZ.a3&WVP?&.=!EK+bb\H/4SiqpH/L'.67>7>7>7>7>726.'.#>7>?Q\-hm0 ,% "Y0"&R`e**RMB4  G(&+  $!DDD!>9-2XOECcTT,  0;qq":s:7o81A'0BMR"  -467>7>2>76.'&767.7>7>;0u7:`H/  *zX*ku{<7R8 $)}\ +%!(VQG:F -! @  4 0%P%2,9 y:5+(-1/$$DGI$8HWr @;/?01%.'.'.'#.67>7>7>7>7>7>7>726.#267>^!#&B7,": '   +# %*"' 3>7>76&"'.5&67>7>'.'.#"3>7>72$yR([_`-Bv0,   *#!P,3shQ -]00]-(A/%6CM'QN3^$"$ 54 0f00O  &O&,X*BZ [G#9)# $-7"    !D`:6% ->%DK(IA6., &-  "V05   D73{?G@/01&#&".67>7>?>7>7#.767>7>7>7> 46#K'1^-@  *(#   K $696'  D!#G$PO*R&7-$  @ wx,X,50&)=H'O&$G$9TQ &   ( 8;G @.+01#.'&>7>7>763>7>7>7>'|P'^ho8?gJ*&6;C)? B!$CJ*I~dG&:  $ *k_.[I.%Fa87twx7>7>7>7>76>7>7>7. ??}B:DS6!    "!92.>v>#)2! 3d15d5om,c\L MPPQCC$G&!&"@"[[]X&QRT*pp>9. (/l0t@ /01".'&7.>7>7>7>7>7>76>7>7>7>7267>7>7> ]63rL!"' ,C 9q>69<#     O:  $ !tcb_W !+YV$=50*" 4ETWW'&G&&M&:q:8p8!6*9XXXY-b1TQ#IGC&MP-Y-,S(m#   -fjn F8X@H?01%&'.'.'.67>7>7>7.'.67>76>7>7>7H"#   K}<8 " &)3e3&G#   1?k2, ..!ct|:  o#&#6XX?I#C# +41-,0b1)P+FH=?A" /HH2t>6 J3Dzpl6>~B7>7.67>7>36>7>7>:<#D#d 6 ,:# #("  S]%N(+ #@ !E#3$1a11a/"S\b0[a  ",U,0[/0Z+mg-U,$-PM>7>7>76'.'&7>76$7.#"#".7>76/hmn4=}t1/004k3'( 40MG ![gn4~y  #H&TT" #Zbe-ξ:%7>7&'.7>732323263.'.5467>7>'.'&76rC(>l&  A'*`5"G"0% 3=@  $) \<ADB*   ">8+    7  *^0.+$ #).W%=  *2: 1Z*-P ""(K*+.Bx1&.$5-)&%(-.0O((*/ 2@/01.67>767>7>7>7>76H    '0@0 +]6#K& " ! C%F&#H$"5onh,$)&P(ab#D#%J$  $.-Z-mtk+&#"#"#'.'.7>7632>76.'.7>7.?>7>7..7>766 3>A  !+ Y<==)   $>8*    4  &a1/+% $(/C(?l%  A'*a3!E#1&!)J*(X0By03- 0  %5-(%&),..S((+- $>  *3:1\*.O !z~ 3 @#//01.'.'#.'.7>7>32>7> &#IIH" 1-767".547>7>7>7262$)M* 54 +9%  3f7$H#@II) ,  *#8*?8UURRD<+#40b1$'7l7:5) =:q: +.P,'"&'.7>7>6&'.#7> U66u83JQ64v83M &)"  71$:6a#$..%$_28e&(-/(&`,* (,$-qs]m'.7.'>7>3&7>7>7.'.7>7>3>7>76%7>7` (3  .2 ?KO$ #2$  B[f> IOQ'      3Fp.R$#; 3.#a !#>{>"D!   &7) )FB8'6#C#S96GL?;.;%" C  <*&`BK('R-#:9"}2e2\Cm@ /01.'&67>7>7&#"#"'&'&67>327>7>7>7>6&'&2&'>7>76+*cil38pqq73  4"AE## E =AClR"""B -^`X"$F" ,V*+LLLK$*@5/0*:EH?|?$! )?}?% %  "@- B" 9n9:r7C#"<PQ'.67>DK576767&'#.'.7>7>7>7.'.67>7>7>3 %H%:P&/' +4: *W)+K/\- A!#A)   '; +- ]>' #zQMQ0Z/RNgg  $" jjCBBB,V,-   1J$EDGG@}?1c1'N(*" :6l69n9'A9EQ[/N384   gIH @=p?01.7>7>7>76&'.#.67>7>7>7>.&'.'&67>7>7>7>7>7>7>72rP) #)'+YN< 4'(('  4'!#F<-  %M& =4+ %,W&/ ")) # 3"&!-krr3@y/  (5=,/QoK  &  ->K,'G%  "B   $1<#&+7-[-qrML-(#<&$S)/].&I&7o90^00]/&M!0;!  .8> $FB>Y32n |!+D @$M+01&'#.67>7>2%6.#&#"#267>>'.#&>7>7>767>7>76>.'.'368Sk}B  $<HCSoL" !NexB?DBs[C*R #,+5n65W&*AT25ppm33^P=5.# 0217;83 #,26u> 8m_I  *DDB{m\$ $  'MnRE|q01Q9#?Y6jY  /[-ZcV+I5-?&%X`h6:tgS$I$%M&0\0Y_& /6;840+(D 68EWe9 /2"Bz @+;++01#&'.547>7>6>'.&3267>#"&'7>7>7&'.7>7>3BTc4jgpE#6F]p?&()?U34mkf-\#+7PHK%E;-` %)S&%B &'( ! 7,U*9_ .:D##KMM&,5cZM>?D>LZ348C}s24X=!$B[6hcV+J51E*Rh(G>1&'$&3=D-D(&  1#+%&#f6%FA:." %O^@/01"&'.7>7>76'.7>7>'".67>7>7>72>7>7"&7>7>7>7&7>7>7>7>7m  B(!C/ +    %*0 "  *K&#!    )66\(  $ #G#  6k6*U*' &O(OL5g3*[ &J&&N$1c1#"  ,A2fed1  T[8o7.+& .=D"!)#F  lm#!! @"#D#6m6   h @//01#.7>7>73=F'  -7A(  H?*  JC2$*@&/01#.67>7>3'"&'.7>7>72$)  ( $  #+ !"*+,5$,' /6Hz"@NWWcAKKZZccv9 /?+++01".'&67>7"'"&#&".7>7>7>7>72>6'.'67>32>7>76%>7>' "+Z\^.]Z,'   300*V- :!'=%,V0MZ*^em:5NG)  ss/ 9p:9o7.-69NP)OC3  %NNO&LM'" P:7b0Pj).'"!:  A *P*,V,(# ?~>@@mg,`S:  !/  &U*  -8! +7&67>7>>7.'&6>732>7>W(#,^,kx?Hf&  %, (h3 ",*|Z+jqtl`$&K,! h $'NIB7P ݑ 1XNC;aD5^1Xdzo6hR1B1&   :,>l9jum]0P9(P# # 0@"HM,T+2w ә-GT'[ Ae@4/01#&''".67>7&'"'&'&67>327>7>326'.'.7>7627232726 +V* "+  )%EJ%&  $#L 9 ~q *:-.8# 'Q !3E" #"! &I$!*,V, -& %\1y6'&#63632#''"&7>7.'.7>7>7.'".7>7&67>7>36>7>7>P<#D#>v6:, "&&L&3   =1 %(4c3 &. -8==*(O&  (.1  #   Q[%N(+ #A!E#?E)! 'K('" 1).# $H##GLEH  ",U,/`]Y*ng-U,$-Hz"@NWWcAKKZZccv9 /?+++01".'&67>7"'"&#&".7>7>7>7>72>6'.'67>32>7>76%>7>' "+Z\^.]Z,'   300*V- :!'=%,V0MZ*^em:5NG)  ss/ 9p:9o7.-69NP)OC3  %NNO&LM'" P:7b0Pj).'"!:  A *P*,V,(# ?~>@@mg,`S:  !/  &U*  -8! +7&67>7>>7.'&6>77>*a0ox|0&   :,;k7]hve2YB$'S" #7c1g9 -="GK1a1<3e3 "6Tkqq Kj @[?+01'.7>7>3'.'.7>7>7.'.'&67>73>3>363267>7>76,9@!;&  #<#8n!# +8?md!$%&N% 4$;o0) ,5;KL62) 0=4l7&:   5'%8$7=*J?3)&!*)w?!92,D`*  2 %00("#D !(");  SJ6'.67>76'.>7>7>7K",0!( !+.!7!  #(++ %i87x>!C!!A!+U)*  ,36dc+c^T$-1 >'O@/01%.'.7>7>72'.'.7>7>76v>" 06:357 ;w=/KJ/% 17<:=@!o- */58;!842,'  )3f4;u; S >~?5k3+  "*.137!:742.$ . )O@F/01.7>7>7.'.7>"&7>7>7.'&67>7/8;:=@" IH4 % j06;458;w=-9" !:632/%   >~?6i6,  #+0/37852,&0%2d3'".7>7>36'&'.>7>36= %.2 ,+( )/' *2"" !)8 /3"r'/2)0:)&00"5>#)'16) #5<#&!@#&!K  &/w 5Hf@o$$ /?+01"&'&7'.'&67>7>76>3&'">7>6>76>54.&2>7>:+ekm38qqq83!KNM$& /)].ior7P#JE*/ !D ,Y0.V9s<:s7# *58KL*N?/ MI(9'&NIC9P"/UJ?<\*>3/0," *8/ .J^2fuk[-K8"480( 4, A,&    #'   0AL&:p7DF:%%1^/&0>!FL?|<;3#,DQ%[5Hf@o$$ /?+01"&'&7'.'&67>7>76>3&'">7>6>76>54.&2>7>:+ekm38qqq83!KNM$& /)].ior7P#JE*/ !D ,Y0.V9s<:s7# *58KL*N?/ MI(9'&NIC9P"/UJ?<\*>3/0," *8/ .J^2fuk[-K8"480( 4, A,&    #'   0AL&:p7DF:%%1^/&0>!FL?|<;3#,DQ%[hYx @/01#.'&7>73q XU :=>7:?3  * $sX !@+/+//01%"&'.7>76232  # ?A@vv;9:<A8"   % $3O;.'.7>7>323'.'&6767>7 8    8     %05   (058s< 6  &069u>  '15;v= 4O6.7>7>7>7%#".67>7>72+b<#&) 4S+") c9!#& M*+/4 LB%! 7 7     #%069u<   (16nv TO @ //01#.67>7>7 %/6"$(G-(.5 &JHE"&!$6#"'"&'.7>7322367'.67>63@!% %.5&.:@@0#?3 &? $ &15)A93.:,!+J ! &8.9,,IF&Y?0H&9AZs @l/+01"&'.'#"&''.7>7&67>7.'.7>7>76>6>7>>'.&7>7>B &L& _G$ -%2*EA?m+(M)#N& =GL#?3$    0&^[Hu##C$ F!  Z61pfOM32f60'm#356x?J816=%&2# 2"  &?741t>A96  ):*80+6k,-*=Z80Z$$& "+1& @//01".'.'.7>7>7v / '!239=;>> 5h5/.  E 4/+*$+&(M(6 +7<(@ /01.7>7>7.'&67>76719=<>@6f60 '!2 4/,*$+&&Q&7 +   E fIf @T$/?01'.#62'"#"'&67>7&#"'.7>327>7#".67>7>7>7262 $)L)  =0 &(!B"B" *9&0N( !!!@H$$ %##$ @HI* !,  *#7)?81)" `_D<+++qr#$"%L% $'7l7:4) =:q: +i^y @+01'.67>6{ &= & &/5&6#.:,!!,m" @ //01%&#"'.7>7>7 )/&(, ',,1551.#+5310* 5%.?>7>72%#.67>7>76a<#%) 5T+#) c: "& N*+.5 WLB%!2'&'.>7>7>76'.7>7>767>76'.67>7>76>.&7>>76&7>>&'"7>=)\,n65-" H`s;3P iGas<5N   B-)n56.!BO  1>?(%C069:?N! >3>A@6O  1( (/%'.&  2)D6 &IhW,;1p96oW31-*d6pW45.0343`+-51r+\Tכ" $"<LK-  #6l-% 2Vm69u0!31,g("+4."/5."07)"+472"24*#*#!3&!^6&%#&!R d&%^&%@ &)" 3&)y  &). &)@  9&/?  98&/ 9&/@ K&5?  K6&5 K&5@ q1(@/01#&5.''.67>7>7O . 2f1) (-/24% 6k46k9 0-*(! '*]3 m0@/01"&'.#&.7>7>363267>7>h.?~<# $A   %**T(! &0+  !P2 ,   $   4.P,'"&'.7>7>6&'.#7> U66u83JQ64v83M &)"  71$:6a#$..%$_28e&(-/(&`,* (,$-.( @//01.67>7>7>2K-/25$  -[)&4]('!")&*-1  9m65h6 3&3 q.&S%J@+/01#.>7>7>7>7>7>7>.65>7>7>7>7>6l#&     8*R %,   +8" *Pm #),+((   <&1"&uK,'1F!$%  =4""o0H&9 IF&Y eC`@./01#"&'.67>7>7>767>72>726&'.#"267><5+2_TH<=63"(763o=7* &*$G$ Kfw$ :# #*-8"A) %-4eC`@./01#"&'.67>7>7>767>72>726&'.#"267><5+2_TH<=63"(763o=7* &*$G$ Kfw$ :# #*-8"A) %-4qX !'&'.7>73223262 "zy  <@@,$?4  % %5H@/01.'.''.'./>7.'.7>76>7> ,W--  !  .% 39=  # =<R >=   #/,%   2-)(/  &K%.$, G*@jjg;S##g grrgz?+///+/01'.'.'.#"66'&#262'"'>7>7>76.7.'.7>?>7&#"&7>7>7>%"(:&-TLAA2 &*0`0 '@2  '*&L& 5o74:  3;>>{;Vq? 5%#19:  (&9@A8P&UXX*&?5) &*C #&)@N%-%$F$*$:1# !#/'!(BqJ:%4:$#RB 5%%1!"l{=e<*T&$~D CZ ~30$  g\+y$=t? I$W}+0h+ ?":jZUIR.z&1DDDDT\P{Z\hms+}p55hsKI0MK7i&&&.+0KIq5 *    ~AAcCEFGHJMNOQS!K"#'*,-./137 w   m Hq  D  `f!#!'!/!1!40!5!6N!7!9!P!U!V`!W!Yq!!B!C!D!E!O!Q!TN"!"9" c"""4"5"6"7"Y"R"#!# ##R#U#Y#Z$!$6$7$0$8$ $$9$A$E$H$I$O$R$U$% %%%6%7%9%B%C%D%E%F%G%H%I%J%K%L%M%N%O%P%Q%R%U%V%W%X%Y%Z&!&A& ~&&' Y''''A'E'H'I'N'O'R'U'Y'( (((A(E(I(O(U(Y))B)C)D)E)F)G)I)J)M)N)L)K)O)P)R)S)T)U)W)V)Y)Z*!w*Aj*E*O*U* R*Y***I*+/+E+O+Y++#+'+1+U+V+W,4c,6,9,Y,,#,',/,1,5,J,U,W- ---A-C-D-E-I-J-N-O-U-Yq.!. ...A.E.I.O.U.Y/!/4/6/7/8/9/ R/t///A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/Z/0!0A0 00m1511 1=1]1\114{16m17191A1U24m26`272Yc22#2'2129w2E2O2U3 ~33933A3H3I3J3K3L3M3N3P3R3U3V3W3Y34!D4/4AY4E4H4I4O4R4q4 H44#41484M45 c5A5D5G5M5P5S5Y56'6Af6I6O6U66w6 m6 66#616R607!7/7A7E7H7I7;7O7U7Y777 7 c777#7'71747D7M7R788/8#8'818E8U8Y9!R9/939Am9E9;9O99q9 999#919C9Q9:::/:':I:U:Y;D;*AGATmAWABBBUBYB BBBCKCCCCDVDYD 0DDCEVEYEFEFOF FwGGGAGEGIGOGRGYGGGGGFGHYH HHHHHOIVI IIIIJ RJRJqJJJJJOKEKOKYKKL4tLYLMUMYM MMMMNUNVNYN NNNNNOOGOVOWOXOYO KOtOOOOOP PPPYQ QQQQRCRDRERG{RIRKRLRMRNROwRPRQ{RV{RWRYqR `RRXS SSWSSSSSTNTTT3TOqU YU{UUUUV KVKVAfVEVOVVV~W WWAWEWHWOWWWWCWDWXEXXXCXDXOXQY YYAfYEYOYcYYCYQZ ZEZZZD[*YwM" ZEFJr  7 1 J  bij|q1%:q^{c kL j !|""#;##$%%&O&'''(m) ))*e++,,-*-..s.~.........../ //"/./9/D/P/\/g/s////////0D0131223o4_556!6j7I78w9)::;E;<<<== ==>>?"??@ @=@@@AAB BBC C`DDDDDDDDDDDEEEE)E5EzEFFYFYFYFeFqFFGGH,HbHI8 8B9H/L p    r " ^A   Copyright (c) Iconian Fonts/ShyFonts Type Foundry, 2000.Action ManItalicIconianFonts/ShyFontsTypeFoundry: Action Man Italic: 2000Action Man Italicver 1.0; 2000. Freeware for non-commercial use.ActionMan-ItalicAction Man Italic is a trademark of the Iconian Fonts/ShyFonts Type Foundry.Copyright (c) Iconian Fonts/ShyFonts Type Foundry, 2000.Action ManItalicIconianFonts/ShyFontsTypeFoundry: Action Man Italic: 2000Action Man Italicver 1.0; 2000. Freeware for non-commercial use.ActionMan-ItalicAction Man Italic is a trademark of the Iconian Fonts/ShyFonts Type Foundry.{  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcefghijklmnpqrstuvwxyz{|}~euro++pyglet-1.1.4/tests/font/HORIZONTAL_METRICS.py0000600013464101346420000000354311266427716016570 0ustar yohyoh#!/usr/bin/env python '''Test that the horizontal font metrics are calculated correctly. Some text in various fonts will be displayed. Green vertical lines mark the left edge of the text. Blue vertical lines mark the right edge of the text. Press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: HORIZONTAL_METRICS.py 967 2007-06-28 03:02:44Z Alex.Holkner $' import os import unittest from pyglet.gl import * from pyglet import font import base_text base_path = os.path.dirname(__file__) class TEST_HORIZONTAL_METRICS(base_text.TextTestBase): window_size = 400, 250 def render(self): font.add_file(os.path.join(base_path, 'action_man.ttf')) fnt1 = font.load('Action Man', 16) fnt2 = font.load('Arial', 16) fnt3 = font.load('Times New Roman', 16) h = fnt3.ascent - fnt3.descent + 10 self.texts = [ font.Text(fnt1, 'Action Man', 10, h * 1), font.Text(fnt1, 'Action Man longer test with more words', 10, h*2), font.Text(fnt2, 'Arial', 10, h * 3), font.Text(fnt2, 'Arial longer test with more words', 10, h*4), font.Text(fnt3, 'Times New Roman', 10, h * 5), font.Text(fnt3, 'Times New Roman longer test with more words', 10, h*6), ] def draw(self): glPushAttrib(GL_CURRENT_BIT) for text in self.texts: text.draw() glBegin(GL_LINES) glColor3f(0, 1, 0) glVertex2f(text.x, text.y + text.font.descent) glVertex2f(text.x, text.y + text.font.ascent) glColor3f(0, 0, 1) glVertex2f(text.x + text.width, text.y + text.font.descent) glVertex2f(text.x + text.width, text.y + text.font.ascent) glEnd() glPopAttrib() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/font/ALIGN_MULTILINE.py0000700013464101346420000000267411266427716016172 0ustar yohyoh#!/usr/bin/env python '''Test that font.Text alignment works with multiple lines. Three labels will be rendered at the top-left, center and bottom-right of the window. Resize the window to ensure the alignment is as specified. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet import font import base_text class TEST_ALIGN_MULTILINE(base_text.TextTestBase): font_name = '' window_size = 400, 500 def render(self): fnt = font.load(self.font_name, self.font_size) w = self.window.width h = self.window.height self.labels = [ font.Text(fnt, 'This text is top-left aligned with several lines.', 0, h, width=w, halign='left', valign='top'), font.Text(fnt, 'This text is centered in the middle.', 0, h//2, width=w, halign='center', valign='center'), font.Text(fnt, 'This text is aligned to the bottom-right of the window.', 0, 0, width=w, halign='right', valign='bottom'), ] def on_resize(self, width, height): for label in self.labels: label.width = width self.labels[0].y = height self.labels[1].y = height // 2 def draw(self): for label in self.labels: label.draw() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/font/action_man_bold_italic.ttf0000600013464101346420000013756011266427716020522 0ustar yohyohLTSH~[OS/2vVcmap=Dcvt * fpgmgasp glyf {hdmx'ԯ headFt6hhea $hmtx$kern#$Gloca1]T:maxpE nameqhS@epost堩prepvVd #3&3#SHYF! !"l]  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  ~Sax  " & 0 : !" !R`x   & 0 9 !"E_)myjd }~_`abcdfegihjlkmnpoqrsutvxwzy{|}\i,K PXY _^-, EiD`-,*!-, F%FRX#Y Id F had%F hadRX#eY/ SXi TX!@Yi TX!@eYY:-, F%FRX#Y F jad%F jadRX#Y/-,K &PXQXD@DY!! EPXD!YY-, EiD` E}iD`-,*-pf%:.7>767>7>7>7>'.7>l*x> ;AN3 1;  2132  ) .:?* -:@!; ki.fbW 07{{ B!"@"1`0/ =4%$4@ 1"C@q"C#.5>?>7>7>#.5467>7>7>36#.<*     %*((9+   );)    ?%QMD #H$'  -Y-' AT[$TPE$*+X-&M%!H$:^O@nw@sSs+/01#+".67"&#.67&'.7>7>7'&'.7>7>63>7>7#6327"'9#.%'-  G#  4)/0 ' 1=@  #  4<= $.74 ",%  /!;h%"c4(   ( 29<' !&18"!* 2*$ 8/!?3.!&*1d@./01'.'..'#"&'67>767.'&67>3>76.'.'.7>7>7>7>#$0*   =Z36q7  (,,- $X ,, A$  %1d3! +47:s91 $+11  $#'?    0K,5U/ 10 A#A#EE eQ!   )%-*" # 5l51(26645'  %d?Um@;/01'.7>767'&'&67>7>76>7>7.67>6>7."72>?>54&#&767>Y;CG!UUߏ!;1& 91h1<[B31{7.67>7>36#.'.'>6.'3?>'.w?(/7!ED4\M>0# 9KY./DK)%E?6-1 !)/$   !F  -:./,& Kt" @ //01#.>767>763% $   , " F(O&'$  &4=@?LI%" %+*Wl4%&'.'&67>7>7> )4::`#HQ%'zNQs5o4(  aCG^$V44 1&!5ZYdphkH +/: &TY`&NMI"@_$2'.7>7>7>7>7>'.'.7>76O3h0rE+ !4aVL!Km&# iB  -8>HrS5 {6xa<&1 ;JT,_gU?7.7>767>7>2>70`05 - , *54 % 4<@# #*0 @  #J$)*+. 2- 0+ )$;  '/&!#(0(  <&#)#AF9@/01"##.>7"'.'.7>?>2236(,#H#  *7$;"  GPQ" &5D)   !J8&=(5FL /'* LA,$$D$ 3K5 @ //01%&#"'.67>7>7-8> %&) Y069=!#$C?:$>q55-0d5S, @+01&'&'.7>732232I $+/|y1 HOO",-X,& $&/&*(? @?01%#.67>36 / M#(1 /7>7>7>7> *2}16:  J(0Z06h7ah5:= =#@ !D"2(6"9n5:t:EEys6,  #l< @5?01'".'&67>7>72%>.'>7>*|\+hqv9;W<$**U'`lu<^|F , 0-$=5,7E ($!@;35Cob1V@#+G[0bpsi1dQ5Cs#STO@+&8@_RCC?2!+8TWj9@/?01&'&>7>7>7>'.7>77H%$N!6); @ #D  *6@" ( YYYY)*2&" 234NNQQ0.-");2">KU,  kP%'".67>7>7>7>.#&5&67>7>>76Y(W\\,f_"( +5<KN@u  @ = #*,+ ET],`X<< Z6@@=s)gd# !,  !2?'LIF!QQEQ   #8-K=/% K32p:G>B@>H, ,(jj@]?01'.'.7>7>7>7>7>.'".'.7>7>7>7>7'.'.547>7>72H[k88wzx9#2  (%> ;u95/$  NS8#   ',8l70*! 6i5-Y/ @JP%(RRR(8QW05.&.$$_77>7>7>7.#"&'.'&67>7>7>7>76>7>7>7>~=)    #/:!*@     !@}95.$  G()Z379 )  O&/U%9s:' ")-&(&Z%D A = ;2#$(*+,00   $17>267>7>?654'#.'&67>7>7>7>&>Ukz?>? .  2#:77>7>76>2>.&367>&\-dhj3-L;*  ,G$GMW3 H#!(Z,#CC=Gr &O&'J. (1h/,>fN'B1/?$G[rm4jhb, # :m7,U/865W*" 7#>!$&%^msk; @ 4?01.67>767>7.#&&'.7>7>j3CUY&: ";$0M(} 7;795 i1I^ @Z,??01'"&'.7>7.67>7>2654.#"3267>6.#"3>$ 9O_2,#N'UWV)N}&( ;P^1"26CM))X[Z+Pr!$ ?, ;. "9- )61'1]QB:HS-T<1"943N1[N@8HU.+SMF6&G75)55(,  '?l2I @B-?+01.7>7>7>7>7'"&'&67>7>7>2%6.'&32>7>CLT**V^lB! Q)/Y,LLGp U:;N6q4] "3h[E ;:83ZyA}=5xo\ & 7>3'".67>6!0=# 3 #@0 ;$%'(, 0;A5 A6"==$:I> &7>'.'.67>7>72;C 1   ,9CF,/8>%&'R-77>7>7>W %,,D#C#81  )26#', -[/#D# 6$G@==CC*/+/01'!.67>7>72323636322&'.7>7>32;672 ,2" !'))O('*   !C2*14vo&$'+U('*-2 I8A' ", !6(". 21@%/01'.7>7>7.'.5467>7-6;7o9 A#>*$UU7l9 $*!7305d* 1*& =&A+)0d2&N&' &N0 "fkOd@`U2HUH??013#"#&'.7>7>7>76.'&.7>7>'.'.7>6P$}G:3G(%Bx3+ ,7=KL30()00f4#6K&# >NY-]W!A;3%Q 0=H$*F  6GN#'E, Lt\M%'*@ +5!4-&#G $ : .!,-OD7-+  .E"C5 J*&B..Dkq@JT;hTh??01#&'.7>7>6&'.'.7>6>7>."76#".'.>7>7>2.'&3>"~_.hmm3WE=+ /?I&PK. )4:'G;* D04T?.$7tV0eff1;[F2*Ab" )4:?r_IPiJIJ;l[Fz =>: 4$8dN*?,!'6E,%E<0$6  51#!2!AN?: ?S_*NuB * *^df2YI  %1$4M2/mv|?K}44M1/F-,eot    FlD\ @2;J+?01%&'&67>7."'.'.7>7>7>7>72>&773232>yK(!@  !0^1/`- :#+  G)/[/w:A{?fd(]Q= &O,*R);;0^\[-,_21f3wl8Oh'.'&6767>7>7>7>7>766.&67>6&/"767>8^u?HK!CCA!+ '99 3>;4)Am[J"4  /9<}@st;w=#D##B#!6,"  '2<"7>76.'.67>7>2y$.5(7  *RLB=[ W<3j3 F$  i=;>Aq[F,g0r{@-L@4 , *##@#  $9H#KT:o.37* ) ->i()68P/0kt|?}k3bL-'5FMTq/U'.7>7>7>7>7>7>7>7>76>'.'#">7>WqIGL,>$     07C-.Y,5c3M^= &*1  M:'1^ZU''LD7DP<,=G$&PVYeZ @,!?01'.'.'>7>7>76#.>7>6>7>76%,]`b1/`_]-!@/(L]wRJHRK 1  ,ps( 7l79h6"8! .9=QQ%LA2 IILK$l4"4,%F#QUf\ ,:!'  B#+<$+ #4B%-T*;"$5(3[eT@/?01'.'&>7>77>7>7>7'.'"#">7>6 #,1DB7m9  + !'*&*aM06h49m6&F/(,0\,"B !%-W-,W*4'% :(P(0_-'#IKK%QQ*H  /B+" #S*- +mg@A / ??01'.'&67>7>36.'.'&7>7>7>7#"&'&67>7>7>72v 0_-gkn4BgK2$0*d/mux;b>  '#:1 )VTQ"Gc  ,<$973,?$H$$F#,   !CCD!EC792hT)I6 ,Kb4iu`.UA&A5 % %7#DR#GFB 7''.f5 9  4Rcy_l%&'&67>767"&#'.'&7>7>7>7>7>7>7>7626>7>7>7>q#8#*8 , @ 15!  !$2   3>   $7"0C &' IH 6"*  *%"<4 '!#Q) @ BBGH#E  (=J%H%JJKK76</*&&^1%J%'K&  /[ZW-8!$5>@E4q;v<9oTk`@4?01%'.'&67>7267>5>7>7>7##"&'.7>7>2763>76 - ?3" ? C" A$%G!   #GCKN#OK(H!3<&+Q*     =  Z0 -   UUXX$J$ 0##1"  ,$#@ !A!#D#*O*(P($KKJ#  ! nV @- +?01&#".'.7>7>6>7>7>7.'"&'.7>6 "() C14AQ57<9S<('+. " +-L #E %.5ha+,   y|=~{u44/*DU+]k" #0>v=,%&)Bj4~z  =!.#  D+ Xh%.'.'.''.67>7>7>7>7>7>7>7>76>7>2)!&+" > )0.*     &0A-,!  ?}BAA@% N,6i6'O7}$(M(QO,T,,V*&M" $-2&L&2436.X/-Y-#QL>$3e30\0" &0N<"7(52/A}A59<_?%'.'&67>7>767>76>7>76*VWX+XQ):' M-5L%*2 & -/)  9s7!4 $ $6E$HP3^]uk72( "?{?8m87o8%MKH  7cu%'.5>7>7.'&67>7'.'&67>7>7>7>76>7>7%+.5", lR,   4%   ,6,< ;& S0>%(,2)8# KK#GKQ.6E%    ` 3GK*O)u D! -/^32d3,*:03/:0.&&R,de][2b./)3A!PN&VU!KC3.H[cf. > ?ALIEW]@0/01%".'.'#.'.7467>7>7>7>7>7>7>7>-G'6C,&   %3$( 4!%_607A,)6!   $$ "$,0 "!-+#C50IU&ff:/[/-Y-A:',_d#D#da'WTJ(;IMM"7o87m3 @@??%L# 1HV(1cb`37>6%>.'>7>D.d0r~CA`B&$.+_/ovz:9`J3   &/7]O@4)!  -SH<8Rs8kS2.Ne5m{rb1S< 6N0-dik$&[P7,FZ``)9s7;0 ,DP$T[m4L@/?01'.67>7>7>7>?>>366&'.#&>7>= 9M\1km   4EK 1$& >S`.0Z/V')   $YSC5k52,$1^UJ@H  #FFE#&?) -5&M&BBKIEE /T=$=>;2/  *C-5f3& "* m0]@/01%#.''".'&67>7>6>7>.'>7.'.7>2> !',  %1|;9U<% &-[+jv?;V9 )&-9F+  \ .K=43S      &+/A(,&,M$39)DX/^myo4fQ1*I^2gp3fe`+ > @2e1<0!7JS#VY896-   3;!% )4hgMh @S4?01%&'.'.''.67>7>767>7>7>36>.">7>%:R(-j9   "(*,#* ;#@   *8A#da$?3' $/6>HeP# Q>z? " 3j32.&t$ -(-V,Bx9)"@"-V,,"5@!JIMMd_0]0A5$ !-8H =952Q^j138!-}6j5&  (kj@?01'.'467>7>7>?'#.'.>7>7>6'&'.'&72>2I[i6li@p1 '+.%Y]]QA 'P(&O&#GB9;KY00gjk3@x\7! D7C!3s64-"   BBB 'H=. 6cVI,>^@    %,1  .BHJZ;'.767>7>7.'&67>7>76+0Hs6U`0 #(!7# 0*X%&=BC  #(,omVQ* & ^*P'#(8#_][]gf.   0^^@1?01'.'&67>7>7>7>7>7>72>7>7>7>7>7>   #[?,kv~@1SB.  .3  6"B!  :9  1+$+'#*+6?#$   6#H$$D$b_C{]7.B'K^>y>=z>985 (5=@@GGHHFA2 %.1c24d31c11^0B7!".WQ@L/01'.'.7>7>767467>7>76>7>7>7>7>7 $.0,K&(I(/g7GOV+)    -7!( "-Z0&Y/)-3# :669s<>z>HE#H9"7>z> %.6VKQP!  7<OM=u:2.$-=`m.''.'>7>7>76>7>7>6>7>7>7>7q &#bAHS]12E,HT^1'>,!)$a>>HW5($ + 5b" /OGC#$ "&)'8 (D7+!',5 I=/]0-+[U(SG0'AR('VG- 2@$;y{{>fc*_WD"9D-W,!Z]!D :z}~>'L% )$-a14h3C?HJII/].6+7(&Wu\P@A?01%.'.'.'&67>7>7>7.'.67>7>>75 ).0' " 2_516;! [0A!#BH+b\Q+8Iz7.7>7>76>7>7>7>7>i9B?C>: #'+&6;FN&*6 -' &3GI\^-Y-*$5"#$4db^/ 5HT*TX9/#->{>.' >&N'"H +7lN@ 3363??01%'.'.7>7>7.""#"&'.7>7>7>7262>?6\<%mj9p3)Sbi1v}/+'-Z'! *255i3'*4lO$ '17MTGB[] 6$ $=(* 2Bztq8}  %5V>%IFD!XRIN  +mI@/01%#.'.7>7>7>7>7>'.#7672 $/56j4-T2418A) aV!$3*S, 34    D#!'0' $j8KLNN=}|z:'/$   HHII4/" 'U' @ +?01%.'&'4&7>7>767;&%)  $(8 C"7(9C#@# A# '#G$djHG;s<6lqF@;/01'.7>7>33>7>7>7>7>7>7.##".7>7>70kPbV1$ $1*U,44    B#& #.55i4,S `3|wQ3(    GGII32"'0& -38Mk/@&/01#.'&54''.'.7>7>7 !(-%+T*  & 37>763323a $&#  )26Bk266 @ =@,0 '#  &2 @+01.76&7>-1"& /GS%#$+,[l?M%&'&67>7&#"&"'.'&67>7>7>72>7>'2T %09$@  )+$G&8 &*#1  (w?BP$Vam;4D&    8ZK@>w6+ ? $J#0\0*""B uqpk.fV;-I[,Y][X;>>pBB>{88{@l/C[ @5?01'.'&67>7>767>7>3>.#>>.> [t@w/:  *.0P$:HEBF1  %07&&)(S,+;  1sm^Y ",^--W&  '\`^R@As`L6#>,*_0)Q)8k89O $4>E$#B@<Z52m(  I(?/G0'5" @ +$8M mI @B?01'&'.'.'67>7>36.'&67>7>r*4*2+#.RH;6O  %;>7'  ,EBA9\E. &-j0wBRr$ 3)+! A!+,DP%VY!PJ8 %!'0  ?Z!*"=R/]mp7hN.T;BHM`e'G'.'&67>7>7>7>76>7>&'.'"'>7>'0>E6? 8!A5EQ,Cyh&$   %+.-&=4/#*XTLE\t:eE A.,e3HHLL @@> 'N@)2),p~#-+(?@?~>0@$Hj`@ ?01.'.7>7>7>7>7>'">7>6>7>76*hqu6:uus7": -s?D!NTU'[T* !'*S((S)*Q7q99n50#.46l55l6,"KHJG2K2H;42)E"EH~}>z>$/  $1" 2("  #1+! (/20]-@ !3-- Wc]">7>##"'.67>7>7>7>7>7>7>7>7>M$'6o963/' 55)'""#A! ?? "2+ $()+  */5 &-13b3&Q&%G# *  ##I$ Q*HJWW&/BO%12c2JIHH  )"  %9fk\@8 ) ??01'.'.>767>2/&3>7>7.7>7>7360~U'\`b.>eM4  0{7>7#"&''.67>7>7>7>7>7>7663267>7>7>7>7>7>? $,/# 5j5:'   )-/+ )." $* "'74  G!? (Q)    -8!+0  V`+3d35h50c11_1%J#%  -P_'VW  !!#B##D#?3+BP&(O()R*]p1%.'&67>7>7>7>76, %)  #EHK% #,5 )/!"(L&%  :9r:a¼a!C!1$#M&7n79q9>x<9qoO#'.'&67>7>33>?>7>767.'467>76 7>7>7>7>7>7>76>7>7U $-3$ . %    $+0,  #+   4) $7  QN!DFH%+ 9 B ]N$D6},"%+CC1+# 64:9)>Ta+6k69k9//9m9 >  H&(*&9w<3,  1<+ 4H$D#:qx7^@'.'&67>7>7>7>7>7>76>7>76&KX^+.^]Z*,%  04$ $1<"$,  "N((K NP$I$0.,E7,!  *[/+9m9:u;3b31`1;2#&6:;UUVV,X, >! 1L^i%.7>7>7>7".'&67>7'.5&6767>7>76>7>7) #/. -# x=?}?#E#!B#>C)QV7g52* +ޗff%XQA$6@BG#E##D#&O&Hn\Z@I?01%.'.''.7>7>7>7>7>7>76>7>7>78 &2=#/7"  /(%*/( !$-03!&" $  0 !1E1  $#>/>5&5IT#acKK1a18*)4(O((O)GGEE-X,+(  %R)BB{/Y/UU"XO7 &'Q+.cmlGlA@8(??01'".'&67>7>2>76.&7>7>M+h3u}?767>7>7>766.'&#&>7>&?Q]/hp+-7$1 !W2 #%\lr1Z8  4AA $:s65/'2\TJGf#MN:.*:F$qq"$:u98o78N1#1GRY<1d17  %, Do0]@9  ???01%/.'#.'&67>7>6>76.'&267.7>7> ")-   0l3=fN4 (,^.q}?;X=#%*Y " !%NH@0> ,*$  &,  +7P$ $* ?01%.'.'.''.'&67>7>7>7>7>7>7>366.&##>7> &-2,L=1#J#   ",# "+#% &.223!D (QLE +5> DN 3$9U A ?!<|<<\'#1FE# - @@> 2*"*-_10]03c23267>7>'&#"'.'&67>7>3'.'.#&>7>32&[,bff0I3/ %-'CR.e1*  -]0.]-,H4&$9IS,XU8f(! $.1 57 *X**B  %K&-\*%>2$ aI'>,)#*3>%#   -/-; /A&KQ+OF=3.#+3$ I)+   $19`H@?01&#&.>7>7>7>7&'.7>7>7>7>:$&G$:  1]- " +9$), 23% 2/!>0:<$H$ON,U*"B4 7 8wx-W-,X,C;+)7>7>76>7>7>7>(Y*epv;CmO. (7=G,Q( A!$C #CoX>&9 )4% *qd0_K/'Ie;:y{~>EB$+ #-[.NNNP$I Ei{5ed*R*8-'0@mGWE @A& ?+01".'.5&67>7>7>7>76>7>7>7:%9 B ;? DPa<&#   #  #,$   &B@A$L*),2&kd5f5om/pfQ E$MPQQUV(.' "+T*QQRO9vxw7>7>7>7>7>36>7>7>7667>7>7>m!^65sL*-1"   9t@&EHM-$.  # ( ,- 0\*:B;?D'(   >s-   ('#yfdaX' 'v~RO*YL7$4@ BG&G&&L&:t:7o8.# +=]Y'ONI! *NQ3a2#$)  .krt_X @??01%".'.'.547>7>7>7.'.67>7667>7>7M &/2%,  .Q($F&#'", (06?z>   !(- 8 F<9 !/ ar|96 o&%6@KK+\0-]-%!!4 !! ;96?|@#FF?@B## 7@?01'".67>7.67>7>76>7>7>=&I&Sz1#G" b? %* ')  IN(P*:%&F"%H&VdA'0a[&W^c1]a& $1^0MH[X.Z-/8gJ>7>7>76'.'.7>7>7.7>7>-jqs6@z?9n0%L'&K(&K%:#  4A NI Wdl2|}9s<7"'.7>3.67>7>'.'&76 #-2Gv(# 4CM) <- ;IL  cE HKI! 3"  (+/+!   ' Z-1d$"%$W0' "&/8 #,TNG  .#(4 AHN*G5) .<##  '*%#(,1-*1Q$*S3  )Q5.545>767>7>7>76$ !#    *]522"/#!' 8%H%#H#a.&L&!B !(-[-@~@>|>EC< '23d35_''.'.7>>76.'.7>7.7>7>7..7>76627>3667>W$*4#H!-H#  ' (,/'   $+&!~&!wo"&%Y4&.v &/&5q&A+&A@ HU&As&AK&A,r&AOr!&Ec&E@"U&E&E&I]&I@/U&In~&IV&N1!&Oq&O@3 \&O&O&OU$&UC $&U@$X&U$&U BQlI'.''"&'&67>767&'.7>7>7>7>767C".2A71 ) &(,$0`39% BKO"$ %>#'< %  !C0?( UUQS%L#"79t:!,&0.]/!B5 #M&1_1#9hr, @//01#"&'.7>7>326&'.#7>Tb<<>:S \<;>=U &)#  71%:>i)*24(*i;>q,-29-*l2) (,$-Vc'"&'.'>76&7>7>7.'.7>7>7>7>7>76>$+ +(#J& @NT' ' %!/  B]jB HNS*  #% 1F 4.%   "Da) !9.Z.5f5 "*)>0$ (O&$ %#!D"6Z<9INA!<2#,.* &M(D/)e57<($ ]`fc@=/ /??01.'&65>7>7"'.'.7>7>7>7>#"'&6>7>76}+iru7;vwu:$=+.%  CMM!T, NST&YR*!&*((*$USJ!M:"(*M*%KIHG.$1I;44,C"HK6k6/&*NM$-$0#3*.5,$0_00].A!#2 $V'.67>2U<:D8; +:GNQ(.C E79C=Zk1&MF:*+ !Q@he@[?01.'#".7467>7>7&''.7>7>7>7.'.67>7>7>3% >5H#0S&4AG!  'Q*)M A= 9*  !+6'@'(/]<% &XTV/].RNgg$ -)bc-Y-"9*$%N(~~@@BC?~?1_1*O)6,.C(6l69p9  H>IU^1V9:;    Dh@q?01'.7>7>7>76&'.#.67>7>7>7>'.#"'.'&67>7>7>7>7>7>7>7yV-,  ,5&%MD5  '"(' !-5"E '  &L));"-U'/  211  "3!-$1t{{7"F@9  %/7%(VvQ ,0' &5A' ;$!)3* <  E$,V,ssNL-1C,*\0/]0&L&6m70^00[/*V%4B&4=F$#A>;^33mA-Ul @&8?+01.'#".'.67>7>6>'.&>3>6&"#>7>>7>7>7>76.'32326~Nev?&)"CGB?ugS !Ph}DCGFzaF.'Hu24V= #C]7o.]\X)(E10&  3=B 7_*(I+O(>LX   &I&L.]/.\.!Dd.^WK:=!A  d!?x@:*?+01#&'.67>7>6>'.&3267>#.'7>7672#"&'.7>7>32FXi8qovI$8JauA?GFw\B*#%;N/1he`)X +3IBEDn"-3#B <*''$ J*0]-?g  2@J%&SUU)78j_R!CBGBRan;Fx56\B#%E_8m^R)F20C'La%A6*##o," )7  !,*; **(q>)LG?1%4Oq @f`/?01&7>7>7"&7>7'.547>7>7'#&767>7>7"#.5&67>3>7>72>32>7>72 !#  6:@$  &  A+&H#/W('*,  " ;  6k6*V+!( !7!  ,9!A!#IGB+ B "!' &N&TR ff  $5)CA#D#.\.    -9s<(Q&,$"#K'D"#&Ip@/01'.7>7>7>32;GS. =#$'*$SF.- *O&$#(-#"&'.7>7>2'.'.7>7>76 &06)  )7"&!-4,  2: " ."77!(>0$93 &@j@ Q@CN :@???+01".'&67>'"&&#"'.7>7>7>7>72>76'.'>7>36>7>76%7>532+6,_bc00aa`.6/% #*($J' B#&+) ?&*[.Ra,clt>!:B|>RP2 )no! 5j55j5!8# .9<PN&LB1  $JIJ$KK$ P,?k_T(<<=l7,!3*%" 0j6 /[.(")B@ECqk.bR: *8!( B!*;#* %5C%,S*!$7)3GC5xA99IW @=-5/?01'&''.7>7&>7>2>7.'>2>7>1S,#0d/s~CCg"- '.25 %Tb.px{:3[#'*-4  7]O@4) peus (JB84MD6`0Xcs8lT12*2  '1;88jb3T;*)" "/+FZaa)xy %:F I29\@ UUXX+//01'&''.>7&#.'.7>?>3623&'.'.7>7622726&&+#H!  .4:& =" HNP# $4B*  !G6 ',~s  2H!00-._-"%?*"6HO!-'+ KA+!&M& 3& .  &Yt@BB+/01'"32#'".67"&#.7>7>7.'.>7&67>7>76>7>7>7>=&I&0b-3!$06?=00-( )15,T+ '06" #;EF  7#$,1 !!')  /b31`/'8%&F"%H&3i7!1!++ *(2(*3%/$&'$.0$DGCD&  %0_0KG;q:6m62/8j@ Q@CN :@???+01".'&67>'"&&#"'.7>7>7>7>72>76'.'>7>36>7>76%7>532+6,_bc00aa`.6/% #*($J' B#&+) ?&*[.Ra,clt>!:B|>RP2 )no! 5j55j5!8# .9<PN&LB1  $JIJ$KK$ P,?k_T(<<=l7,!3*%" 0j6 /[.(")B@ECqk.bR: *8!( B!*;#* %5C%,S*!$7)3GC5xA}3:J[ @T-/?01'"&''.7>7&67>7>>7&#&>>73>7>c,g2w>?f +  (#d0&.k1w?R:'),+ %*-#GD=3D q  .!D@7@Ozg5\E&-*2  &1'.'.7>7.#.'&67>7676323667>7>76 6FO"'E,  /?H%&F@P[-[WDw&% &~H95G)'Bx3* ,6<LL30* *10c5!9L$$%B/.D*!C6 I}-QE8/)'.-ELr\L& &)B !+6 4-&$F % 9/ +l;'.'&67>7>'.7467>7>7 ,9>"> .< +7   ,254 (x> {>>D @ ._-2!  :> jh.fbX!9=)S@?01%.'.7>7>7'.'.7>7>76 #*/'  4B ADF% m&"/4:7>7.'.7>.7>7>7.'&7>7j4BI-E@(/01%#&'&67>7>2'&'.7>7>32'.'.7>7>76 0;@+ .:%1 *7?!- 6A #2 %:!4 <C !*r3$A ;(F6'#"7& G&!@ &!K 5&/w 8fl@ t a*8 ??+01&''.'&67>7>76>#"'&>7>36>7>76>.'2>7>,jru7;xxx;3J@@?_E+ 0+c1pux:&JA6LF+ !&)('(#SQH 6n95l3/"-45h33m5,$JHHG-" $ 6^PB6) ,OC96Q1G:35.#31,0/Ka4j{s^.P;" $%$ #.#2*# !0*! (/20].E!"3 $996*,EX__)9m8:0+AN#U8fl@ t a*8 ??+01&''.'&67>7>76>#"'&>7>36>7>76>.'2>7>,jru7;xxx;3J@@?_E+ 0+c1ovx:&JA6LF+ !&)('(#SQH 6n95l3/"-45h33m5,$JHHG-" $ 6^PB6) ,OC96Q1G:35.#31,0/Ka4j{s^.P;" $%$ #.#2*# !0*! (/20].E!"3 $996*,EX__)9m8:0+AN#Uo6+@++01'.'.7>732 ")-VT&ELN!6!K;$0&) 2tG-"@  +/+01&'.7>7262?#,/&S(^[.V*/ HOO#;x:#$  !+&) 1Qs;#.'.67>'.'.>7>7< '* $*,  &+"   $), $ .:@"FGI& /:>>@BU#  0:A BDG$ /9<!ACEs9.7>7>7>7>72%.67>7>76ymF(,.% # G "'+" mG&),# X106;## TF(# $  03b3,'(2@WJ'"&1B|;;5* (3<r @//01#.'.7>3&+"  #),% /<@AI .9?>0ho @/?01.67>7>72\kE(*.! "*./5:# SG(#(1!?>=;6))3%4I@**((+/01'.67>6&'.'.7>7232232'.67>6 )"M&(2 0;B 2*(,!  EOP!30[-+. 0 L#(. /7&67>7.767>76>6>3>'.&73>7>7?GJ# ]=  "$&8/(B>=n*&MNO(;EJ!B,&)%!2"`ZJq* CDE"  M1*aYE "@-*S,) m$;635s7>7$,5N=4 5=A!CEE#() / #G#!( /BL# #":41.'>,"B1+59% @ //01.7>7>7.'.7>75>C DEF"(( -!#G$$ %+6O>4 ";50-'@,!C1+:' .AM" "A`ll'.#6#"'"&'&67>7>7"&'".7>7>7"#".7>7>7>7>7636R"-4? "J7 (166 ( %'+*  0' BLN!6% BLP! ) '/&<  '!C1?(    8+)WW%L#"7DE&L&%/(-)",&1  5h34-"#M&1a0$8m< @+01'.67>6 / $%%'1 17>7-7? %&(Y059=!$$C?:$>q55-0;;%.7>7>7>7>72%".67>7>76mE),.% ! E "'+"lG&*," #+/15<## WTE)$ $  12a3,''2@UI("&0!@>=;6* )3,Uq&'&67>6'"&'&67>7>76'".7>7>767>76'.67>2>.&3>7>>7/#"3>>7>.#&367>H52~<9bOmC>UhQmC<[ I42{}c9831r9:o00=3a}$.VRQ([\՛#I&&1%D!MK "0>v1(6`z=-YPD.)3s "'   .!   0  #(    .) qW&!Z&%-&!R &%&%@ T&)"TW&)yV&).T&)@ {&/? {\&/{&/@&5? Z&5&5@ U,@"/01#&'.''.67>7>72!%#$> !"$  #-28:<+   ,!A!#B#  (62/,&#,-k: 2@/01"'.'&.'.7>7>36267>7>3 'BA8 5 #   )0.b-* /)  ,/P$ 0' *,$  G.#P,'"&'.7>7>6&'.#7>T66v73KQ64v83M &)#  71$:6a#$..%$_28e&(-/(&`,* (,$-Q,@/01.'.67>76>7>V17:=+  #) 3 "#$:k-,$&-036(   #D#!A!   &V&3Q&Si%I @B+//+01'.5>7>7>7>7>7>7.67>7>7>7>?>2 &16      '6F+  &R '08 (:G)  *Sl*#$I&'&   !PF1!-5uJ9/ %*&O($%  ,!K>&$-o5&9 M&Y <X@)/01&'.6?>7>767>72>76&'&'">7>7>767>72>76&'&'">7>732232Y $+/|y2 HOO",-Y,%$%/&*(7 ? @2//01.''"&'.7>7.7>7>7#G$ "*( 0:# -5:  ")-&  89<($R& 3.&'-/ "2,((,1%2+%>i@:SS??01'&'.'.'"36'&#3236&267>7>76&'.7&#"'".7>7>7&".547>7>7>*3(6 +!!=92 $M8(38(O' "N9#))N)<>.1  8@D!CBO #' 1<@  $ >^>??C?v??@@@A4AAB8BCCCCCCCDDDD*D6DBDNDZDfDEEMEEEEEF(F4F@FGZGGH8 8 B>M/Q p5   | ,K ^w ( Copyright (c) Iconian Fonts/ShyFonts Type Foundry, 2000.Action ManBold ItalicIconianFonts/ShyFontsTypeFoundry: Action Man Bold Italic: 2000Action Man Bold Italicver 1.0; 2000. Freeware for non-commercial use.ActionMan-BoldItalicAction Man Bold Italic is a trademark of the Iconian Fonts/ShyFonts Type Foundry.Copyright (c) Iconian Fonts/ShyFonts Type Foundry, 2000.Action ManBold ItalicIconianFonts/ShyFontsTypeFoundry: Action Man Bold Italic: 2000Action Man Bold Italicver 1.0; 2000. Freeware for non-commercial use.ActionMan-BoldItalicAction Man Bold Italic is a trademark of the Iconian Fonts/ShyFonts Type Foundry.{  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcefghijklmnpqrstuvwxyz{|}~euro++pyglet-1.1.4/tests/font/action_man.ttf0000600013464101346420000014040011266427716016160 0ustar yohyohLTSH~[OS/2uXVcmap=Dcvt  fpgmgasp glyfThdmxcT( head@|6hhea b$hmtxt$kern&{#xlocarQmaxp;L namelpost8prepuV 3&3#SHYF@ !"I<  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  ~Sax  " & 0 : !" !R`x   & 0 9 !"E_)myjd }~_`abcdfegihjlkmnpoqrsutvxwzy{|}8G,K PXY _^-, EiD`-,*!-, F%FRX#Y Id F had%F hadRX#eY/ SXi TX!@Yi TX!@eYY:-, F%FRX#Y F jad%F jadRX#Y/-,K &PXQXD@DY!! EPXD!YY-, EiD` E}iD`-,*-A A!5.65>767>7>7>'.74>6 2#0'  $( %,*&. /fd,a]S$-1>x>DA"B!-S)* *26&+4% -98M = @6//01.6'765>7>76.67>7>?      %"  " 86--9>'#B#&*-[&96/>LP#DB:&+1_s{@/01#"&##".67&'.545&'.'>3>7&'.'.7>7>76>7>2>7#6%+-+   ) ,V- 65!)5:0  *26%  +T*  1*/V&*M*  5%#28.  &0% *P* ! 4-  /,&  * "*R)I @R@0/+01#"#.'"#.'4547>7>76&5.'.?>3>76.'.'.7>7>7>7>763 0.0 2%J% !),`3 >$   /YN@  EL'!!+7n7(  ,02i5  #*  7   )+  %,'" ) 54:  &G$&N&.A)   /.$#''  3e30* %7: !E\q @A,//01'&'.67>7>76#.7>7>7>7>7.7>7>76>'.7>>.'"7>'If>6]!^395, $`kq4gd     #.a0IL $ *# c7=X4 &*w;4W` ,%  + 0 $ 6rZ46//333`,/:1qXPӛ$$"9KJxw$6g,/@ 0Um3:u01%0-*`0#06)#,55/ .4+#) IXt @,g+?01.'.7>7.'.7>7>72.'.>.'.#"7267> 3 #8<=2[TJ1#&?P*2 '36B)UPG +0_3# $Q(-V-!%  3c0.&(-l9* ~}=:5'7!!MTZ0/UH7@%$&'!?81,*&  #  (R !"- '3,$Y?R @ //01#".'.7>763#   F!IF= 6X*CB: !%&Mj 3@(+01%.'.'.7>7>7> '1/,Rx%(# :.:EQ/&[0$  $`]1 !%rB; $  2YTalf2c]R"#%- *^QHCf&  45@+01'.'.5&>7>7>76.'.'>76, /;!I\oE#  3VG:16 *YN $*VL97>7.'.5>723>7>7>7>7 6h5,S-  "&"$ 3  $0>2'2 6 $* -,+,A <   7%  ;$)%$-/ 404- "*R* ,ZhD@/01"#.65&#&#"#"/5.5>767>7>232,U,%"' "1G!  &%%&$!  N$  7DI #  %J%!(,X,3mb! @ //01%&#"'.5>7>7^"!%6%-51.#+7e00*XM !'&'.7>73223262Myy! 5=@.$@:)  % %gj @?01%'.7>36h&4 - &/+=/#.:,! ,*Kf&@ /01.7>7>7>7>7>7>K!m")1!)<!I 8t@$   =!<D@?93"#8h2:n:FFgb@   I<@ &5.+?+01'.'.767>726&'.>7> <7KZe68\I8( d>O_9Y_;+:%(<+ #$:,#@6* #~h]-S?#+EY-]i.`O3Bn,KH&E5-BK!NP"OPK<(,:@D2 @,+?01&'&67>7>7>.'.7>7 5    '$<.UTUU+*)$*\-LKON::8 "1(&6B"OHV%'.7>7>7>76."#.7>7>>7>76HNQ&Z[& E*9l9+$#8f3 6.?K%PT,# %3`3)"6j53e3  ' (2K@RR"HKM)'(7'(/*E7+# */d3$GDAGG @DF%    Hl @h&]?+01'.'.7&67263>7>7>76.".'.5>7>7>7454.'.'.567>7>726&;M+*ahm6.  =>t3-$TM, "0_0*@ 30/%F'"  /6:>@A!1W! )"*?hD+8j`W$%=*!60(-49%( &" 8 Z5  1  1*% * S0#B?;2XrY=n'.'&67>7>7>'.'.'.5>7>7>767373>7>7>  #"  >3mg^%(4#!('6$E"#F$  "$   ,Y+ A ? .("H$0-& )&/9r67p30-%  &6c2679 \[&M'#",9m90]/0 9Fe@C?01'.'.5&67>367>7>76.#'.'.7>7>7>7>32&&>62I[00kty=+ 6:>`,)# 9a-/Z.3*   .py|:3+  ,X,)X& Weq9EnGq?ui]()H23* T0159 #;!&G&(;?{?7>7>72>36."7> SB KT[0+MB8,. B').8$5  6!>INR(@t##+,S$%C+58mP* ^H%?.-="@Roj3if`, 5g3BH'.50wO8, <' H#, )Th I?#.7>767>7"&'.#"#'.7>7>)HM   #'+ (B@"$'-])# ,(0DR(WX#OC.3_1Ÿ>53'27>7.7>7>26.#767>6.#"37>)E\2*K6 O9:NF128($&]5,U? V<;QH},/<+&D(#1&A%9&3#C'7>:$6bQ<6IX2K56D31/H1`&)? 3FY5P97>7>7'"&'.7>7>32'6.&767>7>%-/:M7$ "'*3Q.0e3?u#$/Kg?*`0+OF:/''2;jQ1%.U&%?w?|zy;2qjY'+RQP(:x?,A120y72'.7>6w 2- &%' )(/,!40/)"*:  "2<'  'H{o2@/01'.'.7>/.5>7>76!-8!/* P" %  2#(0 -#45* /6530# /2Z+0)Rp2@$/01.'.'.'.'.'.'>7>7>7%'%#*M&/ &*.\0124*RTNP- .   (!8. 3n5)P% /g#H@/01'&.7>7232367672&'.'&>7>2327>6e!5?D)   90"& $sp   -H!*+-   >4C  $ ( " '?, @! //01.'>7>7.'.67>7&*0Z0336) TSNN "?k67>7>74.#"".7>7>#.'.7&>6;P`fe.$$%(O'"$:s60%*0BC/($7?3f0+ 1  &9E$KQ?x./$X4#A/; @08ZK>82  1 %10(!#D  (");,*I>2)$(*vK7<#5&%8Pt@ V^EmLf+?+01#&'.7>7>323.'.'.7>6>7>76.&76#".'.7>6.'#">"2! Q\a0OI!F7"'43$0-;7/#(_[JpR.#IT\/& '7>7>7>76.'233>( 05e3/[) + "&8 C!'2C.*K-  #? .?(!$4. l% 8$J$  H# %1<;r7>~ %D('Q*6::pnl6-p:<{?   $mL4Nk'.7>7>7>5>7>766&'.'>7>6&'.'767>e;Ug3<~A<|==D   Wnx4>v50$%L* ",6!C6Q64q*   16., #*>&D 9AH$,"/(/6=} 2IF@ 1A9+?+01'.'.'.#&7267>7>76.'.7>7>20%#3  3#-OA4.7( tA&H"0  C/(h6>qeW"GJ YD P_m=T36B,!D!,&7>7>7>7>7>7>7>766&'.'#"#2>7>a)E\63{L'@-  *R*0[/GlU7(.11)( 4]RJ "=1!CM99dG "7F&026(O'(N(8sro6  #Fcv0d(-pxz9^['?N&(X]cFY@ 5B8B,J+?+01'.'.'.>7>7>766'.267>22>7>76 BUQV<   5/BDLL,  vy9q99q91%$07NN&B2%IFE"BLj+?N!2; 7qqr8RI #0  (T*  !.! *;H'6b3!$<'AW@3?01'.'.'.7>7>7>7>7>3'.#">7>2%*??643  5!  7! %.a05h3@3.7V(!A!  "0]/._-/'    !B"&O()S&,6!FHI$NPsp1"  %6%) -i5%  Kc@0@ ?+01'.'.7>7>6.'.'&7>7>76&'&'.767>7>76{\B KV^3?mZH:= ZE O\h9]H   #>>#,WPG;9 /=I(95,'*%J#'M&&  5v:7>7>7>7>7626>7654&547>  $ 5#D##E!  ' 2  !@ TT  .!  40'  "9;:*S(MN7#($:#F$JIKK671-% D& &H%&J&   ---Z,,-.)"1;;|?4p=w;8o H^%'.'.5>32763276&7>7>7>'".7>7>273?2636 ;4(      3<6% 1 1fec- 8f.LW@/01'#"#".'.'.54>3>767654'.'#.7>6, " .$%g66YI;0F -""#-&" 4+"hd!2   x{:wup3,)+CS([d  $/7>7>7>7>76>7>  (" +BB  J# "'KL#U((,!-Y-#B!,X, }  $J$eeYY.<* #%&K&0624-[-,X,CA7*T+'CB =&(# ;B-751A?359 97@'+01%'.'.7>7>76>7>76 GLKL&>0" 2+  @?3`3-G &3"4B!DJno6qh\! #>z>2a32c3.b_Y% 5( "g?@h?01%'.'.'&676547.'&'.'.''.'.'.7>7>76>7>7c:-  6UG<   4N  #'<  ':.0'   3e3.4?* :/$   a-dg)U+  ??K7 9-7x<>{;EHH" @ 0./'+#"E#^aUT6n`L*5n6$E#"XX JE7 %2:{=  >@@ +?{>:t"K4Y@ VE2'++/01%.'.'.'.'.7>7>7>76>7>'&67>3 -7O7>66&'.#&>7>) ABN`r?=fR<- E@Q_j64bTD0#,'G=0$& +!0K:, 2ym5hQ1.Mb3hsk[.P:5J-W 1_-(0?"GL@>;3%.FT&Y"I:N @5%E+?01'.7>7>7>5&676547>7>7>324'.'&>7> 6I)Ye%:  H#/X.P536)"-bR6 ">u60(0[RE;>&$F$!B#6#)&G&BBIJEF#A699,A7-5Q4|u* $+3K3^@!DD+/?01%#.''".'.56&7>7>36>'.'2>7.'.'4>>, A/*3:1RC6,/ ?9GXh<7[F2 .#:  )!-A0##) 67$%  5Y,-1[#/#"8H&M[+sh2bN1*G[/aj3ge`*.Q(,sEEA9)6JS$Y],jaH !2: ;.1n!QFLf @R4?01%.'.'.''.'.7&67>76&'&67>7>66.&267>I#;0('KU  2$1   +aaBm#&*$/5HG>60( %=x< C# @ *Q)+62IIMM1a1.]04+ ?31{B"?:43J 0j:16<#)+#! ??=.!(1 5Je @M9?01'.'.?>746.'.'.7>7>2#"'.'.#&7267>6 ,AQ+Wd7>7>'&'.'.5>7>76})05k5   )$3% + HH mmRQ&# mmmmIE6  ./Y-]]pm  # & 8X @1<+?01'.'.7>7>?'6&'.7>767>767>7> ('ARb9-SH<,$   (2('    3@) "#+"#H$$##H##$ea:iP/,=%HX>w>=y> ..&BQX&CBED,V*' =V`' &N%+ #%"3O @J2+/01'.'.'.'.'&'&5>7>7>7>7>7>7"(4<$,8D'#    .(&' " 1. #&5321c2HHEB @4+{?  .AHpp:*!;@CMN8m6/,"(4:t @,BB)+01&'.'#.'.6'>7>7>76>7>7>2>7>7>7>?>  '&+9G-6V&*=T:#>2% "-A2  /  2=+" /1     +8 F:0`1-*UP&NC.8)-e2-j[<+9(UVW*#A#UT5l\D06+S* ]^2b.9E <2IT"2c2[R$NQQ)YX+T*& /DP&8V @G/?01%.'.'.7465>7>7.'.'>7>>7>7 !$3("$A"!D &0!! ,:@1A ! !'>!%( =Q\+!W*?r &5=GHEF=6'#  6f`^/$G&NL;=?!  "H$1f1:n80.' #,I}wz5H.7>7.'.7>763>7>7> '-]*,N& 2!$190M9&  ' %#3)"!#' !)#B?>EI[]*O)&"-98lie2(BS*TX-$#*>z>/&8BG"GEB #,IJ @2/??01%'.'.'>7>767.""#&'.7>?26>7>76_d6l5&X/dl#N&+($D$&HVZ(R)-eU7C(:x@6j*fc ,#. ')#!SL*  */ -I6MCYUKS$ LG%'.'.7>7>7>7>7>'&7>72"MN !  ]Y$. !_g  *P*!$  [.LKNN76 * ^B   -U#.% C $3; C >  > dhGG:p9556 II@G!+01'.5&>7>35>7>7>7>7>76&7&.7>7>',]X&, 1e2  PT  !NL  zu  ;&  $GGII302 $  &,/KLN-@$/01#".'.'#"#.'&'>7>73 5$F$  ! "((,5"&6(   $ NKKM  $%HEC!B?5 3AH #FHK%%.7>76336332 + PZ^)979?-!0)&) @//01.'.7>7 '3!'%+  +=H  #2DJ {'I=O@.?01%.'6&''&".'.5>7>7>72.'.'32#+! 101*V, 0 7" F-4CU7/G3!      ;DQPQ*# (4e2-X-($4qojh+bT;+BR'Y]ZX99;PNN$JGB9JNNMI/Ha @5?01'.'.7>7>767>7>36.">6.67>F;Ui7ps-8  'q<?4) #-4F !0].-D6~tY3 !5!3_-+TLH#A1=kYE0!;%&R*(Q&9l95? !-8> $GC?X42l'%L0++%8T#=0!8+!@ @.+?+01'"&'.'.&67>7>36.'.7>7> $6 @(.H8*#,&3j1(5  &055o<5_O?.  OETer?M}-0>&, B !**AN$TX*R);. %$0' (!;N-Xe{k4cM-L96B*O @.++01'.'.7>7>76547>7>7>7>6&5.'.#&#">7>oZ,n}F/B ?#=zq/-9 (f3    -[RG:6q8`C ?&*V.HHLL @ A!.')ky $41, )Y[\,>v>:t7.C(N,H_ @ Q+/01.'.'.7>767>7>#&'&>7>6>7>76,Q\`-0adf481!/8<g[&"D!/\,*G :q:7r:'!/6KJ&@- G@!CEF$(E+A5..':CE}|yy' % B-%    %'  /?J&9p8@#!$$ =`2>2#&'.7>7>7>7>7>7>7>7>7>7>7> 8k62,$ ;>;$F$)VVR$ "#+   G(+R,$J#$E#+ '&P(E#._05f53,)9B/4d3;=*O)(L(*:   / *I_ @8 0++01'.'.7>7>.#&367>7>7>''.?>7>3& O9CLT+;hYG2# ^Z*mz@5*  5mf["HA  0E02^! ) 55!  '&MNO(3I 6k6UE#>-!=S0^mg5S6 ( ,E.]o&**TL:#2()^35/   "  D0+ >e!@B_H' e++++01%.'&67>'#"&''.546767>'>7>767267>76545&67> 6% 7>7>76q +$!   !!  GA3 $.7n9aa__;7.37>7>5>76'.'.'.54676+ #E# g9?hVD58 !  !+3   !D!(  effg8i33:.K`2fx '^07>5>7>76>7>7!&(U*&,4    ,7  -*#, (IDB!6:?%( (TBD (_U>{%)EB2*==986  :(6l7.^.0^10,3qmd'3>()6:@C 62$'0    :N,N(8ns9='.'.5.5>7>7>7>7>7667>7>76 4CL#NR*M  $,0 6g3;9( .)?2'#* %%$N(+9n9:s;3b31_1.(*COUTVV5i2  %(;v@ 2))@tt ++01%.'&67>74&'.'.'.'&.'&'.767>7>7>76>7>7>7>3 ' !N,$(3$ (  !"-F+#B&  -=& )%  ":QQQNmj*[WO "KLLH_a#B#"D!! %NT9:#$1g3TS#@"% 3GTXX'#D##D#(O(G";c@ ^CFCaC'*+++01%.'.'.''.'>7>7>7>7>76>74&7&67>7>&!1' 3N!6 +:  $#  4 H5  2, "07]T?z?9p96k6-X,0'C,&O&*Q)GGEE#PLD #G&NKL? 5g5ST B %!EH.1mmE NK<@ '6/ ++?+01'".'.7>7>2>.'&>C SG"Vdp<8aN<-# SF!Vep;9`N;*) -E1'G>3&%/K6@^C,tb1XB%*FX/_muc1YB%+FZ.a3&WVP?&.=!EK+bb\H/4SiqpH/L @ +01'.7>7>7>'>7>726.'.#>7>&;I%Ve ) .  @U_*)TQKB+  #L(% !><:4,2XOECcTT,  0;qq":s:7o81A'0BMR"  -467>26&'.'&767.7>7> 1##e7:iXF2 8;Paq<6]K7& @@z.!*OD4 &3! 9#'  P%2,9 y:5+(-1/$$DGI$?HVp@ :WC$++/?01%.'.'.'#.567>7>7>7>7>7>726.#267>:<%E?81[.$(.  -4  4:= B %LJF>)'39N'D M2"?(/546  E>2&## )9t;*% @ @  $  3>56'."'.'.7>7>'.'.#"3>7>72 J>KSZ-C96, .*&U,5jV5&-W,,V-(G;*  !1=#EP3d*,@# :: 0]&*8 &F#&S)Bm ![G#9)# $-7"    !D`:66% ->%DK(IA6.,J6  "V05   D73{A?H@/01&#&".7467>?>76&'#.7>7>7>7>7>A+8#K!  '/ ! 446- >#A#LL*P*;4($  @ wx,X,50&)=H'O&$G$9TQ &   ( ;E@ ,&1+++01#.'.7>7>763>7>'.74> C6DTb9?q]E#  8    R*KjD!  #k_.[I.%Fa8oxBA)W*NLNN*Q%$Is;gd(M(*$!(?1F @B'/+01.'.'.'.'.'.7>76>7>7>7#B$+>/ D     !  !" : %% 3d15d5om,c\L  MPPQCC$G&!&"@"[[]X&QRT*pp>9. (/+0m@ <,?#_+++/01".'&'.5>7>76&5&7>76>7>7>7>72674747>)%>5 !5N#I( 6"BG   ,C  ( F&"%+  #   , % tcb_W !+YVHg/*"_{:&G&&M&:q:qo!6*9XXXY-b1TQ#IGC&MP-Y-,S(m$" -fjn 8Y@G?01%&'.'.'.>7>7>7.'.7>76>7>7>7= . $O#9V(& + &I&2 E  4 03J"    ) CU^*&@ 9o#&#6XX?I#C# +441-,0b1)P+FH=?A" /HH2t>6 $-Dzpl6>~B7.'.7>36>7>7>*27>7>76'.'.'>7>7.#"#".7>7>PINP%+^ZO,,+.a.%*!  )EI 9HO$,\\Z*  #G$QO&KY_+ab91*767&'.7>732323263.'.7>7>'.'&76Y4#  +? ;.-?1":-$#)  J&#+.1 W%=  *2: 1Z*[B""(K*(Z0Bx110 .$5-)&%(-.0O((*/ 2@/01.'.767>7>7>7>76{ $$  $%F&#H$"5onh,$)&P(ab#D#%J$  $.-Z-m}tl+&#"#"#'.'.7>7632>'.'.'>7.?>7>7..7>766(8?  *?70.~?/ #:- $"(  J&#*.1 2&;t/+'K+#D#3*!)J*(X0By03- 0 %5-(%&),..S((+- $>  *3:1\*.O !~ 0 @!//01.'.'#.'.'>7>32>7>  !>E 857>7>7262!*O)  ,$$  $F$  6CH  !  $<1 ?8UURRD<+#40b1!$'7l7:5) =:q: +.P,'"&'.7>7>6&'.#7>:,-i73W 6**j75Y#$+"$3(:6a#$..%$_28e&(-/(&`,* (,$-^ss\m'.'.'>7>3&'&76&5.'.7>7>3>7>76%7>7o%,  ',  0@G!" $Gr*(-A.9BI'"5W *]&;#0 a 9"#>{>#D#"D!   &7) ))FB8'87#C#S96GL?;.;%" "!  <*&`BK('R-#:-}2e2Cp @ `+/01.'.'.7>7&#"#"'&'.'>327>7>7>7>6&'&2&'>7>76QZ_,1cfh69  ! 9C"#  !2;?hW&!C!-[-*G $G$ ,T,  HB!CDF%&!*@5/0*:EH?|?$! )?}?% %  @- B" 9n9:r7C#!l'.7>j*&18>1?!*H_6'F7>7>5.'.7>7>7>3`  &I& ,4 -^-  "> bM$:% QB?N/Y/RQij3$  jjCB,V,-   1J$EDGG@}?1c1'N(*" :6l69n9'A9EQ[/N384  gDH@ >pLZ++?01.7&>7>7>76&'.#.7>7>7>56.&'.'.7>7>7>7>7>7>72=JuL(" $"(L<'>''&"# K,'G% "B   $1<#&+7-[-qrML-(#<&$S)/].&I&7o90^`]/&M!0;!  .8> $FB>Y32n !)C@ "Ly*TD++++01&'#.7>7>2%6.#&#"#267>6&'.#&>7>76&5467>7>76>.'.'362Mc91$B@CRkG *CX42t~EB}n\"G4:%**  5h.-= +>O\2mQ)F4 -J5  +/06<:70&,c9(*1ZF-l(6$) @DB{m\$ $'MnRE|q01Q9#?Y6jY  /.--ZcV+I5^M%X`h6:tgS$I$%M&0\0.[/& /6;40+(D 68EWe90/2W!A{@ *:l22+++01#&'.7>7>66&'.&3267>#"&'7>7>72&'.7>7>3F&?D>LZg8C}s24X=!$B[6hcV+J51E*Rh(G>1&'$&3=D-D(&  +%&#f6%FA:." %O`@)x&xjx+/01"&'.'6547>56&'.'.'.'".'467>7>72>7>7"&7&67>7>'.7&65>7>7>7   0        ', "(%.&6"  ) #F# 5h5(Q+$' &O('N&je-,'&J&&N$1c1##!  ,A2fed1  T[8o7.+& .=D"!)#Flm#!! @"#D#6m6   @//01#.5&67>7 *:'  $4&!  H?*  JC2$#*@&/01#.7>7>3'"&'.7>7>72$! !'  & #  !"*+,5$,' /6Hz@ ZcWcNAAK9 /?++01".'.7>7"'"&#&".5&67>7>7>72>6'.'67>32>7>76%>7>.'#MRS)TX,*& 212*T+#  !2/k=CN]9:HH." su9o98o73&$17LL'D3 %IFF"BK @Z%#7Oj).'"!:  A *P*,V,(# ?~>@@mg,`S:  !/  &U*  -8! +7.7>7>>7.'&6>532>7>j * C?Nbr?Hw,   (;K!( ABRblnh,5#()'G<0#'aŭig)1L:+"/D100Xdzo6hR1B1&   :,=n8jum]0P9(P# # 0@"HM,T+2w ә-GT'[` Ae@4/01#&''".'&67&'"'&'.7>327>7>326'.'.'4>7627232726  ,T,( '$ ,yv  (;-/8&" 'Q !2F" #"! &I$!*,V, -& %1y6'&#63632#''"&'&67.'.'>7>7.'".5>7.'.7>36>7>7>*2-R#<2"'K&   ?5"%2c2&&-   07"'"&#&".5&67>7>7>72>6'.'67>32>7>76%>7>.'#MRS)TX,*& 212*T+#  !2/k=CN]9:HH." su9o98o73&$17LL'D3 %IFF"BK @Z%#7Oj).'"!:  A *P*,V,(# ?~>@@mg,`S:  !/  &U*  -8! +U/L+/++01'&''.'>7.7>7>>7.'&66&'7>ZSE"Veq0$'   :,;k7]hve2YB$'S" #7c1g9 -="GK1a1<3e3 "6TkqqX Kf @Y?+01'.7>7>3'.'.7>7>7.'.'.5>73>3>363267>7>76D/:?03#@ V(8F$KQ?w-.&*3ZX L$&O($$76'.545>7>7$- / $.*p   #) 3#0'& ,8* *3]>x>!CBA!+U)*  ,3dc+c^T$-1m ~'Q@/01%.'.'>7>72'.'.'>7>72W2+## ),&*0-[.*N*  :o7&O* .'$$  )-,06  o- */58;!842,'  )3f4;u; S >~?5k3+  "*.137!:742.$  (N@E/01.7467>7.'&54>"&5467>7.'.5>7 (--/5   9o8(Q( .(#%q (-(+0-\-)O(  .+"$!:632/%   >~?6i6#1  #+0/37852,&0%2d37>'".7>7>36'.'.7>7>36&.$  &0 !+- *", $/$-! r'/.0:)&00"5>#)1) #5<j# &!@j# &!H /&/t Hi@r%% /?+01"&'.''.'.7>7>76>3&'">7>6>766&'.&2>7>S]`+2deg66>EI%3/0," 2/ .J^2fuk[-K8"480( # A,&    #'   0AL&:p7DF:%%1^/&0>!FL?|<;3#,DQ%[Hi@r%% /?+01"&'.''.'.7>7>76>3&'">7>6>766&'.&2>7>S]`+2deg66>EI%3/0," 2/ .J^2fuk[-K8"480( # A,&    #'   0AL&:p7DF:%%1^/&0>!FL?|<;3#,DQ%[Y @/01#.'.7>73UU 3:>79A9'  % $XA !@+/+//01%"&'.7>76232A#7>@vv;9:<B<-   % $4O<.'.'.5>323'.'.'5>7/# $  %   '     !  %05   (058s< 6 &069u>*  '15;v= O6.7&67>7>7%#".7>7>72;+ "  #0  :' ,!)LB%! 7-&  # &#%069u<    (16ouTO @ //01#.5>7>7# !( !*&JHE"&!$6#"'"&'.5>7322367'.7>6U7!-&/+ 2=@2$@8&6 + (2- A6.:,!+J ! &8.9,,&Y?&9?Zu @n/+01"&'.'#"&''.5>7.7>7.'.'67>76>36>7>6&'.&7>7> =861*&%=9>@?x3!?#F%% +8> #4+  "71'W[]-H19>  *152hV6Y12e1'm 56x?J816=%&2# 2"&?741t>A965! )& 80+6k,! =Z80Z$$& "+1Y& @//01".'.'.5>7>7#*'$&D&  #-0037+ +R+ ?  .  E 4/+*$+&(M(6 +l(@ /01.'>7>7.'.7>76l#,0249& ,Q* ?  *&$'E$ 4/,*$+&&Q&7 +   E PfIg@U$-+/?01'.#62'"#"&'.'&67&#"'.7>327>7#".7>7>7>7262!*M*?6" &!A!  -%%   !!!"!  7D$% $##$ 7CG !!  #;1?81)" `_D<++rs#$"%L% $'7l7:4) =:q: +^y @+01'.7>6'4- '/,;0#.:,!!,8mg! @ //01%&#"'.5>7>7c" %6%-51.#+7e00*E5%.?>7>72%#.7>7>769+ "  #0  :&  .!*WLB%!2'&'.67>7>76'.5>7>767>76'.7>7>72654.&7>>'.7>654.'"7>'! ^571*)He>3] )Hf=5\ % a562*:)htx8d]  !  *a*@(*%#-26>[9 &5;=3-#  *-& -& + 2 '  I3a+,;1p96oW31-*d6pW45.0343`+-51s,\Tכ"$"<LK-  #6l-% 2Vm69u0! &,g"+4."/5."07)"+42"24*#*j# 3&!6&%j# &!O &%&%@ &) 3&)y &). &)@ /&/< /8&/ /&/@ &5< 6&5 &5@ 1(@/01#&'.''.5>7>7'*$J $!%(-+$$ 6k46k9 0-*(! '*]3 1@/01"&'.#&.'.74>7>363267>7>!8q<( *;  $$N''*1$  0P2 ,   $   4.P,'"&'.7>7>6&'.#7>:,-i73W 6**j75Y#$+"$3(:6a#$..%$_28e&(-/(&`,* (,$-.' @//01.'.7>7>7>21!#*/*%   6> !4]('!")*-1  9m65h6 53&3 .&S#H@)/01#.67>7>7>'465>7>.'.7>7676&5>'4>6y$#  , Q$  /! m /=D((   <&1"&uK,'1F!$(%   =4""o&9 &Y eDa@./01#"&'.7465>76&767>72>726&'.#"267>#8H*Yd    (  +X-$I!76&767>72>726&'.#"267>#8H*Yd    (  +X-$I!73223262Uyy! 5=@.$@:)  % %G@/01.'.''.'./>7.'.7>76>7> $F&"> +(!   %-1,1 701$R >=   #/,%   2-)(/+ &K%.$,e G*@mmj;T##j jwwj?+///+/01'.'.'.#"66'&#262'"'>7>7>76.'.'.7>?>7&#".7>7>7> #5 D&-I:,D9$"(0_0 'B8$"(&L& ( 4j1*4  '165o:T]86  )59'  /;? W>FNS*'F?6.)&*C #&)@N%-%$F$*$:1# !/'!(BqJ#4"#RB 5%%16_<\z\{i,I*AhI.j,{Z3g*"Yq[HRlj{=}e<T&f$~DCZ 3$  \+{y$=t?I$qW}+0h+?":ZURl}.jj&1{{{{{{DDDDOPiT^{Z\mo+`}lXcmjjaKMYKP8Ej&j&&.+Ke *    ~AAcCEFGHJMNOQS!K"#'*,-./137 w   m Hq  D  `f!#!'!/!1!40!5!6N!7!9!P!U!V`!W!Yq!!B!C!D!E!O!Q!TN"!"9" c"""4"5"6"7"Y"R"#!# ##R#U#Y#Z$!$6$7$0$8$ $$9$A$E$H$I$O$R$U$% %%%6%7%9%B%C%D%E%F%G%H%I%J%K%L%M%N%O%P%Q%R%U%V%W%X%Y%Z&!&A& ~&&' Y''''A'E'H'I'N'O'R'U'Y'( (((A(E(I(O(U(Y))B)C)D)E)F)G)I)J)M)N)L)K)O)P)R)S)T)U)W)V)Y)Z*!w*Aj*E*O*U* R*Y***I*+/+E+O+Y++#+'+1+U+V+W,4c,6,9,Y,,#,',/,1,5,J,U,W- ---A-C-D-E-I-J-N-O-U-Yq.!. ...A.E.I.O.U.Y/!/4/6/7/8/9/ R/t///A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/Z/0!0A0 00m1511 1=1]1\114{16m17191A1U24m26`272Yc22#2'2129w2E2O2U3 ~33933A3H3I3J3K3L3M3N3P3R3U3V3W3Y34!D4/4AY4E4H4I4O4R4q4 H44#41484M45 c5A5D5G5M5P5S5Y56'6Af6I6O6U66w6 m6 66#616R607!7/7A7E7H7I7;7O7U7Y777 7 c777#7'71747D7M7R788/8#8'818E8U8Y9!R9/939Am9E9;9O99q9 999#919C9Q9:::/:':I:U:Y;D;*AGATmAWABBBUBYB BBBCKCCCCDVDYD 0DDCEVEYEFEFOF FwGGGAGEGIGOGRGYGGGGGFGHYH HHHHHOIVI IIIIJ RJRJqJJJJJOKEKOKYKKL4tLYLMUMYM MMMMNUNVNYN NNNNNOOGOVOWOXOYO KOtOOOOOP PPPYQ QQQQRCRDRERG{RIRKRLRMRNROwRPRQ{RV{RWRYqR `RRXS SSWSSSSSTNTTT3TOqU YU{UUUUV KVKVAfVEVOVVV~W WWAWEWHWOWWWWCWDWXEXXXCXDXOXQY YYAfYEYOYcYYCYQZ ZEZZZD[*To?Q<:<a  "  3 G OjyYj g*%;vj!u4~Y r !""#Q#$$%!%&}&']'()?)*&*+G+,8,-M-.@..........////)/5/A/M/X/c/o/{//////////0f01S12(2345L6,6V67y889a:<:;t;>??V?@@=@n@@@AAB?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcefghijklmnpqrstuvwxyz{|}~euro++pyglet-1.1.4/tests/font/DEFAULT.py0000600013464101346420000000050511266427716014770 0ustar yohyoh#!/usr/bin/env python '''Test that a font with no name given still renders using some sort of default system font. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest import base_text class TEST_DEFAULT(base_text.TextTestBase): font_name = '' if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/font/COLOR_BLEND.py0000600013464101346420000000105311266427716015465 0ustar yohyoh#!/usr/bin/env python '''Test that font colour is applied correctly. Default font should appear at 0.1 opacity (faint white) ''' __docformat__ = 'restructuredtext' __version__ = '$Id: COLOR_BLEND.py 932 2007-06-25 05:41:34Z Alex.Holkner $' import unittest import base_text from pyglet import font class TEST_COLOR_BLEND(base_text.TextTestBase): def render(self): fnt = font.load(self.font_name, self.font_size) self.label = font.Text(fnt, self.text, 10, 10, color=(1, 1, 1, 0.1)) if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/font/SYSTEM.py0000600013464101346420000000120611266427716014727 0ustar yohyoh#!/usr/bin/env python '''Test that a font likely to be installed on the computer can be loaded and displayed correctly. One window will open, it should show "Quickly brown fox" at 24pt using: * "Helvetica" on Mac OS X * "Arial" on Windows ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest import sys import base_text if sys.platform == 'darwin': font_name = 'Helvetica' elif sys.platform in ('win32', 'cygwin'): font_name = 'Arial' else: font_name = 'Arial' class TEST_SYSTEM(base_text.TextTestBase): font_name = font_name font_size = 24 if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/font/COLOR.py0000600013464101346420000000100611266427716014557 0ustar yohyoh#!/usr/bin/env python '''Test that font colour is applied correctly. Default font should appear blue. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: COLOR.py 932 2007-06-25 05:41:34Z Alex.Holkner $' import unittest import base_text from pyglet import font class TEST_COLOR(base_text.TextTestBase): def render(self): fnt = font.load(self.font_name, self.font_size) self.label = font.Text(fnt, self.text, 10, 10, color=(0, 0, 1, 1)) if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/font/BULLET.py0000600013464101346420000000064511266427716014700 0ustar yohyoh#!/usr/bin/env python '''Test that rendering of bullet glyphs works. You should see 5 bullet glyphs rendered in the bottom-left of the window. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet import font import base_text class TEST_HALIGN(base_text.TextTestBase): font_name = '' font_size = 60 text = u'\u2022'*5 if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/top/0002700013464101346420000000000011317255174013160 5ustar yohyohpyglet-1.1.4/tests/top/__init__.py0000600013464101346420000000000011266427715015264 0ustar yohyohpyglet-1.1.4/tests/top/IMPORT.py0000600013464101346420000000313711266427715014555 0ustar yohyoh#!/usr/bin/env python '''Test that all public modules are accessible after importing just 'pyglet'. This _must_ be the first test run. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: TICK.py 310 2006-12-23 15:56:35Z Alex.Holkner $' import unittest import pyglet __noninteractive = True modules = [ 'app', 'clock', 'event', 'font', 'font.base', 'gl', 'gl.gl_info', 'gl.glu_info', 'graphics', 'graphics.allocation', 'graphics.vertexattribute', 'graphics.vertexbuffer', 'graphics.vertexdomain', 'image', 'image.atlas', 'media', 'resource', 'sprite', 'text', 'text.caret', 'text.document', 'text.layout', 'text.runlist', 'window', 'window.event', 'window.key', 'window.mouse', ] def add_module_tests(name, bases, dict): for module in modules: components = module.split('.') def create_test(components): def test_module(self): top = pyglet for component in components: self.assertTrue(hasattr(top, component), 'Cannot access "%s" in "%s"' % (component, top.__name__)) top = getattr(top, component) return test_module test_module = create_test(components) test_name = 'test_%s' % module.replace('.', '_') test_module.__name__ = test_name dict[test_name] = test_module return type.__new__(type, name, bases, dict) class TEST_CASE(unittest.TestCase): __metaclass__ = add_module_tests if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/0002700013464101346420000000000011317255174013665 5ustar yohyohpyglet-1.1.4/tests/window/WINDOW_RESIZABLE.py0000600013464101346420000000154411266427717016661 0ustar yohyoh#!/usr/bin/env python '''Test that window can be resized. Expected behaviour: One window will be opened. It should be resizable by the user. Close the window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: WINDOW_SET_MOUSE_CURSOR.py 717 2007-03-03 07:04:10Z Alex.Holkner $' import unittest from pyglet.gl import * from pyglet import window from pyglet.window import key import window_util class WINDOW_RESIZABLE(unittest.TestCase): def test_resizable(self): self.width, self.height = 200, 200 self.w = w = window.Window(self.width, self.height, resizable=True) glClearColor(1, 1, 1, 1) while not w.has_exit: w.dispatch_events() window_util.draw_client_border(w) w.flip() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/WINDOW_STYLE_TOOL.py0000600013464101346420000000151311266427717017072 0ustar yohyoh#!/usr/bin/env python '''Test that window style can be tool. Expected behaviour: One tool-styled window will be opened. Close the window to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: WINDOW_SET_MOUSE_CURSOR.py 717 2007-03-03 07:04:10Z Alex.Holkner $' import unittest from pyglet.gl import * from pyglet import window class TEST_WINDOW_STYLE_TOOL(unittest.TestCase): def test_style_tool(self): self.width, self.height = 200, 200 self.w = w = window.Window(self.width, self.height, style=window.Window.WINDOW_STYLE_TOOL) glClearColor(1, 1, 1, 1) while not w.has_exit: glClear(GL_COLOR_BUFFER_BIT) w.dispatch_events() w.flip() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/EVENT_SEQUENCE_UNSET_FULLSCREEN.py0000600013464101346420000000140211266427717021114 0ustar yohyoh#!/usr/bin/env python # $Id: $ import unittest from pyglet import window import base_event_sequence __noninteractive = True class TEST_CLASS(base_event_sequence.BaseEventSequence): last_sequence = 2 def on_resize(self, width, height): self.check_sequence(1, 'on_resize') def on_expose(self): self.check_sequence(2, 'on_expose') def test_method(self): win = window.Window(fullscreen=True) win.dispatch_events() win.push_handlers(self) win.set_fullscreen(False) self.check_sequence(0, 'begin') while not win.has_exit and not self.finished: win.dispatch_events() self.check_timeout() win.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/icon1.png0000600013464101346420000000445611266427717015424 0ustar yohyohPNG  IHDR>abKGD pHYs  tIMEV tEXtCommentCreated with The GIMPd%nIDATxe_Ay9RZ$ M:pNZՏf[st,@L|0-iv\)A~8K{]O?}=u@E 9IH`s IL gJuIizI9Ux* K9 Ֆa/0?A⥜K)W5eBDMd$IL g-q3j; 7KP _,*~k"Q7rO 5*I)d @yrIfAቒj$zrz0eOSpW@=@6i/J[$.>j@J cM@)Z?OHø;>kE 4%:@Q)C`wNvqHl0G$f1.(ڵ})1ݺ 4f0,cWшĹ|^%qZϱ~+( MĞ@Eju~>+W ޳)NcJljbn`5xWVX-11ۯ?b}wm> L8S.~[ALrϝk|m_`tѬmuA[Rb(gk:%q̨Ç~iQ %h" !Su=4pޙ_t(jTF{Sb"l`ݘq8Ĩgg;3< N (f3%vWTݘi_IF\Џx{P@`JQ?Kls?l̰XtL :0}p f@(Xf̬; ҳר1'":IbШׂ|aqx1[AoɨPZK}Qc.w0% FLgT8%}kVg ]I_\W=h4`xhKlM%ᜬ25k4ai: Z)oͳzM<%-"7_]-bZ.)7C9 4$mW TUnYy)pY8?5ںP@5ȅ$fW.,%2s_\W>~Mg{ÕC e\ezS?Zn@#KabKGD pHYs  tIME ~tEXtCommentCreated with The GIMPd%nIDATx[lEUH%[ALRZ p/=7t N"bm9r]&(Y @ \Nd{f`Ωe+1'ms|r lhÂz|< nȧsO&-x% ok$@~1``dlO@]qw(G)UggP2N^\8{$؞2fPu;3`%4696 S`][I*NF))os ؚV `+f9N$+y`R=`9 ƃ}p$$Scx`M%hT\Ò`,XGN$G ,Qh:xĸIUL F>Oko(TYf/PX W~n5FJOLa 8 Q o=qȷ%@P \J|s<44+4hW LzGC@辏KpJ o||uD[ \{c)Ӏ 穞62!EN=@xɯnPѦ2 {gBog+ P 4. if symbol == key.N: self.soft_multisample = not self.soft_multisample if self.soft_multisample: print 'Enabling GL_MULTISAMPLE_ARB' glEnable(GL_MULTISAMPLE_ARB) else: print 'Disabling GL_MULTISAMPLE_ARB' glDisable(GL_MULTISAMPLE_ARB) def render(self): self.win.switch_to() size = self.height / 4 glClear(GL_COLOR_BUFFER_BIT) glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) glLoadIdentity() glTranslatef(self.width/2, self.height/2, 0) glRotatef(self.angle, 0, 0, 1) glColor3f(1, 0, 0) glBegin(GL_QUADS) glVertex2f(-size, -size) glVertex2f(size, -size) glVertex2f(size, size) glVertex2f(-size, size) glEnd() glRotatef(-self.angle * 2, 0, 0, 1) glColor4f(0, 1, 0, 0.5) glBegin(GL_QUADS) glVertex2f(-size, -size) glVertex2f(size, -size) glVertex2f(size, size) glVertex2f(-size, size) glEnd() def test_multisample(self): self.set_window() self.angle = 0 clock.set_fps_limit = 30 while not self.win.has_exit: dt = clock.tick() self.angle += dt self.win.dispatch_events() self.render() self.win.flip() self.win.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/EVENT_MOUSE_MOTION.py0000600013464101346420000000156011266427717017166 0ustar yohyoh#!/usr/bin/env python '''Test that mouse motion event works correctly. Expected behaviour: One window will be opened. Move the mouse in and out of this window and ensure the absolute and relative coordinates are correct. - Absolute coordinates relative to 0,0 at bottom-left of client area of window. Close the window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet import window class EVENT_MOUSEMOTION(unittest.TestCase): def on_mouse_motion(self, x, y, dx, dy): print 'Mouse at (%f, %f); relative (%f, %f).' % \ (x, y, dx, dy) def test_motion(self): w = window.Window(200, 200) w.push_handlers(self) while not w.has_exit: w.dispatch_events() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/WINDOW_SET_MIN_MAX_SIZE.py0000600013464101346420000000315011266427717020031 0ustar yohyoh#!/usr/bin/env python '''Test that minimum and maximum window size can be set. Expected behaviour: One window will be opened. The window's dimensions will be printed to the terminal. Initially the window has no minimum or maximum size (besides any OS-enforced limit). - press "n" to set the minimum size to be the current size. - press "x" to set the maximum size to be the current size. You should see a green border inside the window but no red. Close the window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet import window from pyglet.window import key import window_util class WINDOW_SET_MIN_MAX_SIZE(unittest.TestCase): def on_resize(self, width, height): print 'Window size is %dx%d.' % (width, height) self.width, self.height = width, height def on_key_press(self, symbol, modifiers): if symbol == key.N: self.w.set_minimum_size(self.width, self.height) print 'Minimum size set to %dx%d.' % (self.width, self.height) elif symbol == key.X: self.w.set_maximum_size(self.width, self.height) print 'Maximum size set to %dx%d.' % (self.width, self.height) def test_min_max_size(self): self.width, self.height = 200, 200 self.w = w = window.Window(self.width, self.height, resizable=True) w.push_handlers(self) while not w.has_exit: w.dispatch_events() window_util.draw_client_border(w) w.flip() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/WINDOW_SET_MOUSE_VISIBLE.py0000600013464101346420000000233511266427717020120 0ustar yohyoh#!/usr/bin/env python '''Test that mouse cursor can be made visible and hidden. Expected behaviour: One window will be opened. Press 'v' to hide mouse cursor and 'V' to show mouse cursor. It should only affect the mouse when within the client area of the window. Close the window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: WINDOW_SET_MOUSE_VISIBLE.py 750 2007-03-17 01:16:12Z Alex.Holkner $' import unittest from pyglet import window from pyglet.window import key class WINDOW_SET_MOUSE_VISIBLE(unittest.TestCase): def on_key_press(self, symbol, modifiers): if symbol == key.V: visible = (modifiers & key.MOD_SHIFT) self.w.set_mouse_visible(visible) print 'Mouse is now %s' % (visible and 'visible' or 'hidden') def on_mouse_motion(self, x, y, dx, dy): print 'on_mousemotion(x=%f, y=%f, dx=%f, dy=%f)' % (x, y, dx, dy) def test_set_visible(self): self.width, self.height = 200, 200 self.w = w = window.Window(self.width, self.height) w.push_handlers(self) while not w.has_exit: w.dispatch_events() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/WINDOW_SET_VSYNC.py0000600013464101346420000000402611266427717016754 0ustar yohyoh#!/usr/bin/env python '''Test that vsync can be set. Expected behaviour: A window will alternate between red and green fill. - Press "v" to toggle vsync on/off. "Tearing" should only be visible when vsync is off (as indicated at the terminal). Not all video drivers support vsync. On Linux, check the output of `tools/info.py`: - If GLX_SGI_video_sync extension is present, should work as expected. - If GLX_MESA_swap_control extension is present, should work as expected. - If GLX_SGI_swap_control extension is present, vsync can be enabled, but once enabled, it cannot be switched off (there will be no error message). - If none of these extensions are present, vsync is not supported by your driver, but no error message or warning will be printed. Close the window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: WINDOW_SET_VSYNC.py 1051 2007-07-18 13:25:58Z Alex.Holkner $' import unittest from pyglet import window from pyglet.window import key from pyglet.gl import * class WINDOW_SET_VSYNC(unittest.TestCase): colors = [(1, 0, 0, 1), (0, 1, 0, 1)] color_index = 0 def open_window(self): return window.Window(200, 200, vsync=False) def on_key_press(self, symbol, modifiers): if symbol == key.V: vsync = not self.w1.vsync self.w1.set_vsync(vsync) print 'vsync is %r' % self.w1.vsync def draw_window(self, window, colour): window.switch_to() glClearColor(*colour) glClear(GL_COLOR_BUFFER_BIT) window.flip() def test_open_window(self): self.w1 = self.open_window() self.w1.push_handlers(self) print 'vsync is %r' % self.w1.vsync while not self.w1.has_exit: self.color_index = 1 - self.color_index self.draw_window(self.w1, self.colors[self.color_index]) self.w1.dispatch_events() self.w1.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/WINDOW_STYLE_DIALOG.py0000600013464101346420000000160011266427717017251 0ustar yohyoh#!/usr/bin/env python '''Test that window style can be dialog. Expected behaviour: One dialog-styled window will be opened. Close the window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: WINDOW_SET_MOUSE_CURSOR.py 717 2007-03-03 07:04:10Z Alex.Holkner $' import unittest from pyglet.gl import * from pyglet import window from pyglet.window import key class TEST_WINDOW_STYLE_DIALOG(unittest.TestCase): def test_style_dialog(self): self.width, self.height = 200, 200 self.w = w = window.Window(self.width, self.height, style=window.Window.WINDOW_STYLE_DIALOG) glClearColor(1, 1, 1, 1) while not w.has_exit: glClear(GL_COLOR_BUFFER_BIT) w.dispatch_events() w.flip() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/WINDOW_FIXED_SET_SIZE.py0000600013464101346420000000257711266427717017554 0ustar yohyoh#!/usr/bin/env python '''Test that a non-resizable window's size can be set. Expected behaviour: One window will be opened. The window's dimensions will be printed to the terminal. - press "x" to increase the width - press "X" to decrease the width - press "y" to increase the height - press "Y" to decrease the height You should see a green border inside the window but no red. Close the window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet import window from pyglet.window import key import window_util class WINDOW_FIXED_SET_SIZE(unittest.TestCase): def on_key_press(self, symbol, modifiers): delta = 20 if modifiers & key.MOD_SHIFT: delta = -delta if symbol == key.X: self.width += delta elif symbol == key.Y: self.height += delta self.w.set_size(self.width, self.height) print 'Window size set to %dx%d.' % (self.width, self.height) def test_set_size(self): self.width, self.height = 200, 200 self.w = w = window.Window(self.width, self.height) w.push_handlers(self) while not w.has_exit: w.dispatch_events() window_util.draw_client_border(w) w.flip() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/CONTEXT_SHARE.py0000600013464101346420000000424711266427717016323 0ustar yohyoh#!/usr/bin/env python '''Test that multiple windows share objects by default. This test is non-interactive. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from ctypes import * from pyglet import window from pyglet.gl import * __noninteractive = True class CONTEXT_SHARE(unittest.TestCase): def create_context(self, share): display = window.get_platform().get_default_display() screen = display.get_default_screen() config = screen.get_best_config() return config.create_context(share) def test_context_share_list(self): w1 = window.Window(200, 200) w1.switch_to() list = glGenLists(1) glNewList(list, GL_COMPILE) glLoadIdentity() glEndList() self.assertTrue(glIsList(list)) w2 = window.Window(200, 200) w2.switch_to() self.assertTrue(glIsList(list)) w1.close() w2.close() def test_context_noshare_list(self): w1 = window.Window(200, 200) w1.switch_to() list = glGenLists(1) glNewList(list, GL_COMPILE) glLoadIdentity() glEndList() self.assertTrue(glIsList(list)) w2 = window.Window(200, 200, context=self.create_context(None)) w2.set_visible(True) w2.switch_to() self.assertTrue(not glIsList(list)) w1.close() w2.close() def test_context_share_texture(self): w1 = window.Window(200, 200) w1.switch_to() textures = c_uint() glGenTextures(1, byref(textures)) texture = textures.value glBindTexture(GL_TEXTURE_2D, texture) data = (c_ubyte * 4)() glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, data) self.assertTrue(glIsTexture(texture)) w2 = window.Window(200, 200) w2.switch_to() self.assertTrue(glIsTexture(texture)) glDeleteTextures(1, byref(textures)) self.assertTrue(not glIsTexture(texture)) w1.switch_to() self.assertTrue(not glIsTexture(texture)) w1.close() w2.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/EVENT_KEY.py0000600013464101346420000000207711266427717015645 0ustar yohyoh#!/usr/bin/env python '''Test that key press and release events work correctly. Expected behaviour: One window will be opened. Type into this window and check the console output for key press and release events. Check that the correct key symbol and modifiers are reported. Close the window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet import window from pyglet.window import key class EVENT_KEYPRESS(unittest.TestCase): def on_key_press(self, symbol, modifiers): print 'Pressed %s with modifiers %s' % \ (key.symbol_string(symbol), key.modifiers_string(modifiers)) def on_key_release(self, symbol, modifiers): print 'Released %s with modifiers %s' % \ (key.symbol_string(symbol), key.modifiers_string(modifiers)) def test_keypress(self): w = window.Window(200, 200) w.push_handlers(self) while not w.has_exit: w.dispatch_events() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/__init__.py0000600013464101346420000000000011266427717015773 0ustar yohyohpyglet-1.1.4/tests/window/icon_size3.png0000600013464101346420000000160211266427717016446 0ustar yohyohPNG  IHDR00WbKGD pHYs  tIME7 tEXtCommentCreated with The GIMPd%nIDATh՚KHAGP V){RȲhE-ڴB6A MEA 6*D0*R[O*f~7fy3gD)%@Pjj (@?=@7cKU*A:t94"M|Ko#- ۸x;g@fw`ƀr I[-4,)mHc+:FRm. !!mN -wRu ܭBvI" XH2f hnō<*_|'|!0ai@}M.h!Ro %Āθ/Gj8K. EZ-ˀ ,tX`+#H {$eg .V hRb[JU vvȁ8ǁH/+qLJ(\tA$ R` ƞD%g _I,;Bo=x#үЛٌ| i[ܴ$, e-+0 G{@=>ȏ}Hǐhq;:~tii: j9!oN{ R-G*BZt,H[2 H!#w'[ U_q`?<0 4c̓L7LM(z6 EB4Ru)E6/ ujZ+d(!UO: <#OnּNN oIENDB`pyglet-1.1.4/tests/window/WINDOW_SET_ICON.py0000600013464101346420000000173611266427717016607 0ustar yohyoh#!/usr/bin/env python '''Test that window icon can be set. Expected behaviour: One window will be opened. It will have an icon depicting a yellow "A". Close the window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: WINDOW_SET_MOUSE_CURSOR.py 717 2007-03-03 07:04:10Z Alex.Holkner $' import unittest from pyglet.gl import * from pyglet import image from pyglet import window from pyglet.window import key from os.path import join, dirname icon_file = join(dirname(__file__), 'icon1.png') class WINDOW_SET_ICON(unittest.TestCase): def test_set_icon(self): self.width, self.height = 200, 200 self.w = w = window.Window(self.width, self.height) w.set_icon(image.load(icon_file)) glClearColor(1, 1, 1, 1) while not w.has_exit: glClear(GL_COLOR_BUFFER_BIT) w.dispatch_events() w.flip() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/EVENT_MOUSE_DRAG.py0000600013464101346420000000152511266427717016677 0ustar yohyoh#!/usr/bin/env python '''Test that mouse drag event works correctly. Expected behaviour: One window will be opened. Click and drag with the mouse and ensure that buttons, coordinates and modifiers are reported correctly. Events should be generated even when the drag leaves the window. Close the window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: EVENT_MOUSE_DRAG.py 750 2007-03-17 01:16:12Z Alex.Holkner $' import unittest from pyglet import window from pyglet.window.event import WindowEventLogger class EVENT_MOUSE_DRAG(unittest.TestCase): def test_mouse_drag(self): w = window.Window(200, 200) w.push_handlers(WindowEventLogger()) while not w.has_exit: w.dispatch_events() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/WINDOW_OPEN.py0000600013464101346420000000155711266427717016106 0ustar yohyoh#!/usr/bin/env python '''Test that a window can be opened. Expected behaviour: One small window will be opened coloured purple. Close the window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: WINDOW_OPEN.py 750 2007-03-17 01:16:12Z Alex.Holkner $' import unittest from pyglet import window from pyglet.gl import * class WINDOW_OPEN(unittest.TestCase): def open_window(self): return window.Window(200, 200) def draw_window(self, window, colour): window.switch_to() glClearColor(*colour) glClear(GL_COLOR_BUFFER_BIT) window.flip() def test_open_window(self): w1 = self.open_window() while not w1.has_exit: self.draw_window(w1, (1, 0, 1, 1)) w1.dispatch_events() w1.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/icon_size4.png0000600013464101346420000000147711266427717016461 0ustar yohyohPNG  IHDRHHUGbKGD pHYs  tIME6֙tEXtCommentCreated with The GIMPd%nIDATxAMQ􈡉FɊFY(`aab#J 56 r,d! iJJєh cgҼwt9Sӽ{oh 2CN Kp 46&qo'n :tQ: `4 kѻpwN``*PN@k0>Q6- J@]H`K@ACKIHP }&JF`" ^co@n@wJ@W /`^[q } tPaN|@m@q㬸Bͩ]4:x[o6땙t&T@ ΍茡Ps$J 4n(1r N 0@/Sթir  gRk}.$8hD9}sT@^@9Y*QC+9Y >CW+{pv)nBb Tz? V%$6< f7 2|`Cr@`CB]0z,bc8/P|@};@@@ʊP`y-:rs r @@@@ 5xIENDB`pyglet-1.1.4/tests/window/EVENT_SEQUENCE_SHOW.py0000600013464101346420000000146111266427717017261 0ustar yohyoh#!/usr/bin/python # $Id:$ import unittest from pyglet import window import base_event_sequence __noninteractive = True class TEST_CLASS(base_event_sequence.BaseEventSequence): last_sequence = 3 def on_resize(self, width, height): self.check_sequence(1, 'on_resize') def on_show(self): self.check_sequence(2, 'on_show') def on_expose(self): self.check_sequence(3, 'on_expose') def test_method(self): win = window.Window(visible=False) win.dispatch_events() win.push_handlers(self) win.set_visible(True) self.check_sequence(0, 'begin') while not win.has_exit and not self.finished: win.dispatch_events() self.check_timeout() win.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/WINDOW_SET_MOUSE_CURSOR.py0000600013464101346420000000226611266427717020043 0ustar yohyoh#!/usr/bin/env python '''Test that image mouse cursor can be set. Expected behaviour: One window will be opened. The mouse cursor in the window will be a custom cursor. Close the window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: WINDOW_SET_MOUSE_CURSOR.py 763 2007-03-26 07:58:00Z Alex.Holkner $' import unittest from pyglet.gl import * from pyglet import image from pyglet import window from os.path import join, dirname cursor_file = join(dirname(__file__), 'cursor.png') class WINDOW_SET_MOUSE_CURSOR(unittest.TestCase): def on_mouse_motion(self, x, y, dx, dy): print 'on_mousemotion(x=%f, y=%f, dx=%f, dy=%f)' % (x, y, dx, dy) def test_set_mouse_cursor(self): self.width, self.height = 200, 200 self.w = w = window.Window(self.width, self.height) img = image.load(cursor_file) w.set_mouse_cursor(window.ImageMouseCursor(img, 4, 28)) w.push_handlers(self) glClearColor(1, 1, 1, 1) while not w.has_exit: glClear(GL_COLOR_BUFFER_BIT) w.dispatch_events() w.flip() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/WINDOW_ACTIVATE.py0000600013464101346420000000217711266427717016544 0ustar yohyoh#!/usr/bin/env python '''Test that the window can be activated (focus set). Expected behaviour: One window will be opened. Every 5 seconds it will be activated; it should be come to the front and accept keyboard input (this will be shown on the terminal). On Windows XP, the taskbar icon may flash (indicating the application requires attention) rather than moving the window to the foreground. This is the correct behaviour. Press escape or close the window to finished the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import time import unittest from pyglet import window from pyglet.window.event import WindowEventLogger class WINDOW_ACTVATE(unittest.TestCase): def test_activate(self): w = window.Window(200, 200) w.push_handlers(WindowEventLogger()) last_time = time.time() while not w.has_exit: if time.time() - last_time > 5: w.activate() last_time = time.time() print 'Activated window.' w.dispatch_events() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/EVENT_SEQUENCE_CREATE_FULLSCREEN.py0000600013464101346420000000137211266427717021167 0ustar yohyoh#!/usr/bin/env python # $Id: $ import unittest from pyglet import window import base_event_sequence __noninteractive = True class TEST_CLASS(base_event_sequence.BaseEventSequence): last_sequence = 3 def on_resize(self, width, height): self.check_sequence(1, 'on_resize') def on_show(self): self.check_sequence(2, 'on_show') def on_expose(self): self.check_sequence(3, 'on_expose') def test_method(self): win = window.Window(fullscreen=True) win.push_handlers(self) self.check_sequence(0, 'begin') while not win.has_exit and not self.finished: win.dispatch_events() self.check_timeout() win.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/WINDOW_INITIAL_FULLSCREEN.py0000600013464101346420000000270211266427717020151 0ustar yohyoh#!/usr/bin/env python '''Test that a window can be opened fullscreen. Expected behaviour: A fullscreen window will be created, with a flat purple colour. - Press 'g' to leave fullscreen mode and create a window. - Press 'f' to re-enter fullscreen mode. - All events will be printed to the console. Ensure that mouse, keyboard and activation/deactivation events are all correct. Close either window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest import pyglet.window from pyglet import window from pyglet.window.event import WindowEventLogger from pyglet.window import key from pyglet.gl import * class WINDOW_INITIAL_FULLSCREEN(unittest.TestCase): def on_key_press(self, symbol, modifiers): if symbol == key.F: print 'Setting fullscreen.' self.w.set_fullscreen(True) elif symbol == key.G: print 'Leaving fullscreen.' self.w.set_fullscreen(False) def on_expose(self): glClearColor(1, 0, 1, 1) glClear(GL_COLOR_BUFFER_BIT) self.w.flip() def test_initial_fullscreen(self): self.w = window.Window(fullscreen=True) self.w.push_handlers(self) self.w.push_handlers(WindowEventLogger()) self.on_expose() while not self.w.has_exit: self.w.dispatch_events() self.w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/WINDOW_CAPTION.py0000600013464101346420000000217211266427717016434 0ustar yohyoh#!/usr/bin/env python '''Test that the window caption can be set. Expected behaviour: Two windows will be opened, one with the caption "Window caption 1" counting up every second; the other with a Unicode string including some non-ASCII characters. Press escape or close either window to finished the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import time import unittest from pyglet import window class WINDOW_CAPTION(unittest.TestCase): def test_caption(self): w1 = window.Window(400, 200, resizable=True) w2 = window.Window(400, 200, resizable=True) count = 1 w1.set_caption('Window caption %d' % count) w2.set_caption(u'\u00bfHabla espa\u00f1ol?') last_time = time.time() while not (w1.has_exit or w2.has_exit): if time.time() - last_time > 1: count += 1 w1.set_caption('Window caption %d' % count) last_time = time.time() w1.dispatch_events() w2.dispatch_events() w1.close() w2.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/WINDOW_SET_VISIBLE.py0000600013464101346420000000171411266427717017150 0ustar yohyoh#!/usr/bin/env python '''Test that the window can be hidden and shown. Expected behaviour: One window will be opened. Every 5 seconds it will toggle between hidden and shown. Press escape or close the window to finish the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import time import unittest from pyglet import window from pyglet.window.event import WindowEventLogger class WINDOW_SET_VISIBLE(unittest.TestCase): def test_set_visible(self): w = window.Window(200, 200) w.push_handlers(WindowEventLogger()) last_time = time.time() visible = True while not w.has_exit: if time.time() - last_time > 5: visible = not visible w.set_visible(visible) last_time = time.time() print 'Set visibility to %r.' % visible w.dispatch_events() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/EVENT_SHOW_HIDE.py0000600013464101346420000000172711266427717016567 0ustar yohyoh#!/usr/bin/env python '''Test that show and hide events work correctly. Expected behaviour: One window will be opened. There should be one shown event printed initially. Minimizing and restoring the window should produce hidden and shown events, respectively. On OS X the events should also be fired when the window is hidden and shown (using Command+H or the dock context menu). Close the window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet import window class EVENT_SHOW_HIDE(unittest.TestCase): def on_show(self): print 'Window shown.' def on_hide(self): print 'Window hidden.' def test_show_hide(self): w = window.Window(200, 200, visible=False) w.push_handlers(self) w.set_visible() while not w.has_exit: w.dispatch_events() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/EVENT_MOVE.py0000600013464101346420000000127711266427717015764 0ustar yohyoh#!/usr/bin/env python '''Test that window move event works correctly. Expected behaviour: One window will be opened. Move the window and ensure that the location printed to the terminal is correct. Close the window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet import window class EVENT_MOVE(unittest.TestCase): def on_move(self, x, y): print 'Window moved to %dx%d.' % (x, y) def test_move(self): w = window.Window(200, 200) w.push_handlers(self) while not w.has_exit: w.dispatch_events() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/MULTIPLE_SCREEN.py0000600013464101346420000000270611266427717016545 0ustar yohyoh#!/usr/bin/env python '''Test that screens can be selected for fullscreen. Expected behaviour: One window will be created fullscreen on the primary screen. When you close this window, another will open on the next screen, and so on until all screens have been tested. Each screen will be filled with a different color: - Screen 0: Red - Screen 1: Green - Screen 2: Blue - Screen 3: Purple The test will end when all screens have been tested. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet import window from pyglet.gl import * colours = [ (1, 0, 0, 1), (0, 1, 0, 1), (0, 0, 1, 1), (1, 0, 1, 1)] class MULTIPLE_SCREEN(unittest.TestCase): def open_next_window(self): screen = self.screens[self.index] self.w = window.Window(screen=screen, fullscreen=True) def on_expose(self): self.w.switch_to() glClearColor(*colours[self.index]) glClear(GL_COLOR_BUFFER_BIT) self.w.flip() def test_multiple_screen(self): display = window.get_platform().get_default_display() self.screens = display.get_screens() for i in range(len(self.screens)): self.index = i self.open_next_window() self.on_expose() while not self.w.has_exit: self.w.dispatch_events() self.w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/icon_size2.png0000600013464101346420000000077411266427717016456 0ustar yohyohPNG  IHDR szzbKGD pHYs  tIME- tEXtCommentCreated with The GIMPd%n`IDATX=KA -TR)X"ؙJ$E*A-h ;!jG69ļ,s7 f1 }@xS`7:zR(TL5B-UpԀ!` Ț@L+z u4 L| Me`[h A\Pɘ8q?BP@oP&.(Mf ,e =?!a? 1 Ox:2'-*xb~zGnw<e/hP|LbWQ fi${=ʭP ?7q[S_=`GjIENDB`pyglet-1.1.4/tests/window/EVENT_SEQUENCE_CREATE.py0000600013464101346420000000135311266427717017444 0ustar yohyoh#!/usr/bin/env python # $Id: $ import unittest from pyglet import window import base_event_sequence __noninteractive = True class TEST_CLASS(base_event_sequence.BaseEventSequence): last_sequence = 3 def on_resize(self, width, height): self.check_sequence(1, 'on_resize') def on_show(self): self.check_sequence(2, 'on_show') def on_expose(self): self.check_sequence(3, 'on_expose') def test_method(self): win = window.Window() win.push_handlers(self) self.check_sequence(0, 'begin') while not win.has_exit and not self.finished: win.dispatch_events() self.check_timeout() win.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/MULTIPLE_WINDOW_OPEN.py0000600013464101346420000000200111266427717017402 0ustar yohyoh#!/usr/bin/env python '''Test that multiple windows can be opened. Expected behaviour: Two small windows will be opened, one coloured yellow and the other purple. Close either window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet import window from pyglet.gl import * class MULTIPLE_WINDOW_OPEN(unittest.TestCase): def open_window(self): return window.Window(200, 200) def draw_window(self, window, colour): window.switch_to() glClearColor(*colour) glClear(GL_COLOR_BUFFER_BIT) window.flip() def test_open_window(self): w1 = self.open_window() w2 = self.open_window() while not (w1.has_exit or w2.has_exit): self.draw_window(w1, (1, 0, 1, 1)) self.draw_window(w2, (1, 1, 0, 1)) w1.dispatch_events() w2.dispatch_events() w1.close() w2.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/EVENT_TEXT.py0000600013464101346420000000231311266427717015772 0ustar yohyoh#!/usr/bin/env python '''Test that text events work correctly. Expected behaviour: One window will be opened. Type into this window and check the console output for text events. - Repeated when keys are held down - Motion events (e.g., arrow keys, HOME/END, etc) are reported - Select events (motion + SHIFT) are reported - Non-keyboard text entry is used (e.g., pen or international palette). - Combining characters do not generate events, but the modified character is sent. Close the window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet import window from pyglet.window import key class EVENT_KEYPRESS(unittest.TestCase): def on_text(self, text): print 'Typed %r' % text def on_text_motion(self, motion): print 'Motion %s' % key.motion_string(motion) def on_text_motion_select(self, motion): print 'Select %s' % key.motion_string(motion) def test_text(self): w = window.Window(200, 200) w.push_handlers(self) while not w.has_exit: w.dispatch_events() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/WINDOW_SET_SIZE.py0000600013464101346420000000256711266427717016634 0ustar yohyoh#!/usr/bin/env python '''Test that window size can be set. Expected behaviour: One window will be opened. The window's dimensions will be printed to the terminal. - press "x" to increase the width - press "X" to decrease the width - press "y" to increase the height - press "Y" to decrease the height You should see a green border inside the window but no red. Close the window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet import window from pyglet.window import key import window_util class WINDOW_SET_SIZE(unittest.TestCase): def on_key_press(self, symbol, modifiers): delta = 20 if modifiers & key.MOD_SHIFT: delta = -delta if symbol == key.X: self.width += delta elif symbol == key.Y: self.height += delta self.w.set_size(self.width, self.height) print 'Window size set to %dx%d.' % (self.width, self.height) def test_set_size(self): self.width, self.height = 200, 200 self.w = w = window.Window(self.width, self.height, resizable=True) w.push_handlers(self) while not w.has_exit: w.dispatch_events() window_util.draw_client_border(w) w.flip() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/base_event_sequence.py0000600013464101346420000000145311266427717020254 0ustar yohyoh#!/usr/bin/python # $Id:$ import unittest import time class BaseEventSequence(unittest.TestCase): next_sequence = 0 last_sequence = 0 finished = False timeout = 2 start_time = time.time() def check_sequence(self, sequence, name): if self.next_sequence == 0 and sequence != 0: return if sequence == 0: self.start_time = time.time() if not self.finished: if self.next_sequence != sequence: print 'ERROR: %s out of order' % name else: print 'OK: %s' % name self.next_sequence += 1 if self.next_sequence > self.last_sequence: self.finished = True def check_timeout(self): self.assertTrue(time.time() - self.start_time < self.timeout) pyglet-1.1.4/tests/window/EVENT_RESIZE.py0000600013464101346420000000160111266427717016206 0ustar yohyoh#!/usr/bin/env python '''Test that resize event works correctly. Expected behaviour: One window will be opened. Resize the window and ensure that the dimensions printed to the terminal are correct. You should see a green border inside the window but no red. Close the window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet import window import window_util class EVENT_RESIZE(unittest.TestCase): def on_resize(self, width, height): print 'Window resized to %dx%d.' % (width, height) def test_resize(self): w = window.Window(200, 200, resizable=True) w.push_handlers(self) while not w.has_exit: w.dispatch_events() window_util.draw_client_border(w) w.flip() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/EVENT_CLOSE.py0000600013464101346420000000170311266427717016055 0ustar yohyoh#!/usr/bin/env python '''Test that close event works correctly. Expected behaviour: One window will be opened. Click the close button and ensure the event is printed to the terminal. The window should not close when you do this. Click Left mouse button to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet import window from pyglet import event w = None class EVENT_CLOSE(unittest.TestCase): def on_close(self): print 'Window close event.' return event.EVENT_HANDLED def on_key_press(self, symbol, mods): if symbol == window.key.ESCAPE: global w super(window.Window, w).on_close() def test_close(self): global w w = window.Window(200, 200) w.push_handlers(self) while not w.has_exit: w.dispatch_events() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/icon_size1.png0000600013464101346420000000042311266427717016444 0ustar yohyohPNG  IHDRabKGD pHYs  tIME#.Ө"tEXtCommentCreated with The GIMPd%nwIDAT8퓱 @Cb'Ѓ݁(u8CC2gNШ/d {(eRT^SYOR2*uKt'yl~ i5[]T.]mIENDB`pyglet-1.1.4/tests/window/EVENT_ACTIVATE_DEACTIVATE.py0000600013464101346420000000205011266427717020075 0ustar yohyoh#!/usr/bin/env python '''Test that activate and deactivate events work correctly. Expected behaviour: One window will be opened. Clicking on the window should activate it, clicking on another window should deactivate it. Messages will be printed to the console for both events. On OS X you can also (de)activate a window with Command+Tab, or using Expose (F9) or the Dock. On Windows and most Linux window managers you can use Alt+Tab or the task bar. Close the window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet import window class EVENT_ACTIVATE_DEACTIVATE(unittest.TestCase): def on_activate(self): print 'Window activated.' def on_deactivate(self): print 'Window deactivated.' def test_activate_deactivate(self): w = window.Window(200, 200) w.push_handlers(self) while not w.has_exit: w.dispatch_events() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/window_util.py0000700013464101346420000000124511266427717016615 0ustar yohyoh#!/usr/bin/python # $Id:$ from pyglet.gl import * def draw_client_border(window): glClearColor(0, 0, 0, 1) glClear(GL_COLOR_BUFFER_BIT) glMatrixMode(GL_PROJECTION) glLoadIdentity() glOrtho(0, window.width, 0, window.height, -1, 1) glMatrixMode(GL_MODELVIEW) glLoadIdentity() def rect(x1, y1, x2, y2): glBegin(GL_LINE_LOOP) glVertex2f(x1, y1) glVertex2f(x2, y1) glVertex2f(x2, y2) glVertex2f(x1, y2) glEnd() glColor3f(1, 0, 0) rect(-2, -2, window.width + 2, window.height + 2) glColor3f(0, 1, 0) rect(1, 1, window.width - 2, window.height - 2) pyglet-1.1.4/tests/window/EVENT_MOUSE_SCROLL.py0000600013464101346420000000171611266427717017162 0ustar yohyoh#!/usr/bin/env python '''Test that mouse scroll event works correctly. Expected behaviour: One window will be opened. Move the scroll wheel and check that events are printed to console. Positive values are associated with scrolling up. Scrolling can also be side-to-side, for example with an Apple Mighty Mouse. The actual scroll value is dependent on your operating system user preferences. Close the window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet import window class EVENT_MOUSE_SCROLL(unittest.TestCase): def on_mouse_scroll(self, x, y, dx, dy): print 'Mouse scrolled (%f, %f) (x=%f, y=%f)' % (dx, dy, x, y) def test_mouse_scroll(self): w = window.Window(200, 200) w.push_handlers(self) while not w.has_exit: w.dispatch_events() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/WINDOW_SET_ICON_SIZES.py0000600013464101346420000000334411266427717017561 0ustar yohyoh#!/usr/bin/env python '''Test that window icon can be set for multiple sizes. Expected behaviour: One window will be opened. The window's icon depends on the icon size: 16x16 icon is a yellow "1" 32x32 icon is a purple "2" 48x48 icon is a cyan "3" 72x72 icon is a red "4" 128x128 icon is a blue "5" For other sizes, the operating system may select the closest match and scale it (Linux, Windows), or interpolate between two or more images (Mac OS X). Close the window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: WINDOW_SET_MOUSE_CURSOR.py 717 2007-03-03 07:04:10Z Alex.Holkner $' import unittest from pyglet.gl import * from pyglet import image from pyglet import window from pyglet.window import key import window_util from os.path import join, dirname icon_file1 = join(dirname(__file__), 'icon_size1.png') icon_file2 = join(dirname(__file__), 'icon_size2.png') icon_file3 = join(dirname(__file__), 'icon_size3.png') icon_file4 = join(dirname(__file__), 'icon_size4.png') icon_file5 = join(dirname(__file__), 'icon_size5.png') class WINDOW_SET_ICON_SIZES(unittest.TestCase): def test_set_icon_sizes(self): self.width, self.height = 200, 200 self.w = w = window.Window(self.width, self.height) w.set_icon(image.load(icon_file1), image.load(icon_file2), image.load(icon_file3), image.load(icon_file4), image.load(icon_file5)) glClearColor(1, 1, 1, 1) while not w.has_exit: glClear(GL_COLOR_BUFFER_BIT) w.dispatch_events() w.flip() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/EVENT_MOUSE_ENTER_LEAVE.py0000600013464101346420000000145411266427717017754 0ustar yohyoh#!/usr/bin/env python '''Test that mouse enter and leave events work correctly. Expected behaviour: One window will be opened. Move the mouse in and out of this window and ensure the events displayed are correct. Close the window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet import window class EVENT_MOUSE_ENTER_LEAVE(unittest.TestCase): def on_mouse_enter(self, x, y): print 'Entered at %f, %f' % (x, y) def on_mouse_leave(self, x, y): print 'Left at %f, %f' % (x, y) def test_motion(self): w = window.Window(200, 200) w.push_handlers(self) while not w.has_exit: w.dispatch_events() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/WINDOW_SET_FULLSCREEN.py0000600013464101346420000000237411266427717017520 0ustar yohyoh#!/usr/bin/env python '''Test that window can be set fullscreen and back again. Expected behaviour: One window will be opened. - press "f" to enter fullscreen mode. - press "g" to leave fullscreen mode. All events will be printed to the terminal. Close the window or press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet import window from pyglet.window.event import WindowEventLogger from pyglet.window import key from pyglet.gl import * class WINDOW_SET_FULLSCREEN(unittest.TestCase): def on_key_press(self, symbol, modifiers): if symbol == key.F: print 'Setting fullscreen.' self.w.set_fullscreen(True) elif symbol == key.G: print 'Leaving fullscreen.' self.w.set_fullscreen(False) def on_expose(self): glClearColor(1, 0, 0, 1) glClear(GL_COLOR_BUFFER_BIT) self.w.flip() def test_set_fullscreen(self): self.w = w = window.Window(200, 200) w.push_handlers(self) w.push_handlers(WindowEventLogger()) self.on_expose() while not w.has_exit: w.dispatch_events() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/WINDOW_STYLE_BORDERLESS.py0000600013464101346420000000173511266427717017767 0ustar yohyoh#!/usr/bin/env python '''Test that window style can be borderless. Expected behaviour: One borderless window will be opened. Mouse click in the window to close it and end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: WINDOW_SET_MOUSE_CURSOR.py 717 2007-03-03 07:04:10Z Alex.Holkner $' import unittest from pyglet.gl import * from pyglet import window from pyglet.window import key class WINDOW_TEST_STYLE_BORDERLESS(unittest.TestCase): def test_style_borderless(self): self.width, self.height = 200, 200 self.w = w = window.Window(self.width, self.height, style=window.Window.WINDOW_STYLE_BORDERLESS) @w.event def on_mouse_press(*args): w.has_exit = True glClearColor(1, 1, 1, 1) while not w.has_exit: glClear(GL_COLOR_BUFFER_BIT) w.dispatch_events() w.flip() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/window/cursor.png0000600013464101346420000000462411266427717015725 0ustar yohyohPNG  IHDR szzbKGD pHYs  tIME,tEXtCommentCreated with The GIMPd%nIDATXÝKUwΩjW۝vlwDB\ G1H Q!#A 2qӝUߪvΩs.2pt,X{W[NsmxM[qyhPF"UANp":؍v="!QL)hY??o}OoQkY9H43}i! * FV]E{OvlT@J6*LN>~?AN%k@5MA68b}@:e8ٔ vbIЩ!wPղE mE>} i$Z&26#eĴaK%uݑ\\,>)9+>Td(*ҏāb`]sq M!09J2dI-dJ$&r#n7H m3eұo]ƾ?~8Ÿ܌RWZYwBZ$BUt<``#9`2i%e:< `Kݕb'*#l Y C ԡ[sPv.-6jɧ{/+̔Z*jQ(ӌ+ntNruJ] 3 .6Ae#S<`8rgNRtN*T|r4QaPAhH .ELj(ƪۈg'9QK9~/__9㲣gJ 1OV&F1bUQ10bCB3 n11 WO89z8!"lRsUN'#UWGS2Tcjl13Aq3e'nd=ln^Ư\|ֶNpaGO+"𾢍Pv((eY^<!G@~spTTѪz!~*M]҈lj`_EBLRbCi( C682{v#JNsK4 Ԉ$U }[CFl| i]6 k?Gl0~ [_?i%uԗ-ւ*9+M(>b e@4Sg:4+Sw8x;gGn6aZ /uw-}aTlF0^0BA@J0B y>cƘk-w]]ZqDk <8ќl-(VV IKWcoWWypҥRW޸zby]8vr?[FuZ<*J0'#V2 dz>)-D.yAXj)(@sV/@EJHS33 "촕]2=pgҍ۹|Xk;|+찖 prmb:4˂k fF̠,G=ޝs>}X_p:[SZPhTYpCtG<πR?8?}AU"p{:ʟ~=ь8y|OnsmNNNRy |A&ӞK]!yt|tw^W-7bDKWfr~^,mr>ggR^z^Y""Y_08׬5?4FًNw?T9IENDB`pyglet-1.1.4/tests/graphics/0002700013464101346420000000000011317255174014156 5ustar yohyohpyglet-1.1.4/tests/graphics/graphics_common.py0000600013464101346420000000325211266427714017706 0ustar yohyoh#!/usr/bin/env python ''' ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' from operator import add import random from pyglet.gl import * n_vertices = 42 v3f_data = [v/float(n_vertices*3 + 10) for v in range(n_vertices * 3)] v2f_data = reduce(add, zip(v3f_data[::3], v3f_data[1::3])) c4f_data = [v/float(n_vertices*4) for v in range(n_vertices * 4)] c3f_data = reduce(add, zip(c4f_data[::4], c4f_data[1::4], c4f_data[2::4])) t4f_data = [v/float(n_vertices*4 + 5) for v in range(n_vertices * 4)] t3f_data = reduce(add, zip(t4f_data[::4], t4f_data[1::4], t4f_data[2::4])) t2f_data = reduce(add, zip(t3f_data[::3], t3f_data[1::3])) index_data = range(n_vertices) random.seed(1) random.shuffle(index_data) def get_ordered_data(data, dimensions): ordered = [] for i in index_data: ordered.extend(data[i * dimensions:(i+1)*dimensions]) return ordered feedback_buffer = (GLfloat * 8096)() def get_feedback(func): # Project in clip coords glMatrixMode(GL_PROJECTION) glLoadIdentity() glOrtho(0, 1, 0, 1, -1, 1) glMatrixMode(GL_MODELVIEW) glLoadIdentity() glFeedbackBuffer(len(feedback_buffer), GL_4D_COLOR_TEXTURE, feedback_buffer) glRenderMode(GL_FEEDBACK) func() size = glRenderMode(GL_RENDER) buffer = feedback_buffer[:size] vertices = [] colors = [] tex_coords = [] while buffer: token = int(buffer.pop(0)) assert token == GL_POLYGON_TOKEN n = int(buffer.pop(0)) for i in range(n): vertices.extend(buffer[:4]) colors.extend(buffer[4:8]) tex_coords.extend(buffer[8:12]) del buffer[:12] return vertices, colors, tex_coords pyglet-1.1.4/tests/graphics/GRAPHICS_ALLOCATION.py0000700013464101346420000003401111266427714017441 0ustar yohyoh#!/usr/bin/python # $Id:$ import random import unittest from pyglet.graphics import allocation __noninteractive = True class Region(object): def __init__(self, start, size): self.start = start self.size = size def __repr__(self): return 'Region(%r, %r)' % (self.start, self.size) class RegionAllocator(object): def __init__(self, capacity): self.allocator = allocation.Allocator(capacity) self.regions = [] def check_region(self, region): region_end = region.start + region.size for other in self.regions: if region is other: continue other_end = other.start + other.size if (other.start < region.start and other_end > region.start) or \ (other.start < region_end and other_end > region_end): fixture.fail('%r overlaps with %r' % ( region, other)) def check_coverage(self): starts, sizes = self.allocator.get_allocated_regions() if len(starts) != len(sizes): fixture.fail('Length of starts (%d) does not match sizes (%d)' % \ (len(starts), len(sizes))) if not starts and not self.regions: return self.regions.sort(key=lambda r: r.start) regions = iter(self.regions) blocks = iter(zip(starts, sizes)) block_start, block_size = blocks.next() block_used = False try: while True: region = regions.next() block_used = True if region.start < block_start: fixture.fail('Start of %r was not covered at %d' % ( region, block_start)) elif region.start > block_start: fixture.fail('Uncovered block from %d to %r' % ( block_start, region)) block_start += region.size block_size -= region.size if block_size < 0: fixture.fail('%r extended past end of block by %d' % \ (region, -block_size)) elif block_size == 0: block_start, block_size = blocks.next() block_used = False except StopIteration: pass if not block_used: fixture.fail('Uncovered block(s) from %d' % block_start) try: block_start, block_size = blocks.next() fixture.fail('Uncovered block(s) from %d' % block_start) except StopIteration: pass try: region = regions.next() fixture.fail('%r was not covered') except StopIteration: pass def check_redundancy(self): # Ensure there are no adjacent blocks (they should have been merged) starts, sizes = self.allocator.get_allocated_regions() last = -1 for start, size in zip(starts, sizes): if start < last: fixture.fail('Block at %d is out of order' % start) if start == last: fixture.fail('Block at %d is redundant' % start) last = start + size def alloc(self, size): start = self.allocator.alloc(size) region = Region(start, size) self.check_region(region) self.regions.append(region) self.check_coverage() self.check_redundancy() return region def dealloc(self, region): assert region in self.regions self.allocator.dealloc(region.start, region.size) self.regions.remove(region) self.check_coverage() self.check_redundancy() def realloc(self, region, size): assert region in self.regions region.start = self.allocator.realloc(region.start, region.size, size) region.size = size self.check_region(region) self.check_coverage() self.check_redundancy() def force_alloc(self, size): try: return self.alloc(size) except allocation.AllocatorMemoryException, e: self.allocator.set_capacity(e.requested_capacity) return self.alloc(size) def force_realloc(self, region, size): try: self.realloc(region, size) except allocation.AllocatorMemoryException, e: self.allocator.set_capacity(e.requested_capacity) self.realloc(region, size) def get_free_size(self): return self.allocator.get_free_size() capacity = property(lambda self: self.allocator.capacity) class TestAllocation(unittest.TestCase): def setUp(self): global fixture fixture = self def test_alloc1(self): capacity = 10 allocator = RegionAllocator(capacity) for i in range(capacity): allocator.alloc(1) def test_alloc2(self): capacity = 10 allocator = RegionAllocator(capacity) for i in range(capacity//2): allocator.alloc(2) def test_alloc3(self): capacity = 10 allocator = RegionAllocator(capacity) for i in range(capacity//3): allocator.alloc(3) def test_alloc_mix1_2(self): allocs = [1, 2] * 5 capacity = sum(allocs) allocator = RegionAllocator(capacity) for alloc in allocs: allocator.alloc(alloc) def test_alloc_mix5_3_7(self): allocs = [5, 3, 7] * 5 capacity = sum(allocs) allocator = RegionAllocator(capacity) for alloc in allocs: allocator.alloc(alloc) def test_dealloc_1_order_all(self): capacity = 10 allocator = RegionAllocator(capacity) regions = [] for i in range(capacity): regions.append(allocator.alloc(1)) for region in regions: allocator.dealloc(region) self.assertTrue(allocator.get_free_size() == allocator.capacity) def test_dealloc_1_order(self): capacity = 15 allocator = RegionAllocator(capacity) regions = [] for i in range(10): regions.append(allocator.alloc(1)) for region in regions: allocator.dealloc(region) def test_dealloc_1_reverse_all(self): capacity = 10 allocator = RegionAllocator(capacity) regions = [] for i in range(capacity): regions.append(allocator.alloc(1)) for region in regions[::-1]: allocator.dealloc(region) self.assertTrue(allocator.get_free_size() == allocator.capacity) def test_dealloc_1_reverse(self): capacity = 15 allocator = RegionAllocator(capacity) regions = [] for i in range(10): regions.append(allocator.alloc(1)) for region in regions[::-1]: allocator.dealloc(region) def test_dealloc_mix1_2_order(self): allocs = [1, 2] * 5 capacity = sum(allocs) allocator = RegionAllocator(capacity) regions = [] for alloc in allocs: regions.append(allocator.alloc(alloc)) for region in regions: allocator.dealloc(region) self.assertTrue(allocator.get_free_size() == allocator.capacity) def test_dealloc_mix5_3_7_order(self): allocs = [5, 3, 7] * 5 capacity = sum(allocs) allocator = RegionAllocator(capacity) regions = [] for alloc in allocs: regions.append(allocator.alloc(alloc)) for region in regions: allocator.dealloc(region) self.assertTrue(allocator.get_free_size() == allocator.capacity) def test_dealloc_1_outoforder(self): random.seed(1) capacity = 15 allocator = RegionAllocator(capacity) regions = [] for i in range(capacity): regions.append(allocator.alloc(1)) random.shuffle(regions) for region in regions: allocator.dealloc(region) self.assertTrue(allocator.get_free_size() == allocator.capacity) def test_dealloc_mix1_2_outoforder(self): random.seed(1) allocs = [1, 2] * 5 capacity = sum(allocs) allocator = RegionAllocator(capacity) regions = [] for alloc in allocs: regions.append(allocator.alloc(alloc)) random.shuffle(regions) for region in regions: allocator.dealloc(region) self.assertTrue(allocator.get_free_size() == allocator.capacity) def test_dealloc_mix5_3_7_outoforder(self): random.seed(1) allocs = [5, 3, 7] * 5 capacity = sum(allocs) allocator = RegionAllocator(capacity) regions = [] for alloc in allocs: regions.append(allocator.alloc(alloc)) random.shuffle(regions) for region in regions: allocator.dealloc(region) self.assertTrue(allocator.get_free_size() == allocator.capacity) def mixed_alloc_dealloc_list(self, choices, count=10, seed=1): random.seed(seed) allocs = [] live = [] j = 0 for i in range(count): if live: if random.random() < .5: allocs.append(random.choice(choices)) live.append(j) j += 1 else: k = random.choice(live) live.remove(k) allocs.append(-k) else: allocs.append(random.choice(choices)) live.append(j) j += 1 for j in live: allocs.append(-j) return allocs def test_mix_alloc_dealloc1(self): allocs = self.mixed_alloc_dealloc_list([1]) capacity = sum([a for a in allocs if a > 0]) allocator= RegionAllocator(capacity) regions = [] for alloc in allocs: if alloc > 0: regions.append(allocator.alloc(alloc)) else: region = regions[abs(alloc)] allocator.dealloc(region) self.assertTrue(allocator.get_free_size() == allocator.capacity) def test_mix_alloc_dealloc5_3_7(self): allocs = self.mixed_alloc_dealloc_list([5, 3, 7], count=50) capacity = sum([a for a in allocs if a > 0]) allocator= RegionAllocator(capacity) regions = [] for alloc in allocs: if alloc > 0: regions.append(allocator.alloc(alloc)) else: region = regions[abs(alloc)] allocator.dealloc(region) self.assertTrue(allocator.get_free_size() == allocator.capacity) def test_realloc1_2(self): allocator = RegionAllocator(30) regions = [] for i in range(10): regions.append(allocator.alloc(1)) for region in regions: allocator.realloc(region, 2) for region in regions: allocator.dealloc(region) def test_realloc2_1(self): allocator = RegionAllocator(20) regions = [] for i in range(10): regions.append(allocator.alloc(2)) for region in regions: allocator.realloc(region, 1) for region in regions: allocator.dealloc(region) self.assertTrue(allocator.get_free_size() == allocator.capacity) def test_realloc_2_1_2(self): allocator = RegionAllocator(30) regions = [] for i in range(10): regions.append(allocator.alloc(2)) for region in regions: allocator.realloc(region, 1) for region in regions: allocator.realloc(region, 2) for region in regions: allocator.dealloc(region) self.assertTrue(allocator.get_free_size() == allocator.capacity) def test_realloc_3_1_5_4_6(self): allocator = RegionAllocator(1000) regions = [] for i in range(10): regions.append(allocator.alloc(3)) for region in regions: allocator.realloc(region, 1) for region in regions: allocator.realloc(region, 5) for region in regions: allocator.realloc(region, 4) for region in regions: allocator.realloc(region, 6) for region in regions: allocator.dealloc(region) self.assertTrue(allocator.get_free_size() == allocator.capacity) def test_realloc_3_1_5_4_6_sequential(self): allocator = RegionAllocator(1000) regions = [] for i in range(10): regions.append(allocator.alloc(3)) for region in regions: allocator.realloc(region, 1) allocator.realloc(region, 5) allocator.realloc(region, 4) allocator.realloc(region, 6) for region in regions: allocator.dealloc(region) self.assertTrue(allocator.get_free_size() == allocator.capacity) def test_resize1(self): allocator = RegionAllocator(1) regions = [] for i in range(10): regions.append(allocator.force_alloc(3)) for region in regions: allocator.dealloc(region) self.assertTrue(allocator.get_free_size() == allocator.capacity) def test_mix_resize(self): # Try a bunch of stuff. There is not much method to this madness. allocator = RegionAllocator(1) regions = [] for i in range(10): regions.append(allocator.force_alloc(3)) for region in regions[:5]: #import pdb; pdb.set_trace() allocator.force_realloc(region, 8) for i in range(10): regions.append(allocator.force_alloc(i + 1)) for region in regions[5:15]: allocator.force_realloc(region, 5) for region in regions[3:18:2]: allocator.dealloc(region) regions.remove(region) for i in range(5): regions.append(allocator.force_alloc(3)) for region in regions[-10:]: allocator.force_realloc(region, 6) for region in regions: allocator.dealloc(region) self.assertTrue(allocator.get_free_size() == allocator.capacity) if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/graphics/__init__.py0000600013464101346420000000000011266427714016261 0ustar yohyohpyglet-1.1.4/tests/graphics/RETAINED_INDEXED.py0000600013464101346420000000457711266427714017104 0ustar yohyoh#!/usr/bin/env python ''' ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest import pyglet from graphics_common import * __noninteractive = True class TEST_CASE(unittest.TestCase): def check(self, expected, result, dimensions): if len(expected) != len(result) * dimensions / 4: self.fail('Incorrect number of vertices in feedback array') for d in range(2): for e, r in zip(expected[d::dimensions], result[d::4]): if abs(e - r) > 0.01: self.fail('Feedback array is in error: %r, %r' % \ (e, r)) def generic_test(self, v_fmt, v_data, c_fmt=None, c_data=None, t_fmt=None, t_data=None): data = [(v_fmt, v_data)] n_v = int(v_fmt[1]) if c_fmt: data.append((c_fmt, c_data)) n_c = int(c_fmt[1]) if t_fmt: data.append((t_fmt, t_data)) n_t = int(t_fmt[1]) vertex_list = pyglet.graphics.vertex_list_indexed( n_vertices, index_data, *data) vertices, colors, tex_coords = get_feedback(lambda: \ vertex_list.draw(GL_TRIANGLES)) self.check(get_ordered_data(v_data, n_v), vertices, n_v) if c_fmt: self.check(get_ordered_data(c_data, n_c), colors, n_c) if t_fmt: self.check(get_ordered_data(t_data, n_t), tex_coords, n_t) def test_v2f(self): self.generic_test('v2f', v2f_data) def test_v3f(self): self.generic_test('v3f', v3f_data) def test_v2f_c3f(self): self.generic_test('v2f', v2f_data, 'c3f', c3f_data) def test_v2f_c4f(self): self.generic_test('v2f', v2f_data, 'c4f', c4f_data) def test_v3f_c3f(self): self.generic_test('v3f', v3f_data, 'c3f', c3f_data) def test_v3f_c4f(self): self.generic_test('v3f', v3f_data, 'c4f', c4f_data) def test_v2f_t2f(self): self.generic_test('v2f', v2f_data, None, None, 't2f', t2f_data) def test_v3f_c3f_t2f(self): self.generic_test('v3f', v3f_data, 'c3f', c3f_data, 't2f', t2f_data) def test_v3f_c3f_t3f(self): self.generic_test('v3f', v3f_data, 'c3f', c3f_data, 't3f', t3f_data) def test_v3f_c4f_t4f(self): self.generic_test('v3f', v3f_data, 'c4f', c4f_data, 't4f', t4f_data) if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/graphics/RETAINED.py0000700013464101346420000000433111266427714015731 0ustar yohyoh#!/usr/bin/python # $Id:$ import unittest import pyglet from graphics_common import * __noninteractive = True class TEST_CASE(unittest.TestCase): def check(self, expected, result, dimensions): if len(expected) != len(result) * dimensions / 4: self.fail('Incorrect number of vertices in feedback array') for d in range(2): for e, r in zip(expected[d::dimensions], result[d::4]): if abs(e - r) > 0.01: self.fail('Feedback array is in error: %r, %r' % \ (e, r)) def generic_test(self, v_fmt, v_data, c_fmt=None, c_data=None, t_fmt=None, t_data=None): data = [(v_fmt, v_data)] n_v = int(v_fmt[1]) if c_fmt: data.append((c_fmt, c_data)) n_c = int(c_fmt[1]) if t_fmt: data.append((t_fmt, t_data)) n_t = int(t_fmt[1]) vertex_list = pyglet.graphics.vertex_list(n_vertices, *data) vertices, colors, tex_coords = get_feedback(lambda: \ vertex_list.draw(GL_TRIANGLES)) self.check(v_data, vertices, n_v) if c_fmt: self.check(c_data, colors, n_c) if t_fmt: self.check(t_data, tex_coords, n_t) def test_v2f(self): self.generic_test('v2f', v2f_data) def test_v3f(self): self.generic_test('v3f', v3f_data) def test_v2f_c3f(self): self.generic_test('v2f', v2f_data, 'c3f', c3f_data) def test_v2f_c4f(self): self.generic_test('v2f', v2f_data, 'c4f', c4f_data) def test_v3f_c3f(self): self.generic_test('v3f', v3f_data, 'c3f', c3f_data) def test_v3f_c4f(self): self.generic_test('v3f', v3f_data, 'c4f', c4f_data) def test_v2f_t2f(self): self.generic_test('v2f', v2f_data, None, None, 't2f', t2f_data) def test_v3f_c3f_t2f(self): self.generic_test('v3f', v3f_data, 'c3f', c3f_data, 't2f', t2f_data) def test_v3f_c3f_t3f(self): self.generic_test('v3f', v3f_data, 'c3f', c3f_data, 't3f', t3f_data) def test_v3f_c4f_t4f(self): self.generic_test('v3f', v3f_data, 'c4f', c4f_data, 't4f', t4f_data) if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/graphics/IMMEDIATE.py0000700013464101346420000000430111266427714016031 0ustar yohyoh#!/usr/bin/python # $Id:$ import unittest import pyglet from graphics_common import * __noninteractive = True class TEST_CASE(unittest.TestCase): def check(self, expected, result, dimensions): if len(expected) != len(result) * dimensions / 4: self.fail('Incorrect number of vertices in feedback array') for d in range(2): # Don't check Z or W for e, r in zip(expected[d::dimensions], result[d::4]): if abs(e - r) > 0.01: self.fail('Feedback array is in error: %r, %r' % \ (e, r)) def generic_test(self, v_fmt, v_data, c_fmt=None, c_data=None, t_fmt=None, t_data=None): data = [(v_fmt, v_data)] n_v = int(v_fmt[1]) if c_fmt: data.append((c_fmt, c_data)) n_c = int(c_fmt[1]) if t_fmt: data.append((t_fmt, t_data)) n_t = int(t_fmt[1]) vertices, colors, tex_coords = get_feedback(lambda: \ pyglet.graphics.draw(n_vertices, GL_TRIANGLES, *data)) self.check(v_data, vertices, n_v) if c_fmt: self.check(c_data, colors, n_c) if t_fmt: self.check(t_data, tex_coords, n_t) def test_v2f(self): self.generic_test('v2f', v2f_data) def test_v3f(self): self.generic_test('v3f', v3f_data) def test_v2f_c3f(self): self.generic_test('v2f', v2f_data, 'c3f', c3f_data) def test_v2f_c4f(self): self.generic_test('v2f', v2f_data, 'c4f', c4f_data) def test_v3f_c3f(self): self.generic_test('v3f', v3f_data, 'c3f', c3f_data) def test_v3f_c4f(self): self.generic_test('v3f', v3f_data, 'c4f', c4f_data) def test_v2f_t2f(self): self.generic_test('v2f', v2f_data, None, None, 't2f', t2f_data) def test_v3f_c3f_t2f(self): self.generic_test('v3f', v3f_data, 'c3f', c3f_data, 't2f', t2f_data) def test_v3f_c3f_t3f(self): self.generic_test('v3f', v3f_data, 'c3f', c3f_data, 't3f', t3f_data) def test_v3f_c4f_t4f(self): self.generic_test('v3f', v3f_data, 'c4f', c4f_data, 't4f', t4f_data) if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/graphics/IMMEDIATE_INDEXED.py0000600013464101346420000000455611266427714017204 0ustar yohyoh#!/usr/bin/env python ''' ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest import pyglet from graphics_common import * __noninteractive = True class TEST_CASE(unittest.TestCase): def check(self, expected, result, dimensions): if len(expected) != len(result) * dimensions / 4: self.fail('Incorrect number of vertices in feedback array') for d in range(2): for e, r in zip(expected[d::dimensions], result[d::4]): if abs(e - r) > 0.01: self.fail('Feedback array is in error: %r, %r' % \ (e, r)) def generic_test(self, v_fmt, v_data, c_fmt=None, c_data=None, t_fmt=None, t_data=None): data = [(v_fmt, v_data)] n_v = int(v_fmt[1]) if c_fmt: data.append((c_fmt, c_data)) n_c = int(c_fmt[1]) if t_fmt: data.append((t_fmt, t_data)) n_t = int(t_fmt[1]) vertices, colors, tex_coords = get_feedback(lambda: \ pyglet.graphics.draw_indexed(n_vertices, GL_TRIANGLES, index_data, *data)) self.check(get_ordered_data(v_data, n_v), vertices, n_v) if c_fmt: self.check(get_ordered_data(c_data, n_c), colors, n_c) if t_fmt: self.check(get_ordered_data(t_data, n_t), tex_coords, n_t) def test_v2f(self): self.generic_test('v2f', v2f_data) def test_v3f(self): self.generic_test('v3f', v3f_data) def test_v2f_c3f(self): self.generic_test('v2f', v2f_data, 'c3f', c3f_data) def test_v2f_c4f(self): self.generic_test('v2f', v2f_data, 'c4f', c4f_data) def test_v3f_c3f(self): self.generic_test('v3f', v3f_data, 'c3f', c3f_data) def test_v3f_c4f(self): self.generic_test('v3f', v3f_data, 'c4f', c4f_data) def test_v2f_t2f(self): self.generic_test('v2f', v2f_data, None, None, 't2f', t2f_data) def test_v3f_c3f_t2f(self): self.generic_test('v3f', v3f_data, 'c3f', c3f_data, 't2f', t2f_data) def test_v3f_c3f_t3f(self): self.generic_test('v3f', v3f_data, 'c3f', c3f_data, 't3f', t3f_data) def test_v3f_c4f_t4f(self): self.generic_test('v3f', v3f_data, 'c4f', c4f_data, 't4f', t4f_data) if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/0002700013464101346420000000000011317255174013440 5ustar yohyohpyglet-1.1.4/tests/image/DDS_RGBA_DXT3_LOAD.py0000700013464101346420000000102611266427715016625 0ustar yohyoh#!/usr/bin/env python '''Test DXT3 compressed RGBA load from a DDS file. You should see the rgba_dxt3.dds image on a checkboard background. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: DDS_RGBA_DXT3_LOAD.py 823 2007-05-09 13:01:58Z Alex.Holkner $' import unittest import base_load from pyglet.image.codecs.dds import DDSImageDecoder class TEST_DDS_RGBA_DXT3(base_load.TestLoad): texture_file = 'rgba_dxt3.dds' decoder = DDSImageDecoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/CHECKERBOARD.py0000600013464101346420000000221311266427715015631 0ustar yohyoh#!/usr/bin/env python '''Test that the checkerboard pattern looks correct. One window will open, it should show one instance of the checkerboard pattern in two levels of grey. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet.gl import * from pyglet import image from pyglet.window import * from pyglet.window.event import * from tests.regression import ImageRegressionTestCase class TEST_CHECKERBOARD(ImageRegressionTestCase): has_exit = False def on_expose(self): glClearColor(1, 1, 1, 1) glClear(GL_COLOR_BUFFER_BIT) glLoadIdentity() self.texture.blit(0, 0, 0) self.window.flip() if self.capture_regression_image(): self.has_exit = True def test_main(self): width, height = 200, 200 self.window = w = Window(width, height, visible=False) w.push_handlers(self) self.texture = image.create(32, 32, image.CheckerImagePattern()).texture w.set_visible() while not (w.has_exit or self.has_exit): w.dispatch_events() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/PYPNG_LA_SAVE.py0000700013464101346420000000113611266427715016110 0ustar yohyoh#!/usr/bin/env python '''Test LA save using PyPNG. You should see la.png reference image on the left, and saved (and reloaded) image on the right. The saved image may have larger dimensions due to texture size restrictions. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: PYPNG_LA_SAVE.py 661 2007-02-17 00:23:30Z Alex.Holkner $' import unittest import base_save from pyglet.image.codecs.png import PNGImageEncoder class TEST_PNG_LA_SAVE(base_save.TestSave): texture_file = 'la.png' encoder = PNGImageEncoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/DDS_RGB_DXT1_LOAD.py0000700013464101346420000000076611266427715016534 0ustar yohyoh#!/usr/bin/env python '''Test DXT1 compressed RGB load from a DDS file. You should see the rgb_dxt1.dds image. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: DDS_RGB_DXT1_LOAD.py 823 2007-05-09 13:01:58Z Alex.Holkner $' import unittest import base_load from pyglet.image.codecs.dds import DDSImageDecoder class TEST_DDS_RGB_DXT1(base_load.TestLoad): texture_file = 'rgb_dxt1.dds' decoder = DDSImageDecoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/MATRIX_RGB.py0000700013464101346420000000176011266427715015522 0ustar yohyoh#!/usr/bin/env python '''Test rearrangement of color components using the OpenGL color matrix. The test will be skipped if the GL_ARB_imaging extension is not present. You should see the RGB test image correctly rendered. Press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: MATRIX_RGB.py 1393 2007-11-10 01:09:58Z Alex.Holkner $' import unittest import base_load import sys from pyglet.gl import gl_info class TEST_MATRIX_RGB(base_load.TestLoad): texture_file = 'rgb.png' def load_image(self): if not gl_info.have_extension('GL_ARB_imaging'): print 'GL_ARB_imaging is not present, skipping test.' self.has_exit = True else: # Load image as usual then rearrange components super(TEST_MATRIX_RGB, self).load_image() self.image.format = 'GRB' pixels = self.image.data # forces conversion if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/rgb.png0000700013464101346420000015060711266427715014737 0ustar yohyohPNG  IHDR pHYs  IDATxweQ'Wu97<,[%9`` eaŻ &-&8,۲$KV4'pBGwU׹}F>:s=OoEggy;g׳zu_R׿Y ~}g^,~/~Oҷg)_~u2]ؼ9ps>sg/}_/}a/9+OҷgqO~ FX^~L\RG'g,)wO|| x3gz #w7=v}',z=7]ӧ-  uOAOᇿͷ~g)_Up}6d?cGG??/gN߼3.-2'BDx՗㯱 g_J1l!Gz"ϮÙǵ5oG^44e /~ 9fO=2up|&? G7韃)"X\΁=y <<,z/Ԙ>Ebo7X;~&qcTH#kРc(l! &@u0ɲ* t"@ĘhZ&]0!A5&3YRO!ΐ&0d7Db~Y4 ZmT͆6ǴXc +;nWxE7nB^J_ [K',O(⯛1kHJ߼O$!86L*] ^o0Ü0SmWD~ADK&?|1AV:LP$oeVIӥb MfDx *yES2܌ }L{?2-BXO7Ղ Xǂft1j=k}rǞC$C?_l70s w5dD Y&\lZlM#a{J47w&\DHK 1ɗF`5$E< :/ ySoY̺ ?ٍ1/$#O)Yά+hw=o\|aLͺ6͇Ą:7Wʌ˴9؎D*Gոz#c=Py'~ٕ}P;Tz##ZO@5W*Ͷ~hWbðK?~e%𞿤7үK-{K dB 8yb:ؙ Ǩn35iHKEҸ-#Sûw'n՚|@\OQe "&k4%!l(;cDH~d&c7ՠQP?ř2z5 G`iQ-;ag /2Sq=>>\zhףC 86Y1cu2TDiA@L[ L)QAP #4A"ZJw`mP" CM(c<8xlĪF`~#EۺI' GIpf Ǐe~Džf_9Jz5ѺIK+ify5iiH&+̂!%i{I@Ap/MZrhpAs74MQ2LL1hAK/L4gFgEQk$H֜1l0󆻿|k=N|ݺoCCPNgm/ ?_Yʉw|}pyjLj&RApd d~d)@*Xs"`X (1rȰmaE}^mK%|^XSb_7L4BzJyHfTJE6=m#zfQcM6f^Uk5%XD\|΄u# ~䶪U><+p~/h–8'Q][EJ0! 'fVWI<r1R"`&@0^^Q$ˋЙ' 宛;$IffWOl.)F [z5%IDZļ0%5YtVXV{ SX=&{.xdp=zsyQ"1?BAQ"Bo"x=BgsbAJDyJŴFY:❎]?YՈ " 5u"M$4c X 1 _{v A%/CcM`&j((VHig4dUu( ؋̎ v7̺Gn+d71y=v:rD$+s-.ܺ(mNI+Gv(SfGC$,"h0qlԁLyD(ԥ ӻAH$DB`PjiAM5 >(^."=!heV`ѣK&~yE-箩 LxfEl?MC$69hf<7+c/((gf;-QL'O~%M(a%%OaF ^5`3 TL ։@v=2dۿfVAPw@#}`$B鿺&;IR FL+{A]/%tƞo˞_!imqGEp~  [ 4D)̄;?u^8{f,1q+WjcvN=*YIVbJe z9!#gI6cG^ a$=)8#=d|[#S X\cBX("'dQbu)M eOõwۮ}(Wmia8cV&n;o6vbffW'~djS\oi/4.{'f8;.C3h_ӝyO솴ee# *vH|mHYQ"SDvKG*Bz+`JHH^Lu !3˥w"@da6.zQ_4kgWNz9'_C#fia4 ^:kȮOKGv d{v{|õw58O+5"'$1Qd5&l X@Y5<&_C,c+LPpn@ E(6NtCXYxIS$XiqH i%ByȺ$ 8OYaU t@ Է1)ܮFzbmuE./ 6 H3I @wޘ9}-.nG_P}l3E\bM,RP'mXې,ɌM$43?BP^EG"͐OlRNpTσt`zPR+PcQɯB9iD~nxBqg!o!-X\.(u7h`ȴjE\ %]#w WRp{Wi85X~bƄo\灔 ]AAO: qQ+CϬެlؒbŴլԚUoJ=庹\o%sz.AUET"dn5v.X_@.qH.*`w&jU > ji#[ϴco@=Qi]<ڙ-Blh4H%Cĸ "QG⛐hأ(%&^6ʿL yCEޜr'W9D7i` ^awlI S0dڼ?b-4p@je6@úϵ\,RQ47S5](@V hC~pE#6bhmō$J&:v(pgC^s8t+K-O䛸,Ysc9gDRkʭ@urWc5,ރ&=r3s1 pjd#@G(יDc j8 .`OD8* gntܙt#Nv?a 'H$^A$]'*O2HX-JkBєk4LƲƒkgp;vI8Z8C/|*[&5TdMqTb<yG46LHkA/XL_1Ȋjp;4/~ͯv1tԃEdKF)xp;&tr,AlQ$A'eUX1B?ڞJ핕ú> 6RڴenV!,nefH3C"\2t^# jx;(w4يSu9iOd%qG4Ɔ1LE~)CML7( FRzĶw+QB8V"1a0AAi!NxaBCZ;3oA;ecVT1JX4;~")rSw a2/摤Ǎ#Τ:L<]5'I-a=a@FS>1< ؀ĵ>xҚs>XiWb>h+\%f]jv$?)hr)WtQ`F"bUFIu}9A%%sGK&!Dv Rhb 7̍BيRBQ Ey<dԋtLfR0u #( o(H,$N#Km4װr<L=n"5(=OW~YYpKOB c2e>BRy%18V^t TE!/@xp~zX Pga&QrzË:Dm!G25N*BpDV:_zEG ,{w]2_œZ@1_{ݿ#.~c°i$%3֠yX+8E`bo O ʢlH-A]&FP$wQMaidE'eEÈ1 w&ǸW2).3LXA bYFRN#%2-:rhcܡɍPק|/)ʱW*tn=qTNDB"RT[Kt"- kOATX=u<(Tp =&O{vzR=|Sl `]i3 h[mD(:a=}Bd<5,ԃ7@~u7?6$vsY@[1ɷWkʦW݆5r >vK}ܵ@ _p=|\$P nlL\(&&M2ic''QtV)#T'oY\7+`zhJYזUiؐ8~R=jg@:IlT Od 169U锺Zs.B426nk0I"<9>FӠScs|LFbIg 'Eыy/@lIIa"Bjhca4WmܳZ% {EÐs2ql"C ]mAEцEe5BYجVZ0 4ʰeČGS50JLlF߄JX{H#[/9⎯! _o(}}˯!l ckP9) (I&Õsv`*C!vVlۧpkME6a%@Ndj0$u~`Po$"~IafD Qp^ȶL6 C{ǧ)5?̕c>D$"&^C[^4QIN8@HCVDE9 4gHQGc){ST~uA9ܜ *osNBiъve eVRFeSzYY@x`}y!VQJc,#2׸`ZR4YQՙNJ40piN8bF7v 0{@dZBIFWjB< q: (%:a=a %yBj9(C4ZT&th2psQ0>aU9RojfFHiZILNA}5J 0_'Ч @Ȥ%(g+"Iel"DS,Qj+8".V%FaϢ_/[^`,"P8g'"S\䙎C!!DVjD%[ A,^)||V[v*[M+Q:?VҢ&M,"0@oUN2%!"azl_&XƊ@T9ESJըQ 4J( *Jls^m=(;EuHq}Wh>0BӁ ?Ig"^dbcҸqД @Erz<+*@''Pn%\6Jch{fZl%jQyZT R7@z!N ,` G {~21=:\cca115 b6f_գy<X3\H=,X_?^q;-Y> XB.5(2,ѻ@á3Z^Ί`3Ҷa@wL%0l IV#V_Rɬ/ xӛL K RN-}yi@:{هOٺeԤ3"&s9,-QVdϬVGhNb0ElL_#eĔ%/R)IQ'dW& Rȁ '~KqpB{ C0 d*QB~#31Ch8O)` ȳN,#@u _^<vWfnWe]_ٙ?';m;?EΦ]nV; 26 d Ijxċqti k.=a"}z55sN%$vD}3ZuAA"l+Iy]Ov*JLD+ F,7u"-j fDD$BlO'gM>ꜪoDGbHP״V~~/-{Z}W1w#=n'.v%sYguߜd.qN)IJti'+f/vn~"ϴEeh aF Yc8Meq@:온":_^6Xv\ȓjpH[nUs FLBI{O\aiUL߸~ CXyʩl;Fe8?`_d_M6lj-P鈻 BpI=l!FdX lJ_[GCUS@w^]8aM5iѣdzN٩-eM/Hu]ne鋲ݞIJڏyYg#ٝBfWI@4g,aђQq\0ADGԟ|l`5&M'<ľ#ܯ}D \ &\PlKLkd)Yؖ5y]V xܷm$@uH VDd)q+EaAiϔHu28Hӣ'eG7p@~CsG?wNs@ RO~#[vq`%P~%X%&F%QS݂G;f!RC`tYIM,8)ͽv%wXV5{:v#ek+k6W]ެ8Ï욛v/ Ιa?+V?_xUGZƶjĝ㧦Zf#8VzI:^$NxZ%_pco7mgXڳ  /BWNytF/NmO\]le 9mY)ŕ32qSʝT`]'jw{ff/wɼLm)nC44Kk!qI J1IQX]Ozx3ٶδ1yuZ-[zpS@~Zmn `e˼mZm2ѓ~mHK>vB1׵wrmj׺>5%1T s0 ?(7)ʺˬf4{Y`n⁑۪KxV}EmxZm/!U}`I[Р& Bp(r QW uVׅ8T sXLN8ur-_rTV=.ʼhOTudۡ)E-Lj;VWГt.hht>y][nk/N{EvWeas6ߵw]=X)u1<V9m[K9l67زS36=b!њK_DKȭLqy' vp^uĘC.Bcf%.d p6`(% `J1OtO^f ؆ZgqÿDTt~x) dB;{}zx?aɚeVW-7e`ēwᄇcNiyGIJd3!$Á!dR|iMU߽6o }?r:"[hd)/ rrqqu>FJc{֧;/{Is%•Q}6eRs#ͷƴk4)D&(/-,zziuf3sW{Cר5;{Ň?؜!t$ ;&w͵f[h/]mLCV#zMyıӋjgZyۺ] k8iM~=`s-SPVf05j-tec5`j:oM_ rg0ǝM>ntlw(YqyϞkk<o審*kXtYY{Wl:s3 4Qk ʓQfKjldA chbNoTes푵߻ j@3.4/,hal*-g#S^A̶g$DWJmPl}Nx*Ă#=U%V'U޽֛;gs9;1lCzj~rJe^;̮-~6OTE٭-Y5 lwwy<I&z c'{}|ҮV]^]]dɗ֛:;wXT֙u~81׽ƫN\{o+6lcfb39ѭʡ5X[LD22klZ9YYU8PSG;0g )$j#iJgE:}m߶,I5cmWwm {$ S&{:f̹{W˭X7wn@I7.5"<9&Q*RD6\=pϸվ勓_8Y0-s{!3ߚfvrb{Uaz/NɕK׀ze/ڶlz9d!ܾVP~N `4!\Es%^K[ScUPUeE˪cJNݲڬM7k-6MYɜ8?rL>"UfskeĕB`hdd1)w~!ho s 7jAl s x9[퀡xNO> C+W̌H(Z~dC<0dx2 8;%1XA `59V}j`5&MOQUkִ*&J!gjIÍG,A|QW8{0pFr0޽okb~^#L­7'wO +“{dݹ}9QD1@-?8wwJ|m#C8 J=@DG&E+5;^ܴȎlwdeMf>'n;{ȔN6^Z ǸrثX/o뵞 XD 5tACd99Dawu޹[_.cd **[y^Y&ɳ'"YFu.{%JO#ecMa A<ۆiYQ `&p$n\]1mlw)ް汥ɼv(ٝݺݺg$=Q~-|*;IsQ0"G-_HRrJF7?<^3\gz33ٞ촻퉩M;ο[򢕵f],zh zh9\׆oil}=p nI^^󞫾\eX,*U`hkl c1okQ?4Lf7O_pesr`u(G4ݢa1(~ox78UVEʰZ.AY#;HPOA7 icxVBm?w·{>{i] aϫwpu|5T$'-w0SXS#VA7<@</KebW_>St]هG{`n~˞_TxŖw^xT.u;?r>"<9%lO3)r{hõlxѺ ̯ĎY`T{yev]X{o . _41':TfͰZ>|zMtZS=?n_xn5K\KA0q*")#ZT|"@~$5 zU 2bIrPBT$b}H%T#䪔PI&3`|:s3a_-[>k'UO%cDI- 4mh@5U`XQEa]~B1ȭ){B***[W9צ}i\NTy{1& `8N"X U~4"gHv!Gn.3ZYmhFʛ$T}bR.m:z ix+ΧM(ݮ2((0S۫تjwWWf֊#) n@xֹ#g-zcl{kѵZ'|]ͨ*̮|Bȩ Њh\1$.9{ޝ,p48S&>306|U"ԕMYYh KXUXS=TdL]۸viDi Wc׾FvɣOAV_D@4QӒU KP]i6(~yU>xgB*RI6O@#pf_Qmm^~ \nn/3}}\R%Ԉc hTЖWRsQ GSiG. kF1hDSxb rYˢJp*.5TvCd-VK2,.N'oO vv5WGUÒ*!@@8n%آ?~aX ꞵUjgC5'@,d|m0sP9UUaQAMAg2}۲CZB4Xk#_#Akk5dcфղ4yo XdWjݷC廿;Ҏr^јj&v3,e9=y%"J^dXDRj2$t+k } "<:%TF gxbɵ* zu`l2t`@$XCƛ¬5C_B3i׆s@U z,@4hȗhPc^.8r&-E\<|k>K?0rf828;Fkw̃JRtD@:ךMٌ]2&Oc*o 8E.aayϰ,|hE"G0KUjy<m;:SSk3%L.xuʕ0v.jeyv~e6H=2pSm1#=A_z AfʺeX_UYc%2.j&k;$4bty̫-:5ӺXm`LԐlKjc$BE&c6 H:*{{4ާl11!E!A\e{hӉB`XʊM&'WޘZ"Vl>/a^PۡG5yt(oT"}i!ՙ5HB!"A]j:ڡ^S'tzK'~_Dk廷?pCf+ιSt-M6QNS֝4&W`_̶,h#SQ)73 Zþ0Sy7``pLE6ʅDA@ߘ`[:LKݧO{7|` oϘM•2KsIH! 1D#H>_8FZ9#\ws3Eu2~R eMezՉ_m;WwWduBکm1.n4+:Xˎ펷9N^+MfUpX3oΰf՞hXӭjrT#䌡 6)JˆM oW^Կ?V|L;MQV`57$qC7;x`|f Nh"NkтhW|/0sòKCURU:ӭ֤EjwreuU_Uhe_yku}ڠ%KlE# "x_ &|0dZRL4`ds}g OTJwOJ ˠW@acRŕȯW?6?xr8"~? G2%w:Z%bܐ7@4ٜ[Y-hپ'3%] 㡵0AUÃNJDe(d̲m̿'x//\+촷X[t9;U=Se)NvCܶt W,92C*ɸ5:GtsYC )F]5{Uq⩎X#=?u՟L!Ai0 =LY'/_XLΞ8l@;; ?;9/㇮y;&D<(PLJUvf:+6- -,u: AU ްVUQFC;5& eDm1e j˲}m%kA0tmOƇt=WM58P,>Gw_ٹlY5:;gh}œ_}Q{w?ޝTۻgMljWSY;NlrɎ^+AYj=/JSShꙺR) 2%fb/ r g}7U_ҍn7/>a HsŇ^;тFsGyǭ""$#LOt?}iM8k~kZφg:ZkPr=aXrՄ2fMqjmgn֢  gεs2U[=nUe{'c%R8YFAtÃK}c;E,.}"}ֽ(:E|"_\3˶#/yrϟ0@x=XtW]·[[/6M{nnLu}f|Xޥ $q8K0D *+TAU+_Lο]/y=ws.ؼkdn Г` `<23>24YVoe Two"|UI YמN9Cw|+LKM{>j_1?_( )6DHp-.@g@.\'öŶqy6XSmMIMVc>XȃUTyU[_CUu]VUԵjYEi3ZP\F;v]{͎K.2m[kk" H4 I%"|f ZΎ<]\o~`W+Ai/ btm; ~ş%B~GoN=s?3ް3{!g*^8v%Wh8ŨjJӲhvn{gKeGKYYh&nVE AnLWUQtrr&3j1h5eemTwMjB,l2(Ky&5j 3,syu/]{_AF4աt83a9:BƺTb{e.(p3?{qٶf&bFbu [8$,W+2NOvi"}h[hs-k';S]tAv۵$]U5A@3_ݧs]G >4jg1Lh:ČOׅz_]Rn;U"m ^_uqS-"dEHScaSaIo $jgXhѶL=,.Pf6˼o0o -Tk}0*c }A~ ǽ޲@t%$ }05Uz4,(cҬGc|pdJSOC46+26*k N\ߐBˣel#*sYrQBnwtr<۠4LxFEĆJvs75N.fIͲ3hBCN \U;XmV鸺ĄzCwTv11eId^5V6fnY"g^% $jTr#c\P&.F0k]wO~+CzN*{5kCgiYp8ln֊aULNunʺ;"^Nt3դLu9~˛G!] #k醢h{?Swm9_ڵ*}?{z2&JK˒  z1UWybt<&Ĥ-N;Q"ĝY4l cUh$6ؖay !݄oixw0ЈB-W_ eځ/1DM&~˖l{b"hg x'42;=ڵcr0 b c㲫tꋇ5m 8]Ț 8*s`b߿Ǻ/| ! Q9,S FD5d`/&x3'"?JEĜy I6b>Hy> ϠQ:˶ E ?bKU*a>n- VkܥnۿN`3g3њnʹ;3Lsg^DD`22t#7$v8XXm3TɊ ɠ* ͇ nz=wicw&'K׷ڃs m;z';\ΞT O5,H eخ:>Z0 ИJ*RQʛAe>Aԋ":Q<#& CԘޚX1n2V+Õ!sf&[,ˌ1ҳȹ)–Ҕeۦ?-eM3ƣ+pT َ+yYj,|Ws9`»;~6T@xɿNxO?>!Ͼ0ƪAwi68C߽zٗ+>=E &sz|u?Q~U)STЄ8K$5YN(/TBx"0iX"@0er*A]M%=&)I$h;sZkbPQXXKC b7=yzRM`akOf3gW Ƀk%{WS4CC D~xd%L2!,/ }>6M\sX=ryCo{tCj*߳$ָ3Kx 8 BJ^DE% !}q-D]`{)u,ڳNxxpy9TY[!/v\3]O{UPP5بCuh`'.óΙ抡)>B>47h}ow]~ۯuOn~Ͽ.\rT/{Fkpl ?~ '0aqm&;֮Vܗ-]UEe0$ |cTn`j9su*RA =~W> Nχs|oܼs#Ka+LV-ڛݰ|PN߲ |ƴyTO}cZuf0Fc_\sbn_q} C>Ż#K8!ӛi :AȢG/5a^0)behNvU**IH *2iB Lx(ms!J,ρ)h:9 1B1bxDgdrԾ}Zضu1]ojD LFTeg,e 5xNgPc7g?4\^ks65lA? X; b,]_OqyhrWǴƧn %qڵ:E$rcƝNMN<"p9#Na]$V~6ooPpAİJZ* CRC%. I]?ZU%G;4;L;hKt=r̼AR86z.npa~v "Kd}ɷcd!7N|IWzzX^DEn k|\+q4H,koq 1OGx@Li6!)FP|<^ㄞbn%&X$[!X0PWXb0&2G3-g5֕keV\,uZuOkfu` =_c]fδ󬅶]mֶXLQ=Ƞ"xáF/| T:+=qB rd3( _@4?%@Ǫ!.ۃ|#;~Q3CD6 5½l'VfϘd-ڪRdmf0Bbl$z_xg /n>=.vtqC01$ïV .l:mhwy؄@?Ɋ)/EܠݫS$8[~qJ(B@[8;a, :`9@Y"UacCt( wO2lr5kr@o%]Ujum\mWKֆ/|ޚ?~QeUe]̠+;?ӷpq-8:=u37|:mnǢx$Wѥ@]"ޑ;;+ ƮzO_^?!".S5PdFU޴=g=N#h->ĥkUHIM2! P=[ i"HR86b2^~ +!xϐg7>Ƈ.y]ͩNRZ[)J@.Ͻm5/οݵ7e' [Ǻkn:>c@{.zD[(Z5ݵ6΃xh=5~Sd DZ [ FRVˢR 8|S99xHHAT(1-]!' YNšCMsKᠮƴ}V?o;'=@9s4Nw~koDt뮃:O}C-tV8!L ;?>o'o93,DZ (b{(m4rQ<1~45G'5[ĻaNr?S'$ P;y~ޭ{CgLΜ!t=<{fi]PZS7XWbZNb .{Дmo9~r^wfVUeqYd߻4ˏoubZF;a* 5}\7<|w/oz-Į2ohq4WBF8W\9MJ!Vddp‰6 lАrB][cL WF]39oG8Ve AHκP#B9 gmo3i:9c$_JBvL=oK|*<53h˒XփQxyݥ'2 KLI[H eDM|ii ):1t%O+52qd4g|bL$OHsi`!P Vt +EaP+ 8(\D!G.(}ZARGbHf I1?f )f_#r!I V/8E6Pv[-A85}GŚXeR4UB @qf|{l jNZ"S6/=KHg][>C\u-%Jf8`!k&UJ>RVx:%KtqNC #hH"=m&MZ>D߉otbjΐ~%5c!T`ԇ(fY3ۘdnT^K f>7Z9 x|,F=xPl)4*BDr4ջ $bScY R{Q4m c&$Jq,rѩ#B`#WQPk-Ij ⤶b߫ȗǥ,I{+s c)&Z?}W}Р0 .1$l5lY(EKT01II@h*"{d f쳆0CD%#`\k'̑I眇P% xIy{v@eҨLQHڄ  MQÆ(6u4 3VXs xӤFfM^o.5:G k)m: 0}4 vlPB9)-JF#qC``l u uN+ԌwaJǙb#dgRYQ?^:Ţ2/iMP R@3=&$20/Fia& ;bX8 Z?S '@2546 \B~8IXHK U _ ~7ja /RU)UJ`%5Zt#dތaMd#bH#lʹbz¨7e=xKR\!f;*ڍ$DB4!0ME&VLST&iiq)Q)bΝWV"  Kc7.dفz;:ʘ.#:PRphIz5}M7h%peHD(p' ۗgbĤ!?k,/9Q@O .xLM0%bSMϠbL+ s5fB ֚`ZZTQ8{WY6% Ʀ[Q4 q/e%"\HE˫ B>$OoS㝇JU ĺS/IV<_;6'sf!ch}gS G:Y$K#;dT 0׊A860rKR Ө2nKƹ51$PJv eDADY6`Uд ݄)+"H™x:@<(}8>X mjDGKWøEP)Exo!*2a*EȲ%Q애Q~aUE /BNt)!eY07MY"(Ӻ"z1H)DNIPS D jhfKuY %D6a:ݠ~{+t`hƑP{xrFhlG$6AŦ\ WoWśIN QB]Ꞡ UBC/Da9NoK{@3 A\C E^#:izxnvc] fcXV4(Ĥo(NL[bXQbF+*eJ .%~"5p׈3,K3HBX1#i8\J%/TU 6X!8V]J& 'Q9$\E ,M0k\8:x-1+1L=q$<哗R$(CD#*yScFRī" aGg'7i~J˨&FWT&c6Mܑi ]ZGI& ~p|1)qi|zAb̅& 0b0LR^KIfߴ\lL'l Z iÐ%28ȫs,U3 4" iBJ{B;v*B,#AE7J/v# Zg0 YUvd z wXJHV2)$>q^cq&q648ot%=v2E #EoIK'6' 9֒ͮfV`əp[Q(a@ѰhS.uοUS' X(QäD闸z]"F8cOVX#p풤JNz=u eJ?d` 6*P+bpOJ]~ w W"KKK < 2Aq&PFk{B i^E@%AAQfS\ĸN4 ~%aj$a}yLC'C } c)=A 'Mոt̙F)L$ &O 6  i4ǯT!K\R$(; Ɛ&I\*>-E {s87U aꅈ7!eA̐.0d8LS/Ƀ02pOId*zK*Dj_= 8Df;U~B>KlqS:0&j`'Ƙ*+2$p"ghKz'2Hd!SBXˠpC|&+Rsg4bcvr'!T~IZ}zc%N0#ůƴiu!s -_)pgsSECqG^$^Kę$oj(f(e/fQTP"AZ S3 'X $?\XEsLON(0iqdޒO~]0 nQx*+/dIXC$ &Kh51m$-z G-S)YmnGLi[ &oԜRZPMJ|Q}0F qi IЋMI辥zBb1}D=,f!7lV"4&jhd2XujL N"zn'8)%.1E䧴Ty=760ZMner j4@/(Q\x:uY)7A4v P@vS{(1e5NB!jȌ+f$4iJTVDjOn%!PY1hX9 v$Q ԗD|݉ip$^pqu)ﰪN(y C!Apɦ#٘%фqVVL "E\)8I4j/#sR/wGTw"KqHqq4ϻJZ0š ,a:lMLS"" vس  qf C=@&Xɞ*ژ d0C&;O( Ys4hĔ;Kyj@IH['zig800Ŝrʐp"!pe4" XdnxԠ+$"C! )!qlGqλcS<>!]hQvq X)&^ w&U!ê .ZK\%14<~mIC QU Ḟ$)?:rE>=)K8SOcYѯzTW 0&E3 t$ϹtKiG!SDɰt,͙#i]VKt7跤WCI-.Q(@VC7+Y*MѬ`umoׇg|7hZ'lARȊW[#$1FY 8XA3k0GhZV&PDmj0>0SK'?|{WΪVV;E\vU#|Đxwz^hYNS b!䠁ɶjR0dFQګ@0(eDXɆҨi%RVZ8;;e;aVOA]jT:G]L|'|Moe_΂ǰD/$ cg̼0-l{A,C[rڞ0)Kt iŇn}ዞ9BxP8oy㫽e޶½o۴YH7B&ōWVC~@7 7Mo牖42/ <(z)H?/ϽA ʪ?dgzNk"(Eâcݨ/{M; ;O ;"qn?r˝}uEϿW9r@/8\Rk]`;%ni{'".)%n@=hcj GzOx(|$a &fc/a1O nymG>؁_7L6['hu٨ͷc>{M@tÑ޽aʗ!X8*ɃGO,A'bU]Z  8Y!2) M1J ODNBJC\(s9ZޜTm>_ِxē^k{qB/zwEg_pbf6wk}CUcWuq-_6i-_6CX\KϽġ?qz}Whz~[ovؾ+OtJ oɀGحs/y'7<\@CsS{Kf7Gsq%ۿ|8׾niϿe{5C}! o#r*ʕQBMK$씻`$L4^ɳ5"Ko]]kU"\_bfr޷yvۦm{w˾ԛѐE^_D,sӸoSs)5Fj7$>q([{ow:/Lg~E/uI#W╒b5k/1w=;.P߼4wv]+|}X\YR_^] #o^xի:"W=y1M2{ 9Kz c %AP z Ayd¨.5ĠPh9 p&O76G:n/UW\p-'dӚ= hzbna\<}W? 뷫' ƟD~ѿx㧏| +n~Qj^-w}}W]yu#]j(1*ȧ d&KѝB;c?]|dՠo&<ՙO5d q9HP@B bm +DkX^㽒%/͍"`234" i~zoA5X\Y8|b |3Wʷy~O|s]#'^xū  ބ!!v޹x8rĘ!y\RZW|ļL?l<,K xw=+ϿAҿF!SZV Br ?ٙ}eUxK M31\இ>贺ăR9'Axy. _~<}׾ʓmyӻ}MJ]~]k7v_wM_ #w뇟]2 fO4.p@5:Rݢ}~kߵ޾+{mg{~G>'rYa^vRSHjԷ]9 {F|%]0дxž T|Wyh0,S~ڦ:. l8)%ouR D82\4[SXi,O$pYs'#/hł W&l\$97t(ɑ>zqSm_ٶHf?;[QRfU`0';;[zZ9_h'xWe @ f޻K1h^(fPq 6ܷBv"YinmYi9&'N T޼κ@(ȬZ}N✳H+[Ce6-!!Ɓs rgʲZ#퐻$VqBb_{Amjj--DZ+%]1sC=+'Y#h;V%8mLٚ!|NnwOewhoI Qsjlܠ.]xPVP-#Aʼn4IM9j1OӓwaSTm5y%*_VKMClX65Sdcчȫ\ ;{FѸHKRJE3(S&MCr;"YŰ (]Oc^9߰*e.8xeѼ,}4n@|XpK^ \Q$0x5 j@PpFֆ\$HשQqAo>Z p 0Y" bN&Mz/ GG(Dd}ܮCJcBGQ\H?]$֔BsdGP($]C#4D/<{1GZE0vy@ڹ 歒u%t4 2~V2T|Q3 cXS&#gC\4Ӡ`(mUOIը3YTz-D/RU!ƴ0ShCU'2AX)J3.ᆵK22>W;NuNfyu˵H7V}%WŒI&Anh=p#E3ߴY,qfvZ'y5*~g>?qv?&fi%'~f*fJ%( |t5 !ɚ mN6+Yh)Gap[F"sj6xx@v-#˓ezzZFXu(m"$=*iOړz@VllTM]&%k#cj-a.(7RuKxBkJoua^Zʓ־IT`u)^4 J8!*6ʡ$XJŀq\y)tpgX*cSy}tbQ.|m)=AihJ~@\wΠRjI@Ou#=%SSǻ޽4Xbr#5KWVo FuZ^x &kQ5wM౛P+R Bb&^x7p Z_wCE-!'SУ=t\[7widvOQrKV?G;]U 3/}$>{$3XpDǮ RӉ}#ө ؛'2܆NN|[f8" G};L6Tm@Ѯ-v9\{ w˟YH,pT:X{ѿ6 8~ckH]F DlLOLd f;8&{?]zΦ es{VDݏPJck{?|25> WzOC;awP;1j=1n&> 1DZe`Tqr_:rc=첦J{[ _ZdU[1n;sٯ2 +aCFL;q|g_v-5txr8G#9#o_x[;?oL$G?[٥7Pl]tZk["n#:?\XPu#o )Ye}ٟ=y0ͷ.=~Ͻfȶ_Rƺ{y ˚jwgt8.`2 /;1WԧpKÃ75M u 㵍 Y^YgCR9Mo3'\ f*O ٻ ~A\vPpTt*׈ 8fRek,CdO["V;kgb5ԝJQ+9RZ{>y"ƹ1gq\TqF⼔' S+C5*!oh;&ޱʂENL|_|{yVƩVsݡ,(4:FxrT<EEuwIv+`N<590ۖ맟v3~KÃJ` fO`<F`<1BEPD91OF#abJ 咘gxacvRbVPN"5S#Hp'FI%6~ =vb0>uD:Z[j D@ա U)@ՅL)z190l0#kMxE΋ǟ8θ%ٕtdى*#U5'WmR(G+8r"JO~xRUH(5W ܩ)Y.s?{gffFoE}o_91pݳ{TI&T.BRD2A>(+ȹbY(zT|*?.O_8 ''Sԇgop*S4OsL\C+{ Ι=AL tX*RRjPC)^6p /3^a7k^,xĢZMɲ}:w6'_Cm|koiƯi}уU]L ϟ0i.`T}š3ɮS]NFf2T+mcS:NtVysCɊ=93:ۚIMO!+ S' b(_QJ{G`ϑd 1!=,tkg^!h;H7C6*B>*5MAWǹmG sӔ>Ȍ@m?ٟV~2v _4t3O@Y+rߵ'ό6/OOABÛ73"$ԙ*ӳ{EӠ֌?o(&pxc\ aCnJj㑼bE`3c~Ldkyr8O,Vp}c_܉jSA-9uTJI@I.x`CrN]K$w:`،Cŵ_q==bt9bӨ˱sc,7.._A'8&L\Y"dqف04KUZq\9:u.uVQJVӛ ԙ0^dpRGȢ_J Ȃ\']1`<2t(МЅ&Y'`$ -9BnN y%vT:SSHqNe}k3,ĔzxԨD]2p\\f%-eK ς4_qkŰ~H)',?` %)2g@15!.I'c%$ h?JA 58gPUnZm{H-H 4 h12[~鯖Hi kPL3 l Ԛk.@7 /` t Wǻ'0@C8[ o1L<٘yf+a5Dُ ( 5^$)I()&/w<7zc`fi5Qd hS$pꔲc0ӳNmND Jerڀ.g6ڃғjOE#-n'~~j|3BŜh`țV9) Q˵A B㷶= G' ŜkQb[sބJcT+2CdU0AfbE4})?،'%NEr\1CbԴ:ˌE0Pm!`X# WE!"m'`׉ky݃[nDeGrs$J\`5\~I ޕrӿAs$Rd/)g ѐG9j<KO'uh2=&^mR5c;C_7!u6$XjًYEbz> {P2nrq~Ó HP΂=sRhCªЂ=\@MUWS W K\04p:܊J)428.W' ?>.#g [rG '~s"2{(#RtK]z=zNhaѺ $2nd[c#S. [z"hy{Dr,.+PSc8@K˫}kvxMͭPuAdlcuk`զ32N⩑26u5+wg7* e h9U9ڧ?\K⚂+wd,nrW,fWjLW=T$yK5s{fF N06u'p ط@'..Z&TϘ`Q[FQ2 <6-7?<&/=P 9`ߚ-tuZ{ oI ';kdz`<zeٮ[79=3١?۞6㦿◌/kȱLHϋks(U7?.ߵ:X</Xqּ;|33C`_Λn9Bn%CkKKn(Xyރ1hrgߖNSU2/t4908yq|j87htjp @nm"d vTLZ{^L@kK[?k _hEm=c:عHťѓ :lj+$fhٚ!vsx|&ߌLOIGe"(P@q5_p:NYeŦz`YUE~攦,xc!x+Â&^=qu3pz_=!NYP!Wt(lnHr}(_  -WwK۰w~2swGͺ p Wu"9 )r- 1BRS LQּML$z'^Y^ruK p4&RrH *%Dٴ&V?FׯGOݹ2> D^-"dz&RhFK$-'8XhYͭW>2ف|LcrѰ$zNr8g[0x_{8v唛S ɩ8w,L!ɇ0;x"zh0-Cr#dK3̅ dLeP]*yn*J`( TGWzJi[Gw&t8k(ItҝXVr 0K]MC'^sGHs-+ `t,/ WhrtIa s.Ef˱GZSm/|{okӓY5 jV'&o`k8z<5=u(7Y)/~a`/޾g{'ZT6(@ 3[;,;mMXk]ᆴ;g:MU(ͮ 9<iiyX"sm>=?9{ &虒ED%kӜW)-hvbFVAϳImAwBHLH+{6g{j+D6WE]A'r"u7n.YsrX(3#{iٚL(uo6U>4'.ŀpqdPrCd8,Yt- GG>e%3r,T]srpV{j(޾~pz={3V}2wi "}Ss2Xa9ewZw2n=jxyH̥%PBuT?&IyX"(-X̝.ΣpJm`ҩ!4=)C=oڢz/$i|l f^ }q Z?,77F)XX0N٬or "%h?sꯦd8#硥$OZ^)s3.f{Wfa3)s<| D 0sJ33Iy&75$ %[FBC ́\lƲh:7P͵J2=֎&,v~ b.ޑ(kzfsZv8dyǴ<-A)~}W|l+Uc6c~Wppap}3$#أ?ؽYVm&#ؾ~8Ǐw8F- \JHieSic3өXKM,b%`>WhziO$oӮSMLJ6Ig-uCQ v*|\ >KE؎&1aTT!Ai50b&j4\eREs3 @O>BeT5P&[낙\bMP V&#S ɋ1kz̞1')6|\=LF>1f1e Gn2gQڂBch+uf?2պ~!I@WY#޳?/XDR"hvd^/D/?S?_QB# o0,w1uni`ғȂ;_xPU42X/F^,4 3+[JPf5s6KK@hN1ٰ,͑8iߧw{4,PV%ʼnՁ{5SnR3fO gSdDaHh[',aA½΍7]RگyP WO.ݒ5qhZxE=SfW6ӥܤ=sHɄ@HJ/fTa+߇$[xt&zTXtCommentxs.JM,IMQ(,PHUp R#epIENDB`pyglet-1.1.4/tests/image/rgb_dxt1.dds0000600013464101346420000010020011266427715015644 0ustar yohyohDDS | DXT1vv_vߗvvߗvߗvvvwvvvvvvvחvߗvwv}WvvߗvWvvv_vv}v_חvvvvݗvvv_vvחvvv__v}vv__vݗvwv_vvv_wvvv_v__v}vvߗv_vvvv}vvvWvvv՗vv_vvvwߗvvvvvחvvݗv_vvx``vvWv_v_vvvvUvuvv_vݗv_vvv}vW_V⪪wVVw v}v]v_]vחvuv_vwvv}_vvvw_vWvu_wvWvvwvwߗvvwv]_vv}v]vvwUUw€֘@wUw€Z_'w\Uw€k}w\wUUw/TwU vx````uwUιwxwx\\ɨAAwx55wxTTjcw%vߘvwxVw€\wUw%vvw`@@p-%wUUWVw\wUU+5w€TT€rr wTwUw w@w€՘À``w%5wUUwx֘wUUVVvwvvv}w]ߗvvߗvv_vwꕕ?x@@v%%U^w€^XUUAAA€%%%€x```ι€WWvUUw:〬x\v€pxU vwx````5\ppP€xxTTTTιAx55€TTTTT€r޵ vww???€TTTT3)***€ܖicT5vvwPXTv€Xx& UWvUU>55v€TTTT€rrrr T&r€%555@`p€]yU€pr۟UTT*vvvvvvvvUUUU@@͹€UUԷ WVÀ\սj〵W|xx}k`\U5 €\\䀃U UUUx```〵u\UHx5TT\_z5% xTTTT^b 5UUw@@xUUԷ€V\U5 WUH@〕55Àp` %5\UÀ5 €TTTT€rrrrÀ \bU% X\\'iÀ55\XP& UU_UUUWU]UUUUUUU]]_V^xx``` UUU_JJJx5xTT\ʡꕕUW€V€TTT€rrrÀ ^}W@€ 5PÀ VSÀ^5uUx€ 5@€5PXMÀ%ꉡ`hC€ 5p W \UX`k %%€U`Wg ˱@€VPx xqڪ`€ZP@W€y€ ÀTbÀVڪVWWU6@@@@6€5555PPPP6ÀɉÀ55W_\PU6Àɉ UW.T5⫡"⿺\TT\ubU6€5555UU6@@@@À55Up`@6 -%%pÀ^\}pbU7À%%%%€X^U6€55U^% 6h@@€W55}x`@6%%%%˱€6V€p\\TUx5ppPP6€Ս OxPPPPx .x`pPP€U- €_^XXUUÀ```U%6Àyppp6€ ÀTTTT6ÀbrrÀ -UqÀWVTU6˱BBB6€U555&UuUuUW55V@@@@À55PZU5À  ^WXUVɂÀ5W U/55p`U5À5%- 5V@@@@€55`xU5% 5Xx_`UV%% 4À^xUV%BCABV€U55 Vx5g@ À5W`x}KV%%%% À> WÀ\XpUÀ֗5 5PPPp5x px5PPPpÀ }€V׵/5pp€ -U€X^_X55€``XX%U5€pryyÀ }TV?5OCBWU֕/VÀpp5À55U555544Uʩ@@@@UÀ5555444T44444T4T4U@@@U€555'44444T4Ug@@@U€555'44444T44T44T44T444U€XXX44TÀ```4UÀppppUÀ 4444U@@@U€555444﫪4TS4S4S4S4S4uS4S4S4S4S4S4]S4S4S4S4S4S4S4}S4S4S4S4S4S4S4S4S4S4S4S4S4S4S4S4S4}S4S4S4S4S4S4S4S4S4S4S4S4S4]T `TWTڠ S4}S4]S4S4S4S4S4S4_S4S4S4S4S4sSUsSUsSUs`ssSUssڠ@tҪ%ss*`s Us* sSU}sSUSsSUs\s sڨ^s"Us㪠-sPs*UsڀsSsSUs2㪪@sWss^sڠtRsWs5sSUSVs sSU_t\tҪcss\s㪪ss`sSpSU}S 5Vt۪!sڀ^stR㻯sSW_sSUsS]sSUUsSU_sSUsSUsSusSUsU}RꪓR€````r?+€@@@@À%%%% ÀXRUjÀ %55sUs땕5?Àz1TW5À `x~յ UÀ/555ÀXXXXUrÀ^\ȡRx```ÀU 、ppRÀ^- rR_À-V״f@@xW5%À sUUÀ\\\\ÀccccÀ\\\\ɩ1ÀÀpX\\1䈵1ÀÀxX\ ÀTWWT。br1À~% r sUUrU]sU]rUUsU]WsURRsUUrrr€````땕*Àԓ@B{WÀ%%%-*ÀPPpU U%-*?5r땕? ÀTԔU -5ÀX\XXF TÀ55/ÀXXXX〩UÀ޵5l¡rx``p\À UppbÀU-WÀU_X䈁ÀÀW5W0䈵 ճ`Px%%UÀ rÀ\\\\Àcccc%À\\^ճ^rÀ5%x`UUÀ5-À\\x` QÀTVWVÀrrÀU-WU_XճÀ r着rrrrrrrrÀp€`jUU€ %/*À\K "PÀl`뇡U*-????kÀV UÀ- Àx WU$ ÀPPPUÀח xX``À 뇙맡^맡5뇡^먡p@@x%%/ À\\fc뇙맡맡Xȡ `뇙U `뇡fT0맡^맡믲uUWw놙說놙Uu]UuWW]]U_WUU_u\kUUWwW_}U]W}W__UUUUUUUUUUUWUUUUUUUUUWUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUWUUUUUuUUWUUUUUuUUUWUUUUUUUUUUU}UUUUUUUUUUUUUUUUUUU}UUUUUUUUUUuUUUW1111111111뫪11111111100000_0000000_00_000_000000000w000000w000w000000000000}000_00000000000000O0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0U]O0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UWO0U_O0UO0UO0UO0UwO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UO0UwO0UO0UO0U_O0U_oOUU}oOUUo/oOUU_o/o/oOUUoOUUoOUUo/o/o/oOUUo/o/oOUUoOUUoOUUoOUUoOUU}oOUUoOUUo/oOUU_o/o/oOUUo/oOUUo/o/oOUUoOUUo/oOUU]oOUUoOUUoOUUWoOUUoOUUoOUUoOUUo/oOUUoOUUoOUUo/oOUUoOUUoOUUoOUUo/oOUUoOUUoOUUo/o/o/oOUUoOUU]o/o/o/o/NOOOONNNNOOOOOOOOOOOOOOOOONOONNOOOOONNNOONOONONOOOOOONNOOOOOOOOOnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn}UWUUUUWWwUUȢxy_zՎǚ U ծꪭUWW__WU]]_UU_}UU]]WUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUȚ` rGiZX{ifsUi~zx`Hca*/m'l ծ UUUUUUUUUUU^~UUɥUUUUUU ```UUU U @xW+_UUɥUUU UU @xW+_UUɥUUU UUn ɥWWWn*555UU\\\ɥՎWTTVU}UUUUUz`xX\i//sj׶6/|k(|k%{cixxxdjca*sDj==/tl )-+,u=խJ -`pnTUUUU- #O``` ```` `pp/TUUU- nU_ *`pp/TUUU- nU_ *=b?TTTT5555\\\\BGVVVV 䪪lfr\\^Vgj-- sj//)tgkrz{ItFk+/-%)tej^xXxkjս-/t&c* )ul+*j} u5?/̊- xX\\/Օnpp`zUU ```` - PPPpUUUUbGUUWT5555PPPpUUUU?UUVT5555??b?TTTT555\\\\CGTVVV  W  퉳@hkxxs |er7/)|Fkjzx|Fk--+|jzx'lc--t'l) u u'l *j}t+/-k}??5   U_ \\XX/np U U ````%UUU'pbnUUUT -U~U7TWU% 'p`nUUUT -U~U7VWU%  ?b?TTTTfUUK\VUUkՕ5 W , UU, UW, u, U, Uw, U,䪪 ^ zW %z '* JU J=, UW, U_, U `ppsr jbr(tk Itgk^޷= }s |jxxxGlj+tctGl=/+j}t/=Ju//--, , , U, U p`_UUUT  -U CO __ zWɵ `` UU } ,UW ' \ UW UU / Kݡ,ꪪ ^,UW,UU / Kݡ U,UU 5/ W~ UU - , UU, ]K,UUK K,UUK,UWK,UUK,UU,z`xGz%--'{i^޾.{rs(*զ`^^aHi/t++) -L+UUwgsx\\Vsjޗsjs(l~ uc/++}t }cxࠇd[-/*lG\ *}l/kt kJu=?//, K,UUK,UUK,UUK,UU+^+UU~GUUUUU +UU  K K,UUK K,UUK,UUK,UK,UUK,UUWK,UUK,UUK K K K,UUK,UUK,UU}K,UUK K,UUK K,UUK K,UU_K,UUUk+k+k+k+k+L*"@ jX^VV%rtj---i|k`x^(ts{CG{ci^\ra*gtj-- ugl --+K)u-K* -'sl~t'kտ*tkU mdꂌuhd+ }*u]dzG\S..67)eF\/d/+Jk*+팝 k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+k+jKjKjKjK_jKkȳ@gjTVWhjCbtj//-)tFkx^ZItfkʋsjWVT'lj+ tfk+ *}l/ u--// 劅/-tk--) |tUtlzzmul-u e-/پu-5*\@`dS 텆T+ Km+ ΍U_zPˌ^k-jKjKjKjKjKjKjKjKkJjK߿KTTTtUUUtUUUr UUK/Ujc=#@@@tUUU j@KxVW4UUUj/TWWU/555j@j^Wϼ_UUS UUUK UU jKWjKjjjUjj}`pzgkވrBBc)|ej- sFkXXؼ|fk |jV|'lEc-- tl **}gl* u/?Jŋ}5555Nj}\\kulUkulpkul++*%uKm/ku=UCB*m[)+--J} ]} U}sB-j\\)s-- +j(u+kI jWjjWjWj]_jUWj]jkTTTTt4|U_x@@뫫 <@@@@ <#@@TWUU% ^`=UUVT5555`pp TUUU- jlUU_  /jjuiUuuijꪪUwrpxX{j{jz6(tk `ptgk׵- Ht몊|j^^Gl%c tc* uhl-+//kt /jŋ}55=5)|V\xp})mzΕ u_ ΕR`<+dJ t;:Үit* ptupaAh}db*/ t++PFkz'tj֗/tk--+ l-=jI -iUuUU_U_iiTTTTtUU@x_U5tUUU5 <#@@@@ =@@@@ k??[+TTTT5555PPPpUU UU<UUVT5555iꪪiﻪՀ@hgc~__{r(-rksId ~+}c/+ +}t u[^d[lgd-*}t ktjj}555=p`kuUW^x u2Qpz+}@׽ }lն Kc_}bj* qsz*}btk++ ul+ +J} u+*/j5թJ TTTT5tUUUUkUUWXk-5U<#@@@@ =@@@@ [+TTTT5555 p`dUUUT -UU[+WUU- Gs@@@tGc |'ktkժ( m(d}d υ*uWS~zzpg\S/--*mg\ l/+ku{55툤x]zhs|-**qd?Ԯdbbz{jkfs+ |~Ujxxzzlb//-=tc t'l*J}t/--+j}7튭 TTTT5tdUPP\W\#UUUd<@@@@ =@@UU 핕UWW55* XU_Uժ+!k@@@@tl +*|lt m~lu m] Ie-?} SzpPX*eS+*\+*ƌ} پU_~P̕U zbppxrIl/-ojX|^_(tjitgk/ }Ht++ |jxxjgdz~lktgl J}t=Ju/-=5 _TTTUUUUUU-UUյ ա <#@@@@ uwwwU} U_ U Ww U}@``͍t]{kulUKudxtkm___xuKmߔd Q"Bu'\+/--I}**W} Ut5U  U?GcXX\^n'kr_s l UgsIdW*uc//K} u_{+}cxd[-/lF\%*}l// u*J}557'퉵 U ] U U ]u U U ] U_U@U  W]U] U W U U U ] UU W UUU U_((((@ku_^\X}*u^"|_ΝJطlDJ(5.*u'.*tuʂO(l{몼 aAi}j /.i}++/-/嫪(((?h[,tk+tjl]꠪,ujlUu\++KuUlH\K<&JmG\--΍d+k̕k ˕ -((((((((﫪((J#UUUHUUUp(画UUU#UUU#HUUU`(E(UUU5CUUUCUUUUUU\((UUU-CUUU(UUU#UUUhUUUX(ﮪ('G'''Ʉ\xȄ}__(dzQ\^k}8-5/.\+??=նr͍ec}azj y'K} ' '''H'5= \t mtlz{ulul-/uKm/u-5Jdz*mS-텧\/+ Ʈ}- ύ^q͍ '--- ''''H''''HJJJ@pppp('5 UUUHxX^W 'Uյ%GXz WVTT'U5d)\'0 XXXXG'G'G'G'G'_G'GjG^GF{z)t]|뒮d5%rpXX'kߠ t+&յ+G G'G'G'G'Gƴ}XXxx}lkul`|Km_*u t hl*DJXިk[˅dR[ s0h}F G'G'G'G'G'G'G'G'G'gJJJJppp GU5 gpXh(*' "@g^UGUUGժVW^X D@@g\WUUG 55XXXXG'G'fGfGUfGfGfGfG]gFfGghFH^XX m-)g g&]gŽ f'毪fGfGfGWfGfGfGFɄxp`)u-)}+Z`\l0 t3#Զ̍ l`xIXhgti*+-셈t -+-& -F fG}fGufGfGufGfGWfGfG]fGWjJJJpd@gWW^xgF& "@@WWg?5XX\^ d@@DUUWT g5%XXXXfG_fGF惘fUUFfUUFꪇfUU_fUUUfUUwfUUfHXf0) FFFfUUuFfUUwFfUUFfUU_fg`% }W^G}U*Z`z@/ 텈dնl KqZz}k}k/--.q|+ fɵ fUU}FfUU}fUUfUU]FfUUWfUUufUUfUUUJB@@ppppfE`e`fWVTT %U F^ FxTWUUf %5aUUUTF^e  XXXXfUUFeeeeeeeeeeeeeeeeeeeeee`ŴzK}qd֗?7d`pͅZ}(gc ( eeeeeeeeeeeJJ@@ppU*DpTVWWeb-UUUU UUd\UUUee+UU UU`XXXXee뫥ꪥ﫥ꪥꪦ뺥`@@it7' Kε ff瘟JJUUU_UA\WUU몥`U&XXX_WuWU]UUUW]U]UUuUU_UF`+) uuUUUU]uWuUU]uuUUWWUUUUUUuUUUUUuUUUUUuUUU}UUUUU]UU_UUUUUuUUUUUWUUUUU]UUUUUUUUUUUWUUUUUUUUUUUUUUUUNUUWTUUUUUUUVTU_UU5UUUU^\UuUUUUzpUUUUUUzpUUU UUUUUuUU-UUUUUU^-UUU\U_U_UՕVV\XOw?T\XX5555\\\\ppppppppUՕ,pUUՕ5, \U+XXXZ着着$$$$$$着$55%%q'XXpp5%q`pp`﫫5555\\\\'?pppp'?pppp(??pppp%VUUUj``$$$#$$###$##$##U###W#####_##$##w#$$##_#w# @/'77``% `pp' (@H5555\XpU5pppp'???ppppGpppp#%5^XU%`pxX##]C#UC#UC#UC#UC#UwC#UC#UuC#UC#UC#UC#UC#UUC#UC#UC#U_C#UC#UwC#UC#UuC#UUC#UC#UC#UC#UC#UC#UC#UC#UC#UC#UC#UC#UC#Uj"UՕkF@``"5@# !xX\\" %"WW^\!5555"(* jx"X\WUG" pppplp"TTT#--/C`^"\WUUC#UC#Ub#bCUUbCUUWb#bCUUb#b#bCUUb#b#bCUUbCUUbCUUbCUUbCUUwbCUUbCUU]bCUUubCUUubCUU}bCUUbCUUbCUUbCUUbCUUWbCUUbCUUubCUUbCUUWbCUUb#bCUUbCUUAՕ5BppXXgAi A\VWWB55A\\XxA5555A\\\\gBU]gBzUU]b#fBUUCUA_UppkB+ApppphBUUUgBVUu}bCUUgBUUugBUwbCUU_b#bCUUbCUUBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB`5UUbUUUb\UUUcBb UUUbUUUdAbUUUbUUU`p_UUa55UbUUa\\WUBBBAbUU`pp_UBBBBBBBBBBBBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWw}UUUWuU]UWUU__U_uUU=VVVUUUUUUUU@5Ϊ```UUU @`X _UU /U XZ_UUU!ƪ`k`^U _UUUU@k@@@UUU @)` VUU 5 !UUUUU]UUUUUUUUUUUUUUUUUUUUUUuUUUUUUUUUUUUUUUUUUUUUUU]UUWUwUUuUu!TTTTaUUU^p` ```` \TVTUUaUW^X @pX\VcUUU U- Ux`k@@@@@e XVUU U5 @JUwATTTTUU@``^U1UUU ```` ^X`! UU@UUUXUUU@TTTT`k@@@@@)EUUU U5Z ????ATTTT UUUUUU@UUU\5  ````@ @)``@!+UU@XXWU UՕV^XpkUUU !-U !xU`)`k@@@@`Ue`UW\ ! 5????@TTTT`@XXXVUU ```` ``UU~UUUUU% 着Z`UVUUWUU`k@@@@xUUW %着????@TTTT@UUU`UUtUUU-Օ-```` `k@@@@VUU﫪`U `k@Upyglet-1.1.4/tests/image/BMP_RGB_24BPP_LOAD.py0000700013464101346420000000100611266427715016573 0ustar yohyoh#!/usr/bin/env python '''Test load using the Python BMP loader. You should see the rgb_24bpp.bmp image on a checkboard background. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: BMP_RGB_24BPP_LOAD.py 2002 2008-04-12 10:59:20Z Alex.Holkner $' import unittest import base_load from pyglet.image.codecs.bmp import BMPImageDecoder class TEST_SUITE(base_load.TestLoad): texture_file = 'rgb_24bpp.bmp' decoder = BMPImageDecoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/PYPNG_RGBA_LOAD.py0000700013464101346420000000067511266427715016317 0ustar yohyoh#!/usr/bin/env python '''Test RGBA load using PyPNG. You should see the rgba.png image on a checkboard background. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest import base_load from pyglet.image.codecs.png import PNGImageDecoder class TEST_PNG_RGBA_LOAD(base_load.TestLoad): texture_file = 'rgba.png' decoder = PNGImageDecoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/BUFFER_SAVE.py0000700013464101346420000000304311266427715015607 0ustar yohyoh#!/usr/bin/env python '''Test colour buffer save. A scene consisting of a single coloured triangle will be rendered. The colour buffer will then be saved to a stream and loaded as a texture. You will see the original scene first for up to several seconds before the buffer image appears (because retrieving and saving the image is a slow operation). Messages will be printed to stdout indicating what stage is occuring. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' from StringIO import StringIO import unittest import base_save from pyglet.gl import * from pyglet import image class TEST_BUFFER_SAVE(base_save.TestSave): alpha = False def draw_original(self): glBegin(GL_TRIANGLES) glColor4f(1, 0, 0, 1) glVertex3f(0, 0, -1) glColor4f(0, 1, 0, 1) glVertex3f(200, 0, 0) glColor4f(0, 0, 1, 1) glVertex3f(0, 200, 1) glEnd() glColor4f(1, 1, 1, 1) def load_texture(self): print 'Drawing scene...' self.window.set_visible() self.window.dispatch_events() self.draw() print 'Saving colour image...' img = image.get_buffer_manager().get_color_buffer() file = StringIO() img.save('buffer.png', file) print 'Loading colour image as texture...' file.seek(0) self.saved_texture = image.load('buffer.png', file) print 'Done.' self.window.set_visible(False) if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/PYPNG_L_LOAD.py0000700013464101346420000000074711266427715015777 0ustar yohyoh#!/usr/bin/env python '''Test L load using PyPNG. You should see the l.png image on a checkboard background. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: PYPNG_L_LOAD.py 661 2007-02-17 00:23:30Z Alex.Holkner $' import unittest import base_load from pyglet.image.codecs.png import PNGImageDecoder class TEST_PNG_L_LOAD(base_load.TestLoad): texture_file = 'l.png' decoder = PNGImageDecoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/PYPNG_RGB_SAVE.py0000700013464101346420000000105311266427715016224 0ustar yohyoh#!/usr/bin/env python '''Test RGB save using PyPNG. You should see rgb.png reference image on the left, and saved (and reloaded) image on the right. The saved image may have larger dimensions due to texture size restrictions. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest import base_save from pyglet.image.codecs.png import PNGImageEncoder class TEST_PNG_RGB_SAVE(base_save.TestSave): texture_file = 'rgb.png' encoder = PNGImageEncoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/PIL_RGBA_LOAD.py0000700013464101346420000000065511266427715016044 0ustar yohyoh#!/usr/bin/env python '''Test RGBA load using PIL. You should see the rgba.png image on a checkboard background. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest import base_load from pyglet.image.codecs.pil import * class TEST_PIL_RGBA_LOAD(base_load.TestLoad): texture_file = 'rgba.png' decoder = PILImageDecoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/PIL_LA_SAVE.py0000700013464101346420000000113211266427715015633 0ustar yohyoh#!/usr/bin/env python '''Test LA save using PIL. You should see la.png reference image on the left, and saved (and reloaded) image on the right. The saved image may have larger dimensions due to texture size restrictions. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: PIL_LA_SAVE.py 661 2007-02-17 00:23:30Z Alex.Holkner $' import unittest import base_save from pyglet.image.codecs.pil import PILImageEncoder class TEST_PIL_LA_SAVE(base_save.TestSave): texture_file = 'la.png' encoder = PILImageEncoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/BMP_RGB_32BPP_LOAD.py0000700013464101346420000000100611266427715016572 0ustar yohyoh#!/usr/bin/env python '''Test load using the Python BMP loader. You should see the rgb_32bpp.bmp image on a checkboard background. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: BMP_RGB_32BPP_LOAD.py 2002 2008-04-12 10:59:20Z Alex.Holkner $' import unittest import base_load from pyglet.image.codecs.bmp import BMPImageDecoder class TEST_SUITE(base_load.TestLoad): texture_file = 'rgb_32bpp.bmp' decoder = BMPImageDecoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/rgba_dxt3.dds0000600013464101346420000020020011266427715016010 0ustar yohyohDDS | DXT3 vvvvvvUwv_vv}vvvvvvvvvwv}vvwvvWv_v__vv_vv}vv__vvv_vWv_}v_vvv_v_vwWvUvvvvvvvwv_v}wvwvvvvvvvvv_vv_vvvvvvv_vvvvvvvv]vvwvvvvvvvwUUw€VVV⪪vW_vwv_v__vv_v_v}v_v_vv}vv_vv}vvUv_vvv_vvv}vvvwvv}vvvvvvvvvw(@w^UwS]À wXVwv}3ڪJw^Ww€€55wPPwVwU %vWvw\W€55wpVwU €TTTTw\Ww 5w@@v}vWvv_vvv__v}vuvv}vv_vvvvvv__vv_vv_v}vvvvvvvvvvvv@@455W|v\PUUÀ €ԔU⩨vJJJJw€j@@@@€5555wPPPP〉U€5UUw䀀UU€.%%v_v€HHHw€p@@-555€TTTTj€7@wvvvv_vvv__vvwvv}vvvvvWvvwvvvv__vwvvvwv}v_]vvwwvvv}vwvvwꕕUw V^wXU €UUvx``w€UU€€55wXUw€Vw`Uw v}w@@€UU€55wVwpU- w€VVVwWxw〵5 wVWUUvvvvv_vvv_}vvvvvv_v}vv]vv}vvv__vWvvvvvv}vv_vvv_]vWvvwvwvvwUUw€wTTUUvJJw€5j@@@€555vWvvvvvvwww€wVVUUvwvvv}_wv}vv]vv_v_vvv]vv_vvv_vvvvv}vvv_}v}vvvvvv]vvvwvvwvvvvvUVvUVVvUVv}v_uVꪪV뾺vuvUvUVꪫv_vvvVvWvVVꪪv}UvUvUvvvvvv}uvv}}vv_v'@x%v]v_}]vv}vvvvv_}vv_vW]vvwv_vuwXw vv]vvvvVꪪVꪮwUUUw€U⪫|wWw€Z&w^w€kwwIpwUw'-w'xwwꭹ vwUwVw^%wxww3vUUUVw^w€w€VꪻwXwm %w€` w^w'@@@Bx%%%www\wi w€wUUWTwι`wWwwP€ wxU⪪zw^-wXw%3ڪVv]Uvv}vwvUuUVꪪw€@@VU%5UU€_^XUAAx€U%%€}x``UÀ\֗UwUUw:TxvUpzU  V⪪JJJw€U%€W55wUp`@w vV€וw€wV\U}pbU%%%%€````%%%%wW \UUX^CAABx€5%wUx`` V\U}pbU€wTTTVwp\TTvU UUUPPPP€ xpPPw€- 58w@pPU€U]ycÀ VꪪVVꪪvwUVꮮvV⪺j@@€U 4 W€WX/&AÂV%Ww€`x}kwwW\4]Uw5 \\\3䀭U vWUU]€``w€U%%w€5Vw`zUw Vꪪw@@€U€V€=w€Xx4_`U%% ﭹ〖>w`zW% wWV4+U&BAABU€5'w`zUw Xx4_`U ι〗>w WT\p4u Uw5 wPPPpw }w€׵/ppw U>5/vXTֿ'c€x€-5vvvV⪪vݗv⪪ݗV⪪ݘwUw€^w*5ݗv⾮ݗvݗvݗV⪪€````w ݗvݗvꪯݗV⪪ݗV⪪ݗv⮯ݗv⪮ݗv⪫ݘJJJw€=ݗV⪪ݗv⪪ݗV⪪ݗVݗvݗVw€ݘwVVWUݗVꪪVꫪv⪪V꺪ݗV꺪vV⪪VꪪV⪪VvUUUvUUUuVVvUUUV⪮V⪪V⪪VVvWUUVV꿺VꪮvuuUVꫪVVVVVV꾮VvWUUV꿿VݗvUuUݗVݗvUUUݗv_UUUݗVꪪݗVݗVꪪݗVݗvUUuݗVꪪݗVݗvݗVݗVݗvݗvuUݗVꪫݗVꪪݗVݗVꪪݗVꪪݗvݗvݗVݗvݗv⪫ݗV⪪ݗvݗv⯾ݗvݗv⯪ݗV⪪ݗV⪪ݗV⪪ݗv⫫ݗV⪪ݗV⪪ݗV⪪ݗV⪪ݗvݗV⪪ݗV⪪ݗv⾿ݗV⪪ݗV⪪ݗV⪪ݗvݗV⪪ݗv⫺ݗv⾪ݗV⪪ݗV⪪w3xw3ݗV⪪ݗV⪪ݗV⪪ݗvݗv⿪ݗV⪪ݗV⪪ݗvݗv⪪ݗv̗V⪪̗V⪿̗vw`w͗Vww@w%ww4`wWw4 ݗV⪪ݗvU]UwݗVꪪw\w3 wxww4 wPwUw3w2Pw ݗV⪪wݗVݗVꪪw2xwwT`wWw3-w3pwwT wpwUݗvUWwU@w5wTwUCw5wPw w^wSݘ***w^V.vWx`ݘ -%wU`wWw3%ݗVݗVݗVݗvݗV⪪ݗV̗V̗v̗V€````w̙w€@@@@ͺÀ%%%%€ܙXVUzΙ/555̗v̙wj〔zTTW5 pxw~U wUΙ€/555XXXXwUv〵U^\xbcw %U䀀Uwו5%̗V⪪̘wՕU€xVVV̘〕\WwUUV-8*ݹx\VU_`zw x\\\̙U̘v@@@@Ϙ€5555vTTTTCCCCϘ€5555wPPPP€3^5VS_XZ€ VXW5wmup@ͺ€%%%%wX^VvUU U-*ݘwWTVWݗVꪪݗVꪪݗvU_UݗVꪫݗV⪫̗v̗V⪪̗V⪪€````w̙w€w@B{W̺%%%-€`XXpU U͘-*?5̗V⪪̙wjTԔ̙Uw--\\\\̗&  ܷhTnXXXXw〩U}ޕ5̘򮹡VU\v€_px^̘ ̗Vܘι@€TTVUߘ*WW^xUUw〕5-x\\xխU̙ '%\\^WU̘Vܙ@@@@Θ€5555vTTTT_w€5wPP^U̙À W(\U_XU̹Àɉ wÀ5Vw@`zuͺ€%%%%wVV^xUUv€-̘wTTVU̗V⪪̗v̗v̗v몫̗V⪪̻v̻V⪪̼̻p€`zUwU̼̼*%'〔̻H\˼ 4(̻`̻w'U̻wꋩ-̻V⪪̼̼̼w〖V䀀Uͼw〕% ˻x`U Ww䀀UhuW\XƐ wU޼wյ/̘SʨܸwXPp3Օ?̘(̗V⪪̼J***€WTTw&̘`w(Uwꭹ wꋩ`w'U̘ W\\̙̗̽V⪪ۙ@@Θ€?*55w'Tw(Zwꋩw(̗4!w'^wHwVw(xwIM̘&%wꮹ`w(Uwꬱ ̗vUUU̗V̗vWUU̗V̗V̗VvUUWVvUUVV뻻wUUU޻w'vVUwUUU޻w'vTUVvV꺪V껻VvVvUUU˻wU@˼w  ˻ub˼V 7u ̻wpwU( wU`uڪ V⪪˻v못Vꪪ˻v˻V⪪̻v̻V⪪̻v̻V⪪̻V⪪̻˻V⪪̻V⪪̻V⪪̻˻V⪪ۻ̻J(̼'5̻V⪪̻V⪪̻v̻V⪪̻˻v̻v̼V⪪̼˻v̻˻V⪪̼̻v˼V⪪̻˻v̻V⪪̻V⪪̻˗V⪪̻V⪪̼v̻V⪪̻V⪪˼vV⪪V⪪vV⪪V⪪V⪪V⪪VV⪪V⪪V⪪VVVvVV⪺V⪪Vwv⪪w&$,˻ۻW@@VUUͻUڎ %w Uگ5fmx\\ͻ߻߻߻Wu Vwv⪪VVV⪪vV⪪vU_UvU}UVV⪪vWWUUVVvUUUVVVvU_UջVVﻻVꪫv}UUUVﻻvUWUvUUvU__UVV⾿VꪪV⪪VV⪪vUUVꪪV⾾VꪫVꪫ꯫VꪪV⪪Vꪪ꫻vVꪪ껻v↑v껻v⾿vV⪪V⪪vV⪪vV⪪V⪪V⪪V⪪tʰ`˻7J***ŒWT\|m̕@*ͻTʍ UU5ڊt˫W%T\߻λWd- V⪪V⪪vvﻻV⪪vV⪪V⪪vv뻻V⪪vV⪪V⪪vV⪪V⪪vvV⪪V⪪V⪪V⪪V⪪V⪪VvV⪪V⪪VVV⪪vV⪪V⪪V⪪V꺪V⪫vUUUV⪪VVꪺvUW_v]UתvUUWvUU_UVꪪV꯻vvuU_UV꺪vUUWժV뮪VꪺVVw@wҡ۪ʪWdx [ի̫VM*W\Zp`ϫͫVH} %VVVꪪVVꪪꪪV着v_UUUVꪪꪪVvVꪪ몪Vꪪ몪V⪪VꮪVꪪV⪪VꪪV⪪VꪪwvV⪪VꪪVꪪ껻V⪪VꪪV⪪V⪪V⪪vv뻻V⪪vvvV⪪v⪫껻V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪w@@wv5ڥe`px h}`zΪ߫5҅\ --w@w V⪪vVl`X߫W$L --Vڢ꺾vvvV⪪V⪪v⪮V⪪v⪪﫪VVꪪV⪪VꪪV몪V⪪V⪪V꺺vU}ժV꺺VvUU_VꮯVꪪvvUUUV꺪VꮪvV着vUUVꮪVꪺVꪫV⿪vvUWUVꯙVVVꪪVvVvUUUVwvVVVVVVvwʀW` H~^u(~ibWUꀩwR VV⪪ꪪVTzh}J\V2%5UwN vV⪪V⪪V⪪vV⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪vV⪪V⪪V⪪vV⪪vV⪪V⪪v⾪몪v몪V⪪vV⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪vV⪪V⪪V⪪V⪪V⪪V⪪Wt$$]WK )%TXLm׿%ߚw) %5V⪫əڙWhc``)&[  eK\J%KϙϙVd V⪪V⪪VꪻVvvWWUvUUUvV⪪V⺪vV⾺vvV뙙VvVVꪙVvV着VVVVVvV⪪vVVVꪪVꪪV⪪VꪪV⪺VꫪV⪪V⪪vvV⪪vV⪪V⪪V⪪V⪪V⪪V⪪vV⪪ꪙWt$$$܈W W^ޫw ս mW_JIb``x_ΩΊeB -wUʙ7꫄x}F[UguT%]%wk V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪v⫪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪vV⪪V⪪V⪪vV⪪vVꪈVꮪV⪪V⪪VVV⪫V⪫V⪪VV⪪vV⪪VV⪪vVꮮVVwT@˽Vhk ׈wꑲ-wS€n*c}zrb,:W׵%2I~>?wUҪ)󹌖X\\\}~z\^`ωωω߉7\ --VVꪪvVꪪV⪪vVꪪVvVꪪV꺺뙙VVꪪꙙVꪪvwvwV⪪vVꪪV⪺V⪪V⪪V⪪V⪪V⪪VꪪV⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪ꈈV⪪V⪪V⪪wvV⪪V⪪V⪪vV⪪V⪪V⪪V⪪V⪪V⪪V⪪vwV@٘6Kx^DC--U̫e*̊]ދ߫mk. ݚ5ڨl_ ݜU wက@(~\\|^m+Μl57d-wu(XCwU V⪪V⪪V⪪V⮪V⪪V⪪vV꺺V⪪VVV⪪V⪪V⪪VꪺVVꮫV⪪VV⪪vVVV⺪VV⪪VVwv⪪VꪻVwwwwwwwwVwwwwwwwV⪪xwwwwwwwvwwwwwwwwVwwwwwwV⪪wwwwwwVwwwwwwVwwwwwwVwwwwwwV⪪wwwwwwV⪪wwwwwwVwwwwwVwwwwwwVꪪwwwwVꪪwwwwvxwwwwV꺺wwwwVwwwwVwwWk`*s  mgdIcxN kdK^ߊ$U /wxwwwUxwww@@ݳIWWWzxVKU%޻ڈFeSJ(ΪWc 툈̼WjUw w^vUU+UUU UUͫw UU xx```uUUU V⪪ꈈWr@W^WWUU+UUUޫw UU߇ W@W^WWUU UUUޫw UUχ xxw+WWW}}}?V⪪TTT *ՈwWTTTV⪪wwwwwwwwV⪪wwwwwwwwVꮪwwwwwwwwV⪪wwwwwwwwV⪪wwwwwwwwV⪪wwwwwwwwV⪪wwwwwwwwV⪪wwwwwwwwV⪪wwwwwwwwV⪪wwwwwwwwV⪪wwwwwwwwV⪪wwwwwwwwV⪪wwwwwwwwvwwwwwwwwV⪪wwwwwwwwV⪪wwwwwwwwV⪪wwwwwwwwV⪪wwwwwwwwT@J~x^WJl λRJUI~Jrxz_KrDTWUl s~͛xxwwwV̕ wwwwwwwwwVwwwwwwwwV⪪wwwwwwwҺxwwwwwwww wwwwww8+`beT\|~df[߾ mS]*ޫ 'zzNTUUUywwU% ̉xwwwwW#7U ww_x``wwww wwww````wwww wwwwwwwV⪪wwwwW`pP'TUUUߊwյ xwwwNUwWW߇wwz ?wwww`pP'TUUUߊwյ ̈wwwNUwWWχwwz ?xxwwwwwwb/TTTT}}}}wwwwVTTTTB7wwwwwTTTTwwwwwvwwwwwwffVwwwwwwffV⪯wwwwwwffwvwwwwwwffVwwwwwwffVwwwwwwffV꪿wwwwwwfwV⪾wwwwwwwvVwwwwwwwwV⾾wwwwwwfwVwwwwwwwwVﮪwwwwwwwwV⪪wwwwwwwwV⯫wwwwwwwwVꪪwwwwwwwwVwwwwwwwwV⪪wwwwwwwwV⪺wwwwwwwQ@혹w4*W k* zwww5ҋ ,ûdwwfe=www͋6m wwwwwwxwwwwwwwwwwV⪪wwwwwwwwV⪯wwwwwwwwV⺪wwwwȇWBxdK lKUmS*+gtx\\\'Օ|wwxwwxVFwwwggppw`UUwvvv wwww````wwwx -wwwwwwwwV⪪wwwwWPPPPλw8UU wwwUUb/UUWT}}}{5wwwwwPPPPλw8UU wwwUU/UUWT}}|{55wwwwwwwwwb/TTTT}}}wwwwwwwwWwUUWTTTTTB7wwwwwwwwwTTTTwwwwwwwwV⪪ffffffffV⪪ffffffffV⪪ffffffffV⪪ffffffffV⪪ffffffffV⪪ffffffffV⪪ffffffffV⪪ffffffffV⪪ffffffffV⪪ffffffffV⪪ffffffffV⪪ffffffffVꫫffffffffvffffffffVffffffffVfvffffffVffffffffVwfffffffXwըGmx^\xysgmս-ywffvWI gl)ht5/*m |biwifyfh7-wwffffffVwwfffvvwOhwʹW:^W,:XWUUT:/5dDCUdS |\\^x'wwxwyv|VFgggfgfpffffwUvwffwUvvffff gggf````zw5UUwwwWUwy}WpcFUUUTwy8 UwwٻW`_U'TUUywvzf5% wwwfWp`FUUUTwy UwwٻW`_U'VUUywvzv5- wgwgwgwgw/TTTT^Uwwyw7UTWUUѳՕ5vwvwvwvwwTTVWwwwwwwwwV⪪ffffffffVffffffffV⻿ffffffffVffffffffVffffffffVffffffffVffffffffVffffffffV⪪ffffffffV⪾ffffffffV⪯ffffffffV⪪ffffffffV⪪ffffffffV⪪ffffffffV⪪ffffffffV⪾ffffffffVffffffffV⪪ffffffffV⪪fffff7f\xgffffVd fffffffW+r` RK%JfdjS /{Ru557wwwxw̻S-Uww5dCp\WS: S$C _KB~S:_UeK:UdBp`A&UUUT߉ %UgfffygͻwB7 fffffw?UfffwUffgfhfhffffff``ffwUUvff}ffwUUofofkfff8vfvffW^ffwUUﻚffwUUyxfffW-gfffffffWSffffffffWwUUUvfvffW^ffwUUﻚffwUUxxfffw-gfffffffWSffffffffwUffwUUmjff?vffwU^ffwUUighfff5vfffffffVwwffffffV⪪ffVfUUUUV⺪ffffUUUUV⪪ffefUUUUV⪪ffffUUUUV⪪ffffUUUUV⪪ffffUUUUV⪪ffffUUUUV⪪ffffUVUUV⯮ffffUUUUVffffeUUUV⫺ffffUVUUVfffffeUUVffffffUUVffffffUUVffffffUUVffffffUUVffffffUUVffffffUUVffffffUUVffffUwj@@:xWUUK:/_:-UΫg0I 1fe_W^ھלQmM+'mzguSmeKWdeKU%\$Cpf\C*lK}mDK[\ߙHdUU~fUUUުuUUU ͚xfwUU hfhfffffffffffffVffffffffVffffffffVffffffffVffffffffV꿯ffffffffVffffffffwVffffffffVffffffffVffffffffV⪯ffffffffVffffffffVffffffffVffffffffV⪮ffffffffV꾾ffffffffVffffffffV⪺ffffffffVffffffffV⪪ffffffffV⪪ffffffffV⪮ffffffffV⪪ffffffffV⪪ffffffffV⪪UUUUUUUUVUUUUUUUUV뫪UUUUUUUUVUUUUUUUUV⪪UUUUUUUUV⪪UUUUUUUUV⾯UUUUUUUUVUUUUUUUUVUUUUUUUUV⪪UUUUUUUUVUUUUUUUUV⫫UUUUUUUUV⪪UUUUUUUUV⪪UUUUUUUUV⪪UUUUUUUUV⪪UUUUUUUUV⪪UUUUUUUUVUUUUUUUUV⪫UUUUUUUUV⪪UvUeUUvwN@S9+ }c25}dKտϚ|9rPX^gVXwC2%gVeVUVW k%UUv_z`2\\^ߚV|U7eKU- udUPϪggDD--e} tΚzV5uUս vvSfeUgVjUVUV\- ffUUUUUUVffUUUUUUVꪪffUUUUUUV⪪ffUUUUUUV⪫ffUUUUUUVffUUUUUUV⪪ffUfUUUUVffVfUUUUVꪪffVfUUUUV⪪ffefUUUUV⪪ffffUUUUV⪪ffffUUUUV⪪ffVfUUUUV⪪ffffUUUUV⪪ffffUUUUVffffUUUUV⺪ffffUeUUVffffUeUUVffffVUUUVffffeVUUVffffefUUVffffffUUVffffffUUVffffffUUVffffffUUV⯪ffffffUUVffffffUeVffffffUUVUUUUUUUUwVUUUUUUUUwVUUUUUUUUVUUUUUUUUwV UUUUUUUUVꫫUUUUUUUUV⾾UUUUUUUUVUUUUUUUUV⺺UUUUUUUUwVUUUUUUUUV⫿UUUUUUUUwV"*UUUUUUUUVUUUUUUUUV⪪UUUUUUUUVUUUUUUUUV⪪UUUUUUUUVUUUUUUUUVUUUUUUUUV뾾UUUUUUUewspufffVeUewPBm:TVWUXWLU55ެWUuU4hu+g܅Lx_]d[]XX{U%]?UUUuW:`pXTB] [UkUUW&S eUUUfUڊ|P yvUfUUgUL*+ {e֫xK?-]VUWU{UV6hl -VUUUUUUUwTUUUUUUUUVUUUUUUUUVUUUUUUUUV⪾UUUUUUUUV⪪UUUUUUUUVUUUUUUUUwV⫿wTTT:UUU:UUUZ*UUUhUiw UUUUUWUkUv2 UUUUv @@@:UUUUTTTUUUUUUUUuv@Uw\WUJ(UUUhUXV =UJWUUY]MMU?UUUUUUUuv@Ueev^UWUUJ UUUyV͛w+UUUUgUUTv UUUUUUUUVUUUUUUUUV⪪DDDDDDDDV꾾DDDDDDDDVTDDDDDDDVTDDDDDDDVDUDDDDDDV⫯DTDDDDDDwV(*UUDDDDDDV⮮UUDDDDDDwV⪪UUDDDDDDwV *UUDDDDDDVUUDDDDDDVUUDDDDDDV⪺UUDDDDDDVUUDDDDDDVUUUDDDDDVUUDTDDDDVUUEDDDDDVUUDUDDDDVUVUEUEUDwS6 UeUUDDDDw2@iTUDKU𙩸,}x^WJt^ \v^x`fdS_κ[fe׿Z#;\^^d$C /s)[c2 UVi|lUDK-kzt$CW\WWXhXT-5UUUUUUUDwS UUUUUUDDVUUUUUUTUVUUUUUUUDV꯯UUUUUUTUwvUUUUUUUUwVUUUUUUUDvW꿿wTTTT2TUTUTUU:UuUUvWx`@TTTTU UUUUv @@@@TTTTUUUUUv @@@ WWUUYVTVյ%eUUuv_x UUWVMMLLUUUUUvppP WUUUg|Uvյ UUUUw2UUvUUvWTTwUIU ?UUUUUUUUVUUUUUUUUV⯯DDDDDDDDVDDDDDDDDV⫯DDDDDDDDV⾿DDDDDDDDVDDDDDDDDVDDDDDDDDVDDDDDDDDVDDDDDDDDVDDDDDDDDVDDDDDDDDVDDDDDDDDVDDDDDDDDVDDDDDDDDVDDDDDDDDV⮾DDDDDDDDVDDDDDDDDVDDDDDDDDwV⪂DDDDDDDDwVʪEDDDDDDDwU DDDDDDDDwV"""TdtdCPXX^*T d^lYm'v+ꮖiTU5ʅ\U׼IVUuff*kajߧ-$CUUW˩bT_lA\Xx\#2U- ZHYdC55TfDD6K^UTU3}[WWivDɅT--vWȭOHv WDDGDlDx6] DDDDDDFDw꒲ DDDDDDDDVDDDDDDDDV⪪DDDDDDDDVDDDDDDDDvW꿿wTTTT2UDDDDVUDuw`ZUU2UUU5TDZDFDv DDDDV @@@@TDDCUUDDDv @@@@TDDCUUUDDDDDDUxj***VVVVLLLLUUTTDvPPPPlDvUU DTwUU UUWVLLKIU5UUUUDDDDwV UUUUDDDDwV DDDDCD33wVDDDDDD33wV⪂DDDDDD33V몫DDDDDD33VDDDDDD33wV⪠(DDDDDD33V뫪DDDDDD33wV⊪DDDDDD3CwVDDDDDDD3wV⪪*DDDDDDD4wVDDDDDDDDvWDDDDDDDDwV⪪DDDDDDDDwV⪢DDDDDDDDwV⪨ DDDDDDDDwVDDDDDDDDwVDDDDDDDDwV⺪DDDDDDDDWvDDDDDDDSXJDtd7:xWUdKB *ˍ:=7UߙcGFEWDgm-%- DuDdٷ†]^ʼ+)licz ~cߪ|+{yFEDTD7%Kd]^_^x'ufSw~h/C/UUDDFDHdz6(dYTȅ~xWUm酩 llZ{DD|D[C DDDDDDDDvW⪮DDDDDDDDwV⪫DDDDDDDDwV⪪DDDDDDDDvW꿿םwTTTT*UUCDUUUyUUW\Yk5UDDDDED8DVBDDDDV @@@@CCCCUDDDDV @@@@CCCCUDDDDD4D4UwVVVV<<<UTݎzlDCU/ uK}*ifjFޜn 43C4XlVڈu33333333Wu33333333vW⪪33333333wV⪪33333333wV⪪33333333vWwTTT:UUU:UUUxgbUUU*j543VU-43333333V3333V @@@@3222T33333333wV⠨33333333wV⨢33333333wV⨪33333333wV33333333wV⠪33333333wV₢33333333wV꺪33333333V⪿33333333V⪿33333333wV⪪33333333VC3333333V33333333V⯯33333333V332#""""wV+33##""""wV"3322""""wV‪33#3""""wV*3333""""wV(3333""""wV*3333""""wV3333""""wV?3333""""wV3333""""wV3333""""wV833332"""wV(3333"3""wV⪋333322""wV333323""wV⫨333333""wV333333""wV* 3C3333B#Wq443333#""W‰(ch237$CWW Hh43C2l/P3C3R3By5*}5Ibc;\K:/d:/Uk2k4W333G#ɨu- C3c3R3Bjkj€~ik= E\* l)} ͕Bܚnik^mE\쿷lc j ~luHk}3343$3#38Ѳ33333333vW33333333wV33333333vW*33333333vW 33333333wV33333333vW33333333vW33333333vW33333333wV33333333vW*3s333333VB@333333V:Uh3333333V233333333vW 33333333vW33333333vW⪺33333333vW33333333vW⪾*33333333wV⪯33333333vW⺫33333333wV⪪33333333wV33333333wV33333333wV⫪33333333wV33333333wV33333333vW⺺""""""""wV""""""""wVy""""""""wV""""""""wV}""""""""vW~""""""""Wv""""""""Vw""""""""wV⫪""""""""w6⪪{""""""""wVz""""""""Vw*""""""""wV""""""""Vw⪪""""""""Wv⪪""""""""Vw⪪""""""""Vw⪪""""""""Vw2#2"""""Wq$""""""""wVz""""""""wV2""BU*RrrzΊ˄hxc*lc25ɅF\UlHuF9``x~5ZXIU#*5"2DEDDE37ꭊWT3#2#timzY$2IUտ+fsmu}먼$C*鬒S_ݚˎS^Uk3#GɥT u52"""4"VJk 33""""""wV33""""""wV*33""""""wV33""""""wV⊪33""""""wV⪪33""""""wV몪33""""""wVⲪ332#"""2骪J332""""wUUU3323""&!>`3332""""wV 3333"""BwUUU533#3"""wUUU3333""'"@3333""""wV3333"""dwUUU%3333"""wUUU3333"2"wUUU3333"#6"wUUUX3333""""wV>3333"3""wV⨠333333RBwUUU 333332y"wUUU333333$BwUUU333333"wUUU333333{""?333333""wV*333333""wV(""""""""wV*U""""""""w6⪊""""""""w6⎪""""""""wV""""""""w6""""""""wV""""""""wVި""""""""wV*""""""""w6""""""""wV]""""""""WVת""""""""WV""""""""V7""""""""Vw⺪ """"""""VW""""""""Vwߪ""""""""wV""""""""wV{""""""""Wv""""""""wVv3]\\:^UUS#2S$C50VɅK닋:R("(29"f\ EbC"pu`xrr̫+lh`z~IS/*$%$#(v/-%-R""BKV\x)S eKZdSGuSH#k3##eT%""""#"2"WѪ7""""""""wV_""""""""wVڞ""""""""wVz""""""""wV⺿""""""""wVo""""""""wVU"2"2"2"2L?@@@@""""""""5"Bw !%"K"'"`pT"""R"2U% + xdUUU-wdih#"'"""F"2""Bw5 d\UUUwUU-{W !!!!""""""""wV⯯""""""""wV⪪v6k}w6wj!v7⯪vVUW!6v"v6⾶!"V7""v6""w6o""V6⪃""7vf""6VU""6v⪫o""6vS""!6v⺪ǯ"""v6""!6v?"""!w6o""""v6⪯""""!BVrpRBŚd(SC2 guBU%EKU})^:"I$z%T W#2(Dp Q(~__^x8*_U5"Y"4#ge- "b!1mRX)B _}:ZlC)'m&\}"m"9"$\-- "#"2""!7X`B""""""7!"""""""w6,""""2#!#Wꐢ.X"""""""v5ڪ""""""""wVU""""""""wV"2"1"1"1 @@@"2"r2׻5 !\'`#"!""""Mb !UI##""2""WUT"Sx "$"!?r B?I""""!""_S"""w %5!!!!ԐА""""""""Wv""""""""w6ⷾW*W?W_UW]UWUW7Vڿ7Wگ^Wڪ Wڪ?.W**wڨWW Uwڮ!dlx1wFeuE#im+U&d!!!ԗeLxxx}BbeKC2V7-ܮTe^~G4"1mսq{2d4Q)V\}K|4ޫIYl˄ {#vk/U'sk] &J%-//Kz K-*^J"xrC5"xw6S*U!F"WR"2238zw5["1W,zp""!"TEWR *U3V͂%V7ڪ1111 YdUUU5ec!𿿿8$[^p@"V!ff>fV%~LC?!"H"!!W5% !!$""""v6⪺""""vVW_yVڊ8Vu٪Vڲ]V( VٺV6٪IVẺ(*UV^U₪UVv_Vmw!;*rX)c-+Jgu_K}i J:'='mS!!!Rxcۑ&mX⪉j$l!,iK_U[!$"3"2oGd)+2bqdHal!Co55c  l@p|kl + Wl'S*%K,'K\j[^Jd [#2\~$C*(S:'$&Z}qD//3"!!rCAeqT~WedR*dKU(i#8kr\*."""  5!!! @@@2y%U:m@3v!A!x %"|߻`s [`#?Q!Qx 5k޻x 0??w*w5ڪUx/U `U h(]@U HU hU XUpUx Up<50w5 0`_0@C3\\^W $C5\_nL(uJQzb:\!t}Ql2~m7ߦdI_ QpfedDK uK}L5UUr0b]~xxk\G'uRHDh\UѨ3r&\eK:.6lSU'uEK~ZHu:~^gd27/meKW'mDC_~f\B^p!Q:cs_lK+ lS _'mf\//.n)micb!{᫨  ! !%;!@@Rx-"n;@ V:B1WUDUVUUE$X5"WxWUUV׽jW5u!CW UUU4WUU70VTwxUUUpUUU8%UUUUUUUUU ? C8eK:-*_z:?UUx%D2%Ʌ``zW @@i}--*l}S޾* kfd¢z)śd*nLdEK ~l3%hlUzUBUS}gJ+)i'K') j0x3|^~~:S$2.W4 pʅGuB_ :W_dCm}F1j5w!"}9_mzGud:`~UbC 9 **F\:%5l$CddKzh;pdL/ V "! ة*^DD DD0UDD 0j4 8Vl?UpUpUU *U X"}4_ڏ}5"}5ڰU4ѠU@_:DD4"4ڳU5ڳU!JՕS) %dc2}dKigub!j``x{(&:z %Ʌ%K>5kdK1jdWlC//guS /5l1m;mfmeKBj'uC-%//~RmlZuF:ZS:__7)ߚ&\jj ldX T^ d^X_ml@``aFK T:%\:տKBd:UUF\:_U}xx:C25*g5ޜTc2z""[GS *6h PUUUXUUUxQUUU UUU8UUUxQUUUUUUUUUx!RrAAB+Uk-zI[.N^JB€@q%!J'BTVVVJAi%0- U'mUy@`)}(+c2@z_#!80l@}[xjkJ** lgu* +z*:Kh [URa l WzelGUUU @@  ldhN0^=+xxWp@k :\l!W> d)UU^,T(&K**z3d%)S!1ISl&&acUU:@?UU 0gd%l2r~[L[@jJ**:TUUUpyglet-1.1.4/tests/image/rgba_dxt5.dds0000600013464101346420000020020011266427715016012 0ustar yohyohDDS | DXT5 vvvvvvUwv_vv}vvvvvvvvvwv}vvwvvWv_v__vv_vv}vv__vvv_vWv_}v_vvv_v_vwWvUvvvvvvvwv_v}wvwvvvvvvvvv_vv_vvvvvvv_vvvvvvvv]vvwvvvvvvvwUUw€VVV⪪vW_vwv_v__vv_v_v}v_v_vv}vv_vv}vvUv_vvv_vvv}vvvwvv}vvvvvvvvvw(@w^UwS]À wXVwv}3ڪJw^Ww€€55wPPwVwU %vWvw\W€55wpVwU €TTTTw\Ww 5w@@v}vWvv_vvv__v}vuvv}vv_vvvvvv__vv_vv_v}vvvvvvvvvvvv@@455W|v\PUUÀ €ԔU⩨vJJJJw€j@@@@€5555wPPPP〉U€5UUw䀀UU€.%%v_v€HHHw€p@@-555€TTTTj€7@wvvvv_vvv__vvwvv}vvvvvWvvwvvvv__vwvvvwv}v_]vvwwvvv}vwvvwꕕUw V^wXU €UUvx``w€UU€€55wXUw€Vw`Uw v}w@@€UU€55wVwpU- w€VVVwWxw〵5 wVWUUvvvvv_vvv_}vvvvvv_v}vv]vv}vvv__vWvvvvvv}vv_vvv_]vWvvwvwvvwUUw€wTTUUvJJw€5j@@@€555vWvvvvvvwww€wVVUUvwvvv}_wv}vv]vv_v_vvv]vv_vvv_vvvvv}vvv_}v}vvvvvv]vvvwvvwvvvv m$vU@Q-V$ IvU@ImV$ V vU'$ V$ v}$9lv_u! `VꪪLV뾺 vu vUIvUIVꪫIBv_`Ǘv$vIvVvWv$VVꪪ$v}UvUvUvvvvvv}uvv}}vv_v'@x%v]v_}]vv}vvvvv_}vv_vW]vvwv_vuwXw vv]vvvvIJ@VꪪIҶVꪮIm?wUUU$)M?w€meU⪫|vIB@wWIw€Zض&$9nЦw^mOw€k-k%wԶwIpO"wU$ٖ5w'-e۶w'x$)I?wжOZ€WX/簡$&AÂ?g͏V%WoOw€`x}kHwPawW\i"Ӗ4]U $w5 p\\\Z3䀭U=P' mvWUU]&,€``w€Ug#=%%,sw€5V w`zU됏{$w I¶HVꪪ\w@@_?€UI@/9€ `(-V€=?n*w€OXxMv4_`U$%% ?〖>Nw`zW$% 0@swWVl4+U)"&BAABU€5'vw`zU퀍$w ҩOXxMӖ4_`U $ 8@X)ι〗>Iw W`񔼘T\pPn4u UۇIw5 6p?HwPPPpࠤw }4@5w€׵/$pp5rw U۶>5//vXTֿ3@'c€P,\x€-50MnvIBvIBvԮV⪪ԭ'vmCv⪪IBV⪪IHrwUT@sw€^_")w*5v'v⾮mAwW֒ :w3-ْԶw3pjIHwm'wT Dvwp$i/@wUIRvUWIBwU@V (w5ضwTmwUCֶ-,w5זwP$ٶ 'w $)m&w^VwS$֮&***ܦPHw^V.߀(vWx`/9 -%IBwU`$iyNAwWm;r w3%IBHVmv?ViCVIBvIBV⪪IBV͐mVIBvIBVS.B/€````wIv$Ew??€@@@@GÀ%%%%€?C9ߙX wWVUz?/555mÑv#_;w?j〔yz߼yTTW54 pxcw~U I6 wUW€/555˯XXXX$pwU,@v〵U^\η˵xbc=@w %U䀀U5wו5%mBV⪪-;wՕX?U€xVVV,<〕yD`\Wɓ IwUUZ/7?V-8*A)ܹx\yVU_`z=%w 7ux\\\iUӂm?vaG@@@@€5555vTTTTDCCCCҀ(€5555R@wPPPP'r€$@3^5T^X.VS_XZjz"€ ֦@@ ,VXW5՘! ?wmup@G€%%%%?wX^V͓ IvUU Z/1?U-*MowWTVW֒mVꪪIR&@VꪪIB&vU_UMJVꪫiCV⪫IҶvmvV⪪iCV⪪S.B.€````w#6wx``€I4Aw@B{W %%%-??€ 9S`XXp؀pU UƘ_0-*?5IBV⪪ł*$6w@jTԔ0IU؃9w--'p! \\\\??&  wٔhT0.n˯XXXXOrAw〩U}2ޕ5ǰi򮹡4VU\ϛ`v€_px^r$ ːVȶoι@?€TTVU I*@JWW^xMN UU =w〕5-5x\\xۀ${խUȢ_= '%0\\^W˿ @ÛnVaG@@@@ʀ(€5555vTTTTN؇_р耈yw€5@Z'wPP^Uhr'À rW(\PU_XUhr'Àɉ ӀfwÀ5VIw@`zu€%%%%POwVV^x߶?UU ,9v€-mowTTVUI’V⪪IBvIBvIҶ v몫IҶ@V⪪mBvMm$€`zUH߶wU *%'??〔H\$I K ˿4(޾wq`I$w'U O$wꋩ-mBV⪪ȿ6w?〖Vmwm䀀U PO'w〕% P,x`ɘsU WIlw䀀U&huW\X00iƐ $wU&>wյ//b1Sʨܸ/ |wXPp53Օ?ĸ$(uV⪪a?J***p€WTTI$w&I$`I$w(U$wꭹ ?I$wꋩ`I$w'U$ JW\\Ð$ƒmV⪪e@@IM€?*55I$w'TǮI$w(ZI$wꋩI$w((m$4!'I$w'^ȀI$wH ٶ'wVȯ?I$w(xI$wIM@I$&%$wꮹ`I$w(UI$wꬱ IҶvUUUIҶ Vɒu$vWUUmvVI2VIBVԮvUUWI’Vmv?vUUmn$V0mVIDwUUU'I$w'uvVUIV@wUUUI$w'mm?vTUi?V¼ж$vI²V꺪¼Ե$V¼mw>Wu mVIBwv⪪Ե$VIҒHVmV⪪MBv0m?V⪪IKvU_UIBvU}Un$VIBV⪪mvWWUUm?VmvVIBvUUUIBVIB@Vm?VIRvU_Uջm3VmVI’VꪫIBv}UUUv$VIRHvUWUu?vUUmBvU__UMVmv?V⾿¼Э$Vꪪ¼m$V⪪IҶIV¼MV⪪IBvUUIBVꪪIBV⾾vVꪳ?Vꪫ꯳mvVꪪIKV⪪ICVꪪꮳiR@vm$Vꪪ괮m?v↑mv꯴IJv⾿mvvmBV⪪$V⪪IBvm$V⪪IҶ(Av?V⪪mV⪪IBV⪪IҖV⪪5h?xtʰ`İ$7J***` ŒWT\|hm̕@*hTʍ UUI$ta5ڊt!O$W%T\>~$Wd- m'V⪪mV⪪mnvm?vﲷIBV⪪IBvu$V⪪mV⪪IҶ& vmm?v본IBV⪪IBvv$V⪪IB@V⪪M?viBV⪪ICV⪪IBviBvIBV⪪mV⪪mV⪪mV⪪IBV⪪mV⪪MBVI¶HvmV⪪?V⪪mVIʑVIBV⪪IBvIҖV⪪IҶ&HV⪪m$V⪪I–V꺪MBV⪫IB@vUUUIR&AV⪪IR@VmVꪺICvUW_IBv]UרIBvUUWIBvUU_Un'Vꪭmv$V꯻mvICvuU_UIBV꺪IBvUUWթIBV뮪IҖ&VꪺIJVmVw@(wҡ|ə|Wdx [ի>}$VM*|W\Zp`}>>VH} %IBVIBVIBVꪪn$VmVꪪꬱICV着MBv_UUUIJVꪪꬱIBVIҲIvIR&Vꪪ벬mVꪪ몭m2V⪪mJVꮪiBVꪪIBV⪪IRVꪪmV⪪MBVꪪmwvIJV⪪IBVꪪIBVꪪꮳIҒ@V⪪VꪪIҲ&@V⪪mV⪪mnV⪪IҒvIBv믴I– V⪪ԭ'vmvm$vICV⪪IBv⪫궰n$V⪪m?V⪪iBV⪪MBV⪪I’V⪪I’V⪪ԭ$V⪪IҲV⪪m'V⪪mV⪪I’V⪪IC@V⪪I–V⪪IҖV⪪mV⪪mV⪪mV⪪IʒV⪪IRV⪪IB V⪪I’V⪪ma[w@@&$wvɕ5ڥe`px h}`z|>55҅\ --v$w@$w mV⪪mvII Vl`X0 W$L --Nl.Vڢ꺾IBvmvI¶AvnV⪪IBV⪪iBv⪮IRV⪪IRv⪪﫬mVmVꪪmm$V⪪MBVꪪIBV몪IBV⪪I²&V⪪nV꺺iBvU}ըIBV꺺MCVIBvUU_IB@VꮯI¶@VꪮmvԭvUUUmBV꺪IBVꮪIBvI’V絛u$vUUiBVꮪmVꪺIBVꪫIBV⿪I¶Ivm‘vUWUIҶHVꯛIKVICVIBVꪪI²Vm$vm?VmvvUUUmvVmBwvIRVIR&VIҒ VmnVmvVMBVmBv*q@dwʀŝIW`ȣ? H~^)!u Wy?(~ibWU$M'wR I’VIB`V⪪@(VTzh}J\ OV2%5Už}$wN iBvmBV⪪IBV⪪IBHV⪪IҖHvV⪪MCV⪪MJV⪪IBV⪪IBV⪪I² V⪪m?V⪪M;V⪪mV⪪IBV⪪MCV⪪IBV⪪I¶&V⪪mV⪪m?vMCV⪪IBV⪪IRV⪪IBIvIҖ V⪪IҲ& vm$V⪪mnV⪪IBv⾪루IBv루IҶ@V⪪m'vmvV⪪IBV⪪IBV⪪IҶV⪪n$V⪪mV⪪mwꑲ-IwS€n0*c}zrb,:W׵% 2I~>??wUҪ)!󹌖X\\\}~z\^`>=7\ --mVmVꪪIBvIÒVꪪIRV⪪IҶvIҖ&@VꪪmVMJvMJVꪪiBAV꺺덒IBVI¶IVꪪ꓍m'VꪪIҶHvMJwvIBwV⪪IBvv$VꪪIҖ& V⪺IR&V⪪mBV⪪MBV⪪IBV⪪IBV⪪uVꪪ'V⪪mv?V⪪MBV⪪MV⪪mBV⪪IR V⪪n$V⪪IBV⪪IBV⪪ꁆI’V⪪iBV⪪IBV⪪m'wvn?V⪪mvV⪪iSV⪪IBvICV⪪IBV⪪IҒ@V⪪mBV⪪IKV⪪IBV⪪IRV⪪IҒvIҒ`wV@/&6Kx^=DC--UЧe*?̊]$mk. 憐dI5ڨl_ ޅl'U mӺwက@pP(~\\|^m+Μl5'N7d-%k|wu(XCV&wU iKV⪪mv?V⪪muVKU%~[{ɐFe"SJ(~}"'hWc ͂-@WjUI$~w @*w^]NvUU/+UUUi UU2w UUyђ$Ip }```uUUUyB/B mV⪪ꎀnkWr@I@W^W&WUU@+UUUrw UUyk% }W@I@W^W&WUU@ UUUrw UUyk% }$N2w쐔+WWW{?iCV⪪{ȏTTT?? *Ո}pIwWTTTmV⪪tyIBV⪪tyI¶VꮪtyIRV⪪ztm'V⪪ztmV⪪ztmvV⪪ztm?V⪪uziCV⪪uzIBV⪪uzIBV⪪{u$V⪪{um'V⪪{umvv{mBV⪪v{IBV⪪v{IBV⪪|v$V⪪u۶M wT@zJ~x^WJl Hb$RJU I~Jrxz_KrDTWUOl s~vM?O$V̕ ~wFwV}wm?V⪪xI$wҺxx$w t$8+`̃ȯbeT\|~df[߾ mS]*m 'zzȟNTUUUy#'wU% yi;W#7U vm_x``r@@ vS.B.````r@@ zv0I q s1fe_W^mXZ7QmM+'mzguSmeKWdeKU%\$Cpf\C*lK}mDK[\І=HdUU~fUUUI+ uUUU `@#'wUU ^ȿΟ$`eIB@Veam$V`eIҒ&V`eIҶ&AVf`mV꿯f`mVafIBwVgam'VafI– Vgam'V⪯gam?VbgMCVbgIBVbgIBV⪮bgI¶V꾾bgIBHVbgIBAV⪺hbmVhbMV⪪chIRV⪪chIBV⪮chIBV⪪icm$V⪪icm?V⪪TYMRVTYIÒV뫪TYIBVTYIR&@V⪪TYI–&V⪪ZTmvV⾯UZmBVUZIBVUZiRV⪪UZIBV[Um?V⫫[U$V⪪V[M:V⪪V[MJrV⪪V[IBV⪪V[IJV⪪V[IBVV[IR@V⪫\VuV⪪VɑxwN@ppS9+ }c25}dKտi>4|9rPX^[M'3wC2%W=W k%Wp Iv_z`>2\\^V3'7eKU- X@/ dUPa#>DD--x@ 1wnef} tZ@X'5uUս f<# SfeUYأ&}$V\- Y^IRV_Yn$VꪪY^IҒV⪪Z_m:V⪫Z_iCV_Ymv?V⪪Z_IBVZ_IRVꪪZ_IR@V⪪`ZmK?-]VO$t>6hl -_Qh+wTRWIҖ&HVSXMCVSXiB@V⪾SXMBV⪪SXIBVXR]?wV⫿X ȏwTTT:UUU:UUUZ*UUUY~2w URɓ$N'v2 NIIv @@@:UUUI%@UpTIv@Z怆5˟w\WU#@J(UUUS~": @V =UJWUUJ-U?qUIv@WI0v^U= WUU@J UUU\vw+UUJk%v \VVV[IҶ&HV⪪GLMB@V꾾GLIҒ&VMGVMGmVMGnV⫯HMmCwV(*HMIBV⮮HMIBwV⪪NHm'wV *NHnVHMIR@VINmV⪺INiBVINIJVOI$VINIBVINIR& VOInV^I&?&wS6 ^I$w2@JVyKU  ,}x^WJt^ \v^x`h fdS_Vsdfe׿0Z#;\^^wd$C /7{s)1@[c2 UZUDK-uʏȏkzt$CW\N9XXT-5LZ&IwS LQI–VRLmVRLm'V꯯RLmwvMRMJwVRKmm?vW꿿RȏȏwTTTT2AU:UNɕDvWx`@BjX%U H  v @@@@AXX%UJIDIv @@@ WWUUH؃%Vյ%NWIv_x UUWVDUO(4vppP WUUUMOJPvյ QIw2UUPpINvWHX"&vB6U ?PUmBVPUIBHV⯯AFIKVF@mV⫯AFIBV⾿AFIBVAFIB@VAFI¶&VGAmVBGmCVGAmnVBGIBVBGIBVBGI–@VBGIB&VHBuV⮾BGIҶ# VCHmBVHBmwV⪂CHIBwVʪMCPk$wU ICuwV"""F pdCPXX^*T d^W5m'v+IÄ5ʅ\U׼K\m*kajuLM-$CUUW@bT_g#@LA\Xx\#2U- C5PdC55Dj6K^Iy$3}[K hɅT--X OHv WHI${6] ^E'w꒲ FKICVFKI¶HV⪪LFnVFKIږ$vW꿿KȏȏwTTTT2U=IIVUL1lw`ZUU2UUU5B`&|$v A  V @@@@;XX%UC  v @@@@;@US?۰$6Uxj***VVVV=UH@@4vPPPPE!YvUU II@wUU UUWV@,1U5OImwV OIIuwV :?IBwV@:ԭ$wV⪂@:MvV몫;@mJV@:mwV⪠(;@iBV뫪;@IҲwV⊪;@IҶ@wVA;m'wV⪪*;@IҶ& wVc@='gm-%- @ɝy †]^+)liczI ~cߪwMg+{=O'7%KA ]^_^xk 'ufSw~^@/C/UUA$M<6(dYBy ~xWUm酩 АllZ;s>r' E?m?vW⪮E?mwV⪫@EiBwV⪪E>$m;vW꿿םFȏȏwTTTT*UU3MIUUUUyUUW\WP@5U8VB:  V @@@@3XXU<  V @@@@4@UG8,Ӿ-UwVVVV6TB Ivp`"UUUTCjv UUGdvxUUWUU?0V5% CHI²V⺺CHIRIV⮮49IBV49IÒwV⪪49I¶wV⪪49IBHV49IҒ@wV⪪:4mvwV⠂:4mwV⪪5:MCwV"5:IBwV⠪5:IB@wV⪊;5uwV;5mwV*6;MJrwV(6;ICwV₪;5mvwV‪6;IBwV*6;IBV⯯6;IBHV⾿V4XqJlYC^pF\:_'u:UL HuEAj``>Iޗ:{]U)'d-Jd^ Jl 79s$7}5 r;g&W(;ɐ''\p*8 TU_``,CW{pu([7)[ -̄^A@[?RmUU 9p'O$- 9>IҲwV∀9>IRwVꪪ?9m$wV⪨?8-;Vwꟿ@ȏȏwTTTT?*ղ.U"U>9'0wXXVU UUU0ȏʿU"4  V @@@@.@U8II$V @@;IwUU1U@5.)JUwU< n$wUU2U?O$v-=K&Ivx¡=BIJwV=BIBV-2IҖIwV3-mwV.3MBvW3-mvvW*.3I–vW.3IBHvW.3I–&vW.3IҲ& vW:4.mvW/4mBvW/4IRvW⪺/4IBvW⪻/4IҒvW/4IR&vW⪪/4IRHwV⪪05MCvW⪪5/mvW5/ imgw5ڠ*JT/wb]'WoܾN!p02^\\VSI|c2= -$uU2|IS""zj KA%- DC/55e_2 =$U-%0O7bpA&J (W7O$$ %U}6I5Ҩu>UIo-!Iz3lDCU/G uK}*G? @n 7O$f/Vڈu81m+Wu82mm?vW⪪38iKwV⪪38IBwV⪪38IvvW6ȏȏmwTTT:UUU:UUUa?bUUU*3P VU-L4ȟ$V-  V @@@@&@T:4m?wV⠨5:iBwV⨢5:IBwV⨪5:IBwV;5m?wV⠪;5u$wV₢5:IҶ&HwV꺪6;iBV⪿6;iBV⪿6;IBwV⪪6;I–V<6u?V6;I¶&HV⯯;7mn$V',I–wV+',IRwV"-'u$wV‪(-m‘wV*-'mwV((-IBwV*(-I’wV(-IBwV?(-I’wV.(mwV.(m?wV8.(mwV().IJwV⪋).iJwV).MBwV⫨).IҒ@wV/)m$wV* ?)K4Wq4<*?I$W‰(*`iq$7$CWW *P_?Ol/P(I*}5u@Ibc;\K:/d:/Uk2k*?I'ɨu- 'Ijkj€~ik= E\* Ol)} Ӏ͕Br#;a4nik^?mE\5L7 j hL1uHk}A*8Ѳ2,u'vW2,m'wV2,mvvW*-2IJvW -2IҲwV-2IB vW-2IҖHvW3-2IUտ+-`mu}먼$C*X=S_l~lS^U(s&PɥT y&Ğ'I'VJk &+I–wV&+IBwV*&+IR@wV,&m$wV⊪,&u'wV⪪+'nu$wV몪',IBwVⲪ5$mֶ骪J($"wUUUI4!>`-'u'wV 'I$IBwUUU5)$"wUUU"$I0"@(-I’wVg'?IwUUU%*I$I2"wUUU*"wUUU`($I'wUUUX).MBwV>).iBwV⨠'I$IBwUUU *I$I"wUUU( BwUUU+$"wUUU &"?/)m(v/-%-əKV\x)S 'eKZ`dS݂`GuS3&eT%4M_1WѪ7%mwV_ %MBwVڞ %IR@wVz %IBwV⺿ %I²@wVo!&mwVU;aGL?@@@@& mmG5%I !`w !&{$`pT"Iĉ U% B+ v >dUUU-pd`h@hȏF#II w5 `d\UUUs&UU-(sPW @@#(IB@wV⯯)#m'wV⪪IBv6k}IBw6wju$v7⯪mvVUWm6viBv6⾶MBV7IBv6IBw6oIB&V6⪃7vfm6VUm6v⪫oMB6vSIB6v⺪ǯIBv6IB6v?IҲ& w6oIKv6⪯KIVrp1 ́d(SC2 guBU%EKU=})^{? @%T WIO'Dp 0'(~__^x/@ 5*_U5C'$ge- Ix mRX)B _}:ZlC)('m&\}`"'|$\-- , d7X`B-ˏ$7!nvw6,-CWꐢ.Xmwv5ڪI–wVUIBwV5aG  ??@@@Iy 5 !@>`1ۿM$1 !U IIWU@mx -0V% X&j2'!h_?C?b HI W5% @@$mvv6⪺IJvVW_y IBVڊ8 @nVu٪ I’Vڲ] IҶHV(  ICVٺ iBV IB6٪I IBHVẺ IҖ(*UmnV^ MJU₪U MJV IBv_ iBVmwI䉙 ;*rXCT)c-+9Jgu_ K}i ˱p'{='m[ yqRxctNP&mX⪉#',iK_Uh?oGd)+y @qdACo55Bc  ?l@p|kl + Yl'SG*%K,'K\j[^Jd [#2\~'$C*()S:'9 qD//2 ?|ڄrCI qT~W]IdR*dKU(" r\*.*&Z  5*aGt@@@: I$y%U$p6?G@` m3v! P0@x %p"m`+0 ` >` 0#?1x 5smx70 0@??IB@w*I¶w5ڪUIBx/UmB `UIB h(]IB@U4 HUm$ hUm6 XUiBpUIRx UIBpIB&@<IҶ&50wu'5 ,I`_ !@C3\\^W $C5\_ 9uJQzeOI:\ɗ0}Ql2~r@dI_ 2(pfedDK uP5 L5UU9]~xxHW@'uR'h\U|ɕѨ3r&\eK:.6lSU'uEK~ZHu:~^gd27/meKW'mDC_~f\B^pOϗ:cs_lK+ lS _'mf\//.( 0micb(͟${᫨%{]v%;o?!@@ Ix-]0" g @ IV  IJAV:I$WU`I$VUUhI$X\$I$"WxWUU MBV׽j ma$W5u I$W UU fI$WUU}I0  ICVT IBwm۶mm۶mm۶mm۶mm۶mm۶mm۶ma۶mxUUU6l۶mpUUU6`۶m8%UUU`۶mUUUa۶mUUU$IID?y @C8eK:-*_z:?UUP9D2 Ʌ``zWi}--*l}S޾* ?kfd¢z{ d*CyGwdEK ~zI'hlUz `UBU+qIP}gJ+) ) jn`x3|^~9S$2.W{y ʅDIGuB_ :W_dC 5}F1j ~}9_f. Gud:`~UXC 9 **F\:%5l$C?ddKzhس'N$pdL/ f>V ( ) ة*^HIb GI0U$ 0 $ 8V'I$?UIR&ApUMCpUm$UIB *Uv' X"}IҒ4_iB ڏ}mv?5"}m5ڰUm4ѠUII_:GH1" $4ڳU MB5ڳUm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶meg+JՕ8`S) %dc2}dK< Hgub!j``x~>:zo*6 %Ʌ%K>5kd 9jdR/lC///pguS /5:,maԶOmeKBj 'uC-%//%j,3AuF:ZS:__79&\jj!@ ldX T^ d^X_P5أ&l@``SpFK ȟT:%\:տKBd:UUF\:_U}xж:C25*7#@Tc2z>GS *6hm۶mm۶mm۶mm۶mm۶m PUUUm۶mXUUUm۶mxQUUU6`۶m UUUa۶m8UUUm۶mxQUUU6`۶mUUU`۶mUUU`۶mx@@@ նe[6,Fˏ@@@@!!aa__??@@@@%%aa[[??@@@@m۶m I\'`PPd[ ,5&@@@Pm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mI$,5Uh[l*O&kgdI'c  ~  tUm۶mm۶ $I$h}UU)I$~9Z`)[XkAAII%%%"?m*V{&hXha0 UxaOjlj̃<uK=Rh}Cq;I)!*O'r&J}ZX`@P[+*0S1zm۰igJWVW (m۶hSUUU@I[) -dEK} {)m 갲*ll`pQ)7_?@OB DX\ %N$ ATPYn`-rzs C'ك @PPP!!aa__??@@@@Xvp TTPN1E=۰mPTTUm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶m a۶m'KUUU -)|ltrz?*dտa6T/;I*B /! d* ,JfS@<s:)thzi{h/+% lKV9mS:Zh6nh[[?fd#XF\E)˅S-+` ,+[ZW !b橅b?KB?+-z%&\)pp`$S* E\:@*I$svlJ\\jaəN 'u:'m[__dB_Gm%K׽-}S]ׯ }T}SWߺ ?'m$C_k]؁M۩[ZTT\I$, %t&)'҃ VUzkɑI$c%[)FKOX u)B}S 5@`lfd \TVVT+?m۶$#!dB`_Up.'|$9UUUPސ@kk{S p 筦 ա?(u\XzOBUUTK KUUUT$KTUUU/0۱ ^ȏ Gm۶ m۶mm۶maa'?G ۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶m cmۦ1UU ۶mhBTTUUm۶mm۶mm۶m m۶mUUUm$dUUUI4d!}+y>libə FS% ,C1hcfd_ :- 0 'md:$ * ji#`` } l۩{U m۶m1TUUU m۶a;JUU  ih̍@*9Pmk@@"$lU]WO lSW}%\0AJE:ڼEKTVVV99I}UUUCUUUTew?S N'{'JZXXR..6n6npp K?)`r"'\x_Uh{$[UU`dX\UU7+]۳ ʏo?-ء$Iy ۱aa\@$2Z؏Gm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mIdI(dH'mS{y_l$C?/9Q}hh!`Tf1-mdd:ꪂ` }'',eKUZ5Nl%:Xx|W ۰FBVTTTm۶mf1UUUЬڋ]J[mZPm۶!2hlUUUI'-`UjhIOt=d1k["q) k$!U ȭ$ke)_H?I$)TWUU!˿% +xSxpn"Cʅ*P`SWVTW*C?bUU @ ) .ş+ ^XXVUUs">dZp.vnv(JUUUTLI%Wb>)``t`&\UU] I"$2UUUT?)mm۶mbmh MК$۲ aaVn/g m۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶m[cm)[UUU!Vol* 5d@! FK!S://t)b :*/Sc25*$C = BVXh*IɛI[Y!PcW0 }C guKz ]شM)}TVt a۶m[UU~6`5M}  #*U(m{)UUUȿj&\-^1Lk`g@m`6<ɓ? twuUSW!VUUUA/UU:UUU-?J Օ-AN(uR`WS__ $KTXxx*\ _TeK\xm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶maam۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mbmc%U,ذmۉlX^WUXI$hS %p`&Kji1ˍC--K#2T\%K $)1@P#졘kBꪡɛT`l/w-l'uy?J @C]`:W'uh'ș;[mN0C` d `9()~I$UUl Ϯ ( l.9eϮ``_iI*I @)ɕ$ |U`a#m)UU_֥̋K$C_W 9[c!h>Qbn ͈RrAABp +Uk-|?(I[.< (`JB€@ J JO$H$'BTVVVm۶mm۶mm۶mm۶mm۶mm۶mm۶mcmm ضmm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mnlg4JAi%Vna- UI$mUdc,V)}(`+c2@z_~j>[xjP@kJ** lgu* +z*5̍h^fc [URշ$I' l Wzl6`l ۶mGUUUFnVn䏦 l(dhp'r$+xxW>^nk  :\sPPYl!W> d)UU^,=&K**z0d'N$S4~ISl&&lɑ$I$cUU ym@?UUj1Vogd%?l2r~s">#[@jJ**m۶m:TUUUm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mm۶mpyglet-1.1.4/tests/image/rgb_4bpp.bmp0000600013464101346420000007435611266427715015663 0ustar yohyohBMxv(xx  # 'Ho[4ngTi]kM&fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffgfffffffffffffffffffffffffffffffffffffffffffff`fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffgfffffffffffffffffffffffffffffffffffffffffffff`ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffgvffffffffffffffffffffffffffffffffffffffffffff`fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`fffffaffaffaffqvfgvffffqffafaffqffffafgvfffffffffqvfaffqfffafafffffffffffffffff`fffffafafafaffffffafafgvffffffffffgffafafaffqfavffffffffffffffff`fffffafafqfffqffqffaffffffafafaffffffgavffffaffqffqfafqfffvqffffffffffffffff`fffffafavaffafffffffqfffffafafafffffffaffffffqfffffaffaffffffffffffffffffff`fffffafgffaffafffffafafaffffffffaffffffffaffafgqqffffffffffffffffff`fffffaffqffaffffffffafafaffffffffafffffgvqffaffafaaaffffffffffffffffff`fffffaffvfafffqfqffqffffffaqfffffffgavfffafafqfqfafffagaffffffffffffffffff`fffffffafaffffffafaffffafffffqfavafafafqfgvfffffffffffffffff`ffffffqvffaffqffgvffffqffagfffffafgvfffffgfqffaffqfffffffffffffffffffff`fffffaffffffffffaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaffffffffffffffffffffffffffffffff`fffffavfffffffffaffffffffffffffffffffffffffffffffffffffffffffffffffffffffaffffffffffffffffffffffffffffffff`fffffaffffffffaffffffffffffffffffffffffffffffffffffffffffffffffffffffffaffffffffffffffffffffffffffffffff`ffffffqffffffffaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaffffffffffffffffffffffffffffffff`fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`fffffffffffffffffffffffffffffffffffffffffffffffffffffffqvffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff`ffffffffffffffffffffffffffffffffffffffffffffffffffffffffqvfffffffffffffffffffffffffffffffffffffffffffffffffffffffff`fffffffffffffffffffffffffffffffffffffffffffffffffffffffffgfffffffffffffffffffffffffffffffffffffffffffffffffffffffff`fffffffafqvffffafffagffaffqffqfqvafffgvffafffqvffffqafafafqffffffff`ffffffaffffffffavafafgvgaffgfgffgffffafaffffffffff`ffffffavqfvqffffgfffaqavqfqvqfqfaqaffaqavffaqfffffafafgffffffffff`ffffffavaffwqffffffffavgavafffffavgaffavgafqffavgfffffafaffffffffffff`ffffffafqfffffffaffaffffffaffaffaffafaffafgfffffafafffffffffff`fffffggqfvffffwfffavggqffffvfavgavfavgafafgavgfffffavqfwffffffffff`wvwwwwwwwqwwqggwfwwwvwgqqvwwqwwqwwqqqwqqqwqwwqqgwgwwqqwwwwfwgwwwwgwwpwwwwwwwwwwwqwwwwqwwwqwqwwqwwqwqwwwwwqqwqwqwwwwwwwwpwwwwwwwqwwqwwwwwwwwwqqwwqwwwqwwwqqqwwwwqwqwwwqwwwqqqwwwqwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwqwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwwwqwwwwqwqwwwwqwwqwqwwwwwwwwwqwqwwwwwqwqwqwqwqwwwwwwwwwwwwwwwwwwwwpwwwwwwqwwwwqwwwwwqwwwqwwwwwqqwwqwwwqwqwqwwwwwwwwwwwwwwwwwwwwpwwwwwwqwwwwqwwqwwwwqwxwwwwwwwwwqwwwwwwqwqwwwwwqwqwqwqqqqwxwwwwwwwwwwwwwwwwwpwwwwwwqwwwwqwwwwwwwqwqqwwwwqwwwwqwwwwwwwwwqwwwwwqwqwqwwqwwqwwwwwwwwwwwwwwwwwwwwwpwwwwwwqwwwwqwqwwwwqwqwwwwwwwwwqwwwqwqwwwwwqwqwqwqwwqwwwwwwwwwwwwwwwwwpwwwwwwqwwwwqwwwwwwqwqwwwwwwwqwwwwwqwwwwwqwqwqwxqwwqwwwwwwwwwwwwwwwwwpwwwwwwqwwwxqwwwwwwqwqqwwwwwwwwqwwwwwwqwwwwwqwqwwqqqxwwwwwwwwwwwwwwwwwpwwwwwwqwwwqwwwwwqwwqwwwwwwxwwwwqwwwwwqwqwwwwwwwwwwwwwwwwwwwwpwwwwwwqwwwwqwqwwwwqwwqwwwwwwwwwwwwwqwwwwqqqwqwwqwxwwwwwwwwwwwwwwwwwwpwwwwwwqwwwwwwwwwwwwwwwwwqwqwwwwwxwwwwqwwwwwwwwwwwwwqwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwwqwwwwqwwwwwwwwwqwwwwwwwqwwwwwwwwwwwwwqwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwpwwwqwqwwwxwwxwqxxxwxwwxqxxwwxxwwxwxwwwwxwwwwwwxxxwwwxwxwwwwwwwxxwwpwwxxxxxxxxxxxxxxw333:3333333:3333333333ɺʪɪɪʪʪ3333333335U˪ʪ̺̺ʪʪ3335UUU3133U̪ʪʪʪʪʪ3333UUUUS333Y̪ʪʪʪʪʪ3333UUUS3335Y̛̪ʪɪʪɪʪʪʪ33U5UUUS3335U̪̚ʪ̪ʪ̪ʪʪʪ33S5UUUUU3335Yɪ̪ʪ˪˪ʪʪ35SUUUUUS335UYʪ̪ʪ̪̪ʪʪ35S5UUUUU35UU̪̚ʪ̪̪ʪʪ335S5UUUUU35U̺̪˪̪̪ʪʪ335S3UUUUU3UU̪̪ɪ˪̪˪̪˪ʪ3UUS3UUUUU3UU̪̪̪ɪ̪ɪ̪ɪʪ3UUS3UUUYUUUU̺̪̺̺ɪ̺ɪ̪ʪ3UUS5UUUYUUU̺ɺ˫ʪɫʪ˫ʪ5U5S5UUUUUY̪̺̺̚̚5UUSUUUUYUUUUUʪ̪ɪɪ̪5UUUUUUU3UUUɪ̪̚̚ʜ˪5UUUUUUYSUUU̚ʪʩ̪̚̚ʫκ33333UUUUUUUUUY̛ʪ3333333:5UUSUUUUUUʪ333333333333:UUUSUUUYUYʺ33333333133UUSUSUUUU˻3333UUUS335YUS5UUUYۻ3335UUUU31335USUUUU3335YUUU3333U5UUUUYU335SUYUUU3333UYUUUY3353UUUUUS333UUU33U5UUUUU333UUUU33U3UUUUUS3UUYUYDDDDDDODDKDDJDDD?DDDC33U3UUUUUS3UYYDDDDDDDODDKDDDDDDDTDDDDDD33U35UUUUS5UYYDDDDDDDDKDDKDDDDODDDDDDDDDDK5UU35UUUUS5UYY3:DDDDDDDDEDDKDDDDDDDD4DDDDDDDK5UU35UUUUUUYY3UDDK4DDDDDKDDDJDDDDDDDE_DK5UU3UUUUUUYYUS5YDDKDDDDDKDDD[DDDDDOK3USU3UUUYUUUYYS5DDKDDDDDKDDDDDDDDJ3UUU5UUUUUUUUUYYYUUSUDDKDDDDDKDDDDDDDDDDDDDDD3UUUUUUUYS5UUYUUYP5USUYDDKDDDDDKDDDDDDDDDDDDDDD3UUUUUUUU5UUY5U3UDDKDDEDDKDDDDDDDDDDDDDDD5UUUUUUYUUU5U5UUUDDDDDDDDKDDKDDDDDDDDJDDDUUU5UUUYUYY35UUYDDDDDDDODDKDDDDDDDDODDOUUU5UUUUS5YS3YUYDDDDDDDDDKDDDDDDDDDDDEUU5U5UUYY335UUYDDDDDDDDDDKDDDDDDDDDEDDKUU3UUUUS3UUYUUYDDKDDDDDKDDDDDDTDDDDDDD[UU5UUUYUUUUUYDDKDDKDDKDDDDDDDDDDDDEUUUUUYU3YU5UUUYDDKDDKDDKDDDDDDTDDDDD[UUYYU5YUUUDDKDDKDDKDDDDDD_DDD[YYSU5YUUUUUYDDKDDDKDDKYY35UYYS5UUYDDDDDDDDDDKYUUUUUUU5UUYDDDDDDDDDDKYYUUUUUYUUUDDDDDDDKDDKYYU5UUUYUYDDDDDDDDKYYU5UUUUDDKYUYU5UUYYYUSUUUUPUUU5UUUYUYUUUUUYYUUUUYUUYYSYUYYYYYUYYYPYS3YYU""+"""""""""""+U3YU35Yۻۻ""+ۻ"""+""""""+""""""+۰ۙS09Y33ݵY""-"""-""""""""""""""""-۹35YYYUՙY""-"""""""""""""""""""-YUUYYYՙY""-ݲ"""ݲ"""ۻ""ݲ""""""-ݻUU5USYٙY""-"""+"""-ݲ"""-"""-ݻ55SYݵPU""-"""""""""ݲ""-ݻ5UUۙUY""-"""""""""""""-"""ݲ""-ݻ5U[ۙUUUUY"""""""+"""""""""-"""""-ۙݻYSYUY""""""""""""""""-"""""-YݹYYUY""""""""""""-"""ݲ""-ݹٙPYS3Y"""""""+"""ݲ""-"""ݲ""-ݹۙU3YU35""-ݻ"""ݢ""+""""""-"""-ݵݙS09Y33""-ݲ""-""""""ݲ""""""-ݹݹ35YYYU""-ݲ""-"""""""+""""""""-YUUYYY""-""-"""""""""""""""-UU5USY""-""-"""""+ݲ""""""-55SY""-ݲ""-"""+ݢ""""-۹5UU""-"""-""-ۙU[""""""""""-ۙ""""""""""-Y"""""""-""-ݹ""""""+""-ݹ""-ݹٝݿݿݿݿP0]^^PP^^ 0>P  ^ P ^^0^^^] 0 ^ ^P50Upyglet-1.1.4/tests/image/PIL_L_SAVE.py0000700013464101346420000000112511266427715015534 0ustar yohyoh#!/usr/bin/env python '''Test L save using PIL. You should see l.png reference image on the left, and saved (and reloaded) image on the right. The saved image may have larger dimensions due to texture size restrictions. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: PIL_L_SAVE.py 661 2007-02-17 00:23:30Z Alex.Holkner $' import unittest import base_save from pyglet.image.codecs.pil import PILImageEncoder class TEST_PIL_L_SAVE(base_save.TestSave): texture_file = 'l.png' encoder = PILImageEncoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/__init__.py0000600013464101346420000000000011266427715015544 0ustar yohyohpyglet-1.1.4/tests/image/PYPNG_LA_LOAD.py0000700013464101346420000000075411266427715016076 0ustar yohyoh#!/usr/bin/env python '''Test LA load using PyPNG. You should see the la.png image on a checkboard background. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: PYPNG_LA_LOAD.py 661 2007-02-17 00:23:30Z Alex.Holkner $' import unittest import base_load from pyglet.image.codecs.png import PNGImageDecoder class TEST_PNG_LA_LOAD(base_load.TestLoad): texture_file = 'la.png' decoder = PNGImageDecoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/PLATFORM_L_LOAD.py0000700013464101346420000000146311266427715016322 0ustar yohyoh#!/usr/bin/env python '''Test L load using the platform decoder (QuickTime, GDI+ or Gdk). You should see the l.png image on a checkboard background. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: PLATFORM_L_LOAD.py 661 2007-02-17 00:23:30Z Alex.Holkner $' import unittest import base_load import sys if sys.platform == 'linux2': from pyglet.image.codecs.gdkpixbuf2 import GdkPixbuf2ImageDecoder as dclass elif sys.platform in ('win32', 'cygwin'): from pyglet.image.codecs.gdiplus import GDIPlusDecoder as dclass elif sys.platform == 'darwin': from pyglet.image.codecs.quicktime import QuickTimeImageDecoder as dclass class TEST_PLATFORM_L_LOAD(base_load.TestLoad): texture_file = 'l.png' decoder = dclass() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/DDS_RGBA_DXT5_LOAD.py0000700013464101346420000000102611266427715016627 0ustar yohyoh#!/usr/bin/env python '''Test DXT5 compressed RGBA load from a DDS file. You should see the rgba_dxt5.dds image on a checkboard background. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: DDS_RGBA_DXT5_LOAD.py 823 2007-05-09 13:01:58Z Alex.Holkner $' import unittest import base_load from pyglet.image.codecs.dds import DDSImageDecoder class TEST_DDS_RGBA_DXT5(base_load.TestLoad): texture_file = 'rgba_dxt5.dds' decoder = DDSImageDecoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/PIL_RGB_LOAD.py0000700013464101346420000000065111266427715015737 0ustar yohyoh#!/usr/bin/env python '''Test RGB load using PIL. You should see the rgb.png image on a checkboard background. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest import base_load from pyglet.image.codecs.pil import * class TEST_PIL_RGB_LOAD(base_load.TestLoad): texture_file = 'rgb.png' decoder = PILImageDecoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/BMP_RGBA_32BPP_LOAD.py0000700013464101346420000000101111266427715016667 0ustar yohyoh#!/usr/bin/env python '''Test load using the Python BMP loader. You should see the rgba_32bpp.bmp image on a checkboard background. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: BMP_RGBA_32BPP_LOAD.py 2002 2008-04-12 10:59:20Z Alex.Holkner $' import unittest import base_load from pyglet.image.codecs.bmp import BMPImageDecoder class TEST_SUITE(base_load.TestLoad): texture_file = 'rgba_32bpp.bmp' decoder = BMPImageDecoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/DEPTH_SAVE.py0000700013464101346420000000321711266427715015505 0ustar yohyoh#!/usr/bin/env python '''Test depth buffer save. A scene consisting of a single coloured triangle will be rendered. The depth buffer will then be saved to a stream and loaded as a texture. You will see the original scene first for up to several seconds before the depth buffer image appears (because retrieving and saving the image is a slow operation). Messages will be printed to stdout indicating what stage is occuring. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' from StringIO import StringIO import unittest import base_save from pyglet.gl import * from pyglet import image class TEST_DEPTH_SAVE(base_save.TestSave): alpha = False def draw_original(self): glClear(GL_DEPTH_BUFFER_BIT) glEnable(GL_DEPTH_TEST) glBegin(GL_TRIANGLES) glColor4f(1, 0, 0, 1) glVertex3f(0, 0, -1) glColor4f(0, 1, 0, 1) glVertex3f(200, 0, 0) glColor4f(0, 0, 1, 1) glVertex3f(0, 200, 1) glEnd() glDisable(GL_DEPTH_TEST) glColor4f(1, 1, 1, 1) def load_texture(self): print 'Drawing scene...' self.window.set_visible() self.window.dispatch_events() self.draw() print 'Saving depth image...' img = image.get_buffer_manager().get_depth_buffer() file = StringIO() img.save('buffer.png', file) print 'Loading depth image as texture...' file.seek(0) self.saved_texture = image.load('buffer.png', file) print 'Done.' self.window.set_visible(False) if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/PLATFORM_RGBA_LOAD.py0000700013464101346420000000140611266427715016637 0ustar yohyoh#!/usr/bin/env python '''Test RGBA load using the platform decoder (QuickTime, GDI+ or Gdk). You should see the rgba.png image on a checkboard background. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest import base_load import sys if sys.platform == 'linux2': from pyglet.image.codecs.gdkpixbuf2 import GdkPixbuf2ImageDecoder as dclass elif sys.platform in ('win32', 'cygwin'): from pyglet.image.codecs.gdiplus import GDIPlusDecoder as dclass elif sys.platform == 'darwin': from pyglet.image.codecs.quicktime import QuickTimeImageDecoder as dclass class TEST_PLATFORM_RGBA_LOAD(base_load.TestLoad): texture_file = 'rgba.png' decoder = dclass() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/rgb_16bpp.bmp0000600013464101346420000035503611266427715015743 0ustar yohyohBMF8  wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwι'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwιUwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwv⭱䀭wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwv⋩vwww4IvwwwvH'3ww2ҋ&&vwwwwwwwwvꌱi4wwwwwwwwwwwwwι䀭wwwwwwww4IwwV⭱''vwwwwwwwwwwwTwwwwwvH'3wwwwwwwV⭱''vwwwwwT&www'4wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwjjwwTjwwVHwwiwwwwwwwwjTwwwwwwwwwww䀌wwwwwwwwwIwU&&Uwwwwwwwwwwꌱ'wwwwVHwwwwwwU&&Uwwwwꭹ4wT䀭wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwv⌱wwꋩjUUjwwꌱH3vv3ι'wwIUvwwwwwwwwjUUj䀋wwwwwwwwww䀋wwwwwwwwww3wwwꋱjUUj䀋wwwwwwwwwUwwwꌱH3vV3ι'wwwwwwꋱjUUj䀋wwww'ιwι'wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww䀗vv䀗wTڗTwwTڗwwwv3ιwwTwwTww䀗䀗wwjvwwwTwTwwwwꭹjTڗwww䀗wwTwTwwT&HwH&4wwwwwwwwwwwwwwwwwww䀗ꋱ䀗v䀗䀗3Hιvv䈗䀗v䀗i䀗v䈗vH&u䀗䀗䀗vv䈗͹T䀭䀖ιG䈖TڗT䀗'&j͹SڗTږT䀖Tږv䀖Hv䀖TڗTιꭹ䀭䀖䀖TږT'uiiiu'䀖ꭱSږ2&ꊩiuui䀖ꬱιuj3ҖtHiuuj䀋䀖juTGu䀖ꋱjuuj䀋&TږTꬱιuj䀖䀖ꋱjuui䀋SHιHSږ䀖it䀊䀖u'tږi䀖䀊tږ䀖䀊䀬䀖t&&tږ䀖u&&uGH–u'tږ䀖䀖u&&u͹ιSSږι͹䀶͹H¶Si䀖͹G&u⬱&&RҶ䀖ꬱiSږ䀖䀖꫱䀖t'Sڶ䀶u⬱'&uH͹G͹G&u䀖䀶u⬱'&'tڶt'䀶䀶䀶䀶䀶䀶1Ҷ䀶䀶䀶䀶䀶䀶ꊩ䀶䀶䀶䀶䀶䀶䀶⫱䀶䀶䀶䀶䀶䀶Q҉h/䀉hPҴq&Pg⪩qҪ&&˱⪩˱⪩GGO ̱ډ˱FF⪩˱ڈ˱h⪩hꪩ䀉䀉ꪩ䀉䀩ꪩ䀉F.˱䀩&&˱䀩䀩hꪩ䀉hq˱hOpq˱䀉≡䀪q˱˱Gڪ.䀪ꪩ䀉≡ʱ䀩≡˱%O⩩ꪩ䀉≡䀑q˱䀒o o䀲%o%䀲O䀩%䀲%䀲%%䀲o˱h ˱˱䀉˱䀲 GF&  G䀲% G%䀱%h%䀲䀱%%䀲%䀲䀲 G䀩N%뱱F䀱Ng뱱F䀉≡䀪뱱F˱Gک䀲%G목䀉≡gʱ䀩≡ʱ䀩N%목䀉≡䀩N%뱱F䀩뉡-눡뉡-䀩뉡-F&&䀩䀩&F䀩䀩䀩뉡-ʱʩ gNFFʱ gN gN GgoF%ڈ˱FFʱʩڈʱʩ gN44444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444443444T3334S3344T4T34T33S3T34T33T3TS33T4TTTSSSSSSST4STSS343S344TTTT444TT3T3TS34TT34T4S3444TT33SSTTT44434TTSSTST43T4T4TS4443ST44STS3S3S44S44443T43S4T34T4SS33433T3T3T3T334344TS4T3434STT44TT4STST4TT3STT3TT34S34S4443STS4S343443S444T4T3SST4STSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSҨ%SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSɩSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSsSsSSsSSsSSSSSsssSsSSSSSsSsssSSSSSsSSSSSssSsSssSSsSSSSSSSSSsssssssssSSSsSSsssSSSSSSsSssSSSSsSSSSSSsSsSssSsSSSSSsSSSSsSSSSSSSsSSSSssSSSSSSsSSSSSSSSsSsSsSSsSsSsSSSSSsSsSSSSssSSSSss먡2S%mSSsssSssSSSsSSSssssSSSssSSSSssSSSSssSSSSssSSsSSSsssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssgssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssEF RsssssssssssssɩssRm¨%%+sss%ssssssssssۨssRl‡g ssEF RsssۨsssssssssssssssssRɩɩRsssۨ% 2sssRl‡g ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss䀨sssssssssssss뇙ERsFssslsssssssss뇡sRgss䀨sss뇡sssssssssssssssssɩ䀨ss1%ɩssRgssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss뇡1rssssssssssssLsR%䀨RrsssssR+%ssssssssssss 䀇rRLfss뇡QrssssssssssssssssssssssR ssȡ1Q㨡ss 䀇rRLfssssssssssssssssssssssssssssssssssssrrrrrsrsrrrsrrrrsrrrrrrsrrRL%rrrrrrrsrr ss+䀨rrsssrrsrrsrsrsrrrrsrr%0ssrrrrrRL%rss䀓rrrsrrrsrsrrrssr䀮rrrr%1rr䀒s%1rrrsrrsrsssrsrssrrrrssrrrsrrrsrr䀒r䀒䀒ۇl’ɩrfҒ䀒䀒Q+䀧䀒䀒ۇl䀒䀒rr䀒 䀒rr䀒䀒r䀒0ےr䀒䀒fFɩKےrr䀒g1䀒%fFɩKے䀒䀒0ےr0ے䀒rKf䈒%0ے0䀒%䀒ɩq%䀒ҒQ‡䀒Q r䀒Ғ䀒 KqrȡҒQ‡䀒䀒ɩqɩq%*ےF䀨QQ㨡䀒 Kqrȡ䀒ɩ 䀒맡䀒䀒q%fӒ䀒f䀒qf%0ے맡䀒䀒䀒ɩk%*ȡ䀌’0$䀒qf%0ے䀒䀒 r䀒q FF Ӓ䀒q䈒*ȡ䀒q䀒rKfE qq FF Ӓ䀒䀒䀒%l0ۧ% K’0ۨ% 䀒qKfE Q䀲䀲䀲q Fq%ȩӑ0ی†䀲%䀲䀲䀲䀲䀲䀬²/E䀲J䀲䀲䀲䀲䀲䀲%ʲ§%Eȩ²²䀲䀲䀲䀲䀲䀲00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/00//00/0/00/0//0/0/0/0000000/0/000/0/00/0//0/00000000//0/000000/000///0/00/0/0000/00000/00/000//0///000//00//0/00/00//0/0/0//0/000/000/00//0000000000/00000000/00/0/00//0/0/0/0/0///0//0000/00000000/00///0///00/000//00/00000////00/000O////////O/OO//////////O/O//O//////OO////O///O//O///O///O/OOO//////O//O///O/O/O////O///////O//O/////////////////O///O///OOOOO//O/O////O///////O///OO/O//////////O//O/OO/O///////O//O//////O/O/////////OOO////O/O/OOO///O//O//OO/OO/////O///OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoOOOOoOOOOoOOOOOOOOOOOOoOOOoOOoOOOOOOOOOOOOOOoOOOOOOOOOoOoOoOOoOoOOOOOoOOoOOoOOOOOOOoOOOOOOOOOOOoOOOOOoooOOOOOOOOooooOoOOOOOoOOoOOOOOOoOOOOOOooOOOoOOOooOOOOOOoOOOooOOoOOOOOoOOOOooOOOoOOoOOOOOOoOOOoOOoOOOOOOOOOOOOOoOOoOOOOOOOOOOOOOOOOOoooooooooooooooooOoooooooooooooooooooooooooooooooooooooooOoooooooooooooooooooooOooooooooooooooooooooooooooooooooooooOoooooooooOoooooooooooooooooooooooooooooooooooooooooooooooooooOooooooooooooooooooooooooooooooooooooooooooooOoooooooooOooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooononoononnnonnnnnonoonnononoononnoonnoooonooooonnoononoooononnonnnnnnonnoonnoonnnnnonnnonnnnnnnnonnnnnnnnoonnonononoonnnoooonoononononnoooonnnnnnnoonnnonoonnoonnnoonnooooooonnnoonnnnnoonnnonnnonooonnoooonnnonnnnnnoooooonnnnnoonnooonnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnMӋÊ,m 誧&Fj mFf璦yqqr%zfǒ袨)I))))Jm܍ FzriijErerzfqdqdqyyqqqyF,ԭ습fv#O7''/BGf'j쉭nCG//CGnɥ쉭nCG//CGnɥ䧚EzHezj%jjrrj{{{zq#i`i#i#iCaiiEj&{̭7/njŭ쩭b7'fj쩭b7'fj쪻FqErGr$jjs{sfs{{{r%rdi``aCiiiDjjkt } 켭ܭ,CGGG䨚zrzz{rejjs)t)tsss{h{riCiCidiqrerjkGlttu } 촭+́/Fq%rz'{jjGkt|ittsts{rqiiiidrrjkGtlttu)+ĭb?W+ ɭ'W +ɭv7'W +ɭv7Ț&zjEjzh{'sjkkIt|I|sss|{'{jiiij$jjkklglllt)}J+̭~''n쩭#O'n쩭#O܇&zfrrzsjGkk)t)ttskl(t{G{$jjjijejjksGtlltu ujJ 'W+W+KԆzrr'{sjgkk)t)tkks(tItsr$jejejDjdjjkfklhltttu uJkJ BG//Çrjr'{h{rjGkk)ttskkt)ts&srrjj&kkk'lhlltl u ut)}jjJ켬^'IfrjrG{h{jj&ks tsgkFkfkk)t tGsjjj&kkkHthtlltl)u)u)uI}jjj+7j,'' 蚇zrjrH{'{jjjGksss&kfks(tt{jjjfkcdhlllt u u)uI}I}J}jK',/K bG/K b?K ǒz(ss'{ghrejjgksssFk&ksi|(tsrj&kkkdllttt u*uJu)uJ}j}kvW'nW'슽n'K' KԧrHs'kG{g{zjrsssfk&kfksi|i|{jjFkfcckhlttttt u)}I}J}k '+ 'j '7, fɵ '7, fɭ ? 7 쩻r'kGsG{g{grjs{{sgkfkkHt|||gk&k%kecklhltltltt u)}J}k}k, 7 /+ 婽_ ,/BG KեvbG +/BG KեvbG #O 婽7_ zksGssggrrs|)|sgkfklit||j|s&kccl'lhlthlGlhlltt)uJ}k}k}k, _G     ǒzjhss{h{G{jgs|(| |skktit|˄J|Fsrkfkllckk'lhll|)})}J}kk}, Gb? f f f ~b?, ǒr'kssG{g{k&ks(t(tsgkgksHt||{rrkEkkkck'lhlllt u uJ}kk}, K'f ,_ ȵ77ɵ 赂77ɵ  f7 , , , , , , J ɻ *̋ , ,, , ,, jksgsȃ{kstttkkk(t||||{sj%sEkkkk'l'ltttt u uJ}J}k} , , , , , ,~f,, ,#O ,, #W/ ,,, ,nbG''7f, , ,nbG''7^,, , , ,  n7'bGK ,,,,,,,,,,,,,,,,,,,,,,,,, JH'ǚ%%Efǒ( j ,,,,,,,,,,,,,,Hzgkss{{skkttkfkcltt| }|I|fs%kfkkl'lGlglglltlt u u)uJ}J} ,,,,,,,,,,,,,,,Kb?b?GK+Kn/,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, Æe璦yqqr%zfƒGhh ,,,,,,,,,,,'{ssgsgrss)|tskk(lttt }||kfcccglgltlllltttt)u*uJ}jk +,,,,,,,,,,,,,,,,ա7,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+,,,,+,,+,,++,,,+,,,+jfzriijErerzfqqcqyyqqqyeG黊 +,,,+,++ 刣skGsGsG{rks |ssk(llt u+} }|tc[[&\gdgddlhllt u } u uJ}J}J}JK+,,,+,,,,,,,,,+,+,jCO,+,,,,,+++,,,,+,,,+,+,,,,,+,,+++,+,,,,,,+,+,,,,,++++,,,+,,,+,,,,,,+,,+,,,,,+,,+,,,,,,+,+,,,,+++++++++++++++++++++++ƚ%EzHezj%jjrrj{{{zq#i`i#i#iCaiiDj&{(ɤ ++++++ԈȃkGkjsh{'sskkskklilt }+} u }|t(ld'dGddgddlglltt }*}J}J}J}J}jk ++++++++++++++++++++'7/v++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++K++++K+K+++K+KK++++++ fqErGr$jjs{sfs{{{r%rdi``aCiiiDjjkt)}))J ++++K܈skkrrGs'kGkGkkkc(d(dilt+}*} ut utilHd'd'dgdGdgddllt u*}*}J}k}J}J}jk ++++++K+++++K+K+++++++ɽ~#W7''/bG_K++K++++++KK++++++++KK+K++++K++K+++++++K++++++++++++++++K+K+++++++++++++K++++++++K+++++K++++++KKKKKKKKKKKKKKKKK+KK+Kzrzz{rejjs)t)tsss{h{riCiCidiqrerjkGltuu}IJ KKKKjhskgkjrGsskkccddHdidlt+}K}*u*u*u+ulhd'\&\gdFdfdddlt*uJ}J}KkkJk+++KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK+KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK+KKKKKKKKKKKKKKKKKKKKKKKKK+K+KKKKKKKKKKKKKKKKKKKKKKK+KKKKKKKKKKKKKKKKKKKKKKKKKKKIfq%rz'{jjGkt|ittsts{rqiiiidrrjkGtlttuIJ++KK+'kkkGkss)t)l l)lIlIdIdhddd+uKuK}+u*u*u+utHd[S&\F\F\ddll*uJ}KlkJK+KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK+%zjEjzh{'sjkkIt|I|sss|{'{jiiij$jjkklglllu)}JJ*+K+'kcck lJttttttlllhdd*mKmluluKukukul},uidSSG\g\\ddl*mKuj+KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKܦFzfrrzsjGkk)t)ttskl(t{G{$jjjijejjksGtlltu)ujjJ K+GklHlltttttllllld mKmluuu}}}}dKK&Tg\\d e)m*mKuLKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKԦzrr'{sjgkk)t)tkks(tItsr$jejejDjdjjkfklhltttu uJJ* *k(lltt|tttttt u ud eKmu}}υ3lSSTF\\ m)mJmKmlu͍lKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKIĦrjr'{h{rjGkk)ttskkt)ts&srrjj&kkk'lhlltl u ut)}jjJ+*ݨkHlttt|ttltt u,uLu+m*mKmuυ344UvKdSTG\g\\Imkmku΍Ε͍̍핬lKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK<+SS,KKKKKKKKKKKKKKK,t[+ #[KKKKKKKKKK푬c[3[3[r,KKKKKKKKKKKKkKkkKkkKkKkkkkkkkKkKJ퇫frjrG{h{jj&ks tsgkFkfkk)t tGsjjj&kkkHthtlltl)u)u)uI}jjjkkHltttttttlll,uMuLuKmkmlm}3UپS(\H\g\\)mju4vuύ͕ͥkJkkkkKKkkKkkKKKKkKkkkkkkKKKKkkkKkkKkKkkkkKk tKkkkkKkKkKkkk4|Kkkkkkk<# SϼkkkKkkkKkkkjkjjkkjjjkjjkkkjjkkJzrjrH{'{jjjGksss&kfks(tt{jjjfkcdhlllt u u)uI}I}J}jj*Ũcittttlttlll m,mmulmkmmkmu}4پVSIdd\ eJm}υvؾ2ΕPIdzH JjjkjjjkkjkjkkkjjjkkkkkkkkjjjkjjkkjjkjjjSkkkjkkjjjkjK<#kjjkjj4|kkjkjjjkjjjjjjjjjjjjjjjjjjjjjj 撦z(ss'{ghrejjgksssFk&ksi|(tsrj&kkkdllttt u*uJu)uJ}j}Kktllltlllll m,mlmlmJmmuu}ضپQS(\d e)eu}΅پu0Q-{z(JjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjrjjjjrjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjԦrHs'kG{g{zjrsssfk&kfksi|i|{jjFkfcckhlttttt u)}I}J}kK{ }K}ll m u ulll m+m+ekmkmmuuu΅S3ЍlSHdd*mJmu35v0sriDr&{Gɤ *Jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj,sCjjjjjjjjjjK<#Kz;jjjKCLkK ͱcjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjr'kGsG{g{grjs{{sgkfkkHt|||gk&k%kecklhltltltt u)}J}k}kH++ul mKuKu*u m m m*m*mkmkmu}}u}ͅccHd\ ejm}˅̅ͅͅ΅͍Rt򝭄fjDjjkt)})IjJjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj표jjjjjjjjjjjjjK<#jjjS[jjjjjjjjjz;jjjjjjjjjjjjjjjjjjJ'zksGssggrrs|)|sgkfklit||j|s&kccl'lhlthlGlhlltt)uJ}k}k}*+͍k}*u*m*mKuJu*m*m*mKmKmkmkukmKmmuuΕS(&ccG\ mju̅}}˅˅˅˅/RJrjkGltuu(}IjJjjjjjjjjjjjjjjjjjjjKjjj L݊jjsC-jjjjjjjjjjjj)zjhss{h{G{jgs|(| |skktit|˄J|Fsrkfkllckk'lhll|)})}J}kk}J댌}kukmkuku utItHtKk}l}+uJ}k}},}kEBgkI|'lt * *jI}j}}/rt |rjkGtlttuIjJJKj r'kssG{g{k&ks(t(tsgkgksHt||{rrkEkkkck'lhlllt u uJ}kj}Jik}}kukmkuJ}*++,kgk)t)tt͍Ptfk{(I&cEk{ i}˅.0Mgsjkklglllu)}ijJjC kjhƂjksgsȃ{kstttkkk(t||||{sj%sEkkkk'l'ltttt u uJ}J}j}jIKj}jujuJm*uk([1I|KJ̍K}l͍/tlO $BRl'lGltI}̍ |jjksGtlltu)ujjIJiLr i凛{gkss{{skkttkfkcltt| }|I|fs%kfkkl'lGlglglltlt u u)uJ}j}JʼnJ}juj} u*}Kl.EJJJtCBtˍˍ /PPtl,BZskdd m}˅̅̍+sjkfklhltttu ujJJIՊS -͊j[+g{ssgsgrss)|tskk(lttt }||kfcccglgltlllltttt)u*uJ}jJʼnI婔*uJu}͍ѕ-},R(cJ}} նqhltsQrrs|J}̍KI|&kkk'lhlltl u ut)}jjIJi 5t Cr[iǣskGsGsG{rks |ssk(llt u+} }|tc[[&\gdgddlhllt u } u uJ}J}J}JjIʼn|Ju}͍΍Vc(kQ8'[tJu}}ֶP||(ll|&kiy|J}K} }tckkHthtlltl)u)u)uI}jjj)թls<#kݪSЬ)է{kGkjsh{'sskkskklilt }+} u }|t(ld'dGddgddlglltt }*}J}J}J}j}jIũI剔*}Jmͅ}ͅ}} ["Q#Y8B1jlJukuJu͍M$SK)}glt|bqD%*|sbfkcdhlllt u u)uI}I}J}jJͩ;j{3ﴊLl[+)ݨskkrrGs'kGkGkkkc(d(dilt+}*} ut utilHd'd'dgdGdgddllt u*}*}J}k}J}J}jIũթ*}kuukuuLu mcDRZQk[l mJu*u[|kHl*u}H|Ƌsb&kkkdllttt u*uJu)uJ}j}jʼn.{3S|̈skgkjrGsskkccddHdidlt+}K}*u*u*u+ulhd'\&\gdFdfdddlt*uJ}J}KkkJjũH| u }+}|cj*'ccJ\d m0sնJ||ˌbktt}̕kkjFkfcckhlttttt u)}I}J}-[+SGkkkGkss)t)l l)lIlIdIdhddd+uKuK}+u*u*u+utHd[S&\F\F\ddll*uJ}KlkJIHj|+}ld ml}QsTZ'kkjkhltJ}͍ͅkj|gk&k%kecklhltltltt u)}J}k} <#<#'kcck lJttttttlllhdd*mKmluluKukukul},uidSSG\g\\ddl*mKuji(G嚇Kl}ku}ldQscZ&kGsjfsHt }k }|j|s&kccl'lhlthlGlhlltt)uJ}k}k}- Ф[[+ <#SGklHlltttttllllld mKmluuu}}}}dKK&Tg\\d e)m*mKu˥hg ͍lllQR{jr{rsi JK+|t˄J|Fsrkfkllckk'lhll|)})}J}kk}ũ-{3[+k(lltt|tttttt u ud eKmu}}υ3lSSTF\\ m)mJmKmlu͍̍̍˝h(Ո k*}*uK}rEb$jr{ǃf{烉Ht||{rrkEkkkck'lhlllt u uJ}kj}TtkHlttt|ttltt u,uLu+m*mKmuυ344UvKdSTG\g\\Imkmku΍Ε͍̝̍G(ildL}r.{sjgksssgkkk(t||||{sj%sEkkkk'l'ltttt u uJ}J}j}˝<#kHltttttttlll,uMuLuKmkmlm}3UپS(\H\g\\)mju4vuύ͕hDj{idΕН͔h{skkttkfkcltt| }|I|fs%kfkkl'lGlglglltlt u u)uJ}j}iCcittttlttlll m,mmulmkmmkmu}4پVSIdd\ eJm}υvؾ2ΕP'ͅr*tl.G{rss)|tskk(lttt }||kfcccglgltlllltttt)u*uJ}j <#CTtMktllltlllll m,mlmlmJmmuu}ضپQS(\d e)eu}΅پu0Q0z l,}G{rks |ssk(llt u+} }|tc[[&\gdgddlhllt u } u uJ}J}J}j( }K}ll m u ulll m+m+ekmkmmuuu΅S3ЍlSHdd*mJmu35v0sR/Gէ'k[.H{h{'sskkskklilt }+} u }|t(ld'dGddgddlglltt }*}J}J}J}j}ji퇤++ul mKuKu*u m m m*m*mkmkmu}}u}ͅccHd\ ejm}˅̅ͅͅ΅͍RtRHըkIt-{rGs'kGkGkkkc(d(dilt+}*} ut utilHd'd'dgdGdgddllt u*}*}J}k}J}J}gƋ+͍k}*u*m*mKuJu*m*m*mKmKmkmkukmKmmuuΕS(&ccG\ mju̅}}˅˅˅˅/RR gskgkkrGsskkccddHdidlt+}K}*u*u*u+ulhd'\&\gdFdfdddlt*uJ}J}KkkJ& }kukmkuku utItHtKk}l}+uJ}k}},}kEBgkI|'lt * *jI}j}}/r0 GkkkGkss)t)l l)lIlIdIdhddd+uKuK}+u*u*u+utHd[S&\F\F\ddll*uJ}KlkJɽgՈ}}kukmkuJ}*++,kgk)t)tt͍Ptfk{(I&cEk{ i}˅.0Q'kcck lJttttttlllhdd*mKmluluKukukul},uidSSG\g\\ddl*mKujʭ&Jj}jujuJm*uk([1I|KJ̍K}l͍/tlO $BRl'lGltI}̍  GklHlltttttllllld mKmluuu}}}}dKK&Tg\\d e)m*mKu˥' j}juj} u*}Kl.EJJJtCBtˍˍ /PPtl,BZskdd m}˅ k(lltt|tttttt u ud eKmu}}υ3lSSTF\\ m)mJmKmlu͍̍̍˝ɔ*uJu}͍ѕ-},R(cJ}} նqhltsQrrs|J} kHlttt|ttltt u,uLu+m*mKmuυ344UvKdSTG\g\\Imkmku΍Ε͍̍G E!``!cb@((((((((''(((|Ju}͍΍Vc(kQ8'[tJu}}ֶP||(ll|&kiy|j}띩(((((('''(kHltttttttlll,uMuLuKmkmlm}3UپS(\H\g\\)mju4vuύ͕. ('(((((((((((((((((((((('('(('('((((((E #(((g!(((((''''''''''''''''''''婔*}Jmͅ}ͅ}} ["Q#Y8B1jlJukuJu͍M$SK)}glt|bqD%Jɵ''''''''''''''''cittttlttlll m,mmulmkmmkmu}4پVSIdd\ eJm}υvؾ2ΕP '''''''''''''''''''''''''''''''''''''''''''C'''''$''''''''''''''''''''''''''''''''''fɔ*}kuukuuLu mcDRZQk[l mJu*u[|kHl*u}H|Ȥ(''''''''''''''''''ktllltlllll m,mlmlmJmmuu}ضپQS(\d e)eu}΅پu0Q0. ''''''''''''''''''''''''''''''''''''''''''''b g'''''''''C''''''''''''''''''''''''''''''fh| u*}+}|cj*'ccJ\d m0sնJ||ˌbktt}/.ʝ'''''''''''''''''''( }K}ll m u ulll m+m+ekmkmmuuu΅S3ЍlSHdd*mJmu35v0sRO '''''''''''''''''''''''''''''''''''''''''''%''''`eF%''''FF&''''''''''''''''''''''''''''''''GhH%j|+}ld ml}QsTZ'kkjkhltJ}ͅ.,*''''''''''''''''''''K+ul mKuKu*u m m m*m*mkmkmu}}u}ͅccHd\ ejm}˅̅ͅͅ΅͍RtR.''''''''''''''''''''''''''''''''''''''''''''''c'''''''''e''''b'''''a''''''''''G'GG''G'G'GG'G''GG'GG'G'ՆKk}ku}ldQscZ&kGsjfsht* 'GGG'G'G'G'G'G'GGGGGG+͍k}*u*m*mKuJu*m*m*mKmKmkmkukmKmmuuΕS(&ccG\ mju̅}}˅˅˅˅/Rr 'GGGG'G'''GG''GG'GG''G'GGG'G'GGG'GG''G'GGGDGGG'GfGGGG''GGGGGG'''%'GG''''G'G''G'GGGGGGGGGGGGGGGGGGGGGGGGGGGG'Gɜ)͍lllQ zF{{%{)j˝'GGGGGGGGGGGGGGGGGGGGGGe }kukmkuku utItHtKk}l}+uJ}k}},}kEBgkI|'lt * *jI}j}}/rP*'GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGDa'GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG'gǤ)K}*uK}εdśGg囇I'GGGGGGGGGGGGGGGGGGGGGGGGը}}kukmkuJ}*++,kgk)t)tt͍Ptfk{(I&cEk{ i}˅.0Q. GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG GGG 'GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG奴Ȝ|ll}I'GGGGGGGGGGGGGGGGGGGGGGGGGG&FJj}jujuJm*uk([1I|KJ̍K}l͍/tlO $BRl'lGltI}̍ -+GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG BGGGGGGG `GGG &GGGGG'GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG愓lpLFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGFf j}juj} u*}Kl.EJJJtCBtˍˍ /PPtl,BZskdd m}˅ , FGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG@GGGGGGGeGGGGG!GGGGGGGGGGGGGGGGGGffgFgffgFgggFGfFggFgGfgfgFFFFFgfgFEʌtpN(FFFfgGgfffGggGFGFGGFgGFgffGGgFGGffGFGg)uJu}͍ѕ-},R(cJ}} նqhltsQrrs|J} &GFfggGFGFgfFGGGggGgfFgfGgGGggffGFGGGFGFGFGFFGFFgFffggg$GfgGG$GfgGGgggGffffffffffffffffffffffffffffffffff&ElLFffffffffffffffffffffffffffffffffffffffF& }Ju}͍΍Vc(kQ8'[tJu}}ֶP||(ll|&kiy|j}ɵfffffffffffffffffffffffffffffffffffffffffffF`fffffffffBfff#aFfffFafffffffffffffffffffffffffffffffffffffffffff&FHtn(ffffffffffffffffffffffffffffffffffffffffȔJ}Jmͅ}ͅ}} ["Q#Y8B1jlJukuJu͍M$SK)}glt|bqD%Ifffffffffffffffffffffffffffffffffffffffffffffff#fffff`A&!Ffffe"E&efffffffffffffffffffffffffffffffffffffffffffFfImiffffffffffffffffffffffffffffffffffffffffffI}kuukuuLu mcDRZQk[l mJu*u[|kHl*u}H|ȤHȵ&ffffffffffffffffffffffffffffffffffffffffffffffffAffffff$ fffffbfffffffffffffffffffffffffffffffffffffffffffffFFffffffffffffffffffffffffffffffffffffffffffffՇ })u*}K}|cj*'ccJ\d m0sնJ||ˌbktt}/.)&fffffffffffffffffffffffffffffffffffffffffffffffffF@fffffffc$fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff&gG%j|+}ld ml}QsTZ'kkjkhltJ}ͅ.LIFffffffffffffffffffffffffffffffffffffAfffffffffF%$Kk}ku}ldQscZ&kGsjfsht*+(Ff!` "$FF` BfG)lllP zF{{%{Iʝ Gff`f%IJ}*uK}εggiFfDE|ll}.h%%%&FeE棓lplEEdɔtpNg@cekkօefGtgޥ榽IƈޥPO,,t.s, ,qNONNMr,Mp,LMMLnn$'Lm'((#################################################################################J%%$&#K####o##&############o##I####################################################################################################################################k#J########$###l#################o%####K###########################################################################################################################################o######H$I#################%J$&#######################################################################################################################################I##m#n##H$#####m#########mI######################################################################################################################################I###F$G###I#####$##########m############C#####CC#C##C#C######CC###C#C#C##C#CC##CCCC##C###CCC###C####CCCC##CCCCCCCC#CCC#####C#CC##C##C##CCCCCC#CC#C#CC##########C#CC##CC#C##C#CCC#G##C#C#CC#CCCkjC#C#CCC##C##CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCgDCCCCCCCCCCCCCCCkmCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCiCCCCCCCCiCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCgCCCCCgiCCCCCgCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCBCCCCBCBBCBCCCCBCCBCBCCCCCCCBCCCBCCCCBBCBCBBBBBBCBCCCCBCCCBCBBCBCCBCCCBBBCCCBCBBCCCCBBBCBCBBCBCBBCCBCCCBCCCCBBCCCCBCCBBBBCCBBCCCCCCCBCBCCCBBBCCCCBBCCCBBCCBBBCCCCCCBCCCCCBBCBBBBCBCCBCCBCCBBCBBCCCBBBBBBBbbBbbBBBbBbbBBBbBBBBbbbBBBBBBBbbbBbbBBbBBBBbBbBbBBBbbbBBBBbBBBbBBbbBbbBbbbBBBbBBbBbBBbBbBBBBbbBbbbbBBBbBBBBbBbBBBBbBbbbBBBBbBbBbbBBBBbbBbBBBbBBBBBBbBBBBBbbbbBBBBbbBbbBBBbBbBbBbBBBBBBbBBBBBBbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb@)Raޡak@)@ RaZ@)`  B{AƁ !ak@sA` c!a9ZRA csR`J!Rs9aր` B`J΁Z!``ց!!`)`)!ߡ!ߡZ@`Ρ`k !ߡA B|@`aZ9a`@ B΀ @׀`@``) R`k9@ 9@s B|@)Bk :```c@J9@)s` |`߀` @)ƀR@1@@ @Z`)| c `!k@`k B !` `)R`[`) @@B ||s@1`)s ! B ` ! Bs@pyglet-1.1.4/tests/image/DDS_RGBA_DXT1_LOAD.py0000700013464101346420000000102611266427715016623 0ustar yohyoh#!/usr/bin/env python '''Test DXT1 compressed RGBA load from a DDS file. You should see the rgba_dxt1.dds image on a checkboard background. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: DDS_RGBA_DXT1_LOAD.py 823 2007-05-09 13:01:58Z Alex.Holkner $' import unittest import base_load from pyglet.image.codecs.dds import DDSImageDecoder class TEST_DDS_RGBA_DXT1(base_load.TestLoad): texture_file = 'rgba_dxt1.dds' decoder = DDSImageDecoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/PIL_RGB_SAVE.py0000700013464101346420000000105111266427715015751 0ustar yohyoh#!/usr/bin/env python '''Test RGB save using PIL. You should see rgb.png reference image on the left, and saved (and reloaded) image on the right. The saved image may have larger dimensions due to texture size restrictions. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest import base_save from pyglet.image.codecs.pil import PILImageEncoder class TEST_PNG_RGB_SAVE(base_save.TestSave): texture_file = 'rgb.png' encoder = PILImageEncoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/ATLAS.py0000600013464101346420000000511611266427715014666 0ustar yohyoh#!/usr/bin/python # $Id:$ import unittest from pyglet.image import atlas __noninteractive = True class Rect(object): def __init__(self, x1, y1, x2, y2): self.x1 = x1 self.y1 = y1 self.x2 = x2 self.y2 = y2 def __repr__(self): return 'Rect(%d, %d to %d, %d)' % ( self.x1, self.y1, self.x2, self.y2) def intersects(self, other): return self.x2 > other.x1 and self.x1 < other.x2 and \ self.y2 > other.y1 and self.y1 < other.y2 class AllocatorEnvironment(object): def __init__(self, test_case, width, height): self.test_case = test_case self.rectes = [] self.allocator = atlas.Allocator(width, height) def check(self, test_case): for i, rect in enumerate(self.rectes): test_case.assertTrue(0 <= rect.x1 < self.allocator.width) test_case.assertTrue(0 <= rect.x2 <= self.allocator.width) test_case.assertTrue(0 <= rect.y1 < self.allocator.height) test_case.assertTrue(0 <= rect.y2 <= self.allocator.height) for other in self.rectes[i + 1:]: test_case.assertFalse(rect.intersects(other)) def add(self, width, height): x, y = self.allocator.alloc(width, height) self.rectes.append(Rect(x, y, x + width, y + height)) self.check(self.test_case) def add_fail(self, width, height): self.test_case.assertRaises(atlas.AllocatorException, self.allocator.alloc, width, height) class TestPack(unittest.TestCase): def test_over_x(self): env = AllocatorEnvironment(self, 3, 3) env.add_fail(3, 4) def test_over_y(self): env = AllocatorEnvironment(self, 3, 3) env.add_fail(4, 3) def test_1(self): env = AllocatorEnvironment(self, 4, 4) for i in range(16): env.add(1, 1) env.add_fail(1, 1) def test_2(self): env = AllocatorEnvironment(self, 3, 3) env.add(2, 2) for i in range(4): env.add(1, 1) def test_3(self): env = AllocatorEnvironment(self, 3, 3) env.add(3, 3) env.add_fail(1, 1) def test_4(self): env = AllocatorEnvironment(self, 5, 4) for i in range(4): env.add(2, 2) env.add_fail(2, 1) env.add(1, 2) env.add(1, 2) env.add_fail(1, 1) def test_5(self): env = AllocatorEnvironment(self, 4, 4) env.add(3, 2) env.add(4, 2) env.add(1, 2) env.add_fail(1, 1) if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/MATRIX_RGBA.py0000700013464101346420000000173411266427715015624 0ustar yohyoh#!/usr/bin/env python '''Test rearrangement of color components using the OpenGL color matrix. The test will be skipped if the GL_ARB_imaging extension is not present. You should see the RGBA test image correctly rendered. Press ESC to end the test. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: MATRIX_RGBA.py 1768 2008-02-17 12:45:54Z Alex.Holkner $' import unittest import base_load import sys from pyglet.gl import gl_info class TEST_MATRIX_RGBA(base_load.TestLoad): texture_file = 'rgba.png' def load_image(self): if not gl_info.have_extension('GL_ARB_imaging'): print 'GL_ARB_imaging is not present, skipping test.' self.has_exit = True else: # Load image as usual then rearrange components super(TEST_MATRIX_RGBA, self).load_image() pixels = self.image.get_data('GBAR', self.image.width * 4) if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/TEXTURE_GRID.py0000600013464101346420000000614311266427715015770 0ustar yohyoh#!/usr/bin/env python ''' ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet.gl import * from pyglet.image import * from pyglet.window import * __noninteractive = True class TestTextureGrid(unittest.TestCase): def set_grid_image(self, itemwidth, itemheight, rows, cols, rowpad, colpad): data = '' color = 1 width = itemwidth * cols + colpad * (cols - 1) height = itemheight * rows + rowpad * (rows - 1) for row in range(rows): rowdata = '' for col in range(cols): rowdata += ('%c' % color) * itemwidth if col < cols - 1: rowdata += '\0' * colpad color += 1 data += rowdata * itemheight if row < rows - 1: data += (width * '\0') * rowpad assert len(data) == width * height self.image = ImageData(width, height, 'L', data) self.grid = ImageGrid(self.image, rows, cols, itemwidth, itemheight, rowpad, colpad).texture_sequence def check_cell(self, cellimage, cellindex): self.assertTrue(cellimage.width == self.grid.item_width) self.assertTrue(cellimage.height == self.grid.item_height) color = '%c' % (cellindex + 1) cellimage = cellimage.image_data data = cellimage.get_data('L', cellimage.width) self.assertTrue(data == color * len(data)) def setUp(self): self.w = Window(visible=False) def testSquare(self): # Test a 3x3 grid with no padding and 4x4 images rows = cols = 3 self.set_grid_image(4, 4, rows, cols, 0, 0) for i in range(rows * cols): self.check_cell(self.grid[i], i) def testRect(self): # Test a 2x5 grid with no padding and 3x8 images rows, cols = 2, 5 self.set_grid_image(3, 8, rows, cols, 0, 0) for i in range(rows * cols): self.check_cell(self.grid[i], i) def testPad(self): # Test a 5x3 grid with rowpad=3 and colpad=7 and 10x9 images rows, cols = 5, 3 self.set_grid_image(10, 9, rows, cols, 3, 7) for i in range(rows * cols): self.check_cell(self.grid[i], i) def testTuple(self): # Test tuple access rows, cols = 3, 4 self.set_grid_image(5, 5, rows, cols, 0, 0) for row in range(rows): for col in range(cols): self.check_cell(self.grid[(row, col)], row * cols + col) def testRange(self): # Test range access rows, cols = 4, 3 self.set_grid_image(10, 1, rows, cols, 0, 0) images = self.grid[4:8] for i, image in enumerate(images): self.check_cell(image, i + 4) def testTupleRange(self): # Test range over tuples rows, cols = 10, 10 self.set_grid_image(4, 4, rows, cols, 0, 0) images = self.grid[(3,2):(6,5)] i = 0 for row in range(3,6): for col in range(2,5): self.check_cell(images[i], row * cols + col) i += 1 if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/rgba.png0000700013464101346420000024327511266427715015104 0ustar yohyohPNG  IHDRRbKGD pHYs  tIME  ) 8>tEXtCommentCreated with The GIMPd%n IDATxwW?ybW49k43YV$[8`G%/%b^5`lml9d[rir0+W3l9}կ{?) ˖7ܳ1JIĽk+6v~mfD q(t0n>E/7nxQ=ßH7Rc82GȜ ,(?hh~0Y)=zef xOq/oOD5`&&+Nꄾ{wd8#>:pl{b7x\t;kniIKѽ1֟f崓O ~mD"/[M - 壻_ܯH{Êښ|,{[vڳYw3ԟ8^F)m6]eL)GO4ω ䷇_I_$^iD) 457^2llRD&82T o]ڸaG7gI,1۵@)9`A*°UPAJRK{}^' 7&0z:P s!P 1_ #Tq5~./8=/zT.S:ӚNyL8%o9`H BرӋn_iU]ŏ-ee?y:7jE$Ӗ ڨ@6-j؍nOuDbaib8}jvoK o|=w+K j$z`N&o^۶ yEQ*cr Oj6mց55VEцgZ:i8N8#uU׶$ N˜,PBA ^1^]D#Tr[ֽj:AF8)٘uM";Ph% Z"ŬZ'\iܒ~'.au؂x]>Qɴqiu t ԔR*yH4蘪ldzRu_$}=.>5[K]NM\}~M0ԝ{,yQ1sny3ؓyzvgT=6{eJZOPTT…j۪]JK#'OPb"I[Cc}x_%7dGARʛkWwkF'O{@LJxQخ pPH.sl\\z%Ӵ16> ۶ Us= N2!p@(نkvTBiEX,eGopQwb8q \uic(۝?=4ǿW_h.*ȫbB5t-h ,I]זe&Jp  dKIwmBHTH I9u-+S|_|qe_eT*"a*3ˬ8pt!Wt&synu^ȂʇĨ@ ;mrx0jh廾m)e őW/[{; MORD@Q^jzu Ҡ< ȰM2KF=E=b6`8nT쭖ivLb-֬-"ۅm|.[ }<0.Y3xb,[TPW_7/}nJy& )6s.V_X5ceU$ZBלv;fcx)jV,^=L&kb@)iZ7g~ #CYs:Zoߙ%w`H 9C۬zH^q )*V_5ڟtLJcQsLX \2|(*1\;e&/dP8",'P2%(NdrE"9{,r#RٙJ *Y]ٴJ] j8V|bҭ2 *dh65 1bd")N /cP0R+Jc#`;V/HӶm2^}IV_Vu3c|q45At?8$xcrDö膎rVzrʗӋ\=8T۔Ʉ?-{h(4z4˅e@=Nr˽V52pbp % y2\ׁ(<AL~`w4;24V:?ڼ1T=t#*9ԢJ֬qGʕ2(G&\<88>22<^x嚖B,-F9hUwb<+3Q] X- xúѻn 쒫_| q\VQ_k*>``p-BTGwM_} PT+, $fyNl1Oh3%F9:r7U.6YM<\Gp5몇b+flCؿ˞{5M^C4P: > S#mﶔ['2Duv? y^uo /~E+p㟺3K_{[Xr0w^%oBpt'8'PR^σ1 Nahյ(lb@e ^<- qG=?d׶e(Lvoy|Wi|@OrcϯܗV{ KWSԲ I\g懖)f25vgنa;րm٧v+ͺ\, Q "2{Ϭc%zzK;}la=-8>{N ) HG )!ƮͫCE#yKg_x`y3VOLO<:sg{!r tv8zi㨺mppl1X#-j9wE׬7?zv6`u6\ #PCX QPuaHS(Vx[نh;؜ݽ)Ϫt18w}nx<\[{kGRSx<<"1*6o{J9r+aCChY›un)U3/.dvΆ:Th(d6 HԂ ANGTc{w(55Ulٞ\,Ha[.8|1R:l9.'%̖"ؽ{jl˅ R(y dCY- Ij߁/S{+^>`6;]_th츊y<VIeV74<`jkSUm}vn90̆7 yȍ3)) 9Q}uyLqo6˖iٌ<-~n VO .ms*B+:0U}Q/luoJ%S-ls/8k|kI|\±\L;uLPS[]einɵNyǃҩSF' z8PJ D!xHXȖف+o#CƙkFNL LSZPh-ˆ6(XpYUKh4Ht꙽yg9^?'O<7<ޟ:I SBe.\#;}W+.^2CIE :7R*)WuҮm<>>rשּׁmʡ@XMR~}nCP. xckkThܢ( I@ajlӅp>>~g-Z?qqMHaۅL~ A(N _sLrOc;oٵuGlۛ i gmt-ڔ''h%o=/=i|?3J}lȧvXW؞cl"ϮS+i:ngZ,T:p PyS|b<N87&WtoZpkYbB.sj<~'1\^wxl ط]vo7 3Wz D_~F9 ]V/{ovrRлk*^1 Y`q-05#UQ4-ou^ݡF+?nwl9kbg` Tx3A &+{6 hE%ݶPV0 @P@3 @ Qx_is| hv\qD,ӮO .AH [εHmOc0T$Af>?SؾmE-rA!0l3+$,pBYEȿҼLdj1|>/)+(|> ȌlipJt{9{,ݮ&Jzz#1ʕ"*:2o/%b( O@`J82lׄd %Xz~ĵCS3]ˋ[BCw__2_b΋%y>k<&8wDh~+]"}-< f_?9 ߳M__ γl꺮4ic%o[V;05@LJUUsnFuLw _ГQ*߂`#` A$p]GEqKs6][3]?}\4n<>R}GA^K1&Qxe?$ X]}Mx`*vO :lΪњhDN%tr*- K`pD`=>Ձlzk4.']cu_Dt_-?]6~'yc B Q?W9ߦW濒^ gqC0YFr X?ռ{[+a@]*PVΘ mٵ3Ğ}/B6uUب-fwFMKtߑf+Y@V$|E-w>E/!җQ1GZZ 6K 2rl[-V.۶Y$  DjL1sD!nZO}G^J2 -A'{|M8_q[B<B K!eJ|_+*}'S7۟5{$o,0(ca*K,S xhi'ΈpdX*C<&71Qp>aښo6nc% 7 Bjag|=p7}y>(ܹ41(@9g0ǕK?(/hV2?٧*rp z}%ӰT2 *e3 .sV4 &!v%T´l|l|?R- ýR*:_:Kf/ωFwpյUԟv:e_=m<L!7} )D Q`%r?٫NY4 R K38(Bp|G5ѭ¿w-< rl\氠* nE4v0`81ล;cl>FoF8OYվ"tEq`xrb^{ɲjj]}剱d=Te]ͺ\ v @nKoʳ @*v2Y7 CJխALWs$%Q.tFن3뼹W?{X|y['swL=g[n5 \zƬHb囚Ѿ &4ȟ8˼v=?@iw~KbO<)q\.TJjޔoBϒm[v/w8Uᙖ83c 9k3+WURڀ;=0 V¼n5+< YZł0#!BKϞI.إ]K2+{/=nXFg_>EeNqGwݟZ4t.`d^ˆP8N/ _n[Fq}XntluqPhR1қ'PHf}Uӳ&cInoep8N=ܩ*3o@S?;0-?v< ᴱg\7}οMX9U7#ӦFX(2W犳vq&ʼPLA _B``圆PYZAoJHk19xQaXl˅eڊR5PLPC9o6nMm3Z7pLuVq:5"ɻzgT\J)5Wt^E2ie[KnonmєZ\d91e0T ٜr@ 0s?GGlE^d޳r[~0JD!ڄCD |Em&<}t__l:]TtinYG{l}cVѨu׺?^JB)%];Z;7^q+(G{^~Nz;q8zÁODB|A[K"I%Xb|LՁpR S@)$ #4P-5wί?}m3Z߸z]}}AYA֍c{|+LMmMp?Iso\5ΪH粷u*Pai. )匉hssxQϐ9)/M]P_Լ{u۟yI("\/+}w~3gGfC?L(e 2+g9= o|55D{z׷l(Onj O޽Ɍj@-uߥlVIɡccw{}>~;6䥰M %LPΘ %,`*_L0u@l ƀT6]J쨊?J%NÿX?G |d"y4 D&CT׭|# IDATgy] ".l:,i#: l#t>Ҷ<0/ћIVVp_p3O*kG0"O31pٛWtl+c&-Bޠ\} >knm;qG~yǦ5M;Cr|eH@BRe.J'3CŏZ0=H`xtQ EkeSs?.A/Ȏi<(G\tajSoٜ+Б\Q /p*6ڕÿ/TN_Y.G1`fCziP"dCkӐLDt`re-9+g729K,W̼w97B/~X7sa=k'_ht,` >¦?pړgIbZ/)c4[V*wLJ.vUnRvFhlZ:MK;g|dg5&_!x(kd)"=kVVm-p&H@( )SPmX^maSsB}؂ 06tA)H.Ԃ#;2p%j0[""7q3-ٶmT:4,o|/mqxh$ `;moK!@h7 8l7A;hAa6AGVxMX  N!-v3WYeYpMs~cfX;c {^q;8z}Yfz%F3~v"䗷?+oJD~󦭡?Ba|z}iALpxZy֡a^}ۓ(*vC|c ^Qϣ4itضEqq1us"m9F%g (G .{n;f4 uUybMhH[(M(M:8~U/Sd%d @iA8pA9kH^j;pHH|B|Pӥ4z'?tՄe8ru=пCH,>Ryu@uMH˪QzKw}haI.f0B`) ^$<X/-'T7D:=v3aO3Wyn'ȣ/~W6 ]^TJ?#qap,)S4OM6w Vx~㮱+߶vZ2_r(]fep` oXXpq.sӉ܎};ūgZwjE a͟uFO R!/ת% dFU&8BR8j=(,T@X2X., Sm0uA/۰-:1%+5A= Gp.UCRx0P.! ^45WtCf+UV5=Oro~'\IHx#96 Ӈ9xG*1I1m{uz0޷^c2 ^oU78';cQwV 9R/JR#Ty`SEǜXOoޏ—ʌP Y˯oiL d(7*C}DInw.y.z`g^JyQv50VYMbSߞ;nnDy>ZKra ¨ce ԢKs`N6a6(G@T00uj+` f }<,AicQXϋ;Κ;t2\-iu-^lW?l/Z7wW0n\mT* ,˞.`|2kb(kd_5o!9: a%A枫o=q|G]gyL "3]ʼnʿw]VXYYތ{EWWJՕҟ!qL:.L/?6mX^* lTw֦ƚKqY][ɧ\?.[qML)F/(zyBIW7}a'M)qaZ_j8*~GP'! 3(x>~/Lumf^xw?Hbg[Y ybwhi%,zaj"4*z9[' >ܹRK|Z@ aRuogUja[<]|q<9yo*o`.y;>'f!=d.\3yj'ʲ~<7a y0|„ *$/BQco(vY18ܐZa*z^sVG9?$^A4lqj9$Mpp^VgZ` v+#:Tv-9S[*eސQ njZă(tx]8V|W=r1wݟ}ÿG KԊf.>kƶo|m}Ij(~@ Qί>{hh::99Fa~c_-5߶{^ZOꀹq(c:Ѓfn8ÜuUv-hd2+Aj;/G'`p` Pmhe\LPeGU&69dű|AHU8:IY%<0 С Jv'Y`|8=AxJ9Mm*x ۘ 1̰J;i(4: iO}`8[-OXilwf.ԷB3CAں %*P F8;ש;GRe+#)Z@+C>*pmH ˄ec'b†dEB =[{8{$R ~eɉ^ EV)cC?xqo.=7z}kjӆ݇dD9^$vn>\y\pE=Ϧ3jĪCc#eoBA.['= 3\éMG7_;$!o9DũM9x|QL y (3f5«W:F蝕}7DVnNm¬EZ/>+ܰ/Z2MhE p#| 6\e쬤N(%sp,hTPወ#RmN"u^x?xW;=vKJg<x=4T=4ٟNL+g=3vS\&c[B>Y Gg+p 5{Z'±-z{kMg@8rmB毢u+"-=S~T-qF>E2Q± #qm2]S\1eK)%3ZWpXT;P (Z5L Cg K@^%p2 }Ǘ;746NvH, ay}S_Kdmh_\ *%V3:93EQ\qЬ2*k09. \vQ4!x(!qpЩ,Ám4E.tBs3yym{72n[U{,/:DG=-m2GwWmk>0ڨ9SipaTD ;]dĞeSy 2!xhP%4=EHREkҹްh;.T2rSn y IȲ]zhQKUjU2P4GB_H_ᡑSsvo<>YzsD9,s]ڭ2< {?kZ)Iwi Ţ:XJMx677RmMӵX_Pjdc{D.m%P yG-f i#V[;{y_2?'I##s?lfԩV/| ێ]_/RK0\Ȩ Ǟ*)5Axr9{f@92\غA.V\72JPȂ Ir߱LHM8z6¹\m 5p>J9Lp[1ֵ bKY9s&)?еᄌfu"d|%hʉH,26]qu{ǎQ5,FݳoVB($E@uC,$k]1Ph!Pi1 Alf _y;;~\vúxɑb"$Y8B_'[s%4"+?K1eya})/q"3q;{o󙦹S4yo(l'ٰR5Sbnv8tN1׿,& ގQ4^֤~u1FoHi]mŚ FVk,(JVKl}<(K7oxdr NCҿ0Ky.o/(Aa7L_c}/Sf8ox2UXltwN $QE @RD4T6of8y2ÑsV-'rv]! =5|_D^ {YIwn3' RK='VK=o^]/.䊳w[Ӽ&DV5?t9 x^X7; C@3əSW<Nf`8%XmojP֍ IDAT}v%O$~R3* @iR_M>iQxCJVDH4[%fLD^l6&|2;:4/áy8QRPgBkJ1~z<]Rn!;d=2vDWEppQptO Ad  /)I&'s7`x"E5A抔#3\˔ ym77ȧ'^ϙ‹s%WնܸFuR> ) *9=qV:5y+B(Tϐ7}ӀUEnD4fn3$AIP&+ ?2ѭ:`쒦/+ D'>I[ڧ s/ .\wq],f %Epk-r \@O؃J@V*dժ,[7|cp%!H%TW֢4a/[ߙBCߟ`c.$λ(̍wq)-Ԗ|H_1N{t dWks:FnT}䭟_ך""N+z`0HNtpnp%dƳ@);{3n`lCM VYw|~ݳq嚚|Ƙf s6>@U3wKM< R4׵\c?ٴ,#KRp 8dt拮^R 9\kx/ <{ˉX,C7-kk}Ҍ}(\_ "@ (>tҬX1\UW6_<,ART HS]t>ZߢK  L?\|ņV2'@0l89븤%ғlw=悥0h\CJ__seH &}l;K &9n}|O5RO| cl6W+]oBz/ @\K!ybiqYfz_zբv> gS~/$-HȧmFEs!g@6*SUR)`omC {p|9r'ÝF|~Kx0S|@ghyޞSUUs>JD/(cl4 !_Prp"'Q{ӅB1oTKԵu[fhW!5+g>5WUVm,Z6$$-*`EukB=G%-kz [WaB/Px3LEr{/tG&&U/\3 5swt]VZl;>xlK{#E3og/^zSo^RD0pH替~= ƊXLĪCKc,ǠY1Mtez?UĚ|Azv`qpOo?ֵcΥLR_-90 h)c9\*[r!%_F ,瞻y/; 4/R-R />r9ʹvew+Yf%DHBeuE}~h4!Cy+k:1VB?#P[8q2>HRr/P|788=?{'msZÇ{&+7-m{|runPKg}]ND8ҟEuaCݡ'j}LFUx"WH'{R-ZZĂ|)t?}xr%2N?*ֺeOsYXfs| 95]CdhP,%>9LJ3W.>q>|ԫ%S d^yj.X & q/L@1$_1ƺ ! 3.$چ MWYyH>!PxOINH _|1JQr-^5yUE <,xAM҇JJˢ6ܱН}#^<C/=NMSƘ}l ҉4~$? ͚mݫh[.\]o % ::ƲʷTrL>*Dñӯ]Nv3!qBG BxgkTLkq^x岯=[?c?=;_R!)8o1WP7ނ9ݝSqsXER>vsOzb ,UŜ1Z*N>v?Cxk1٭ݴrˋ9Qy焿ۗ}ͭ/PT* .%zɅg=xjqA C˾yYFnTG7;X?PåWo5u2[N$\@\Aɗ9XlLoKᕩy VUU#O侵tCE cVGm?n;#p-UVWܷޱt.]wҊ[jNkz{bQ766+&RɉjS{k(fA@Ĥ3-NϘ\&z-8NRL&O\yu^c.{ɾL8n[E(ŖD܈^ۦ ǁ)*@9,M].hY_HB0BKV:UK㝏9s8bfXؼjqO$wV$i[9quC? 9&L"|9oPal5 !OÑg~?ػv*Jݲ@Cޱҩ˼y$ڤڡ_ VM-i~SKoq 8"gݚPۣw8vx3G?0Í-xuQNt@L21Xc):o#M28PC0!0j@9Xi˵0ՋD`x~&Z4\7_ xj`k;vv}#ߪn,v6' V8ae0Fg9>G_$Kq|99ob|[Ы pyNd,ݪ})rXY\{_W$b_޶1+bRqW^ c185kW^|MvDT#g5FۜD|1"DCg٘xq \% +xe29v/N~(` W>qmrܚ+y ʗLBIO$zˍ=D^0E)psTtfЬZF+jVNM;&;dCww?;``X0 ixNK֣>|FRznIī~L1"?r)vƨt쮗\:_ s_',-iŧ^ݣr1DBK[bN0gT@F冪 7_p`/]<}*[iOSuRfw5;aQ4M@G{~镛V/^ !V>GjY udxD?b$o /ԋ0T<ӓs/x&>P8OUrYxLvmQ۠"\-!7lxBJpw ߍ=fL-%$Ip'V*Pw<Ƹf/d碌|i:yq뮁nPk2Q;sёQڏwNH>\|}'l&N26ÔRrf! 5|'Ku]?YsxhXW#T|8#>8#Lvkng,p/2:640q"x "/PGI.'}C gZؙyW<Q4dc&|6J(rX+kc[Nk\̈́?)ض.xwWoc1±\+%/-`x<_sK4q|ނ94Qmtlj)ɓF q9+_l7{C/s㵷z;ee.j|dII/-= &;i;[ښ/R5e<Щ,AFAeR+nn.lA/zZ6<>J)\;i*t蚎bքQ1:21GU2vZe+/[;X歫.y\k\s?1(c:QJA!SJ 'QB˯\C^ RJшE0 vlߣٸ"`UODUӗ`欬p[(uA#(p3+ XDw'+>ǂO8vrR;tz{~z jN"`üxYM cjov`34ae {NwL|k~ߨ=Ga+fM06zۆids]@ 8ұM5s_=8$IO<Ѿp׼v>/, /,]!ȊbE6{~Cw={ $r#Ȣl_b}2/1;ec5rZxtK]+oTeϗ4"X)\Rqzlz"^xm POmWB:ZB/@eUermH`!! <h,,b}RGF%Q}>[d d>d L\zr[`d%֦9XwC+^z 40qܲ얣B45}ﮯX^_\O]IZCC&8QH9nuꋭm-Dsk6=5Dɖ5k˟?Y{C)e[H$BVK;ՕT.)//bJ/\eM%O50PG%[$(̼/ (qG.~ɇD& >YLX6"Uum^u˨zRuuWӘ8wb*bŢ;/(wi1kBT80A %e"u]8E @k?l\[.[͌qBh51"= [þS_iΕkH c$*B|'#( +DF E#4T%5_V]_xa1VBͲ=/9oXQ{p{r)ge2 ޠ& bY?K"y !oTKѳ5]Sw/,98xb6-=#yFцYrX i):C:t0B>{wڲ)O0ƞ{5ezŸK8/s$ J-MҾaPTݚG1E(AT~1`$eC"KZ4mf޳(ÛW k`-NU@y t${\F,έXd2[*xn?q]^Lir>&"Arkꚪي1HQW.+y1Â%sчAX."nva [Ɂح%hǂnަ5s|2fލg̨ڰ nplZ΂(2p%Z0_oDy3$O?Mz .lBao 0bBh'DxA #1:\&wݩU57Q[\x/Gxp4}C}EDj '+ە&RBN;RX1蹮6\XGr]7^NDNAZvM vSGO/`rp!["W:%vY]u殪Eak(9999sCMveUWcu>#X՛gJ))> 5mML*x% ]w鲋Gs]쯱?0yӍ+o}[_dG7_OdFH ⓞ:xbIF-WٔdъW7mɉ0Hn\"V_L@\PC|)F0UX F;yn} wPho*fL@\B &ub0K2QffO$dKwk{U tOGDep9ɱvNW$%%^^{W{\DNq+(Y$DU_L9f*Wɫ-x>:.sSCi8% ԡf~*Ed۟^-nZb[!~r)n9h@ݒhUCۖQ[9ދ taL\<.ZP]Ue/$9'9kzu`2 nMg1ؕFG/( P](JJiJHۏY|q ޲HqiIp PdCs?%ފn1 1xClB^>@+;CѫD#czk|y?#{ӂUekR |13d^D˛u ̡ *r#9H~Ƚ|t4R}Պj#2Mk^P^E A*!4Ƌ#RMz&c~pw wswKO$K4L(-Y;ʼP^ \۝ߥNɣGOE+ҩp\N,O:10g)?"j"}p L@Q#hJsRB@9R& qn{v-Z>*+Kw25]K_ǣaIRYbl`'e6aMV*<,݁wVlije8J27dGL("3BUf! Be4UCўbZ8T^5tRtr( lBx7BU󫔐d.ZR_vmE?*(E *|< K]KשO^E7GvHi$af9ԆeI!RtEU%wgꋖ\eTs uXxż=cAh1@( yPr'&z Kƿ eh #`w M >u##$yνM^9M? CE3#ApPvn2B2$G!ft)4^Xi9]C}躔q!/҄ OO05e8(u JHcPB~~ $a&@@bhY8ya}sh H`[CL), "2 P6K6 ]JfzDYSqٴgh)2t O'P}|]3|ozBfVr;Zk-l-PjvL7lq]@8+$0]ڈ%k"*8A7th6iU,rs2XOQum h9 P0%#υvr Uy_۪U_}_]=;^yG dS|ػ/Ӻ-8ߜ*٩* .^: a;@͜ȅME­ZuNkGƺfNH*-56M,T!`z`@9!SFYiOgp JBI^YrQ{Qc(A0@9>PE mz/,w'5פa H+h|n3_;"C.'S6z= VQLMY69[&$ @<3xټL>-dja3#n9f&LLS Ythw/Agۃf|8ܨ|'wt z@(E&]Q+Zjk ,oڗs,$7cvjU@jSZl$;G]" 1uգ'TԬ0fOf\<~]> q-m^r dcl)a%jp"-\_ 7|Z6s2M6jb(z-وΧЩBLደADZ$pIbO\6_g QBMr9q`f5>|_NSw]~4`&8LzJICHT{誡p¸Ǫ lD+( CnTˌ@T[0s 6s&RZ5xF@A/, 7U&$0c MuYHjm[W;OԼ%# Wu7NNW&' =IyVYSNsmf6@&eښ]gs: fĽ E'lBS0B~'8F=RP0PIsL^p eN2}<29 -߳<#1s&pk`]4,Uޥ `\? hncaP \)PRuOo3. /gf4=&ܵPGM4PG(!#P!@71^Owyw2wpqm!JPBF;_tM-JRy(UXΘ+X'|{¿^ 5N0B_H q% y %Cy@8yvX5kTaO~Tm}:40>WBSuMzb:I ūSeC=FvQ&F{eBB٢%jQ$y?y?σVf';LC2)gda>&&u?a^喕rty)Y}-L2&0P FXy 336f6ś}v$8BgGl.%;&Uq% }y۝StPQVm]s봊N^BhHTHH&S^ ³?0V]in}?k" I4P̚(9 .W&w~ ̏'VBk2#UM-A+h>Cn (8ۤm(v%6]=ЉtBK " tM!?n V?"4 B$~ddDbo]2e/XwK&e0T[H-r;fdT{kNO8 p(m ݡb?=S!Yr;v 1Wx-2`1mNiX6xѽom$v`R( H ;]+~k~kƏnF-/Lw{aș]|(*,拫;MӚS̘r\xUn}K5tI0m'N,_I[jGn783˯ZbQHLpT¢5Md 1OĜuqTBSc|<҃%pb]pW8\ m7R{!O5JswON+of@B?C.ǥp&,EV-N%'RO*p :xhB,r2$WPߚS"f1h UX`wcI }CnT WzR7RHkIK`,-%]CJprc =wM&|aYc9mkގ0߹i.g. ߓXgSIrؼ܇}>twZ)MM&M$2n'S6GO@Klp>='*f{X˦4H4ƶZ uAtB% @7cFa:ӭT3B3܋coݰy[6!"EVEQ+"atx TT uU*0-FɂȪiT J90uؚp 1Ȟ6v--3:I?ɕ*ɧ=oipY1]PmuDOHFPHPbuδwH-CL*Ogw5c\/IhNj[jxk< t?% yU ~kǞ\T|YWwș)6% :?L_,f_O!9e˖Lea̐)x_g.zO .r2FJ6Nt)LU.a6Э"l ՃF.@uuw<䪣I ؙ"\U r($%EUΙYe{|hN]#ƆFW:DxGh7fZ.=":(hhohC"K=G$6ycJC7=Dj\_9xw?9*MOdc:|Dn\L$ %±Ҧ<|v MGdD@h7K~f t(RO@yl:`JA4U@,&BMg y @aO $^= Hj٫R 2as3߽iz+/wEϙd+v z&ڿ.E%I&䂶ѥ#K.t:Ez䫊G(E9<›PM~N#LgPzDk'*)[]9FO][T5^kluR'aQeT@)McaCRcn3URe"CFqՎ81Rī\CY 0u'zG)+Ip:tNZm/4wvhl]Z2A(>ܸlR`+F -`Ӎ$@D&šuA$hf"@1AvFI@ {ʏIRX#k^71 j^32B^4Q1h$/3# fώ~d^/=P38M ZR ɁL+ e#_R:Gft{JK;F;OgWR*c93b⍷l}ř9缅mu9{΁pP}!7_ E0fR;ktj:Z'vAYE&Oq&X牣K耜],))(h&Z 5S aa.,tQ"ء^hdPDY /?F+0& n~Ƨ:/z_N3YߡάVcS J" ƥL*Xq)-B{-&';hN<%}Bgeѐfgd䁠Z`^`Ѻ6T'8D/Rh _9X..M{ ^0&!q {W^%?j'*<_Fb0QՅCNh]*2:{xnow$ިSUוjxj.{ަͯWx vX޹7r(ڴ2>?75^8~1!AlLPLRrԡUrVs^^Am #py6;ج|#t< JzOgS/,$ 6(jހR~O 핯PFY@[yaOȒ[? +q*fn/L}T3@ 7(M& C䡷_rs59ztyգf>՝IEa IDATP`|j fG`<$Y ( | rHXvl;t;kJո>;'u9;SB{X}%kT7&'Ad`)ghȔОu)yWG^Ve'\0MLjg?T}2笔<6;Z )Cs^1SNj$Kn(tHskv]ùMVQl [nSszwvL@TءP?- Hg"TI݅oP{Qʤw0( 9uߺlWxm> D%8HT9wh $bIs&!GD{ d#7*,w EKpL!.;_/v*,H "!:D* ;5(f\VDHVyNꍛ0E@)Ra^Mp?=M`0isb;re ^-=c("qʜj$ͳ:򮮰I.j#KT 4&靥 (u"ſ_@*ldFSAt B]|k}A?eֶ7k9ry#(/Wŕt9/Lk`[Aw_p? [Im+N?owg0us0ơ@ ̎!&) Zg|_m9aFi|ޖjUeq,yig9,j =.?W3-}]O'{~""4jd-ɕǃզ_f7F~*Cw_iK}Ns+mP%#5uH fAa7 RF؏c%3ĜzJةC |!\u((_EȰ+b.R'zLM١sF IL4L䡭7˯УﴮJxES% }5Y0M L ҥiɜj^poe+| _-KDߪ 4m @3/Dcrѹ6Rr<ׯz\QBkHQ^\RX,-֠}z!g(u䧥=A^RbuSyO _Oω?3Yy@оtn`G sɍO@J*rs}(7 G8FH'8JST'ȼ䪒GjH T&P  =V= +e/?"RJպl-(c#-D+U ޭ@H)|! [`nS37%h.bemA ]3mˤi\le2-xtztC-; j(>[ʖ#({D![|S( @JNMnϮJ;4?nQkQGJu Tix\2 6Yfcc8CҲ?}t'z8gciNy=']x7zۗO1yTJ4$zGeh#{}^:)/( xP92 V K,Mx2b[?7v%A(\"o'D dT-Ȇ5~q ,[mE8LGb%ۈ|92<&ȔrW}'n}M`jʹ_B]krֹ,d^x8z8 p/11wZ\Ai=sǵFfeᛕʭw,u\JZ5v7IY2?^(#{Wewj; <{h0^gAp[1ʤ ŌjIRNHB %A P* {3k}? ^zslNtJ 'C)g@fF5%HqRX|DOs}_3s-Ix @@)C~!d%0(LY|I=-<ҵyvdx(;HUNIqyELP!i?3=ʅ>w^sæ_w&j Lk?UD~yq4VvQv!˻'Pֆv[#Hwr@uY>ur NebUA-$ K()04CfZSONf&4ca*` ԜLJ2dfT;5F%H%0::v"8\}ϫcqaofE4 5RRP2.g@͘S=SJn~aœLLδ*dfU2-0Q&E0Dw"X+ƘwdC:voBxk,(g{A簌?q&}΋_w]{a߰`QDRS}}7(Eq ^|\kLXVҲ'j엙?E}6~*ʌv\qCei qq( T\aL]Ox= -8q]W2/ یrPL[`& p<^,aIW^}*ջDd#5ҡ(fVfU'4LɎ2rʦl)Tw'1* -k8K[x7s܉FDsŵSЁ+"W|}e*v+Pe@q*zOYc4n G5_sW`FcoS]@=$} kY-r&kUuۙ"n!8"ˑp&sZ@Cʼ /Q<2=7eL^+'+g'p:!(Or뭋PS`72Z׏Z1ִ3p_=@3"/V CmJT+'e5z7ɦ+(x 6n6N}B8I@Cm~iV IIX<.D>gO)(M^[ZK_h_XH| xe?JgDi| えn }*˟㺹5n蒠P) R@@7,7=Hzȟ_@2(CIt^U3$EiXg7u$dzmk/)96h:}Go>Wx*8h'$̀kk1NAy h !/j@e;:-]FCiϘ%ȥT1uKt$ 5!R--(شC s9~%97WOrH[DUWjFxsu!mNEYjij^A{rԲ_Ч XV9V0A {P & ,ZUhݯz'T$js,'-g( DCP̗XԄܬi N(XԐgpl*``QD" DGۗ_}^k?NŚ3%XgiQGX/Wtj|x9$l0q+?/z#Z|y"]ut˙ uB'iy.țx6>nVL-e'}m J͓f4R׿ќZG߉Ėʒ%x̑u&U/9|8iX~&l"bD?5I1Oqścu%,ahWNNʏÁCV:nn-u R myG/OG$@] mund*GppXZW&mP%8aӺZ~ᦻR@?mOx !g`OZ+e*bG)Sڰ/2!|c?eHPߞuهa1%0S&-<3kN7nk<(2 K2sM&jA5aE&:Fsy!# jCkE3.j#CީJ\)ցbk+|dvmZvĮPV#ih3F&Z]4:KEQt'F-/O`z #{v~.qkwɵ3V]&ѥUKrłS)?|uF׿VoOedh~42L@[Kd#n!sKI[$m*y#E]rFfu`iW/J֊MpgEV U\Ԋ#YDʔjE1)..(= oТ.Ztck+^K J&U`U(SpǑh>n>=W%Xs|iHc2pH?mJύZ]$@HH!;dM%T(_83 "!'|Qﬤ4=?:JshzфE!$464AOwą"7d5aǹVag|:2Ew4MZ$9D翢;v:_{|Z'vSA z̤x>OOZv״ k:1 %+rgwX#5>{`Ԅ,U-,gJNJFoԵz<6sPkȚٟZߙmC0b]Z*?FERzˉ+B'ەFKUKޮɥTߞ̥{.9Ҽs$ԩANҢr+ɽRiP|UC5hҒt亳wmJOD~$SF/&:[i^s,ȥUȎѶ'E50S_7|bh8 pIPDUAy,\ T:R(o9#> 7Jg[YnPo@ :;ˠEt kkR/g?2."{lN|t "[e@~C ^Ki,I-p 2U]ۻѝwв{3|,^<wͱ|Ahn7ǚ{_Bm!R"2]7_^X0;)%ؙ N媩n+~* ùi*h?>`ZjT4,ρl]o" `reMs SCa8DJK^qm91$7vts8:"P/lWWOPI(SFzEy4yknҀ MЌ߼2?ʆmt?^` D7["~Pse/_LV7k`RnuioevYS l'd.,o-rkW gBpF|aj?7ĕ`7{,:һ8 5kIZd09"rlb.|$I ˍu t1M̵v Ԩ4+?|n 63@o}6X@U^[ hsaVYΎ3zhf`>^Xj3,,f(1eN_/cWz׏p+f]YgM“fr]f*rJCqA(O=rբ"GiX*r%dw*t)֢ P:J7$T{tHPdv>d V5cvB_02p ۱&ZT]8/|;= ZҥYI K,Xiҵ>gZ4ARTR A(!Of>n٫BS>QFZ’UY<6cղ3H IDAT(~& -@1if=Ϸ;(#i&ˡcM F,O B"Y(̫N'ѿa|a;w1I,b /w$vt_#]H[\gvgƵF׿8W=grQZYr~!re & DgZٗthrYKqmN%DfJ9:)&lg+7vcA^Rwk8A),"܎Ef%2+)=A J'~?.7>1<~գM}KJ$@c4E=[u p:73ܛ j7IPl#H7ٌ'Ld}a%@0@ @DԖө/^a{/iIJA< ~@A" Aç/{z7Vg\d)L{y,|@ZWuN/TůJ^BDʲ^DgK :N19BB??d а}Rޥj,x \;"H~..w1`ڪ^[âv1'-xiΟKm_7Q}Qh/YDvLRUzTQe-9+I%eZc:TL\QzTȨ8&TX=ؠik@‰I3Dw^.+i='7~|#޿c)h]/?yF->Z< ="TcA*_7Sh6jI5UcqmViwłH@D!@#* dfTGdbny_|~ᡷwnVi>Bi@Z dym(@5dn F"L~0.hV>iق$˝STCWXgxKYY% {<; D>gQoQ?5}`( @td<]}= {NzAdx~N}:S0~¾K ӿP"{']1 apՉ.Ҭv)S$;O>4_xWӒhpD?,X$|2&4R ]&E#3BM-: KǷ29" A EOy1,xGԂ4C`3_9xǿ Է(zrR 44hz +,+[s>w{fp2LjZ<_.g<Ǩv1\Fpi4923h@) S{ݣ >," i!5a:?ǔYtC+9vR),B;kXф^1V~=/ol2J;e:ܨ4?Jn}ږ?J?7"{? b%r.xzis$ܘ&7aPe:Å|r4@{Po,Hp-;RlЀ$^2l@:Z C 6@2vdl-9r9olTֻ׿Ot0bX&d"S4$i _Mwo1_+o,q5L;54?r ʄȔ];e /5(4_ɜMTﵾ+#C{ {lɋ7v)S%h'N!X]2 7~M 5V ~wa+WQ mg?TG>Ku]+ f at"D/4[<~U:(!ӷdy2:u6ְXI/{aPzR'@BuЦK8|< BӢ дt>>7<Lxؐi"zH bXwyO{*ZJE &S'}Fà6ۨM"-"mRDŽ:IӳVx>J-Y1瓑u{v{R^I.zʩOL=n!}UYtv൚r)M7sOloȚy0>q>yQ75d5xЧvM;D]tšW܌bJ ̜قuzG"D$6UI MF8<ܚKMEbkvTj-]m9 $F3wn5/{Qn#a!o~^P])YFk%Cl s(-w[#ݶbNcrJm)T51H ろ+ +x&O%(TqR55ڦdhNu6/l #c9eI/^"Ә%c%5GK7wkc;g}Ѕ{Ϳ9|G{/:BZTo{v+ 2SѱQA͛` ZPAz[~AQ&3#M/o]Ŧgs&"zBپGn7 5?far"n:->`"{e/}W=\%۲?A&}-(M"u>Y~=&l3h6fSQVW<x^e{?VCV*UO5H.k<irE]҆kQHDh."ZvݜZƀ-uyQAks^DDG$0u D@Dtrկ&7 ""Ӏ5AD)D5ϼGNIPƍӿ.˦pbjRcdC~g?i#7Goc͈,H腸و{beT(kdZ3GϺ-o}8D$\Wr1K uBoZ2+ap5GeIt܉sb"2;'Tg^wvQS>},/I5ʹTϙ3 ¨8X ]i}$gcǵhv尒4֒PH @SM|{z&34ZH`U C-$"$дdH.*QD@, `om.7 EE\r:oRyM)6Ix%⁩dD|)8XY+43]4KhoxѡO (X7ɚ{Q/[-Ϲq?g Sm~J}P3 .U yo" ].{XEI*@3*`{>aD,[!oA@kj%C%:ٔ2:Sk͇RGBJ5Xc#:3e1GŦVyj詙|#1*!\4Hlcu"0Ö`?w>n9WU{8esq*GuYAgOW AsN#q+;U[VŌE!\yBdfϘ0WY`N6q8)R4""x"R9%EЃB$}Hl<=*{ A EDP" ^oh\ O&MLWBj+/BQ#a1`P~@Yr" eU?w+0K.FOM{S%yYILr'CDXzGJl]d=BK;r;w0}l- PܷqoWmA÷zKCc=r܆۔<n.e4꒭ۻ.pV1Uںռ)/v`ZDIɖf=2%` FN|Ƿ. ]ʳ\Wv"9 ɑ"DYPhY`Lo-ne{`w33jhV)%H-"a*OI! !P'H|dF @Oj2T}b\Lh[ծV>Q5ϑ^*L /D#[SF]plq/f`j#i~smTݭVjj<-wο{N VEwSO2ϯ,!{^-xV%E ?4D(2̂+ [X8e4z.f;s|+3kεbq.`??CN<-D;CRl"'ϻh-́PĢ%e?~NIe֓g/iL7R݇Ϻ }W^p9g%煵 <(91ϢGp$ԕ' uՔ(/>WG/_+̧ ȶQ^ Ӛ<1JKCZnXuWN9+ZN{^cDL6 (fu0*pC@F$L)RL`Њ՞aZ2XS=5yQfZ>8YjI:hW>s!N+*AvVH"([3~PLL"2ȿӉb.txy_+Rk7\&{ߕCRh;$o 3}zb=bCDnjKfӂQT/MЋ&sن ^1~PAU ykؖU#5!ZZВdGWXQ,9mN/0qciL57N [ @fjUafÉ>3M*ynEh?}5rv4SepF L o@Ɠ7 &&Zr\-370RӧA_,`xG[rWc{MnGڏ;'.4[$K/VG6 Q w;ruP`1)Aʌ1!SG3;ޯ #kNN;OuN`gč)?WujɱXU)U[5̖f42u۪%z34ts\koug LYp?swKL љ9[:IknÅ~ b^['WݙY3](1'M`xDD 4= k[`W9 Xe‰Q# "'Y=eR"B{?m\[kWNyk7Snښa]6}qTAǤ ]cˏM\%髗qq$tıΰF<ф Y1| $\_U rXe(G$Krw!9<^N:[n<_ܠl>k}yiDU3;]O!h|^[8\kH`zQ'uϡwP[`Ok9U+#B[J: A'rZ*+"z ]3dOoj/۫4Ψݺ\ʄ d;czjԲ$#D`g;inKFkkdxL0x~n E{&nu5._tԼ0""hD[,d P$Df$0&Ss:wuUGwWP=|usw _{ߩvW_ C2\imgb/ΧUXBEO'mfRZX)֌Z7)a$XpSI/0`A3h$"(D,K8%GUuj,f΍ O>bRlt"g {<˾_ca:m ƀ| ve"5nY j6N~Bm˥'/;_qxu\|C/s`uo;JRs8 "&=åJ|8)(XI_W NaN P*{z=j!5h _Ô58]`۪&Ȣj! )~7~חk~("IB1gO, :rF"果?ۖq3b(J Us6đh{]䘫,t,rq`?Uyэ{r=;fZשɻ#MjɩT'./q0>$vPr¶d~o?w_Ǘ(W58W훼S5ko|ǮAJk??LgvI5b'aŪoM9cKRmբcnv^ݾ7QNxJnŲoލީD3wKTb{sA7Ɂ+PBEW(\gQH[5KҫEt]fȔ-vѝe9ȍ寗NG>ᬝZm79zC. \,oK[Qpaqݨy8\yD7"݋O} L: '9&Pgl58?9127<;>[9Q9'7;IX,+©zHd, <ve89^ J ;t6k_V+ 6.Z{kvIa\h'G(5hp}~|Э^3#.dsnrzaKif20o7xȑ&qg|tv#3u+əQLL`xCNXi}h"N,߶M^w{픪5w2͜LT+VKvɦ6{HwGIH[HwGѳ<%l-[^x>^譟T#5ṉ$$ E9 9腭1Au?|}ɮ着s?kB/|;~ᣗ>u|/WH5l G9_ F9عBİhm!$!^)頻)ےDw+iEf=]X$%x¾rơX˪W3}vBŜ‚ `O$0aZ-@pln$Wu&F 6qhyпn+^_7_GObzE)=!5v/KsPoIpk^*r+_qNcp}tMCS}⻟|Lⲧ|o~(i"k/n~e }mnYX-ga:R"P *hF\Ê6'R YoÂ,N'7siڊ纫)sUb%S6"Q P 0S Kzl,c,q_6!h `=KqbC~6EJ/bI`܌ T@Ԫ.NJ0,B||j:s5~]s}1S]3C2+H$@\ӯBK%UKT#UiUy7e/,WxS'(ʉ$+7 mOXVtpdgIw*GnxWBXm[[qEcss]~+Oz X/YndY*\ pJjkd8@UThܷu+}opHb ӱ]L,bh x^^hmc. ;U&./S*(L\}i"$[ư˟JTGџ߲+Ooa[zV5[] _)I"v̷;8KF^[Uhߙ)Іup,eE/\&E\+Yb$ "(JG[VD\pа]xqkNH{S}tm8OWּ&{Lq53ߑȍVVN.]1XCc_p%\dh/vDo~M KNm Őn'HtO0L3 DKJ6IXyÞ%hVVת hs!qс8*j*}?W-Sq 2V[ r Q/K!82~QpA( X> Bbhq9Ҙܧ*l"TQe`I(b@+fBٸ{ne:1b(ͭD«z37N^\4ѡj\"chz B'hҀa?Ë Lz*H.UT0DB:(iļ /|Om!Fb0k#2hAޏ8C羸ܗYMNDlxjZC5~a_i!cduI#˵Y i7o3;`VF1%@٭& bkY} Y7Y|u5/՜8Y?&`(Xc~;Eu΄W@c-MmnjݶMpVP98*z{eE|#&=HG.* 6;'rUױ]%jUJ^uϫGӡ7wu+cXilׂ1<_s3fB1<(Z[$R :&ÄCH*8)v&MЌ&OFOTȧ):k\i2 ]S?'[6ŷ?qW>YM/pTfX ]90/G[4NF}@Sh6`ݹIb 8o#?[[J 56ʒr`.l?KRӟPN-Vqe yol:/ͫq#&*95uo붏Ívp]%wNJD0}kE|- },&Q/hn䦦o Yh!U*(@:)D)"(K$ 4 49g`؉-#?JG0?3DFyX, \9'M`=w܋^ޱh+-Ԑ\B[G 5v,m;xx`g9]hwU,n~2PD& τ8<~שfn +J0#QxUe#T-8+.(Cn 1+YNͬʯ^u(X['.=ޫ_ѥh-9z2!b֪@S؁}O\eGj1M{y+w_414WDlȲ6WW d)H)Ï׏gn}/^r9ReGOtWWz麤z6|س7]E% hfcޜ$eNrAAHk .I7JQU/,VK4"I 3"];ӻ/z"pL3X/tp%RT"0zKQ,Ew/>857?0U}u5$xU"p'/:ٳ.~"qBQ !55DIJ%X9X0C̗kz{4uz<8ȏӼK\lF&帓.hm痶K;}oDI O{h%ha^I7|68g~u-?Y}뱥|ox+7%I U?͏s7/<]wU|]3܇]UkM0R(r"dpYAXkA;tp3L]uq:b†!Z]oewI&T5-m&^2J/^;th[9_K..kpp=ÃSLu;i{س{mwo_=Ӄ |z I6M|uk;?O)۟zus+J XH7}3LA\[ڢwhR%M)FAJb稢Wn~z#`.x?ܽFXܬytPsmRŅ<27XxG>8noPBRDSHCfqGP Qy1ht;:%XVdsvȺOWDipx9dKGJ幔)C^1{d1_Lu8R{)e7GtG?o'v;TO)o9aria2pbysL-93=oyQvJz_c릾{^RCc[i--E)!ciAOS$P D\PbB A9VֵBw&O%We l9h̀ ]ET 5 U8s \voWOM;D$hJ~u~s榥UblRIx27ꏘGZw=_Zybhd ۶QV.L17ZT2T7ە]9tW~׮,TR;DϔP|<|]烫⚓C6۪Q;Rig.|ջwW~%DQ[7}w=/n!8<90'軎wVMOVQ,M YBڠT{Ŀ58 h!#x˫T Mp.\PƜWnF vyrtް ;&Xе$*&q-7>la c'07Rs,, #ݬ:j̤\ާOEa2 L8jˈcb}?;{ξ & S|>`Q7B{ IDAT(W@T1?=l eI-憢(Hoew8 aH('0<ԑ !]+j.!gSNE75w8h ~U0Qڕ`8DjkVUE.'$TҠ+xG:aglzl#7TZKu &$̟ttT![|vӵ9.~5{Fc7-MDѨXїkTMȖ?| ]]\~)1xQ*47zcK|9Zx2\ zœhqJ)p |܌($Jm)dC~jI`8z^tHV:[QX*;DE.g;p>77>k (H߂m~S3p7I$3,RQ!͞i7M4g-G,L4ЧL/,f64O+o0,ϛU]JdZ3\uc+V׎~법|m(x55֛Ks3$um8fJtWm€eY r #dvp౤gj`Sm=^{9X G~F) $o\j *q " Ȉ4%? Ă茘B$$Q^1"$M3R\4"=vрtc.a7X 36[۵jB|(&,,FI"M@ I;to8I9.: 4}6%iu1zrsmʧWe'n{G9 ,?9,P݈.,{畁ӧ8auT=8I̷e\;F ub{WT4@L"DHϏ6 N.3pZJ O֤ɔ`q #řGAp?qϐ ҚIqڤEHLJ5HDoFQ%\܇Bi4]! $e3nBxFMR&${<Ô W̦?.YEh88>, s2@3Ҫz!e$]Ćk.u=Ԫ_]:bi9jSȦG̓[]F0c-WM.ٷ*m!9G\K9=rQ҈+N;2Vf"j#@ g. OMefv_PY>x~ƒ.<8P*.'ÑBQ!A躁PdEI+b F,+< @*"0\k l7t_iRCZ1I,FcÔN2.Coe\VHZXso(=!oU+ow\f7O 3b8?vo~/\v^1v՛[U]Ȉ鰟8t %1C{GP)ڰ+x;/!,WRe^:Z<)^3$GrwBsi'KH<.H.vG|N67 wi]а XkS:H eWS $&1rsXKp1k?1\)ŷ$8]0u2 Joë')f|4FgeP[DLq1##8g/Db@g9S,JϏB RSEτTp:@9Vq%gh٪RTElޢù% h=)>=kB~bV GpB2Rcw8z,P9KUS?ၦ 5$9%DT&29 >P6i~,x_v0i y# Ioǃ~0Yt la 傍Ӌ"O&g(m̠N#$Xsp6XH)v+OwjD*抹D}8MyPCOe&H$.%ozFXo<#QMZuYZA3"q|IӋ|e~pW$pB$c|RX-)RxGB/?4,7{4>KeeZլq+VD/L`PIlH^\OjE P]TZ?w O(„A/%LQy1TjƫdžO.6)$h-c$kS*әzQ\A eʑ(TaNȊ#ܔ9=Ȏ706$XJeڎ M?fÄ́P֚ѪLH8lGX+5+b]&0o{y#WUhυ&G_׆Ԕ j˯o{=3AiUae/e,#+Srebq"HR.pEEѷI\BB+8"LuV&V‚P[jBEc(\Vؽ={zd*e{g4"ZK׆/HYb5KOVn 4jRf%f/~/~* YTjΗP\QU]÷?9Hݥ&O 9qe|!'2P[StHbQGGR(]ɂb:JPmU bJ $\0VUDb<ĘJB aƃiP🬏$73H)qK51u9 6Q1afҍljjC^벅KNo(y9 8 +/.U]htqh!̽^~7lnjf$kjuڞJ7oeSٱ쒋 `Jwy5Ah0[yPT{τBU&3 7Jnf@5=(H& P uD5s4\"1oURg*aw%irQPVJ$WI|J)FRDBHAMi'zUHBUqNF=X(6͢HZ F.|ʙJOpC]Q<ҝ2h*U]T F6({`ꩭOM"~qDzv_vR6wfY]v8UAvpx4ںcHuE`FMMx?.q/X >* 5_+AԀJkR Ch%~tD`EAwTkS&W)q@bx5 RX`rqCOT ZRPɰpLl Q^TzD0,TH.  DJo)AyJg3"Zg,ذo[7'aef&Rvep穁G\Je =qaqu=x&KeD∧H#%-T+Q/cxzV%KYx Pt*f1y$N\S-̈́ ?g:)AKpJ٪o"Ws@RQ8DF+zE.2_"%50X`L,9j!uи:Mʕz>!}@dM,OcHK}_+D@Wg7,Yۭ bQڨQՐ͎w[re{GO lN`\'-ľ=mp˲%Hڨ91 co <&DZ&`sgKND u WJG~e6˚$RJ!j"ܜZe$Up-\Ovkl|gR"YZ7(1ImFި\oqASÅP\$MyN拈F؃KCPN<N?O]ëf+sɭ۶dl (mgJ6 H*=sՉx3\{/ {_2b1=K`ª%HaIJl {RGn9 dd.u47As).qujE4QJes/UnKF Qӎ@sٗIk@Ho*+N}pTA&^Ek.c!d 1ᑜQd }B>@+t?-vʨF>xɹw(r8E02aza% p Ԍ^6ma`Lfc9?|;E1aa<"q}0 ӓp=VHe!&Z=mNKN%Z((*`\s&J\v\*9p-Ǚ{nq-["pQT.ۼ"' 0rOiX!!PhddN%:!Ɋrxnl")‰ o3R`Btmyv`w+N'H xp/FĈŠX(Uf p 6޽O?wo+a`)jr$c1{GL5r iB)b- X΂'T5 cJ'ىORLbJrF '1ZNLbRlBh\lŎWt3`!{eWs*Kvsr!ZOJ{T=!tVŖCҍ9;cOS[>bXztžPqΑ%өx=cBvӰP9?{[b$E%JЧa[deϿ7v.t'-̝.Y쿾p \#M%Jlʹ<򜇈Ƀ$LR[p),"IGlpvDžvɷ:0|9W@餀ECAJ❻*sM;^Zd@;I댵3<] &\$iZ~4:YLG HzC<ufM`j-#!ItB} -Ϳ5S.bwU0AQrdpv2ڂBƁFL8oO`q0e I<.ܓC3;o0j|I`q 6:cHg':%:7] l\vZ+9U5jú3ʚ.j|V(">0MO_t 3w00r)nyۼ0y@V Eg0:\֓ (sF`$0@`h[x8Ap\$2$Y"y0{Fq]@}$/R.= }u ޸PWRdPs((!IEbB\kV(@gv(TF1#cgIXQCYNG\05V i9@de_t(YOW3I1Wm%E=39Ae*4BU/R"B`x*r^/Z‖5dC!"C."I(M.1'nJJ  4lN'ZC ZPR"IcEJ.?IE/%99@1,Oz Ĝxyئ>]{ɗ/Yx ;-h5 * 0"BC$h9j9XebU)6N5 $JrŅv_rԠ%I7#ѷTHZB M;) NRřC)V*7tnd4"\@HɻlVEJ2|Wtx}eGW5z B:cpu @b'``f~Ď^yT0@q%JBdˉ`h'~ GHYR7MtIqW2sɕPnXyVZM*+h)Fm#KiGg iL 5]8N T"ĩ>. >sh}HW7-!VjjY1N );G$nŒ_L㉺#Xg5]JڀYc.I#%Uċ,0]IA zV./CTX%_p^OJD%VoI)j }ZHITY#6OxD!jS}/LNLB%‰0*OObXp!VZ#`R$w)zXh]VϹsM'w\#Џ~:l/F+MЊ~юt2 m`Cѭ\J'gg%8Τu)*4%5Ǝ%2^4G #H[}&E!N|6ئ2NxC~HE&fi>UQTG-'JוBHMao$xZӈD%l,\v GEbH?m}ːHGdiFwޜqŪ=^Mj(7 cy~w߳ 6l$H&F2r\qқZED# ~Dx?dvS9̤d4uh8 zq|DeRKSLPұŧ"H)-|I&PV Ŕ.C2q:;,g(<%3"I<\ 0i`B*rN&-G%Z gWP󽥄an sa1tzgϞVieW a`U^ ,Jm~fpg Ÿ5]UJ$AM4e]yhz"¢ģ:ՓSŁs94FߔP?/2h>qbM"?$Tf%*eɪH22pH%ZUo8Q*ELxܓY(xuuGؼ31Nj.Oz?3R)R*\GM_1z2tLW5lvE.T} !Yjzf@%z$%>-EА!dNc#1'z(_\,jpR/߻PT]N 9'`f!Xio֜42.S#n3Ƞ(UI98M:m:knC9L!?H B48|B%*iP @ A$՜Vrt*4$6ƪ>55< @+dG}vegI7 & ZAf<k4@"tEdp&?Yery$C4sز<7ӎC``d8He{ĥ.t/w6y4dV I hC(sE-BR#a*! akSRmHE% Gu4HPMԋ,EiMO!9<_0Pg WH-N5mI){~d %JUr Bʉr*4Y:y.#Bٖ D2"E)|δTV6r$".Go)q M5cv\ cL-z.UEËjtUV(+TV'+е [)D2E {dᬂC.%voj Ѹ[cw4Y8f^ "^*̅GpJ}IRQiɦZ@=\i |c c!M+\&u^:]D?|^1rPFiG_gQW¹\-Z8/ >OԢ$8ssg!lP`5ݵ+os=,Fw}g5Lkp Q x@ELj@bYɪ^ (Y@]u<;ۼTMI^;8m3N' `~*p1EXZEy'Kr"MK}Q h($wby?. 'UmIPl.\>B3Uֻ‘+-` |ҚФ0ʻ/BܟtbӶo0[C#V@t!ipE~//NeDgR@' ~^/mBB0 䤃 z!$ucDI* B@.VG>LU@:]5UBCԁë` WuaeJ%RT=\##⑎;mvx"良/c\^b-/ֲqz4X$a`THB,ǫX:;9.;y%){Uc(F<7v{snWߦk$S1T%_Z6V$L:9LЯC9.|xANMSTAR; nRHC)_Sp4}+.oDwnbxs/wsyNW!h>׾s }QQ%H@F^` }mj99ԆNLl̃{XNF-[£cTN]]6Dsc?X _|#.wM ;S>-N:[>)H$Vt*C Uk\0B(b!AB]Y;Ͻ{1(j2C et 5B`x*'XjQ!DJzX 34Ij'Xȇ"Տ[!N_s#Yvbqo7$){ղO1qJʵc7KBګ5;w7X"SHa!Tӽt##Zǚ `Cͅ:>'}'F:ݴ(,j;[LCͿ||KmU%3е3\[RF[Ti.r-o0X`=U3޵Ө[ֻ?u߇O-i皩 nΖǢϜgLd2bmˇ?:fA9LEݶh_yCٍWϋ{t:ؽCSiYʶ-ؿmkz\zBU܅JZ5EB[ؼh褒U&U,$T5*N~}+]>72Zv1Չ]3U<&Pmw$)34w9;&mfX<X-Ѿ4T,oMs̟m oft̛ D'v@L. K\žˆ?:f.*g+N_X(棇=5s#>`+G3?;2|{d Rz3{זν[c/O>8='o@-5;6ѼLTRxͫS]a2y?7zˍ+=Py㧇csjqMkhGB40\rpM3*Ehc@!AIO|+O_{t]] rt4L?Yn\7ʅu*JܮCMIw6=o0@۶e{6m':|ܵ uH5w喿5_0?<t.fİWy]{ ױ +wn{]PNIv^ {6kRّ.빱{ߵ/OLߴs;k^|5fvWwsϽgF(zRd|0훿ډ=O߳ L>8,u꥟; ~bqON6ټFGlcC]%U,MVOl}gxiͅ:ڐz'G@'mϏ?'6^5ώ|gic ߵ/O -ԗBoM D0AJ4륳^Z ,j$Kw}y\g{uWS}H- k8ƃ'6bbb0>bbbcb^di 6F=C P#Z:ZCﮮ*w^}_~y2|"2_[ H/d'^mOvktiXӹZԬ +fvv|iTqJW"P@UT?E*` +psLROe75: ֙'^n% <5Ff@/T;@X)_T?2t$ |f<pxU]>!i1O$ywP$>OÁxqmݧ7t{`azZuϺG '3ḃPf|ө Х?"eDZie.1+'tx1;Zxwm;iXT~*Ps0h­y g٥ n_VyoK),ZZiiIP.a98YFՔ2%MC~VIƍtF&\0H&aKKphx*"?j-Z]DÁÃW(g q]]_\Uuɗ#%7k&K\ۼpk`mL?x~''XN+Z_iU>ͫ P$POvGZ3rP 5?֟.,٥(/[KkJ-wR bfl R!7Te"s^m_^X]{EH{/UC8PUH ى`]-0 1{)oGr[Kwz劺 %^ Ko4ɫ篈?7N66wk5R C̛[UdZ◤=t9ev$?Zt: ں[p^xŏhk:L-Z&OPÌC7-[yy9lg)=5wۻɽܻVƽW-la(77Fh;1Xt>3t.ZvQյ߽6Î"l!e-Eou<}flk^ |߾8:mMY JWؖ:תH[E*ֱb[\{եK o5[$s7/EݾrxD_XB:0=6ҊV7<&oӂ'j[NA+P~fLҝ-h  }b+0" x\*NVKxE`'0r hGœ8;?"xMoU ىҙ_;Sn{6sotYߨ3@C=_u@K|M!ҞI_u[o)EKjuƗyr6}OM,MS{.~_:w%[?t = Sn-ϻ[x8]5?ޜ`#ޙ '}a;eq[OofEA 7VZ@jm %n0 f]1zog 4iϻ.uWŃY,:ԘƩ;VcXj7RFsZ;"2z}@; Z ю/:mڐUy@M%~֦;'y&7C(ɷW_x꿼 ~Í7\7Z7漊?4ͽInkڰBE1vݻ ^ͱ5) p!Ҟ,WYw]Ck뮞s7e/oioG7v=z3I#-aXa\ES_hc4jI!kTETi3E$rVALX^!OmB,: b2$^Cd,C$R'8ʑV?T&NH6 D$NFb㴺vҦFq+7 iZQZ$*hb]fD2 Bf9rS׭d)HsQ2EOiϯ$ʐ/?>MrEzN\ '!4 ҭ% w"E $*9,LΝ|0JD?+-6D;Kl\q}D".G 竳RR8{׫g9vw$x>7p8Ռ#\; m 5f%ZتEp2J0|8y}#U^n4Ƒmx~&V R, p9G7%oOI1L&!>Bg^Rކ%ө4jqB m`nd~AE y^Xh0iBp>YF 9pL$ FAZpeIfF$qڽU)(mt'*<"!:ri *(ZC(Bf07)a *JJEj(! HZ"^f 'iE>$')%u, Q|HٍØ$W,4v^>M ;BxP}&z2#ހ+ R,'Y4mc4 "踮M AR0aՓg Kn"BeTCOB54  N4f>%vIg-*~C)ϺSEzO/Mmm֤J/Jkm11"hjOɵ6I0}Beq MG2#PΐIɊɏbT /#Z;Y&5vVhOkE蚫SM*L IўϮI!4}b1ĊTjAju%)ECFDڢ@-!y@ƙ;& Y*\$[{ dF}<( TbxTX _D&ȿ89礩dFW~Aws6qZr-hWΩ "{j4R.G pC.!9Bb49;R2bi, .,fԙOZOT:{FzKJ^ y&bBGܦű(IK_yV˻i5HE 98$OxRA!erPPF\,lpWGT4h_í~pgPKU>H.2Y +nHN\iR_ȶtI״?ךu|1{/2CΚ٫Z? ֺE|>^0X@U ;ӭUl^wO)ٻ$b:?C+kghl*lI6i4زogz™’wi ^knG>ܖqWfcgq{g3o$7Nau-)OX=G/,|Lf,ªB{ +vfZckz4x|jgb} V_dC  ywŨ+ 6l\3+M\|6z~'.$pb:>P|f*RbW͖ܕw2Q?sٷCx(Cn(+doK.bc+̚O}D pu뽩+Z:+7/$ ]UoX` /|l@r%S@cM&MŔ5<:2R žg IX*`sqi:/vlzD_NM;޽pK׎$NIW {az"{8ob27g:5)y3珅wtul"T j`7d? y!ss\!o˨:<\{3oCvvv~) r gsOZkﶃ{e)7k}~㓋m.և K]%y^s |x{/ ܻZH}+'ssS\(y-f K3z(zꯥT~D}dep2op77ݚSRn'b>:z(ԫM_| ѹC<y6z皿J-?H =)3GG;uExcéhGq>3f{)@bMRbfڮ5\zܚL@5]Ru^K &7Ūd<<T.4,P(Wg|1+-bfvRD?rڎRP \G'Bj 7Yc=k]j.8+|wܥnH*d%?k,kH  .8ig} ạ]{ b9B"0l3斀ֺ?j?bnG/XNLUn)ΦG=[,4ƺk6n! n׎smP ^@Yŏ>;2`Wח3 v``=w>9:&?V?v_6dGaMUCOnъLc nvm5 6"–;rq\Op[˝33otŮm,02\LZ:k$a:0q@.N߸㪞c uʇ 'TADVuQBҹERyvh1_O/ɗ7Xݱ??x͉Fh-Ai&b1C^Z~fo8*Zjq +Ez/8zttjMV )9ҳݲ멖%qzF~걪 dM2AagqᣣO,F" rSE\LJ PjV-7Dۅ奿ac]Me$ٷE a<ђA:%aWJ,G^-k9z}ǵ~wtRW͖Ztn.qGUcD,e"F5ŒL|/]n D$GcD˶ܲKYVC̦GN! !tsݱVb$uWz`u}Wh, 2'&A =v ߾c92w鑑g%##F㚺x::4( V'߄~/n` VskMɔbeEv`=o|29}Zj\G.>JTn>rYvl͗t:r ,>C|Z]ҚSQ(Pz{么:NJ䥳ߋ}7P<6ź%(>o<Jt!ayR՛YưPYo<Āw(5u;LYE*Z|';Dr(Sl8 v^^CV\z>*7Gy""Z)}-յ }/^ xYmab@$NY#S!n:.+rA))Zw;5ۋ}sXn`uO%p cKgd?/~q1SaxbG=48EJ sgW}՝@ VÆ;N2Ybcڪ֡El \֦z)$f*q DW.ZVduVV_eWs`m>LG lƛ7jV_hĐ\lk|]1d!hE1Ut{elhPj$ l0t{U{|'Y://qz,Xox,Ou61.Fۚ?Soh&Ф V֮̈/\R^?/"ͫZ`jy=mh_[2YVEaSӭ] Agfڽ|Mɹ.Pa}Ey7\[y5)X@wbk|=x26Amx&RbS]hXhCsnFQ/C6I>t+I{xG3I.IJ %}W(A0w)@4rݯOptreB r 5: a̼N@}(Dmm]QSH(wY_&J׻N)6b؛{]tR.WyV!&Ӓ\/ j <a]_OBޘ5i6A齫^<& ]⠑FƓl2x`aC&X3N(^Q- !y$ Wd)$5HTpv3TUU !C {RPA@\)X7vsYJ ,,뀄NşǕB̢P/mM.މ_AX*q?ΝRVh)qJT2,\+Ci+i>M{$^9}XRACF- NX94%g"*aPƜ΃pf)$QڸHwI:f|I`AێJ1h,nSL"XSBTL{Z*O'u!F– r7+kh(n#'T og1qDs:jӻz{D Nv~Mn#a#rgV$~`8 d$\+χʅa &T 7*NTY&Yq :,'XtB"_eT@RIF50 yj_L.&˭FQhpSdnNШAMeݑxƏe}$j:P"*LzJ!624>XoWsX@7&F4\ /Y6HI{'mLV #,PBC*<$h'fɋ/$骑$_cPF>hvHz6d̈́6UJU!{/L 02N5'wasjە.,>р}r7rq.>+ﵬL*և}eL zqB w BT=Ff͠;E+iAN H@1fX, 06`nNb0OP- 1|uz Sᰫ> LJФ"D=9ϐ0pהYq h.ɍfCx8W^WaqUXNzļOywCE $lRm@Qט8IH iQB4^\FC:aCKGQ\": .R -GȘ8f hX\Rr|WhW/GQhte7"&5h7}dD84ܠ_!aVsBI<>$x_kȥG`{.SA8tI`a2ȭBM?gJ<08^| u_CA7m6$ppǚoS{}S9u3z=kꮂ; 87t=og@g K pӪKeHx| !>v*h0L NB6ĊJrt yF`p?YQ"!d\f4p-Vf^IPAȎAwזrG玹}g9xg9?h^hA?mQi<ϗap8<]ڕW|,I pxѠbVj^bK}6Ӂ7|AOACK\3&*cҽU慟Ӈo)tC*=9 5H"BE-@/cd|{*ݧ*~fZ~] I/\;gjlŀ?g 8O.\;G" }P(=]- -gݹoE U&=O5tl"?uJ |Fpy8H͟ka)7_{Pi濟 D5@"; %vҿԯȈV$Ƶ#scT #cT#̺Q]K ?Y"eȅ~ ։H˳A g9 dŠP̱!D7b%sCZ69COTr\>SKpb'!%S:3 fVnu!O@:G.}}U6;82,'g;k6Inؾ=a!'9MDJDA?ZZ̅ĸjH`ȹ8)a%0Za"?=mE j,p*\ 0%p﮽ξ /}k00;8 5s>`jƖDƖkUVjĩ3=!=ӎ{ax#XN8?#]6;Zw` 7Bv l Rr- (@ 2{GF߉&W|ɢ@.$,Q9">VT"-AIDATy!w>:i_oQ}9cT>IܲJc;;mj; +1\ݮ=3QŽo3Pn@ |X fV}67.Xfؽ 7*B )eD`\4jჱ:$n Շ1OKa#TX 2fl RhpmJ ShMIZsgoz95ug4$9B>?MC>)66)\VYr[F4R24#76¼9 ]SDV L bch`tb|~ frfU)[j0"hȶJAt{R;-dUVl)q4XCKhPKm d}KD-cv1d8p'0ё),)n [JM)FnZ9RE!F@[rɔ H՘orBL>/5f0?ESgMɅ2X)A]#RQcBi)wYpPpŴUDkbVE,R7!哂 PQk^GU78~"ϒ v¨LhH=̳*CSZq$̦Fl!MHC4!pP9d+k>J["2T1-@%K ~ cdyN=x5 Bp\r#MheXX=QKqBo K)DnK}jA9 [S ϱ~*'LI(c&8smb*6 IENDB`pyglet-1.1.4/tests/image/BMP_RGB_4BPP_LOAD.py0000700013464101346420000000100311266427715016506 0ustar yohyoh#!/usr/bin/env python '''Test load using the Python BMP loader. You should see the rgb_4bpp.bmp image on a checkboard background. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: BMP_RGB_4BPP_LOAD.py 2002 2008-04-12 10:59:20Z Alex.Holkner $' import unittest import base_load from pyglet.image.codecs.bmp import BMPImageDecoder class TEST_SUITE(base_load.TestLoad): texture_file = 'rgb_4bpp.bmp' decoder = BMPImageDecoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/BMP_RGB_1BPP_LOAD.py0000700013464101346420000000100311266427715016503 0ustar yohyoh#!/usr/bin/env python '''Test load using the Python BMP loader. You should see the rgb_1bpp.bmp image on a checkboard background. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: BMP_RGB_1BPP_LOAD.py 2002 2008-04-12 10:59:20Z Alex.Holkner $' import unittest import base_load from pyglet.image.codecs.bmp import BMPImageDecoder class TEST_SUITE(base_load.TestLoad): texture_file = 'rgb_1bpp.bmp' decoder = BMPImageDecoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/BMP_RGB_8BPP_LOAD.py0000700013464101346420000000100311266427715016512 0ustar yohyoh#!/usr/bin/env python '''Test load using the Python BMP loader. You should see the rgb_8bpp.bmp image on a checkboard background. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: BMP_RGB_8BPP_LOAD.py 2002 2008-04-12 10:59:20Z Alex.Holkner $' import unittest import base_load from pyglet.image.codecs.bmp import BMPImageDecoder class TEST_SUITE(base_load.TestLoad): texture_file = 'rgb_8bpp.bmp' decoder = BMPImageDecoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/PLATFORM_RGB_LOAD.py0000700013464101346420000000140211266427715016532 0ustar yohyoh#!/usr/bin/env python '''Test RGB load using the platform decoder (QuickTime, GDI+ or Gdk). You should see the rgb.png image on a checkboard background. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest import base_load import sys if sys.platform == 'linux2': from pyglet.image.codecs.gdkpixbuf2 import GdkPixbuf2ImageDecoder as dclass elif sys.platform in ('win32', 'cygwin'): from pyglet.image.codecs.gdiplus import GDIPlusDecoder as dclass elif sys.platform == 'darwin': from pyglet.image.codecs.quicktime import QuickTimeImageDecoder as dclass class TEST_PLATFORM_RGB_LOAD(base_load.TestLoad): texture_file = 'rgb.png' decoder = dclass() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/rgb_8bpp.bmp0000600013464101346420000017044211266427715015660 0ustar yohyohBM"6(  7 !2(&$k67=:$"1i.$"BZ>,%>w%CmH.;2P. (KmVU US3WP[b7.Kn6L>'Wn0R}Y=1Zd0Wp`c+_ki!;Z@;d|4ht)]pm5f~E=irGBZriHle8lk0mk6bhPvNFf+qvrBG;}WBd?uyB{e@xq>t:ysQ8{n3Y6~gT1sEЩϨ7912*, $ݾO7/oLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL9LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL =LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLM MLLL= LLLLL  9LL9  MLLLLLLLLL =LLLLLLLLLLLLLLLLLLLLL= LLMOLLLLLLLLLLL=(LLLLLL  9LLLLLLLM=LLLLL= LLL=LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL= LLMLLLLLLLLLL =LLLLLLLLLLLLLLLLLLLLL=  =LLLLLLLLLLLLLLMLLLLLL=  =LLLL=L=LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL9MLL==LL9LM9LL(=L9LLLLLLLL==LLLLLLLLLL(LLLLLLLLLL9LLL=MLLLLLLLLLM 9LLL9LL9LLLLLL==LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL (LMLL =LL=LL =LLLLLLLLLLO9 LLLLLLLL=LL= LLLLLLLLL(LLLLLLLLLLLLLLL =LL= LLLLLLLLL(LLL =LLLLLLLLLLLL =LL= LLL= L =LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLLLL9LLLLLLLLLLLLLLLLLLLLLMLLLLLLLLLLLLLLLLLLMLLLLLLLLM L =LLLLLLLLLLLLLLL0 = 0LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLL 9LL9LL  LM 9LLLLLLLLL=LL9 LLLL9LOLL OLLLLLLLLLLLLLLL =LL9 LLLLLLLL0LLL  LLLLLL =LL9 LLL=OLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMLMMLMMLMMMMMM9OO9 ML==MM=O0ML9M=0LLMMLLMM==LMLLO0 MM9 =LLMMLMLLMLLMMM==MMMLLLLM 9M9 OL=O0LMMLLL==LM9LM9LMMMLLLMLLLMMLMLMLMMMMLMMMLLLMMMMLLLOMOOOMOOOOMOOM9 OOO 9MMMMOMOOOM =OOMMMMO=  9MOOOOMMOO=  =OOOMOOM(OOM0M= 9OMMOOO=  =OMO99MMMMOOOOOOMOMOMMMMOMMOOOOOOOOOOOMOMOMOOOOOOOOOOOO 0OOOO9 OOOOO =OOO=  (OOOOOOOOO 9OOOOOO OOOOO=  9OOOOOOOOO=  =OOOOOOOOOOOOOO =OOOOOOOO=  =OOO 9OO  OO9 OOOOOOOOOOOOOOOOOOMOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO (OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPOOOPPPOOOPPPPPOOOPOPPOPOPOPPPPPOPOPPPOOPOPPPPPOOOOPPOPOOPPPPPOOPOOPOPPPPOPPPOPOOPPOOOPPPOOOPPPPPPPPPPOOOPPPPPOOPPPPPPPPPPPPPPPOOOPPOOPOPPPOPPPPOOOOOPOPPPOPPPPPPPOPPOPPPOPOPOPOPOPPPPPPPOPOPOPOPPPPOPOOPOPPOPPPPPPPPPPPPU PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPUUPPPPPPPPUPPPPPUPUUPPPPPPPUPPPPPUPPPUPPPPPPPUPPPPPPPPPPUPPPPPPPPPPPUPUPPUPPPPPPPPPUPUPPUPUPPPPPPPUPPPUPUPPPPPUPPUPPUPPPPPPPPPUPPPPPUPPPPUPUPUPPPUUUPPPUPPPPPPPPUPPPPPPPPPPPPPPPPPPPPUPPPPPPPPPPPPPPUUPPPPPPPPUPPPPPPPPPUUPPPPUPPPPPPPPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPUUUUUUUUUUUUPUUUUUUUUUUUUUUUPUUUUUUUUUUUUPUUUUUUUUPUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUPUUUUUUUUUUUPUUUUUUUUUPUUUUXXUXXUXXXUXXUUXXXUXXUUUUUXUXXXXXUXXXXXXXUXUUXUUXUXXUXUXXUXXUXXXUXUUUXUXXUXUUUXUXUUUUXUXXXUXUUXUUUXUXUUUXXUXXXXUUUXXXUXUUXXXXXXUXUXXUUUXUXXUUXXUUXUXUXXUXXUXUXXXXUXXUXXXXUUXXXUUUUXUUXUUUXUUUUXUUUXUXUXUUUUUUXUUUUUXXUUUUUXXUXUXXXUXXXUXUXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXE  0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXEaXE XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX__X___XXXX__a a_XE  a__XXX___a a_X__X_X_a EaX_a aXXXa 0X_X____E a ____X__Xa  aXXXa a_X_X_X_XE a___a___aXE X_XX_Xa aX__E XX__XX__XX____XX_aaaaaaaaaa__aaaaaaaa_aaaaaa_aa__a \_a_aa _aaa8 _a\ aaaaaa_\  aa_ aaaaa_aE aaaaaaaaa_a__a_aa____aaaaaaaa_aaaaaaaaaaaaaaaaaaaaEa aa0\a0aaaaaaaaEa aaaaaaaa\\aaEa aa EaEaaa0aaa\\aaaaaaa \\ aa 0aaaaaaaa\\aaaaaaaaaEaaaaaaaaEa aaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 0aaaaaa\E aaaaaaaa 0aaaaaaaaaaEaaE aa 0aaaa Eaaaaaa0aaaa EaaEaaaaaaa EaaE aaaaEaaaaaaa EaaEaaaaaaaaaaaaaaaaaa 0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaEaaaaaaaa aaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\aaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEa\aa\aa  Eaaaaaaaaa\aaaaaaaaEaaE aa\aa Eaaaaaa haaaa EaaEaaEaaaa EaaE aaaaaaaEa\aa EaaEaaaaaaaaaaaaaEa\aa\aaaaaaaaaaaaaaaaaaaaaaa\h\a\\\\\hh8 \\h Eh\I \\IhE8a\a\\haa\ E\\I \\a\\a\hih\\a Eh\I \\ I\Eh\E hh\\hhhhE\\\ hh h\\\hhhh8 a\hh\a\\\a\\\\\\\h8 \h\ Eh\I \aahhha\h\\\\\h\a\\h\\\hhhhhhh\hh hhh8h\\hhhhhhhh8hhh\hhhh Ehhh8hhh hhhE  EhhE hhhi  ihhhhhhh hhE hhhhhhhhh h\h8\hhhhhhhhh\hhhhhhhhhhhhhhhhhhh hhhh 8hhhi  Ihhhhhhhhh  8hhhhhhhhhh I\hhh 8hhhhh8hhhhE  IhhE hhhh hhh  hhhhhhhhhh hhhhI hhhhhhhhhhh h\hh  8hhhhhhhhhhhhhhhhhhh\hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhiihhhhhhhhhhhhhhhhhhihhhhhhhhhhhhhhhhhhhhhhhhihhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhihhhhihhhhhhhhhhhhhhhhhhhhhihhhhhhhhihhhhhhiiiiiiiiiiiiiiiiiiiiiiihiiiiiiiiiiiiiihiiiiiiiiiiihiiihiiiihiiiiiiiiiiiiiiiiiihhiihiiiiiiihiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiihiihiiiiiiiiiiihiiiiiiiiiiiihihiiiiiiiiiiiiihiiiiiiiiiiiiiiihiiiiiiiiiiiiiiiiiiihiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiillliiiilliiiilliliiiliiliiiliiiiliiliiillliiilliilllliilliliiilililiillllillliilliiilllllilillllllliliiliiiliiilililliliililiiililiililiiliillliiiiiilliiilliiiiiliiiiiiliiliiiiilliiiiliiiiililliiliiiiillliiliiiiiillliiliiilliiiiillllllllilllllillllllllllllililllllllllllllllllllllllllllllllillllllllllllllllllillllillllliilllllllllilllllllillllllllllllllllllllllllllllilllillliilillllllllllllillllllilllllillllllllllllllllllllllllllllilllllllllllllllllllilllllllllllllllllllllllllllllllllllllllllllllllllllllllllllnlllllllllllllllllllnllllllllnllllllnlllllllllllllllnllllnllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllnllllllnllnlllllllllllllllllllllllnnllllllllllnlllnlllllllnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn8  7nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnpnnnnnnnnnnnnnnnnnnnnnnnnnpnnnnnnnnpnpnnnpnnnnnnnnnnppnnnnppnnnpnnnpnnnnnnnnnppnnnnnnnnnnnpnnnnnnpnnnnnnnnnnpnnnnnnnnnnnnpnnnnnnnpnnnnnnnnnnpnpnnnnpnnnnnnnpnnnnnnnnnnnnpp8pn8 7nnnnnnppnnnnnnnnnnpnnnnpnnnnpnnnnnnpnnnnnnnnpnnnppppnpppppppppppppppppppppppppppppppppppppqppppppnppqpnqqpppppnqpppppppppnpppppppqpppppppppppqpnpppppppppppppppppnppppnppnppppppppppppnpppppqnppppppnpqpppqppppppqpppqqpppqpppqqppqpnpnQppnppppppppppppppqpqppnpppppnpppqppnnpppnpppppppqqqqqqqqqqqqqqqpqqqqqqqpqqT  qqqqqqqqqppqqqT qqq7   Tqqq QqqpqqqqqqqT pqq7  TqqT  qqpqT pqqqpqqqqqqpqqqqqq qqqqT q qpqq7  Tqqqqqqqqqpqqqqqqqqqqqpqqqqqqqqpqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq qqT qqq7qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqT qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq7TqQqqqqqqqqqqqq7Qqq QqqTqqqqqq qqqqqqqqqTqqqTqqT7qq7TqQqqqTqqqqqqqqqqqqqqqqqqqQqqqqTqqTqqT7qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqvQ7 qqqqqqqqqqqQqqqqqqqqqqqqqqqqqqqqqqqqqqq TqqqqqqqqqqTQ7 qqqqqqqqqqqqqqqqqqqqqqq Qqqqq TqqTqq TqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqvqqqvqqqQ7qvvvqvqqqqqq QqqvqqqqqqqvqqvqqqqqqqqqqqqQ7qqqqqqqqqqqvqqqqvvqqqqqqvqqqqqvqqqqqqqqqqqqvqqqqqqqqqqqqqqqqvqqqqqqvvvvvvvvvvvvvqqvqvvTvvvvvv  7QvqvqvvqvvvvvvvvvvvvvTvvvvvqvvvvvvv  vv  7QvvvvvvvvvvvvvvvvTvvTvvqvq7 vv TqvQvv  vqvvvqvqvvvvvqvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv7 vvvvQvT7vvvvvvvvvvvvvvvvvvvvvQvvvvvvvvvvvvvv7vv7vvQvT7vvvvvvvvvvvvvvvv7v7 vvvQvvQ vvvvvv7vv7vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv vv Qvvvvvvvvvvvvv7 vvvvvvvvvvv  Qvvvvvvvvvvvvv7 vvv7vvQ vvv  Qvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv vvvvvv  Qvvvvvvvvvvvvzvvvvvvvvvvvvvvvvvvvvvvvvvvvv7  zvvvv  Qvvvvvvvvvvvv 7vQ vvvv  7vvvvQ vvvvv7  zvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvzvvvvvvvzvvvvvvvvvzvzvvvzvvvvvvvvvvvvvvvvvz vvz QzzQ7 vvvvvv7 vvvvvvvvvvvvvzvvvvvvzvvvvvzvvvvvvvvvvvvvvzvzvvvvvvvvvzvvvvzvvvvvvvzvvvvvvvvvvvvvvvvvzvvvvvvvvvvvvzvvvvzvzvvvvvvvvvvvvvvvzvvvvvvvvvvvvvvzzvzzzzzvzzzzvzzzzzzzzzzzzzzzzzzzzzzzvzzv7zzzQ zvvzzzzzzzzzzzzzzzzzzzzzvzzzzzzzzzzzzzvzzzzvzzzvzzzvvzvzvzvvzzzzzzzzzzzzzzzzzvzzzvzzzzzvzzzzzzzzzzvzzzzzzzzzvvzzzzzzvvzzzzvzvzzzzzzzzzzvvzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 7zzz7  7zzz 7zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzjjjjjjj?1111?jjjj1'''1111?????1?j'6 '  ??íҤżŵҤҧ16-"""--) -Coŭҧŭŭҧҧj)-!@D5@CC" %FYxҪҪҪҪҧҪ1))!BWWFDDD/  DYeҪҪҪҪҪҪ-)4WbbFFWD@" %5YeɵҪҪɳҪɳҪҪҪ1"))"/BbbWDDFW@) "%DHYeҼҪҪŪɫŪɪҫҪC-4AVVVBAHbD*%FbeeҫҫҮҮҫҫ"-C%@BVVADFbVB"%%5H^~ΫҫҫҫҫҫҫR"-C""/BVVB5DFWB*%*5FH^cҫҬҬҬҬҬ?'"-C""*BVB44BFbV/"45Hb^c~ҭҬҩͬͰҴҬ'"""))""4BB455DWW@"%4F>^c~~~ҩҬҳҮάҮάҮҰ'//-C-""4BB445DbW@*5HH^c~~~~ҴҰŰŰŰҰk'"//-CC"@BB455FbbB%%5FHH^Y^~~~ұҰҭ͹Ҽ͹ҼʹͰR"//*CC"/BDB45Db||b5555HH^ccceeҭɰѴδγδɭɴ?!4/---@WVB45Fb||VB*%5HY^^^^YeeҴҳҳ'!4%--)4WWV55DWbb|V*%%5HHHHHH^eͷҷҼҼ͹u'"/4%*C%4BWWB44Fb||bB%5FHFHYYee÷ҹҷѷѷҷͭukkkkkk"BB@CC%4WWB4BFb|||bB%*5DFFYYYe÷ηҷҷҷñuR??'?Rkku6)4BBCC%%BWFB4AH^y~||W5*5FHYYYYeeeҷk'''6??RRRRRRRRku6CBB*C-%BWWBBHbyyyy|b55FHeeeeeeeeҷu'6 6  RkR-B4**C-"/BVDBFb^y~{y|bHHHGeeeeee~ҹ?6-"""--) -gsK@B4-//)/4BBFH^^y~~~||bHHGeeeeee~~žu)-!@D5@CC" %HY-B4/")///4AAA>^^~~~~~~~ZGGGeeeeeeѾ?))!BWWFDDD/  DYeu4B4!)/BBBAA>>ZZc~~~~{ycGGeee[eu-)4WbbFFWD@" %5Ye)BAB44BVAAfffZcZ{~~~{yZGGGG[[[[~ƾƾľƾ?"))"/BbbWDDFW@) "%DHYeľ/AAAAVfftfffyZZc{wZGG[[[[ľƾľľƾľƾľľƾľƾƾľƾƾƾľƾƾľıC-4AVVVBAHbD*%Fbee4A^ftttttfftwwcZ>GG[[Ʃ'"-C%@BVVADFbVB"%%5H^~4H^yttttttttww{f>GG[[u'"-C""/BVVB5DFWB*%*5FH^cBb|yttttttttw{{f>GG[[#&Gc[`Ɯ$`Ɗ$N6"""))""4BB455DWW@"%4F>^c~~~A^^yyyttttwwwAZZc“okuNƱ$``Ʊ6//-C-""4BB445DbW@*5HH^c~~~~A~~yyyyyttww{>>Z“)Ru}}˱'"//-CC"@BB455FbbB%%5FHH^Y^~~~D~~y~~{yww{{t>Zc"-xs˨}#<<$Ɯ<˱#<ƱN$u"//*CC"/BDB45Db||b5555HH^ccceeo|~~{{FHZc%HY}#$˱$mNˊ<6!4/---@WVB45Fb||VB*%5HY^^^^YeeK4HGVDYe˱m<6!4%--)4WWV55DWbb|V*%%5HHHHHH^eJ~^bb|~yA4WHYB%5Ye˱#˨$˱6"/4%*C%4BWWB44Fb||bB%5FHFHYYeex44VVbºػy4/45;/"%DHYeˊ<u6"BB@CC%4WWB4BFb|||bB%*5DFFYYYeo|²3bctcؓHHYeb"%Fbee˨}##J-4BBCC%%BWFB4AH^y~||W5*5FHYYYYeeeЮ|»V|~%FHe|B%%5H^~N$&ӱJCBB*C-%BWWBBHbyyyy|b55FHeeeeeeeext|!A~cyD ;YW55FH^c#`<}ӜNJCB4**C-"/BVDBFb^y~{y|bHHHGeeeeee~d|3/ 4~||bH|* 6g~F45Hb^c~`}$NK@B4-//)/4BBFH^^y~~~||bHHGeeeeee~~g~3 fݓHYybJx|F%4F>^c~~~<Ӯ#&ˮ`&CB4/")///4AAA>^^~~~~~~~ZGGGeeeeeeӱxwA! B>c¦HbFb~W;gxF%*5HH^c~~~~Ӝ&mԊԱ4B4!)/BBBAA>>ZZc~~~~{ycGGeee[eӱg|~~ytA%@/|ZVtx%FY|%%5FHH^Y^~~~Ԩ&m-BAB44BVAAfffZcZ{~~~{yZGGGG[[[[~ӱoooK6g|y{4/D^~b5555HH^ccceeԉ&$/AAAAVfftfffyZZc{wZGG[[[[u+Kbc**5b||VB*%5HY^^^^YeeԨ#ӊN&#$N4A^ftttttfftwwcZ>GG[[ӱox{/%C%W|bb|V*%%5HHHHHH^eӜ&&4H^yttttttttww{f>GG[[ՙg~ݲ C@C;xxxb||bB%5FHFHYYeemBb|yttttttttw{{f>GG[[dg^cݎ/%%4BDB44Bb|||bB%*5DFFYYYe&Ab^|yttttttwwA>Gc[BZC%%BWFB4AH^y~||W5*5FHYYYYeee<A^^yyyttttwwwAZZc»יVyŽ@-%BWWBBHbyyyy|b55FHeeeeeeee#&>ZdAyC-"/BVDBFb^y~{y|bHHHGeeeeee~W~~y~~{yww{{t>ZcיK/A///)/4BBFH^^y~~~||bHHGeeeeee~~s|~~{{FHZcۙCAf/)///4AAA>^^~~~~~~~ZGGGeeeeeeg|4HGۙ4A4!)/BBBAA>>ZZc~~~~{ycGGeee[ed|~^bb|~yA4WHY³-BAB44BVAAfffZcZ{~~~{yZGGGG[[[[~ܙx44VVbºػy4/45;/AAAAVfftfffyZZc{wZGG[[[[s²3bctcؓHHYe4A^ftttttfftwwcZ>GG[[ܙ»V|~%FHe4H^yttttttttww{f>GG[[xt|!A~cyD ;YBb|yttttttttw{{f>GG[[޶܅..].ޙ3/ 4~||bH|* 6gAb^|yttttttwwA>Gc[.ޅ..x3 fݓHYybJxA^^yyyttttwwwAZZc».].xwA! B>c¦HbFb~W;gsA~~yyyyyttww{>>Z½.g~ytA%@/|ZVtx%FYW~~y~~{yww{{t>Zc]ܶ..ܶ.ޙoggKJg|y{4/D^~s~~{{FHZc].]ۙ+Kxcݎ**5bg|4HG]]ϙdx{@*C--xs~^bb|~yA4WHY]ϙsأJ:dssdsx44VVbºػy4/45;ݽϙs~حs²3bctcؓHHYe.dxc䞄»V|~%FHe.dx~xt|!A~cyD ;Y].db~3/ 4~||bH|* 6g̅].]sbx3 fݓHYybJx]...垠τwA! B>c¦HbFb~W;gs.s~tA%@/|ZVtx%FY].ϙssgJJg|y{4/D^~]ϙ:Jxcݎ**5b...dx{@-*C-*xօ.sأJ:dssdss{؞.dxc.x~.]bsYѠS,r S,,, ,r, r SrrS, S  rr,  2 S 2 S, 2rSSrSrrS,rr2r2 r SS2S  2pyglet-1.1.4/tests/image/PIL_L_LOAD.py0000700013464101346420000000072111266427715015516 0ustar yohyoh#!/usr/bin/env python '''Test L load using PIL. You should see the la.png image on a checkboard background. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: PIL_L_LOAD.py 661 2007-02-17 00:23:30Z Alex.Holkner $' import unittest import base_load from pyglet.image.codecs.pil import * class TEST_PIL_L(base_load.TestLoad): texture_file = 'l.png' decoder = PILImageDecoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/BUFFER_COPY.py0000700013464101346420000000261111266427715015623 0ustar yohyoh#!/usr/bin/env python '''Test colour buffer copy to texture. A scene consisting of a single coloured triangle will be rendered. The colour buffer will then be saved to a stream and loaded as a texture. You will see the original scene first for up to several seconds before the buffer image appears (because retrieving and saving the image is a slow operation). Messages will be printed to stdout indicating what stage is occuring. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' from StringIO import StringIO import unittest import base_save from pyglet.gl import * from pyglet import image class TEST_BUFFER_COPY(base_save.TestSave): alpha = False def draw_original(self): glBegin(GL_TRIANGLES) glColor4f(1, 0, 0, 1) glVertex3f(0, 0, -1) glColor4f(0, 1, 0, 1) glVertex3f(200, 0, 0) glColor4f(0, 0, 1, 1) glVertex3f(0, 200, 1) glEnd() glColor4f(1, 1, 1, 1) def load_texture(self): print 'Drawing scene...' self.window.set_visible() self.window.dispatch_events() self.draw() print 'Copying colour image...' self.saved_texture = \ image.get_buffer_manager().get_color_buffer().texture print 'Done.' self.window.set_visible(False) if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/PIL_RGBA_SAVE.py0000700013464101346420000000105511266427715016056 0ustar yohyoh#!/usr/bin/env python '''Test RGBA save using PIL. You should see rgba.png reference image on the left, and saved (and reloaded) image on the right. The saved image may have larger dimensions due to texture size restrictions. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest import base_save from pyglet.image.codecs.pil import PILImageEncoder class TEST_PIL_RGBA_SAVE(base_save.TestSave): texture_file = 'rgba.png' encoder = PILImageEncoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/base_save.py0000700013464101346420000000630611266427715015755 0ustar yohyoh#!/usr/bin/env python '''Base class for image tests. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from StringIO import StringIO from os.path import dirname, join from pyglet.gl import * from pyglet import image from pyglet.image import codecs from pyglet.window import * from pyglet.window.event import * from tests.regression import ImageRegressionTestCase class TestSave(ImageRegressionTestCase): texture_file = None original_texture = None saved_texture = None show_checkerboard = True alpha = True has_exit = False def on_expose(self): self.draw() self.window.flip() if self.capture_regression_image(): self.has_exit = True def draw(self): glClearColor(1, 1, 1, 1) glClear(GL_COLOR_BUFFER_BIT) glLoadIdentity() if self.show_checkerboard: glPushMatrix() glScalef(self.window.width/float(self.checkerboard.width), self.window.height/float(self.checkerboard.height), 1.) glMatrixMode(GL_TEXTURE) glPushMatrix() glScalef(self.window.width/float(self.checkerboard.width), self.window.height/float(self.checkerboard.height), 1.) glMatrixMode(GL_MODELVIEW) self.checkerboard.blit(0, 0, 0) glMatrixMode(GL_TEXTURE) glPopMatrix() glMatrixMode(GL_MODELVIEW) glPopMatrix() self.draw_original() self.draw_saved() def draw_original(self): if self.original_texture: self.original_texture.blit( self.window.width / 4 - self.original_texture.width / 2, (self.window.height - self.original_texture.height) / 2, 0) def draw_saved(self): if self.saved_texture: self.saved_texture.blit( self.window.width * 3 / 4 - self.saved_texture.width / 2, (self.window.height - self.saved_texture.height) / 2, 0) def load_texture(self): if self.texture_file: self.texture_file = join(dirname(__file__), self.texture_file) self.original_texture = image.load(self.texture_file).texture file = StringIO() self.original_texture.save(self.texture_file, file, encoder=self.encoder) file.seek(0) self.saved_texture = image.load(self.texture_file, file).texture def create_window(self): width, height = 800, 600 return Window(width, height, visible=False) def test_save(self): self.window = w = self.create_window() w.push_handlers(self) self.screen = image.get_buffer_manager().get_color_buffer() self.checkerboard = image.create(32, 32, image.CheckerImagePattern()) self.load_texture() if self.alpha: glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) w.set_visible() while not (w.has_exit or self.has_exit): w.dispatch_events() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/rgba_32bpp.bmp0000600013464101346420000072774211266427715016111 0ustar yohyohBM6(   NNNNNNNNNMNNNNNNNNNNNMNMMNMMNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNMNNNNMNMMNMNNNMNNNNNNMNMNNNMNNNNNNNNNMMMNNNNMNNMNMNNMNNNMNNNMNNNNMNNNNNNMMNNNNNNNNNNNMMNNMNNNNNNNMNNNNNNNNNNNNNMNNMNNNNNNNNNMNNNNNNNNMNMNNNNNNNNNNNMMMNNNMNMNNNNNNNNNMMMNNNNNNNNNNNNNNNNNNMNNNNNNNNMMMMNMNMMNNMNNMNNMNNNMNMNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNMNNNNMNNMMMNNNNMNNMNNNNMNNNNNNNMNNMMNNNMNNNNNNNMNNNNMMMMNNMNNNNNNMMNNNNMNNNNNNMNNNNNNNNNNNMNNNNMMNNNNNNNNNNNNNNNNNMNNMNNNNMNNNNNNMNNNNNNMNMNNNNMNNNMNNNNMMNNMNNNNNMNNNNNNNNNNNNNNNNNNMNMNNNNNNNMNMNNNNNNNMNMNNNNNNNNMNNMNMNNNNNNMNNNNNNNMNNNMNMNNNMNNNNMNNNNMNMMNNNMNNNNNNNNNMNNNNMNNNNNMMNNNNNNNNNMNNNNNMNNNNNNNNNMNNMMNMNMMMMNNNNNNNNMNNNMNNNNNNNMMNNNNNNMMNNNMNMNNNMNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNMNNNNMMMMNNMMNNNNMNNNNMNNNNNNNNNNNNNNNNNMNNMNNNMNMNMMNNNNMNNMNNNNMNNNNMMNNNNMMNNMMMNNNNNNNNNNMMNMMNMNNNNMMNNNNNNMNMNNMNNNNNMMNNNMNNNMNNNMNNNNMNNNNNNNNNNNNNNMNMMMMMNNNMNNMNNNNNNNNNMNNNNNNNMNMNMMNNMNMNMNNNMNNMMNNNNNNNNNNNNMNNNNNNNNNNNNNNMMNNMNNNNNNNNMNNNNMNNMNNNNNMNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNMNMMNNNNMMNNNNNNNNNNNNNNNNNNNMNMNNMMNNMNNNNMNNNNNMMNNNNNNNNNNNNMNNNNMMNNMNNNNMMNNMNNNNNNNNNNNNNNNMMNNNNMNNNNNNMNNNNNNNMNNNNNMNNNNNNNNNMNMMMNNNNNNNNNMNMNNNMNNMMNMNNMNNNNNNNNNNMNNNNNNNNNNNNNNMNNNNNMNNMNMNNNNNNMNNNNNNNNNNNNNNMNNNNNMNNNMMNNNMNMNNNNMNNNNNMNNNNNNNNMNNMNNNNNNMNNMNNMNMNNNNNNNMNNNNNNNNNNMNNNMNNNMNNNMNNMNNMMNNNNMMNNNNNNMNNNNNMMMNNNNNNNNMMMMNNMNNNNNNNNNNMNNNNMMNNMNNMNNNNNNNNNNNMNNNNNNMMNNMNNNNMNNNNMMNNNNNMMNNNNNNNMMNNNMNNNNNNNNMNNNNMNNNMNMNMNNNNMNMNNMNNNNNMNNNNNNNNNNMNNNMNMNNNNNNNMNNNMNNMNNNNNNNNNNNNNNNNNMNMNNNNNMMNNMNNNMNNMNNNNNNNNNNNNNNMMNNNNNMNNNNNMNNNNNMMNNMNNNNNNNNMNMMNNNNNNNNNNNMNNMNNNNNNNNNNNNNNNNNNNNMNNNNNMNNNNNNMNMMNNNNNNMMNNMNNNNNNNMNNNNNNNNNNNNNMMNNMMNNNMMNNNNNMNNMNNNNNNNNMNNNMNNNMNNNMNMNNNNMMNNNNMNNNMNNMNNNNNNMNMNNMMNMNMNNNMNMNMMNNNNNNNMNMNNNNNNMNNNNNNNMNNNNNMNNMMNNNNNNMNMNNNNNNNNNNNNNMNNNMNNMNNNNNMNNNNNNNNNNMMMNNNNNMNMNMMNNNNNNMMNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNMNNNNNNNNMNNNNNNNNNNNMMNNNNNMNNMNNNMNNNNNNNMNNNNNNMNNMNNMNNNMNNNMNNMNNNNNNNNNNNNNNNMNNMNMNNNMNMNNMNNNNNNMNNNMMNNMNMNNMNNNMNNNNMNNNMNNNNNNNNNNNNNNNNNNNNMNNNMNNNMNNNNNMNNNNNNMNNNNNNNNNNNNNNNMNNNNNNNNMNMNNNNNNMNNNNNNNMNNNMNMNMMNNNMNNNNNNMNMNNNNNNNMNNNNMMMNNNNNNNNNNNNNNNMNNNNNNNMNNMNNNNNNNNNNNNMMNNNNNNNNMNNNNNMNNNNNNNNNNMNNMNMMNMNNNNNNNNNNNMMNNNNNNNNNNNMMNNNNNNNNNNMNNNNNMNNNMNNNMMNNNNNNMNNMNNNNNNNNNNNNNNMMMNNMMNNNMNNNMNNNNNNNMNNNNNNNNNNNNNMNNNNNNMNNNNNNMMNKX/%&X/KNNNGH*%NMNNMMNNGI*%NNNNNNNMy9C(' %<&e3DNNNNNNMNNGI*%MNJg46$!!6$g4KNNMLb2) #J+ENMNNNNMNNNNMNNMNNNNMNNNNNNNNNNMMNMNMMNMNNNNNNNNMNNNMNNNMNNNNMNNNNNMNMNNNNNMNNNNNNNNNNNNNMNNNNNMNNNNNNMNNNMMNNNNMNNNNNNNNNNNNNNNMNMNNNNNNNNNNNU.O,NNNF)MNNNNNNNF)NNNNNMK>'NNNMMNNNNE)NI2#4$IMNS-' GNNMNNMNNNMMMMNNNMNNMNMNNNNNNNMNNNMNNNNNNNMNNMNNNNNNMMNNNNNNNNNNNNNNNNNNNNMMNMNNNMMNNNNNNNNNNNNNNMNNNNNNNNMNNMMNNNNNNNNNNNNNNNNNMNNNNNNNNMNNN#AKb2NNN#DNNNNNMNNNN#DNNNNNNNNd2A(DMJCt8<&NNNMMNMNN#DNMN\0R-JJO,^1NMP,JJO,X/NMNNNMNNNNNNMNMNNNMMMNNNNNMNNMMNNNNNMNNMNMNNMMMMNNNNNNNNNNMNNMMNNNNMNNNNMNNNNNNMNNNNNNMNMMNNNNNNNMNNNNNNNNMNNNMNMNMNNNNNNNNNNNNNNNMMNNNNNMNN&?MLNNMNNNNNMNNNNNNNMNNNNNN/"FNNNNNMNNNNNNNNNNMNN-!FNNG."NNFNNG,!NNNNNNNNMMNNMNNNNNNNNNNMNNMNNNNNNNMNNNNNNNNNNNMNNNNNNNNNNMNNNNNNMNMMNNNNNNMNNNNNNNNNNMNNNNNMNMNNNMNNNNNNMNNMNMMNNNNMNMNNNMNNNNNMNNMNMNMNNNNNNNN_0NNNNMMNNNMNNNNNNNMMMMNN NNNNNNNNNNNNNLNNM NNMMNMMNNNNNNMMNNMNNNNNNNNNMNNNNMNNNNNNMNNNNMNMNNNNMNNMNNNNNNNNNMNMNNNMMNNNNNMMNNNNNNNNNNNNNNMNNNMNNNNNMNNNNMMNNMNNNNNNNNMNNNNNNNNNNNNNNMMNNNNNNNNNNMLr7<&$ NMMNNMNMMNNMNNNNNNGNLNM."&NMNNNNNMNNNNN-!FMNG."NNFNNG,!NNNMMMNNNNNNNNNNNNNNNNMMNNMNNNNNMNNNNMNMNMNNNNNMNNNMMMNMNNNNNNNNNNNNNNNMNMMNNNNNNMNMNNNMNNNMNNNNNMMNMNMNNNNNNNMNNNNNNNNNNNMNNMNNMNNNNNNNMNMNNNNNg4EKLC5$NMNNNMNMNMNNNNNNNNS-K<-"NNa2q7JL<P,NNMNMNNMNNNMM]0Q-JJP,^0NNN,IJP,X/NNNNNMNNNMNNNNNNNNNNNNNNNNMNMNNNNMMNNNNMNNMNNNMNNNNNNNMNNMNNNNNNNNNNNNNNNMNNNNMNNNNNNNNNNNNMNNNNNNMNNNNNNNNNNNMNNNNNNNNNNNMNNNNMMNMMMNNNMNNNMNNNN+y9NMNNNNNNNMT.b2MNJ9%,!GNNNNNNNNNI2#4$INNS-( HNNNNNNNMNNNNNMNNNNMNMNNNNMNMNNMNNNNNNNNNNMNNNMNNNNNMNNNNNNMNNMNNNNNNNNNNNNNNNNMNNNMMNNMMMMNNNNNNNNNNNMNNNNNMNNMMNNNNNNNMNNNNNMNMMNNNNMNNNNNNNMNNo6' C('>NMNNF;NNMMNMMNNNNNNNNMNNNNNNNNNMNNNMNMNNNNT-M+MMG&Q-MMK='NNJ+NNMNMNNNND)MI2#3#HNNNNNMMNME)NMMMNNT.N,NNNMNNNJ*NNS-' FNNT-N+NNNNNNNJ>'NNNNNNNJ7%MNNN_1;&NNMNNNMNMMNMNMNNNNNMNMNMNNNNNMNNNNMN#AK`1MMU.N,JIN,MNa2@'CLKDs7;&NMD)=IMA NNMNNMNNN#DNNM[0O,JIN,\0NNNNNMMNN#DNNMMNMNN#BKa2NMNNNNNE)=IMA NNN,JJN,W.NN#BJa2NNMNNNNc2@(DMJDt7<&NMNNNNN_1<&CMEW.NNNI#( BNNNNMMMNNNMNMNNNNMMNNMNNNNNNMNNMMMN%>LLNM+!FNNFNN-"GNNNNNMNMNNJCp6*!NNMNNNNNNNNNM,!GNNG-"NMNNNNNNNNNNNNNNMN%>LLMMNNNNNNNJCp6*!MNFMMF+!NN%>MLMNNNNNM."GNNNNNNNMNNMNN-"EMMMMMNNl5<S-NNNNNNNMNNNNNNNNNMMMNNNNNNMNNNNNNNN\0NMMNMMNN NMDA(t7MMNNMNNNMNNNMLNMM NNNNNNNMNMNNNMNMNM]0NMMNNNNDA(t8NNMMMLNN]0NNMNNMN NMLNNNNMNNMMMMK* ?'N1# IMNNNNMNNMNMNNNNMNNNNNNNMNNNNNNNMNNMo6:%# NN*!GNNGMM-"%MN6$3#P,m5ENNNNNMNNNMNNNN+!GNNG-"NNNMNNNNNNNMNDNMNNMo6:&# NNFMLMN7%3#P,n6ENNNFNMG,!NMLp6;&# NNENMNN-"%MNFNLMN-"DNNNNNNy9s7Ni4i4NNNNNNNNNNNNMNNNNNNNNNNNNMNNMNNNNNMe2DLLB4$MNT.M+HIL+MN^0o6JL;N+NN CMH~;?'NMNNNMNNMNNMNZ/N,IJM,[0MNMNNNNMMNNNN='EMMNNe3DKLA4$MNQ-K<,!NN CMH~;@'MNL+HJM,V.NNNf3DLLB4$NN>'EMNM_1o6IK;O,NNQ-K;-"NN^1:&CLER-NM2#GMF*!LNNNNNNNMNNNNNNNNNNMNNNMNMNNNNNNJ+w8NNF' Q,NNJ7%+!GNNE)NNNNNNNNNI1#2#INNNNNNNNNN,NNK+w8NNR-`1NNE)MNQ-( GMNNL+x9NMN,NJ8%,!FMNR-`1NNJ6$N=<&NMN>';NNNNMNNNNNNNNNNNNNNNNNNMNNNNNNNk5&@'~;NNNNDG)#( _1LMMNLl5:%# 1#^1INNNJ^13#! 3#[0BNNNNNNNNNNJc35$"!4$e2JMNNMMNNMNNK]0( NMl5' @';MMNL\0%&W.KNNJ^13#! 3#\0CMNL_1( #H*EMMNMl5' A';NMNK^0) NNLm5:&# 1#_1INNNL]0%&W/KNNNKl5:&#!?'=N?'o5MNNw8<&NNNNNNMNNNNNNMNNMNNNNNNMNNNNNMMNNNNNNNNNNMNNNMNNNNNNNNMNNNNMNNMNNMNNNNNMNNNNNNNMMNMNNNMNNMNMNNNMNNNNNNNNNNMMNNNNNMNNNNNNNNMNNNMNNMNNMMNNNNNNNNNMNNNNNNNNMNNNNNMNNNMNNNNMMNNNNNNNNNMNNNNNNNMNMNNMNNMNMNNNNNNNNMNNNMMNNNMMMNMNMNNNNMNNNNNMNNMNMNNNNNNMNNNMNNNNN&@LNNNNNNNNNNMNMNNNNNMNNMNNNNNNNNNNMNMNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNMNNNNMNNMNNNNNMMNMNNNNNNNNNNMMNNNNNNMMMNMNNNNNNNNMNMNNNNNNMMNNNNNNMNMMMNNNMNNNNNNNMNNNNNMNMNNNNNNNNNNNNMMNNMMNNMMMMMNNNNMNNNNMNNNNNNNNNNNNMMNMNNNNU.NMNNNNNNNNNNNNNNNNNMNNNNNNNNMNNNNNNNNNNMNNNNNMMNNNNNNNNNNNNNMNMNNNNNMNNNNNNNMNMMNNNNNNNNMNNNNNNNNNNNNNNNMNNNNMMNNMMNNNNNNMMNNNNNNMNNNNNNNNNNMMMNNNNNMNNMNNNNNNNMNNMNNNNNNNNMNMMNNNNNNNNMNNMNNNNNNNNMNNNNNNNNNNNMMNNNMNMNNNMNK[0+!NMNNMNNNNNNNNMNNNNMNNNNNNMNNMNMNNNMNMNMMNNMNNNMNNNNNNMNMNNMNMMNNNNNMNNNNNNNNNNNNMNNNNNMNNMMNNNNNNNNNNMNMNMNNNNNNNNMMMNMNNNNMNNNMNNNNNNNNNNNMMNNMNNNMMNNMMNNNNNNNNNNNNMNMNNNNNNNNNNNNNMNNNNNNNNNNNMNNMNMNMNMNNNNNNNNNMNNM߼MN߼NN߼NM߼M߻NNN߻N߼N߼M߻NNNNNNNNNNNNNNMNNNNMNNNNMMNNNNNMNMNNNMNNNNNNNNNNNNNNNNNNNMNMNNNMNMNNNNMNNNNNNMNNNNNNNNMNMNNNNNNNNNNMNNNNNNMMMNMNNNNNNMNNMNNNNNMNNNNNNNMNNNNNNMMNMNNNMNNMNNNMNMNNMNMNNNNNNNMNMNNNNNMNNNNNNMNNNNNNNNNNNNNNNNNNNNMNNNNNNNMNNMMMNNݻN޼N޼N޼M޼M޻N޼N޻N޻M޼N޼N޼M޻N޼N޼N޼N޼M߼N޼N޼N߼M߼N޼M߼N޻N޼N޼N޻N߼N߼M߼N߼N߼M߼N߼NN߼N߼M߼N߻MM߼M߼N߼N߼M߼MN߼N߻NN߼NNNNNNN߼MMNNNNNNNMMMMNNNNNNNNNNNNNNMNNNNNNNNNNNNMNMNNNMNNNNNNNNNNNNNNNNNNNMNNNNNNNMNNNMNMNNNNNMNMMNNNMNMNNNNNNMNMNNNNNNMNNNNNNNMNNNNNNNNNMNNNNNNMNMNNNMNMNNMMNMMNMNNNNNNNMMMNNNNMNMNNNMNNMܼNܼNܼMܼNܼNܼNݼNܻNݼNݻNݼNܼNݼNݼNܼNݼNܼNݼNܼMݼNܼNݻNݼNݻMݼNݼNݼNݼNݼM޼NݼN޼NݼN޼N޻N޼NݼNݼNݼNݼNݼN޼N޼N޼N޼N޼N޻N޼M޼N޼M޼N޼N߻N߻N޼N޼N޼N߼N߼N߼N޼N޼N߻N߼M߻N߼N߼N޼M߼N߻N߼N߻N߼N߼N߼N߼N߼N߼NNNNN߼NM߼NM߼N߻NNNMNNM߼NNN߼NNNNNMNNNNNNNNNNMNMNNMNMMNNNNNNNNNNMMNNNMNNNNNNNMNNNNNMMNNNMMNMMMNNNNNNNNMNNNNMNMNMNMNNNNNMNNNMMNMNNNMMNMMNNMMNNNNNNNNMMNNNMNNNNNMNNNMNNNMۻNڼNڼNۼNۼMڼNۼNۼNڼNۼNۼMۻNۼNۼNۼMۼMܼNۼNۼMۼNܻMۻNۻNۼMܼNۼNۼNۼNܼMܻNܼNܼMۼMܻMܼNۼNܼMܻNܼNܼNܼNܼNܼNݼNܼNܼNܼNݼNݼNܼNݻNܼNݼNݼMݼNܼNݼNݼNݻNݼNݼNݻNݼMݼNݼNݼNݻNݼNݻN޼MݼMݼNݼNݼN޼N޻MݼNݼN޻NݼNݼN޻N޼N޼N޼N޻N޼M޻M޼N޼N޼N޻N޼N޼N߼N޼N޼N޼N޼N߼N߼N޼N޼N޼N߼N޼N߻N߻N߼N߼N߼M߼N߼N߼N߼M߼N߼M߼N߻N߼N߼NN߼MMN߼NNMNMNNNNN߻NNN߼NMNNNNNNNNMNNNNNNNNNNNNNNNMNNMNNNNNNNNNNNNNNNNNNNMNNNMMNNNNNNNMMMNNMNNNNNNMNNMMNNNNMNNNNNNNNNNNNMټNٻNټMټNټNټNڼNټNټNټNټNټMٻNټNټNٻMټNڼNڼNڼNڼNڻMٻNڼNڼNڼNڻMڼNڼNڼNڼNڼNڼMڼNڼMڼNڻNۼNۼNۻNۼMۻMۻNۼMڼNۼNۼMۼNۼNڼNۼNۼNۼNۼNܼNۼMۼNۻNۼMۼNܼNۻNܼMܻMܻNۻNܼNۼNۼNܼNܼNܼNܼNܼNܻMܼNܼNܻMܼNܼNܼNݼMܼNܼNܻNܼNܼNݼMݻNܻNݼNݻMݻNݼNܼNܻNܼNݼNݼNݻNݼNݼNݼMݻM޼NݼNݼNݼNݼNݼNݻNݼN޼NݻN޼N޼NݼM޼NݼN޼NݼNݻN޼N޼N޼N޼N޼N޼N޼N޼N޼N޼N޼M޼N޻N߼N޼N߼N޼M߼M߻M߻N߼M޼N޼N߼M߻M߼N߼N߼M߼N߼N߼N߻M߼N߼MN߼M߼M߼N߼N߼NNN߼N߻NNN߼N߼NMNNN߼NNNNNNNNMNMNNNNN>H*' ( D);NMNNNNMNNMMNNNNNMMMMMNNNMNNMNMNNNMMMNN׻NؼNؼN׼N׼N׻NؼN׼N׼NؼM׼MؼN׼MػM׻NؼNػNؼNؼMؼNؼMؼNؼNؼNټNػNؼMػNػNؼNؼNؼMټNػNؼNٻNټMټNټMټNټNټNټNټMټNٻNٻNٻNټNټNټNټNټNڻMټNټNټMټNټNڼNټNڼNڻNڻNڻNڻNڼNڼMڻNڼNڼNڼNڻNۼMۼNۼNڼMڻNڻNڼNڼNۼNۼNۼNڼNڻNۼNۼNۼNڻNڼNۼNۻNۼMۼNۻMۼNۼNܼNۼNۼNۼNۻNܼNܼMۼNܼMܼNۼMܻMۼMܼNۻNܼMܼNܼMܼMܼNܼMܼNܼNܼNܼNܼNݼNܼNܻMݼNܼNܻMݻNݻNܼNݼNܼMݼNݻNݼNݼNݼNݻNݻNݼNݼNݻMݼMݼNݼN޻N޼N޻NݼN޼NݼM޼NݻM޼MݼN޼N޼NݼN޼N޼N޼N޼N޻M޼N޼N޼M޼N޼N޼N޼M޻N޼M߼N߼N߼N޼N߼N޼N߼N߻N߻M޼N߼N߼M߼N߼M߻NN,M߻NNN߼N߼N߼N߻M߻N߼NN߼MNN߻NN߼NN߼MNNMNMNMNNNNMMNMNNNּNռNֻNּNּMֻNּNּNּMּNּM׻N׼NּN׼N׼NּM׻M׼NּN׼NּN׼NּN׻N׼N׼N׼N׼N׻N׼N׼N׼N׻N׻N׼NؼN׼N׼N׼N׼N׼N׼NؼMؼM׼N׼NؼN׼NؼNػN׻NؼNؼNؼNؼNؼNؼNؼMؼNؼNؼMؼNػMؼNؼNؼNټNؼNػNؼNػNټNٻNؼNټNټNټNټNٻMټNټNټNټNٻNټNټNټMڼNڼNټNڻMټNڼNټNڼNڼNڼNڼNٻMټMڼNڼNڼMڼNټNڼMڻNڼNڻNڻNڻMڼNۻNڼMڼNڻMۻMۼNڼNۻMڼNڼNڻNۻNڼNڼNۼMۼNۼMۼNۼNۼNۼMۼNۼNۼNۼNۼNܼNܼNܼNۼMۼMܻNܻMۼNۻNܼNܼNܼNۼNۼNܻMܼNܼNܼMܻMܻNܼNܼMܻNܼMܼNܻMݼMܻNܼNݼNݼNݼNݼMܼNݻMݼMݼNݼNܼNݻMݼNݼNݻNݼNݼNݼNݻNݼM޼N޼M޼NE)?K߷Lߎ@."w8N޼MݼN޼N޼M޼MݼN޻MݼM޻M޻M߼M޼N޼N޼N޼M߼N޼N޻N߼N޼N޼N޼N߼N߼N߼N߻N޼M߼N߼M޼N߼N߻N߼N߻N߻NԼMԼNԼNԼNԼNԻNԼNԼNռNԼNռNռMռMԼNԼNռNռNԼNԼNռMռNջNռMռMջNռMռNռNּNռNռNּNջNռNּNռNּMռNּNּNջNּMּNռNֻNּMּMּNּMּNּNּN׼NֻNּN׼NֻN׼MּN׼N׼NּMֻNּN׼N׼M׻N׼N׼MּM׼N׼N׼N׼N׼N׼N׼N׼M׼NؼN׼N׼M׼N׻NؼN׼MػNؼNؼNؼNػNػNؼNؼNؼMػMؼNػMؼNؼNؼNټNؼMټNؼNؼNػNؼNؼNټNټNػNؼMؼNټNټNټNؼNټNؼNټNٻNټNڻNټNټNټNټNڼNټMټNټNڻNٻNٻNڻNڼNټNڼNټNڼNٻNټNڼMڼMټMڼNڼMڼNڻNڼNڻNڼNڻNڼMۼNڼNڼNڼNۼNڼMۼMۻNڼNڼNڼNۼNڼNڻNۻNۼNۼNۼMۻNۼNۼNۼMۻNܼNۼNۻNۻNۼNۼNܻNۼNۼNܼNܻNۻNܼMܼNۼMܼNܼN܇><&MܼMܻNܻNܼMܼMܻNܻMݼMܼNܼNܼNܼNݼMܼNݼNݼMݼNݼMݼNܼNݼNݼNݼMݼNݼNݻNݻNݼN޻MݻNݻN޼M޼NݻNݼNӼNҼMӼNӼNӼNӼNӼNӼNӼNӼNӼNӼNNӼNӼMԼNӼNӼNNӼMӼNMӼNNԼNԓAS-." 1#]1IּMԻNԼNջNԻNռNԼMռNջNNռNռNջNզG%O,NռNնLx9D))  +!A(e2DݼNջNּM+!G*=NּN8%s7N׼NּN׼NּNs78%MּN׼N׼N׼N׼N׼N׻NעFD)#N׼M׷Lr7?'%$8%^1CNػMؓAS-." 2#^1JڼNػMؼNآFC)#NټMټMؼNټNٻMټNNټMNڻNټNNڼMټNMټNٱKR-$%R-JNڼNڼMڟEF)"' \0I#NڼMۻM۸Kr7?'&$9%_1CNۻNۼNۼMۼNۼMۼMۼNܼNۼNۼMܻNۼMۼNۼNܼMۼNܻNܼNۼNܼNۼMܼNܼNѼMѻNѼNѼNѼNѼNѼNѼNѼNѼNѼNѼNNѼNҼNҼMҼNѻNMҼNҼNMҼNMҼNE)MҼNӼNҼNӼNӼMӼMӼNӼMNӼNԻNӺM>'."JջMӠE3#NռNԻNq6Nu88%NռNռNռNջN8%v8NջNռNռMռNռNռNּN@(NְJ9%NּNF)NּN׼N@(N׼N׻N׻N׼N׼N׼NN׻NN׻N׼MNؼMػMNؼNO,J*NټNإF' N,NټNٰJ:&NڼNټNټNڼNڻNڻNڻNڼNڼNٻNڻNڻNټNڼNڼMڼNڼNڼNڼMڻNڼNۼNڼMϼNмNϼNмNϼNϼMϼMмNϻMмNлMмNNмNлNмNлNѼNNѼNмNNѼMNѼN@'ۻM̻MͼN̼Nw9e2Nd3w9NͼNͼNͼNͼNͼNμNͻMͼNλNNμNμNͼNY/i4JѵK{:I*NμN BٹMЧGy8<&MϼNϻNMϻMλNϼMϼNϼNϼNϼNϼNϼNNϼNN,J~;L+I~;+!NмNмN`1CطLѷLѓA2#MѻMQ-F)HԫIE)NѼNY/j4JԵJ|:I*NҼMҼNҼNһNҼMҼNҼNһNҼNҼNҼNѼNһNҼNҼNҼNҼNһNҼNӼNҼNҼNҼNȼMȻNǻNǼMȻNȼNȼNȼNȻNȼNȼNȼNNȼMȻNȼNȻNɻNL+Y/NɼNNɼN@(NɼMɼNɻNɼNɼMʻNʻNʼNNɼNɼNʯJ( NʼN2#AզUӻNʻNʼN˱JI{;t=tq{L̼MN˺Mx94$N˼M˼N˼N˴J$*!K+!%KͻN̼M̼N˼N̼N̼N̼N̼M˼NN̮J4$) EӼNͼNA(NͻNMͻMͻNͼNλMμNͻNMμNK+l5*!^0NϻNϻNG)r7NϼNϤF&M+NϼMϯJ4$) EֻNϻNмNмNмNмMмNмNмNмNмNмNмMѼNмNлNмNѼNѼNмNѼMмNѼNѼNżNƼNƻNƼNƻNƼMƼNƻNƼNƻNƼNƻNNǼMƼNǼNǻNǼNKV.$$P,KɼNǼNNǼNǮIX/0"  0"U.@ԼMȼMȼNǼNȼNȼNǻNȻNȼNNȼNȼNɱJNȼN_1G*PиMʼNɼNȻMɉX:p8nE]޹MNɼMɴK MɼNɻMɹM˱NV.L-X/NʼNʻNʼNʼNʼNʻNʼNʼNʻNN˼N˵Kg36$# ."Y/HϼN˼N˼NˮIY/0"  0"V.AּN˻NN̼N˻N̻N̼N̻N˻NN̼NLQ-") l5N͡E@' ( Y/KμNͼNͼNf3%<&z9߼MμNμNμNΞDD)"' Z/LNμNͼNεKg46%# ."Y/HӼMλNμNμNμNϼMμNμNμMμNμMμNϼNϼNϼNϻNϼNϼNϼNϼNϼNϼNϼNϼNϼMĻNżMļNļNĻNļMżNļNżNļNżNżMMżNżNżNżNżMNżMŻNƼNżNżNżMƼNƻNƼMƼMƼNŻNƼNƼNżNƼNƼNƼNƼNƼNƼNƼNƼNǼMƻMƼNƼNƼNǼNNƼNƪHU.0"MǼNǭI) F)BֵLɳKɛDh4#66j9qJRNȹMv8) MDzKˡPҭPμMȜDDҼNȻNȼNȼMȼNȼNȼNɼNɼNȼMȼNNȼNɻMɼMɼNɻNɼNɼMʼNɼNʼNʼMɼNɻMʼNɼMɻNʼNɻNʼNɼMɻNʼNʼNʻNʻNʼMN˼N˻NʼNʻNʼNʼNʼNʻN˼NʻMʼN˼N˼N˼NʼN˻N˼N˼N˼MʼM˼N˼N˼N˼N˼N˼N˼N˼N˼N˼N̼M˻N˻N̻N̻M˼N˼N˼N̻N̼N̼N˼N̼N̼N̼N̼N̼M˼N˻N̼N̼N̼NͼNͻNͼM̻NͼN̻MͼMͼN̼NͼNͼNͼNͼNͼNͻNͼNͻMͼNͼNͼNͼNͼNͼNͼMͼMͼNͼNͼNͻNͼNμMͼNͻNͼMͼMμNûM¼NûNüNüNüNüMûNNüNNļMüMüMüNļNļMļNNĻNĻNĻNżNļNļNļNżNżNļNŻMĻNżNżNļNļMżMżNv8ۼNżNŻNŚC."8k8o;uZ`1NƵLȪOβN˼NƼM;&<&NǻMǼNǻNǻNǼNǼMƼNǼNǼNǼNǼNNǻNǼNȼNǼNǼNǼNȼNȼNȼNǼNȼNȼNȼNȼNȼNȼNȼNȻMȼNȼNɼNȼNȼNȻNɼNȼNNɻNɻMȻMȼMȼMɼNɻNɼNɼNMɼNɻNɼNɼNɼNɼMɼNɻNʼNʻMɼNɼNʼNɼNɻMʼNʼNɼMʼNʼNʼNʼNʻNʼNʼNʼNʼNʻMʼMʼNʼNʼN˼NʻN˼NʼNʼN˼NʼN˼N˻M˼N˼N˼N˻N˼N˼M˼N˼N˻N˼M˻N˼M˼N˼M˻N˼N˼M˼N˼N̼N˼N˼N̼M˼N̼N̼N˼N˼M˼N̼N˼N̼N̼N̼NNMNNNNNNNNN¼N¼N¼M¼N¼N¼N¼NN¼MüM¼MûN¼NüN¼NûNüNüN¼NûNüNüNûNüMüMļM( B(<ռNûNüNļMļNóKm5>'& "/"H*`DzjS?t:q$8%m5޹MŻNżNĻMĶNǼNĻNx9y9ڼNżNżNżNżMżMƼNżNżNƼNƼNŻMNżMżNƻNƼNżMƻNƼNƼNƼNƼNƼNƼNƼNǼNǼMǼNƻNƼNƼNƼNǼNǼNƼNǻNƼMǼNNǼNǼNǼMǼNǻNǼNǻNǼNǻNNǼNǼNǼNȻNǼMȼMǼMȼNǼMȼNǼNǼNȼNȼNȻNȼMȼNȼNȻNȼNȻNɼMɼNȼNɼNȼNɼMɻNɼNȼNȼNɻNȼNȼNɻNɼNɼNɼNɼMɼMɼNɼNɻNɼNɻMʻNɻNʼNʼMɼNɼNɼNɼNʼNʻNɼMɼNʼNʻNɼNʼNɼNɼNʼNʼNʼNʼMʼNʼNʼNʼMʻMʼNʼNʼNNNNNNNNNNNNMNNNNNNNNNNNMMNNNNNMNNNNMN¼NMM¼N¼NM»NN¼N»N¼NN»N¼N¼N¼MNN¼M»N¼M»N¼N¼N¼N¼N¼N¼NªNʲKżM÷L÷MżNüN³KƇ^QrPǼN»N¼N¼NüNüMüNüMûNõMżNüNļNüMüMûNüNļNûNļNĻNĻNüNüNüNļNļNüMļMļNļNļNļNĻMļNļNļNżMĻNļNļNļNļNĻNļNżNżNļNļNżNļMżNĻNżNĻNżMżNżMŻNżMżNżMżMƼNżNƼNƼMżNżNƻNŻNżNƼNNƼNƼNƼNżNƼMƻNƻNƼNƻNƼNƼNƼNƼNƼNƼNƼNǻNǼNǻNǼNƻMǼNǼNǼNǼNǻMƻNǼNǻNǻNǼMǻMȼNȼNǼNȼNǼNǼNǼNǼNȼNȻNȼNȼNǼNǼMȼNȼNȻNȼNȼNȻNǼNȼNȼMȼNȼMȼNȼNȼMȼNɼMȼNȻNȼNȼNȼNɼNɼNȼNɼNȼNɼNȼNɼNサNᄐNᄐNサNᄏNᄏNᄐNᄐMᄐNNᄐNᄐNᄐMᄐMᄐNNMNNᄏMNᄏNMMNNNNMNNNNMNNMMNNNMMNNNNNNNMMNNMMNNNNNMNNNNNNMNMJ V͸MNNMNNMŖPɼNNNNNM»MM¼NLúMM¼N¼MMN»M»N¼M¼N¼NN¼N¼N¼N»M¼N¼N¼NüM¼N¼M»N¼N¼NüN¼M¼NüNûM¼NüNüNüNüNüNüNüNüNüMļNļMüNļNüMüNûNüNüNĻMļNüNļNļMüNüNļNļNļNüNĻNļMüNļNļNŻNļNżNļNļMļNżNĻNļNżMļNżNżNżNļNļNļNŻNļNŻNļNżMżNżNŻNżMżNżNƻNżNżNŻNżMżNŻNŻMƼMżNƼNƼNƼNżNƼMƼNƼNƼNƻNƻNƻNƼMƻNƼNƼMƼNƼMƼNǼNƼNǼNƼNƻNǼMǼNƻNƼMǼNǼNǼNǼNƼNǼNǼNǼNǼNǻMȻNǼNǼMシN\N[N\NシN\M\NシNシNシN[NシNサNシNシNシNシN\NサNシMシNシNシNシNシNシNᄐNシNᄏNシNシNᄐNシMシNシNシNᄏNᄏNᄐNᄐNシNᄐNᄐNᄏNᄐNᄐNᄏNᄏNᄐNᄐNMᄐNNᄐNᄏNᄐNNMNᄏMNNᄐNMNNNNMMNMZ˻NMNNNNNMOżNNNNNNNJŮLŰMļNMMNNMNNNNNNNNNNNNMNNNNNNNNNNN¼NMNNNNNNNNN¼NN¼MN¼MN¼M¼N¼N¼N»N¼N»M»N»N¼N»N¼N»N¼NüN¼MûN¼N¼MüNûM¼MüMüNüNûN¼NûM¼NüNüNüNüNüNüNüNüNüNüNļMļMļNüNûNļNļNļMļNĻNüNļNĻNļNļNļMļNļNļNļNļNļMĻNĻNļMļMļNĻMļNļNĻMļNżNļNļNļNżNĻNļNżNżMŻNżNŻNżNżNżNżNżMżNżMƼNƻNŻNżNżNżNﻼNﻼNﻼNﺼMﺼNﻼMﻼNﻼNﻼNﻼNﻻNﻻNﻼN\MﻻNﻼNﻼMﻼN\MﻼM\NﻼN\N[N\NﻼN\N\N\N[N\N\N\NﻼN\N\N[N\MサM[M\N\N[N\N\N\N\N\NシM\M\NシN[NシM[N\NシNシNシNシNᄐMサNシNサNシNシMシNシNᄐNシMシNᄐNᆱPŸL꿼NシNサNシNᄐNᄐNᄏMKL꿺M쿼NᄐNᄏNᄏNᄏMdѴKMNMᄐNNᄎMM쿻MNᄏNNMNᄐNNNNᄐNMNMNNNNMNMNNNNNMNNNNNNMNNMMNMNMNNNNNNNNNNNNNNNNNNNNNNNNM¼NNM¼NNN¼N¼MN¼N¼NM¼N¼N¼NN¼NN¼M»N¼N¼N¼N»NüN¼N»N¼M¼NüN¼NüN¼N»NüN¼N¼N¼N¼N»MüMüMûNûNûMûNûNüMûNüNĻNļMļMļNļNļNüNüNüNüMļMüNļMüNĻMĻNļNļNĻNĻNﹼMﹼNﺻNﺼNﺼNﺻNﹻNﹼMﺼNﹻNﹼNﺼMﺼNﹼNﺼNﹼNﹼNﺼMﺼNﺼNﺼMﺻNﺼNﺼNﺼNﺻMﻼNﺼNﻼNﺼNﺻNﺼMﺼNﻼNﺻNﻻMﻼMﻼNﺼNﺼMﻼNﻻNﺼNﺼNﻼNﻻMﻼNﻼMﻼNﻼNﻼNﻻMﻼNﻻN\NﻼNﻼNﻻNﻼN\NﻼN[NﻼNﻼN[NﻻNﻼN\N[M\N\N\NTJ徫PüM\M[N\N\NXK꾧HŠSԆaیWժKüN\N\N\MィXƳLM㿼NシNシMサMIQӗRθL꾼NシNᄐNシNシNᄏMシNシNᄐNシNシNᄐMᄏMᄏMᄏNシNᄐNシNᄐNᄐNシNᄐNᄐNᄐNᄐNᄐNᄏNᄐNᄐNᄐNᄐMᄐNᄏNᄏNᄐNMᄐNMNNNᄐNNᄐMNNᄐNᄐNMMNNMNNMNNMMMNMNNMMNNNNMMNMNNMNNMMNNNNMNNNNNNNNMMNNMNMNNNNMNM»NN¼N¼NN¼N¼N¼N»N¼N¼N¼N¼N¼N¼N¼M¼N¼N¼N¼N¼N¼N¼NûN¼N»N﷼N﷼N︼N﷼M︼M︼NﷻN︼N︻N︼M︻N﷼N︼N︼M︼M︼N︻N︼N︼NﹼN︼M︼N︻N︼N︻NﹼNﹼMﹻN︻NﹼN︼MﹼNﹼNﹻM︼NﹼNﹼNﹼNﹼNﹻNﹻNﹼMﹼNﹼMﺻNﹼNﹼNﺼNﹼNﹼNﹻNﹼNﹼNﺼNﺻNﹼNﺼNﹻNﺼNﺼMﺼNﺻNﺼNﺻNﺼNﺻNﺼNﺼNﺻNﺼNﺼNﺼNﺼNﺩRüNﻼNﺼNﺼNﺷL軅WoyӦzԧyҦL轼MﺼNﻼNﻼNﻼNﻳM⿼NﻻNﻹM켭IܿenGk[ʻNﻼN\NﻼN\M\N\N\M\NﻻN\N\M\M\M\N\N\N\N\N\N\NサM\NサM\NシMシNシNシNシN\N\NシNシNシNサNサNシMシNシNシNシMシNᄐNサMシNシNシNシNシMᄏNᄏNシNシNᄐNシNᄐNᄐNシNᄐNᄐNᄐNᄏNシNシNᄏNMᄏNᄐNᄐNᄐMᄏNᄐNᄐNᄐNNᄐNNᄐMᄐMNNNNNNMNNMNNNNNNNNNNNNNMNMNNNNNNMNNNNMNMNMMNNNNMNNNMNNNﵼNﶼNﶻNﶼNﶼNﶼNﶻNﶻN﷼NﶼN﷼M﷼NﶼNﶼNﶼNﶼN﷼N﷼N﷼NﶼNﷻN﷼N﷼N﷼M﷼N﷼N﷼N﷼N﷼N﷼N﷼N﷼N﷼N﷼N﷼NﷻN﷼N﷼N︼N﷼N﷼N﷼N﷼N︼N﷼N︻N︼N︻N︻N︼N︼N︼N︼M︼N︻N︻M︼M︼M︻NﹼM︼N︼M︼MﹼMﹼNﹼN︼NﹼN︼N︻NﹼNﹼNﹼN﹫QM뺼NﹼNﹻM﹘JuТsѢwӥwӥxӥNûLNﹼNﹼNﹼNﹲK⼷L軼NﺬHۿ^z7l=vOZɼNﹼNﺻMﺼNﺼNﺼNﺼNﺻMﺼNﺼNﻼNﺼNﺼMﺼMﻻNﺼNﺼNﺼNﻼNﻼNﻼNﺼNﻻNﻼNﻻNﻼNﻼNﻼNﻼNﻻNﻼN\NﻼNﻼNﻼN[NﻻN\M\MﻻNﻼNﻼNﻼN\N\MﻼN\N\N\M[M[N\N\N\N\N\N\N\N[NシN\N\N\MシNシNシM\M\NシN\N\N\N\NシNシNシNサNシNシNシNサNシNシNシNシNシNシNシMシNシNᄐNサNシNシNシNᄐNシNᄐNᄐNᄐMᄐNシNᄐMᄐNᄐNᄐNᄐNᄐNᄐMᄏMNᄐNᄐNᄐNNNNNNNᄐNNNMNNNNMNNNNNNﵼNﴻNﵻNﵼMﵼMﴼNﵼNﵼNﵼMﵼNﴻNﵻNﵼMﵼNﵻNﵼNﴼNﴼMﵼMﵼNﵼNﶼNﵼMﵼNﵼMﵼMﵼNﶻNﵻNﶻNﶼNﶼNﶼNﵼNﶼNﶼMﶼMﶼNﵼNﵼNﵼMﶻNﶼMﶻMﶼMﶼNﶼMﶼNﶼNﶻN﷼NﶻNﶻNﶼN﷼NﶼNﷻNﶼN﷼NﷻNﶼM﷼N﷼N﷼N﷼M﷼N﷼N﷼N﷼M﷼M﷼N﷼NﷻNﷳK亮NݽN﷼N﷼M﷙Pr͡qѠtңpРwӥxϧIۼM칼N︼N︼N︬NܾM庴L廙NCvI>w>s]ϼN︼M︼M︼N︼NﹼN︼N︻N︼N︼M︻MﹻN︼NﹻN︼NﹼMﹼNﹼNﹻMﹼNﹼNﹼNﹼMﹼNﹼMﹼMﹼNﹼNﹼNﹼNﺼNﺻNﺼNﹼMﺼNﺼMﺻNﹼNﹼMﺼNﺻMﹻNﺼNﺼNﺼNﺼNﺻNﺼNﺼNﺼNﺼMﺼMﻼMﺼNﺼNﺻNﺼNﺼNﻼMﻼNﻼNﺼNﻼMﻼNﻻMﻻNﻻNﻻNﺼMﻼMﻼNﻻNﻻNﻻN\MﻼMﻼNﻼNﻻN\NﻼNﻻN[MﻼNﻼN\N[MﻻNﻼNﻼNﻻN\N\N\N\N\N\N\N[NシN\N\M\N\M\N[N\NシN\NシN\N\NサNシM\NサNシNシNシNシNシNシNシNシNシMシNシNᄐNᄐNシNシNᄐNᄐNᄐMシMﳼNﳼNﳻNﳼNﲻNﳼNﳼNﳼMﳻNﳼNﳼMﳼMﳼNﳻMﳼNﴼMﳻNﳼNﳻNﳼNﳼNﴼNﴼNﴼNﴼNﴼNﴼMﴼNﴼNﴼNﴼNﴼNﴼNﴼMﴼNﴻNﴼNﴼNﴼMﴼMﴼNﴼNﵼNﵼNﴼNﴼMﵼNﵼNﴼNﴼNﴼNﵼMﵼNﵼNﵻNﵼNﵼNﵻNﵼNﵼNﵻNﶼNﵼNﵼNﶼNﵻNﵼNﶼMﶼNﵼNﵻNﵼNﵼMﵼNﵩQ׿NﶻNﶼNﶵJ|rѢlϝtңkϜhΚo͟tR˲J⹸K긲L⹸M뷼MﷻNﶸLNjq-Z7k=ttnּN﷼MﶼN﷼NﷻN﷼N﷼N﷼M﷼N﷼MﷻN﷼N﷼N﷼N﷼N﷼N︻N︼N﷼N﷼N︼N︼N︼N︻N﷼N︼N︼M﷼M︼N︼N︻N︼N︼N︻M︼N︼N︼NﹻN︼N︼N︼M︻N︼N︼N︻NﹼN︼NﹼNﹼN︼N︼NﹼNﹼMﹼNﹼNﹻNﹼNﹻNﹼMﹼNﹻNﹼNﹼMﹼNﺼNﺼMﺼNﹼNﺼNﹻNﹼNﹼNﺼMﺻNﹻNﺼMﹼNﺼNﺼNﺼMﺻMﹼMﺼNﺼNﺼMﺼNﺼNﺼNﺻNﺻNﺻNﺻNﺼNﻼNﺼNﻼNﻼNﺼMﻼNﻼMﻻMﺼNﻼNﺼNﻼMﻼMﻼNﻼMﺼNﻼNﻼM\NﻼN[N\NﻼNﻻN\M\M\N\NﻼNﻼM\NﻼN\N\N\NﻻN\N\MﻼN\N\N\NﱼMﱼMﱼMﲼNﱻNﱼNﱼNﲼNﱼNﱼNﱼNﲼMﱼNﱼNﲻNﱻNﱼNﲼNﲼNﱼNﲼNﲼNﲼMﲼNﲼNﳼNﳼNﲻNﲻNﲻMﲼMﳼNﳼNﳼMﳻNﲻNﲼNﳼNﳻNﲼMﲼNﲼNﲼNﳼNﳼMﳼMﳼNﳼNﳼNﳼNﳼNﳻMﳻMﴼNﳼNﳼNﳼNﳼNﳼMﴼNﴼNﳻNﴼNﴼNﴼNﳼNﴼNﳼMﳻMﴼNﴼNﴼNﴼNﴼMﴩRֽNﵼNﴼNﴼNﴗRq͡hΚhΚiΛlϜlϝqѠpˠw[үJ޹M쵹M춻MMU3s[3]O~ZƼNﵼNﵼNﵼNﶻNﵼNﶼMﶼMﵼNﶼNﵻMﶼNﵼNﵼNﶻNﶼNﵼMﶻNﶼNﶼNﵼNﶻNﶼNﶻNﶻNﶼMﶻNﶼNﶼN﷼NﶻNﶻNﶼNﶻNﶼNﶻNﶼN﷼NﶼM﷼N﷼N﷼N﷼N﷼N﷼NﶻM﷼N﷼N﷼M﷼NﷻMﷻN﷼N﷼NﷻN﷼N︻M︼N﷼N︼N︼N︻M︻M﷼M︼N﷼M﷼N︼N︻NﷻN︼N︻N︼N︼M︼N︻N︼M︼N︼MﹼNﹻN︼N︻NﹼNﹼN︼NﹻNﹼMﹼMﹻMﹻNﹼNﹼNﹼM︼MﹼNﹻNﹼNﹼNﹼNﹼNﹼNﺼMﹼNﹼNﺼNﹼNﹼNﹼMﺼNﹼMﺼNﺼNﹼNﹻNﹼNﺼNﺼNﺼNﺼNﺼNﺻNﺻNﺼNﺻNﺼMﺼNﺼMﺼNﺼNﺻNﺼNﺼMﺼNﺼNﯼNﯼNﰻNﯼNﰼNﯼMﯻMﰼNﰼNﰼNﰼNﰼNﰼNﰼMﰼMﰼNﰼNﰼNﱼNﱻMﱻMﰼNﰼNﱼNﰻNﱼNﰼMﱼNﱼNﱼNﱼMﰼNﱻNﱼNﱼNﱻNﱼMﱼMﱼNﱼNﱼNﱼMﱼNﲼNﱼNﱼMﱻNﱻMﱻNﱼNﲼNﱻMﲼNﲼMﲼNﲼNﱼNﲻNﲼMﲼMﲻNﱼNﲼNﲼNﲼMﲻNﲼMﲼNﲼMﲼNﳼNﳼMﲼNﳼNﲫPغL쳼NﲼNﲼNﲵJlg͙e͘g͙iΚmϞiΚnОwӤ{ШGKɕNŹM촺M촔Xng՝WL뵻NﳼNﴼNﴼNﴼNﴼNﳼMﳼNﴼNﴼNﴻNﴼNﴻNﴼNﴼNﴼMﴼNﴼNﴼMﴼNﴼNﴼMﴼMﴻNﵼNﵼMﴼNﵼNﴼNﵼNﴼMﵼNﵼNﵼNﵼMﵼNﵼNﵼNﵻNﵼMﵻNﵼNﵼNﵼNﵼNﵼMﵼNﵼNﵼNﶼNﵼNﵻMﵼMﵼNﶼNﶻNﶼNﶻNﶼNﵼNﶼNﶼNﶼNﶼNﶼNﶼNﶼNﶼNﶼN﷼NﶼNﶼNﶼNﶼMﶼNﶼNﶻN﷼N﷼M﷼N﷼N﷼N﷼MﶼN﷼N﷼N﷼NﷻN﷼N﷼M﷼N﷼N﷼M﷼N﷼NﷻN﷼N﷼N﷼N︻N︼N︼N︻N︼M︻N﷼NﷻN﷼NﷻN︼N︼N﷼N︼N﷼N︼M︼M︼N︼N︼NﹼN︼N︻NﹼM︼NﹻMﹼN︻MﹼNﹼNﹻNﹼNﹼNﹼNﹼN︼N﮼N﮻N﮼M﮼M﮼N﮼N﮼M﮻N﮼NﯼN﮼N﮼NﯻN﮼N﮼NﯼNﯼMﯼNﯼN﮼NﯼNﯼNﯼNﯻMﯼM﮻NﯼNﯼNﯼNﯼNﯼNﯼMﰼNﯼNﯼNﯻNﯻNﯼNﰻNﰼNﯼMﰻNﯼNﰼNﯼNﯼNﰼNﰼNﯻNﰼNﰻNﰼNﰻNﰻNﰻMﰼNﰼMﰼMﱼNﰼNﰼNﰻNﰼNﰻNﰼMﱼMﰼNﱼNﱼNﱼNﱼNﰻNﱻNﱼNﱭK۷LٸNﱼNﱼMﱴKvi͛iΛhΚiΛlϝnОmϞpПyЦƮr#dDC[gMٹMﲼNﲻMNﲼMﲼNﲼMﲼMﲼMﲼNﲼNﲻMﲼNﲼNﲼNﲼNﳼNﲼNﲻNﳼNﲼNﲼNﲼNﳼMﳼNﳼNﳼNﲼMﳼNﳼNﳼMﳻNﳼNﳼNﳼNﳼMﳼMﳼNﳻNﳼNﳼNﴼNﴼNﳻNﴼNﴻNﳼNﴼNﴼNﳼNﳼNﴻNﳻMﴼNﴼMﴼNﴻNﴼNﴼMﴼNﴼNﴼNﴼNﵼNﵼNﴻNﵼNﴻNﵼNﵼNﴼNﵼMﴼMﴼNﴼNﵼNﵻNﵼNﵻNﴼNﵼNﵻMﵻNﵼNﵻNﵻNﵼNﵼNﶻMﵼNﵼMﶻNﵼNﵼNﵼMﵼNﵼNﵼNﶼNﶼNﶼNﶼNﶼNﶼNﶼNﶼNﶼNﶼNﶼNﶼNﶼNﶼNﶼMﶼMﶼMﶻN﷼NﷻNﶼNﶼNﶻNﷻMﶼN﷼MﶼMﷻN﷼N﷼NﶼNﶼN﷼NﷻNﷻNﷻN﷼N﷼N﷼NﷻN﷼M﷼NﭼMכּMﭼNלּMﭻMﭼNלּMﭼNכּNﭼNﭻNﭼNכּMﭼNﭻNﭼNﭻMﭼNﭼMﭼN﮻NﭻNﭼNﭼNﭼMﭼN﮼N﮼NﭼNﭼN﮻NﭼN﮼M﮼N﮼M﮼N﮼NﭼN﮼M﮼M﮼M﮻N﮻N﮻N﮼NﯼN﮻N﮼NﯼN﮼N﮻NﯼN﮻M﮼N﮼NﯻN﮼NﯼMﯼNﯼNﯻM﮼NﯼN﮼NﯼNﯼNﯼMﯼNﯼNﯼNﰼNﯼNﯼMﯼNﯲK㲕Y´K岴L岲L⳪O׷YM}=qE|L†YđelŞv񄤶ޓ}͈dBqSN¿M챻NﰻMﱼNﰼNﰻNﰼNﱼNﱼNﰼMﰼNﰼNﰼNﰻNﱼNﰼNﱼMﱼMﱼNﱼNﱻNﰼNﱼMﱼMﱼNﱻNﱼNﱼMﱼNﱼNﱼNﱼNﱼNﱼNﱻMﲼMﲼNﲼNﲼMﱼNﲼNﲼNﲼNﱼNﲼNﲼNﲼNﲼNﲼNﲼNﲻNﲻMﲼMﲼNﲼNﲼNﲻNﲼNﳼNﳼNﳻNﲻNﳼMﳼNﳻNﳼNﳼNﳼNﳼNﳼNﳼNﳼMﳼNﳼNﳼNﳼNﳼNﳼNﳼNﳼNﳼNﴼMﳻNﳼNﴼNﳼMﳼMﳻNﴼNﳼMﴼNﴼNﳼNﴼNﴼNﴻNﳼNﴼNﴼNﴼNﴼNﵻNﴻMﴼNﴼMﵻMﴼNﴻNﴼNﵼNﴻNﵼNﵼNﴼNﵼMﴼMﵻNﴻNﵼNﵼNﵼNﵼNﵼNﵻNﵼNﵼNﵼNﵼNﵼNﶼNﵼNﵼNﶼNﵼNﶼNﶼNﶼMﶻMﶼNﶼN﫼N﫼N﫼M謁N﫻N﫼N﫼N﫼N﫼M﫼N﫼N﫻M﫼N﫻N﫼N﫻M﫻M﫼N﫼M﫻MלּN﫼NלּN﫻NלּNלּNכּNלּNלּNלּNכּNלּMלּNלּNלּNלּMלּNכּNלּMﭻMלּNכּMכּNלּNﭼMﭼNﭼNﭼNﭼNכּNﭼNלּNﭼNﭼNﭼNﭼMﭼNﭻNﭼMﭼMﭼNﭼMﭼNﭼNﭼNﭼM﮼M﮼NﭼNﭼNﭼNﭼNﭼN﮻NﭺMWϼN﮼NﭼN﮻N﮼NﮩJֵ^^|&pK&rL.yWbxpьmȳN䲼N﮹Mjf3dRLþM찼NﯼNﯼNﯼN﮻N﮼NﯼMﯼNﯻNﯻNﯼNﯼNﯼNﯻNﯻMﰼNﰻNﯼNﯼNﰼNﰼNﰼNﯼNﰼNﯻNﰼNﯼMﰼMﰻMﰼNﯼNﰼNﰼMﰼNﰼMﰼMﰼNﰼNﰼNﰼNﰼNﰼNﰼNﱼNﰼNﰼNﰼNﰼNﱼNﰼNﰼNﱻNﰼNﱼNﰻNﱼNﱼNﱼNﱼNﱼNﱼNﱼNﱼNﱼMﱻMﱼNﱼMﲻNﱼNﲻNﱼNﲼMﱼNﱼNﲻMﲼMﲼMﲼNﱼNﱼNﱼMﲼNﱻNﲻNﲼNﲼMﲼMﲼNﲼNﲼNﲼMﳼNﲼNﲼNﲼMﲻNﲼMﳼNﲼNﲼNﳼNﳼNﳼMﲼNﳻNﳼNﳻNﳻMﳻNﳼNﳼNﳼNﳼNﳼMﳼMﳼNﳻNﴼNﳼMﳼMﳻNﴼNﳼNﳼNﳼMﳼNﳻNﴼMﳼNﴼMﴻNﴻNﴼNﴼNﴼNﴻNﴼMﵻN塚M謁N謁N塚N嗢N塚N塚M塚N塚N謁N謁N塚N塚N謁N謁N嗢N謁N謁N謁N謁N謁N謁N謁M謁N謁N謁N謁N謁N請N請M謁N請N謁N謁N謁M謁N﫼N謁N﫼M﫼M﫻N﫼M﫼N﫼N﫻N﫼M﫼N﫻N﫻N﫻N﫼N﫼N﫼N﫻N﫼N﫼N﫼M﫼N﫼M﫼NלּN﫼NלּNלּMכּN﫼NלּN﫻NלּNלּNלּMכּNלּNלּNלּNﬦTӷNלּNלּNלּNלּMﭺMQ0_4e5iOOʹMﭼNﭼNﭼNﭏM1a;sYOԶNﭻNﭼNﭼMﭼNﭻNﭼNﭼNﭼMﭼNﭼNﭼMﭼNﭻNﭼN﮼N﮻N﮼M﮼MﭻN﮻NﭻN﮻N﮼N﮼M﮼N﮼N﮼N﮼N﮻M﮻N﮼N﮼NﯼN﮼NﯻN﮼N﮼NﯼN﮼NﯼNﯻM﮼NﯼNﯼMﯻM﮼NﯼNﯼNﯼNﯻNﯼNﯻNﯼNﰼNﯼNﯼNﯻMﯼMﰼMﰼNﯻNﰼNﰼNﰻMﰼNﰻNﯻNﰼNﰼNﰼNﯼNﰼNﯼNﰼNﰼNﰼMﰼNﰼNﱼNﱼNﰻMﰼNﰼMﰼNﱻMﱼNﱼNﰼMﰼNﱼNﱼNﱼNﰼNﱼNﰼNﱼNﱼNﱻMﱼMﱻNﱼNﱼNﲼNﱼNﲼNﱼNﱼNﱼNﱻNﲼNﱼNﱼNﲼMﱻNﱼNﲼNﲼNﱻNﱻNﲻNﲼNﲼNﲼNﲻNﲻMﲻNﲼNﲻMﲼNﲻNﲼNﲼMﳼNﲼNﲻMﳻNﲼN炙N炙N炙N屮N屮N屮M屮N屮M識N屮M層M屮N層N屮N層N屮N層N屮N屮N層M屮N屮N層N層N塚N屮N塚N塚N屮N屮N塚N屮N塚N塚N嗢N塚N塚N塚N嗢N塚N嗢N塚N謁N塚M塚M塚N塚N塚N謁N塚N塚N謁N塚N塚N請N塚N塚N謁N謁N謁N謁N謁N謁N謁N請N謁N請N謁N﫼N﫼N﫼M謁N﫼N謁N謁N直SյM謁M謁N﫼M﫼N視LokJIÅESS͹N﫼N﫼N﫼N﫪Iر;hKn֮RݳN﫻NלּM﫼MלּNלּM﫼NלּN﫼MכּNלּMלּN﫼NלּNלּNלּNלּMלּNלּMכּNלּNﭼNלּNכּNﭻNﭼNﭼNלּNלּNלּMלּNﭼMﭼNﭻMﭼNﭼNﭼNﭼNﭼNﭻNﭼNﭼNﭼNﭼNﭼNﭼN﮼N﮼NﭼMﭼN﮼MﭼM﮼N﮼NﭼN﮼MﭼN﮼N﮼M﮼MﭼNﭼMﭼN﮼N﮼M﮼N﮻NﯼM﮼M﮼N﮻N﮻N﮼N﮻NﯼMﯼN﮼N﮻N﮼MﯻNﯼN﮼NﯼN﮼NﯻMﯼMﯼNﯻNﯼMﯼMﯼNﯼMﯻNﰻNﯼNﯼNﯼNﯼMﯼNﯼNﰼNﯼNﰻNﰼNﰼNﯼNﰼNﯼNﰼNﯼNﯼNﰼNﯼNﰼNﰻNﰼNﰼNﰼNﰼNﰼNﰻNﰻNﰼNﰼMﱼNﰼNﰼMﰼNﰼNﰼNﱼNﱼNﱼNﰼMﱼNﰼMﱼNﱼN寮N寮N僚M寮N寮N寮N僚M寮N識N僚N識N炙N寮N識N寮N寮N僚M識N寮N識N識N識N炙N識M炙N識N寮M識N識N炙M識N炙N炙M識N識N識M層N屮N識N識N屮N屮N屮M屮N識N屮M屮N屮N層N屮M屮N屮N屮N層N屮M屮N屮N層M屮M塚M層N屮M塚M塚N屮N屮N塚N塚M屮M屮M塚M屮N屮N塚M塚N恵QزN塚N塚N塚M謁N侀IZLćMĈKćTWMM쫼N謁N啕M쫐]`O᯻M嗢N謁N謁N謁N請M謁N謁N謁N﫼M謁N謁N謁N謁N謁N謁N謁M謁N請N﫺M쬼N﫼N﫼N﫼N﫼N﫼N﫼N﫼N﫼N﫻N﫼N﫻N﫼N﫼N﫼M﫼N﫼MלּNכּMלּN﫼N﫼M﫼N﫼NלּN﫼NלּN﫼NכּNכּNלּM﫻MלּMלּMלּMלּNלּNלּNלּNלּNלּMלּNלּNﭼMכּNﭼNלּNלּNﭼNכּMﭼMﭻNכּNﭼNלּNﭼNﭼNﭼNﭼNﭼMﭻNﭼMﭼNﭼNﭼNﭼNﭼNﭼNﭼNﭻM﮼MﭼNﭻN﮼N﮻NﭻNﭼN﮼NﭼNﭼNﭼNﭼNﭼN﮼N﮼N﮻N﮼M﮼N﮼N﮼N﮼M﮼N﮼NﯼMﯼN﮼N﮼NﯼN﮼M﮼NﯼNﯼN﮼NﯼNﯼNﯻNﯻNﯼMﯻNﯼNﯼNﯻNﯻNﯼNﯼMﰼNﯼMﯻNﯼN糧N祿N良N良N祿N糧N良N祿N祿N糧M祿N良M良N良M糧N糧N良N良M良N寮N良N良N良N良N良N良N良N寮N僚N良N糧N良M寮N寮M寮M良N寮N良N良N僚N寮N寮N寮M寮N寮M寮M僚N寮N炙M識N寮M寮N寮N識N識N寮N識N寮N識N炙N識N僚N炙N識N識N識N識N識N識N識N識N識M識N屮N識N匿PرM識N屮N屮N墨MF6jCJĆECkr֩I֯LݮN屮M層N屮N屮N屮M層N屮N層N層N屮N塚N層N塚N塚M屮M嗢N喙ML櫵L櫺MN塚N塚N屮M充L䬼N塚M嗢N塚N嗢N謁M塚N謁N塚N塚N塚N嗢N嗢N塚M塚M謁M謁N謁N謁N謁N嗢N請N謁M謁N請N謁N謁N請N請N請N請N謁N請N﫼N謁N﫼N﫼M﫼N請M謁N謁N請N﫼N﫼N﫼M﫼N﫼N﫼M﫼N﫼N﫼M﫼N﫼M﫼N﫻N﫼N﫼N﫻MכּN﫼NלּN﫼NלּNכּNלּMלּNכּN﫻MלּM﫼NלּNלּNלּNכּMכּMלּNלּNלּNכּNלּMﭼNﭼNלּNﭼMﭼNלּNלּNﭼNלּNלּNלּNﭻNﭼMﭼNﭼNﭼNﭼNﭼMﭼNלּNﭼNﭼMﭼMﭼNﭻNﭼNﭼN﮼NﭼN﮼N﮼NﭼN﮼MﭼMﭼMﭼNﭻN﮼MﭼNMNMNMNNNNNM祿NMMN祿NNNM祿NNM祿MN祿N祿N碌N祿N祿NNM祿N祿N祿N良N良M祿N祿N祿N良N祿M糧M良M祿N良N良N祿N良N祿N祿N糧N良M良N良N祿M良M良N良M良M寮M良N良N寮N良N糧N良N良M糧M良M良N寮N良N良N寮M良N囹RհM寮N寮N寮M靈JmpHFA>z:r@ruQˤMϲM寮N寮N寮N識N識M寮M識N識N寮M識N寮N炙M寮N識N炙M笠KꨂS7l>o[ùMN屮N淋L嫹M쨻N識N識N炙N識N屮N屮N識M識N屮N層N屮N識M識M屮N屮M屮N屮N屮N屮N屮N塚N塚N塚N屮M層M屮N塚N層N層N塚N塚N塚M塚N塚N塚N塚N塚N塚M塚M塚N嗢N塚N嗢M嗢M塚N塚N嗢M嗢N嗢N塚M塚N塚N謁N塚M謁N塚M塚N塚M謁N謁N謁N謁N請N塚N謁M謁N謁N謁N謁N謁N謁N謁N請N請M謁N請N﫼M請N﫼N﫼M﫼N謁N謁N﫼N﫼M請N﫼N謁N﫼N﫼N﫼N﫻N﫼N﫻N﫻N﫼N﫼N﫼N﫼M﫼MלּN﫼M﫼NלּNלּN﫼N﫼NלּMלּNלּN﫼N﫻MלּNכּMלּNלּNלּNלּMNNNMNNNMNNNMMNNNNNMNNMNNNMNNNMMNNNNMNMMNMNMNNNNNNMNNNN祿NNNN祿N祿N祿M碌MN祿N祿N祿N祿N祿N祿M祿N祿N碌M祿N祿N糧M廊RծN祿N祿N魯L즕E1`RŊFH„@}>w2^PYoߕLN良N碌N碌N良N良M良M良N良M良N良M良N寮N良N良N惡MGѮJv1`,WIcpL߫N了LL᫼N寮N寮N寮N僚M寮N寮M寮N寮M寮M寮N寮N寮M寮N寮N僚N寮N識N識N寮N識N識N識N識N識M寮N炙M寮N識N識N識M識N識N識N識N識N層N識N識M屮N屮N屮M識M層N屮N炙N屮N屮N屮N屮M屮N屮N炙M層N屮N識N屮N屮N屮N屮N屮M塚N塚N屮N屮N嗢N嗢N屮N屮N塚N屮N屮N屮N屮M塚N屮N塚M塚N塚N嗢N塚N塚N塚N嗢N塚N嗢N塚M謁N塚N塚N謁N塚N謁N塚N謁N謁N謁M謁N嗢N塚N塚M謁N塚N謁M請N謁N謁N謁N謁M請M謁N請N謁N謁N謁N請N謁M謁N謁N謁NNNNNMNNNNNNNMNMNMNNNNNNNNNNMNNNNMNNNNNNNMNNNMNNMNNNMNNNMNMNNNMNMMNNMNNNNMNNQ٫NNMGکKx2c6hMM[P2uX*VHMNN祿MNMMN祿NN祿NMM祿NN鷺MH³Jz8o+U&qLCVfJլKਦJҮNߪN祿N祿N祿N良N碌N碌M祿N糧N祿N良N祿N良N良M祿M良N良N祿N良N良N良M良M良M良N良N良N良N良N良N良N良N良N寮N寮N寮N良N良N僚N寮M寮N僚N寮N良N寮N寮M僚N寮N寮N寮N寮N僚N僚N識M寮M炙N寮M寮N寮N識N寮N識N識M識N識N識N寮N識N識N識N識N識N識N炙N識N識M識N識M識N屮N識N炙N識N層M屮N識N屮M屮N層N識N屮N識M屮N識N層N屮N屮N屮N屮N屮N屮N層N層N塚N屮N屮N層M屮N屮N屮N塚N嗢N塚N屮N層N塚N塚N塚N嗢N嗢N塚NNNNNNNNNNNNNNNMNNMMMNNNMNNNNNNMMNNNNNNMMNNMNNNNNNNNMNNNNMMNNNNNNNNNMNNNNMNK⥶M礼MNMLTƌC}4aRWqfVІQEL5H6aGиL꣼NNNNMNNNNNNNNKQ|5i1`(vO ^?7MVL˯K祯MިNNNNNMNMNNMNMNNMNMNMNN祿N祿NNN祿NN祿NN祿M祿NN祿N碌N祿N祿N祿N祿N祿N祿M祿N祿N良N良N良N祿N碌N糧N碌N祿M糧N良N糧M良N糧N糧N良N祿N良M碌N碌N良M糧M良N良N糧N良N良M寮N糧N寮N糧N僚N良N良N良N寮N糧M良N僚N僚N僚N糧N寮N寮M寮N寮N寮N僚M寮M寮M寮N識N寮N寮N僚N寮N僚N僚M僚N寮N寮N寮N寮M識N識N識N識N識N識N識M識N識N炙N識M識N識N屮N識N炙NNNNMNNNMNNNNMMMNMNNMNMMNMNNMNNNNMMMNNNNNNNNMNNNMNMNNNNNNNMMNNNNNNNNNNMNNMNQӫNMNM적RD}.Z*rOFUaiOsXIuj.Z3^2dVHMNNNNNNNNNNNL颕HEzk7l/\%mIY;!E:yWŴK夵L夼MNNNNNNNNMNNNNNNNNNNNNNNMNNNMNNMNNMNNNMMNMNNNNMNNNMNMMNN祿NM祿MNN祿NNN碌NN祿M祿N祿MN祿MM祿NN碌N祿N祿N祿M碌N祿N祿N祿M碌N祿N良N祿N碌N祿N碌N碌N良N糧N良N良N祿N糧N糧N碌N良N良N良M良N良M糧N良N良N良N良N糧M良N良N良N寮N僚N寮M僚N僚N寮N僚N寮N寮MNMNNNNMNNNNNNNNNMNNNNNMNNNMNNNNMNNMMNNNNMNMMNMMNNNMNNNNNNMNNNNNMNMMMNNNNNM힞TȯNNLힰIߢ`l?t[e͘E/],VIPUǍF:NVHϪLힻMNNNNNNNM쟘H^`|6j;p*|S#iFY<G0D.L9eS̸L顼NNNNNNNNNNNNNNMNNNNNNMNMNNNNNNNMNMNNNMNNNNNNNMMNNNNNNMNNNNNNNNNNMMNNNMNMNNNMNNNNNMNMNNNNNMMNNNNN碌NNNNN祿MN祿N碌NN祿N祿N祿NN祿N碌N祿MM祿M祿N祿N祿N祿M祿N祿NMNNNNNNMMNMNNNNNNNNMNNNNMNNMMNNNNMMNNMMNNNNNNNNNNNNNMNNNMNMNNNNMNNNNNNNNNJޡVͬK㠬KڣIf[;pPf͙[ɑVƍ7l,W-XF|GJK3<[ڳK䝼NNMMNM{M,XGNÇEOÈI…EGZȐD|7l1aUޯMݡNNNNMNNNMNNNNNMNNNNNNNNNMMNMNNNNNNNMNNMNNMNNNNNMNNNMNMNNNNNNNNNNNNMNNNMNMNNNNNNNNNMNNNNNNMNNNNNMNNNNNNNNMNNNMNMNMNNMNNNNMNNMNMNNNMNNNNNNNNMMNNNNNNNNNNNMNNNNNNNNNNNNMNNNNNNNNNNNNNMNMMNMNMNNNNNNNMԢMFѡCzu5i-Z3d:qORѦNNMNNNMNNMNNNNMNMNNNNNNMNNNNNNMNMNMMMNNNNNNMMNNNNNNNNNNNNMNNNNMMMNNNNNMNNNMNMNNNNNMNNNNNMNNNNNMNNNNNNNNNNMMMNNNNMMNNNMNNNNNMNMNNNNNNNNNNNNNNMMNMNMNNNMNNNNNNNNNNNNNMNMNMNNMNNNMNMNMMNMNNNNNMNNNNNOҢNHˢRED~>x;s;r;kI}KA}>xNĈXLןJdU=-Kw8n1bHlrܭMڝNNNMNNNNNNNNNNMNNNNNNNNNNMNNMMNNNNNNNNNMNNNNNNMMNNNNNNNNNNNNNMMNNNNNMNNMNNMNNNNNMNNNNNNNNNNMNNNNMMNMNNNMNMNMNNMNMMNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNMMNNMNNNNNNNNNNMNNNNNNMNMNNNNNNNNNNNNNMNNNMMNNNNNNN֝M씻NK~ab˖nƠ|דz_ëZEnQƊXȏeĔ#P>zcL֝M픰LߙM씼NNNNNM땜Gţ2]O^?&pK0_:s5h/],X*|SFspM՞NNNNNNNNNNNNNMNMNNMNNNMNMNMNMNNMNNNNNMNMNNNNMNNNMNNNNNNNNNNNNNNNMMNMNMNNNMNNNNNMNNMNNMNNNNNNNNNNNNNMNNMNNNNMMNMNNNNNNNNNNMNNMMNNNNMNNMNNNNNNNMMNNNNNMNNNNNMNNNNNNNNNNNNNNMNNNMMNMNMMNNNMNNMNNNNNNMNLژK蓼MNL瓖_ˑVڜNLtI8{Z5]@n+jJQ7:PQs\ŕ\NNNNNNIaW@j+V)yQ1`?zCA}A}IQƤNMNNNNNNNNNNNNNNNNNMNNNNMNNNNNMMNNMNNNNMNNNNNNNMMNNNNMMNMNNNNNNNNNNMMNMNNNNMNMMNNNNNMNMNNNNNMNMNNNNNNNNNNNNMNNNNNNNNNNNNNNNNMNMNNMNNNNMNNNNNNNNNNNNNNNNMNNNNMNNNMNNNNNNNNNNNNNNNNMNNNNNMNNNNNMNNNMNNKߔMݖNNNNM폹M퐼NMEǝAh0`+U"dC"dCW:!P8GrtɺM퐼NNNL璠G˝ee̘]ʒHQĉJ3e1a1b3e?seNNMNMNNNMNNNNNNNNMNNNNNNNNNNNNNNNNNNNNMNNNNMNNNNNMNNNNMNNNNNNMNMNMNNNNNMNNNNMMNNMMNMNNMMMNNNNNNNMNNMNNMNNNNNMNNNNNMMMMNNMNMNNNNNNNNNNNNNNMMNNNNNNNNNNNMNNNNNNNNMMNNMNNNNNNNNNMNNNNNNNNMNNNMNMNMNNMNNMK琥PКNNNNNNNJmLx/]%oJ(vO `@#cC0nORxiݭLږL돯KݔL咷L萎Le̘pРe͘a˕Uƍ8n2c5h:r:sMUãNNNMNNNNMNNNNNNNMMNNNMNNNNNNNMNNNMNNNMNNMNMNMNNNNNNNMNNNNNNNNMNNNNNNNNNNMNMMNNNMMNNNNNNNMNNNNNNNNNNNNNNNNNNNNMNNNMNNMNNNNNNNNNNNNNNNNNNNMNNNMNNNNNNNMNNNNMMNNNMNNNNNNNNNNNNNMNNMNNNNNNNNNNNNNNNNNNNNL덳J㏍TM팼NNNNNNHٓ\ď\4e%nIY>f[ahrKNNNUtѢtҢnПc̗JÅ^ɓX.Y.\5j?tbNNNNNNNNNNNNNNNMNMMNNNMNNNNNNMMNNNMNNNNMNNNMNNNNNNNMNNMNNNNNNNNNNNNNNNNNNMNNMNNNNNNMNNNNNNMMMNNNNNMNNMNNMNMMNMNMNNNNNNNMNMMNNNMNNNNNMNNNNNNNMNNNNNNNMNNNNMNNMNNNNNNNNNNNNNMNMNNNNMNNNNNNNNNMNNNNNNNLꋑEhUV}ٗIM틼NMMM틼NJv2`fSG֌JㇸL놻NI͑ILLNMNNJDl5hSĊ]ʓ^ʓa˕_˔a˕Yɐ]ʒ{ΰJK爹L텼NNNQΕN㋼MMNNNMMNNNMNNNNMNNMNNNMNMNNNNNNNMNNNMMNMMNNNNMNNNNNNMNNNNNMNNNNNNNNNNNNNNNNNNNNMNMNNNNNNNNMNMNNNNMNNMMNMNNNNNNMNNNNNNNNNNNNNNNNMMNNNNMMNNNNNNNNNNNNNNNNNNNNMNMNMNNNNNNMNNNNMMNMNNNNNNNMMNL탆BWRL~;f5`6f/}V#kG-Z8}[kΜkϜiΛN‡7l-Y'\FE\cOIӍK熡N˓M酼MNNNNH=wB~C~[ɑ`˕d̗^ʓTŌZȑs{KV<)lNHaj֑OM논NML؍N⊼NNMNNMNNNNNMNNNNNNMMNNNNNNNNNNNNMNNMNNMNNNNNNNNNNNNNMNNNNNNNNNNNNNNMMNNNNNNNNNNNMMNMMNNNNNNNNNNMNNNNNNNNMMNNMNNNNNNNN~N~N~N~N~N~NNN~MN~NN~N~NN~MNMNNNNNNNNNNNNMNNNNMMNNMNNNNNNNNNNNNNNNMNNNMNNMMNNNMgS]kϝi͛c]Js;n6f/[9vWk˜ZĎXȏTǍSƋC{2d)xP-rUsWIىM䆼NNNNNNPTƌQƊQĉSƋ`˕c˗^V݇kF̎Yhx$lH$jG&rL2mXUNMMJވSڌM탼NMNMNNNRl6V5 #!/'EEgvQꅻNNMNNNNNMNNNNNNNMNNQh1P0 0-L]_ٌNNNNNNNNNNPi1P0 0.L^_ٍNNNNMNNNNMNNMNNNMNNNNNN|N}N}N|N}N}N}N}N}N}N}N}N}M}N}N}M}N}N}N}M}N~N}N}N}M~N~N~N}N}M}N~N}N~N~N~N~N~MM~N~NN~N~N~N~MN~NN~NNMNNN~NNMNNNMNNNMMKzECdh͚f͙qѡkΜkΜQÉDzBs=pM|bi͛nΝhΚQŊE8m)zR4y^RM퀻NNNMNNL`ʔ\ʒNĈMćcʗvƷL肼MHڇB\],W+V$lH*|S0[|vNNM큷L邳IㅤRΑN߇NNMMQMp $.MzNMMNNNNNNNMNNNNNg((FyMNNNNNNh((FyMNNNNNNNNNNNNNNNNNNNN{M{M{N{M|N{N{M{N{M|N{N|N{N{N{N{N{M|N{N|M|N|N|N|N|M|N|N|N|N|N|N|M|N|N|N|N|N}N|N}N}M}N}M}M|M|N}M|N|N}N}N}N}N}N}N}M}N~N~N}N~N~N~N}N}N}M~M~|P8oEk_˔nϞXčqѡjΜ]ʓTċ@wFrO|WYMwLd̗XȏZǐ6i1`NyzѰKMMM~NN~N~L|ma˕XȏFXhNNF͋@g^#gE$lH'tM$nI/]}³JウIҊOhOkONOX̒L炼Ns1NMNNNNNNMNMNMNNAbNNNNNNAcNNNNNNNNNMNNNNNMNNNNNzNyNzNyMzNyNzNyNyNzNzMzMzNyNzNzNzNzNzNzNzNzNzNzN{N{NzNzN{N{N{N{N{N{N{N{N{M{N{N{N{N{N{N{N{N{N|N{N{N|M{N{M{N{N{N{M|M{N|M|M|N|N|N|M|N|N|JE}j=fD}QƊgΚVa˕rѡg͙QÉm@|N~gfEȄIN΅GDhe!bB(wO-Z.Z*~T7f>lU}՟PȉNxNxNxNxNxNxNyNxNyMxNxNyNyNyMxNyNyNyMxNyNyK|1hQ%mI)zQ0_-Y4g4f5i3d1a6k5h0aOrNzNzNzNzMyMzNzNzNzN{NzNzN{M{NzN{M{M{N{N{N{8tN{M{M|N{N|M{N|N|N{N|N|N{N|N|N|9uN|N|N|N|N|N|N}N|N}N}N|N}N}N}N}M}N}M}N}N}N}N~N}N}M~M}N}N~N}N~N~NsNsNsNtNtNsNsNsNsMtMsMtNtNsMsNtNtNsNsNsNtNtNtNtNsNtNtNtMtNtNtMtNtNtMuNtNtMtNtNtNtNuMtNtNuNuMuMtNuNuMuNuNuNuMuNuNuNuNuNuNuNuNvMuMwy`T`Œ[ŏYZ~U{fbNvLyI~Q+|T*|S-X2b/^1b6j.Z;yfSMwMwMvNwNvNvNwNwNwMwNvNwMwNwNwNwMwMwNwMxMwFЁ(tO0`0_/]+V6j4f1a3e4f7l7lD-NxNyNxNxNxNyNxNyNxNxNyNyMyNyNyMyNyNyNzNyMyMy!MzN{Nz!N{N{N{N{N{N|N|M{N{N|N|M|N|N|N}N|N|N|N}NqNqNrNrNqNqNrNqNrNqNrNrNrMrNrMrMrNrNrMrNrNrNrNrNrNsNrMrMsNsMsMsNsMsMsNrNrMsNsMsNsNsNsNsMsNsNsNsNsNsMsNtNtMsMtMtNtNtMtNtNtNtMtNtMuy[Fb̖hΚeSQfrM}KLÆI(wP*|S/]6k0^6j9q=vCsߞMɅLvMvNuNuNuNuNuMuNuNuNuNuNuMuMuNvNuMuNuNvMvJ/]3d3e4g.[0`6j5i3e5i8n6j0GiRـNwNwNvNwNwMwMwMvNwMwNwMwNwQyMxMxMxNwNxNxNxNyNxNyNyMzNzNzMzMzNzNzMzNzN{N{N{MzNzN{NzMzN{NpNpNpMpMpNpNpNpNpNpNpNpMpMpNpNqNpMpMpNqMqNpNqNqNqNqNqNqNqNqNqNqNqNqNqNrMqNqMqNrNqMrMqNqNqNqNrNqMrNqMqNrMrNrNrNrMrMrNrNrMsNrNrMrNrKtjui`tCxAyJXɏ^ɨI{KxH{tP#iF'uN-Y5i/\.[5h;sQ|wE|nfu}[KxMsNsNtNtNsNsNsNsMsNsMtMtMsNtNtNtNtJxNdm/]2c4f6j4g,X-Y4f3e4h6j3d"~N̓LwNuNuNuNuMuNuNvNvgπNvMvNvMvMvNvNvNwNwNwNxNxMxNxNxY}NyMxMyNyPzMyNyNyNyNyNyNyNzNoMnNoNnNnNnMnMnNnNnNoNnNnNoNoNoNnMoNoNoNoNoMoNoNpMoNoNoNoNpNoNpMpNoNpMpMoMpNpNoNpNoMpNpNoNpMpNpNpNqNpNqNqNpNqMpNqNqNpNpNpMqNqNqNpMqNqLqOŃrN5bLC{PȣI}PƃF‚n`\kY]izJkjPck8cT)qN8nKÆC~VuKvNrNrNrMrNrNrNrNrNsNrNsMsNrNrNrKutN"[@%nJ0^2c/]+U+V*|S+U1`0_5h3ed}MuV΃NsMsNsMtNtNtNtNumNuNtNuNtNuNuMu!~MuNuMuNuMu[z+NvNuNu!~NvNvNvNvNvZ{+NvNwNvNvNv~NwMwNwNwYzNwNxNwNwNwNwMwNwNmNlNmNmNlNmNmMmNmNmNmNmNmNmNmMmNmNmNmNmNmNnNmNnMnNnNnMmNnNnNnNnMnNmMnNnNnNnMnNoNnNoNoMnNnNnNoNoNoNoNnNnNnNnNoNnNoNoMoNoMoNoNoNpNoNoJz}_}S?mJ;gpK}GjoПxϤpƟ|yjXEo^[8l7l;rJK†=uimNpNpNpNqNqNpNpNpNpNpNqNqNpMrIvmL%XD _@!aA$jG"fDW: ^?!bB$kG){R0_,X-Z0`TsNrOʂMsMrNqMsNrNrNsNs0O»MsNsMsNsNsMsNs7HjMsNsNsMsMtu*HɻNtNtNt7HjNtNtNtMtNuu*HɼNtNuMuNuNuJmNuNuMvNupĄMuNvNvNvNuNvNvNvMkNkNkMkNkNkNkNkNlNlMkNlNkNlMkNkNlNkNkNlNlNlNlNlNlNlNlNlNlMlNmNlMmNlNlNlMlNlMlNlMmNlNmNmNmNmNmNlNmNmMmMmMmMmNmMmNmMnNnNmMmNmNnNnNmMoYk}\R5h:p_{OƁMvLpoW6fH|I~x:o?mJ|O~C~E^ɓYȏWyaLpNkNlNkNlMlNlNlIoxI)YHY<X;U9V9W: _?W:X;!bB1a5h5j2c3e1a-Z;d\6BcNmMnQNmNmMmNmNmNmNmMmNnNnNnMmNnNmNnNnMnNoNnRvsNoNoNoNoNoSvsNpNpNpNpNpNpNrNqNqMqMqNqMqMqMqMfNfNfMfNfMfNgNfNfNfNgMfNfNgNgNfNgNgNgNgNgNgNgNgNgNgNhNgNgNgNhNgNgNgNhNhMhNhNgMhNhNhNhMhNhNhNhNhNhNhNiNhMhNiNiNhMiMhMhNiNhNiNiNhNiNiJmJif1b9p@rܙK|NiNiNiNiExeȖNĈ=u@xZɐSLB}=f?yA|D~HOĉdƗXe}MpMjNjNkNjLmOG)QEY#gE"fD!bB!bB"fD.[/]/].[*~T#gE*pN.VL 9 %OOXNkNlNlMlNkNlNlNlNlNlNlNlNlNlNlNlNl$ANmNmNm=^TxNmNnNnMmNmNmNm>_TxNnNoNnNnNnMoNn1P 'XsNoNpNoNoNpNpNpNpNeNdNeMeNeMeNdMeNeNeNeNeNeNeNeNfNfNeNfNfNfMeMeMeNeNfNfNfNfNfNeMeNfMfNfNfNfNfNfNfNfNgNfNfNfNfNfNgNgNfMgNfMfMgNgNgNgMfMgNgNgMgMgMhNhMhNgCvPt9pH{ΨNrNhNgNhNhEqF~C~A}4gH{;s9o4g.\Bj3d4g=wJHSƌSٙY€I|SS^P|Gr:OSV: _@ _?!aA$kH(xP'sM'uN'tN&sL&rL$kH$kH _?[=R7R7R7Q6P7_57VGtUNiMjMjNjNjNjNjNjMjNjNkNkNkNkNkNkNkYn9NkNlNkMl_ % $iNlNlNlNkNlMlNlNlMl` % $iNmNlNlNmMmNmNmNmNm;\ "NnNnNnNmNnNnNnNnMnMcNcNcNcNcMdNcNdMcNdNcNdMdNdNcNdNdNcNdNdMcNdNdNdNdMdNdNeNeNdNdNdNeNdNdNeMdNdNeNeMdNdNdNeMeNeNeMdNeNeMeNeNeNeMeNeNfNeMeNeNeNfNeNfNfMfNfMfKhEujMgMfMfNfMfLi^Kqv;tB|>x:q;^'qL0`9o9n;pE{ދPJrKiJkKrIj]Sw"_B$iF&pK%mI&pK$lH'tN/\*|R'sM$kG\=]>T8W:X;S7V9T8W:T8T8 %5TNsMhNhNhNhNhNhNhNhRk[1ۼNhNhNiMiNhNiNiMiQu4NjNiMjNiNjSl['D) $ ^?\>Z<Y< ^?!cB\>T8\>b; 'AcxhqSibo~Qt'E NgNgNgNgNgNhMgNgMhNhNhNgNgNhMhNhNhNhMhMhMhNhNhNhNhNhNhNhNiMiNiMhNiNhMhMhNiNiNiNiNiNiNhNiNiNiNiNiNiNiNiNiNiNiMiMjNiMjNiNiNjMjMjMiNiNjMjNiNjNjNjNjNjNjNjNjNjNjNjNjMjNkNjNjNkNjNkNkNkMjNkMkN`M`M`N`N`N`N`N`N`M`N`NaN`N`NaN`NaN`NaN`NaNaNaNaNaMaNaNaNaNaNaNaNaMaNaNaNaNaMbMaNbNaNaNbNbNaMbNbMaNbNbNbNbNbMbNbNbNbNbNbNbNbNbNcMcNbNbNcNcNbNbNcNcMdIhjG#V?$lH){R"eC[= `@RyӦ^ʓB|Cy6eAv`3e4g9p?xomayf͘hΚ]ɒM<{a,W1a2b+U$lH"fD$jG%mI"fD$lH%mI$jG#iF\>]>!aA#hF#iF&pK'uN!cB"dC#gE&rLw<NfNeNeNfMfNfMfNfNfNfNfNfNfNfNfNfNfNfNfNfNfMfNgMgNgMgNgNgNgMgNgMgNfNgNgMgMgNgNgNgMhNgNgNgNgNhMgMhMgMhMhMhNhMhNhNhNhNhNhMhNhNhNhNhNhNhNiNhNhNiNiNhNhNhMiNiNiMiNhNiMiNiNiNiMiMiNiNiNiMiNiMiN^N^N_M^N_N^N^M^N_N_N_N_M_N^N_N_N_N_N_N_N_M_M_N_N_M_M`N_N`M_N_M_M`N_N`N`N_N_N`N`M`N_N`M`N`NaN`M`N`M`N`N`MaM`NaN`NaNaN`NaN`NaMaM`N`NaN`N`NaNaNaNaKd}Ex9q5hM|iSDsR‰QJ!cB#iF$kH%nJ&qK$kH'uN&qK?fhÕf͘EMYzB~7l;sGv͋H|IvFK†A{6j2c<{\/]0_-Y/]/],W+U.\-Y/^,X#hF%oJ'sM+~T0_,W)zQ-X.Z1b/^,X+U+U(zP>(FNbNcNcNbNbMcNbNbNcNcMcNcNcNbMcNcNcMcNcMcNcNcNdNcMcNdNcNdMdNcNcNdNdNcNdNdNdNdNdNdMdNdMdNdNdNdNdNdNeMdNeNdNdNeNdMeNeNdMeNdNeNeNeNeNdNeNdNeNeNeNfNeNfNfMfNeNeNeNeNfNeNfNeNfNfNfNfNfMeNfNfMfN[N[N[N[N[N[N\N\N[N\N\N[M\N\N\N\N\M[M\N\N[M\N\N\M\N\M\N]M]N\M\M]N\N]M]N\N\N\N]N\N]N\N\N]M]N]N]N]N]N]N]M]N]N]N]N^N]N]N]N]M]N^N]N^M^N^N]N]N^N]M^K`Mbf!cB!bBZ<Y<W:S7R7T8T8 ^?V:.UM׃UQvJejV>w5j3dH{ЙNqj}OÈCw7m9n;q.qO7i9p7l8n2b.\4f4g.['tM$kG(xP,V.\.[){R-Y2c3e2c5i3e4f-Y1a'uN4g-Y#D,G2 #)94TeWeN`NaN`NaNaN`NaNaNaNaNaNaMaNaMaNaNaNaNaMbNaNaMaMaNbMbNbNbNbNbNbNbNbNbNbNbNbNbMcNbNbNcNcNbNcNcNbMcNbNcNbNcNcNcMcMbNcMcNcNcNcNcNdNcMcNcNdNcNcMcNdNcNcMcNdNdNdMdNdNdMdNdNdNdNdNdNdNdNdNeNeNdNdNYNZMZMZNZNYMZNZNZNZNZNZNZNZNZMZNZMZNZNZN[N[NZNZN[MZN[NZN[NZMZN[N[M[N[M[N[N[N[N[N[N[N[N[N\M[N[N[M[N\N\N\N\N[N\N[N\N[N[N\N\N\N\N\N\N\N\N\M]N\N]L^oS+_H!aA ^?$kG$iF"fD\>"dC"eD%nJ"dC*mPfeJaL^M^CsoXoZNIcdi5g4f;rI>m_?%oJ5g2d0^-Z+U+V(xP(wO'uN'sM)yQ0^1a0^3e5i9o7m9o7m7m9p2c8p1`-Y.[>lٗNsN^N_N_N_M^N^N_M_N_N_N_M_N_N_N_N_N_N_N`N`N`N`N`M`N_N_N`N`N`M`M`N`N`N`N`N`M`N`N`N`N`N`NaM`N`MaNaNaN`NaNaN`NaNaNaM`NaNaNaNaNaNaNaNaNaNaNbNaMbNaNbMaNbNbNaNbNbMbNbNbNbNbMbMbNbNbNbNcNbNbNbNcMbNbNbNbMcNbNbNcNcNcNcNcMXMXNXNXNXNXMXNXNXNXNXNXNXMYNXNXNYNXMYMYMXNYNXMYMYMYNYNYMYNYNYNYNZMYNYMYMYNZNZNZNZNZNYNYNYNZNZNYMZNZNYNZNZNZNZNZMZMZNZNZNZNZNZNZNZNZN[NZNZN[M[N[J]bGy,yS*}S(wP$jG$jG'sM'sM+U){R1a2b7l0&_5fM-`F3hPWnnA~d4f9p8n8o?z>xA|C@{y8o1b/]AojůJaN^M]N]M]N^N]M^M^N^N]N]N]N]N^N^N^N^M]N^N^N^N]N^N^N^N_M_N^N^N^N_N^N_N^M^M_N_N^N_M_M_M^M_N_N_N^N^M_N_N_N_M_N_N_N_N_N_N`M_N_N_N`M`M`N_N_N_N`N`N`N`N`N`N`N`N`N`NaN`N`N`N`NaNaNaNaM`NaN`NaMaN`N`MaNaNaNaMaMaNbNaNaMbNaMWNVNVMVNWNWNVNVNWNVNWMWNWNVNWNWNWNWMWNWNWNWNWNXMWNXNWNWMXMXNWNXNXMWMXMXNXNXNXNXMXMXMXNXNXNXMXNXNXNYNXNXNYNYNYNXNYNYNXMYMXMYMYNXNYMYNYNYNYNYMYMZC{4#I1&kH.~V,W)vO2`3d5h/\6k8o2c+F/"IH0O5N4L3T8?p@{9o8o?x*M40PNΛJhJfMbMZNYNXLYGvNKyV:S7M6PPkLZNYLZ}QN6j0]JouJ]GazOc}aaxPB}A}B~Gz܄P~L[I]vPH||WHjNZNZNZNYMZNZNZNZMZMZNZMZN[NZN[NZM[NZN[NZN[NZM[M[NZN[N[M[N[N[N[N[N[N[N[N[N[N[N\N[N\N[N\M[M[N\N[M\N\N\N[N\N\M\N\N\N\N\N]M\N\N\N\N\M]M]N\N\N]M]N]M]N]N]N]M]M\M]N]N]N]N]M]N]N]N]N]N]M]N]M^N^N]N^M]N^N]M]M^N]M^N^N^N^N^N^NSNSNSNSMTNSNSNSNTNTNTNTNSMTNTMTNTNSNTNTNTNTNTNTNUNTNTNTNTNTNTNTMTNTNUNUNTNUNUNUNUNTNTNUNUNTNUNUNUNUNUNUNVNUNVNUNUNUNVNUNVNUNVNUNVNVNVNUNVNVLWOpFeeU|Y;N4M4R7 `@QFHA}C|w`E_3$ =7oIGxsMFjkL{zZqMVMWNWKZBrFW[P5P5&NBImNWMXNWUsǢX\ZPxtK[5^.~ZXMsKxBrqgH_NXNXKbKZNXNXNXNXNYNXNXMXNXNYNXNXNYNXNYMXNYNYNYNYMYNYMYNYNYNYNYNYNZMYNYNYNYNZNYNYMZNZNZNYNYNZMYNZNZMZNZNZNZNZNZNZNZNZMZMZNZNZNZNZN[N[N[M[NZN[NZN[NZNZNZN[N[M[N[N\N[N[N[N[N[N\N\N[M[N[N[N[N\N[M\N\M\N\M\N\N\N\N\N\N\N\N\N]M]N\N\M\N]MRNQNRNQNRNRMQNRNRNQNRNRNRMRMRNRNRNRNRMRNRNRMRNRNSNRNRNSNRNRNSNSMSNSNSNSNSNSNSNSNSNSNTNSNTNSNSNSNSNSNSNSNTMSNTNTMSNTNTNTNTNTNTNTNTNTNTNTNTMVxXMmGbjKE.Q6Z< ^?)nNUyWc\zNhNUHi=o`BmVCq*eM+{T7iVSbNVNUG]/VM&fH&rL#hE3ZTˠJcNVNVNUNUI_PeLYLWSxlN'tM+V.Z2kX؉IsJZKWMWNWNWNaNVMWNWNWNWNVNVNWMWMWMWNWNWNWNWNWNWNWMXNWNWMXNWNWNWNWZZZZZZZZZZYYYX"VMOeNXNYNXNYNYNXNYNYZZZZZZNYNXNYNYMYNYNYOdV=YYYY W*RwMYMYZZZZZZNZNZNZMZNZNYMZN\TnW-YYYYYYW+U`OcN[NZNZM[N[N[N[NZN[M[N[NZNPNPNPMQNPNPNPNPNPNPNPNPNPNPNPNQNQNQMQNQNQNQNQNQNQMQNQMQNQNQMRNQMQNQMRNRNQNRNQNQNQNRNQNQNRNQNRNRNQNRMRNRNRNRNRNRMRNRMRNRNRNSNRMRNSNRNRNRNRKgLZMSGZBLVG0T8"eC,XGxJXNSNSNTLTJWa_|1`7l8n$jG#iF(vO0`FuNTMUwGT9+V*}T(xP3oZ}U|MUNTMTNTNTNUMTJ^KXDb4d2d,W*U/{XNXgbS|TzKVJZM^MUNUMUMUNUNUMUNUNVMVNUMVMUNVNVNUNUNUMUMVNVMVNVMVNVMVZZZZZZZZZZZZZZZYV:NYMWNWNWNWMWMWZZZZZZNWMXNWNWNWNWRtY ZZZZZZYVANXZZZZZZNXNXNXNXNYNXTlY ZZZZZZZZZZYW%S}NXMYNYMYMYMYMZNYNYNYMONNMNNONNNNNONONNNNMONNNOMONONONONONOMONONONONONONONONPNPNONPNONPNONPMPMONPMPNONPNPMPNPNPNPNPNPNPNPNPNPNPNPMPMQMQNQNQNQNQNQNQMQNQMQNQNQHYPcNQNQCbN5U9 _@"fD(wOLKVMQNQITdQ|>~fCr_1a2d,X(xP&qK+U3eEsMSIVES]U9$iF){R+U+vRBmkNfJZKXH^]yUgKUTfNSJVNw@w2d7\X;&qK7\fߕUmQeMTNTNTNTNTNSNTNSNTNSMSNSMTNSMTNTNTNTNTMTMTNTNTNUNUNTNTZZZZZZZZZZZZZZZZZX$ļNUNUNUNUNUMUZZZZZZMVNVNUNUNVO\Y ZZZZZZZZZW4ZZZZZZNVNVMWNWNWV>ZZZZZZZZZZZZZZZNWNWMXNWMXMXMWNWNXNWNLMMNMNMNMNMMMNMMMMMNMNMNMNMNNNMNNNNNMMMNMNNNMNNNNNNMNNNMNNNNNMNNNNNNNNNNNNNNNNNMNNNNOMONNNNNONNNONONNNNNNMONONNMOMONONONONPNPMOMOMPNOJRVkMPNONPCj\=!aA$lH+V=nc{IUFZF\|@r(vO7l(tN0^1a*}T-Y(vO-Y1`@ylHYdQ}#`C]>"gE+U/\FnRbm1[R=jd@pj;}g6bHyzXJZNQE[_B~I|Df$lH$jG&rL.yUm[WhMRMRNRMRMRNRNRMRNRNRMSNRNRNRNSNSNRNSNRNRNSNRMRNRNRNSNRZZZZZZZZZZZZZZZZZZUaMTNSMTNSNSZZZZZZNTMSNTNTNTUQZZZZZZZZZZZZZZZZZMUMUNUNUUUZZZZZZZZZZZZZZZZMVNUNUMUNVNVNVNVNVNVNKNLNKNKNLNKMKNLNLNKMKNLNLMLNKNKNLNLNKMLMLNLMLNLNLNLNLNLMMMLNMMMNMNLNLNMNMNLNMNMNLNLNMMMNMNMNMNMNMMMNMMNNMMNNNNMNMNMNNNMMMNMMMNMNNNNNNRfMONNMNMNIQ>e[*~T7}aڈ[qB^a]zEu_‘[8l7l:p5a2c*~T,X*~T(xP.\4hE}jAJY&dH#hF"dC$jG,WDj@MTA1L3V9]>!aA%oJ'jK:zcZjMiMv;l\*}S0lN,W+V$lH*|S/YgtO^NPNPMQNPNPNQNPNPNQNQNQNQNQNQMQNQNQNQNQNQMQNQNQNQNQNQMQZZZZZZNQNQNQNRQbULYZZZZZXϻNRMRNRMRNRZZZZZZNSNSNRNRNRXZZZZZY SyNXSsXZZZZZZZNSNSNSP^YZZZZZXTkPaNUOYQkUbW/Y ZZMTMTNTMTNTNTNTMTNUNUNINJNJNJNJNJNJNJNJNJMJNJMJNJNJMJNJNKNJNJNKNJNJMJNKNKNKNJNJNKNKNKNJMKMKMKNKMKNKNKNKNKNKNLNKMKNKNKNKNLMKNLNLNKMKNLNLNLNLNLNLMLNLNLNLNLIWLTNLNMNLNMNLJPOiNZFTGnC~IYɐVǎB~@|@zJn+U-Y+V-Z+U1`YwzA_AGSI2\=#hF$jG$kG,|UBk?QS9)I1L3R7Z< ^?"dC$iG/qVfpIQ\{zN;}[#gE$lH'tM%oJ/]lKQNNNOMNNONOMONONNNONOMONNMONONONONONONONONONPNONONPNONPZZZZZZMPNPNPNPNPNPUXZZZZZYMPNPNPMQNQZZZZZZNQNQNPMQMQY ZZZZZTfMQNQNROYY ZZZZZZMRNRNQVEZZZZZW(NRNRNRNRNRMRNRNRNTTjXռNRNRMRMRNSNSNSMSNSNSNHMHNHNINHNHNHMINHNINHNINHNINHNINHNINIMIMININHMIMINININIMINJNINIMINJMINJNINININJMJNJMINJNINJNJNJNJNJNJMJNJNJNJMJMJNJNJNKNKNJMKMJNJMKRbNKMKNKNKNJNKMJMLFSmC6k;qKVȎNňFEA}MHk4zW-Z/]-Y7fcwJO?ORM3X;\>#hE%mI)uP2^\yz2HC@+J1J1P6S7X; `@%mIHgpEUnĚf͙i/V!bA\="dC-sSbqJQNLNMNMNMNMNNNMNMMNNMNNNNNMNMNMMNNNMNNNNNNMNNMNNMNMMNZZZZZZNNNNNONNNONOOXZZZZZYNONONOMONOZZZZZZNOMOMONPNPYZZZZZP]MPNPNPNPVIZZZZZZNPNQNQXZZZZZQeMPNQMQNPNPNQNPNQNQNQNPNQNQMQMQNQNQNQMQNRNQNGNFMGNGNGNFNFMGNFNGNGNFNFNGNGNGNGNGNGNGNGNGNHMGNGNGMHNGNHNHMHNHNGNHNGNHNHMHNHNHNHNHNHNHNHMHMHNHNININHNHNHMHNHNHNHMIMININIMINININIJLNXNIMININIMINIMJFQ;[U.\NE>y3H0L3O5Q6Q71cJ9[TќGULJmycȗj˜hœ_k|N6j0YDqnKLFPyOwfOhKKNJMJMJNJNJNJNJNJNJMJNKMKNKNJNJMJNKNKNJNKNKNKZZZZZZNKNKNKMKNKNKUVZZZZZXͼNLNLNKNKNLZZZZZZMLNLNLNLNMZZZZZYNMNMNMNMNLORZZZZZZNMNMNMYZZZZZZZZZZZZZZZZZYNNNNNNNNNNNNMNMONNNDNCNCNDNDNCMCMDNCMCNCNDNCNCMCMDNDMDNDNDNDNDNDNDMDNDNENDNDNDNEMDNDNENDNDMENENENDMDNEMENENEMENENENFMENENFMFMENENEMENFNFNENENFMENFNFNFNFMFMFNFNFNFNFLGnEz[=*~TCwVČv;tC~>xc[pwbcW}BqaMuykF{+tO'R=$iG6f/vR*pM1_8dϋK^JHMENEJKRXIJNENEEX|LkTh˙pР]ʓWBrMXgdT~SdMGMENENENFNENFNFNFNFNENEMFNFMFNFNFNFZZZZZZZZZZZZZZZYW1NIMGMFMGNGNGNGZZZZZZNGNGNGNGNHZZZZZYNHNGNGNHNGNHZZZZZZNHMHNHXZZZZZVCNHNHNHNIMIS{pZZZZZX$NININININIMININININ>N?M?N>N?N?N>N>N?N?N?M>N?M?N?N?M?N?M?N?N?N@N@N?N?M@M@N@N@N?N@N@N@N@N@N@N@N@N@M@N@N@NAN@M@N@N@N@N@NAN@N@N@NAM@M@NANANANAMANANAMANANANANANBNAKBEI[Fm!V>$lH){R"eC[= `@RyӦ^ʓB|D}7l?q̑SXNANBGRrHnZ}zf͘fʗPu9eAf6kT5g5j7kHpRvPdAR+hO"bB6e:s6k.}V$jI:e#V='jJ9`XqPvHMNCMCNCIEsLs=pMSÊYčYȐZȐUċ@tPrţғX^NDNDMDNDNDNDNDNDMDNDNDMDNDNDNDNDNDZZZZZZZZZZZZZZZW+OJNENENEMENENFNFZZZZZZNFNFNFNFNFZZZZZYNFNFNFNGNGMFZZZZZZNGNGNGV@ZZZZZY OQNGNGNGNGXZZZZZT`|NHNHNHNGNHNHNGNHNHMN>N=N>M=M=M=N>N>N>N=M=N>N>N>N>M>N>N>M>M>M>M>N>N>N>N?N>N>M>M>N>N>N?M>M?N?M>N?N?N>M?N>N?N?N?N?N?N?N?N?N?N?N?N?N?N@N?N?N?IDkCt5HGU9Y<[M=M>N>N>N>N>N>N>N>K@[Po ^?^>!cB#iF$kH%nJ&qK$kH'uN&qK?fihɚIS{krGEGG?XW\mDs^Z7k7l;rJK†:rM|nОuENNHN?N?GE]iw5g6j;sHc`!cB!bBZ<Y<W:S7R7T8T8 ^?V:&UDuVnRVJCJAICBIElC~IYɐVǎB~@|A{O‡C:s;qdÕyK@_XN>N>M>I@Dj4g8o:q5b$jG'tM$nI0Ya][u4`DuJ…SƋNĈ^˓c̗hΛg͙g͙uңsѢpΠN?N?M?N?N?N?N?M?N?N?N?N@M?N@N?N@N?N@ZZZZZZN@N@M?N@NARbZZZZZY ߼NAN@N@N@NAN@ZZZZZZM@MANANANAZZZZZZNANBNANAMANAZZZZZZNANANANBNBW6ZZZZZZZZZZZZYVMNBMCNCNCNCNCNBNCNCNCMCN8N8N8N8N9M8M8N8N9N9N9N8N8N8M9N9M8M8N8N8N9N9N9M9N9N9N9N9N:N9N:M9N9N:N9N:N9N:M:M:N:N:N:N9N:M:N9N:N:N:N:M:N:M:N:N:N:N:M:M;N;N;N:N:N:N;N:M;K=hS|*_H!aA ^?$kG$iF"fD\>"dC"eD%nJ"dC(nMQjsDFJ?LN=N>N>N=N>N=N>N>M>N>N>M>N>M>ZZZZZZN>N>M?M>M?NCZZZZZYN?N?N?M?N?M?ZZZZZZM@M@N?N?N?ZZZZZZM@M@N?M@M@N@ZZZZZZN@MAN@NANANAU\wY ZZZZZZZZZY TgqNAMANANANANANANANANBNBNAM7M6N7N7M7N7N7N6N7M7N7N6N7N7N7N7M7N7M7N8N8N7N8N7N7N8N8N8N7M7N7N8M7N7N8N8N8N8N7N8N8N8N8N8N8M8N8N8N9N9N8N8N9M9M9N8N9N9N8N8N9N9N9M9M9N9N9N9N9G>SFd,yS*}S(wP$jG$jG'sM'sM+U){R1a2b7l0#.=AoBd:[S.\NE>yFBkBjNhg6cBi0uQ&tM#bDEOY:r4h^jΛf͘iΛc̖g͙lϝnПnПqѡsТoΙIKN;NM>N>ZZZZZZN>N>N>N=N=ZZZZZZN?N>N>N>N?M>ZZZZZZN>N>N?N?N>M?N?NBUVzXY YYYYXVJNCN?M?N?N?M?N?N?N@N@N@N?N@N@M5M5N5N5N5N5M5N5M5N5N5M5N5N6N6N5N5N6M6N5M6N6N5N6N6N6N6M6N6N6M6N6M6N6N7N7N6M6N6M7N6N7N6N7N7N7N7N7M7N7N7M7M6N7N7N7N7N7N7N7M7N7N7N8N8M8N7N8N8p@a4#I1&kH.~V,W)vO2`3d5h/\6k9p3d+F/!E5)yQ1b_\ɒSnjNÈB}8n=oNOÈ^ʓj䃃oN9M9N9G>[SJ?K;J;QWLEK;F?cY{[VnK6d4wV7i3d-Z-~U\|sѢiΛd͘e͘lϝ`ȓV]zvZsFEN:N:N:N:N:N:N:N:N:M;N:N:M:N:M:N:N;N:N;ZZZZZZNM=N=M=N>N=M>N=N>N>M=N=N=M>N=N>N>N>N>N>N>N>N>N?N>N3M3M3N3N3N4N4N4N4N4N3N3N4M4N3N4N4N4N4N4M4N5N4N4N5N4M4N5N4N5N4N5M4M4N4N5N5N5N5N5M5N5N5N5N5N5N5M5N5N5N5N5M5N5N5N6N5N5M6M6N6N6N6N5N6N6N6N5L7eM{s"X>H0O5N4L3T8?p@{9o8o?x=qOch:'=*$I8[=*~TCwVČv;tC~>x\/]J `@%oJ+U0_Et_ʔ^ʔVČ;r0_1~]zVZL5JBK6G8rTdv^jogxxWbDDEFG:@MYqtbrejRS^YdMxu,X%nJ%nI(vO#gE'uN1a,W0wVJ[c]TuTVI8QKQBK6N6N6M6N6M6N6M6N5N6N5N6M6N6N6N5M6N6N6N6ZZZZZZZZZZZZZZZYQKN7N7N6N7N7N7N7ZZZZZZN7N7N8N7N7M8N8N8N7N7N7N8M8N8N7N8M8M8N8N8N8N8N8M8N8N8N8N8N8N9N9N8N9N9N9N9N8M8N9N9N9N9N9M9N9N9N9N9N9N9N9N:N:N:N.N/N/N.N/N.N/N/N/M.N/N.N/M/N/N0N/N/N/N/N0N0N/N/N/M0N0N0N/M0N/M/N0N/N0N0N0M0N0N1N0N0N0N0N0N1N0N1M0M0N1N0N0N1N1N1M0N1N1N0N1N1N1N1N1N1JHK9N2B;:LKG0T8"eC,X?oJ7N2N2N2N2K3E7WEh!V>$lH){R"eC[= `@RyӦ^ʓB|D}7l;m͇TMM3N3FDlH_W~vf͘hΚ]ɒL:f2nS6j5j7kJ~v}̪r)kL$kG'sM.[-Z(wO%nJ3c=q;qQm\pyOkbLN3M4M4N4N4N4M3N4N4N4M4M4N4N4M4M4N4N5M5ZZZZZZZZZYYYYX'Tk]N5M5M6N5N5N6N5N5N5ZZZZZZN6M6N6N6N6N5N6N6N6N6N6N6N6N6N6N7M6N7M7M6N6N6N6N6N7N6N6N7N7N7M7N7N7N7M7N7N7N7M7N7M7N7N7N8N8N7N8N7N8N8N8N8N8N8N-N-M-M-N-M-N-N-N.M-N-M-N-N.N.M.N-N.N.N.M.N.N.N.N.N.N.M.N.N/N.N.N/N.N/N.N.M/M.N.N/N/N.N.N/M/M.N/N.M/N.M.N/N/N/N/N/M0N/N/N0M/M0N0N/E9PAN/N/=DM4U9 _@"fD)vPG}J5N0M0M0H3hB}c3HDU9Y<[rVƍXȏNmwӥxӥk:`.[9lQzEoBoFqM]bƔQz8m=vE~~f\N2M2N2M3N2N2N2N2N2N3N2N3N3M2M3N3N3N2N3N3M3N3N3N3N3N3N3N3N3N4N3N4N3M4N3N3M4N4N4N4N4N4N3ZZZZZZM4N4N5N4N4N4N5N5N4N4N5N5M4N5N4N5N4N5N5M5N5M5N5M5N5N5N6N5N5N5N5M5M5N5N6N6N5M6N6N6N5N5N6N6N6N6N6N6N6N6N6N6N6M6M+N,N+N,N+N,N+N+N,N+N,N+N,N,M,N,M,M,N,N,N,N,N,N-N,N-N-N-N-N,M-N,N,N-M-N-N-N-N-N-N-M-N-N-N-N-N-N-N-N.M-N-N-N-M.N.N.N-N-M.N.N.N.N.H1XIN.N.M.v?L[=!aA%kI.Z?qzhWM.M.N.K1VPh ^?^>!cB#iF$kH%nJ&qK$kH'uN&qK?fhÕf͘ELppoG6F6CA|LN?EEsFK†A{6j3e2c>y^ʓnОl̛q̟pРwӥuȢkyZvtFq6kU,W4f:mIOW@sI>w;pkgfN1N1N1N1N1N0M1N1N1N1M1M1M1N1N1N1M1N1M2N2M1N2N1N1N1N1N2N2N1M2N2N1N1N2N2N2M2N2N2M2N2N2N3M2N2N3N2N3N3N2N3N3M2N3M3N3N3N3N3N3N3N3M3M3N3N3M3M3N3N4M4N3N3N4N3N4M3N4N4N4N3N4M4N4M4N3M4M4N4N4N4N4M4N5N4N4M4N4M4M5N4M4M5N*N*M*N*M*N*N*N*N*N*M*N*N*N+N*N+M+M*M*N*N+N+M+N+N*N*M*M*N+M+N+M+N+N+N+N+N+N+M+N+N+M,N,N+M+N+N,N+M,N+N,N+N,N,N,M,N,N+N,M,N,N,N-N,TFL.N,N,M-H/>e[-|W7}b_ML-M-N-M-N-I/Dd[!cB!bBZ<Y<W:S7R7T8T8 ^?V:&oJ;jDnF7G3G5G4K/M.K0`|OÈCw7m9n=u"dC"eD%nJ"dC)wPGtc|K.N,N,N,N,N,L-Xps5g4f;rI@z=uIF?vdhΚhΚiΛlϜk͜s̢sjaq̞vңwӥjńSHT^i(wO,V1_SnwN.N-N-N.M.N-M-N-N.N-N-M-N.N.N.M.N.N.N.N.N.N/N.N/N.N.N.M/N/N/N.N/N.N/N/M/N/N/N/M/M/M.N/N/N/N/N0N/N/N/N0N0N0N/N/N0N/M0N0N/N0N/N0M0N/N0N0N0N0N0N0M1N0N1N0N0N0N1N1N1N0M1N1N1N0N1N1M1N0N1N1M1M1N1M1N1N1N2N1N1M2M2N1N&N'N'N&N'N'M&N'M'N&N'N'N'N'N'N'N'N'N(M'N'N'N(N'N'N'N(M(N(N'N(M(M(N(N(M(N(N(N(N(N(M(N(M)N(N)N)N(N(N(N(N(N)M)N)M(N)M)N)N(M)M(N)SDN)N)N)N)N)N*N)N)M)N*C9nb]XX@<76PF+zR*}S(wP$jG$jG'sM'sM+U){R1a2b7l0#-=@}HFL+N*M+N+M*rNTbg{|WysOJÆFE_ɓo͟l~cg͙e͘g͙iΚmϞiΚnΞsСtѣqƜfŖYs][I-B2Vhk.~XOqnE8N,N+N,M,N,N,N,M,N-M,N,N,N-N-N,N-N,N,N,N,N,N,N-M-N-N-N-N-N-N-N-M-N-N-M-N-N-M.M-N.N-N-N.N-N.N.N-N-N.N.N.N.N.N.N.N.N.N.N.N.N.N.M.M.N.N.N/N.N.N.M.N/N/N/N.N/N/M/N.N/N/M/N/N/N/N/M/N/M0M/M/N/N/N0N/N/N0M/N/M0N0M0M0N$N%M%N%N%M%N&N%N%N%M&N%M%N&N&N&N%M%N&N&M%N&N&N&N&N&M&N&M&N&N&N'N&N&N&N&M&N'N'M'M'N&N'N&N&N'N'N'M'N'N'N'N'N'M(N'N(N'N(N'N'M(I*O6N'N'N(N(M(M(N(N'N'N(w?B_‘kϝiΛbȕtƤRwk4#I1&kH.~V,W)vO2`3d5h/\6k8o2c+F/I6^Nw`N(N)N)N)I,{QIC*M4%PBiDThV[dV}`efgTCL)N(nEMMRƋJj}E6UMd5fN3b8lE|L†Wȏ_˔g͙lϝi̚aWvo;jLw|NFN(N(N)N)N)N(N)M)N)N)M)N)M)N)N)N)N)M)M)M)N)N)N)N*N)N*N*N*M)N)M)N*N*N)N)N*N*N*N*N*M*N*M*N*N*N*N*N*N*M+N*M+N*M+N+N+M*N+N*N*N+N+M+N+M+M+N+M+M+N+M,N+N,N+N+M+M+N+N+N+N,N,N,N,N,N,N,N+N,N,N,N,N,M,N,N,N-N-M-N-N,N,N,N-N,N-N-N,N"M"M"N"N!N"M"N"N"N"N#N"N"M"N"N"N#N"N"N#N"N"M"N#N#M#N#N"N#N#N#N#N#N#N#N#M#N#N#N$N#N#N#N#N#N$N$N$N$N#M$N$M$N$N$N#N$N$N$N$N$N$N%N$N$N$N$N$M$N%M$M%N%N%E)U}r_˔nϞWÌgTr2dKY;N4M4Q6_?P~FHA}:q;jXpAE4$=0YIkkbDvYvEBI)E+G5J)M%N&L'?4cszybMJ)=0=`%nI#[@2eK&pK&rL)zQDfRuIv_NshWKnh@LZ}Al[5dPy_OK+N'N'N'N'N'N'M'N'N'M'N'N'N'N(M'N'N(M'M(M'N'N(N(N(N(N(N(N(M(N(N(N)N(N(N(N(N)N(N(N)N)M(N(N(N)N)N)N)N(N(N(N)N)N)N)N)M)N)M)N)N)N)N*N)N)N)N*N)N*N)N*N*N*N*N*N*N*N*M*N*N*N+N*M*N*N*N*N*N+N*M+N+N*N+N+N+M+N+N+N*N+N*M+N+M+N+M N N!N N!N!N N M!N!N M N!M!N!N!N!M!N!N!N!N!N!N"N!M"M!N!N"M!N!M!M!N!N"N"N"N!N!M"N"M"N"N"M"N"N"N"N"N"N"N"M"M"N#N"N"N"N#N"M"N"N#N#M#N#N#N"N"N#M#N#N#K$aVw`E~QƊf͙OxS{4kO)X@E.P5"U;Z<&qLAdMzFp7a1yXoWMI&@DMBDWwC)gUWm_^mniwXJB5C7E+s>@Trn`cm~rL%K&aIuY,X%nJ$mH1iM0_4e4h5e;YQ0\Q+kP&jI&pM/_I0`9nEtp]YX5N&N&N&N%M%M&N%M%N&N%N&N&N&M&N&M%N&N&N&N&M&N&M&N&N&N'N'M&N&N&N&N&N'N'N'N'N'N'Y%E ĻN'N'N'N(N(N'G+2g*r94N(N(N(M)N)N(N(N(M(E,# =_M)M)M)N)N*N)N)N)N)N)N)N*NMNNNNNNNNNMNMMNNNMMN MNN N N N N MN M N M N N N M N N N N M N N M M!N N N N!N N M M!N!N!N!N!N N N!N!N!N!M"N!N!N"N"N!N"M!N!D%7fB}JK}Jl![?#hE-[DG0Q61kM$lH%kH,|T1^Bv7l8j{V?N"M#C5aGvSSrf͘hΚ]ɒK8d0oQ6j5j7kEuK1N"y<8'iJ$kG&rL;^JIÅD;u4{W)yQ0`0_-Y,~U/\9p:rrVƍXȏH|qbJN!N!p>>9`-XBlLćMĈKćD|2Z.\-Y4f2b+U;^)=e!cB#iF%bD\=![>/kL#gE$lH'tM%oJ0^RE{FkayE6D'}A2nL@q;7DqFK†A{6j3e2c>y^ʓnОiH(N N N @)Qmh6jCJĆE=y2[3d4d5i3d1a6k4g5h5g;teH#J"_=L#N!N N!N M!N!N!N N!N"M"N"N!N"N!N!N!N!N!N"N"N"N"N"N"N!N"N"N"N"N"N"M"b(;N"N"N#N#!uN#N#N#N#N$N$N$M$N$N$N%N%M%N$N$NNNNNNNNMNNNNNMNNNNNNMMMMNNMNNMNNNNNNNNNNNMNMNMMNMNNMNNNMNNNNNNNNNNNNNNNMK\}vAgU bA!bBZ<Y<U9-cH)}S*jI.}U!bA\="dC(vOFm5\-xW`RwOD&I!MI ]xOÈCw7m9n=uz9q0_5`4b1a3e4f7l7l3e2c)V#?)hN"M"M"N"O!D Q!EA(P!F N#N#N#N#N#N#N#N#N#M#NNNNNNNNMNNNMNNMNNNMNNNNNNNNNMMNNNNNNMNMNNNNNNNMMNMNMNNMNMMNNNNNNNNNNNNMNM^DpKKNX'_D!aA ^?$kG$iF!dC$Z?#aB'\B4lP)yP'uN#hE0}V:p7bmM>KNNKSrl5g4f;rI@z=uIF?x[yyxNNNKm;72aRŊFH„@};t-X-uQ6c5i3e5i8n6j3e6jG|nNNMB#[.NNNMNNNNNMNNNMNNNNNNMMNNNNNNNNE#~4+NNN M  MN N N N N N N I",aȼN N M N ͰI"N N!N!G$N"M"N"N"N!N!M!M!N"N"NNMMMNMNNNNNNNNNNNNMNNNNMNNNNNNNMNNMMNMNNNNNNNNNNNMMNMNNNNNMNMNNNNNMNNNNNFaOwFy=*EDR{+yR*}S(wP$jG$jG'sM'sM*T2nPN6j.[Z<(fFAxbeLzDg_P/LNcMxFZiqrT|pOJÆFE_ɓoΟlnyX7NNNA"Eq2c3eF@xB~iYɐRŋd̗pΡrf@$K'NNN]KpJTŌC},X,_F0lN6|Y/tPM4N5(hH+U1`0_5h3e4gMyoINNMNK{c4MNNNNMNN|T7N$NNMNNNNNNNNMNNNNNa(0ΩENNNNMNNNX$7NNNNNW$8NNNNNMNNNNNMNNNNNNNNNNNMNMNMNNMNMMNNNNNNNNNNMNNNNNNMNNNNNNNNNNNMNNNNNNNNNNNNMNMNN|D'WipbqGv<|^!Z=H0O5N4L3T8?p@{9o7nwPfk^w6"4%;+B?Ln3c2d,W,W3|^L[eXQMdQf_“WMybgySEBo[5NK? KJ\_6gO?t[bȔ@w,X*~SGPUǍ@x#cC+}S){R)zR6iT?NNNNNNNAS'NNNNNNNNNG(R!NNNNNNMMNNMMN V#0MNNNNNNNNM>MNNMN< NNMNMNNNNMNNMNNNNNNNNNNNNMNNNMNMMMNNNNNNNNNNNNNMNNNNNNMNNMNNNMNNNNNNNNGYQmCAjrX{zY``};FNNNNFHf\2d9c9k2`@hE.Q6Z< ^?&nKKnPUwGlaNv:FFw\2P!MNNNMNNNNN+INNNMMNxNMNNN/H NNN eNNMMN hNNNNNNNNNNN M M N N N NN N MN N N M MNM NNN NM NNNNNMNNMMMNMNNNNNMMNNNNNNNNMMNNN~<S_iHHxb^8l7l;rJK†WWlBYbnNsJ$SYah?m4{X,W4f:qJQƊ\ȑUu]ƑnϞXčqѡjΜZUŌ8h%V=/\*T+V?ioПg͙OÈ@{6j5i2c,X+UB,J1S8"bCL9&I&aH/xW/rV,TJsTIi__x3W0k&Dg8o3}Z[QA6k;qKVȎNňFEA}QĊNʼnRŋV}sN N N ]Xr-JM <DKPg;j3[-{T.X^hvx;s;r;kI}KA}>xNĈ9l!U;N4/XC?*I2S7T8S7 _?#iF&pK%oK#\CUMg9f=|#uF NIL[]n)yQ+V2d-Y)yQ0`0_-Y.[){R(vP.[0oT[En2x{5HMNNNMNMMNNJ&ѼNNNNNMf&EMNNMNNNNNNMNNNNNMNN N N N NN NNNM N N N N M N N N N N N N M N N M N M N N N N N N M N M M M N N N N M N N N N N 96\O~/]NE>yB CLLZC:r5i.[&oK%TAlAa.x]ÏjΜsѢjΜVÌ@lCvJXǎa˕d̗KIkAsZ-eI(aDQt[ɑOĉMňOĉIDy2bBtHCZƏK|&aDX;"V<H1G0R7\>[=V9&pK,X-Z*|S&VBVUk5IN A8oV0_0^3d/\.\-Y4f2b,W0`1b1b1`Fb^a9so0HNNNNNNNNN=NNNNNNN cNNMNNNZ%NNNMNNNNNNMNNNNNNMNNMNNNNNNNNNNMNNNNNNNNNNNNNNNMNNNN NNNN N NN MN N I:S0)yQ1b_\ɒSnjNÈB}8n=oNOÈ^ɓ]ziF N M WWk)N F H:S/Cq7n,|T'nKW=K6X#Y1mS;cXAjaKuJ]]K8j3d-Z.\(vO%cGkAe<}Tlb˖iΛaʕAp9o=e>m@|PNX]RP.aB?KN-}U.\0wS \>Ty[ɑb̖iΛdʖTz;sW8iQ>fQƊXȏ_X;*lK(iH&qK$\@"bB#gE&rL!cB[=#iF,W.\(pNYUk3N N 9*iK%mI)zQ0_-Y4g4f5i3d1a6k5h5h4f1wZ|AHmf+HM M N NN NN N E#NN NNNNNN S KNNMMNNNN;)DNMNMNMNNNNNNMNNNNMNNNNNNNNNMNNNNNNNNNNNMNNNMNNNNNMNMMNNNNNNNNE @AHI[=*~TCwVČv;tC~>xgUf{@ CGM9,X%nJ%nI(vO#gE'uN1a.[^NrCE\Uj>w5j3d7iELQ1V;gx5 NDCS(h)YA:]#iF'uN-Y5i/\.[5h9q2[8^/]%oJ(vO `@ ^?M32xT3c2c5i3e4f-Y1a'uN4g.Z$fFPT`0Nf/6iQ/]2c4f6j4g,X-Y4f3e4h6j3d3e6kT[f4NNNMYOj!G M `N N N N N N M N M N N M M N N M N M N N N M N N N N N N M M N N M N N M M M N N M N M N M N N M N N NNNNNNMNNNNMMNNNMMNMMNNMNNNNMNMNMMNNMNNNMNL'];CB= V<$lH){R"eC[= `@RyӦ^ʓB|D}7l3eM\](NNC7O9B?R:]\Ɛ_ɓWƍ=l&jH#^@3`4f4e4aCvML\1(8&iI$kG'sM.[-Z(wO%nJ3bQfc'N>4.9%G]TgF^TkGQPSCVQ@IZZ,z;NMNA?H5[='lI7_0]0{U:zZ4tU6pS0[=k&nJ+eH1b%nIY<S8$jG1hL8`$+H:}U9Y<[rVƍXȏCz@mC=L>M5@;u5].[7jJpIw`@k:^@1J NNNF/\E6lQX;S8P5/fJ(xP*U=fEyAxy8o1b/](tO=)H8LDeY< _@!aA$jG"fDW: ^?!bB$kG){R0_,X-Z0_;~\\/r NNNNNNOS^!CKNNNNNNMNNNMMMNMMNNNNNNNMMMNNNNMNNNMNNNNNNMNMNMNNNNN=QGF ^?^>!cB#iF$kH%nJ&qK$kH'uN&qK?fhÕf͘EIRi`$&%"$#)-+ y^ʓmϝ[@h4;7+8PD]"eD-X?z\8h-,1ARNMN`)z9uXVQ5h9pVŌfMN51;+jJ){R,W _@P6>FC=AR9,D ?YLi(xP+V2d-Y'oK4mPT9^>.X){R(yQ0[9f@uE|FsHh?w@{;uRJnK3Q6W:!bB#gE$kH%lH(wP,W){R%mI&rL+U){R){R0jMC(P NMNNNNNV+k VYg|&NNMNNMNNMNNNMNNMNNNNNNNNMNNNNNMNNMNNNMNNNMNNNMNNNNNNN;fP!cB!bBZ<Y<W:S7R7T8T8 ^?V:V9B^PaH\RL)-+  &(' (+*  =eQ7lQvOÈCw7m9n=u8ARKm W<X;R7O5O5U9Q6X;+V1`0_0`4f3e/^-Y$mI68;b+|MNMNMNMNG^Y"MNNNMNNNNNNNNNNNNNMNNNNNNNNNNNNNNNMNNNNMNMNMNNMNNMNNNNNNNNNNMNMNNMNNBVLk&`C!aA ^?$kG$iF"fD\>"dC"eD%nJ"dC%oJ7rTd!""  EdT|@|Hp5g4f;rI@z=uIF=u8a-vR!_A(wO-Z.Z*~T0_+V"Z=`>KE >PF.\3d:r0`GfG]Q,3<76(sL#hEO5#P9N68@<  [O8l-W=pAy\ƐUÊGGv5`5i4d4f4e(uO{I`U.9D>7[=Z<X;U9V9W: _?W:X;!bB1a5h5j2c3e1a-Z&pK3<7"396497/10 .0/ !!N=[L$NNMNNMMNNNNNNNNNNMNMNNMNNNNNNMMNNMNNNNNNNNNNNNNNMMNMNNNNNNNNNNNNNNNNN 5D=x+zR*}S(wP$jG$jG'sM'sM+U){R1a2b7l0 <-S7B="%$Fy;g<^BbOJÆFE_ɓk͛Ip(pL,tP*|S-X2b/^1b6j-Y+U?]N15=91]5h5c/\"dC6pS1b9p2b8D>"5>:*"hF^?W:X;*_E%^A9A==HB7|ԨnϞVÌ=t3e?sC}GNĈ^ǑDy4e7f3e2c0_5G>ATK?R7Y#gE"fD!bB!bB"fD.[/]/].[*~T#gE"dCL3 I4S8!bB)zQ'uNU9h2H=-%lH_YɐRŋd̗l˜Hk)yO:FA](wP*|S/]6k0^6j9q=v2b>MECgU{1`6k7m$jG#iF&mJ>c9p7g4=8(,{T$kG#iF[=W;+mL+oM7[I= G]SUkΜkϜiΛN‡7l.\*}S8gHGQĊ@q8e3e6j7\r,30$O9W: _@ _?!aA$kH(xP'sM'uN'tN&sL&rL$kH$kH _?[=R7R7R7Q6Q6R7S8U9Y< `@"dC)W@w "$#JfX**M4Q7lIjBcSl*~T%kH*V@%`B(wO+U'tM-tP7KA Om^ulΝZĎXȏTǍSƋBz1b*{R.\9h9l6h6b3e6kD^Q-CVL6UE!`@$iF&pK%mI&pK$lH'tN/\*|R'sM$kG\=]>T8W:X;S7V9T8W:T8T8S7 _?#iF&pK%pK]>:MC-.307@<>SH"*/,BYNY;N4M4R7 `@QFHA}>wDe4$=):IAt:D?@053 Twe̘]ʒHQĉJ2d/ZAd ^?\>Z<Y< ^?!cB\>T8\>[=V9&pK,X-Z*}S W;:4^2c*~T,X*~T(xP.\4hD|\%I7'[A,fI!bB$jG+V;`.L=?+(M:"W=\>5bL{ԧmϞN‡d̗XȏZǐ5h1a5h;b0_:[5=95?:9,W1a2b+U$lH"fD$jG%mI"fD$lH%mI$jG#iF\>]>!aA#hF#iF&pK'uN!cB"dC#gE&rL!cB[=#iF,W.\&qLAXL)9F@6@; /L>G0T8"eC,X=nXaɕoϟj͛f͙g͙^xC.41 N_WPtѢtҢnПc̗JÅ^ɓX.Y.\5j7l>z\H!,40FjX*T,X+V-Z+U/^Db! /G;I1\=#hF$jG$kG)|R5\3PBE.P5T9&aD0dJoПWȎqѠf͙[ɑwӤe˗F}5h*uP0kM Jo\( Em2`'sM&pK&rL*|S*|S&rL(wP*}T*}S'tM#hE#fD"eC'uN&rL+T/\+U(xP'sM)yQ+U){R$lH(xP#gE `@"eC195 CgU2Ew^CHq\[Be5sT,Y/]-Y1`Owc?1P@M3X;\>#hE$lH+lK#eD Z=Q7O5O5U9M4Kwd̗tҢnОpРpРf”Hn6]%iH285 ?QH+U.\-Y/^,X#hF%oJ}/^,X+U+U)yQ,W$jG"eDCTL#GKX AeSRGhW&('.1/&\=!aA$lH+V6hGsED^ʓ]ʒOCz=^^  9d:tCbD|c̖lϝoПrѡrѡlϝiΛPʼn9o+V-jKmB\N#gE!eC%Z@rΟpПa˕\Ï5yW7wW5rT(bE!aAK3 I4S8"aBNo+V(xP(wO'uN'sM)yQ0^U9p2c8p1`-Y.[0^AQI"H|9E>AcY;xZm@gL†ICL'sM"eC _@#U<W: _@ _?!aA$kH(xP'sM'uN'tN%rKBz^dǕ[+aFZ<R7P5Q6Q6Q6Q6S8U9mmLr_}EXNSASJNCXMl9\JvϫA~;t>y8o1b/])vP!#"`>_-Z0X-Z6j8n3e9qWxG 0:5 =SH4A: GXO)CcRw9c5hSĊ]ʓ^ʓa˕_˔a˕Yɐ]ʒe̘(+) BXL+0. 9D>Lj[7G`S!&,) @RIh'qL0`9o9n;p8oIdW%ASJi]>+YB!_@$iF&pK%mI&pK$lH'tN/\*|R'sM$kG[<X;R7W:X;S7T8T8W:T8T8R6 _?bnFrGg>v@{yF^R0I"QIl?x7g-Y%oJ.[0_3eARI6@; ! +/-DTL+2.; ^?\>Z<X;![>"aB[=T8\>Z<U84^IO =OFT7C=5G`SK/62pJ *-+),bG'sM.\5h0^)xP%mI 8D> V{i'AQIETƌQƊQĉSƋ`˕c̗[ÎCtQm2757>:'U:)jI-dHi=RG1<7 1;6 AfS3e4g9p] 8D><_[;sWCAVK +/-0%oJ*|S0_7m?z6h>PG,2/$*'x9q4g7e Em2`'sM&pK&rL*|S*|S&rL(wP*}T*}S'tM$cC*xP,V.X+V$jG*|S3d3f*rN)yQ+Uiiy9(7<:?SH79q=wB|ZǐxBMH$jG)zR/^7m7mC`QB>PGFTM(-*#'%-:4X~ja˕XȏFMFsHkY!0_G,W+V$lH*|S,WMp\ KkB~7l;s2dE\QGdV/]0_-Y/]/],W+U.\-Y/^+W2gM0_5j6l$jG#iF(vO0`;s;h/^+WmS7{Y6A<:^w5j3d7j?WK+`E7i9p7l8n2b.\4f4g.['tM#iF5rT1a2d,X(xP&qK+U3e@y?o2d3cCjVԯس0`7ipQG40957>;1]>%oJ5g2d0^-Z+U+V(xP(wO'uN&pK&nJ0^1a*}T-Y(vO-Y1`>wEy5i@egt1aDrZ& ϧXDx:rIcV'& c`N6kh-{U)-+ ik6Koe̘mϞwӥ^ƒJDxKjK$'& @SI5$(& H^S  J[S5WseDOdZ*174QkI'-*DSK\N6j.[)zR +I1ax$jGb~.[(yPò;F@% QmJNm]TT`Œ\Ɛ^ʓc̗c̗g͙NgE6@;JiY MaWJlyӦzԧyӦrȝy"$#J[RUoΞSƌG{FbTYCr[CsY6^+V2YF22;7;IB/312V:S7M4,Q> B_Q1rR-Z/]-Y/]Bg@{3dKM3)H8@+ `@ĸ&pK0_ϭ0;>JfXdFb̖hΚlϝYȐUǍg͙[zN ,/.KbV;E@/uТsѢwӥwӥxӥvҤCOI%)' */-%GXO@! D|`9d=d'uM+V.Z$mH/83:ODB.qP.[Cs['2740QAP5P5N48@< .\D>?y\0^1a/]0_IjDlXh:VHV;`G]R@+kzW:)yQ1`bĒ`[7 Yl|LzcHdC|C~KXɏDxIlZ49F@BVLAXL&)(#'% AQIGVOFqРqѠtңpРwӥwӥfa"$#BVL6A;074>OF=>nGv:l3c2d,W+W,W(dF-tQ5c9A=$&%1jMo-aG5h0_-[8`` AZMPj9gMoD14^IC]Pl͛J3e2b9wY4=8<3eMC{BqYR>mwgkΜ\ƐJg0 =SH44\gGfL>hS+),*KiZ mrѢlϝtңkϜhΚnОeJ\S 0;5$)'5pQ-Z5dCl@w3e7i:s7jHzP@vXyC:B>EU9+V*}T(xP'sM8]K;285.}U3dK0`4oQ'sMTubwo9C>Y7cYNz:'ŸUƍ8n2c5h{CeU>:fi@`.z)I@?y[B}3aTec[oП{ԨlΜLs.62 !#"!#",0.!(wO8nKÆB}2ZW,/.Lj[ J[RQpРhΚhΚiΛlϜlϝqѠoϟgKjZ4"%#  :G@A]O(wO*|RUD}LRO]e̘RDwOzc 0TBU9$iF){R+U(wO'uN;PE2:6 &)(,0.BoX:CjV9C>"8kQ,oM&tM"eC*V@4B;36a[dǔ0P@խJÅ^ɓX.Yf̘RÊGJiY*NZ).+ :C?2J|beÓdʗ\|6fH|J?xQ@NG!"! @aO>@o_Ñ[7k7l;rJK†:r7\EEXN eg͙e͘g͙iΚmϞiΚnОwӤzԧoj/303?90>WJKFgV?/:4FgU.qP0mP+U7d:oJQƊZƏEn>uT!#" :SFd!aA]>"gE+U.[=d;gQ]>&pK(xP,W-Y1aDrZ&FUM(N6j.[)zR!!!ȥDhFvOGw^iΛlϝp˞`gpР]ʓ]ʒUŠy6?; Lg^Ȓh[~=q3e3d5g7m;hu"%$ ;_:h9hVVǎB~@|A{O‡C:s4fBQJ&2;6 kiΛiΛhΚiΛlϝnОmϞoϞsɞqšZx.X"gDS9$&%,/.1H=T8pSDmV}a\UČ@w3dD|\&J8"eC#hF"dC$jG+V;`/M>A,L3V9]>!aA%oJ$lH+V0X[@TJ CcSDiRĊHJiYy=SH;db˕XL{Bz=^^RԯnȚmƙiǗiΛTƌt͠YȐ[ɑ[ɑJ{ZAYMGD}QƊf͙UyK9p=vF~?x9qpJAj5D=0 >XK.?QHGGbTaLm\lATJB9E?Tf] jΛjΛe͘d̗f͙e͘nО`˕WȎI 4cB}K†PʼnReȖNĈ=u@xYȏIo1oP'pL/]%oJ1]I{SŋGEH\ʒ_ʔBOHOraA :f;v<_n6bL'mJ'oK+vPCcJhCn>PF(>WK*~S+V1c,X(xP0`0_-Y.[){R+{S3a0wS1YU~i]1P@M3X;\>#hE%mI(vO,XLf*I9@+J1J1P6S7X; `@'iG4{W>adBlL†4B;<[KF6{X0_0^3d/\.\-Y4f2b,W0`1b1b.]5|Y5vUsKep;\KQ7 cB!aA"fD&qL){R+V1bEZPt@+G0O5M3L3M3V92sS-Y.[-Z6j8n3e9qTqYvÜOhŖOeYP/93 ^ʓa˕_˔a˕Yɐ[Ŏ˦g͙g͙uңsѢ%)' m@|OBXLK:HAZBmZL$:WH:9f9qBgJIÅE?{FiW)4>9L'hH%mI)zQ0_-Y4g4f5i3d1a6k5h5h3e,{T7lJ…Ct+xQ$fE"dC#hE(xP'sM*}S.\DpY>-H0L3O5Q6M47TFHh@z7k-Y%oJ.[0_3dUmSiGs]y195:HBS){Q*|S-X2b/^1b6j-Y/\vB^P!#%$F[PF_SBLG&2:6!C^P-1=7?NF9F?8F?>LE4;8M(wP*|S/]6k0^6j9q=v:k;m0_+VB]OJ4@: @UJNMcX:Uxf1I`T#*/-$(&&2\5eDuQE}@~>aa6@;@0sR/]3d3e4g.[0`6j5i3e5i8n6j3e6j;mA{O‡C8p5cX;8_L3966B]O)oM+UAsZH -K<A+O6;qV:qUDy.Y1:6=3=7 Hx_hQ`ƒgɗ]ʓVǎF4B;BMo^"=FB>`ʔ\ʒNĈMćb̖X=THl?ZLB&('msѢiΛd͘e͘lϝ`ȓR{XmxPcZH%'&=b4g8o;uJ9F?*0- FWN.HWO!9?<.413=8G-WB#iF'uN-Y5i/\.[5h:r@rC|7l3eE^R%.626D=*JdeɖhΚ]ɒK4_8xX:p6l8m)dF:wX3sS>{]7cM_IF}F2:6>ZLZ=kR‰QJrVƍXȏC~=p,V2UC[<%nJ0^2c/]+U+V*|S+U1`0_5h3e5hJwFEH\ʒ_ʔANGNFpZBTK- 9]!cB#iF#hF$lI&qK#jG(nK%pJ>egf͘EIRi`$&%"$#-1/ :LC%%('BnFK†A{6j3e2c>y^ʓmϝ\Đ9j0dKX; _@!aA$jG"fDW: ^?!bB$kG){R0_,X-Z1`=h7k=oNOÈ^ʓYuATJ$(& Pk]aNI„LÇQƋa˕LiZ95D=:G@d(vO,X/_5\)sN"bB1745GcTAGu^ȓiΛc̗Pyg”_ʔVŌILwH BUL J[S$Wse-OdZ174QkH,30;HB Mo^-,40FXOH[QD`R]A]OS$)&).+ 9uXWQ5h9pVŌfJ;fP!cB!bBZ<Y<W:R6Q6T8S7 ^?V:V9B^PaH\RL(+) #%$ (+*   UmOÈCw7m9n=uZL!ElY+>PFHk̛mϝc̗`˕lϝl̛EVM! 07478hQ,W3\,W'tM$mI?YLjHGGuR{V{^Đf̘eJ~J}QPh$*/-EbS! MaW3lyӦzԧyӦrȝY"$#CMH PiRE{`fG^ɒWl@^O4,1/6A< ;PEBhU3e6k:r3eD~`ŒBVLk&`C!aA ^?$kG$iF"fD[=#bB"cC%nJ"dC$nI;mT@lVLM{cRArnJx`& B_QHv^5g4f;rI@z=uHCu)sN Z=R7O5O5U9Q6X;+V1`0_0`4f3e/^-Y)zR:mB}>xNF@In[|L}eOJÆFDV*lKZ<X;U9V9W: _?W:X;!bB1a5h5j2c3e1a-Z/WYZS:o/]*UA\N4@:;XJ%@YMPg[1Uxf:I`T'IdVaS`Œ\Ɛ^ʓc̗c̗f̘NgE;GA ,X%kI%nI(vO#gE'uN1a0]^SƋSƌ[ɑf͙eP9o+U&qL2}WRql"$# ""T|+ ;mT1b9p2c:F@!253&4#I1&kH.~V,W)vO2`3d5h.[6k=f?yA|D~HOʼnb˕K2`uDoYG-51.72'/+0dYɐQĊ]*gHY#gE"fD!bB!bB"fD.[/]/].[*~T#gE(nK7uV6vU(rM-V.[,X+XB0F;.w3dFj3d4g=wJHSƌD}Kp]* 063/-]EI|O/pOW: _@ _?!aA$kH(xP'sM'uN'tN&sL&rL$kH$kH _?[=R7R7R7Q6S7T8S8U9Y< a@"bB)W@w "!D`RO=lR‰QJ:pCd<|\DhC|C~KWƍF|.30,2/6]-Y9gIlHv^@k9~[azsѢiΛbʕ\?f7l/\%mIY;D-6aKN!$"KjZ*"%# G]R-sѢwӥwӥb3;75H}ba>SH"*/,BYNY;N4M4R7 `@QFHA}T8W:X;S7V9T8W:T8T8S7 _?#iF&pK$oJ\=8I@33?9).52BoFK†A{6j3e2c=xT}3eMC{2a/52BWM$&%c`ÑXIe0 fzgUy>p;o*|S#iFY<G0D.L3'X@RFz`oK2748F?>RH" qѠtңpР(G8dBaQ68KA%(,*:JB]E.Q6Z< ^?%oJIkNPq?c=PGA,82 /A83dK.\3e8n ^?\>Z<Y< ^?!cB\>T8\>[=V9&pK,X-Z)|RU::VG+ VoQOÈCw7m9n=u+1.XvoП{ԨoП]}Y4=81-tP:qC}K(gGC-L3,cG0fKN57%j^>y[  8,zԧf"eC `@|:HArѢlϝtң  -&nTe9F@6@; /L>G0T8"eC,X0`*/,1<7 1;6 AfS3e4g9p]>!aA#hF#iF&pK'uN!cB"dC#gE&rL!cB[=#iF,W.\&qLAXL)Hv^65g4f;rI@z=uIF=uE|a:C?2HUO,>HCC]Pr6fH|J=uP^GWO )bE8nGF~PPS^ʓ`˔f͙R7\2:65?: G[Q4FmZ4c8l,uP bO}f;jEr=OFpРhΚhΚ4I>>"%# p(H  @XL !#"N4U9 _@"fD(wO7m.304@:'Gw^>x9q4g7e9KB _[ɑOĉKFq2`'sM&pK&rL*|S*|S&rL(wP*}T*}S'tM#hE#fD"eC'uN&rL+T/\+U(xP'sM)yQ+U){R$lH(xP#gE `@"eCNFIn[bMgOJÆFE_ɓnО^}IUO%`p}=q3e3d5g6k:kl=LDY,VGNÇEOÈI…EGZȐD|7l1a,0.-8eN$jG @tZ3dD~veg͙e͘ ioc274 8F?>RH&{/" CeT(.1/&\=!aA$lH+V4eJ|cU  KkB~7l;s2dAVL'`[ɑ`ɔWw/]0_-Y/]/],W+U.\-Y/^,X#hF%oJ'sM+~T0_,W)zQ-X.Z1b/^,X+U+U)yQ,W$jG"eDCTL# hYɐRŋd̗pРd Ue]]K9p=vF~?y9rAlV8jI„RĊ@z@{;s7l>u5i-Z3d:q@UJb-Z=MER1a;skiΛiΛ'N:0%Yz]"eC `@4A;)/B\O# 3hN*~T,VJo\b A]Of>w5j3d7j;ND+#&% Vjg7tU7i9p7l8n2b.\4f4g.['tM$kG(xP,V.\.[){R-Y2c3e2c5i3e4f-Y1a'uN4g.Z#gEAUL*7?;LRƋIY}&('eȖNĈ=u@xZɐSA^O@wII:q6k.\1a,V3cBqCn.YI{b0~W #!/\:qFmZ4c8l ARJJ@QH0(,*"E^QeFaTh>QG4!5@:063>]>%oJ5g2d0^-Z+U+V(xP(wO'uN'sM)yQ0^1a0^3e5i9o7m9o7m7m9p2c8p1`-Y.[0^AQI" #" VzhbNr`n #!d{MdFOaXF~C~A}4g=m&)(8D>5Ds:p0`.[(yP*|S5fA{Jwlʛeƕ?o"H5 R Bz^Cd,0.(8eN&pK]>[?ZL"BYN',)DVM^"eD _@R7'qK@`Be@d@c5hO,\C%N:=bP9[4f9p8n8o?z>xA|C@{y8o1b/])vP!#"JllϝxӥvңTo*?PHMCo&pK0_:s5h.\Orc̗WǎXǏ6=9 @UJT0_4e4h&oJ * ARI&+) ?aP&+1.@NGW!cB ^?R7R7;F@k0a$mHX;S8%mI1wS5]'L:M4$\@HlHD=xyF^R0@UJGIa˕oПrѡmΝWzh8Pl^0Hza SrcBEk7a+}T)yQ1`?zC@|Fp[ȑQ ;lSX;S8[=CoD9p'X? _@"fD'tM?eIxB}A}A}QG:B>EU9+V*}T(xP(wO8gOu"%#2<7Ng|HF@{>z9m3`9REu8C>DXNVD}.Z]=#gE7>:(+)1`RŊFH„eMvP{;KC*9REf!aA]>"gE+U/\@j9~["gD&mI+xQ.Y1`6iBp;n-wRW:5L@<Km\!"$#>pL@tpFaT-2/#p͟hΚ^ʓEzGiXkChUd@RIFGbTaLm\lATJB9E? >~^?zEUƍhΚjΛe͘d̗f͙e͘[Bz^(,*J{G}3>8=bPa;pPf͙JvJK27']021TƌC}-Z/[F1[F-?7y  a R{+|4^2c*~T,X*~T(xP.\4hD|\%I7"eC#hF"dC$jG,W@i:tWK3L3V9]>!aA%oJ$jG-yS0gKL4H1&D5W5=9DUL9E>AcY>adBlL†:GkY+U-Y+V-Z+U.]Db! /G;I1\=#hF$jG$kG,VBmBu[>+I1L3R7Z< ^?"dC$iG)tO/Z3^#gE7>:Jo\(>_-Z.[-Z6j8n3e9qWxG 0:5 =SH4A: 3>8 :a5hSĊ]ʓ^ʓa˕_˔a˕Yɐ]ʒdʗ5>9BTJA++UB,E.9(l?t[e͘E/],VIPUǍFO7-/. C`R1sR-Z/]-Y1`Owc?1P@M3X;\>#hE%mI(uO6bX{0`G@+J1J1P6S7X; `@%oJ;iUǍFO7h-/.?QHIl@z7k-Y%oJ.[0_3eARI6@; ! $&%'+)2;6(=wB~C~[ɑ`˕d̗^ʓTŌZɑeɗQf[1! +2.2eIu_"M8G0>*7C=#&$Pf͙[ɑVƍ7l,W-XF|GJK27'~021 Ew^0^1a/]2bKcW#;XIT8!dC!aA"fD&qL){R/Z9k\{@+G0O5M3L3M3W:!aACnGJK27']021,2/ ,1. *-+),bG'sM.\5h0^)xP%mI 8D> M`V'drQXčLh7CTKCTƌQƊQĉSƋ`˕c̗ZBrOk275/83 0 FzD8C=$8ZI=)5&e8F?Ytңf͙Rŋ:r/]2b,X/]/^B,9&3B:CBVLT5h0_.\Ce|AZM!cB$lH"dC#hE(xP'sM*}S8gYy%N9H0L3O5Q6S83lO6Z+V/]/^B,9&3B:,AYM8D><_[;sWCAVK *.,1%oJ*|S0_7m?z6h>PG,2/$*'ICL'sM"eC!cB!dC"eC%nI(xP5ab];'M4M41|V=p4e5i2c,X+UB,E.9(l=MD BZMO9q=wA{U}B`RL6^u)mK(yQ/^7m7mC`QB>PG063 JkZ2HrtPʼnHA|NĈJÆIÅJ! Yka˕XȏENsد߇ذ׮Xqd- ),+ 8gOX=pVH(,*?QH`[ɑb̖iΛf͙dSjKl\BkQƊXȏeĔN4Fw^85D=% 8>;+:MD+4gRf͙F@~8o7m:r6lIu_"M8G0>*7C=08^K3966@ZL)pN7bb^Ƒ7fNB,"\?Bo?}7m7m:r6lIu_"M8G0>*7C=7B=0948\;oDLFufʗQ‰7e(oL2b1a6b$'&7A< -30@{GC}>xC~;t=w:s8n6l  /217B<8VkPk]~ŢƄ׮׮֬|ԨVnbC3:7+zR6k:rIy{DlX2x;s;r;kI}KA}>xNĈD8C="8ZI=)5&"$#8@<08MB+0.#Iz=_IxY:c)\B$eEFuI{?s=uM‡D8C=$8ZI<)!=/u Rm_YOGI{Ni̚pР]ʓ[Ď=k,W0`Ax\a9G@%(&Dev=w=x=y9p9o9o8o3e1b0^0uRd7JA!CLHӭ˦jZszի̓׭֫׭xӥuѣ@LF/4yV5hA{FRƋIÅA}2]5?:"6?:!6?:0-=5J4%s(5.K(+*  @c0`+U"dC"dCW:=).jLSAWL) _[ɑOĉMňOĉIDy2bBtHCZƏ[ʒJfF052&E/9'5:7AWL _VKzKOĉHBv2bBtGB|XŒXEt\:1?86@:AD/9':E?6l͜l͛[>qMSÊYčYȐ[ɑW7d3wU "! @e8o8o8o9q5h3e.[1}VE`Sg+0. x׮خ֬|Ԩ֪ժzԧ~թrѡa 9nK†MÇSnjPƊBx1^+V#X>2H=lC-E.=)=)6$2"%7-K ?g/]%oJ(vO `@ ^?G/2OA`CZN?QH"`[ɑb̖iΛf͙dSjKl\yBkQƊXȏeĔN4Fw^:5D= 8>;7%'& ?QH`[ɑb̖iΛf͙dSjKl\BkQƊXȏeĔN4Fw^85D=% 3861IlcɖcJ=u=wXčpРnО`˕VǍIKuIFgVnFc?b;d3d3d7zYO_W'uң|Ԩ֬|Ԩwӥ}թ}թ|ԨkϜ_ɓ?PG6>NFCZ]ʓYč=r8n9qByK59&<,>*=)?*E.>*<(&<2Y9F?F1b%nIY<S8$jG.TA375%GbT4>9#&%Vjkǘq͟^pp 4iO5]@n+jJM3#J7?\N14>9#&%Vjkǘq͟^p` 4iO5]@n+jJM3#J7?\N!Nm]TSYKHGYȐ\ɒa˕g͙oПe̘d̘XȏPh$MhZI{a! _{mNtѣxӦtңzԧtҢvҤyӦnО`˔JH{aHOl]iJB}LRÉVAc&bD4$7'[<C->)>);(=*8B=@;lSX;S8N49VHv F]Q#'% 8D>  @cl0`+U"dC"dCW:=).jL|#'% 8D>  @c0`+U"dC"dCW:=).jLS JfXdD|MJ…SƋNĈ^˓c̗hΛg͙g͙uңsѢsѢqbNeY>KD %)'^{lViΛoПyӦxӥqѠmϞvҤ]ʓJ…?uBWL/GmNÈTŌQ9b,V*}ST81nP5i _?H0K2J1!O85:7(! 7`KT9Q6053@WKBYN#?g/]%oJ(vO `@ ^?G/2OA}CZNBYN?g/]%oJ(vO `@ ^?G/2OA`CZN PraaǓjΜTnjSƌ[ɑf͙kϜuҤqѠrѡe͘^ʓVxn&)( #" Nh[CTL#'%CNI.kϜhΚe͘kΜrѡkϜe˗G?m*0-Qtbr]ȒbɕJmX;$Y>"E4!I5Ar4f-[&W?;g&rL#]@=(6F>-:F@>PF ?aP79F?;1b%nIY<S8$jG.TA375&GbT+pyglet-1.1.4/tests/image/TEXTURE_3D.py0000600013464101346420000000751611266427715015516 0ustar yohyoh#!/usr/bin/env python ''' ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from pyglet.gl import * from pyglet.image import * from pyglet.window import * __noninteractive = True class TestTexture3D(unittest.TestCase): def create_image(self, width, height, color): data = ('%c' % color) * (width * height) return ImageData(width, height, 'L', data) def check_image(self, image, width, height, color): self.assertTrue(image.width == width) self.assertTrue(image.height == height) color = '%c' % (color) image = image.image_data data = image.get_data('L', image.width) self.assertTrue(data == color * len(data)) def set_grid_image(self, itemwidth, itemheight, rows, cols, rowpad, colpad): data = '' color = 1 width = itemwidth * cols + colpad * (cols - 1) height = itemheight * rows + rowpad * (rows - 1) for row in range(rows): rowdata = '' for col in range(cols): rowdata += ('%c' % color) * itemwidth if col < cols - 1: rowdata += '\0' * colpad color += 1 data += rowdata * itemheight if row < rows - 1: data += (width * '\0') * rowpad assert len(data) == width * height self.image = ImageData(width, height, 'L', data) grid = ImageGrid(self.image, rows, cols, itemwidth, itemheight, rowpad, colpad) self.grid = Texture3D.create_for_image_grid(grid) def check_cell(self, cellimage, cellindex): self.assertTrue(cellimage.width == self.grid.item_width) self.assertTrue(cellimage.height == self.grid.item_height) color = '%c' % (cellindex + 1) cellimage = cellimage.image_data data = cellimage.get_data('L', cellimage.width) self.assertTrue(data == color * len(data)) def setUp(self): self.w = Window(visible=False) def test2(self): # Test 2 images of 32x32 images = [self.create_image(32, 32, i+1) for i in range(2)] texture = Texture3D.create_for_images(images) self.assertTrue(len(texture) == 2) for i in range(2): self.check_image(texture[i], 32, 32, i+1) def test5(self): # test 5 images of 31x94 (power2 issues) images = [self.create_image(31, 94, i+1) for i in range(5)] texture = Texture3D.create_for_images(images) self.assertTrue(len(texture) == 5) for i in range(5): self.check_image(texture[i], 31, 94, i+1) def testSet(self): # test replacing an image images = [self.create_image(32, 32, i+1) for i in range(3)] texture = Texture3D.create_for_images(images) self.assertTrue(len(texture) == 3) for i in range(3): self.check_image(texture[i], 32, 32, i+1) texture[1] = self.create_image(32, 32, 87) self.check_image(texture[0], 32, 32, 1) self.check_image(texture[1], 32, 32, 87) self.check_image(texture[2], 32, 32, 3) def testSquare(self): # Test a 3x3 grid with no padding and 4x4 images rows = cols = 3 self.set_grid_image(4, 4, rows, cols, 0, 0) for i in range(rows * cols): self.check_cell(self.grid[i], i) def testRect(self): # Test a 2x5 grid with no padding and 3x8 images rows, cols = 2, 5 self.set_grid_image(3, 8, rows, cols, 0, 0) for i in range(rows * cols): self.check_cell(self.grid[i], i) def testPad(self): # Test a 5x3 grid with rowpad=3 and colpad=7 and 10x9 images rows, cols = 5, 3 self.set_grid_image(10, 9, rows, cols, 3, 7) for i in range(rows * cols): self.check_cell(self.grid[i], i) if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/PIL_LA_LOAD.py0000700013464101346420000000072511266427715015623 0ustar yohyoh#!/usr/bin/env python '''Test LA load using PIL. You should see the la.png image on a checkboard background. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: PIL_LA_LOAD.py 661 2007-02-17 00:23:30Z Alex.Holkner $' import unittest import base_load from pyglet.image.codecs.pil import * class TEST_PNG_LA(base_load.TestLoad): texture_file = 'la.png' decoder = PILImageDecoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/la.png0000600013464101346420000004362411266427715014560 0ustar yohyohPNG  IHDR3 pHYs  tIME  8.ɀNtEXtCommentCreated with The GIMPd%n IDATx}y]WqWne,۲E-&=ŽÖ1I1b aI abH*/Xe6^zZjxwN-&O,u 8999999999#M0;,SڟiaÍ7in|O\G>?ne⟕n Gzg#.??۳9yVkp1x= c؏u,pڇs C!<8}[:/u(#]{qt+&qGs=:qgh=n=ёoϓ1V#5pݺ‹p@?ptqK1ߏK}Xa{[O꯯u_~ sfK#8%YؽI-ۭcxM5D=Vn]k{{~B L7 L+LT==k0 ՀutV34:hܞ5G9'{Hq `uwbۺʡL_PxoeM=9gŢT.:XLO_+Zu-8CCLjCGsV:QzL[,ߡj,٢ߢ񫣎[}35]||Hw-nwwuS'bVtկ'ݣ\cf-AՐm('9G߷K^Nꘟ0?%]`Mϥ;xuַf޶((ysbcw!D&un%ߵ[ձc ɨjSDcߥwɞޓ̩ .\L>>q|܇ё_¦?U<_>5i澊n}'Ϟ[]n}*>O[(R \:@Fr$7H~Dw9{sϐi:γs?(~EUx2GUFo_q/a N)!ʂ!C; :{l" W[o@h}B߇2F_:i=CLJDAzk5~,ˑunDZ{zCs>/+/-V -vGehh|7 LN9YRtZZ׋w$΍EƌL<ںkο>~{ _|<`v]{7+zW.C-⹍Q6G$'(Wݦ,} k2'a59yCWu}I~mb0#)QXj ;٫l_f Ӣ^#nL%u(0U8` bщ0LVLJ`s#MYΒ|HI7)0Td I=1of̻ݽ̲|:Y<U&g1L/R}!7R2kOCC h7hs;JZYIґYNX>k.k˹s-kRT[l ˄@(%V4^9jŔL ;d%4,M/c>6NY#K{RgXirfz#5wv39e6s[ :keV:Ny#e40)YL6`cB$* {VHP= {݆ɽ~> `HY7p[]ҽbd@^k#ߨz7T聢\ZŠbiJ#ݛ"Ĝ P2ʯ˫g9{~wh7י@#z:9& UqOwunt:wE՘Ahd(jZ2͎`A\;./*2ot\uy۝&1Yy778Xm*%MZ[w$'P5NnܡkXuvMp0l|]tVd 1~}sمo[m$=hHYQ$3I3R (_H7Tc0l-6bΪA{XqL\_ s>n-RR"8y7rg+T?=>DZ[\HozP/:h2<77T[X8^7Oquǃ.>H|2> #M#Wo[lX)Əm|S.{Y#(Rҕ7! t7V牟zn=ݕ~ٕ++*o2J6c3~b66_qL׏'eoePP2"BdB`xuLLs+u[WOscxg2QrPତ[!ڪȚƜ0P6m.N~‹ JeJ KBZ)0C!A+i0@qM(|!N@ )'aQu8?R Lm֗ZOrID CIӡdͽ`sPu `BtE{t? T"j6fϭq^s l1'`}w;^q>0FːArH̚*Qꮴ!ih$ɥ '`ZTb7&ݔtk0ݤP:$nF{OMZLͭzڗGx n$vjIj]@]R k,3iHVߐpJ.(f l`qm7 },u[wy-xhw6K7:_ %×èPR(E(w9,ʹ9n9)wc;UڈIsR"L; *l ww S,(-4@u E{:)2G#zd&E!P5|!Gqg&6k(6k1jHVE!uwDѹ\n*|c٭g%;0yXquWDGE=GqW2'ھb5(;n=+v\? M$n^ jPM[|p%3/d?vl\1Hu&[~H77#U彷ač,7gMM. #g+A++,Eyk'oJCG5"ƻ~cוľ'IVқ3>r鐳bDlN@CvhW B7օe$7VG>TEwĦUl}Yo}! $A-0FP(l ^[ |Q~CE/ EkA19? 5DnY eB:;NJg~U| 9R)9:osGU%p TK _A Ye,mB,Z 9j5*HSD̑aBކW~m\ 3zGrGԭ*6qRT> Os͵Ig[j)Ska{h*ۇ؍GE[ ZzOIr^#GPȖCp#V``vb3i;QCmBwH}?TwHgf \/9J ނ:ʁRanE"VuY$;]TZWRփ"t^$lےxCB[2F(" (`3VEG_xNbEDCǨVv) qjbn{a+y9~.$A== a~&,ɻ!]A_^SNWoq­%bOs.F麜=͎#abp.#^(`XD$'c^2th^\)m4/RˡHXLp?I+|a VCL 3Ira$}R5BJi7+' Rڭ,fӷ]{x|":J)p9 ,V4a$BBAΊdR$*0JB1l8j&ԳX`.\[R #E1#ԃs8=8Kyz54H^8uyR(qlaBz!PEEZ5`h1,-zACYTkj,!Ʀ ƀln"?⏲3P'BQLfcm?v/ŖR^o:+$ºT{[ǖpiHzU_DH4\TSs*F x5 % wY34A͖Y!zAP`xr-xT d$ރd@fOˡ`F5,bg᳌5CR4Kɣ49_٘0}6mSӰaG)2 Gt5jN ɠE  D,naNL`*9{ "o' ^QSb%DfwHjm{ʃL\(/L Ci ׽4@l^ A"JWx$ fin 7ڧFT$cˍ jukHtCO *} ^= DB5^2h `@XoRGx$66Kbg埴r^LʑR(^=7p'UIKRMGcPte$ JQzh1FjE (sc HMj)XLDaӰZ^Pa@U<tykH pHRRd) LցceRlKCS?pA9 +QD2Ww!j)xBcņרH9v&m;iI̕*q^+&J=R @\ R-poi$dr&odU`d0L2`8(u0)RdtVqv(LgNYTa2M B4-Y-hw /6b18N=LhpCK-xO.Gb:EbE0;:]OöPV>QrN;^lQK;B)所5;l=8.6Dm2hnw|ܭA'Z/VĮ@FWF"`*QME gAo{-x,8 -3kU284h9:E3BE Ć@%e)q&OiąhT8M SS]fܠˏF095nJ=mJm,Mosߧ]{U 8[sœE4 ᅍG,j.! )B4[ ,dɞA !+[>^.Y8,hXoIHFdRĮ+#j<^\RfC6leqK.ap_ ١u4]L.'O3CLajTD2V)_Wz pFVDBy^l6W.L'ÉsvEƩ)ÌDCCgBpqZZ H\5 mR*eE椺.dEsb5dxm 9`L&T[RRkMVڼAD ɑP kb8z"Dp4>tۗj dI M3^saci|1!4~key\WL(mB6j:V#(Q5)%r-?jj"7Lp2L0xEYR1I4+ 3Z1:dGgҠkv;yLYZ\gQsy%Wp}d FƭЖaSLѺV#ñQx q(Z;K'kYh㞨!r?Cg8!c}%Q-w,nN}}4t~ 4rl&e=vUd")ZeSDH=McVrc$'Qv 9ʥ#B%x4xe,D9I\nэ* 6H5l:.J<˙zM"494/ҪTP`W 2d )<<5'Š4.')E*‚S8|2mc;0lJ{ ˄fA_~u( Jz@dR8`XW )=өc-p2v2[T #%KfF>S?+XjLPu_u.ۢ IbW\ۄP3ҲhD`^:e1b'5;UHk,Y1&eԱڥ@YJhXc9AK"S-IҺ̽ g{Skuc?U> Fre-v|f85Vg9zpU0THx@&m rbb紫 ꓟ G07;tm* 1=if?LnD}8bJlH0:ne(8n'cj'kI.ɴT=Q!L:@˪D64%'?7I+U^[6mzVnBج5) 7P2&1PYˇMZC.hBE`y؞!͢քᕱ~Dj ^f4{h\`eR#4dyCNn>X.UiYY-f_oHѨ]Se gt`xeɠq[At ]>^*()zT_`(4i"u璀^ч IDAT8` pe'}$%yU|ij-N 񞹁E:H['*> %u:Y*[Vc} oUUl'4X fTV\e;NS{XkZFBJ-[>j6[miiyrZނ.5N*kAxvA+lX^R 0'^ ?FȎ7M7TS%)xިVuKe{)Gk,rnܪ- Z͠aŠ/HɧZ''InW 0h^-J*N@6 [e zW/HCz!%SߕMS;!u]ޤޠty3T22Sy؆I+T 00&hX#k#P<9 ѸY[#=z*Z1$ţTwxYw\;ƒYf36ỏ!ro8%u005&[ZDNêx&BSQ6 HfA9R2sG1v~0q sYQd ,#d JnT(.#פ ,9 _myjD3 ŮT(7Kҏe(kF\Nh]QWh҄V6qR+FNl5`t *@`^ 4A9dɠ)lj5W0MV6(o2*~Pb#?靽"iŬ 0Zf=fKS IA2R)x!.*QZ} {F~8Hy`QkzR;ne<9%-6*LSf#U>$>+Ik>l!l nρ\ܔIJhoD+Š[ORnt`vmE7Mȡ!B6:nƓ_6196kESMurR(1w2 ⡲67mNU3p5}b\X~ T3f$;E  N)kAх~WQֱ)fPghSer&WT%dX6jCr|hd,8/04}EHi|!O-Y8/r/x(9-[6F2>䲴4DaVET#ɅQI8_)Dsh@6lđ A$(]7CYg'hqA@o2t=]I4)aPn?oYь)&jy yψĤ`" wEj $l2H̨+ZL5+]YuM2xHPz)㹙tSPA߳M oA*2Z0 \ØQ 29gs2”ƷRo7(26EγQ}[Lx!O^e|q[R(鶚j)m^lg=_kFێ HloF2(۶ťKj<+C]&GOJol^9M+6fqxIs|fd Z R#,?K] аb2c`9h2SUB{\A :mBCYBK#`p`62 &t{!"/(KԥL2(PŲglB,Nw}EҮI3אwA׼ 53tK± HJhLx6?9Zw p8SR(c!Be kڐ[x9hB{|!5TaA P_QcCl0ећ-"7MPTP_, XIVR<&t~ؘl$z˰e/ T0+ej[yƂwy=/6FFy)I'kܰDu2 `;qL#`VsU(UD'\ a㱦( hJRT[9߬T'tgT~_s yHHǺZ,lqτf@*nngzm͕Q뼄:  aּ?Te$2+.k愷ڈ(ܠX_ؐM oBHh3Q#LΡU,6uv]MB1]/1P|_:n!:A;A!n%#'UEPVo P*vcfeKFFYu)WH+N0ޙ憜Z٩e Q\&J,3od !T)0) ɇ=~Ι܆u&ߓqP>Tiy ,D)Cg> u~I<乔ζ^P{!@Xyʛ}d-KI3?SqN֣:}Ӏ 3)QTgc !13g*$VnłArIh:5Ÿ'pD#ǹ!!CZBgcj'gGi Xypxt,(eKaI&`*)b]8A& $o0Y.L)VJP:XS/rpKhF92[u就Rfz_Egαx)JV 5SXM[ ֶ{rHt1"$4\w=On '5(Ų(#R@cP h.& ؼt^K1tdIGm7ifRk~BՆoLTZBnd@SÞd og}xS] WP uqpz.iZié&)Pb+8+nX ɣ[Oyg|n}]k$ $hgĬH XQ)P0y5Cr!J8 rJaQ̵4ԨomrXj(2)R5 Z"J-dƷ8Ok0`8jrHGitʲhM4˶ԅuYaf ο(˙R>EaPQ][T!tXu]V]T-8C gm={WFӘ%L)lѠ|=LV9 /PH 3ѪncbTz<խ4 u.2!/d$ۀ{?vtPfRMΊLF4]5Tj^;q)g8*C7sTMz-X @Y5rK$5&H]gX&UrIguR!!&晽L`M؊(y)M6H}zfRnȅe5QcXwT#*[ԳYٮT,䌚賦`ڥ*U8\ ֯M 0+aauG lq;P¡J+-lV(k  7to#~+M[Ö<2 G60#\K3<X. z[P[lR_J  :\ߔ}d?& Fwɷ EfN`|SkT{р%lۀ!t&;_ x |bEut:8DqԲSooX6/G[XCӗl>{/׭D>NAO=ai=7HȽEOذi6lz-D@-[h mCQ IЋBԞkz~h-ZC\qѾ<˷z&mRޞr @o-i>ro_{⽟|L|֚8vEӏݵNQgC* ;OOkx1}m>z;z쎹= ]hdVI̋O:JPleS7 D3nXz9fH$3:r$ ޿{ם7זvz%- A`e5GusGkO4x. 'nНVeB"gn|{w`ekAv;|ϟ>r{'oZ(TJD% .Ji';j{sAZx*0}GtNܸs.p㧏dq-vG$ ޽og;0S8y-'N=Tw4qq|'uΓ&O>X5gN;=y -<'mɏ.]!}&޽}rhfn`6Ll2gm>.j@־,fkHqM9t#gwK>服XhAޅR}8Z0Sw "uϻm0MlS4Mngٔ'Nb{oZ5玅dJ厖h4P U=Fx[?>ldwjGw%h2Fh*3q`||eyP6CiLv˫{V@ >\?],u#{@_[_y;]i~w 7d={{W:+X]VN ѡAw*HYHF!<嘫>0-M Síw6F/6bw?_[<Du]\~T`9VHsREuϝl i@}բí'v!<e]Gk4( <h:O{u-;.2MOx~eTYiq0\H_r }}9{ |~ K֝Z<Ӌz1죁p@~66yڅ`k>W92hZT&aHvjAͥH!W,x>&V r߅#fͼq˻>`,}n)a˥d7M_8OR+dY8h散'zD̞gu~2ᑏ=ВΜvC/mqos?7>7e]EǽD;aݽyd>0ׂ@ ,T'VZ{Fn{|z+A>!MN$JllɹWXzLE̢l  j lTlԫG]YWI#ʩrgR ɟ+nZ81)YlMt}XpX=ى, nZ_\rs&:ƔĮh)K4VJBcIXVL,%G\ pz?`h`WPǡ ^hG¤_s,9PMGʻ<J-߃.L '[=l2a67?{βkVdx0 ]pWŻÖ›m\9wu+ߴ~ Кz%^ agAkhͦs(%zݒg]Mi5λrOI/\5g+.^=9hU'jM߶h Q]SjŻ]w`Ż[/9 ` rw-{Yy6{O^3sݼͻyO==wX:x^0=ཷoq~Q0T/cVW+?)$y/}} lH9nj~tԁ^M>w\)1l{x5CA, &v 8н^x; } `w|dR}W^ `b#zu0 /!\?xh3Ν̃ '[,9pd8Cpx|Zl_8P>IH]9y޹݃{/ok~n1';Ѧ8vn+`ЉSԷ0=GM}҇{ci`GqZЯ~h7LGӚ{sh xgĥZf^NYrW 8~zS/<}Jv,U`|{U,w-/~f,h sopG-5dHR9v_dW>nN\DjbJ4$5&o!!.Q+svNJx/W=<ȃe~)1Ќ# 0%#Et0Xdr(NGcQahV]Ѫ&*SS#zئ)_1W[JCjœCme r)QS1&kǏ\ .>m嘰6SSN.x ESOB T&DHEgZDEFyV &ݡVt7Y~%'̘;A;1'ైffMX}7a]Z55_JWgVT;yyE`jS[X7Z+!E2 s =`AVyq0rg蜓neK|lحǰQ@ha98ނX0ĥ؄yM7DGeXe]ٿw?L,lbOVb?N{81 '[mκ{)33?[]s䫫}+uw-Q? e=']i79ԴU#!0L)18:w#nS#DZR/F{߃|1/x o~d;N3ލ{6ىԴUϳHmu{$ oe133of0D~%\>ffu}=Kٙrg-#=aJO`0Q϶UCNWY=<6~ZlWFNM  ܧ?IzVyO sW*Te֭EMS6 :~5|t4~gnIzV=g=V'5rYz#RZ!K&$S[ q+p8+x˽}ezyJގM.ȶgg^껗T-+Giu3᙮(;#2m sWj wڪN{~/%mk|,oC|)|˸ŋL~+ߜ]=rgZ&޶0w%A~sy̿CUu[廕}fVH<~tn=|d9_dhEIENDB`pyglet-1.1.4/tests/image/PYPNG_RGB_LOAD.py0000700013464101346420000000067111266427715016212 0ustar yohyoh#!/usr/bin/env python '''Test RGB load using PyPNG. You should see the rgb.png image on a checkboard background. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest import base_load from pyglet.image.codecs.png import PNGImageDecoder class TEST_PNG_RGB_LOAD(base_load.TestLoad): texture_file = 'rgb.png' decoder = PNGImageDecoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/BMP_RGB_16BPP_LOAD.py0000700013464101346420000000100611266427715016574 0ustar yohyoh#!/usr/bin/env python '''Test load using the Python BMP loader. You should see the rgb_16bpp.bmp image on a checkboard background. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: BMP_RGB_16BPP_LOAD.py 2002 2008-04-12 10:59:20Z Alex.Holkner $' import unittest import base_load from pyglet.image.codecs.bmp import BMPImageDecoder class TEST_SUITE(base_load.TestLoad): texture_file = 'rgb_16bpp.bmp' decoder = BMPImageDecoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/rgb_32bpp.bmp0000600013464101346420000072776211266427715015752 0ustar yohyohBMF8   NNMMNMNNNNNNMNNNMNNNNNNMNNNNNNNNMNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNMNMNMNNNNNNNNNNNNMNMNNNMNNNMNMMNMNNMNMNNNNNNNNNNMNNNMNNNNNNNNMNNNNMNNNNNNNNNNMNNNNMNNMNNMMNNNMNNMNNNNNNNMNNNNNNNNNNMNNNNNMNNNNNNNNNMNNMNNNNMNNMNNNNNNNNNNNNNNNMMNNNMNMNNNMMMNNNNNMMNNNNNNNMNMNMNNNNMNNMNNNMNMNNMNNNMMNNNNNNNNNNNNNMNNNMNNNMMNNMNMNNNNNNNMMNNNMMNNNNNNNNNNNNNNNNNNNNMNNNMMNNNNNNNNMMNNNNNNNMMNNMNNNNNMNNNNNNNNMNNMNNMNNMNNNMMNNNNMNNNNNMNMNNNNMNMNNNMMNNMNNNNMMNNNMNMMNNNNNNMMNMNNNNNNNNNNNNMNNNNNNNNMMNNNNNNNMNNNNNNNNNNMMNNNNMNNNNNMNNNNNMNNNMNNNNNNNNNNNNNNMNNNNNNNMNNNNMMNNNNNNNMNNNNNMNMNNNMNNNNNNNNNNNNMNNNNNMMNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNMNMNNNNNNNMNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNMNMMNNNMNNNNNNMNNNNNNNNNMNNMNMNNNMNMMMNNNNNNNMNNMNNNNNNMNNNMNMNNNNNNNMNNNNNNNNNNNNNNNMNNNNNNNNNMNNNMNMNNNNNMNNNMNNMNNMMNMNNMNNNMNNNNNNNNNNNMNNNNNNNNMMNNMNMNNNNNNNNMNNNNMNNNMNNNNNNNNNNNNNNNMNMNNNNMMNMNNMNMNNNNMNNNNNNMNNNNNNNNNNNNMNNMMMNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNMMMNNMNNNNMNNNNNNNNNNNNNNNNMNNNNNMNNNNNNMNNNMNNNNNNNMNNNNNNNNNNNNNMNNNNNNNNNMNNNMMMNNNNMNMNNNNMMNNNMNMNMNNNNNNNNMMMNNNNMNNMNNMNNNMNNNNNMNNNNNNNNNNMNNMMNNNMMNMNNNNNNNNNNMMNNMNMNMNNNNNNNNNNNMNNNNNMNNNMNNNMNNNNMNNMNNMNMMNNNMNNMNNNMMNNNNNNNNMNNNMNNNNNNNNMNNNMNMNNNNNNNNNMNNMMNNNNNNNNMNNNNMMNNNNMNNNNNNNNNNNNNMMNNNNNMNMNNNNNNMNNMNNNMMMMNNNNNNNNNMNNNMNNNNNNNNNNNNMNNMNNNNNNMMNNNNNNMNNNNMNNNNNMNNNMMNMNNNMNMNNNNNNNMNNNNMNNNMNMNNNMMNMNMMNNMNNMNMNNNNNNNNNNMNNMMMMNMNNNMNMMNMNNNNNNNNNNNNNMNNNMNNNMNMNNNNNNNNNNNNNNNMNNNNNMNNNMNMNNNNMNNNNMNNNMNNMNNNNMMNNNNNNMMNNNNNNNNNNNNMNNNNNNNNMMNNNNNNMNMNNNNNNNNMNNMNMMNNNNv89%ANNMMNNMNMMNNNNNMNNMNNNNMNNNNNNMNMMNNNNNNNNNNNNNMMMNNMMNMNNNNNNNNNNMNMNNNNMNMNNMNNNMNNNNNNNNNNNMMNNMMMNNNMNNMMNNNNNNNNNMNNNNNNNNNNNNNNNNNMNNMNNMNMNNNNNNNNNNNNNNMNNNNNNNNNNMMMMNNNNNNNNNNNNNNNNMMNMNMNNNNNMNMNNNNNNNNNNNNMMNNNNMNNNMv7& INMNNMNNNNMNMNMMNNMNNNNNNNNNMNNNNNMNNNNNNNNNNMNNNNNMNMNMMMNNNNNNNNNMNNNNNNNNMNNNNNNNNNNNMNNNNNNMNNNNNNNNNNNNMNNNMMNMNNNNNNNNNNNNNNNNMNMNMNMNMNNMNNMNNMNNNNNNNNMNNNNMNNNNNNNMMMNMNNMNNMNMNNNNNMNMNNNNNNNNNNNNNMNNMNNNNNMNMNNNNNNNNNMMKi4g4NNNNMNMMNNNNMNNNNNNNNMNNNNNMMNNNNNNNNMMNNNNNMNNNNNNNNNNMNNNMNNMNNNNNNNMNMNNMNNMNNNNNNMMNNNNNNNNNNNNMNNNNMNNNMNMNMNNMNNMMNNNNMNNMNNNNNNNNNNNNNNNMNNNNNMNNNMMNMNNNNNNNNNNNNMNNMNMNNMNNNNNNNNNNMNNNNNNNNNNMNNNNNNNNNNNNMNNNNNMNMNMNNNNNL$) LNNMNNNNMNNMMNNNNNNNNMNNNNMNNMMNNNMNNNNNNNNNMNMNNNNNNNNMMNNNNNNNNMNMNNNNNNNNMNMNMNNNNNNNNNNNMMMNNNNMNMNNKX/%&X/KNNNDI*#( `1LNMNMy9C(' %<&e3DNNCY/1# !5$e3KNNNNNNMMLb2) #J+ENNNNMNNNMNNNNs7h3MNNNNMNNFI*%NNJg46$!!6$h4KNNMNNNNNNNNG;NNNNNMx9C(' %<&e3DNNNNNMNJg46$!!6$h4KNNNNNG4$NMM8%FNMMNMNNNNNNNNNMNNNNNMNMMNNNNMNNNNNMNNNNMNNNNNNNNNU.O,NNG& R-NNJ>'MNK+NMNNNNNMS-' GMMNMNNMMNMN{:a1NNNMNNNNNF)NI2#4#INNMNMNNNNN`1<&NNNNJ>'NMNNNNI2#4$INNNMo6FNGn6MNNNNNMNNMNNNMNNNNNNNNMNNNNNNMNNNNNNMMNMNNNNNNNNN#BKb2MNW/P,JJO,NNd2A(DLKDu8<&NNF)>IM@ NNNMNMNMO,IJP,X/NNMMNNNNNN<Y/MNNMNMNNNN#CNMN\0R-JIO,^1MNNMNMNMNI#( BNNNd2A(DMJDt7<&NMNNNN]0R-JJO,^1MNNN:%s7Nv89%MNMMNNNNNNNNNNNMNNNNMNNNMNNNMNNMMMNONNNOONNNNOOOO&@NMON+!GOOGNN."HOOOONNNOOOLCq7+!NOOOONOOGNNH,!NNOOOONNO>R-MOOOOOONOOONNOO-"HNOG."NNNOONOOOm6=S-OOO."GOOONONNOOONN-"HNOH."ONNG3$D)NE)3$FNNNNOOOOOOONOONONNONONNOONNNONOONONNNOOOPOOOOPPOOOO^1OONOPOPO OOEB(v9OOPOOOOONOONOPPPNOOOO!K,OOOOOOOOPOPOOOOONOOO OOPOOOOPN*!@(O1# KOP OOPPOONOON POOm7=&H%=m6OOPOOOPPPOOOOOOOOOOPOOOOOOOPOPOOPOOPPPPPPPPPPPPPPPPOq8;'$ PQ+!IPPIPP."& PP7%4$Q.n7GPPPPPPPPPIPPI,"QPPPIPNPP+!E*NPQPPPPPPPQPPQPP,"IPPJ."PPPPQPPPy;s9Pj6j6PP."& PPPPPP-"IPPI."PPP8%LL,L,L,L7%PPPPPPPPPPQPPPPPPPPPPPPPQPPPPPPPPPPPPQQQQQQPQPQQQQQQg5GOOE5%QQV0N-LLN-QQ_3p8MO>O-QQ FOK~=@)PPQQQQQQM-LMO-W0QQQQR.N>-"QQI.";'KQPQQQQQQQQQQPQ\2P.LMO-\2QQQQQQQP3$JQI*!OQ`3p8MO>O-QQQPQQ[2P.LMN-]2QQHC*Qu:u:QD*HPQQPPQQQPQQQQQQQQQQQQQPQQQQQQQQQQQQQRQRRRQRRRRQRM-x<RQK' S/RRM8&,"KQQF+QQRQRRRQR/( KRRQQS/a4QQRK2$2$KQRRRRQQRRL2$3$MRRRQRRQA='RRQ>(?QN8&,"KRQQRRRM2$3$MRQj7s9RHHQr9j7QQQRRRRRRQRQRRQQQRRQRRRRRRRRRRRQRQRRSSSSSRSRRSSSl8' A)?SRRRII,#)!`4PRSRPm8;'$ 2$_3MRRRO`43%! 3%]3GSRRRRRRRP`4)!#I,IRRSRRP]3& & X1PSSRSM6%,"ISRSRSRRSRNe66%"!5%e6NRRSSSSRR?)o9SSRv<=(SSQm8;'$ 2$_3NSRRRRSRSNe66%"!5%f6ORSR6%KSS*!*!RRK6%RSSSRRRSRRSRRSRRSSRRSRSSSRRSSRSSRSRRSTTTSSSSTTTSTSSSTSSSSSSSSSSSSSSSSSSSTTTSSSTTTTTSSTSSSSSSSSSSTSSTSSSTSSTSSTSSSSSTSSSSSSSSTSSTSSSSSSSSSSTSSTSSSTSSTSSSSSSSSSSSSTSSSTTSSTSSTSSSSSSTSSTTSSSSSSSSSTSSSSSTTSTSSSSSSSTSSTSSSSSSSTSTSSSTSSTTSSSTTSTTSSSSSTSTSSSSSTTTTTTTTTTT' ESTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUTTTTTTTTTTTTTTTTUUUUTUTTTUUV2UTUUUUUUUUUUUUUUUUUUUUUUTUTUUTUUTTUUUUTTUTUTUUUUUTUUUUUUUUUUTUUUUUTTTUTUUTTTUTUTTUUUUUUUUTUUUUTUUUUUUTUUTUUUUUUUUUUUUUUTTUUTUUUTTUUTUTTUTUUTUUTUUUUUUUTTTUUUUUUUUUUTTTUTUUUUUUUUUUUTTTUUUTUUUUUUUUUUUUUTUVUVUVVVVUUR\4,"VVUUVVUUUVVUVVVVVUUUUVVVVUUVVVUVUUVVUUVUVVUVUVUUUUVVVVVVUUUUUUVVVVVVVUVUUVUUVVUVUVUUUUVVVVVVUUUUVUUUUVUVVUUVVVUVVVUUUUVUUUUUVVVUUUUVUVVVVVVVVVUVVVVUVVVVVUVUUUVUVUUUVUVUVVVVVVUVVUVVVUUUUUUVUVUVUVVVUVVVUUVVVWVVVVWWVVWVVVVVVVVWWWWVWVWWWVWVWWVWVWVVVVVVVWWVVVVWVWVVVVWVVVVVWWVVVVVVWWVVWWVVVVWWWVWVVVWVWWVVVVVVWVVVVWVVWWVVWWVVWWWVVWVVVVWVVVVVVVVWVVVVVVVVWWWWVWWVVWWVVWVVWVVVVVWVVVVWVWWVVWVVVWWVVVVVVVVWVVVVVWVVVVVVWVVVWVVVVWVWVVVWVWVVVWWVVWVVVVWWWWXXWWWWWWWWXWWWWWXWXXWWWWWWWXWWWWWXWWWXWWWWWWWXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXWWXWWWWWWWWWWWWWXWXWWWWWWWWXWWWWWWWWWWWWXWWWWWWWWWWXWXWXWWWWWWWWWXWWWWWWWWXWWWWWWWWWWWWXWWWWWWWXWWWWWWWWWWWWWWXWWWWWWWWWWWWWWWWWWWXWWWWWWWWWWWWWWXXXXXXWXWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXWXXXXXXXXXXXXXXXWXXXXXXWXXXXXXXXXXXXXXXXXXXXXXXWXWXXXXXXXXXXWWXXXXWWXXXXXXXXXXXXXXXWXXXXXXXXXXXXXXXXXXXXXXWXXXXXXXXXXXXXXXXXXXXXXXXXXXXWXXXWXXWXXXXXXXXXXXXXXWXXXXXXXXXXXWWXWXXXXXXWXXXXYYXYYYYYYXYYYYYYYXYYXYXXXYYYYYYYXYYYYYYYYYYYYXXYYYYXYYYYYYYYYXYYYXXXYXYYXYXYYYXXXXXXYXYYYYYYXYXXYYXYYXXYYXYYYYXXYYYYXYYXYYYYYYXYXYYXYXYXYYXXYYYXYXYYYYXYYXYXYYYYXYYXYYYYXXYYYYXXXYXXYXYYYXXXYYYYXYYYXYXYXYYXYXXXXXYYXYXXYYYXYYYYYXYYYYYXYYYZYYYZYYZYZYZYZZZZZZZYZZZZZZYYYZZYYYZZYZYYYYZZYYYYZZYYYZZYYZZYYZYYYYYYZYYYZYYZYYYYZZZYZZZYYYZZZZYYZZZYYYYZZYZYZII/'!(!D-|DZZYZZYZYZYYZZZYYZYZZYZYZYYZYZZYYYZYYYZYYZYZZYYZYYYYYZYZYZYYZYZZYZYZZZYYYZYYYZZYYYYYYZYZZZYYYZYZZZYZYZYYZZYYZZYZYZZYYYYZ[Z[ZZZZ[[ZZ[ZZZ[Z[[ZZZZZZ[[[ZZZZZZZZZZZZZ[ZZZZZZ[[Z[ZZZ[[Z[Z[ZZ[[ZZZ[ZZZZZZZ[ZZZZZZZ[ZZ[[ZZ[ZZZZZZ[[[ZZZ[[ZZZN1ZZ[ZZ[ZZZZZZZZZZZZ[Z[Z[[Z[ZZZZZ[ZZZZZ[[ZZZ[Z[ZZ[ZZZZZZZZZZ[Z[Z[ZZZZZZZZZZZZZZZ[Z[[ZZZ[ZZZ[ZZZZZZZZ[ZZ[[ZZ[ZZZZZZ[[ZZZ[[[[[[[[[[[[[[[[[[[[[[\[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[E.IWYK/$tB[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\[\\\[\[\\\\[\\[\[\\\\[\\[\\\\\\\\\[\\\\\\[\[[\\\\\\\\\\\\[[\[\[\\\\\\\\\[\\[\\\\\\\[\\\\\\\\[\\[\\\[[\[\[[\\[[\\[\H=+[\[\\[\\\\[[\\\[\\[[\\[[[\\\\[\\\\\\\\[[\\\\\\\[\\\\\\\\\\\\\\\\\\\\\[\\\\\\[[\\\\\\[\[\\\\\\\[\\\\\[\[\\\[\\\[\[[\[\\\]]]]]]\\\\]]XR4$ % R4X]\NS5/% 2&^:Y]]]\\]]]YR4$ % R4X]\]]\]\]Z[8(""E/Q]\]YR4$ % R4Y\\\Zg=8)# ;*~G\]\]]j?a:]]RF/#(![9W$ ]]]]\]]\X`;3'! 4'`;Y\\\YT5% % Y8Z]\]\]\]\QE/"'!Z7Z]]]]]]]]\SE.$ \]\\]\YR4$ % R4X\]]TE.$ \\]]\\]]\\]]]]\\]]^]]]^^]]]]]^]]O3J1]^F/]]^]]]^^P4J1]]]]]]]^N3&!T]]O4J1]]X5(]^]^rCZ8]^U'!N3]]]^^]]X0%1&W]]Z8N3]^^]^]]T%!M3]^^]^]]]^A-]]]]]]O3J1]]]A-]]]^]]]]]]]]]]]^]^^^^^^___^^^_^^#NZZ9^^A.|IX\M _^^^_^_^#NZ[9^^^^^^^^J1XYJ1R5^^#NZ[9^^Y89*R\UQ5^^^wFS5]^^R5J1YXG0^^^^^_^U7L3YYJ1W7^^+#yGZN3^^_^^^^P4J1YYJ1^_^^^^^_^"Q^^_^^^^^#NZ[9^_^"Q_^^^^^^^^^^^^_^_^^^______^____^___% K\\____[Qh?)"________% K]\________V_^V*#__% K][__+#S__^___}JL3^___*#V__U_^_____+#V__U,$__]_V_^_____*#V_^U___^_^^_^_________% K]\_____________^____________```_`_`_`___W8`_S>,kB_`_`__``W8_````_`___`]``W8``]`__`_` F0^````_`_^``_```___`]````_``__```^`_^`_```````````_`___W8`````_``_____`__`_``````aa````a``W`^`a^g@8*# `a4(1&K3f@T``a``a```_g@8*# ```aaaaaW`aW*#`a_g@8*# aa+$T``aaaa)#@.\``a`*#WaaW``U```a+#X``W,$``a```aW`^``*#W``W`````aa``````Wa]``^g@8*# `````aaa`aa`aaa`a``a`a`abaaaaaaabL4]vI+$aab^=U__R2'aa S`YtG<,baaaabbaa^=U__R2'aaaaaaabH2\[I2Q6aab^=U__R2'aaW97*T_VM5baW,$8*[baaP6F1\[F1bb;,VaaaT8J3\[I2U9baaabbbL4]vI+$aaO6I2\[H2aaaaaaaaaaaaaL4]vI+$aba^=U`_R2'aabbbbaabaaababaaaabaaabbbbbbbbbbM5Y;bbbG2mEbbB/bbbbbbbbbG2mEbbbbbbbbL4'"YbbbG2nEbb]4(bbbY0&0&YbbY'"L5bbJ3b\/&0'\bbbbbbbM5Y;bbY&!M5bbbbbbbbbL5Y;bbbG2nEbbbbbbbbbbbbbbbbbbbcbcccccccc`V:%!%!Q7`bcbc@&!=-sIbcc^X;1'! 1'U:ScbcccbccbcA&!=-tIccbbcccbcaY;'"" D1Wbccbc@&!=-sIcccc`dA7*# <-zMccbc\4(*#VccXE1" '"X;acc_W:("bc^]=3(!!2(^>^ccccbccb_V:%!%!Q7_ccbWD1" '"Y;abbbbccbbc_V:%!%!Q7`bcccA&!=-sIccbccccccccccccbcbcbccdcddddcddcdcddcddddcddddddcdccdccddcccccddddddddcddcddddcddddcdccccddcdcddccdcccdddddccddcdcddcdddccdddcdddddcdddcccddcdcdddddccdcdddddcddccdccdcddccdddcddcddccdccddcdcdddccdddcccddccddccdccddddccccddcdddcccdddddeededddddeddedddddeddeddddddddddeddddededdddeddeddeededdddeedeeeedddddddedeeeddeeddddddddeddddeddeededdddddddeeddddddddeedededeedddddeddeddeddddededddedddddddeeedededddddeededdeededdeddddeeeddddeeddedeeddeddedddeddeeeeeeeeeeeeeeeeeefffeeeeefeeeeeeeeeeeeeeeeeefeeeeffeefeeeeeefffeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeffefefeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeefeeeeffefeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeefefeeeeefefffefffffffffffffffffffffffffffffffffffeffffefffffffefffffffffeffffeffffffffeffefefffffffffffefffffffffffeefffffffffffeffffffffefffffffffffffffffefffffefffffffffffefeffffeffffefefffefffffffffffffffffffeffffffffffffffffffggfgfggggffgggffgfggfggfggffgfggggfgfgffgfgggggggggggfgggggfggfggfggfggggfggggggggggggfgggggggggfgggggggfgfgggfgggffggggggggffgfggfggggffgggfggfggggfggggfggfgfggggfgfgfgffgfgffggffgggggfffgfffffgggggfgggfggggggggfgffffggggfggggggfggggggggghgggghgggghghgghgghghgghgghghhgghghhhhhhhhhhhghhhhggghggghhhhggghhghghhgghhgghghgggghhgghhhhhggggghhhhhhhgghghghhgggghhgghhhghghgghggggghgghghgghghhggggghghghghgggggghhghgggghhhgghhghhhhghhghhhghhgghgghgggghhhghgggggghggghghghhhghhhhhhhhhhhhhhhihhhihihhhhihhhihhhhhhihhhhhhhihhhhhihhhihhhhihihihhhhhiiihhhhihhihhhhihhhihhhhhhhhhiiihihhhhihihhhhhhhhhhhhhhhiiiiihihhihhhhihhhhhhhhhihhiihhhhhhhhhhhhihhhhhhihhhhhhhihhhiihihhhhhhhhihihhihhhhhhhhhhihhihhhhhihhhhhihhhhhhhiiiiiiiiiiiiiihiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijjijijjiijjijijjjjjjjjjjjjjiiiijjjjjjijjiijjjijjjjjjiijjijjijjjjjjjjjjiiiijijjijijjjiiijjjiijjjjjjjjiiijjjjjjjjijjjiijjijijjjjjjjijjjjjjjjjjjjijjjjjjjijjjjijijjijijjjjjjjjjjjjjjj{UC4&"'#?1pOjjjijjjjiijjjijjjjijjijijjjjjijjjjjjjiijjjjjjijjjjjjkjkkjjjkkjkkkkkjkjkkjjkjjjkjkkkjjkjjjkkkjjjkjjkkjjkjkjkjkjjjkjkjjkjjkkjjjkjkjjkjjkjjjjjjkjjkkkkkjjkkjjkjkjkkkjkjjkkkkjkjjjjkjjkkkjjjjjjjkkkjjjjkjkkkkjkkkkjjjjjjjjkjkjkjkkjjkkjkH7jjkjkkkkkkjjjjkkkjjjjkkkkkjjjjjkjjkkkkjjkkkjkjkkklklkklkklkkkkklllklkkkkklklllkkkkklkkkkkllklkllkklkkkkkkkkklllllllllkkklkklllkkkkkklkllkkkklkkkkkklklkllklkkkkklkkkklkkkkkkklkkkkllkkkkkklkkkkkkkklklklkklklklkkkkklklkkkkllkkkkll@3yUgh|W,&iLkklllkllkkklkkkllllkkkllkkkkllkkkkllkkkkllkklkkkllmmlllmlllllmllllllllllllllllllmlllllmlllllllllllllmmllllllllllllllllllllllmllmlllllllllmlllllllllllllllllllllmlllllllllllllllllllllllllllllllllllmllmlllllmlllllllllllllllllmmlmmllllvT9.lllmllmmlllllllllmlllllllllllllllllllllllllmllllmmmmmmmmmmmmmmmlmmmmmmmlmm~[M;-' 0)VAhmmmmmmmmllmlmc%"I9mmjjM@3($ *%>2\E^mmm*%C5uUmmlmmmmmmmb?3#!lmkfK;0%"#!6-VA]mm~[M;-' 0)VAhmlmb@3#!lmmmlmmmmmmlmmmmmhK:#!$!K:hmmm`A4" &#T@f#!mlmkfK;0%"#!6-VA]mmlmmmmmmlmmmmmmmmmmmlmmmmmmmmlmmlmmnnnnnnnnnnnnnnnmnnnnnnnmnmA4nnnnnmnmmnnnl;1-'ina1*nnneKnnmnnmmnm=1nh7.nmA4mmm=1nnnmnnnmmnnmnnmmnI9D6nnd&#H8nmi7.nmnnnmmnnnnnnmnmmnnnnnnnnnnnnnmnnnnmnonoonnnnonnnoonnnnonnnono=1qSgmyZnonnonnoooon_I|[oj+&?3zYknbonnnohZE*&oononoooo! _onnTA9/^lk^bJ5-on=1qShlyYnnn! ^nnnooonnoonnnnonono" {ZiSAnoL;D7ghB5noTA9/^lk_bJ5-oooonnonooooonononnnnnnonnnoonnnnnooopooooooooooooooooooooooopook~^_I($oopooooooomtW! SBooZE@4nooopoopoopl ooooooooooooo*&doooooopppoj~^_I($oooppoopoopoooooooooooo$!sVmmoo)%doocpo+&dooooooopppoopooopooooopoooppopoooooooooooppppppppppppppppppppoppppppa:0bKpppppppppH:npp2+{]ppppppppppjZF=3pppppppppppppppa:0bKpppppppppppppppoppoppppP?ppoppnpppppoppppppppppppppppppppppppppppppppqqqqqqqqqqqqqppqpqqdqnqpqq2+/)F9]HbqpqpqqpqqqJ<mqq! mqqqqqq6.gqqqqqpqqqqpqq*&$!qq2+/)F9]Iaqqppqqqqqqqqqqqpfqneqppqn^J4-" qq($epqeqq*&$!qpqpqpqpqqqqqpqqqpqqqqqqpqqqqqqqqpqqqqrrqqqqqrrrrrrqrqrF:mkS)&rrqq}_phiR80qqqrqqrqrqqkO@QBrr! oqqrqrr u[rqrrqrqqrrrqrqQA^JlnkSD8rr}_qiiR80rrrrqqrrrqrqqrrH:mmUF9mmU*&rrrVDbpp{_/*qrJ=A6kk@6rrQA^JlnjSD8rrqrqrrrqrqrqqqqqrqqrrrrqrrqrqrrrqqqrsrrrsssrrrrrrrsrrrF:QBrrrr=4sssrrsssrrrrm'$sr1+{`rssrssrrsrrsqhR2,rrsrrrrrsrl2,(%gsr=4rsrssrsrssrF:^K)%TDrrsB7cOrrg%#F;srl2,(%grrrrsrrssrrrssrsrsrrsrssssrrrrsrsrrrsstsssssssssssssssspNA$"$"J>ostssmPB.) .)N@z`ssssssssssssnssUFC8sssssssssssssossssssssssso[J4-"!-(PBlsssmPB.) .)N@z`sssssstsssspJ>! (%_Lsf<3'$QBpstsZI%"91iSsssse@6" &#QBpssso[J4-"!-(PBkssssssssssssssssssssstssssssssssssssstststttttttttttsttsttttsttttttttttttstttstttttttsttlNA/*ttm)%C9{bppeaO5/tttttrfS)%ttttttttttttstttsttttttstttttttttsttttttttttttttstttsttttstttsstttttttstttsttsttttttttttttttttstttttttttttttttttttttttttttttstttstttttttttuuuuutttuutuuuuttuuuuuuuuutututuuututtfSuuu~f-)uttuVGututuuuuuttuttututuuttuuuuuuttuuuutttuutuuutuuuttutututttuutuuuuutuuuuuuutuuttuutuutuuutuuuuuututuutuuuuttuutuuutttuuuttttuuututuuuttuuuuuuuuvvuvuvvuvvuuuuuuuuuuvuuuvvvuvuuu(%>6o[vuuvvr`O;3&$! -)D:eTvvuu#"6/_Otvvuuuuuuvuuvuvuuuuuvvvuvuvvuuuvvuvvvvuuuvvuuuvuvvuuuuvuuuuvuuuuuuuvvuvuvvvvuvuuuuuuuvvuuuvvvuuvuuuvuuuuuvuuuvvuuuvvuvvuvvuvuuuvvvuuuvuuvvvvvvvvvvvvvvvvwvvvvvvwwvvvvwwvvvwvvvvvvvvwvvvvwvvwwvwwvwvvwwwvvvvvvvvwvvwvvwvvwvvvwwvvvvvvwvvvvwvvvwvvvvvvvvvvwvvvvvvvvvvvvvwvvvvwvvvwwvwvwvvvvvvvvvvvvvvvvvvwvvvvvvvwvvvvwvvvvvvvvvwvvvwvwvvvvvwvwvvvwvvvvvvvvwwwvwvwvvvvvwvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxwxwwwwwxwwxxxxwxxxxxxwxxwwxwxxxxxxxxxxxwxxxwxxxxwwxxxwxxxxxxwxxxxwxxxxxxxxxxwxxxxwwwxwxxwxxxxxwxwxxxxwxxxwxxxxxwxwxwwxxxxwxxwxxwwxxxwwxxxxxxxxxxwxxwxxxxxxwxxwxwxxxwxwwxwwxwwxxxxxwxxwxxxwwxwxwxxxxxxxxxxxxxwwxxxxwxxxxxxxxxxxxxxxyyyxyyxxyyyxxyyxyxyxxyxxyxyxyxyxyxyxxyxxyyyxyyxyxyyyxyyyxyyxxxxyxyyxxyyyyyyyxyxxyxyxyyxyxyxyxxyxyyxyyxyyyyyyyyyxyyxyxyyxxxxyyxyxxyxyxxxyxyxxxyyxyyxxyxxyyyxyyyyxyxyyxxxxxxyyxyxyxyyyyyyxyxyyyxxxyxyyyyxxyyxxyxxxyyyxyxxyyxxyxxxyyxxyyyyyxxxzyzzyyyyyyzzyyyyyyyzyyzyzzyzzyyyzzyyyyyzyyzyyyzyyzyyyyzyyzyyyzyyyyzyyyyzyzyyyyzzyzyyzyyyyyyyzyzyzzyyyyyzyyyyyyzzyyyyzyzyyyzyyzyzzzyzyyyyyyzyzyzyyyyyyyyzzyzyyyzyyyyyyyyyyyyyzyzyyyzyzyzyyzyzyyzyyyzyzyyyyyzzzzyyyyyzzzzyyyzyzyyyyyyzzyyzyzyzzzzzzzzzzzzzzzz{{zzz{zzzzzzzzzzzzzzzzzz{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{zzzzzzzzzzzzzzzzzzzzz{{zzzzzzzzzzzz{zzzz{zzzzzzzzzzzz{zzzzz{zzzzzzzzzzzzzzzzzzzzzz{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{zzzzzzzzzzzzzzzzzz{zz{zzzzz{zzz{{{{{{{{{{{{zzzzz{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{z{{{{{z{{{z{{{{{{{{{{{{{{{{{{zz{{z{{zzz{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{z{{{{{{{{z{{{{{{z{{{{{{z{{z{z{{z{{{z{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{z{zz{{{{z{{{{|||{{{||{{|{{|{{{|{|{{|||{||{|{{||||{|||{{|{||{|||{||||{{{{{|||||{{|||{||||{{|{|||||||{|||||{|{|{{{|{||{|{||{|||||{{|{||||{{{|{{||||{||||{|||{{|||||||{{{|{{||{|{||||{|||{|||||||||{|||{|||{{|||{|||{||{||{|{|{{||{||||||||{||{{||||||||{{{|||||||}}|}|||}|}||||}||||}}}||}|||||}}||}}|||}|}}}}|||}||||}}}|||}}}||}||}|}||}}|}|||}|}|}|}||}||}}}|}|}|}}}|}||}|}|}||}||}}|}}|||}}|}|||||}}|}|||}|}}||}}|}}}||}}|}}|||||||}}|}||}|||||||||}|}|||}}|||}|}|}|}||||||}||||||}}}}|}||}|||}||~}}}}~}}~~}~}~}~}}}}}}}}~}~~}}~~}}}}~}}}}~}}}}}}}~}}}~}}~}}}~}~}}}}}~}}}}}}}~~}}}}}~}}}}}~}}~}}}}}}}}}}~}}}}}}}}}~~}}}}}~}}}}}}}}}}}~}}~}}~}}}}}}}}~}}}}~}}}}}}~}}}~}~}}}}}~~}}~}}}}}}}}}}~~~}}}~}}}}~~}}}}}~}}}}}~~}~}}}}}}}}}~}}}}}~}~}}}~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}~~~}}}}}}}}}}}}}}~~}}}}}}~}}}}}}~}}}}}}~~}}}}}}}}}}~}}}}~~}}}}}}}}}}}}~}~}}}}}~}~~}}}}~}}}}}}}}~}~}~}}}}}}}}~~~}}}~}}~~}}}}}}}}~~}}}}}}~}~}}}}}}}}}}}}}~}}}}}}}~}}}}}}}}}}}}~}}}}}~}}}}}}~}}}}}}}}}~~}~~}}}}}}}}}~}}}}~}}}}~~}}}}}}}}~}}}|}}|||}|||}|}||||}||}}||}}}}|||}|}|}||}}||||}|}|||||}||||||||}}||||||}||}}||}}||}|}}|}||||||||}|||||}|}|}}}||||||}|}|}}||}|}|}}|||}||}||}|||||}|}||||}||}}||||||||}|}|||}||}|}}||}|}|||}||}||}|||}|}|}}|||||||}|||||}|}|||||||||}}||}|||}}||||{{{|||{{{||{|||{{|{{|{{{{{{{{|{||||{|{||{{|||||||{{||{{||{|{{{{{{|{{|||{{||{{||||{||{|||{|{||{{|{{||||{|{||{{{|||||{|{|{{{{{||{||||||{{{|{|||{{|||{{{|||{{{||{|{|{{||||{{{||||{|{|||{||{||{|{||{|{|||||{{||{|{{||{{{{||{|||{{{|{{|{{{|{{{{{z{{{z{z{{z{{{{{{z{{{{z{{z{{{z{z{{{{z{z{{zz{{{{{{{zz{{{zz{{{{{z{{{{z{{{{{{z{{{{zz{{{{{z{{{{{{zzzz{{{{zzzzz{z{{{zz{{{{z{z{zzz{{{z{{z{{{{{{z{{zz{{{z{{{zzz{{{z{{{{{{z{z{z{zz{{{z{{z{{z{{{z{{z{z{{z{{{{z{z{{{{{{z{{z{z{{z{{{z{{{{{{zz{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyzzzzzzzzzzzyzzyzzzzzzzzzzzyzzzzzzzyzzzzzzzzzzzzzzyzzzzzzzyzzzzyyzzzyzzzzzzzzzzzzzzzzzzyzzzzzzzzzzzzzzzzzyzzzzzzzzzzzzzzzzzzzzzzzzzyzzyzzzzzzzzzzzzzzyzzzyzzzzzyzzzzzzzzzzzzzzyzzzzzzyzzzzzzzzzzzzyyzzyyyyyyyyyyyyyyyyyyzyzzyyyyyzyyyyyyyyyyyyyyyyyyyyzyyzyyyyyzyyyyyyzyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzyyyyyyyyyyyyyyyyyyyyyzyyyyyyyyyyyyyyyyyyyzyyyyyyyyyyyyyzyyyyyyzyyyyyyyyyzzyyyyyyzyyyyyyyyzzyyyyyyyyyyyyyyyyyyzyyyzyxxxxxyxyxxxxxyxxxxxxyxxxxxxxxxxxyxxxxxxyxxxxxyxyxxxxxxyxyxxyxxxxxyxyyyxxxyxxxxyxyxxxyyyxxxxxxyxxxyxxxxyyxyxxyxyxxxxxxyxxxxxxyxyxyyxxxxxxyxxxxyxyxyxxyxxxxxxxyxxxyxyyyyyxyxxxyxyxxxxxyxyxxxyxxxyxxyxxxxxyxyxxyyxyxxxyxxxxxxxxxxyxxxyxxxxxxxywxwxxwxwwwxwwwwwxwxxwwxwxwxxwxwwxxwwxxxxwxxxxxwwxxwxwxxxxwxwwxwwwwwwxwwxxwwxxwwwwwxwwwxwwwwwwwwxwwwwwwwwxxwwxwxwxwxxwwwxxxxwxxwxwxwxwwxxxxwwwwwwwxxwwwxwxxwwxxwwwxxwwxxxxxxxwwwxxwwwwwxxwwwxwwwxwxxxwwxxxxwwwxwwwwwwxxxxxxwwwwwxxwwxxxwwwwwwwwwvwwwwvwwwvvwvwwwvvwwvvwwwwwwvwwwwvvwwwvvvwwvwwvvvwwvwvvvwvvwvwwwwwwwwwwwwwwwvwwwwwvwwwwvwvvwwwvvvvwwvwwvwvwvwvwwvvvwvvwwwwwvwvwvwwvwwwvvwwwvwvvwvvvwvwvwvwwvwwwwwwwvwwwwwvwwvwvwwwwvwwwvvwvwwvwwwvwwwvwvwwvwvwwvvvvwvwwwwwwwwwwwwvwwwvvvvvuvuvvvuuuvvuvvvvuvvvuvuvuvuvuvvvvvuvvvuvvvvvvvuvvvuvvvvvvuuvvuvuuvvvvuvvvuuvvvvvvvvvvuvvvvvvuvuvvvvuvuvvvvuuvuvvvvvvvvvvvuvvvvvvuuuvvuvvvvuvvvvvvvvvvvuvuuvvvvvvvvuvvvvuvvvuvuuvvvvvvvvvvvvuvuvvuvvuuvvvvvvvuvvuvvvvvvvvvvvvvuvvuvvvvvvvuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuutuuutuuutuuuuuuuuuuuuutuuuuuuuuuuuuuutuuuuuuuuuuuuuuuuutuuuututuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuutttttttttttutttttuttutttttuttttttttttttuttttttttuttttttttttututtttttttttttttttuttttttttttttutttttttttttttttttutttutttttttutttttttttuttttttttuttttttttttttttttttttutttututtttuttttttutttttttttttttttttttttttttttttttttttttttttttttttttttttttssttssssstttsttsststtsttstssstsststtsssstssstsssttssttststsstssssstttststtssstsssssstststststststttsttttstsstsssttssssssssttssstsssssttttsssssstssssstttstttsssssstsstssstsssssssssssttstssssstttttsssstsssssststsssttsssstttststsssstssssrssrssrrrssrsrsssssssssssssrsssrssrrrsssrrrrssrrrsrsrrssrrsssrrssrrrrrssrrrsrrqssssrrrrsrrssrsrrrsrrrssrrsrsrsrrsrrrssrrsrrsrsssssrrrssrrssssssrssssrsrrrrssrssrssrrrrrrrrrsrrsrrrsrrrrsrssssrrrrrrsrrrrssssrsrssrrrssrsssrrssrsssrsrrsrrsrqqqrqqrqrqrqqqqqrqrrqqrqqrqrqrrrrrqrrrrrqrrrrrrrqrrqrrrqrrrrrrrqqrrrrrqqniaXsUpVqYt^{empqqrqrqrrrrrrqrqqrrqrrrrrrqrrqrqqrqqrqqrqrqqrrrrqqrqrrqrqrrqrrrqrqrqqqrrrqqrrqrrqrqrqrqrqrqrrrqrqqrqrrrqqrrqrrrrrrrqqqrrrqrqrrrrrqrrqqrqrrrrrqrrrqrrqrqqrqqqqpqqqqqqqppqqqqpqqqqqqqqqqqqqqqqqqqqqqppqqqqpqpqqqqqqqqqqqqqqqqqqqpo^|IbD]=T/A.@0E4Jn(Bm*Hr+Lv0U6\?a0M#6v .v+s"0z$2{$1w!/r$3p(:y1IEcRt`lnpopoooooooooopooppoooppoooppmP1wK . *@%`;ljUmooooopooooooooooopomN-oB'(B*jHiooopoopoopmN,nB'(B+kIioooooooppopoooooopopponnnnonnonononnnonnnnnonnnnonnonnonnnnnnnnnnnnnnnnnnonooonnnnooononnnh=T-A,H}7^?j+Ny$@n'Cm0Oo4Wt1Vq,To6b{4b{9a|3T}'U,?z)@r2Ry7_7`~-Qp(Li/\k@xuHwFv@~p:yp;{v?{z?oy1Pr1j)l'k-n5q"@q'Lp)]o6xn;mApDrDuG|R_hmmmmmmmmlmlmmllmmmlmm] -mmmlmlmmmmmmmmCmmmmmCmmmmmmmlmmmmmmmlmmmlllllllllllklllklllkklkkllllllllllllllklllllkllllllllllllllklllklllkX}3G)jBmAqGyQXchkkkkkkkkkkkkkkkkkk0xDkklkkkkkkkkkkkkkkkkk<Ƒ)jkkkkkkkkjKMkkkk<Ƒ)jklkkkkkkjKMkkkkklkkkkkkkkkkkkkkjjjjkjjkkjjkkkjjjjjjjjkjjkkjjjkjjjjjjkjkjjjjjjjkkjjkkjjjkkjjkjjjjkc9P1Fy1Kq0Rt3^xAp4at*Wk9jjAylIqIsDr?ypgAi&Lj#Ph+al7zp=pBoAnErCrFtSTXagjjjkjkkjjjjkkjjjb@™jjkjkjkkjjjjjjjjkjjjjR]kkjjjkjjjjjjjjjR]jkjkkkjjjjjjkjjjkjjjjjjkkjkjkjkiiiiiiiiijijiiijjjjijiijijijjiiiiijijjjiiijiijijjjiijiiijjijjiijji]5P5Qz3Qp.Sq8e{?p2`s-[kn1]r.Zm9in=ulGsEu;up7qm9wmApFtEw4es,Wu/Yv(Uo-^o.em5rm6xi;m@lGlHqHoHrHtErMzTQR_ehihhihihiiiihhh [<ŕhhihihihiiiiiifiiihihhihiiihhihhiihihihhhiihhhhhhghhghghhggghhhghghhhhhghhhhhhgggggghghhhhhhhhhhgghhhhghhhgghfGi6O4Nr2Pm2Yv8h~?o~,Wl3]m5gm@xrGt@{u8oo4ji5oi;{nFsHr:kq(Ql+Rl(Wj0eh4rj8}l>qApEoIoJqGnKtIvJtNxUST]_hhghhghghhhhhhh5Ughhhgghhhg_hgghhhh#ggh#ghghgdhhhhghhhghhhhggggggggfgggggggfgggggggfgggggggggggggggggggggfgggggggfggggggggfgb?]7Q6Sp5Vo1Yq>k}:fz)Ok1Ul/Wi9jmFtC~t9qq.gl3nn;|sAuBu@tx%Oh*Qi*Zh4mi6xfggg -Wgggggc=gggggWggggcggggggggffffffffgfffffggfffgfffffffffffffffgfffffffffffgfgffgfffffffffffg_:Y5U{>et7ap8gz=o>l0Vu*Kl2Xk=lmD|uD}t;rp5jm.gi<|sHzDw?vw+[q'Uh0el2pg5{h;fDmDnJpQrQtQvRvQwMuPy]\UZbeffffffgffffgffdgffffgffff,vfffffffS;ǔfffffP'kfffS;ǕfggffP'kfggff<Ɩfffg[ffffffffeeeefeeeeeeeeefeeeeeeffeeeeefeffeeeeefeffeefefeeeeeeeeeeeefeeeeedW6S8Yu?ip7eo8h{9mBu0\x(Ol3^qAtuAzvD}v5lm.ej1ll>~rJxJzE~y-^o)[k1ji/oc7|f6g?nCrFqJtKtKtMwLxNxPy]aXZcdeeeeeefeefeeee^feeeefeeeeSeeeefe:ȓ 2_feee#cHeee9ȓ 2_efff#cHfffef6affeD 1feeeeefeeeeedddeeedeeededededeeeeddededddedddeedeedddedeedeeeddddededddddKv3P9]s;el;iq7iyddde^'DLbY+u>ddddddMQaM 1Zddeeedddddddddddcccdddddcdcddccdddddccccddddcddddcddddddccddcdddcddcdcdda>`6U~6`oCsq8hp3au=omBrAo=i>lBoDsDtNwSz[~Y{[\abccdddccdcdcddd[8ʐddcdcddcdcdcdcdcccdcdc?¢Mdcccd?¢Ndddddd>Ğdcccdcddbcccccccbccccccbcccbbccccbccbbccccccccccbcccccccbccccbcccccccccc];[3Sx4]lAnq2aq5cy>m=j},[m9mrDyEzGz:tr6pn8vn@rGvOyYO|5jr,_p*bk/og7m8l4{f6~l5j8j>l=nFxJzKyT~XX]^bacccbccccccccbc9ɔ9acbccbbbccccbccbcccc#fbcc4͊@£ccccccc4͊?£bcccccc,x9`ccccccccbbbbbbbbbbbbbbbcbbbbbbbbbbbbbbbaaabbbbbbbbbbbbcbbbbbbbbbbbbbbbcbW8[.Ss8en?pr1cq7j{kAnBnErLvKvR}XW~[ababbbbcbbbbbbbbbY3Έbbbbbbbbbbbbbbbbbbb_ZbbbbE 5 4IbbbbbbbbbE 5 4Ibbbbbbbbb3Έ .Rbbbbbbbbbaaaabaaabaaaaabaaaaaaaaabaa^ZSLJ{J|LQX]_`aaaaaaaaaaaabbaaababaaba`M3W1\l@uo@yr6ov@y:p~.`n;rpDuCtDu9rm;tkģ_aaaaabaaaaa_D%k?% 3^>ã_aaaaabaabaaQ&n 3#A0тZaaabaaaaba`a`aa```a```a`a`aaa``a``a_Q?k=d7Y*F*D,I0N7Y?gGvJ|KT\_``_^__`aaaaa`````````]?i4^zä&n ,```aa```````aa`aa``a````aaaaaa`aa`aa`aa``a``aa`````a``a`````a``aa```````````a```aa`a``a`````_____________`_``_``_```]H|/P-N8^4V"=z$;t%=s)Bw*Ey.M/R8\4Ypz?xp@vq8mt?t;l,Zs1bpAzuGyDu>xp8sh<{hCjPqQrVvWyV{Ox6sj.ld2ub3~cq@o?lDnFoEpGrIsHpMuOvT{V[\^``__`__`___````_R /```__`_`_````````_``_```_`_`````_``__``_`__`````````_`_`_`````___``___``____`_`_````_``_````___^____^__^__^^___^___]Q.N'A}5W:c1S'?q$9l%>n(Bm*Ir*Lv/U5\=b.N 9v1v.s4z!5{!4w1r!6p$>y+Nyr<{lDlJmTvUv[xZyXzPt=}f2t\3{\5]=c:_?e@j>kBnItMvKxIuJsSzRyQxTY[]___^_________^_^_TI_^_____^^^____^___^_^_____^__^^^_^______^_^_____^^^^___^___^______^__^_____^__^______^_^____^^^^^^^^^^^]^^]^^^^^^^]Y5[*D+I}7^?j+Ny$@n'Cm0Oo4Wt1Vq,To6b{4b{9a|3T}&=w%je!h$l$g(a 2i";n%Ho0f|@KOV\]]^^^\TBqCz=to:km/\o4bw?m};gw5`p4cl=qmBzp>xl?}l@jGmMrVxXyVvV{S{QwAl9e7b9_?d:a>cAg=gDlIuKvOyOyR{S}T~R}SXY]^^^^^]^^^^^^^^^^^^\9ț 5'&p^^^^^]^^^^^^^]^]^^^^^^^^^^^^^^^^^^^]^^]^^^^^^^^^^^^]^^^^]^^^^^^]]^^^^^^^]^^^^^^^^^^^^^]^^^]^^]]]]]]]]]]]^]]]]^]]]]\H.K'>t*Hw9ad9a7_hDmEqJvOzPxT{XTzQ|TYX\]]]]]]]]]]]]]]]]]]]]\F,R 3!)?^/҆FZ]^]]]]]]]]]]]^]]]]]]]]]]]]]]]]]]]]]]^]]]]]^]^]]]]]]]]]]]]]]]]]]]]]^]]]]]^]]]]]]]]]]]]]^]]]]]]]\\]\\\\\\\\\\\]\\\\\]W7\*A{)Ar2Ry7_7`~-Qp(Li/\k@xuHwFv@~p:yp;{v?{z?oy1Pr1j)l'k-n5q"@q'Lp)]o6xn;mApDrDuE|MVX]\\\P?osAwj8lg1_j2_q:itEwsAuj?uhByeC~bC_B_B`FeIiRsXyZ|UtUqVsZtOlBb9^5\:e5_5_=d>fEkIpOwQ}Q}X\YTYYYZ]]]\\\]]\\\\\\]\\\\\\\\]\\\\\\\]\\\\]\]\\\\\\\]\\]\]\]\\\\]]\\\\\\\\\\\\\\]]\\]\\\\\\\\\]\\]\\\\\\\\]\\\\\]\\\\\\]\\\\\\\\]]\\\[[\[\[\[[\[\[[[\\[[\\ZL.K(=s)Cq1T|8d8c|)Rm-Yn7knDtP{Kw@q=|pDu@}tCw{4[w#=p2k3k 6i:j%Kp0\u)^m2rmsljBmAqFyOSVXZY:dkAyf@}eD~hPiRp[tYr[uYqWpUoVmPgD_KbVkZnat_t]u^v^wd|_rF_1|R0}P6W7Y8]@`GdIgQnXwafee^V[\_ZZ[Z[[Z[[[[[[ZZZ[Z[Z[[Z[[[[[Z[[[Z[[Z[[[[[[[Z[ZZ[[[ZZ[Z[ZZ[[Z[[[[Z[[Z[[ZZZ[Z[[Z[ZZ[ZZZZZ[Z[ZZZ[ZZ[[ZZ[Z[[ZZ[[ZZZZ[Z[[[[ZZZ[ZZZZ[ZZZYZYZZZZZZYZZZYZZZZZT3U/Hy0Kq0Rt3^xAp4at*Wk9jjAylIqIsDr?ypgAi&Lj#Ph+al7zp=pBoAnErCrFtRRRUXW;iiEiEhRoXqdvevau`q\oZm\lZjWlF`Pg[m`qdvevgzmouu~Se/wN/zN3Q;X>[FaLdNgTm[vbhkjd]\Z`_YZZZYZZZZZZZZZZZZYZZZYZZZZYZZZZZZYZZZZZZZZZZYZZZZYZZZZZZZZYZYZYZZZYYZYZZYZZZYZZZYZZZZZZYZZYZYZZYZZZZZZZYZZYZZZZZYYZZZZZYZZZZZZYYYYYYYYYYYYYYYYYXYYYYO0U4Rz3Rp.Sq8e{?p2`s-[k\HgNhRjZoawjoomifcb`_XYYYYYYYXYYXYYYYYYYYYYYYYYYYYYXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYXYYYYYXYYYYYYYXYXXXXYXXYXXXXXXXXXXWG3U4Ru1Qm2Vq9f|>n1]r.Zm9in=ulGsEu;up7qm9wmApFtEw4es,Wu/Yv(Uo-^o.em5rm6xi;m@lGlHqHoHrHtErMzTPOWTBviEkUsYs_vhxgu^q]o]p]qaqaqbq[jRgXmgwȕȚǚ̢ӫϡX`6zP6U8X9XB]LiWn^trĔuqifiie_WXXYXXXYXXXXXXXXXXXXXXXXXXXXXXXXYXXXXXXXXXYZZZZZZZZZZZ_g'uPeYXXXXXXXZZZZZZXXXXXXXcwi-^ [cy\uYXZZZZZZXXXXXXXY{`j/_ZZ`j.y\aXXXXYXXXXXXXXWXWWWXWWWXWWXXWWWWWU=s3R3Nr2Pm2Yv8h~?o~,Wl3]m5gm@xrGt@{u8oo4ji5oi;{nFsHr:kq(Ql+Rl(Wj0eh4rj8}l>qApEoIoJqGnKtIvJtNxUSRWQCygDnOrVvVr`sdt]p_r^m^l`lcpgrapYm\n_mryŐ̡شܼ޿ѭFvVC]>Z=ZD^JgUrmȝЭԱЪÙzmntěpi]UXXWXWXXWWXWWWXXWWWXXWXWWWXWWWWWXXXXWXXXWXWZZZZZZZZZZZZZZZ\vXWXWWWWZZZZZZWWWXXWsbZZZZZZZ{WZZZZZZWWWXWXe ZZZZZZZZZZ[vR{WWWXXWXWXWWVWVVWWVVVWVVWWWVVWWT8c4S5Sp5Vo1Yq>k}:fz)Ok1Ul/Wi9jmFtC~t9qq.gl3nn;|sAuBu@tx%Oh*Qi*Zh4mi6xfet7ap8gz=o>l0Vu*Kl2Xk=lmD|uD}t;rp5jm.gi<|sHzDw?vw+[q'Uh0el2pg5{h;fDmDnJpQrQtQvRvQwMuPy][UWWF{hMqKnQlSmSpUo[o[k[j_kalcicn`nVi]oaraqlzڶܽӭ;uTC\NdPfKeVsc~r”Աܻͤƞˣl:`y!?x(Q7pAJTTVVVVUVVVUUVVUUUVVUUVVUUUVUVVVVVVVVVVZZZZZZZZZZZZZZZZZZVVVVUZZZZZZVVUVVZZZZZZZZZZZZZZZZZVVVVZZZZZZZZZZZZZZZZUVVUVVUUUVUUUUTTUUUUUUUUUTUUUTI1W7Zu?ip7eo8h{9mBu0\x(Ol3^qAtuAzvD}v5lm.ej1ll>~rJxJzE~y-^o)[k1ji/oc7|f6g?nCrFqJtKtKtMwLxNxPy]`WXXD~~UzZzQnSoSnSpTqWmThYm[jZgYfZjXgYk`t_rbuvɖƗXk3uSA_JdPiPlXwdnșȟΩѫѨxȟ՜t9Xs :m$Ip/g|=GJOSTUUUUUUTUUUUUTUUTUUTUUUUUUUUUUUUUUUZZZZZZUUUUe^ ZZZZZqBUTTUUZZZZZZUUUUTsGZZZZZdzYun:ZZZZZZZUUU^_ZZZZZrDcWZk~fcZZUUUUUUTUUUTTTTTTTTTTTTTTTTTTTS@0S8^s;el;iq7iyqIFIQQSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTZZZZZZTTTTTTZZZZZ`TTTTTZZZZZZTTTTTcZZZZZTTT[e ZZZZZZTTTZZZZZ{[TTTTTTTTUo;TTTTTTTTTTSSSTTTTSSSSTSSTSTSSQ6g4W~5`oCsq8hp3au=omBrAo=i>lBoDsDtNwSz[~X{ZYT8s]k^UrVjUmWrVtRoQlSlWoXlZn[q\nYk\n_r\vfw<`U)5dc7x_m=j},[m9mrDyEzGz:tr6pn8vn@rGvOyYO|5jr,_p*bk/og7m8l4{f6~l5j8j>l=nFxJzKyT~XW\[V9|Xbcc[rXnXrYsQsHqFqDuTZ]}a~WwVy]yc}eH|i'JD;mlI~:gCt>MQPNPRLOzT}WcyŖͣ͡J}0\t)^m2rmkAnBnErLvKvR}XV~Z^VHI]_c~_xYqXoXvURW\d;rm=okNsLt@qtguÓʞtq|ĚNpnu5mjYz'=F4fe,hm3|}GN~YcsŔƖm=mr-Vm+`l4sn7k=l>jBmAqFyNOPPQRQQRQRQQRRRQRRRQRRQQQQRQRRRRQQZZZZZZRRRQQRZZZZZrBRRRQRZZZZZZRRQRRZZZZZ\QRQQRXZZZZZZQRQ[ZZZZZZZZZZZZZZZZZZRQQRRRQRRQQPQQQQQQQQQQQQQQQPA/[0\l@uo@yr6ov@y:p~.`n;rpDuCtDu9rm;tki7g6j>tK{X_jplP*Ti#Ph+al7zp=pBoAnErCrFtQQNONPQPQPPQQQQQQQPQQQPQQQQQPQQQQPQZZZZZZPQQRb^ ZZZZZQQQQQZZZZZZQQQQPZZZZZ\QPQQQQZZZZZZQPQ[ZZZZZZZZZZZZZZZZZ^ PPQQQQPQQPPPPPOPOPPPPPPPPOPM7p1`{;onB|p=tq=rzAs2cs/ai@xoDsBs?xo5ni7sf=jMuRwR{UQ{Iy4np+dk.lj/ui3j6j:j=lxp8sh<{hCjPqQrVvWyV{Ox6sj.ld2ub3~cq@o?lDnFoEpGrIsHpMuOvS{UWPNJKPuQrX|[`hvØk}az0TV*=s`VyX}[WnҬ۶ҮЭw?jiVtA~t7T@q&Uv2tuCyUz[aaZHz.ek5rm6xi;m@lGlHqHoHrHtErMzSONRLOOOOOOOOOOOOOOOOOOOOOOOOOOOOOZZZZZZZZZZZZZZZ]tQOOOOOOZZZZZZOOOOOZZZZZ\OPOOOOZZZZZZOOOrAZZZZZOOOOOtZZZZZ|]OOOPOOOOOONNNNONNNNNNONNNOK9{yr<{lDlJmTvUv[xZyXzPt=}f2t\3{\5]=c:_?e@j>kBnItMvKxIuJsSzRyPxSUNMMBR~Ss\yelsu̞XxfDgn3P67e^NqStWyX|s”ѩڵֳ˫Q~S{Bj=lS|5fl3g=z&W;G~U|W|VAq/cd4rj8}l>qApEoIoJqGnKtIvJtNxTRQTKNNNNONONONNONNNNONNNNNONNNNONZZZZZZZZZZZZZZZmRNNNNNNNZZZZZZONNNNZZZZZ[NNONNNZZZZZZNONZZZZZeWONNNySZZZZZONNNNNNNNNMMMNNMMMNMNNNMMLF=wA|=to:km/\o4bw?m};gw5`p4cl=qmBzp>xl?}l@jGmMrVxXyVvV{S{QwAl9e7b9_?d:a>cAg=gDlIuKvOyOyR{S}T~Q}RSMMMHMSxUngmi~lp}}|Ib\#O#X 8'4PnVpWvRrm֭زӯg!gPXL|8lOrX}"Of=qG+gDOLy@}q)Xd3lh6xfd9a7_hDmEqJvOzPxT{XTzP|SULLMKDNQxZt^u]rbwcudnP~_$IS%?X=RBvj8yYIhRkUuOszĘѩ֯o+rYJ+rg>mVtg~gC~0u2{BC:u'Ve0el2pg5{h;fDmDnJpQrQtQvRvQwMuPy][TURKMMMMLLMLMMMMLMMMLLMLMMLMMMMMZZZZZZMLLOql/ZZZZZLLMMMMZZZZZZLLLMMZZZZZZMMLMMLZZZZZZMLMLZZZZZZZZZZZZZZ[sMLMLMMMMMMLLLKLLKLLLLLKKLLLD>psAwj8lg1_j2_q:itEwsAuj?uhByeC~bC_B_B`FeIiRsXyZ|UtUqVsZtOlBb9^5\:e5_5_=d>fEkIpOwQ}Q}X\YSXVOKKLKCEOQwUy]Zy@sd-_hQ8deKM\stGZLeOmǙͥڶQzX}YXa7znBqIq_|pzĒrÖdXP-`m)[k1ji/oc7|f6g?nCrFqJtKtKtMwLxNxPy]`WVTJLKLKLLKLLLLLLLLLLKLLLKLLLLLLZZZZZZLLLLLjZZZZZi(LLLLLLZZZZZZLLKLLZZZZZZLLLKLLZZZZZZLKLLLZZZZZZZZZZZZ[LKLLLLLLLLLKKKKKKJKKKKKKKKKJ:i@tmAyi>slmBrAo=i>lBoDsDtNwSz[~X{ZXSHJJJJJJJJJKJKJJJJJJJJKJJJJJJJZZZZZZJJJJJjZZZZZ]JJJJJJZZZZZZJJJJJZZZZZZJJJJJJZZZZZZJJJJKKJL~]k,_[\fyOMKJJKJJJJJJKJKIIIIIIJIIJIJJIIIG;iiEiEhRoXqdvevau`q\oZm\lZjWlF`Pg[m`qdvevgzmouu~Se/wN/zN3Q;X>[FaLdNgTm[vbhkjd]\Y[SIIJIJIIIIHD9AMQ]kaMiKjʝɮHtx&Rj._pAu|)^s)btGNRWXMxMwYO|5jr,_p*bk/og7m8l4{f6~l5j8j>l=nFxJzKyT~XW\ZSIIIIJIIJIIIIJIIIIIJIIIIIIJIIIZZZZZZIJJMol.ZZZZZj*JIIJIIZZZZZZJJIJIJIIJIIIIIIIIIIIIJIJIIIIIIIIIJJIIIIIIIIIIIIIIIIJJIIIIIHHIHIHIIIIIHG@piCgOn\tcwhxgwbu_t]q\paqbq]pPdReZlfutx~ŔZh0vP1}S2V5Y>\HgNhRjZoawjoomifca]SHIIHIIIHIIHGDECO\VxQqZyЦ|u&J`"Fj+VpkAnBnErLvKvR}XV~Z\QGIIIIIHIHIHIIIHIIHIIIHHHIIHIIZZZZZZZZZZZZZZZZZvHHIHIIZZZZZZHIIHIHHIIIHHIIIHHIIHIIHIIHHHHIIIIHHIIIIHHHHHIIHIIIIIHIHHHHHGGHGHHGHGGHGBviEkUsYs_vhxgu^q]o]p]qaqaqbq[jRgXmgwȕȚǚ̢ӫϡX`6zP6U8X9XB]LiWn^trĔuqifihbTGHHHGHHHGGHGHFC6DGmKfdzΥvMw3cp+[h8ll@{q?|q?yt6nn;rmZ=ZD^JgUrmȝЭԱЪÙzmntěpfRFGGGGGGGGGGFGGG@HjOzHcvj?o{1br/ai@xoDsBs?xo5ni7sf=jMuRwR{UQ{Iy4np+dk.lj/ui3j6j:j=lxp8sh<{hCjPqQrVvWyV{Ox6sj.ld2ub3~cq@o?lDnFoEpGrIsHpMuOvS{TTJEFFFFFFFFFFFFFFFFFFFFFFFFFFFFZZZZZZZZZ[_ g uAskFFFFFFFFFZZZZZZFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEEEEEEFEEEEFDF}jLqKnQlSmSpUo[o[k[j_kalcicn`nVi]oaraqlzڶܽӭ;uTC\NdPfKeVsc~r”ԱܻͤƞˤơuêSDFEFEEEEEEFEEEB2}/[yQj`yc?s:k}3]q4ao=sqFxA}v>yr<{lDlJmTvUv[xZyXzPt=}f2t\3{\5]=c:_?e@j>kBnItMvKxIuJsSzRyPxRSHDEEEEEEFEFEEFEFEEEFEEEEEEEEFEEFEEEFEEEEEEEFEEEEEEEEEEZZZZZZEFFEEEEEEEEEEFFEFEEEFEEEEEEFEEEFEEEEEFEEEEEFEEEEEEFEEFEDEDDEDEEDDEDDEDCBUzZzQnSoSnSpTqWmThYm[jZgYfZjXgYk`t_rbuvɖƗXk3uSA_JdPiPlXwdnșȟΩѫѨxȟΦˤǮSCEDEDDEEEDDDDC=8u8fn@x]tt?kz?m};gw5`p4cl=qmBzp>xl?}l@jGmMrVxXyVvV{S{QwAl9e7b9_?d:a>cAg=gDlIuKvOyOyR{S}T~Q}QQFDDEEDDDDDEDDEEDDDEEDDDDEDDEEDDDDDEDDDEEDEDEEEEDEDEDEDDEEDEDDEDDDDDDDDEEDEDDDDEDEDEEDDDEDDDDDDDDDDDEDDDEDDDEDEEDDDDDCDCDCCDDDCCDDDB=]iXuPjSmWrXtUpTkThTgUiUg\n[l_rbycxbudymro9yb9y_C_D^IaRoZ|]_gjnsupmx–̣ϧˣuðKCCDCCDCDCDCCDD>>u>wiMpnFp~5^w=jw7en9in7kh?viA{g@~cAd@eFkRuWyVxRrPqQvRvFj>d9a7_hDmEqJvOzPxT{XTzP|RRFCDCCCDDCDDCCCDCCDCCDDCCDDDDCCCDDDDDDDCCCCCCCCCCDDDCCCCDDCDDDCDDCDDCCDDDDDDCCDDCCDCDCDCCDDDDDCCCDCDDCCCCCCDDCDDCDDCBCCCBCCCCCCBCCC<2{[k^UrVjUmWrVtRoQlSlWoXlZn[q\nYk\n_r\vfw<`U)5dc7x_fEkIpOwQ}Q}X\YSWTIBCCCCBCBCCCCCBBBCCCCCBCCBBCCBCBBCCCCCCBCBBCCCCCCCCCCCCCBCCCCBBBCBCBCCCBBCCCCCCCBBCCCCCCCBCCCBBCBCBCCCCCCCCBBBBCCBBBBBBBABBABBBBBB?0Tacc[rXnXrYsQsHqFqDuTZ]}a~WwVy]yc}eH|i'JD;mlI~:gCt>MQPNPRLOzT}WcyŖ͢ѧǣZBBBBABBBABBBBBA8j@tmAyi>sl2VTyUwUtSoRtZ_hwDd^15GxXVfY~Gilv˜|Šѯձ[vJj]xɡdCA'\V>i7g6j>tK{X_jpoę]óA@@A@A@@@AA@@A@>;iiEiEhRoXqdvevau`q\oZm\lZjWlF`Pg[m`qdvevgzmouu~Se/wN/zN3Q;X>[FaLdNgTm[vbhkjd]\YYL@@@A@A@@@@@@@@@@@@@@@@@@@@@@@@@AA@@A@A@A@@@@@@@@@A@@@@@@@A@@@@@@@@@@@@@AAAA@@AA@@@@A@@AAA@@@A@@@A@@@@@A@@A@@@@@@?@?@???@?@??@??@?>7LQxQwSzLuP|Xaks*JL&OImuSsI@Wui]^kę|ȥֳ̩ɣzQvi``GZ-bp4tg5a@fKnT{[af×cĦO>?@@?@?@?@?@@@@>@piCgOn\tcwhxgwbu_t]q\paqbq]pPdReZlfutx~ŔZh0vP1}S2V5Y>\HgNhRjZoawjoomifca[N>@?@????@?@@???@????@??@@??@@@@@???@@???@?@?@@@?@@?@@@??@??@?@?@?@?@?@?@@@@????@??@@@??@@????@?@@?@@?@@@@@?@?@???>??>>>>>>???>???>:FOuQrX|[`hvØk}az0TV*=s`VyX}[WnҬ۶ҮЭw?jiVtA~t7T@q&Uv2tuCyUz[bb_P=????????>??????>BviEkUsYs_vhxgu^q]o]p]qaqaqbq[jRgXmgwȕȚǚ̢ӫϡX`6zP6U8X9XB]LiWn^trĔuqifih`N>>??>??????>?>?>??>?>>????>?>?>>>>>???>?>>>?>65??>???>,O &  &K(:>?????>??=%t- @/???>????>?>?>>>>>>>>>=>>>=>>>>=7N~Rs\yelsu̞XxfDgn3P67e^NqStWyX|s”ѩڵֳ˫Q~S{Bj=lS|5fl3g=z&W;FUYZL;>>=>>>>>>=>=>=>==CygDnOrVvVr`sdt]p_r^m^l`lcpgrapYm\n_mryŐ̡شܼ޿ѭFvVC]>Z=ZD^JgUrmȝЭԱЪÙzmntśo™dM<>>=>>>>>=>>>>>>>>>>>>>>>>>>>=>=>=>>>=>>>=>>>@2>>>>>+C0>>>>>>6 %P=>>>>>>>=>>=======<======<====9GQxUngmi~lp}}|Ib\#O#X 8'4PnVpWvRrm֭زӯg!gPXL|8lOrX}"Of=qG+gDOQI:<==<<============<BweHpKpSsUsWo_q\rZn`o_lameliqcn]m\nZies{~ŕܻɧAsTI`JeC^HbQmd||ΪۼձŚvuɢwšk¤L<==<============<=====================<=====/I<====e=====9P<=========<<<<=<<<<<<<<=<<<<<<5IOyYt^u]rbwcudnP~_$IS%?X=RBvj8yYIhRkUuOszĘѩ֯o+rYJ+rg>mVtg~gC~0u2|ACB;<<<<<<<<<=<=<==<<<;F}jLqKnQlSmSpUo[o[k[j_kalcicn`nVi]oaraqlzڶܽӭ;uTC\NdPfKeVsc~r”ԱܻͤƞˤơsũM;<<<<<<<<<<<=<<=<=<<<<<<<<<<=<=<<<=<<<=<<<<< -6<<<=%{<=<<<H<<<<<<<<<<<;;;;;<<;<;;;;;;;<<;:5?LOwTy\Yy?sd-_hQ8deKM\stGZLeOmǙͥڶQzX}YXa7znBqIq_|pzœrřcTK:<;<<<<;;;;;;<;;;;;<:@UzZzQnSoSnSpTqWmThYm[jZgYfZjXgYk`t_rbuvɖƗXk3uSA_JdPiPlXwdnșȟΩѫѨxȟΦˤ}ɮM;;;<;;<;<;;;;;<;;;<<;;<;;;;<<;;;;;;;;<;;;<;(^;;;;7 8*6;94(U;<;<1A2:1?;<;;;<<<;;;;;;::;;;:;;::;;:;;::965<??8u+eQY~[z`l}OfMja|̟̲ͧ'WZ9fh4bl!Wi7xo@kKvV~iuÐsȜdǨP9::;:;:;;:;:;:;:;:::::9\iXuPjSmWrXtUpTkThTgUiUg\n[l_rbycxbudymro9yb9y_C_D^IaRoZ|]_gjnsupmx–̣ϧˣrŰD;:;:;;:::;:::::::;;:;;::;;;:;;::::;:;:;::;:7;:;: pL;::;:::::)1;;::a -9:;;9 +:;;::;;:;;9:9:::::::9:9::::::::::9873/$c9uP[^|^spe~NjFeuˡϬtM^5go8jq&Zm1nqAvP[bg_êK8::9:::::::9:9:9:9::::4.Zj^UrVjUmWrVtRoQlSlWoXlZn[q\nYk\n_r\vfw<`U)5dc7x_MQPNPRLOzT}WcyŖ͢ѧɣU899999889999998999999999999999899999998993h +8999999992899891999999899988888888888888888888888888888759<J[W~QrZ{լ}èu%n$p-y99+~8IKI:78888888888988888888888872@[_c~_xYqXoXvURW\d;rm=okNsLt@qtguÓʞtq|ĚNpnu5mjYz'=F4fe,hm3|}GN~YcsŔȗʚrƦJ788888888888888898888888888888888888888188888888868888868888888988777788777777777777877788787777865*BI|Ljd~׳vĹH0454544787777777778777788787777777775.UTyUwUtSoRtZ_hwDd^15GxXVfY~Gilv˜|Šѯձ[vJj]xɡdCA'\V>i7g6j>tK{X_jpnŚZƲ9788778787777777777777787877787777877778G17777787 787577777678777877776666776666767677676666776667766764 sQGkvϴf557766666666667666666667777776676766650JQxQwSzLuP|Xaks*JL&OImuSsI@Wui]^kę|ȥֳ̩ɣzQvi``GZ-bp4tg5a@fKnT{[ae×aŦI5667676677766676676767666667767776777667Q17667667-777664 #666076677/67766666675565655656665655665665656555556564(PNuͩsɾC555566655566665656656656556665665565662CNuQrX|[`hvØk}az0TV*=s`VyX}[WnҬ۶ҮЭw?jiVtA~t7T@q&Uv2tuCyUz[bb]âLû56556665656556666666556566666655656665656)5655658v56555*O666 0#65666#65666666655555554544545455444445545555545543,O_չb55555454555455555555555555554445555455530L~Rs\yelsu̞XxfDgn3P67e^NqStWyX|s”ѩڵֳ˫Q~S{Bj=lS|5fl3g=z&W;FUXXG355554545445555445555445455555455544555545543/  155545u25555G%555d .45543 ,545554555543433344444344444434344344344443422>usv>43434434444433444444444343444444344444331DOxTngmi~lp}}|Ib\#O#X 8'4PnVpWvRrm֭زӯg!gPXL|8lOrX}"Of=qG+gDNOE234444444443444444444444444444444443444444344434 ~d444441 *'1.X $2444,C+2*A343444444333333333333334433334333334333333334JnJ333333333333333333333333333333333343333332.FNyYt]u]rbwcudnP~_$IS%?X=RBvj8yYIhRkUuOszĘѩ֯o+rYJ+rg>mVtg~gC~0u2|@A>2333333333333333333343333333333343343334333333333/ '333333 (33334L3333343333222222222222222223332222223232232124423322222222222222233223223233332223222223231-<JMwSy[Yy?sd-_hQ8deKM\stGZLeOmǙͥڶQzX}YXa7znBqIq_|pzœrřbRGŻ232222222322222222222322223222222222232323232322222 2232222n!223232.V22232323221122221121222112211122221112111222221212222121212121222211222221221211211222111220./9<=6w)fQY~[z`l}OfMja|̟̲ͧ'WZ9fh4bl!Wi7xo@kKvV~itÐrȜbɨJ112211121112221211121122211112112111212121212121122,11112111#%11211221, 'Z0121122221200110111001101111010110110111110010110000011101110100011101110010101011101111000011//-,)!f7wOZ^|^spe~NjFeu̡ЬtN^4go7jq&Zm1nqAvP[ae\ƪE00010100001111101000101110111111001011111100001111111101100000"Q & D000010010010| 1 G%11110001110000///0000/00/00000000/00//000/0000/00000/0/000/00/00/00000/000///0000000000000000/0/000/,'9HM[jaMiKj̞ĠԹF$_y/j|@}(c{(gzEMQUQIJ;.000000//0000/0000000000/0000/0/000//0/00/0/000000/+ <00//00000//000000000000/0000000000//000000/000000////.////./////////////./////.////////.//.////////////////////////..//////////////////////.,28GYV~QrZ{լ|Ĩr!q!s)|67(5GHD2./////////////////.//.////////////////////////////////////.////////////////////////////////////////..../../..../..///.....///......././/......//...................../...../../../........./..-+$?G|Kjd~سtƹB(,,,---00-/...///../........./................./............ ;-......./.........../........./..../..../........./----.---..-..-..-.-.--.---.----...--.---.-.-----.------.-----.--.-----.-.-------..---.----.--*wOGku—дa,,------.----.--.-.------..---.-..---.---.----..-.--.-.---.--T+--..-.---.-------.-.---..--.-.-.---.-----.----------,,,,,,-,-,,,--,----,,-,,--,,-,-,,-,-,,,-,------,-,---,-,-,,,,-,,,-,,,,,--,-,,,-,--,,,--,---,,"NMuΩp̾<+,,,,,-,--,,,-,,--,,-,,,-,-,,---,---,,,,,,--,,-,---,,----,,,,  <o&-,,--,,,,-,----,,,-----,---,---,,,,,,,-,,---,-,,,-,--+,++,,,,++,+,,,,,,+++,,,,,+++,,,,,,,+++,,,++,,,,,,,,,,,,,,,,,,+,,+,+,,,,,+,+,+,+++,+,,,,+++,+*'M^ֹ],,,,+,,,,+,,,+,+,,,,,,,,,+,+,+,++,,,,,+,,,,+,,,+,,,,,,+,,,,,+++,,,++,+,,,,+,+,,+,+,,,+,,,,,++,,,,+,,+++,,+++,,,,,,,,,++,,,+,,,,,,,++++++++++++*++++++++**+++++++++++++++++++*+*+*++++++*++++*+*++*+++++++++++++++*+++++++++++++).$V,)"4[y3{L\Q#c|']}zE N&Q!2FluCokKI4!=Lhy=ZQ=%]hMuN;=G=rsWW                                      ('QP mk(' SQ YX*) CB}{ $#on yv  db  :9][ US c` wt TRLJ  TQ  tp;:                      DB  MK][ -, .-  _\ mj" C@| _[97EB -+UQoj>; :7ztD@{)'B?smƼ?< lfJF=:)'xp})'SO˿30 Ź ]W+(xf`pi ohD@%" ,)YSa[.+GB|{zrɽ1.-*~v$!E@ # FA{spyglet-1.1.4/tests/image/base_load.py0000700013464101346420000000512211266427715015731 0ustar yohyoh#!/usr/bin/env python '''Base class for image tests. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest from os.path import dirname, join from pyglet.gl import * from pyglet import image from pyglet.image import codecs from pyglet.window import * from pyglet.window.event import * from tests.regression import ImageRegressionTestCase class TestLoad(ImageRegressionTestCase): texture_file = None image = None texture = None show_checkerboard = True alpha = True has_exit = False decoder = None def on_expose(self): glClearColor(1, 1, 1, 1) glClear(GL_COLOR_BUFFER_BIT) glLoadIdentity() if self.show_checkerboard: glPushMatrix() glScalef(self.window.width/float(self.checkerboard.width), self.window.height/float(self.checkerboard.height), 1.) glMatrixMode(GL_TEXTURE) glPushMatrix() glScalef(self.window.width/float(self.checkerboard.width), self.window.height/float(self.checkerboard.height), 1.) glMatrixMode(GL_MODELVIEW) self.checkerboard.blit(0, 0, 0) glMatrixMode(GL_TEXTURE) glPopMatrix() glMatrixMode(GL_MODELVIEW) glPopMatrix() if self.texture: glPushMatrix() glTranslatef((self.window.width - self.texture.width) / 2, (self.window.height - self.texture.height) / 2, 0) self.texture.blit(0, 0, 0) glPopMatrix() self.window.flip() if self.capture_regression_image(): self.has_exit = True def load_image(self): if self.texture_file: self.texture_file = join(dirname(__file__), self.texture_file) self.image = image.load(self.texture_file, decoder=self.decoder) def test_load(self): width, height = 800, 600 self.window = w = Window(width, height, visible=False) w.push_handlers(self) self.screen = image.get_buffer_manager().get_color_buffer() self.checkerboard = image.create(32, 32, image.CheckerImagePattern()) self.load_image() if self.image: self.texture = self.image.texture if self.alpha: glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) w.set_visible() while not (w.has_exit or self.has_exit): w.dispatch_events() w.close() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/PLATFORM_LA_LOAD.py0000700013464101346420000000147011266427715016421 0ustar yohyoh#!/usr/bin/env python '''Test LA load using the platform decoder (QuickTime, GDI+ or Gdk). You should see the la.png image on a checkboard background. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: PLATFORM_LA_LOAD.py 661 2007-02-17 00:23:30Z Alex.Holkner $' import unittest import base_load import sys if sys.platform == 'linux2': from pyglet.image.codecs.gdkpixbuf2 import GdkPixbuf2ImageDecoder as dclass elif sys.platform in ('win32', 'cygwin'): from pyglet.image.codecs.gdiplus import GDIPlusDecoder as dclass elif sys.platform == 'darwin': from pyglet.image.codecs.quicktime import QuickTimeImageDecoder as dclass class TEST_PLATFORM_LA_LOAD(base_load.TestLoad): texture_file = 'la.png' decoder = dclass() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/rgb_1bpp.bmp0000600013464101346420000002013611266427715015643 0ustar yohyohBM^ >( 888>q1p`q?1ayoq?1c?q?1cpq?1c`|1{?0 aqc?0pC?1 8<>8? ? ?[}o !@~2&@~??~~~~<~~~~>~<~~<~~?<~?|?|~?x~?~?~?~??pyglet-1.1.4/tests/image/PYPNG_RGBA_SAVE.py0000700013464101346420000000105711266427715016331 0ustar yohyoh#!/usr/bin/env python '''Test RGBA save using PyPNG. You should see rgba.png reference image on the left, and saved (and reloaded) image on the right. The saved image may have larger dimensions due to texture size restrictions. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import unittest import base_save from pyglet.image.codecs.png import PNGImageEncoder class TEST_PNG_RGBA_SAVE(base_save.TestSave): texture_file = 'rgba.png' encoder = PNGImageEncoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/PYPNG_L_SAVE.py0000700013464101346420000000113111266427715016002 0ustar yohyoh#!/usr/bin/env python '''Test L save using PyPNG. You should see l.png reference image on the left, and saved (and reloaded) image on the right. The saved image may have larger dimensions due to texture size restrictions. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: PYPNG_L_SAVE.py 661 2007-02-17 00:23:30Z Alex.Holkner $' import unittest import base_save from pyglet.image.codecs.png import PNGImageEncoder class TEST_PNG_L_SAVE(base_save.TestSave): texture_file = 'l.png' encoder = PNGImageEncoder() if __name__ == '__main__': unittest.main() pyglet-1.1.4/tests/image/l.png0000600013464101346420000004444011266427715014414 0ustar yohyohPNG  IHDR Y pHYs B4HLIDATxŶk q dI$IPT$)I$b H,`DD%$H %+0D *Hy+VUޞw}VU}k FD0b?/ oOZ$"jDY$f+UD *DBY* ^wI"ujx#8j_T#5R YjS/}[$69–'Z.*y坸"º~S.k!'x SWIFH J+ّ:U0%R˘*p+xI(MCGD[iqL%%*v{kHPNDS?#ZDwu`Ѩ1U iӦG&NHPթi-HUJq+l1 q$ ">>uDn?4tc.tikxa0RGq)=~r?R<.>:Ȉw^4(89H8*.QK>]z1V8B c c=&+ [S^aQ>4^?DҤC~pF/2dH-u &v gA&m' $qN k)ҧs^@cEzWbČO?[3dȘ>CF3f̐?z}@iJP1Qd@dAzȠIz՚!]Z=/ FzDȘ& p2ZV>tAWICʉo_?.JS$'e NE>X@OzOҀsi#&12VN\BbB"g!2%BiZ6&.} b H8HQ6G"$d1dZ<٠E@n]xfj/L 8eǕ1Ÿq:IFfD\7xRBj]@?Kf$>W o{#翃͜)s&3+U .Egbk&QH@zFʆވNMT Ab&&GE7 Δ1ZK6GRg΂{8PV1' ;|2<(AB;v2Y4&zD矙D ȇM["$ /,K۲%k\d̒vxʚ$!ehQ2)$ʜIBDǛoC !nD.\W)gِ$F/YD.f=+4K% &UMD+e9sfyn|OLȒ6Ty'_>ǿ\%D>̈r;Nk$3ndv^dr.H.kg7^ c.,ldBG|FD>*VVϵ J"@Dz;{6 a%kٳٍ|^,l ;dY P HVo)$uu;hylU@M wR~{]^sQ1raȃ̈AR=oX}6W&AclTQ2(gM` QΛif"0sPٳe39(uqrI\Xu"k6Ew!).)l|^OPC6Hr̙#{bkrb9#W.؅''/^vNlY ?{ P;sD#=/I찺S^xʕ+7ʝ+J{rc(/D<('r4U#'`Dr]Q9@6>'\ynKhq'R*?rɝd9Ou`z!\3G.otʥsTRY#eʑC(ϑ;U,L&ȝ%}|*uy%4Wj y9L!G<#WʒaXDxy8 eŎțd%W V9CyD;l͗7/_(χ9ܽr9@,\P G+Īl^<yB:n@[")R4o@Lpa]a8q`(rO"6ŁF ^(:"+I"n[QR<<9PV!+Nyi_E08EpxR#(ZHQX rs+6+:aBqB,;veJK?HXG!G+J/)RHq RYQz)*@/ӱ(V?_]%\k-1(RXkKt/'oc,Gi%׊6?N(_bSQx:gߥWbŊ]o|g.RX4JC֒*T:;{.\O<5ğ{5'r. 1]%%J(Vd K^/h/.>7PQE\ӔI4'E(^6nPэ-~[pj* uDirJ%Nvn* %0N"#j+ [J(9┡ŵ~GERfŋik50*^QڽZe(ɫ%CKc?HJ*)OR&D쇋n608L TR)a$IȒ%f4X*YbN+$1l*, =)eԽ%( Vʋ2GQ1EIn1 )I'ZF2QGr+Y LKR &9VRzS'ArZ#iqV ,,v|)FGI>-ISRN]gUSoU.U־֙`&&/,.}}@{[S}^ EP% »@ȢHK+{5t$Qz;̽Oʤ]9G4ĬL2gi)d?FSga/|#ɽ, 3 ^^;l_E)exW^r( UrF1*HT *"+j-ɂ--BQ.$ʳzNqpChg~"|FJ18 =4kA =Wh٧3FЧe33a ޴Pv+em+4&Tx@5}J]kДq>.W6`;`m\V˗X"'ѰS!x+j r'd( Os *t wVT*A*/F*S@;xP%(+Df"+2lOݔu)+UٕI*9ʚ"E(b fJeMTRq^8Èsժw&T X~E9JtTYQ ͕Y:ܕdᕙH2{P.N!ڽ ji5X;,2)`X8Hժd:Dj]4۱zUyՍlyW()[>"5IZ?VZ5,zUwbG5jի+1AjCDkA֠p0GQ-5Μp1U@T5aV&٫.5j@j0Ca PPuN2UT 5'#G5maqc5=jjVtY&5b(&NCY!&2TlK~KT\֑֒`t"ĎCլU3v~ZԢtתeƺ`QHPǰ(?<PYj=T%źb\qQu85իװUT }ApFP+ȇ Y-ߔZDC :$uBh`<FM_Cw_Sʮx 2DJSmjj4fmENI- PB:xm%OĊk3SCZuv\f:~J@֣ԯEM]__7l@-R[zQK Hn-."^Nuu;u9uI,h ~}您נF7h@A:T3!XLkZX/թ[/lg'\<zB@4 85n 5uu]5YթSNU\7zu* OP/L`DiCTQ,!i4h԰a#x6 ƍ52\?uΕS]!ԯoˊ=v=hC'rI4/Bh 4"#ka ͕S/\N  X>24dߥh W2EƔp4z&7 LJ1p4pvrŘaC)U?HHN4?Lħ`p&ah" x5mMhѤl)iPH   Ka>uxӯ MEI2h M-L~)\:B`%i/Jb#?}ckFwShBƒ4~M ģfR v8.J-.%*MĐM|iM>G~l4m1'thbJzD h4l#,;B`hFc&L=Jc4l9&P?h3 S3WLQ⛅+˞/ьr|y5m#Esz49œm< a+lCxcPT?=N1y Q\Έǝ $qMҟhQ'|O Nsz`lxa)#h B%/<k@(+"u9JJ^$PU:!.хC;$0BBcZY6dfx֤]igߖ V<)އ`"<ݎ'RMC;}8R`FS\NO+ mws4M۲moG8v:`@a'r1$}Z)~Jx:+ ŰlD; v =W!pq FLGaڊO=V޾Ӭ_"-)oK$Hr €mB;<ӱC{Aog,3yCgpFGz` F 6h'hGΆvv/&v1ʑu а#M4lLrJA2^[Lzpg;ؚj|X gP3a?%g!xsiˈC!:28 ֏llYyxgC@t G'c yY9ut'fP貎~YÚI'-]tƧsg Wg 3:=-#z x#Y'9H\gIhY3] -FW\u] :,)XQ#IO HJwzVգzi ]t~ &{;DW?t ]w9- -9xgRJ\L ,EZ|Gnv ]w#ݺNtr]uهP.rˡw6]+3uբr  eд;]vyz<!E\Y(ڹs@'pA .]"yxv'>#y΀<у'_[=pt TUvb ^=n8+3txG=_ xxM(tڄ fnvUS3C~ww=x!+i/HGO''/ٓ7T}@ڻ;P-s[ cz.dm`"d %xQ8zA{/ ŋ|c$  Mc7- BʨW;^@.jAs@@Ȇ'aLb0^z8K/gnESsأJ j)hTSKyt"Qex}IYD;L/S2 ءxQf lP?xGt3|Aw^(R\/(K{$Ep^y1^$|W\ ޯL+0=Ն]9*#++^}zAyF߾}$Š_yICe{A/F0 gCzq`$}P_~WWie^cW>}zwq/n!UBxr<: տ"F襦{+(q.8  ~Iw~}_/:`z3cp9QvՒ}B3ѫ}C!gOnH?-O%¹°\Wa} 2T@}FV<ypFn80Ry9Ӂts A@!*)W>F؁>&Cx0~Z9l x x 0f C |mN'F~GӺQ' Pw؀~DfHX+zAP+Lk4hA(èQ'ܯ"~Z>TVDAW>@R&Z@?5^Sf!mHOX*%`' R=e*?CA(E늎08BV rJ%S )~p@:1$`P1QF, [D2;WR6XJ*vX'~`/AC EL5t6:!Æ%chEI u4+AH"g xM)C`ϳ02! D$6| #OƯ"5BE4, 3Xkj,`_?`x C, ` mNpL1 -1xk,>hĠ@ ;<:̭gQCPݰp ýňFH:O20Dki:18\AT GC|{G 1`w Dzu| F4u 4(65P5 *a1PÇ[φa"\LuG NH+}c$pA6B&[~a]OpJńk% {]~_S<w?" 1GIF3(lh=ڈ1Cca+im&OwT 4b@ ^zhF[dףiy70 #;F3GM^-UQ4q~)D$` )F=s;Bƛod^1FVQDg?rH`t섳! A#8"/YͷMI³Q3:"ͬft67F: zF7x!D7x ߼[DK9{m`# ь2:tWT֏ՑN@Lo[vK;]48MmnFq5y 1*F]!],RN\Rև7cy *3δ5c3v,%c11 .-xP9ikT+(Aa+֔I8+P70f "-q>n8LqqͷVo8}~3o[c\ yHiq!O؎ QУ8@1v;;:0+&unnz`ܩaXgC3n1VABwjxƏ/J0w1c֒X>1zzLq\`dCWPxo 5wǻZ &` 7+&\F41V 2DA@83~x@x3 h@ZN&ʉ띠cKHS0j;Ӎ0xQ5G "\2a{t ޛ^ &`Cq>855A`u$tThz|BP&!B'i1aEDޤh{D(LIƇ =@*ػQ1"+'Z7PxNL`k"@Lzi$$4iLZ/kxA ZC 6]@+&NTIz $Iv%'NvmLLf7b JԳ\D9H3h  !:Ob3pDNCPC?i}ax jzϵ{0ab]0Zt57QmRLh>"UoB$4eʔLTBGD{vɪ]IA.'(ve>ݓkv ɬ܃ b>.>p!?vaĉA\E>[29VP)\JY9OLr*6!+chk}rʇ^|ч~}d#^uq;LVڧx)PɂсHe}`ąI@i| 882NjɃɓ]~A2@k4jQ1CLz$C`9@o sHx4zA bw" G>>ӦO|1usDtM>鴚n>D$OQ1U T~$? X1MiSŋSG!2Dp,fL1' XE|TbTii( >J6LiONNLc/L 7;1MSL.4n›NYtnIȅYbLa gΜLQӨ%`* mٓӹ7>5;.g ?!N̈B 8C̐5-l|̙'|̓-(ӧIz,3{|qcɔcc|BX/B '# ç)OWϘ퀔L<f I(H>bc&|AhO!{}$~g}g&Bg/>#`@t[^{>?D18ȶU9FџFHW|NkLl3mgK'3g:b0SEPOT炂fO`b| p $lBa]n6d \QX #S|烜rAHX}ypg?q̂{8bb, wO>]E9yi ZJz*  fAvlpr9gZL|΅5AsΤ<f O{|RP_̙3{sh1w Ϣ:0zqrR#B"TБ0D389< #FX/>i f&kE@;p\R?4bNPl_ͣ^i޼/FN"_@K>kV |Y8Ϛ3z0wΜ0\=:|C<_ЬYV:8#\ILs O%cO=~1d>Qͷ`/lcsz9c.(3T/Ć#SDb3z+W6sJ? %d\&|뇃X@ Wk,@꫅_}.iBZh_zhAy_lba/E !0 B.Z ]hHEHŐmy2{7J2 B0_cJ_XYpgϘ|aYȏ|C J0<[k or~E0,X# V?3,Z,Akd}mEH\ Zp |>_I"XKʺl,zQCHp7 F F2YpQI-bQ%,Z cQ,b^̕{ | of2I|4 v\lX,ͰxX%%ʿz|`_+߄A™[Xϒ%W40.U"+{BjE/*#WNZLfp,Q @%td$wK%t}sf`8\@m(G8\/QIa)+_XRt) ˖Xfl,%Kh;Ow2tɍlM7ɷ2ʗ,#|9 ƕe 'la+q-IEK .q {;2x2H-[.r!^|9|bm`V c),/6K| F8ʱܧ…0i+:V\iP+SKX;3,"eTX,@,].^NŲ..UX=Q\+VAʾX YX_HdBb8\N~Y|"'DʐAǕ+D !X1 ЃZW}=+q4ˤU+dSLkr RXpMcJSR@W}@8|/;0իWXVx60 -ctJWQ+VpՓ _MQV@Vb5_CZZfj#-W/{/ ((y=(٠o06hC R7kDS[CLl:`z/6H<6ƍm'6¸rpNz[J$*m5֮۰NP:*ntؠyVMY>omMww7Tgx%zf`[م@4,޵{MFݯwȏs3G2"ẗA3Ѡ^&6@ 8{ ~cc/\s@fGh,X``"x'E>P9Aw8|e3%8&>H=4:&G>rX$D@E8t@GuDK h'8|J拴[/"1 G1|CT7`'q@Kphc#8IcG ϏƯx+sȷqЖ6!- !t\9ʖj騅r@GS09+x0z4@rدF`#_FJ gxXa ־𷄣YւցGXQύxCJ2 Hh㿹8%ܸo{D(<#هR:Nnk4=!S@1cŚ`QP8X?,)`Cͱ,O"9II$xNᜤ$ȓp0a8<]~]`+P˿>kǃ\P_8~7~;>,@_Nc.V1fL'7SI.1Af9!q2pRM:(, _~OڴԩS8$QKNC9?v]v?6益D˱A?v~ĉ1y+7%%UUr/3JXyr1/~锄ؖ(IIͤͩ=8)ԩӧO+xpZF 7*A&!I:ȑuDsc]: 4~I:ߓ'_q"'$j H3H3QRR1N$TJT٘5Hizpb/D3ᛜ>} 270~ژ?ohL[>{xGWtI8rı2?<wOG's&r/$|$.) >9)i G󧊚H&[HkE Oif JsӘg=}Ξ>sdzg aN8N)'Ov1NK÷?u*թS-O_N^0?N:qY(N9!9H;u,H;{sg,D")6+tR1N}FȃGMq>y(Na3.{Ne!Sl͆D ᇃxY&[P;K'xPqֈs<9+ i11Tŧ7CQe޺1W$Z1^tP ?K9w.TXtdV/i1gϖ,jhmF@ŀ+}чA\CbU zd 7Gpaq--\s>P3}6fpWivF7 {yq]TCv'{ߺu3f¸)O0S/w=C|0/ /cJs#3Q5D>ETN,)sK 2 u?\y\bszܞ&'I`qy7y텱㟛kYOW 6w"ܼ!z g"7t C:r NS7oE ,nJB8<:?)mrf[&q5ȍ]o˕-3eN`%qGq:ve AoLcrߺ1fDq Es9%> ydҝ,ſ|oS|/pͿGޟYO_A>|#e$0{-64;s1(u{Rݘ;oܖ}ʴeZ+Jb*W)1d̃;n}LY+@>9ûG#ΒnH #?| -=&OUTC>kR)ai>_zg pmm/2T51ʗѧ.KX>Zԙʾ-}(jB_ZՋ=)ed{e{& ^r`/5A k) H`&e{M(&zTXtCommentxs.JM,IMQ(,PHUp R#epzTXtJPEG-Colorspacex322"zTXtJPEG-Sampling-factorsx30XIENDB`pyglet-1.1.4/tests/image/rgb_24bpp.bmp0000600013464101346420000054337211266427715015744 0ustar yohyohBM6(  NNMMNMNNNNNNMNNNMNNNNNNMNNNNNNNNMNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNMNMNMNNNNNNNNNNNNMNMNNNMNNNMNMMNMNNMNMNNNNNNNNNNMNNNMNNNNNNNNMNNNNMNNNNNNNNNNMNNNNMNNMNNMMNNNMNNMNNNNNNNMNNNNNNNNNNMNNNNNMNNNNNNNNNMNNMNNNNMNNMNNNNNNNNNNNNNNNMMNNNMNMNNNMMMNNNNNMMNNNNNNNMNMNMNNNNMNNMNNNMNMNNMNNNMMNNNNNNNNNNNNNMNNNMNNNMMNNMNMNNNNNNNMMNNNMMNNNNNNNNNNNNNNNNNNNNMNNNMMNNNNNNNNMMNNNNNNNMMNNMNNNNNMNNNNNNNNMNNMNNMNNMNNNMMNNNNMNNNNNMNMNNNNMNMNNNMMNNMNNNNMMNNNMNMMNNNNNNMMNMNNNNNNNNNNNNMNNNNNNNNMMNNNNNNNMNNNNNNNNNNMMNNNNMNNNNNMNNNNNMNNNMNNNNNNNNNNNNNNMNNNNNNNMNNNNMMNNNNNNNMNNNNNMNMNNNMNNNNNNNNNNNNMNNNNNMMNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNMNMNNNNNNNMNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNMNMMNNNMNNNNNNMNNNNNNNNNMNNMNMNNNMNMMMNNNNNNNMNNMNNNNNNMNNNMNMNNNNNNNMNNNNNNNNNNNNNNNMNNNNNNNNNMNNNMNMNNNNNMNNNMNNMNNMMNMNNMNNNMNNNNNNNNNNNMNNNNNNNNMMNNMNMNNNNNNNNMNNNNMNNNMNNNNNNNNNNNNNNNMNMNNNNMMNMNNMNMNNNNMNNNNNNMNNNNNNNNNNNNMNNMMMNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNMMMNNMNNNNMNNNNNNNNNNNNNNNNMNNNNNMNNNNNNMNNNMNNNNNNNMNNNNNNNNNNNNNMNNNNNNNNNMNNNMMMNNNNMNMNNNNMMNNNMNMNMNNNNNNNNMMMNNNNMNNMNNMNNNMNNNNNMNNNNNNNNNNMNNMMNNNMMNMNNNNNNNNNNMMNNMNMNMNNNNNNNNNNNMNNNNNMNNNMNNNMNNNNMNNMNNMNMMNNNMNNMNNNMMNNNNNNNNMNNNMNNNNNNNNMNNNMNMNNNNNNNNNMNNMMNNNNNNNNMNNNNMMNNNNMNNNNNNNNNNNNNMMNNNNNMNMNNNNNNMNNMNNNMMMMNNNNNNNNNMNNNMNNNNNNNNNNNNMNNMNNNNNNMMNNNNNNMNNNNMNNNNNMNNNMMNMNNNMNMNNNNNNNMNNNNMNNNMNMNNNMMNMNMMNNMNNMNMNNNNNNNNNNMNNMMMMNMNNNMNMMNMNNNNNNNNNNNNNMNNNMNNNMNMNNNNNNNNNNNNNNNMNNNNNMNNNMNMNNNNMNNNNMNNNMNNMNNNNMMNNNNNNMMNNNNNNNNNNNNMNNNNNNNNMMNNNNNNMNMNNNNNNNNMNNMNMMNNNNv89%AռNNMMNNMNMMNNNNNMNNMNNNNMNNNNNNMNMMNNNNNNNNNNNNNMMMNNMMNMNNNNNNNNNNMNMNNNNMNMNNMNNNMNNNNNNNNNNNMMNNMMMNNNMNNMMNNNNNNNNNMNNNNNNNNNNNNNNNNNMNNMNNMNMNNNNNNNNNNNNNNMNNNNNNNNNNMMMMNNNNNNNNNNNNNNNNMMNMNMNNNNNMNMNNNNNNNNNNNNMMNNNNMNNNMv7& INMNNMNNNNMNMNMMNNMNNNNNNNNNMNNNNNMNNNNNNNNNNMNNNNNMNMNMMMNNNNNNNNNMNNNNNNNNMNNNNNNNNNNNMNNNNNNMNNNNNNNNNNNNMNNNMMNMNNNNNNNNNNNNNNNNMNMNMNMNMNNMNNMNNMNNNNNNNNMNNNNMNNNNNNNMMMNMNNMNNMNMNNNNNMNMNNNNNNNNNNNNNMNNMNNNNNMNMNNNNNNNNNMMKi4g4NNNNMNMMNNNNMNNNNNNNNMNNNNNMMNNNNNNNNMMNNNNNMNNNNNNNNNNMNNNMNNMNNNNNNNMNMNNMNNMNNNNNNMMNNNNNNNNNNNNMNNNNMNNNMNMNMNNMNNMMNNNNMNNMNNNNNNNNNNNNNNNMNNNNNMNNNMMNMNNNNNNNNNNNNMNNMNMNNMNNNNNNNNNNMNNNNNNNNNNMNNNNNNNNNNNNMNNNNNMNMNMNNNNNL$) LNNMNNNNMNNMMNNNNNNNNMNNNNMNNMMNNNMNNNNNNNNNMNMNNNNNNNNMMNNNNNNNNMNMNNNNNNNNMNMNMNNNNNNNNNNNMMMNNNNMNMNNKX/%&X/KNNNDI*#( `1LNMNMy9C(' %<&e3DڼNNCY/1# !5$e3KNNNNNNMMLb2) #J+EݼNNNNMNNNMNNNNs7h3MNNNNMNNFI*%NNJg46$!!6$h4KNNMNNNNNNNNG;ǼNNNNNMx9C(' %<&e3DڼNNNNNMNJg46$!!6$h4KNNNNNG4$NMM8%F߻NMMNMNNNNNNNNNMNNNNNMNMMNNNNMNNNNNMNNNNMNNNNNNNNNU.O,NNG& R-NNJ>'MNK+NMNNNNNMS-' GMMNMNNMMNMN{:a1NNNMNNNNNF)NI2#4#INNMNMNNNNN`1<&NNNNJ>'NMNNNNI2#4$INNNMo6F߼NGn6MNNNNNMNNMNNNMNNNNNNNNMNNNNNNMNNNNNNMMNMNNNNNNNNN#BֳKb2MNW/P,JJO,NNd2A(D۹LKDu8<&NNF)>ͮIM@ NNNMNMNMO,IJP,X/NNMMNNNNNN<Y/MNNMNMNNNN#CۼNMN\0R-JIO,^1MNNMNMNMNI#( B׻NNNd2A(D۹MJDt7<&NMNNNN]0R-JJO,^1MNNN:%s7Nv89%MNMMNNNNNNNNNNNMNNNNMNNNMNNNMNNMMMNONNNOONNNNOOOO&@зNMON+!GOOGNN."HOOOONNNOOOLCq7+!NOOOONOOGNNH,!NNOOOONNO>R-MOOOOOONOOONNOO-"HNOG."NNNOONOOOm6=S-OOO."GOOONONNOOONN-"HNOH."ONNG3$D)NE)3$F޻NNNNOOOOOOONOONONNONONNOONNNONOONONNNOOOPOOOOPPOOOO^1OONOPOPO OOEB(v9OOPOOOOONOONOPPPNOOOO!K,OOOOOOOOPOPOOOOONOOO OOPOOOOPN*!@(O1# KOP OOPPOONOON POOm7=&H%=m6OOPOOOPPPOOOOOOOOOOPOOOOOOOPOPOOPOOPPPPPPPPPPPPPPPPOq8;'$ PQ+!IPPIPP."& PP7%4$Q.n7GݺPPPPPPPPPIPPI,"QPPPIPNPP+!E*NPQPPPPPPPQPPQPP,"IPPJ."PPPPQPPPy;s9Pj6j6PP."& PPPPPP-"IPPI."PPP8%LL,L,L,L7%PPPPPPPPPPQPPPPPPPPPPPPPQPPPPPPPPPPPPQQQQQQPQPQQQQQQg5GܵOOE5%QQV0N-LLN-QQ_3p8MO>O-QQ FٷOK~=@)PPQQQQQQM-LMO-W0QQQQR.N>-"QQI.";'KQPQQQQQQQQQQPQ\2P.LMO-\2QQQQQQQP3$JQI*!OQ`3p8MO>O-QQQPQQ[2P.LMN-]2QQHC*Qu:u:QD*H޹PQQPPQQQPQQQQQQQQQQQQQPQQQQQQQQQQQQQRQRRRQRRRRQRM-x<ĸRQK' S/RRM8&,"KQQF+QQRQRRRQR/( KRRQQS/a4QQRK2$2$KQRRRRQQRRL2$3$MRRRQRRQA='RRQ>(?ɸQN8&,"KRQQRRRM2$3$MRQj7s9RHHݸQr9j7QQQRRRRRRQRQRRQQQRRQRRRRRRRRRRRQRQRRSSSSSRSRRSSSl8' A)?ɷSRRRII,#)!`4PRSRPm8;'$ 2$_3MRRRO`43%! 3%]3GطSRRRRRRRP`4)!#I,I޷RRSRRP]3& & X1PSSRSM6%,"IܷSRSRSRRSRNe66%"!5%e6NRRSSSSRR?)o9SSRv<=(SSQm8;'$ 2$_3NSRRRRSRSNe66%"!5%f6ORSR6%KSS*!*!RRK6%RSSSRRRSRRSRRSRRSSRRSRSSSRRSSRSSRSRRSTTTSSSSTTTSTSSSTSSSSSSSSSSSSSSSSSSSTTTSSSTTTTTSSTSSSSSSSSSSTSSTSSSTSSTSSTSSSSSTSSSSSSSSTSSTSSSSSSSSSSTSSTSSSTSSTSSSSSSSSSSSSTSSSTTSSTSSTSSSSSSTSSTTSSSSSSSSSTSSSSSTTSTSSSSSSSTSSTSSSSSSSTSTSSSTSSTTSSSTTSTTSSSSSTSTSSSSSTTTTTTTTTTT' EԴSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUTTTTTTTTTTTTTTTTUUUUTUTTTUUV2UTUUUUUUUUUUUUUUUUUUUUUUTUTUUTUUTTUUUUTTUTUTUUUUUTUUUUUUUUUUTUUUUUTTTUTUUTTTUTUTTUUUUUUUUTUUUUTUUUUUUTUUTUUUUUUUUUUUUUUTTUUTUUUTTUUTUTTUTUUTUUTUUUUUUUTTTUUUUUUUUUUTTTUTUUUUUUUUUUUTTTUUUTUUUUUUUUUUUUUTUVUVUVVVVUUR\4,"VVUUVVUUUVVUVVVVVUUUUVVVVUUVVVUVUUVVUUVUVVUVUVUUUUVVVVVVUUUUUUVVVVVVVUVUUVUUVVUVUVUUUUVVVVVVUUUUVUUUUVUVVUUVVVUVVVUUUUVUUUUUVVVUUUUVUVVVVVVVVVUVVVVUVVVVVUVUUUVUVUUUVUVUVVVVVVUVVUVVVUUUUUUVUVUVUVVVUVVVUUVVVWVVVVWWVVWVVVVVVVVWWWWVWVWWWVWVWWVWVWVVVVVVVWWVVVVWVWVVVVWVVVVVWWVVVVVVWWVVWWVVVVWWWVWVVVWVWWVVVVVVWVVVVWVVWWVVWWVVWWWVVWVVVVWVVVVVVVVWVVVVVVVVWWWWVWWVVWWVVWVVWVVVVVWVVVVWVWWVVWVVVWWVVVVVVVVWVVVVVWVVVVVVWVVVWVVVVWVWVVVWVWVVVWWVVWVVVVWWWWXXWWWWWWWWXWWWWWXWXXWWWWWWWXWWWWWXWWWXWWWWWWWXWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXWWXWWWWWWWWWWWWWXWXWWWWWWWWXWWWWWWWWWWWWXWWWWWWWWWWXWXWXWWWWWWWWWXWWWWWWWWXWWWWWWWWWWWWXWWWWWWWXWWWWWWWWWWWWWWXWWWWWWWWWWWWWWWWWWWXWWWWWWWWWWWWWWXXXXXXWXWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXWXXXXXXXXXXXXXXXWXXXXXXWXXXXXXXXXXXXXXXXXXXXXXXWXWXXXXXXXXXXWWXXXXWWXXXXXXXXXXXXXXXWXXXXXXXXXXXXXXXXXXXXXXWXXXXXXXXXXXXXXXXXXXXXXXXXXXXWXXXWXXWXXXXXXXXXXXXXXWXXXXXXXXXXXWWXWXXXXXXWXXXXYYXYYYYYYXYYYYYYYXYYXYXXXYYYYYYYXYYYYYYYYYYYYXXYYYYXYYYYYYYYYXYYYXXXYXYYXYXYYYXXXXXXYXYYYYYYXYXXYYXYYXXYYXYYYYXXYYYYXYYXYYYYYYXYXYYXYXYXYYXXYYYXYXYYYYXYYXYXYYYYXYYXYYYYXXYYYYXXXYXXYXYYYXXXYYYYXYYYXYXYXYYXYXXXXXYYXYXXYYYXYYYYYXYYYYYXYYYZYYYZYYZYZYZYZZZZZZZYZZZZZZYYYZZYYYZZYZYYYYZZYYYYZZYYYZZYYZZYYZYYYYYYZYYYZYYZYYYYZZZYZZZYYYZZZZYYZZZYYYYZZYZYZII/'!(!D-|DʰZZYZZYZYZYYZZZYYZYZZYZYZYYZYZZYYYZYYYZYYZYZZYYZYYYYYZYZYZYYZYZZYZYZZZYYYZYYYZZYYYYYYZYZZZYYYZYZZZYZYZYYZZYYZZYZYZZYYYYZ[Z[ZZZZ[[ZZ[ZZZ[Z[[ZZZZZZ[[[ZZZZZZZZZZZZZ[ZZZZZZ[[Z[ZZZ[[Z[Z[ZZ[[ZZZ[ZZZZZZZ[ZZZZZZZ[ZZ[[ZZ[ZZZZZZ[[[ZZZ[[ZZZN1ZZ[ZZ[ZZZZZZZZZZZZ[Z[Z[[Z[ZZZZZ[ZZZZZ[[ZZZ[Z[ZZ[ZZZZZZZZZZ[Z[Z[ZZZZZZZZZZZZZZZ[Z[[ZZZ[ZZZ[ZZZZZZZZ[ZZ[[ZZ[ZZZZZZ[[ZZZ[[[[[[[[[[[[[[[[[[[[[[\[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[E.IҦWYK/$tBŮ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\[\\\[\[\\\\[\\[\[\\\\[\\[\\\\\\\\\[\\\\\\[\[[\\\\\\\\\\\\[[\[\[\\\\\\\\\[\\[\\\\\\\[\\\\\\\\[\\[\\\[[\[\[[\\[[\\[\H=+[\[\\[\\\\[[\\\[\\[[\\[[[\\\\[\\\\\\\\[[\\\\\\\[\\\\\\\\\\\\\\\\\\\\\[\\\\\\[[\\\\\\[\[\\\\\\\[\\\\\[\[\\\[\\\[\[[\[\\\]]]]]]\\\\]]XR4$ % R4X]\NS5/% 2&^:Y]]]\\]]]YR4$ % R4X]\]]\]\]Z[8(""E/Qݬ]\]YR4$ % R4Y\\\Zg=8)# ;*~Gͬ\]\]]j?a:]]RF/#(![9W$ ]]]]\]]\X`;3'! 4'`;Y\\\YT5% % Y8Z]\]\]\]\QE/"'!Z7Z]]]]]]]]\SE.$ \]\\]\YR4$ % R4X\]]TE.$ \\]]\\]]\\]]]]\\]]^]]]^^]]]]]^]]O3J1]^F/]]^]]]^^P4J1]]]]]]]^N3&!T]]O4J1]]X5(]^]^rCZ8]^U'!N3]]]^^]]X0%1&W]]Z8N3]^^]^]]T%!M3]^^]^]]]^A-]]]]]]O3J1]]]A-]]]^]]]]]]]]]]]^]^^^^^^___^^^_^^#N֢ZZ9^^A.|I͟X\M _^^^_^_^#N֣Z[9^^^^^^^^J1XYJ1R5^^#N֢Z[9^^Y89*Rۧ\UQ5^^^wFS5]^^R5J1YXG0^^^^^_^U7L3YYJ1W7^^+#yGʣZN3^^_^^^^P4J1YYJ1^_^^^^^_^"Q۪^^_^^^^^#N֣Z[9^_^"Q۫_^^^^^^^^^^^^_^_^^^______^____^___% KЧ\\____[Qh?)"________% KЦ]\________V_^V*#__% KЧ][__+#Sܪ__^___}JL3^___*#V__U_^_____+#V__U,$__]_V_^_____*#V_^U___^_^^_^_________% KЦ]\_____________^____________```_`_`_`___W8`_S>,kB_`_`__``W8_````_`___`]``W8``]`__`_` F0^````_`_^``_```___`]````_``__```^`_^`_```````````_`___W8`````_``_____`__`_``````aa````a``W`^`a^g@8*# `a4(1&K3f@Tݨ``a``a```_g@8*# ```aaaaaW`aW*#`a_g@8*# aa+$Tܨ``aaaa)#@.\``a`*#WaaW``Uܨ```a+#X``W,$``a```aW`^``*#W``W`````aa``````Wa]``^g@8*# `````aaa`aa`aaa`a``a`a`abaaaaaaabL4]vI+$aab^=Uܣ__R2'aa S٥`YtG<,baaaabbaa^=Uܣ__R2'aaaaaaabH2\[I2Q6aab^=Uܣ__R2'aaW97*Tۤ_VM5baW,$8*[baaP6F1\[F1bb;,VަaaaT8J3\[I2U9baaabbbL4]vI+$aaO6I2\[H2aaaaaaaaaaaaaL4]vI+$aba^=Uܣ`_R2'aabbbbaabaaababaaaabaaabbbbbbbbbbM5Y;bbbG2mEĦbbB/bbbbbbbbbG2mEĦbbbbbbbbL4'"YbbbG2nEĦbb]4(bbbY0&0&YbbY'"L5bbJ3b\/&0'\bbbbbbbM5Y;bbY&!M5bbbbbbbbbL5Y;bbbG2nEĦbbbbbbbbbbbbbbbbbbbcbcccccccc`V:%!%!Q7`bcbc@&!=-sIɥbcc^X;1'! 1'U:SإcbcccbccbcA&!=-tIɥccbbcccbcaY;'"" D1Wߦbccbc@&!=-sIɥcccc`dA7*# <-zMΦccbc\4(*#VܥccXE1" '"X;acc_W:("bc^]=3(!!2(^>^ccccbccb_V:%!%!Q7_ccbWD1" '"Y;abbbbccbbc_V:%!%!Q7`bcccA&!=-sIɥccbccccccccccccbcbcbccdcddddcddcdcddcddddcddddddcdccdccddcccccddddddddcddcddddcddddcdccccddcdcddccdcccdddddccddcdcddcdddccdddcdddddcdddcccddcdcdddddccdcdddddcddccdccdcddccdddcddcddccdccddcdcdddccdddcccddccddccdccddddccccddcdddcccdddddeededddddeddedddddeddeddddddddddeddddededdddeddeddeededdddeedeeeedddddddedeeeddeeddddddddeddddeddeededdddddddeeddddddddeedededeedddddeddeddeddddededddedddddddeeedededddddeededdeededdeddddeeeddddeeddedeeddeddedddeddeeeeeeeeeeeeeeeeeefffeeeeefeeeeeeeeeeeeeeeeeefeeeeffeefeeeeeefffeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeeeeeeeeeeeffefefeeeeeeeeeeefeeeeeeeeeeeeeeeeeeeeeefeeeeffefeeeeeeeeeeeeeeeeeeeeeeeeeefeeeeeeeefefeeeeefefffefffffffffffffffffffffffffffffffffffeffffefffffffefffffffffeffffeffffffffeffefefffffffffffefffffffffffeefffffffffffeffffffffefffffffffffffffffefffffefffffffffffefeffffeffffefefffefffffffffffffffffffeffffffffffffffffffggfgfggggffgggffgfggfggfggffgfggggfgfgffgfgggggggggggfgggggfggfggfggfggggfggggggggggggfgggggggggfgggggggfgfgggfgggffggggggggffgfggfggggffgggfggfggggfggggfggfgfggggfgfgfgffgfgffggffgggggfffgfffffgggggfgggfggggggggfgffffggggfggggggfggggggggghgggghgggghghgghgghghgghgghghhgghghhhhhhhhhhhghhhhggghggghhhhggghhghghhgghhgghghgggghhgghhhhhggggghhhhhhhgghghghhgggghhgghhhghghgghggggghgghghgghghhggggghghghghgggggghhghgggghhhgghhghhhhghhghhhghhgghgghgggghhhghgggggghggghghghhhghhhhhhhhhhhhhhhihhhihihhhhihhhihhhhhhihhhhhhhihhhhhihhhihhhhihihihhhhhiiihhhhihhihhhhihhhihhhhhhhhhiiihihhhhihihhhhhhhhhhhhhhhiiiiihihhihhhhihhhhhhhhhihhiihhhhhhhhhhhhihhhhhhihhhhhhhihhhiihihhhhhhhhihihhihhhhhhhhhhihhihhhhhihhhhhihhhhhhhiiiiiiiiiiiiiihiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijjijijjiijjijijjjjjjjjjjjjjiiiijjjjjjijjiijjjijjjjjjiijjijjijjjjjjjjjjiiiijijjijijjjiiijjjiijjjjjjjjiiijjjjjjjjijjjiijjijijjjjjjjijjjjjjjjjjjjijjjjjjjijjjjijijjijijjjjjjjjjjjjjjj{UC4&"'#?1pOʞjjjijjjjiijjjijjjjijjijijjjjjijjjjjjjiijjjjjjijjjjjjkjkkjjjkkjkkkkkjkjkkjjkjjjkjkkkjjkjjjkkkjjjkjjkkjjkjkjkjkjjjkjkjjkjjkkjjjkjkjjkjjkjjjjjjkjjkkkkkjjkkjjkjkjkkkjkjjkkkkjkjjjjkjjkkkjjjjjjjkkkjjjjkjkkkkjkkkkjjjjjjjjkjkjkjkkjjkkjkH7jjkjkkkkkkjjjjkkkjjjjkkkkkjjjjjkjjkkkkjjkkkjkjkkklklkklkklkkkkklllklkkkkklklllkkkkklkkkkkllklkllkklkkkkkkkkklllllllllkkklkklllkkkkkklkllkkkklkkkkkklklkllklkkkkklkkkklkkkkkkklkkkkllkkkkkklkkkkkkkklklklkklklklkkkkklklkkkkllkkkkll@3yUҖgh|W,&iLƝkklllkllkkklkkkllllkkkllkkkkllkkkkllkkkkllkklkkkllmmlllmlllllmllllllllllllllllllmlllllmlllllllllllllmmllllllllllllllllllllllmllmlllllllllmlllllllllllllllllllllmlllllllllllllllllllllllllllllllllllmllmlllllmlllllllllllllllllmmlmmllllvT9.lllmllmmlllllllllmlllllllllllllllllllllllllmllllmmmmmmmmmmmmmmmlmmmmmmmlmm~[M;-' 0)VAhmmmmmmmmllmlmc%"I9mmjjM@3($ *%>2\E^ܛmmm*%C5uUЛmmlmmmmmmmb?3#!lmkfK;0%"#!6-VA]ڛmm~[M;-' 0)VAhmlmb@3#!lmmmlmmmmmmlmmmmmhK:#!$!K:hmmm`A4" &#T@f#!mlmkfK;0%"#!6-VA]ڛmmlmmmmmmlmmmmmmmmmmmlmmmmmmmmlmmlmmnnnnnnnnnnnnnnnmnnnnnnnmnmA4nnnnnmnmmnnnl;1-'ina1*nnneKÚnnmnnmmnm=1nh7.nmA4mmm=1nnnmnnnmmnnmnnmmnI9D6nnd&#H8nmi7.nmnnnmmnnnnnnmnmmnnnnnnnnnnnnnmnnnnmnonoonnnnonnnoonnnnonnnono=1qSΎgmyZnonnonnoooon_I|[יoj+&?3zYՓknbonnnohZE*&oononoooo! _ۙonnTA9/^ۗlk^bJ5-on=1qSΎhlyYnnn! ^ۙnnnooonnoonnnnonono" {Z֒iSAnoL;D7ghB5noTA9/^ۗlk_bJ5-oooonnonooooonononnnnnnonnnoonnnnnooopooooooooooooooooooooooopook~^_I($oopooooooomtW! SBooZE@4nooopoopoopl ooooooooooooo*&doooooopppoj~^_I($oooppoopoopoooooooooooo$!sVЖmmoo)%doocpo+&dooooooopppoopooopooooopoooppopoooooooooooppppppppppppppppppppoppppppa:0bK—pppppppppH:npp2+{]חppppppppppjZF=3pppppppppppppppa:0bKpppppppppppppppoppoppppP?ppoppnpppppoppppppppppppppppppppppppppppppppqqqqqqqqqqqqqppqpqqdqnqpqq2+/)F9]HbݗqpqpqqpqqqJostssmPB.) .)N@z`ؔssssssssssssnssUFC8sssssssssssssossssssssssso[J4-"!-(PBlsssmPB.) .)N@z`ٔsssssstsssspJ>! (%_Lsf<3'$QBpstsZI%"91iSɕsssse@6" &#QBpssso[J4-"!-(PBkssssssssssssssssssssstssssssssssssssstststttttttttttsttsttttsttttttttttttstttstttttttsttlNA/*ttm)%C9{bُppeaO5/tttttrfS)%ttttttttttttstttsttttttstttttttttsttttttttttttttstttsttttstttsstttttttstttsttsttttttttttttttttstttttttttttttttttttttttttttttstttstttttttttuuuuutttuutuuuuttuuuuuuuuutututuuututtfSǓuuu~f-)uttuVGututuuuuuttuttututuuttuuuuuuttuuuutttuutuuutuuuttutututttuutuuuuutuuuuuuutuuttuutuutuuutuuuuuututuutuuuuttuutuuutttuuuttttuuututuuuttuuuuuuuuvvuvuvvuvvuuuuuuuuuuvuuuvvvuvuuu(%>6o[Вvuuvvr`O;3&$! -)D:eTȑvvuu#"6/_O‘tvvuuuuuuvuuvuvuuuuuvvvuvuvvuuuvvuvvvvuuuvvuuuvuvvuuuuvuuuuvuuuuuuuvvuvuvvvvuvuuuuuuuvvuuuvvvuuvuuuvuuuuuvuuuvvuuuvvuvvuvvuvuuuvvvuuuvuuvvvvvvvvvvvvvvvvwvvvvvvwwvvvvwwvvvwvvvvvvvvwvvvvwvvwwvwwvwvvwwwvvvvvvvvwvvwvvwvvwvvvwwvvvvvvwvvvvwvvvwvvvvvvvvvvwvvvvvvvvvvvvvwvvvvwvvvwwvwvwvvvvvvvvvvvvvvvvvvwvvvvvvvwvvvvwvvvvvvvvvwvvvwvwvvvvvwvwvvvwvvvvvvvvwwwvwvwvvvvvwvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxwxwwwwwxwwxxxxwxxxxxxwxxwwxwxxxxxxxxxxxwxxxwxxxxwwxxxwxxxxxxwxxxxwxxxxxxxxxxwxxxxwwwxwxxwxxxxxwxwxxxxwxxxwxxxxxwxwxwwxxxxwxxwxxwwxxxwwxxxxxxxxxxwxxwxxxxxxwxxwxwxxxwxwwxwwxwwxxxxxwxxwxxxwwxwxwxxxxxxxxxxxxxwwxxxxwxxxxxxxxxxxxxxxyyyxyyxxyyyxxyyxyxyxxyxxyxyxyxyxyxyxxyxxyyyxyyxyxyyyxyyyxyyxxxxyxyyxxyyyyyyyxyxxyxyxyyxyxyxyxxyxyyxyyxyyyyyyyyyxyyxyxyyxxxxyyxyxxyxyxxxyxyxxxyyxyyxxyxxyyyxyyyyxyxyyxxxxxxyyxyxyxyyyyyyxyxyyyxxxyxyyyyxxyyxxyxxxyyyxyxxyyxxyxxxyyxxyyyyyxxxzyzzyyyyyyzzyyyyyyyzyyzyzzyzzyyyzzyyyyyzyyzyyyzyyzyyyyzyyzyyyzyyyyzyyyyzyzyyyyzzyzyyzyyyyyyyzyzyzzyyyyyzyyyyyyzzyyyyzyzyyyzyyzyzzzyzyyyyyyzyzyzyyyyyyyyzzyzyyyzyyyyyyyyyyyyyzyzyyyzyzyzyyzyzyyzyyyzyzyyyyyzzzzyyyyyzzzzyyyzyzyyyyyyzzyyzyzyzzzzzzzzzzzzzzzz{{zzz{zzzzzzzzzzzzzzzzzz{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{zzzzzzzzzzzzzzzzzzzzz{{zzzzzzzzzzzz{zzzz{zzzzzzzzzzzz{zzzzz{zzzzzzzzzzzzzzzzzzzzzz{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{zzzzzzzzzzzzzzzzzz{zz{zzzzz{zzz{{{{{{{{{{{{zzzzz{{z{{{{z{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{{{{{{{z{{{{{z{{{z{{{{{{{{{{{{{{{{{{zz{{z{{zzz{{{{{zzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{z{{{{{{{{z{{{{{{{{z{{{{{{z{{{{{{z{{z{z{{z{{{z{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{z{zz{{{{z{{{{|||{{{||{{|{{|{{{|{|{{|||{||{|{{||||{|||{{|{||{|||{||||{{{{{|||||{{|||{||||{{|{|||||||{|||||{|{|{{{|{||{|{||{|||||{{|{||||{{{|{{||||{||||{|||{{|||||||{{{|{{||{|{||||{|||{|||||||||{|||{|||{{|||{|||{||{||{|{|{{||{||||||||{||{{||||||||{{{|||||||}}|}|||}|}||||}||||}}}||}|||||}}||}}|||}|}}}}|||}||||}}}|||}}}||}||}|}||}}|}|||}|}|}|}||}||}}}|}|}|}}}|}||}|}|}||}||}}|}}|||}}|}|||||}}|}|||}|}}||}}|}}}||}}|}}|||||||}}|}||}|||||||||}|}|||}}|||}|}|}|}||||||}||||||}}}}|}||}|||}||~}}}}~}}~~}~}~}~}}}}}}}}~}~~}}~~}}}}~}}}}~}}}}}}}~}}}~}}~}}}~}~}}}}}~}}}}}}}~~}}}}}~}}}}}~}}~}}}}}}}}}}~}}}}}}}}}~~}}}}}~}}}}}}}}}}}~}}~}}~}}}}}}}}~}}}}~}}}}}}~}}}~}~}}}}}~~}}~}}}}}}}}}}~~~}}}~}}}}~~}}}}}~}}}}}~~}~}}}}}}}}}~}}}}}~}~}}}~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}~~~}}}}}}}}}}}}}}~~}}}}}}~}}}}}}~}}}}}}~~}}}}}}}}}}~}}}}~~}}}}}}}}}}}}~}~}}}}}~}~~}}}}~}}}}}}}}~}~}~}}}}}}}}~~~}}}~}}~~}}}}}}}}~~}}}}}}~}~}}}}}}}}}}}}}~}}}}}}}~}}}}}}}}}}}}~}}}}}~}}}}}}~}}}}}}}}}~~}~~}}}}}}}}}~}}}}~}}}}~~}}}}}}}}~}}}|}}|||}|||}|}||||}||}}||}}}}|||}|}|}||}}||||}|}|||||}||||||||}}||||||}||}}||}}||}|}}|}||||||||}|||||}|}|}}}||||||}|}|}}||}|}|}}|||}||}||}|||||}|}||||}||}}||||||||}|}|||}||}|}}||}|}|||}||}||}|||}|}|}}|||||||}|||||}|}|||||||||}}||}|||}}||||{{{|||{{{||{|||{{|{{|{{{{{{{{|{||||{|{||{{|||||||{{||{{||{|{{{{{{|{{|||{{||{{||||{||{|||{|{||{{|{{||||{|{||{{{|||||{|{|{{{{{||{||||||{{{|{|||{{|||{{{|||{{{||{|{|{{||||{{{||||{|{|||{||{||{|{||{|{|||||{{||{|{{||{{{{||{|||{{{|{{|{{{|{{{{{z{{{z{z{{z{{{{{{z{{{{z{{z{{{z{z{{{{z{z{{zz{{{{{{{zz{{{zz{{{{{z{{{{z{{{{{{z{{{{zz{{{{{z{{{{{{zzzz{{{{zzzzz{z{{{zz{{{{z{z{zzz{{{z{{z{{{{{{z{{zz{{{z{{{zzz{{{z{{{{{{z{z{z{zz{{{z{{z{{z{{{z{{z{z{{z{{{{z{z{{{{{{z{{z{z{{z{{{z{{{{{{zz{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyzzzzzzzzzzzyzzyzzzzzzzzzzzyzzzzzzzyzzzzzzzzzzzzzzyzzzzzzzyzzzzyyzzzyzzzzzzzzzzzzzzzzzzyzzzzzzzzzzzzzzzzzyzzzzzzzzzzzzzzzzzzzzzzzzzyzzyzzzzzzzzzzzzzzyzzzyzzzzzyzzzzzzzzzzzzzzyzzzzzzyzzzzzzzzzzzzyyzzyyyyyyyyyyyyyyyyyyzyzzyyyyyzyyyyyyyyyyyyyyyyyyyyzyyzyyyyyzyyyyyyzyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzyyyyyyyyyyyyyyyyyyyyyzyyyyyyyyyyyyyyyyyyyzyyyyyyyyyyyyyzyyyyyyzyyyyyyyyyzzyyyyyyzyyyyyyyyzzyyyyyyyyyyyyyyyyyyzyyyzyxxxxxyxyxxxxxyxxxxxxyxxxxxxxxxxxyxxxxxxyxxxxxyxyxxxxxxyxyxxyxxxxxyxyyyxxxyxxxxyxyxxxyyyxxxxxxyxxxyxxxxyyxyxxyxyxxxxxxyxxxxxxyxyxyyxxxxxxyxxxxyxyxyxxyxxxxxxxyxxxyxyyyyyxyxxxyxyxxxxxyxyxxxyxxxyxxyxxxxxyxyxxyyxyxxxyxxxxxxxxxxyxxxyxxxxxxxywxwxxwxwwwxwwwwwxwxxwwxwxwxxwxwwxxwwxxxxwxxxxxwwxxwxwxxxxwxwwxwwwwwwxwwxxwwxxwwwwwxwwwxwwwwwwwwxwwwwwwwwxxwwxwxwxwxxwwwxxxxwxxwxwxwxwwxxxxwwwwwwwxxwwwxwxxwwxxwwwxxwwxxxxxxxwwwxxwwwwwxxwwwxwwwxwxxxwwxxxxwwwxwwwwwwxxxxxxwwwwwxxwwxxxwwwwwwwwwvwwwwvwwwvvwvwwwvvwwvvwwwwwwvwwwwvvwwwvvvwwvwwvvvwwvwvvvwvvwvwwwwwwwwwwwwwwwvwwwwwvwwwwvwvvwwwvvvvwwvwwvwvwvwvwwvvvwvvwwwwwvwvwvwwvwwwvvwwwvwvvwvvvwvwvwvwwvwwwwwwwvwwwwwvwwvwvwwwwvwwwvvwvwwvwwwvwwwvwvwwvwvwwvvvvwvwwwwwwwwwwwwvwwwvvvvvuvuvvvuuuvvuvvvvuvvvuvuvuvuvuvvvvvuvvvuvvvvvvvuvvvuvvvvvvuuvvuvuuvvvvuvvvuuvvvvvvvvvvuvvvvvvuvuvvvvuvuvvvvuuvuvvvvvvvvvvvuvvvvvvuuuvvuvvvvuvvvvvvvvvvvuvuuvvvvvvvvuvvvvuvvvuvuuvvvvvvvvvvvvuvuvvuvvuuvvvvvvvuvvuvvvvvvvvvvvvvuvvuvvvvvvvuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuutuuutuuutuuuuuuuuuuuuutuuuuuuuuuuuuuutuuuuuuuuuuuuuuuuutuuuututuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuutttttttttttutttttuttutttttuttttttttttttuttttttttuttttttttttututtttttttttttttttuttttttttttttutttttttttttttttttutttutttttttutttttttttuttttttttuttttttttttttttttttttutttututtttuttttttutttttttttttttttttttttttttttttttttttttttttttttttttttttttssttssssstttsttsststtsttstssstsststtsssstssstsssttssttststsstssssstttststtssstsssssstststststststttsttttstsstsssttssssssssttssstsssssttttsssssstssssstttstttsssssstsstssstsssssssssssttstssssstttttsssstsssssststsssttsssstttststsssstssssrssrssrrrssrsrsssssssssssssrsssrssrrrsssrrrrssrrrsrsrrssrrsssrrssrrrrrssrrrsrrqssssrrrrsrrssrsrrrsrrrssrrsrsrsrrsrrrssrrsrrsrsssssrrrssrrssssssrssssrsrrrrssrssrssrrrrrrrrrsrrsrrrsrrrrsrssssrrrrrrsrrrrssssrsrssrrrssrsssrrssrsssrsrrsrrsrqqqrqqrqrqrqqqqqrqrrqqrqqrqrqrrrrrqrrrrrqrrrrrrrqrrqrrrqrrrrrrrqqrrrrrqqniaXsUpVqYt^{empqqrqrqrrrrrrqrqqrrqrrrrrrqrrqrqqrqqrqqrqrqqrrrrqqrqrrqrqrrqrrrqrqrqqqrrrqqrrqrrqrqrqrqrqrqrrrqrqqrqrrrqqrrqrrrrrrrqqqrrrqrqrrrrrqrrqqrqrrrrrqrrrqrrqrqqrqqqqpqqqqqqqppqqqqpqqqqqqqqqqqqqqqqqqqqqqppqqqqpqpqqqqqqqqqqqqqqqqqqqpo^|IbD]=T/A.@0E4Jn(Bm*Hr+Lv0U6\?a0M#6v .v+s"0z$2{$1w!/r$3p(:y1IEcRt`lnpopoooooooooopooppoooppoooppmP1wK . *@%`;ljUmooooopooooooooooopomN-oB'(B*jHiooopoopoopmN,nB'(B+kIioooooooppopoooooopopponnnnonnonononnnonnnnnonnnnonnonnonnnnnnnnnnnnnnnnnnonooonnnnooononnnh=T-A,H}7^?j+Ny$@n'Cm0Oo4Wt1Vq,To6b{4b{9a|3T}'U,?z)@r2Ry7_7`~-Qp(Li/\k@xuHwFv@~p:yp;{v?{z?oy1Pr1j)l'k-n5q"@q'Lp)]o6xn;mApDrDuG|R_hmmmmmmmmlmlmmllmmmlmm] -mmmlmlmmmmmmmmCmmmmmCmmmmmmmlmmmmmmmlmmmlllllllllllklllklllkklkkllllllllllllllklllllkllllllllllllllklllklllkX}3G)jBmAqGyQXchkkkkkkkkkkkkkkkkkk0xDkklkkkkkkkkkkkkkkkkk<Ƒ)jkkkkkkkkjKMkkkk<Ƒ)jklkkkkkkjKMkkkkklkkkkkkkkkkkkkkjjjjkjjkkjjkkkjjjjjjjjkjjkkjjjkjjjjjjkjkjjjjjjjkkjjkkjjjkkjjkjjjjkc9P1Fy1Kq0Rt3^xAp4at*Wk9jjAylIqIsDr?ypgAi&Lj#Ph+al7zp=pBoAnErCrFtSTXagjjjkjkkjjjjkkjjjb@™jjkjkjkkjjjjjjjjkjjjjR]kkjjjkjjjjjjjjjR]jkjkkkjjjjjjkjjjkjjjjjjkkjkjkjkiiiiiiiiijijiiijjjjijiijijijjiiiiijijjjiiijiijijjjiijiiijjijjiijji]5P5Qz3Qp.Sq8e{?p2`s-[kn1]r.Zm9in=ulGsEu;up7qm9wmApFtEw4es,Wu/Yv(Uo-^o.em5rm6xi;m@lGlHqHoHrHtErMzTQR_ehihhihihiiiihhh [<ŕhhihihihiiiiiifiiihihhihiiihhihhiihihihhhiihhhhhhghhghghhggghhhghghhhhhghhhhhhgggggghghhhhhhhhhhgghhhhghhhgghfGi6O4Nr2Pm2Yv8h~?o~,Wl3]m5gm@xrGt@{u8oo4ji5oi;{nFsHr:kq(Ql+Rl(Wj0eh4rj8}l>qApEoIoJqGnKtIvJtNxUST]_hhghhghghhhhhhh5Ughhhgghhhg_hgghhhh#ggh#ghghgdhhhhghhhghhhhggggggggfgggggggfgggggggfgggggggggggggggggggggfgggggggfggggggggfgb?]7Q6Sp5Vo1Yq>k}:fz)Ok1Ul/Wi9jmFtC~t9qq.gl3nn;|sAuBu@tx%Oh*Qi*Zh4mi6xfggg -Wgggggc=gggggWggggcggggggggffffffffgfffffggfffgfffffffffffffffgfffffffffffgfgffgfffffffffffg_:Y5U{>et7ap8gz=o>l0Vu*Kl2Xk=lmD|uD}t;rp5jm.gi<|sHzDw?vw+[q'Uh0el2pg5{h;fDmDnJpQrQtQvRvQwMuPy]\UZbeffffffgffffgffdgffffgffff,vfffffffS;ǔfffffP'kfffS;ǕfggffP'kfggff<Ɩfffg[ffffffffeeeefeeeeeeeeefeeeeeeffeeeeefeffeeeeefeffeefefeeeeeeeeeeeefeeeeedW6S8Yu?ip7eo8h{9mBu0\x(Ol3^qAtuAzvD}v5lm.ej1ll>~rJxJzE~y-^o)[k1ji/oc7|f6g?nCrFqJtKtKtMwLxNxPy]aXZcdeeeeeefeefeeee^feeeefeeeeSeeeefe:ȓ 2_feee#cHeee9ȓ 2_efff#cHfffef6affeD 1feeeeefeeeeedddeeedeeededededeeeeddededddedddeedeedddedeedeeeddddededddddKv3P9]s;el;iq7iyddde^'DLbY+u>ddddddMQaM 1Zddeeedddddddddddcccdddddcdcddccdddddccccddddcddddcddddddccddcdddcddcdcdda>`6U~6`oCsq8hp3au=omBrAo=i>lBoDsDtNwSz[~Y{[\abccdddccdcdcddd[8ʐddcdcddcdcdcdcdcccdcdc?¢Mdcccd?¢Ndddddd>Ğdcccdcddbcccccccbccccccbcccbbccccbccbbccccccccccbcccccccbccccbcccccccccc];[3Sx4]lAnq2aq5cy>m=j},[m9mrDyEzGz:tr6pn8vn@rGvOyYO|5jr,_p*bk/og7m8l4{f6~l5j8j>l=nFxJzKyT~XX]^bacccbccccccccbc9ɔ9acbccbbbccccbccbcccc#fbcc4͊@£ccccccc4͊?£bcccccc,x9`ccccccccbbbbbbbbbbbbbbbcbbbbbbbbbbbbbbbaaabbbbbbbbbbbbcbbbbbbbbbbbbbbbcbW8[.Ss8en?pr1cq7j{kAnBnErLvKvR}XW~[ababbbbcbbbbbbbbbY3Έbbbbbbbbbbbbbbbbbbb_ZbbbbE 5 4IbbbbbbbbbE 5 4Ibbbbbbbbb3Έ .Rbbbbbbbbbaaaabaaabaaaaabaaaaaaaaabaa^ZSLJ{J|LQX]_`aaaaaaaaaaaabbaaababaaba`M3W1\l@uo@yr6ov@y:p~.`n;rpDuCtDu9rm;tkģ_aaaaabaaaaa_D%k?% 3^>ã_aaaaabaabaaQ&n 3#A0тZaaabaaaaba`a`aa```a```a`a`aaa``a``a_Q?k=d7Y*F*D,I0N7Y?gGvJ|KT\_``_^__`aaaaa`````````]?i4^zä&n ,```aa```````aa`aa``a````aaaaaa`aa`aa`aa``a``aa`````a``a`````a``aa```````````a```aa`a``a`````_____________`_``_``_```]H|/P-N8^4V"=z$;t%=s)Bw*Ey.M/R8\4Ypz?xp@vq8mt?t;l,Zs1bpAzuGyDu>xp8sh<{hCjPqQrVvWyV{Ox6sj.ld2ub3~cq@o?lDnFoEpGrIsHpMuOvT{V[\^``__`__`___````_R /```__`_`_````````_``_```_`_`````_``__``_`__`````````_`_`_`````___``___``____`_`_````_``_````___^____^__^__^^___^___]Q.N'A}5W:c1S'?q$9l%>n(Bm*Ir*Lv/U5\=b.N 9v1v.s4z!5{!4w1r!6p$>y+Nyr<{lDlJmTvUv[xZyXzPt=}f2t\3{\5]=c:_?e@j>kBnItMvKxIuJsSzRyQxTY[]___^_________^_^_TI_^_____^^^____^___^_^_____^__^^^_^______^_^_____^^^^___^___^______^__^_____^__^______^_^____^^^^^^^^^^^]^^]^^^^^^^]Y5[*D+I}7^?j+Ny$@n'Cm0Oo4Wt1Vq,To6b{4b{9a|3T}&=w%je!h$l$g(a 2i";n%Ho0f|@KOV\]]^^^\TBqCz=to:km/\o4bw?m};gw5`p4cl=qmBzp>xl?}l@jGmMrVxXyVvV{S{QwAl9e7b9_?d:a>cAg=gDlIuKvOyOyR{S}T~R}SXY]^^^^^]^^^^^^^^^^^^\9ț 5'&p^^^^^]^^^^^^^]^]^^^^^^^^^^^^^^^^^^^]^^]^^^^^^^^^^^^]^^^^]^^^^^^]]^^^^^^^]^^^^^^^^^^^^^]^^^]^^]]]]]]]]]]]^]]]]^]]]]\H.K'>t*Hw9ad9a7_hDmEqJvOzPxT{XTzQ|TYX\]]]]]]]]]]]]]]]]]]]]\F,R 3!)?^/҆FZ]^]]]]]]]]]]]^]]]]]]]]]]]]]]]]]]]]]]^]]]]]^]^]]]]]]]]]]]]]]]]]]]]]^]]]]]^]]]]]]]]]]]]]^]]]]]]]\\]\\\\\\\\\\\]\\\\\]W7\*A{)Ar2Ry7_7`~-Qp(Li/\k@xuHwFv@~p:yp;{v?{z?oy1Pr1j)l'k-n5q"@q'Lp)]o6xn;mApDrDuE|MVX]\\\P?osAwj8lg1_j2_q:itEwsAuj?uhByeC~bC_B_B`FeIiRsXyZ|UtUqVsZtOlBb9^5\:e5_5_=d>fEkIpOwQ}Q}X\YTYYYZ]]]\\\]]\\\\\\]\\\\\\\\]\\\\\\\]\\\\]\]\\\\\\\]\\]\]\]\\\\]]\\\\\\\\\\\\\\]]\\]\\\\\\\\\]\\]\\\\\\\\]\\\\\]\\\\\\]\\\\\\\\]]\\\[[\[\[\[[\[\[[[\\[[\\ZL.K(=s)Cq1T|8d8c|)Rm-Yn7knDtP{Kw@q=|pDu@}tCw{4[w#=p2k3k 6i:j%Kp0\u)^m2rmsljBmAqFyOSVXZY:dkAyf@}eD~hPiRp[tYr[uYqWpUoVmPgD_KbVkZnat_t]u^v^wd|_rF_1|R0}P6W7Y8]@`GdIgQnXwafee^V[\_ZZ[Z[[Z[[[[[[ZZZ[Z[Z[[Z[[[[[Z[[[Z[[Z[[[[[[[Z[ZZ[[[ZZ[Z[ZZ[[Z[[[[Z[[Z[[ZZZ[Z[[Z[ZZ[ZZZZZ[Z[ZZZ[ZZ[[ZZ[Z[[ZZ[[ZZZZ[Z[[[[ZZZ[ZZZZ[ZZZYZYZZZZZZYZZZYZZZZZT3U/Hy0Kq0Rt3^xAp4at*Wk9jjAylIqIsDr?ypgAi&Lj#Ph+al7zp=pBoAnErCrFtRRRUXW;iiEiEhRoXqdvevau`q\oZm\lZjWlF`Pg[m`qdvevgzmouu~Se/wN/zN3Q;X>[FaLdNgTm[vbhkjd]\Z`_YZZZYZZZZZZZZZZZZYZZZYZZZZYZZZZZZYZZZZZZZZZZYZZZZYZZZZZZZZYZYZYZZZYYZYZZYZZZYZZZYZZZZZZYZZYZYZZYZZZZZZZYZZYZZZZZYYZZZZZYZZZZZZYYYYYYYYYYYYYYYYYXYYYYO0U4Rz3Rp.Sq8e{?p2`s-[k\HgNhRjZoawjoomifcb`_XYYYYYYYXYYXYYYYYYYYYYYYYYYYYYXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYXYYYYYXYYYYYYYXYXXXXYXXYXXXXXXXXXXWG3U4Ru1Qm2Vq9f|>n1]r.Zm9in=ulGsEu;up7qm9wmApFtEw4es,Wu/Yv(Uo-^o.em5rm6xi;m@lGlHqHoHrHtErMzTPOWTBviEkUsYs_vhxgu^q]o]p]qaqaqbq[jRgXmgwȕȚǚ̢ӫϡX`6zP6U8X9XB]LiWn^trĔuqifiie_WXXYXXXYXXXXXXXXXXXXXXXXXXXXXXXXYXXXXXXXXXYZZZZZZZZZZZ_g'uPeYXXXXXXXZZZZZZXXXXXXXcଂwi-^ [cy\uYXZZZZZZXXXXXXXY쉓{`j/_ZZ`j.y\aXXXXYXXXXXXXXWXWWWXWWWXWWXXWWWWWU=s3R3Nr2Pm2Yv8h~?o~,Wl3]m5gm@xrGt@{u8oo4ji5oi;{nFsHr:kq(Ql+Rl(Wj0eh4rj8}l>qApEoIoJqGnKtIvJtNxUSRWQCygDnOrVvVr`sdt]p_r^m^l`lcpgrapYm\n_mryŐ̡شܼ޿ѭFvVC]>Z=ZD^JgUrmȝЭԱЪÙzmntěpi]UXXWXWXXWWXWWWXXWWWXXWXWWWXWWWWWXXXXWXXXWXWZZZZZZZZZZZZZZZ\vXWXWWWWZZZZZZWWWXXWsbZZZZZZZ{WZZZZZZWWWXWXe ZZZZZZZZZZ[vR{WWWXXWXWXWWVWVVWWVVVWVVWWWVVWWT8c4S5Sp5Vo1Yq>k}:fz)Ok1Ul/Wi9jmFtC~t9qq.gl3nn;|sAuBu@tx%Oh*Qi*Zh4mi6xfet7ap8gz=o>l0Vu*Kl2Xk=lmD|uD}t;rp5jm.gi<|sHzDw?vw+[q'Uh0el2pg5{h;fDmDnJpQrQtQvRvQwMuPy][UWWF{hMqKnQlSmSpUo[o[k[j_kalcicn`nVi]oaraqlzڶܽӭ;uTC\NdPfKeVsc~r”Աܻͤƞˣl:`y!?x(Q7pAJTTVVVVUVVVUUVVUUUVVUUVVUUUVUVVVVVVVVVVZZZZZZZZZZZZZZZZZZVVVVUZZZZZZVVUVV𗍒ZZZZZZZZZZZZZZZZZVVVV𕎕ZZZZZZZZZZZZZZZZUVVUVVUUUVUUUUTTUUUUUUUUUTUUUTI1W7Zu?ip7eo8h{9mBu0\x(Ol3^qAtuAzvD}v5lm.ej1ll>~rJxJzE~y-^o)[k1ji/oc7|f6g?nCrFqJtKtKtMwLxNxPy]`WXXD~~UzZzQnSoSnSpTqWmThYm[jZgYfZjXgYk`t_rbuvɖƗXk3uSA_JdPiPlXwdnșȟΩѫѨxȟ՜t9Xs :m$Ip/g|=GJOSTUUUUUUTUUUUUTUUTUUTUUUUUUUUUUUUUUUZZZZZZUUUUeי^ ZZZZZqBUTTUUZZZZZZUUUUTsGZZZZZdzYun:ZZZZZZZUUU^_ZZZZZrDcWZkЋ~fcZZUUUUUUTUUUTTTTTTTTTTTTTTTTTTTS@0S8^s;el;iq7iyqIFIQQSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTZZZZZZTTTTTTZZZZZ`TTTTTZZZZZZTTTTTcZZZZZTTT[e ZZZZZZTTTZZZZZ{[TTTTTTTTUo;TTTTTTTTTTSSSTTTTSSSSTSSTSTSSQ6g4W~5`oCsq8hp3au=omBrAo=i>lBoDsDtNwSz[~X{ZYT8s]k^UrVjUmWrVtRoQlSlWoXlZn[q\nYk\n_r\vfw<`U)5dc7x_m=j},[m9mrDyEzGz:tr6pn8vn@rGvOyYO|5jr,_p*bk/og7m8l4{f6~l5j8j>l=nFxJzKyT~XW\[V9|Xbcc[rXnXrYsQsHqFqDuTZ]}a~WwVy]yc}eH|i'JD;mlI~:gCt>MQPNPRLOzT}WcyŖͣ͡J}0\t)^m2rmkAnBnErLvKvR}XV~Z^VHI]_c~_xYqXoXvURW\d;rm=okNsLt@qtguÓʞtq|ĚNpnu5mjYz'=F4fe,hm3|}GN~YcsŔƖm=mr-Vm+`l4sn7k=l>jBmAqFyNOPPQRQQRQRQQRRRQRRRQRRQQQQRQRRRRQQZZZZZZRRRQQRZZZZZrBRRRQRZZZZZZRRQRRZZZZZ\QRQQRXZZZZZZQRQ[ZZZZZZZZZZZZZZZZZZRQQRRRQRRQQPQQQQQQQQQQQQQQQPA/[0\l@uo@yr6ov@y:p~.`n;rpDuCtDu9rm;tki7g6j>tK{X_jplP*Ti#Ph+al7zp=pBoAnErCrFtQQNONPQPQPPQQQQQQQPQQQPQQQQQPQQQQPQZZZZZZPQQRbט^ ZZZZZQQQQQZZZZZZQQQQPZZZZZ\QPQQQQZZZZZZQPQ[ZZZZZZZZZZZZZZZZZ^ PPQQQQPQQPPPPPOPOPPPPPPPPOPM7p1`{;onB|p=tq=rzAs2cs/ai@xoDsBs?xo5ni7sf=jMuRwR{UQ{Iy4np+dk.lj/ui3j6j:j=lxp8sh<{hCjPqQrVvWyV{Ox6sj.ld2ub3~cq@o?lDnFoEpGrIsHpMuOvS{UWPNJKPuQrX|[`hvØk}az0TV*=s`VyX}[WnҬ۶ҮЭw?jiVtA~t7T@q&Uv2tuCyUz[aaZHz.ek5rm6xi;m@lGlHqHoHrHtErMzSONRLOOOOOOOOOOOOOOOOOOOOOOOOOOOOOZZZZZZZZZZZZZZZ]tQOOOOOOZZZZZZOOOOOZZZZZ\OPOOOOZZZZZZOOOrAZZZZZOOOOOtZZZZZ|]OOOPOOOOOONNNNONNNNNNONNNOK9{yr<{lDlJmTvUv[xZyXzPt=}f2t\3{\5]=c:_?e@j>kBnItMvKxIuJsSzRyPxSUNMMBR~Ss\yelsu̞XxfDgn3P67e^NqStWyX|s”ѩڵֳ˫Q~S{Bj=lS|5fl3g=z&W;G~U|W|VAq/cd4rj8}l>qApEoIoJqGnKtIvJtNxTRQTKNNNNONONONNONNNNONNNNNONNNNONZZZZZZZZZZZZZZZmRNNNNNNNZZZZZZONNNNZZZZZ[NNONNNZZZZZZNON𙎉ZZZZZeWONNNySZZZZZONNNNNNNNNMMMNNMMMNMNNNMMLF=wA|=to:km/\o4bw?m};gw5`p4cl=qmBzp>xl?}l@jGmMrVxXyVvV{S{QwAl9e7b9_?d:a>cAg=gDlIuKvOyOyR{S}T~Q}RSMMMHMSxUngmi~lp}}|Ib\#O#X 8'4PnVpWvRrm֭زӯg!gPXL|8lOrX}"Of=qG+gDOLy@}q)Xd3lh6xfd9a7_hDmEqJvOzPxT{XTzP|SULLMKDNQxZt^u]rbwcudnP~_$IS%?X=RBvj8yYIhRkUuOszĘѩ֯o+rYJ+rg>mVtg~gC~0u2{BC:u'Ve0el2pg5{h;fDmDnJpQrQtQvRvQwMuPy][TURKMMMMLLMLMMMMLMMMLLMLMMLMMMMMZZZZZZMLLOql/ZZZZZLLMMMMZZZZZZLLLMMZZZZZZMMLMMLZZZZZZMLMLZZZZZZZZZZZZZZ[sMLMLMMMMMMLLLKLLKLLLLLKKLLLD>psAwj8lg1_j2_q:itEwsAuj?uhByeC~bC_B_B`FeIiRsXyZ|UtUqVsZtOlBb9^5\:e5_5_=d>fEkIpOwQ}Q}X\YSXVOKKLKCEOQwUy]Zy@sd-_hQ8deKM\stGZLeOmǙͥڶQzX}YXa7znBqIq_|pzĒrÖdXP-`m)[k1ji/oc7|f6g?nCrFqJtKtKtMwLxNxPy]`WVTJLKLKLLKLLLLLLLLLLKLLLKLLLLLLZZZZZZLLLLLjZZZZZi(LLLLLLZZZZZZLLKLLZZZZZZLLLKLLZZZZZZLKLLLZZZZZZZZZZZZ[LKLLLLLLLLLKKKKKKJKKKKKKKKKJ:i@tmAyi>slmBrAo=i>lBoDsDtNwSz[~X{ZXSHJJJJJJJJJKJKJJJJJJJJKJJJJJJJZZZZZZJJJJJjZZZZZ]JJJJJJZZZZZZJJJJJZZZZZZJJJJJJZZZZZZJJJJKKJL끛~]k,_[\fyOMKJJKJJJJJJKJKIIIIIIJIIJIJJIIIG;iiEiEhRoXqdvevau`q\oZm\lZjWlF`Pg[m`qdvevgzmouu~Se/wN/zN3Q;X>[FaLdNgTm[vbhkjd]\Y[SIIJIJIIIIHD9AMQ]kaMiKjʝɮHtx&Rj._pAu|)^s)btGNRWXMxMwYO|5jr,_p*bk/og7m8l4{f6~l5j8j>l=nFxJzKyT~XW\ZSIIIIJIIJIIIIJIIIIIJIIIIIIJIIIZZZZZZIJJMol.ZZZZZj*JIIJIIZZZZZZJJIJIJIIJIIIIIIIIIIIIJIJIIIIIIIIIJJIIIIIIIIIIIIIIIIJJIIIIIHHIHIHIIIIIHG@piCgOn\tcwhxgwbu_t]q\paqbq]pPdReZlfutx~ŔZh0vP1}S2V5Y>\HgNhRjZoawjoomifca]SHIIHIIIHIIHGDECO\VxQqZyЦ|u&J`"Fj+VpkAnBnErLvKvR}XV~Z\QGIIIIIHIHIHIIIHIIHIIIHHHIIHIIZZZZZZZZZZZZZZZZZvHHIHIIZZZZZZHIIHIHHIIIHHIIIHHIIHIIHIIHHHHIIIIHHIIIIHHHHHIIHIIIIIHIHHHHHGGHGHHGHGGHGBviEkUsYs_vhxgu^q]o]p]qaqaqbq[jRgXmgwȕȚǚ̢ӫϡX`6zP6U8X9XB]LiWn^trĔuqifihbTGHHHGHHHGGHGHFC6DGmKfdzΥvMw3cp+[h8ll@{q?|q?yt6nn;rmZ=ZD^JgUrmȝЭԱЪÙzmntěpfRFGGGGGGGGGGFGGG@HjOzHcvj?o{1br/ai@xoDsBs?xo5ni7sf=jMuRwR{UQ{Iy4np+dk.lj/ui3j6j:j=lxp8sh<{hCjPqQrVvWyV{Ox6sj.ld2ub3~cq@o?lDnFoEpGrIsHpMuOvS{TTJEFFFFFFFFFFFFFFFFFFFFFFFFFFFFZZZZZZZZZ[_ g uAskFFFFFFFFFZZZZZZFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEEEEEEEEEFEEEEFDF}jLqKnQlSmSpUo[o[k[j_kalcicn`nVi]oaraqlzڶܽӭ;uTC\NdPfKeVsc~r”ԱܻͤƞˤơuêSDFEFEEEEEEFEEEB2}/[yQj`yc?s:k}3]q4ao=sqFxA}v>yr<{lDlJmTvUv[xZyXzPt=}f2t\3{\5]=c:_?e@j>kBnItMvKxIuJsSzRyPxRSHDEEEEEEFEFEEFEFEEEFEEEEEEEEFEEFEEEFEEEEEEEFEEEEEEEEEEZZZZZZEFFEEEEEEEEEEFFEFEEEFEEEEEEFEEEFEEEEEFEEEEEFEEEEEEFEEFEDEDDEDEEDDEDDEDCBUzZzQnSoSnSpTqWmThYm[jZgYfZjXgYk`t_rbuvɖƗXk3uSA_JdPiPlXwdnșȟΩѫѨxȟΦˤǮSCEDEDDEEEDDDDC=8u8fn@x]tt?kz?m};gw5`p4cl=qmBzp>xl?}l@jGmMrVxXyVvV{S{QwAl9e7b9_?d:a>cAg=gDlIuKvOyOyR{S}T~Q}QQFDDEEDDDDDEDDEEDDDEEDDDDEDDEEDDDDDEDDDEEDEDEEEEDEDEDEDDEEDEDDEDDDDDDDDEEDEDDDDEDEDEEDDDEDDDDDDDDDDDEDDDEDDDEDEEDDDDDCDCDCCDDDCCDDDB=]iXuPjSmWrXtUpTkThTgUiUg\n[l_rbycxbudymro9yb9y_C_D^IaRoZ|]_gjnsupmx–̣ϧˣuðKCCDCCDCDCDCCDD>>u>wiMpnFp~5^w=jw7en9in7kh?viA{g@~cAd@eFkRuWyVxRrPqQvRvFj>d9a7_hDmEqJvOzPxT{XTzP|RRFCDCCCDDCDDCCCDCCDCCDDCCDDDDCCCDDDDDDDCCCCCCCCCCDDDCCCCDDCDDDCDDCDDCCDDDDDDCCDDCCDCDCDCCDDDDDCCCDCDDCCCCCCDDCDDCDDCBCCCBCCCCCCBCCC<2{[k^UrVjUmWrVtRoQlSlWoXlZn[q\nYk\n_r\vfw<`U)5dc7x_fEkIpOwQ}Q}X\YSWTIBCCCCBCBCCCCCBBBCCCCCBCCBBCCBCBBCCCCCCBCBBCCCCCCCCCCCCCBCCCCBBBCBCBCCCBBCCCCCCCBBCCCCCCCBCCCBBCBCBCCCCCCCCBBBBCCBBBBBBBABBABBBBBB?0Tacc[rXnXrYsQsHqFqDuTZ]}a~WwVy]yc}eH|i'JD;mlI~:gCt>MQPNPRLOzT}WcyŖ͢ѧǣZBBBBABBBABBBBBA8j@tmAyi>sl2VTyUwUtSoRtZ_hwDd^15GxXVfY~Gilv˜|Šѯձ[vJj]xɡdCA'\V>i7g6j>tK{X_jpoę]óA@@A@A@@@AA@@A@>;iiEiEhRoXqdvevau`q\oZm\lZjWlF`Pg[m`qdvevgzmouu~Se/wN/zN3Q;X>[FaLdNgTm[vbhkjd]\YYL@@@A@A@@@@@@@@@@@@@@@@@@@@@@@@@AA@@A@A@A@@@@@@@@@A@@@@@@@A@@@@@@@@@@@@@AAAA@@AA@@@@A@@AAA@@@A@@@A@@@@@A@@A@@@@@@?@?@???@?@??@??@?>7LQxQwSzLuP|Xaks*JL&OImuSsI@Wui]^kę|ȥֳ̩ɣzQvi``GZ-bp4tg5a@fKnT{[af×cĦO>?@@?@?@?@?@@@@>@piCgOn\tcwhxgwbu_t]q\paqbq]pPdReZlfutx~ŔZh0vP1}S2V5Y>\HgNhRjZoawjoomifca[N>@?@????@?@@???@????@??@@??@@@@@???@@???@?@?@@@?@@?@@@??@??@?@?@?@?@?@?@@@@????@??@@@??@@????@?@@?@@?@@@@@?@?@???>??>>>>>>???>???>:FOuQrX|[`hvØk}az0TV*=s`VyX}[WnҬ۶ҮЭw?jiVtA~t7T@q&Uv2tuCyUz[bb_P=????????>??????>BviEkUsYs_vhxgu^q]o]p]qaqaqbq[jRgXmgwȕȚǚ̢ӫϡX`6zP6U8X9XB]LiWn^trĔuqifih`N>>??>??????>?>?>??>?>>????>?>?>>>>>???>?>>>?>65??>???>,O &  &K(:>?????>??=%t- @/???>????>?>?>>>>>>>>>=>>>=>>>>=7N~Rs\yelsu̞XxfDgn3P67e^NqStWyX|s”ѩڵֳ˫Q~S{Bj=lS|5fl3g=z&W;FUYZL;>>=>>>>>>=>=>=>==CygDnOrVvVr`sdt]p_r^m^l`lcpgrapYm\n_mryŐ̡شܼ޿ѭFvVC]>Z=ZD^JgUrmȝЭԱЪÙzmntśo™dM<>>=>>>>>=>>>>>>>>>>>>>>>>>>>=>=>=>>>=>>>=>>>@2>>>>>+C0>>>>>>6 %P=>>>>>>>=>>=======<======<====9GQxUngmi~lp}}|Ib\#O#X 8'4PnVpWvRrm֭زӯg!gPXL|8lOrX}"Of=qG+gDOQI:<==<<============mVtg~gC~0u2|ACB;<<<<<<<<<=<=<==<<<;F}jLqKnQlSmSpUo[o[k[j_kalcicn`nVi]oaraqlzڶܽӭ;uTC\NdPfKeVsc~r”ԱܻͤƞˤơsũM;<<<<<<<<<<<=<<=<=<<<<<<<<<<=<=<<<=<<<=<<<<< -6<<<=%{<=<<<H<<<<<<<<<<<;;;;;<<;<;;;;;;;<<;:5?LOwTy\Yy?sd-_hQ8deKM\stGZLeOmǙͥڶQzX}YXa7znBqIq_|pzœrřcTK:<;<<<<;;;;;;<;;;;;<:@UzZzQnSoSnSpTqWmThYm[jZgYfZjXgYk`t_rbuvɖƗXk3uSA_JdPiPlXwdnșȟΩѫѨxȟΦˤ}ɮM;;;<;;<;<;;;;;<;;;<<;;<;;;;<<;;;;;;;;<;;;<;(^;;;;7 8*6;94(U;<;<1A2:1?;<;;;<<<;;;;;;::;;;:;;::;;:;;::965MQPNPRLOzT}WcyŖ͢ѧɣU899999889999998999999999999999899999998993h +8999999992899891999999899988888888888888888888888888888759i7g6j>tK{X_jpnŚZƲ9788778787777777777777787877787777877778G17777787 787577777678777877776666776666767677676666776667766764 sQGkvϴf557766666666667666666667777776676766650JQxQwSzLuP|Xaks*JL&OImuSsI@Wui]^kę|ȥֳ̩ɣzQvi``GZ-bp4tg5a@fKnT{[ae×aŦI5667676677766676676767666667767776777667Q17667667-777664 #666076677/67766666675565655656665655665665656555556564(PNuͩsɾC555566655566665656656656556665665565662CNuQrX|[`hvØk}az0TV*=s`VyX}[WnҬ۶ҮЭw?jiVtA~t7T@q&Uv2tuCyUz[bb]âLû56556665656556666666556566666655656665656)5655658v56555*O666 0#65666#65666666655555554544545455444445545555545543,O_չb55555454555455555555555555554445555455530L~Rs\yelsu̞XxfDgn3P67e^NqStWyX|s”ѩڵֳ˫Q~S{Bj=lS|5fl3g=z&W;FUXXG355554545445555445555445455555455544555545543/  155545u25555G%555d .45543 ,545554555543433344444344444434344344344443422>usv>43434434444433444444444343444444344444331DOxTngmi~lp}}|Ib\#O#X 8'4PnVpWvRrm֭زӯg!gPXL|8lOrX}"Of=qG+gDNOE234444444443444444444444444444444443444444344434 ~d444441 *'1.X $2444,C+2*A343444444333333333333334433334333334333333334JnJ333333333333333333333333333333333343333332.FNyYt]u]rbwcudnP~_$IS%?X=RBvj8yYIhRkUuOszĘѩ֯o+rYJ+rg>mVtg~gC~0u2|@A>2333333333333333333343333333333343343334333333333/ '333333 (33334L3333343333222222222222222223332222223232232124423322222222222222233223223233332223222223231-$V,)"4[y3{L\Q#c|']}zE N&Q!2FluCokKI4!=Lhy=ZQ=%]hMuN;=G=rsWW                                      ('QP mk(' SQ YX*) CB}{ $#on yv  db  :9][ US c` wt TRLJ  TQ  tp;:                      DB  MK][ -, .-  _\ mj" C@| _[97EB -+UQoj>; :7ztD@{)'B?smƼ?< lfJF=:)'xp})'SO˿30 Ź ]W+(xf`pi ohD@%" ,)YSa[.+GB|{zrɽ1.-*~v$!E@ # FA{spyglet-1.1.4/tests/image/rgba_dxt1.dds0000600013464101346420000010020011266427715016005 0ustar yohyohDDS | DXT1 v՗vחvvvvUwv_vv}vvvݗv՗vvߗvvvwחv}vvw՗vvWv_v__vv_vv}vv__vvv_vWv_}v_vvv_v_vwWvUvߗvvvvvvwv_חv}wvwݗvߗvחvvvvvvv_vחv_vvߗvvvvחv_vvvvߗvvvv]vvwvv՗vvvvvߘwUUw€VVV⪪vW_vwv_חv__vv_v_v}v_v_חvv}vv_vݗv}vvUv_vߗvv_vvv}v՗vvwݗvחv}vחvvvvvvvvw(@w^UwS]À wXVwv}3ڪJw^Ww€Ř€55wPPwVwU %vWvw\W€55wpVwU €TTTTw\Ww 5w@@v}vWvv_vݗvv__v}vuvv}vv_vvvvvv__vݗv_vv_v}vvvvvחvvvvvvv@@455W|v\PUUÀ €ԔU⩨vJJJJw€j@@@@€5555wPPPP〉U€5UUw䀀UU€.%%v_v€HHHw€p@@-555€TTTTj€7@wvvvv_vvv__vvwݗvv}vvvvvWvvwvvvݗv__vwvvחvwv}v_]vvwwvvv}vwvߗvwꕕUw V^wXU €UUvטx``w€UU€€55wXUw€Vw`Uw v}w@@€UU€55wVwpU- w€VVVwWxw〵5 wVWUUvvvvv_vvv_}vvݗvvvv_v}vv]vv}vvߗv__vWvvvvߗvv}vߗv_vvv_]vWvvwvwvvwUUw€wTTUUvJJw€5j@@@€555vWvvvvvvwww€wVVUUvwvvv}_wv}vv]vݗv_v_vvv]vߗv_vvv_vߗvvvv}vvv_}v}vvvvvv]vvvwvvwvvvvvUVvUVVvUVv}v_uVꪪV뾺vuvUחvUVꪫv_՗vvvVvWv՗VVꪪv}UvUvUvv՗vߗvvߗv}uvv}}vv_v'@x%v]v_}]vv}vvvvv_}vv_vW]vߗvwv_vuwXw vv]vvߗvvVꪪVꪮwUUUw€֘U⪫|wWw€Z&w^w€kwwIpwUw'-w'xwwꭹ vwUwVw^%wxww3vUUUVw^w€w€VꪻwXwm %w€ט` w^w՘'@@@Bx%%%www\wi w€wUUWTwι`wWwwP€ wx֗U⪪zw^-wXw%՘3ڪVv]U՗vv}חvwvUuUVꪪw€@@VU%5UU€_^XUAAx€U%%€}x``UÀ\֗UwUUw:TxvUpzU  V⪪JJJw€U%€W55wUp`@w vV€וw€wV\U}pbU%%%%€````%%%%wW \UUX^՘CAABx€5%wUx`` V\U}pbU€wTTTVwp\TTvU UUUPPPP€ xԘpPPw€- 58w@pPU€U]ycÀ VꪪVVꪪvwUVꮮvV⪺j@@€U՘ 4 W€WX/&AÂV%Ww€`x}kwwW\4]Uw5 \\\3䀭U vWUU]€``w€U՘%%w€5Vw`zUw Vꪪw@@€U՘€V€=w€Xx4_`U%% 〖>w`zW% wWV4+U&BAABU€5'w`zUw Xx4_`U ι〗>w WT\p4u Uw5 wPPPpw }w€׵/ppw U>5/vXTֿ'c€x€-5vvvV⪪vv⪪V⪪wUw€^w*5v⾮vvV⪪€````w vvꪯV⪪V⪪v⮯v⪮v⪫ꯘJJJw€=V⪪v⪪V⪪VvVw€wVVWUVꪪVꫪv⪪V꺪V꺪vV⪪VꪪV⪪VvUUUvUUUuVVvUUUV⪮V⪪V⪪VVvWUUVV꿺VꪮvuuUVꫪVVVVVV꾮VvWUUV꿿VvUuUVvUUUv_UUUVꪪVVꪪꪗVvUUuVꪪVvVVvvuUVꪫVꪪVVꪪVꪪvvVvv⪫V⪪vv⯾vv⯪V⪪V⪪V⪪v⫫V⪪V⪪V⪪V⪪vꪗV⪪V⪪v⾿V⪪V⪪V⪪vV⪪v⫺v⾪V⪪V⪪w3xw3V⪪V⪪V⪪vv⿪V⪪V⪪vv⪪vV⪪V⪿vw`wVww@w%ww4`wWw4 V⪪vU]UwחVꪪw\w3 wxww4 wPwUw3w2Pw V⪪wחVVꪪw2xwwT`wWw3-w3pwwT wpwUvUWwU@w5wTwUCw5wPw w^wS***w^V.vWx` -%wU`wWw3%VVVvV⪪VVvV€````ww€@@@@À%%%%€XVUz/555vwj〔zTTW5 pxw~U wU€/555XXXXwUv〵U^\xbcw %U䀀Uwו5%V⪪wՕU€xVVV〕\WwUUV-8*x\VU_`zw x\\\Uv@@@@€5555vTTTTCCCC€5555wPPPP€3^5VS_XZ€ VXW5wmup@€%%%%wX^VvUU U-*wWTVWVꪪVꪪvU_UVꪫV⪫vV⪪V⪪€````ww€w@B{W%%%-€`XXpU U-*?5V⪪wjTԔUw--\\\\&  hTn՘XXXXw〩U}ޕ5򮹡VU\v€_px^ Vι@€TTVU*WW^xUUw〕5-x\\xխU '%\\^WUV@@@@€5555vTTTT_w€5wPP^UÀ W(\U_XUÀɉ wÀ5Vw@`zu€%%%%wVV^xUUv€-wTTVUV⪪vvv몫V⪪vV⪪p€`zUwU*%'〔H\ 4(י`w'Uwꋩ-V⪪w〖V䀀Uw〕% x`U Ww䀀UhuW\XƐ wUwյ/SʨܸwXPp3Օ?(V⪪J***€WTTw&`w(Uwꭹ wꋩ`w'U W\\V⪪@@€?*55w'Tw(Zwꋩw(4!w'^wHwVw(xwIM&%wꮹ`w(Uwꬱ vUUUVvWUUVVVvUUWVvUUVVwUUUw'vVUwUUUw'vTUVvV꺪VVvVvUUUwU@w  ubV 7u wpwU( wU`uڪ V⪪v몗VꪪvV⪪vV⪪vV⪪V⪪V⪪V⪪V⪪V⪪J('5V⪪V⪪vV⪪vvV⪪vV⪪vV⪪vV⪪V⪪V⪪V⪪vV⪪V⪪vV⪪V⪪vV⪪V⪪V⪪V⪪VV⪪V⪪V⪪VVVvVV⪺V⪪Vwv⪪w&$,W@@VUUUڎ %w Uگ5fmx\\Wu Vwv⪪VVV⪪vV⪪vU_UvU}UVV⪪vWWUUVVvUUUVVVvU_U՗VVVꪫv}UUUVvUWUvUUvU__UVV⾿VꪪV⪪VV⪪vUUVꪪV⾾VꪗVꪫꯗVꪪV⪪VꪪvVꪪv↑vv⾿vV⪪V⪪vV⪪vV⪪V⪪V⪪V⪪tʰ`7J***ŒWT\|m̕@*Tʍ UU5ڊtW%T\Wd- V⪪V⪪vvV⪪vV⪪V⪪vvV⪪vV⪪V⪪vV⪪V⪪vvV⪪V⪪V⪪V⪪V⪪V⪪VvV⪪V⪪VVV⪪vV⪪V⪪V⪪V꺪V⪫vUUUV⪪VVꪺvUW_v]UחvUUWvUU_UVꪗV꯻vvuU_UV꺪vUUW՗V뮪VꪺVVw@wҡWdx [իVM*W\Zp`VH} %VVVꪪVVꪪV着v_UUUVꪪVvVꪪVꪪ몗V⪪VꮪVꪪV⪪VꪪV⪪VꪪwvV⪪VꪪVꪪV⪪VꪪV⪪V⪪V⪪vvV⪪vvvV⪪v⪫V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪w@@wv5ڥe`px h}`z5҅\ --w@w V⪪vVl`XW$L --Vڢ꺾vvvV⪪V⪪v⪮V⪪v⪪𧻓VVꪪV⪪VꪪV몪V⪪V⪪V꺺vU}՗V꺺VvUU_VꮯVꪗvvUUUV꺪VꮪvV流vUUVꮪVꪺVꪫV⿪vvUWUVꯗVVVꪪVvVvUUUVwvVVVVVVvwʀW` H~^u(~ibWUwR VV⪪VTzh}J\V2%5UwN vV⪪V⪪V⪪vV⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪vV⪪V⪪V⪪vV⪪vV⪪V⪪v⾪vV⪪vV⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪vV⪪V⪪V⪪V⪪V⪪V⪪Wt$$]WK )%TXLm׿%w) %5V⪫Whc``)&[  eK\J%KVd V⪪V⪪VꪻVvvWWUvUUUvV⪪V⺪vV⾺vvVVvVVꪗVvV着VVVVVvV⪪vVVVꪪVꪪV⪪VꪪV⪺VꫪV⪪V⪪vvV⪪vV⪪V⪪V⪪V⪪V⪪V⪪vV⪪Wt$$$W W^w ս mW_JIb``x_eB -wU7꫄x}F[UguT%]%wk V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪v⫪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪vV⪪V⪪V⪪vV⪪vVꪗVꮪV⪪V⪪VVV⪫V⪫V⪪VV⪪vV⪪VV⪪vVꮮVVwT@Vhk wꑲ-wS€n*c}zrb,:W׵%2I~>?wUҪ)󹌖X\\\}~z\^`7\ --VVꪪvVꪪV⪪vVꪪVvVꪪV꺺VVꪪVꪪvwvwV⪪vVꪪV⪺V⪪V⪪V⪪V⪪V⪪VꪪV⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪V⪪wvV⪪V⪪V⪪vV⪪V⪪V⪪V⪪V⪪V⪪V⪪vwV@6Kx^DC--Ue*̊]mk. 5ڨl_ U wက@(~\\|^m+Μl57d-wu(XCwU V⪪V⪪V⪪V⮪V⪪V⪪vV꺺V⪪VVV⪪V⪪V⪪VꪺVVꮫV⪪VV⪪vVVV⺪VV⪪VVwv⪪VꪻVww?wwVwwwwvvvVVvvꪻvꪪVꪮVꪪVꪪk7Uu/*s  mgdIcxN kdK^$U /uwTUwIWWWKgm󹠚SJ(cWVXxWjUw w^vUU+UUU UUw UUwUUxx8%--uUUU8ZxxxV⪪Wr@W^WWUU+UUUw UUWUVxpW@W^WWUU UUUw UUWUVxpw@+WWW8jV⪪8 *w8V⪪ww?j2 Jl RJUI~Jrxz_KrDTWUl s~thU'ʕK5beT\|~df[߾ mS]* 'zzNTUUU͔#74 'K}+ww?/'TUUUѻ`N]4wpw//'TUUU`NvU4wpVb/TTTT?Vꪪ#7B7VꫫVꪪqS?J* k* ͋st,ûdwwfe=vjwwBS'dK lKUmS*+gtx\\\'ՕN//*k}ѳ#7///ѳfVUb/UUWTfVB7///ѳfVU/UUWTGVb/TTTT@C7B7Gmo +u/ذo?? gl)ht5/*m |b-ww?:R ,:XWUUT:/5dDCUdS |\\^x'N| /fVUfVUOJ}`ѳѳ/|FUUUT Ѐ 'TUUK}/FUUUT Ѐ 'VUU+/TTTT^U+TWUUѳՕ5d'mww? RK%JfdjS /}q```-C+ S: S$C _KB~S:_UeK:UdBp`A&UUUTx`B7?O+)͔/fVUO(GV/ mZ/ uZfUK}@+ jujrp??:-' K:/_:-Ujkm u+'mzguSmeKWdeKU%\$Cpf\C*lK}mDK[\HdUU~fUUUuUUU h쌎ww?S9+ }c25}dKտ|9rPX^#2h N?) /2\\^eJ tUhR _'[tm͊"*} tuhml+{m:TVWU2`L?djj_' d[]Xk:l/TB] crX*{_nn {eքCOjhl̋:W:UUU:UUUZ*UUUrww J???:UUUZZ'J(UUUr@JWUURZ WUUJ UUUbhRS,}x^WJt^ \v^x`fdS_IZV:>Z#;\^^d$C /s)ܦ[c2 U3khcl#Wt$CW\K 2:J2 ??Zww????" B?? WWUUJZ  UUWV*?/ WUUU2`V2BR JJToo*T d^(kJʅ\kAb=?DCJjkbT_1{ =\#2U- Kj@l z RHk|?*skV}̂ 2U2U*? 2UUU5Zww???? "VVVV//BVBU UUWV::Jj dKB *ˍ:=7UcHt*s}?[+)licz ~cߪs+(eKr=R'mXZZo'ufSw~Kb٪ It.K{)VUm酩 llZ  *UUBU::vv  VVVV*?"UUUTJЀZ WUUJ9S[cF\:_'u:UC)Gu%A&d``)'d-Jd^Jl +Hlseis_,CW{u([7)[ -̄^UU*N *ս** UUU"B  B??:U::W:2J_J:b*Z'c2l@`}j9 9??KA%- DC/55e_Gcguʔ?KLVG[}j|ɅU[q+?*lDCU/ uK}*Hc :W:UUU:UUU:: 2c[[mBKSK:/d:/Uk2k33?~ik= E\* l)} ͕Bhcn :UmE\G[l5f[uՖ2:22kL_oOo˄hxc*lc25ɅF\UC!Hu%9>)gRM?{jUFSi$C*S_S^U[u!B!Bww?VV!Cd"Xd")Bd"Cvv?!BZvvS [[ :^UUS#2S$C50VɅK닋Gc|)lꍿOOO+lh`z~IS/*tleKc o)S eKZdSGuSHcldO_[W!B!CCC_CڠC?/d\UUU!C8 B1섯??SC2 guBU%EKU})^Bt'[ud*jX[oiKZk|Hl?oo)B _}:ZlC)'m&\}ll!`!!"j!!UB!UCC!B?""B/?"Sl?_l SI}O?}BbeKC2V7-:ʅPhHl}%))lK}UjSKZVKmZPJ}%: B ch`jKz K-*^D:STT!!!𿿿B!!"??!!C?!???/!fS%\?OGd*khVJgu_K}i lI}B(u&:[`FdFdSl?/JSHlXW[l@p|kl + [lUU)?*%K,'K\j[^Jd [#2\~$C*(S:'B&\ESdhh%KdiVdKU(ESd!!j!UUUW!!!!!!!"!:Koo $C5\_eKGdʅ??Tl2~d:lXVS\?dDK udK&\c}oOO['u)dtB(d??&\eK:.6lSU'uEK~ZHu:~^gd27/meKW'mDC_Bf\*%CGS?lK+ lS _'mf\//.Gdm)!!!?U!!!????!:%K?eK:-*_z:?UUCUVt}Jhu?oo*l}S޾* kfd¢z:l==SdX¢[GdJɅWXhd :So'd:SZgSɅ ?_GuB_ :W_dCfd}VXl}R:Gu C2CohjF\:%5l$CddKzhSdU???!)S[cdc2}dKb!gu%9)d:S+??WɅ%K>5kdCL% :eKlh`guS /5Sm==?eKm%'uC-%//EK}> S:__7B&\%BWWWXldX T^ d^X_dld:EK?[T:%\:տKBd:UUF\:_U}C2:jjVB\(V::#2DCkꅣ:-+lI}_1K51(u)} dzl%T^xSF\[ ???W}SWShuhd2 TC5?}'d#2\\^|2=ΦtdZpCmKUUdCUU͕#CUE\B~:UU;U_x;UufdB-2pp?S})%\}婠&K\clʅ$Hdl|ilil'dm/?Kd ) *m*zllSV? \F\}:eKk?S:_ս+\BUT:}:uU,:WUUS#2x29߃@KKdc\) F\})Kp||??dhuOgu*֤:dZkkcSGuˍ?IlJUUUdK } }EKT?o:E\jj[ u?}d-l'mSZmdKU}d$CUlB_/lBGuCWBC5-/t %řO`7b*%?????uWVV}lFS\OO\fd nTCSo?kCUKJo\lSc:J?lc2 _U\d XFK\eKdPF\Sۚ:"}d:bDC @*''7S#;_\XXC`xt @@gd&m??????????(dlU?fdkՖj} E썎%\huOu,O?m*V̍UuK=S}U$C+πUGuh}d:S?ccc2SFK[?dEK}c2n*=|*ll`pQ)7@B DX\ %Ʌ ????<c}??oltrz*dտeK K+Zb d&mK?lKVmSgSnՕ>$Cgd BF\V˅S-+[+ D25KB?+-&\)pp`S* :F\ꨀeKlxE\+WS|d%c}&TVWW@y+^VWu7??+\\xx |p@`)d}o(dKUB}??lB+GuS7 %\*US+?fSjhf\ Jf\cdKl%\'m&\S}Šjj: ):SjZBe\)d2XXSkc2FS@KhuguS ^ll?AL} ttS UUUtUU(uj} pemjj\UUgu?lB ?=:%CZl:/U}:*/?UKJUd}dʅOoOKdjzJS%/*k:X:dclB_d$C mS&\+ +_ djF:F:C2l_Wml蚖BSoOO'mSj{:bI} W }ئ}JlKTLN̄nS'\*ר[gufS[?Sgu!*??S* }:_guCU婢eK)VV}Kl}?BJZZ[c :x^S2\_K2Ul: l:Wꅣ:.U:UB&\?dL'd L(uxEK[?d$C K%/-}`LKz{c2 u!WUU)Hd???}XX% !@!?????'S'S?dKC2_5/:Phgl%$2dCud-/(u}>?*S_zdC&\DKW\CwK:~&\:UU*\:U_S:BE\% Huj}d %`S\*[V lt?lըKm5S cXV C2\#2+U:K_l %+ 'u?>=% +}\TVVt@????0:K?B&\`ddHdt?d})BLV??'u:'m[__dB_Gm%K׽-}S]ׯ }T}SWߺ 'm$C_k˅*O?Knl**[ >C)V}S 5lfd \TVVT\ l'?X(u\XzBUUTKUUU!????\d%CdbSd:DK?oc2dK :gd'  :- 'md:S VhgdV%l}Igu}lmocTVLZ mSSlSW}%\eKJV*EKTVVVI}_CUUUTSX????I}|)`eKdX\UU?????0DK&\?'mS{y_l$C?/B}d2Tcc2dꪕ%c2}oeKUC2l?d}%dkVgdkUZ}ld[kxSxKɅr~SWVTWBoo[`+ ^XXVUU)d????I|X)%&\UU] ???????FSdoo\d $:EK_S://t)b :*/Sc25*$C )c2%C}guKz dGuLO}+%j&\-LUUhlLU A/UUդ:UUU-J Օ-*Gd ??*??== KTXxx*\ _)eK?????ddBK?:EKjCˍh`gWK#2T\%K S *)Jgdm?['ul(bdK%U\'uGd}WW dS)UO[Ϯ?Ul.lЮ9d*XVS) *| !mUWh[ K$C_W#2K„))?+WW_k-[IVjBJ):)// J J? lLo?̍mS)}N?/+c2@z_)D2)}lSlgu* +z*} \(dOG\lSSMooldhguKi}kOO :\l!W> d)UU^,)EKd:d  :$KlnfSd?_l2r~*Bpyglet-1.1.4/tests/plan.txt0000600013464101346420000002137111266427720014056 0ustar yohyoh# The test plan, read by test.py to run unit tests. # The format of this file is as follows: # # * Lines beginning with "#" are comments and are ignored # * Blank or whitespace-only lines are ignored. # * A line with no period "." is a section header. The section follows until the level of indent is returned. # * All other lines are test cases. The line is split into tokens by # whitespace. The first token is the fully-qualified module name. # Subsequent tokens are capabilities to assign to the test (e.g. platform # requirements, developer status). # * Order matters... tests are run in the order they are specified. top top.IMPORT GENERIC graphics graphics.GRAPHICS_ALLOCATION GENERIC graphics.IMMEDIATE GENERIC graphics.IMMEDIATE_INDEXED GENERIC graphics.RETAINED GENERIC graphics.RETAINED_INDEXED GENERIC window window-basic window.WINDOW_OPEN X11 WIN OSX window.MULTIPLE_WINDOW_OPEN X11 WIN OSX window.CONTEXT_SHARE X11 WIN OSX window.WINDOW_SET_VSYNC X11 WIN OSX window.WINDOW_MULTISAMPLE X11 WIN OSX window-styles window.WINDOW_STYLE_DIALOG X11 WIN OSX window.WINDOW_STYLE_TOOL X11 WIN OSX window.WINDOW_STYLE_BORDERLESS X11 WIN OSX window-appearance window.WINDOW_CAPTION X11 WIN OSX window.WINDOW_SET_ICON X11 WIN OSX window-resize window.WINDOW_RESIZABLE X11 WIN OSX window.WINDOW_SET_SIZE X11 WIN OSX window.WINDOW_FIXED_SET_SIZE X11 WIN OSX window.WINDOW_SET_MIN_MAX_SIZE X11 WIN OSX window-actions window.WINDOW_SET_LOCATION X11 WIN OSX window.WINDOW_ACTIVATE X11 WIN OSX window.WINDOW_SET_VISIBLE X11 WIN OSX window.WINDOW_MINIMIZE_MAXIMIZE X11 WIN OSX window-mouse window.WINDOW_SET_EXCLUSIVE_MOUSE X11 WIN OSX window.WINDOW_SET_MOUSE_VISIBLE X11 WIN OSX window.WINDOW_SET_MOUSE_CURSOR X11 WIN OSX window.WINDOW_SET_MOUSE_SYSTEM_CURSOR X11 WIN OSX window-keyboard window.WINDOW_SET_EXCLUSIVE_KEYBOARD X11 WIN OSX window-fullscreen window.WINDOW_INITIAL_FULLSCREEN X11 WIN OSX window.WINDOW_SET_FULLSCREEN X11 WIN OSX window.MULTIPLE_SCREEN X11 WIN OSX window-event window-event-keyboard window.EVENT_KEY X11 WIN OSX window.EVENT_TEXT X11 WIN OSX window.EVENT_CURSOR_MOVEMENT window-event-mouse window.EVENT_BUTTON X11 WIN OSX window.EVENT_MOUSE_MOTION X11 WIN OSX window.EVENT_MOUSE_DRAG X11 WIN OSX window.EVENT_MOUSE_ENTER_LEAVE X11 WIN OSX window.EVENT_MOUSE_SCROLL X11 WIN OSX window-event-window window.EVENT_CLOSE X11 WIN OSX window.EVENT_EXPOSE X11 WIN OSX window.EVENT_RESIZE X11 WIN OSX window.EVENT_MOVE X11 WIN OSX window.EVENT_ACTIVATE_DEACTIVATE X11 WIN OSX window.EVENT_SHOW_HIDE X11 WIN OSX window-event-sequence window.EVENT_SEQUENCE_CREATE X11 WIN OSX window.EVENT_SEQUENCE_SHOW X11 WIN OSX window.EVENT_SEQUENCE_CREATE_FULLSCREEN X11 WIN OSX window.EVENT_SEQUENCE_SET_FULLSCREEN X11 WIN OSX window.EVENT_SEQUENCE_UNSET_FULLSCREEN X11 WIN OSX clock clock-basic clock.TICK X11 WIN OSX clock-fps clock.FPS X11 WIN OSX clock.FPS_LIMIT X11 WIN OSX clock-schedule clock.SCHEDULE X11 WIN OSX clock.SCHEDULE_INTERVAL X11 WIN OSX clock.SCHEDULE_ONCE X11 WIN OSX clock-multicore clock.MULTICORE WIN image image-pattern image.CHECKERBOARD X11 WIN OSX image-png image-png-load image.PYPNG_RGBA_LOAD X11 WIN OSX image.PYPNG_RGB_LOAD X11 WIN OSX image.PYPNG_LA_LOAD X11 WIN OSX image.PYPNG_L_LOAD X11 WIN OSX image-png-save image.PYPNG_RGBA_SAVE X11 WIN OSX image.PYPNG_RGB_SAVE X11 WIN OSX image.PYPNG_LA_SAVE X11 WIN OSX image.PYPNG_L_SAVE X11 WIN OSX image-bmp image.BMP_RGB_1BPP_LOAD X11 WIN OSX image.BMP_RGB_4BPP_LOAD X11 WIN OSX image.BMP_RGB_8BPP_LOAD X11 WIN OSX image.BMP_RGB_16BPP_LOAD X11 WIN OSX image.BMP_RGB_24BPP_LOAD X11 WIN OSX image.BMP_RGB_32BPP_LOAD X11 WIN OSX image.BMP_RGBA_32BPP_LOAD X11 WIN OSX image-pil image-pil-load image.PIL_RGBA_LOAD X11 WIN OSX image.PIL_RGB_LOAD X11 WIN OSX image.PIL_LA_LOAD X11 WIN OSX image.PIL_L_LOAD X11 WIN OSX image-pil-save image.PIL_RGBA_SAVE X11 WIN OSX image.PIL_RGB_SAVE X11 WIN OSX image.PIL_LA_SAVE X11 WIN OSX image.PIL_L_SAVE X11 WIN OSX image-platform image.PLATFORM_RGBA_LOAD X11 WIN OSX image.PLATFORM_RGB_LOAD X11 WIN OSX image.PLATFORM_LA_LOAD X11 WIN OSX image.PLATFORM_L_LOAD X11 WIN OSX image-matrix image.MATRIX_RGB GENERIC image.MATRIX_RGBA GENERIC image-dds image.DDS_RGB_DXT1_LOAD GENERIC image.DDS_RGBA_DXT1_LOAD GENERIC image.DDS_RGBA_DXT3_LOAD GENERIC image.DDS_RGBA_DXT5_LOAD GENERIC image-buffer image.BUFFER_COPY X11 WIN OSX image.BUFFER_SAVE X11 WIN OSX image.DEPTH_SAVE X11 WIN OSX image-sequence image.TEXTURE_GRID X11 WIN OSX image.TEXTURE_3D X11 WIN OSX image-atlas image.ATLAS GENERIC font font-render font.DEFAULT X11 WIN OSX font.SYSTEM X11 WIN OSX font.COLOR X11 WIN OSX font.COLOR_BLEND X11 WIN OSX font-load font.ADD_FONT X11 WIN OSX font.SET_DPI X11 WIN OSX font-align font.HALIGN GENERIC font.VALIGN GENERIC font.ALIGN_MULTILINE GENERIC font-metrics font.HORIZONTAL_METRICS GENERIC font.KERNING font.ITALIC_CORRECTION font-layout font.WRAP_INVARIANT GENERIC media media-player media.PLAYER_QUEUE_PLAY X11 WIN OSX media.PLAYER_PLAY_QUEUE X11 WIN OSX media.PLAYER_PAUSE X11 WIN OSX media.PLAYER_PAUSE_QUEUE X11 WIN OSX media.PLAYER_EOS_NEXT X11 WIN OSX media.PLAYER_STATIC_STATIC GENERIC resource resource.RES_LOAD GENERIC resource.RES_LOAD_IMAGE GENERIC text text.RUNLIST GENERIC text.EMPTY GENERIC text.PLAIN GENERIC text.CONTENT_VALIGN_BOTTOM GENERIC text.CONTENT_VALIGN_CENTER GENERIC text.STYLE GENERIC text.ELEMENT GENERIC text.HTML GENERIC text.HTML_IMAGE GENERIC pyglet-1.1.4/tests/test.py0000700013464101346420000004326111266427720013717 0ustar yohyoh#!/usr/bin/env python '''Test framework for pyglet. Reads details of components and capabilities from a requirements document, runs the appropriate unit tests. Overview -------- First, some definitions: Test case: A single test, implemented by a Python module in the tests/ directory. Tests can be interactive (requiring the user to pass or fail them) or non-interactive (the test passes or fails itself). Section: A list of test cases to be run in a specified order. Sections can also contain other sections to an arbitrary level. Capability: A capability is a tag that can be applied to a test-case, which specifies a particular instance of the test. The tester can select which capabilities are present on their system; and only test cases matching those capabilities will be run. There are platform capabilities "WIN", "OSX" and "X11", which are automatically selected by default. The "DEVELOPER" capability is used to mark test cases which test a feature under active development. The "GENERIC" capability signifies that the test case is equivalent under all platforms, and is selected by default. Other capabilities can be specified and selected as needed. For example, we may wish to use an "NVIDIA" or "ATI" capability to specialise a test-case for a particular video card make. Some tests generate regression images if enabled, so you will only need to run through the interactive procedure once. During subsequent runs the image shown on screen will be compared with the regression images and passed automatically if they match. There are command line options for enabling this feature. By default regression images are saved in tests/regression/images/ Running tests ------------- The test procedure is interactive (this is necessary to facilitate the many GUI-related tests, which cannot be completely automated). With no command-line arguments, all test cases in all sections will be run:: python tests/test.py Before each test, a description of the test will be printed, including some information of what you should look for, and what interactivity is provided (including how to stop the test). Press ENTER to begin the test. When the test is complete, assuming there were no detectable errors (for example, failed assertions or an exception), you will be asked to enter a [P]ass or [F]ail. You should Fail the test if the behaviour was not as described, and enter a short reason. Details of each test session are logged for future use. Command-line options: --plan= Specify the test plan file (defaults to tests/plan.txt) --test-root= Specify the top-level directory to look for unit tests in (defaults to test/) --capabilities= Specify the capabilities to select, comma separated. By default this only includes your operating system capability (X11, WIN or OSX) and GENERIC. --log-level= Specify the minimum log level to write (defaults to 10: info) --log-file= Specify log file to write to (defaults to "pyglet.%d.log") --regression-capture Save regression images to disk. Use this only if the tests have already been shown to pass. --regression-check Look for a regression image on disk instead of prompting the user for passage. If a regression image is found, it is compared with the test case using the tolerance specified below. Recommended only for developers. --regression-tolerance= Specify the tolerance when comparing a regression image. A value of 2, for example, means each sample component must be +/- 2 units of the regression image. Tolerance of 0 means images must be identical, tolerance of 256 means images will always match (if correct dimensions). Defaults to 2. --regression-path= Specify the directory to store and look for regression images. Defaults to tests/regression/images/ --developer Selects the DEVELOPER capability. --no-interactive= Don't write descriptions or prompt for confirmation; just run each test in succcession. After the command line options, you can specify a list of sections or test cases to run. Examples -------- python tests/test.py --capabilities=GENERIC,NVIDIA,WIN window Runs all tests in the window section with the given capabilities. python tests/test.py --no-interactive FULLSCREEN_TOGGLE Test just the FULLSCREEN_TOGGLE test case without prompting for input (useful for development). python tests/image/PIL_RGBA_SAVE.py Run a single test outside of the test harness. Handy for development; it is equivalent to specifying --no-interactive. Writing tests ------------- Add the test case to the appropriate section in the test plan (plan.txt). Create one unit test script per test case. For example, the test for window.FULLSCREEN_TOGGLE is located at:: tests/window/FULLSCREEN_TOGGLE.py The test file must contain: - A module docstring describing what the test does and what the user should look for. - One or more subclasses of unittest.TestCase. - No other module-level code, except perhaps an if __name__ == '__main__' condition for running tests stand-alone. - Optionally, the attribute "__noninteractive = True" to specify that the test is not interactive; doesn't require user intervention. During development, test cases should be marked with DEVELOPER. Once finished add the WIN, OSX and X11 capabilities, or GENERIC if it's platform independent. Writing regression tests ------------------------ Your test case should subclass tests.regression.ImageRegressionTestCase instead of unitttest.TestCase. At the point where the buffer (window image) should be checked/saved, call self.capture_regression_image(). If this method returns True, you can exit straight away (regression test passed), otherwise continue running interactively (regression image was captured, wait for user confirmation). You can call capture_regression_image() several times; only the final image will be used. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import array import logging import os import optparse import re import sys import time import unittest # So we can find tests.regression and ensure local pyglet copy is tested. sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) import tests.regression import pyglet.image regressions_path = os.path.join(os.path.dirname(__file__), 'regression', 'images') class TestCase(object): def __init__(self, name): self.name = name self.short_name = name.split('.')[-1] self.capabilities = set() def get_module_filename(self, root=''): path = os.path.join(*self.name.split('.')) return '%s.py' % os.path.join(root, path) def get_module(self, root=''): name = 'tests.%s' % self.name module = __import__(name) for c in name.split('.')[1:]: module = getattr(module, c) return module def get_regression_image_filename(self): return os.path.join(regressions_path, '%s.png' % self.name) def test(self, options): if not options.capabilities.intersection(self.capabilities): return print ("Running Test: %s" % self.name) options.log.info('Testing %s.', self) if options.pretend: return module = None try: module = self.get_module(options.test_root) except IOError: options.log.warning('No test exists for %s', self) except Exception: options.log.exception('Cannot load test for %s', self) if not module: return module_interactive = options.interactive if hasattr(module, '__noninteractive') and \ getattr(module, '__noninteractive'): module_interactive = False if options.regression_check and \ os.path.exists(self.get_regression_image_filename()): result = RegressionCheckTestResult( self, options.regression_tolerance) module_interactive = False elif options.regression_capture: result = RegressionCaptureTestResult(self) else: result = StandardTestResult(self) if module_interactive: print '-' * 78 if module.__doc__: print module.__doc__ raw_input('Press return to begin test...') suite = unittest.TestLoader().loadTestsFromModule(module) options.log.info('Begin unit tests for %s', self) suite(result) for failure in result.failures: options.log.error('Failure in %s', self) options.log.error(failure[1]) for error in result.errors: options.log.error('Error in %s', self) options.log.error(error[1]) options.log.info('%d tests run', result.testsRun) if (module_interactive and len(result.failures) == 0 and len(result.errors) == 0): print module.__doc__ user_result = raw_input('[P]assed test, [F]ailed test: ') if user_result and user_result[0] in ('F', 'f'): print 'Enter failure description: ' description = raw_input('> ') options.log.error('User marked fail for %s', self) options.log.error(description) else: options.log.info('User marked pass for %s', self) result.setUserPass() def __repr__(self): return 'TestCase(%s)' % self.name def __str__(self): return self.name def __cmp__(self, other): return cmp(str(self), str(other)) class TestSection(object): def __init__(self, name): self.name = name self.children = [] def add(self, child): # child can be TestSection or TestCase self.children.append(child) def test(self, options): for child in self.children: child.test(options) def __repr__(self): return 'TestSection(%s)' % self.name class TestPlan(TestSection): def __init__(self): self.root = None self.names = {} @classmethod def from_file(cls, file): plan = TestPlan() plan.root = TestSection('{root}') plan.root.indent = None # Section stack sections = [plan.root] if not hasattr(file, 'read'): file = open(file, 'r') line_number = 0 for line in file: line_number += 1 # Skip empty lines if not line.strip(): continue # Skip comments if line[0] == '#': continue indent = len(line) - len(line.lstrip()) while sections and sections[-1].indent > indent: sections.pop() if sections[-1].indent is None: sections[-1].indent = indent if sections[-1].indent != indent: raise Exception('Indentation mismatch line %d' % line_number) if '.' in line: tokens = line.strip().split() test_case = TestCase(tokens[0]) test_case.capabilities = set(tokens[1:]) sections[-1].add(test_case) plan.names[test_case.name] = test_case plan.names[test_case.short_name] = test_case else: section = TestSection(line.strip()) section.indent = None sections[-1].add(section) sections.append(section) plan.names[section.name] = section return plan class StandardTestResult(unittest.TestResult): def __init__(self, component): super(StandardTestResult, self).__init__() def setUserPass(self): pass class RegressionCaptureTestResult(unittest.TestResult): def __init__(self, component): super(RegressionCaptureTestResult, self).__init__() self.component = component self.captured_image = None def startTest(self, test): super(RegressionCaptureTestResult, self).startTest(test) if isinstance(test, tests.regression.ImageRegressionTestCase): test._enable_regression_image = True def addSuccess(self, test): super(RegressionCaptureTestResult, self).addSuccess(test) assert self.captured_image is None if isinstance(test, tests.regression.ImageRegressionTestCase): self.captured_image = test._captured_image def setUserPass(self): if self.captured_image: filename = self.component.get_regression_image_filename() self.captured_image.save(filename) logging.getLogger().info('Wrote regression image %s' % filename) class Regression(Exception): pass def buffer_equal(a, b, tolerance=0): if tolerance == 0: return a == b if len(a) != len(b): return False a = array.array('B', a) b = array.array('B', b) for i in range(len(a)): if abs(a[i] - b[i]) > tolerance: return False return True class RegressionCheckTestResult(unittest.TestResult): def __init__(self, component, tolerance): super(RegressionCheckTestResult, self).__init__() self.filename = component.get_regression_image_filename() self.regression_image = pyglet.image.load(self.filename) self.tolerance = tolerance def startTest(self, test): super(RegressionCheckTestResult, self).startTest(test) if isinstance(test, tests.regression.ImageRegressionTestCase): test._enable_regression_image = True test._enable_interactive = False logging.getLogger().info('Using regression %s' % self.filename) def addSuccess(self, test): # Check image ref_image = self.regression_image.image_data this_image = test._captured_image.image_data this_image.format = ref_image.format this_image.pitch = ref_image.pitch if this_image.width != ref_image.width: self.addFailure(test, 'Buffer width does not match regression image') elif this_image.height != ref_image.height: self.addFailure(test, 'Buffer height does not match regression image') elif not buffer_equal(this_image.data, ref_image.data, self.tolerance): self.addFailure(test, 'Buffer does not match regression image') else: super(RegressionCheckTestResult, self).addSuccess(test) def addFailure(self, test, err): err = Regression(err) super(RegressionCheckTestResult, self).addFailure(test, (Regression, err, [])) def main(): capabilities = ['GENERIC'] platform_capabilities = { 'linux2': 'X11', 'win32': 'WIN', 'cygwin': 'WIN', 'darwin': 'OSX' } if sys.platform in platform_capabilities: capabilities.append(platform_capabilities[sys.platform]) script_root = os.path.dirname(__file__) plan_filename = os.path.normpath(os.path.join(script_root, 'plan.txt')) test_root = script_root op = optparse.OptionParser() op.usage = 'test.py [options] [components]' op.add_option('--plan', help='test plan file', default=plan_filename) op.add_option('--test-root', default=script_root, help='directory containing test cases') op.add_option('--capabilities', help='selected test capabilities', default=','.join(capabilities)) op.add_option('--log-level', help='verbosity of logging', default=10, type='int') op.add_option('--log-file', help='log to FILE', metavar='FILE', default='pyglet.%d.log') op.add_option('--regression-path', metavar='DIR', default=regressions_path, help='locate regression images in DIR') op.add_option('--regression-tolerance', type='int', default=2, help='tolerance for comparing regression images') op.add_option('--regression-check', action='store_true', help='enable image regression checks') op.add_option('--regression-capture', action='store_true', help='enable image regression capture') op.add_option('--no-interactive', action='store_false', default=True, dest='interactive', help='disable interactive prompting') op.add_option('--developer', action='store_true', help='add DEVELOPER capability') op.add_option('--pretend', action='store_true', help='print selected test cases only') options, args = op.parse_args() options.capabilities = set(options.capabilities.split(',')) if options.developer: options.capabilities.add('DEVELOPER') if options.regression_capture: try: os.makedirs(regressions_path) except OSError: pass if '%d' in options.log_file: i = 1 while os.path.exists(options.log_file % i): i += 1 options.log_file = options.log_file % i logging.basicConfig(filename=options.log_file, level=options.log_level) options.log = logging.getLogger() options.log.info('Beginning test at %s', time.ctime()) options.log.info('Capabilities are: %s', ', '.join(options.capabilities)) options.log.info('sys.platform = %s', sys.platform) options.log.info('Reading test plan from %s', options.plan) plan = TestPlan.from_file(options.plan) errors = False if args: components = [] for arg in args: try: component = plan.names[arg] components.append(component) except KeyError: options.log.error('Unknown test case or section "%s"', arg) errors = True else: components = [plan.root] if not errors: for component in components: component.test(options) if __name__ == '__main__': main() pyglet-1.1.4/pyglet/0002700013464101346420000000000011317255174012520 5ustar yohyohpyglet-1.1.4/pyglet/com.py0000600013464101346420000001236111317241561013646 0ustar yohyoh# ---------------------------------------------------------------------------- # 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)) ] pyglet-1.1.4/pyglet/app/0002700013464101346420000000000011317255174013300 5ustar yohyohpyglet-1.1.4/pyglet/app/__init__.py0000600013464101346420000002306411317241561015411 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 pyglet-1.1.4/pyglet/app/win32.py0000600013464101346420000001045311317241561014612 0ustar yohyoh# ---------------------------------------------------------------------------- # 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) pyglet-1.1.4/pyglet/app/xlib.py0000600013464101346420000000742311317241561014611 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 2496 2009-08-19 01:17:30Z benjamin.coder.smith $' import select 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) pyglet-1.1.4/pyglet/app/carbon.py0000600013464101346420000001324211317241561015113 0ustar yohyoh# ---------------------------------------------------------------------------- # 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)) pyglet-1.1.4/pyglet/text/0002700013464101346420000000000011317255174013504 5ustar yohyohpyglet-1.1.4/pyglet/text/__init__.py0000600013464101346420000004223211317241560015612 0ustar yohyoh# ---------------------------------------------------------------------------- # 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: $ '''Text formatting, layout and display. This module provides classes for loading styled documents from text files, HTML files and a pyglet-specific markup format. Documents can be styled with multiple fonts, colours, styles, text sizes, margins, paragraph alignments, and so on. Using the layout classes, documents can be laid out on a single line or word-wrapped to fit a rectangle. A layout can then be efficiently drawn in a window or updated incrementally (for example, to support interactive text editing). The label classes provide a simple interface for the common case where an application simply needs to display some text in a window. A plain text label can be created with:: label = pyglet.text.Label('Hello, world', font_name='Times New Roman', font_size=36, x=10, y=10) Alternatively, a styled text label using HTML can be created with:: label = pyglet.text.HTMLLabel('Hello, world', x=10, y=10) Either label can then be drawn at any time with:: label.draw() For details on the subset of HTML supported, see `pyglet.text.formats.html`. Refer to the Programming Guide for advanced usage of the document and layout classes, including interactive editing, embedding objects within documents and creating scrollable layouts. :since: pyglet 1.1 ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import os.path import pyglet from pyglet.text import layout, document, caret class DocumentDecodeException(Exception): '''An error occurred decoding document text.''' pass class DocumentDecoder(object): '''Abstract document decoder. ''' def decode(self, text, location=None): '''Decode document text. :Parameters: `text` : str Text to decode `location` : `Location` Location to use as base path for additional resources referenced within the document (for example, HTML images). :rtype: `AbstractDocument` ''' raise NotImplementedError('abstract') def get_decoder(filename, mimetype=None): '''Get a document decoder for the given filename and MIME type. If `mimetype` is omitted it is guessed from the filename extension. The following MIME types are supported: ``text/plain`` Plain text ``text/html`` HTML 4 Transitional ``text/vnd.pyglet-attributed`` Attributed text; see `pyglet.text.formats.attributed` `DocumentDecodeException` is raised if another MIME type is given. :Parameters: `filename` : str Filename to guess the MIME type from. If a MIME type is given, the filename is ignored. `mimetype` : str MIME type to lookup, or ``None`` to guess the type from the filename. :rtype: `DocumentDecoder` ''' if mimetype is None: _, ext = os.path.splitext(filename) if ext.lower() in ('.htm', '.html', '.xhtml'): mimetype = 'text/html' else: mimetype = 'text/plain' if mimetype == 'text/plain': from pyglet.text.formats import plaintext return plaintext.PlainTextDecoder() elif mimetype == 'text/html': from pyglet.text.formats import html return html.HTMLDecoder() elif mimetype == 'text/vnd.pyglet-attributed': from pyglet.text.formats import attributed return attributed.AttributedTextDecoder() else: raise DocumentDecodeException('Unknown format "%s"' % mimetype) def load(filename, file=None, mimetype=None): '''Load a document from a file. :Parameters: `filename` : str Filename of document to load. `file` : file-like object File object containing encoded data. If omitted, `filename` is loaded from disk. `mimetype` : str MIME type of the document. If omitted, the filename extension is used to guess a MIME type. See `get_decoder` for a list of supported MIME types. :rtype: `AbstractDocument` ''' decoder = get_decoder(filename, mimetype) if file is None: file = open(filename) location = pyglet.resource.FileLocation(os.path.dirname(filename)) return decoder.decode(file.read(), location) def decode_html(text, location=None): '''Create a document directly from some HTML formatted text. :Parameters: `text` : str HTML data to decode. `location` : str Location giving the base path for additional resources referenced from the document (e.g., images). :rtype: `FormattedDocument` ''' decoder = get_decoder(None, 'text/html') return decoder.decode(text, location) def decode_attributed(text): '''Create a document directly from some attributed text. See `pyglet.text.formats.attributed` for a description of attributed text. :Parameters: `text` : str Attributed text to decode. :rtype: `FormattedDocument` ''' decoder = get_decoder(None, 'text/vnd.pyglet-attributed') return decoder.decode(text) def decode_text(text): '''Create a document directly from some plain text. :Parameters: `text` : str Plain text to initialise the document with. :rtype: `UnformattedDocument` ''' decoder = get_decoder(None, 'text/plain') return decoder.decode(text) class DocumentLabel(layout.TextLayout): '''Base label class. A label is a layout that exposes convenience methods for manipulating the associated document. ''' def __init__(self, document=None, x=0, y=0, width=None, height=None, anchor_x='left', anchor_y='baseline', multiline=False, dpi=None, batch=None, group=None): '''Create a label for a given document. :Parameters: `document` : `AbstractDocument` Document to attach to the layout. `x` : int X coordinate of the label. `y` : int Y coordinate of the label. `width` : int Width of the label in pixels, or None `height` : int Height of the label in pixels, or None `anchor_x` : str Anchor point of the X coordinate: one of ``"left"``, ``"center"`` or ``"right"``. `anchor_y` : str Anchor point of the Y coordinate: one of ``"bottom"``, ``"baseline"``, ``"center"`` or ``"top"``. `multiline` : bool If True, the label will be word-wrapped and accept newline characters. You must also set the width of the label. `dpi` : float Resolution of the fonts in this layout. Defaults to 96. `batch` : `Batch` Optional graphics batch to add the label to. `group` : `Group` Optional graphics group to use. ''' super(DocumentLabel, self).__init__(document, width=width, height=height, multiline=multiline, dpi=dpi, batch=batch, group=group) self._x = x self._y = y self._anchor_x = anchor_x self._anchor_y = anchor_y self._update() def _get_text(self): return self.document.text def _set_text(self, text): self.document.text = text text = property(_get_text, _set_text, doc='''The text of the label. :type: str ''') def _get_color(self): return self.document.get_style('color') def _set_color(self, color): self.document.set_style(0, len(self.document.text), {'color': color}) color = property(_get_color, _set_color, doc='''Text color. Color is a 4-tuple of RGBA components, each in range [0, 255]. :type: (int, int, int, int) ''') def _get_font_name(self): return self.document.get_style('font_name') def _set_font_name(self, font_name): self.document.set_style(0, len(self.document.text), {'font_name': font_name}) font_name = property(_get_font_name, _set_font_name, doc='''Font family name. The font name, as passed to `pyglet.font.load`. A list of names can optionally be given: the first matching font will be used. :type: str or list ''') def _get_font_size(self): return self.document.get_style('font_size') def _set_font_size(self, font_size): self.document.set_style(0, len(self.document.text), {'font_size': font_size}) font_size = property(_get_font_size, _set_font_size, doc='''Font size, in points. :type: float ''') def _get_bold(self): return self.document.get_style('bold') def _set_bold(self, bold): self.document.set_style(0, len(self.document.text), {'bold': bold}) bold = property(_get_bold, _set_bold, doc='''Bold font style. :type: bool ''') def _get_italic(self): return self.document.get_style('italic') def _set_italic(self, italic): self.document.set_style(0, len(self.document.text), {'italic': italic}) italic = property(_get_italic, _set_italic, doc='''Italic font style. :type: bool ''') def get_style(self, name): '''Get a document style value by name. If the document has more than one value of the named style, `pyglet.text.document.STYLE_INDETERMINATE` is returned. :Parameters: `name` : str Style name to query. See documentation for `pyglet.text.layout` for known style names. :rtype: object ''' return self.document.get_style_range(name, 0, len(self.document.text)) def set_style(self, name, value): '''Set a document style value by name over the whole document. :Parameters: `name` : str Name of the style to set. See documentation for `pyglet.text.layout` for known style names. `value` : object Value of the style. ''' self.document.set_style(0, len(self.document.text), {name: value}) class Label(DocumentLabel): '''Plain text label. ''' def __init__(self, text='', font_name=None, font_size=None, bold=False, italic=False, color=(255, 255, 255, 255), x=0, y=0, width=None, height=None, anchor_x='left', anchor_y='baseline', halign='left', multiline=False, dpi=None, batch=None, group=None): '''Create a plain text label. :Parameters: `text` : str Text to display. `font_name` : str or list Font family name(s). If more than one name is given, the first matching name is used. `font_size` : float Font size, in points. `bold` : bool Bold font style. `italic` : bool Italic font style. `color` : (int, int, int, int) Font colour, as RGBA components in range [0, 255]. `x` : int X coordinate of the label. `y` : int Y coordinate of the label. `width` : int Width of the label in pixels, or None `height` : int Height of the label in pixels, or None `anchor_x` : str Anchor point of the X coordinate: one of ``"left"``, ``"center"`` or ``"right"``. `anchor_y` : str Anchor point of the Y coordinate: one of ``"bottom"``, ``"baseline"``, ``"center"`` or ``"top"``. `halign` : str Horizontal alignment of text on a line, only applies if a width is supplied. One of ``"left"``, ``"center"`` or ``"right"``. `multiline` : bool If True, the label will be word-wrapped and accept newline characters. You must also set the width of the label. `dpi` : float Resolution of the fonts in this layout. Defaults to 96. `batch` : `Batch` Optional graphics batch to add the label to. `group` : `Group` Optional graphics group to use. ''' document = decode_text(text) super(Label, self).__init__(document, x, y, width, height, anchor_x, anchor_y, multiline, dpi, batch, group) self.document.set_style(0, len(self.document.text), { 'font_name': font_name, 'font_size': font_size, 'bold': bold, 'italic': italic, 'color': color, 'halign': halign, }) class HTMLLabel(DocumentLabel): '''HTML formatted text label. A subset of HTML 4.01 is supported. See `pyglet.text.formats.html` for details. ''' def __init__(self, text='', location=None, x=0, y=0, width=None, height=None, anchor_x='left', anchor_y='baseline', multiline=False, dpi=None, batch=None, group=None): '''Create a label with an HTML string. :Parameters: `text` : str HTML formatted text to display. `location` : `Location` Location object for loading images referred to in the document. By default, the working directory is used. `x` : int X coordinate of the label. `y` : int Y coordinate of the label. `width` : int Width of the label in pixels, or None `height` : int Height of the label in pixels, or None `anchor_x` : str Anchor point of the X coordinate: one of ``"left"``, ``"center"`` or ``"right"``. `anchor_y` : str Anchor point of the Y coordinate: one of ``"bottom"``, ``"baseline"``, ``"center"`` or ``"top"``. `multiline` : bool If True, the label will be word-wrapped and render paragraph and line breaks. You must also set the width of the label. `dpi` : float Resolution of the fonts in this layout. Defaults to 96. `batch` : `Batch` Optional graphics batch to add the label to. `group` : `Group` Optional graphics group to use. ''' self._text = text self._location = location document = decode_html(text, location) super(HTMLLabel, self).__init__(document, x, y, width, height, anchor_x, anchor_y, multiline, dpi, batch, group) def _set_text(self, text): self._text = text self.document = decode_html(text, self._location) def _get_text(self): return self._text text = property(_get_text, _set_text, doc='''HTML formatted text of the label. :type: str ''') pyglet-1.1.4/pyglet/text/formats/0002700013464101346420000000000011317255174015157 5ustar yohyohpyglet-1.1.4/pyglet/text/formats/plaintext.py0000600013464101346420000000376611317241560017547 0ustar yohyoh# ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- '''Plain text decoder. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import pyglet class PlainTextDecoder(pyglet.text.DocumentDecoder): def decode(self, text, location=None): document = pyglet.text.document.UnformattedDocument() document.insert_text(0, text) return document pyglet-1.1.4/pyglet/text/formats/html.py0000600013464101346420000003146111317241561016475 0ustar yohyoh# ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- '''Decode HTML into attributed text. A subset of HTML 4.01 Transitional is implemented. The following elements are supported fully:: B BLOCKQUOTE BR CENTER CODE DD DIR DL EM FONT H1 H2 H3 H4 H5 H6 I IMG KBD LI MENU OL P PRE Q SAMP STRONG SUB SUP TT U UL VAR The mark (bullet or number) of a list item is separated from the body of the list item with a tab, as the pyglet document model does not allow out-of-stream text. This means lists display as expected, but behave a little oddly if edited. No CSS styling is supported. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import HTMLParser import htmlentitydefs import re import pyglet from pyglet.text.formats import structured def _hex_color(val): return [(val >> 16) & 0xff, (val >> 8) & 0xff, val & 0xff, 255] _color_names = { 'black': _hex_color(0x000000), 'silver': _hex_color(0xc0c0c0), 'gray': _hex_color(0x808080), 'white': _hex_color(0xffffff), 'maroon': _hex_color(0x800000), 'red': _hex_color(0xff0000), 'purple': _hex_color(0x800080), 'fucsia': _hex_color(0x008000), 'green': _hex_color(0x00ff00), 'lime': _hex_color(0xffff00), 'olive': _hex_color(0x808000), 'yellow': _hex_color(0xff0000), 'navy': _hex_color(0x000080), 'blue': _hex_color(0x0000ff), 'teal': _hex_color(0x008080), 'aqua': _hex_color(0x00ffff), } def _parse_color(value): if value.startswith('#'): return _hex_color(int(value[1:], 16)) else: try: return _color_names[value.lower()] except KeyError: raise ValueError() _whitespace_re = re.compile(u'[\u0020\u0009\u000c\u200b\r\n]+', re.DOTALL) _metadata_elements = ['head', 'title'] _block_elements = ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'ul', 'ol', 'dir', 'menu', 'pre', 'dl', 'div', 'center', 'noscript', 'noframes', 'blockquote', 'form', 'isindex', 'hr', 'table', 'fieldset', 'address', # Incorrect, but we treat list items as blocks: 'li', 'dd', 'dt', ] _block_containers = ['_top_block', 'body', 'div', 'center', 'object', 'applet', 'blockquote', 'ins', 'del', 'dd', 'li', 'form', 'fieldset', 'button', 'th', 'td', 'iframe', 'noscript', 'noframes', # Incorrect, but we treat list items as blocks: 'ul', 'ol', 'dir', 'menu', 'dl'] class HTMLDecoder(HTMLParser.HTMLParser, structured.StructuredTextDecoder): '''Decoder for HTML documents. ''' #: Default style attributes for unstyled text in the HTML document. #: #: :type: dict default_style = { 'font_name': 'Times New Roman', 'font_size': 12, 'margin_bottom': '12pt', } #: Map HTML font sizes to actual font sizes, in points. #: #: :type: dict font_sizes = { 1: 8, 2: 10, 3: 12, 4: 14, 5: 18, 6: 24, 7: 48 } def decode_structured(self, text, location): self.location = location self._font_size_stack = [3] self.list_stack.append(structured.UnorderedListBuilder({})) self.strip_leading_space = True self.block_begin = True self.need_block_begin = False self.element_stack = ['_top_block'] self.in_metadata = False self.in_pre = False self.push_style('_default', self.default_style) self.feed(text) self.close() def get_image(self, filename): return pyglet.image.load(filename, file=self.location.open(filename)) def prepare_for_data(self): if self.need_block_begin: self.add_text('\n') self.block_begin = True self.need_block_begin = False def handle_data(self, data): if self.in_metadata: return if self.in_pre: self.add_text(data) else: data = _whitespace_re.sub(' ', data) if data.strip(): self.prepare_for_data() if self.block_begin or self.strip_leading_space: data = data.lstrip() self.block_begin = False self.add_text(data) self.strip_leading_space = data.endswith(' ') def handle_starttag(self, tag, case_attrs): if self.in_metadata: return element = tag.lower() attrs = {} for key, value in case_attrs: attrs[key.lower()] = value if element in _metadata_elements: self.in_metadata = True elif element in _block_elements: # Pop off elements until we get to a block container. while self.element_stack[-1] not in _block_containers: self.handle_endtag(self.element_stack[-1]) if not self.block_begin: self.add_text('\n') self.block_begin = True self.need_block_begin = False self.element_stack.append(element) style = {} if element in ('b', 'strong'): style['bold'] = True elif element in ('i', 'em', 'var'): style['italic'] = True elif element in ('tt', 'code', 'samp', 'kbd'): style['font_name'] = 'Courier New' elif element == 'u': color = self.current_style.get('color') if color is None: color = [0, 0, 0, 255] style['underline'] = color elif element == 'font': if 'face' in attrs: style['font_name'] = attrs['face'].split(',') if 'size' in attrs: size = attrs['size'] try: if size.startswith('+'): size = self._font_size_stack[-1] + int(size[1:]) elif size.startswith('-'): size = self._font_size_stack[-1] - int(size[1:]) else: size = int(size) except ValueError: size = 3 self._font_size_stack.append(size) if size in self.font_sizes: style['font_size'] = self.font_sizes.get(size, 3) else: self._font_size_stack.append(self._font_size_stack[-1]) if 'color' in attrs: try: style['color'] = _parse_color(attrs['color']) except ValueError: pass elif element == 'sup': size = self._font_size_stack[-1] - 1 style['font_size'] = self.font_sizes.get(size, 1) style['baseline'] = '3pt' elif element == 'sub': size = self._font_size_stack[-1] - 1 style['font_size'] = self.font_sizes.get(size, 1) style['baseline'] = '-3pt' elif element == 'h1': style['font_size'] = 24 style['bold'] = True style['align'] = 'center' elif element == 'h2': style['font_size'] = 18 style['bold'] = True elif element == 'h3': style['font_size'] = 16 style['bold'] = True elif element == 'h4': style['font_size'] = 14 style['bold'] = True elif element == 'h5': style['font_size'] = 12 style['bold'] = True elif element == 'h6': style['font_size'] = 12 style['italic'] = True elif element == 'br': self.add_text(u'\u2028') self.strip_leading_space = True elif element == 'p': if attrs.get('align') in ('left', 'center', 'right'): style['align'] = attrs['align'] elif element == 'center': style['align'] = 'center' elif element == 'pre': style['font_name'] = 'Courier New' style['margin_bottom'] = 0 self.in_pre = True elif element == 'blockquote': left_margin = self.current_style.get('margin_left') or 0 right_margin = self.current_style.get('margin_right') or 0 style['margin_left'] = left_margin + 60 style['margin_right'] = right_margin + 60 elif element == 'q': self.handle_data(u'\u201c') elif element == 'ol': try: start = int(attrs.get('start', 1)) except ValueError: start = 1 format = attrs.get('type', '1') + '.' builder = structured.OrderedListBuilder(start, format) builder.begin(self, style) self.list_stack.append(builder) elif element in ('ul', 'dir', 'menu'): type = attrs.get('type', 'disc').lower() if type == 'circle': mark = u'\u25cb' elif type == 'square': mark = u'\u25a1' else: mark = u'\u25cf' builder = structured.UnorderedListBuilder(mark) builder.begin(self, style) self.list_stack.append(builder) elif element == 'li': self.list_stack[-1].item(self, style) self.strip_leading_space = True elif element == 'dl': style['margin_bottom'] = 0 elif element == 'dd': left_margin = self.current_style.get('margin_left') or 0 style['margin_left'] = left_margin + 30 elif element == 'img': image = self.get_image(attrs.get('src')) if image: width = attrs.get('width') if width: width = int(width) height = attrs.get('height') if height: height = int(height) self.prepare_for_data() self.add_element(structured.ImageElement(image, width, height)) self.strip_leading_space = False self.push_style(element, style) def handle_endtag(self, tag): element = tag.lower() if element not in self.element_stack: return self.pop_style(element) while self.element_stack.pop() != element: pass if element in _metadata_elements: self.in_metadata = False elif element in _block_elements: self.block_begin = False self.need_block_begin = True if element == 'font' and len(self._font_size_stack) > 1: self._font_size_stack.pop() elif element == 'pre': self.in_pre = False elif element == 'q': self.handle_data(u'\u201d') elif element in ('ul', 'ol'): if len(self.list_stack) > 1: self.list_stack.pop() def handle_entityref(self, name): if name in htmlentitydefs.name2codepoint: self.handle_data(unichr(htmlentitydefs.name2codepoint[name])) def handle_charref(self, name): name = name.lower() try: if name.startswith('x'): self.handle_data(unichr(int(name[1:], 16))) else: self.handle_data(unichr(int(name))) except ValueError: pass pyglet-1.1.4/pyglet/text/formats/__init__.py0000600013464101346420000000351611317241560017267 0ustar yohyoh# ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- '''Document formats. :since: pyglet 1.1 ''' __docformat__ = 'restructuredtext' __version__ = '$Id: __init__.py 1848 2008-03-01 04:21:43Z Alex.Holkner $' pyglet-1.1.4/pyglet/text/formats/structured.py0000600013464101346420000002135711317241560017737 0ustar yohyoh# ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- '''Base class for structured (hierarchical) document formats. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import re import pyglet class ImageElement(pyglet.text.document.InlineElement): def __init__(self, image, width=None, height=None): self.image = image.get_texture() self.width = width is None and image.width or width self.height = height is None and image.height or height self.vertex_lists = {} anchor_y = self.height / image.height * image.anchor_y ascent = max(0, self.height - anchor_y) descent = min(0, -anchor_y) super(ImageElement, self).__init__(ascent, descent, self.width) def place(self, layout, x, y): group = pyglet.graphics.TextureGroup(self.image.texture, layout.top_group) x1 = x y1 = y + self.descent x2 = x + self.width y2 = y + self.height + self.descent vertex_list = layout.batch.add(4, pyglet.gl.GL_QUADS, group, ('v2i', (x1, y1, x2, y1, x2, y2, x1, y2)), ('c3B', (255, 255, 255) * 4), ('t3f', self.image.tex_coords)) self.vertex_lists[layout] = vertex_list def remove(self, layout): self.vertex_lists[layout].delete() del self.vertex_lists[layout] def _int_to_roman(input): # From http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/81611 if not 0 < input < 4000: raise ValueError, "Argument must be between 1 and 3999" ints = (1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1) nums = ('M', 'CM', 'D', 'CD','C', 'XC','L','XL','X','IX','V','IV','I') result = "" for i in range(len(ints)): count = int(input / ints[i]) result += nums[i] * count input -= ints[i] * count return result class ListBuilder(object): def begin(self, decoder, style): '''Begin a list. :Parameters: `decoder` : `StructuredTextDecoder` Decoder. `style` : dict Style dictionary that applies over the entire list. ''' left_margin = decoder.current_style.get('margin_left') or 0 tab_stops = decoder.current_style.get('tab_stops') if tab_stops: tab_stops = list(tab_stops) else: tab_stops = [] tab_stops.append(left_margin + 50) style['margin_left'] = left_margin + 50 style['indent'] = -30 style['tab_stops'] = tab_stops def item(self, decoder, style, value=None): '''Begin a list item. :Parameters: `decoder` : `StructuredTextDecoder` Decoder. `style` : dict Style dictionary that applies over the list item. `value` : str Optional value of the list item. The meaning is list-type dependent. ''' mark = self.get_mark(value) if mark: decoder.add_text(mark) decoder.add_text('\t') def get_mark(self, value=None): '''Get the mark text for the next list item. :Parameters: `value` : str Optional value of the list item. The meaning is list-type dependent. :rtype: str ''' return '' class UnorderedListBuilder(ListBuilder): def __init__(self, mark): '''Create an unordered list with constant mark text. :Parameters: `mark` : str Mark to prepend to each list item. ''' self.mark = mark def get_mark(self, value): return self.mark class OrderedListBuilder(ListBuilder): format_re = re.compile('(.*?)([1aAiI])(.*)') def __init__(self, start, format): '''Create an ordered list with sequentially numbered mark text. The format is composed of an optional prefix text, a numbering scheme character followed by suffix text. Valid numbering schemes are: ``1`` Decimal Arabic ``a`` Lowercase alphanumeric ``A`` Uppercase alphanumeric ``i`` Lowercase Roman ``I`` Uppercase Roman Prefix text may typically be ``(`` or ``[`` and suffix text is typically ``.``, ``)`` or empty, but either can be any string. :Parameters: `start` : int First list item number. `format` : str Format style, for example ``"1."``. ''' self.next_value = start self.prefix, self.numbering, self.suffix = self.format_re.match(format).groups() assert self.numbering in '1aAiI' def get_mark(self, value): if value is None: value = self.next_value self.next_value = value + 1 if self.numbering in 'aA': try: mark = 'abcdefghijklmnopqrstuvwxyz'[value - 1] except ValueError: mark = '?' if self.numbering == 'A': mark = mark.upper() return '%s%s%s' % (self.prefix, mark, self.suffix) elif self.numbering in 'iI': try: mark = _int_to_roman(value) except ValueError: mark = '?' if self.numbering == 'i': mark = mark.lower() return '%s%s%s' % (self.prefix, mark, self.suffix) else: return '%s%d%s' % (self.prefix, value, self.suffix) class StructuredTextDecoder(pyglet.text.DocumentDecoder): def decode(self, text, location=None): self.len_text = 0 self.current_style = {} self.next_style = {} self.stack = [] self.list_stack = [] self.document = pyglet.text.document.FormattedDocument() if location is None: location = pyglet.resource.FileLocation('') self.decode_structured(text, location) return self.document def decode_structured(self, text, location): raise NotImplementedError('abstract') def push_style(self, key, styles): old_styles = {} for name in styles.keys(): old_styles[name] = self.current_style.get(name) self.stack.append((key, old_styles)) self.current_style.update(styles) self.next_style.update(styles) def pop_style(self, key): # Don't do anything if key is not in stack for match, _ in self.stack: if key == match: break else: return # Remove all innermost elements until key is closed. while True: match, old_styles = self.stack.pop() self.next_style.update(old_styles) self.current_style.update(old_styles) if match == key: break def add_text(self, text): self.document.insert_text(self.len_text, text, self.next_style) self.next_style.clear() self.len_text += len(text) def add_element(self, element): self.document.insert_element(self.len_text, element, self.next_style) self.next_style.clear() self.len_text += 1 pyglet-1.1.4/pyglet/text/formats/attributed.py0000600013464101346420000001203111317241560017667 0ustar yohyoh# ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- '''Extensible attributed text format for representing pyglet formatted documents. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import operator import parser import re import token import pyglet _pattern = re.compile(r''' (?P\{\#x(?P[0-9a-fA-F]+)\}) | (?P\{\#(?P[0-9]+)\}) | (?P\{\{) | (?P\}\}) | (?P\{ (?P[^ \{\}]+)\s+ (?P[^\}]+)\}) | (?P\n(?=[ \t])) | (?P\{\}\n) | (?P\n(?=\S)) | (?P\n\n+) | (?P[^\{\}\n]+) ''', re.VERBOSE | re.DOTALL) class AttributedTextDecoder(pyglet.text.DocumentDecoder): def decode(self, text, location=None): self.doc = pyglet.text.document.FormattedDocument() self.length = 0 self.attributes = {} next_trailing_space = True trailing_newline = True for m in _pattern.finditer(text): group = m.lastgroup trailing_space = True if group == 'text': t = m.group('text') self.append(t) trailing_space = t.endswith(' ') trailing_newline = False elif group == 'nl_soft': if not next_trailing_space: self.append(' ') trailing_newline = False elif group in ('nl_hard1', 'nl_hard2'): self.append('\n') trailing_newline = True elif group == 'nl_para': self.append(m.group('nl_para')) trailing_newline = True elif group == 'attr': try: ast = parser.expr(m.group('attr_val')) if self.safe(ast): val = eval(ast.compile()) else: val = None except (parser.ParserError, SyntaxError): val = None name = m.group('attr_name') if name[0] == '.': if trailing_newline: self.attributes[name[1:]] = val else: self.doc.set_paragraph_style(self.length, self.length, {name[1:]: val}) else: self.attributes[name] = val elif group == 'escape_dec': self.append(unichr(int(m.group('escape_dec_val')))) elif group == 'escape_hex': self.append(unichr(int(m.group('escape_hex_val'), 16))) elif group == 'escape_lbrace': self.append('{') elif group == 'escape_rbrace': self.append('}') next_trailing_space = trailing_space return self.doc def append(self, text): self.doc.insert_text(self.length, text, self.attributes) self.length += len(text) self.attributes.clear() _safe_names = ('True', 'False', 'None') def safe(self, ast): tree = ast.totuple() return self.safe_node(tree) def safe_node(self, node): if token.ISNONTERMINAL(node[0]): return reduce(operator.and_, map(self.safe_node, node[1:])) elif node[0] == token.NAME: return node[1] in self._safe_names else: return True pyglet-1.1.4/pyglet/text/caret.py0000600013464101346420000005036511317241561015160 0ustar yohyoh# ---------------------------------------------------------------------------- # 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:$ '''Provides keyboard and mouse editing procedures for text layout. Example usage:: from pyglet import window from pyglet.text import layout, caret my_window = window.Window(...) my_layout = layout.IncrementalTextLayout(...) my_caret = caret.Caret(my_layout) my_window.push_handlers(my_caret) :since: pyglet 1.1 ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import re import time from pyglet import clock from pyglet import event from pyglet.window import key class Caret(object): '''Visible text insertion marker for `pyglet.text.layout.IncrementalTextLayout`. The caret is drawn as a single vertical bar at the document `position` on a text layout object. If `mark` is not None, it gives the unmoving end of the current text selection. The visible text selection on the layout is updated along with `mark` and `position`. By default the layout's graphics batch is used, so the caret does not need to be drawn explicitly. Even if a different graphics batch is supplied, the caret will be correctly positioned and clipped within the layout. Updates to the document (and so the layout) are automatically propagated to the caret. The caret object can be pushed onto a window event handler stack with `Window.push_handlers`. The caret will respond correctly to keyboard, text, mouse and activation events, including double- and triple-clicks. If the text layout is being used alongside other graphical widgets, a GUI toolkit will be needed to delegate keyboard and mouse events to the appropriate widget. pyglet does not provide such a toolkit at this stage. ''' _next_word_re = re.compile(r'(?<=\W)\w') _previous_word_re = re.compile(r'(?<=\W)\w+\W*$') _next_para_re = re.compile(r'\n', flags=re.DOTALL) _previous_para_re = re.compile(r'\n', flags=re.DOTALL) _position = 0 _active = True _visible = True _blink_visible = True _click_count = 0 _click_time = 0 #: Blink period, in seconds. PERIOD = 0.5 #: Pixels to scroll viewport per mouse scroll wheel movement. Defaults #: to 12pt at 96dpi. SCROLL_INCREMENT= 12 * 96 / 72 def __init__(self, layout, batch=None, color=(0, 0, 0)): '''Create a caret for a layout. By default the layout's batch is used, so the caret does not need to be drawn explicitly. :Parameters: `layout` : `TextLayout` Layout to control. `batch` : `Batch` Graphics batch to add vertices to. `color` : (int, int, int) RGB tuple with components in range [0, 255]. ''' from pyglet import gl self._layout = layout if batch is None: batch = layout.batch r, g, b = color colors = (r, g, b, 255, r, g, b, 255) self._list = batch.add(2, gl.GL_LINES, layout.background_group, 'v2f', ('c4B', colors)) self._ideal_x = None self._ideal_line = None self._next_attributes = {} self.visible = True layout.push_handlers(self) def delete(self): '''Remove the caret from its batch. Also disconnects the caret from further layout events. ''' self._list.delete() self._layout.remove_handlers(self) def _blink(self, dt): if self.PERIOD: self._blink_visible = not self._blink_visible if self._visible and self._active and self._blink_visible: alpha = 255 else: alpha = 0 self._list.colors[3] = alpha self._list.colors[7] = alpha def _nudge(self): self.visible = True def _set_visible(self, visible): self._visible = visible clock.unschedule(self._blink) if visible and self._active and self.PERIOD: clock.schedule_interval(self._blink, self.PERIOD) self._blink_visible = False # flipped immediately by next blink self._blink(0) def _get_visible(self): return self._visible visible = property(_get_visible, _set_visible, doc='''Caret visibility. The caret may be hidden despite this property due to the periodic blinking or by `on_deactivate` if the event handler is attached to a window. :type: bool ''') def _set_color(self, color): self._list.colors[:3] = color self._list.colors[4:7] = color def _get_color(self): return self._list.colors[:3] color = property(_get_color, _set_color, doc='''Caret color. The default caret color is ``[0, 0, 0]`` (black). Each RGB color component is in the range 0 to 255. :type: (int, int, int) ''') def _set_position(self, index): self._position = index self._next_attributes.clear() self._update() def _get_position(self): return self._position position = property(_get_position, _set_position, doc='''Position of caret within document. :type: int ''') _mark = None def _set_mark(self, mark): self._mark = mark self._update(line=self._ideal_line) if mark is None: self._layout.set_selection(0, 0) def _get_mark(self): return self._mark mark = property(_get_mark, _set_mark, doc='''Position of immovable end of text selection within document. An interactive text selection is determined by its immovable end (the caret's position when a mouse drag begins) and the caret's position, which moves interactively by mouse and keyboard input. This property is ``None`` when there is no selection. :type: int ''') def _set_line(self, line): if self._ideal_x is None: self._ideal_x, _ = \ self._layout.get_point_from_position(self._position) self._position = \ self._layout.get_position_on_line(line, self._ideal_x) self._update(line=line, update_ideal_x=False) def _get_line(self): if self._ideal_line is not None: return self._ideal_line else: return self._layout.get_line_from_position(self._position) line = property(_get_line, _set_line, doc='''Index of line containing the caret's position. When set, `position` is modified to place the caret on requested line while maintaining the closest possible X offset. :type: int ''') def get_style(self, attribute): '''Get the document's named style at the caret's current position. If there is a text selection and the style varies over the selection, `pyglet.text.document.STYLE_INDETERMINATE` is returned. :Parameters: `attribute` : str Name of style attribute to retrieve. See `pyglet.text.document` for a list of recognised attribute names. :rtype: object ''' if self._mark is None or self._mark == self._position: try: return self._next_attributes[attribute] except KeyError: return self._layout.document.get_style(attribute, self._position) start = min(self._position, self._mark) end = max(self._position, self._mark) return self._layout.document.get_style_range(attribute, start, end) def set_style(self, attributes): '''Set the document style at the caret's current position. If there is a text selection the style is modified immediately. Otherwise, the next text that is entered before the position is modified will take on the given style. :Parameters: `attributes` : dict Dict mapping attribute names to style values. See `pyglet.text.document` for a list of recognised attribute names. ''' if self._mark is None or self._mark == self._position: self._next_attributes.update(attributes) return start = min(self._position, self._mark) end = max(self._position, self._mark) self._layout.document.set_style(start, end, attributes) def _delete_selection(self): start = min(self._mark, self._position) end = max(self._mark, self._position) self._position = start self._mark = None self._layout.document.delete_text(start, end) self._layout.set_selection(0, 0) def move_to_point(self, x, y): '''Move the caret close to the given window coordinate. The `mark` will be reset to ``None``. :Parameters: `x` : int X coordinate. `y` : int Y coordinate. ''' line = self._layout.get_line_from_point(x, y) self._mark = None self._layout.set_selection(0, 0) self._position = self._layout.get_position_on_line(line, x) self._update(line=line) self._next_attributes.clear() def select_to_point(self, x, y): '''Move the caret close to the given window coordinate while maintaining the `mark`. :Parameters: `x` : int X coordinate. `y` : int Y coordinate. ''' line = self._layout.get_line_from_point(x, y) self._position = self._layout.get_position_on_line(line, x) self._update(line=line) self._next_attributes.clear() def select_word(self, x, y): '''Select the word at the given window coordinate. :Parameters: `x` : int X coordinate. `y` : int Y coordinate. ''' line = self._layout.get_line_from_point(x, y) p = self._layout.get_position_on_line(line, x) m1 = self._previous_word_re.search(self._layout.document.text, 0, p+1) if not m1: m1 = 0 else: m1 = m1.start() self.mark = m1 m2 = self._next_word_re.search(self._layout.document.text, p) if not m2: m2 = len(self._layout.document.text) else: m2 = m2.start() self._position = m2 self._update(line=line) self._next_attributes.clear() def select_paragraph(self, x, y): '''Select the paragraph at the given window coordinate. :Parameters: `x` : int X coordinate. `y` : int Y coordinate. ''' line = self._layout.get_line_from_point(x, y) p = self._layout.get_position_on_line(line, x) self.mark = self._layout.document.get_paragraph_start(p) self._position = self._layout.document.get_paragraph_end(p) self._update(line=line) self._next_attributes.clear() def _update(self, line=None, update_ideal_x=True): if line is None: line = self._layout.get_line_from_position(self._position) self._ideal_line = None else: self._ideal_line = line x, y = self._layout.get_point_from_position(self._position, line) if update_ideal_x: self._ideal_x = x x -= self._layout.top_group.translate_x y -= self._layout.top_group.translate_y font = self._layout.document.get_font(max(0, self._position - 1)) self._list.vertices[:] = [x, y + font.descent, x, y + font.ascent] if self._mark is not None: self._layout.set_selection(min(self._position, self._mark), max(self._position, self._mark)) self._layout.ensure_line_visible(line) self._layout.ensure_x_visible(x) def on_layout_update(self): if self.position > len(self._layout.document.text): self.position = len(self._layout.document.text) self._update() def on_text(self, text): '''Handler for the `pyglet.window.Window.on_text` event. Caret keyboard handlers assume the layout always has keyboard focus. GUI toolkits should filter keyboard and text events by widget focus before invoking this handler. ''' if self._mark is not None: self._delete_selection() text = text.replace('\r', '\n') pos = self._position self._position += len(text) self._layout.document.insert_text(pos, text, self._next_attributes) self._nudge() return event.EVENT_HANDLED def on_text_motion(self, motion, select=False): '''Handler for the `pyglet.window.Window.on_text_motion` event. Caret keyboard handlers assume the layout always has keyboard focus. GUI toolkits should filter keyboard and text events by widget focus before invoking this handler. ''' if motion == key.MOTION_BACKSPACE: if self.mark is not None: self._delete_selection() elif self._position > 0: self._position -= 1 self._layout.document.delete_text( self._position, self._position + 1) elif motion == key.MOTION_DELETE: if self.mark is not None: self._delete_selection() elif self._position < len(self._layout.document.text): self._layout.document.delete_text( self._position, self._position + 1) elif self._mark is not None and not select: self._mark = None self._layout.set_selection(0, 0) if motion == key.MOTION_LEFT: self.position = max(0, self.position - 1) elif motion == key.MOTION_RIGHT: self.position = min(len(self._layout.document.text), self.position + 1) elif motion == key.MOTION_UP: self.line = max(0, self.line - 1) elif motion == key.MOTION_DOWN: line = self.line if line < self._layout.get_line_count() - 1: self.line = line + 1 elif motion == key.MOTION_BEGINNING_OF_LINE: self.position = self._layout.get_position_from_line(self.line) elif motion == key.MOTION_END_OF_LINE: line = self.line if line < self._layout.get_line_count() - 1: self._position = \ self._layout.get_position_from_line(line + 1) - 1 self._update(line) else: self.position = len(self._layout.document.text) elif motion == key.MOTION_BEGINNING_OF_FILE: self.position = 0 elif motion == key.MOTION_END_OF_FILE: self.position = len(self._layout.document.text) elif motion == key.MOTION_NEXT_WORD: pos = self._position + 1 m = self._next_word_re.search(self._layout.document.text, pos) if not m: self.position = len(self._layout.document.text) else: self.position = m.start() elif motion == key.MOTION_PREVIOUS_WORD: pos = self._position m = self._previous_word_re.search(self._layout.document.text, 0, pos) if not m: self.position = 0 else: self.position = m.start() self._next_attributes.clear() self._nudge() return event.EVENT_HANDLED def on_text_motion_select(self, motion): '''Handler for the `pyglet.window.Window.on_text_motion_select` event. Caret keyboard handlers assume the layout always has keyboard focus. GUI toolkits should filter keyboard and text events by widget focus before invoking this handler. ''' if self.mark is None: self.mark = self.position self.on_text_motion(motion, True) return event.EVENT_HANDLED def on_mouse_scroll(self, x, y, scroll_x, scroll_y): '''Handler for the `pyglet.window.Window.on_mouse_scroll` event. Mouse handlers do not check the bounds of the coordinates: GUI toolkits should filter events that do not intersect the layout before invoking this handler. The layout viewport is scrolled by `SCROLL_INCREMENT` pixels per "click". ''' self._layout.view_x -= scroll_x * self.SCROLL_INCREMENT self._layout.view_y += scroll_y * self.SCROLL_INCREMENT return event.EVENT_HANDLED def on_mouse_press(self, x, y, button, modifiers): '''Handler for the `pyglet.window.Window.on_mouse_press` event. Mouse handlers do not check the bounds of the coordinates: GUI toolkits should filter events that do not intersect the layout before invoking this handler. This handler keeps track of the number of mouse presses within a short span of time and uses this to reconstruct double- and triple-click events for selecting words and paragraphs. This technique is not suitable when a GUI toolkit is in use, as the active widget must also be tracked. Do not use this mouse handler if a GUI toolkit is being used. ''' t = time.time() if t - self._click_time < 0.25: self._click_count += 1 else: self._click_count = 1 self._click_time = time.time() if self._click_count == 1: self.move_to_point(x, y) elif self._click_count == 2: self.select_word(x, y) elif self._click_count == 3: self.select_paragraph(x, y) self._click_count = 0 self._nudge() return event.EVENT_HANDLED def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers): '''Handler for the `pyglet.window.Window.on_mouse_drag` event. Mouse handlers do not check the bounds of the coordinates: GUI toolkits should filter events that do not intersect the layout before invoking this handler. ''' if self.mark is None: self.mark = self.position self.select_to_point(x, y) self._nudge() return event.EVENT_HANDLED def on_activate(self): '''Handler for the `pyglet.window.Window.on_activate` event. The caret is hidden when the window is not active. ''' self._active = True self.visible = self.visible return event.EVENT_HANDLED def on_deactivate(self): '''Handler for the `pyglet.window.Window.on_deactivate` event. The caret is hidden when the window is not active. ''' self._active = False self.visible = self.visible return event.EVENT_HANDLED pyglet-1.1.4/pyglet/text/document.py0000600013464101346420000006251311317241561015676 0ustar yohyoh# ---------------------------------------------------------------------------- # 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:$ '''Formatted and unformatted document interfaces used by text layout. Abstract representation ======================= Styled text in pyglet is represented by one of the `AbstractDocument` classes, which manage the state representation of text and style independently of how it is loaded or rendered. A document consists of the document text (a Unicode string) and a set of named style ranges. For example, consider the following (artificial) example:: 0 5 10 15 20 The cat sat on the mat. +++++++ +++++++ "bold" ++++++ "italic" If this example were to be rendered, "The cat" and "the mat" would be in bold, and "on the" in italics. Note that the second "the" is both bold and italic. The document styles recorded for this example would be ``"bold"`` over ranges (0-7, 15-22) and ``"italic"`` over range (12-18). Overlapping styles are permitted; unlike HTML and other structured markup, the ranges need not be nested. The document has no knowledge of the semantics of ``"bold"`` or ``"italic"``, it stores only the style names. The pyglet layout classes give meaning to these style names in the way they are rendered; but you are also free to invent your own style names (which will be ignored by the layout classes). This can be useful to tag areas of interest in a document, or maintain references back to the source material. As well as text, the document can contain arbitrary elements represented by `InlineElement`. An inline element behaves like a single character in the documented, but can be rendered by the application. Paragraph breaks ================ Paragraph breaks are marked with a "newline" character (U+0010). The Unicode paragraph break (U+2029) can also be used. Line breaks (U+2028) can be used to force a line break within a paragraph. See Unicode recommendation UTR #13 for more information: http://unicode.org/reports/tr13/tr13-5.html. Document classes ================ Any class implementing `AbstractDocument` provides a an interface to a document model as described above. In theory a structured document such as HTML or XML could export this model, though the classes provided by pyglet implement only unstructured documents. The `UnformattedDocument` class assumes any styles set are set over the entire document. So, regardless of the range specified when setting a ``"bold"`` style attribute, for example, the entire document will receive that style. The `FormattedDocument` class implements the document model directly, using the `RunList` class to represent style runs efficiently. Style attributes ================ The following character style attribute names are recognised by pyglet: ``font_name`` Font family name, as given to `pyglet.font.load`. ``font_size`` Font size, in points. ``bold`` Boolean. ``italic`` Boolean. ``underline`` 4-tuple of ints in range (0, 255) giving RGBA underline color, or None (default) for no underline. ``kerning`` Additional space to insert between glyphs, in points. Defaults to 0. ``baseline`` Offset of glyph baseline from line baseline, in points. Positive values give a superscript, negative values give a subscript. Defaults to 0. ``color`` 4-tuple of ints in range (0, 255) giving RGBA text color ``background_color`` 4-tuple of ints in range (0, 255) giving RGBA text background color; or ``None`` for no background fill. The following paragraph style attribute names are recognised by pyglet. Note that paragraph styles are handled no differently from character styles by the document: it is the application's responsibility to set the style over an entire paragraph, otherwise results are undefined. ``align`` ``left`` (default), ``center`` or ``right``. ``indent`` Additional horizontal space to insert before the first ``leading`` Additional space to insert between consecutive lines within a paragraph, in points. Defaults to 0. ``line_spacing`` Distance between consecutive baselines in a paragraph, in points. Defaults to ``None``, which automatically calculates the tightest line spacing for each line based on the font ascent and descent. ``margin_left`` Left paragraph margin, in pixels. ``margin_right`` Right paragraph margin, in pixels. ``margin_top`` Margin above paragraph, in pixels. ``margin_bottom`` Margin below paragraph, in pixels. Adjacent margins do not collapse. ``tab_stops`` List of horizontal tab stops, in pixels, measured from the left edge of the text layout. Defaults to the empty list. When the tab stops are exhausted, they implicitly continue at 50 pixel intervals. ``wrap`` Boolean. If True (the default), text wraps within the width of the layout. Other attributes can be used to store additional style information within the document; it will be ignored by the built-in text classes. All style attributes (including those not present in a document) default to ``None`` (including the so-called "boolean" styles listed above). The meaning of a ``None`` style is style- and application-dependent. :since: pyglet 1.1 ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import re import sys from pyglet import event from pyglet.text import runlist _is_epydoc = hasattr(sys, 'is_epydoc') and sys.is_epydoc #: The style attribute takes on multiple values in the document. STYLE_INDETERMINATE = 'indeterminate' class InlineElement(object): '''Arbitrary inline element positioned within a formatted document. Elements behave like a single glyph in the document. They are measured by their horizontal advance, ascent above the baseline, and descent below the baseline. The pyglet layout classes reserve space in the layout for elements and call the element's methods to ensure they are rendered at the appropriate position. If the size of a element (any of the `advance`, `ascent`, or `descent` instance variables) is modified it is the application's responsibility to trigger a reflow of the appropriate area in the affected layouts. This can be done by forcing a style change over the element's position. :Ivariables: `ascent` : int Ascent of the element above the baseline, in pixels. `descent` : int Descent of the element below the baseline, in pixels. Typically negative. `advance` : int Width of the element, in pixels. ''' def __init__(self, ascent, descent, advance): self.ascent = ascent self.descent = descent self.advance = advance self._position = None position = property(lambda self: self._position, doc='''Position of the element within the document. Read-only. :type: int ''') def place(self, layout, x, y): '''Construct an instance of the element at the given coordinates. Called when the element's position within a layout changes, either due to the initial condition, changes in the document or changes in the layout size. It is the responsibility of the element to clip itself against the layout boundaries, and position itself appropriately with respect to the layout's position and viewport offset. The `TextLayout.top_state` graphics state implements this transform and clipping into window space. :Parameters: `layout` : `pyglet.text.layout.TextLayout` The layout the element moved within. `x` : int Position of the left edge of the element, relative to the left edge of the document, in pixels. `y` : int Position of the baseline, relative to the top edge of the document, in pixels. Note that this is typically negative. ''' raise NotImplementedError('abstract') def remove(self, layout): '''Remove this element from a layout. The counterpart of `place`; called when the element is no longer visible in the given layout. :Parameters: `layout` : `pyglet.text.layout.TextLayout` The layout the element was removed from. ''' raise NotImplementedError('abstract') class AbstractDocument(event.EventDispatcher): '''Abstract document interface used by all `pyglet.text` classes. This class can be overridden to interface pyglet with a third-party document format. It may be easier to implement the document format in terms of one of the supplied concrete classes `FormattedDocument` or `UnformattedDocument`. ''' _previous_paragraph_re = re.compile(u'\n[^\n\u2029]*$') _next_paragraph_re = re.compile(u'[\n\u2029]') def __init__(self, text=''): super(AbstractDocument, self).__init__() self._text = u'' self._elements = [] if text: self.insert_text(0, text) def _get_text(self): return self._text def _set_text(self, text): if text == self._text: return self.delete_text(0, len(self._text)) self.insert_text(0, text) text = property(_get_text, _set_text, doc='''Document text. For efficient incremental updates, use the `insert_text` and `delete_text` methods instead of replacing this property. :type: str ''') def get_paragraph_start(self, pos): '''Get the starting position of a paragraph. :Parameters: `pos` : int Character position within paragraph. :rtype: int ''' # Tricky special case where the $ in pattern matches before the \n at # the end of the string instead of the end of the string. if (self._text[:pos + 1].endswith('\n') or self._text[:pos + 1].endswith(u'\u2029')): return pos m = self._previous_paragraph_re.search(self._text, 0, pos + 1) if not m: return 0 return m.start() + 1 def get_paragraph_end(self, pos): '''Get the end position of a paragraph. :Parameters: `pos` : int Character position within paragraph. :rtype: int ''' m = self._next_paragraph_re.search(self._text, pos) if not m: return len(self._text) return m.start() + 1 def get_style_runs(self, attribute): '''Get a style iterator over the given style attribute. :Parameters: `attribute` : str Name of style attribute to query. :rtype: `AbstractRunIterator` ''' raise NotImplementedError('abstract') def get_style(self, attribute, position=0): '''Get an attribute style at the given position. :Parameters: `attribute` : str Name of style attribute to query. `position` : int Character position of document to query. :return: The style set for the attribute at the given position. ''' raise NotImplementedError('abstract') def get_style_range(self, attribute, start, end): '''Get an attribute style over the given range. If the style varies over the range, `STYLE_INDETERMINATE` is returned. :Parameters: `attribute` : str Name of style attribute to query. `start` : int Starting character position. `end` : int Ending character position (exclusive). :return: The style set for the attribute over the given range, or `STYLE_INDETERMINATE` if more than one value is set. ''' iter = self.get_style_runs(attribute) _, value_end, value = iter.ranges(start, end).next() if value_end < end: return STYLE_INDETERMINATE else: return value def get_font_runs(self, dpi=None): '''Get a style iterator over the `pyglet.font.Font` instances used in the document. The font instances are created on-demand by inspection of the ``font_name``, ``font_size``, ``bold`` and ``italic`` style attributes. :Parameters: `dpi` : float Optional resolution to construct fonts at. See `pyglet.font.load`. :rtype: `AbstractRunIterator` ''' raise NotImplementedError('abstract') def get_font(self, position, dpi=None): '''Get the font instance used at the given position. :see: `get_font_runs` :Parameters: `position` : int Character position of document to query. `dpi` : float Optional resolution to construct fonts at. See `pyglet.font.load`. :rtype: `pyglet.font.Font` :return: The font at the given position. ''' raise NotImplementedError('abstract') def insert_text(self, start, text, attributes=None): '''Insert text into the document. :Parameters: `start` : int Character insertion point within document. `text` : str Text to insert. `attributes` : dict Optional dictionary giving named style attributes of the inserted text. ''' self._insert_text(start, text, attributes) self.dispatch_event('on_insert_text', start, text) def _insert_text(self, start, text, attributes): self._text = u''.join((self._text[:start], text, self._text[start:])) len_text = len(text) for element in self._elements: if element._position >= start: element._position += len_text def delete_text(self, start, end): '''Delete text from the document. :Parameters: `start` : int Starting character position to delete from. `end` : int Ending character position to delete to (exclusive). ''' self._delete_text(start, end) self.dispatch_event('on_delete_text', start, end) def _delete_text(self, start, end): for element in list(self._elements): if start <= element.position < end: self._elements.remove(element) self._text = self._text[:start] + self._text[end:] def insert_element(self, position, element, attributes=None): '''Insert a element into the document. See the `InlineElement` class documentation for details of usage. :Parameters: `position` : int Character insertion point within document. `element` : `InlineElement` Element to insert. `attributes` : dict Optional dictionary giving named style attributes of the inserted text. ''' assert element._position is None, \ 'Element is already in a document.' self.insert_text(position, '\0', attributes) element._position = position self._elements.append(element) self._elements.sort(key=lambda d:d.position) def get_element(self, position): '''Get the element at a specified position. :Parameters: `position` : int Position in the document of the element. :rtype: `InlineElement` ''' for element in self._elements: if element._position == position: return element raise RuntimeError('No element at position %d' % position) def set_style(self, start, end, attributes): '''Set text style of some or all of the document. :Parameters: `start` : int Starting character position. `end` : int Ending character position (exclusive). `attributes` : dict Dictionary giving named style attributes of the text. ''' self._set_style(start, end, attributes) self.dispatch_event('on_style_text', start, end, attributes) def _set_style(self, start, end, attributes): raise NotImplementedError('abstract') def set_paragraph_style(self, start, end, attributes): '''Set the style for a range of paragraphs. This is a convenience method for `set_style` that aligns the character range to the enclosing paragraph(s). :Parameters: `start` : int Starting character position. `end` : int Ending character position (exclusive). `attributes` : dict Dictionary giving named style attributes of the paragraphs. ''' start = self.get_paragraph_start(start) end = self.get_paragraph_end(end) self._set_style(start, end, attributes) self.dispatch_event('on_style_text', start, end, attributes) if _is_epydoc: def on_insert_text(self, start, text): '''Text was inserted into the document. :Parameters: `start` : int Character insertion point within document. `text` : str The text that was inserted. :event: ''' def on_delete_text(self, start, end): '''Text was deleted from the document. :Parameters: `start` : int Starting character position of deleted text. `end` : int Ending character position of deleted text (exclusive). :event: ''' def on_style_text(self, start, end, attributes): '''Text character style was modified. :Parameters: `start` : int Starting character position of modified text. `end` : int Ending character position of modified text (exclusive). `attributes` : dict Dictionary giving updated named style attributes of the text. :event: ''' AbstractDocument.register_event_type('on_insert_text') AbstractDocument.register_event_type('on_delete_text') AbstractDocument.register_event_type('on_style_text') class UnformattedDocument(AbstractDocument): '''A document having uniform style over all text. Changes to the style of text within the document affects the entire document. For convenience, the ``position`` parameters of the style methods may therefore be omitted. ''' def __init__(self, text=''): super(UnformattedDocument, self).__init__(text) self.styles = {} def get_style_runs(self, attribute): value = self.styles.get(attribute) return runlist.ConstRunIterator(len(self.text), value) def get_style(self, attribute, position=None): return self.styles.get(attribute) def set_style(self, start, end, attributes): return super(UnformattedDocument, self).set_style( 0, len(self.text), attributes) def _set_style(self, start, end, attributes): self.styles.update(attributes) def set_paragraph_style(self, start, end, attributes): return super(UnformattedDocument, self).set_paragraph_style( 0, len(self.text), attributes) def get_font_runs(self, dpi=None): ft = self.get_font(dpi=dpi) return runlist.ConstRunIterator(len(self.text), ft) def get_font(self, position=None, dpi=None): from pyglet import font font_name = self.styles.get('font_name') font_size = self.styles.get('font_size') bold = self.styles.get('bold', False) italic = self.styles.get('italic', False) return font.load(font_name, font_size, bold=bool(bold), italic=bool(italic), dpi=dpi) def get_element_runs(self): return runlist.ConstRunIterator(len(self._text), None) class FormattedDocument(AbstractDocument): '''Simple implementation of a document that maintains text formatting. Changes to text style are applied according to the description in `AbstractDocument`. All styles default to ``None``. ''' def __init__(self, text=''): self._style_runs = {} super(FormattedDocument, self).__init__(text) def get_style_runs(self, attribute): try: return self._style_runs[attribute].get_run_iterator() except KeyError: return _no_style_range_iterator def get_style(self, attribute, position=0): try: return self._style_runs[attribute][position] except KeyError: return None def _set_style(self, start, end, attributes): for attribute, value in attributes.items(): try: runs = self._style_runs[attribute] except KeyError: runs = self._style_runs[attribute] = runlist.RunList(0, None) runs.insert(0, len(self._text)) runs.set_run(start, end, value) def get_font_runs(self, dpi=None): return _FontStyleRunsRangeIterator( self.get_style_runs('font_name'), self.get_style_runs('font_size'), self.get_style_runs('bold'), self.get_style_runs('italic'), dpi) def get_font(self, position, dpi=None): iter = self.get_font_runs(dpi) return iter[position] def get_element_runs(self): return _ElementIterator(self._elements, len(self._text)) def _insert_text(self, start, text, attributes): super(FormattedDocument, self)._insert_text(start, text, attributes) len_text = len(text) for runs in self._style_runs.values(): runs.insert(start, len_text) if attributes is not None: for attribute, value in attributes.items(): try: runs = self._style_runs[attribute] except KeyError: runs = self._style_runs[attribute] = \ runlist.RunList(0, None) runs.insert(0, len(self.text)) runs.set_run(start, start + len_text, value) def _delete_text(self, start, end): super(FormattedDocument, self)._delete_text(start, end) for runs in self._style_runs.values(): runs.delete(start, end) def _iter_elements(elements, length): last = 0 for element in elements: p = element.position yield last, p, None yield p, p + 1, element last = p + 1 yield last, length, None class _ElementIterator(runlist.RunIterator): def __init__(self, elements, length): self.next = _iter_elements(elements, length).next self.start, self.end, self.value = self.next() class _FontStyleRunsRangeIterator(object): # XXX subclass runlist def __init__(self, font_names, font_sizes, bolds, italics, dpi): self.zip_iter = runlist.ZipRunIterator( (font_names, font_sizes, bolds, italics)) self.dpi = dpi def ranges(self, start, end): from pyglet import font for start, end, styles in self.zip_iter.ranges(start, end): font_name, font_size, bold, italic = styles ft = font.load(font_name, font_size, bold=bool(bold), italic=bool(italic), dpi=self.dpi) yield start, end, ft def __getitem__(self, index): from pyglet import font font_name, font_size, bold, italic = self.zip_iter[index] return font.load(font_name, font_size, bold=bool(bold), italic=bool(italic), dpi=self.dpi) class _NoStyleRangeIterator(object): # XXX subclass runlist def ranges(self, start, end): yield start, end, None def __getitem__(self, index): return None _no_style_range_iterator = _NoStyleRangeIterator() pyglet-1.1.4/pyglet/text/layout.py0000600013464101346420000024153511317241561015400 0ustar yohyoh# ---------------------------------------------------------------------------- # 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: $ '''Render simple text and formatted documents efficiently. Three layout classes are provided: `TextLayout` The entire document is laid out before it is rendered. The layout will be grouped with other layouts in the same batch (allowing for efficient rendering of multiple layouts). Any change to the layout or document, and even querying some properties, will cause the entire document to be laid out again. `ScrollableTextLayout` Based on `TextLayout`. A separate group is used for layout which crops the contents of the layout to the layout rectangle. Additionally, the contents of the layout can be "scrolled" within that rectangle with the ``view_x`` and ``view_y`` properties. `IncrementalTextLayout` Based on `ScrollableTextLayout`. When the layout or document are modified, only the affected regions are laid out again. This permits efficient interactive editing and styling of text. Only the visible portion of the layout is actually rendered; as the viewport is scrolled additional sections are rendered and discarded as required. This permits efficient viewing and editing of large documents. Additionally, this class provides methods for locating the position of a caret in the document, and for displaying interactive text selections. All three layout classes can be used with either `UnformattedDocument` or `FormattedDocument`, and can be either single-line or ``multiline``. The combinations of these options effectively provides 12 different text display possibilities. Style attributes ================ The following character style attribute names are recognised by the layout classes. Data types and units are as specified. Where an attribute is marked "as a distance" the value is assumed to be in pixels if given as an int or float, otherwise a string of the form ``"0u"`` is required, where ``0`` is the distance and ``u`` is the unit; one of ``"px"`` (pixels), ``"pt"`` (points), ``"pc"`` (picas), ``"cm"`` (centimeters), ``"mm"`` (millimeters) or ``"in"`` (inches). For example, ``"14pt"`` is the distance covering 14 points, which at the default DPI of 96 is 18 pixels. ``font_name`` Font family name, as given to `pyglet.font.load`. ``font_size`` Font size, in points. ``bold`` Boolean. ``italic`` Boolean. ``underline`` 4-tuple of ints in range (0, 255) giving RGBA underline color, or None (default) for no underline. ``kerning`` Additional space to insert between glyphs, as a distance. Defaults to 0. ``baseline`` Offset of glyph baseline from line baseline, as a distance. Positive values give a superscript, negative values give a subscript. Defaults to 0. ``color`` 4-tuple of ints in range (0, 255) giving RGBA text color ``background_color`` 4-tuple of ints in range (0, 255) giving RGBA text background color; or ``None`` for no background fill. The following paragraph style attribute names are recognised. Note that paragraph styles are handled no differently from character styles by the document: it is the application's responsibility to set the style over an entire paragraph, otherwise results are undefined. ``align`` ``left`` (default), ``center`` or ``right``. ``indent`` Additional horizontal space to insert before the first glyph of the first line of a paragraph, as a distance. ``leading`` Additional space to insert between consecutive lines within a paragraph, as a distance. Defaults to 0. ``line_spacing`` Distance between consecutive baselines in a paragraph, as a distance. Defaults to ``None``, which automatically calculates the tightest line spacing for each line based on the font ascent and descent. ``margin_left`` Left paragraph margin, as a distance. ``margin_right`` Right paragraph margin, as a distance. ``margin_top`` Margin above paragraph, as a distance. ``margin_bottom`` Margin below paragraph, as a distance. Adjacent margins do not collapse. ``tab_stops`` List of horizontal tab stops, as distances, measured from the left edge of the text layout. Defaults to the empty list. When the tab stops are exhausted, they implicitly continue at 50 pixel intervals. ``wrap`` Boolean. If True (the default), text wraps within the width of the layout. Other attributes can be used to store additional style information within the document; they will be ignored by the built-in text classes. :since: pyglet 1.1 ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import re import sys from pyglet.gl import * from pyglet import event from pyglet import graphics from pyglet.text import runlist from pyglet.font.base import _grapheme_break _is_epydoc = hasattr(sys, 'is_epydoc') and sys.is_epydoc _distance_re = re.compile(r'([-0-9.]+)([a-zA-Z]+)') def _parse_distance(distance, dpi): '''Parse a distance string and return corresponding distance in pixels as an integer. ''' if isinstance(distance, int): return distance elif isinstance(distance, float): return int(distance) match = _distance_re.match(distance) assert match, 'Could not parse distance %s' % (distance) if not match: return 0 value, unit = match.groups() value = float(value) if unit == 'px': return int(value) elif unit == 'pt': return int(value * dpi / 72.0) elif unit == 'pc': return int(value * dpi / 6.0) elif unit == 'in': return int(value * dpi) elif unit == 'mm': return int(value * dpi * 0.0393700787) elif unit == 'cm': return int(value * dpi * 0.393700787) else: assert False, 'Unknown distance unit %s' % unit class _Line(object): align = 'left' margin_left = 0 margin_right = 0 length = 0 ascent = 0 descent = 0 width = 0 paragraph_begin = False paragraph_end = False x = None y = None def __init__(self, start): self.vertex_lists = [] self.start = start self.boxes = [] def __repr__(self): return '_Line(%r)' % self.boxes def add_box(self, box): self.boxes.append(box) self.length += box.length self.ascent = max(self.ascent, box.ascent) self.descent = min(self.descent, box.descent) self.width += box.advance def delete(self, layout): for list in self.vertex_lists: list.delete() self.vertex_lists = [] for box in self.boxes: box.delete(layout) class _LayoutContext(object): def __init__(self, layout, document, colors_iter, background_iter): self.colors_iter = colors_iter underline_iter = document.get_style_runs('underline') self.decoration_iter = runlist.ZipRunIterator( (background_iter, underline_iter)) self.baseline_iter = runlist.FilteredRunIterator( document.get_style_runs('baseline'), lambda value: value is not None, 0) class _StaticLayoutContext(_LayoutContext): def __init__(self, layout, document, colors_iter, background_iter): super(_StaticLayoutContext, self).__init__(layout, document, colors_iter, background_iter) self.vertex_lists = layout._vertex_lists self.boxes = layout._boxes def add_list(self, list): self.vertex_lists.append(list) def add_box(self, box): self.boxes.append(box) class _IncrementalLayoutContext(_LayoutContext): line = None def add_list(self, list): self.line.vertex_lists.append(list) def add_box(self, box): pass class _AbstractBox(object): owner = None def __init__(self, ascent, descent, advance, length): self.ascent = ascent self.descent = descent self.advance = advance self.length = length def place(self, layout, i, x, y): raise NotImplementedError('abstract') def delete(self, layout): raise NotImplementedError('abstract') def get_position_in_box(self, x): raise NotImplementedError('abstract') def get_point_in_box(self, position): raise NotImplementedError('abstract') class _GlyphBox(_AbstractBox): def __init__(self, owner, font, glyphs, advance): '''Create a run of glyphs sharing the same texture. :Parameters: `owner` : `pyglet.image.Texture` Texture of all glyphs in this run. `font` : `pyglet.font.base.Font` Font of all glyphs in this run. `glyphs` : list of (int, `pyglet.font.base.Glyph`) Pairs of ``(kern, glyph)``, where ``kern`` gives horizontal displacement of the glyph in pixels (typically 0). `advance` : int Width of glyph run; must correspond to the sum of advances and kerns in the glyph list. ''' super(_GlyphBox, self).__init__( font.ascent, font.descent, advance, len(glyphs)) assert owner self.owner = owner self.font = font self.glyphs = glyphs self.advance = advance def place(self, layout, i, x, y, context): assert self.glyphs try: group = layout.groups[self.owner] except KeyError: group = layout.groups[self.owner] = \ TextLayoutTextureGroup(self.owner, layout.foreground_group) n_glyphs = self.length vertices = [] tex_coords = [] x1 = x for start, end, baseline in context.baseline_iter.ranges(i, i+n_glyphs): baseline = layout._parse_distance(baseline) assert len(self.glyphs[start - i:end - i]) == end - start for kern, glyph in self.glyphs[start - i:end - i]: x1 += kern v0, v1, v2, v3 = glyph.vertices v0 += x1 v2 += x1 v1 += y + baseline v3 += y + baseline vertices.extend([v0, v1, v2, v1, v2, v3, v0, v3]) t = glyph.tex_coords tex_coords.extend(t) x1 += glyph.advance # Text color colors = [] for start, end, color in context.colors_iter.ranges(i, i+n_glyphs): if color is None: color = (0, 0, 0, 255) colors.extend(color * ((end - start) * 4)) list = layout.batch.add(n_glyphs * 4, GL_QUADS, group, ('v2f/dynamic', vertices), ('t3f/dynamic', tex_coords), ('c4B/dynamic', colors)) context.add_list(list) # Decoration (background color and underline) # # Should iterate over baseline too, but in practice any sensible # change in baseline will correspond with a change in font size, # and thus glyph run as well. So we cheat and just use whatever # baseline was seen last. background_vertices = [] background_colors = [] underline_vertices = [] underline_colors = [] y1 = y + self.descent + baseline y2 = y + self.ascent + baseline x1 = x for start, end, decoration in \ context.decoration_iter.ranges(i, i+n_glyphs): bg, underline = decoration x2 = x1 for kern, glyph in self.glyphs[start - i:end - i]: x2 += glyph.advance + kern if bg is not None: background_vertices.extend( [x1, y1, x2, y1, x2, y2, x1, y2]) background_colors.extend(bg * 4) if underline is not None: underline_vertices.extend( [x1, y + baseline - 2, x2, y + baseline - 2]) underline_colors.extend(underline * 2) x1 = x2 if background_vertices: background_list = layout.batch.add( len(background_vertices) // 2, GL_QUADS, layout.background_group, ('v2f/dynamic', background_vertices), ('c4B/dynamic', background_colors)) context.add_list(background_list) if underline_vertices: underline_list = layout.batch.add( len(underline_vertices) // 2, GL_LINES, layout.foreground_decoration_group, ('v2f/dynamic', underline_vertices), ('c4B/dynamic', underline_colors)) context.add_list(underline_list) def delete(self, layout): pass def get_point_in_box(self, position): x = 0 for (kern, glyph) in self.glyphs: if position == 0: break position -= 1 x += glyph.advance + kern return x def get_position_in_box(self, x): position = 0 last_glyph_x = 0 for kern, glyph in self.glyphs: last_glyph_x += kern if last_glyph_x + glyph.advance / 2 > x: return position position += 1 last_glyph_x += glyph.advance return position def __repr__(self): return '_GlyphBox(%r)' % self.glyphs class _InlineElementBox(_AbstractBox): def __init__(self, element): '''Create a glyph run holding a single element. ''' super(_InlineElementBox, self).__init__( element.ascent, element.descent, element.advance, 1) self.element = element self.placed = False def place(self, layout, i, x, y, context): self.element.place(layout, x, y) self.placed = True context.add_box(self) def delete(self, layout): # font == element if self.placed: self.element.remove(layout) self.placed = False def get_point_in_box(self, position): if position == 0: return 0 else: return self.advance def get_position_in_box(self, x): if x < self.advance / 2: return 0 else: return 1 def __repr__(self): return '_InlineElementBox(%r)' % self.element class _InvalidRange(object): def __init__(self): self.start = sys.maxint self.end = 0 def insert(self, start, length): if self.start >= start: self.start += length if self.end >= start: self.end += length self.invalidate(start, start + length) def delete(self, start, end): if self.start > end: self.start -= end - start elif self.start > start: self.start = start if self.end > end: self.end -= end - start elif self.end > start: self.end = start def invalidate(self, start, end): if end <= start: return self.start = min(self.start, start) self.end = max(self.end, end) def validate(self): start, end = self.start, self.end self.start = sys.maxint self.end = 0 return start, end def is_invalid(self): return self.end > self.start # Text group hierarchy # # top_group [Scrollable]TextLayoutGroup(Group) # background_group OrderedGroup(0) # foreground_group TextLayoutForegroundGroup(OrderedGroup(1)) # [font textures] TextLayoutTextureGroup(Group) # [...] TextLayoutTextureGroup(Group) # foreground_decoration_group # TextLayoutForegroundDecorationGroup(OrderedGroup(2)) class TextLayoutGroup(graphics.Group): '''Top-level rendering group for `TextLayout`. The blend function is set for glyph rendering (``GL_SRC_ALPHA`` / ``GL_ONE_MINUS_SRC_ALPHA``). The group is shared by all `TextLayout` instances as it has no internal state. ''' def set_state(self): glPushAttrib(GL_ENABLE_BIT | GL_CURRENT_BIT) glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) def unset_state(self): glPopAttrib() class ScrollableTextLayoutGroup(graphics.Group): '''Top-level rendering group for `ScrollableTextLayout`. The group maintains internal state for setting the clipping planes and view transform for scrolling. Because the group has internal state specific to the text layout, the group is never shared. ''' _clip_x = 0 _clip_y = 0 _clip_width = 0 _clip_height = 0 _view_x = 0 _view_y = 0 translate_x = 0 # x - view_x translate_y = 0 # y - view_y def set_state(self): glPushAttrib(GL_ENABLE_BIT | GL_TRANSFORM_BIT | GL_CURRENT_BIT) glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) # Disable clipping planes to check culling. glEnable(GL_CLIP_PLANE0) glEnable(GL_CLIP_PLANE1) glEnable(GL_CLIP_PLANE2) glEnable(GL_CLIP_PLANE3) # Left glClipPlane(GL_CLIP_PLANE0, (GLdouble * 4)( 1, 0, 0, -(self._clip_x - 1))) # Top glClipPlane(GL_CLIP_PLANE1, (GLdouble * 4)( 0, -1, 0, self._clip_y)) # Right glClipPlane(GL_CLIP_PLANE2, (GLdouble * 4)( -1, 0, 0, self._clip_x + self._clip_width + 1)) # Bottom glClipPlane(GL_CLIP_PLANE3, (GLdouble * 4)( 0, 1, 0, -(self._clip_y - self._clip_height))) glTranslatef(self.translate_x, self.translate_y, 0) def unset_state(self): glTranslatef(-self.translate_x, -self.translate_y, 0) glPopAttrib() def _set_top(self, top): self._clip_y = top self.translate_y = self._clip_y - self._view_y top = property(lambda self: self._clip_y, _set_top, doc='''Top edge of the text layout (measured from the bottom of the graphics viewport). :type: int ''') def _set_left(self, left): self._clip_x = left self.translate_x = self._clip_x - self._view_x left = property(lambda self: self._clip_x, _set_left, doc='''Left edge of the text layout. :type: int ''') def _set_width(self, width): self._clip_width = width width = property(lambda self: self._clip_width, _set_width, doc='''Width of the text layout. :type: int ''') def _set_height(self, height): self._clip_height = height height = property(lambda self: self._height, _set_height, doc='''Height of the text layout. :type: int ''') def _set_view_x(self, view_x): self._view_x = view_x self.translate_x = self._clip_x - self._view_x view_x = property(lambda self: self._view_x, _set_view_x, doc='''Horizontal scroll offset. :type: int ''') def _set_view_y(self, view_y): self._view_y = view_y self.translate_y = self._clip_y - self._view_y view_y = property(lambda self: self._view_y, _set_view_y, doc='''Vertical scroll offset. :type: int ''') def __eq__(self, other): return self is other def __hash__(self): return id(self) class TextLayoutForegroundGroup(graphics.OrderedGroup): '''Rendering group for foreground elements (glyphs) in all text layouts. The group enables ``GL_TEXTURE_2D``. ''' def set_state(self): glEnable(GL_TEXTURE_2D) # unset_state not needed, as parent group will pop enable bit class TextLayoutForegroundDecorationGroup(graphics.OrderedGroup): '''Rendering group for decorative elements (e.g., glyph underlines) in all text layouts. The group disables ``GL_TEXTURE_2D``. ''' def set_state(self): glDisable(GL_TEXTURE_2D) # unset_state not needed, as parent group will pop enable bit class TextLayoutTextureGroup(graphics.Group): '''Rendering group for a glyph texture in all text layouts. The group binds its texture to ``GL_TEXTURE_2D``. The group is shared between all other text layout uses of the same texture. ''' def __init__(self, texture, parent): assert texture.target == GL_TEXTURE_2D super(TextLayoutTextureGroup, self).__init__(parent) self.texture = texture def set_state(self): glBindTexture(GL_TEXTURE_2D, self.texture.id) # unset_state not needed, as next group will either bind a new texture or # pop enable bit. def __hash__(self): return hash((self.texture.id, self.parent)) def __eq__(self, other): return (self.__class__ is other.__class__ and self.texture.id == other.texture.id and self.parent is other.parent) def __repr__(self): return '%s(%d, %r)' % (self.__class__.__name__, self.texture.id, self.parent) class TextLayout(object): '''Lay out and display documents. This class is intended for displaying documents that do not change regularly -- any change will cost some time to lay out the complete document again and regenerate all vertex lists. The benefit of this class is that texture state is shared between all layouts of this class. The time to draw one `TextLayout` may be roughly the same as the time to draw one `IncrementalTextLayout`; but drawing ten `TextLayout` objects in one batch is much faster than drawing ten incremental or scrollable text layouts. `Label` and `HTMLLabel` provide a convenient interface to this class. :Ivariables: `content_width` : int Calculated width of the text in the layout. This may overflow the desired width if word-wrapping failed. `content_height` : int Calculated height of the text in the layout. `top_group` : `Group` Top-level rendering group. `background_group` : `Group` Rendering group for background color. `foreground_group` : `Group` Rendering group for glyphs. `foreground_decoration_group` : `Group` Rendering group for glyph underlines. ''' _document = None _vertex_lists = () _boxes = () top_group = TextLayoutGroup() background_group = graphics.OrderedGroup(0, top_group) foreground_group = TextLayoutForegroundGroup(1, top_group) foreground_decoration_group = \ TextLayoutForegroundDecorationGroup(2, top_group) _update_enabled = True _own_batch = False _origin_layout = False # Lay out relative to origin? Otherwise to box. def __init__(self, document, width=None, height=None, multiline=False, dpi=None, batch=None, group=None): '''Create a text layout. :Parameters: `document` : `AbstractDocument` Document to display. `width` : int Width of the layout in pixels, or None `height` : int Height of the layout in pixels, or None `multiline` : bool If False, newline and paragraph characters are ignored, and text is not word-wrapped. `dpi` : float Font resolution; defaults to 96. `batch` : `Batch` Optional graphics batch to add this layout to. `group` : `Group` Optional rendering group to parent all groups this text layout uses. Note that layouts with different rendered simultaneously in a batch. ''' self.content_width = 0 self.content_height = 0 self.groups = {} self._init_groups(group) if batch is None: batch = graphics.Batch() self._own_batch = True self.batch = batch if width is not None: self._width = width if height is not None: self._height = height if multiline: assert not multiline or width, 'Must specify width with multiline' self._multiline = multiline if dpi is None: dpi = 96 self._dpi = dpi self.document = document def _parse_distance(self, distance): if distance is None: return None return _parse_distance(distance, self._dpi) def begin_update(self): '''Indicate that a number of changes to the layout or document are about to occur. Changes to the layout or document between calls to `begin_update` and `end_update` do not trigger any costly relayout of text. Relayout of all changes is performed when `end_update` is called. Note that between the `begin_update` and `end_update` calls, values such as `content_width` and `content_height` are undefined (i.e., they may or may not be updated to reflect the latest changes). ''' self._update_enabled = False def end_update(self): '''Perform pending layout changes since `begin_update`. See `begin_update`. ''' self._update_enabled = True self._update() dpi = property(lambda self: self._dpi, doc='''Get DPI used by this layout. Read-only. :type: float ''') def delete(self): '''Remove this layout from its batch. ''' for vertex_list in self._vertex_lists: vertex_list.delete() self._vertex_lists = [] for box in self._boxes: box.delete(self) def draw(self): '''Draw this text layout. Note that this method performs very badly if a batch was supplied to the constructor. If you add this layout to a batch, you should ideally use only the batch's draw method. ''' if self._own_batch: self.batch.draw() else: self.batch.draw_subset(self._vertex_lists) def _init_groups(self, group): if group: self.top_group = TextLayoutGroup(group) self.background_group = graphics.OrderedGroup(0, self.top_group) self.foreground_group = TextLayoutForegroundGroup(1, self.top_group) self.foreground_decoration_group = \ TextLayoutForegroundDecorationGroup(2, self.top_group) # Otherwise class groups are (re)used. def _get_document(self): return self._document def _set_document(self, document): if self._document: self._document.remove_handlers(self) self._uninit_document() document.push_handlers(self) self._document = document self._init_document() document = property(_get_document, _set_document, '''Document to display. For `IncrementalTextLayout` it is far more efficient to modify a document in-place than to replace the document instance on the layout. :type: `AbstractDocument` ''') def _get_lines(self): len_text = len(self._document.text) glyphs = self._get_glyphs() owner_runs = runlist.RunList(len_text, None) self._get_owner_runs(owner_runs, glyphs, 0, len_text) lines = [line for line in self._flow_glyphs(glyphs, owner_runs, 0, len_text)] self.content_width = 0 self._flow_lines(lines, 0, len(lines)) return lines def _update(self): if not self._update_enabled: return for _vertex_list in self._vertex_lists: _vertex_list.delete() for box in self._boxes: box.delete(self) self._vertex_lists = [] self._boxes = [] self.groups.clear() if not self._document or not self._document.text: return lines = self._get_lines() colors_iter = self._document.get_style_runs('color') background_iter = self._document.get_style_runs('background_color') if self._origin_layout: left = top = 0 else: left = self._get_left() top = self._get_top(lines) context = _StaticLayoutContext(self, self._document, colors_iter, background_iter) for line in lines: self._create_vertex_lists(left + line.x, top + line.y, line.start, line.boxes, context) def _get_left(self): if self._multiline: width = self._width else: width = self.content_width if self._anchor_x == 'left': return self._x elif self._anchor_x == 'center': return self._x - width // 2 elif self._anchor_x == 'right': return self._x - width else: assert False, 'Invalid anchor_x' def _get_top(self, lines): if self._height is None: height = self.content_height offset = 0 else: height = self._height if self._content_valign == 'top': offset = 0 elif self._content_valign == 'bottom': offset = max(0, self._height - self.content_height) elif self._content_valign == 'center': offset = max(0, self._height - self.content_height) // 2 else: assert False, 'Invalid content_valign' if self._anchor_y == 'top': return self._y - offset elif self._anchor_y == 'baseline': return self._y + lines[0].ascent - offset elif self._anchor_y == 'bottom': return self._y + height - offset elif self._anchor_y == 'center': if len(lines) == 1 and self._height is None: # This "looks" more centered than considering all of the # descent. line = lines[0] return self._y + line.ascent // 2 - line.descent // 4 else: return self._y + height // 2 - offset else: assert False, 'Invalid anchor_y' def _init_document(self): self._update() def _uninit_document(self): pass def on_insert_text(self, start, text): '''Event handler for `AbstractDocument.on_insert_text`. The event handler is bound by the text layout; there is no need for applications to interact with this method. ''' self._init_document() def on_delete_text(self, start, end): '''Event handler for `AbstractDocument.on_delete_text`. The event handler is bound by the text layout; there is no need for applications to interact with this method. ''' self._init_document() def on_style_text(self, start, end, attributes): '''Event handler for `AbstractDocument.on_style_text`. The event handler is bound by the text layout; there is no need for applications to interact with this method. ''' self._init_document() def _get_glyphs(self): glyphs = [] runs = runlist.ZipRunIterator(( self._document.get_font_runs(dpi=self._dpi), self._document.get_element_runs())) text = self._document.text for start, end, (font, element) in runs.ranges(0, len(text)): if element: glyphs.append(_InlineElementBox(element)) else: glyphs.extend(font.get_glyphs(text[start:end])) return glyphs def _get_owner_runs(self, owner_runs, glyphs, start, end): owner = glyphs[start].owner run_start = start # TODO avoid glyph slice on non-incremental for i, glyph in enumerate(glyphs[start:end]): if owner != glyph.owner: owner_runs.set_run(run_start, i + start, owner) owner = glyph.owner run_start = i + start owner_runs.set_run(run_start, end, owner) def _flow_glyphs(self, glyphs, owner_runs, start, end): # TODO change flow generator on self, avoiding this conditional. if not self._multiline: for line in self._flow_glyphs_single_line(glyphs, owner_runs, start, end): yield line else: for line in self._flow_glyphs_wrap(glyphs, owner_runs, start, end): yield line def _flow_glyphs_wrap(self, glyphs, owner_runs, start, end): '''Word-wrap styled text into lines of fixed width. Fits `glyphs` in range `start` to `end` into `_Line` s which are then yielded. ''' owner_iterator = owner_runs.get_run_iterator().ranges(start, end) font_iterator = self._document.get_font_runs(dpi=self._dpi) align_iterator = runlist.FilteredRunIterator( self._document.get_style_runs('align'), lambda value: value in ('left', 'right', 'center'), 'left') if self._width is None: wrap_iterator = runlist.ConstRunIterator( len(self.document.text), False) else: wrap_iterator = runlist.FilteredRunIterator( self._document.get_style_runs('wrap'), lambda value: value in (True, False), True) margin_left_iterator = runlist.FilteredRunIterator( self._document.get_style_runs('margin_left'), lambda value: value is not None, 0) margin_right_iterator = runlist.FilteredRunIterator( self._document.get_style_runs('margin_right'), lambda value: value is not None, 0) indent_iterator = runlist.FilteredRunIterator( self._document.get_style_runs('indent'), lambda value: value is not None, 0) kerning_iterator = runlist.FilteredRunIterator( self._document.get_style_runs('kerning'), lambda value: value is not None, 0) tab_stops_iterator = runlist.FilteredRunIterator( self._document.get_style_runs('tab_stops'), lambda value: value is not None, []) line = _Line(start) line.align = align_iterator[start] line.margin_left = self._parse_distance(margin_left_iterator[start]) line.margin_right = self._parse_distance(margin_right_iterator[start]) if start == 0 or self.document.text[start - 1] in u'\n\u2029': line.paragraph_begin = True line.margin_left += self._parse_distance(indent_iterator[start]) wrap = wrap_iterator[start] if self._width is None: width = None else: width = self._width - line.margin_left - line.margin_right # Current right-most x position in line being laid out. x = 0 # Boxes accumulated but not yet committed to a line. run_accum = [] run_accum_width = 0 # Amount of whitespace accumulated at end of line eol_ws = 0 # Iterate over glyph owners (texture states); these form GlyphBoxes, # but broken into lines. font = None for start, end, owner in owner_iterator: font = font_iterator[start] # Glyphs accumulated in this owner but not yet committed to a # line. owner_accum = [] owner_accum_width = 0 # Glyphs accumulated in this owner AND also committed to the # current line (some whitespace has followed all of the committed # glyphs). owner_accum_commit = [] owner_accum_commit_width = 0 # Ignore kerning of first glyph on each line nokern = True # Current glyph index index = start # Iterate over glyphs in this owner run. `text` is the # corresponding character data for the glyph, and is used to find # whitespace and newlines. for (text, glyph) in zip(self.document.text[start:end], glyphs[start:end]): if nokern: kern = 0 nokern = False else: kern = self._parse_distance(kerning_iterator[index]) if text in u'\u0020\u200b\t': # Whitespace: commit pending runs to this line. for run in run_accum: line.add_box(run) run_accum = [] run_accum_width = 0 if text == '\t': # Fix up kern for this glyph to align to the next tab # stop for tab_stop in tab_stops_iterator[index]: tab_stop = self._parse_distance(tab_stop) if tab_stop > x + line.margin_left: break else: # No more tab stops, tab to 100 pixels tab = 50. tab_stop = \ (((x + line.margin_left) // tab) + 1) * tab kern = int(tab_stop - x - line.margin_left - glyph.advance) owner_accum.append((kern, glyph)) owner_accum_commit.extend(owner_accum) owner_accum_commit_width += owner_accum_width + \ glyph.advance + kern eol_ws += glyph.advance + kern owner_accum = [] owner_accum_width = 0 x += glyph.advance + kern index += 1 # The index at which the next line will begin (the # current index, because this is the current best # breakpoint). next_start = index else: new_paragraph = text in u'\n\u2029' new_line = (text == u'\u2028') or new_paragraph if (wrap and x + kern + glyph.advance >= width) or new_line: # Either the pending runs have overflowed the allowed # line width or a newline was encountered. Either # way, the current line must be flushed. if new_line: # Forced newline. Commit everything pending # without exception. for run in run_accum: line.add_box(run) run_accum = [] run_accum_width = 0 owner_accum_commit.extend(owner_accum) owner_accum_commit_width += owner_accum_width owner_accum = [] owner_accum_width = 0 line.length += 1 next_start = index + 1 # Create the _GlyphBox for the committed glyphs in the # current owner. if owner_accum_commit: line.add_box( _GlyphBox(owner, font, owner_accum_commit, owner_accum_commit_width)) owner_accum_commit = [] owner_accum_commit_width = 0 if new_line and not line.boxes: # Empty line: give it the current font's default # line-height. line.ascent = font.ascent line.descent = font.descent # Flush the line, unless nothing got committed, in # which case it's a really long string of glyphs # without any breakpoints (in which case it will be # flushed at the earliest breakpoint, not before # something is committed). if line.boxes or new_line: # Trim line width of whitespace on right-side. line.width -= eol_ws if new_paragraph: line.paragraph_end = True yield line line = _Line(next_start) line.align = align_iterator[next_start] line.margin_left = self._parse_distance( margin_left_iterator[next_start]) line.margin_right = self._parse_distance( margin_right_iterator[next_start]) if new_paragraph: line.paragraph_begin = True # Remove kern from first glyph of line if run_accum: k, g = run_accum[0].glyphs[0] run_accum[0].glyphs[0] = (0, g) run_accum_width -= k elif owner_accum: k, g = owner_accum[0] owner_accum[0] = (0, g) owner_accum_width -= k else: nokern = True x = run_accum_width + owner_accum_width width = (self._width - line.margin_left - line.margin_right) if isinstance(glyph, _AbstractBox): # Glyph is already in a box. XXX Ignore kern? run_accum.append(glyph) run_accum_width += glyph.advance x += glyph.advance elif new_paragraph: # New paragraph started, update wrap style wrap = wrap_iterator[next_start] line.margin_left += \ self._parse_distance(indent_iterator[next_start]) if width is not None: width = (self._width - line.margin_left - line.margin_right) elif not new_line: # If the glyph was any non-whitespace, non-newline # character, add it to the pending run. owner_accum.append((kern, glyph)) owner_accum_width += glyph.advance + kern x += glyph.advance + kern index += 1 eol_ws = 0 # The owner run is finished; create GlyphBoxes for the committed # and pending glyphs. if owner_accum_commit: line.add_box(_GlyphBox(owner, font, owner_accum_commit, owner_accum_commit_width)) if owner_accum: run_accum.append(_GlyphBox(owner, font, owner_accum, owner_accum_width)) run_accum_width += owner_accum_width # All glyphs have been processed: commit everything pending and flush # the final line. for run in run_accum: line.add_box(run) if not line.boxes: # Empty line gets font's line-height if font is None: font = self._document.get_font(0, dpi=self._dpi) line.ascent = font.ascent line.descent = font.descent yield line def _flow_glyphs_single_line(self, glyphs, owner_runs, start, end): owner_iterator = owner_runs.get_run_iterator().ranges(start, end) font_iterator = self.document.get_font_runs(dpi=self._dpi) kern_iterator = runlist.FilteredRunIterator( self.document.get_style_runs('kerning'), lambda value: value is not None, 0) line = _Line(start) font = font_iterator[0] for start, end, owner in owner_iterator: font = font_iterator[start] width = 0 owner_glyphs = [] for kern_start, kern_end, kern in kern_iterator.ranges(start, end): gs = glyphs[kern_start:kern_end] width += sum([g.advance for g in gs]) width += kern * (kern_end - kern_start) owner_glyphs.extend(zip([kern] * (kern_end - kern_start), gs)) if owner is None: # Assume glyphs are already boxes. for kern, glyph in owner_glyphs: line.add_box(glyph) else: line.add_box(_GlyphBox(owner, font, owner_glyphs, width)) if not line.boxes: line.ascent = font.ascent line.descent = font.descent line.paragraph_begin = line.paragraph_end = True yield line def _flow_lines(self, lines, start, end): margin_top_iterator = runlist.FilteredRunIterator( self._document.get_style_runs('margin_top'), lambda value: value is not None, 0) margin_bottom_iterator = runlist.FilteredRunIterator( self._document.get_style_runs('margin_bottom'), lambda value: value is not None, 0) line_spacing_iterator = self._document.get_style_runs('line_spacing') leading_iterator = runlist.FilteredRunIterator( self._document.get_style_runs('leading'), lambda value: value is not None, 0) if start == 0: y = 0 else: line = lines[start - 1] line_spacing = \ self._parse_distance(line_spacing_iterator[line.start]) leading = \ self._parse_distance(leading_iterator[line.start]) y = line.y if line_spacing is None: y += line.descent if line.paragraph_end: y -= self._parse_distance(margin_bottom_iterator[line.start]) line_index = start for line in lines[start:]: if line.paragraph_begin: y -= self._parse_distance(margin_top_iterator[line.start]) line_spacing = \ self._parse_distance(line_spacing_iterator[line.start]) leading = self._parse_distance(leading_iterator[line.start]) else: y -= leading if line_spacing is None: y -= line.ascent else: y -= line_spacing if line.align == 'left' or line.width > self.width: line.x = line.margin_left elif line.align == 'center': line.x = (self.width - line.margin_left - line.margin_right - line.width) // 2 + line.margin_left elif line.align == 'right': line.x = self.width - line.margin_right - line.width self.content_width = max(self.content_width, line.width + line.margin_left) if line.y == y and line_index >= end: # Early exit: all invalidated lines have been reflowed and the # next line has no change (therefore subsequent lines do not # need to be changed). break line.y = y if line_spacing is None: y += line.descent if line.paragraph_end: y -= self._parse_distance(margin_bottom_iterator[line.start]) line_index += 1 else: self.content_height = -y return line_index def _create_vertex_lists(self, x, y, i, boxes, context): for box in boxes: box.place(self, i, x, y, context) x += box.advance i += box.length _x = 0 def _set_x(self, x): if self._boxes: self._x = x self._update() else: dx = x - self._x l_dx = lambda x: x + dx for vertex_list in self._vertex_lists: vertices = vertex_list.vertices[:] vertices[::2] = map(l_dx, vertices[::2]) vertex_list.vertices[:] = vertices self._x = x def _get_x(self): return self._x x = property(_get_x, _set_x, doc='''X coordinate of the layout. See also `anchor_x`. :type: int ''') _y = 0 def _set_y(self, y): if self._boxes: self._y = y self._update() else: dy = y - self._y l_dy = lambda y: y + dy for vertex_list in self._vertex_lists: vertices = vertex_list.vertices[:] vertices[1::2] = map(l_dy, vertices[1::2]) vertex_list.vertices[:] = vertices self._y = y def _get_y(self): return self._y y = property(_get_y, _set_y, doc='''Y coordinate of the layout. See also `anchor_y`. :type: int ''') _width = None def _set_width(self, width): self._width = width self._update() def _get_width(self): return self._width width = property(_get_width, _set_width, doc='''Width of the layout. This property has no effect if `multiline` is False. :type: int ''') _height = None def _set_height(self, height): self._height = height self._update() def _get_height(self): return self._height height = property(_get_height, _set_height, doc='''Height of the layout. :type: int ''') _multiline = False def _set_multiline(self, multiline): self._multiline = multiline self._update() def _get_multiline(self): return self._multiline multiline = property(_get_multiline, _set_multiline, doc='''Set if multiline layout is enabled. If multiline is False, newline and paragraph characters are ignored and text is not word-wrapped. :type: bool ''') _anchor_x = 'left' def _set_anchor_x(self, anchor_x): self._anchor_x = anchor_x self._update() def _get_anchor_x(self): return self._anchor_x anchor_x = property(_get_anchor_x, _set_anchor_x, doc='''Horizontal anchor alignment. This property determines the meaning of the `x` coordinate. It is one of the enumerants: ``"left"`` (default) The X coordinate gives the position of the left edge of the layout. ``"center"`` The X coordinate gives the position of the center of the layout. ``"right"`` The X coordinate gives the position of the right edge of the layout. For the purposes of calculating the position resulting from this alignment, the width of the layout is taken to be `width` if `multiline` is True, otherwise `content_width`. :type: str ''') _anchor_y = 'bottom' def _set_anchor_y(self, anchor_y): self._anchor_y = anchor_y self._update() def _get_anchor_y(self): return self._anchor_y anchor_y = property(_get_anchor_y, _set_anchor_y, doc='''Vertical anchor alignment. This property determines the meaning of the `y` coordinate. It is one of the enumerants: ``"top"`` The Y coordinate gives the position of the top edge of the layout. ``"center"`` The Y coordinate gives the position of the center of the layout. ``"baseline"`` The Y coordinate gives the position of the baseline of the first line of text in the layout. ``"bottom"`` (default) The Y coordinate gives the position of the bottom edge of the layout. For the purposes of calculating the position resulting from this alignment, the height of the layout is taken to be the smaller of `height` and `content_height`. See also `content_valign`. :type: str ''') _content_valign = 'top' def _set_content_valign(self, content_valign): self._content_valign = content_valign self._update() def _get_content_valign(self): return self._content_valign content_valign = property(_get_content_valign, _set_content_valign, doc='''Vertical alignment of content within larger layout box. This property determines how content is positioned within the layout box when ``content_height`` is less than ``height``. It is one of the enumerants: ``top`` (default) Content is aligned to the top of the layout box. ``center`` Content is centered vertically within the layout box. ``bottom`` Content is aligned to the bottom of the layout box. This property has no effect when ``content_height`` is greater than ``height`` (in which case the content is aligned to the top) or when ``height`` is ``None`` (in which case there is no vertical layout box dimension). :type: str ''') class ScrollableTextLayout(TextLayout): '''Display text in a scrollable viewport. This class does not display a scrollbar or handle scroll events; it merely clips the text that would be drawn in `TextLayout` to the bounds of the layout given by `x`, `y`, `width` and `height`; and offsets the text by a scroll offset. Use `view_x` and `view_y` to scroll the text within the viewport. ''' _origin_layout = True def __init__(self, document, width, height, multiline=False, dpi=None, batch=None, group=None): super(ScrollableTextLayout, self).__init__( document, width, height, multiline, dpi, batch, group) self.top_group.width = self._width self.top_group.height = self._height def _init_groups(self, group): # Scrollable layout never shares group becauase of translation. self.top_group = ScrollableTextLayoutGroup(group) self.background_group = graphics.OrderedGroup(0, self.top_group) self.foreground_group = TextLayoutForegroundGroup(1, self.top_group) self.foreground_decoration_group = \ TextLayoutForegroundDecorationGroup(2, self.top_group) def _set_x(self, x): self._x = x self.top_group.left = self._get_left() def _get_x(self): return self._x x = property(_get_x, _set_x) def _set_y(self, y): self._y = y self.top_group.top = self._get_top(self._get_lines()) def _get_y(self): return self._y y = property(_get_y, _set_y) def _set_width(self, width): super(ScrollableTextLayout, self)._set_width(width) self.top_group.left = self._get_left() self.top_group.width = self._width def _get_width(self): return self._width width = property(_get_width, _set_width) def _set_height(self, height): super(ScrollableTextLayout, self)._set_height(height) self.top_group.top = self._get_top(self._get_lines()) self.top_group.height = self._height def _get_height(self): return self._height height = property(_get_height, _set_height) def _set_anchor_x(self, anchor_x): self._anchor_x = anchor_x self.top_group.left = self._get_left() def _get_anchor_x(self): return self._anchor_x anchor_x = property(_get_anchor_x, _set_anchor_x) def _set_anchor_y(self, anchor_y): self._anchor_y = anchor_y self.top_group.top = self._get_top(self._get_lines()) def _get_anchor_y(self): return self._anchor_y anchor_y = property(_get_anchor_y, _set_anchor_y) # Offset of content within viewport def _set_view_x(self, view_x): view_x = max(0, min(self.content_width - self.width, view_x)) self.top_group.view_x = view_x def _get_view_x(self): return self.top_group.view_x view_x = property(_get_view_x, _set_view_x, doc='''Horizontal scroll offset. The initial value is 0, and the left edge of the text will touch the left side of the layout bounds. A positive value causes the text to "scroll" to the right. Values are automatically clipped into the range ``[0, content_width - width]`` :type: int ''') def _set_view_y(self, view_y): # view_y must be negative. view_y = min(0, max(self.height - self.content_height, view_y)) self.top_group.view_y = view_y def _get_view_y(self): return self.top_group.view_y view_y = property(_get_view_y, _set_view_y, doc='''Vertical scroll offset. The initial value is 0, and the top of the text will touch the top of the layout bounds (unless the content height is less than the layout height, in which case `content_valign` is used). A negative value causes the text to "scroll" upwards. Values outside of the range ``[height - content_height, 0]`` are automatically clipped in range. :type: int ''') class IncrementalTextLayout(ScrollableTextLayout, event.EventDispatcher): '''Displayed text suitable for interactive editing and/or scrolling large documents. Unlike `TextLayout` and `ScrollableTextLayout`, this class generates vertex lists only for lines of text that are visible. As the document is scrolled, vertex lists are deleted and created as appropriate to keep video memory usage to a minimum and improve rendering speed. Changes to the document are quickly reflected in this layout, as only the affected line(s) are reflowed. Use `begin_update` and `end_update` to further reduce the amount of processing required. The layout can also display a text selection (text with a different background color). The `Caret` class implements a visible text cursor and provides event handlers for scrolling, selecting and editing text in an incremental text layout. ''' _selection_start = 0 _selection_end = 0 _selection_color = [255, 255, 255, 255] _selection_background_color = [46, 106, 197, 255] def __init__(self, document, width, height, multiline=False, dpi=None, batch=None, group=None): event.EventDispatcher.__init__(self) self.glyphs = [] self.lines = [] self.invalid_glyphs = _InvalidRange() self.invalid_flow = _InvalidRange() self.invalid_lines = _InvalidRange() self.invalid_style = _InvalidRange() self.invalid_vertex_lines = _InvalidRange() self.visible_lines = _InvalidRange() self.owner_runs = runlist.RunList(0, None) ScrollableTextLayout.__init__(self, document, width, height, multiline, dpi, batch, group) self.top_group.width = width self.top_group.left = self._get_left() self.top_group.height = height self.top_group.top = self._get_top(self._get_lines()) def _init_document(self): assert self._document, \ 'Cannot remove document from IncrementalTextLayout' self.on_insert_text(0, self._document.text) def _uninit_document(self): self.on_delete_text(0, len(self._document.text)) def _get_lines(self): return self.lines def delete(self): for line in self.lines: line.delete(self) self.batch = None if self._document: self._document.remove_handlers(self) self._document = None def on_insert_text(self, start, text): len_text = len(text) self.glyphs[start:start] = [None] * len_text self.invalid_glyphs.insert(start, len_text) self.invalid_flow.insert(start, len_text) self.invalid_style.insert(start, len_text) self.owner_runs.insert(start, len_text) for line in self.lines: if line.start >= start: line.start += len_text self._update() def on_delete_text(self, start, end): self.glyphs[start:end] = [] self.invalid_glyphs.delete(start, end) self.invalid_flow.delete(start, end) self.invalid_style.delete(start, end) self.owner_runs.delete(start, end) size = end - start for line in self.lines: if line.start > start: line.start = max(line.start - size, start) if start == 0: self.invalid_flow.invalidate(0, 1) else: self.invalid_flow.invalidate(start - 1, start) self._update() def on_style_text(self, start, end, attributes): if ('font_name' in attributes or 'font_size' in attributes or 'bold' in attributes or 'italic' in attributes): self.invalid_glyphs.invalidate(start, end) elif False: # Attributes that change flow self.invalid_flow.invalidate(start, end) elif ('color' in attributes or 'background_color' in attributes): self.invalid_style.invalidate(start, end) self._update() def _update(self): if not self._update_enabled: return trigger_update_event = (self.invalid_glyphs.is_invalid() or self.invalid_flow.is_invalid() or self.invalid_lines.is_invalid()) # Special care if there is no text: if not self.glyphs: for line in self.lines: line.delete(self) del self.lines[:] self.lines.append(_Line(0)) font = self.document.get_font(0, dpi=self._dpi) self.lines[0].ascent = font.ascent self.lines[0].descent = font.descent self.lines[0].paragraph_begin = self.lines[0].paragraph_end = True self.invalid_lines.invalidate(0, 1) self._update_glyphs() self._update_flow_glyphs() self._update_flow_lines() self._update_visible_lines() self._update_vertex_lists() self.top_group.top = self._get_top(self.lines) # Reclamp view_y in case content height has changed and reset top of # content. self.view_y = self.view_y self.top_group.top = self._get_top(self._get_lines()) if trigger_update_event: self.dispatch_event('on_layout_update') def _update_glyphs(self): invalid_start, invalid_end = self.invalid_glyphs.validate() if invalid_end - invalid_start <= 0: return # Find grapheme breaks and extend glyph range to encompass. text = self.document.text while invalid_start > 0: if _grapheme_break(text[invalid_start - 1], text[invalid_start]): break invalid_start -= 1 len_text = len(text) while invalid_end < len_text: if _grapheme_break(text[invalid_end - 1], text[invalid_end]): break invalid_end += 1 # Update glyphs runs = runlist.ZipRunIterator(( self._document.get_font_runs(dpi=self._dpi), self._document.get_element_runs())) for start, end, (font, element) in \ runs.ranges(invalid_start, invalid_end): if element: self.glyphs[start] = _InlineElementBox(element) else: text = self.document.text[start:end] self.glyphs[start:end] = font.get_glyphs(text) # Update owner runs self._get_owner_runs( self.owner_runs, self.glyphs, invalid_start, invalid_end) # Updated glyphs need flowing self.invalid_flow.invalidate(invalid_start, invalid_end) def _update_flow_glyphs(self): invalid_start, invalid_end = self.invalid_flow.validate() if invalid_end - invalid_start <= 0: return # Find first invalid line line_index = 0 for i, line in enumerate(self.lines): if line.start >= invalid_start: break line_index = i # Flow from previous line; fixes issue with adding a space into # overlong line (glyphs before space would then flow back onto # previous line). TODO Could optimise this by keeping track of where # the overlong lines are. line_index = max(0, line_index - 1) # (No need to find last invalid line; the update loop below stops # calling the flow generator when no more changes are necessary.) try: line = self.lines[line_index] invalid_start = min(invalid_start, line.start) line.delete(self) line = self.lines[line_index] = _Line(invalid_start) self.invalid_lines.invalidate(line_index, line_index + 1) except IndexError: line_index = 0 invalid_start = 0 line = _Line(0) self.lines.append(line) self.invalid_lines.insert(0, 1) content_width_invalid = False next_start = invalid_start for line in self._flow_glyphs(self.glyphs, self.owner_runs, invalid_start, len(self._document.text)): try: old_line = self.lines[line_index] old_line.delete(self) old_line_width = old_line.width + old_line.margin_left new_line_width = line.width + line.margin_left if (old_line_width == self.content_width and new_line_width < old_line_width): content_width_invalid = True self.lines[line_index] = line self.invalid_lines.invalidate(line_index, line_index + 1) except IndexError: self.lines.append(line) self.invalid_lines.insert(line_index, 1) next_start = line.start + line.length line_index += 1 try: next_line = self.lines[line_index] if next_start == next_line.start and next_start > invalid_end: # No more lines need to be modified, early exit. break except IndexError: pass else: # The last line is at line_index - 1, if there are any more lines # after that they are stale and need to be deleted. if next_start == len(self._document.text) and line_index > 0: for line in self.lines[line_index:]: old_line_width = old_line.width + old_line.margin_left if old_line_width == self.content_width: content_width_invalid = True line.delete(self) del self.lines[line_index:] if content_width_invalid: # Rescan all lines to look for the new maximum content width content_width = 0 for line in self.lines: content_width = max(line.width + line.margin_left, content_width) self.content_width = content_width def _update_flow_lines(self): invalid_start, invalid_end = self.invalid_lines.validate() if invalid_end - invalid_start <= 0: return invalid_end = self._flow_lines(self.lines, invalid_start, invalid_end) # Invalidate lines that need new vertex lists. self.invalid_vertex_lines.invalidate(invalid_start, invalid_end) def _update_visible_lines(self): start = sys.maxint end = 0 for i, line in enumerate(self.lines): if line.y + line.descent < self.view_y: start = min(start, i) if line.y + line.ascent > self.view_y - self.height: end = max(end, i) + 1 # Delete newly invisible lines for i in range(self.visible_lines.start, min(start, len(self.lines))): self.lines[i].delete(self) for i in range(end, min(self.visible_lines.end, len(self.lines))): self.lines[i].delete(self) # Invalidate newly visible lines self.invalid_vertex_lines.invalidate(start, self.visible_lines.start) self.invalid_vertex_lines.invalidate(self.visible_lines.end, end) self.visible_lines.start = start self.visible_lines.end = end def _update_vertex_lists(self): # Find lines that have been affected by style changes style_invalid_start, style_invalid_end = self.invalid_style.validate() self.invalid_vertex_lines.invalidate( self.get_line_from_position(style_invalid_start), self.get_line_from_position(style_invalid_end) + 1) invalid_start, invalid_end = self.invalid_vertex_lines.validate() if invalid_end - invalid_start <= 0: return colors_iter = self.document.get_style_runs('color') background_iter = self.document.get_style_runs('background_color') if self._selection_end - self._selection_start > 0: colors_iter = runlist.OverriddenRunIterator( colors_iter, self._selection_start, self._selection_end, self._selection_color) background_iter = runlist.OverriddenRunIterator( background_iter, self._selection_start, self._selection_end, self._selection_background_color) context = _IncrementalLayoutContext(self, self._document, colors_iter, background_iter) for line in self.lines[invalid_start:invalid_end]: line.delete(self) context.line = line y = line.y # Early out if not visible if y + line.descent > self.view_y: continue elif y + line.ascent < self.view_y - self.height: break self._create_vertex_lists(line.x, y, line.start, line.boxes, context) # Invalidate everything when width changes def _set_width(self, width): if width == self._width: return self.invalid_flow.invalidate(0, len(self.document.text)) super(IncrementalTextLayout, self)._set_width(width) def _get_width(self): return self._width width = property(_get_width, _set_width) # Recalculate visible lines when height changes def _set_height(self, height): if height == self._height: return super(IncrementalTextLayout, self)._set_height(height) if self._update_enabled: self._update_visible_lines() self._update_vertex_lists() def _get_height(self): return self._height height = property(_get_height, _set_height) def _set_multiline(self, multiline): self.invalid_flow.invalidate(0, len(self.document.text)) super(IncrementalTextLayout, self)._set_multiline(multiline) def _get_multiline(self): return self._multiline multiline = property(_get_multiline, _set_multiline) # Invalidate invisible/visible lines when y scrolls def _set_view_y(self, view_y): # view_y must be negative. super(IncrementalTextLayout, self)._set_view_y(view_y) self._update_visible_lines() self._update_vertex_lists() def _get_view_y(self): return self.top_group.view_y view_y = property(_get_view_y, _set_view_y) # Visible selection def set_selection(self, start, end): '''Set the text selection range. If ``start`` equals ``end`` no selection will be visible. :Parameters: `start` : int Starting character position of selection. `end` : int End of selection, exclusive. ''' start = max(0, start) end = min(end, len(self.document.text)) if start == self._selection_start and end == self._selection_end: return if end > self._selection_start and start < self._selection_end: # Overlapping, only invalidate difference self.invalid_style.invalidate(min(start, self._selection_start), max(start, self._selection_start)) self.invalid_style.invalidate(min(end, self._selection_end), max(end, self._selection_end)) else: # Non-overlapping, invalidate both ranges self.invalid_style.invalidate(self._selection_start, self._selection_end) self.invalid_style.invalidate(start, end) self._selection_start = start self._selection_end = end self._update() selection_start = property( lambda self: self._selection_start, lambda self, v: self.set_selection(v, self._selection_end), doc='''Starting position of the active selection. :see: `set_selection` :type: int ''') selection_end = property( lambda self: self._selection_end, lambda self, v: self.set_selection(self._selection_start, v), doc='''End position of the active selection (exclusive). :see: `set_selection` :type: int ''') def _get_selection_color(self): return self._selection_color def _set_selection_color(self, color): self._selection_color = color self.invalid_style.invalidate(self._selection_start, self._selection_end) selection_color = property(_get_selection_color, _set_selection_color, doc='''Text color of active selection. The color is an RGBA tuple with components in range [0, 255]. :type: (int, int, int, int) ''') def _get_selection_background_color(self): return self._selection_background_color def _set_selection_background_color(self, background_color): self._selection_background_color = background_color self.invalid_style.invalidate(self._selection_start, self._selection_end) selection_background_color = property(_get_selection_background_color, _set_selection_background_color, doc='''Background color of active selection. The color is an RGBA tuple with components in range [0, 255]. :type: (int, int, int, int) ''') # Coordinate translation def get_position_from_point(self, x, y): '''Get the closest document position to a point. :Parameters: `x` : int X coordinate `y` : int Y coordinate ''' line = self.get_line_from_point(x, y) return self.get_position_on_line(line, x) def get_point_from_position(self, position, line=None): '''Get the X, Y coordinates of a position in the document. The position that ends a line has an ambiguous point: it can be either the end of the line, or the beginning of the next line. You may optionally specify a line index to disambiguate the case. The resulting Y coordinate gives the baseline of the line. :Parameters: `position` : int Character position within document. `line` : int Line index. :rtype: (int, int) :return: (x, y) ''' if line is None: line = self.lines[0] for next_line in self.lines: if next_line.start > position: break line = next_line else: line = self.lines[line] x = line.x baseline = self._document.get_style('baseline', max(0, position - 1)) if baseline is None: baseline = 0 else: baseline = self._parse_distance(baseline) position -= line.start for box in line.boxes: if position - box.length <= 0: x += box.get_point_in_box(position) break position -= box.length x += box.advance return (x + self.top_group.translate_x, line.y + self.top_group.translate_y + baseline) def get_line_from_point(self, x, y): '''Get the closest line index to a point. :Parameters: `x` : int X coordinate. `y` : int Y coordinate. :rtype: int ''' x -= self.top_group.translate_x y -= self.top_group.translate_y line_index = 0 for line in self.lines: if y > line.y + line.descent: break line_index += 1 if line_index >= len(self.lines): line_index = len(self.lines) - 1 return line_index def get_point_from_line(self, line): '''Get the X, Y coordinates of a line index. :Parameters: `line` : int Line index. :rtype: (int, int) :return: (x, y) ''' line = self.lines[line] return (line.x + self.top_group.translate_x, line.y + self.top_group.translate_y) def get_line_from_position(self, position): '''Get the line index of a character position in the document. :Parameters: `position` : int Document position. :rtype: int ''' line = -1 for next_line in self.lines: if next_line.start > position: break line += 1 return line def get_position_from_line(self, line): '''Get the first document character position of a given line index. :Parameters: `line` : int Line index. :rtype: int ''' return self.lines[line].start def get_position_on_line(self, line, x): '''Get the closest document position for a given line index and X coordinate. :Parameters: `line` : int Line index. `x` : int X coordinate. :rtype: int ''' line = self.lines[line] x -= self.top_group.translate_x position = line.start last_glyph_x = line.x for box in line.boxes: if 0 <= x - last_glyph_x < box.advance: position += box.get_position_in_box(x - last_glyph_x) break last_glyph_x += box.advance position += box.length return position def get_line_count(self): '''Get the number of lines in the text layout. :rtype: int ''' return len(self.lines) def ensure_line_visible(self, line): '''Adjust `view_y` so that the line with the given index is visible. :Parameters: `line` : int Line index. ''' line = self.lines[line] y1 = line.y + line.ascent y2 = line.y + line.descent if y1 > self.view_y: self.view_y = y1 elif y2 < self.view_y - self.height: self.view_y = y2 + self.height def ensure_x_visible(self, x): '''Adjust `view_x` so that the given X coordinate is visible. The X coordinate is given relative to the current `view_x`. :Parameters: `x` : int X coordinate ''' if x <= self.view_x + 10: self.view_x = x - 10 elif x >= self.view_x + self.width: self.view_x = x - self.width + 10 elif (x >= self.view_x + self.width - 10 and self.content_width > self.width): self.view_x = x - self.width + 10 if _is_epydoc: def on_layout_update(self): '''Some or all of the layout text was reflowed. Text reflow is caused by document edits or changes to the layout's size. Changes to the layout's position or active selection, and certain document edits such as text color, do not cause a reflow. Handle this event to update the position of a graphical element that depends on the laid out position of a glyph or line. :event: ''' IncrementalTextLayout.register_event_type('on_layout_update') pyglet-1.1.4/pyglet/text/runlist.py0000600013464101346420000003300611317241561015553 0ustar yohyoh# ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- '''Run list encoding utilities. :since: pyglet 1.1 ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' class _Run(object): def __init__(self, value, count): self.value = value self.count = count def __repr__(self): return 'Run(%r, %d)' % (self.value, self.count) class RunList(object): '''List of contiguous runs of values. A `RunList` is an efficient encoding of a sequence of values. For example, the sequence ``aaaabbccccc`` is encoded as ``(4, a), (2, b), (5, c)``. The class provides methods for modifying and querying the run list without needing to deal with the tricky cases of splitting and merging the run list entries. Run lists are used to represent formatted character data in pyglet. A separate run list is maintained for each style attribute, for example, bold, italic, font size, and so on. Unless you are overriding the document interfaces, the only interaction with run lists is via `RunIterator`. The length and ranges of a run list always refer to the character positions in the decoded list. For example, in the above sequence, ``set_run(2, 5, 'x')`` would change the sequence to ``aaxxxbccccc``. ''' def __init__(self, size, initial): '''Create a run list of the given size and a default value. :Parameters: `size` : int Number of characters to represent initially. `initial` : object The value of all characters in the run list. ''' self.runs = [_Run(initial, size)] def insert(self, pos, length): '''Insert characters into the run list. The inserted characters will take on the value immediately preceding the insertion point (or the value of the first character, if `pos` is 0). :Parameters: `pos` : int Insertion index `length` : int Number of characters to insert. ''' i = 0 for run in self.runs: if i <= pos <= i + run.count: run.count += length i += run.count def delete(self, start, end): '''Remove characters from the run list. :Parameters: `start` : int Starting index to remove from. `end` : int End index, exclusive. ''' i = 0 for run in self.runs: if end - start == 0: break if i <= start <= i + run.count: trim = min(end - start, i + run.count - start) run.count -= trim end -= trim i += run.count self.runs = [r for r in self.runs if r.count > 0] # Don't leave an empty list if not self.runs: self.runs = [_Run(run.value, 0)] def set_run(self, start, end, value): '''Set the value of a range of characters. :Parameters: `start` : int Start index of range. `end` : int End of range, exclusive. `value` : object Value to set over the range. ''' if end - start <= 0: return # Find runs that need to be split i = 0 start_i = None start_trim = 0 end_i = None end_trim = 0 for run_i, run in enumerate(self.runs): count = run.count if i < start < i + count: start_i = run_i start_trim = start - i if i < end < i + count: end_i = run_i end_trim = end - i i += count # Split runs if start_i is not None: run = self.runs[start_i] self.runs.insert(start_i, _Run(run.value, start_trim)) run.count -= start_trim if end_i is not None: if end_i == start_i: end_trim -= start_trim end_i += 1 if end_i is not None: run = self.runs[end_i] self.runs.insert(end_i, _Run(run.value, end_trim)) run.count -= end_trim # Set new value on runs i = 0 for run in self.runs: if start <= i and i + run.count <= end: run.value = value i += run.count # Merge adjacent runs last_run = self.runs[0] for run in self.runs[1:]: if run.value == last_run.value: run.count += last_run.count last_run.count = 0 last_run = run # Delete collapsed runs self.runs = [r for r in self.runs if r.count > 0] def __iter__(self): i = 0 for run in self.runs: yield i, i + run.count, run.value i += run.count def get_run_iterator(self): '''Get an extended iterator over the run list. :rtype: `RunIterator` ''' return RunIterator(self) def __getitem__(self, index): '''Get the value at a character position. :Parameters: `index` : int Index of character. Must be within range and non-negative. :rtype: object ''' i = 0 for run in self.runs: if i <= index < i + run.count: return run.value i += run.count # Append insertion point if index == i: return self.runs[-1].value assert False, 'Index not in range' def __repr__(self): return str(list(self)) class AbstractRunIterator(object): '''Range iteration over `RunList`. `AbstractRunIterator` objects allow any monotonically non-decreasing access of the iteration, including repeated iteration over the same index. Use the ``[index]`` operator to get the value at a particular index within the document. For example:: run_iter = iter(run_list) value = run_iter[0] value = run_iter[0] # non-decreasing access is OK value = run_iter[15] value = run_iter[17] value = run_iter[16] # this is illegal, the index decreased. Using `AbstractRunIterator` to access increasing indices of the value runs is more efficient than calling `RunList.__getitem__` repeatedly. You can also iterate over monotonically non-decreasing ranges over the iteration. For example:: run_iter = iter(run_list) for start, end, value in run_iter.ranges(0, 20): pass for start, end, value in run_iter.ranges(25, 30): pass for start, end, value in run_iter.ranges(30, 40): pass Both start and end indices of the slice are required and must be positive. ''' def __getitem__(self, index): '''Get the value at a given index. See the class documentation for examples of valid usage. :Parameters: `index` : int Document position to query. :rtype: object ''' def ranges(self, start, end): '''Iterate over a subrange of the run list. See the class documentation for examples of valid usage. :Parameters: `start` : int Start index to iterate from. `end` : int End index, exclusive. :rtype: iterator :return: Iterator over (start, end, value) tuples. ''' class RunIterator(AbstractRunIterator): def __init__(self, run_list): self.next = iter(run_list).next self.start, self.end, self.value = self.next() def __getitem__(self, index): while index >= self.end: self.start, self.end, self.value = self.next() return self.value def ranges(self, start, end): while start >= self.end: self.start, self.end, self.value = self.next() yield start, min(self.end, end), self.value while end > self.end: self.start, self.end, self.value = self.next() yield self.start, min(self.end, end), self.value class OverriddenRunIterator(AbstractRunIterator): '''Iterator over a `RunIterator`, with a value temporarily replacing a given range. ''' def __init__(self, base_iterator, start, end, value): '''Create a derived iterator. :Parameters: `start` : int Start of range to override `end` : int End of range to override, exclusive `value` : object Value to replace over the range ''' self.iter = base_iterator self.override_start = start self.override_end = end self.override_value = value def ranges(self, start, end): if end <= self.override_start or start >= self.override_end: # No overlap for r in self.iter.ranges(start, end): yield r else: # Overlap: before, override, after if start < self.override_start < end: for r in self.iter.ranges(start, self.override_start): yield r yield (max(self.override_start, start), min(self.override_end, end), self.override_value) if start < self.override_end < end: for r in self.iter.ranges(self.override_end, end): yield r def __getitem__(self, index): if self.override_start <= index < self.override_end: return self.override_value else: return self.iter[index] class FilteredRunIterator(AbstractRunIterator): '''Iterate over an `AbstractRunIterator` with filtered values replaced by a default value. ''' def __init__(self, base_iterator, filter, default): '''Create a filtered run iterator. :Parameters: `base_iterator` : `AbstractRunIterator` Source of runs. `filter` : ``lambda object: bool`` Function taking a value as parameter, and returning ``True`` if the value is acceptable, and ``False`` if the default value should be substituted. `default` : object Default value to replace filtered values. ''' self.iter = base_iterator self.filter = filter self.default = default def ranges(self, start, end): for start, end, value in self.iter.ranges(start, end): if self.filter(value): yield start, end, value else: yield start, end, self.default def __getitem__(self, index): value = self.iter[index] if self.filter(value): return value return self.default class ZipRunIterator(AbstractRunIterator): '''Iterate over multiple run iterators concurrently.''' def __init__(self, range_iterators): self.range_iterators = range_iterators def ranges(self, start, end): iterators = [i.ranges(start, end) for i in self.range_iterators] starts, ends, values = zip(*[i.next() for i in iterators]) starts = list(starts) ends = list(ends) values = list(values) while start < end: min_end = min(ends) yield start, min_end, values start = min_end for i, iterator in enumerate(iterators): if ends[i] == min_end: starts[i], ends[i], values[i] = iterator.next() def __getitem__(self, index): return [i[index] for i in self.range_iterators] class ConstRunIterator(AbstractRunIterator): '''Iterate over a constant value without creating a RunList.''' def __init__(self, length, value): self.length = length self.value = value def next(self): yield 0, self.length, self.value def ranges(self, start, end): yield start, end, self.value def __getitem__(self, index): return self.value pyglet-1.1.4/pyglet/gl/0002700013464101346420000000000011317255174013122 5ustar yohyohpyglet-1.1.4/pyglet/gl/lib_wgl.py0000600013464101346420000001313011317241561015104 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 pyglet-1.1.4/pyglet/gl/gl_info.py0000600013464101346420000001471311317241561015112 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 pyglet-1.1.4/pyglet/gl/glxext_mesa.py0000600013464101346420000000406711317241561016016 0ustar yohyoh# ---------------------------------------------------------------------------- # 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') pyglet-1.1.4/pyglet/gl/glx_info.py0000600013464101346420000001222011317241561015271 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 pyglet-1.1.4/pyglet/gl/glext_arb.py0000600013464101346420000201120411317241561015436 0ustar yohyoh# ---------------------------------------------------------------------------- # 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) pyglet-1.1.4/pyglet/gl/__init__.py0000600013464101346420000004226711317241561015241 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 2541 2009-12-31 04:31:11Z benjamin.coder.smith@gmail.com $' 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 auxiliary buffers, size of the colour and depth buffers, double buffering, stenciling, 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 auxiliary 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 satisfies 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. # "ATI Radeon X1600 OpenGL Engine" # glGenBuffers not exported by # "ATI Radeon X1270 x86/MMX/3DNow!/SSE2" ('_workaround_vbo', lambda info: info.get_renderer().startswith('ATI Radeon X')), # 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 usable 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 pyglet-1.1.4/pyglet/gl/glxext_arb.py0000600013464101346420000010670611317241561015640 0ustar yohyoh# ---------------------------------------------------------------------------- # 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) pyglet-1.1.4/pyglet/gl/glu_info.py0000600013464101346420000001306211317241561015273 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 pyglet-1.1.4/pyglet/gl/lib.py0000600013464101346420000001222211317241561014234 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 pyglet-1.1.4/pyglet/gl/glu.py0000600013464101346420000006136011317241561014264 0ustar yohyoh# ---------------------------------------------------------------------------- # 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) pyglet-1.1.4/pyglet/gl/lib_glx.py0000600013464101346420000000672011317241561015114 0ustar yohyoh# ---------------------------------------------------------------------------- # 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) pyglet-1.1.4/pyglet/gl/glext_nv.py0000600013464101346420000216036411317241561015331 0ustar yohyoh# ---------------------------------------------------------------------------- # 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) pyglet-1.1.4/pyglet/gl/wglext_nv.py0000600013464101346420000021371611317241561015516 0ustar yohyoh# ---------------------------------------------------------------------------- # 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) pyglet-1.1.4/pyglet/gl/wgl_info.py0000600013464101346420000000526411317241561015302 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 pyglet-1.1.4/pyglet/gl/agl.py0000600013464101346420000006756211317241561014252 0ustar yohyoh# ---------------------------------------------------------------------------- # 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) pyglet-1.1.4/pyglet/gl/glext_missing.py0000600013464101346420000001241511317241561016346 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 pyglet-1.1.4/pyglet/gl/glxext_nv.py0000600013464101346420000013006211317241561015507 0ustar yohyoh# ---------------------------------------------------------------------------- # 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) pyglet-1.1.4/pyglet/gl/wgl.py0000700013464101346420000004305711317241561014272 0ustar yohyoh# ---------------------------------------------------------------------------- # 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) pyglet-1.1.4/pyglet/gl/glx.py0000600013464101346420000006504011317241561014266 0ustar yohyoh# ---------------------------------------------------------------------------- # 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'] pyglet-1.1.4/pyglet/gl/wglext_arb.py0000600013464101346420000016765511317241561015651 0ustar yohyoh# ---------------------------------------------------------------------------- # 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) pyglet-1.1.4/pyglet/gl/gl.py0000600013464101346420000031120111317241561014067 0ustar yohyoh# ---------------------------------------------------------------------------- # 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) pyglet-1.1.4/pyglet/gl/lib_agl.py0000600013464101346420000000536711317241561015073 0ustar yohyoh# ---------------------------------------------------------------------------- # 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) pyglet-1.1.4/pyglet/event.py0000600013464101346420000003665011317241561014220 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 propagates 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 propagation. 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 continuously 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 2541 2009-12-31 04:31:11Z benjamin.coder.smith@gmail.com $' 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 propagated 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 True except TypeError: self._raise_dispatch_exception(event_type, args, handler) # Check instance for an event handler if hasattr(self, event_type): try: return getattr(self, event_type)(*args) except TypeError: self._raise_dispatch_exception( event_type, args, getattr(self, event_type)) return False 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 pyglet-1.1.4/pyglet/__init__.py0000600013464101346420000002772611317241560014641 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 2530 2009-10-18 01:39:18Z benjamin.coder.smith $' 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.4' 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[env] 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 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 pyglet-1.1.4/pyglet/sprite.py0000600013464101346420000004441311317241561014401 0ustar yohyoh# ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- '''Display positioned, scaled and rotated images. A sprite is an instance of an image displayed on-screen. Multiple sprites can display the same image at different positions on the screen. Sprites can also be scaled larger or smaller, rotated at any angle and drawn at a fractional opacity. The following complete example loads a ``"ball.png"`` image and creates a sprite for that image. The sprite is then drawn in the window's draw event handler:: import pyglet ball_image = pyglet.image.load('ball.png') ball = pyglet.sprite.Sprite(ball_image, x=50, y=50) window = pyglet.window.Window() @window.event def on_draw(): ball.draw() pyglet.app.run() The sprite can be moved by modifying the ``x`` and ``y`` properties. Other properties determine the sprite's rotation, scale and opacity. The sprite's positioning, rotation and scaling all honor the original image's anchor (anchor_x, anchor_y). Drawing multiple sprites ======================== Sprites can be "batched" together and drawn at once more quickly than if each of their ``draw`` methods were called individually. The following example creates one hundred ball sprites and adds each of them to a `Batch`. The entire batch of sprites is then drawn in one call:: batch = pyglet.graphics.Batch() ball_sprites = [] for i in range(100): x, y = i * 10, 50 ball_sprites.append(pyglet.sprite.Sprite(ball_image, x, y, batch=batch) @window.event def on_draw(): batch.draw() Sprites can be freely modified in any way even after being added to a batch, however a sprite can belong to at most one batch. See the documentation for `pyglet.graphics` for more details on batched rendering, and grouping of sprites within batches. :since: pyglet 1.1 ''' __docformat__ = 'restructuredtext' __version__ = '$Id: sprite.py 2541 2009-12-31 04:31:11Z benjamin.coder.smith@gmail.com $' import math import sys from pyglet.gl import * from pyglet import clock from pyglet import event from pyglet import graphics from pyglet import image _is_epydoc = hasattr(sys, 'is_epydoc') and sys.is_epydoc class SpriteGroup(graphics.Group): '''Shared sprite rendering group. The group is automatically coalesced with other sprite groups sharing the same parent group, texture and blend parameters. ''' def __init__(self, texture, blend_src, blend_dest, parent=None): '''Create a sprite group. The group is created internally within `Sprite`; applications usually do not need to explicitly create it. :Parameters: `texture` : `Texture` The (top-level) texture containing the sprite image. `blend_src` : int OpenGL blend source mode; for example, ``GL_SRC_ALPHA``. `blend_dest` : int OpenGL blend destination mode; for example, ``GL_ONE_MINUS_SRC_ALPHA``. `parent` : `Group` Optional parent group. ''' super(SpriteGroup, self).__init__(parent) self.texture = texture self.blend_src = blend_src self.blend_dest = blend_dest def set_state(self): glEnable(self.texture.target) glBindTexture(self.texture.target, self.texture.id) glPushAttrib(GL_COLOR_BUFFER_BIT) glEnable(GL_BLEND) glBlendFunc(self.blend_src, self.blend_dest) def unset_state(self): glPopAttrib() glDisable(self.texture.target) def __repr__(self): return '%s(%r)' % (self.__class__.__name__, self.texture) def __eq__(self, other): return (other.__class__ is self.__class__ and self.parent is other.parent and self.texture.target == other.texture.target and self.texture.id == other.texture.id and self.blend_src == other.blend_src and self.blend_dest == other.blend_dest) def __hash__(self): return hash((id(self.parent), self.texture.id, self.texture.target, self.blend_src, self.blend_dest)) class Sprite(event.EventDispatcher): '''Instance of an on-screen image. See the module documentation for usage. ''' _batch = None _animation = None _rotation = 0 _opacity = 255 _rgb = (255, 255, 255) _scale = 1.0 _visible = True _vertex_list = None def __init__(self, img, x=0, y=0, blend_src=GL_SRC_ALPHA, blend_dest=GL_ONE_MINUS_SRC_ALPHA, batch=None, group=None, usage='dynamic'): '''Create a sprite. :Parameters: `img` : `AbstractImage` or `Animation` Image or animation to display. `x` : int X coordinate of the sprite. `y` : int Y coordinate of the sprite. `blend_src` : int OpenGL blend source mode. The default is suitable for compositing sprites drawn from back-to-front. `blend_dest` : int OpenGL blend destination mode. The default is suitable for compositing sprites drawn from back-to-front. `batch` : `Batch` Optional batch to add the sprite to. `group` : `Group` Optional parent group of the sprite. `usage` : str Vertex buffer object usage hint, one of ``"none"`` (default), ``"stream"``, ``"dynamic"`` or ``"static"``. Applies only to vertex data. ''' if batch is not None: self._batch = batch self._x = x self._y = y if isinstance(img, image.Animation): self._animation = img self._frame_index = 0 self._texture = img.frames[0].image.get_texture() self._next_dt = img.frames[0].duration if self._next_dt: clock.schedule_once(self._animate, self._next_dt) else: self._texture = img.get_texture() self._group = SpriteGroup(self._texture, blend_src, blend_dest, group) self._usage = usage self._create_vertex_list() def __del__(self): try: if self._vertex_list is not None: self._vertex_list.delete() except: pass def delete(self): '''Force immediate removal of the sprite from video memory. This is often necessary when using batches, as the Python garbage collector will not necessarily call the finalizer as soon as the sprite is garbage. ''' if self._animation: clock.unschedule(self._animate) self._vertex_list.delete() self._vertex_list = None self._texture = None # Easy way to break circular reference, speeds up GC self._group = None def _animate(self, dt): self._frame_index += 1 if self._frame_index >= len(self._animation.frames): self._frame_index = 0 self.dispatch_event('on_animation_end') if self._vertex_list is None: return # Deleted in event handler. frame = self._animation.frames[self._frame_index] self._set_texture(frame.image.get_texture()) if frame.duration is not None: duration = frame.duration - (self._next_dt - dt) duration = min(max(0, duration), frame.duration) clock.schedule_once(self._animate, duration) self._next_dt = duration else: self.dispatch_event('on_animation_end') def _set_batch(self, batch): if self._batch == batch: return if batch is not None and self._batch is not None: self._batch.migrate(self._vertex_list, GL_QUADS, self._group, batch) self._batch = batch else: self._vertex_list.delete() self._batch = batch self._create_vertex_list() def _get_batch(self): return self._batch batch = property(_get_batch, _set_batch, doc='''Graphics batch. The sprite can be migrated from one batch to another, or removed from its batch (for individual drawing). Note that this can be an expensive operation. :type: `Batch` ''') def _set_group(self, group): if self._group.parent == group: return self._group = SpriteGroup(self._texture, self._group.blend_src, self._group.blend_dest, group) if self._batch is not None: self._batch.migrate(self._vertex_list, GL_QUADS, self._group, self._batch) def _get_group(self): return self._group.parent group = property(_get_group, _set_group, doc='''Parent graphics group. The sprite can change its rendering group, however this can be an expensive operation. :type: `Group` ''') def _get_image(self): if self._animation: return self._animation return self._texture def _set_image(self, img): if self._animation is not None: clock.unschedule(self._animate) self._animation = None if isinstance(img, image.Animation): self._animation = img self._frame_index = 0 self._set_texture(img.frames[0].image.get_texture()) self._next_dt = img.frames[0].duration clock.schedule_once(self._animate, self._next_dt) else: self._set_texture(img.get_texture()) self._update_position() image = property(_get_image, _set_image, doc='''Image or animation to display. :type: `AbstractImage` or `Animation` ''') def _set_texture(self, texture): if texture.id is not self._texture.id: self._group = SpriteGroup(texture, self._group.blend_src, self._group.blend_dest, self._group.parent) if self._batch is None: self._vertex_list.tex_coords[:] = texture.tex_coords else: self._vertex_list.delete() self._texture = texture self._create_vertex_list() else: self._vertex_list.tex_coords[:] = texture.tex_coords self._texture = texture def _create_vertex_list(self): if self._batch is None: self._vertex_list = graphics.vertex_list(4, 'v2i/%s' % self._usage, 'c4B', ('t3f', self._texture.tex_coords)) else: self._vertex_list = self._batch.add(4, GL_QUADS, self._group, 'v2i/%s' % self._usage, 'c4B', ('t3f', self._texture.tex_coords)) self._update_position() self._update_color() def _update_position(self): img = self._texture if not self._visible: self._vertex_list.vertices[:] = [0, 0, 0, 0, 0, 0, 0, 0] elif self._rotation: x1 = -img.anchor_x * self._scale y1 = -img.anchor_y * self._scale x2 = x1 + img.width * self._scale y2 = y1 + img.height * self._scale x = self._x y = self._y r = -math.radians(self._rotation) cr = math.cos(r) sr = math.sin(r) ax = int(x1 * cr - y1 * sr + x) ay = int(x1 * sr + y1 * cr + y) bx = int(x2 * cr - y1 * sr + x) by = int(x2 * sr + y1 * cr + y) cx = int(x2 * cr - y2 * sr + x) cy = int(x2 * sr + y2 * cr + y) dx = int(x1 * cr - y2 * sr + x) dy = int(x1 * sr + y2 * cr + y) self._vertex_list.vertices[:] = [ax, ay, bx, by, cx, cy, dx, dy] elif self._scale != 1.0: x1 = int(self._x - img.anchor_x * self._scale) y1 = int(self._y - img.anchor_y * self._scale) x2 = int(x1 + img.width * self._scale) y2 = int(y1 + img.height * self._scale) self._vertex_list.vertices[:] = [x1, y1, x2, y1, x2, y2, x1, y2] else: x1 = int(self._x - img.anchor_x) y1 = int(self._y - img.anchor_y) x2 = x1 + img.width y2 = y1 + img.height self._vertex_list.vertices[:] = [x1, y1, x2, y1, x2, y2, x1, y2] def _update_color(self): r, g, b = self._rgb self._vertex_list.colors[:] = [r, g, b, int(self._opacity)] * 4 def set_position(self, x, y): '''Set the X and Y coordinates of the sprite simultaneously. :Parameters: `x` : int X coordinate of the sprite. `y` : int Y coordinate of the sprite. ''' self._x = x self._y = y self._update_position() position = property(lambda self: (self._x, self._y), lambda self, t: self.set_position(*t), doc='''The (x, y) coordinates of the sprite. :type: (int, int) ''') def _set_x(self, x): self._x = x self._update_position() x = property(lambda self: self._x, _set_x, doc='''X coordinate of the sprite. :type: int ''') def _set_y(self, y): self._y = y self._update_position() y = property(lambda self: self._y, _set_y, doc='''Y coordinate of the sprite. :type: int ''') def _set_rotation(self, rotation): self._rotation = rotation self._update_position() rotation = property(lambda self: self._rotation, _set_rotation, doc='''Clockwise rotation of the sprite, in degrees. The sprite image will be rotated about its image's (anchor_x, anchor_y) position. :type: float ''') def _set_scale(self, scale): self._scale = scale self._update_position() scale = property(lambda self: self._scale, _set_scale, doc='''Scaling factor. A scaling factor of 1 (the default) has no effect. A scale of 2 will draw the sprite at twice the native size of its image. :type: float ''') width = property(lambda self: int(self._texture.width * self._scale), doc='''Scaled width of the sprite. Read-only. Invariant under rotation. :type: int ''') height = property(lambda self: int(self._texture.height * self._scale), doc='''Scaled height of the sprite. Read-only. Invariant under rotation. :type: int ''') def _set_opacity(self, opacity): self._opacity = opacity self._update_color() opacity = property(lambda self: self._opacity, _set_opacity, doc='''Blend opacity. This property sets the alpha component of the colour of the sprite's vertices. With the default blend mode (see the constructor), this allows the sprite to be drawn with fractional opacity, blending with the background. An opacity of 255 (the default) has no effect. An opacity of 128 will make the sprite appear translucent. :type: int ''') def _set_color(self, rgb): self._rgb = map(int, rgb) self._update_color() color = property(lambda self: self._rgb, _set_color, doc='''Blend color. This property sets the color of the sprite's vertices. This allows the sprite to be drawn with a color tint. The color is specified as an RGB tuple of integers ``(red, green, blue)``. Each color component must be in the range 0 (dark) to 255 (saturated). :type: (int, int, int) ''') def _set_visible(self, visible): self._visible = visible self._update_position() visible = property(lambda self: self._visible, _set_visible, '''True if the sprite will be drawn. :type: bool ''') def draw(self): '''Draw the sprite at its current position. See the module documentation for hints on drawing multiple sprites efficiently. ''' self._group.set_state_recursive() self._vertex_list.draw(GL_QUADS) self._group.unset_state_recursive() if _is_epydoc: def on_animation_end(self): '''The sprite animation reached the final frame. The event is triggered only if the sprite has an animation, not an image. For looping animations, the event is triggered each time the animation loops. :event: ''' Sprite.register_event_type('on_animation_end') pyglet-1.1.4/pyglet/clock.py0000600013464101346420000010046411317241561014165 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 pyglet 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 to 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 initialised 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 2541 2009-12-31 04:31:11Z benjamin.coder.smith@gmail.com $' import time import sys import ctypes 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) _default_time_function = time.clock 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)) _default_time_function = time.time 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=_default_time_function): '''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 item.next_ts is None: pass elif 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 occurrences 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 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() pyglet-1.1.4/pyglet/info.py0000600013464101346420000001474111317241561014027 0ustar yohyoh# ---------------------------------------------------------------------------- # 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, window, 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() pyglet-1.1.4/pyglet/lib.py0000600013464101346420000002413211317241561013635 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 pyglet-1.1.4/pyglet/media/0002700013464101346420000000000011317255174013577 5ustar yohyohpyglet-1.1.4/pyglet/media/avbin.py0000600013464101346420000004073211317241561015251 0ustar yohyoh# ---------------------------------------------------------------------------- # 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) pyglet-1.1.4/pyglet/media/__init__.py0000600013464101346420000013042411317241561015707 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 2541 2009-12-31 04:31:11Z benjamin.coder.smith@gmail.com $ '''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 2541 2009-12-31 04:31:11Z benjamin.coder.smith@gmail.com $' 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 NotImplementedError( '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 orthogonal 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 orthogonal 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() pyglet-1.1.4/pyglet/media/riff.py0000600013464101346420000001762711317241561015107 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 = '> 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 pyglet-1.1.4/pyglet/media/drivers/0002700013464101346420000000000011317255174015255 5ustar yohyohpyglet-1.1.4/pyglet/media/drivers/__init__.py0000600013464101346420000000326411317241561017366 0ustar yohyoh# ---------------------------------------------------------------------------- # 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-1.1.4/pyglet/media/drivers/silent.py0000600013464101346420000001257611317241561017133 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 pyglet-1.1.4/pyglet/media/drivers/directsound/0002700013464101346420000000000011317255174017600 5ustar yohyohpyglet-1.1.4/pyglet/media/drivers/directsound/__init__.py0000600013464101346420000003262711317241561021716 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 pyglet-1.1.4/pyglet/media/drivers/directsound/lib_dsound.py0000600013464101346420000003106611317241561022275 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 pyglet-1.1.4/pyglet/media/drivers/openal/0002700013464101346420000000000011317255174016533 5ustar yohyohpyglet-1.1.4/pyglet/media/drivers/openal/__init__.py0000600013464101346420000002714611317241561020651 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 pyglet-1.1.4/pyglet/media/drivers/openal/lib_alc.py0000600013464101346420000003013511317241561020467 0ustar yohyoh# ---------------------------------------------------------------------------- # 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'] pyglet-1.1.4/pyglet/media/drivers/openal/lib_openal.py0000600013464101346420000006641411317241561021217 0ustar yohyoh# ---------------------------------------------------------------------------- # 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-existent 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 2541 2009-12-31 04:31:11Z benjamin.coder.smith@gmail.com $' 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'] pyglet-1.1.4/pyglet/media/drivers/alsa/0002700013464101346420000000000011317255174016175 5ustar yohyohpyglet-1.1.4/pyglet/media/drivers/alsa/asound.py0000600013464101346420000145567511317241561020062 0ustar yohyoh# ---------------------------------------------------------------------------- # 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'] pyglet-1.1.4/pyglet/media/drivers/alsa/__init__.py0000600013464101346420000002453311317241561020310 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 pyglet-1.1.4/pyglet/font/0002700013464101346420000000000011317255174013466 5ustar yohyohpyglet-1.1.4/pyglet/font/freetype_lib.py0000600013464101346420000003336711317241561016520 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 2496 2009-08-19 01:17:30Z benjamin.coder.smith $' from ctypes import * from base import FontException 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 pyglet-1.1.4/pyglet/font/ttf.py0000600013464101346420000006026111317241561014635 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 2541 2009-12-31 04:31:11Z benjamin.coder.smith@gmail.com $ """ 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 2541 2009-12-31 04:31:11Z benjamin.coder.smith@gmail.com $' 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') pyglet-1.1.4/pyglet/font/__init__.py0000600013464101346420000005520211317241561015576 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 2496 2009-08-19 01:17:30Z benjamin.coder.smith $' 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. ''' for file in os.listdir(dir): if file[-4:].lower() == '.ttf': add_file(os.path.join(dir, file)) pyglet-1.1.4/pyglet/font/base.py0000600013464101346420000003410111317241561014744 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 2541 2009-12-31 04:31:11Z benjamin.coder.smith@gmail.com $' 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 encountered 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 pyglet-1.1.4/pyglet/font/freetype.py0000600013464101346420000003024711317241561015664 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 2496 2009-08-19 01:17:30Z benjamin.coder.smith $' 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 pyglet-1.1.4/pyglet/font/win32.py0000600013464101346420000004573411317241561015012 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 from sys import byteorder 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)) pyglet-1.1.4/pyglet/font/carbon.py0000600013464101346420000003560211317241561015305 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 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) pyglet-1.1.4/pyglet/resource.py0000600013464101346420000005720411317241561014724 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 application resources from a known path. Loading resources by specifying relative paths to filenames is often problematic in Python, as the working directory is not necessarily the same directory as the application's script files. This module allows applications to specify a search path for resources. Relative paths are taken to be relative to the application's __main__ module. ZIP files can appear on the path; they will be searched inside. The resource module also behaves as expected when applications are bundled using py2exe or py2app. As well as providing file references (with the `file` function), the resource module also contains convenience functions for loading images, textures, fonts, media and documents. 3rd party modules or packages not bound to a specific application should construct their own `Loader` instance and override the path to use the resources in the module's directory. Path format ^^^^^^^^^^^ The resource path `path` (see also `Loader.__init__` and `Loader.path`) is a list of locations to search for resources. Locations are searched in the order given in the path. If a location is not valid (for example, if the directory does not exist), it is skipped. Locations in the path beginning with an ampersand (''@'' symbol) specify Python packages. Other locations specify a ZIP archive or directory on the filesystem. Locations that are not absolute are assumed to be relative to the script home. Some examples:: # Search just the `res` directory, assumed to be located alongside the # main script file. path = ['res'] # Search the directory containing the module `levels.level1`, followed # by the `res/images` directory. path = ['@levels.level1', 'res/images'] Paths are always case-sensitive and forward slashes are always used as path separators, even in cases when the filesystem or platform does not do this. This avoids a common programmer error when porting applications between platforms. The default path is ``['.']``. If you modify the path, you must call `reindex`. :since: pyglet 1.1 ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import os import weakref import sys import zipfile import StringIO import pyglet class ResourceNotFoundException(Exception): '''The named resource was not found on the search path.''' def __init__(self, name): message = ('Resource "%s" was not found on the path. ' 'Ensure that the filename has the correct captialisation.') % name Exception.__init__(self, message) def get_script_home(): '''Get the directory containing the program entry module. For ordinary Python scripts, this is the directory containing the ``__main__`` module. For executables created with py2exe the result is the directory containing the running executable file. For OS X bundles created using Py2App the result is the Resources directory within the running bundle. If none of the above cases apply and the file for ``__main__`` cannot be determined the working directory is returned. :rtype: str ''' frozen = getattr(sys, 'frozen', None) if frozen in ('windows_exe', 'console_exe'): return os.path.dirname(sys.executable) elif frozen == 'macosx_app': return os.environ['RESOURCEPATH'] else: main = sys.modules['__main__'] if hasattr(main, '__file__'): return os.path.dirname(main.__file__) # Probably interactive return '' def get_settings_path(name): '''Get a directory to save user preferences. Different platforms have different conventions for where to save user preferences, saved games, and settings. This function implements those conventions. Note that the returned path may not exist: applications should use ``os.makedirs`` to construct it if desired. On Linux, a hidden directory `name` in the user's home directory is returned. On Windows (including under Cygwin) the `name` directory in the user's ``Application Settings`` directory is returned. On Mac OS X the `name` directory under ``~/Library/Application Support`` is returned. :Parameters: `name` : str The name of the application. :rtype: str ''' if sys.platform in ('cygwin', 'win32'): if 'APPDATA' in os.environ: return os.path.join(os.environ['APPDATA'], name) else: return os.path.expanduser('~/%s' % name) elif sys.platform == 'darwin': return os.path.expanduser('~/Library/Application Support/%s' % name) else: return os.path.expanduser('~/.%s' % name) class Location(object): '''Abstract resource location. Given a location, a file can be loaded from that location with the `open` method. This provides a convenient way to specify a path to load files from, and not necessarily have that path reside on the filesystem. ''' def open(self, filename, mode='rb'): '''Open a file at this location. :Parameters: `filename` : str The filename to open. Absolute paths are not supported. Relative paths are not supported by most locations (you should specify only a filename with no path component). `mode` : str The file mode to open with. Only files opened on the filesystem make use of this parameter; others ignore it. :rtype: file object ''' raise NotImplementedError('abstract') class FileLocation(Location): '''Location on the filesystem. ''' def __init__(self, path): '''Create a location given a relative or absolute path. :Parameters: `path` : str Path on the filesystem. ''' self.path = path def open(self, filename, mode='rb'): return open(os.path.join(self.path, filename), mode) class ZIPLocation(Location): '''Location within a ZIP file. ''' def __init__(self, zip, dir): '''Create a location given an open ZIP file and a path within that file. :Parameters: `zip` : ``zipfile.ZipFile`` An open ZIP file from the ``zipfile`` module. `dir` : str A path within that ZIP file. Can be empty to specify files at the top level of the ZIP file. ''' self.zip = zip self.dir = dir def open(self, filename, mode='rb'): if self.dir: path = self.dir + '/' + filename else: path = filename text = self.zip.read(path) return StringIO.StringIO(text) class URLLocation(Location): '''Location on the network. This class uses the ``urlparse`` and ``urllib2`` modules to open files on the network given a URL. ''' def __init__(self, base_url): '''Create a location given a base URL. :Parameters: `base_url` : str URL string to prepend to filenames. ''' self.base = base_url def open(self, filename, mode='rb'): import urlparse import urllib2 url = urlparse.urljoin(self.base, filename) return urllib2.urlopen(url) class Loader(object): '''Load program resource files from disk. The loader contains a search path which can include filesystem directories, ZIP archives and Python packages. :Ivariables: `path` : list of str List of search locations. After modifying the path you must call the `reindex` method. `script_home` : str Base resource location, defaulting to the location of the application script. ''' def __init__(self, path=None, script_home=None): '''Create a loader for the given path. If no path is specified it defaults to ``['.']``; that is, just the program directory. See the module documentation for details on the path format. :Parameters: `path` : list of str List of locations to search for resources. `script_home` : str Base location of relative files. Defaults to the result of `get_script_home`. ''' if path is None: path = ['.'] if type(path) in (str, unicode): path = [path] self.path = list(path) if script_home is None: script_home = get_script_home() self._script_home = script_home self.reindex() # Map name to image self._cached_textures = weakref.WeakValueDictionary() self._cached_images = weakref.WeakValueDictionary() self._cached_animations = weakref.WeakValueDictionary() # Map bin size to list of atlases self._texture_atlas_bins = {} def reindex(self): '''Refresh the file index. You must call this method if `path` is changed or the filesystem layout changes. ''' self._index = {} for path in self.path: if path.startswith('@'): # Module name = path[1:] try: module = __import__(name) except: continue for component in name.split('.')[1:]: module = getattr(module, component) if hasattr(module, '__file__'): path = os.path.dirname(module.__file__) else: path = '' # interactive elif not os.path.isabs(path): # Add script base unless absolute assert '\\' not in path, \ 'Backslashes not permitted in relative path' path = os.path.join(self._script_home, path) if os.path.isdir(path): # Filesystem directory path = path.rstrip(os.path.sep) location = FileLocation(path) for dirpath, dirnames, filenames in os.walk(path): dirpath = dirpath[len(path) + 1:] # Force forward slashes for index if dirpath: parts = filter(None, dirpath.split(os.sep)) dirpath = '/'.join(parts) for filename in filenames: if dirpath: index_name = dirpath + '/' + filename else: index_name = filename self._index_file(index_name, location) else: # Find path component that is the ZIP file. dir = '' old_path = None while path and not os.path.isfile(path): old_path = path path, tail_dir = os.path.split(path) if path == old_path: break dir = '/'.join((tail_dir, dir)) if path == old_path: continue dir = dir.rstrip('/') # path is a ZIP file, dir resides within ZIP if path and zipfile.is_zipfile(path): zip = zipfile.ZipFile(path, 'r') location = ZIPLocation(zip, dir) for zip_name in zip.namelist(): #zip_name_dir, zip_name = os.path.split(zip_name) #assert '\\' not in name_dir #assert not name_dir.endswith('/') if zip_name.startswith(dir): if dir: zip_name = zip_name[len(dir)+1:] self._index_file(zip_name, location) def _index_file(self, name, location): if name not in self._index: self._index[name] = location def file(self, name, mode='rb'): '''Load a resource. :Parameters: `name` : str Filename of the resource to load. `mode` : str Combination of ``r``, ``w``, ``a``, ``b`` and ``t`` characters with the meaning as for the builtin ``open`` function. :rtype: file object ''' try: location = self._index[name] return location.open(name, mode) except KeyError: raise ResourceNotFoundException(name) def location(self, name): '''Get the location of a resource. This method is useful for opening files referenced from a resource. For example, an HTML file loaded as a resource might reference some images. These images should be located relative to the HTML file, not looked up individually in the loader's path. :Parameters: `name` : str Filename of the resource to locate. :rtype: `Location` ''' try: return self._index[name] except KeyError: raise ResourceNotFoundException(name) def add_font(self, name): '''Add a font resource to the application. Fonts not installed on the system must be added to pyglet before they can be used with `font.load`. Although the font is added with its filename using this function, it is loaded by specifying its family name. For example:: resource.add_font('action_man.ttf') action_man = font.load('Action Man') :Parameters: `name` : str Filename of the font resource to add. ''' from pyglet import font file = self.file(name) font.add_file(file) def _alloc_image(self, name): file = self.file(name) img = pyglet.image.load(name, file=file) bin = self._get_texture_atlas_bin(img.width, img.height) if bin is None: return img.get_texture(True) return bin.add(img) def _get_texture_atlas_bin(self, width, height): '''A heuristic for determining the atlas bin to use for a given image size. Returns None if the image should not be placed in an atlas (too big), otherwise the bin (a list of TextureAtlas). ''' # Large images are not placed in an atlas if width > 128 or height > 128: return None # Group images with small height separately to larger height (as the # allocator can't stack within a single row). bin_size = 1 if height > 32: bin_size = 2 try: bin = self._texture_atlas_bins[bin_size] except KeyError: bin = self._texture_atlas_bins[bin_size] = \ pyglet.image.atlas.TextureBin() return bin def image(self, name, flip_x=False, flip_y=False, rotate=0): '''Load an image with optional transformation. This is similar to `texture`, except the resulting image will be packed into a `TextureBin` if it is an appropriate size for packing. This is more efficient than loading images into separate textures. :Parameters: `name` : str Filename of the image source to load. `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 The returned image will be rotated clockwise by the given number of degrees (a multiple of 90). :rtype: `Texture` :return: A complete texture if the image is large, otherwise a `TextureRegion` of a texture atlas. ''' if name in self._cached_images: identity = self._cached_images[name] else: identity = self._cached_images[name] = self._alloc_image(name) if not rotate and not flip_x and not flip_y: return identity return identity.get_transform(flip_x, flip_y, rotate) def animation(self, name, flip_x=False, flip_y=False, rotate=0): '''Load an animation with optional transformation. Animations loaded from the same source but with different transformations will use the same textures. :Parameters: `name` : str Filename of the animation source to load. `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 The returned image will be rotated clockwise by the given number of degrees (a multiple of 90). :rtype: `Animation` ''' try: identity = self._cached_animations[name] except KeyError: animation = pyglet.image.load_animation(name, self.file(name)) bin = self._get_texture_atlas_bin(animation.get_max_width(), animation.get_max_height()) if bin: animation.add_to_texture_bin(bin) identity = self._cached_animations[name] = animation if not rotate and not flip_x and not flip_y: return identity return identity.get_transform(flip_x, flip_y, rotate) def get_cached_image_names(self): '''Get a list of image filenames that have been cached. This is useful for debugging and profiling only. :rtype: list :return: List of str ''' return self._cached_images.keys() def get_cached_animation_names(self): '''Get a list of animation filenames that have been cached. This is useful for debugging and profiling only. :rtype: list :return: List of str ''' return self._cached_animations.keys() def get_texture_bins(self): '''Get a list of texture bins in use. This is useful for debugging and profiling only. :rtype: list :return: List of `TextureBin` ''' return self._texture_atlas_bins.values() def media(self, name, streaming=True): '''Load a sound or video resource. The meaning of `streaming` is as for `media.load`. Compressed sources cannot be streamed (that is, video and compressed audio cannot be streamed from a ZIP archive). :Parameters: `name` : str Filename of the media source to load. `streaming` : bool True if the source should be streamed from disk, False if it should be entirely decoded into memory immediately. :rtype: `media.Source` ''' from pyglet import media try: location = self._index[name] if isinstance(location, FileLocation): # Don't open the file if it's streamed from disk -- AVbin # needs to do it. path = os.path.join(location.path, name) return media.load(path, streaming=streaming) else: file = location.open(name) return media.load(name, file=file, streaming=streaming) except KeyError: raise ResourceNotFoundException(name) def texture(self, name): '''Load a texture. The named image will be loaded as a single OpenGL texture. If the dimensions of the image are not powers of 2 a `TextureRegion` will be returned. :Parameters: `name` : str Filename of the image resource to load. :rtype: `Texture` ''' if name in self._cached_textures: return self._cached_textures[name] file = self.file(name) texture = pyglet.image.load(name, file=file).get_texture() self._cached_textures[name] = texture return texture def html(self, name): '''Load an HTML document. :Parameters: `name` : str Filename of the HTML resource to load. :rtype: `FormattedDocument` ''' file = self.file(name) return pyglet.text.decode_html(file.read(), self.location(name)) def attributed(self, name): '''Load an attributed text document. See `pyglet.text.formats.attributed` for details on this format. :Parameters: `name` : str Filename of the attribute text resource to load. :rtype: `FormattedDocument` ''' file = self.file(name) return pyglet.text.load(name, file, 'text/vnd.pyglet-attributed') def text(self, name): '''Load a plain text document. :Parameters: `name` : str Filename of the plain text resource to load. :rtype: `UnformattedDocument` ''' file = self.file(name) return pyglet.text.load(name, file, 'text/plain') def get_cached_texture_names(self): '''Get the names of textures currently cached. :rtype: list of str ''' return self._cached_textures.keys() #: Default resource search path. #: #: Locations in the search path are searched in order and are always #: case-sensitive. After changing the path you must call `reindex`. #: #: See the module documentation for details on the path format. #: #: :type: list of str path = [] class _DefaultLoader(Loader): def _get_path(self): return path def _set_path(self, value): global path path = value path = property(_get_path, _set_path) _default_loader = _DefaultLoader() reindex = _default_loader.reindex file = _default_loader.file location = _default_loader.location add_font = _default_loader.add_font image = _default_loader.image animation = _default_loader.animation get_cached_image_names = _default_loader.get_cached_image_names get_cached_animation_names = _default_loader.get_cached_animation_names get_texture_bins = _default_loader.get_texture_bins media = _default_loader.media texture = _default_loader.texture html = _default_loader.html attributed = _default_loader.attributed text = _default_loader.text get_cached_texture_names = _default_loader.get_cached_texture_names pyglet-1.1.4/pyglet/window/0002700013464101346420000000000011317255174014027 5ustar yohyohpyglet-1.1.4/pyglet/window/carbon/0002700013464101346420000000000011317255174015273 5ustar yohyohpyglet-1.1.4/pyglet/window/carbon/constants.py0000600013464101346420000004333411317241561017663 0ustar yohyoh# ---------------------------------------------------------------------------- # 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: $' # CFString.h kCFStringEncodingMacRoman = 0 kCFStringEncodingWindowsLatin1 = 0x0500 kCFStringEncodingISOLatin1 = 0x0201 kCFStringEncodingNextStepLatin = 0x0B01 kCFStringEncodingASCII = 0x0600 kCFStringEncodingUnicode = 0x0100 kCFStringEncodingUTF8 = 0x08000100 kCFStringEncodingNonLossyASCII = 0x0BFF # MacTypes.h noErr = 0 # CarbonEventsCore.h eventLoopTimedOutErr = -9875 eventLoopQuitErr = -9876 # MacApplication.h kUIModeNormal = 0 kUIModeContentSuppressed = 1 kUIModeContentHidden = 2 kUIModeAllSuppressed = 4 kUIModeAllHidden = 3 kUIOptionAutoShowMenuBar = 1 << 0 kUIOptionDisableAppleMenu = 1 << 2 kUIOptionDisableProcessSwitch = 1 << 3 kUIOptionDisableForceQuit = 1 << 4 kUIOptionDisableSessionTerminate = 1 << 5 kUIOptionDisableHide = 1 << 6 # MacWindows.h kAlertWindowClass = 1 kMovableAlertWindowClass = 2 kModalWindowClass = 3 kMovableModalWindowClass = 4 kFloatingWindowClass = 5 kDocumentWindowClass = 6 kUtilityWindowClass = 8 kHelpWindowClass = 10 kSheetWindowClass = 11 kToolbarWindowClass = 12 kPlainWindowClass = 13 kOverlayWindowClass = 14 kSheetAlertWindowClass = 15 kAltPlainWindowClass = 16 kSimpleWindowClass = 18 # no window frame kDrawerWindowClass = 20 kWindowNoAttributes = 0x0 kWindowCloseBoxAttribute = 0x1 kWindowHorizontalZoomAttribute = 0x2 kWindowVerticalZoomAttribute = 0x4 kWindowFullZoomAttribute = kWindowHorizontalZoomAttribute | \ kWindowVerticalZoomAttribute kWindowCollapseBoxAttribute = 0x8 kWindowResizableAttribute = 0x10 kWindowSideTitlebarAttribute = 0x20 kWindowToolbarAttribute = 0x40 kWindowMetalAttribute = 1 << 8 kWindowDoesNotCycleAttribute = 1 << 15 kWindowNoupdatesAttribute = 1 << 16 kWindowNoActivatesAttribute = 1 << 17 kWindowOpaqueForEventsAttribute = 1 << 18 kWindowCompositingAttribute = 1 << 19 kWindowNoShadowAttribute = 1 << 21 kWindowHideOnSuspendAttribute = 1 << 24 kWindowAsyncDragAttribute = 1 << 23 kWindowStandardHandlerAttribute = 1 << 25 kWindowHideOnFullScreenAttribute = 1 << 26 kWindowInWindowMenuAttribute = 1 << 27 kWindowLiveResizeAttribute = 1 << 28 kWindowIgnoreClicksAttribute = 1 << 29 kWindowNoConstrainAttribute = 1 << 31 kWindowStandardDocumentAttributes = kWindowCloseBoxAttribute | \ kWindowFullZoomAttribute | \ kWindowCollapseBoxAttribute | \ kWindowResizableAttribute kWindowStandardFloatingAttributes = kWindowCloseBoxAttribute | \ kWindowCollapseBoxAttribute kWindowCenterOnMainScreen = 1 kWindowCenterOnParentWindow = 2 kWindowCenterOnParentWindowScreen = 3 kWindowCascadeOnMainScreen = 4 kWindowCascadeOnParentWindow = 5 kWindowCascadeonParentWindowScreen = 6 kWindowCascadeStartAtParentWindowScreen = 10 kWindowAlertPositionOnMainScreen = 7 kWindowAlertPositionOnParentWindow = 8 kWindowAlertPositionOnParentWindowScreen = 9 kWindowTitleBarRgn = 0 kWindowTitleTextRgn = 1 kWindowCloseBoxRgn = 2 kWindowZoomBoxRgn = 3 kWindowDragRgn = 5 kWindowGrowRgn = 6 kWindowCollapseBoxRgn = 7 kWindowTitleProxyIconRgn = 8 kWindowStructureRgn = 32 kWindowContentRgn = 33 kWindowUpdateRgn = 34 kWindowOpaqueRgn = 35 kWindowGlobalPortRgn = 40 kWindowToolbarButtonRgn = 41 inDesk = 0 inNoWindow = 0 inMenuBar = 1 inSysWindow = 2 inContent = 3 inDrag = 4 inGrow = 5 inGoAway = 6 inZoomIn = 7 inZoomOut = 8 inCollapseBox = 11 inProxyIcon = 12 inToolbarButton = 13 inStructure = 15 def _name(name): return ord(name[0]) << 24 | \ ord(name[1]) << 16 | \ ord(name[2]) << 8 | \ ord(name[3]) # AEDataModel.h typeBoolean = _name('bool') typeChar = _name('TEXT') typeSInt16 = _name('shor') typeSInt32 = _name('long') typeUInt32 = _name('magn') typeSInt64 = _name('comp') typeIEEE32BitFloatingPoint = _name('sing') typeIEEE64BitFloatingPoint = _name('doub') type128BitFloatingPoint = _name('ldbl') typeDecimalStruct = _name('decm') # AERegistry.h typeUnicodeText = _name('utxt') typeStyledUnicodeText = _name('sutx') typeUTF8Text = _name('utf8') typeEncodedString = _name('encs') typeCString = _name('cstr') typePString = _name('pstr') typeEventRef = _name('evrf') # CarbonEvents.h kEventParamWindowRef = _name('wind') kEventParamWindowPartCode = _name('wpar') kEventParamGrafPort = _name('graf') kEventParamMenuRef = _name('menu') kEventParamEventRef = _name('evnt') kEventParamControlRef = _name('ctrl') kEventParamRgnHandle = _name('rgnh') kEventParamEnabled = _name('enab') kEventParamDimensions = _name('dims') kEventParamBounds = _name('boun') kEventParamAvailableBounds = _name('avlb') #kEventParamAEEventID = keyAEEventID #kEventParamAEEventClass = keyAEEventClass kEventParamCGContextRef = _name('cntx') kEventParamDeviceDepth = _name('devd') kEventParamDeviceColor = _name('devc') kEventParamMutableArray = _name('marr') kEventParamResult = _name('ansr') kEventParamMinimumSize = _name('mnsz') kEventParamMaximumSize = _name('mxsz') kEventParamAttributes = _name('attr') kEventParamReason = _name('why?') kEventParamTransactionID = _name('trns') kEventParamGDevice = _name('gdev') kEventParamIndex = _name('indx') kEventParamUserData = _name('usrd') kEventParamShape = _name('shap') typeWindowRef = _name('wind') typeWindowPartCode = _name('wpar') typeGrafPtr = _name('graf') typeGWorldPtr = _name('gwld') typeMenuRef = _name('menu') typeControlRef = _name('ctrl') typeCollection = _name('cltn') typeQDRgnHandle = _name('rgnh') typeOSStatus = _name('osst') typeCFIndex = _name('cfix') typeCGContextRef = _name('cntx') typeQDPoint = _name('QDpt') typeHICommand = _name('hcmd') typeHIPoint = _name('hipt') typeHISize = _name('hisz') typeHIRect = _name('hirc') typeHIShapeRef = _name('shap') typeVoidPtr = _name('void') typeGDHandle = _name('gdev') kCoreEventClass = _name('aevt') kEventClassMouse = _name('mous') kEventClassKeyboard = _name('keyb') kEventClassTextInput = _name('text') kEventClassApplication = _name('appl') kEventClassAppleEvent = _name('eppc') kEventClassMenu = _name('menu') kEventClassWindow = _name('wind') kEventClassControl = _name('cntl') kEventClassCommand = _name('cmds') kEventClassTablet = _name('tblt') kEventClassVolume = _name('vol ') kEventClassAppearance = _name('appm') kEventClassService = _name('serv') kEventClassToolbar = _name('tbar') kEventClassToolbarItem = _name('tbit') kEventClassToolbarItemView = _name('tbiv') kEventClassAccessibility = _name('acce') kEventClassSystem = _name('macs') kEventClassInk = _name('ink ') kEventClassTSMDocumentAccess = _name('tdac') kEventDurationForever = -1.0 # Appearance.h kThemeArrowCursor = 0 kThemeCopyArrowCursor = 1 kThemeAliasArrowCursor = 2 kThemeContextualMenuArrowCursor = 3 kThemeIBeamCursor = 4 kThemeCrossCursor = 5 kThemePlusCursor = 6 kThemeWatchCursor = 7 kThemeClosedHandCursor = 8 kThemeOpenHandCursor = 9 kThemePointingHandCursor = 10 kThemeCountingUpHandCursor = 11 kThemeCountingDownHandCursor = 12 kThemeCountingUpAndDownHandCursor = 13 kThemeSpinningCursor = 14 kThemeResizeLeftCursor = 15 kThemeResizeRightCursor = 16 kThemeResizeLeftRightCursor = 17 kThemeNotAllowedCursor = 18 kThemeResizeUpCursor = 19 kThemeResizeDownCursor = 20 kThemeResizeUpDownCursor = 21 kThemePoofCursor = 22 # AE kEventAppleEvent = 1 kEventAppQuit = 3 kAEQuitApplication = _name('quit') # Commands kEventProcessCommand = 1 kEventParamHICommand = _name('hcmd') kEventParamDirectObject = _name('----') kHICommandQuit = _name('quit') # Keyboard kEventRawKeyDown = 1 kEventRawKeyRepeat = 2 kEventRawKeyUp = 3 kEventRawKeyModifiersChanged = 4 kEventHotKeyPressed = 5 kEventHotKeyReleased = 6 kEventParamKeyCode = _name('kcod') kEventParamKeyMacCharCodes = _name('kchr') kEventParamKeyModifiers = _name('kmod') kEventParamKeyUnicodes = _name('kuni') kEventParamKeyboardType = _name('kbdt') typeEventHotKeyID = _name('hkid') activeFlagBit = 0 btnStateBit = 7 cmdKeyBit = 8 shiftKeyBit = 9 alphaLockBit = 10 optionKeyBit = 11 controlKeyBit = 12 rightShiftKeyBit = 13 rightOptionKeyBit = 14 rightControlKeyBit = 15 numLockBit = 16 activeFlag = 1 << activeFlagBit btnState = 1 << btnStateBit cmdKey = 1 << cmdKeyBit shiftKey = 1 << shiftKeyBit alphaLock = 1 << alphaLockBit optionKey = 1 << optionKeyBit controlKey = 1 << controlKeyBit rightShiftKey = 1 << rightShiftKeyBit rightOptionKey = 1 << rightOptionKeyBit rightControlKey = 1 << rightControlKeyBit numLock = 1 << numLockBit # TextInput kEventTextInputUpdateActiveInputArea = 1 kEventTextInputUnicodeForKeyEvent = 2 kEventTextInputOffsetToPos = 3 kEventTextInputPosToOffset = 4 kEventTextInputShowHideBottomWindow = 5 kEventTextInputGetSelectedText = 6 kEventTextInputUnicodeText = 7 kEventParamTextInputSendText = _name('tstx') kEventParamTextInputSendKeyboardEvent = _name('tske') # Mouse kEventMouseDown = 1 kEventMouseUp = 2 kEventMouseMoved = 5 kEventMouseDragged = 6 kEventMouseEntered = 8 kEventMouseExited = 9 kEventMouseWheelMoved = 10 kEventParamMouseLocation = _name('mloc') kEventParamWindowMouseLocation = _name('wmou') kEventParamMouseButton = _name('mbtn') kEventParamClickCount = _name('ccnt') kEventParamMouseWheelAxis = _name('mwax') kEventParamMouseWheelDelta = _name('mwdl') kEventParamMouseDelta = _name('mdta') kEventParamMouseChord = _name('chor') kEventParamTabletEventType = _name('tblt') kEventParamMouseTrackingRef = _name('mtrf') typeMouseButton = _name('mbtn') typeMouseWheelAxis = _name('mwax') typeMouseTrackingRef = _name('mtrf') kMouseTrackingOptionsLocalClip = 0 kMouseTrackingOptionsGlobalClip = 1 kEventMouseButtonPrimary = 1 kEventMouseButtonSecondary = 2 kEventMouseButtonTertiary = 3 kEventMouseWheelAxisX = 0 kEventMouseWheelAxisY = 1 DEFAULT_CREATOR_CODE = _name('PYGL') # this is registered for Pyglet # apps. register your own at: # http://developer.apple.com/datatype # Window kEventWindowUpdate = 1 kEventWindowDrawContent = 2 # -- window activation events -- kEventWindowActivated = 5 kEventWindowDeactivated = 6 kEventWindowHandleActivate = 91 kEventWindowHandleDeactivate = 92 kEventWindowGetClickActivation = 7 kEventWindowGetClickModality = 8 # -- window state change events -- kEventWindowShowing = 22 kEventWindowHiding = 23 kEventWindowShown = 24 kEventWindowHidden = 25 kEventWindowCollapsing = 86 kEventWindowCollapsed = 67 kEventWindowExpanding = 87 kEventWindowExpanded = 70 kEventWindowZoomed = 76 kEventWindowBoundsChanging = 26 kEventWindowBoundsChanged = 27 kEventWindowResizeStarted = 28 kEventWindowResizeCompleted = 29 kEventWindowDragStarted = 30 kEventWindowDragCompleted = 31 kEventWindowClosed = 73 kEventWindowTransitionStarted = 88 kEventWindowTransitionCompleted = 89 # -- window click events -- kEventWindowClickDragRgn = 32 kEventWindowClickResizeRgn = 33 kEventWindowClickCollapseRgn = 34 kEventWindowClickCloseRgn = 35 kEventWindowClickZoomRgn = 36 kEventWindowClickContentRgn = 37 kEventWindowClickProxyIconRgn = 38 kEventWindowClickToolbarButtonRgn = 41 kEventWindowClickStructureRgn = 42 # -- window cursor change events -- kEventWindowCursorChange = 40 # -- window action events -- kEventWindowCollapse = 66 kEventWindowCollapsed = 67 kEventWindowCollapseAll = 68 kEventWindowExpand = 69 kEventWindowExpanded = 70 kEventWindowExpandAll = 71 kEventWindowClose = 72 kEventWindowClosed = 73 kEventWindowCloseAll = 74 kEventWindowZoom = 75 kEventWindowZoomed = 76 kEventWindowZoomAll = 77 kEventWindowContextualMenuSelect = 78 kEventWindowPathSelect = 79 kEventWindowGetIdealSize = 80 kEventWindowGetMinimumSize = 81 kEventWindowGetMaximumSize = 82 kEventWindowConstrain = 83 kEventWindowHandleContentClick = 85 kEventWindowCollapsing = 86 kEventWindowExpanding = 87 kEventWindowTransitionStarted = 88 kEventWindowTransitionCompleted = 89 kEventWindowGetDockTileMenu = 90 kEventWindowHandleActivate = 91 kEventWindowHandleDeactivate = 92 kEventWindowProxyBeginDrag = 128 kEventWindowProxyEndDrag = 129 kEventWindowToolbarSwitchMode = 150 # -- window focus events -- kEventWindowFocusAcquired = 200 kEventWindowFocusRelinquish = 201 kEventWindowFocusContent = 202 kEventWindowFocusToolbar = 203 kEventWindowFocusDrawer = 204 # -- sheet events -- kEventWindowSheetOpening = 210 kEventWindowSheetOpened = 211 kEventWindowSheetClosing = 212 kEventWindowSheetClosed = 213 # -- drawer events -- kEventWindowDrawerOpening = 220 kEventWindowDrawerOpened = 221 kEventWindowDrawerClosing = 222 kEventWindowDrawerClosed = 223 # -- window definition events -- kEventWindowDrawFrame = 1000 kEventWindowDrawPart = 1001 kEventWindowGetRegion = 1002 kEventWindowHitTest = 1003 kEventWindowInit = 1004 kEventWindowDispose = 1005 kEventWindowDragHilite = 1006 kEventWindowModified = 1007 kEventWindowSetupProxyDragImage = 1008 kEventWindowStateChanged = 1009 kEventWindowMeasureTitle = 1010 kEventWindowDrawGrowBox = 1011 kEventWindowGetGrowImageRegion = 1012 kEventWindowPaint = 1013 # Process.h kNoProcess = 0 kSystemProcess = 1 kCurrentProcess = 2 # CGColorSpace.h kCGRenderingIntentDefault = 0 # CGImage.h kCGImageAlphaNone = 0 kCGImageAlphaPremultipliedLast = 1 kCGImageAlphaPremultipliedFirst = 2 kCGImageAlphaLast = 3 kCGImageAlphaFirst = 4 kCGImageAlphaNoneSkipLast = 5 kCGImageAlphaNoneSkipFirst = 6 kCGImageAlphaOnly = 7 pyglet-1.1.4/pyglet/window/carbon/types.py0000600013464101346420000001005211317241561017002 0ustar yohyoh# ---------------------------------------------------------------------------- # 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.gl.agl agl = pyglet.gl.agl Boolean = c_ubyte # actually an unsigned char Fixed = c_int32 ItemCount = c_uint32 ByteOffset = ByteCount = c_uint32 GDHandle = agl.GDHandle class Rect(Structure): _fields_ = [ ('top', c_short), ('left', c_short), ('bottom', c_short), ('right', c_short) ] class Point(Structure): _fields_ = [ ('v', c_short), ('h', c_short), ] class CGPoint(Structure): _fields_ = [ ('x', c_float), ('y', c_float), ] class CGSize(Structure): _fields_ = [ ('width', c_float), ('height', c_float) ] class CGRect(Structure): _fields_ = [ ('origin', CGPoint), ('size', CGSize) ] __slots__ = ['origin', 'size'] CGDirectDisplayID = c_void_p CGDisplayCount = c_uint32 CGTableCount = c_uint32 CGDisplayCoord = c_int32 CGByteValue = c_ubyte CGOpenGLDisplayMask = c_uint32 CGRefreshRate = c_double CGCaptureOptions = c_uint32 HIPoint = CGPoint HISize = CGSize HIRect = CGRect class EventTypeSpec(Structure): _fields_ = [ ('eventClass', c_uint32), ('eventKind', c_uint32) ] WindowRef = c_void_p EventRef = c_void_p EventTargetRef = c_void_p EventHandlerRef = c_void_p MenuRef = c_void_p MenuID = c_int16 MenuItemIndex = c_uint16 MenuCommand = c_uint32 CFStringEncoding = c_uint WindowClass = c_uint32 WindowAttributes = c_uint32 WindowPositionMethod = c_uint32 EventMouseButton = c_uint16 EventMouseWheelAxis = c_uint16 OSType = c_uint32 OSStatus = c_int32 class MouseTrackingRegionID(Structure): _fields_ = [('signature', OSType), ('id', c_int32)] MouseTrackingRef = c_void_p RgnHandle = c_void_p class ProcessSerialNumber(Structure): _fields_ = [('highLongOfPSN', c_uint32), ('lowLongOfPSN', c_uint32)] class HICommand_Menu(Structure): _fields_ = [ ('menuRef', MenuRef), ('menuItemIndex', MenuItemIndex), ] class HICommand(Structure): _fields_ = [ ('attributes', c_uint32), ('commandID', c_uint32), ('menu', HICommand_Menu) ] class EventRecord(Structure): _fields_ = [ ('what', c_uint16), ('message', c_uint32), ('when', c_uint32), ('where', Point), ('modifiers', c_uint16) ] pyglet-1.1.4/pyglet/window/carbon/quartzkey.py0000600013464101346420000001400311317241561017675 0ustar yohyoh# ---------------------------------------------------------------------------- # 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__ = '' from pyglet.window import key # From SDL: src/video/quartz/SDL_QuartzKeys.h # These are the Macintosh key scancode constants -- from Inside Macintosh QZ_ESCAPE = 0x35 QZ_F1 = 0x7A QZ_F2 = 0x78 QZ_F3 = 0x63 QZ_F4 = 0x76 QZ_F5 = 0x60 QZ_F6 = 0x61 QZ_F7 = 0x62 QZ_F8 = 0x64 QZ_F9 = 0x65 QZ_F10 = 0x6D QZ_F11 = 0x67 QZ_F12 = 0x6F QZ_PRINT = 0x69 QZ_SCROLLOCK = 0x6B QZ_PAUSE = 0x71 QZ_POWER = 0x7F QZ_BACKQUOTE = 0x32 QZ_1 = 0x12 QZ_2 = 0x13 QZ_3 = 0x14 QZ_4 = 0x15 QZ_5 = 0x17 QZ_6 = 0x16 QZ_7 = 0x1A QZ_8 = 0x1C QZ_9 = 0x19 QZ_0 = 0x1D QZ_MINUS = 0x1B QZ_EQUALS = 0x18 QZ_BACKSPACE = 0x33 QZ_INSERT = 0x72 QZ_HOME = 0x73 QZ_PAGEUP = 0x74 QZ_NUMLOCK = 0x47 QZ_KP_EQUALS = 0x51 QZ_KP_DIVIDE = 0x4B QZ_KP_MULTIPLY = 0x43 QZ_TAB = 0x30 QZ_q = 0x0C QZ_w = 0x0D QZ_e = 0x0E QZ_r = 0x0F QZ_t = 0x11 QZ_y = 0x10 QZ_u = 0x20 QZ_i = 0x22 QZ_o = 0x1F QZ_p = 0x23 QZ_LEFTBRACKET = 0x21 QZ_RIGHTBRACKET = 0x1E QZ_BACKSLASH = 0x2A QZ_DELETE = 0x75 QZ_END = 0x77 QZ_PAGEDOWN = 0x79 QZ_KP7 = 0x59 QZ_KP8 = 0x5B QZ_KP9 = 0x5C QZ_KP_MINUS = 0x4E QZ_CAPSLOCK = 0x39 QZ_a = 0x00 QZ_s = 0x01 QZ_d = 0x02 QZ_f = 0x03 QZ_g = 0x05 QZ_h = 0x04 QZ_j = 0x26 QZ_k = 0x28 QZ_l = 0x25 QZ_SEMICOLON = 0x29 QZ_QUOTE = 0x27 QZ_RETURN = 0x24 QZ_KP4 = 0x56 QZ_KP5 = 0x57 QZ_KP6 = 0x58 QZ_KP_PLUS = 0x45 QZ_LSHIFT = 0x38 QZ_z = 0x06 QZ_x = 0x07 QZ_c = 0x08 QZ_v = 0x09 QZ_b = 0x0B QZ_n = 0x2D QZ_m = 0x2E QZ_COMMA = 0x2B QZ_PERIOD = 0x2F QZ_SLASH = 0x2C QZ_RSHIFT = 0x3C QZ_UP = 0x7E QZ_KP1 = 0x53 QZ_KP2 = 0x54 QZ_KP3 = 0x55 QZ_KP_ENTER = 0x4C QZ_LCTRL = 0x3B QZ_LALT = 0x3A QZ_LMETA = 0x37 QZ_SPACE = 0x31 QZ_RMETA = 0x36 QZ_RALT = 0x3D QZ_RCTRL = 0x3E QZ_LEFT = 0x7B QZ_DOWN = 0x7D QZ_RIGHT = 0x7C QZ_KP0 = 0x52 QZ_KP_PERIOD = 0x41 QZ_IBOOK_ENTER = 0x34 QZ_IBOOK_LEFT = 0x3B QZ_IBOOK_RIGHT = 0x3C QZ_IBOOK_DOWN = 0x3D QZ_IBOOK_UP = 0x3E keymap = { QZ_ESCAPE: key.ESCAPE, QZ_F1: key.F1, QZ_F2: key.F2, QZ_F3: key.F3, QZ_F4: key.F4, QZ_F5: key.F5, QZ_F6: key.F6, QZ_F7: key.F7, QZ_F8: key.F8, QZ_F9: key.F9, QZ_F10: key.F10, QZ_F11: key.F11, QZ_F12: key.F12, QZ_PRINT: key.PRINT, QZ_SCROLLOCK: key.SCROLLLOCK, QZ_PAUSE: key.PAUSE, #QZ_POWER: key.POWER, QZ_BACKQUOTE: key.QUOTELEFT, QZ_1: key._1, QZ_2: key._2, QZ_3: key._3, QZ_4: key._4, QZ_5: key._5, QZ_6: key._6, QZ_7: key._7, QZ_8: key._8, QZ_9: key._9, QZ_0: key._0, QZ_MINUS: key.MINUS, QZ_EQUALS: key.EQUAL, QZ_BACKSPACE: key.BACKSPACE, QZ_INSERT: key.INSERT, QZ_HOME: key.HOME, QZ_PAGEUP: key.PAGEUP, QZ_NUMLOCK: key.NUMLOCK, QZ_KP_EQUALS: key.NUM_EQUAL, QZ_KP_DIVIDE: key.NUM_DIVIDE, QZ_KP_MULTIPLY: key.NUM_MULTIPLY, QZ_TAB: key.TAB, QZ_q: key.Q, QZ_w: key.W, QZ_e: key.E, QZ_r: key.R, QZ_t: key.T, QZ_y: key.Y, QZ_u: key.U, QZ_i: key.I, QZ_o: key.O, QZ_p: key.P, QZ_LEFTBRACKET: key.BRACKETLEFT, QZ_RIGHTBRACKET: key.BRACKETRIGHT, QZ_BACKSLASH: key.BACKSLASH, QZ_DELETE: key.DELETE, QZ_END: key.END, QZ_PAGEDOWN: key.PAGEDOWN, QZ_KP7: key.NUM_7, QZ_KP8: key.NUM_8, QZ_KP9: key.NUM_9, QZ_KP_MINUS: key.NUM_SUBTRACT, QZ_CAPSLOCK: key.CAPSLOCK, QZ_a: key.A, QZ_s: key.S, QZ_d: key.D, QZ_f: key.F, QZ_g: key.G, QZ_h: key.H, QZ_j: key.J, QZ_k: key.K, QZ_l: key.L, QZ_SEMICOLON: key.SEMICOLON, QZ_QUOTE: key.APOSTROPHE, QZ_RETURN: key.RETURN, QZ_KP4: key.NUM_4, QZ_KP5: key.NUM_5, QZ_KP6: key.NUM_6, QZ_KP_PLUS: key.NUM_ADD, QZ_LSHIFT: key.LSHIFT, QZ_z: key.Z, QZ_x: key.X, QZ_c: key.C, QZ_v: key.V, QZ_b: key.B, QZ_n: key.N, QZ_m: key.M, QZ_COMMA: key.COMMA, QZ_PERIOD: key.PERIOD, QZ_SLASH: key.SLASH, QZ_RSHIFT: key.RSHIFT, QZ_UP: key.UP, QZ_KP1: key.NUM_1, QZ_KP2: key.NUM_2, QZ_KP3: key.NUM_3, QZ_KP_ENTER: key.NUM_ENTER, QZ_LCTRL: key.LCTRL, QZ_LALT: key.LALT, QZ_LMETA: key.LMETA, QZ_SPACE: key.SPACE, QZ_RMETA: key.RMETA, QZ_RALT: key.RALT, QZ_RCTRL: key.RCTRL, QZ_LEFT: key.LEFT, QZ_DOWN: key.DOWN, QZ_RIGHT: key.RIGHT, QZ_KP0: key.NUM_0, QZ_KP_PERIOD: key.NUM_DECIMAL, QZ_IBOOK_ENTER: key.ENTER, QZ_IBOOK_LEFT: key.LEFT, QZ_IBOOK_RIGHT: key.RIGHT, QZ_IBOOK_DOWN: key.DOWN, QZ_IBOOK_UP: key.UP, } pyglet-1.1.4/pyglet/window/carbon/__init__.py0000600013464101346420000014331411317241561017405 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 os.path import unicodedata import warnings import pyglet from pyglet.window import WindowException, Platform, Display, Screen, \ BaseWindow, MouseCursor, DefaultMouseCursor, _PlatformEventHandler from pyglet.window import key from pyglet.window import mouse from pyglet.window import event from pyglet.window.carbon.constants import * from pyglet.window.carbon.types import * from pyglet.window.carbon.quartzkey import keymap import pyglet.lib from pyglet import gl from pyglet.gl import agl from pyglet.gl import gl_info from pyglet.gl import glu_info from pyglet.event import EventDispatcher class CarbonException(WindowException): pass carbon = pyglet.lib.load_library( framework='/System/Library/Frameworks/Carbon.framework') quicktime = pyglet.lib.load_library( framework='/System/Library/Frameworks/QuickTime.framework') carbon.GetEventDispatcherTarget.restype = EventTargetRef carbon.ReceiveNextEvent.argtypes = \ [c_uint32, c_void_p, c_double, c_ubyte, POINTER(EventRef)] carbon.GetWindowPort.restype = agl.AGLDrawable EventHandlerProcPtr = CFUNCTYPE(c_int, c_int, c_void_p, c_void_p) carbon.NewEventHandlerUPP.restype = c_void_p carbon.GetCurrentKeyModifiers = c_uint32 carbon.NewRgn.restype = RgnHandle carbon.CGDisplayBounds.argtypes = [c_void_p] carbon.CGDisplayBounds.restype = CGRect # Map symbol,modifiers -> motion # Determined by experiment with TextEdit.app _motion_map = { (key.UP, False): key.MOTION_UP, (key.RIGHT, False): key.MOTION_RIGHT, (key.DOWN, False): key.MOTION_DOWN, (key.LEFT, False): key.MOTION_LEFT, (key.LEFT, key.MOD_OPTION): key.MOTION_PREVIOUS_WORD, (key.RIGHT, key.MOD_OPTION): key.MOTION_NEXT_WORD, (key.LEFT, key.MOD_COMMAND): key.MOTION_BEGINNING_OF_LINE, (key.RIGHT, key.MOD_COMMAND): key.MOTION_END_OF_LINE, (key.PAGEUP, False): key.MOTION_PREVIOUS_PAGE, (key.PAGEDOWN, False): key.MOTION_NEXT_PAGE, (key.HOME, False): key.MOTION_BEGINNING_OF_FILE, (key.END, False): key.MOTION_END_OF_FILE, (key.UP, key.MOD_COMMAND): key.MOTION_BEGINNING_OF_FILE, (key.DOWN, key.MOD_COMMAND): key.MOTION_END_OF_FILE, (key.BACKSPACE, False): key.MOTION_BACKSPACE, (key.DELETE, False): key.MOTION_DELETE, } class CarbonPlatform(Platform): _display = None def get_default_display(self): if not self._display: self._display = CarbonDisplay() return self._display class CarbonDisplay(Display): # TODO: CarbonDisplay could be per display device, which would make # reporting of screens and available configs more accurate. The number of # Macs with more than one video card is probably small, though. def __init__(self): super(CarbonDisplay, self).__init__() import MacOS if not MacOS.WMAvailable(): raise CarbonException('Window manager is not available. ' \ 'Ensure you run "pythonw", not "python"') self._install_application_event_handlers() def get_screens(self): count = CGDisplayCount() carbon.CGGetActiveDisplayList(0, None, byref(count)) displays = (CGDirectDisplayID * count.value)() carbon.CGGetActiveDisplayList(count.value, displays, byref(count)) return [CarbonScreen(self, id) for id in displays] def _install_application_event_handlers(self): self._carbon_event_handlers = [] self._carbon_event_handler_refs = [] target = carbon.GetApplicationEventTarget() # TODO something with a metaclass or hacky like CarbonWindow # to make this list extensible handlers = [ (self._on_mouse_down, kEventClassMouse, kEventMouseDown), (self._on_apple_event, kEventClassAppleEvent, kEventAppleEvent), (self._on_command, kEventClassCommand, kEventProcessCommand), ] ae_handlers = [ (self._on_ae_quit, kCoreEventClass, kAEQuitApplication), ] # Install the application-wide handlers for method, cls, event in handlers: proc = EventHandlerProcPtr(method) self._carbon_event_handlers.append(proc) upp = carbon.NewEventHandlerUPP(proc) types = EventTypeSpec() types.eventClass = cls types.eventKind = event handler_ref = EventHandlerRef() carbon.InstallEventHandler( target, upp, 1, byref(types), c_void_p(), byref(handler_ref)) self._carbon_event_handler_refs.append(handler_ref) # Install Apple event handlers for method, cls, event in ae_handlers: proc = EventHandlerProcPtr(method) self._carbon_event_handlers.append(proc) upp = carbon.NewAEEventHandlerUPP(proc) carbon.AEInstallEventHandler( cls, event, upp, 0, False) def _on_command(self, next_handler, ev, data): command = HICommand() carbon.GetEventParameter(ev, kEventParamDirectObject, typeHICommand, c_void_p(), sizeof(command), c_void_p(), byref(command)) if command.commandID == kHICommandQuit: self._on_quit() return noErr def _on_mouse_down(self, next_handler, ev, data): # Check for menubar hit position = Point() carbon.GetEventParameter(ev, kEventParamMouseLocation, typeQDPoint, c_void_p(), sizeof(position), c_void_p(), byref(position)) if carbon.FindWindow(position, None) == inMenuBar: # Mouse down in menu bar. MenuSelect() takes care of all # menu tracking and blocks until the menu is dismissed. # Use command events to handle actual menu item invokations. # This function blocks, so tell the event loop it needs to install # a timer. from pyglet import app if app.event_loop is not None: app.event_loop._enter_blocking() carbon.MenuSelect(position) if app.event_loop is not None: app.event_loop._exit_blocking() # Menu selection has now returned. Remove highlight from the # menubar. carbon.HiliteMenu(0) carbon.CallNextEventHandler(next_handler, ev) return noErr def _on_apple_event(self, next_handler, ev, data): # Somewhat involved way of redispatching Apple event contained # within a Carbon event, described in # http://developer.apple.com/documentation/AppleScript/ # Conceptual/AppleEvents/dispatch_aes_aepg/chapter_4_section_3.html release = False if carbon.IsEventInQueue(carbon.GetMainEventQueue(), ev): carbon.RetainEvent(ev) release = True carbon.RemoveEventFromQueue(carbon.GetMainEventQueue(), ev) ev_record = EventRecord() carbon.ConvertEventRefToEventRecord(ev, byref(ev_record)) carbon.AEProcessAppleEvent(byref(ev_record)) if release: carbon.ReleaseEvent(ev) return noErr def _on_ae_quit(self, ae, reply, refcon): self._on_quit() return noErr def _on_quit(self): '''Called when the user tries to quit the application. This is not an actual event handler, it is called in response to Command+Q, the Quit menu item, and the Dock context menu's Quit item. The default implementation sets `has_exit` to true on all open windows. In pyglet 1.1 `has_exit` is set on `EventLoop` if it is used instead of the windows. ''' from pyglet import app if app.event_loop is not None: app.event_loop.exit() else: for window in self.get_windows(): window.has_exit = True class CarbonScreen(Screen): def __init__(self, display, id): self.display = display rect = carbon.CGDisplayBounds(id) super(CarbonScreen, self).__init__( int(rect.origin.x), int(rect.origin.y), int(rect.size.width), int(rect.size.height)) self.id = id mode = carbon.CGDisplayCurrentMode(id) kCGDisplayRefreshRate = _create_cfstring('RefreshRate') number = carbon.CFDictionaryGetValue(mode, kCGDisplayRefreshRate) refresh = c_long() kCFNumberLongType = 10 carbon.CFNumberGetValue(number, kCFNumberLongType, byref(refresh)) self._refresh_rate = refresh.value def get_gdevice(self): gdevice = GDHandle() r = carbon.DMGetGDeviceByDisplayID(self.id, byref(gdevice), False) _oscheck(r) return gdevice def get_matching_configs(self, template): # Construct array of attributes for aglChoosePixelFormat attrs = [] for name, value in template.get_gl_attributes(): attr = CarbonGLConfig._attribute_ids.get(name, None) if not attr or not value: continue attrs.append(attr) if attr not in CarbonGLConfig._boolean_attributes: attrs.append(int(value)) # Support for RAGE-II, which is not compliant attrs.append(agl.AGL_ALL_RENDERERS) # Force selection policy and RGBA attrs.append(agl.AGL_MAXIMUM_POLICY) attrs.append(agl.AGL_RGBA) # In 10.3 and later, AGL_FULLSCREEN is specified so the window can # be toggled to/from fullscreen without losing context. pyglet # no longer supports earlier versions of OS X, so we always supply it. attrs.append(agl.AGL_FULLSCREEN) # Terminate the list. attrs.append(agl.AGL_NONE) attrib_list = (c_int * len(attrs))(*attrs) device = self.get_gdevice() pformat = agl.aglChoosePixelFormat(device, 1, attrib_list) _aglcheck() if not pformat: return [] else: return [CarbonGLConfig(self, pformat)] class CarbonGLConfig(gl.Config): # Valid names for GL attributes, and their corresponding AGL constant. _attribute_ids = { 'double_buffer': agl.AGL_DOUBLEBUFFER, 'stereo': agl.AGL_STEREO, 'buffer_size': agl.AGL_BUFFER_SIZE, 'sample_buffers': agl.AGL_SAMPLE_BUFFERS_ARB, 'samples': agl.AGL_SAMPLES_ARB, 'aux_buffers': agl.AGL_AUX_BUFFERS, 'red_size': agl.AGL_RED_SIZE, 'green_size': agl.AGL_GREEN_SIZE, 'blue_size': agl.AGL_BLUE_SIZE, 'alpha_size': agl.AGL_ALPHA_SIZE, 'depth_size': agl.AGL_DEPTH_SIZE, 'stencil_size': agl.AGL_STENCIL_SIZE, 'accum_red_size': agl.AGL_ACCUM_RED_SIZE, 'accum_green_size': agl.AGL_ACCUM_GREEN_SIZE, 'accum_blue_size': agl.AGL_ACCUM_BLUE_SIZE, 'accum_alpha_size': agl.AGL_ACCUM_ALPHA_SIZE, # Not exposed by pyglet API (set internally) 'all_renderers': agl.AGL_ALL_RENDERERS, 'rgba': agl.AGL_RGBA, 'fullscreen': agl.AGL_FULLSCREEN, 'minimum_policy': agl.AGL_MINIMUM_POLICY, 'maximum_policy': agl.AGL_MAXIMUM_POLICY, # Not supported in current pyglet API 'level': agl.AGL_LEVEL, 'pixel_size': agl.AGL_PIXEL_SIZE, # == buffer_size 'aux_depth_stencil': agl.AGL_AUX_DEPTH_STENCIL, 'color_float': agl.AGL_COLOR_FLOAT, 'offscreen': agl.AGL_OFFSCREEN, 'sample_alpha': agl.AGL_SAMPLE_ALPHA, 'multisample': agl.AGL_MULTISAMPLE, 'supersample': agl.AGL_SUPERSAMPLE, } # AGL constants which do not require a value. _boolean_attributes = \ (agl.AGL_ALL_RENDERERS, agl.AGL_RGBA, agl.AGL_DOUBLEBUFFER, agl.AGL_STEREO, agl.AGL_MINIMUM_POLICY, agl.AGL_MAXIMUM_POLICY, agl.AGL_OFFSCREEN, agl.AGL_FULLSCREEN, agl.AGL_AUX_DEPTH_STENCIL, agl.AGL_COLOR_FLOAT, agl.AGL_MULTISAMPLE, agl.AGL_SUPERSAMPLE, agl.AGL_SAMPLE_ALPHA) def __init__(self, screen, pformat): super(CarbonGLConfig, self).__init__() self.screen = screen self._pformat = pformat self._attributes = {} for name, attr in self._attribute_ids.items(): value = c_int() result = agl.aglDescribePixelFormat(pformat, attr, byref(value)) if result: setattr(self, name, value.value) def create_context(self, share): if share: context = agl.aglCreateContext(self._pformat, share._context) else: context = agl.aglCreateContext(self._pformat, None) _aglcheck() return CarbonGLContext(self, context, share, self._pformat) class CarbonGLContext(gl.Context): def __init__(self, config, context, share, pixelformat): super(CarbonGLContext, self).__init__(share) self.config = config self._context = context self._pixelformat = pixelformat def destroy(self): super(CarbonGLContext, self).destroy() agl.aglDestroyContext(self._context) class CarbonMouseCursor(MouseCursor): drawable = False def __init__(self, theme): self.theme = theme def CarbonEventHandler(event_class, event_kind): return _PlatformEventHandler((event_class, event_kind)) class CarbonWindow(BaseWindow): _window = None # Carbon WindowRef _agl_context = None # AGL context ID _recreate_deferred = None # Window properties _minimum_size = None _maximum_size = None _fullscreen_restore = None _event_dispatcher = None _current_modifiers = 0 _mapped_modifers = 0 _carbon_event_handlers = [] _carbon_event_handler_refs = [] _track_ref = 0 _track_region = None _mouse_exclusive = False _mouse_platform_visible = True _mouse_ignore_motion = False def _recreate(self, changes): # We can't destroy the window while event handlers are active, # otherwise the (OS X) event dispatcher gets lost and segfaults. # # Defer actual recreation until dispatch_events next finishes. self._recreate_deferred = changes def _recreate_immediate(self): # The actual _recreate function. changes = self._recreate_deferred self._recreate_deferred = None if ('context' in changes): agl.aglSetDrawable(self._agl_context, None) if ('fullscreen' in changes and not self._fullscreen and self._fullscreen_restore): # Leaving fullscreen -- destroy everything before the window. self._remove_track_region() self._remove_event_handlers() agl.aglSetDrawable(self._agl_context, None) # EndFullScreen disposes _window. quicktime.EndFullScreen(self._fullscreen_restore, 0) self._window = None self._create() def _create(self): self._agl_context = self.context._context if self._window: # The window is about to be recreated; destroy everything # associated with the old window, then the window itself. self._remove_track_region() self._remove_event_handlers() agl.aglSetDrawable(self._agl_context, None) carbon.DisposeWindow(self._window) self._window = None self._window = WindowRef() if self._fullscreen: # Switch to fullscreen mode with QuickTime fs_width = c_short(0) fs_height = c_short(0) self._fullscreen_restore = c_void_p() quicktime.BeginFullScreen(byref(self._fullscreen_restore), self.screen.get_gdevice(), byref(fs_width), byref(fs_height), byref(self._window), None, 0) # the following may be used for debugging if you have a second # monitor - only the main monitor will go fullscreen agl.aglEnable(self._agl_context, agl.AGL_FS_CAPTURE_SINGLE) self._width = fs_width.value self._height = fs_height.value #self._width = self.screen.width #self._height = self.screen.height agl.aglSetFullScreen(self._agl_context, self._width, self._height, self.screen._refresh_rate, 0) self._mouse_in_window = True self.dispatch_event('on_resize', self._width, self._height) self.dispatch_event('on_show') self.dispatch_event('on_expose') else: # Create floating window rect = Rect() location = None # TODO if location is not None: rect.left = location[0] rect.top = location[1] else: rect.top = rect.left = 0 rect.right = rect.left + self._width rect.bottom = rect.top + self._height styles = { self.WINDOW_STYLE_DEFAULT: (kDocumentWindowClass, kWindowCloseBoxAttribute | kWindowCollapseBoxAttribute), self.WINDOW_STYLE_DIALOG: (kDocumentWindowClass, kWindowCloseBoxAttribute), self.WINDOW_STYLE_TOOL: (kUtilityWindowClass, kWindowCloseBoxAttribute), self.WINDOW_STYLE_BORDERLESS: (kSimpleWindowClass, kWindowNoAttributes) } window_class, window_attributes = \ styles.get(self._style, kDocumentWindowClass) if self._resizable: window_attributes |= (kWindowFullZoomAttribute | kWindowLiveResizeAttribute | kWindowResizableAttribute) r = carbon.CreateNewWindow(window_class, window_attributes, byref(rect), byref(self._window)) _oscheck(r) if location is None: carbon.RepositionWindow(self._window, c_void_p(), kWindowCascadeOnMainScreen) agl.aglSetDrawable(self._agl_context, carbon.GetWindowPort(self._window)) _aglcheck() self.set_caption(self._caption) # Get initial state self._event_dispatcher = carbon.GetEventDispatcherTarget() self._current_modifiers = carbon.GetCurrentKeyModifiers().value self._mapped_modifiers = self._map_modifiers(self._current_modifiers) # (re)install Carbon event handlers self._install_event_handlers() self._create_track_region() self.switch_to() self.set_vsync(self._vsync) if self._visible: self.set_visible(True) def _create_track_region(self): self._remove_track_region() # Create a tracking region for the content part of the window # to receive enter/leave events. track_id = MouseTrackingRegionID() track_id.signature = DEFAULT_CREATOR_CODE track_id.id = 1 self._track_ref = MouseTrackingRef() self._track_region = carbon.NewRgn() carbon.GetWindowRegion(self._window, kWindowContentRgn, self._track_region) carbon.CreateMouseTrackingRegion(self._window, self._track_region, None, kMouseTrackingOptionsGlobalClip, track_id, None, None, byref(self._track_ref)) def _remove_track_region(self): if self._track_region: carbon.ReleaseMouseTrackingRegion(self._track_region) self._track_region = None def close(self): super(CarbonWindow, self).close() if not self._agl_context: return self._agl_context = None self._remove_event_handlers() self._remove_track_region() # Restore cursor visibility self.set_mouse_platform_visible(True) self.set_exclusive_mouse(False) if self._fullscreen: quicktime.EndFullScreen(self._fullscreen_restore, 0) else: carbon.DisposeWindow(self._window) self._window = None def switch_to(self): agl.aglSetCurrentContext(self._agl_context) self._context.set_current() _aglcheck() gl_info.set_active_context() glu_info.set_active_context() def flip(self): self.draw_mouse_cursor() agl.aglSwapBuffers(self._agl_context) _aglcheck() def _get_vsync(self): swap = c_long() agl.aglGetInteger(self._agl_context, agl.AGL_SWAP_INTERVAL, byref(swap)) return bool(swap.value) vsync = property(_get_vsync) # overrides BaseWindow property def set_vsync(self, vsync): if pyglet.options['vsync'] is not None: vsync = pyglet.options['vsync'] self._vsync = vsync # _recreate depends on this swap = c_long(int(vsync)) agl.aglSetInteger(self._agl_context, agl.AGL_SWAP_INTERVAL, byref(swap)) def dispatch_events(self): self._allow_dispatch_event = True while self._event_queue: EventDispatcher.dispatch_event(self, *self._event_queue.pop(0)) e = EventRef() result = carbon.ReceiveNextEvent(0, c_void_p(), 0, True, byref(e)) while result == noErr: carbon.SendEventToEventTarget(e, self._event_dispatcher) carbon.ReleaseEvent(e) if self._recreate_deferred: self._recreate_immediate() result = carbon.ReceiveNextEvent(0, c_void_p(), 0, True, byref(e)) self._allow_dispatch_event = False # Return value from ReceiveNextEvent can be ignored if not # noErr; we check here only to look for new bugs. # eventLoopQuitErr: the inner event loop was quit, see # http://lists.apple.com/archives/Carbon-dev/2006/Jun/msg00850.html # Can occur when mixing with other toolkits, e.g. Tk. # Fixes issue 180. if result not in (eventLoopTimedOutErr, eventLoopQuitErr): raise 'Error %d' % result def dispatch_pending_events(self): while self._event_queue: EventDispatcher.dispatch_event(self, *self._event_queue.pop(0)) if self._recreate_deferred: self._recreate_immediate() def set_caption(self, caption): self._caption = caption s = _create_cfstring(caption) carbon.SetWindowTitleWithCFString(self._window, s) carbon.CFRelease(s) def set_location(self, x, y): rect = Rect() carbon.GetWindowBounds(self._window, kWindowContentRgn, byref(rect)) rect.right += x - rect.left rect.bottom += y - rect.top rect.left = x rect.top = y carbon.SetWindowBounds(self._window, kWindowContentRgn, byref(rect)) def get_location(self): rect = Rect() carbon.GetWindowBounds(self._window, kWindowContentRgn, byref(rect)) return rect.left, rect.top def set_size(self, width, height): if self._fullscreen: raise WindowException('Cannot set size of fullscreen window.') rect = Rect() carbon.GetWindowBounds(self._window, kWindowContentRgn, byref(rect)) rect.right = rect.left + width rect.bottom = rect.top + height carbon.SetWindowBounds(self._window, kWindowContentRgn, byref(rect)) self._width = width self._height = height self.dispatch_event('on_resize', width, height) self.dispatch_event('on_expose') def get_size(self): if self._fullscreen: return self._width, self._height rect = Rect() carbon.GetWindowBounds(self._window, kWindowContentRgn, byref(rect)) return rect.right - rect.left, rect.bottom - rect.top def set_minimum_size(self, width, height): self._minimum_size = (width, height) minimum = HISize() minimum.width = width minimum.height = height if self._maximum_size: maximum = HISize() maximum.width, maximum.height = self._maximum_size maximum = byref(maximum) else: maximum = None carbon.SetWindowResizeLimits(self._window, byref(minimum), maximum) def set_maximum_size(self, width, height): self._maximum_size = (width, height) maximum = HISize() maximum.width = width maximum.height = height if self._minimum_size: minimum = HISize() minimum.width, minimum.height = self._minimum_size minimum = byref(minimum) else: minimum = None carbon.SetWindowResizeLimits(self._window, minimum, byref(maximum)) def activate(self): carbon.ActivateWindow(self._window, 1) # Also make the application the "front" application. TODO # maybe don't bring forward all of the application's windows? psn = ProcessSerialNumber() psn.highLongOfPSN = 0 psn.lowLongOfPSN = kCurrentProcess carbon.SetFrontProcess(byref(psn)) def set_visible(self, visible=True): self._visible = visible if visible: self.dispatch_event('on_resize', self._width, self._height) self.dispatch_event('on_show') carbon.ShowWindow(self._window) else: carbon.HideWindow(self._window) def minimize(self): self._mouse_in_window = False self.set_mouse_platform_visible() carbon.CollapseWindow(self._window, True) def maximize(self): # Maximum "safe" value, gets trimmed to screen size automatically. p = Point() p.v, p.h = 16000,16000 if not carbon.IsWindowInStandardState(self._window, byref(p), None): carbon.ZoomWindowIdeal(self._window, inZoomOut, byref(p)) def set_mouse_platform_visible(self, platform_visible=None): if platform_visible is None: platform_visible = self._mouse_visible and \ not self._mouse_exclusive and \ not self._mouse_cursor.drawable if not self._mouse_in_window: platform_visible = True if self._mouse_in_window and \ isinstance(self._mouse_cursor, CarbonMouseCursor): carbon.SetThemeCursor(self._mouse_cursor.theme) else: carbon.SetThemeCursor(kThemeArrowCursor) if self._mouse_platform_visible == platform_visible: return if platform_visible: carbon.ShowCursor() else: carbon.HideCursor() self._mouse_platform_visible = platform_visible def set_exclusive_mouse(self, exclusive=True): self._mouse_exclusive = exclusive if exclusive: # Move mouse to center of window rect = Rect() carbon.GetWindowBounds(self._window, kWindowContentRgn, byref(rect)) point = CGPoint() point.x = (rect.right + rect.left) / 2 point.y = (rect.bottom + rect.top) / 2 # Skip the next motion event, which would return a large delta. self._mouse_ignore_motion = True carbon.CGWarpMouseCursorPosition(point) carbon.CGAssociateMouseAndMouseCursorPosition(False) else: carbon.CGAssociateMouseAndMouseCursorPosition(True) self.set_mouse_platform_visible() def set_exclusive_keyboard(self, exclusive=True): if exclusive: # Note: power switch can also be disabled, with # kUIOptionDisableSessionTerminate. That seems # a little extreme though. carbon.SetSystemUIMode(kUIModeAllHidden, (kUIOptionDisableAppleMenu | kUIOptionDisableProcessSwitch | kUIOptionDisableForceQuit | kUIOptionDisableHide)) else: carbon.SetSystemUIMode(kUIModeNormal, 0) def get_system_mouse_cursor(self, name): if name == self.CURSOR_DEFAULT: return DefaultMouseCursor() themes = { self.CURSOR_CROSSHAIR: kThemeCrossCursor, self.CURSOR_HAND: kThemePointingHandCursor, self.CURSOR_HELP: kThemeArrowCursor, self.CURSOR_NO: kThemeNotAllowedCursor, self.CURSOR_SIZE: kThemeArrowCursor, self.CURSOR_SIZE_UP: kThemeResizeUpCursor, self.CURSOR_SIZE_UP_RIGHT: kThemeArrowCursor, self.CURSOR_SIZE_RIGHT: kThemeResizeRightCursor, self.CURSOR_SIZE_DOWN_RIGHT: kThemeArrowCursor, self.CURSOR_SIZE_DOWN: kThemeResizeDownCursor, self.CURSOR_SIZE_DOWN_LEFT: kThemeArrowCursor, self.CURSOR_SIZE_LEFT: kThemeResizeLeftCursor, self.CURSOR_SIZE_UP_LEFT: kThemeArrowCursor, self.CURSOR_SIZE_UP_DOWN: kThemeResizeUpDownCursor, self.CURSOR_SIZE_LEFT_RIGHT: kThemeResizeLeftRightCursor, self.CURSOR_TEXT: kThemeIBeamCursor, self.CURSOR_WAIT: kThemeWatchCursor, self.CURSOR_WAIT_ARROW: kThemeWatchCursor, } if name not in themes: raise CarbonException('Unknown cursor name "%s"' % name) return CarbonMouseCursor(themes[name]) def set_icon(self, *images): # Only use the biggest image image = images[0] size = image.width * image.height for img in images: if img.width * img.height > size: size = img.width * img.height image = img image = image.get_image_data() format = 'ARGB' pitch = -len(format) * image.width data = image.get_data(format, pitch) provider = carbon.CGDataProviderCreateWithData( None, data, len(data), None) colorspace = carbon.CGColorSpaceCreateDeviceRGB() cgi = carbon.CGImageCreate( image.width, image.height, 8, 32, -pitch, colorspace, kCGImageAlphaFirst, provider, None, True, kCGRenderingIntentDefault) carbon.SetApplicationDockTileImage(cgi) carbon.CGDataProviderRelease(provider) carbon.CGColorSpaceRelease(colorspace) # Non-public utilities def _update_drawable(self): # We can get there after context has been disposed, in which case # just do nothing. if not self._agl_context: return agl.aglUpdateContext(self._agl_context) _aglcheck() # Need a redraw self.dispatch_event('on_expose') def _update_track_region(self): carbon.GetWindowRegion(self._window, kWindowContentRgn, self._track_region) carbon.ChangeMouseTrackingRegion(self._track_ref, self._track_region, None) def _install_event_handlers(self): self._remove_event_handlers() if self._fullscreen: target = carbon.GetApplicationEventTarget() else: target = carbon.GetWindowEventTarget(self._window) carbon.InstallStandardEventHandler(target) self._carbon_event_handlers = [] self._carbon_event_handler_refs = [] for func_name in self._platform_event_names: if not hasattr(self, func_name): continue func = getattr(self, func_name) for event_class, event_kind in func._platform_event_data: # TODO: could just build up array of class/kind proc = EventHandlerProcPtr(func) self._carbon_event_handlers.append(proc) upp = carbon.NewEventHandlerUPP(proc) types = EventTypeSpec() types.eventClass = event_class types.eventKind = event_kind handler_ref = EventHandlerRef() carbon.InstallEventHandler( target, upp, 1, byref(types), c_void_p(), byref(handler_ref)) self._carbon_event_handler_refs.append(handler_ref) def _remove_event_handlers(self): for ref in self._carbon_event_handler_refs: carbon.RemoveEventHandler(ref) self._carbon_event_handler_refs = [] self._carbon_event_handlers = [] # Carbon event handlers @CarbonEventHandler(kEventClassTextInput, kEventTextInputUnicodeForKeyEvent) def _on_text_input(self, next_handler, ev, data): size = c_uint32() carbon.GetEventParameter(ev, kEventParamTextInputSendText, typeUTF8Text, c_void_p(), 0, byref(size), c_void_p()) text = create_string_buffer(size.value) carbon.GetEventParameter(ev, kEventParamTextInputSendText, typeUTF8Text, c_void_p(), size.value, c_void_p(), byref(text)) text = text.value.decode('utf8') raw_event = EventRef() carbon.GetEventParameter(ev, kEventParamTextInputSendKeyboardEvent, typeEventRef, c_void_p(), sizeof(raw_event), c_void_p(), byref(raw_event)) symbol, modifiers = self._get_symbol_and_modifiers(raw_event) motion_modifiers = modifiers & \ (key.MOD_COMMAND | key.MOD_CTRL | key.MOD_OPTION) if (symbol, motion_modifiers) in _motion_map: motion = _motion_map[symbol, motion_modifiers] if modifiers & key.MOD_SHIFT: self.dispatch_event('on_text_motion_select', motion) else: self.dispatch_event('on_text_motion', motion) elif ((unicodedata.category(text[0]) != 'Cc' or text == u'\r') and not (modifiers & key.MOD_COMMAND)): self.dispatch_event('on_text', text) return noErr @CarbonEventHandler(kEventClassKeyboard, kEventRawKeyUp) def _on_key_up(self, next_handler, ev, data): symbol, modifiers = self._get_symbol_and_modifiers(ev) if symbol: self.dispatch_event('on_key_release', symbol, modifiers) carbon.CallNextEventHandler(next_handler, ev) return noErr @CarbonEventHandler(kEventClassKeyboard, kEventRawKeyDown) def _on_key_down(self, next_handler, ev, data): symbol, modifiers = self._get_symbol_and_modifiers(ev) if symbol: self.dispatch_event('on_key_press', symbol, modifiers) carbon.CallNextEventHandler(next_handler, ev) return noErr @staticmethod def _get_symbol_and_modifiers(ev): sym = c_uint32() carbon.GetEventParameter(ev, kEventParamKeyCode, typeUInt32, c_void_p(), sizeof(sym), c_void_p(), byref(sym)) modifiers = c_uint32() carbon.GetEventParameter(ev, kEventParamKeyModifiers, typeUInt32, c_void_p(), sizeof(modifiers), c_void_p(), byref(modifiers)) symbol = keymap.get(sym.value, None) if symbol is None: symbol = key.user_key(sym.value) return (symbol, CarbonWindow._map_modifiers(modifiers.value)) @staticmethod def _map_modifiers(modifiers): mapped_modifiers = 0 if modifiers & (shiftKey | rightShiftKey): mapped_modifiers |= key.MOD_SHIFT if modifiers & (controlKey | rightControlKey): mapped_modifiers |= key.MOD_CTRL if modifiers & (optionKey | rightOptionKey): mapped_modifiers |= key.MOD_OPTION if modifiers & alphaLock: mapped_modifiers |= key.MOD_CAPSLOCK if modifiers & cmdKey: mapped_modifiers |= key.MOD_COMMAND return mapped_modifiers @CarbonEventHandler(kEventClassKeyboard, kEventRawKeyModifiersChanged) def _on_modifiers_changed(self, next_handler, ev, data): modifiers = c_uint32() carbon.GetEventParameter(ev, kEventParamKeyModifiers, typeUInt32, c_void_p(), sizeof(modifiers), c_void_p(), byref(modifiers)) modifiers = modifiers.value deltas = modifiers ^ self._current_modifiers for mask, k in [ (controlKey, key.LCTRL), (shiftKey, key.LSHIFT), (cmdKey, key.LCOMMAND), (optionKey, key.LOPTION), (rightShiftKey, key.RSHIFT), (rightOptionKey, key.ROPTION), (rightControlKey, key.RCTRL), (alphaLock, key.CAPSLOCK), (numLock, key.NUMLOCK)]: if deltas & mask: if modifiers & mask: self.dispatch_event('on_key_press', k, self._mapped_modifiers) else: self.dispatch_event('on_key_release', k, self._mapped_modifiers) carbon.CallNextEventHandler(next_handler, ev) self._mapped_modifiers = self._map_modifiers(modifiers) self._current_modifiers = modifiers return noErr def _get_mouse_position(self, ev): position = HIPoint() carbon.GetEventParameter(ev, kEventParamMouseLocation, typeHIPoint, c_void_p(), sizeof(position), c_void_p(), byref(position)) bounds = Rect() carbon.GetWindowBounds(self._window, kWindowContentRgn, byref(bounds)) return int(position.x - bounds.left), int(position.y - bounds.top) @staticmethod def _get_mouse_button_and_modifiers(ev): button = EventMouseButton() carbon.GetEventParameter(ev, kEventParamMouseButton, typeMouseButton, c_void_p(), sizeof(button), c_void_p(), byref(button)) if button.value == 1: button = mouse.LEFT elif button.value == 2: button = mouse.RIGHT elif button.value == 3: button = mouse.MIDDLE else: button = None modifiers = c_uint32() carbon.GetEventParameter(ev, kEventParamKeyModifiers, typeUInt32, c_void_p(), sizeof(modifiers), c_void_p(), byref(modifiers)) return button, CarbonWindow._map_modifiers(modifiers.value) @staticmethod def _get_mouse_in_content(ev): position = Point() carbon.GetEventParameter(ev, kEventParamMouseLocation, typeQDPoint, c_void_p(), sizeof(position), c_void_p(), byref(position)) return carbon.FindWindow(position, None) == inContent @CarbonEventHandler(kEventClassMouse, kEventMouseDown) def _on_mouse_down(self, next_handler, ev, data): if self._fullscreen or self._get_mouse_in_content(ev): button, modifiers = self._get_mouse_button_and_modifiers(ev) if button is not None: x, y = self._get_mouse_position(ev) y = self.height - y self.dispatch_event('on_mouse_press', x, y, button, modifiers) carbon.CallNextEventHandler(next_handler, ev) return noErr @CarbonEventHandler(kEventClassMouse, kEventMouseUp) def _on_mouse_up(self, next_handler, ev, data): # Always report mouse up, even out of content area, because it's # probably after a drag gesture. button, modifiers = self._get_mouse_button_and_modifiers(ev) if button is not None: x, y = self._get_mouse_position(ev) y = self.height - y self.dispatch_event('on_mouse_release', x, y, button, modifiers) carbon.CallNextEventHandler(next_handler, ev) return noErr @CarbonEventHandler(kEventClassMouse, kEventMouseMoved) def _on_mouse_moved(self, next_handler, ev, data): if ((self._fullscreen or self._get_mouse_in_content(ev)) and not self._mouse_ignore_motion): x, y = self._get_mouse_position(ev) y = self.height - y self._mouse_x = x self._mouse_y = y delta = HIPoint() carbon.GetEventParameter(ev, kEventParamMouseDelta, typeHIPoint, c_void_p(), sizeof(delta), c_void_p(), byref(delta)) # Motion event self.dispatch_event('on_mouse_motion', x, y, delta.x, -delta.y) elif self._mouse_ignore_motion: self._mouse_ignore_motion = False carbon.CallNextEventHandler(next_handler, ev) return noErr @CarbonEventHandler(kEventClassMouse, kEventMouseDragged) def _on_mouse_dragged(self, next_handler, ev, data): button, modifiers = self._get_mouse_button_and_modifiers(ev) if button is not None: x, y = self._get_mouse_position(ev) y = self.height - y self._mouse_x = x self._mouse_y = y delta = HIPoint() carbon.GetEventParameter(ev, kEventParamMouseDelta, typeHIPoint, c_void_p(), sizeof(delta), c_void_p(), byref(delta)) # Drag event self.dispatch_event('on_mouse_drag', x, y, delta.x, -delta.y, button, modifiers) carbon.CallNextEventHandler(next_handler, ev) return noErr @CarbonEventHandler(kEventClassMouse, kEventMouseEntered) def _on_mouse_entered(self, next_handler, ev, data): x, y = self._get_mouse_position(ev) y = self.height - y self._mouse_x = x self._mouse_y = y self._mouse_in_window = True self.set_mouse_platform_visible() self.dispatch_event('on_mouse_enter', x, y) carbon.CallNextEventHandler(next_handler, ev) return noErr @CarbonEventHandler(kEventClassMouse, kEventMouseExited) def _on_mouse_exited(self, next_handler, ev, data): if not self._fullscreen: x, y = self._get_mouse_position(ev) y = self.height - y self._mouse_in_window = False self.set_mouse_platform_visible() self.dispatch_event('on_mouse_leave', x, y) carbon.CallNextEventHandler(next_handler, ev) return noErr @CarbonEventHandler(kEventClassMouse, kEventMouseWheelMoved) def _on_mouse_wheel_moved(self, next_handler, ev, data): x, y = self._get_mouse_position(ev) y = self.height - y axis = EventMouseWheelAxis() carbon.GetEventParameter(ev, kEventParamMouseWheelAxis, typeMouseWheelAxis, c_void_p(), sizeof(axis), c_void_p(), byref(axis)) delta = c_long() carbon.GetEventParameter(ev, kEventParamMouseWheelDelta, typeSInt32, c_void_p(), sizeof(delta), c_void_p(), byref(delta)) if axis.value == kEventMouseWheelAxisX: self.dispatch_event('on_mouse_scroll', x, y, delta.value, 0) else: self.dispatch_event('on_mouse_scroll', x, y, 0, delta.value) # _Don't_ call the next handler, which is application, as this then # calls our window handler again. #carbon.CallNextEventHandler(next_handler, ev) return noErr @CarbonEventHandler(kEventClassWindow, kEventWindowClose) def _on_window_close(self, next_handler, ev, data): self.dispatch_event('on_close') # Presumably the next event handler is the one that closes # the window; don't do that here. #carbon.CallNextEventHandler(next_handler, ev) return noErr _resizing = None @CarbonEventHandler(kEventClassWindow, kEventWindowResizeStarted) def _on_window_resize_started(self, next_handler, ev, data): self._resizing = (self.width, self.height) from pyglet import app if app.event_loop is not None: app.event_loop._stop_polling() carbon.CallNextEventHandler(next_handler, ev) return noErr @CarbonEventHandler(kEventClassWindow, kEventWindowResizeCompleted) def _on_window_resize_completed(self, next_handler, ev, data): self._resizing = None rect = Rect() carbon.GetWindowBounds(self._window, kWindowContentRgn, byref(rect)) width = rect.right - rect.left height = rect.bottom - rect.top self.switch_to() self.dispatch_event('on_resize', width, height) self.dispatch_event('on_expose') carbon.CallNextEventHandler(next_handler, ev) return noErr _dragging = False @CarbonEventHandler(kEventClassWindow, kEventWindowDragStarted) def _on_window_drag_started(self, next_handler, ev, data): self._dragging = True from pyglet import app if app.event_loop is not None: app.event_loop._stop_polling() carbon.CallNextEventHandler(next_handler, ev) return noErr @CarbonEventHandler(kEventClassWindow, kEventWindowDragCompleted) def _on_window_drag_completed(self, next_handler, ev, data): self._dragging = False rect = Rect() carbon.GetWindowBounds(self._window, kWindowContentRgn, byref(rect)) self.dispatch_event('on_move', rect.left, rect.top) carbon.CallNextEventHandler(next_handler, ev) return noErr @CarbonEventHandler(kEventClassWindow, kEventWindowBoundsChanging) def _on_window_bounds_changing(self, next_handler, ev, data): from pyglet import app if app.event_loop is not None: carbon.SetEventLoopTimerNextFireTime(app.event_loop._timer, c_double(0.0)) carbon.CallNextEventHandler(next_handler, ev) return noErr @CarbonEventHandler(kEventClassWindow, kEventWindowBoundsChanged) def _on_window_bounds_change(self, next_handler, ev, data): self._update_track_region() self._update_drawable() carbon.CallNextEventHandler(next_handler, ev) return noErr @CarbonEventHandler(kEventClassWindow, kEventWindowZoomed) def _on_window_zoomed(self, next_handler, ev, data): rect = Rect() carbon.GetWindowBounds(self._window, kWindowContentRgn, byref(rect)) width = rect.right - rect.left height = rect.bottom - rect.top self.dispatch_event('on_move', rect.left, rect.top) self.dispatch_event('on_resize', width, height) carbon.CallNextEventHandler(next_handler, ev) return noErr @CarbonEventHandler(kEventClassWindow, kEventWindowActivated) def _on_window_activated(self, next_handler, ev, data): self.dispatch_event('on_activate') carbon.CallNextEventHandler(next_handler, ev) return noErr @CarbonEventHandler(kEventClassWindow, kEventWindowDeactivated) def _on_window_deactivated(self, next_handler, ev, data): self.dispatch_event('on_deactivate') carbon.CallNextEventHandler(next_handler, ev) return noErr @CarbonEventHandler(kEventClassWindow, kEventWindowShown) @CarbonEventHandler(kEventClassWindow, kEventWindowExpanded) def _on_window_shown(self, next_handler, ev, data): self._update_drawable() self.dispatch_event('on_show') carbon.CallNextEventHandler(next_handler, ev) return noErr @CarbonEventHandler(kEventClassWindow, kEventWindowHidden) @CarbonEventHandler(kEventClassWindow, kEventWindowCollapsed) def _on_window_hidden(self, next_handler, ev, data): self.dispatch_event('on_hide') carbon.CallNextEventHandler(next_handler, ev) return noErr @CarbonEventHandler(kEventClassWindow, kEventWindowDrawContent) def _on_window_draw_content(self, next_handler, ev, data): self.dispatch_event('on_expose') carbon.CallNextEventHandler(next_handler, ev) return noErr def _create_cfstring(text): return carbon.CFStringCreateWithCString(c_void_p(), text.encode('utf8'), kCFStringEncodingUTF8) def _oscheck(result): if result != noErr: raise 'Carbon error %d' % result return result def _aglcheck(): err = agl.aglGetError() if err != agl.AGL_NO_ERROR: raise CarbonException(cast(agl.aglErrorString(err), c_char_p).value) pyglet-1.1.4/pyglet/window/event.py0000600013464101346420000001423111317241561015516 0ustar yohyoh# ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- '''Events for `pyglet.window`. See `Window` for a description of the window event types. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: event.py 1669 2008-01-27 01:31:58Z Alex.Holkner $' import sys from pyglet.window import key from pyglet.window import mouse class WindowExitHandler(object): '''Determine if the window should be closed. This event handler watches for the ESC key or the window close event and sets `self.has_exit` to True when either is pressed. An instance of this class is automatically attached to all new `pyglet.window.Window` objects. :deprecated: This class's functionality is provided directly on `Window` in pyglet 1.1. :Ivariables: `has_exit` : bool True if the user wants to close the window. ''' has_exit = False def on_close(self): self.has_exit = True def on_key_press(self, symbol, modifiers): if symbol == key.ESCAPE: self.has_exit = True class WindowEventLogger(object): '''Print all events to a file. When this event handler is added to a window it prints out all events and their parameters; useful for debugging or discovering which events you need to handle. Example:: win = window.Window() win.push_handlers(WindowEventLogger()) ''' def __init__(self, logfile=None): '''Create a `WindowEventLogger` which writes to `logfile`. :Parameters: `logfile` : file-like object The file to write to. If unspecified, stdout will be used. ''' if logfile is None: import sys logfile = sys.stdout self.file = logfile def on_key_press(self, symbol, modifiers): print >> self.file, 'on_key_press(symbol=%s, modifiers=%s)' % ( key.symbol_string(symbol), key.modifiers_string(modifiers)) def on_key_release(self, symbol, modifiers): print >> self.file, 'on_key_release(symbol=%s, modifiers=%s)' % ( key.symbol_string(symbol), key.modifiers_string(modifiers)) def on_text(self, text): print >> self.file, 'on_text(text=%r)' % text def on_text_motion(self, motion): print >> self.file, 'on_text_motion(motion=%s)' % ( key.motion_string(motion)) def on_text_motion_select(self, motion): print >> self.file, 'on_text_motion_select(motion=%s)' % ( key.motion_string(motion)) def on_mouse_motion(self, x, y, dx, dy): print >> self.file, 'on_mouse_motion(x=%d, y=%d, dx=%d, dy=%d)' % ( x, y, dx, dy) def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers): print >> self.file, 'on_mouse_drag(x=%d, y=%d, dx=%d, dy=%d, '\ 'buttons=%s, modifiers=%s)' % ( x, y, dx, dy, mouse.buttons_string(buttons), key.modifiers_string(modifiers)) def on_mouse_press(self, x, y, button, modifiers): print >> self.file, 'on_mouse_press(x=%d, y=%d, button=%r, '\ 'modifiers=%s)' % (x, y, mouse.buttons_string(button), key.modifiers_string(modifiers)) def on_mouse_release(self, x, y, button, modifiers): print >> self.file, 'on_mouse_release(x=%d, y=%d, button=%r, '\ 'modifiers=%s)' % (x, y, mouse.buttons_string(button), key.modifiers_string(modifiers)) def on_mouse_scroll(self, x, y, dx, dy): print >> self.file, 'on_mouse_scroll(x=%f, y=%f, dx=%f, dy=%f)' % ( x, y, dx, dy) def on_close(self): print >> self.file, 'on_close()' def on_mouse_enter(self, x, y): print >> self.file, 'on_mouse_enter(x=%d, y=%d)' % (x, y) def on_mouse_leave(self, x, y): print >> self.file, 'on_mouse_leave(x=%d, y=%d)' % (x, y) def on_expose(self): print >> self.file, 'on_expose()' def on_resize(self, width, height): print >> self.file, 'on_resize(width=%d, height=%d)' % (width, height) def on_move(self, x, y): print >> self.file, 'on_move(x=%d, y=%d)' % (x, y) def on_activate(self): print >> self.file, 'on_activate()' def on_deactivate(self): print >> self.file, 'on_deactivate()' def on_show(self): print >> self.file, 'on_show()' def on_hide(self): print >> self.file, 'on_hide()' def on_context_lost(self): print >> self.file, 'on_context_lost()' def on_context_state_lost(self): print >> self.file, 'on_context_state_lost()' pyglet-1.1.4/pyglet/window/__init__.py0000600013464101346420000016462311317241561016147 0ustar yohyoh# ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- '''Windowing and user-interface events. This module allows applications to create and display windows with an OpenGL context. Windows can be created with a variety of border styles or set fullscreen. You can register event handlers for keyboard, mouse and window events. For games and kiosks you can also restrict the input to your windows, for example disabling users from switching away from the application with certain key combinations or capturing and hiding the mouse. Getting started --------------- Call the Window constructor to create a new window:: from pyglet.window import Window win = Window(width=640, height=480) Attach your own event handlers:: @win.event def on_key_press(symbol, modifiers): # ... handle this event ... Place drawing code for the window within the `Window.on_draw` event handler:: @win.event def on_draw(): # ... drawing code ... Call `pyglet.app.run` to enter the main event loop (by default, this returns when all open windows are closed):: from pyglet import app app.run() Creating a game window ---------------------- Use `Window.set_exclusive_mouse` to hide the mouse cursor and receive relative mouse movement events. Specify ``fullscreen=True`` as a keyword argument to the `Window` constructor to render to the entire screen rather than opening a window:: win = Window(fullscreen=True) win.set_exclusive_mouse() Working with multiple screens ----------------------------- By default, fullscreen windows are opened on the primary display (typically set by the user in their operating system settings). You can retrieve a list of attached screens and select one manually if you prefer. This is useful for opening a fullscreen window on each screen:: display = window.get_platform().get_default_display() screens = display.get_screens() windows = [] for screen in screens: windows.append(window.Window(fullscreen=True, screen=screen)) Specifying a screen has no effect if the window is not fullscreen. Specifying the OpenGL context properties ---------------------------------------- Each window has its own context which is created when the window is created. You can specify the properties of the context before it is created by creating a "template" configuration:: from pyglet import gl # Create template config config = gl.Config() config.stencil_size = 8 config.aux_buffers = 4 # Create a window using this config win = window.Window(config=config) To determine if a given configuration is supported, query the screen (see above, "Working with multiple screens"):: configs = screen.get_matching_configs(config) if not configs: # ... config is not supported else: win = window.Window(config=configs[0]) ''' __docformat__ = 'restructuredtext' __version__ = '$Id: __init__.py 2541 2009-12-31 04:31:11Z benjamin.coder.smith@gmail.com $' import pprint import sys import pyglet from pyglet import gl from pyglet.gl import gl_info from pyglet.event import EventDispatcher import pyglet.window.key class WindowException(Exception): '''The root exception for all window-related errors.''' pass class NoSuchDisplayException(WindowException): '''An exception indicating the requested display is not available.''' pass class NoSuchConfigException(WindowException): '''An exception indicating the requested configuration is not available.''' pass class MouseCursorException(WindowException): '''The root exception for all mouse cursor-related errors.''' pass class Platform(object): '''Operating-system-level functionality. The platform instance can only be obtained with `get_platform`. Use the platform to obtain a `Display` instance. ''' def get_display(self, name): '''Get a display device by name. This is meaningful only under X11, where the `name` is a string including the host name and display number; for example ``"localhost:1"``. On platforms other than X11, `name` is ignored and the default display is returned. pyglet does not support multiple multiple video devices on Windows or OS X. If more than one device is attached, they will appear as a single virtual device comprising all the attached screens. :Parameters: `name` : str The name of the display to connect to. :rtype: `Display` ''' return get_default_display() def get_default_display(self): '''Get the default display device. :rtype: `Display` ''' raise NotImplementedError('abstract') class Display(object): '''A display device supporting one or more screens. Use `Platform.get_display` or `Platform.get_default_display` to obtain an instance of this class. Use a display to obtain `Screen` instances. ''' def __init__(self): from pyglet import app app.displays.add(self) def get_screens(self): '''Get the available screens. A typical multi-monitor workstation comprises one `Display` with multiple `Screen` s. This method returns a list of screens which can be enumerated to select one for full-screen display. For the purposes of creating an OpenGL config, the default screen will suffice. :rtype: list of `Screen` ''' raise NotImplementedError('abstract') def get_default_screen(self): '''Get the default screen as specified by the user's operating system preferences. :rtype: `Screen` ''' return self.get_screens()[0] def get_windows(self): '''Get the windows currently attached to this display. :rtype: sequence of `Window` ''' from pyglet import app return [window for window in app.windows if window.display is self] class Screen(object): '''A virtual monitor that supports fullscreen windows. Screens typically map onto a physical display such as a monitor, television or projector. Selecting a screen for a window has no effect unless the window is made fullscreen, in which case the window will fill only that particular virtual screen. The `width` and `height` attributes of a screen give the current resolution of the screen. The `x` and `y` attributes give the global location of the top-left corner of the screen. This is useful for determining if screens arranged above or next to one another. You cannot always rely on the origin to give the placement of monitors. For example, an X server with two displays without Xinerama enabled will present two logically separate screens with no relation to each other. Use `Display.get_screens` or `Display.get_default_screen` to obtain an instance of this class. :Ivariables: `x` : int Left edge of the screen on the virtual desktop. `y` : int Top edge of the screen on the virtual desktop. `width` : int Width of the screen, in pixels. `height` : int Height of the screen, in pixels. ''' def __init__(self, x, y, width, height): self.x = x self.y = y self.width = width self.height = height def __repr__(self): return '%s(x=%d, y=%d, width=%d, height=%d)' % \ (self.__class__.__name__, self.x, self.y, self.width, self.height) def get_best_config(self, template=None): '''Get the best available GL config. Any required attributes can be specified in `template`. If no configuration matches the template, `NoSuchConfigException` will be raised. :Parameters: `template` : `pyglet.gl.Config` A configuration with desired attributes filled in. :rtype: `pyglet.gl.Config` :return: A configuration supported by the platform that best fulfils the needs described by the template. ''' if template is None: template = gl.Config() configs = self.get_matching_configs(template) if not configs: raise NoSuchConfigException() return configs[0] def get_matching_configs(self, template): '''Get a list of configs that match a specification. Any attributes specified in `template` will have values equal to or greater in each returned config. If no configs satisfy the template, an empty list is returned. :Parameters: `template` : `pyglet.gl.Config` A configuration with desired attributes filled in. :rtype: list of `pyglet.gl.Config` :return: A list of matching configs. ''' raise NotImplementedError('abstract') class MouseCursor(object): '''An abstract mouse cursor.''' #: Indicates if the cursor is drawn using OpenGL. This is True #: for all mouse cursors except system cursors. drawable = True def draw(self, x, y): '''Abstract render method. The cursor should be drawn with the "hot" spot at the given coordinates. The projection is set to the pyglet default (i.e., orthographic in window-space), however no other aspects of the state can be assumed. :Parameters: `x` : int X coordinate of the mouse pointer's hot spot. `y` : int Y coordinate of the mouse pointer's hot spot. ''' raise NotImplementedError('abstract') class DefaultMouseCursor(MouseCursor): '''The default mouse cursor used by the operating system.''' drawable = False class ImageMouseCursor(MouseCursor): '''A user-defined mouse cursor created from an image. Use this class to create your own mouse cursors and assign them to windows. There are no constraints on the image size or format. ''' drawable = True def __init__(self, image, hot_x=0, hot_y=0): '''Create a mouse cursor from an image. :Parameters: `image` : `pyglet.image.AbstractImage` Image to use for the mouse cursor. It must have a valid ``texture`` attribute. `hot_x` : int X coordinate of the "hot" spot in the image relative to the image's anchor. `hot_y` : int Y coordinate of the "hot" spot in the image, relative to the image's anchor. ''' self.texture = image.get_texture() self.hot_x = hot_x self.hot_y = hot_y def draw(self, x, y): gl.glPushAttrib(gl.GL_ENABLE_BIT | gl.GL_CURRENT_BIT) gl.glColor4f(1, 1, 1, 1) gl.glEnable(gl.GL_BLEND) gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE_MINUS_SRC_ALPHA) self.texture.blit(x - self.hot_x, y - self.hot_y, 0) gl.glPopAttrib() def _PlatformEventHandler(data): '''Decorator for platform event handlers. Apply giving the platform-specific data needed by the window to associate the method with an event. See platform-specific subclasses of this decorator for examples. The following attributes are set on the function, which is returned otherwise unchanged: _platform_event True _platform_event_data List of data applied to the function (permitting multiple decorators on the same method). ''' def _event_wrapper(f): f._platform_event = True if not hasattr(f, '_platform_event_data'): f._platform_event_data = [] f._platform_event_data.append(data) return f return _event_wrapper class _WindowMetaclass(type): '''Sets the _platform_event_names class variable on the window subclass. ''' def __init__(cls, name, bases, dict): cls._platform_event_names = set() for base in bases: if hasattr(base, '_platform_event_names'): cls._platform_event_names.update(base._platform_event_names) for name, func in dict.items(): if hasattr(func, '_platform_event'): cls._platform_event_names.add(name) super(_WindowMetaclass, cls).__init__(name, bases, dict) class BaseWindow(EventDispatcher): '''Platform-independent application window. A window is a "heavyweight" object occupying operating system resources. The "client" or "content" area of a window is filled entirely with an OpenGL viewport. Applications have no access to operating system widgets or controls; all rendering must be done via OpenGL. Windows may appear as floating regions or can be set to fill an entire screen (fullscreen). When floating, windows may appear borderless or decorated with a platform-specific frame (including, for example, the title bar, minimize and close buttons, resize handles, and so on). While it is possible to set the location of a window, it is recommended that applications allow the platform to place it according to local conventions. This will ensure it is not obscured by other windows, and appears on an appropriate screen for the user. To render into a window, you must first call `switch_to`, to make it the current OpenGL context. If you use only one window in the application, there is no need to do this. :Ivariables: `has_exit` : bool True if the user has attempted to close the window. :deprecated: Windows are closed immediately by the default `on_close` handler when `pyglet.app.event_loop` is being used. ''' __metaclass__ = _WindowMetaclass # Filled in by metaclass with the names of all methods on this (sub)class # that are platform event handlers. _platform_event_names = set() #: The default window style. WINDOW_STYLE_DEFAULT = None #: The window style for pop-up dialogs. WINDOW_STYLE_DIALOG = 'dialog' #: The window style for tool windows. WINDOW_STYLE_TOOL = 'tool' #: A window style without any decoration. WINDOW_STYLE_BORDERLESS = 'borderless' #: The default mouse cursor. CURSOR_DEFAULT = None #: A crosshair mouse cursor. CURSOR_CROSSHAIR = 'crosshair' #: A pointing hand mouse cursor. CURSOR_HAND = 'hand' #: A "help" mouse cursor; typically a question mark and an arrow. CURSOR_HELP = 'help' #: A mouse cursor indicating that the selected operation is not permitted. CURSOR_NO = 'no' #: A mouse cursor indicating the element can be resized. CURSOR_SIZE = 'size' #: A mouse cursor indicating the element can be resized from the top #: border. CURSOR_SIZE_UP = 'size_up' #: A mouse cursor indicating the element can be resized from the #: upper-right corner. CURSOR_SIZE_UP_RIGHT = 'size_up_right' #: A mouse cursor indicating the element can be resized from the right #: border. CURSOR_SIZE_RIGHT = 'size_right' #: A mouse cursor indicating the element can be resized from the lower-right #: corner. CURSOR_SIZE_DOWN_RIGHT = 'size_down_right' #: A mouse cursor indicating the element can be resized from the bottom #: border. CURSOR_SIZE_DOWN = 'size_down' #: A mouse cursor indicating the element can be resized from the lower-left #: corner. CURSOR_SIZE_DOWN_LEFT = 'size_down_left' #: A mouse cursor indicating the element can be resized from the left #: border. CURSOR_SIZE_LEFT = 'size_left' #: A mouse cursor indicating the element can be resized from the upper-left #: corner. CURSOR_SIZE_UP_LEFT = 'size_up_left' #: A mouse cursor indicating the element can be resized vertically. CURSOR_SIZE_UP_DOWN = 'size_up_down' #: A mouse cursor indicating the element can be resized horizontally. CURSOR_SIZE_LEFT_RIGHT = 'size_left_right' #: A text input mouse cursor (I-beam). CURSOR_TEXT = 'text' #: A "wait" mouse cursor; typically an hourglass or watch. CURSOR_WAIT = 'wait' #: The "wait" mouse cursor combined with an arrow. CURSOR_WAIT_ARROW = 'wait_arrow' has_exit = False #: Window display contents validity. The `pyglet.app` event loop #: examines every window each iteration and only dispatches the `on_draw` #: event to windows that have `invalid` set. By default, windows always #: have `invalid` set to ``True``. #: #: You can prevent redundant redraws by setting this variable to ``False`` #: in the window's `on_draw` handler, and setting it to True again in #: response to any events that actually do require a window contents #: update. #: #: :type: bool #: :since: pyglet 1.1 invalid = True # Instance variables accessible only via properties _width = None _height = None _caption = None _resizable = False _style = WINDOW_STYLE_DEFAULT _fullscreen = False _visible = False _vsync = False _screen = None _config = None _context = None # Used to restore window size and position after fullscreen _windowed_size = None _windowed_location = None # Subclasses should update these after relevant events _mouse_cursor = DefaultMouseCursor() _mouse_x = 0 _mouse_y = 0 _mouse_visible = True _mouse_exclusive = False _mouse_in_window = False _event_queue = None _enable_event_queue = True # overridden by EventLoop. _allow_dispatch_event = False # controlled by dispatch_events stack frame # Class attributes _default_width = 640 _default_height = 480 def __init__(self, width=None, height=None, caption=None, resizable=False, style=WINDOW_STYLE_DEFAULT, fullscreen=False, visible=True, vsync=True, display=None, screen=None, config=None, context=None): '''Create a window. All parameters are optional, and reasonable defaults are assumed where they are not specified. The `display`, `screen`, `config` and `context` parameters form a hierarchy of control: there is no need to specify more than one of these. For example, if you specify `screen` the `display` will be inferred, and a default `config` and `context` will be created. `config` is a special case; it can be a template created by the user specifying the attributes desired, or it can be a complete `config` as returned from `Screen.get_matching_configs` or similar. The context will be active as soon as the window is created, as if `switch_to` was just called. :Parameters: `width` : int Width of the window, in pixels. Not valid if `fullscreen` is True. Defaults to 640. `height` : int Height of the window, in pixels. Not valid if `fullscreen` is True. Defaults to 480. `caption` : str or unicode Initial caption (title) of the window. Defaults to ``sys.argv[0]``. `resizable` : bool If True, the window will be resizable. Defaults to False. `style` : int One of the ``WINDOW_STYLE_*`` constants specifying the border style of the window. `fullscreen` : bool If True, the window will cover the entire screen rather than floating. Defaults to False. `visible` : bool Determines if the window is visible immediately after creation. Defaults to True. Set this to False if you would like to change attributes of the window before having it appear to the user. `vsync` : bool If True, buffer flips are synchronised to the primary screen's vertical retrace, eliminating flicker. `display` : `Display` The display device to use. Useful only under X11. `screen` : `Screen` The screen to use, if in fullscreen. `config` : `pyglet.gl.Config` Either a template from which to create a complete config, or a complete config. `context` : `pyglet.gl.Context` The context to attach to this window. The context must not already be attached to another window. ''' EventDispatcher.__init__(self) self._event_queue = [] if not display: display = get_platform().get_default_display() if not screen: screen = display.get_default_screen() if not config: for template_config in [ gl.Config(double_buffer=True, depth_size=24), gl.Config(double_buffer=True, depth_size=16)]: try: config = screen.get_best_config(template_config) break except NoSuchConfigException: pass if not config: raise NoSuchConfigException('No standard config is available.') if not config.is_complete(): config = screen.get_best_config(config) if not context: context = config.create_context(gl.current_context) # Set these in reverse order to above, to ensure we get user # preference self._context = context self._config = self._context.config self._screen = self._config.screen self._display = self._screen.display if fullscreen: if width is not None or height is not None: raise WindowException( 'Width and height cannot be specified with fullscreen.') self._windowed_size = self._default_width, self._default_height width = self._screen.width height = self._screen.height else: if width is None: width = self._default_width if height is None: height = self._default_height self._width = width self._height = height self._resizable = resizable self._fullscreen = fullscreen self._style = style if pyglet.options['vsync'] is not None: self._vsync = pyglet.options['vsync'] else: self._vsync = vsync if caption is None: caption = sys.argv[0] self._caption = caption from pyglet import app app.windows.add(self) self._create() self.switch_to() if visible: self.set_visible(True) self.activate() def _create(self): raise NotImplementedError('abstract') def _recreate(self, changes): '''Recreate the window with current attributes. :Parameters: `changes` : list of str List of attribute names that were changed since the last `_create` or `_recreate`. For example, ``['fullscreen']`` is given if the window is to be toggled to or from fullscreen. ''' raise NotImplementedError('abstract') def flip(self): '''Swap the OpenGL front and back buffers. Call this method on a double-buffered window to update the visible display with the back buffer. The contents of the back buffer is undefined after this operation. Windows are double-buffered by default. This method is called automatically by `EventLoop` after the `on_draw` event. ''' raise NotImplementedError('abstract') def switch_to(self): '''Make this window the current OpenGL rendering context. Only one OpenGL context can be active at a time. This method sets the current window's context to be current. You should use this method in preference to `pyglet.gl.Context.set_current`, as it may perform additional initialisation functions. ''' raise NotImplementedError('abstract') def set_fullscreen(self, fullscreen=True, screen=None): '''Toggle to or from fullscreen. After toggling fullscreen, the GL context should have retained its state and objects, however the buffers will need to be cleared and redrawn. :Parameters: `fullscreen` : bool True if the window should be made fullscreen, False if it should be windowed. `screen` : Screen If not None and fullscreen is True, the window is moved to the given screen. The screen must belong to the same display as the window. ''' if fullscreen == self._fullscreen and screen is None: return if not self._fullscreen: # Save windowed size self._windowed_size = self.get_size() self._windowed_location = self.get_location() if fullscreen and screen is not None: assert screen.display is self.display self._screen = screen self._fullscreen = fullscreen if self._fullscreen: self._width = self.screen.width self._height = self.screen.height else: self._width, self._height = self._windowed_size self._recreate(['fullscreen']) if not self._fullscreen and self._windowed_location: # Restore windowed location -- no effect on OS X because of # deferred recreate. Move into platform _create? XXX self.set_location(*self._windowed_location) def on_resize(self, width, height): '''A default resize event handler. This default handler updates the GL viewport to cover the entire window and sets the ``GL_PROJECTION`` matrix to be orthogonal in window space. The bottom-left corner is (0, 0) and the top-right corner is the width and height of the window in pixels. Override this event handler with your own to create another projection, for example in perspective. ''' gl.glViewport(0, 0, width, height) gl.glMatrixMode(gl.GL_PROJECTION) gl.glLoadIdentity() gl.glOrtho(0, width, 0, height, -1, 1) gl.glMatrixMode(gl.GL_MODELVIEW) def on_close(self): '''Default on_close handler.''' self.has_exit = True from pyglet import app if app.event_loop is not None: self.close() def on_key_press(self, symbol, modifiers): '''Default on_key_press handler.''' if symbol == key.ESCAPE and not (modifiers & ~(key.MOD_NUMLOCK | key.MOD_CAPSLOCK | key.MOD_SCROLLLOCK)): self.dispatch_event('on_close') def close(self): '''Close the window. After closing the window, the GL context will be invalid. The window instance cannot be reused once closed (see also `set_visible`). The `pyglet.app.EventLoop.on_window_close` event is dispatched on `pyglet.app.event_loop` when this method is called. ''' from pyglet import app if not self._context: return app.windows.remove(self) self._context.destroy() self._config = None self._context = None if app.event_loop: app.event_loop.dispatch_event('on_window_close', self) def draw_mouse_cursor(self): '''Draw the custom mouse cursor. If the current mouse cursor has ``drawable`` set, this method is called before the buffers are flipped to render it. This method always leaves the ``GL_MODELVIEW`` matrix as current, regardless of what it was set to previously. No other GL state is affected. There is little need to override this method; instead, subclass ``MouseCursor`` and provide your own ``draw`` method. ''' # Draw mouse cursor if set and visible. # XXX leaves state in modelview regardless of starting state if (self._mouse_cursor.drawable and self._mouse_visible and self._mouse_in_window): gl.glMatrixMode(gl.GL_PROJECTION) gl.glPushMatrix() gl.glLoadIdentity() gl.glOrtho(0, self.width, 0, self.height, -1, 1) gl.glMatrixMode(gl.GL_MODELVIEW) gl.glPushMatrix() gl.glLoadIdentity() self._mouse_cursor.draw(self._mouse_x, self._mouse_y) gl.glMatrixMode(gl.GL_PROJECTION) gl.glPopMatrix() gl.glMatrixMode(gl.GL_MODELVIEW) gl.glPopMatrix() # Properties provide read-only access to instance variables. Use # set_* methods to change them if applicable. caption = property(lambda self: self._caption, doc='''The window caption (title). Read-only. :type: str ''') resizable = property(lambda self: self._resizable, doc='''True if the window is resizable. Read-only. :type: bool ''') style = property(lambda self: self._style, doc='''The window style; one of the ``WINDOW_STYLE_*`` constants. Read-only. :type: int ''') fullscreen = property(lambda self: self._fullscreen, doc='''True if the window is currently fullscreen. Read-only. :type: bool ''') visible = property(lambda self: self._visible, doc='''True if the window is currently visible. Read-only. :type: bool ''') vsync = property(lambda self: self._vsync, doc='''True if buffer flips are synchronised to the screen's vertical retrace. Read-only. :type: bool ''') display = property(lambda self: self._display, doc='''The display this window belongs to. Read-only. :type: `Display` ''') screen = property(lambda self: self._screen, doc='''The screen this window is fullscreen in. Read-only. :type: `Screen` ''') config = property(lambda self: self._config, doc='''A GL config describing the context of this window. Read-only. :type: `pyglet.gl.Config` ''') context = property(lambda self: self._context, doc='''The OpenGL context attached to this window. Read-only. :type: `pyglet.gl.Context` ''') # These are the only properties that can be set width = property(lambda self: self.get_size()[0], lambda self, width: self.set_size(width, self.height), doc='''The width of the window, in pixels. Read-write. :type: int ''') height = property(lambda self: self.get_size()[1], lambda self, height: self.set_size(self.width, height), doc='''The height of the window, in pixels. Read-write. :type: int ''') def set_caption(self, caption): '''Set the window's caption. The caption appears in the titlebar of the window, if it has one, and in the taskbar on Windows and many X11 window managers. :Parameters: `caption` : str or unicode The caption to set. ''' raise NotImplementedError('abstract') def set_minimum_size(self, width, height): '''Set the minimum size of the window. Once set, the user will not be able to resize the window smaller than the given dimensions. There is no way to remove the minimum size constraint on a window (but you could set it to 0,0). The behaviour is undefined if the minimum size is set larger than the current size of the window. The window size does not include the border or title bar. :Parameters: `width` : int Minimum width of the window, in pixels. `height` : int Minimum height of the window, in pixels. ''' raise NotImplementedError('abstract') def set_maximum_size(self, width, height): '''Set the maximum size of the window. Once set, the user will not be able to resize the window larger than the given dimensions. There is no way to remove the maximum size constraint on a window (but you could set it to a large value). The behaviour is undefined if the maximum size is set smaller than the current size of the window. The window size does not include the border or title bar. :Parameters: `width` : int Maximum width of the window, in pixels. `height` : int Maximum height of the window, in pixels. ''' raise NotImplementedError('abstract') def set_size(self, width, height): '''Resize the window. The behaviour is undefined if the window is not resizable, or if it is currently fullscreen. The window size does not include the border or title bar. :Parameters: `width` : int New width of the window, in pixels. `height` : int New height of the window, in pixels. ''' raise NotImplementedError('abstract') def get_size(self): '''Return the current size of the window. The window size does not include the border or title bar. :rtype: (int, int) :return: The width and height of the window, in pixels. ''' raise NotImplementedError('abstract') def set_location(self, x, y): '''Set the position of the window. :Parameters: `x` : int Distance of the left edge of the window from the left edge of the virtual desktop, in pixels. `y` : int Distance of the top edge of the window from the top edge of the virtual desktop, in pixels. ''' raise NotImplementedError('abstract') def get_location(self): '''Return the current position of the window. :rtype: (int, int) :return: The distances of the left and top edges from their respective edges on the virtual desktop, in pixels. ''' raise NotImplementedError('abstract') def activate(self): '''Attempt to restore keyboard focus to the window. Depending on the window manager or operating system, this may not be successful. For example, on Windows XP an application is not allowed to "steal" focus from another application. Instead, the window's taskbar icon will flash, indicating it requires attention. ''' raise NotImplementedError('abstract') def set_visible(self, visible=True): '''Show or hide the window. :Parameters: `visible` : bool If True, the window will be shown; otherwise it will be hidden. ''' raise NotImplementedError('abstract') def minimize(self): '''Minimize the window. ''' raise NotImplementedError('abstract') def maximize(self): '''Maximize the window. The behaviour of this method is somewhat dependent on the user's display setup. On a multi-monitor system, the window may maximize to either a single screen or the entire virtual desktop. ''' raise NotImplementedError('abstract') def set_vsync(self, vsync): '''Enable or disable vertical sync control. When enabled, this option ensures flips from the back to the front buffer are performed only during the vertical retrace period of the primary display. This can prevent "tearing" or flickering when the buffer is updated in the middle of a video scan. Note that LCD monitors have an analogous time in which they are not reading from the video buffer; while it does not correspond to a vertical retrace it has the same effect. With multi-monitor systems the secondary monitor cannot be synchronised to, so tearing and flicker cannot be avoided when the window is positioned outside of the primary display. In this case it may be advisable to forcibly reduce the framerate (for example, using `pyglet.clock.set_fps_limit`). :Parameters: `vsync` : bool If True, vsync is enabled, otherwise it is disabled. ''' raise NotImplementedError('abstract') def set_mouse_visible(self, visible=True): '''Show or hide the mouse cursor. The mouse cursor will only be hidden while it is positioned within this window. Mouse events will still be processed as usual. :Parameters: `visible` : bool If True, the mouse cursor will be visible, otherwise it will be hidden. ''' self._mouse_visible = visible self.set_mouse_platform_visible() def set_mouse_platform_visible(self, platform_visible=None): '''Set the platform-drawn mouse cursor visibility. This is called automatically after changing the mouse cursor or exclusive mode. Applications should not normally need to call this method, see `set_mouse_visible` instead. :Parameters: `platform_visible` : bool or None If None, sets platform visibility to the required visibility for the current exclusive mode and cursor type. Otherwise, a bool value will override and force a visibility. ''' raise NotImplementedError() def set_mouse_cursor(self, cursor=None): '''Change the appearance of the mouse cursor. The appearance of the mouse cursor is only changed while it is within this window. :Parameters: `cursor` : `MouseCursor` The cursor to set, or None to restore the default cursor. ''' if cursor is None: cursor = DefaultMouseCursor() self._mouse_cursor = cursor self.set_mouse_platform_visible() def set_exclusive_mouse(self, exclusive=True): '''Hide the mouse cursor and direct all mouse events to this window. When enabled, this feature prevents the mouse leaving the window. It is useful for certain styles of games that require complete control of the mouse. The position of the mouse as reported in subsequent events is meaningless when exclusive mouse is enabled; you should only use the relative motion parameters ``dx`` and ``dy``. :Parameters: `exclusive` : bool If True, exclusive mouse is enabled, otherwise it is disabled. ''' raise NotImplementedError('abstract') def set_exclusive_keyboard(self, exclusive=True): '''Prevent the user from switching away from this window using keyboard accelerators. When enabled, this feature disables certain operating-system specific key combinations such as Alt+Tab (Command+Tab on OS X). This can be useful in certain kiosk applications, it should be avoided in general applications or games. :Parameters: `exclusive` : bool If True, exclusive keyboard is enabled, otherwise it is disabled. ''' raise NotImplementedError('abstract') def get_system_mouse_cursor(self, name): '''Obtain a system mouse cursor. Use `set_mouse_cursor` to make the cursor returned by this method active. The names accepted by this method are the ``CURSOR_*`` constants defined on this class. :Parameters: `name` : str Name describing the mouse cursor to return. For example, ``CURSOR_WAIT``, ``CURSOR_HELP``, etc. :rtype: `MouseCursor` :return: A mouse cursor which can be used with `set_mouse_cursor`. ''' raise NotImplementedError() def set_icon(self, *images): '''Set the window icon. If multiple images are provided, one with an appropriate size will be selected (if the correct size is not provided, the image will be scaled). Useful sizes to provide are 16x16, 32x32, 64x64 (Mac only) and 128x128 (Mac only). :Parameters: `images` : sequence of `pyglet.image.AbstractImage` List of images to use for the window icon. ''' pass def clear(self): '''Clear the window. This is a convenience method for clearing the color and depth buffer. The window must be the active context (see `switch_to`). ''' gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT) def dispatch_event(self, *args): if not self._enable_event_queue or self._allow_dispatch_event: EventDispatcher.dispatch_event(self, *args) else: self._event_queue.append(args) def dispatch_events(self): '''Poll the operating system event queue for new events and call attached event handlers. This method is provided for legacy applications targeting pyglet 1.0, and advanced applications that must integrate their event loop into another framework. Typical applications should use `pyglet.app.run`. ''' raise NotImplementedError('abstract') # If documenting, show the event methods. Otherwise, leave them out # as they are not really methods. if hasattr(sys, 'is_epydoc') and sys.is_epydoc: def on_key_press(symbol, modifiers): '''A key on the keyboard was pressed (and held down). In pyglet 1.0 the default handler sets `has_exit` to ``True`` if the ``ESC`` key is pressed. In pyglet 1.1 the default handler dispatches the `on_close` event if the ``ESC`` key is pressed. :Parameters: `symbol` : int The key symbol pressed. `modifiers` : int Bitwise combination of the key modifiers active. :event: ''' def on_key_release(symbol, modifiers): '''A key on the keyboard was released. :Parameters: `symbol` : int The key symbol pressed. `modifiers` : int Bitwise combination of the key modifiers active. :event: ''' def on_text(text): '''The user input some text. Typically this is called after `on_key_press` and before `on_key_release`, but may also be called multiple times if the key is held down (key repeating); or called without key presses if another input method was used (e.g., a pen input). You should always use this method for interpreting text, as the key symbols often have complex mappings to their unicode representation which this event takes care of. :Parameters: `text` : unicode The text entered by the user. :event: ''' def on_text_motion(motion): '''The user moved the text input cursor. Typically this is called after `on_key_press` and before `on_key_release`, but may also be called multiple times if the key is help down (key repeating). You should always use this method for moving the text input cursor (caret), as different platforms have different default keyboard mappings, and key repeats are handled correctly. The values that `motion` can take are defined in `pyglet.window.key`: * MOTION_UP * MOTION_RIGHT * MOTION_DOWN * MOTION_LEFT * MOTION_NEXT_WORD * MOTION_PREVIOUS_WORD * MOTION_BEGINNING_OF_LINE * MOTION_END_OF_LINE * MOTION_NEXT_PAGE * MOTION_PREVIOUS_PAGE * MOTION_BEGINNING_OF_FILE * MOTION_END_OF_FILE * MOTION_BACKSPACE * MOTION_DELETE :Parameters: `motion` : int The direction of motion; see remarks. :event: ''' def on_text_motion_select(motion): '''The user moved the text input cursor while extending the selection. Typically this is called after `on_key_press` and before `on_key_release`, but may also be called multiple times if the key is help down (key repeating). You should always use this method for responding to text selection events rather than the raw `on_key_press`, as different platforms have different default keyboard mappings, and key repeats are handled correctly. The values that `motion` can take are defined in `pyglet.window.key`: * MOTION_UP * MOTION_RIGHT * MOTION_DOWN * MOTION_LEFT * MOTION_NEXT_WORD * MOTION_PREVIOUS_WORD * MOTION_BEGINNING_OF_LINE * MOTION_END_OF_LINE * MOTION_NEXT_PAGE * MOTION_PREVIOUS_PAGE * MOTION_BEGINNING_OF_FILE * MOTION_END_OF_FILE :Parameters: `motion` : int The direction of selection motion; see remarks. :event: ''' def on_mouse_motion(x, y, dx, dy): '''The mouse was moved with no buttons held down. :Parameters: `x` : int Distance in pixels from the left edge of the window. `y` : int Distance in pixels from the bottom edge of the window. `dx` : int Relative X position from the previous mouse position. `dy` : int Relative Y position from the previous mouse position. :event: ''' def on_mouse_drag(x, y, dx, dy, buttons, modifiers): '''The mouse was moved with one or more mouse buttons pressed. This event will continue to be fired even if the mouse leaves the window, so long as the drag buttons are continuously held down. :Parameters: `x` : int Distance in pixels from the left edge of the window. `y` : int Distance in pixels from the bottom edge of the window. `dx` : int Relative X position from the previous mouse position. `dy` : int Relative Y position from the previous mouse position. `buttons` : int Bitwise combination of the mouse buttons currently pressed. `modifiers` : int Bitwise combination of any keyboard modifiers currently active. :event: ''' def on_mouse_press(x, y, button, modifiers): '''A mouse button was pressed (and held down). :Parameters: `x` : int Distance in pixels from the left edge of the window. `y` : int Distance in pixels from the bottom edge of the window. `button` : int The mouse button that was pressed. `modifiers` : int Bitwise combination of any keyboard modifiers currently active. :event: ''' def on_mouse_release(x, y, button, modifiers): '''A mouse button was released. :Parameters: `x` : int Distance in pixels from the left edge of the window. `y` : int Distance in pixels from the bottom edge of the window. `button` : int The mouse button that was released. `modifiers` : int Bitwise combination of any keyboard modifiers currently active. :event: ''' def on_mouse_scroll(x, y, scroll_x, scroll_y): '''The mouse wheel was scrolled. Note that most mice have only a vertical scroll wheel, so `scroll_x` is usually 0. An exception to this is the Apple Mighty Mouse, which has a mouse ball in place of the wheel which allows both `scroll_x` and `scroll_y` movement. :Parameters: `x` : int Distance in pixels from the left edge of the window. `y` : int Distance in pixels from the bottom edge of the window. `scroll_x` : int Number of "clicks" towards the right (left if negative). `scroll_y` : int Number of "clicks" upwards (downwards if negative). :event: ''' def on_close(): '''The user attempted to close the window. This event can be triggered by clicking on the "X" control box in the window title bar, or by some other platform-dependent manner. The default handler sets `has_exit` to ``True``. In pyglet 1.1, if `pyglet.app.event_loop` is being used, `close` is also called, closing the window immediately. :event: ''' def on_mouse_enter(x, y): '''The mouse was moved into the window. This event will not be trigged if the mouse is currently being dragged. :Parameters: `x` : int Distance in pixels from the left edge of the window. `y` : int Distance in pixels from the bottom edge of the window. :event: ''' def on_mouse_leave(x, y): '''The mouse was moved outside of the window. This event will not be trigged if the mouse is currently being dragged. Note that the coordinates of the mouse pointer will be outside of the window rectangle. :Parameters: `x` : int Distance in pixels from the left edge of the window. `y` : int Distance in pixels from the bottom edge of the window. :event: ''' def on_expose(): '''A portion of the window needs to be redrawn. This event is triggered when the window first appears, and any time the contents of the window is invalidated due to another window obscuring it. There is no way to determine which portion of the window needs redrawing. Note that the use of this method is becoming increasingly uncommon, as newer window managers composite windows automatically and keep a backing store of the window contents. :event: ''' def on_resize(width, height): '''The window was resized. The window will have the GL context when this event is dispatched; there is no need to call `switch_to` in this handler. :Parameters: `width` : int The new width of the window, in pixels. `height` : int The new height of the window, in pixels. :event: ''' def on_move(x, y): '''The window was moved. :Parameters: `x` : int Distance from the left edge of the screen to the left edge of the window. `y` : int Distance from the top edge of the screen to the top edge of the window. Note that this is one of few methods in pyglet which use a Y-down coordinate system. :event: ''' def on_activate(): '''The window was activated. This event can be triggered by clicking on the title bar, bringing it to the foreground; or by some platform-specific method. When a window is "active" it has the keyboard focus. :event: ''' def on_deactivate(): '''The window was deactivated. This event can be triggered by clicking on another application window. When a window is deactivated it no longer has the keyboard focus. :event: ''' def on_show(): '''The window was shown. This event is triggered when a window is restored after being minimised, or after being displayed for the first time. :event: ''' def on_hide(): '''The window was hidden. This event is triggered when a window is minimised or (on Mac OS X) hidden by the user. :event: ''' def on_context_lost(): '''The window's GL context was lost. When the context is lost no more GL methods can be called until it is recreated. This is a rare event, triggered perhaps by the user switching to an incompatible video mode. When it occurs, an application will need to reload all objects (display lists, texture objects, shaders) as well as restore the GL state. :event: ''' def on_context_state_lost(): '''The state of the window's GL context was lost. pyglet may sometimes need to recreate the window's GL context if the window is moved to another video device, or between fullscreen or windowed mode. In this case it will try to share the objects (display lists, texture objects, shaders) between the old and new contexts. If this is possible, only the current state of the GL context is lost, and the application should simply restore state. :event: ''' def on_draw(): '''The window contents must be redrawn. The `EventLoop` will dispatch this event when the window should be redrawn. This will happen during idle time after any window events and after any scheduled functions were called. The window will already have the GL context, so there is no need to call `switch_to`. The window's `flip` method will be called after this event, so your event handler should not. You should make no assumptions about the window contents when this event is triggered; a resize or expose event may have invalidated the framebuffer since the last time it was drawn. :since: pyglet 1.1 :event: ''' BaseWindow.register_event_type('on_key_press') BaseWindow.register_event_type('on_key_release') BaseWindow.register_event_type('on_text') BaseWindow.register_event_type('on_text_motion') BaseWindow.register_event_type('on_text_motion_select') BaseWindow.register_event_type('on_mouse_motion') BaseWindow.register_event_type('on_mouse_drag') BaseWindow.register_event_type('on_mouse_press') BaseWindow.register_event_type('on_mouse_release') BaseWindow.register_event_type('on_mouse_scroll') BaseWindow.register_event_type('on_mouse_enter') BaseWindow.register_event_type('on_mouse_leave') BaseWindow.register_event_type('on_close') BaseWindow.register_event_type('on_expose') BaseWindow.register_event_type('on_resize') BaseWindow.register_event_type('on_move') BaseWindow.register_event_type('on_activate') BaseWindow.register_event_type('on_deactivate') BaseWindow.register_event_type('on_show') BaseWindow.register_event_type('on_hide') BaseWindow.register_event_type('on_context_lost') BaseWindow.register_event_type('on_context_state_lost') BaseWindow.register_event_type('on_draw') def get_platform(): '''Get an instance of the Platform most appropriate for this system. :rtype: `Platform` :return: The platform instance. ''' return _platform _is_epydoc = hasattr(sys, 'is_epydoc') and sys.is_epydoc if _is_epydoc: # We are building documentation Window = BaseWindow Window.__name__ = 'Window' del BaseWindow else: # Try to determine which platform to use. if sys.platform == 'darwin': from pyglet.window.carbon import CarbonPlatform, CarbonWindow _platform = CarbonPlatform() Window = CarbonWindow elif sys.platform in ('win32', 'cygwin'): from pyglet.window.win32 import Win32Platform, Win32Window _platform = Win32Platform() Window = Win32Window else: from pyglet.window.xlib import XlibPlatform, XlibWindow _platform = XlibPlatform() Window = XlibWindow # Create shadow window. (trickery is for circular import) if not _is_epydoc: pyglet.window = sys.modules[__name__] gl._create_shadow_window() pyglet-1.1.4/pyglet/window/win32/0002700013464101346420000000000011317255174014771 5ustar yohyohpyglet-1.1.4/pyglet/window/win32/constants.py0000600013464101346420000035175711317241561017374 0ustar yohyoh# ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- # Most of this file is win32con.py from Python for Windows Extensions: # http://www.python.net/crew/mhammond/win32/ # From Windows 2000 API SuperBible: VK_OEM_1 = 0xba VK_OEM_PLUS = 0xbb VK_OEM_COMMA = 0xbc VK_OEM_MINUS = 0xbd VK_OEM_PERIOD = 0xbe VK_OEM_2 = 0xbf VK_OEM_3 = 0xc0 VK_OEM_4 = 0xdb VK_OEM_5 = 0xdc VK_OEM_6 = 0xdd VK_OEM_7 = 0xde VK_OEM_8 = 0xdf VK_OEM_102 = 0xe2 # Copyright (c) 1994-2001, Mark Hammond # 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 name of Mark Hammond nor the name of 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 REGENTS 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. P # From WinGDI.h PFD_TYPE_RGBA = 0 PFD_TYPE_COLORINDEX = 1 PFD_MAIN_PLANE = 0 PFD_OVERLAY_PLANE = 1 PFD_UNDERLAY_PLANE = (-1) PFD_DOUBLEBUFFER = 0x00000001 PFD_STEREO = 0x00000002 PFD_DRAW_TO_WINDOW = 0x00000004 PFD_DRAW_TO_BITMAP = 0x00000008 PFD_SUPPORT_GDI = 0x00000010 PFD_SUPPORT_OPENGL = 0x00000020 PFD_GENERIC_FORMAT = 0x00000040 PFD_NEED_PALETTE = 0x00000080 PFD_NEED_SYSTEM_PALETTE = 0x00000100 PFD_SWAP_EXCHANGE = 0x00000200 PFD_SWAP_COPY = 0x00000400 PFD_SWAP_LAYER_BUFFERS = 0x00000800 PFD_GENERIC_ACCELERATED = 0x00001000 PFD_SUPPORT_DIRECTDRAW = 0x00002000 PFD_DEPTH_DONTCARE = 0x20000000 PFD_DOUBLEBUFFER_DONTCARE = 0x40000000 PFD_STEREO_DONTCARE = 0x80000000 # Generated by h2py from commdlg.h (plus modifications 4jan98) WINVER = 1280 WM_USER = 1024 PY_0U = 0 OFN_READONLY = 1 OFN_OVERWRITEPROMPT = 2 OFN_HIDEREADONLY = 4 OFN_NOCHANGEDIR = 8 OFN_SHOWHELP = 16 OFN_ENABLEHOOK = 32 OFN_ENABLETEMPLATE = 64 OFN_ENABLETEMPLATEHANDLE = 128 OFN_NOVALIDATE = 256 OFN_ALLOWMULTISELECT = 512 OFN_EXTENSIONDIFFERENT = 1024 OFN_PATHMUSTEXIST = 2048 OFN_FILEMUSTEXIST = 4096 OFN_CREATEPROMPT = 8192 OFN_SHAREAWARE = 16384 OFN_NOREADONLYRETURN = 32768 OFN_NOTESTFILECREATE = 65536 OFN_NONETWORKBUTTON = 131072 OFN_NOLONGNAMES = 262144 OFN_EXPLORER = 524288 # new look commdlg OFN_NODEREFERENCELINKS = 1048576 OFN_LONGNAMES = 2097152 # force long names for 3.x modules OFN_ENABLEINCLUDENOTIFY = 4194304 # send include message to callback OFN_ENABLESIZING = 8388608 OFN_DONTADDTORECENT = 33554432 OFN_FORCESHOWHIDDEN = 268435456 # Show All files including System and hidden files OFN_EX_NOPLACESBAR = 1 OFN_SHAREFALLTHROUGH = 2 OFN_SHARENOWARN = 1 OFN_SHAREWARN = 0 CDN_FIRST = (PY_0U-601) CDN_LAST = (PY_0U-699) CDN_INITDONE = (CDN_FIRST - 0) CDN_SELCHANGE = (CDN_FIRST - 1) CDN_FOLDERCHANGE = (CDN_FIRST - 2) CDN_SHAREVIOLATION = (CDN_FIRST - 3) CDN_HELP = (CDN_FIRST - 4) CDN_FILEOK = (CDN_FIRST - 5) CDN_TYPECHANGE = (CDN_FIRST - 6) CDN_INCLUDEITEM = (CDN_FIRST - 7) CDM_FIRST = (WM_USER + 100) CDM_LAST = (WM_USER + 200) CDM_GETSPEC = (CDM_FIRST + 0) CDM_GETFILEPATH = (CDM_FIRST + 1) CDM_GETFOLDERPATH = (CDM_FIRST + 2) CDM_GETFOLDERIDLIST = (CDM_FIRST + 3) CDM_SETCONTROLTEXT = (CDM_FIRST + 4) CDM_HIDECONTROL = (CDM_FIRST + 5) CDM_SETDEFEXT = (CDM_FIRST + 6) CC_RGBINIT = 1 CC_FULLOPEN = 2 CC_PREVENTFULLOPEN = 4 CC_SHOWHELP = 8 CC_ENABLEHOOK = 16 CC_ENABLETEMPLATE = 32 CC_ENABLETEMPLATEHANDLE = 64 CC_SOLIDCOLOR = 128 CC_ANYCOLOR = 256 FR_DOWN = 1 FR_WHOLEWORD = 2 FR_MATCHCASE = 4 FR_FINDNEXT = 8 FR_REPLACE = 16 FR_REPLACEALL = 32 FR_DIALOGTERM = 64 FR_SHOWHELP = 128 FR_ENABLEHOOK = 256 FR_ENABLETEMPLATE = 512 FR_NOUPDOWN = 1024 FR_NOMATCHCASE = 2048 FR_NOWHOLEWORD = 4096 FR_ENABLETEMPLATEHANDLE = 8192 FR_HIDEUPDOWN = 16384 FR_HIDEMATCHCASE = 32768 FR_HIDEWHOLEWORD = 65536 CF_SCREENFONTS = 1 CF_PRINTERFONTS = 2 CF_BOTH = (CF_SCREENFONTS | CF_PRINTERFONTS) CF_SHOWHELP = 4 CF_ENABLEHOOK = 8 CF_ENABLETEMPLATE = 16 CF_ENABLETEMPLATEHANDLE = 32 CF_INITTOLOGFONTSTRUCT = 64 CF_USESTYLE = 128 CF_EFFECTS = 256 CF_APPLY = 512 CF_ANSIONLY = 1024 CF_SCRIPTSONLY = CF_ANSIONLY CF_NOVECTORFONTS = 2048 CF_NOOEMFONTS = CF_NOVECTORFONTS CF_NOSIMULATIONS = 4096 CF_LIMITSIZE = 8192 CF_FIXEDPITCHONLY = 16384 CF_WYSIWYG = 32768 # must also have CF_SCREENFONTS & CF_PRINTERFONTS CF_FORCEFONTEXIST = 65536 CF_SCALABLEONLY = 131072 CF_TTONLY = 262144 CF_NOFACESEL = 524288 CF_NOSTYLESEL = 1048576 CF_NOSIZESEL = 2097152 CF_SELECTSCRIPT = 4194304 CF_NOSCRIPTSEL = 8388608 CF_NOVERTFONTS = 16777216 SIMULATED_FONTTYPE = 32768 PRINTER_FONTTYPE = 16384 SCREEN_FONTTYPE = 8192 BOLD_FONTTYPE = 256 ITALIC_FONTTYPE = 512 REGULAR_FONTTYPE = 1024 OPENTYPE_FONTTYPE = 65536 TYPE1_FONTTYPE = 131072 DSIG_FONTTYPE = 262144 WM_CHOOSEFONT_GETLOGFONT = (WM_USER + 1) WM_CHOOSEFONT_SETLOGFONT = (WM_USER + 101) WM_CHOOSEFONT_SETFLAGS = (WM_USER + 102) LBSELCHSTRINGA = "commdlg_LBSelChangedNotify" SHAREVISTRINGA = "commdlg_ShareViolation" FILEOKSTRINGA = "commdlg_FileNameOK" COLOROKSTRINGA = "commdlg_ColorOK" SETRGBSTRINGA = "commdlg_SetRGBColor" HELPMSGSTRINGA = "commdlg_help" FINDMSGSTRINGA = "commdlg_FindReplace" LBSELCHSTRING = LBSELCHSTRINGA SHAREVISTRING = SHAREVISTRINGA FILEOKSTRING = FILEOKSTRINGA COLOROKSTRING = COLOROKSTRINGA SETRGBSTRING = SETRGBSTRINGA HELPMSGSTRING = HELPMSGSTRINGA FINDMSGSTRING = FINDMSGSTRINGA CD_LBSELNOITEMS = -1 CD_LBSELCHANGE = 0 CD_LBSELSUB = 1 CD_LBSELADD = 2 PD_ALLPAGES = 0 PD_SELECTION = 1 PD_PAGENUMS = 2 PD_NOSELECTION = 4 PD_NOPAGENUMS = 8 PD_COLLATE = 16 PD_PRINTTOFILE = 32 PD_PRINTSETUP = 64 PD_NOWARNING = 128 PD_RETURNDC = 256 PD_RETURNIC = 512 PD_RETURNDEFAULT = 1024 PD_SHOWHELP = 2048 PD_ENABLEPRINTHOOK = 4096 PD_ENABLESETUPHOOK = 8192 PD_ENABLEPRINTTEMPLATE = 16384 PD_ENABLESETUPTEMPLATE = 32768 PD_ENABLEPRINTTEMPLATEHANDLE = 65536 PD_ENABLESETUPTEMPLATEHANDLE = 131072 PD_USEDEVMODECOPIES = 262144 PD_DISABLEPRINTTOFILE = 524288 PD_HIDEPRINTTOFILE = 1048576 PD_NONETWORKBUTTON = 2097152 DN_DEFAULTPRN = 1 WM_PSD_PAGESETUPDLG = (WM_USER ) WM_PSD_FULLPAGERECT = (WM_USER+1) WM_PSD_MINMARGINRECT = (WM_USER+2) WM_PSD_MARGINRECT = (WM_USER+3) WM_PSD_GREEKTEXTRECT = (WM_USER+4) WM_PSD_ENVSTAMPRECT = (WM_USER+5) WM_PSD_YAFULLPAGERECT = (WM_USER+6) PSD_DEFAULTMINMARGINS = 0 # default (printer's) PSD_INWININIINTLMEASURE = 0 # 1st of 4 possible PSD_MINMARGINS = 1 # use caller's PSD_MARGINS = 2 # use caller's PSD_INTHOUSANDTHSOFINCHES = 4 # 2nd of 4 possible PSD_INHUNDREDTHSOFMILLIMETERS = 8 # 3rd of 4 possible PSD_DISABLEMARGINS = 16 PSD_DISABLEPRINTER = 32 PSD_NOWARNING = 128 # must be same as PD_* PSD_DISABLEORIENTATION = 256 PSD_RETURNDEFAULT = 1024 # must be same as PD_* PSD_DISABLEPAPER = 512 PSD_SHOWHELP = 2048 # must be same as PD_* PSD_ENABLEPAGESETUPHOOK = 8192 # must be same as PD_* PSD_ENABLEPAGESETUPTEMPLATE = 32768 # must be same as PD_* PSD_ENABLEPAGESETUPTEMPLATEHANDLE = 131072 # must be same as PD_* PSD_ENABLEPAGEPAINTHOOK = 262144 PSD_DISABLEPAGEPAINTING = 524288 PSD_NONETWORKBUTTON = 2097152 # must be same as PD_* # Generated by h2py from winreg.h HKEY_CLASSES_ROOT = -2147483648 HKEY_CURRENT_USER = -2147483647 HKEY_LOCAL_MACHINE = -2147483646 HKEY_USERS = -2147483645 HKEY_PERFORMANCE_DATA = -2147483644 HKEY_CURRENT_CONFIG = -2147483643 HKEY_DYN_DATA = -2147483642 HKEY_PERFORMANCE_TEXT = -2147483568 # ?? 4Jan98 HKEY_PERFORMANCE_NLSTEXT = -2147483552 # ?? 4Jan98 # Generated by h2py from winuser.h HWND_BROADCAST = 65535 HWND_DESKTOP = 0 HWND_TOP = 0 HWND_BOTTOM = 1 HWND_TOPMOST = -1 HWND_NOTOPMOST = -2 HWND_MESSAGE = -3 # winuser.h line 4601 SM_CXSCREEN = 0 SM_CYSCREEN = 1 SM_CXVSCROLL = 2 SM_CYHSCROLL = 3 SM_CYCAPTION = 4 SM_CXBORDER = 5 SM_CYBORDER = 6 SM_CXDLGFRAME = 7 SM_CYDLGFRAME = 8 SM_CYVTHUMB = 9 SM_CXHTHUMB = 10 SM_CXICON = 11 SM_CYICON = 12 SM_CXCURSOR = 13 SM_CYCURSOR = 14 SM_CYMENU = 15 SM_CXFULLSCREEN = 16 SM_CYFULLSCREEN = 17 SM_CYKANJIWINDOW = 18 SM_MOUSEPRESENT = 19 SM_CYVSCROLL = 20 SM_CXHSCROLL = 21 SM_DEBUG = 22 SM_SWAPBUTTON = 23 SM_RESERVED1 = 24 SM_RESERVED2 = 25 SM_RESERVED3 = 26 SM_RESERVED4 = 27 SM_CXMIN = 28 SM_CYMIN = 29 SM_CXSIZE = 30 SM_CYSIZE = 31 SM_CXFRAME = 32 SM_CYFRAME = 33 SM_CXMINTRACK = 34 SM_CYMINTRACK = 35 SM_CXDOUBLECLK = 36 SM_CYDOUBLECLK = 37 SM_CXICONSPACING = 38 SM_CYICONSPACING = 39 SM_MENUDROPALIGNMENT = 40 SM_PENWINDOWS = 41 SM_DBCSENABLED = 42 SM_CMOUSEBUTTONS = 43 SM_CXFIXEDFRAME = SM_CXDLGFRAME SM_CYFIXEDFRAME = SM_CYDLGFRAME SM_CXSIZEFRAME = SM_CXFRAME SM_CYSIZEFRAME = SM_CYFRAME SM_SECURE = 44 SM_CXEDGE = 45 SM_CYEDGE = 46 SM_CXMINSPACING = 47 SM_CYMINSPACING = 48 SM_CXSMICON = 49 SM_CYSMICON = 50 SM_CYSMCAPTION = 51 SM_CXSMSIZE = 52 SM_CYSMSIZE = 53 SM_CXMENUSIZE = 54 SM_CYMENUSIZE = 55 SM_ARRANGE = 56 SM_CXMINIMIZED = 57 SM_CYMINIMIZED = 58 SM_CXMAXTRACK = 59 SM_CYMAXTRACK = 60 SM_CXMAXIMIZED = 61 SM_CYMAXIMIZED = 62 SM_NETWORK = 63 SM_CLEANBOOT = 67 SM_CXDRAG = 68 SM_CYDRAG = 69 SM_SHOWSOUNDS = 70 SM_CXMENUCHECK = 71 SM_CYMENUCHECK = 72 SM_SLOWMACHINE = 73 SM_MIDEASTENABLED = 74 SM_MOUSEWHEELPRESENT = 75 SM_XVIRTUALSCREEN = 76 SM_YVIRTUALSCREEN = 77 SM_CXVIRTUALSCREEN = 78 SM_CYVIRTUALSCREEN = 79 SM_CMONITORS = 80 SM_SAMEDISPLAYFORMAT = 81 SM_CMETRICS = 83 MNC_IGNORE = 0 MNC_CLOSE = 1 MNC_EXECUTE = 2 MNC_SELECT = 3 MNS_NOCHECK = -2147483648 MNS_MODELESS = 1073741824 MNS_DRAGDROP = 536870912 MNS_AUTODISMISS = 268435456 MNS_NOTIFYBYPOS = 134217728 MNS_CHECKORBMP = 67108864 MIM_MAXHEIGHT = 1 MIM_BACKGROUND = 2 MIM_HELPID = 4 MIM_MENUDATA = 8 MIM_STYLE = 16 MIM_APPLYTOSUBMENUS = -2147483648 MND_CONTINUE = 0 MND_ENDMENU = 1 MNGOF_GAP = 3 MNGO_NOINTERFACE = 0 MNGO_NOERROR = 1 MIIM_STATE = 1 MIIM_ID = 2 MIIM_SUBMENU = 4 MIIM_CHECKMARKS = 8 MIIM_TYPE = 16 MIIM_DATA = 32 MIIM_STRING = 64 MIIM_BITMAP = 128 MIIM_FTYPE = 256 HBMMENU_CALLBACK = -1 HBMMENU_SYSTEM = 1 HBMMENU_MBAR_RESTORE = 2 HBMMENU_MBAR_MINIMIZE = 3 HBMMENU_MBAR_CLOSE = 5 HBMMENU_MBAR_CLOSE_D = 6 HBMMENU_MBAR_MINIMIZE_D = 7 HBMMENU_POPUP_CLOSE = 8 HBMMENU_POPUP_RESTORE = 9 HBMMENU_POPUP_MAXIMIZE = 10 HBMMENU_POPUP_MINIMIZE = 11 GMDI_USEDISABLED = 1 GMDI_GOINTOPOPUPS = 2 TPM_LEFTBUTTON = 0 TPM_RIGHTBUTTON = 2 TPM_LEFTALIGN = 0 TPM_CENTERALIGN = 4 TPM_RIGHTALIGN = 8 TPM_TOPALIGN = 0 TPM_VCENTERALIGN = 16 TPM_BOTTOMALIGN = 32 TPM_HORIZONTAL = 0 TPM_VERTICAL = 64 TPM_NONOTIFY = 128 TPM_RETURNCMD = 256 TPM_RECURSE = 1 DOF_EXECUTABLE = 32769 DOF_DOCUMENT = 32770 DOF_DIRECTORY = 32771 DOF_MULTIPLE = 32772 DOF_PROGMAN = 1 DOF_SHELLDATA = 2 DO_DROPFILE = 1162627398 DO_PRINTFILE = 1414419024 DT_TOP = 0 DT_LEFT = 0 DT_CENTER = 1 DT_RIGHT = 2 DT_VCENTER = 4 DT_BOTTOM = 8 DT_WORDBREAK = 16 DT_SINGLELINE = 32 DT_EXPANDTABS = 64 DT_TABSTOP = 128 DT_NOCLIP = 256 DT_EXTERNALLEADING = 512 DT_CALCRECT = 1024 DT_NOPREFIX = 2048 DT_INTERNAL = 4096 DT_EDITCONTROL = 8192 DT_PATH_ELLIPSIS = 16384 DT_END_ELLIPSIS = 32768 DT_MODIFYSTRING = 65536 DT_RTLREADING = 131072 DT_WORD_ELLIPSIS = 262144 DST_COMPLEX = 0 DST_TEXT = 1 DST_PREFIXTEXT = 2 DST_ICON = 3 DST_BITMAP = 4 DSS_NORMAL = 0 DSS_UNION = 16 DSS_DISABLED = 32 DSS_MONO = 128 DSS_RIGHT = 32768 DCX_WINDOW = 1 DCX_CACHE = 2 DCX_NORESETATTRS = 4 DCX_CLIPCHILDREN = 8 DCX_CLIPSIBLINGS = 16 DCX_PARENTCLIP = 32 DCX_EXCLUDERGN = 64 DCX_INTERSECTRGN = 128 DCX_EXCLUDEUPDATE = 256 DCX_INTERSECTUPDATE = 512 DCX_LOCKWINDOWUPDATE = 1024 DCX_VALIDATE = 2097152 CUDR_NORMAL = 0 CUDR_NOSNAPTOGRID = 1 CUDR_NORESOLVEPOSITIONS = 2 CUDR_NOCLOSEGAPS = 4 CUDR_NEGATIVECOORDS = 8 CUDR_NOPRIMARY = 16 RDW_INVALIDATE = 1 RDW_INTERNALPAINT = 2 RDW_ERASE = 4 RDW_VALIDATE = 8 RDW_NOINTERNALPAINT = 16 RDW_NOERASE = 32 RDW_NOCHILDREN = 64 RDW_ALLCHILDREN = 128 RDW_UPDATENOW = 256 RDW_ERASENOW = 512 RDW_FRAME = 1024 RDW_NOFRAME = 2048 SW_SCROLLCHILDREN = 1 SW_INVALIDATE = 2 SW_ERASE = 4 SW_SMOOTHSCROLL = 16 # Use smooth scrolling ESB_ENABLE_BOTH = 0 ESB_DISABLE_BOTH = 3 ESB_DISABLE_LEFT = 1 ESB_DISABLE_RIGHT = 2 ESB_DISABLE_UP = 1 ESB_DISABLE_DOWN = 2 ESB_DISABLE_LTUP = ESB_DISABLE_LEFT ESB_DISABLE_RTDN = ESB_DISABLE_RIGHT HELPINFO_WINDOW = 1 HELPINFO_MENUITEM = 2 MB_OK = 0 MB_OKCANCEL = 1 MB_ABORTRETRYIGNORE = 2 MB_YESNOCANCEL = 3 MB_YESNO = 4 MB_RETRYCANCEL = 5 MB_ICONHAND = 16 MB_ICONQUESTION = 32 MB_ICONEXCLAMATION = 48 MB_ICONASTERISK = 64 MB_ICONWARNING = MB_ICONEXCLAMATION MB_ICONERROR = MB_ICONHAND MB_ICONINFORMATION = MB_ICONASTERISK MB_ICONSTOP = MB_ICONHAND MB_DEFBUTTON1 = 0 MB_DEFBUTTON2 = 256 MB_DEFBUTTON3 = 512 MB_DEFBUTTON4 = 768 MB_APPLMODAL = 0 MB_SYSTEMMODAL = 4096 MB_TASKMODAL = 8192 MB_HELP = 16384 MB_NOFOCUS = 32768 MB_SETFOREGROUND = 65536 MB_DEFAULT_DESKTOP_ONLY = 131072 MB_TOPMOST = 262144L MB_RIGHT = 524288 MB_RTLREADING = 1048576 MB_SERVICE_NOTIFICATION = 2097152 MB_TYPEMASK = 15 MB_USERICON = 128 MB_ICONMASK = 240 MB_DEFMASK = 3840 MB_MODEMASK = 12288 MB_MISCMASK = 49152 # winuser.h line 6373 CWP_ALL = 0 CWP_SKIPINVISIBLE = 1 CWP_SKIPDISABLED = 2 CWP_SKIPTRANSPARENT = 4 CTLCOLOR_MSGBOX = 0 CTLCOLOR_EDIT = 1 CTLCOLOR_LISTBOX = 2 CTLCOLOR_BTN = 3 CTLCOLOR_DLG = 4 CTLCOLOR_SCROLLBAR = 5 CTLCOLOR_STATIC = 6 CTLCOLOR_MAX = 7 COLOR_SCROLLBAR = 0 COLOR_BACKGROUND = 1 COLOR_ACTIVECAPTION = 2 COLOR_INACTIVECAPTION = 3 COLOR_MENU = 4 COLOR_WINDOW = 5 COLOR_WINDOWFRAME = 6 COLOR_MENUTEXT = 7 COLOR_WINDOWTEXT = 8 COLOR_CAPTIONTEXT = 9 COLOR_ACTIVEBORDER = 10 COLOR_INACTIVEBORDER = 11 COLOR_APPWORKSPACE = 12 COLOR_HIGHLIGHT = 13 COLOR_HIGHLIGHTTEXT = 14 COLOR_BTNFACE = 15 COLOR_BTNSHADOW = 16 COLOR_GRAYTEXT = 17 COLOR_BTNTEXT = 18 COLOR_INACTIVECAPTIONTEXT = 19 COLOR_BTNHIGHLIGHT = 20 COLOR_3DDKSHADOW = 21 COLOR_3DLIGHT = 22 COLOR_INFOTEXT = 23 COLOR_INFOBK = 24 COLOR_HOTLIGHT = 26 COLOR_GRADIENTACTIVECAPTION = 27 COLOR_GRADIENTINACTIVECAPTION = 28 COLOR_DESKTOP = COLOR_BACKGROUND COLOR_3DFACE = COLOR_BTNFACE COLOR_3DSHADOW = COLOR_BTNSHADOW COLOR_3DHIGHLIGHT = COLOR_BTNHIGHLIGHT COLOR_3DHILIGHT = COLOR_BTNHIGHLIGHT COLOR_BTNHILIGHT = COLOR_BTNHIGHLIGHT GW_HWNDFIRST = 0 GW_HWNDLAST = 1 GW_HWNDNEXT = 2 GW_HWNDPREV = 3 GW_OWNER = 4 GW_CHILD = 5 GW_ENABLEDPOPUP = 6 GW_MAX = 6 MF_INSERT = 0 MF_CHANGE = 128 MF_APPEND = 256 MF_DELETE = 512 MF_REMOVE = 4096 MF_BYCOMMAND = 0 MF_BYPOSITION = 1024 MF_SEPARATOR = 2048 MF_ENABLED = 0 MF_GRAYED = 1 MF_DISABLED = 2 MF_UNCHECKED = 0 MF_CHECKED = 8 MF_USECHECKBITMAPS = 512 MF_STRING = 0 MF_BITMAP = 4 MF_OWNERDRAW = 256 MF_POPUP = 16 MF_MENUBARBREAK = 32 MF_MENUBREAK = 64 MF_UNHILITE = 0 MF_HILITE = 128 MF_DEFAULT = 4096 MF_SYSMENU = 8192 MF_HELP = 16384 MF_RIGHTJUSTIFY = 16384 MF_MOUSESELECT = 32768 MF_END = 128 MFT_STRING = MF_STRING MFT_BITMAP = MF_BITMAP MFT_MENUBARBREAK = MF_MENUBARBREAK MFT_MENUBREAK = MF_MENUBREAK MFT_OWNERDRAW = MF_OWNERDRAW MFT_RADIOCHECK = 512 MFT_SEPARATOR = MF_SEPARATOR MFT_RIGHTORDER = 8192 MFT_RIGHTJUSTIFY = MF_RIGHTJUSTIFY MFS_GRAYED = 3 MFS_DISABLED = MFS_GRAYED MFS_CHECKED = MF_CHECKED MFS_HILITE = MF_HILITE MFS_ENABLED = MF_ENABLED MFS_UNCHECKED = MF_UNCHECKED MFS_UNHILITE = MF_UNHILITE MFS_DEFAULT = MF_DEFAULT MFS_MASK = 4235L MFS_HOTTRACKDRAWN = 268435456 MFS_CACHEDBMP = 536870912 MFS_BOTTOMGAPDROP = 1073741824 MFS_TOPGAPDROP = -2147483648 MFS_GAPDROP = -1073741824 SC_SIZE = 61440 SC_MOVE = 61456 SC_MINIMIZE = 61472 SC_MAXIMIZE = 61488 SC_NEXTWINDOW = 61504 SC_PREVWINDOW = 61520 SC_CLOSE = 61536 SC_VSCROLL = 61552 SC_HSCROLL = 61568 SC_MOUSEMENU = 61584 SC_KEYMENU = 61696 SC_ARRANGE = 61712 SC_RESTORE = 61728 SC_TASKLIST = 61744 SC_SCREENSAVE = 61760 SC_HOTKEY = 61776 SC_DEFAULT = 61792 SC_MONITORPOWER = 61808 SC_CONTEXTHELP = 61824 SC_SEPARATOR = 61455 SC_ICON = SC_MINIMIZE SC_ZOOM = SC_MAXIMIZE IDC_ARROW = 32512 IDC_IBEAM = 32513 IDC_WAIT = 32514 IDC_CROSS = 32515 IDC_UPARROW = 32516 IDC_SIZE = 32640 # OBSOLETE: use IDC_SIZEALL IDC_ICON = 32641 # OBSOLETE: use IDC_ARROW IDC_SIZENWSE = 32642 IDC_SIZENESW = 32643 IDC_SIZEWE = 32644 IDC_SIZENS = 32645 IDC_SIZEALL = 32646 IDC_NO = 32648 IDC_HAND = 32649 IDC_APPSTARTING = 32650 IDC_HELP = 32651 IMAGE_BITMAP = 0 IMAGE_ICON = 1 IMAGE_CURSOR = 2 IMAGE_ENHMETAFILE = 3 LR_DEFAULTCOLOR = 0 LR_MONOCHROME = 1 LR_COLOR = 2 LR_COPYRETURNORG = 4 LR_COPYDELETEORG = 8 LR_LOADFROMFILE = 16 LR_LOADTRANSPARENT = 32 LR_DEFAULTSIZE = 64 LR_LOADREALSIZE = 128 LR_LOADMAP3DCOLORS = 4096 LR_CREATEDIBSECTION = 8192 LR_COPYFROMRESOURCE = 16384 LR_SHARED = 32768 DI_MASK = 1 DI_IMAGE = 2 DI_NORMAL = 3 DI_COMPAT = 4 DI_DEFAULTSIZE = 8 RES_ICON = 1 RES_CURSOR = 2 OBM_CLOSE = 32754 OBM_UPARROW = 32753 OBM_DNARROW = 32752 OBM_RGARROW = 32751 OBM_LFARROW = 32750 OBM_REDUCE = 32749 OBM_ZOOM = 32748 OBM_RESTORE = 32747 OBM_REDUCED = 32746 OBM_ZOOMD = 32745 OBM_RESTORED = 32744 OBM_UPARROWD = 32743 OBM_DNARROWD = 32742 OBM_RGARROWD = 32741 OBM_LFARROWD = 32740 OBM_MNARROW = 32739 OBM_COMBO = 32738 OBM_UPARROWI = 32737 OBM_DNARROWI = 32736 OBM_RGARROWI = 32735 OBM_LFARROWI = 32734 OBM_OLD_CLOSE = 32767 OBM_SIZE = 32766 OBM_OLD_UPARROW = 32765 OBM_OLD_DNARROW = 32764 OBM_OLD_RGARROW = 32763 OBM_OLD_LFARROW = 32762 OBM_BTSIZE = 32761 OBM_CHECK = 32760 OBM_CHECKBOXES = 32759 OBM_BTNCORNERS = 32758 OBM_OLD_REDUCE = 32757 OBM_OLD_ZOOM = 32756 OBM_OLD_RESTORE = 32755 OCR_NORMAL = 32512 OCR_IBEAM = 32513 OCR_WAIT = 32514 OCR_CROSS = 32515 OCR_UP = 32516 OCR_SIZE = 32640 OCR_ICON = 32641 OCR_SIZENWSE = 32642 OCR_SIZENESW = 32643 OCR_SIZEWE = 32644 OCR_SIZENS = 32645 OCR_SIZEALL = 32646 OCR_ICOCUR = 32647 OCR_NO = 32648 OCR_HAND = 32649 OCR_APPSTARTING = 32650 # winuser.h line 7455 OIC_SAMPLE = 32512 OIC_HAND = 32513 OIC_QUES = 32514 OIC_BANG = 32515 OIC_NOTE = 32516 OIC_WINLOGO = 32517 OIC_WARNING = OIC_BANG OIC_ERROR = OIC_HAND OIC_INFORMATION = OIC_NOTE ORD_LANGDRIVER = 1 IDI_APPLICATION = 32512 IDI_HAND = 32513 IDI_QUESTION = 32514 IDI_EXCLAMATION = 32515 IDI_ASTERISK = 32516 IDI_WINLOGO = 32517 IDI_WARNING = IDI_EXCLAMATION IDI_ERROR = IDI_HAND IDI_INFORMATION = IDI_ASTERISK IDOK = 1 IDCANCEL = 2 IDABORT = 3 IDRETRY = 4 IDIGNORE = 5 IDYES = 6 IDNO = 7 IDCLOSE = 8 IDHELP = 9 ES_LEFT = 0 ES_CENTER = 1 ES_RIGHT = 2 ES_MULTILINE = 4 ES_UPPERCASE = 8 ES_LOWERCASE = 16 ES_PASSWORD = 32 ES_AUTOVSCROLL = 64 ES_AUTOHSCROLL = 128 ES_NOHIDESEL = 256 ES_OEMCONVERT = 1024 ES_READONLY = 2048 ES_WANTRETURN = 4096 ES_NUMBER = 8192 EN_SETFOCUS = 256 EN_KILLFOCUS = 512 EN_CHANGE = 768 EN_UPDATE = 1024 EN_ERRSPACE = 1280 EN_MAXTEXT = 1281 EN_HSCROLL = 1537 EN_VSCROLL = 1538 EC_LEFTMARGIN = 1 EC_RIGHTMARGIN = 2 EC_USEFONTINFO = 65535 EMSIS_COMPOSITIONSTRING = 1 EIMES_GETCOMPSTRATONCE = 1 EIMES_CANCELCOMPSTRINFOCUS = 2 EIMES_COMPLETECOMPSTRKILLFOCUS = 4 EM_GETSEL = 176 EM_SETSEL = 177 EM_GETRECT = 178 EM_SETRECT = 179 EM_SETRECTNP = 180 EM_SCROLL = 181 EM_LINESCROLL = 182 EM_SCROLLCARET = 183 EM_GETMODIFY = 184 EM_SETMODIFY = 185 EM_GETLINECOUNT = 186 EM_LINEINDEX = 187 EM_SETHANDLE = 188 EM_GETHANDLE = 189 EM_GETTHUMB = 190 EM_LINELENGTH = 193 EM_REPLACESEL = 194 EM_GETLINE = 196 EM_LIMITTEXT = 197 EM_CANUNDO = 198 EM_UNDO = 199 EM_FMTLINES = 200 EM_LINEFROMCHAR = 201 EM_SETTABSTOPS = 203 EM_SETPASSWORDCHAR = 204 EM_EMPTYUNDOBUFFER = 205 EM_GETFIRSTVISIBLELINE = 206 EM_SETREADONLY = 207 EM_SETWORDBREAKPROC = 208 EM_GETWORDBREAKPROC = 209 EM_GETPASSWORDCHAR = 210 EM_SETMARGINS = 211 EM_GETMARGINS = 212 EM_SETLIMITTEXT = EM_LIMITTEXT EM_GETLIMITTEXT = 213 EM_POSFROMCHAR = 214 EM_CHARFROMPOS = 215 EM_SETIMESTATUS = 216 EM_GETIMESTATUS = 217 WB_LEFT = 0 WB_RIGHT = 1 WB_ISDELIMITER = 2 BS_PUSHBUTTON = 0 BS_DEFPUSHBUTTON = 1 BS_CHECKBOX = 2 BS_AUTOCHECKBOX = 3 BS_RADIOBUTTON = 4 BS_3STATE = 5 BS_AUTO3STATE = 6 BS_GROUPBOX = 7 BS_USERBUTTON = 8 BS_AUTORADIOBUTTON = 9 BS_OWNERDRAW = 11L BS_LEFTTEXT = 32 BS_TEXT = 0 BS_ICON = 64 BS_BITMAP = 128 BS_LEFT = 256 BS_RIGHT = 512 BS_CENTER = 768 BS_TOP = 1024 BS_BOTTOM = 2048 BS_VCENTER = 3072 BS_PUSHLIKE = 4096 BS_MULTILINE = 8192 BS_NOTIFY = 16384 BS_FLAT = 32768 BS_RIGHTBUTTON = BS_LEFTTEXT BN_CLICKED = 0 BN_PAINT = 1 BN_HILITE = 2 BN_UNHILITE = 3 BN_DISABLE = 4 BN_DOUBLECLICKED = 5 BN_PUSHED = BN_HILITE BN_UNPUSHED = BN_UNHILITE BN_DBLCLK = BN_DOUBLECLICKED BN_SETFOCUS = 6 BN_KILLFOCUS = 7 BM_GETCHECK = 240 BM_SETCHECK = 241 BM_GETSTATE = 242 BM_SETSTATE = 243 BM_SETSTYLE = 244 BM_CLICK = 245 BM_GETIMAGE = 246 BM_SETIMAGE = 247 BST_UNCHECKED = 0 BST_CHECKED = 1 BST_INDETERMINATE = 2 BST_PUSHED = 4 BST_FOCUS = 8 SS_LEFT = 0 SS_CENTER = 1 SS_RIGHT = 2 SS_ICON = 3 SS_BLACKRECT = 4 SS_GRAYRECT = 5 SS_WHITERECT = 6 SS_BLACKFRAME = 7 SS_GRAYFRAME = 8 SS_WHITEFRAME = 9 SS_USERITEM = 10 SS_SIMPLE = 11 SS_LEFTNOWORDWRAP = 12 SS_BITMAP = 14 SS_OWNERDRAW = 13 SS_ENHMETAFILE = 15 SS_ETCHEDHORZ = 16 SS_ETCHEDVERT = 17 SS_ETCHEDFRAME = 18 SS_TYPEMASK = 31 SS_NOPREFIX = 128 SS_NOTIFY = 256 SS_CENTERIMAGE = 512 SS_RIGHTJUST = 1024 SS_REALSIZEIMAGE = 2048 SS_SUNKEN = 4096 SS_ENDELLIPSIS = 16384 SS_PATHELLIPSIS = 32768 SS_WORDELLIPSIS = 49152 SS_ELLIPSISMASK = 49152 STM_SETICON = 368 STM_GETICON = 369 STM_SETIMAGE = 370 STM_GETIMAGE = 371 STN_CLICKED = 0 STN_DBLCLK = 1 STN_ENABLE = 2 STN_DISABLE = 3 STM_MSGMAX = 372 DWL_MSGRESULT = 0 DWL_DLGPROC = 4 DWL_USER = 8 DDL_READWRITE = 0 DDL_READONLY = 1 DDL_HIDDEN = 2 DDL_SYSTEM = 4 DDL_DIRECTORY = 16 DDL_ARCHIVE = 32 DDL_POSTMSGS = 8192 DDL_DRIVES = 16384 DDL_EXCLUSIVE = 32768 #from winuser.h line 153 RT_CURSOR = 1 RT_BITMAP = 2 RT_ICON = 3 RT_MENU = 4 RT_DIALOG = 5 RT_STRING = 6 RT_FONTDIR = 7 RT_FONT = 8 RT_ACCELERATOR = 9 RT_RCDATA = 10 RT_MESSAGETABLE = 11 DIFFERENCE = 11 RT_GROUP_CURSOR = (RT_CURSOR + DIFFERENCE) RT_GROUP_ICON = (RT_ICON + DIFFERENCE) RT_VERSION = 16 RT_DLGINCLUDE = 17 RT_PLUGPLAY = 19 RT_VXD = 20 RT_ANICURSOR = 21 RT_ANIICON = 22 RT_HTML = 23 # from winuser.h line 218 SB_HORZ = 0 SB_VERT = 1 SB_CTL = 2 SB_BOTH = 3 SB_LINEUP = 0 SB_LINELEFT = 0 SB_LINEDOWN = 1 SB_LINERIGHT = 1 SB_PAGEUP = 2 SB_PAGELEFT = 2 SB_PAGEDOWN = 3 SB_PAGERIGHT = 3 SB_THUMBPOSITION = 4 SB_THUMBTRACK = 5 SB_TOP = 6 SB_LEFT = 6 SB_BOTTOM = 7 SB_RIGHT = 7 SB_ENDSCROLL = 8 SW_HIDE = 0 SW_SHOWNORMAL = 1 SW_NORMAL = 1 SW_SHOWMINIMIZED = 2 SW_SHOWMAXIMIZED = 3 SW_MAXIMIZE = 3 SW_SHOWNOACTIVATE = 4 SW_SHOW = 5 SW_MINIMIZE = 6 SW_SHOWMINNOACTIVE = 7 SW_SHOWNA = 8 SW_RESTORE = 9 SW_SHOWDEFAULT = 10 SW_FORCEMINIMIZE = 11 SW_MAX = 11 HIDE_WINDOW = 0 SHOW_OPENWINDOW = 1 SHOW_ICONWINDOW = 2 SHOW_FULLSCREEN = 3 SHOW_OPENNOACTIVATE = 4 SW_PARENTCLOSING = 1 SW_OTHERZOOM = 2 SW_PARENTOPENING = 3 SW_OTHERUNZOOM = 4 AW_HOR_POSITIVE = 1 AW_HOR_NEGATIVE = 2 AW_VER_POSITIVE = 4 AW_VER_NEGATIVE = 8 AW_CENTER = 16 AW_HIDE = 65536 AW_ACTIVATE = 131072 AW_SLIDE = 262144 AW_BLEND = 524288 KF_EXTENDED = 256 KF_DLGMODE = 2048 KF_MENUMODE = 4096 KF_ALTDOWN = 8192 KF_REPEAT = 16384 KF_UP = 32768 VK_LBUTTON = 1 VK_RBUTTON = 2 VK_CANCEL = 3 VK_MBUTTON = 4 VK_BACK = 8 VK_TAB = 9 VK_CLEAR = 12 VK_RETURN = 13 VK_SHIFT = 16 VK_CONTROL = 17 VK_MENU = 18 VK_PAUSE = 19 VK_CAPITAL = 20 VK_KANA = 21 VK_HANGEUL = 21 # old name - should be here for compatibility VK_HANGUL = 21 VK_JUNJA = 23 VK_FINAL = 24 VK_HANJA = 25 VK_KANJI = 25 VK_ESCAPE = 27 VK_CONVERT = 28 VK_NONCONVERT = 29 VK_ACCEPT = 30 VK_MODECHANGE = 31 VK_SPACE = 32 VK_PRIOR = 33 VK_NEXT = 34 VK_END = 35 VK_HOME = 36 VK_LEFT = 37 VK_UP = 38 VK_RIGHT = 39 VK_DOWN = 40 VK_SELECT = 41 VK_PRINT = 42 VK_EXECUTE = 43 VK_SNAPSHOT = 44 VK_INSERT = 45 VK_DELETE = 46 VK_HELP = 47 VK_LWIN = 91 VK_RWIN = 92 VK_APPS = 93 VK_NUMPAD0 = 96 VK_NUMPAD1 = 97 VK_NUMPAD2 = 98 VK_NUMPAD3 = 99 VK_NUMPAD4 = 100 VK_NUMPAD5 = 101 VK_NUMPAD6 = 102 VK_NUMPAD7 = 103 VK_NUMPAD8 = 104 VK_NUMPAD9 = 105 VK_MULTIPLY = 106 VK_ADD = 107 VK_SEPARATOR = 108 VK_SUBTRACT = 109 VK_DECIMAL = 110 VK_DIVIDE = 111 VK_F1 = 112 VK_F2 = 113 VK_F3 = 114 VK_F4 = 115 VK_F5 = 116 VK_F6 = 117 VK_F7 = 118 VK_F8 = 119 VK_F9 = 120 VK_F10 = 121 VK_F11 = 122 VK_F12 = 123 VK_F13 = 124 VK_F14 = 125 VK_F15 = 126 VK_F16 = 127 VK_F17 = 128 VK_F18 = 129 VK_F19 = 130 VK_F20 = 131 VK_F21 = 132 VK_F22 = 133 VK_F23 = 134 VK_F24 = 135 VK_NUMLOCK = 144 VK_SCROLL = 145 VK_LSHIFT = 160 VK_RSHIFT = 161 VK_LCONTROL = 162 VK_RCONTROL = 163 VK_LMENU = 164 VK_RMENU = 165 VK_PROCESSKEY = 229 VK_ATTN = 246 VK_CRSEL = 247 VK_EXSEL = 248 VK_EREOF = 249 VK_PLAY = 250 VK_ZOOM = 251 VK_NONAME = 252 VK_PA1 = 253 VK_OEM_CLEAR = 254 # multi-media related "keys" MOUSEEVENTF_XDOWN = 0x0080 MOUSEEVENTF_XUP = 0x0100 MOUSEEVENTF_WHEEL = 0x0800 VK_XBUTTON1 = 0x05 VK_XBUTTON2 = 0x06 VK_VOLUME_MUTE = 0xAD VK_VOLUME_DOWN = 0xAE VK_VOLUME_UP = 0xAF VK_MEDIA_NEXT_TRACK = 0xB0 VK_MEDIA_PREV_TRACK = 0xB1 VK_MEDIA_PLAY_PAUSE = 0xB3 VK_BROWSER_BACK = 0xA6 VK_BROWSER_FORWARD = 0xA7 WH_MIN = (-1) WH_MSGFILTER = (-1) WH_JOURNALRECORD = 0 WH_JOURNALPLAYBACK = 1 WH_KEYBOARD = 2 WH_GETMESSAGE = 3 WH_CALLWNDPROC = 4 WH_CBT = 5 WH_SYSMSGFILTER = 6 WH_MOUSE = 7 WH_HARDWARE = 8 WH_DEBUG = 9 WH_SHELL = 10 WH_FOREGROUNDIDLE = 11 WH_CALLWNDPROCRET = 12 WH_KEYBOARD_LL = 13 WH_MOUSE_LL = 14 WH_MAX = 14 WH_MINHOOK = WH_MIN WH_MAXHOOK = WH_MAX HC_ACTION = 0 HC_GETNEXT = 1 HC_SKIP = 2 HC_NOREMOVE = 3 HC_NOREM = HC_NOREMOVE HC_SYSMODALON = 4 HC_SYSMODALOFF = 5 HCBT_MOVESIZE = 0 HCBT_MINMAX = 1 HCBT_QS = 2 HCBT_CREATEWND = 3 HCBT_DESTROYWND = 4 HCBT_ACTIVATE = 5 HCBT_CLICKSKIPPED = 6 HCBT_KEYSKIPPED = 7 HCBT_SYSCOMMAND = 8 HCBT_SETFOCUS = 9 MSGF_DIALOGBOX = 0 MSGF_MESSAGEBOX = 1 MSGF_MENU = 2 #MSGF_MOVE = 3 #MSGF_SIZE = 4 MSGF_SCROLLBAR = 5 MSGF_NEXTWINDOW = 6 #MSGF_MAINLOOP = 8 MSGF_MAX = 8 MSGF_USER = 4096 HSHELL_WINDOWCREATED = 1 HSHELL_WINDOWDESTROYED = 2 HSHELL_ACTIVATESHELLWINDOW = 3 HSHELL_WINDOWACTIVATED = 4 HSHELL_GETMINRECT = 5 HSHELL_REDRAW = 6 HSHELL_TASKMAN = 7 HSHELL_LANGUAGE = 8 HSHELL_ACCESSIBILITYSTATE = 11 ACCESS_STICKYKEYS = 1 ACCESS_FILTERKEYS = 2 ACCESS_MOUSEKEYS = 3 # winuser.h line 624 LLKHF_EXTENDED = 1 LLKHF_INJECTED = 16 LLKHF_ALTDOWN = 32 LLKHF_UP = 128 LLMHF_INJECTED = 1 # line 692 HKL_PREV = 0 HKL_NEXT = 1 KLF_ACTIVATE = 1 KLF_SUBSTITUTE_OK = 2 KLF_UNLOADPREVIOUS = 4 KLF_REORDER = 8 KLF_REPLACELANG = 16 KLF_NOTELLSHELL = 128 KLF_SETFORPROCESS = 256 KL_NAMELENGTH = 9 DESKTOP_READOBJECTS = 1 DESKTOP_CREATEWINDOW = 2 DESKTOP_CREATEMENU = 4 DESKTOP_HOOKCONTROL = 8 DESKTOP_JOURNALRECORD = 16 DESKTOP_JOURNALPLAYBACK = 32 DESKTOP_ENUMERATE = 64 DESKTOP_WRITEOBJECTS = 128 DESKTOP_SWITCHDESKTOP = 256 DF_ALLOWOTHERACCOUNTHOOK = 1 WINSTA_ENUMDESKTOPS = 1 WINSTA_READATTRIBUTES = 2 WINSTA_ACCESSCLIPBOARD = 4 WINSTA_CREATEDESKTOP = 8 WINSTA_WRITEATTRIBUTES = 16 WINSTA_ACCESSGLOBALATOMS = 32 WINSTA_EXITWINDOWS = 64 WINSTA_ENUMERATE = 256 WINSTA_READSCREEN = 512 WSF_VISIBLE = 1 UOI_FLAGS = 1 UOI_NAME = 2 UOI_TYPE = 3 UOI_USER_SID = 4 GWL_WNDPROC = (-4) GWL_HINSTANCE = (-6) GWL_HWNDPARENT = (-8) GWL_STYLE = (-16) GWL_EXSTYLE = (-20) GWL_USERDATA = (-21) GWL_ID = (-12) GCL_MENUNAME = (-8) GCL_HBRBACKGROUND = (-10) GCL_HCURSOR = (-12) GCL_HICON = (-14) GCL_HMODULE = (-16) GCL_CBWNDEXTRA = (-18) GCL_CBCLSEXTRA = (-20) GCL_WNDPROC = (-24) GCL_STYLE = (-26) GCW_ATOM = (-32) GCL_HICONSM = (-34) # line 1291 WM_NULL = 0 WM_CREATE = 1 WM_DESTROY = 2 WM_MOVE = 3 WM_SIZE = 5 WM_ACTIVATE = 6 WA_INACTIVE = 0 WA_ACTIVE = 1 WA_CLICKACTIVE = 2 WM_SETFOCUS = 7 WM_KILLFOCUS = 8 WM_ENABLE = 10 WM_SETREDRAW = 11 WM_SETTEXT = 12 WM_GETTEXT = 13 WM_GETTEXTLENGTH = 14 WM_PAINT = 15 WM_CLOSE = 16 WM_QUERYENDSESSION = 17 WM_QUIT = 18 WM_QUERYOPEN = 19 WM_ERASEBKGND = 20 WM_SYSCOLORCHANGE = 21 WM_ENDSESSION = 22 WM_SHOWWINDOW = 24 WM_WININICHANGE = 26 WM_SETTINGCHANGE = WM_WININICHANGE WM_DEVMODECHANGE = 27 WM_ACTIVATEAPP = 28 WM_FONTCHANGE = 29 WM_TIMECHANGE = 30 WM_CANCELMODE = 31 WM_SETCURSOR = 32 WM_MOUSEACTIVATE = 33 WM_CHILDACTIVATE = 34 WM_QUEUESYNC = 35 WM_GETMINMAXINFO = 36 WM_PAINTICON = 38 WM_ICONERASEBKGND = 39 WM_NEXTDLGCTL = 40 WM_SPOOLERSTATUS = 42 WM_DRAWITEM = 43 WM_MEASUREITEM = 44 WM_DELETEITEM = 45 WM_VKEYTOITEM = 46 WM_CHARTOITEM = 47 WM_SETFONT = 48 WM_GETFONT = 49 WM_SETHOTKEY = 50 WM_GETHOTKEY = 51 WM_QUERYDRAGICON = 55 WM_COMPAREITEM = 57 WM_GETOBJECT = 61 WM_COMPACTING = 65 WM_COMMNOTIFY = 68 WM_WINDOWPOSCHANGING = 70 WM_WINDOWPOSCHANGED = 71 WM_POWER = 72 PWR_OK = 1 PWR_FAIL = (-1) PWR_SUSPENDREQUEST = 1 PWR_SUSPENDRESUME = 2 PWR_CRITICALRESUME = 3 WM_COPYDATA = 74 WM_CANCELJOURNAL = 75 WM_NOTIFY = 78 WM_INPUTLANGCHANGEREQUEST = 80 WM_INPUTLANGCHANGE = 81 WM_TCARD = 82 WM_HELP = 83 WM_USERCHANGED = 84 WM_NOTIFYFORMAT = 85 NFR_ANSI = 1 NFR_UNICODE = 2 NF_QUERY = 3 NF_REQUERY = 4 WM_CONTEXTMENU = 123 WM_STYLECHANGING = 124 WM_STYLECHANGED = 125 WM_DISPLAYCHANGE = 126 WM_GETICON = 127 WM_SETICON = 128 WM_NCCREATE = 129 WM_NCDESTROY = 130 WM_NCCALCSIZE = 131 WM_NCHITTEST = 132 WM_NCPAINT = 133 WM_NCACTIVATE = 134 WM_GETDLGCODE = 135 WM_SYNCPAINT = 136 WM_NCMOUSEMOVE = 160 WM_NCLBUTTONDOWN = 161 WM_NCLBUTTONUP = 162 WM_NCLBUTTONDBLCLK = 163 WM_NCRBUTTONDOWN = 164 WM_NCRBUTTONUP = 165 WM_NCRBUTTONDBLCLK = 166 WM_NCMBUTTONDOWN = 167 WM_NCMBUTTONUP = 168 WM_NCMBUTTONDBLCLK = 169 WM_KEYFIRST = 256 WM_KEYDOWN = 256 WM_KEYUP = 257 WM_CHAR = 258 WM_DEADCHAR = 259 WM_SYSKEYDOWN = 260 WM_SYSKEYUP = 261 WM_SYSCHAR = 262 WM_SYSDEADCHAR = 263 WM_KEYLAST = 264 WM_IME_STARTCOMPOSITION = 269 WM_IME_ENDCOMPOSITION = 270 WM_IME_COMPOSITION = 271 WM_IME_KEYLAST = 271 WM_INITDIALOG = 272 WM_COMMAND = 273 WM_SYSCOMMAND = 274 WM_TIMER = 275 WM_HSCROLL = 276 WM_VSCROLL = 277 WM_INITMENU = 278 WM_INITMENUPOPUP = 279 WM_MENUSELECT = 287 WM_MENUCHAR = 288 WM_ENTERIDLE = 289 WM_MENURBUTTONUP = 290 WM_MENUDRAG = 291 WM_MENUGETOBJECT = 292 WM_UNINITMENUPOPUP = 293 WM_MENUCOMMAND = 294 WM_CTLCOLORMSGBOX = 306 WM_CTLCOLOREDIT = 307 WM_CTLCOLORLISTBOX = 308 WM_CTLCOLORBTN = 309 WM_CTLCOLORDLG = 310 WM_CTLCOLORSCROLLBAR = 311 WM_CTLCOLORSTATIC = 312 WM_MOUSEFIRST = 512 WM_MOUSEMOVE = 512 WM_LBUTTONDOWN = 513 WM_LBUTTONUP = 514 WM_LBUTTONDBLCLK = 515 WM_RBUTTONDOWN = 516 WM_RBUTTONUP = 517 WM_RBUTTONDBLCLK = 518 WM_MBUTTONDOWN = 519 WM_MBUTTONUP = 520 WM_MBUTTONDBLCLK = 521 WM_MOUSEWHEEL = 522 WM_MOUSELAST = 522 WHEEL_DELTA = 120 # Value for rolling one detent WHEEL_PAGESCROLL = -1 # Scroll one page WM_PARENTNOTIFY = 528 MENULOOP_WINDOW = 0 MENULOOP_POPUP = 1 WM_ENTERMENULOOP = 529 WM_EXITMENULOOP = 530 WM_NEXTMENU = 531 WM_SIZING = 532 WM_CAPTURECHANGED = 533 WM_MOVING = 534 WM_POWERBROADCAST = 536 PBT_APMQUERYSUSPEND = 0 PBT_APMQUERYSTANDBY = 1 PBT_APMQUERYSUSPENDFAILED = 2 PBT_APMQUERYSTANDBYFAILED = 3 PBT_APMSUSPEND = 4 PBT_APMSTANDBY = 5 PBT_APMRESUMECRITICAL = 6 PBT_APMRESUMESUSPEND = 7 PBT_APMRESUMESTANDBY = 8 PBTF_APMRESUMEFROMFAILURE = 1 PBT_APMBATTERYLOW = 9 PBT_APMPOWERSTATUSCHANGE = 10 PBT_APMOEMEVENT = 11 PBT_APMRESUMEAUTOMATIC = 18 WM_DEVICECHANGE = 537 WM_MDICREATE = 544 WM_MDIDESTROY = 545 WM_MDIACTIVATE = 546 WM_MDIRESTORE = 547 WM_MDINEXT = 548 WM_MDIMAXIMIZE = 549 WM_MDITILE = 550 WM_MDICASCADE = 551 WM_MDIICONARRANGE = 552 WM_MDIGETACTIVE = 553 WM_MDISETMENU = 560 WM_ENTERSIZEMOVE = 561 WM_EXITSIZEMOVE = 562 WM_DROPFILES = 563 WM_MDIREFRESHMENU = 564 WM_IME_SETCONTEXT = 641 WM_IME_NOTIFY = 642 WM_IME_CONTROL = 643 WM_IME_COMPOSITIONFULL = 644 WM_IME_SELECT = 645 WM_IME_CHAR = 646 WM_IME_REQUEST = 648 WM_IME_KEYDOWN = 656 WM_IME_KEYUP = 657 WM_MOUSEHOVER = 673 WM_MOUSELEAVE = 675 WM_CUT = 768 WM_COPY = 769 WM_PASTE = 770 WM_CLEAR = 771 WM_UNDO = 772 WM_RENDERFORMAT = 773 WM_RENDERALLFORMATS = 774 WM_DESTROYCLIPBOARD = 775 WM_DRAWCLIPBOARD = 776 WM_PAINTCLIPBOARD = 777 WM_VSCROLLCLIPBOARD = 778 WM_SIZECLIPBOARD = 779 WM_ASKCBFORMATNAME = 780 WM_CHANGECBCHAIN = 781 WM_HSCROLLCLIPBOARD = 782 WM_QUERYNEWPALETTE = 783 WM_PALETTEISCHANGING = 784 WM_PALETTECHANGED = 785 WM_HOTKEY = 786 WM_PRINT = 791 WM_PRINTCLIENT = 792 WM_HANDHELDFIRST = 856 WM_HANDHELDLAST = 863 WM_AFXFIRST = 864 WM_AFXLAST = 895 WM_PENWINFIRST = 896 WM_PENWINLAST = 911 WM_APP = 32768 WMSZ_LEFT = 1 WMSZ_RIGHT = 2 WMSZ_TOP = 3 WMSZ_TOPLEFT = 4 WMSZ_TOPRIGHT = 5 WMSZ_BOTTOM = 6 WMSZ_BOTTOMLEFT = 7 WMSZ_BOTTOMRIGHT = 8 #ST_BEGINSWP = 0 #ST_ENDSWP = 1 HTERROR = (-2) HTTRANSPARENT = (-1) HTNOWHERE = 0 HTCLIENT = 1 HTCAPTION = 2 HTSYSMENU = 3 HTGROWBOX = 4 HTSIZE = HTGROWBOX HTMENU = 5 HTHSCROLL = 6 HTVSCROLL = 7 HTMINBUTTON = 8 HTMAXBUTTON = 9 HTLEFT = 10 HTRIGHT = 11 HTTOP = 12 HTTOPLEFT = 13 HTTOPRIGHT = 14 HTBOTTOM = 15 HTBOTTOMLEFT = 16 HTBOTTOMRIGHT = 17 HTBORDER = 18 HTREDUCE = HTMINBUTTON HTZOOM = HTMAXBUTTON HTSIZEFIRST = HTLEFT HTSIZELAST = HTBOTTOMRIGHT HTOBJECT = 19 HTCLOSE = 20 HTHELP = 21 SMTO_NORMAL = 0 SMTO_BLOCK = 1 SMTO_ABORTIFHUNG = 2 SMTO_NOTIMEOUTIFNOTHUNG = 8 MA_ACTIVATE = 1 MA_ACTIVATEANDEAT = 2 MA_NOACTIVATE = 3 MA_NOACTIVATEANDEAT = 4 ICON_SMALL = 0 ICON_BIG = 1 SIZE_RESTORED = 0 SIZE_MINIMIZED = 1 SIZE_MAXIMIZED = 2 SIZE_MAXSHOW = 3 SIZE_MAXHIDE = 4 SIZENORMAL = SIZE_RESTORED SIZEICONIC = SIZE_MINIMIZED SIZEFULLSCREEN = SIZE_MAXIMIZED SIZEZOOMSHOW = SIZE_MAXSHOW SIZEZOOMHIDE = SIZE_MAXHIDE WVR_ALIGNTOP = 16 WVR_ALIGNLEFT = 32 WVR_ALIGNBOTTOM = 64 WVR_ALIGNRIGHT = 128 WVR_HREDRAW = 256 WVR_VREDRAW = 512 WVR_REDRAW = (WVR_HREDRAW | WVR_VREDRAW) WVR_VALIDRECTS = 1024 MK_LBUTTON = 1 MK_RBUTTON = 2 MK_SHIFT = 4 MK_CONTROL = 8 MK_MBUTTON = 16 TME_HOVER = 1 TME_LEAVE = 2 TME_QUERY = 1073741824 TME_CANCEL = -2147483648 HOVER_DEFAULT = -1 WS_OVERLAPPED = 0 WS_POPUP = -2147483648 WS_CHILD = 1073741824 WS_MINIMIZE = 536870912 WS_VISIBLE = 268435456 WS_DISABLED = 134217728 WS_CLIPSIBLINGS = 67108864 WS_CLIPCHILDREN = 33554432 WS_MAXIMIZE = 16777216 WS_CAPTION = 12582912 WS_BORDER = 8388608 WS_DLGFRAME = 4194304 WS_VSCROLL = 2097152 WS_HSCROLL = 1048576 WS_SYSMENU = 524288 WS_THICKFRAME = 262144 WS_GROUP = 131072 WS_TABSTOP = 65536 WS_MINIMIZEBOX = 131072 WS_MAXIMIZEBOX = 65536 WS_TILED = WS_OVERLAPPED WS_ICONIC = WS_MINIMIZE WS_SIZEBOX = WS_THICKFRAME WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED | \ WS_CAPTION | \ WS_SYSMENU | \ WS_THICKFRAME | \ WS_MINIMIZEBOX | \ WS_MAXIMIZEBOX) WS_POPUPWINDOW = (WS_POPUP | \ WS_BORDER | \ WS_SYSMENU) WS_CHILDWINDOW = (WS_CHILD) WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW WS_EX_DLGMODALFRAME = 1 WS_EX_NOPARENTNOTIFY = 4 WS_EX_TOPMOST = 8 WS_EX_ACCEPTFILES = 16 WS_EX_TRANSPARENT = 32 WS_EX_MDICHILD = 64 WS_EX_TOOLWINDOW = 128 WS_EX_WINDOWEDGE = 256 WS_EX_CLIENTEDGE = 512 WS_EX_CONTEXTHELP = 1024 WS_EX_RIGHT = 4096 WS_EX_LEFT = 0 WS_EX_RTLREADING = 8192 WS_EX_LTRREADING = 0 WS_EX_LEFTSCROLLBAR = 16384 WS_EX_RIGHTSCROLLBAR = 0 WS_EX_CONTROLPARENT = 65536 WS_EX_STATICEDGE = 131072 WS_EX_APPWINDOW = 262144 WS_EX_OVERLAPPEDWINDOW = (WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE) WS_EX_PALETTEWINDOW = (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST) WS_EX_LAYERED = 0x00080000 WS_EX_NOINHERITLAYOUT = 0x00100000 WS_EX_LAYOUTRTL = 0x00400000 WS_EX_COMPOSITED = 0x02000000 WS_EX_NOACTIVATE = 0x08000000 CS_VREDRAW = 1 CS_HREDRAW = 2 #CS_KEYCVTWINDOW = 0x0004 CS_DBLCLKS = 8 CS_OWNDC = 32 CS_CLASSDC = 64 CS_PARENTDC = 128 #CS_NOKEYCVT = 0x0100 CS_NOCLOSE = 512 CS_SAVEBITS = 2048 CS_BYTEALIGNCLIENT = 4096 CS_BYTEALIGNWINDOW = 8192 CS_GLOBALCLASS = 16384 CS_IME = 65536 PRF_CHECKVISIBLE = 1 PRF_NONCLIENT = 2 PRF_CLIENT = 4 PRF_ERASEBKGND = 8 PRF_CHILDREN = 16 PRF_OWNED = 32 BDR_RAISEDOUTER = 1 BDR_SUNKENOUTER = 2 BDR_RAISEDINNER = 4 BDR_SUNKENINNER = 8 BDR_OUTER = 3 BDR_INNER = 12 #BDR_RAISED = 0x0005 #BDR_SUNKEN = 0x000a EDGE_RAISED = (BDR_RAISEDOUTER | BDR_RAISEDINNER) EDGE_SUNKEN = (BDR_SUNKENOUTER | BDR_SUNKENINNER) EDGE_ETCHED = (BDR_SUNKENOUTER | BDR_RAISEDINNER) EDGE_BUMP = (BDR_RAISEDOUTER | BDR_SUNKENINNER) # winuser.h line 2879 ISMEX_NOSEND = 0 ISMEX_SEND = 1 ISMEX_NOTIFY = 2 ISMEX_CALLBACK = 4 ISMEX_REPLIED = 8 CW_USEDEFAULT = -2147483648 FLASHW_STOP = 0 FLASHW_CAPTION = 1 FLASHW_TRAY = 2 FLASHW_ALL = (FLASHW_CAPTION | FLASHW_TRAY) FLASHW_TIMER = 4 FLASHW_TIMERNOFG = 12 # winuser.h line 7963 DS_ABSALIGN = 1 DS_SYSMODAL = 2 DS_LOCALEDIT = 32 DS_SETFONT = 64 DS_MODALFRAME = 128 DS_NOIDLEMSG = 256 DS_SETFOREGROUND = 512 DS_3DLOOK = 4 DS_FIXEDSYS = 8 DS_NOFAILCREATE = 16 DS_CONTROL = 1024 DS_CENTER = 2048 DS_CENTERMOUSE = 4096 DS_CONTEXTHELP = 8192 DM_GETDEFID = (WM_USER+0) DM_SETDEFID = (WM_USER+1) DM_REPOSITION = (WM_USER+2) #PSM_PAGEINFO = (WM_USER+100) #PSM_SHEETINFO = (WM_USER+101) #PSI_SETACTIVE = 0x0001 #PSI_KILLACTIVE = 0x0002 #PSI_APPLY = 0x0003 #PSI_RESET = 0x0004 #PSI_HASHELP = 0x0005 #PSI_HELP = 0x0006 #PSI_CHANGED = 0x0001 #PSI_GUISTART = 0x0002 #PSI_REBOOT = 0x0003 #PSI_GETSIBLINGS = 0x0004 DC_HASDEFID = 21323 DLGC_WANTARROWS = 1 DLGC_WANTTAB = 2 DLGC_WANTALLKEYS = 4 DLGC_WANTMESSAGE = 4 DLGC_HASSETSEL = 8 DLGC_DEFPUSHBUTTON = 16 DLGC_UNDEFPUSHBUTTON = 32 DLGC_RADIOBUTTON = 64 DLGC_WANTCHARS = 128 DLGC_STATIC = 256 DLGC_BUTTON = 8192 LB_CTLCODE = 0 LB_OKAY = 0 LB_ERR = (-1) LB_ERRSPACE = (-2) LBN_ERRSPACE = (-2) LBN_SELCHANGE = 1 LBN_DBLCLK = 2 LBN_SELCANCEL = 3 LBN_SETFOCUS = 4 LBN_KILLFOCUS = 5 LB_ADDSTRING = 384 LB_INSERTSTRING = 385 LB_DELETESTRING = 386 LB_SELITEMRANGEEX = 387 LB_RESETCONTENT = 388 LB_SETSEL = 389 LB_SETCURSEL = 390 LB_GETSEL = 391 LB_GETCURSEL = 392 LB_GETTEXT = 393 LB_GETTEXTLEN = 394 LB_GETCOUNT = 395 LB_SELECTSTRING = 396 LB_DIR = 397 LB_GETTOPINDEX = 398 LB_FINDSTRING = 399 LB_GETSELCOUNT = 400 LB_GETSELITEMS = 401 LB_SETTABSTOPS = 402 LB_GETHORIZONTALEXTENT = 403 LB_SETHORIZONTALEXTENT = 404 LB_SETCOLUMNWIDTH = 405 LB_ADDFILE = 406 LB_SETTOPINDEX = 407 LB_GETITEMRECT = 408 LB_GETITEMDATA = 409 LB_SETITEMDATA = 410 LB_SELITEMRANGE = 411 LB_SETANCHORINDEX = 412 LB_GETANCHORINDEX = 413 LB_SETCARETINDEX = 414 LB_GETCARETINDEX = 415 LB_SETITEMHEIGHT = 416 LB_GETITEMHEIGHT = 417 LB_FINDSTRINGEXACT = 418 LB_SETLOCALE = 421 LB_GETLOCALE = 422 LB_SETCOUNT = 423 LB_INITSTORAGE = 424 LB_ITEMFROMPOINT = 425 LB_MSGMAX = 432 LBS_NOTIFY = 1 LBS_SORT = 2 LBS_NOREDRAW = 4 LBS_MULTIPLESEL = 8 LBS_OWNERDRAWFIXED = 16 LBS_OWNERDRAWVARIABLE = 32 LBS_HASSTRINGS = 64 LBS_USETABSTOPS = 128 LBS_NOINTEGRALHEIGHT = 256 LBS_MULTICOLUMN = 512 LBS_WANTKEYBOARDINPUT = 1024 LBS_EXTENDEDSEL = 2048 LBS_DISABLENOSCROLL = 4096 LBS_NODATA = 8192 LBS_NOSEL = 16384 LBS_STANDARD = (LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER) CB_OKAY = 0 CB_ERR = (-1) CB_ERRSPACE = (-2) CBN_ERRSPACE = (-1) CBN_SELCHANGE = 1 CBN_DBLCLK = 2 CBN_SETFOCUS = 3 CBN_KILLFOCUS = 4 CBN_EDITCHANGE = 5 CBN_EDITUPDATE = 6 CBN_DROPDOWN = 7 CBN_CLOSEUP = 8 CBN_SELENDOK = 9 CBN_SELENDCANCEL = 10 CBS_SIMPLE = 1 CBS_DROPDOWN = 2 CBS_DROPDOWNLIST = 3 CBS_OWNERDRAWFIXED = 16 CBS_OWNERDRAWVARIABLE = 32 CBS_AUTOHSCROLL = 64 CBS_OEMCONVERT = 128 CBS_SORT = 256 CBS_HASSTRINGS = 512 CBS_NOINTEGRALHEIGHT = 1024 CBS_DISABLENOSCROLL = 2048 CBS_UPPERCASE = 8192 CBS_LOWERCASE = 16384 CB_GETEDITSEL = 320 CB_LIMITTEXT = 321 CB_SETEDITSEL = 322 CB_ADDSTRING = 323 CB_DELETESTRING = 324 CB_DIR = 325 CB_GETCOUNT = 326 CB_GETCURSEL = 327 CB_GETLBTEXT = 328 CB_GETLBTEXTLEN = 329 CB_INSERTSTRING = 330 CB_RESETCONTENT = 331 CB_FINDSTRING = 332 CB_SELECTSTRING = 333 CB_SETCURSEL = 334 CB_SHOWDROPDOWN = 335 CB_GETITEMDATA = 336 CB_SETITEMDATA = 337 CB_GETDROPPEDCONTROLRECT = 338 CB_SETITEMHEIGHT = 339 CB_GETITEMHEIGHT = 340 CB_SETEXTENDEDUI = 341 CB_GETEXTENDEDUI = 342 CB_GETDROPPEDSTATE = 343 CB_FINDSTRINGEXACT = 344 CB_SETLOCALE = 345 CB_GETLOCALE = 346 CB_GETTOPINDEX = 347 CB_SETTOPINDEX = 348 CB_GETHORIZONTALEXTENT = 349 CB_SETHORIZONTALEXTENT = 350 CB_GETDROPPEDWIDTH = 351 CB_SETDROPPEDWIDTH = 352 CB_INITSTORAGE = 353 CB_MSGMAX = 354 SBS_HORZ = 0 SBS_VERT = 1 SBS_TOPALIGN = 2 SBS_LEFTALIGN = 2 SBS_BOTTOMALIGN = 4 SBS_RIGHTALIGN = 4 SBS_SIZEBOXTOPLEFTALIGN = 2 SBS_SIZEBOXBOTTOMRIGHTALIGN = 4 SBS_SIZEBOX = 8 SBS_SIZEGRIP = 16 SBM_SETPOS = 224 SBM_GETPOS = 225 SBM_SETRANGE = 226 SBM_SETRANGEREDRAW = 230 SBM_GETRANGE = 227 SBM_ENABLE_ARROWS = 228 SBM_SETSCROLLINFO = 233 SBM_GETSCROLLINFO = 234 SIF_RANGE = 1 SIF_PAGE = 2 SIF_POS = 4 SIF_DISABLENOSCROLL = 8 SIF_TRACKPOS = 16 SIF_ALL = (SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS) MDIS_ALLCHILDSTYLES = 1 MDITILE_VERTICAL = 0 MDITILE_HORIZONTAL = 1 MDITILE_SKIPDISABLED = 2 IMC_GETCANDIDATEPOS = 7 IMC_SETCANDIDATEPOS = 8 IMC_GETCOMPOSITIONFONT = 9 IMC_SETCOMPOSITIONFONT = 10 IMC_GETCOMPOSITIONWINDOW = 11 IMC_SETCOMPOSITIONWINDOW = 12 IMC_GETSTATUSWINDOWPOS = 15 IMC_SETSTATUSWINDOWPOS = 16 IMC_CLOSESTATUSWINDOW = 33 IMC_OPENSTATUSWINDOW = 34 # Generated by h2py from \msvc20\include\winnt.h # hacked and split by mhammond. DELETE = (65536) READ_CONTROL = (131072) WRITE_DAC = (262144) WRITE_OWNER = (524288) SYNCHRONIZE = (1048576) STANDARD_RIGHTS_REQUIRED = (983040) STANDARD_RIGHTS_READ = (READ_CONTROL) STANDARD_RIGHTS_WRITE = (READ_CONTROL) STANDARD_RIGHTS_EXECUTE = (READ_CONTROL) STANDARD_RIGHTS_ALL = (2031616) SPECIFIC_RIGHTS_ALL = (65535) ACCESS_SYSTEM_SECURITY = (16777216) MAXIMUM_ALLOWED = (33554432) GENERIC_READ = (-2147483648) GENERIC_WRITE = (1073741824) GENERIC_EXECUTE = (536870912) GENERIC_ALL = (268435456) SERVICE_KERNEL_DRIVER = 1 SERVICE_FILE_SYSTEM_DRIVER = 2 SERVICE_ADAPTER = 4 SERVICE_RECOGNIZER_DRIVER = 8 SERVICE_DRIVER = (SERVICE_KERNEL_DRIVER | \ SERVICE_FILE_SYSTEM_DRIVER | \ SERVICE_RECOGNIZER_DRIVER) SERVICE_WIN32_OWN_PROCESS = 16 SERVICE_WIN32_SHARE_PROCESS = 32 SERVICE_WIN32 = (SERVICE_WIN32_OWN_PROCESS | \ SERVICE_WIN32_SHARE_PROCESS) SERVICE_INTERACTIVE_PROCESS = 256 SERVICE_TYPE_ALL = (SERVICE_WIN32 | \ SERVICE_ADAPTER | \ SERVICE_DRIVER | \ SERVICE_INTERACTIVE_PROCESS) SERVICE_BOOT_START = 0 SERVICE_SYSTEM_START = 1 SERVICE_AUTO_START = 2 SERVICE_DEMAND_START = 3 SERVICE_DISABLED = 4 SERVICE_ERROR_IGNORE = 0 SERVICE_ERROR_NORMAL = 1 SERVICE_ERROR_SEVERE = 2 SERVICE_ERROR_CRITICAL = 3 TAPE_ERASE_SHORT = 0 TAPE_ERASE_LONG = 1 TAPE_LOAD = 0 TAPE_UNLOAD = 1 TAPE_TENSION = 2 TAPE_LOCK = 3 TAPE_UNLOCK = 4 TAPE_FORMAT = 5 TAPE_SETMARKS = 0 TAPE_FILEMARKS = 1 TAPE_SHORT_FILEMARKS = 2 TAPE_LONG_FILEMARKS = 3 TAPE_ABSOLUTE_POSITION = 0 TAPE_LOGICAL_POSITION = 1 TAPE_PSEUDO_LOGICAL_POSITION = 2 TAPE_REWIND = 0 TAPE_ABSOLUTE_BLOCK = 1 TAPE_LOGICAL_BLOCK = 2 TAPE_PSEUDO_LOGICAL_BLOCK = 3 TAPE_SPACE_END_OF_DATA = 4 TAPE_SPACE_RELATIVE_BLOCKS = 5 TAPE_SPACE_FILEMARKS = 6 TAPE_SPACE_SEQUENTIAL_FMKS = 7 TAPE_SPACE_SETMARKS = 8 TAPE_SPACE_SEQUENTIAL_SMKS = 9 TAPE_DRIVE_FIXED = 1 TAPE_DRIVE_SELECT = 2 TAPE_DRIVE_INITIATOR = 4 TAPE_DRIVE_ERASE_SHORT = 16 TAPE_DRIVE_ERASE_LONG = 32 TAPE_DRIVE_ERASE_BOP_ONLY = 64 TAPE_DRIVE_ERASE_IMMEDIATE = 128 TAPE_DRIVE_TAPE_CAPACITY = 256 TAPE_DRIVE_TAPE_REMAINING = 512 TAPE_DRIVE_FIXED_BLOCK = 1024 TAPE_DRIVE_VARIABLE_BLOCK = 2048 TAPE_DRIVE_WRITE_PROTECT = 4096 TAPE_DRIVE_EOT_WZ_SIZE = 8192 TAPE_DRIVE_ECC = 65536 TAPE_DRIVE_COMPRESSION = 131072 TAPE_DRIVE_PADDING = 262144 TAPE_DRIVE_REPORT_SMKS = 524288 TAPE_DRIVE_GET_ABSOLUTE_BLK = 1048576 TAPE_DRIVE_GET_LOGICAL_BLK = 2097152 TAPE_DRIVE_SET_EOT_WZ_SIZE = 4194304 TAPE_DRIVE_LOAD_UNLOAD = -2147483647 TAPE_DRIVE_TENSION = -2147483646 TAPE_DRIVE_LOCK_UNLOCK = -2147483644 TAPE_DRIVE_REWIND_IMMEDIATE = -2147483640 TAPE_DRIVE_SET_BLOCK_SIZE = -2147483632 TAPE_DRIVE_LOAD_UNLD_IMMED = -2147483616 TAPE_DRIVE_TENSION_IMMED = -2147483584 TAPE_DRIVE_LOCK_UNLK_IMMED = -2147483520 TAPE_DRIVE_SET_ECC = -2147483392 TAPE_DRIVE_SET_COMPRESSION = -2147483136 TAPE_DRIVE_SET_PADDING = -2147482624 TAPE_DRIVE_SET_REPORT_SMKS = -2147481600 TAPE_DRIVE_ABSOLUTE_BLK = -2147479552 TAPE_DRIVE_ABS_BLK_IMMED = -2147475456 TAPE_DRIVE_LOGICAL_BLK = -2147467264 TAPE_DRIVE_LOG_BLK_IMMED = -2147450880 TAPE_DRIVE_END_OF_DATA = -2147418112 TAPE_DRIVE_RELATIVE_BLKS = -2147352576 TAPE_DRIVE_FILEMARKS = -2147221504 TAPE_DRIVE_SEQUENTIAL_FMKS = -2146959360 TAPE_DRIVE_SETMARKS = -2146435072 TAPE_DRIVE_SEQUENTIAL_SMKS = -2145386496 TAPE_DRIVE_REVERSE_POSITION = -2143289344 TAPE_DRIVE_SPACE_IMMEDIATE = -2139095040 TAPE_DRIVE_WRITE_SETMARKS = -2130706432 TAPE_DRIVE_WRITE_FILEMARKS = -2113929216 TAPE_DRIVE_WRITE_SHORT_FMKS = -2080374784 TAPE_DRIVE_WRITE_LONG_FMKS = -2013265920 TAPE_DRIVE_WRITE_MARK_IMMED = -1879048192 TAPE_DRIVE_FORMAT = -1610612736 TAPE_DRIVE_FORMAT_IMMEDIATE = -1073741824 TAPE_FIXED_PARTITIONS = 0 TAPE_SELECT_PARTITIONS = 1 TAPE_INITIATOR_PARTITIONS = 2 # Generated by h2py from \msvc20\include\winnt.h # hacked and split by mhammond. APPLICATION_ERROR_MASK = 536870912 ERROR_SEVERITY_SUCCESS = 0 ERROR_SEVERITY_INFORMATIONAL = 1073741824 ERROR_SEVERITY_WARNING = -2147483648 ERROR_SEVERITY_ERROR = -1073741824 MINCHAR = 128 MAXCHAR = 127 MINSHORT = 32768 MAXSHORT = 32767 MINLONG = -2147483648 MAXLONG = 2147483647 MAXBYTE = 255 MAXWORD = 65535 MAXDWORD = -1 LANG_NEUTRAL = 0 LANG_BULGARIAN = 2 LANG_CHINESE = 4 LANG_CROATIAN = 26 LANG_CZECH = 5 LANG_DANISH = 6 LANG_DUTCH = 19 LANG_ENGLISH = 9 LANG_FINNISH = 11 LANG_FRENCH = 12 LANG_GERMAN = 7 LANG_GREEK = 8 LANG_HUNGARIAN = 14 LANG_ICELANDIC = 15 LANG_ITALIAN = 16 LANG_JAPANESE = 17 LANG_KOREAN = 18 LANG_NORWEGIAN = 20 LANG_POLISH = 21 LANG_PORTUGUESE = 22 LANG_ROMANIAN = 24 LANG_RUSSIAN = 25 LANG_SLOVAK = 27 LANG_SLOVENIAN = 36 LANG_SPANISH = 10 LANG_SWEDISH = 29 LANG_TURKISH = 31 SUBLANG_NEUTRAL = 0 SUBLANG_DEFAULT = 1 SUBLANG_SYS_DEFAULT = 2 SUBLANG_CHINESE_TRADITIONAL = 1 SUBLANG_CHINESE_SIMPLIFIED = 2 SUBLANG_CHINESE_HONGKONG = 3 SUBLANG_CHINESE_SINGAPORE = 4 SUBLANG_DUTCH = 1 SUBLANG_DUTCH_BELGIAN = 2 SUBLANG_ENGLISH_US = 1 SUBLANG_ENGLISH_UK = 2 SUBLANG_ENGLISH_AUS = 3 SUBLANG_ENGLISH_CAN = 4 SUBLANG_ENGLISH_NZ = 5 SUBLANG_ENGLISH_EIRE = 6 SUBLANG_FRENCH = 1 SUBLANG_FRENCH_BELGIAN = 2 SUBLANG_FRENCH_CANADIAN = 3 SUBLANG_FRENCH_SWISS = 4 SUBLANG_GERMAN = 1 SUBLANG_GERMAN_SWISS = 2 SUBLANG_GERMAN_AUSTRIAN = 3 SUBLANG_ITALIAN = 1 SUBLANG_ITALIAN_SWISS = 2 SUBLANG_NORWEGIAN_BOKMAL = 1 SUBLANG_NORWEGIAN_NYNORSK = 2 SUBLANG_PORTUGUESE = 2 SUBLANG_PORTUGUESE_BRAZILIAN = 1 SUBLANG_SPANISH = 1 SUBLANG_SPANISH_MEXICAN = 2 SUBLANG_SPANISH_MODERN = 3 SORT_DEFAULT = 0 SORT_JAPANESE_XJIS = 0 SORT_JAPANESE_UNICODE = 1 SORT_CHINESE_BIG5 = 0 SORT_CHINESE_UNICODE = 1 SORT_KOREAN_KSC = 0 SORT_KOREAN_UNICODE = 1 def PRIMARYLANGID(lgid): return ((lgid) & 1023) def SUBLANGID(lgid): return ((lgid) >> 10) NLS_VALID_LOCALE_MASK = 1048575 CONTEXT_PORTABLE_32BIT = 1048576 CONTEXT_ALPHA = 131072 CONTEXT_CONTROL = (CONTEXT_ALPHA | 1) CONTEXT_FLOATING_POINT = (CONTEXT_ALPHA | 2) CONTEXT_INTEGER = (CONTEXT_ALPHA | 4) CONTEXT_FULL = (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER) SIZE_OF_80387_REGISTERS = 80 CONTEXT_FULL = (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER) CONTEXT_CONTROL = 1 CONTEXT_FLOATING_POINT = 2 CONTEXT_INTEGER = 4 CONTEXT_FULL = (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER) PROCESS_TERMINATE = (1) PROCESS_CREATE_THREAD = (2) PROCESS_VM_OPERATION = (8) PROCESS_VM_READ = (16) PROCESS_VM_WRITE = (32) PROCESS_DUP_HANDLE = (64) PROCESS_CREATE_PROCESS = (128) PROCESS_SET_QUOTA = (256) PROCESS_SET_INFORMATION = (512) PROCESS_QUERY_INFORMATION = (1024) PROCESS_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 4095) THREAD_TERMINATE = (1) THREAD_SUSPEND_RESUME = (2) THREAD_GET_CONTEXT = (8) THREAD_SET_CONTEXT = (16) THREAD_SET_INFORMATION = (32) THREAD_QUERY_INFORMATION = (64) THREAD_SET_THREAD_TOKEN = (128) THREAD_IMPERSONATE = (256) THREAD_DIRECT_IMPERSONATION = (512) TLS_MINIMUM_AVAILABLE = 64 EVENT_MODIFY_STATE = 2 MUTANT_QUERY_STATE = 1 SEMAPHORE_MODIFY_STATE = 2 TIME_ZONE_ID_UNKNOWN = 0 TIME_ZONE_ID_STANDARD = 1 TIME_ZONE_ID_DAYLIGHT = 2 PROCESSOR_INTEL_386 = 386 PROCESSOR_INTEL_486 = 486 PROCESSOR_INTEL_PENTIUM = 586 PROCESSOR_INTEL_860 = 860 PROCESSOR_MIPS_R2000 = 2000 PROCESSOR_MIPS_R3000 = 3000 PROCESSOR_MIPS_R4000 = 4000 PROCESSOR_ALPHA_21064 = 21064 PROCESSOR_PPC_601 = 601 PROCESSOR_PPC_603 = 603 PROCESSOR_PPC_604 = 604 PROCESSOR_PPC_620 = 620 SECTION_QUERY = 1 SECTION_MAP_WRITE = 2 SECTION_MAP_READ = 4 SECTION_MAP_EXECUTE = 8 SECTION_EXTEND_SIZE = 16 PAGE_NOACCESS = 1 PAGE_READONLY = 2 PAGE_READWRITE = 4 PAGE_WRITECOPY = 8 PAGE_EXECUTE = 16 PAGE_EXECUTE_READ = 32 PAGE_EXECUTE_READWRITE = 64 PAGE_EXECUTE_WRITECOPY = 128 PAGE_GUARD = 256 PAGE_NOCACHE = 512 MEM_COMMIT = 4096 MEM_RESERVE = 8192 MEM_DECOMMIT = 16384 MEM_RELEASE = 32768 MEM_FREE = 65536 MEM_PRIVATE = 131072 MEM_MAPPED = 262144 MEM_TOP_DOWN = 1048576 # Generated by h2py from \msvc20\include\winnt.h # hacked and split by mhammond. SEC_FILE = 8388608 SEC_IMAGE = 16777216 SEC_RESERVE = 67108864 SEC_COMMIT = 134217728 SEC_NOCACHE = 268435456 MEM_IMAGE = SEC_IMAGE FILE_SHARE_READ = 1 FILE_SHARE_WRITE = 2 FILE_SHARE_DELETE = 4 FILE_ATTRIBUTE_READONLY = 1 FILE_ATTRIBUTE_HIDDEN = 2 FILE_ATTRIBUTE_SYSTEM = 4 FILE_ATTRIBUTE_DIRECTORY = 16 FILE_ATTRIBUTE_ARCHIVE = 32 FILE_ATTRIBUTE_NORMAL = 128 FILE_ATTRIBUTE_TEMPORARY = 256 FILE_ATTRIBUTE_ATOMIC_WRITE = 512 FILE_ATTRIBUTE_XACTION_WRITE = 1024 FILE_ATTRIBUTE_COMPRESSED = 2048 FILE_NOTIFY_CHANGE_FILE_NAME = 1 FILE_NOTIFY_CHANGE_DIR_NAME = 2 FILE_NOTIFY_CHANGE_ATTRIBUTES = 4 FILE_NOTIFY_CHANGE_SIZE = 8 FILE_NOTIFY_CHANGE_LAST_WRITE = 16 FILE_NOTIFY_CHANGE_SECURITY = 256 FILE_CASE_SENSITIVE_SEARCH = 1 FILE_CASE_PRESERVED_NAMES = 2 FILE_UNICODE_ON_DISK = 4 FILE_PERSISTENT_ACLS = 8 FILE_FILE_COMPRESSION = 16 FILE_VOLUME_IS_COMPRESSED = 32768 IO_COMPLETION_MODIFY_STATE = 2 DUPLICATE_CLOSE_SOURCE = 1 DUPLICATE_SAME_ACCESS = 2 SID_MAX_SUB_AUTHORITIES = (15) SECURITY_NULL_RID = (0) SECURITY_WORLD_RID = (0) SECURITY_LOCAL_RID = (0X00000000) SECURITY_CREATOR_OWNER_RID = (0) SECURITY_CREATOR_GROUP_RID = (1) SECURITY_DIALUP_RID = (1) SECURITY_NETWORK_RID = (2) SECURITY_BATCH_RID = (3) SECURITY_INTERACTIVE_RID = (4) SECURITY_SERVICE_RID = (6) SECURITY_ANONYMOUS_LOGON_RID = (7) SECURITY_LOGON_IDS_RID = (5) SECURITY_LOGON_IDS_RID_COUNT = (3) SECURITY_LOCAL_SYSTEM_RID = (18) SECURITY_NT_NON_UNIQUE = (21) SECURITY_BUILTIN_DOMAIN_RID = (32) DOMAIN_USER_RID_ADMIN = (500) DOMAIN_USER_RID_GUEST = (501) DOMAIN_GROUP_RID_ADMINS = (512) DOMAIN_GROUP_RID_USERS = (513) DOMAIN_GROUP_RID_GUESTS = (514) DOMAIN_ALIAS_RID_ADMINS = (544) DOMAIN_ALIAS_RID_USERS = (545) DOMAIN_ALIAS_RID_GUESTS = (546) DOMAIN_ALIAS_RID_POWER_USERS = (547) DOMAIN_ALIAS_RID_ACCOUNT_OPS = (548) DOMAIN_ALIAS_RID_SYSTEM_OPS = (549) DOMAIN_ALIAS_RID_PRINT_OPS = (550) DOMAIN_ALIAS_RID_BACKUP_OPS = (551) DOMAIN_ALIAS_RID_REPLICATOR = (552) SE_GROUP_MANDATORY = (1) SE_GROUP_ENABLED_BY_DEFAULT = (2) SE_GROUP_ENABLED = (4) SE_GROUP_OWNER = (8) SE_GROUP_LOGON_ID = (-1073741824) ACL_REVISION = (2) ACL_REVISION1 = (1) ACL_REVISION2 = (2) ACCESS_ALLOWED_ACE_TYPE = (0) ACCESS_DENIED_ACE_TYPE = (1) SYSTEM_AUDIT_ACE_TYPE = (2) SYSTEM_ALARM_ACE_TYPE = (3) OBJECT_INHERIT_ACE = (1) CONTAINER_INHERIT_ACE = (2) NO_PROPAGATE_INHERIT_ACE = (4) INHERIT_ONLY_ACE = (8) VALID_INHERIT_FLAGS = (15) SUCCESSFUL_ACCESS_ACE_FLAG = (64) FAILED_ACCESS_ACE_FLAG = (128) SECURITY_DESCRIPTOR_REVISION = (1) SECURITY_DESCRIPTOR_REVISION1 = (1) SECURITY_DESCRIPTOR_MIN_LENGTH = (20) SE_OWNER_DEFAULTED = (1) SE_GROUP_DEFAULTED = (2) SE_DACL_PRESENT = (4) SE_DACL_DEFAULTED = (8) SE_SACL_PRESENT = (16) SE_SACL_DEFAULTED = (32) SE_SELF_RELATIVE = (32768) SE_PRIVILEGE_ENABLED_BY_DEFAULT = (1) SE_PRIVILEGE_ENABLED = (2) SE_PRIVILEGE_USED_FOR_ACCESS = (-2147483648) PRIVILEGE_SET_ALL_NECESSARY = (1) SE_CREATE_TOKEN_NAME = "SeCreateTokenPrivilege" SE_ASSIGNPRIMARYTOKEN_NAME = "SeAssignPrimaryTokenPrivilege" SE_LOCK_MEMORY_NAME = "SeLockMemoryPrivilege" SE_INCREASE_QUOTA_NAME = "SeIncreaseQuotaPrivilege" SE_UNSOLICITED_INPUT_NAME = "SeUnsolicitedInputPrivilege" SE_MACHINE_ACCOUNT_NAME = "SeMachineAccountPrivilege" SE_TCB_NAME = "SeTcbPrivilege" SE_SECURITY_NAME = "SeSecurityPrivilege" SE_TAKE_OWNERSHIP_NAME = "SeTakeOwnershipPrivilege" SE_LOAD_DRIVER_NAME = "SeLoadDriverPrivilege" SE_SYSTEM_PROFILE_NAME = "SeSystemProfilePrivilege" SE_SYSTEMTIME_NAME = "SeSystemtimePrivilege" SE_PROF_SINGLE_PROCESS_NAME = "SeProfileSingleProcessPrivilege" SE_INC_BASE_PRIORITY_NAME = "SeIncreaseBasePriorityPrivilege" SE_CREATE_PAGEFILE_NAME = "SeCreatePagefilePrivilege" SE_CREATE_PERMANENT_NAME = "SeCreatePermanentPrivilege" SE_BACKUP_NAME = "SeBackupPrivilege" SE_RESTORE_NAME = "SeRestorePrivilege" SE_SHUTDOWN_NAME = "SeShutdownPrivilege" SE_DEBUG_NAME = "SeDebugPrivilege" SE_AUDIT_NAME = "SeAuditPrivilege" SE_SYSTEM_ENVIRONMENT_NAME = "SeSystemEnvironmentPrivilege" SE_CHANGE_NOTIFY_NAME = "SeChangeNotifyPrivilege" SE_REMOTE_SHUTDOWN_NAME = "SeRemoteShutdownPrivilege" TOKEN_ASSIGN_PRIMARY = (1) TOKEN_DUPLICATE = (2) TOKEN_IMPERSONATE = (4) TOKEN_QUERY = (8) TOKEN_QUERY_SOURCE = (16) TOKEN_ADJUST_PRIVILEGES = (32) TOKEN_ADJUST_GROUPS = (64) TOKEN_ADJUST_DEFAULT = (128) TOKEN_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED |\ TOKEN_ASSIGN_PRIMARY |\ TOKEN_DUPLICATE |\ TOKEN_IMPERSONATE |\ TOKEN_QUERY |\ TOKEN_QUERY_SOURCE |\ TOKEN_ADJUST_PRIVILEGES |\ TOKEN_ADJUST_GROUPS |\ TOKEN_ADJUST_DEFAULT) TOKEN_READ = (STANDARD_RIGHTS_READ |\ TOKEN_QUERY) TOKEN_WRITE = (STANDARD_RIGHTS_WRITE |\ TOKEN_ADJUST_PRIVILEGES |\ TOKEN_ADJUST_GROUPS |\ TOKEN_ADJUST_DEFAULT) TOKEN_EXECUTE = (STANDARD_RIGHTS_EXECUTE) TOKEN_SOURCE_LENGTH = 8 KEY_QUERY_VALUE = (1) KEY_SET_VALUE = (2) KEY_CREATE_SUB_KEY = (4) KEY_ENUMERATE_SUB_KEYS = (8) KEY_NOTIFY = (16) KEY_CREATE_LINK = (32) KEY_READ = ((STANDARD_RIGHTS_READ |\ KEY_QUERY_VALUE |\ KEY_ENUMERATE_SUB_KEYS |\ KEY_NOTIFY) \ & \ (~SYNCHRONIZE)) KEY_WRITE = ((STANDARD_RIGHTS_WRITE |\ KEY_SET_VALUE |\ KEY_CREATE_SUB_KEY) \ & \ (~SYNCHRONIZE)) KEY_EXECUTE = ((KEY_READ) \ & \ (~SYNCHRONIZE)) KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL |\ KEY_QUERY_VALUE |\ KEY_SET_VALUE |\ KEY_CREATE_SUB_KEY |\ KEY_ENUMERATE_SUB_KEYS |\ KEY_NOTIFY |\ KEY_CREATE_LINK) \ & \ (~SYNCHRONIZE)) REG_NOTIFY_CHANGE_ATTRIBUTES = (2) REG_NOTIFY_CHANGE_SECURITY = (8) REG_RESOURCE_REQUIREMENTS_LIST = ( 10 ) REG_NONE = ( 0 ) # No value type REG_SZ = ( 1 ) # Unicode nul terminated string REG_EXPAND_SZ = ( 2 ) # Unicode nul terminated string # (with environment variable references) REG_BINARY = ( 3 ) # Free form binary REG_DWORD = ( 4 ) # 32-bit number REG_DWORD_LITTLE_ENDIAN = ( 4 ) # 32-bit number (same as REG_DWORD) REG_DWORD_BIG_ENDIAN = ( 5 ) # 32-bit number REG_LINK = ( 6 ) # Symbolic Link (unicode) REG_MULTI_SZ = ( 7 ) # Multiple Unicode strings REG_RESOURCE_LIST = ( 8 ) # Resource list in the resource map REG_FULL_RESOURCE_DESCRIPTOR =( 9 ) # Resource list in the hardware description REG_RESOURCE_REQUIREMENTS_LIST = ( 10 ) REG_QWORD = ( 11 ) # 64-bit number REG_QWORD_LITTLE_ENDIAN = ( 11 ) # 64-bit number (same as REG_QWORD) # Generated by h2py from \msvc20\include\winnt.h # hacked and split by mhammond. # Included from string.h _NLSCMPERROR = 2147483647 NULL = 0 HEAP_NO_SERIALIZE = 1 HEAP_GROWABLE = 2 HEAP_GENERATE_EXCEPTIONS = 4 HEAP_ZERO_MEMORY = 8 HEAP_REALLOC_IN_PLACE_ONLY = 16 HEAP_TAIL_CHECKING_ENABLED = 32 HEAP_FREE_CHECKING_ENABLED = 64 HEAP_DISABLE_COALESCE_ON_FREE = 128 IS_TEXT_UNICODE_ASCII16 = 1 IS_TEXT_UNICODE_REVERSE_ASCII16 = 16 IS_TEXT_UNICODE_STATISTICS = 2 IS_TEXT_UNICODE_REVERSE_STATISTICS = 32 IS_TEXT_UNICODE_CONTROLS = 4 IS_TEXT_UNICODE_REVERSE_CONTROLS = 64 IS_TEXT_UNICODE_SIGNATURE = 8 IS_TEXT_UNICODE_REVERSE_SIGNATURE = 128 IS_TEXT_UNICODE_ILLEGAL_CHARS = 256 IS_TEXT_UNICODE_ODD_LENGTH = 512 IS_TEXT_UNICODE_DBCS_LEADBYTE = 1024 IS_TEXT_UNICODE_NULL_BYTES = 4096 IS_TEXT_UNICODE_UNICODE_MASK = 15 IS_TEXT_UNICODE_REVERSE_MASK = 240 IS_TEXT_UNICODE_NOT_UNICODE_MASK = 3840 IS_TEXT_UNICODE_NOT_ASCII_MASK = 61440 COMPRESSION_FORMAT_NONE = (0) COMPRESSION_FORMAT_DEFAULT = (1) COMPRESSION_FORMAT_LZNT1 = (2) COMPRESSION_ENGINE_STANDARD = (0) COMPRESSION_ENGINE_MAXIMUM = (256) MESSAGE_RESOURCE_UNICODE = 1 RTL_CRITSECT_TYPE = 0 RTL_RESOURCE_TYPE = 1 DLL_PROCESS_ATTACH = 1 DLL_THREAD_ATTACH = 2 DLL_THREAD_DETACH = 3 DLL_PROCESS_DETACH = 0 EVENTLOG_SEQUENTIAL_READ = 0X0001 EVENTLOG_SEEK_READ = 0X0002 EVENTLOG_FORWARDS_READ = 0X0004 EVENTLOG_BACKWARDS_READ = 0X0008 EVENTLOG_SUCCESS = 0X0000 EVENTLOG_ERROR_TYPE = 1 EVENTLOG_WARNING_TYPE = 2 EVENTLOG_INFORMATION_TYPE = 4 EVENTLOG_AUDIT_SUCCESS = 8 EVENTLOG_AUDIT_FAILURE = 16 EVENTLOG_START_PAIRED_EVENT = 1 EVENTLOG_END_PAIRED_EVENT = 2 EVENTLOG_END_ALL_PAIRED_EVENTS = 4 EVENTLOG_PAIRED_EVENT_ACTIVE = 8 EVENTLOG_PAIRED_EVENT_INACTIVE = 16 # Generated by h2py from \msvc20\include\winnt.h # hacked and split by mhammond. OWNER_SECURITY_INFORMATION = (0X00000001) GROUP_SECURITY_INFORMATION = (0X00000002) DACL_SECURITY_INFORMATION = (0X00000004) SACL_SECURITY_INFORMATION = (0X00000008) IMAGE_SIZEOF_FILE_HEADER = 20 IMAGE_FILE_MACHINE_UNKNOWN = 0 IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16 IMAGE_SIZEOF_ROM_OPTIONAL_HEADER = 56 IMAGE_SIZEOF_STD_OPTIONAL_HEADER = 28 IMAGE_SIZEOF_NT_OPTIONAL_HEADER = 224 IMAGE_NT_OPTIONAL_HDR_MAGIC = 267 IMAGE_ROM_OPTIONAL_HDR_MAGIC = 263 IMAGE_SIZEOF_SHORT_NAME = 8 IMAGE_SIZEOF_SECTION_HEADER = 40 IMAGE_SIZEOF_SYMBOL = 18 IMAGE_SYM_CLASS_NULL = 0 IMAGE_SYM_CLASS_AUTOMATIC = 1 IMAGE_SYM_CLASS_EXTERNAL = 2 IMAGE_SYM_CLASS_STATIC = 3 IMAGE_SYM_CLASS_REGISTER = 4 IMAGE_SYM_CLASS_EXTERNAL_DEF = 5 IMAGE_SYM_CLASS_LABEL = 6 IMAGE_SYM_CLASS_UNDEFINED_LABEL = 7 IMAGE_SYM_CLASS_MEMBER_OF_STRUCT = 8 IMAGE_SYM_CLASS_ARGUMENT = 9 IMAGE_SYM_CLASS_STRUCT_TAG = 10 IMAGE_SYM_CLASS_MEMBER_OF_UNION = 11 IMAGE_SYM_CLASS_UNION_TAG = 12 IMAGE_SYM_CLASS_TYPE_DEFINITION = 13 IMAGE_SYM_CLASS_UNDEFINED_STATIC = 14 IMAGE_SYM_CLASS_ENUM_TAG = 15 IMAGE_SYM_CLASS_MEMBER_OF_ENUM = 16 IMAGE_SYM_CLASS_REGISTER_PARAM = 17 IMAGE_SYM_CLASS_BIT_FIELD = 18 IMAGE_SYM_CLASS_BLOCK = 100 IMAGE_SYM_CLASS_FUNCTION = 101 IMAGE_SYM_CLASS_END_OF_STRUCT = 102 IMAGE_SYM_CLASS_FILE = 103 IMAGE_SYM_CLASS_SECTION = 104 IMAGE_SYM_CLASS_WEAK_EXTERNAL = 105 N_BTMASK = 017 N_TMASK = 060 N_TMASK1 = 0300 N_TMASK2 = 0360 N_BTSHFT = 4 N_TSHIFT = 2 IMAGE_SIZEOF_AUX_SYMBOL = 18 IMAGE_COMDAT_SELECT_NODUPLICATES = 1 IMAGE_COMDAT_SELECT_ANY = 2 IMAGE_COMDAT_SELECT_SAME_SIZE = 3 IMAGE_COMDAT_SELECT_EXACT_MATCH = 4 IMAGE_COMDAT_SELECT_ASSOCIATIVE = 5 IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY = 1 IMAGE_WEAK_EXTERN_SEARCH_LIBRARY = 2 IMAGE_WEAK_EXTERN_SEARCH_ALIAS = 3 IMAGE_SIZEOF_RELOCATION = 10 IMAGE_REL_I386_SECTION = 012 IMAGE_REL_I386_SECREL = 013 IMAGE_REL_MIPS_REFHALF = 01 IMAGE_REL_MIPS_REFWORD = 02 IMAGE_REL_MIPS_JMPADDR = 03 IMAGE_REL_MIPS_REFHI = 04 IMAGE_REL_MIPS_REFLO = 05 IMAGE_REL_MIPS_GPREL = 06 IMAGE_REL_MIPS_LITERAL = 07 IMAGE_REL_MIPS_SECTION = 012 IMAGE_REL_MIPS_SECREL = 013 IMAGE_REL_MIPS_REFWORDNB = 042 IMAGE_REL_MIPS_PAIR = 045 IMAGE_REL_ALPHA_ABSOLUTE = 0 IMAGE_REL_ALPHA_REFLONG = 1 IMAGE_REL_ALPHA_REFQUAD = 2 IMAGE_REL_ALPHA_GPREL32 = 3 IMAGE_REL_ALPHA_LITERAL = 4 IMAGE_REL_ALPHA_LITUSE = 5 IMAGE_REL_ALPHA_GPDISP = 6 IMAGE_REL_ALPHA_BRADDR = 7 IMAGE_REL_ALPHA_HINT = 8 IMAGE_REL_ALPHA_INLINE_REFLONG = 9 IMAGE_REL_ALPHA_REFHI = 10 IMAGE_REL_ALPHA_REFLO = 11 IMAGE_REL_ALPHA_PAIR = 12 IMAGE_REL_ALPHA_MATCH = 13 IMAGE_REL_ALPHA_SECTION = 14 IMAGE_REL_ALPHA_SECREL = 15 IMAGE_REL_ALPHA_REFLONGNB = 16 IMAGE_SIZEOF_BASE_RELOCATION = 8 IMAGE_REL_BASED_ABSOLUTE = 0 IMAGE_REL_BASED_HIGH = 1 IMAGE_REL_BASED_LOW = 2 IMAGE_REL_BASED_HIGHLOW = 3 IMAGE_REL_BASED_HIGHADJ = 4 IMAGE_REL_BASED_MIPS_JMPADDR = 5 IMAGE_SIZEOF_LINENUMBER = 6 IMAGE_ARCHIVE_START_SIZE = 8 IMAGE_ARCHIVE_START = "!\n" IMAGE_ARCHIVE_END = "`\n" IMAGE_ARCHIVE_PAD = "\n" IMAGE_ARCHIVE_LINKER_MEMBER = "/ " IMAGE_ARCHIVE_LONGNAMES_MEMBER = "// " IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR = 60 IMAGE_ORDINAL_FLAG = -2147483648 def IMAGE_SNAP_BY_ORDINAL(Ordinal): return ((Ordinal & IMAGE_ORDINAL_FLAG) != 0) def IMAGE_ORDINAL(Ordinal): return (Ordinal & 65535) IMAGE_RESOURCE_NAME_IS_STRING = -2147483648 IMAGE_RESOURCE_DATA_IS_DIRECTORY = -2147483648 IMAGE_DEBUG_TYPE_UNKNOWN = 0 IMAGE_DEBUG_TYPE_COFF = 1 IMAGE_DEBUG_TYPE_CODEVIEW = 2 IMAGE_DEBUG_TYPE_FPO = 3 IMAGE_DEBUG_TYPE_MISC = 4 IMAGE_DEBUG_TYPE_EXCEPTION = 5 IMAGE_DEBUG_TYPE_FIXUP = 6 IMAGE_DEBUG_TYPE_OMAP_TO_SRC = 7 IMAGE_DEBUG_TYPE_OMAP_FROM_SRC = 8 FRAME_FPO = 0 FRAME_TRAP = 1 FRAME_TSS = 2 SIZEOF_RFPO_DATA = 16 IMAGE_DEBUG_MISC_EXENAME = 1 IMAGE_SEPARATE_DEBUG_SIGNATURE = 18756 # Generated by h2py from \msvcnt\include\wingdi.h # hacked and split manually by mhammond. NEWFRAME = 1 ABORTDOC = 2 NEXTBAND = 3 SETCOLORTABLE = 4 GETCOLORTABLE = 5 FLUSHOUTPUT = 6 DRAFTMODE = 7 QUERYESCSUPPORT = 8 SETABORTPROC = 9 STARTDOC = 10 ENDDOC = 11 GETPHYSPAGESIZE = 12 GETPRINTINGOFFSET = 13 GETSCALINGFACTOR = 14 MFCOMMENT = 15 GETPENWIDTH = 16 SETCOPYCOUNT = 17 SELECTPAPERSOURCE = 18 DEVICEDATA = 19 PASSTHROUGH = 19 GETTECHNOLGY = 20 GETTECHNOLOGY = 20 SETLINECAP = 21 SETLINEJOIN = 22 SETMITERLIMIT = 23 BANDINFO = 24 DRAWPATTERNRECT = 25 GETVECTORPENSIZE = 26 GETVECTORBRUSHSIZE = 27 ENABLEDUPLEX = 28 GETSETPAPERBINS = 29 GETSETPRINTORIENT = 30 ENUMPAPERBINS = 31 SETDIBSCALING = 32 EPSPRINTING = 33 ENUMPAPERMETRICS = 34 GETSETPAPERMETRICS = 35 POSTSCRIPT_DATA = 37 POSTSCRIPT_IGNORE = 38 MOUSETRAILS = 39 GETDEVICEUNITS = 42 GETEXTENDEDTEXTMETRICS = 256 GETEXTENTTABLE = 257 GETPAIRKERNTABLE = 258 GETTRACKKERNTABLE = 259 EXTTEXTOUT = 512 GETFACENAME = 513 DOWNLOADFACE = 514 ENABLERELATIVEWIDTHS = 768 ENABLEPAIRKERNING = 769 SETKERNTRACK = 770 SETALLJUSTVALUES = 771 SETCHARSET = 772 STRETCHBLT = 2048 GETSETSCREENPARAMS = 3072 BEGIN_PATH = 4096 CLIP_TO_PATH = 4097 END_PATH = 4098 EXT_DEVICE_CAPS = 4099 RESTORE_CTM = 4100 SAVE_CTM = 4101 SET_ARC_DIRECTION = 4102 SET_BACKGROUND_COLOR = 4103 SET_POLY_MODE = 4104 SET_SCREEN_ANGLE = 4105 SET_SPREAD = 4106 TRANSFORM_CTM = 4107 SET_CLIP_BOX = 4108 SET_BOUNDS = 4109 SET_MIRROR_MODE = 4110 OPENCHANNEL = 4110 DOWNLOADHEADER = 4111 CLOSECHANNEL = 4112 POSTSCRIPT_PASSTHROUGH = 4115 ENCAPSULATED_POSTSCRIPT = 4116 SP_NOTREPORTED = 16384 SP_ERROR = (-1) SP_APPABORT = (-2) SP_USERABORT = (-3) SP_OUTOFDISK = (-4) SP_OUTOFMEMORY = (-5) PR_JOBSTATUS = 0 OBJ_PEN = 1 OBJ_BRUSH = 2 OBJ_DC = 3 OBJ_METADC = 4 OBJ_PAL = 5 OBJ_FONT = 6 OBJ_BITMAP = 7 OBJ_REGION = 8 OBJ_METAFILE = 9 OBJ_MEMDC = 10 OBJ_EXTPEN = 11 OBJ_ENHMETADC = 12 OBJ_ENHMETAFILE = 13 MWT_IDENTITY = 1 MWT_LEFTMULTIPLY = 2 MWT_RIGHTMULTIPLY = 3 MWT_MIN = MWT_IDENTITY MWT_MAX = MWT_RIGHTMULTIPLY BI_RGB = 0 BI_RLE8 = 1 BI_RLE4 = 2 BI_BITFIELDS = 3 TMPF_FIXED_PITCH = 1 TMPF_VECTOR = 2 TMPF_DEVICE = 8 TMPF_TRUETYPE = 4 NTM_REGULAR = 64 NTM_BOLD = 32 NTM_ITALIC = 1 LF_FACESIZE = 32 LF_FULLFACESIZE = 64 OUT_DEFAULT_PRECIS = 0 OUT_STRING_PRECIS = 1 OUT_CHARACTER_PRECIS = 2 OUT_STROKE_PRECIS = 3 OUT_TT_PRECIS = 4 OUT_DEVICE_PRECIS = 5 OUT_RASTER_PRECIS = 6 OUT_TT_ONLY_PRECIS = 7 OUT_OUTLINE_PRECIS = 8 CLIP_DEFAULT_PRECIS = 0 CLIP_CHARACTER_PRECIS = 1 CLIP_STROKE_PRECIS = 2 CLIP_MASK = 15 CLIP_LH_ANGLES = (1<<4) CLIP_TT_ALWAYS = (2<<4) CLIP_EMBEDDED = (8<<4) DEFAULT_QUALITY = 0 DRAFT_QUALITY = 1 PROOF_QUALITY = 2 NONANTIALIASED_QUALITY = 3 ANTIALIASED_QUALITY = 4 CLEARTYPE_QUALITY = 5 CLEARTYPE_NATURAL_QUALITY = 6 DEFAULT_PITCH = 0 FIXED_PITCH = 1 VARIABLE_PITCH = 2 ANSI_CHARSET = 0 DEFAULT_CHARSET = 1 SYMBOL_CHARSET = 2 SHIFTJIS_CHARSET = 128 HANGEUL_CHARSET = 129 CHINESEBIG5_CHARSET = 136 OEM_CHARSET = 255 JOHAB_CHARSET = 130 HEBREW_CHARSET = 177 ARABIC_CHARSET = 178 GREEK_CHARSET = 161 TURKISH_CHARSET = 162 VIETNAMESE_CHARSET = 163 THAI_CHARSET = 222 EASTEUROPE_CHARSET = 238 RUSSIAN_CHARSET = 204 MAC_CHARSET = 77 BALTIC_CHARSET = 186 FF_DONTCARE = (0<<4) FF_ROMAN = (1<<4) FF_SWISS = (2<<4) FF_MODERN = (3<<4) FF_SCRIPT = (4<<4) FF_DECORATIVE = (5<<4) FW_DONTCARE = 0 FW_THIN = 100 FW_EXTRALIGHT = 200 FW_LIGHT = 300 FW_NORMAL = 400 FW_MEDIUM = 500 FW_SEMIBOLD = 600 FW_BOLD = 700 FW_EXTRABOLD = 800 FW_HEAVY = 900 FW_ULTRALIGHT = FW_EXTRALIGHT FW_REGULAR = FW_NORMAL FW_DEMIBOLD = FW_SEMIBOLD FW_ULTRABOLD = FW_EXTRABOLD FW_BLACK = FW_HEAVY # Generated by h2py from \msvcnt\include\wingdi.h # hacked and split manually by mhammond. BS_SOLID = 0 BS_NULL = 1 BS_HOLLOW = BS_NULL BS_HATCHED = 2 BS_PATTERN = 3 BS_INDEXED = 4 BS_DIBPATTERN = 5 BS_DIBPATTERNPT = 6 BS_PATTERN8X8 = 7 BS_DIBPATTERN8X8 = 8 HS_HORIZONTAL = 0 HS_VERTICAL = 1 HS_FDIAGONAL = 2 HS_BDIAGONAL = 3 HS_CROSS = 4 HS_DIAGCROSS = 5 HS_FDIAGONAL1 = 6 HS_BDIAGONAL1 = 7 HS_SOLID = 8 HS_DENSE1 = 9 HS_DENSE2 = 10 HS_DENSE3 = 11 HS_DENSE4 = 12 HS_DENSE5 = 13 HS_DENSE6 = 14 HS_DENSE7 = 15 HS_DENSE8 = 16 HS_NOSHADE = 17 HS_HALFTONE = 18 HS_SOLIDCLR = 19 HS_DITHEREDCLR = 20 HS_SOLIDTEXTCLR = 21 HS_DITHEREDTEXTCLR = 22 HS_SOLIDBKCLR = 23 HS_DITHEREDBKCLR = 24 HS_API_MAX = 25 PS_SOLID = 0 PS_DASH = 1 PS_DOT = 2 PS_DASHDOT = 3 PS_DASHDOTDOT = 4 PS_NULL = 5 PS_INSIDEFRAME = 6 PS_USERSTYLE = 7 PS_ALTERNATE = 8 PS_STYLE_MASK = 15 PS_ENDCAP_ROUND = 0 PS_ENDCAP_SQUARE = 256 PS_ENDCAP_FLAT = 512 PS_ENDCAP_MASK = 3840 PS_JOIN_ROUND = 0 PS_JOIN_BEVEL = 4096 PS_JOIN_MITER = 8192 PS_JOIN_MASK = 61440 PS_COSMETIC = 0 PS_GEOMETRIC = 65536 PS_TYPE_MASK = 983040 AD_COUNTERCLOCKWISE = 1 AD_CLOCKWISE = 2 DRIVERVERSION = 0 TECHNOLOGY = 2 HORZSIZE = 4 VERTSIZE = 6 HORZRES = 8 VERTRES = 10 BITSPIXEL = 12 PLANES = 14 NUMBRUSHES = 16 NUMPENS = 18 NUMMARKERS = 20 NUMFONTS = 22 NUMCOLORS = 24 PDEVICESIZE = 26 CURVECAPS = 28 LINECAPS = 30 POLYGONALCAPS = 32 TEXTCAPS = 34 CLIPCAPS = 36 RASTERCAPS = 38 ASPECTX = 40 ASPECTY = 42 ASPECTXY = 44 LOGPIXELSX = 88 LOGPIXELSY = 90 SIZEPALETTE = 104 NUMRESERVED = 106 COLORRES = 108 DT_PLOTTER = 0 DT_RASDISPLAY = 1 DT_RASPRINTER = 2 DT_RASCAMERA = 3 DT_CHARSTREAM = 4 DT_METAFILE = 5 DT_DISPFILE = 6 CC_NONE = 0 CC_CIRCLES = 1 CC_PIE = 2 CC_CHORD = 4 CC_ELLIPSES = 8 CC_WIDE = 16 CC_STYLED = 32 CC_WIDESTYLED = 64 CC_INTERIORS = 128 CC_ROUNDRECT = 256 LC_NONE = 0 LC_POLYLINE = 2 LC_MARKER = 4 LC_POLYMARKER = 8 LC_WIDE = 16 LC_STYLED = 32 LC_WIDESTYLED = 64 LC_INTERIORS = 128 PC_NONE = 0 PC_POLYGON = 1 PC_RECTANGLE = 2 PC_WINDPOLYGON = 4 PC_TRAPEZOID = 4 PC_SCANLINE = 8 PC_WIDE = 16 PC_STYLED = 32 PC_WIDESTYLED = 64 PC_INTERIORS = 128 CP_NONE = 0 CP_RECTANGLE = 1 CP_REGION = 2 TC_OP_CHARACTER = 1 TC_OP_STROKE = 2 TC_CP_STROKE = 4 TC_CR_90 = 8 TC_CR_ANY = 16 TC_SF_X_YINDEP = 32 TC_SA_DOUBLE = 64 TC_SA_INTEGER = 128 TC_SA_CONTIN = 256 TC_EA_DOUBLE = 512 TC_IA_ABLE = 1024 TC_UA_ABLE = 2048 TC_SO_ABLE = 4096 TC_RA_ABLE = 8192 TC_VA_ABLE = 16384 TC_RESERVED = 32768 TC_SCROLLBLT = 65536 RC_BITBLT = 1 RC_BANDING = 2 RC_SCALING = 4 RC_BITMAP64 = 8 RC_GDI20_OUTPUT = 16 RC_GDI20_STATE = 32 RC_SAVEBITMAP = 64 RC_DI_BITMAP = 128 RC_PALETTE = 256 RC_DIBTODEV = 512 RC_BIGFONT = 1024 RC_STRETCHBLT = 2048 RC_FLOODFILL = 4096 RC_STRETCHDIB = 8192 RC_OP_DX_OUTPUT = 16384 RC_DEVBITS = 32768 DIB_RGB_COLORS = 0 DIB_PAL_COLORS = 1 DIB_PAL_INDICES = 2 DIB_PAL_PHYSINDICES = 2 DIB_PAL_LOGINDICES = 4 SYSPAL_ERROR = 0 SYSPAL_STATIC = 1 SYSPAL_NOSTATIC = 2 CBM_CREATEDIB = 2 CBM_INIT = 4 FLOODFILLBORDER = 0 FLOODFILLSURFACE = 1 CCHDEVICENAME = 32 CCHFORMNAME = 32 # Generated by h2py from \msvcnt\include\wingdi.h # hacked and split manually by mhammond. # DEVMODE.dmFields DM_SPECVERSION = 800 DM_ORIENTATION = 1 DM_PAPERSIZE = 2 DM_PAPERLENGTH = 4 DM_PAPERWIDTH = 8 DM_SCALE = 16 DM_POSITION = 32 DM_NUP = 64 DM_DISPLAYORIENTATION = 128 DM_COPIES = 256 DM_DEFAULTSOURCE = 512 DM_PRINTQUALITY = 1024 DM_COLOR = 2048 DM_DUPLEX = 4096 DM_YRESOLUTION = 8192 DM_TTOPTION = 16384 DM_COLLATE = 32768 DM_FORMNAME = 65536 DM_LOGPIXELS = 131072 DM_BITSPERPEL = 262144 DM_PELSWIDTH = 524288 DM_PELSHEIGHT = 1048576 DM_DISPLAYFLAGS = 2097152 DM_DISPLAYFREQUENCY = 4194304 DM_ICMMETHOD = 8388608 DM_ICMINTENT = 16777216 DM_MEDIATYPE = 33554432 DM_DITHERTYPE = 67108864 DM_PANNINGWIDTH = 134217728 DM_PANNINGHEIGHT = 268435456 DM_DISPLAYFIXEDOUTPUT = 536870912 # DEVMODE.dmOrientation DMORIENT_PORTRAIT = 1 DMORIENT_LANDSCAPE = 2 # DEVMODE.dmDisplayOrientation DMDO_DEFAULT = 0 DMDO_90 = 1 DMDO_180 = 2 DMDO_270 = 3 # DEVMODE.dmDisplayFixedOutput DMDFO_DEFAULT = 0 DMDFO_STRETCH = 1 DMDFO_CENTER = 2 # DEVMODE.dmPaperSize DMPAPER_LETTER = 1 DMPAPER_LETTERSMALL = 2 DMPAPER_TABLOID = 3 DMPAPER_LEDGER = 4 DMPAPER_LEGAL = 5 DMPAPER_STATEMENT = 6 DMPAPER_EXECUTIVE = 7 DMPAPER_A3 = 8 DMPAPER_A4 = 9 DMPAPER_A4SMALL = 10 DMPAPER_A5 = 11 DMPAPER_B4 = 12 DMPAPER_B5 = 13 DMPAPER_FOLIO = 14 DMPAPER_QUARTO = 15 DMPAPER_10X14 = 16 DMPAPER_11X17 = 17 DMPAPER_NOTE = 18 DMPAPER_ENV_9 = 19 DMPAPER_ENV_10 = 20 DMPAPER_ENV_11 = 21 DMPAPER_ENV_12 = 22 DMPAPER_ENV_14 = 23 DMPAPER_CSHEET = 24 DMPAPER_DSHEET = 25 DMPAPER_ESHEET = 26 DMPAPER_ENV_DL = 27 DMPAPER_ENV_C5 = 28 DMPAPER_ENV_C3 = 29 DMPAPER_ENV_C4 = 30 DMPAPER_ENV_C6 = 31 DMPAPER_ENV_C65 = 32 DMPAPER_ENV_B4 = 33 DMPAPER_ENV_B5 = 34 DMPAPER_ENV_B6 = 35 DMPAPER_ENV_ITALY = 36 DMPAPER_ENV_MONARCH = 37 DMPAPER_ENV_PERSONAL = 38 DMPAPER_FANFOLD_US = 39 DMPAPER_FANFOLD_STD_GERMAN = 40 DMPAPER_FANFOLD_LGL_GERMAN = 41 DMPAPER_ISO_B4 = 42 DMPAPER_JAPANESE_POSTCARD = 43 DMPAPER_9X11 = 44 DMPAPER_10X11 = 45 DMPAPER_15X11 = 46 DMPAPER_ENV_INVITE = 47 DMPAPER_RESERVED_48 = 48 DMPAPER_RESERVED_49 = 49 DMPAPER_LETTER_EXTRA = 50 DMPAPER_LEGAL_EXTRA = 51 DMPAPER_TABLOID_EXTRA = 52 DMPAPER_A4_EXTRA = 53 DMPAPER_LETTER_TRANSVERSE = 54 DMPAPER_A4_TRANSVERSE = 55 DMPAPER_LETTER_EXTRA_TRANSVERSE = 56 DMPAPER_A_PLUS = 57 DMPAPER_B_PLUS = 58 DMPAPER_LETTER_PLUS = 59 DMPAPER_A4_PLUS = 60 DMPAPER_A5_TRANSVERSE = 61 DMPAPER_B5_TRANSVERSE = 62 DMPAPER_A3_EXTRA = 63 DMPAPER_A5_EXTRA = 64 DMPAPER_B5_EXTRA = 65 DMPAPER_A2 = 66 DMPAPER_A3_TRANSVERSE = 67 DMPAPER_A3_EXTRA_TRANSVERSE = 68 DMPAPER_DBL_JAPANESE_POSTCARD = 69 DMPAPER_A6 = 70 DMPAPER_JENV_KAKU2 = 71 DMPAPER_JENV_KAKU3 = 72 DMPAPER_JENV_CHOU3 = 73 DMPAPER_JENV_CHOU4 = 74 DMPAPER_LETTER_ROTATED = 75 DMPAPER_A3_ROTATED = 76 DMPAPER_A4_ROTATED = 77 DMPAPER_A5_ROTATED = 78 DMPAPER_B4_JIS_ROTATED = 79 DMPAPER_B5_JIS_ROTATED = 80 DMPAPER_JAPANESE_POSTCARD_ROTATED = 81 DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED = 82 DMPAPER_A6_ROTATED = 83 DMPAPER_JENV_KAKU2_ROTATED = 84 DMPAPER_JENV_KAKU3_ROTATED = 85 DMPAPER_JENV_CHOU3_ROTATED = 86 DMPAPER_JENV_CHOU4_ROTATED = 87 DMPAPER_B6_JIS = 88 DMPAPER_B6_JIS_ROTATED = 89 DMPAPER_12X11 = 90 DMPAPER_JENV_YOU4 = 91 DMPAPER_JENV_YOU4_ROTATED = 92 DMPAPER_P16K = 93 DMPAPER_P32K = 94 DMPAPER_P32KBIG = 95 DMPAPER_PENV_1 = 96 DMPAPER_PENV_2 = 97 DMPAPER_PENV_3 = 98 DMPAPER_PENV_4 = 99 DMPAPER_PENV_5 = 100 DMPAPER_PENV_6 = 101 DMPAPER_PENV_7 = 102 DMPAPER_PENV_8 = 103 DMPAPER_PENV_9 = 104 DMPAPER_PENV_10 = 105 DMPAPER_P16K_ROTATED = 106 DMPAPER_P32K_ROTATED = 107 DMPAPER_P32KBIG_ROTATED = 108 DMPAPER_PENV_1_ROTATED = 109 DMPAPER_PENV_2_ROTATED = 110 DMPAPER_PENV_3_ROTATED = 111 DMPAPER_PENV_4_ROTATED = 112 DMPAPER_PENV_5_ROTATED = 113 DMPAPER_PENV_6_ROTATED = 114 DMPAPER_PENV_7_ROTATED = 115 DMPAPER_PENV_8_ROTATED = 116 DMPAPER_PENV_9_ROTATED = 117 DMPAPER_PENV_10_ROTATED = 118 DMPAPER_LAST = DMPAPER_PENV_10_ROTATED DMPAPER_USER = 256 # DEVMODE.dmDefaultSource DMBIN_UPPER = 1 DMBIN_ONLYONE = 1 DMBIN_LOWER = 2 DMBIN_MIDDLE = 3 DMBIN_MANUAL = 4 DMBIN_ENVELOPE = 5 DMBIN_ENVMANUAL = 6 DMBIN_AUTO = 7 DMBIN_TRACTOR = 8 DMBIN_SMALLFMT = 9 DMBIN_LARGEFMT = 10 DMBIN_LARGECAPACITY = 11 DMBIN_CASSETTE = 14 DMBIN_LAST = DMBIN_CASSETTE DMBIN_USER = 256 # DEVMODE.dmPrintQuality DMRES_DRAFT = (-1) DMRES_LOW = (-2) DMRES_MEDIUM = (-3) DMRES_HIGH = (-4) # DEVMODE.dmColor DMCOLOR_MONOCHROME = 1 DMCOLOR_COLOR = 2 # DEVMODE.dmDuplex DMDUP_SIMPLEX = 1 DMDUP_VERTICAL = 2 DMDUP_HORIZONTAL = 3 # DEVMODE.dmTTOption DMTT_BITMAP = 1 DMTT_DOWNLOAD = 2 DMTT_SUBDEV = 3 DMTT_DOWNLOAD_OUTLINE = 4 # DEVMODE.dmCollate DMCOLLATE_FALSE = 0 DMCOLLATE_TRUE = 1 # DEVMODE.dmDisplayFlags DM_GRAYSCALE = 1 DM_INTERLACED = 2 # DEVMODE.dmICMMethod DMICMMETHOD_NONE = 1 DMICMMETHOD_SYSTEM = 2 DMICMMETHOD_DRIVER = 3 DMICMMETHOD_DEVICE = 4 DMICMMETHOD_USER = 256 # DEVMODE.dmICMIntent DMICM_SATURATE = 1 DMICM_CONTRAST = 2 DMICM_COLORIMETRIC = 3 DMICM_ABS_COLORIMETRIC = 4 DMICM_USER = 256 # DEVMODE.dmMediaType DMMEDIA_STANDARD = 1 DMMEDIA_TRANSPARENCY = 2 DMMEDIA_GLOSSY = 3 DMMEDIA_USER = 256 # DEVMODE.dmDitherType DMDITHER_NONE = 1 DMDITHER_COARSE = 2 DMDITHER_FINE = 3 DMDITHER_LINEART = 4 DMDITHER_ERRORDIFFUSION = 5 DMDITHER_RESERVED6 = 6 DMDITHER_RESERVED7 = 7 DMDITHER_RESERVED8 = 8 DMDITHER_RESERVED9 = 9 DMDITHER_GRAYSCALE = 10 DMDITHER_USER = 256 # DEVMODE.dmNup DMNUP_SYSTEM = 1 DMNUP_ONEUP = 2 RDH_RECTANGLES = 1 GGO_METRICS = 0 GGO_BITMAP = 1 GGO_NATIVE = 2 TT_POLYGON_TYPE = 24 TT_PRIM_LINE = 1 TT_PRIM_QSPLINE = 2 TT_AVAILABLE = 1 TT_ENABLED = 2 DM_UPDATE = 1 DM_COPY = 2 DM_PROMPT = 4 DM_MODIFY = 8 DM_IN_BUFFER = DM_MODIFY DM_IN_PROMPT = DM_PROMPT DM_OUT_BUFFER = DM_COPY DM_OUT_DEFAULT = DM_UPDATE # DISPLAY_DEVICE.StateFlags DISPLAY_DEVICE_ATTACHED_TO_DESKTOP = 1 DISPLAY_DEVICE_MULTI_DRIVER = 2 DISPLAY_DEVICE_PRIMARY_DEVICE = 4 DISPLAY_DEVICE_MIRRORING_DRIVER = 8 DISPLAY_DEVICE_VGA_COMPATIBLE = 16 DISPLAY_DEVICE_REMOVABLE = 32 DISPLAY_DEVICE_MODESPRUNED = 134217728 DISPLAY_DEVICE_REMOTE = 67108864 DISPLAY_DEVICE_DISCONNECT = 33554432 # DeviceCapabilities types DC_FIELDS = 1 DC_PAPERS = 2 DC_PAPERSIZE = 3 DC_MINEXTENT = 4 DC_MAXEXTENT = 5 DC_BINS = 6 DC_DUPLEX = 7 DC_SIZE = 8 DC_EXTRA = 9 DC_VERSION = 10 DC_DRIVER = 11 DC_BINNAMES = 12 DC_ENUMRESOLUTIONS = 13 DC_FILEDEPENDENCIES = 14 DC_TRUETYPE = 15 DC_PAPERNAMES = 16 DC_ORIENTATION = 17 DC_COPIES = 18 DC_BINADJUST = 19 DC_EMF_COMPLIANT = 20 DC_DATATYPE_PRODUCED = 21 DC_COLLATE = 22 DC_MANUFACTURER = 23 DC_MODEL = 24 DC_PERSONALITY = 25 DC_PRINTRATE = 26 DC_PRINTRATEUNIT = 27 DC_PRINTERMEM = 28 DC_MEDIAREADY = 29 DC_STAPLE = 30 DC_PRINTRATEPPM = 31 DC_COLORDEVICE = 32 DC_NUP = 33 DC_MEDIATYPENAMES = 34 DC_MEDIATYPES = 35 PRINTRATEUNIT_PPM = 1 PRINTRATEUNIT_CPS = 2 PRINTRATEUNIT_LPM = 3 PRINTRATEUNIT_IPM = 4 # TrueType constants DCTT_BITMAP = 1 DCTT_DOWNLOAD = 2 DCTT_SUBDEV = 4 DCTT_DOWNLOAD_OUTLINE = 8 CA_NEGATIVE = 1 CA_LOG_FILTER = 2 ILLUMINANT_DEVICE_DEFAULT = 0 ILLUMINANT_A = 1 ILLUMINANT_B = 2 ILLUMINANT_C = 3 ILLUMINANT_D50 = 4 ILLUMINANT_D55 = 5 ILLUMINANT_D65 = 6 ILLUMINANT_D75 = 7 ILLUMINANT_F2 = 8 ILLUMINANT_MAX_INDEX = ILLUMINANT_F2 ILLUMINANT_TUNGSTEN = ILLUMINANT_A ILLUMINANT_DAYLIGHT = ILLUMINANT_C ILLUMINANT_FLUORESCENT = ILLUMINANT_F2 ILLUMINANT_NTSC = ILLUMINANT_C # Generated by h2py from \msvcnt\include\wingdi.h # hacked and split manually by mhammond. FONTMAPPER_MAX = 10 ENHMETA_SIGNATURE = 1179469088 ENHMETA_STOCK_OBJECT = -2147483648 EMR_HEADER = 1 EMR_POLYBEZIER = 2 EMR_POLYGON = 3 EMR_POLYLINE = 4 EMR_POLYBEZIERTO = 5 EMR_POLYLINETO = 6 EMR_POLYPOLYLINE = 7 EMR_POLYPOLYGON = 8 EMR_SETWINDOWEXTEX = 9 EMR_SETWINDOWORGEX = 10 EMR_SETVIEWPORTEXTEX = 11 EMR_SETVIEWPORTORGEX = 12 EMR_SETBRUSHORGEX = 13 EMR_EOF = 14 EMR_SETPIXELV = 15 EMR_SETMAPPERFLAGS = 16 EMR_SETMAPMODE = 17 EMR_SETBKMODE = 18 EMR_SETPOLYFILLMODE = 19 EMR_SETROP2 = 20 EMR_SETSTRETCHBLTMODE = 21 EMR_SETTEXTALIGN = 22 EMR_SETCOLORADJUSTMENT = 23 EMR_SETTEXTCOLOR = 24 EMR_SETBKCOLOR = 25 EMR_OFFSETCLIPRGN = 26 EMR_MOVETOEX = 27 EMR_SETMETARGN = 28 EMR_EXCLUDECLIPRECT = 29 EMR_INTERSECTCLIPRECT = 30 EMR_SCALEVIEWPORTEXTEX = 31 EMR_SCALEWINDOWEXTEX = 32 EMR_SAVEDC = 33 EMR_RESTOREDC = 34 EMR_SETWORLDTRANSFORM = 35 EMR_MODIFYWORLDTRANSFORM = 36 EMR_SELECTOBJECT = 37 EMR_CREATEPEN = 38 EMR_CREATEBRUSHINDIRECT = 39 EMR_DELETEOBJECT = 40 EMR_ANGLEARC = 41 EMR_ELLIPSE = 42 EMR_RECTANGLE = 43 EMR_ROUNDRECT = 44 EMR_ARC = 45 EMR_CHORD = 46 EMR_PIE = 47 EMR_SELECTPALETTE = 48 EMR_CREATEPALETTE = 49 EMR_SETPALETTEENTRIES = 50 EMR_RESIZEPALETTE = 51 EMR_REALIZEPALETTE = 52 EMR_EXTFLOODFILL = 53 EMR_LINETO = 54 EMR_ARCTO = 55 EMR_POLYDRAW = 56 EMR_SETARCDIRECTION = 57 EMR_SETMITERLIMIT = 58 EMR_BEGINPATH = 59 EMR_ENDPATH = 60 EMR_CLOSEFIGURE = 61 EMR_FILLPATH = 62 EMR_STROKEANDFILLPATH = 63 EMR_STROKEPATH = 64 EMR_FLATTENPATH = 65 EMR_WIDENPATH = 66 EMR_SELECTCLIPPATH = 67 EMR_ABORTPATH = 68 EMR_GDICOMMENT = 70 EMR_FILLRGN = 71 EMR_FRAMERGN = 72 EMR_INVERTRGN = 73 EMR_PAINTRGN = 74 EMR_EXTSELECTCLIPRGN = 75 EMR_BITBLT = 76 EMR_STRETCHBLT = 77 EMR_MASKBLT = 78 EMR_PLGBLT = 79 EMR_SETDIBITSTODEVICE = 80 EMR_STRETCHDIBITS = 81 EMR_EXTCREATEFONTINDIRECTW = 82 EMR_EXTTEXTOUTA = 83 EMR_EXTTEXTOUTW = 84 EMR_POLYBEZIER16 = 85 EMR_POLYGON16 = 86 EMR_POLYLINE16 = 87 EMR_POLYBEZIERTO16 = 88 EMR_POLYLINETO16 = 89 EMR_POLYPOLYLINE16 = 90 EMR_POLYPOLYGON16 = 91 EMR_POLYDRAW16 = 92 EMR_CREATEMONOBRUSH = 93 EMR_CREATEDIBPATTERNBRUSHPT = 94 EMR_EXTCREATEPEN = 95 EMR_POLYTEXTOUTA = 96 EMR_POLYTEXTOUTW = 97 EMR_MIN = 1 EMR_MAX = 97 # Generated by h2py from \msvcnt\include\wingdi.h # hacked and split manually by mhammond. PANOSE_COUNT = 10 PAN_FAMILYTYPE_INDEX = 0 PAN_SERIFSTYLE_INDEX = 1 PAN_WEIGHT_INDEX = 2 PAN_PROPORTION_INDEX = 3 PAN_CONTRAST_INDEX = 4 PAN_STROKEVARIATION_INDEX = 5 PAN_ARMSTYLE_INDEX = 6 PAN_LETTERFORM_INDEX = 7 PAN_MIDLINE_INDEX = 8 PAN_XHEIGHT_INDEX = 9 PAN_CULTURE_LATIN = 0 PAN_ANY = 0 PAN_NO_FIT = 1 PAN_FAMILY_TEXT_DISPLAY = 2 PAN_FAMILY_SCRIPT = 3 PAN_FAMILY_DECORATIVE = 4 PAN_FAMILY_PICTORIAL = 5 PAN_SERIF_COVE = 2 PAN_SERIF_OBTUSE_COVE = 3 PAN_SERIF_SQUARE_COVE = 4 PAN_SERIF_OBTUSE_SQUARE_COVE = 5 PAN_SERIF_SQUARE = 6 PAN_SERIF_THIN = 7 PAN_SERIF_BONE = 8 PAN_SERIF_EXAGGERATED = 9 PAN_SERIF_TRIANGLE = 10 PAN_SERIF_NORMAL_SANS = 11 PAN_SERIF_OBTUSE_SANS = 12 PAN_SERIF_PERP_SANS = 13 PAN_SERIF_FLARED = 14 PAN_SERIF_ROUNDED = 15 PAN_WEIGHT_VERY_LIGHT = 2 PAN_WEIGHT_LIGHT = 3 PAN_WEIGHT_THIN = 4 PAN_WEIGHT_BOOK = 5 PAN_WEIGHT_MEDIUM = 6 PAN_WEIGHT_DEMI = 7 PAN_WEIGHT_BOLD = 8 PAN_WEIGHT_HEAVY = 9 PAN_WEIGHT_BLACK = 10 PAN_WEIGHT_NORD = 11 PAN_PROP_OLD_STYLE = 2 PAN_PROP_MODERN = 3 PAN_PROP_EVEN_WIDTH = 4 PAN_PROP_EXPANDED = 5 PAN_PROP_CONDENSED = 6 PAN_PROP_VERY_EXPANDED = 7 PAN_PROP_VERY_CONDENSED = 8 PAN_PROP_MONOSPACED = 9 PAN_CONTRAST_NONE = 2 PAN_CONTRAST_VERY_LOW = 3 PAN_CONTRAST_LOW = 4 PAN_CONTRAST_MEDIUM_LOW = 5 PAN_CONTRAST_MEDIUM = 6 PAN_CONTRAST_MEDIUM_HIGH = 7 PAN_CONTRAST_HIGH = 8 PAN_CONTRAST_VERY_HIGH = 9 PAN_STROKE_GRADUAL_DIAG = 2 PAN_STROKE_GRADUAL_TRAN = 3 PAN_STROKE_GRADUAL_VERT = 4 PAN_STROKE_GRADUAL_HORZ = 5 PAN_STROKE_RAPID_VERT = 6 PAN_STROKE_RAPID_HORZ = 7 PAN_STROKE_INSTANT_VERT = 8 PAN_STRAIGHT_ARMS_HORZ = 2 PAN_STRAIGHT_ARMS_WEDGE = 3 PAN_STRAIGHT_ARMS_VERT = 4 PAN_STRAIGHT_ARMS_SINGLE_SERIF = 5 PAN_STRAIGHT_ARMS_DOUBLE_SERIF = 6 PAN_BENT_ARMS_HORZ = 7 PAN_BENT_ARMS_WEDGE = 8 PAN_BENT_ARMS_VERT = 9 PAN_BENT_ARMS_SINGLE_SERIF = 10 PAN_BENT_ARMS_DOUBLE_SERIF = 11 PAN_LETT_NORMAL_CONTACT = 2 PAN_LETT_NORMAL_WEIGHTED = 3 PAN_LETT_NORMAL_BOXED = 4 PAN_LETT_NORMAL_FLATTENED = 5 PAN_LETT_NORMAL_ROUNDED = 6 PAN_LETT_NORMAL_OFF_CENTER = 7 PAN_LETT_NORMAL_SQUARE = 8 PAN_LETT_OBLIQUE_CONTACT = 9 PAN_LETT_OBLIQUE_WEIGHTED = 10 PAN_LETT_OBLIQUE_BOXED = 11 PAN_LETT_OBLIQUE_FLATTENED = 12 PAN_LETT_OBLIQUE_ROUNDED = 13 PAN_LETT_OBLIQUE_OFF_CENTER = 14 PAN_LETT_OBLIQUE_SQUARE = 15 PAN_MIDLINE_STANDARD_TRIMMED = 2 PAN_MIDLINE_STANDARD_POINTED = 3 PAN_MIDLINE_STANDARD_SERIFED = 4 PAN_MIDLINE_HIGH_TRIMMED = 5 PAN_MIDLINE_HIGH_POINTED = 6 PAN_MIDLINE_HIGH_SERIFED = 7 PAN_MIDLINE_CONSTANT_TRIMMED = 8 PAN_MIDLINE_CONSTANT_POINTED = 9 PAN_MIDLINE_CONSTANT_SERIFED = 10 PAN_MIDLINE_LOW_TRIMMED = 11 PAN_MIDLINE_LOW_POINTED = 12 PAN_MIDLINE_LOW_SERIFED = 13 PAN_XHEIGHT_CONSTANT_SMALL = 2 PAN_XHEIGHT_CONSTANT_STD = 3 PAN_XHEIGHT_CONSTANT_LARGE = 4 PAN_XHEIGHT_DUCKING_SMALL = 5 PAN_XHEIGHT_DUCKING_STD = 6 PAN_XHEIGHT_DUCKING_LARGE = 7 ELF_VENDOR_SIZE = 4 ELF_VERSION = 0 ELF_CULTURE_LATIN = 0 RASTER_FONTTYPE = 1 DEVICE_FONTTYPE = 2 TRUETYPE_FONTTYPE = 4 def PALETTEINDEX(i): return ((16777216 | (i))) PC_RESERVED = 1 PC_EXPLICIT = 2 PC_NOCOLLAPSE = 4 def GetRValue(rgb): return rgb & 0xff def GetGValue(rgb): return (rgb >> 8) & 0xff def GetBValue(rgb): return (rgb >> 16) & 0xff TRANSPARENT = 1 OPAQUE = 2 BKMODE_LAST = 2 GM_COMPATIBLE = 1 GM_ADVANCED = 2 GM_LAST = 2 PT_CLOSEFIGURE = 1 PT_LINETO = 2 PT_BEZIERTO = 4 PT_MOVETO = 6 MM_TEXT = 1 MM_LOMETRIC = 2 MM_HIMETRIC = 3 MM_LOENGLISH = 4 MM_HIENGLISH = 5 MM_TWIPS = 6 MM_ISOTROPIC = 7 MM_ANISOTROPIC = 8 MM_MIN = MM_TEXT MM_MAX = MM_ANISOTROPIC MM_MAX_FIXEDSCALE = MM_TWIPS ABSOLUTE = 1 RELATIVE = 2 WHITE_BRUSH = 0 LTGRAY_BRUSH = 1 GRAY_BRUSH = 2 DKGRAY_BRUSH = 3 BLACK_BRUSH = 4 NULL_BRUSH = 5 HOLLOW_BRUSH = NULL_BRUSH WHITE_PEN = 6 BLACK_PEN = 7 NULL_PEN = 8 OEM_FIXED_FONT = 10 ANSI_FIXED_FONT = 11 ANSI_VAR_FONT = 12 SYSTEM_FONT = 13 DEVICE_DEFAULT_FONT = 14 DEFAULT_PALETTE = 15 SYSTEM_FIXED_FONT = 16 STOCK_LAST = 16 CLR_INVALID = -1 # Exception/Status codes from winuser.h and winnt.h STATUS_WAIT_0 = 0 STATUS_ABANDONED_WAIT_0 = 128 STATUS_USER_APC = 192 STATUS_TIMEOUT = 258 STATUS_PENDING = 259 STATUS_SEGMENT_NOTIFICATION = 1073741829 STATUS_GUARD_PAGE_VIOLATION = -2147483647 STATUS_DATATYPE_MISALIGNMENT = -2147483646 STATUS_BREAKPOINT = -2147483645 STATUS_SINGLE_STEP = -2147483644 STATUS_ACCESS_VIOLATION = -1073741819 STATUS_IN_PAGE_ERROR = -1073741818 STATUS_INVALID_HANDLE = -1073741816 STATUS_NO_MEMORY = -1073741801 STATUS_ILLEGAL_INSTRUCTION = -1073741795 STATUS_NONCONTINUABLE_EXCEPTION = -1073741787 STATUS_INVALID_DISPOSITION = -1073741786 STATUS_ARRAY_BOUNDS_EXCEEDED = -1073741684 STATUS_FLOAT_DENORMAL_OPERAND = -1073741683 STATUS_FLOAT_DIVIDE_BY_ZERO = -1073741682 STATUS_FLOAT_INEXACT_RESULT = -1073741681 STATUS_FLOAT_INVALID_OPERATION = -1073741680 STATUS_FLOAT_OVERFLOW = -1073741679 STATUS_FLOAT_STACK_CHECK = -1073741678 STATUS_FLOAT_UNDERFLOW = -1073741677 STATUS_INTEGER_DIVIDE_BY_ZERO = -1073741676 STATUS_INTEGER_OVERFLOW = -1073741675 STATUS_PRIVILEGED_INSTRUCTION = -1073741674 STATUS_STACK_OVERFLOW = -1073741571 STATUS_CONTROL_C_EXIT = -1073741510 WAIT_FAILED = -1 WAIT_OBJECT_0 = STATUS_WAIT_0 + 0 WAIT_ABANDONED = STATUS_ABANDONED_WAIT_0 + 0 WAIT_ABANDONED_0 = STATUS_ABANDONED_WAIT_0 + 0 WAIT_TIMEOUT = STATUS_TIMEOUT WAIT_IO_COMPLETION = STATUS_USER_APC STILL_ACTIVE = STATUS_PENDING EXCEPTION_ACCESS_VIOLATION = STATUS_ACCESS_VIOLATION EXCEPTION_DATATYPE_MISALIGNMENT = STATUS_DATATYPE_MISALIGNMENT EXCEPTION_BREAKPOINT = STATUS_BREAKPOINT EXCEPTION_SINGLE_STEP = STATUS_SINGLE_STEP EXCEPTION_ARRAY_BOUNDS_EXCEEDED = STATUS_ARRAY_BOUNDS_EXCEEDED EXCEPTION_FLT_DENORMAL_OPERAND = STATUS_FLOAT_DENORMAL_OPERAND EXCEPTION_FLT_DIVIDE_BY_ZERO = STATUS_FLOAT_DIVIDE_BY_ZERO EXCEPTION_FLT_INEXACT_RESULT = STATUS_FLOAT_INEXACT_RESULT EXCEPTION_FLT_INVALID_OPERATION = STATUS_FLOAT_INVALID_OPERATION EXCEPTION_FLT_OVERFLOW = STATUS_FLOAT_OVERFLOW EXCEPTION_FLT_STACK_CHECK = STATUS_FLOAT_STACK_CHECK EXCEPTION_FLT_UNDERFLOW = STATUS_FLOAT_UNDERFLOW EXCEPTION_INT_DIVIDE_BY_ZERO = STATUS_INTEGER_DIVIDE_BY_ZERO EXCEPTION_INT_OVERFLOW = STATUS_INTEGER_OVERFLOW EXCEPTION_PRIV_INSTRUCTION = STATUS_PRIVILEGED_INSTRUCTION EXCEPTION_IN_PAGE_ERROR = STATUS_IN_PAGE_ERROR EXCEPTION_ILLEGAL_INSTRUCTION = STATUS_ILLEGAL_INSTRUCTION EXCEPTION_NONCONTINUABLE_EXCEPTION = STATUS_NONCONTINUABLE_EXCEPTION EXCEPTION_STACK_OVERFLOW = STATUS_STACK_OVERFLOW EXCEPTION_INVALID_DISPOSITION = STATUS_INVALID_DISPOSITION EXCEPTION_GUARD_PAGE = STATUS_GUARD_PAGE_VIOLATION EXCEPTION_INVALID_HANDLE = STATUS_INVALID_HANDLE CONTROL_C_EXIT = STATUS_CONTROL_C_EXIT # winuser.h line 8594 # constants used with SystemParametersInfo SPI_GETBEEP = 1 SPI_SETBEEP = 2 SPI_GETMOUSE = 3 SPI_SETMOUSE = 4 SPI_GETBORDER = 5 SPI_SETBORDER = 6 SPI_GETKEYBOARDSPEED = 10 SPI_SETKEYBOARDSPEED = 11 SPI_LANGDRIVER = 12 SPI_ICONHORIZONTALSPACING = 13 SPI_GETSCREENSAVETIMEOUT = 14 SPI_SETSCREENSAVETIMEOUT = 15 SPI_GETSCREENSAVEACTIVE = 16 SPI_SETSCREENSAVEACTIVE = 17 SPI_GETGRIDGRANULARITY = 18 SPI_SETGRIDGRANULARITY = 19 SPI_SETDESKWALLPAPER = 20 SPI_SETDESKPATTERN = 21 SPI_GETKEYBOARDDELAY = 22 SPI_SETKEYBOARDDELAY = 23 SPI_ICONVERTICALSPACING = 24 SPI_GETICONTITLEWRAP = 25 SPI_SETICONTITLEWRAP = 26 SPI_GETMENUDROPALIGNMENT = 27 SPI_SETMENUDROPALIGNMENT = 28 SPI_SETDOUBLECLKWIDTH = 29 SPI_SETDOUBLECLKHEIGHT = 30 SPI_GETICONTITLELOGFONT = 31 SPI_SETDOUBLECLICKTIME = 32 SPI_SETMOUSEBUTTONSWAP = 33 SPI_SETICONTITLELOGFONT = 34 SPI_GETFASTTASKSWITCH = 35 SPI_SETFASTTASKSWITCH = 36 SPI_SETDRAGFULLWINDOWS = 37 SPI_GETDRAGFULLWINDOWS = 38 SPI_GETNONCLIENTMETRICS = 41 SPI_SETNONCLIENTMETRICS = 42 SPI_GETMINIMIZEDMETRICS = 43 SPI_SETMINIMIZEDMETRICS = 44 SPI_GETICONMETRICS = 45 SPI_SETICONMETRICS = 46 SPI_SETWORKAREA = 47 SPI_GETWORKAREA = 48 SPI_SETPENWINDOWS = 49 SPI_GETFILTERKEYS = 50 SPI_SETFILTERKEYS = 51 SPI_GETTOGGLEKEYS = 52 SPI_SETTOGGLEKEYS = 53 SPI_GETMOUSEKEYS = 54 SPI_SETMOUSEKEYS = 55 SPI_GETSHOWSOUNDS = 56 SPI_SETSHOWSOUNDS = 57 SPI_GETSTICKYKEYS = 58 SPI_SETSTICKYKEYS = 59 SPI_GETACCESSTIMEOUT = 60 SPI_SETACCESSTIMEOUT = 61 SPI_GETSERIALKEYS = 62 SPI_SETSERIALKEYS = 63 SPI_GETSOUNDSENTRY = 64 SPI_SETSOUNDSENTRY = 65 SPI_GETHIGHCONTRAST = 66 SPI_SETHIGHCONTRAST = 67 SPI_GETKEYBOARDPREF = 68 SPI_SETKEYBOARDPREF = 69 SPI_GETSCREENREADER = 70 SPI_SETSCREENREADER = 71 SPI_GETANIMATION = 72 SPI_SETANIMATION = 73 SPI_GETFONTSMOOTHING = 74 SPI_SETFONTSMOOTHING = 75 SPI_SETDRAGWIDTH = 76 SPI_SETDRAGHEIGHT = 77 SPI_SETHANDHELD = 78 SPI_GETLOWPOWERTIMEOUT = 79 SPI_GETPOWEROFFTIMEOUT = 80 SPI_SETLOWPOWERTIMEOUT = 81 SPI_SETPOWEROFFTIMEOUT = 82 SPI_GETLOWPOWERACTIVE = 83 SPI_GETPOWEROFFACTIVE = 84 SPI_SETLOWPOWERACTIVE = 85 SPI_SETPOWEROFFACTIVE = 86 SPI_SETCURSORS = 87 SPI_SETICONS = 88 SPI_GETDEFAULTINPUTLANG = 89 SPI_SETDEFAULTINPUTLANG = 90 SPI_SETLANGTOGGLE = 91 SPI_GETWINDOWSEXTENSION = 92 SPI_SETMOUSETRAILS = 93 SPI_GETMOUSETRAILS = 94 SPI_GETSNAPTODEFBUTTON = 95 SPI_SETSNAPTODEFBUTTON = 96 SPI_SETSCREENSAVERRUNNING = 97 SPI_SCREENSAVERRUNNING = SPI_SETSCREENSAVERRUNNING SPI_GETMOUSEHOVERWIDTH = 98 SPI_SETMOUSEHOVERWIDTH = 99 SPI_GETMOUSEHOVERHEIGHT = 100 SPI_SETMOUSEHOVERHEIGHT = 101 SPI_GETMOUSEHOVERTIME = 102 SPI_SETMOUSEHOVERTIME = 103 SPI_GETWHEELSCROLLLINES = 104 SPI_SETWHEELSCROLLLINES = 105 SPI_GETMENUSHOWDELAY = 106 SPI_SETMENUSHOWDELAY = 107 SPI_GETSHOWIMEUI = 110 SPI_SETSHOWIMEUI = 111 SPI_GETMOUSESPEED = 112 SPI_SETMOUSESPEED = 113 SPI_GETSCREENSAVERRUNNING = 114 SPI_GETDESKWALLPAPER = 115 SPI_GETACTIVEWINDOWTRACKING = 4096 SPI_SETACTIVEWINDOWTRACKING = 4097 SPI_GETMENUANIMATION = 4098 SPI_SETMENUANIMATION = 4099 SPI_GETCOMBOBOXANIMATION = 4100 SPI_SETCOMBOBOXANIMATION = 4101 SPI_GETLISTBOXSMOOTHSCROLLING = 4102 SPI_SETLISTBOXSMOOTHSCROLLING = 4103 SPI_GETGRADIENTCAPTIONS = 4104 SPI_SETGRADIENTCAPTIONS = 4105 SPI_GETKEYBOARDCUES = 4106 SPI_SETKEYBOARDCUES = 4107 SPI_GETMENUUNDERLINES = 4106 SPI_SETMENUUNDERLINES = 4107 SPI_GETACTIVEWNDTRKZORDER = 4108 SPI_SETACTIVEWNDTRKZORDER = 4109 SPI_GETHOTTRACKING = 4110 SPI_SETHOTTRACKING = 4111 SPI_GETMENUFADE = 4114 SPI_SETMENUFADE = 4115 SPI_GETSELECTIONFADE = 4116 SPI_SETSELECTIONFADE = 4117 SPI_GETTOOLTIPANIMATION = 4118 SPI_SETTOOLTIPANIMATION = 4119 SPI_GETTOOLTIPFADE = 4120 SPI_SETTOOLTIPFADE = 4121 SPI_GETCURSORSHADOW = 4122 SPI_SETCURSORSHADOW = 4123 SPI_GETMOUSESONAR = 4124 SPI_SETMOUSESONAR = 4125 SPI_GETMOUSECLICKLOCK = 4126 SPI_SETMOUSECLICKLOCK = 4127 SPI_GETMOUSEVANISH = 4128 SPI_SETMOUSEVANISH = 4129 SPI_GETFLATMENU = 4130 SPI_SETFLATMENU = 4131 SPI_GETDROPSHADOW = 4132 SPI_SETDROPSHADOW = 4133 SPI_GETBLOCKSENDINPUTRESETS = 4134 SPI_SETBLOCKSENDINPUTRESETS = 4135 SPI_GETUIEFFECTS = 4158 SPI_SETUIEFFECTS = 4159 SPI_GETFOREGROUNDLOCKTIMEOUT = 8192 SPI_SETFOREGROUNDLOCKTIMEOUT = 8193 SPI_GETACTIVEWNDTRKTIMEOUT = 8194 SPI_SETACTIVEWNDTRKTIMEOUT = 8195 SPI_GETFOREGROUNDFLASHCOUNT = 8196 SPI_SETFOREGROUNDFLASHCOUNT = 8197 SPI_GETCARETWIDTH = 8198 SPI_SETCARETWIDTH = 8199 SPI_GETMOUSECLICKLOCKTIME = 8200 SPI_SETMOUSECLICKLOCKTIME = 8201 SPI_GETFONTSMOOTHINGTYPE = 8202 SPI_SETFONTSMOOTHINGTYPE = 8203 SPI_GETFONTSMOOTHINGCONTRAST = 8204 SPI_SETFONTSMOOTHINGCONTRAST = 8205 SPI_GETFOCUSBORDERWIDTH = 8206 SPI_SETFOCUSBORDERWIDTH = 8207 SPI_GETFOCUSBORDERHEIGHT = 8208 SPI_SETFOCUSBORDERHEIGHT = 8209 SPI_GETFONTSMOOTHINGORIENTATION = 8210 SPI_SETFONTSMOOTHINGORIENTATION = 8211 # fWinIni flags for SystemParametersInfo SPIF_UPDATEINIFILE = 1 SPIF_SENDWININICHANGE = 2 SPIF_SENDCHANGE = SPIF_SENDWININICHANGE # used with SystemParametersInfo and SPI_GETFONTSMOOTHINGTYPE/SPI_SETFONTSMOOTHINGTYPE FE_FONTSMOOTHINGSTANDARD = 1 FE_FONTSMOOTHINGCLEARTYPE = 2 FE_FONTSMOOTHINGDOCKING = 32768 METRICS_USEDEFAULT = -1 ARW_BOTTOMLEFT = 0 ARW_BOTTOMRIGHT = 1 ARW_TOPLEFT = 2 ARW_TOPRIGHT = 3 ARW_STARTMASK = 3 ARW_STARTRIGHT = 1 ARW_STARTTOP = 2 ARW_LEFT = 0 ARW_RIGHT = 0 ARW_UP = 4 ARW_DOWN = 4 ARW_HIDE = 8 #ARW_VALID = 0x000F SERKF_SERIALKEYSON = 1 SERKF_AVAILABLE = 2 SERKF_INDICATOR = 4 HCF_HIGHCONTRASTON = 1 HCF_AVAILABLE = 2 HCF_HOTKEYACTIVE = 4 HCF_CONFIRMHOTKEY = 8 HCF_HOTKEYSOUND = 16 HCF_INDICATOR = 32 HCF_HOTKEYAVAILABLE = 64 CDS_UPDATEREGISTRY = 1 CDS_TEST = 2 CDS_FULLSCREEN = 4 CDS_GLOBAL = 8 CDS_SET_PRIMARY = 16 CDS_RESET = 1073741824 CDS_SETRECT = 536870912 CDS_NORESET = 268435456 # return values from ChangeDisplaySettings and ChangeDisplaySettingsEx DISP_CHANGE_SUCCESSFUL = 0 DISP_CHANGE_RESTART = 1 DISP_CHANGE_FAILED = -1 DISP_CHANGE_BADMODE = -2 DISP_CHANGE_NOTUPDATED = -3 DISP_CHANGE_BADFLAGS = -4 DISP_CHANGE_BADPARAM = -5 DISP_CHANGE_BADDUALVIEW = -6 ENUM_CURRENT_SETTINGS = -1 ENUM_REGISTRY_SETTINGS = -2 FKF_FILTERKEYSON = 1 FKF_AVAILABLE = 2 FKF_HOTKEYACTIVE = 4 FKF_CONFIRMHOTKEY = 8 FKF_HOTKEYSOUND = 16 FKF_INDICATOR = 32 FKF_CLICKON = 64 SKF_STICKYKEYSON = 1 SKF_AVAILABLE = 2 SKF_HOTKEYACTIVE = 4 SKF_CONFIRMHOTKEY = 8 SKF_HOTKEYSOUND = 16 SKF_INDICATOR = 32 SKF_AUDIBLEFEEDBACK = 64 SKF_TRISTATE = 128 SKF_TWOKEYSOFF = 256 SKF_LALTLATCHED = 268435456 SKF_LCTLLATCHED = 67108864 SKF_LSHIFTLATCHED = 16777216 SKF_RALTLATCHED = 536870912 SKF_RCTLLATCHED = 134217728 SKF_RSHIFTLATCHED = 33554432 SKF_LWINLATCHED = 1073741824 SKF_RWINLATCHED = -2147483648 SKF_LALTLOCKED = 1048576 SKF_LCTLLOCKED = 262144 SKF_LSHIFTLOCKED = 65536 SKF_RALTLOCKED = 2097152 SKF_RCTLLOCKED = 524288 SKF_RSHIFTLOCKED = 131072 SKF_LWINLOCKED = 4194304 SKF_RWINLOCKED = 8388608 MKF_MOUSEKEYSON = 1 MKF_AVAILABLE = 2 MKF_HOTKEYACTIVE = 4 MKF_CONFIRMHOTKEY = 8 MKF_HOTKEYSOUND = 16 MKF_INDICATOR = 32 MKF_MODIFIERS = 64 MKF_REPLACENUMBERS = 128 MKF_LEFTBUTTONSEL = 268435456 MKF_RIGHTBUTTONSEL = 536870912 MKF_LEFTBUTTONDOWN = 16777216 MKF_RIGHTBUTTONDOWN = 33554432 MKF_MOUSEMODE = -2147483648 ATF_TIMEOUTON = 1 ATF_ONOFFFEEDBACK = 2 SSGF_NONE = 0 SSGF_DISPLAY = 3 SSTF_NONE = 0 SSTF_CHARS = 1 SSTF_BORDER = 2 SSTF_DISPLAY = 3 SSWF_NONE = 0 SSWF_TITLE = 1 SSWF_WINDOW = 2 SSWF_DISPLAY = 3 SSWF_CUSTOM = 4 SSF_SOUNDSENTRYON = 1 SSF_AVAILABLE = 2 SSF_INDICATOR = 4 TKF_TOGGLEKEYSON = 1 TKF_AVAILABLE = 2 TKF_HOTKEYACTIVE = 4 TKF_CONFIRMHOTKEY = 8 TKF_HOTKEYSOUND = 16 TKF_INDICATOR = 32 SLE_ERROR = 1 SLE_MINORERROR = 2 SLE_WARNING = 3 MONITOR_DEFAULTTONULL = 0 MONITOR_DEFAULTTOPRIMARY = 1 MONITOR_DEFAULTTONEAREST = 2 MONITORINFOF_PRIMARY = 1 CCHDEVICENAME = 32 CHILDID_SELF = 0 INDEXID_OBJECT = 0 INDEXID_CONTAINER = 0 OBJID_WINDOW = 0 OBJID_SYSMENU = -1 OBJID_TITLEBAR = -2 OBJID_MENU = -3 OBJID_CLIENT = -4 OBJID_VSCROLL = -5 OBJID_HSCROLL = -6 OBJID_SIZEGRIP = -7 OBJID_CARET = -8 OBJID_CURSOR = -9 OBJID_ALERT = -10 OBJID_SOUND = -11 EVENT_MIN = 1 EVENT_MAX = 2147483647 EVENT_SYSTEM_SOUND = 1 EVENT_SYSTEM_ALERT = 2 EVENT_SYSTEM_FOREGROUND = 3 EVENT_SYSTEM_MENUSTART = 4 EVENT_SYSTEM_MENUEND = 5 EVENT_SYSTEM_MENUPOPUPSTART = 6 EVENT_SYSTEM_MENUPOPUPEND = 7 EVENT_SYSTEM_CAPTURESTART = 8 EVENT_SYSTEM_CAPTUREEND = 9 EVENT_SYSTEM_MOVESIZESTART = 10 EVENT_SYSTEM_MOVESIZEEND = 11 EVENT_SYSTEM_CONTEXTHELPSTART = 12 EVENT_SYSTEM_CONTEXTHELPEND = 13 EVENT_SYSTEM_DRAGDROPSTART = 14 EVENT_SYSTEM_DRAGDROPEND = 15 EVENT_SYSTEM_DIALOGSTART = 16 EVENT_SYSTEM_DIALOGEND = 17 EVENT_SYSTEM_SCROLLINGSTART = 18 EVENT_SYSTEM_SCROLLINGEND = 19 EVENT_SYSTEM_SWITCHSTART = 20 EVENT_SYSTEM_SWITCHEND = 21 EVENT_SYSTEM_MINIMIZESTART = 22 EVENT_SYSTEM_MINIMIZEEND = 23 EVENT_OBJECT_CREATE = 32768 EVENT_OBJECT_DESTROY = 32769 EVENT_OBJECT_SHOW = 32770 EVENT_OBJECT_HIDE = 32771 EVENT_OBJECT_REORDER = 32772 EVENT_OBJECT_FOCUS = 32773 EVENT_OBJECT_SELECTION = 32774 EVENT_OBJECT_SELECTIONADD = 32775 EVENT_OBJECT_SELECTIONREMOVE = 32776 EVENT_OBJECT_SELECTIONWITHIN = 32777 EVENT_OBJECT_STATECHANGE = 32778 EVENT_OBJECT_LOCATIONCHANGE = 32779 EVENT_OBJECT_NAMECHANGE = 32780 EVENT_OBJECT_DESCRIPTIONCHANGE = 32781 EVENT_OBJECT_VALUECHANGE = 32782 EVENT_OBJECT_PARENTCHANGE = 32783 EVENT_OBJECT_HELPCHANGE = 32784 EVENT_OBJECT_DEFACTIONCHANGE = 32785 EVENT_OBJECT_ACCELERATORCHANGE = 32786 SOUND_SYSTEM_STARTUP = 1 SOUND_SYSTEM_SHUTDOWN = 2 SOUND_SYSTEM_BEEP = 3 SOUND_SYSTEM_ERROR = 4 SOUND_SYSTEM_QUESTION = 5 SOUND_SYSTEM_WARNING = 6 SOUND_SYSTEM_INFORMATION = 7 SOUND_SYSTEM_MAXIMIZE = 8 SOUND_SYSTEM_MINIMIZE = 9 SOUND_SYSTEM_RESTOREUP = 10 SOUND_SYSTEM_RESTOREDOWN = 11 SOUND_SYSTEM_APPSTART = 12 SOUND_SYSTEM_FAULT = 13 SOUND_SYSTEM_APPEND = 14 SOUND_SYSTEM_MENUCOMMAND = 15 SOUND_SYSTEM_MENUPOPUP = 16 CSOUND_SYSTEM = 16 ALERT_SYSTEM_INFORMATIONAL = 1 ALERT_SYSTEM_WARNING = 2 ALERT_SYSTEM_ERROR = 3 ALERT_SYSTEM_QUERY = 4 ALERT_SYSTEM_CRITICAL = 5 CALERT_SYSTEM = 6 WINEVENT_OUTOFCONTEXT = 0 WINEVENT_SKIPOWNTHREAD = 1 WINEVENT_SKIPOWNPROCESS = 2 WINEVENT_INCONTEXT = 4 GUI_CARETBLINKING = 1 GUI_INMOVESIZE = 2 GUI_INMENUMODE = 4 GUI_SYSTEMMENUMODE = 8 GUI_POPUPMENUMODE = 16 STATE_SYSTEM_UNAVAILABLE = 1 STATE_SYSTEM_SELECTED = 2 STATE_SYSTEM_FOCUSED = 4 STATE_SYSTEM_PRESSED = 8 STATE_SYSTEM_CHECKED = 16 STATE_SYSTEM_MIXED = 32 STATE_SYSTEM_READONLY = 64 STATE_SYSTEM_HOTTRACKED = 128 STATE_SYSTEM_DEFAULT = 256 STATE_SYSTEM_EXPANDED = 512 STATE_SYSTEM_COLLAPSED = 1024 STATE_SYSTEM_BUSY = 2048 STATE_SYSTEM_FLOATING = 4096 STATE_SYSTEM_MARQUEED = 8192 STATE_SYSTEM_ANIMATED = 16384 STATE_SYSTEM_INVISIBLE = 32768 STATE_SYSTEM_OFFSCREEN = 65536 STATE_SYSTEM_SIZEABLE = 131072 STATE_SYSTEM_MOVEABLE = 262144 STATE_SYSTEM_SELFVOICING = 524288 STATE_SYSTEM_FOCUSABLE = 1048576 STATE_SYSTEM_SELECTABLE = 2097152 STATE_SYSTEM_LINKED = 4194304 STATE_SYSTEM_TRAVERSED = 8388608 STATE_SYSTEM_MULTISELECTABLE = 16777216 STATE_SYSTEM_EXTSELECTABLE = 33554432 STATE_SYSTEM_ALERT_LOW = 67108864 STATE_SYSTEM_ALERT_MEDIUM = 134217728 STATE_SYSTEM_ALERT_HIGH = 268435456 STATE_SYSTEM_VALID = 536870911 CCHILDREN_TITLEBAR = 5 CCHILDREN_SCROLLBAR = 5 CURSOR_SHOWING = 1 WS_ACTIVECAPTION = 1 GA_MIC = 1 GA_PARENT = 1 GA_ROOT = 2 GA_ROOTOWNER = 3 GA_MAC = 4 # winuser.h line 1979 BF_LEFT = 1 BF_TOP = 2 BF_RIGHT = 4 BF_BOTTOM = 8 BF_TOPLEFT = (BF_TOP | BF_LEFT) BF_TOPRIGHT = (BF_TOP | BF_RIGHT) BF_BOTTOMLEFT = (BF_BOTTOM | BF_LEFT) BF_BOTTOMRIGHT = (BF_BOTTOM | BF_RIGHT) BF_RECT = (BF_LEFT | BF_TOP | BF_RIGHT | BF_BOTTOM) BF_DIAGONAL = 16 BF_DIAGONAL_ENDTOPRIGHT = (BF_DIAGONAL | BF_TOP | BF_RIGHT) BF_DIAGONAL_ENDTOPLEFT = (BF_DIAGONAL | BF_TOP | BF_LEFT) BF_DIAGONAL_ENDBOTTOMLEFT = (BF_DIAGONAL | BF_BOTTOM | BF_LEFT) BF_DIAGONAL_ENDBOTTOMRIGHT = (BF_DIAGONAL | BF_BOTTOM | BF_RIGHT) BF_MIDDLE = 2048 BF_SOFT = 4096 BF_ADJUST = 8192 BF_FLAT = 16384 BF_MONO = 32768 DFC_CAPTION = 1 DFC_MENU = 2 DFC_SCROLL = 3 DFC_BUTTON = 4 DFC_POPUPMENU = 5 DFCS_CAPTIONCLOSE = 0 DFCS_CAPTIONMIN = 1 DFCS_CAPTIONMAX = 2 DFCS_CAPTIONRESTORE = 3 DFCS_CAPTIONHELP = 4 DFCS_MENUARROW = 0 DFCS_MENUCHECK = 1 DFCS_MENUBULLET = 2 DFCS_MENUARROWRIGHT = 4 DFCS_SCROLLUP = 0 DFCS_SCROLLDOWN = 1 DFCS_SCROLLLEFT = 2 DFCS_SCROLLRIGHT = 3 DFCS_SCROLLCOMBOBOX = 5 DFCS_SCROLLSIZEGRIP = 8 DFCS_SCROLLSIZEGRIPRIGHT = 16 DFCS_BUTTONCHECK = 0 DFCS_BUTTONRADIOIMAGE = 1 DFCS_BUTTONRADIOMASK = 2 DFCS_BUTTONRADIO = 4 DFCS_BUTTON3STATE = 8 DFCS_BUTTONPUSH = 16 DFCS_INACTIVE = 256 DFCS_PUSHED = 512 DFCS_CHECKED = 1024 DFCS_TRANSPARENT = 2048 DFCS_HOT = 4096 DFCS_ADJUSTRECT = 8192 DFCS_FLAT = 16384 DFCS_MONO = 32768 DC_ACTIVE = 1 DC_SMALLCAP = 2 DC_ICON = 4 DC_TEXT = 8 DC_INBUTTON = 16 DC_GRADIENT = 32 IDANI_OPEN = 1 IDANI_CLOSE = 2 IDANI_CAPTION = 3 CF_TEXT = 1 CF_BITMAP = 2 CF_METAFILEPICT = 3 CF_SYLK = 4 CF_DIF = 5 CF_TIFF = 6 CF_OEMTEXT = 7 CF_DIB = 8 CF_PALETTE = 9 CF_PENDATA = 10 CF_RIFF = 11 CF_WAVE = 12 CF_UNICODETEXT = 13 CF_ENHMETAFILE = 14 CF_HDROP = 15 CF_LOCALE = 16 CF_MAX = 17 CF_OWNERDISPLAY = 128 CF_DSPTEXT = 129 CF_DSPBITMAP = 130 CF_DSPMETAFILEPICT = 131 CF_DSPENHMETAFILE = 142 CF_PRIVATEFIRST = 512 CF_PRIVATELAST = 767 CF_GDIOBJFIRST = 768 CF_GDIOBJLAST = 1023 FVIRTKEY =1 FNOINVERT = 2 FSHIFT = 4 FCONTROL = 8 FALT = 16 WPF_SETMINPOSITION = 1 WPF_RESTORETOMAXIMIZED = 2 ODT_MENU = 1 ODT_LISTBOX = 2 ODT_COMBOBOX = 3 ODT_BUTTON = 4 ODT_STATIC = 5 ODA_DRAWENTIRE = 1 ODA_SELECT = 2 ODA_FOCUS = 4 ODS_SELECTED = 1 ODS_GRAYED = 2 ODS_DISABLED = 4 ODS_CHECKED = 8 ODS_FOCUS = 16 ODS_DEFAULT = 32 ODS_COMBOBOXEDIT = 4096 ODS_HOTLIGHT = 64 ODS_INACTIVE = 128 PM_NOREMOVE = 0 PM_REMOVE = 1 PM_NOYIELD = 2 # Name clashes with key.MOD_ALT, key.MOD_CONTROL and key.MOD_SHIFT WIN32_MOD_ALT = 1 WIN32_MOD_CONTROL = 2 WIN32_MOD_SHIFT = 4 WIN32_MOD_WIN = 8 IDHOT_SNAPWINDOW = (-1) IDHOT_SNAPDESKTOP = (-2) #EW_RESTARTWINDOWS = 0x0042 #EW_REBOOTSYSTEM = 0x0043 #EW_EXITANDEXECAPP = 0x0044 ENDSESSION_LOGOFF = -2147483648 EWX_LOGOFF = 0 EWX_SHUTDOWN = 1 EWX_REBOOT = 2 EWX_FORCE = 4 EWX_POWEROFF = 8 EWX_FORCEIFHUNG = 16 BSM_ALLCOMPONENTS = 0 BSM_VXDS = 1 BSM_NETDRIVER = 2 BSM_INSTALLABLEDRIVERS = 4 BSM_APPLICATIONS = 8 BSM_ALLDESKTOPS = 16 BSF_QUERY = 1 BSF_IGNORECURRENTTASK = 2 BSF_FLUSHDISK = 4 BSF_NOHANG = 8 BSF_POSTMESSAGE = 16 BSF_FORCEIFHUNG = 32 BSF_NOTIMEOUTIFNOTHUNG = 64 BROADCAST_QUERY_DENY = 1112363332 # Return this value to deny a query. DBWF_LPARAMPOINTER = 32768 # winuser.h line 3232 SWP_NOSIZE = 1 SWP_NOMOVE = 2 SWP_NOZORDER = 4 SWP_NOREDRAW = 8 SWP_NOACTIVATE = 16 SWP_FRAMECHANGED = 32 SWP_SHOWWINDOW = 64 SWP_HIDEWINDOW = 128 SWP_NOCOPYBITS = 256 SWP_NOOWNERZORDER = 512 SWP_NOSENDCHANGING = 1024 SWP_DRAWFRAME = SWP_FRAMECHANGED SWP_NOREPOSITION = SWP_NOOWNERZORDER SWP_DEFERERASE = 8192 SWP_ASYNCWINDOWPOS = 16384 DLGWINDOWEXTRA = 30 # winuser.h line 4249 KEYEVENTF_EXTENDEDKEY = 1 KEYEVENTF_KEYUP = 2 MOUSEEVENTF_MOVE = 1 MOUSEEVENTF_LEFTDOWN = 2 MOUSEEVENTF_LEFTUP = 4 MOUSEEVENTF_RIGHTDOWN = 8 MOUSEEVENTF_RIGHTUP = 16 MOUSEEVENTF_MIDDLEDOWN = 32 MOUSEEVENTF_MIDDLEUP = 64 MOUSEEVENTF_ABSOLUTE = 32768 INPUT_MOUSE = 0 INPUT_KEYBOARD = 1 INPUT_HARDWARE = 2 MWMO_WAITALL = 1 MWMO_ALERTABLE = 2 MWMO_INPUTAVAILABLE = 4 QS_KEY = 1 QS_MOUSEMOVE = 2 QS_MOUSEBUTTON = 4 QS_POSTMESSAGE = 8 QS_TIMER = 16 QS_PAINT = 32 QS_SENDMESSAGE = 64 QS_HOTKEY = 128 QS_MOUSE = (QS_MOUSEMOVE | \ QS_MOUSEBUTTON) QS_INPUT = (QS_MOUSE | \ QS_KEY) QS_ALLEVENTS = (QS_INPUT | \ QS_POSTMESSAGE | \ QS_TIMER | \ QS_PAINT | \ QS_HOTKEY) QS_ALLINPUT = (QS_INPUT | \ QS_POSTMESSAGE | \ QS_TIMER | \ QS_PAINT | \ QS_HOTKEY | \ QS_SENDMESSAGE) IMN_CLOSESTATUSWINDOW = 1 IMN_OPENSTATUSWINDOW = 2 IMN_CHANGECANDIDATE = 3 IMN_CLOSECANDIDATE = 4 IMN_OPENCANDIDATE = 5 IMN_SETCONVERSIONMODE = 6 IMN_SETSENTENCEMODE = 7 IMN_SETOPENSTATUS = 8 IMN_SETCANDIDATEPOS = 9 IMN_SETCOMPOSITIONFONT = 10 IMN_SETCOMPOSITIONWINDOW = 11 IMN_SETSTATUSWINDOWPOS = 12 IMN_GUIDELINE = 13 IMN_PRIVATE = 14 # winuser.h line 8518 HELP_CONTEXT = 1 HELP_QUIT = 2 HELP_INDEX = 3 HELP_CONTENTS = 3 HELP_HELPONHELP = 4 HELP_SETINDEX = 5 HELP_SETCONTENTS = 5 HELP_CONTEXTPOPUP = 8 HELP_FORCEFILE = 9 HELP_KEY = 257 HELP_COMMAND = 258 HELP_PARTIALKEY = 261 HELP_MULTIKEY = 513 HELP_SETWINPOS = 515 HELP_CONTEXTMENU = 10 HELP_FINDER = 11 HELP_WM_HELP = 12 HELP_SETPOPUP_POS = 13 HELP_TCARD = 32768 HELP_TCARD_DATA = 16 HELP_TCARD_OTHER_CALLER = 17 IDH_NO_HELP = 28440 IDH_MISSING_CONTEXT = 28441 # Control doesn't have matching help context IDH_GENERIC_HELP_BUTTON = 28442 # Property sheet help button IDH_OK = 28443 IDH_CANCEL = 28444 IDH_HELP = 28445 GR_GDIOBJECTS = 0 # Count of GDI objects GR_USEROBJECTS = 1 # Count of USER objects # Generated by h2py from \msvcnt\include\wingdi.h # manually added (missed by generation some how! SRCCOPY = 13369376 # dest = source SRCPAINT = 15597702 # dest = source OR dest SRCAND = 8913094 # dest = source AND dest SRCINVERT = 6684742 # dest = source XOR dest SRCERASE = 4457256 # dest = source AND (NOT dest ) NOTSRCCOPY = 3342344 # dest = (NOT source) NOTSRCERASE = 1114278 # dest = (NOT src) AND (NOT dest) MERGECOPY = 12583114 # dest = (source AND pattern) MERGEPAINT = 12255782 # dest = (NOT source) OR dest PATCOPY = 15728673 # dest = pattern PATPAINT = 16452105 # dest = DPSnoo PATINVERT = 5898313 # dest = pattern XOR dest DSTINVERT = 5570569 # dest = (NOT dest) BLACKNESS = 66 # dest = BLACK WHITENESS = 16711778 # dest = WHITE # hacked and split manually by mhammond. R2_BLACK = 1 R2_NOTMERGEPEN = 2 R2_MASKNOTPEN = 3 R2_NOTCOPYPEN = 4 R2_MASKPENNOT = 5 R2_NOT = 6 R2_XORPEN = 7 R2_NOTMASKPEN = 8 R2_MASKPEN = 9 R2_NOTXORPEN = 10 R2_NOP = 11 R2_MERGENOTPEN = 12 R2_COPYPEN = 13 R2_MERGEPENNOT = 14 R2_MERGEPEN = 15 R2_WHITE = 16 R2_LAST = 16 GDI_ERROR = (-1) ERROR = 0 NULLREGION = 1 SIMPLEREGION = 2 COMPLEXREGION = 3 RGN_ERROR = ERROR RGN_AND = 1 RGN_OR = 2 RGN_XOR = 3 RGN_DIFF = 4 RGN_COPY = 5 RGN_MIN = RGN_AND RGN_MAX = RGN_COPY BLACKONWHITE = 1 WHITEONBLACK = 2 COLORONCOLOR = 3 HALFTONE = 4 MAXSTRETCHBLTMODE = 4 ALTERNATE = 1 WINDING = 2 POLYFILL_LAST = 2 TA_NOUPDATECP = 0 TA_UPDATECP = 1 TA_LEFT = 0 TA_RIGHT = 2 TA_CENTER = 6 TA_TOP = 0 TA_BOTTOM = 8 TA_BASELINE = 24 TA_MASK = (TA_BASELINE+TA_CENTER+TA_UPDATECP) VTA_BASELINE = TA_BASELINE VTA_LEFT = TA_BOTTOM VTA_RIGHT = TA_TOP VTA_CENTER = TA_CENTER VTA_BOTTOM = TA_RIGHT VTA_TOP = TA_LEFT ETO_GRAYED = 1 ETO_OPAQUE = 2 ETO_CLIPPED = 4 ASPECT_FILTERING = 1 DCB_RESET = 1 DCB_ACCUMULATE = 2 DCB_DIRTY = DCB_ACCUMULATE DCB_SET = (DCB_RESET | DCB_ACCUMULATE) DCB_ENABLE = 4 DCB_DISABLE = 8 META_SETBKCOLOR = 513 META_SETBKMODE = 258 META_SETMAPMODE = 259 META_SETROP2 = 260 META_SETRELABS = 261 META_SETPOLYFILLMODE = 262 META_SETSTRETCHBLTMODE = 263 META_SETTEXTCHAREXTRA = 264 META_SETTEXTCOLOR = 521 META_SETTEXTJUSTIFICATION = 522 META_SETWINDOWORG = 523 META_SETWINDOWEXT = 524 META_SETVIEWPORTORG = 525 META_SETVIEWPORTEXT = 526 META_OFFSETWINDOWORG = 527 META_SCALEWINDOWEXT = 1040 META_OFFSETVIEWPORTORG = 529 META_SCALEVIEWPORTEXT = 1042 META_LINETO = 531 META_MOVETO = 532 META_EXCLUDECLIPRECT = 1045 META_INTERSECTCLIPRECT = 1046 META_ARC = 2071 META_ELLIPSE = 1048 META_FLOODFILL = 1049 META_PIE = 2074 META_RECTANGLE = 1051 META_ROUNDRECT = 1564 META_PATBLT = 1565 META_SAVEDC = 30 META_SETPIXEL = 1055 META_OFFSETCLIPRGN = 544 META_TEXTOUT = 1313 META_BITBLT = 2338 META_STRETCHBLT = 2851 META_POLYGON = 804 META_POLYLINE = 805 META_ESCAPE = 1574 META_RESTOREDC = 295 META_FILLREGION = 552 META_FRAMEREGION = 1065 META_INVERTREGION = 298 META_PAINTREGION = 299 META_SELECTCLIPREGION = 300 META_SELECTOBJECT = 301 META_SETTEXTALIGN = 302 META_CHORD = 2096 META_SETMAPPERFLAGS = 561 META_EXTTEXTOUT = 2610 META_SETDIBTODEV = 3379 META_SELECTPALETTE = 564 META_REALIZEPALETTE = 53 META_ANIMATEPALETTE = 1078 META_SETPALENTRIES = 55 META_POLYPOLYGON = 1336 META_RESIZEPALETTE = 313 META_DIBBITBLT = 2368 META_DIBSTRETCHBLT = 2881 META_DIBCREATEPATTERNBRUSH = 322 META_STRETCHDIB = 3907 META_EXTFLOODFILL = 1352 META_DELETEOBJECT = 496 META_CREATEPALETTE = 247 META_CREATEPATTERNBRUSH = 505 META_CREATEPENINDIRECT = 762 META_CREATEFONTINDIRECT = 763 META_CREATEBRUSHINDIRECT = 764 META_CREATEREGION = 1791 FILE_BEGIN = 0 FILE_CURRENT = 1 FILE_END = 2 FILE_FLAG_WRITE_THROUGH = -2147483648 FILE_FLAG_OVERLAPPED = 1073741824 FILE_FLAG_NO_BUFFERING = 536870912 FILE_FLAG_RANDOM_ACCESS = 268435456 FILE_FLAG_SEQUENTIAL_SCAN = 134217728 FILE_FLAG_DELETE_ON_CLOSE = 67108864 FILE_FLAG_BACKUP_SEMANTICS = 33554432 FILE_FLAG_POSIX_SEMANTICS = 16777216 CREATE_NEW = 1 CREATE_ALWAYS = 2 OPEN_EXISTING = 3 OPEN_ALWAYS = 4 TRUNCATE_EXISTING = 5 PIPE_ACCESS_INBOUND = 1 PIPE_ACCESS_OUTBOUND = 2 PIPE_ACCESS_DUPLEX = 3 PIPE_CLIENT_END = 0 PIPE_SERVER_END = 1 PIPE_WAIT = 0 PIPE_NOWAIT = 1 PIPE_READMODE_BYTE = 0 PIPE_READMODE_MESSAGE = 2 PIPE_TYPE_BYTE = 0 PIPE_TYPE_MESSAGE = 4 PIPE_UNLIMITED_INSTANCES = 255 SECURITY_CONTEXT_TRACKING = 262144 SECURITY_EFFECTIVE_ONLY = 524288 SECURITY_SQOS_PRESENT = 1048576 SECURITY_VALID_SQOS_FLAGS = 2031616 DTR_CONTROL_DISABLE = 0 DTR_CONTROL_ENABLE = 1 DTR_CONTROL_HANDSHAKE = 2 RTS_CONTROL_DISABLE = 0 RTS_CONTROL_ENABLE = 1 RTS_CONTROL_HANDSHAKE = 2 RTS_CONTROL_TOGGLE = 3 GMEM_FIXED = 0 GMEM_MOVEABLE = 2 GMEM_NOCOMPACT = 16 GMEM_NODISCARD = 32 GMEM_ZEROINIT = 64 GMEM_MODIFY = 128 GMEM_DISCARDABLE = 256 GMEM_NOT_BANKED = 4096 GMEM_SHARE = 8192 GMEM_DDESHARE = 8192 GMEM_NOTIFY = 16384 GMEM_LOWER = GMEM_NOT_BANKED GMEM_VALID_FLAGS = 32626 GMEM_INVALID_HANDLE = 32768 GHND = (GMEM_MOVEABLE | GMEM_ZEROINIT) GPTR = (GMEM_FIXED | GMEM_ZEROINIT) GMEM_DISCARDED = 16384 GMEM_LOCKCOUNT = 255 LMEM_FIXED = 0 LMEM_MOVEABLE = 2 LMEM_NOCOMPACT = 16 LMEM_NODISCARD = 32 LMEM_ZEROINIT = 64 LMEM_MODIFY = 128 LMEM_DISCARDABLE = 3840 LMEM_VALID_FLAGS = 3954 LMEM_INVALID_HANDLE = 32768 LHND = (LMEM_MOVEABLE | LMEM_ZEROINIT) LPTR = (LMEM_FIXED | LMEM_ZEROINIT) NONZEROLHND = (LMEM_MOVEABLE) NONZEROLPTR = (LMEM_FIXED) LMEM_DISCARDED = 16384 LMEM_LOCKCOUNT = 255 DEBUG_PROCESS = 1 DEBUG_ONLY_THIS_PROCESS = 2 CREATE_SUSPENDED = 4 DETACHED_PROCESS = 8 CREATE_NEW_CONSOLE = 16 NORMAL_PRIORITY_CLASS = 32 IDLE_PRIORITY_CLASS = 64 HIGH_PRIORITY_CLASS = 128 REALTIME_PRIORITY_CLASS = 256 CREATE_NEW_PROCESS_GROUP = 512 CREATE_UNICODE_ENVIRONMENT = 1024 CREATE_SEPARATE_WOW_VDM = 2048 CREATE_SHARED_WOW_VDM = 4096 CREATE_DEFAULT_ERROR_MODE = 67108864 CREATE_NO_WINDOW = 134217728 PROFILE_USER = 268435456 PROFILE_KERNEL = 536870912 PROFILE_SERVER = 1073741824 THREAD_BASE_PRIORITY_LOWRT = 15 THREAD_BASE_PRIORITY_MAX = 2 THREAD_BASE_PRIORITY_MIN = -2 THREAD_BASE_PRIORITY_IDLE = -15 THREAD_PRIORITY_LOWEST = THREAD_BASE_PRIORITY_MIN THREAD_PRIORITY_BELOW_NORMAL = THREAD_PRIORITY_LOWEST+1 THREAD_PRIORITY_HIGHEST = THREAD_BASE_PRIORITY_MAX THREAD_PRIORITY_ABOVE_NORMAL = THREAD_PRIORITY_HIGHEST-1 THREAD_PRIORITY_ERROR_RETURN = MAXLONG THREAD_PRIORITY_TIME_CRITICAL = THREAD_BASE_PRIORITY_LOWRT THREAD_PRIORITY_IDLE = THREAD_BASE_PRIORITY_IDLE THREAD_PRIORITY_NORMAL = 0 EXCEPTION_DEBUG_EVENT = 1 CREATE_THREAD_DEBUG_EVENT = 2 CREATE_PROCESS_DEBUG_EVENT = 3 EXIT_THREAD_DEBUG_EVENT = 4 EXIT_PROCESS_DEBUG_EVENT = 5 LOAD_DLL_DEBUG_EVENT = 6 UNLOAD_DLL_DEBUG_EVENT = 7 OUTPUT_DEBUG_STRING_EVENT = 8 RIP_EVENT = 9 DRIVE_UNKNOWN = 0 DRIVE_NO_ROOT_DIR = 1 DRIVE_REMOVABLE = 2 DRIVE_FIXED = 3 DRIVE_REMOTE = 4 DRIVE_CDROM = 5 DRIVE_RAMDISK = 6 FILE_TYPE_UNKNOWN = 0 FILE_TYPE_DISK = 1 FILE_TYPE_CHAR = 2 FILE_TYPE_PIPE = 3 FILE_TYPE_REMOTE = 32768 NOPARITY = 0 ODDPARITY = 1 EVENPARITY = 2 MARKPARITY = 3 SPACEPARITY = 4 ONESTOPBIT = 0 ONE5STOPBITS = 1 TWOSTOPBITS = 2 CBR_110 = 110 CBR_300 = 300 CBR_600 = 600 CBR_1200 = 1200 CBR_2400 = 2400 CBR_4800 = 4800 CBR_9600 = 9600 CBR_14400 = 14400 CBR_19200 = 19200 CBR_38400 = 38400 CBR_56000 = 56000 CBR_57600 = 57600 CBR_115200 = 115200 CBR_128000 = 128000 CBR_256000 = 256000 S_QUEUEEMPTY = 0 S_THRESHOLD = 1 S_ALLTHRESHOLD = 2 S_NORMAL = 0 S_LEGATO = 1 S_STACCATO = 2 NMPWAIT_WAIT_FOREVER = -1 NMPWAIT_NOWAIT = 1 NMPWAIT_USE_DEFAULT_WAIT = 0 OF_READ = 0 OF_WRITE = 1 OF_READWRITE = 2 OF_SHARE_COMPAT = 0 OF_SHARE_EXCLUSIVE = 16 OF_SHARE_DENY_WRITE = 32 OF_SHARE_DENY_READ = 48 OF_SHARE_DENY_NONE = 64 OF_PARSE = 256 OF_DELETE = 512 OF_VERIFY = 1024 OF_CANCEL = 2048 OF_CREATE = 4096 OF_PROMPT = 8192 OF_EXIST = 16384 OF_REOPEN = 32768 OFS_MAXPATHNAME = 128 MAXINTATOM = 49152 # winbase.h PROCESS_HEAP_REGION = 1 PROCESS_HEAP_UNCOMMITTED_RANGE = 2 PROCESS_HEAP_ENTRY_BUSY = 4 PROCESS_HEAP_ENTRY_MOVEABLE = 16 PROCESS_HEAP_ENTRY_DDESHARE = 32 SCS_32BIT_BINARY = 0 SCS_DOS_BINARY = 1 SCS_WOW_BINARY = 2 SCS_PIF_BINARY = 3 SCS_POSIX_BINARY = 4 SCS_OS216_BINARY = 5 SEM_FAILCRITICALERRORS = 1 SEM_NOGPFAULTERRORBOX = 2 SEM_NOALIGNMENTFAULTEXCEPT = 4 SEM_NOOPENFILEERRORBOX = 32768 LOCKFILE_FAIL_IMMEDIATELY = 1 LOCKFILE_EXCLUSIVE_LOCK = 2 HANDLE_FLAG_INHERIT = 1 HANDLE_FLAG_PROTECT_FROM_CLOSE = 2 HINSTANCE_ERROR = 32 GET_TAPE_MEDIA_INFORMATION = 0 GET_TAPE_DRIVE_INFORMATION = 1 SET_TAPE_MEDIA_INFORMATION = 0 SET_TAPE_DRIVE_INFORMATION = 1 FORMAT_MESSAGE_ALLOCATE_BUFFER = 256 FORMAT_MESSAGE_IGNORE_INSERTS = 512 FORMAT_MESSAGE_FROM_STRING = 1024 FORMAT_MESSAGE_FROM_HMODULE = 2048 FORMAT_MESSAGE_FROM_SYSTEM = 4096 FORMAT_MESSAGE_ARGUMENT_ARRAY = 8192 FORMAT_MESSAGE_MAX_WIDTH_MASK = 255 BACKUP_INVALID = 0 BACKUP_DATA = 1 BACKUP_EA_DATA = 2 BACKUP_SECURITY_DATA = 3 BACKUP_ALTERNATE_DATA = 4 BACKUP_LINK = 5 BACKUP_PROPERTY_DATA = 6 BACKUP_OBJECT_ID = 7 BACKUP_REPARSE_DATA = 8 BACKUP_SPARSE_BLOCK = 9 STREAM_NORMAL_ATTRIBUTE = 0 STREAM_MODIFIED_WHEN_READ = 1 STREAM_CONTAINS_SECURITY = 2 STREAM_CONTAINS_PROPERTIES = 4 STARTF_USESHOWWINDOW = 1 STARTF_USESIZE = 2 STARTF_USEPOSITION = 4 STARTF_USECOUNTCHARS = 8 STARTF_USEFILLATTRIBUTE = 16 STARTF_FORCEONFEEDBACK = 64 STARTF_FORCEOFFFEEDBACK = 128 STARTF_USESTDHANDLES = 256 STARTF_USEHOTKEY = 512 SHUTDOWN_NORETRY = 1 DONT_RESOLVE_DLL_REFERENCES = 1 LOAD_LIBRARY_AS_DATAFILE = 2 LOAD_WITH_ALTERED_SEARCH_PATH = 8 DDD_RAW_TARGET_PATH = 1 DDD_REMOVE_DEFINITION = 2 DDD_EXACT_MATCH_ON_REMOVE = 4 MOVEFILE_REPLACE_EXISTING = 1 MOVEFILE_COPY_ALLOWED = 2 MOVEFILE_DELAY_UNTIL_REBOOT = 4 MAX_COMPUTERNAME_LENGTH = 15 LOGON32_LOGON_INTERACTIVE = 2 LOGON32_LOGON_BATCH = 4 LOGON32_LOGON_SERVICE = 5 LOGON32_PROVIDER_DEFAULT = 0 LOGON32_PROVIDER_WINNT35 = 1 VER_PLATFORM_WIN32s = 0 VER_PLATFORM_WIN32_WINDOWS = 1 VER_PLATFORM_WIN32_NT = 2 TC_NORMAL = 0 TC_HARDERR = 1 TC_GP_TRAP = 2 TC_SIGNAL = 3 AC_LINE_OFFLINE = 0 AC_LINE_ONLINE = 1 AC_LINE_BACKUP_POWER = 2 AC_LINE_UNKNOWN = 255 BATTERY_FLAG_HIGH = 1 BATTERY_FLAG_LOW = 2 BATTERY_FLAG_CRITICAL = 4 BATTERY_FLAG_CHARGING = 8 BATTERY_FLAG_NO_BATTERY = 128 BATTERY_FLAG_UNKNOWN = 255 BATTERY_PERCENTAGE_UNKNOWN = 255 BATTERY_LIFE_UNKNOWN = -1 # Generated by h2py from d:\msdev\include\richedit.h cchTextLimitDefault = 32767 WM_CONTEXTMENU = 123 WM_PRINTCLIENT = 792 EN_MSGFILTER = 1792 EN_REQUESTRESIZE = 1793 EN_SELCHANGE = 1794 EN_DROPFILES = 1795 EN_PROTECTED = 1796 EN_CORRECTTEXT = 1797 EN_STOPNOUNDO = 1798 EN_IMECHANGE = 1799 EN_SAVECLIPBOARD = 1800 EN_OLEOPFAILED = 1801 ENM_NONE = 0 ENM_CHANGE = 1 ENM_UPDATE = 2 ENM_SCROLL = 4 ENM_KEYEVENTS = 65536 ENM_MOUSEEVENTS = 131072 ENM_REQUESTRESIZE = 262144 ENM_SELCHANGE = 524288 ENM_DROPFILES = 1048576 ENM_PROTECTED = 2097152 ENM_CORRECTTEXT = 4194304 ENM_IMECHANGE = 8388608 ES_SAVESEL = 32768 ES_SUNKEN = 16384 ES_DISABLENOSCROLL = 8192 ES_SELECTIONBAR = 16777216 ES_EX_NOCALLOLEINIT = 16777216 ES_VERTICAL = 4194304 ES_NOIME = 524288 ES_SELFIME = 262144 ECO_AUTOWORDSELECTION = 1 ECO_AUTOVSCROLL = 64 ECO_AUTOHSCROLL = 128 ECO_NOHIDESEL = 256 ECO_READONLY = 2048 ECO_WANTRETURN = 4096 ECO_SAVESEL = 32768 ECO_SELECTIONBAR = 16777216 ECO_VERTICAL = 4194304 ECOOP_SET = 1 ECOOP_OR = 2 ECOOP_AND = 3 ECOOP_XOR = 4 WB_CLASSIFY = 3 WB_MOVEWORDLEFT = 4 WB_MOVEWORDRIGHT = 5 WB_LEFTBREAK = 6 WB_RIGHTBREAK = 7 WB_MOVEWORDPREV = 4 WB_MOVEWORDNEXT = 5 WB_PREVBREAK = 6 WB_NEXTBREAK = 7 PC_FOLLOWING = 1 PC_LEADING = 2 PC_OVERFLOW = 3 PC_DELIMITER = 4 WBF_WORDWRAP = 16 WBF_WORDBREAK = 32 WBF_OVERFLOW = 64 WBF_LEVEL1 = 128 WBF_LEVEL2 = 256 WBF_CUSTOM = 512 CFM_BOLD = 1 CFM_ITALIC = 2 CFM_UNDERLINE = 4 CFM_STRIKEOUT = 8 CFM_PROTECTED = 16 CFM_SIZE = -2147483648 CFM_COLOR = 1073741824 CFM_FACE = 536870912 CFM_OFFSET = 268435456 CFM_CHARSET = 134217728 CFE_BOLD = 1 CFE_ITALIC = 2 CFE_UNDERLINE = 4 CFE_STRIKEOUT = 8 CFE_PROTECTED = 16 CFE_AUTOCOLOR = 1073741824 yHeightCharPtsMost = 1638 SCF_SELECTION = 1 SCF_WORD = 2 SF_TEXT = 1 SF_RTF = 2 SF_RTFNOOBJS = 3 SF_TEXTIZED = 4 SFF_SELECTION = 32768 SFF_PLAINRTF = 16384 MAX_TAB_STOPS = 32 lDefaultTab = 720 PFM_STARTINDENT = 1 PFM_RIGHTINDENT = 2 PFM_OFFSET = 4 PFM_ALIGNMENT = 8 PFM_TABSTOPS = 16 PFM_NUMBERING = 32 PFM_OFFSETINDENT = -2147483648 PFN_BULLET = 1 PFA_LEFT = 1 PFA_RIGHT = 2 PFA_CENTER = 3 WM_NOTIFY = 78 SEL_EMPTY = 0 SEL_TEXT = 1 SEL_OBJECT = 2 SEL_MULTICHAR = 4 SEL_MULTIOBJECT = 8 OLEOP_DOVERB = 1 CF_RTF = "Rich Text Format" CF_RTFNOOBJS = "Rich Text Format Without Objects" CF_RETEXTOBJ = "RichEdit Text and Objects" # From wincon.h RIGHT_ALT_PRESSED = 1 # the right alt key is pressed. LEFT_ALT_PRESSED = 2 # the left alt key is pressed. RIGHT_CTRL_PRESSED = 4 # the right ctrl key is pressed. LEFT_CTRL_PRESSED = 8 # the left ctrl key is pressed. SHIFT_PRESSED = 16 # the shift key is pressed. NUMLOCK_ON = 32 # the numlock light is on. SCROLLLOCK_ON = 64 # the scrolllock light is on. CAPSLOCK_ON = 128 # the capslock light is on. ENHANCED_KEY = 256 # the key is enhanced. NLS_DBCSCHAR = 65536 # DBCS for JPN: SBCS/DBCS mode. NLS_ALPHANUMERIC = 0 # DBCS for JPN: Alphanumeric mode. NLS_KATAKANA = 131072 # DBCS for JPN: Katakana mode. NLS_HIRAGANA = 262144 # DBCS for JPN: Hiragana mode. NLS_ROMAN = 4194304 # DBCS for JPN: Roman/Noroman mode. NLS_IME_CONVERSION = 8388608 # DBCS for JPN: IME conversion. NLS_IME_DISABLE = 536870912 # DBCS for JPN: IME enable/disable. FROM_LEFT_1ST_BUTTON_PRESSED = 1 RIGHTMOST_BUTTON_PRESSED = 2 FROM_LEFT_2ND_BUTTON_PRESSED = 4 FROM_LEFT_3RD_BUTTON_PRESSED = 8 FROM_LEFT_4TH_BUTTON_PRESSED = 16 CTRL_C_EVENT = 0 CTRL_BREAK_EVENT = 1 CTRL_CLOSE_EVENT = 2 CTRL_LOGOFF_EVENT = 5 CTRL_SHUTDOWN_EVENT = 6 MOUSE_MOVED = 1 DOUBLE_CLICK = 2 MOUSE_WHEELED = 4 #property sheet window messages from prsht.h PSM_SETCURSEL = (WM_USER + 101) PSM_REMOVEPAGE = (WM_USER + 102) PSM_ADDPAGE = (WM_USER + 103) PSM_CHANGED = (WM_USER + 104) PSM_RESTARTWINDOWS = (WM_USER + 105) PSM_REBOOTSYSTEM = (WM_USER + 106) PSM_CANCELTOCLOSE = (WM_USER + 107) PSM_QUERYSIBLINGS = (WM_USER + 108) PSM_UNCHANGED = (WM_USER + 109) PSM_APPLY = (WM_USER + 110) PSM_SETTITLEA = (WM_USER + 111) PSM_SETTITLEW = (WM_USER + 120) PSM_SETWIZBUTTONS = (WM_USER + 112) PSM_PRESSBUTTON = (WM_USER + 113) PSM_SETCURSELID = (WM_USER + 114) PSM_SETFINISHTEXTA = (WM_USER + 115) PSM_SETFINISHTEXTW = (WM_USER + 121) PSM_GETTABCONTROL = (WM_USER + 116) PSM_ISDIALOGMESSAGE = (WM_USER + 117) PSM_GETCURRENTPAGEHWND = (WM_USER + 118) PSM_INSERTPAGE = (WM_USER + 119) PSM_SETHEADERTITLEA = (WM_USER + 125) PSM_SETHEADERTITLEW = (WM_USER + 126) PSM_SETHEADERSUBTITLEA = (WM_USER + 127) PSM_SETHEADERSUBTITLEW = (WM_USER + 128) PSM_HWNDTOINDEX = (WM_USER + 129) PSM_INDEXTOHWND = (WM_USER + 130) PSM_PAGETOINDEX = (WM_USER + 131) PSM_INDEXTOPAGE = (WM_USER + 132) PSM_IDTOINDEX = (WM_USER + 133) PSM_INDEXTOID = (WM_USER + 134) PSM_GETRESULT = (WM_USER + 135) PSM_RECALCPAGESIZES = (WM_USER + 136) # GetUserNameEx/GetComputerNameEx NameUnknown = 0 NameFullyQualifiedDN = 1 NameSamCompatible = 2 NameDisplay = 3 NameUniqueId = 6 NameCanonical = 7 NameUserPrincipal = 8 NameCanonicalEx = 9 NameServicePrincipal = 10 NameDnsDomain = 12 ComputerNameNetBIOS = 0 ComputerNameDnsHostname = 1 ComputerNameDnsDomain = 2 ComputerNameDnsFullyQualified = 3 ComputerNamePhysicalNetBIOS = 4 ComputerNamePhysicalDnsHostname = 5 ComputerNamePhysicalDnsDomain = 6 ComputerNamePhysicalDnsFullyQualified = 7 LWA_COLORKEY = 0x00000001 LWA_ALPHA = 0x00000002 ULW_COLORKEY = 0x00000001 ULW_ALPHA = 0x00000002 ULW_OPAQUE = 0x00000004 # WinDef.h TRUE = 1 FALSE = 0 MAX_PATH = 260 # WinGDI.h AC_SRC_OVER = 0 AC_SRC_ALPHA = 1 GRADIENT_FILL_RECT_H = 0 GRADIENT_FILL_RECT_V = 1 GRADIENT_FILL_TRIANGLE = 2 GRADIENT_FILL_OP_FLAG = 255 # Bizarrely missing from any platform header. Ref: # http://www.codeguru.com/forum/archive/index.php/t-426785.html MAPVK_VK_TO_VSC = 0 MAPVK_VSC_TO_VK = 1 MAPVK_VK_TO_CHAR = 2 MAPVK_VSC_TO_VK_EX = 3 USER_TIMER_MAXIMUM = 0x7fffffff pyglet-1.1.4/pyglet/window/win32/types.py0000600013464101346420000001417311317241561016510 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 * BOOL = c_int DWORD = c_uint32 BYTE = c_char LONG = c_long WORD = c_short HANDLE = c_void_p HWND = HANDLE HMONITOR = HANDLE HGLOBAL = HANDLE HDC = HANDLE HBITMAP = HANDLE LPARAM = c_long WNDPROC = WINFUNCTYPE(c_long, c_int, c_uint, c_int, c_int) TIMERPROC = WINFUNCTYPE(None, HWND, c_uint, POINTER(c_uint), c_uint) class RECT(Structure): _fields_ = [ ('left', c_long), ('top', c_long), ('right', c_long), ('bottom', c_long) ] class WNDCLASS(Structure): _fields_ = [ ('style', c_uint), ('lpfnWndProc', WNDPROC), ('cbClsExtra', c_int), ('cbWndExtra', c_int), ('hInstance', c_int), ('hIcon', c_int), ('hCursor', c_int), ('hbrBackground', c_int), ('lpszMenuName', c_char_p), ('lpszClassName', c_wchar_p) ] class POINT(Structure): _fields_ = [ ('x', c_long), ('y', c_long) ] class MSG(Structure): _fields_ = [ ('hwnd', c_int), ('message', c_uint), ('wParam', c_int), ('lParam', c_int), ('time', c_int), ('pt', POINT) ] class PIXELFORMATDESCRIPTOR(Structure): _fields_ = [ ('nSize', c_ushort), ('nVersion', c_ushort), ('dwFlags', c_ulong), ('iPixelType', c_ubyte), ('cColorBits', c_ubyte), ('cRedBits', c_ubyte), ('cRedShift', c_ubyte), ('cGreenBits', c_ubyte), ('cGreenShift', c_ubyte), ('cBlueBits', c_ubyte), ('cBlueShift', c_ubyte), ('cAlphaBits', c_ubyte), ('cAlphaShift', c_ubyte), ('cAccumBits', c_ubyte), ('cAccumRedBits', c_ubyte), ('cAccumGreenBits', c_ubyte), ('cAccumBlueBits', c_ubyte), ('cAccumAlphaBits', c_ubyte), ('cDepthBits', c_ubyte), ('cStencilBits', c_ubyte), ('cAuxBuffers', c_ubyte), ('iLayerType', c_ubyte), ('bReserved', c_ubyte), ('dwLayerMask', c_ulong), ('dwVisibleMask', c_ulong), ('dwDamageMask', c_ulong) ] class TRACKMOUSEEVENT(Structure): _fields_ = [ ('cbSize', DWORD), ('dwFlags', DWORD), ('hwndTrack', HWND), ('dwHoverTime', DWORD) ] class MINMAXINFO(Structure): _fields_ = [ ('ptReserved', POINT), ('ptMaxSize', POINT), ('ptMaxPosition', POINT), ('ptMinTrackSize', POINT), ('ptMaxTrackSize', POINT) ] class RGBQUAD(Structure): _fields_ = [ ('rgbBlue', BYTE), ('rgbGreen', BYTE), ('rgbRed', BYTE), ('rgbReserved', BYTE), ] class BITMAPINFOHEADER(Structure): _fields_ = [ ('biSize', DWORD), ('biWidth', LONG), ('biHeight', LONG), ('biPlanes', WORD), ('biBitCount', WORD), ('biCompression', DWORD), ('biSizeImage', DWORD), ('biXPelsPerMeter', LONG), ('biYPelsPerMeter', LONG), ('biClrUsed', DWORD), ('biClrImportant', DWORD), ] class BITMAPINFO(Structure): _fields_ = [ ('bmiHeader', BITMAPINFOHEADER), ('bmiColors', RGBQUAD * 1) ] class CIEXYZ(Structure): _fields_ = [ ('ciexyzX', DWORD), ('ciexyzY', DWORD), ('ciexyzZ', DWORD), ] class CIEXYZTRIPLE(Structure): _fields_ = [ ('ciexyzRed', CIEXYZ), ('ciexyzBlue', CIEXYZ), ('ciexyzGreen', CIEXYZ), ] class BITMAPV5HEADER(Structure): _fields_ = [ ('bV5Size', DWORD), ('bV5Width', LONG), ('bV5Height', LONG), ('bV5Planes', WORD), ('bV5BitCount', WORD), ('bV5Compression', DWORD), ('bV5SizeImage', DWORD), ('bV5XPelsPerMeter', LONG), ('bV5YPelsPerMeter', LONG), ('bV5ClrUsed', DWORD), ('bV5ClrImportant', DWORD), ('bV5RedMask', DWORD), ('bV5GreenMask', DWORD), ('bV5BlueMask', DWORD), ('bV5AlphaMask', DWORD), ('bV5CSType', DWORD), ('bV5Endpoints', CIEXYZTRIPLE), ('bV5GammaRed', DWORD), ('bV5GammaGreen', DWORD), ('bV5GammaBlue', DWORD), ('bV5Intent', DWORD), ('bV5ProfileData', DWORD), ('bV5ProfileSize', DWORD), ('bV5Reserved', DWORD), ] class ICONINFO(Structure): _fields_ = [ ('fIcon', BOOL), ('xHotspot', DWORD), ('yHotspot', DWORD), ('hbmMask', HBITMAP), ('hbmColor', HBITMAP) ] pyglet-1.1.4/pyglet/window/win32/__init__.py0000600013464101346420000012462211317241561017104 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 unicodedata import warnings import sys if sys.platform not in ('cygwin', 'win32'): raise ImportError('Not a win32 platform.') import pyglet from pyglet.window import Platform, Display, Screen, BaseWindow, \ WindowException, MouseCursor, DefaultMouseCursor, _PlatformEventHandler from pyglet.window import event from pyglet.event import EventDispatcher from pyglet.window import key from pyglet.window import mouse from pyglet.window.win32.constants import * from pyglet.window.win32.winkey import * from pyglet.window.win32.types import * from pyglet import gl from pyglet.gl import gl_info from pyglet.gl import glu_info from pyglet.gl import wgl from pyglet.gl import wglext_arb from pyglet.gl import wgl_info _debug_win32 = pyglet.options['debug_win32'] if _debug_win32: import traceback _GetLastError = windll.kernel32.GetLastError _SetLastError = windll.kernel32.SetLastError _FormatMessageA = windll.kernel32.FormatMessageA _log_win32 = open('debug_win32.log', 'w') def format_error(err): msg = create_string_buffer(256) _FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, c_void_p(), err, 0, msg, len(msg), c_void_p()) return msg.value class DebugLibrary(object): def __init__(self, lib): self.lib = lib def __getattr__(self, name): fn = getattr(self.lib, name) def f(*args): _SetLastError(0) result = fn(*args) err = _GetLastError() if err != 0: map(_log_win32.write, traceback.format_list(traceback.extract_stack()[:-1])) print >> _log_win32, format_error(err) return result return f else: DebugLibrary = lambda lib: lib _gdi32 = DebugLibrary(windll.gdi32) _kernel32 = DebugLibrary(windll.kernel32) _user32 = DebugLibrary(windll.user32) _user32.GetKeyState.restype = c_short _gdi32.CreateDIBitmap.argtypes = [HDC, POINTER(BITMAPINFOHEADER), DWORD, c_void_p, POINTER(BITMAPINFO), c_uint] # symbol,ctrl -> motion mapping _motion_map = { (key.UP, False): key.MOTION_UP, (key.RIGHT, False): key.MOTION_RIGHT, (key.DOWN, False): key.MOTION_DOWN, (key.LEFT, False): key.MOTION_LEFT, (key.RIGHT, True): key.MOTION_NEXT_WORD, (key.LEFT, True): key.MOTION_PREVIOUS_WORD, (key.HOME, False): key.MOTION_BEGINNING_OF_LINE, (key.END, False): key.MOTION_END_OF_LINE, (key.PAGEUP, False): key.MOTION_PREVIOUS_PAGE, (key.PAGEDOWN, False): key.MOTION_NEXT_PAGE, (key.HOME, True): key.MOTION_BEGINNING_OF_FILE, (key.END, True): key.MOTION_END_OF_FILE, (key.BACKSPACE, False): key.MOTION_BACKSPACE, (key.DELETE, False): key.MOTION_DELETE, } class Win32Exception(WindowException): pass class Win32Platform(Platform): _display = None def get_default_display(self): if not self._display: self._display = Win32Display() return self._display class Win32Display(Display): def get_screens(self): screens = [] def enum_proc(hMonitor, hdcMonitor, lprcMonitor, dwData): r = lprcMonitor.contents width = r.right - r.left height = r.bottom - r.top screens.append( Win32Screen(self, hMonitor, r.left, r.top, width, height)) return True enum_proc_type = WINFUNCTYPE(BOOL, HMONITOR, HDC, POINTER(RECT), LPARAM) enum_proc_ptr = enum_proc_type(enum_proc) _user32.EnumDisplayMonitors(NULL, NULL, enum_proc_ptr, 0) return screens class Win32Screen(Screen): def __init__(self, display, handle, x, y, width, height): super(Win32Screen, self).__init__(x, y, width, height) self.display = display self._handle = handle def get_matching_configs(self, template): # Determine which technique should be used for finding matching configs. # Use the builtin PIXELFORMATDESCRIPTOR if possible, otherwise resort # to the WGL_ARB_pixel_format extension. need_pixel_format_arb = False if template.sample_buffers or template.samples: need_pixel_format_arb = True if need_pixel_format_arb: # Need a GL context before we can query WGL extensions. dummy_window = None if not gl_info.have_context(): # Create a dummy context config = self.get_best_config() context = config.create_context(None) dummy_window = Win32Window(visible=False, context=context) try: # Check for required extensions if not wgl_info.have_extension('WGL_ARB_pixel_format'): return [] return self._get_arb_pixel_format_matching_configs(template) finally: if dummy_window: dummy_window.close() return self._get_pixel_format_descriptor_matching_configs(template) def _get_pixel_format_descriptor_matching_configs(self, template): '''Get matching configs using standard PIXELFORMATDESCRIPTOR technique.''' pfd = PIXELFORMATDESCRIPTOR() pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR) pfd.nVersion = 1 pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL if template.double_buffer: pfd.dwFlags |= PFD_DOUBLEBUFFER else: pfd.dwFlags |= PFD_DOUBLEBUFFER_DONTCARE if template.stereo: pfd.dwFlags |= PFD_STEREO else: pfd.dwFlags |= PFD_STEREO_DONTCARE '''Not supported in pyglet API if attributes.get('swap_copy', False): pfd.dwFlags |= PFD_SWAP_COPY if attributes.get('swap_exchange', False): pfd.dwFlags |= PFD_SWAP_EXCHANGE ''' if not template.depth_size: pfd.dwFlags |= PFD_DEPTH_DONTCARE pfd.iPixelType = PFD_TYPE_RGBA pfd.cColorBits = template.buffer_size or 0 pfd.cRedBits = template.red_size or 0 pfd.cGreenBits = template.green_size or 0 pfd.cBlueBits = template.blue_size or 0 pfd.cAlphaBits = template.alpha_size or 0 pfd.cAccumRedBits = template.accum_red_size or 0 pfd.cAccumGreenBits = template.accum_green_size or 0 pfd.cAccumBlueBits = template.accum_blue_size or 0 pfd.cAccumAlphaBits = template.accum_alpha_size or 0 pfd.cDepthBits = template.depth_size or 0 pfd.cStencilBits = template.stencil_size or 0 pfd.cAuxBuffers = template.aux_buffers or 0 # No window created yet, so lets create a config based on # the DC of the entire screen. hdc = _user32.GetDC(0) pf = _gdi32.ChoosePixelFormat(hdc, byref(pfd)) if pf: return [Win32Config(self, hdc, pf)] else: return [] def _get_arb_pixel_format_matching_configs(self, template): '''Get configs using the WGL_ARB_pixel_format extension. This method assumes a (dummy) GL context is already created.''' # Check for required extensions if template.sample_buffers or template.samples: if not gl_info.have_extension('GL_ARB_multisample'): return [] # Construct array of attributes attrs = [] for name, value in template.get_gl_attributes(): attr = Win32ConfigARB.attribute_ids.get(name, None) if attr and value is not None: attrs.extend([attr, int(value)]) attrs.append(0) attrs = (c_int * len(attrs))(*attrs) hdc = _user32.GetDC(0) pformats = (c_int * 16)() nformats = c_uint(16) wglext_arb.wglChoosePixelFormatARB(hdc, attrs, None, nformats, pformats, nformats) formats = [Win32ConfigARB(self, hdc, pf) \ for pf in pformats[:nformats.value]] return formats class Win32Config(gl.Config): def __init__(self, screen, hdc, pf): self.screen = screen self._hdc = hdc self._pf = pf self._pfd = PIXELFORMATDESCRIPTOR() _gdi32.DescribePixelFormat(self._hdc, self._pf, sizeof(PIXELFORMATDESCRIPTOR), byref(self._pfd)) self.double_buffer = bool(self._pfd.dwFlags & PFD_DOUBLEBUFFER) self.sample_buffers = 0 self.samples = 0 self.stereo = bool(self._pfd.dwFlags & PFD_STEREO) self.buffer_size = self._pfd.cColorBits self.red_size = self._pfd.cRedBits self.green_size = self._pfd.cGreenBits self.blue_size = self._pfd.cBlueBits self.alpha_size = self._pfd.cAlphaBits self.accum_red_size = self._pfd.cAccumRedBits self.accum_green_size = self._pfd.cAccumGreenBits self.accum_blue_size = self._pfd.cAccumBlueBits self.accum_alpha_size = self._pfd.cAccumAlphaBits self.depth_size = self._pfd.cDepthBits self.stencil_size = self._pfd.cStencilBits self.aux_buffers = self._pfd.cAuxBuffers def create_context(self, share): # The context can't be created until we have the DC of the # window. It's _possible_ that this could screw things up # (for example, destroying the share context before the new # window is created), but these are unlikely and not in the # ordinary workflow. return Win32Context(self, share) def is_complete(self): return True class Win32ConfigARB(Win32Config): attribute_ids = { 'double_buffer': wglext_arb.WGL_DOUBLE_BUFFER_ARB, 'stereo': wglext_arb.WGL_STEREO_ARB, 'buffer_size': wglext_arb.WGL_COLOR_BITS_ARB, 'aux_buffers': wglext_arb.WGL_AUX_BUFFERS_ARB, 'sample_buffers': wglext_arb.WGL_SAMPLE_BUFFERS_ARB, 'samples': wglext_arb.WGL_SAMPLES_ARB, 'red_size': wglext_arb.WGL_RED_BITS_ARB, 'green_size': wglext_arb.WGL_GREEN_BITS_ARB, 'blue_size': wglext_arb.WGL_BLUE_BITS_ARB, 'alpha_size': wglext_arb.WGL_ALPHA_BITS_ARB, 'depth_size': wglext_arb.WGL_DEPTH_BITS_ARB, 'stencil_size': wglext_arb.WGL_STENCIL_BITS_ARB, 'accum_red_size': wglext_arb.WGL_ACCUM_RED_BITS_ARB, 'accum_green_size': wglext_arb.WGL_ACCUM_GREEN_BITS_ARB, 'accum_blue_size': wglext_arb.WGL_ACCUM_BLUE_BITS_ARB, 'accum_alpha_size': wglext_arb.WGL_ACCUM_ALPHA_BITS_ARB, } def __init__(self, screen, hdc, pf): self.screen = screen self._hdc = hdc self._pf = pf names, attrs = map(None, *self.attribute_ids.items()) attrs = (c_int * len(attrs))(*attrs) values = (c_int * len(attrs))() result = wglext_arb.wglGetPixelFormatAttribivARB(hdc, pf, 0, len(attrs), attrs, values) for name, value in zip(names, values): setattr(self, name, value) def create_context(self, share): return Win32ContextARB(self, share) class Win32Context(gl.Context): _context = None def __init__(self, config, share): super(Win32Context, self).__init__(share) self.config = config self._share = share def _set_window(self, window): assert self._context is None _gdi32.SetPixelFormat( window._dc, self.config._pf, byref(self.config._pfd)) self._context = wgl.wglCreateContext(window._dc) if self._share: assert self._share._context is not None if not wgl.wglShareLists(self._share._context, self._context): raise gl.ContextException('Unable to share contexts') def destroy(self): super(Win32Context, self).destroy() wgl.wglDeleteContext(self._context) class Win32ContextARB(Win32Context): def _set_window(self, window): assert self._context is None _gdi32.SetPixelFormat(window._dc, self.config._pf, None) self._context = wgl.wglCreateContext(window._dc) if self._share: assert self._share._context is not None if not wgl.wglShareLists(self._share._context, self._context): raise gl.ContextException('Unable to share contexts') class Win32MouseCursor(MouseCursor): drawable = False def __init__(self, cursor): self.cursor = cursor # This is global state, we have to be careful not to set the same state twice, # which will throw off the ShowCursor counter. _win32_cursor_visible = True Win32EventHandler = _PlatformEventHandler class Win32Window(BaseWindow): _window_class = None _hwnd = None _dc = None _wgl_context = None _tracking = False _hidden = False _has_focus = False _exclusive_keyboard = False _exclusive_keyboard_focus = True _exclusive_mouse = False _exclusive_mouse_focus = True _exclusive_mouse_screen = None _exclusive_mouse_client = None _mouse_platform_visible = True _ws_style = 0 _ex_ws_style = 0 _minimum_size = None _maximum_size = None def __init__(self, *args, **kwargs): # Bind event handlers self._event_handlers = {} for func_name in self._platform_event_names: if not hasattr(self, func_name): continue func = getattr(self, func_name) for message in func._platform_event_data: self._event_handlers[message] = func super(Win32Window, self).__init__(*args, **kwargs) def _recreate(self, changes): if 'context' in changes: self._wgl_context = None self._create() def _create(self): # Ensure style is set before determining width/height. if self._fullscreen: self._ws_style = WS_POPUP self._ex_ws_style = 0 # WS_EX_TOPMOST else: styles = { self.WINDOW_STYLE_DEFAULT: (WS_OVERLAPPEDWINDOW, 0), self.WINDOW_STYLE_DIALOG: (WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU, WS_EX_DLGMODALFRAME), self.WINDOW_STYLE_TOOL: (WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU, WS_EX_TOOLWINDOW), self.WINDOW_STYLE_BORDERLESS: (WS_POPUP, 0), } self._ws_style, self._ex_ws_style = styles[self._style] if self._resizable and not self._fullscreen: self._ws_style |= WS_THICKFRAME else: self._ws_style &= ~(WS_THICKFRAME|WS_MAXIMIZEBOX) width, height = self._client_to_window_size(self._width, self._height) if not self._window_class: module = _kernel32.GetModuleHandleW(None) white = _gdi32.GetStockObject(WHITE_BRUSH) self._window_class = WNDCLASS() self._window_class.lpszClassName = u'GenericAppClass%d' % id(self) self._window_class.lpfnWndProc = WNDPROC(self._wnd_proc) self._window_class.style = CS_VREDRAW | CS_HREDRAW self._window_class.hInstance = 0 self._window_class.hIcon = _user32.LoadIconW(module, 1) self._window_class.hbrBackground = white self._window_class.lpszMenuName = None self._window_class.cbClsExtra = 0 self._window_class.cbWndExtra = 0 _user32.RegisterClassW(byref(self._window_class)) if not self._hwnd: self._hwnd = _user32.CreateWindowExW( self._ex_ws_style, self._window_class.lpszClassName, u'', self._ws_style, CW_USEDEFAULT, CW_USEDEFAULT, width, height, 0, 0, self._window_class.hInstance, 0) self._dc = _user32.GetDC(self._hwnd) else: # Window already exists, update it with new style # We need to hide window here, otherwise Windows forgets # to redraw the whole screen after leaving fullscreen. _user32.ShowWindow(self._hwnd, SW_HIDE) _user32.SetWindowLongW(self._hwnd, GWL_STYLE, self._ws_style) _user32.SetWindowLongW(self._hwnd, GWL_EXSTYLE, self._ex_ws_style) if self._fullscreen: hwnd_after = HWND_TOPMOST else: hwnd_after = HWND_NOTOPMOST # Position and size window if self._fullscreen: _user32.SetWindowPos(self._hwnd, hwnd_after, self._screen.x, self._screen.y, width, height, SWP_FRAMECHANGED) elif False: # TODO location not in pyglet API x, y = self._client_to_window_pos(*factory.get_location()) _user32.SetWindowPos(self._hwnd, hwnd_after, x, y, width, height, SWP_FRAMECHANGED) else: _user32.SetWindowPos(self._hwnd, hwnd_after, 0, 0, width, height, SWP_NOMOVE | SWP_FRAMECHANGED) # Context must be created after window is created. if not self._wgl_context: self.context._set_window(self) self._wgl_context = self.context._context self.set_caption(self._caption) self.switch_to() self.set_vsync(self._vsync) if self._visible: self.set_visible() self.dispatch_event('on_expose') def close(self): super(Win32Window, self).close() if not self._hwnd: return _user32.DestroyWindow(self._hwnd) _user32.UnregisterClassW(self._window_class.lpszClassName, 0) self.set_mouse_platform_visible(True) self._hwnd = None self._dc = None self._wgl_context = None def _get_vsync(self): if wgl_info.have_extension('WGL_EXT_swap_control'): return bool(wglext_arb.wglGetSwapIntervalEXT()) vsync = property(_get_vsync) # overrides BaseWindow property def set_vsync(self, vsync): if pyglet.options['vsync'] is not None: vsync = pyglet.options['vsync'] if wgl_info.have_extension('WGL_EXT_swap_control'): wglext_arb.wglSwapIntervalEXT(int(vsync)) else: warnings.warn('Could not set vsync; unsupported extension.') def switch_to(self): wgl.wglMakeCurrent(self._dc, self._wgl_context) self._context.set_current() gl_info.set_active_context() glu_info.set_active_context() def flip(self): self.draw_mouse_cursor() wgl.wglSwapLayerBuffers(self._dc, wgl.WGL_SWAP_MAIN_PLANE) def set_location(self, x, y): x, y = self._client_to_window_pos(x, y) _user32.SetWindowPos(self._hwnd, 0, x, y, 0, 0, (SWP_NOZORDER | SWP_NOSIZE | SWP_NOOWNERZORDER)) def get_location(self): rect = RECT() _user32.GetClientRect(self._hwnd, byref(rect)) _user32.ClientToScreen(self._hwnd, byref(rect)) return rect.left, rect.top def set_size(self, width, height): if self._fullscreen: raise WindowException('Cannot set size of fullscreen window.') width, height = self._client_to_window_size(width, height) _user32.SetWindowPos(self._hwnd, 0, 0, 0, width, height, (SWP_NOZORDER | SWP_NOMOVE | SWP_NOOWNERZORDER)) def get_size(self): rect = RECT() _user32.GetClientRect(self._hwnd, byref(rect)) return rect.right - rect.left, rect.bottom - rect.top def set_minimum_size(self, width, height): self._minimum_size = width, height def set_maximum_size(self, width, height): self._maximum_size = width, height def activate(self): _user32.SetForegroundWindow(self._hwnd) def set_visible(self, visible=True): if visible: if self._fullscreen: _user32.SetWindowPos(self._hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW) else: _user32.ShowWindow(self._hwnd, SW_SHOW) self.dispatch_event('on_show') self.activate() else: _user32.ShowWindow(self._hwnd, SW_HIDE) self.dispatch_event('on_hide') self._visible = visible self.set_mouse_platform_visible() def minimize(self): _user32.ShowWindow(self._hwnd, SW_MINIMIZE) def maximize(self): _user32.ShowWindow(self._hwnd, SW_MAXIMIZE) def set_caption(self, caption): self._caption = caption _user32.SetWindowTextW(self._hwnd, c_wchar_p(caption)) def set_mouse_platform_visible(self, platform_visible=None): if platform_visible is None: platform_visible = (self._mouse_visible and not self._exclusive_mouse and not self._mouse_cursor.drawable) or \ (not self._mouse_in_window or not self._has_focus) if platform_visible and not self._mouse_cursor.drawable: if isinstance(self._mouse_cursor, Win32MouseCursor): cursor = self._mouse_cursor.cursor else: cursor = _user32.LoadCursorW(None, IDC_ARROW) _user32.SetClassLongW(self._hwnd, GCL_HCURSOR, cursor) _user32.SetCursor(cursor) if platform_visible == self._mouse_platform_visible: return # Avoid calling ShowCursor with the current visibility (which would # push the counter too far away from zero). global _win32_cursor_visible if _win32_cursor_visible != platform_visible: _user32.ShowCursor(platform_visible) _win32_cursor_visible = platform_visible self._mouse_platform_visible = platform_visible def _reset_exclusive_mouse_screen(self): '''Recalculate screen coords of mouse warp point for exclusive mouse.''' p = POINT() rect = RECT() _user32.GetClientRect(self._hwnd, byref(rect)) _user32.MapWindowPoints(self._hwnd, HWND_DESKTOP, byref(rect), 2) p.x = (rect.left + rect.right) / 2 p.y = (rect.top + rect.bottom) / 2 # This is the point the mouse will be kept at while in exclusive # mode. self._exclusive_mouse_screen = p.x, p.y self._exclusive_mouse_client = p.x - rect.left, p.y - rect.top def set_exclusive_mouse(self, exclusive=True): if self._exclusive_mouse == exclusive and \ self._exclusive_mouse_focus == self._has_focus: return if exclusive and self._has_focus: # Move mouse to the center of the window. self._reset_exclusive_mouse_screen() _user32.SetCursorPos(*self._exclusive_mouse_screen) # Clip to client area, to prevent large mouse movements taking # it outside the client area. rect = RECT() _user32.GetClientRect(self._hwnd, byref(rect)) _user32.MapWindowPoints(self._hwnd, HWND_DESKTOP, byref(rect), 2) _user32.ClipCursor(byref(rect)) else: # Release clip _user32.ClipCursor(c_void_p()) self._exclusive_mouse = exclusive self._exclusive_mouse_focus = self._has_focus self.set_mouse_platform_visible() def set_exclusive_keyboard(self, exclusive=True): if self._exclusive_keyboard == exclusive and \ self._exclusive_keyboard_focus == self._has_focus: return if exclusive and self._has_focus: _user32.RegisterHotKey(self._hwnd, 0, WIN32_MOD_ALT, VK_TAB) else: _user32.UnregisterHotKey(self._hwnd, 0) self._exclusive_keyboard = exclusive self._exclusive_keyboard_focus = self._has_focus def get_system_mouse_cursor(self, name): if name == self.CURSOR_DEFAULT: return DefaultMouseCursor() names = { self.CURSOR_CROSSHAIR: IDC_CROSS, self.CURSOR_HAND: IDC_HAND, self.CURSOR_HELP: IDC_HELP, self.CURSOR_NO: IDC_NO, self.CURSOR_SIZE: IDC_SIZEALL, self.CURSOR_SIZE_UP: IDC_SIZENS, self.CURSOR_SIZE_UP_RIGHT: IDC_SIZENESW, self.CURSOR_SIZE_RIGHT: IDC_SIZEWE, self.CURSOR_SIZE_DOWN_RIGHT: IDC_SIZENWSE, self.CURSOR_SIZE_DOWN: IDC_SIZENS, self.CURSOR_SIZE_DOWN_LEFT: IDC_SIZENESW, self.CURSOR_SIZE_LEFT: IDC_SIZEWE, self.CURSOR_SIZE_UP_LEFT: IDC_SIZENWSE, self.CURSOR_SIZE_UP_DOWN: IDC_SIZENS, self.CURSOR_SIZE_LEFT_RIGHT: IDC_SIZEWE, self.CURSOR_TEXT: IDC_IBEAM, self.CURSOR_WAIT: IDC_WAIT, self.CURSOR_WAIT_ARROW: IDC_APPSTARTING, } if name not in names: raise Win32Exception('Unknown cursor name "%s"' % name) cursor = _user32.LoadCursorW(None, names[name]) return Win32MouseCursor(cursor) def set_icon(self, *images): # XXX Undocumented AFAICT, but XP seems happy to resize an image # of any size, so no scaling necessary. def best_image(width, height): # A heuristic for finding closest sized image to required size. image = images[0] for img in images: if img.width == width and img.height == height: # Exact match always used return img elif img.width >= width and \ img.width * img.height > image.width * image.height: # At least wide enough, and largest area image = img return image def get_icon(image): # Alpha-blended icon: see http://support.microsoft.com/kb/318876 format = 'BGRA' pitch = len(format) * image.width header = BITMAPV5HEADER() header.bV5Size = sizeof(header) header.bV5Width = image.width header.bV5Height = image.height header.bV5Planes = 1 header.bV5BitCount = 32 header.bV5Compression = BI_BITFIELDS header.bV5RedMask = 0x00ff0000 header.bV5GreenMask = 0x0000ff00 header.bV5BlueMask = 0x000000ff header.bV5AlphaMask = 0xff000000 hdc = _user32.GetDC(None) dataptr = c_void_p() bitmap = _gdi32.CreateDIBSection(hdc, byref(header), DIB_RGB_COLORS, byref(dataptr), None, 0) _user32.ReleaseDC(None, hdc) data = image.get_data(format, pitch) memmove(dataptr, data, len(data)) mask = _gdi32.CreateBitmap(image.width, image.height, 1, 1, None) iconinfo = ICONINFO() iconinfo.fIcon = True iconinfo.hbmMask = mask iconinfo.hbmColor = bitmap icon = _user32.CreateIconIndirect(byref(iconinfo)) _gdi32.DeleteObject(mask) _gdi32.DeleteObject(bitmap) return icon # Set large icon image = best_image(_user32.GetSystemMetrics(SM_CXICON), _user32.GetSystemMetrics(SM_CYICON)) icon = get_icon(image) _user32.SetClassLongW(self._hwnd, GCL_HICON, icon) # Set small icon image = best_image(_user32.GetSystemMetrics(SM_CXSMICON), _user32.GetSystemMetrics(SM_CYSMICON)) icon = get_icon(image) _user32.SetClassLongW(self._hwnd, GCL_HICONSM, icon) # Private util def _client_to_window_size(self, width, height): rect = RECT() rect.left = 0 rect.top = 0 rect.right = width rect.bottom = height _user32.AdjustWindowRectEx(byref(rect), self._ws_style, False, self._ex_ws_style) return rect.right - rect.left, rect.bottom - rect.top def _client_to_window_pos(self, x, y): rect = RECT() rect.left = x rect.top = y _user32.AdjustWindowRectEx(byref(rect), self._ws_style, False, self._ex_ws_style) return rect.left, rect.top # Event dispatching def dispatch_events(self): self._allow_dispatch_event = True self.dispatch_pending_events() msg = MSG() while _user32.PeekMessageW(byref(msg), 0, 0, 0, PM_REMOVE): _user32.TranslateMessage(byref(msg)) _user32.DispatchMessageW(byref(msg)) self._allow_dispatch_event = False def dispatch_pending_events(self): while self._event_queue: event = self._event_queue.pop(0) if type(event[0]) is str: # pyglet event EventDispatcher.dispatch_event(self, *event) else: # win32 event event[0](*event[1:]) def _wnd_proc(self, hwnd, msg, wParam, lParam): event_handler = self._event_handlers.get(msg, None) result = 0 if event_handler: if self._allow_dispatch_event or not self._enable_event_queue: result = event_handler(msg, wParam, lParam) else: self._event_queue.append((event_handler, msg, wParam, lParam)) result = 0 if not result and msg != WM_CLOSE: result = _user32.DefWindowProcW(c_int(hwnd), c_int(msg), c_int(wParam), c_int(lParam)) return result # Event handlers def _get_modifiers(self, key_lParam=0): modifiers = 0 if _user32.GetKeyState(VK_SHIFT) & 0xff00: modifiers |= key.MOD_SHIFT if _user32.GetKeyState(VK_CONTROL) & 0xff00: modifiers |= key.MOD_CTRL if _user32.GetKeyState(VK_LWIN) & 0xff00: modifiers |= key.MOD_WINDOWS if _user32.GetKeyState(VK_CAPITAL) & 0x00ff: # toggle modifiers |= key.MOD_CAPSLOCK if _user32.GetKeyState(VK_NUMLOCK) & 0x00ff: # toggle modifiers |= key.MOD_NUMLOCK if _user32.GetKeyState(VK_SCROLL) & 0x00ff: # toggle modifiers |= key.MOD_SCROLLLOCK if key_lParam: if key_lParam & (1 << 29): modifiers |= key.MOD_ALT elif _user32.GetKeyState(VK_MENU) < 0: modifiers |= key.MOD_ALT return modifiers @staticmethod def _get_location(lParam): x = c_int16(lParam & 0xffff).value y = c_int16(lParam >> 16).value return x, y @Win32EventHandler(WM_KEYDOWN) @Win32EventHandler(WM_KEYUP) @Win32EventHandler(WM_SYSKEYDOWN) @Win32EventHandler(WM_SYSKEYUP) def _event_key(self, msg, wParam, lParam): repeat = False if lParam & (1 << 30): if msg not in (WM_KEYUP, WM_SYSKEYUP): repeat = True ev = 'on_key_release' else: ev = 'on_key_press' symbol = keymap.get(wParam, None) if symbol is None: ch = _user32.MapVirtualKeyW(wParam, MAPVK_VK_TO_CHAR) symbol = chmap.get(ch) if symbol is None: symbol = key.user_key(wParam) elif symbol == key.LCTRL and lParam & (1 << 24): symbol = key.RCTRL elif symbol == key.LALT and lParam & (1 << 24): symbol = key.RALT elif symbol == key.LSHIFT: pass # TODO: some magic with getstate to find out if it's the # right or left shift key. modifiers = self._get_modifiers(lParam) if not repeat: self.dispatch_event(ev, symbol, modifiers) ctrl = modifiers & key.MOD_CTRL != 0 if (symbol, ctrl) in _motion_map and msg not in (WM_KEYUP, WM_SYSKEYUP): motion = _motion_map[symbol, ctrl] if modifiers & key.MOD_SHIFT: self.dispatch_event('on_text_motion_select', motion) else: self.dispatch_event('on_text_motion', motion) # Send on to DefWindowProc if not exclusive. if self._exclusive_keyboard: return 0 else: return None @Win32EventHandler(WM_CHAR) def _event_char(self, msg, wParam, lParam): text = unichr(wParam) if unicodedata.category(text) != 'Cc' or text == '\r': self.dispatch_event('on_text', text) return 0 @Win32EventHandler(WM_MOUSEMOVE) def _event_mousemove(self, msg, wParam, lParam): x, y = self._get_location(lParam) if (x, y) == self._exclusive_mouse_client: # Ignore the event caused by SetCursorPos self._mouse_x = x self._mouse_y = y return 0 y = self.height - y if self._exclusive_mouse and self._has_focus: # Reset mouse position (so we don't hit the edge of the screen). _user32.SetCursorPos(*self._exclusive_mouse_screen) dx = x - self._mouse_x dy = y - self._mouse_y if not self._tracking: # There is no WM_MOUSEENTER message (!), so fake it from the # first WM_MOUSEMOVE event after leaving. Use self._tracking # to determine when to recreate the tracking structure after # re-entering (to track the next WM_MOUSELEAVE). self._mouse_in_window = True self.set_mouse_platform_visible() self.dispatch_event('on_mouse_enter', x, y) self._tracking = True track = TRACKMOUSEEVENT() track.cbSize = sizeof(track) track.dwFlags = TME_LEAVE track.hwndTrack = self._hwnd _user32.TrackMouseEvent(byref(track)) # Don't generate motion/drag events when mouse hasn't moved. (Issue # 305) if self._mouse_x == x and self._mouse_y == y: return 0 self._mouse_x = x self._mouse_y = y buttons = 0 if wParam & MK_LBUTTON: buttons |= mouse.LEFT if wParam & MK_MBUTTON: buttons |= mouse.MIDDLE if wParam & MK_RBUTTON: buttons |= mouse.RIGHT if buttons: # Drag event modifiers = self._get_modifiers() self.dispatch_event('on_mouse_drag', x, y, dx, dy, buttons, modifiers) else: # Motion event self.dispatch_event('on_mouse_motion', x, y, dx, dy) return 0 @Win32EventHandler(WM_MOUSELEAVE) def _event_mouseleave(self, msg, wParam, lParam): point = POINT() _user32.GetCursorPos(byref(point)) _user32.ScreenToClient(self._hwnd, byref(point)) x = point.x y = self.height - point.y self._tracking = False self._mouse_in_window = False self.set_mouse_platform_visible() self.dispatch_event('on_mouse_leave', x, y) return 0 def _event_mousebutton(self, ev, button, lParam): if ev == 'on_mouse_press': _user32.SetCapture(self._hwnd) else: _user32.ReleaseCapture() x, y = self._get_location(lParam) y = self.height - y self.dispatch_event(ev, x, y, button, self._get_modifiers()) return 0 @Win32EventHandler(WM_LBUTTONDOWN) def _event_lbuttondown(self, msg, wParam, lParam): return self._event_mousebutton( 'on_mouse_press', mouse.LEFT, lParam) @Win32EventHandler(WM_LBUTTONUP) def _event_lbuttonup(self, msg, wParam, lParam): return self._event_mousebutton( 'on_mouse_release', mouse.LEFT, lParam) @Win32EventHandler(WM_MBUTTONDOWN) def _event_mbuttondown(self, msg, wParam, lParam): return self._event_mousebutton( 'on_mouse_press', mouse.MIDDLE, lParam) @Win32EventHandler(WM_MBUTTONUP) def _event_mbuttonup(self, msg, wParam, lParam): return self._event_mousebutton( 'on_mouse_release', mouse.MIDDLE, lParam) @Win32EventHandler(WM_RBUTTONDOWN) def _event_rbuttondown(self, msg, wParam, lParam): return self._event_mousebutton( 'on_mouse_press', mouse.RIGHT, lParam) @Win32EventHandler(WM_RBUTTONUP) def _event_rbuttonup(self, msg, wParam, lParam): return self._event_mousebutton( 'on_mouse_release', mouse.RIGHT, lParam) @Win32EventHandler(WM_MOUSEWHEEL) def _event_mousewheel(self, msg, wParam, lParam): delta = c_short(wParam >> 16).value self.dispatch_event('on_mouse_scroll', self._mouse_x, self._mouse_y, 0, delta / WHEEL_DELTA) return 0 @Win32EventHandler(WM_CLOSE) def _event_close(self, msg, wParam, lParam): self.dispatch_event('on_close') return 0 def _immediate_redraw(self): '''If using EventLoop, redraw and flip the window immediately. Assumes window has GL context. ''' from pyglet import app if app.event_loop is not None: self.dispatch_event('on_draw') self.flip() @Win32EventHandler(WM_PAINT) def _event_paint(self, msg, wParam, lParam): self.dispatch_event('on_expose') self.switch_to() self._immediate_redraw() # Validating the window using ValidateRect or ValidateRgn # doesn't clear the paint message when more than one window # is open [why?]; defer to DefWindowProc instead. return None @Win32EventHandler(WM_SIZING) def _event_sizing(self, msg, wParam, lParam): rect = cast(lParam, POINTER(RECT)).contents width, height = self.get_size() self.switch_to() self.dispatch_event('on_resize', width, height) from pyglet import app if app.event_loop is not None: app.event_loop._idle_chance() return 1 @Win32EventHandler(WM_SIZE) def _event_size(self, msg, wParam, lParam): if not self._dc: # Ignore window creation size event (appears for fullscreen # only) -- we haven't got DC or HWND yet. return None if wParam == SIZE_MINIMIZED: # Minimized, not resized. self._hidden = True self.dispatch_event('on_hide') return 0 if self._hidden: # Restored self._hidden = False self.dispatch_event('on_show') w, h = self._get_location(lParam) self._reset_exclusive_mouse_screen() self.switch_to() self.dispatch_event('on_resize', w, h) self._immediate_redraw() return 0 @Win32EventHandler(WM_SYSCOMMAND) def _event_syscommand(self, msg, wParam, lParam): if wParam & 0xfff0 in (SC_MOVE, SC_SIZE): # Should be in WM_ENTERSIZEMOVE, but we never get that message. from pyglet import app if app.event_loop is not None: app.event_loop._allow_polling = False app.event_loop._idle_chance() return 0 @Win32EventHandler(WM_MOVE) def _event_move(self, msg, wParam, lParam): x, y = self._get_location(lParam) self._reset_exclusive_mouse_screen() self.dispatch_event('on_move', x, y) return 0 @Win32EventHandler(WM_EXITSIZEMOVE) def _event_entersizemove(self, msg, wParam, lParam): from pyglet import app if app.event_loop is not None: app.event_loop._allow_polling = True return 0 ''' # Alternative to using WM_SETFOCUS and WM_KILLFOCUS. Which # is better? @Win32EventHandler(WM_ACTIVATE) def _event_activate(self, msg, wParam, lParam): if wParam & 0xffff == WA_INACTIVE: self.dispatch_event('on_deactivate') else: self.dispatch_event('on_activate') _user32.SetFocus(self._hwnd) return 0 ''' @Win32EventHandler(WM_SETFOCUS) def _event_setfocus(self, msg, wParam, lParam): self.dispatch_event('on_activate') self._has_focus = True self.set_exclusive_keyboard(self._exclusive_keyboard) self.set_exclusive_mouse(self._exclusive_mouse) return 0 @Win32EventHandler(WM_KILLFOCUS) def _event_killfocus(self, msg, wParam, lParam): self.dispatch_event('on_deactivate') self._has_focus = False self.set_exclusive_keyboard(self._exclusive_keyboard) self.set_exclusive_mouse(self._exclusive_mouse) return 0 @Win32EventHandler(WM_GETMINMAXINFO) def _event_getminmaxinfo(self, msg, wParam, lParam): info = MINMAXINFO.from_address(lParam) if self._minimum_size: info.ptMinTrackSize.x, info.ptMinTrackSize.y = \ self._client_to_window_size(*self._minimum_size) if self._maximum_size: info.ptMaxTrackSize.x, info.ptMaxTrackSize.y = \ self._client_to_window_size(*self._maximum_size) return 0 @Win32EventHandler(WM_ERASEBKGND) def _event_erasebkgnd(self, msg, wParam, lParam): # Prevent flicker during resize. return 1 pyglet-1.1.4/pyglet/window/win32/winkey.py0000600013464101346420000001415611317241561016653 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 pyglet.window import key from pyglet.window.win32.constants import * keymap = { ord('A'): key.A, ord('B'): key.B, ord('C'): key.C, ord('D'): key.D, ord('E'): key.E, ord('F'): key.F, ord('G'): key.G, ord('H'): key.H, ord('I'): key.I, ord('J'): key.J, ord('K'): key.K, ord('L'): key.L, ord('M'): key.M, ord('N'): key.N, ord('O'): key.O, ord('P'): key.P, ord('Q'): key.Q, ord('R'): key.R, ord('S'): key.S, ord('T'): key.T, ord('U'): key.U, ord('V'): key.V, ord('W'): key.W, ord('X'): key.X, ord('Y'): key.Y, ord('Z'): key.Z, ord('0'): key._0, ord('1'): key._1, ord('2'): key._2, ord('3'): key._3, ord('4'): key._4, ord('5'): key._5, ord('6'): key._6, ord('7'): key._7, ord('8'): key._8, ord('9'): key._9, ord('\b'): key.BACKSPACE, # By experiment: 0x14: key.CAPSLOCK, 0x5d: key.MENU, # VK_LBUTTON: , # VK_RBUTTON: , VK_CANCEL: key.CANCEL, # VK_MBUTTON: , # VK_BACK: , VK_TAB: key.TAB, # VK_CLEAR: , VK_RETURN: key.RETURN, VK_SHIFT: key.LSHIFT, VK_CONTROL: key.LCTRL, VK_MENU: key.LALT, VK_PAUSE: key.PAUSE, # VK_CAPITAL: , # VK_KANA: , # VK_HANGEUL: , # VK_HANGUL: , # VK_JUNJA: , # VK_FINAL: , # VK_HANJA: , # VK_KANJI: , VK_ESCAPE: key.ESCAPE, # VK_CONVERT: , # VK_NONCONVERT: , # VK_ACCEPT: , # VK_MODECHANGE: , VK_SPACE: key.SPACE, VK_PRIOR: key.PAGEUP, VK_NEXT: key.PAGEDOWN, VK_END: key.END, VK_HOME: key.HOME, VK_LEFT: key.LEFT, VK_UP: key.UP, VK_RIGHT: key.RIGHT, VK_DOWN: key.DOWN, # VK_SELECT: , VK_PRINT: key.PRINT, # VK_EXECUTE: , # VK_SNAPSHOT: , VK_INSERT: key.INSERT, VK_DELETE: key.DELETE, VK_HELP: key.HELP, VK_LWIN: key.LWINDOWS, VK_RWIN: key.RWINDOWS, # VK_APPS: , VK_NUMPAD0: key.NUM_0, VK_NUMPAD1: key.NUM_1, VK_NUMPAD2: key.NUM_2, VK_NUMPAD3: key.NUM_3, VK_NUMPAD4: key.NUM_4, VK_NUMPAD5: key.NUM_5, VK_NUMPAD6: key.NUM_6, VK_NUMPAD7: key.NUM_7, VK_NUMPAD8: key.NUM_8, VK_NUMPAD9: key.NUM_9, VK_MULTIPLY: key.NUM_MULTIPLY, VK_ADD: key.NUM_ADD, # VK_SEPARATOR: , VK_SUBTRACT: key.NUM_SUBTRACT, VK_DECIMAL: key.NUM_DECIMAL, VK_DIVIDE: key.NUM_DIVIDE, VK_F1: key.F1, VK_F2: key.F2, VK_F3: key.F3, VK_F4: key.F4, VK_F5: key.F5, VK_F6: key.F6, VK_F7: key.F7, VK_F8: key.F8, VK_F9: key.F9, VK_F10: key.F10, VK_F11: key.F11, VK_F12: key.F12, VK_F13: key.F13, VK_F14: key.F14, VK_F15: key.F15, VK_F16: key.F16, # VK_F17: , # VK_F18: , # VK_F19: , # VK_F20: , # VK_F21: , # VK_F22: , # VK_F23: , # VK_F24: , VK_NUMLOCK: key.NUMLOCK, VK_SCROLL: key.SCROLLLOCK, VK_LSHIFT: key.LSHIFT, VK_RSHIFT: key.RSHIFT, VK_LCONTROL: key.LCTRL, VK_RCONTROL: key.RCTRL, VK_LMENU: key.LALT, VK_RMENU: key.RALT, # VK_PROCESSKEY: , # VK_ATTN: , # VK_CRSEL: , # VK_EXSEL: , # VK_EREOF: , # VK_PLAY: , # VK_ZOOM: , # VK_NONAME: , # VK_PA1: , # VK_OEM_CLEAR: , # VK_XBUTTON1: , # VK_XBUTTON2: , # VK_VOLUME_MUTE: , # VK_VOLUME_DOWN: , # VK_VOLUME_UP: , # VK_MEDIA_NEXT_TRACK: , # VK_MEDIA_PREV_TRACK: , # VK_MEDIA_PLAY_PAUSE: , # VK_BROWSER_BACK: , # VK_BROWSER_FORWARD: , } # Keys that must be translated via MapVirtualKey, as the virtual key code # is language and keyboard dependent. chmap = { ord('!'): key.EXCLAMATION, ord('"'): key.DOUBLEQUOTE, ord('#'): key.HASH, ord('$'): key.DOLLAR, ord('%'): key.PERCENT, ord('&'): key.AMPERSAND, ord("'"): key.APOSTROPHE, ord('('): key.PARENLEFT, ord(')'): key.PARENRIGHT, ord('*'): key.ASTERISK, ord('+'): key.PLUS, ord(','): key.COMMA, ord('-'): key.MINUS, ord('.'): key.PERIOD, ord('/'): key.SLASH, ord(':'): key.COLON, ord(';'): key.SEMICOLON, ord('<'): key.LESS, ord('='): key.EQUAL, ord('>'): key.GREATER, ord('?'): key.QUESTION, ord('@'): key.AT, ord('['): key.BRACKETLEFT, ord('\\'): key.BACKSLASH, ord(']'): key.BRACKETRIGHT, ord('\x5e'): key.ASCIICIRCUM, ord('_'): key.UNDERSCORE, ord('\x60'): key.GRAVE, ord('`'): key.QUOTELEFT, ord('{'): key.BRACELEFT, ord('|'): key.BAR, ord('}'): key.BRACERIGHT, ord('~'): key.ASCIITILDE, } pyglet-1.1.4/pyglet/window/mouse.py0000600013464101346420000000471111317241561015527 0ustar yohyoh# ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- '''Mouse constants and utilities for pyglet.window. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: mouse.py 1579 2008-01-15 14:47:19Z Alex.Holkner $' def buttons_string(buttons): '''Return a string describing a set of active mouse buttons. Example:: >>> buttons_string(LEFT | RIGHT) 'LEFT|RIGHT' :Parameters: `buttons` : int Bitwise combination of mouse button constants. :rtype: str ''' button_names = [] if buttons & LEFT: button_names.append('LEFT') if buttons & MIDDLE: button_names.append('MIDDLE') if buttons & RIGHT: button_names.append('RIGHT') return '|'.join(button_names) # Symbolic names for the mouse buttons LEFT = 1 << 0 MIDDLE = 1 << 1 RIGHT = 1 << 2 pyglet-1.1.4/pyglet/window/key.py0000600013464101346420000002442411317241561015172 0ustar yohyoh# ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- '''Key constants and utilities for pyglet.window. Usage:: from pyglet.window import Window from pyglet.window import key window = Window() @window.event def on_key_press(symbol, modifiers): # Symbolic names: if symbol == key.RETURN: # Alphabet keys: elif symbol == key.Z: # Number keys: elif symbol == key._1: # Number keypad keys: elif symbol == key.NUM_1: # Modifiers: if modifiers & key.MOD_CTRL: ''' __docformat__ = 'restructuredtext' __version__ = '$Id: key.py 1919 2008-03-19 07:47:01Z Alex.Holkner $' class KeyStateHandler(dict): '''Simple handler that tracks the state of keys on the keyboard. If a key is pressed then this handler holds a True value for it. For example:: >>> win = window.Window >>> keyboard = key.KeyStateHandler() >>> win.push_handlers(keyboard) # Hold down the "up" arrow... >>> keyboard[key.UP] True >>> keyboard[key.DOWN] False ''' def on_key_press(self, symbol, modifiers): self[symbol] = True def on_key_release(self, symbol, modifiers): self[symbol] = False def __getitem__(self, key): return self.get(key, False) def modifiers_string(modifiers): '''Return a string describing a set of modifiers. Example:: >>> modifiers_string(MOD_SHIFT | MOD_CTRL) 'MOD_SHIFT|MOD_CTRL' :Parameters: `modifiers` : int Bitwise combination of modifier constants. :rtype: str ''' mod_names = [] if modifiers & MOD_SHIFT: mod_names.append('MOD_SHIFT') if modifiers & MOD_CTRL: mod_names.append('MOD_CTRL') if modifiers & MOD_ALT: mod_names.append('MOD_ALT') if modifiers & MOD_CAPSLOCK: mod_names.append('MOD_CAPSLOCK') if modifiers & MOD_NUMLOCK: mod_names.append('MOD_NUMLOCK') if modifiers & MOD_SCROLLLOCK: mod_names.append('MOD_SCROLLLOCK') if modifiers & MOD_COMMAND: mod_names.append('MOD_COMMAND') if modifiers & MOD_OPTION: mod_names.append('MOD_OPTION') return '|'.join(mod_names) def symbol_string(symbol): '''Return a string describing a key symbol. Example:: >>> symbol_string(BACKSPACE) 'BACKSPACE' :Parameters: `symbol` : int Symbolic key constant. :rtype: str ''' if symbol < 1 << 32: return _key_names.get(symbol, str(symbol)) else: return 'user_key(%x)' % (symbol >> 32) def motion_string(motion): '''Return a string describing a text motion. Example:: >>> motion_string(MOTION_NEXT_WORD): 'MOTION_NEXT_WORD' :Parameters: `motion` : int Text motion constant. :rtype: str ''' return _motion_names.get(motion, str(motion)) def user_key(scancode): '''Return a key symbol for a key not supported by pyglet. This can be used to map virtual keys or scancodes from unsupported keyboard layouts into a machine-specific symbol. The symbol will be meaningless on any other machine, or under a different keyboard layout. Applications should use user-keys only when user explicitly binds them (for example, mapping keys to actions in a game options screen). ''' assert scancode > 0 return scancode << 32 # Modifier mask constants MOD_SHIFT = 1 << 0 MOD_CTRL = 1 << 1 MOD_ALT = 1 << 2 MOD_CAPSLOCK = 1 << 3 MOD_NUMLOCK = 1 << 4 MOD_WINDOWS = 1 << 5 MOD_COMMAND = 1 << 6 MOD_OPTION = 1 << 7 MOD_SCROLLLOCK = 1 << 8 #: Accelerator modifier. On Windows and Linux, this is ``MOD_CTRL``, on #: Mac OS X it's ``MOD_COMMAND``. MOD_ACCEL = MOD_CTRL import sys as _sys if _sys.platform == 'darwin': MOD_ACCEL = MOD_COMMAND # Key symbol constants # ASCII commands BACKSPACE = 0xff08 TAB = 0xff09 LINEFEED = 0xff0a CLEAR = 0xff0b RETURN = 0xff0d ENTER = 0xff0d # synonym PAUSE = 0xff13 SCROLLLOCK = 0xff14 SYSREQ = 0xff15 ESCAPE = 0xff1b SPACE = 0xff20 # Cursor control and motion HOME = 0xff50 LEFT = 0xff51 UP = 0xff52 RIGHT = 0xff53 DOWN = 0xff54 PAGEUP = 0xff55 PAGEDOWN = 0xff56 END = 0xff57 BEGIN = 0xff58 # Misc functions DELETE = 0xffff SELECT = 0xff60 PRINT = 0xff61 EXECUTE = 0xff62 INSERT = 0xff63 UNDO = 0xff65 REDO = 0xff66 MENU = 0xff67 FIND = 0xff68 CANCEL = 0xff69 HELP = 0xff6a BREAK = 0xff6b MODESWITCH = 0xff7e SCRIPTSWITCH = 0xff7e # Text motion constants: these are allowed to clash with key constants MOTION_UP = UP MOTION_RIGHT = RIGHT MOTION_DOWN = DOWN MOTION_LEFT = LEFT MOTION_NEXT_WORD = 1 MOTION_PREVIOUS_WORD = 2 MOTION_BEGINNING_OF_LINE = 3 MOTION_END_OF_LINE = 4 MOTION_NEXT_PAGE = PAGEDOWN MOTION_PREVIOUS_PAGE = PAGEUP MOTION_BEGINNING_OF_FILE = 5 MOTION_END_OF_FILE = 6 MOTION_BACKSPACE = BACKSPACE MOTION_DELETE = DELETE # Number pad NUMLOCK = 0xff7f NUM_SPACE = 0xff80 NUM_TAB = 0xff89 NUM_ENTER = 0xff8d NUM_F1 = 0xff91 NUM_F2 = 0xff92 NUM_F3 = 0xff93 NUM_F4 = 0xff94 NUM_HOME = 0xff95 NUM_LEFT = 0xff96 NUM_UP = 0xff97 NUM_RIGHT = 0xff98 NUM_DOWN = 0xff99 NUM_PRIOR = 0xff9a NUM_PAGE_UP = 0xff9a NUM_NEXT = 0xff9b NUM_PAGE_DOWN = 0xff9b NUM_END = 0xff9c NUM_BEGIN = 0xff9d NUM_INSERT = 0xff9e NUM_DELETE = 0xff9f NUM_EQUAL = 0xffbd NUM_MULTIPLY = 0xffaa NUM_ADD = 0xffab NUM_SEPARATOR = 0xffac NUM_SUBTRACT = 0xffad NUM_DECIMAL = 0xffae NUM_DIVIDE = 0xffaf NUM_0 = 0xffb0 NUM_1 = 0xffb1 NUM_2 = 0xffb2 NUM_3 = 0xffb3 NUM_4 = 0xffb4 NUM_5 = 0xffb5 NUM_6 = 0xffb6 NUM_7 = 0xffb7 NUM_8 = 0xffb8 NUM_9 = 0xffb9 # Function keys F1 = 0xffbe F2 = 0xffbf F3 = 0xffc0 F4 = 0xffc1 F5 = 0xffc2 F6 = 0xffc3 F7 = 0xffc4 F8 = 0xffc5 F9 = 0xffc6 F10 = 0xffc7 F11 = 0xffc8 F12 = 0xffc9 F13 = 0xffca F14 = 0xffcb F15 = 0xffcc F16 = 0xffcd # Modifiers LSHIFT = 0xffe1 RSHIFT = 0xffe2 LCTRL = 0xffe3 RCTRL = 0xffe4 CAPSLOCK = 0xffe5 LMETA = 0xffe7 RMETA = 0xffe8 LALT = 0xffe9 RALT = 0xffea LWINDOWS = 0xffeb RWINDOWS = 0xffec LCOMMAND = 0xffed RCOMMAND = 0xffee LOPTION = 0xffd0 ROPTION = 0xffd1 # Latin-1 SPACE = 0x020 EXCLAMATION = 0x021 DOUBLEQUOTE = 0x022 HASH = 0x023 POUND = 0x023 # synonym DOLLAR = 0x024 PERCENT = 0x025 AMPERSAND = 0x026 APOSTROPHE = 0x027 PARENLEFT = 0x028 PARENRIGHT = 0x029 ASTERISK = 0x02a PLUS = 0x02b COMMA = 0x02c MINUS = 0x02d PERIOD = 0x02e SLASH = 0x02f _0 = 0x030 _1 = 0x031 _2 = 0x032 _3 = 0x033 _4 = 0x034 _5 = 0x035 _6 = 0x036 _7 = 0x037 _8 = 0x038 _9 = 0x039 COLON = 0x03a SEMICOLON = 0x03b LESS = 0x03c EQUAL = 0x03d GREATER = 0x03e QUESTION = 0x03f AT = 0x040 BRACKETLEFT = 0x05b BACKSLASH = 0x05c BRACKETRIGHT = 0x05d ASCIICIRCUM = 0x05e UNDERSCORE = 0x05f GRAVE = 0x060 QUOTELEFT = 0x060 A = 0x061 B = 0x062 C = 0x063 D = 0x064 E = 0x065 F = 0x066 G = 0x067 H = 0x068 I = 0x069 J = 0x06a K = 0x06b L = 0x06c M = 0x06d N = 0x06e O = 0x06f P = 0x070 Q = 0x071 R = 0x072 S = 0x073 T = 0x074 U = 0x075 V = 0x076 W = 0x077 X = 0x078 Y = 0x079 Z = 0x07a BRACELEFT = 0x07b BAR = 0x07c BRACERIGHT = 0x07d ASCIITILDE = 0x07e _key_names = {} _motion_names = {} for _name, _value in locals().items(): if _name[:2] != '__' and _name.upper() == _name and \ not _name.startswith('MOD_'): if _name.startswith('MOTION_'): _motion_names[_value] = _name else: _key_names[_value] = _name pyglet-1.1.4/pyglet/window/xlib/0002700013464101346420000000000011317255174014765 5ustar yohyohpyglet-1.1.4/pyglet/window/xlib/__init__.py0000600013464101346420000016410411317241561017077 0ustar yohyoh# ---------------------------------------------------------------------------- # 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: __init__.py 2534 2009-11-01 19:37:50Z benjamin.coder.smith@gmail.com $' from ctypes import * import unicodedata import warnings import pyglet from pyglet.window import WindowException, NoSuchDisplayException, \ MouseCursorException, Platform, Display, Screen, MouseCursor, \ DefaultMouseCursor, ImageMouseCursor, BaseWindow, _PlatformEventHandler from pyglet.window import event from pyglet.window import key from pyglet.window import mouse from pyglet.event import EventDispatcher from pyglet import gl from pyglet.gl import gl_info from pyglet.gl import glu_info from pyglet.gl import glx from pyglet.gl import glxext_arb from pyglet.gl import glxext_mesa from pyglet.gl import glx_info import pyglet.window.xlib.xlib from pyglet.window.xlib import cursorfont try: import pyglet.window.xlib.xinerama _have_xinerama = True except: _have_xinerama = False try: import pyglet.window.xlib.xsync _have_xsync = True except: _have_xsync = False class mwmhints_t(Structure): _fields_ = [ ('flags', c_uint32), ('functions', c_uint32), ('decorations', c_uint32), ('input_mode', c_int32), ('status', c_uint32) ] XA_CARDINAL = 6 # Xatom.h:14 # Do we have the November 2000 UTF8 extension? _have_utf8 = hasattr(xlib._lib, 'Xutf8TextListToTextProperty') # symbol,ctrl -> motion mapping _motion_map = { (key.UP, False): key.MOTION_UP, (key.RIGHT, False): key.MOTION_RIGHT, (key.DOWN, False): key.MOTION_DOWN, (key.LEFT, False): key.MOTION_LEFT, (key.RIGHT, True): key.MOTION_NEXT_WORD, (key.LEFT, True): key.MOTION_PREVIOUS_WORD, (key.HOME, False): key.MOTION_BEGINNING_OF_LINE, (key.END, False): key.MOTION_END_OF_LINE, (key.PAGEUP, False): key.MOTION_PREVIOUS_PAGE, (key.PAGEDOWN, False): key.MOTION_NEXT_PAGE, (key.HOME, True): key.MOTION_BEGINNING_OF_FILE, (key.END, True): key.MOTION_END_OF_FILE, (key.BACKSPACE, False): key.MOTION_BACKSPACE, (key.DELETE, False): key.MOTION_DELETE, } # Set up error handler def _error_handler(display, event): # By default, all errors are silently ignored: this has a better chance # of working than the default behaviour of quitting ;-) # # We've actually never seen an error that was our fault; they're always # driver bugs (and so the reports are useless). Nevertheless, set # environment variable PYGLET_DEBUG_X11 to 1 to get dumps of the error # and a traceback (execution will continue). if pyglet.options['debug_x11']: event = event.contents buf = c_buffer(1024) xlib.XGetErrorText(display, event.error_code, buf, len(buf)) print 'X11 error:', buf.value print ' serial:', event.serial print ' request:', event.request_code print ' minor:', event.minor_code print ' resource:', event.resourceid import traceback print 'Python stack trace (innermost last):' traceback.print_stack() return 0 _error_handler_ptr = xlib.XErrorHandler(_error_handler) xlib.XSetErrorHandler(_error_handler_ptr) class XlibException(WindowException): '''An X11-specific exception. This exception is probably a programming error in pyglet.''' pass class XlibMouseCursor(MouseCursor): drawable = False def __init__(self, cursor): self.cursor = cursor class XlibPlatform(Platform): def __init__(self): self._displays = {} def get_display(self, name): if name not in self._displays: self._displays[name] = XlibDisplayDevice(name) return self._displays[name] def get_default_display(self): return self.get_display('') class XlibDisplayDevice(Display): _display = None # POINTER(xlib.Display) _x_im = None # X input method # TODO close _x_im when display connection closed. _enable_xsync = False def __init__(self, name): super(XlibDisplayDevice, self).__init__() self._display = xlib.XOpenDisplay(name) if not self._display: raise NoSuchDisplayException('Cannot connect to "%s"' % name) self.info = glx_info.GLXInfo(self._display) # Also set the default GLX display for future info queries glx_info.set_display(self._display.contents) self._fileno = xlib.XConnectionNumber(self._display) self._window_map = {} # Initialise XSync if _have_xsync: event_base = c_int() error_base = c_int() if xsync.XSyncQueryExtension(self._display, byref(event_base), byref(error_base)): major_version = c_int() minor_version = c_int() if xsync.XSyncInitialize(self._display, byref(major_version), byref(minor_version)): self._enable_xsync = True def fileno(self): return self._fileno def get_screens(self): x_screen = xlib.XDefaultScreen(self._display) if _have_xinerama and xinerama.XineramaIsActive(self._display): number = c_int() infos = xinerama.XineramaQueryScreens(self._display, byref(number)) infos = cast(infos, POINTER(xinerama.XineramaScreenInfo * number.value)).contents result = [] for info in infos: result.append(XlibScreen(self, x_screen, info.x_org, info.y_org, info.width, info.height, True)) xlib.XFree(infos) return result else: # No xinerama screen_count = xlib.XScreenCount(self._display) result = [] for i in range(screen_count): screen = xlib.XScreenOfDisplay(self._display, i) result.append(XlibScreen(self, i, 0, 0, screen.contents.width, screen.contents.height, False)) # Move default screen to be first in list. s = result.pop(x_screen) result.insert(0, s) return result class XlibScreen(Screen): def __init__(self, display, x_screen_id, x, y, width, height, xinerama): super(XlibScreen, self).__init__(x, y, width, height) self.display = display self._x_screen_id = x_screen_id self._xinerama = xinerama def get_matching_configs(self, template): x_display = self.display._display have_13 = self.display.info.have_version(1, 3) if have_13: config_class = XlibGLConfig13 else: if 'ATI' in self.display.info.get_client_vendor(): config_class = XlibGLConfig10ATI else: config_class = XlibGLConfig10 # Construct array of attributes attrs = [] for name, value in template.get_gl_attributes(): attr = config_class.attribute_ids.get(name, None) if attr and value is not None: attrs.extend([attr, int(value)]) if have_13: attrs.extend([glx.GLX_X_RENDERABLE, True]) else: attrs.extend([glx.GLX_RGBA, True]) if len(attrs): attrs.extend([0, 0]) attrib_list = (c_int * len(attrs))(*attrs) else: attrib_list = None if have_13: elements = c_int() configs = glx.glXChooseFBConfig(x_display, self._x_screen_id, attrib_list, byref(elements)) if not configs: return [] configs = cast(configs, POINTER(glx.GLXFBConfig * elements.value)).contents result = [config_class(self, c) for c in configs] # Can't free array until all XlibGLConfig13's are GC'd. Too much # hassle, live with leak. XXX #xlib.XFree(configs) return result else: try: return [config_class(self, attrib_list)] except gl.ContextException: return [] def __repr__(self): return 'XlibScreen(screen=%d, x=%d, y=%d, ' \ 'width=%d, height=%d, xinerama=%d)' % \ (self._x_screen_id, self.x, self.y, self.width, self.height, self._xinerama) class XlibGLConfig(gl.Config): attribute_ids = { 'buffer_size': glx.GLX_BUFFER_SIZE, 'level': glx.GLX_LEVEL, # Not supported 'double_buffer': glx.GLX_DOUBLEBUFFER, 'stereo': glx.GLX_STEREO, 'aux_buffers': glx.GLX_AUX_BUFFERS, 'red_size': glx.GLX_RED_SIZE, 'green_size': glx.GLX_GREEN_SIZE, 'blue_size': glx.GLX_BLUE_SIZE, 'alpha_size': glx.GLX_ALPHA_SIZE, 'depth_size': glx.GLX_DEPTH_SIZE, 'stencil_size': glx.GLX_STENCIL_SIZE, 'accum_red_size': glx.GLX_ACCUM_RED_SIZE, 'accum_green_size': glx.GLX_ACCUM_GREEN_SIZE, 'accum_blue_size': glx.GLX_ACCUM_BLUE_SIZE, 'accum_alpha_size': glx.GLX_ACCUM_ALPHA_SIZE, } def create_context(self, share): context = self._create_glx_context(share) if context == glx.GLX_BAD_CONTEXT: raise gl.ContextException('Invalid context share') elif context == glx.GLXBadFBConfig: raise gl.ContextException('Invalid GL configuration') elif context < 0: raise gl.ContextException('Could not create GL context') return XlibGLContext(self, context, share) def _create_glx_context(self, share): raise NotImplementedError('abstract') def is_complete(self): return True def get_visual_info(self): raise NotImplementedError('abstract') class XlibGLConfig10(XlibGLConfig): def __init__(self, screen, attrib_list): self.screen = screen self._display = screen.display._display self._visual_info = glx.glXChooseVisual(self._display, screen._x_screen_id, attrib_list) if not self._visual_info: raise gl.ContextException('No conforming visual exists') for name, attr in self.attribute_ids.items(): value = c_int() result = glx.glXGetConfig(self._display, self._visual_info, attr, byref(value)) if result >= 0: setattr(self, name, value.value) self.sample_buffers = 0 self.samples = 0 def get_visual_info(self): return self._visual_info.contents def _create_glx_context(self, share): if share: return glx.glXCreateContext(self._display, self._visual_info, share._context, True) else: return glx.glXCreateContext(self._display, self._visual_info, None, True) class XlibGLConfig10ATI(XlibGLConfig10): attribute_ids = XlibGLConfig.attribute_ids.copy() del attribute_ids['stereo'] stereo = False class XlibGLConfig13(XlibGLConfig): attribute_ids = XlibGLConfig.attribute_ids.copy() attribute_ids.update({ 'sample_buffers': glx.GLX_SAMPLE_BUFFERS, 'samples': glx.GLX_SAMPLES, # Not supported in current pyglet API: 'render_type': glx.GLX_RENDER_TYPE, 'config_caveat': glx.GLX_CONFIG_CAVEAT, 'transparent_type': glx.GLX_TRANSPARENT_TYPE, 'transparent_index_value': glx.GLX_TRANSPARENT_INDEX_VALUE, 'transparent_red_value': glx.GLX_TRANSPARENT_RED_VALUE, 'transparent_green_value': glx.GLX_TRANSPARENT_GREEN_VALUE, 'transparent_blue_value': glx.GLX_TRANSPARENT_BLUE_VALUE, 'transparent_alpha_value': glx.GLX_TRANSPARENT_ALPHA_VALUE, # Used internally 'x_renderable': glx.GLX_X_RENDERABLE, }) def __init__(self, screen, fbconfig): super(XlibGLConfig13, self).__init__() self.screen = screen self._display = screen.display._display self._fbconfig = fbconfig for name, attr in self.attribute_ids.items(): value = c_int() result = glx.glXGetFBConfigAttrib( self._display, self._fbconfig, attr, byref(value)) if result >= 0: setattr(self, name, value.value) def get_visual_info(self): return glx.glXGetVisualFromFBConfig( self._display, self._fbconfig).contents def _create_glx_context(self, share): if share: return glx.glXCreateNewContext(self._display, self._fbconfig, glx.GLX_RGBA_TYPE, share._context, True) else: return glx.glXCreateNewContext(self._display, self._fbconfig, glx.GLX_RGBA_TYPE, None, True) class XlibGLContext(gl.Context): def __init__(self, config, context, share): super(XlibGLContext, self).__init__(share) self.config = config self._context = context self._x_display = config.screen.display._display def destroy(self): super(XlibGLContext, self).destroy() glx.glXDestroyContext(self._x_display, self._context) def is_direct(self): return glx.glXIsDirect(self._x_display, self._context) # Platform event data is single item, so use platform event handler directly. XlibEventHandler = _PlatformEventHandler class XlibWindow(BaseWindow): _x_display = None # X display connection _x_screen_id = None # X screen index _x_ic = None # X input context _glx_context = None # GLX context handle _glx_window = None # GLX window handle _window = None # Xlib window handle _minimum_size = None _maximum_size = None _x = 0 _y = 0 # Last known window position _width = 0 _height = 0 # Last known window size _mouse_exclusive_client = None # x,y of "real" mouse during exclusive _mouse_buttons = [False] * 6 # State of each xlib button _keyboard_exclusive = False _active = True _applied_mouse_exclusive = False _applied_keyboard_exclusive = False _mapped = False _lost_context = False _lost_context_state = False _enable_xsync = False _current_sync_value = None _current_sync_valid = False _needs_resize = False # True when resize event has been received but not # dispatched _default_event_mask = (0x1ffffff & ~xlib.PointerMotionHintMask & ~xlib.ResizeRedirectMask) def __init__(self, *args, **kwargs): # Bind event handlers self._event_handlers = {} for name in self._platform_event_names: if not hasattr(self, name): continue func = getattr(self, name) for message in func._platform_event_data: self._event_handlers[message] = func super(XlibWindow, self).__init__(*args, **kwargs) def _recreate(self, changes): # If flipping to/from fullscreen and using override_redirect (we # always are, _NET_WM_FULLSCREEN doesn't work), need to recreate the # window. # # A possible improvement could be to just hide the top window, # destroy the GLX window, and reshow it again when leaving fullscreen. # This would prevent the floating window from being moved by the # WM. if 'fullscreen' in changes or 'resizable' in changes: # clear out the GLX context self.switch_to() gl.glFlush() glx.glXMakeCurrent(self._x_display, 0, None) if self._glx_window: glx.glXDestroyWindow(self._x_display, self._glx_window) xlib.XDestroyWindow(self._x_display, self._window) self._glx_window = None del self.display._window_map[self._window] self._window = None self._mapped = False # TODO: detect state loss only by examining context share. if 'context' in changes: self._lost_context = True self._lost_context_state = True self._create() def _create(self): # Unmap existing window if necessary while we fiddle with it. if self._window and self._mapped: self._unmap() self.context.window = self self._x_display = self.config._display self._x_screen_id = self.screen._x_screen_id self._glx_context = self.context._context self._glx_1_3 = self.display.info.have_version(1, 3) self._have_SGI_video_sync = \ self.display.info.have_extension('GLX_SGI_video_sync') self._have_SGI_swap_control = \ self.display.info.have_extension('GLX_SGI_swap_control') self._have_MESA_swap_control = \ self.display.info.have_extension('GLX_MESA_swap_control') # In order of preference: # 1. GLX_MESA_swap_control (more likely to work where video_sync will # not) # 2. GLX_SGI_video_sync (does not work on Intel 945GM, but that has # MESA) # 3. GLX_SGI_swap_control (cannot be disabled once enabled). self._use_video_sync = (self._have_SGI_video_sync and not self._have_MESA_swap_control) # Create X window if not already existing. if not self._window: root = xlib.XRootWindow(self._x_display, self._x_screen_id) visual_info = self.config.get_visual_info() visual = visual_info.visual visual_id = xlib.XVisualIDFromVisual(visual) default_visual = xlib.XDefaultVisual( self._x_display, self._x_screen_id) default_visual_id = xlib.XVisualIDFromVisual(default_visual) window_attributes = xlib.XSetWindowAttributes() if visual_id != default_visual_id: window_attributes.colormap = xlib.XCreateColormap( self._x_display, root, visual, xlib.AllocNone) else: window_attributes.colormap = xlib.XDefaultColormap( self._x_display, self._x_screen_id) window_attributes.bit_gravity = xlib.NorthWestGravity # Issue 287: Compiz on Intel/Mesa doesn't draw window decoration # unless CWBackPixel is given in mask. Should have # no effect on other systems, so it's set # unconditionally. mask = xlib.CWColormap | xlib.CWBitGravity | xlib.CWBackPixel self._window = xlib.XCreateWindow(self._x_display, root, 0, 0, self._width, self._height, 0, visual_info.depth, xlib.InputOutput, visual, mask, byref(window_attributes)) self.display._window_map[self._window] = self # Setting null background pixmap disables drawing the background, # preventing flicker while resizing (in theory). # # Issue 287: Compiz on Intel/Mesa doesn't draw window decoration if # this is called. As it doesn't seem to have any # effect anyway, it's just commented out. #xlib.XSetWindowBackgroundPixmap(self._x_display, self._window, 0) self._enable_xsync = (pyglet.options['xsync'] and self.display._enable_xsync and self.config.double_buffer) # Set supported protocols protocols = [] protocols.append(xlib.XInternAtom(self._x_display, 'WM_DELETE_WINDOW', False)) if self._enable_xsync: protocols.append(xlib.XInternAtom(self._x_display, '_NET_WM_SYNC_REQUEST', False)) protocols = (c_ulong * len(protocols))(*protocols) xlib.XSetWMProtocols(self._x_display, self._window, protocols, len(protocols)) # Create window resize sync counter if self._enable_xsync: value = xsync.XSyncValue() self._sync_counter = xlib.XID( xsync.XSyncCreateCounter(self._x_display, value)) atom = xlib.XInternAtom(self._x_display, '_NET_WM_SYNC_REQUEST_COUNTER', False) ptr = pointer(self._sync_counter) xlib.XChangeProperty(self._x_display, self._window, atom, XA_CARDINAL, 32, xlib.PropModeReplace, cast(ptr, POINTER(c_ubyte)), 1) # Set window attributes attributes = xlib.XSetWindowAttributes() attributes_mask = 0 # Bypass the window manager in fullscreen. This is the only reliable # technique (over _NET_WM_STATE_FULLSCREEN, Motif, KDE and Gnome # hints) that is pretty much guaranteed to work. Unfortunately # we run into window activation and focus problems that require # attention. Search for "override_redirect" for all occurences. attributes.override_redirect = self._fullscreen attributes_mask |= xlib.CWOverrideRedirect if self._fullscreen: xlib.XMoveResizeWindow(self._x_display, self._window, self.screen.x, self.screen.y, self.screen.width, self.screen.height) else: xlib.XResizeWindow(self._x_display, self._window, self._width, self._height) xlib.XChangeWindowAttributes(self._x_display, self._window, attributes_mask, byref(attributes)) # Set style styles = { self.WINDOW_STYLE_DEFAULT: '_NET_WM_WINDOW_TYPE_NORMAL', self.WINDOW_STYLE_DIALOG: '_NET_WM_WINDOW_TYPE_DIALOG', self.WINDOW_STYLE_TOOL: '_NET_WM_WINDOW_TYPE_UTILITY', } if self._style in styles: self._set_atoms_property('_NET_WM_WINDOW_TYPE', (styles[self._style],)) elif self._style == self.WINDOW_STYLE_BORDERLESS: MWM_HINTS_DECORATIONS = 1 << 1 PROP_MWM_HINTS_ELEMENTS = 5 mwmhints = mwmhints_t() mwmhints.flags = MWM_HINTS_DECORATIONS mwmhints.decorations = 0 name = xlib.XInternAtom(self._x_display, '_MOTIF_WM_HINTS', False) xlib.XChangeProperty(self._x_display, self._window, name, name, 32, xlib.PropModeReplace, cast(pointer(mwmhints), POINTER(c_ubyte)), PROP_MWM_HINTS_ELEMENTS) # Set resizeable if not self._resizable: self.set_minimum_size(self._width, self._height) self.set_maximum_size(self._width, self._height) # Set caption self.set_caption(self._caption) # Create input context. A good but very outdated reference for this # is http://www.sbin.org/doc/Xlib/chapt_11.html if _have_utf8 and not self._x_ic: if not self.display._x_im: xlib.XSetLocaleModifiers('@im=none') self.display._x_im = \ xlib.XOpenIM(self._x_display, None, None, None) xlib.XFlush(self._x_display); # Need to set argtypes on this function because it's vararg, # and ctypes guesses wrong. xlib.XCreateIC.argtypes = [xlib.XIM, c_char_p, c_int, c_char_p, xlib.Window, c_char_p, xlib.Window, c_void_p] self._x_ic = xlib.XCreateIC(self.display._x_im, 'inputStyle', xlib.XIMPreeditNothing|xlib.XIMStatusNothing, 'clientWindow', self._window, 'focusWindow', self._window, None) filter_events = c_ulong() xlib.XGetICValues(self._x_ic, 'filterEvents', byref(filter_events), None) self._default_event_mask |= filter_events.value xlib.XSetICFocus(self._x_ic) self.switch_to() if self._visible: self.set_visible(True) self.set_mouse_platform_visible() def _map(self): if self._mapped: return # Map the window, wait for map event before continuing. xlib.XSelectInput( self._x_display, self._window, xlib.StructureNotifyMask) xlib.XMapRaised(self._x_display, self._window) e = xlib.XEvent() while True: xlib.XNextEvent(self._x_display, e) if e.type == xlib.MapNotify: break xlib.XSelectInput( self._x_display, self._window, self._default_event_mask) self._mapped = True if self._fullscreen: # Possibly an override_redirect issue. self.activate() self.dispatch_event('on_resize', self._width, self._height) self.dispatch_event('on_show') self.dispatch_event('on_expose') def _unmap(self): if not self._mapped: return xlib.XSelectInput( self._x_display, self._window, xlib.StructureNotifyMask) xlib.XUnmapWindow(self._x_display, self._window) e = xlib.XEvent() while True: xlib.XNextEvent(self._x_display, e) if e.type == xlib.UnmapNotify: break xlib.XSelectInput( self._x_display, self._window, self._default_event_mask) self._mapped = False def _get_root(self): attributes = xlib.XWindowAttributes() xlib.XGetWindowAttributes(self._x_display, self._window, byref(attributes)) return attributes.root def close(self): if not self._window: return # clear out the GLX context. Can fail if current context already # destroyed (on exit, say). try: gl.glFlush() except gl.GLException: pass if self._glx_1_3: glx.glXMakeContextCurrent(self._x_display, 0, 0, None) else: glx.glXMakeCurrent(self._x_display, 0, None) self._unmap() if self._glx_window: glx.glXDestroyWindow(self._x_display, self._glx_window) if self._window: xlib.XDestroyWindow(self._x_display, self._window) del self.display._window_map[self._window] self._window = None self._glx_window = None if _have_utf8: xlib.XDestroyIC(self._x_ic) self._x_ic = None super(XlibWindow, self).close() def switch_to(self): if self._glx_1_3: if not self._glx_window: self._glx_window = glx.glXCreateWindow(self._x_display, self._config._fbconfig, self._window, None) glx.glXMakeContextCurrent(self._x_display, self._glx_window, self._glx_window, self._glx_context) else: glx.glXMakeCurrent(self._x_display, self._window, self._glx_context) self.set_vsync(self._vsync) self._context.set_current() gl_info.set_active_context() glu_info.set_active_context() def flip(self): self.draw_mouse_cursor() if self._vsync and self._have_SGI_video_sync and self._use_video_sync: count = c_uint() glxext_arb.glXGetVideoSyncSGI(byref(count)) glxext_arb.glXWaitVideoSyncSGI( 2, (count.value + 1) % 2, byref(count)) if self._glx_1_3: if not self._glx_window: self._glx_window = glx.glXCreateWindow(self._x_display, self._config._fbconfig, self._window, None) glx.glXSwapBuffers(self._x_display, self._glx_window) else: glx.glXSwapBuffers(self._x_display, self._window) self._sync_resize() def set_vsync(self, vsync): if pyglet.options['vsync'] is not None: vsync = pyglet.options['vsync'] self._vsync = vsync if not self._use_video_sync: interval = vsync and 1 or 0 if self._have_MESA_swap_control: glxext_mesa.glXSwapIntervalMESA(interval) elif self._have_SGI_swap_control and interval: # SGI_swap_control interval cannot be set to 0 glxext_arb.glXSwapIntervalSGI(interval) def set_caption(self, caption): if caption is None: caption = '' self._caption = caption self._set_text_property('WM_NAME', caption, allow_utf8=False) self._set_text_property('WM_ICON_NAME', caption, allow_utf8=False) self._set_text_property('_NET_WM_NAME', caption) self._set_text_property('_NET_WM_ICON_NAME', caption) def get_caption(self): return self._caption def set_size(self, width, height): if self._fullscreen: raise WindowException('Cannot set size of fullscreen window.') self._width = width self._height = height if not self._resizable: self.set_minimum_size(width, height) self.set_maximum_size(width, height) xlib.XResizeWindow(self._x_display, self._window, width, height) self.dispatch_event('on_resize', width, height) def get_size(self): # XGetGeometry and XWindowAttributes seem to always return the # original size of the window, which is wrong after the user # has resized it. # XXX this is probably fixed now, with fix of resize. return self._width, self._height def set_location(self, x, y): # Assume the window manager has reparented our top-level window # only once, in which case attributes.x/y give the offset from # the frame to the content window. Better solution would be # to use _NET_FRAME_EXTENTS, where supported. attributes = xlib.XWindowAttributes() xlib.XGetWindowAttributes(self._x_display, self._window, byref(attributes)) # XXX at least under KDE's WM these attrs are both 0 x -= attributes.x y -= attributes.y xlib.XMoveWindow(self._x_display, self._window, x, y) def get_location(self): child = xlib.Window() x = c_int() y = c_int() xlib.XTranslateCoordinates(self._x_display, self._window, self._get_root(), 0, 0, byref(x), byref(y), byref(child)) return x.value, y.value def activate(self): xlib.XSetInputFocus(self._x_display, self._window, xlib.RevertToParent, xlib.CurrentTime) def set_visible(self, visible=True): if visible: self._map() else: self._unmap() self._visible = visible def set_minimum_size(self, width, height): self._minimum_size = width, height self._set_wm_normal_hints() def set_maximum_size(self, width, height): self._maximum_size = width, height self._set_wm_normal_hints() def minimize(self): xlib.XIconifyWindow(self._x_display, self._window, self._x_screen_id) def maximize(self): self._set_wm_state('_NET_WM_STATE_MAXIMIZED_HORZ', '_NET_WM_STATE_MAXIMIZED_VERT') def set_mouse_platform_visible(self, platform_visible=None): if platform_visible is None: platform_visible = self._mouse_visible and \ not self._mouse_cursor.drawable if not platform_visible: # Hide pointer by creating an empty cursor black = xlib.XBlackPixel(self._x_display, self._x_screen_id) black = xlib.XColor() bmp = xlib.XCreateBitmapFromData(self._x_display, self._window, c_buffer(8), 8, 8) cursor = xlib.XCreatePixmapCursor(self._x_display, bmp, bmp, black, black, 0, 0) xlib.XDefineCursor(self._x_display, self._window, cursor) xlib.XFreeCursor(self._x_display, cursor) xlib.XFreePixmap(self._x_display, bmp) else: # Restore cursor if isinstance(self._mouse_cursor, XlibMouseCursor): xlib.XDefineCursor(self._x_display, self._window, self._mouse_cursor.cursor) else: xlib.XUndefineCursor(self._x_display, self._window) def _update_exclusivity(self): mouse_exclusive = self._active and self._mouse_exclusive keyboard_exclusive = self._active and self._keyboard_exclusive if mouse_exclusive != self._applied_mouse_exclusive: if mouse_exclusive: self.set_mouse_platform_visible(False) # Restrict to client area xlib.XGrabPointer(self._x_display, self._window, True, 0, xlib.GrabModeAsync, xlib.GrabModeAsync, self._window, 0, xlib.CurrentTime) # Move pointer to center of window x = self._width / 2 y = self._height / 2 self._mouse_exclusive_client = x, y xlib.XWarpPointer(self._x_display, 0, # src window self._window, # dst window 0, 0, # src x, y 0, 0, # src w, h x, y) else: # Unclip xlib.XUngrabPointer(self._x_display, xlib.CurrentTime) self.set_mouse_platform_visible() self._applied_mouse_exclusive = mouse_exclusive if keyboard_exclusive != self._applied_keyboard_exclusive: if keyboard_exclusive: xlib.XGrabKeyboard(self._x_display, self._window, False, xlib.GrabModeAsync, xlib.GrabModeAsync, xlib.CurrentTime) else: xlib.XUngrabKeyboard(self._x_display, xlib.CurrentTime) self._applied_keyboard_exclusive = keyboard_exclusive def set_exclusive_mouse(self, exclusive=True): if exclusive == self._mouse_exclusive: return self._mouse_exclusive = exclusive self._update_exclusivity() def set_exclusive_keyboard(self, exclusive=True): if exclusive == self._keyboard_exclusive: return self._keyboard_exclusive = exclusive self._update_exclusivity() def get_system_mouse_cursor(self, name): if name == self.CURSOR_DEFAULT: return DefaultMouseCursor() # NQR means default shape is not pretty... surely there is another # cursor font? cursor_shapes = { self.CURSOR_CROSSHAIR: cursorfont.XC_crosshair, self.CURSOR_HAND: cursorfont.XC_hand2, self.CURSOR_HELP: cursorfont.XC_question_arrow, # NQR self.CURSOR_NO: cursorfont.XC_pirate, # NQR self.CURSOR_SIZE: cursorfont.XC_fleur, self.CURSOR_SIZE_UP: cursorfont.XC_top_side, self.CURSOR_SIZE_UP_RIGHT: cursorfont.XC_top_right_corner, self.CURSOR_SIZE_RIGHT: cursorfont.XC_right_side, self.CURSOR_SIZE_DOWN_RIGHT: cursorfont.XC_bottom_right_corner, self.CURSOR_SIZE_DOWN: cursorfont.XC_bottom_side, self.CURSOR_SIZE_DOWN_LEFT: cursorfont.XC_bottom_left_corner, self.CURSOR_SIZE_LEFT: cursorfont.XC_left_side, self.CURSOR_SIZE_UP_LEFT: cursorfont.XC_top_left_corner, self.CURSOR_SIZE_UP_DOWN: cursorfont.XC_sb_v_double_arrow, self.CURSOR_SIZE_LEFT_RIGHT: cursorfont.XC_sb_h_double_arrow, self.CURSOR_TEXT: cursorfont.XC_xterm, self.CURSOR_WAIT: cursorfont.XC_watch, self.CURSOR_WAIT_ARROW: cursorfont.XC_watch, # NQR } if name not in cursor_shapes: raise MouseCursorException('Unknown cursor name "%s"' % name) cursor = xlib.XCreateFontCursor(self._x_display, cursor_shapes[name]) return XlibMouseCursor(cursor) def set_icon(self, *images): # Careful! XChangeProperty takes an array of long when data type # is 32-bit (but long can be 64 bit!), so pad high bytes of format if # necessary. import sys format = { ('little', 4): 'BGRA', ('little', 8): 'BGRAAAAA', ('big', 4): 'ARGB', ('big', 8): 'AAAAARGB' }[(sys.byteorder, sizeof(c_ulong))] data = '' for image in images: image = image.get_image_data() pitch = -(image.width * len(format)) s = c_buffer(sizeof(c_ulong) * 2) memmove(s, cast((c_ulong * 2)(image.width, image.height), POINTER(c_ubyte)), len(s)) data += s.raw + image.get_data(format, pitch) buffer = (c_ubyte * len(data))() memmove(buffer, data, len(data)) atom = xlib.XInternAtom(self._x_display, '_NET_WM_ICON', False) xlib.XChangeProperty(self._x_display, self._window, atom, XA_CARDINAL, 32, xlib.PropModeReplace, buffer, len(data)/sizeof(c_ulong)) # Private utility def _set_wm_normal_hints(self): hints = xlib.XAllocSizeHints().contents if self._minimum_size: hints.flags |= xlib.PMinSize hints.min_width, hints.min_height = self._minimum_size if self._maximum_size: hints.flags |= xlib.PMaxSize hints.max_width, hints.max_height = self._maximum_size xlib.XSetWMNormalHints(self._x_display, self._window, byref(hints)) def _set_text_property(self, name, value, allow_utf8=True): atom = xlib.XInternAtom(self._x_display, name, False) if not atom: raise XlibException('Undefined atom "%s"' % name) assert type(value) in (str, unicode) property = xlib.XTextProperty() if _have_utf8 and allow_utf8: buf = create_string_buffer(value.encode('utf8')) result = xlib.Xutf8TextListToTextProperty(self._x_display, cast(pointer(buf), c_char_p), 1, xlib.XUTF8StringStyle, byref(property)) if result < 0: raise XlibException('Could not create UTF8 text property') else: buf = create_string_buffer(value.encode('ascii', 'ignore')) result = xlib.XStringListToTextProperty( cast(pointer(buf), c_char_p), 1, byref(property)) if result < 0: raise XlibException('Could not create text property') xlib.XSetTextProperty(self._x_display, self._window, byref(property), atom) # XXX Xlib doesn't like us freeing this #xlib.XFree(property.value) def _set_atoms_property(self, name, values, mode=xlib.PropModeReplace): name_atom = xlib.XInternAtom(self._x_display, name, False) atoms = [] for value in values: atoms.append(xlib.XInternAtom(self._x_display, value, False)) atom_type = xlib.XInternAtom(self._x_display, 'ATOM', False) if len(atoms): atoms_ar = (xlib.Atom * len(atoms))(*atoms) xlib.XChangeProperty(self._x_display, self._window, name_atom, atom_type, 32, mode, cast(pointer(atoms_ar), POINTER(c_ubyte)), len(atoms)) else: xlib.XDeleteProperty(self._x_display, self._window, net_wm_state) def _set_wm_state(self, *states): # Set property net_wm_state = xlib.XInternAtom(self._x_display, '_NET_WM_STATE', False) atoms = [] for state in states: atoms.append(xlib.XInternAtom(self._x_display, state, False)) atom_type = xlib.XInternAtom(self._x_display, 'ATOM', False) if len(atoms): atoms_ar = (xlib.Atom * len(atoms))(*atoms) xlib.XChangeProperty(self._x_display, self._window, net_wm_state, atom_type, 32, xlib.PropModePrepend, cast(pointer(atoms_ar), POINTER(c_ubyte)), len(atoms)) else: xlib.XDeleteProperty(self._x_display, self._window, net_wm_state) # Nudge the WM e = xlib.XEvent() e.xclient.type = xlib.ClientMessage e.xclient.message_type = net_wm_state e.xclient.display = cast(self._x_display, POINTER(xlib.Display)) e.xclient.window = self._window e.xclient.format = 32 e.xclient.data.l[0] = xlib.PropModePrepend for i, atom in enumerate(atoms): e.xclient.data.l[i + 1] = atom xlib.XSendEvent(self._x_display, self._get_root(), False, xlib.SubstructureRedirectMask, byref(e)) # Event handling def dispatch_events(self): self.dispatch_pending_events() self._allow_dispatch_event = True e = xlib.XEvent() # Cache these in case window is closed from an event handler _x_display = self._x_display _window = self._window # Check for the events specific to this window while xlib.XCheckWindowEvent(_x_display, _window, 0x1ffffff, byref(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, 0): continue self.dispatch_platform_event(e) # Generic events for this window (the window close event). while xlib.XCheckTypedWindowEvent(_x_display, _window, xlib.ClientMessage, byref(e)): self.dispatch_platform_event(e) if self._needs_resize: self.dispatch_event('on_resize', self._width, self._height) self.dispatch_event('on_expose') self._needs_resize = False self._allow_dispatch_event = False def dispatch_pending_events(self): while self._event_queue: EventDispatcher.dispatch_event(self, *self._event_queue.pop(0)) # Dispatch any context-related events if self._lost_context: self._lost_context = False EventDispatcher.dispatch_event(self, 'on_context_lost') if self._lost_context_state: self._lost_context_state = False EventDispatcher.dispatch_event(self, 'on_context_state_lost') def dispatch_platform_event(self, e): event_handler = self._event_handlers.get(e.type) if event_handler: event_handler(e) @staticmethod def _translate_modifiers(state): modifiers = 0 if state & xlib.ShiftMask: modifiers |= key.MOD_SHIFT if state & xlib.ControlMask: modifiers |= key.MOD_CTRL if state & xlib.LockMask: modifiers |= key.MOD_CAPSLOCK if state & xlib.Mod1Mask: modifiers |= key.MOD_ALT if state & xlib.Mod2Mask: modifiers |= key.MOD_NUMLOCK if state & xlib.Mod4Mask: modifiers |= key.MOD_WINDOWS if state & xlib.Mod5Mask: modifiers |= key.MOD_SCROLLLOCK return modifiers # Event handlers ''' def _event_symbol(self, event): # pyglet.self.key keysymbols are identical to X11 keysymbols, no # need to map the keysymbol. symbol = xlib.XKeycodeToKeysym(self._x_display, event.xkey.keycode, 0) if symbol == 0: # XIM event return None elif symbol not in key._key_names.keys(): symbol = key.user_key(event.xkey.keycode) return symbol ''' def _event_text_symbol(self, ev): text = None symbol = xlib.KeySym() buffer = create_string_buffer(128) # Look up raw keysym before XIM filters it (default for keypress and # keyrelease) count = xlib.XLookupString(ev.xkey, buffer, len(buffer) - 1, byref(symbol), None) # Give XIM a shot filtered = xlib.XFilterEvent(ev, ev.xany.window) if ev.type == xlib.KeyPress and not filtered: status = c_int() if _have_utf8: encoding = 'utf8' count = xlib.Xutf8LookupString(self._x_ic, ev.xkey, buffer, len(buffer) - 1, byref(symbol), byref(status)) if status.value == xlib.XBufferOverflow: raise NotImplementedError('TODO: XIM buffer resize') else: encoding = 'ascii' count = xlib.XLookupString(ev.xkey, buffer, len(buffer) - 1, byref(symbol), None) if count: status.value = xlib.XLookupBoth if status.value & (xlib.XLookupChars | xlib.XLookupBoth): text = buffer.value[:count].decode(encoding) # Don't treat Unicode command codepoints as text, except Return. if not text: text = None else: for char in text: if text and unicodedata.category(text) == 'Cc' and \ text != '\r': text = None symbol = symbol.value # If the event is a XIM filtered event, the keysym will be virtual # (e.g., aacute instead of A after a dead key). Drop it, we don't # want these kind of key events. if ev.xkey.keycode == 0 and not filtered: symbol = None # pyglet.self.key keysymbols are identical to X11 keysymbols, no # need to map the keysymbol. For keysyms outside the pyglet set, map # raw key code to a user key. if symbol and symbol not in key._key_names and ev.xkey.keycode: # Issue 353: Symbol is uppercase when shift key held down. symbol = ord(unichr(symbol).lower()) # If still not recognised, use the keycode if symbol not in key._key_names: symbol = key.user_key(ev.xkey.keycode) if filtered: # The event was filtered, text must be ignored, but the symbol is # still good. return None, symbol return text, symbol def _event_text_motion(self, symbol, modifiers): if modifiers & key.MOD_ALT: return None ctrl = modifiers & key.MOD_CTRL != 0 return _motion_map.get((symbol, ctrl), None) @XlibEventHandler(xlib.KeyPress) @XlibEventHandler(xlib.KeyRelease) def _event_key(self, ev): if ev.type == xlib.KeyRelease: # Look in the queue for a matching KeyPress with same timestamp, # indicating an auto-repeat rather than actual key event. saved = [] while True: auto_event = xlib.XEvent() result = xlib.XCheckWindowEvent(self._x_display, self._window, xlib.KeyPress|xlib.KeyRelease, byref(auto_event)) if not result: break saved.append(auto_event) if auto_event.type == xlib.KeyRelease: # just save this off for restoration back to the queue continue if ev.xkey.keycode == auto_event.xkey.keycode: # Found a key repeat: dispatch EVENT_TEXT* event text, symbol = self._event_text_symbol(auto_event) modifiers = self._translate_modifiers(ev.xkey.state) modifiers_ctrl = modifiers & (key.MOD_CTRL | key.MOD_ALT) motion = self._event_text_motion(symbol, modifiers) if motion: if modifiers & key.MOD_SHIFT: self.dispatch_event( 'on_text_motion_select', motion) else: self.dispatch_event('on_text_motion', motion) elif text and not modifiers_ctrl: self.dispatch_event('on_text', text) ditched = saved.pop() for auto_event in reversed(saved): xlib.XPutBackEvent(self._x_display, byref(auto_event)) return else: # Key code of press did not match, therefore no repeating # is going on, stop searching. break # Whoops, put the events back, it's for real. for auto_event in reversed(saved): xlib.XPutBackEvent(self._x_display, byref(auto_event)) text, symbol = self._event_text_symbol(ev) modifiers = self._translate_modifiers(ev.xkey.state) modifiers_ctrl = modifiers & (key.MOD_CTRL | key.MOD_ALT) motion = self._event_text_motion(symbol, modifiers) if ev.type == xlib.KeyPress: if symbol: self.dispatch_event('on_key_press', symbol, modifiers) if motion: if modifiers & key.MOD_SHIFT: self.dispatch_event('on_text_motion_select', motion) else: self.dispatch_event('on_text_motion', motion) elif text and not modifiers_ctrl: self.dispatch_event('on_text', text) elif ev.type == xlib.KeyRelease: if symbol: self.dispatch_event('on_key_release', symbol, modifiers) @XlibEventHandler(xlib.MotionNotify) def _event_motionnotify(self, ev): x = ev.xmotion.x y = self.height - ev.xmotion.y if self._mouse_in_window: dx = x - self._mouse_x dy = y - self._mouse_y else: dx = dy = 0 if self._applied_mouse_exclusive and \ (ev.xmotion.x, ev.xmotion.y) == self._mouse_exclusive_client: # Ignore events caused by XWarpPointer self._mouse_x = x self._mouse_y = y return if self._applied_mouse_exclusive: # Reset pointer position ex, ey = self._mouse_exclusive_client xlib.XWarpPointer(self._x_display, 0, self._window, 0, 0, 0, 0, ex, ey) self._mouse_x = x self._mouse_y = y self._mouse_in_window = True buttons = 0 if ev.xmotion.state & xlib.Button1MotionMask: buttons |= mouse.LEFT if ev.xmotion.state & xlib.Button2MotionMask: buttons |= mouse.MIDDLE if ev.xmotion.state & xlib.Button3MotionMask: buttons |= mouse.RIGHT if buttons: # Drag event modifiers = self._translate_modifiers(ev.xmotion.state) self.dispatch_event('on_mouse_drag', x, y, dx, dy, buttons, modifiers) else: # Motion event self.dispatch_event('on_mouse_motion', x, y, dx, dy) @XlibEventHandler(xlib.ClientMessage) def _event_clientmessage(self, ev): atom = ev.xclient.data.l[0] if atom == xlib.XInternAtom(ev.xclient.display, 'WM_DELETE_WINDOW', False): self.dispatch_event('on_close') elif (self._enable_xsync and atom == xlib.XInternAtom(ev.xclient.display, '_NET_WM_SYNC_REQUEST', False)): lo = ev.xclient.data.l[2] hi = ev.xclient.data.l[3] self._current_sync_value = xsync.XSyncValue(hi, lo) def _sync_resize(self): if self._enable_xsync and self._current_sync_valid: if xsync.XSyncValueIsZero(self._current_sync_value): self._current_sync_valid = False return xsync.XSyncSetCounter(self._x_display, self._sync_counter, self._current_sync_value) self._current_sync_value = None self._current_sync_valid = False @XlibEventHandler(xlib.ButtonPress) @XlibEventHandler(xlib.ButtonRelease) def _event_button(self, ev): x = ev.xbutton.x y = self.height - ev.xbutton.y button = 1 << (ev.xbutton.button - 1) # 1, 2, 3 -> 1, 2, 4 modifiers = self._translate_modifiers(ev.xbutton.state) if ev.type == xlib.ButtonPress: # override_redirect issue: manually activate this window if # fullscreen. if self._fullscreen and not self._active: self.activate() if ev.xbutton.button == 4: self.dispatch_event('on_mouse_scroll', x, y, 0, 1) elif ev.xbutton.button == 5: self.dispatch_event('on_mouse_scroll', x, y, 0, -1) elif ev.xbutton.button < len(self._mouse_buttons): self._mouse_buttons[ev.xbutton.button] = True self.dispatch_event('on_mouse_press', x, y, button, modifiers) else: if ev.xbutton.button < 4: self._mouse_buttons[ev.xbutton.button] = False self.dispatch_event('on_mouse_release', x, y, button, modifiers) @XlibEventHandler(xlib.Expose) def _event_expose(self, ev): # Ignore all expose events except the last one. We could be told # about exposure rects - but I don't see the point since we're # working with OpenGL and we'll just redraw the whole scene. if ev.xexpose.count > 0: return self.dispatch_event('on_expose') @XlibEventHandler(xlib.EnterNotify) def _event_enternotify(self, ev): # figure active mouse buttons # XXX ignore modifier state? state = ev.xcrossing.state self._mouse_buttons[1] = state & xlib.Button1Mask self._mouse_buttons[2] = state & xlib.Button2Mask self._mouse_buttons[3] = state & xlib.Button3Mask self._mouse_buttons[4] = state & xlib.Button4Mask self._mouse_buttons[5] = state & xlib.Button5Mask # mouse position x = self._mouse_x = ev.xcrossing.x y = self._mouse_y = self.height - ev.xcrossing.y self._mouse_in_window = True # XXX there may be more we could do here self.dispatch_event('on_mouse_enter', x, y) @XlibEventHandler(xlib.LeaveNotify) def _event_leavenotify(self, ev): x = self._mouse_x = ev.xcrossing.x y = self._mouse_y = self.height - ev.xcrossing.y self._mouse_in_window = False self.dispatch_event('on_mouse_leave', x, y) @XlibEventHandler(xlib.ConfigureNotify) def _event_configurenotify(self, ev): if self._enable_xsync and self._current_sync_value: self._current_sync_valid = True self.switch_to() w, h = ev.xconfigure.width, ev.xconfigure.height x, y = ev.xconfigure.x, ev.xconfigure.y if self._width != w or self._height != h: self._width = w self._height = h self._needs_resize = True if self._x != x or self._y != y: self.dispatch_event('on_move', x, y) self._x = x self._y = y @XlibEventHandler(xlib.FocusIn) def _event_focusin(self, ev): self._active = True self._update_exclusivity() self.dispatch_event('on_activate') xlib.XSetICFocus(self._x_ic) @XlibEventHandler(xlib.FocusOut) def _event_focusout(self, ev): self._active = False self._update_exclusivity() self.dispatch_event('on_deactivate') xlib.XUnsetICFocus(self._x_ic) @XlibEventHandler(xlib.MapNotify) def _event_mapnotify(self, ev): self._mapped = True self.dispatch_event('on_show') @XlibEventHandler(xlib.UnmapNotify) def _event_unmapnotify(self, ev): self._mapped = False self.dispatch_event('on_hide') pyglet-1.1.4/pyglet/window/xlib/xsync.py0000600013464101346420000004117211317241561016503 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 Xext Generated with: tools/genwrappers.py xsync Do not modify this file. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: xsync.py 1848 2008-03-01 04:21:43Z Alex.Holkner $' import ctypes from ctypes import * import pyglet.lib _lib = pyglet.lib.load_library('Xext') _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)] # XXX DODGY relative import of xlib.py, which contains XID etc definitions. # can't use wrapped import which gave # import pyglet.window.xlib.xlib # because Python has the lamest import semantics and can't handle that kind of # recursive import, even though it's the same as import xlib SYNC_MAJOR_VERSION = 3 # /usr/include/X11/extensions/sync.h:4901 SYNC_MINOR_VERSION = 0 # /usr/include/X11/extensions/sync.h:4902 X_SyncInitialize = 0 # /usr/include/X11/extensions/sync.h:4904 X_SyncListSystemCounters = 1 # /usr/include/X11/extensions/sync.h:4905 X_SyncCreateCounter = 2 # /usr/include/X11/extensions/sync.h:4906 X_SyncSetCounter = 3 # /usr/include/X11/extensions/sync.h:4907 X_SyncChangeCounter = 4 # /usr/include/X11/extensions/sync.h:4908 X_SyncQueryCounter = 5 # /usr/include/X11/extensions/sync.h:4909 X_SyncDestroyCounter = 6 # /usr/include/X11/extensions/sync.h:4910 X_SyncAwait = 7 # /usr/include/X11/extensions/sync.h:4911 X_SyncCreateAlarm = 8 # /usr/include/X11/extensions/sync.h:4912 X_SyncChangeAlarm = 9 # /usr/include/X11/extensions/sync.h:4913 X_SyncQueryAlarm = 10 # /usr/include/X11/extensions/sync.h:4914 X_SyncDestroyAlarm = 11 # /usr/include/X11/extensions/sync.h:4915 X_SyncSetPriority = 12 # /usr/include/X11/extensions/sync.h:4916 X_SyncGetPriority = 13 # /usr/include/X11/extensions/sync.h:4917 XSyncCounterNotify = 0 # /usr/include/X11/extensions/sync.h:4919 XSyncAlarmNotify = 1 # /usr/include/X11/extensions/sync.h:4920 XSyncAlarmNotifyMask = 2 # /usr/include/X11/extensions/sync.h:4921 XSyncNumberEvents = 2 # /usr/include/X11/extensions/sync.h:4923 XSyncBadCounter = 0 # /usr/include/X11/extensions/sync.h:4925 XSyncBadAlarm = 1 # /usr/include/X11/extensions/sync.h:4926 XSyncNumberErrors = 2 # /usr/include/X11/extensions/sync.h:4927 XSyncCACounter = 1 # /usr/include/X11/extensions/sync.h:4932 XSyncCAValueType = 2 # /usr/include/X11/extensions/sync.h:4933 XSyncCAValue = 4 # /usr/include/X11/extensions/sync.h:4934 XSyncCATestType = 8 # /usr/include/X11/extensions/sync.h:4935 XSyncCADelta = 16 # /usr/include/X11/extensions/sync.h:4936 XSyncCAEvents = 32 # /usr/include/X11/extensions/sync.h:4937 enum_anon_93 = c_int XSyncAbsolute = 0 XSyncRelative = 1 XSyncValueType = enum_anon_93 # /usr/include/X11/extensions/sync.h:4945 enum_anon_94 = c_int XSyncPositiveTransition = 0 XSyncNegativeTransition = 1 XSyncPositiveComparison = 2 XSyncNegativeComparison = 3 XSyncTestType = enum_anon_94 # /usr/include/X11/extensions/sync.h:4955 enum_anon_95 = c_int XSyncAlarmActive = 0 XSyncAlarmInactive = 1 XSyncAlarmDestroyed = 2 XSyncAlarmState = enum_anon_95 # /usr/include/X11/extensions/sync.h:4964 XID = xlib.XID XSyncCounter = XID # /usr/include/X11/extensions/sync.h:4967 XSyncAlarm = XID # /usr/include/X11/extensions/sync.h:4968 class struct__XSyncValue(Structure): __slots__ = [ 'hi', 'lo', ] struct__XSyncValue._fields_ = [ ('hi', c_int), ('lo', c_uint), ] XSyncValue = struct__XSyncValue # /usr/include/X11/extensions/sync.h:4972 # /usr/include/X11/extensions/sync.h:4980 XSyncIntToValue = _lib.XSyncIntToValue XSyncIntToValue.restype = None XSyncIntToValue.argtypes = [POINTER(XSyncValue), c_int] # /usr/include/X11/extensions/sync.h:4985 XSyncIntsToValue = _lib.XSyncIntsToValue XSyncIntsToValue.restype = None XSyncIntsToValue.argtypes = [POINTER(XSyncValue), c_uint, c_int] Bool = xlib.Bool # /usr/include/X11/extensions/sync.h:4991 XSyncValueGreaterThan = _lib.XSyncValueGreaterThan XSyncValueGreaterThan.restype = Bool XSyncValueGreaterThan.argtypes = [XSyncValue, XSyncValue] # /usr/include/X11/extensions/sync.h:4996 XSyncValueLessThan = _lib.XSyncValueLessThan XSyncValueLessThan.restype = Bool XSyncValueLessThan.argtypes = [XSyncValue, XSyncValue] # /usr/include/X11/extensions/sync.h:5001 XSyncValueGreaterOrEqual = _lib.XSyncValueGreaterOrEqual XSyncValueGreaterOrEqual.restype = Bool XSyncValueGreaterOrEqual.argtypes = [XSyncValue, XSyncValue] # /usr/include/X11/extensions/sync.h:5006 XSyncValueLessOrEqual = _lib.XSyncValueLessOrEqual XSyncValueLessOrEqual.restype = Bool XSyncValueLessOrEqual.argtypes = [XSyncValue, XSyncValue] # /usr/include/X11/extensions/sync.h:5011 XSyncValueEqual = _lib.XSyncValueEqual XSyncValueEqual.restype = Bool XSyncValueEqual.argtypes = [XSyncValue, XSyncValue] # /usr/include/X11/extensions/sync.h:5016 XSyncValueIsNegative = _lib.XSyncValueIsNegative XSyncValueIsNegative.restype = Bool XSyncValueIsNegative.argtypes = [XSyncValue] # /usr/include/X11/extensions/sync.h:5020 XSyncValueIsZero = _lib.XSyncValueIsZero XSyncValueIsZero.restype = Bool XSyncValueIsZero.argtypes = [XSyncValue] # /usr/include/X11/extensions/sync.h:5024 XSyncValueIsPositive = _lib.XSyncValueIsPositive XSyncValueIsPositive.restype = Bool XSyncValueIsPositive.argtypes = [XSyncValue] # /usr/include/X11/extensions/sync.h:5028 XSyncValueLow32 = _lib.XSyncValueLow32 XSyncValueLow32.restype = c_uint XSyncValueLow32.argtypes = [XSyncValue] # /usr/include/X11/extensions/sync.h:5032 XSyncValueHigh32 = _lib.XSyncValueHigh32 XSyncValueHigh32.restype = c_int XSyncValueHigh32.argtypes = [XSyncValue] # /usr/include/X11/extensions/sync.h:5036 XSyncValueAdd = _lib.XSyncValueAdd XSyncValueAdd.restype = None XSyncValueAdd.argtypes = [POINTER(XSyncValue), XSyncValue, XSyncValue, POINTER(c_int)] # /usr/include/X11/extensions/sync.h:5043 XSyncValueSubtract = _lib.XSyncValueSubtract XSyncValueSubtract.restype = None XSyncValueSubtract.argtypes = [POINTER(XSyncValue), XSyncValue, XSyncValue, POINTER(c_int)] # /usr/include/X11/extensions/sync.h:5050 XSyncMaxValue = _lib.XSyncMaxValue XSyncMaxValue.restype = None XSyncMaxValue.argtypes = [POINTER(XSyncValue)] # /usr/include/X11/extensions/sync.h:5054 XSyncMinValue = _lib.XSyncMinValue XSyncMinValue.restype = None XSyncMinValue.argtypes = [POINTER(XSyncValue)] class struct__XSyncSystemCounter(Structure): __slots__ = [ 'name', 'counter', 'resolution', ] struct__XSyncSystemCounter._fields_ = [ ('name', c_char_p), ('counter', XSyncCounter), ('resolution', XSyncValue), ] XSyncSystemCounter = struct__XSyncSystemCounter # /usr/include/X11/extensions/sync.h:5131 class struct_anon_96(Structure): __slots__ = [ 'counter', 'value_type', 'wait_value', 'test_type', ] struct_anon_96._fields_ = [ ('counter', XSyncCounter), ('value_type', XSyncValueType), ('wait_value', XSyncValue), ('test_type', XSyncTestType), ] XSyncTrigger = struct_anon_96 # /usr/include/X11/extensions/sync.h:5139 class struct_anon_97(Structure): __slots__ = [ 'trigger', 'event_threshold', ] struct_anon_97._fields_ = [ ('trigger', XSyncTrigger), ('event_threshold', XSyncValue), ] XSyncWaitCondition = struct_anon_97 # /usr/include/X11/extensions/sync.h:5144 class struct_anon_98(Structure): __slots__ = [ 'trigger', 'delta', 'events', 'state', ] struct_anon_98._fields_ = [ ('trigger', XSyncTrigger), ('delta', XSyncValue), ('events', Bool), ('state', XSyncAlarmState), ] XSyncAlarmAttributes = struct_anon_98 # /usr/include/X11/extensions/sync.h:5152 class struct_anon_99(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'counter', 'wait_value', 'counter_value', 'time', 'count', 'destroyed', ] Display = xlib.Display Time = xlib.Time struct_anon_99._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', Bool), ('display', POINTER(Display)), ('counter', XSyncCounter), ('wait_value', XSyncValue), ('counter_value', XSyncValue), ('time', Time), ('count', c_int), ('destroyed', Bool), ] XSyncCounterNotifyEvent = struct_anon_99 # /usr/include/X11/extensions/sync.h:5169 class struct_anon_100(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'alarm', 'counter_value', 'alarm_value', 'time', 'state', ] struct_anon_100._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', Bool), ('display', POINTER(Display)), ('alarm', XSyncAlarm), ('counter_value', XSyncValue), ('alarm_value', XSyncValue), ('time', Time), ('state', XSyncAlarmState), ] XSyncAlarmNotifyEvent = struct_anon_100 # /usr/include/X11/extensions/sync.h:5181 class struct_anon_101(Structure): __slots__ = [ 'type', 'display', 'alarm', 'serial', 'error_code', 'request_code', 'minor_code', ] struct_anon_101._fields_ = [ ('type', c_int), ('display', POINTER(Display)), ('alarm', XSyncAlarm), ('serial', c_ulong), ('error_code', c_ubyte), ('request_code', c_ubyte), ('minor_code', c_ubyte), ] XSyncAlarmError = struct_anon_101 # /usr/include/X11/extensions/sync.h:5195 class struct_anon_102(Structure): __slots__ = [ 'type', 'display', 'counter', 'serial', 'error_code', 'request_code', 'minor_code', ] struct_anon_102._fields_ = [ ('type', c_int), ('display', POINTER(Display)), ('counter', XSyncCounter), ('serial', c_ulong), ('error_code', c_ubyte), ('request_code', c_ubyte), ('minor_code', c_ubyte), ] XSyncCounterError = struct_anon_102 # /usr/include/X11/extensions/sync.h:5205 # /usr/include/X11/extensions/sync.h:5213 XSyncQueryExtension = _lib.XSyncQueryExtension XSyncQueryExtension.restype = c_int XSyncQueryExtension.argtypes = [POINTER(Display), POINTER(c_int), POINTER(c_int)] # /usr/include/X11/extensions/sync.h:5219 XSyncInitialize = _lib.XSyncInitialize XSyncInitialize.restype = c_int XSyncInitialize.argtypes = [POINTER(Display), POINTER(c_int), POINTER(c_int)] # /usr/include/X11/extensions/sync.h:5225 XSyncListSystemCounters = _lib.XSyncListSystemCounters XSyncListSystemCounters.restype = POINTER(XSyncSystemCounter) XSyncListSystemCounters.argtypes = [POINTER(Display), POINTER(c_int)] # /usr/include/X11/extensions/sync.h:5230 XSyncFreeSystemCounterList = _lib.XSyncFreeSystemCounterList XSyncFreeSystemCounterList.restype = None XSyncFreeSystemCounterList.argtypes = [POINTER(XSyncSystemCounter)] # /usr/include/X11/extensions/sync.h:5234 XSyncCreateCounter = _lib.XSyncCreateCounter XSyncCreateCounter.restype = XSyncCounter XSyncCreateCounter.argtypes = [POINTER(Display), XSyncValue] # /usr/include/X11/extensions/sync.h:5239 XSyncSetCounter = _lib.XSyncSetCounter XSyncSetCounter.restype = c_int XSyncSetCounter.argtypes = [POINTER(Display), XSyncCounter, XSyncValue] # /usr/include/X11/extensions/sync.h:5245 XSyncChangeCounter = _lib.XSyncChangeCounter XSyncChangeCounter.restype = c_int XSyncChangeCounter.argtypes = [POINTER(Display), XSyncCounter, XSyncValue] # /usr/include/X11/extensions/sync.h:5251 XSyncDestroyCounter = _lib.XSyncDestroyCounter XSyncDestroyCounter.restype = c_int XSyncDestroyCounter.argtypes = [POINTER(Display), XSyncCounter] # /usr/include/X11/extensions/sync.h:5256 XSyncQueryCounter = _lib.XSyncQueryCounter XSyncQueryCounter.restype = c_int XSyncQueryCounter.argtypes = [POINTER(Display), XSyncCounter, POINTER(XSyncValue)] # /usr/include/X11/extensions/sync.h:5262 XSyncAwait = _lib.XSyncAwait XSyncAwait.restype = c_int XSyncAwait.argtypes = [POINTER(Display), POINTER(XSyncWaitCondition), c_int] # /usr/include/X11/extensions/sync.h:5268 XSyncCreateAlarm = _lib.XSyncCreateAlarm XSyncCreateAlarm.restype = XSyncAlarm XSyncCreateAlarm.argtypes = [POINTER(Display), c_ulong, POINTER(XSyncAlarmAttributes)] # /usr/include/X11/extensions/sync.h:5274 XSyncDestroyAlarm = _lib.XSyncDestroyAlarm XSyncDestroyAlarm.restype = c_int XSyncDestroyAlarm.argtypes = [POINTER(Display), XSyncAlarm] # /usr/include/X11/extensions/sync.h:5279 XSyncQueryAlarm = _lib.XSyncQueryAlarm XSyncQueryAlarm.restype = c_int XSyncQueryAlarm.argtypes = [POINTER(Display), XSyncAlarm, POINTER(XSyncAlarmAttributes)] # /usr/include/X11/extensions/sync.h:5285 XSyncChangeAlarm = _lib.XSyncChangeAlarm XSyncChangeAlarm.restype = c_int XSyncChangeAlarm.argtypes = [POINTER(Display), XSyncAlarm, c_ulong, POINTER(XSyncAlarmAttributes)] # /usr/include/X11/extensions/sync.h:5292 XSyncSetPriority = _lib.XSyncSetPriority XSyncSetPriority.restype = c_int XSyncSetPriority.argtypes = [POINTER(Display), XID, c_int] # /usr/include/X11/extensions/sync.h:5298 XSyncGetPriority = _lib.XSyncGetPriority XSyncGetPriority.restype = c_int XSyncGetPriority.argtypes = [POINTER(Display), XID, POINTER(c_int)] __all__ = ['SYNC_MAJOR_VERSION', 'SYNC_MINOR_VERSION', 'X_SyncInitialize', 'X_SyncListSystemCounters', 'X_SyncCreateCounter', 'X_SyncSetCounter', 'X_SyncChangeCounter', 'X_SyncQueryCounter', 'X_SyncDestroyCounter', 'X_SyncAwait', 'X_SyncCreateAlarm', 'X_SyncChangeAlarm', 'X_SyncQueryAlarm', 'X_SyncDestroyAlarm', 'X_SyncSetPriority', 'X_SyncGetPriority', 'XSyncCounterNotify', 'XSyncAlarmNotify', 'XSyncAlarmNotifyMask', 'XSyncNumberEvents', 'XSyncBadCounter', 'XSyncBadAlarm', 'XSyncNumberErrors', 'XSyncCACounter', 'XSyncCAValueType', 'XSyncCAValue', 'XSyncCATestType', 'XSyncCADelta', 'XSyncCAEvents', 'XSyncValueType', 'XSyncAbsolute', 'XSyncRelative', 'XSyncTestType', 'XSyncPositiveTransition', 'XSyncNegativeTransition', 'XSyncPositiveComparison', 'XSyncNegativeComparison', 'XSyncAlarmState', 'XSyncAlarmActive', 'XSyncAlarmInactive', 'XSyncAlarmDestroyed', 'XSyncCounter', 'XSyncAlarm', 'XSyncValue', 'XSyncIntToValue', 'XSyncIntsToValue', 'XSyncValueGreaterThan', 'XSyncValueLessThan', 'XSyncValueGreaterOrEqual', 'XSyncValueLessOrEqual', 'XSyncValueEqual', 'XSyncValueIsNegative', 'XSyncValueIsZero', 'XSyncValueIsPositive', 'XSyncValueLow32', 'XSyncValueHigh32', 'XSyncValueAdd', 'XSyncValueSubtract', 'XSyncMaxValue', 'XSyncMinValue', 'XSyncSystemCounter', 'XSyncTrigger', 'XSyncWaitCondition', 'XSyncAlarmAttributes', 'XSyncCounterNotifyEvent', 'XSyncAlarmNotifyEvent', 'XSyncAlarmError', 'XSyncCounterError', 'XSyncQueryExtension', 'XSyncInitialize', 'XSyncListSystemCounters', 'XSyncFreeSystemCounterList', 'XSyncCreateCounter', 'XSyncSetCounter', 'XSyncChangeCounter', 'XSyncDestroyCounter', 'XSyncQueryCounter', 'XSyncAwait', 'XSyncCreateAlarm', 'XSyncDestroyAlarm', 'XSyncQueryAlarm', 'XSyncChangeAlarm', 'XSyncSetPriority', 'XSyncGetPriority'] pyglet-1.1.4/pyglet/window/xlib/cursorfont.py0000600013464101346420000000633011317241561017540 0ustar yohyoh# ---------------------------------------------------------------------------- # 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: cursorfont.py 1579 2008-01-15 14:47:19Z Alex.Holkner $' # /usr/include/X11/cursorfont.h XC_num_glyphs = 154 XC_X_cursor = 0 XC_arrow = 2 XC_based_arrow_down = 4 XC_based_arrow_up = 6 XC_boat = 8 XC_bogosity = 10 XC_bottom_left_corner = 12 XC_bottom_right_corner = 14 XC_bottom_side = 16 XC_bottom_tee = 18 XC_box_spiral = 20 XC_center_ptr = 22 XC_circle = 24 XC_clock = 26 XC_coffee_mug = 28 XC_cross = 30 XC_cross_reverse = 32 XC_crosshair = 34 XC_diamond_cross = 36 XC_dot = 38 XC_dotbox = 40 XC_double_arrow = 42 XC_draft_large = 44 XC_draft_small = 46 XC_draped_box = 48 XC_exchange = 50 XC_fleur = 52 XC_gobbler = 54 XC_gumby = 56 XC_hand1 = 58 XC_hand2 = 60 XC_heart = 62 XC_icon = 64 XC_iron_cross = 66 XC_left_ptr = 68 XC_left_side = 70 XC_left_tee = 72 XC_leftbutton = 74 XC_ll_angle = 76 XC_lr_angle = 78 XC_man = 80 XC_middlebutton = 82 XC_mouse = 84 XC_pencil = 86 XC_pirate = 88 XC_plus = 90 XC_question_arrow = 92 XC_right_ptr = 94 XC_right_side = 96 XC_right_tee = 98 XC_rightbutton = 100 XC_rtl_logo = 102 XC_sailboat = 104 XC_sb_down_arrow = 106 XC_sb_h_double_arrow = 108 XC_sb_left_arrow = 110 XC_sb_right_arrow = 112 XC_sb_up_arrow = 114 XC_sb_v_double_arrow = 116 XC_shuttle = 118 XC_sizing = 120 XC_spider = 122 XC_spraycan = 124 XC_star = 126 XC_target = 128 XC_tcross = 130 XC_top_left_arrow = 132 XC_top_left_corner = 134 XC_top_right_corner = 136 XC_top_side = 138 XC_top_tee = 140 XC_trek = 142 XC_ul_angle = 144 XC_umbrella = 146 XC_ur_angle = 148 XC_watch = 150 XC_xterm = 152 pyglet-1.1.4/pyglet/window/xlib/xlib.py0000600013464101346420000053751011317241561016303 0ustar yohyoh'''Wrapper for X11 Generated with: tools/genwrappers.py xlib Do not modify this file. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: xlib.py 2060 2008-05-04 13:09:15Z Alex.Holkner $' import ctypes from ctypes import * import pyglet.lib _lib = pyglet.lib.load_library('X11') _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)] import pyglet.gl.glx XlibSpecificationRelease = 6 # /usr/include/X11/Xlib.h:39 X_PROTOCOL = 11 # /usr/include/X11/X.h:58 X_PROTOCOL_REVISION = 0 # /usr/include/X11/X.h:59 XID = pyglet.gl.glx.XID Mask = c_ulong # /usr/include/X11/X.h:75 Atom = c_ulong # /usr/include/X11/X.h:79 VisualID = pyglet.gl.glx.VisualID Time = c_ulong # /usr/include/X11/X.h:82 Window = pyglet.gl.glx.Window Drawable = XID # /usr/include/X11/X.h:102 Font = pyglet.gl.glx.Font Pixmap = pyglet.gl.glx.Pixmap Cursor = XID # /usr/include/X11/X.h:108 Colormap = XID # /usr/include/X11/X.h:109 GContext = XID # /usr/include/X11/X.h:110 KeySym = XID # /usr/include/X11/X.h:111 KeyCode = c_ubyte # /usr/include/X11/X.h:113 None_ = 0 # /usr/include/X11/X.h:120 ParentRelative = 1 # /usr/include/X11/X.h:123 CopyFromParent = 0 # /usr/include/X11/X.h:126 PointerWindow = 0 # /usr/include/X11/X.h:131 InputFocus = 1 # /usr/include/X11/X.h:132 PointerRoot = 1 # /usr/include/X11/X.h:134 AnyPropertyType = 0 # /usr/include/X11/X.h:136 AnyKey = 0 # /usr/include/X11/X.h:138 AnyButton = 0 # /usr/include/X11/X.h:140 AllTemporary = 0 # /usr/include/X11/X.h:142 CurrentTime = 0 # /usr/include/X11/X.h:144 NoSymbol = 0 # /usr/include/X11/X.h:146 NoEventMask = 0 # /usr/include/X11/X.h:155 KeyPressMask = 1 # /usr/include/X11/X.h:156 KeyReleaseMask = 2 # /usr/include/X11/X.h:157 ButtonPressMask = 4 # /usr/include/X11/X.h:158 ButtonReleaseMask = 8 # /usr/include/X11/X.h:159 EnterWindowMask = 16 # /usr/include/X11/X.h:160 LeaveWindowMask = 32 # /usr/include/X11/X.h:161 PointerMotionMask = 64 # /usr/include/X11/X.h:162 PointerMotionHintMask = 128 # /usr/include/X11/X.h:163 Button1MotionMask = 256 # /usr/include/X11/X.h:164 Button2MotionMask = 512 # /usr/include/X11/X.h:165 Button3MotionMask = 1024 # /usr/include/X11/X.h:166 Button4MotionMask = 2048 # /usr/include/X11/X.h:167 Button5MotionMask = 4096 # /usr/include/X11/X.h:168 ButtonMotionMask = 8192 # /usr/include/X11/X.h:169 KeymapStateMask = 16384 # /usr/include/X11/X.h:170 ExposureMask = 32768 # /usr/include/X11/X.h:171 VisibilityChangeMask = 65536 # /usr/include/X11/X.h:172 StructureNotifyMask = 131072 # /usr/include/X11/X.h:173 ResizeRedirectMask = 262144 # /usr/include/X11/X.h:174 SubstructureNotifyMask = 524288 # /usr/include/X11/X.h:175 SubstructureRedirectMask = 1048576 # /usr/include/X11/X.h:176 FocusChangeMask = 2097152 # /usr/include/X11/X.h:177 PropertyChangeMask = 4194304 # /usr/include/X11/X.h:178 ColormapChangeMask = 8388608 # /usr/include/X11/X.h:179 OwnerGrabButtonMask = 16777216 # /usr/include/X11/X.h:180 KeyPress = 2 # /usr/include/X11/X.h:186 KeyRelease = 3 # /usr/include/X11/X.h:187 ButtonPress = 4 # /usr/include/X11/X.h:188 ButtonRelease = 5 # /usr/include/X11/X.h:189 MotionNotify = 6 # /usr/include/X11/X.h:190 EnterNotify = 7 # /usr/include/X11/X.h:191 LeaveNotify = 8 # /usr/include/X11/X.h:192 FocusIn = 9 # /usr/include/X11/X.h:193 FocusOut = 10 # /usr/include/X11/X.h:194 KeymapNotify = 11 # /usr/include/X11/X.h:195 Expose = 12 # /usr/include/X11/X.h:196 GraphicsExpose = 13 # /usr/include/X11/X.h:197 NoExpose = 14 # /usr/include/X11/X.h:198 VisibilityNotify = 15 # /usr/include/X11/X.h:199 CreateNotify = 16 # /usr/include/X11/X.h:200 DestroyNotify = 17 # /usr/include/X11/X.h:201 UnmapNotify = 18 # /usr/include/X11/X.h:202 MapNotify = 19 # /usr/include/X11/X.h:203 MapRequest = 20 # /usr/include/X11/X.h:204 ReparentNotify = 21 # /usr/include/X11/X.h:205 ConfigureNotify = 22 # /usr/include/X11/X.h:206 ConfigureRequest = 23 # /usr/include/X11/X.h:207 GravityNotify = 24 # /usr/include/X11/X.h:208 ResizeRequest = 25 # /usr/include/X11/X.h:209 CirculateNotify = 26 # /usr/include/X11/X.h:210 CirculateRequest = 27 # /usr/include/X11/X.h:211 PropertyNotify = 28 # /usr/include/X11/X.h:212 SelectionClear = 29 # /usr/include/X11/X.h:213 SelectionRequest = 30 # /usr/include/X11/X.h:214 SelectionNotify = 31 # /usr/include/X11/X.h:215 ColormapNotify = 32 # /usr/include/X11/X.h:216 ClientMessage = 33 # /usr/include/X11/X.h:217 MappingNotify = 34 # /usr/include/X11/X.h:218 LASTEvent = 35 # /usr/include/X11/X.h:219 ShiftMask = 1 # /usr/include/X11/X.h:225 LockMask = 2 # /usr/include/X11/X.h:226 ControlMask = 4 # /usr/include/X11/X.h:227 Mod1Mask = 8 # /usr/include/X11/X.h:228 Mod2Mask = 16 # /usr/include/X11/X.h:229 Mod3Mask = 32 # /usr/include/X11/X.h:230 Mod4Mask = 64 # /usr/include/X11/X.h:231 Mod5Mask = 128 # /usr/include/X11/X.h:232 ShiftMapIndex = 0 # /usr/include/X11/X.h:237 LockMapIndex = 1 # /usr/include/X11/X.h:238 ControlMapIndex = 2 # /usr/include/X11/X.h:239 Mod1MapIndex = 3 # /usr/include/X11/X.h:240 Mod2MapIndex = 4 # /usr/include/X11/X.h:241 Mod3MapIndex = 5 # /usr/include/X11/X.h:242 Mod4MapIndex = 6 # /usr/include/X11/X.h:243 Mod5MapIndex = 7 # /usr/include/X11/X.h:244 Button1Mask = 256 # /usr/include/X11/X.h:250 Button2Mask = 512 # /usr/include/X11/X.h:251 Button3Mask = 1024 # /usr/include/X11/X.h:252 Button4Mask = 2048 # /usr/include/X11/X.h:253 Button5Mask = 4096 # /usr/include/X11/X.h:254 AnyModifier = 32768 # /usr/include/X11/X.h:256 Button1 = 1 # /usr/include/X11/X.h:263 Button2 = 2 # /usr/include/X11/X.h:264 Button3 = 3 # /usr/include/X11/X.h:265 Button4 = 4 # /usr/include/X11/X.h:266 Button5 = 5 # /usr/include/X11/X.h:267 NotifyNormal = 0 # /usr/include/X11/X.h:271 NotifyGrab = 1 # /usr/include/X11/X.h:272 NotifyUngrab = 2 # /usr/include/X11/X.h:273 NotifyWhileGrabbed = 3 # /usr/include/X11/X.h:274 NotifyHint = 1 # /usr/include/X11/X.h:276 NotifyAncestor = 0 # /usr/include/X11/X.h:280 NotifyVirtual = 1 # /usr/include/X11/X.h:281 NotifyInferior = 2 # /usr/include/X11/X.h:282 NotifyNonlinear = 3 # /usr/include/X11/X.h:283 NotifyNonlinearVirtual = 4 # /usr/include/X11/X.h:284 NotifyPointer = 5 # /usr/include/X11/X.h:285 NotifyPointerRoot = 6 # /usr/include/X11/X.h:286 NotifyDetailNone = 7 # /usr/include/X11/X.h:287 VisibilityUnobscured = 0 # /usr/include/X11/X.h:291 VisibilityPartiallyObscured = 1 # /usr/include/X11/X.h:292 VisibilityFullyObscured = 2 # /usr/include/X11/X.h:293 PlaceOnTop = 0 # /usr/include/X11/X.h:297 PlaceOnBottom = 1 # /usr/include/X11/X.h:298 FamilyInternet = 0 # /usr/include/X11/X.h:302 FamilyDECnet = 1 # /usr/include/X11/X.h:303 FamilyChaos = 2 # /usr/include/X11/X.h:304 FamilyInternet6 = 6 # /usr/include/X11/X.h:305 FamilyServerInterpreted = 5 # /usr/include/X11/X.h:308 PropertyNewValue = 0 # /usr/include/X11/X.h:312 PropertyDelete = 1 # /usr/include/X11/X.h:313 ColormapUninstalled = 0 # /usr/include/X11/X.h:317 ColormapInstalled = 1 # /usr/include/X11/X.h:318 GrabModeSync = 0 # /usr/include/X11/X.h:322 GrabModeAsync = 1 # /usr/include/X11/X.h:323 GrabSuccess = 0 # /usr/include/X11/X.h:327 AlreadyGrabbed = 1 # /usr/include/X11/X.h:328 GrabInvalidTime = 2 # /usr/include/X11/X.h:329 GrabNotViewable = 3 # /usr/include/X11/X.h:330 GrabFrozen = 4 # /usr/include/X11/X.h:331 AsyncPointer = 0 # /usr/include/X11/X.h:335 SyncPointer = 1 # /usr/include/X11/X.h:336 ReplayPointer = 2 # /usr/include/X11/X.h:337 AsyncKeyboard = 3 # /usr/include/X11/X.h:338 SyncKeyboard = 4 # /usr/include/X11/X.h:339 ReplayKeyboard = 5 # /usr/include/X11/X.h:340 AsyncBoth = 6 # /usr/include/X11/X.h:341 SyncBoth = 7 # /usr/include/X11/X.h:342 RevertToParent = 2 # /usr/include/X11/X.h:348 Success = 0 # /usr/include/X11/X.h:354 BadRequest = 1 # /usr/include/X11/X.h:355 BadValue = 2 # /usr/include/X11/X.h:356 BadWindow = 3 # /usr/include/X11/X.h:357 BadPixmap = 4 # /usr/include/X11/X.h:358 BadAtom = 5 # /usr/include/X11/X.h:359 BadCursor = 6 # /usr/include/X11/X.h:360 BadFont = 7 # /usr/include/X11/X.h:361 BadMatch = 8 # /usr/include/X11/X.h:362 BadDrawable = 9 # /usr/include/X11/X.h:363 BadAccess = 10 # /usr/include/X11/X.h:364 BadAlloc = 11 # /usr/include/X11/X.h:373 BadColor = 12 # /usr/include/X11/X.h:374 BadGC = 13 # /usr/include/X11/X.h:375 BadIDChoice = 14 # /usr/include/X11/X.h:376 BadName = 15 # /usr/include/X11/X.h:377 BadLength = 16 # /usr/include/X11/X.h:378 BadImplementation = 17 # /usr/include/X11/X.h:379 FirstExtensionError = 128 # /usr/include/X11/X.h:381 LastExtensionError = 255 # /usr/include/X11/X.h:382 InputOutput = 1 # /usr/include/X11/X.h:391 InputOnly = 2 # /usr/include/X11/X.h:392 CWBackPixmap = 1 # /usr/include/X11/X.h:396 CWBackPixel = 2 # /usr/include/X11/X.h:397 CWBorderPixmap = 4 # /usr/include/X11/X.h:398 CWBorderPixel = 8 # /usr/include/X11/X.h:399 CWBitGravity = 16 # /usr/include/X11/X.h:400 CWWinGravity = 32 # /usr/include/X11/X.h:401 CWBackingStore = 64 # /usr/include/X11/X.h:402 CWBackingPlanes = 128 # /usr/include/X11/X.h:403 CWBackingPixel = 256 # /usr/include/X11/X.h:404 CWOverrideRedirect = 512 # /usr/include/X11/X.h:405 CWSaveUnder = 1024 # /usr/include/X11/X.h:406 CWEventMask = 2048 # /usr/include/X11/X.h:407 CWDontPropagate = 4096 # /usr/include/X11/X.h:408 CWColormap = 8192 # /usr/include/X11/X.h:409 CWCursor = 16384 # /usr/include/X11/X.h:410 CWX = 1 # /usr/include/X11/X.h:414 CWY = 2 # /usr/include/X11/X.h:415 CWWidth = 4 # /usr/include/X11/X.h:416 CWHeight = 8 # /usr/include/X11/X.h:417 CWBorderWidth = 16 # /usr/include/X11/X.h:418 CWSibling = 32 # /usr/include/X11/X.h:419 CWStackMode = 64 # /usr/include/X11/X.h:420 ForgetGravity = 0 # /usr/include/X11/X.h:425 NorthWestGravity = 1 # /usr/include/X11/X.h:426 NorthGravity = 2 # /usr/include/X11/X.h:427 NorthEastGravity = 3 # /usr/include/X11/X.h:428 WestGravity = 4 # /usr/include/X11/X.h:429 CenterGravity = 5 # /usr/include/X11/X.h:430 EastGravity = 6 # /usr/include/X11/X.h:431 SouthWestGravity = 7 # /usr/include/X11/X.h:432 SouthGravity = 8 # /usr/include/X11/X.h:433 SouthEastGravity = 9 # /usr/include/X11/X.h:434 StaticGravity = 10 # /usr/include/X11/X.h:435 UnmapGravity = 0 # /usr/include/X11/X.h:439 NotUseful = 0 # /usr/include/X11/X.h:443 WhenMapped = 1 # /usr/include/X11/X.h:444 Always = 2 # /usr/include/X11/X.h:445 IsUnmapped = 0 # /usr/include/X11/X.h:449 IsUnviewable = 1 # /usr/include/X11/X.h:450 IsViewable = 2 # /usr/include/X11/X.h:451 SetModeInsert = 0 # /usr/include/X11/X.h:455 SetModeDelete = 1 # /usr/include/X11/X.h:456 DestroyAll = 0 # /usr/include/X11/X.h:460 RetainPermanent = 1 # /usr/include/X11/X.h:461 RetainTemporary = 2 # /usr/include/X11/X.h:462 Above = 0 # /usr/include/X11/X.h:466 Below = 1 # /usr/include/X11/X.h:467 TopIf = 2 # /usr/include/X11/X.h:468 BottomIf = 3 # /usr/include/X11/X.h:469 Opposite = 4 # /usr/include/X11/X.h:470 RaiseLowest = 0 # /usr/include/X11/X.h:474 LowerHighest = 1 # /usr/include/X11/X.h:475 PropModeReplace = 0 # /usr/include/X11/X.h:479 PropModePrepend = 1 # /usr/include/X11/X.h:480 PropModeAppend = 2 # /usr/include/X11/X.h:481 GXclear = 0 # /usr/include/X11/X.h:489 GXand = 1 # /usr/include/X11/X.h:490 GXandReverse = 2 # /usr/include/X11/X.h:491 GXcopy = 3 # /usr/include/X11/X.h:492 GXandInverted = 4 # /usr/include/X11/X.h:493 GXnoop = 5 # /usr/include/X11/X.h:494 GXxor = 6 # /usr/include/X11/X.h:495 GXor = 7 # /usr/include/X11/X.h:496 GXnor = 8 # /usr/include/X11/X.h:497 GXequiv = 9 # /usr/include/X11/X.h:498 GXinvert = 10 # /usr/include/X11/X.h:499 GXorReverse = 11 # /usr/include/X11/X.h:500 GXcopyInverted = 12 # /usr/include/X11/X.h:501 GXorInverted = 13 # /usr/include/X11/X.h:502 GXnand = 14 # /usr/include/X11/X.h:503 GXset = 15 # /usr/include/X11/X.h:504 LineSolid = 0 # /usr/include/X11/X.h:508 LineOnOffDash = 1 # /usr/include/X11/X.h:509 LineDoubleDash = 2 # /usr/include/X11/X.h:510 CapNotLast = 0 # /usr/include/X11/X.h:514 CapButt = 1 # /usr/include/X11/X.h:515 CapRound = 2 # /usr/include/X11/X.h:516 CapProjecting = 3 # /usr/include/X11/X.h:517 JoinMiter = 0 # /usr/include/X11/X.h:521 JoinRound = 1 # /usr/include/X11/X.h:522 JoinBevel = 2 # /usr/include/X11/X.h:523 FillSolid = 0 # /usr/include/X11/X.h:527 FillTiled = 1 # /usr/include/X11/X.h:528 FillStippled = 2 # /usr/include/X11/X.h:529 FillOpaqueStippled = 3 # /usr/include/X11/X.h:530 EvenOddRule = 0 # /usr/include/X11/X.h:534 WindingRule = 1 # /usr/include/X11/X.h:535 ClipByChildren = 0 # /usr/include/X11/X.h:539 IncludeInferiors = 1 # /usr/include/X11/X.h:540 Unsorted = 0 # /usr/include/X11/X.h:544 YSorted = 1 # /usr/include/X11/X.h:545 YXSorted = 2 # /usr/include/X11/X.h:546 YXBanded = 3 # /usr/include/X11/X.h:547 CoordModeOrigin = 0 # /usr/include/X11/X.h:551 CoordModePrevious = 1 # /usr/include/X11/X.h:552 Complex = 0 # /usr/include/X11/X.h:556 Nonconvex = 1 # /usr/include/X11/X.h:557 Convex = 2 # /usr/include/X11/X.h:558 ArcChord = 0 # /usr/include/X11/X.h:562 ArcPieSlice = 1 # /usr/include/X11/X.h:563 GCFunction = 1 # /usr/include/X11/X.h:568 GCPlaneMask = 2 # /usr/include/X11/X.h:569 GCForeground = 4 # /usr/include/X11/X.h:570 GCBackground = 8 # /usr/include/X11/X.h:571 GCLineWidth = 16 # /usr/include/X11/X.h:572 GCLineStyle = 32 # /usr/include/X11/X.h:573 GCCapStyle = 64 # /usr/include/X11/X.h:574 GCJoinStyle = 128 # /usr/include/X11/X.h:575 GCFillStyle = 256 # /usr/include/X11/X.h:576 GCFillRule = 512 # /usr/include/X11/X.h:577 GCTile = 1024 # /usr/include/X11/X.h:578 GCStipple = 2048 # /usr/include/X11/X.h:579 GCTileStipXOrigin = 4096 # /usr/include/X11/X.h:580 GCTileStipYOrigin = 8192 # /usr/include/X11/X.h:581 GCFont = 16384 # /usr/include/X11/X.h:582 GCSubwindowMode = 32768 # /usr/include/X11/X.h:583 GCGraphicsExposures = 65536 # /usr/include/X11/X.h:584 GCClipXOrigin = 131072 # /usr/include/X11/X.h:585 GCClipYOrigin = 262144 # /usr/include/X11/X.h:586 GCClipMask = 524288 # /usr/include/X11/X.h:587 GCDashOffset = 1048576 # /usr/include/X11/X.h:588 GCDashList = 2097152 # /usr/include/X11/X.h:589 GCArcMode = 4194304 # /usr/include/X11/X.h:590 GCLastBit = 22 # /usr/include/X11/X.h:592 FontLeftToRight = 0 # /usr/include/X11/X.h:599 FontRightToLeft = 1 # /usr/include/X11/X.h:600 FontChange = 255 # /usr/include/X11/X.h:602 XYBitmap = 0 # /usr/include/X11/X.h:610 XYPixmap = 1 # /usr/include/X11/X.h:611 ZPixmap = 2 # /usr/include/X11/X.h:612 AllocNone = 0 # /usr/include/X11/X.h:620 AllocAll = 1 # /usr/include/X11/X.h:621 DoRed = 1 # /usr/include/X11/X.h:626 DoGreen = 2 # /usr/include/X11/X.h:627 DoBlue = 4 # /usr/include/X11/X.h:628 CursorShape = 0 # /usr/include/X11/X.h:636 TileShape = 1 # /usr/include/X11/X.h:637 StippleShape = 2 # /usr/include/X11/X.h:638 AutoRepeatModeOff = 0 # /usr/include/X11/X.h:644 AutoRepeatModeOn = 1 # /usr/include/X11/X.h:645 AutoRepeatModeDefault = 2 # /usr/include/X11/X.h:646 LedModeOff = 0 # /usr/include/X11/X.h:648 LedModeOn = 1 # /usr/include/X11/X.h:649 KBKeyClickPercent = 1 # /usr/include/X11/X.h:653 KBBellPercent = 2 # /usr/include/X11/X.h:654 KBBellPitch = 4 # /usr/include/X11/X.h:655 KBBellDuration = 8 # /usr/include/X11/X.h:656 KBLed = 16 # /usr/include/X11/X.h:657 KBLedMode = 32 # /usr/include/X11/X.h:658 KBKey = 64 # /usr/include/X11/X.h:659 KBAutoRepeatMode = 128 # /usr/include/X11/X.h:660 MappingSuccess = 0 # /usr/include/X11/X.h:662 MappingBusy = 1 # /usr/include/X11/X.h:663 MappingFailed = 2 # /usr/include/X11/X.h:664 MappingModifier = 0 # /usr/include/X11/X.h:666 MappingKeyboard = 1 # /usr/include/X11/X.h:667 MappingPointer = 2 # /usr/include/X11/X.h:668 DontPreferBlanking = 0 # /usr/include/X11/X.h:674 PreferBlanking = 1 # /usr/include/X11/X.h:675 DefaultBlanking = 2 # /usr/include/X11/X.h:676 DisableScreenSaver = 0 # /usr/include/X11/X.h:678 DisableScreenInterval = 0 # /usr/include/X11/X.h:679 DontAllowExposures = 0 # /usr/include/X11/X.h:681 AllowExposures = 1 # /usr/include/X11/X.h:682 DefaultExposures = 2 # /usr/include/X11/X.h:683 ScreenSaverReset = 0 # /usr/include/X11/X.h:687 ScreenSaverActive = 1 # /usr/include/X11/X.h:688 HostInsert = 0 # /usr/include/X11/X.h:696 HostDelete = 1 # /usr/include/X11/X.h:697 EnableAccess = 1 # /usr/include/X11/X.h:701 DisableAccess = 0 # /usr/include/X11/X.h:702 StaticGray = 0 # /usr/include/X11/X.h:708 GrayScale = 1 # /usr/include/X11/X.h:709 StaticColor = 2 # /usr/include/X11/X.h:710 PseudoColor = 3 # /usr/include/X11/X.h:711 TrueColor = 4 # /usr/include/X11/X.h:712 DirectColor = 5 # /usr/include/X11/X.h:713 LSBFirst = 0 # /usr/include/X11/X.h:718 MSBFirst = 1 # /usr/include/X11/X.h:719 # /usr/include/X11/Xlib.h:94 _Xmblen = _lib._Xmblen _Xmblen.restype = c_int _Xmblen.argtypes = [c_char_p, c_int] X_HAVE_UTF8_STRING = 1 # /usr/include/X11/Xlib.h:106 XPointer = pyglet.gl.glx.XPointer Bool = c_int # /usr/include/X11/Xlib.h:110 Status = c_int # /usr/include/X11/Xlib.h:111 True = 1 # /usr/include/X11/Xlib.h:112 False = 0 # /usr/include/X11/Xlib.h:113 QueuedAlready = 0 # /usr/include/X11/Xlib.h:115 QueuedAfterReading = 1 # /usr/include/X11/Xlib.h:116 QueuedAfterFlush = 2 # /usr/include/X11/Xlib.h:117 XExtData = pyglet.gl.glx.XExtData class struct_anon_15(Structure): __slots__ = [ 'extension', 'major_opcode', 'first_event', 'first_error', ] struct_anon_15._fields_ = [ ('extension', c_int), ('major_opcode', c_int), ('first_event', c_int), ('first_error', c_int), ] XExtCodes = struct_anon_15 # /usr/include/X11/Xlib.h:197 class struct_anon_16(Structure): __slots__ = [ 'depth', 'bits_per_pixel', 'scanline_pad', ] struct_anon_16._fields_ = [ ('depth', c_int), ('bits_per_pixel', c_int), ('scanline_pad', c_int), ] XPixmapFormatValues = struct_anon_16 # /usr/include/X11/Xlib.h:207 class struct_anon_17(Structure): __slots__ = [ 'function', 'plane_mask', 'foreground', 'background', 'line_width', 'line_style', 'cap_style', 'join_style', 'fill_style', 'fill_rule', 'arc_mode', 'tile', 'stipple', 'ts_x_origin', 'ts_y_origin', 'font', 'subwindow_mode', 'graphics_exposures', 'clip_x_origin', 'clip_y_origin', 'clip_mask', 'dash_offset', 'dashes', ] struct_anon_17._fields_ = [ ('function', c_int), ('plane_mask', c_ulong), ('foreground', c_ulong), ('background', c_ulong), ('line_width', c_int), ('line_style', c_int), ('cap_style', c_int), ('join_style', c_int), ('fill_style', c_int), ('fill_rule', c_int), ('arc_mode', c_int), ('tile', Pixmap), ('stipple', Pixmap), ('ts_x_origin', c_int), ('ts_y_origin', c_int), ('font', Font), ('subwindow_mode', c_int), ('graphics_exposures', c_int), ('clip_x_origin', c_int), ('clip_y_origin', c_int), ('clip_mask', Pixmap), ('dash_offset', c_int), ('dashes', c_char), ] XGCValues = struct_anon_17 # /usr/include/X11/Xlib.h:239 class struct__XGC(Structure): __slots__ = [ ] struct__XGC._fields_ = [ ('_opaque_struct', c_int) ] class struct__XGC(Structure): __slots__ = [ ] struct__XGC._fields_ = [ ('_opaque_struct', c_int) ] GC = POINTER(struct__XGC) # /usr/include/X11/Xlib.h:254 Visual = pyglet.gl.glx.Visual class struct_anon_19(Structure): __slots__ = [ 'depth', 'nvisuals', 'visuals', ] struct_anon_19._fields_ = [ ('depth', c_int), ('nvisuals', c_int), ('visuals', POINTER(Visual)), ] Depth = struct_anon_19 # /usr/include/X11/Xlib.h:279 class struct_anon_20(Structure): __slots__ = [ 'ext_data', 'display', 'root', 'width', 'height', 'mwidth', 'mheight', 'ndepths', 'depths', 'root_depth', 'root_visual', 'default_gc', 'cmap', 'white_pixel', 'black_pixel', 'max_maps', 'min_maps', 'backing_store', 'save_unders', 'root_input_mask', ] class struct__XDisplay(Structure): __slots__ = [ ] struct__XDisplay._fields_ = [ ('_opaque_struct', c_int) ] struct_anon_20._fields_ = [ ('ext_data', POINTER(XExtData)), ('display', POINTER(struct__XDisplay)), ('root', Window), ('width', c_int), ('height', c_int), ('mwidth', c_int), ('mheight', c_int), ('ndepths', c_int), ('depths', POINTER(Depth)), ('root_depth', c_int), ('root_visual', POINTER(Visual)), ('default_gc', GC), ('cmap', Colormap), ('white_pixel', c_ulong), ('black_pixel', c_ulong), ('max_maps', c_int), ('min_maps', c_int), ('backing_store', c_int), ('save_unders', c_int), ('root_input_mask', c_long), ] Screen = struct_anon_20 # /usr/include/X11/Xlib.h:307 class struct_anon_21(Structure): __slots__ = [ 'ext_data', 'depth', 'bits_per_pixel', 'scanline_pad', ] struct_anon_21._fields_ = [ ('ext_data', POINTER(XExtData)), ('depth', c_int), ('bits_per_pixel', c_int), ('scanline_pad', c_int), ] ScreenFormat = struct_anon_21 # /usr/include/X11/Xlib.h:317 class struct_anon_22(Structure): __slots__ = [ 'background_pixmap', 'background_pixel', 'border_pixmap', 'border_pixel', 'bit_gravity', 'win_gravity', 'backing_store', 'backing_planes', 'backing_pixel', 'save_under', 'event_mask', 'do_not_propagate_mask', 'override_redirect', 'colormap', 'cursor', ] struct_anon_22._fields_ = [ ('background_pixmap', Pixmap), ('background_pixel', c_ulong), ('border_pixmap', Pixmap), ('border_pixel', c_ulong), ('bit_gravity', c_int), ('win_gravity', c_int), ('backing_store', c_int), ('backing_planes', c_ulong), ('backing_pixel', c_ulong), ('save_under', c_int), ('event_mask', c_long), ('do_not_propagate_mask', c_long), ('override_redirect', c_int), ('colormap', Colormap), ('cursor', Cursor), ] XSetWindowAttributes = struct_anon_22 # /usr/include/X11/Xlib.h:338 class struct_anon_23(Structure): __slots__ = [ 'x', 'y', 'width', 'height', 'border_width', 'depth', 'visual', 'root', 'class', 'bit_gravity', 'win_gravity', 'backing_store', 'backing_planes', 'backing_pixel', 'save_under', 'colormap', 'map_installed', 'map_state', 'all_event_masks', 'your_event_mask', 'do_not_propagate_mask', 'override_redirect', 'screen', ] struct_anon_23._fields_ = [ ('x', c_int), ('y', c_int), ('width', c_int), ('height', c_int), ('border_width', c_int), ('depth', c_int), ('visual', POINTER(Visual)), ('root', Window), ('class', c_int), ('bit_gravity', c_int), ('win_gravity', c_int), ('backing_store', c_int), ('backing_planes', c_ulong), ('backing_pixel', c_ulong), ('save_under', c_int), ('colormap', Colormap), ('map_installed', c_int), ('map_state', c_int), ('all_event_masks', c_long), ('your_event_mask', c_long), ('do_not_propagate_mask', c_long), ('override_redirect', c_int), ('screen', POINTER(Screen)), ] XWindowAttributes = struct_anon_23 # /usr/include/X11/Xlib.h:366 class struct_anon_24(Structure): __slots__ = [ 'family', 'length', 'address', ] struct_anon_24._fields_ = [ ('family', c_int), ('length', c_int), ('address', c_char_p), ] XHostAddress = struct_anon_24 # /usr/include/X11/Xlib.h:377 class struct_anon_25(Structure): __slots__ = [ 'typelength', 'valuelength', 'type', 'value', ] struct_anon_25._fields_ = [ ('typelength', c_int), ('valuelength', c_int), ('type', c_char_p), ('value', c_char_p), ] XServerInterpretedAddress = struct_anon_25 # /usr/include/X11/Xlib.h:387 class struct__XImage(Structure): __slots__ = [ 'width', 'height', 'xoffset', 'format', 'data', 'byte_order', 'bitmap_unit', 'bitmap_bit_order', 'bitmap_pad', 'depth', 'bytes_per_line', 'bits_per_pixel', 'red_mask', 'green_mask', 'blue_mask', 'obdata', 'f', ] class struct_funcs(Structure): __slots__ = [ 'create_image', 'destroy_image', 'get_pixel', 'put_pixel', 'sub_image', 'add_pixel', ] class struct__XDisplay(Structure): __slots__ = [ ] struct__XDisplay._fields_ = [ ('_opaque_struct', c_int) ] struct_funcs._fields_ = [ ('create_image', POINTER(CFUNCTYPE(POINTER(struct__XImage), POINTER(struct__XDisplay), POINTER(Visual), c_uint, c_int, c_int, c_char_p, c_uint, c_uint, c_int, c_int))), ('destroy_image', POINTER(CFUNCTYPE(c_int, POINTER(struct__XImage)))), ('get_pixel', POINTER(CFUNCTYPE(c_ulong, POINTER(struct__XImage), c_int, c_int))), ('put_pixel', POINTER(CFUNCTYPE(c_int, POINTER(struct__XImage), c_int, c_int, c_ulong))), ('sub_image', POINTER(CFUNCTYPE(POINTER(struct__XImage), POINTER(struct__XImage), c_int, c_int, c_uint, c_uint))), ('add_pixel', POINTER(CFUNCTYPE(c_int, POINTER(struct__XImage), c_long))), ] struct__XImage._fields_ = [ ('width', c_int), ('height', c_int), ('xoffset', c_int), ('format', c_int), ('data', c_char_p), ('byte_order', c_int), ('bitmap_unit', c_int), ('bitmap_bit_order', c_int), ('bitmap_pad', c_int), ('depth', c_int), ('bytes_per_line', c_int), ('bits_per_pixel', c_int), ('red_mask', c_ulong), ('green_mask', c_ulong), ('blue_mask', c_ulong), ('obdata', XPointer), ('f', struct_funcs), ] XImage = struct__XImage # /usr/include/X11/Xlib.h:426 class struct_anon_26(Structure): __slots__ = [ 'x', 'y', 'width', 'height', 'border_width', 'sibling', 'stack_mode', ] struct_anon_26._fields_ = [ ('x', c_int), ('y', c_int), ('width', c_int), ('height', c_int), ('border_width', c_int), ('sibling', Window), ('stack_mode', c_int), ] XWindowChanges = struct_anon_26 # /usr/include/X11/Xlib.h:437 class struct_anon_27(Structure): __slots__ = [ 'pixel', 'red', 'green', 'blue', 'flags', 'pad', ] struct_anon_27._fields_ = [ ('pixel', c_ulong), ('red', c_ushort), ('green', c_ushort), ('blue', c_ushort), ('flags', c_char), ('pad', c_char), ] XColor = struct_anon_27 # /usr/include/X11/Xlib.h:447 class struct_anon_28(Structure): __slots__ = [ 'x1', 'y1', 'x2', 'y2', ] struct_anon_28._fields_ = [ ('x1', c_short), ('y1', c_short), ('x2', c_short), ('y2', c_short), ] XSegment = struct_anon_28 # /usr/include/X11/Xlib.h:456 class struct_anon_29(Structure): __slots__ = [ 'x', 'y', ] struct_anon_29._fields_ = [ ('x', c_short), ('y', c_short), ] XPoint = struct_anon_29 # /usr/include/X11/Xlib.h:460 class struct_anon_30(Structure): __slots__ = [ 'x', 'y', 'width', 'height', ] struct_anon_30._fields_ = [ ('x', c_short), ('y', c_short), ('width', c_ushort), ('height', c_ushort), ] XRectangle = struct_anon_30 # /usr/include/X11/Xlib.h:465 class struct_anon_31(Structure): __slots__ = [ 'x', 'y', 'width', 'height', 'angle1', 'angle2', ] struct_anon_31._fields_ = [ ('x', c_short), ('y', c_short), ('width', c_ushort), ('height', c_ushort), ('angle1', c_short), ('angle2', c_short), ] XArc = struct_anon_31 # /usr/include/X11/Xlib.h:471 class struct_anon_32(Structure): __slots__ = [ 'key_click_percent', 'bell_percent', 'bell_pitch', 'bell_duration', 'led', 'led_mode', 'key', 'auto_repeat_mode', ] struct_anon_32._fields_ = [ ('key_click_percent', c_int), ('bell_percent', c_int), ('bell_pitch', c_int), ('bell_duration', c_int), ('led', c_int), ('led_mode', c_int), ('key', c_int), ('auto_repeat_mode', c_int), ] XKeyboardControl = struct_anon_32 # /usr/include/X11/Xlib.h:485 class struct_anon_33(Structure): __slots__ = [ 'key_click_percent', 'bell_percent', 'bell_pitch', 'bell_duration', 'led_mask', 'global_auto_repeat', 'auto_repeats', ] struct_anon_33._fields_ = [ ('key_click_percent', c_int), ('bell_percent', c_int), ('bell_pitch', c_uint), ('bell_duration', c_uint), ('led_mask', c_ulong), ('global_auto_repeat', c_int), ('auto_repeats', c_char * 32), ] XKeyboardState = struct_anon_33 # /usr/include/X11/Xlib.h:496 class struct_anon_34(Structure): __slots__ = [ 'time', 'x', 'y', ] struct_anon_34._fields_ = [ ('time', Time), ('x', c_short), ('y', c_short), ] XTimeCoord = struct_anon_34 # /usr/include/X11/Xlib.h:503 class struct_anon_35(Structure): __slots__ = [ 'max_keypermod', 'modifiermap', ] struct_anon_35._fields_ = [ ('max_keypermod', c_int), ('modifiermap', POINTER(KeyCode)), ] XModifierKeymap = struct_anon_35 # /usr/include/X11/Xlib.h:510 Display = pyglet.gl.glx.Display class struct_anon_36(Structure): __slots__ = [ 'ext_data', 'private1', 'fd', 'private2', 'proto_major_version', 'proto_minor_version', 'vendor', 'private3', 'private4', 'private5', 'private6', 'resource_alloc', 'byte_order', 'bitmap_unit', 'bitmap_pad', 'bitmap_bit_order', 'nformats', 'pixmap_format', 'private8', 'release', 'private9', 'private10', 'qlen', 'last_request_read', 'request', 'private11', 'private12', 'private13', 'private14', 'max_request_size', 'db', 'private15', 'display_name', 'default_screen', 'nscreens', 'screens', 'motion_buffer', 'private16', 'min_keycode', 'max_keycode', 'private17', 'private18', 'private19', 'xdefaults', ] class struct__XPrivate(Structure): __slots__ = [ ] struct__XPrivate._fields_ = [ ('_opaque_struct', c_int) ] class struct__XDisplay(Structure): __slots__ = [ ] struct__XDisplay._fields_ = [ ('_opaque_struct', c_int) ] class struct__XPrivate(Structure): __slots__ = [ ] struct__XPrivate._fields_ = [ ('_opaque_struct', c_int) ] class struct__XPrivate(Structure): __slots__ = [ ] struct__XPrivate._fields_ = [ ('_opaque_struct', c_int) ] class struct__XrmHashBucketRec(Structure): __slots__ = [ ] struct__XrmHashBucketRec._fields_ = [ ('_opaque_struct', c_int) ] class struct__XDisplay(Structure): __slots__ = [ ] struct__XDisplay._fields_ = [ ('_opaque_struct', c_int) ] struct_anon_36._fields_ = [ ('ext_data', POINTER(XExtData)), ('private1', POINTER(struct__XPrivate)), ('fd', c_int), ('private2', c_int), ('proto_major_version', c_int), ('proto_minor_version', c_int), ('vendor', c_char_p), ('private3', XID), ('private4', XID), ('private5', XID), ('private6', c_int), ('resource_alloc', POINTER(CFUNCTYPE(XID, POINTER(struct__XDisplay)))), ('byte_order', c_int), ('bitmap_unit', c_int), ('bitmap_pad', c_int), ('bitmap_bit_order', c_int), ('nformats', c_int), ('pixmap_format', POINTER(ScreenFormat)), ('private8', c_int), ('release', c_int), ('private9', POINTER(struct__XPrivate)), ('private10', POINTER(struct__XPrivate)), ('qlen', c_int), ('last_request_read', c_ulong), ('request', c_ulong), ('private11', XPointer), ('private12', XPointer), ('private13', XPointer), ('private14', XPointer), ('max_request_size', c_uint), ('db', POINTER(struct__XrmHashBucketRec)), ('private15', POINTER(CFUNCTYPE(c_int, POINTER(struct__XDisplay)))), ('display_name', c_char_p), ('default_screen', c_int), ('nscreens', c_int), ('screens', POINTER(Screen)), ('motion_buffer', c_ulong), ('private16', c_ulong), ('min_keycode', c_int), ('max_keycode', c_int), ('private17', XPointer), ('private18', XPointer), ('private19', c_int), ('xdefaults', c_char_p), ] _XPrivDisplay = POINTER(struct_anon_36) # /usr/include/X11/Xlib.h:582 class struct_anon_37(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'window', 'root', 'subwindow', 'time', 'x', 'y', 'x_root', 'y_root', 'state', 'keycode', 'same_screen', ] struct_anon_37._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('window', Window), ('root', Window), ('subwindow', Window), ('time', Time), ('x', c_int), ('y', c_int), ('x_root', c_int), ('y_root', c_int), ('state', c_uint), ('keycode', c_uint), ('same_screen', c_int), ] XKeyEvent = struct_anon_37 # /usr/include/X11/Xlib.h:603 XKeyPressedEvent = XKeyEvent # /usr/include/X11/Xlib.h:604 XKeyReleasedEvent = XKeyEvent # /usr/include/X11/Xlib.h:605 class struct_anon_38(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'window', 'root', 'subwindow', 'time', 'x', 'y', 'x_root', 'y_root', 'state', 'button', 'same_screen', ] struct_anon_38._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('window', Window), ('root', Window), ('subwindow', Window), ('time', Time), ('x', c_int), ('y', c_int), ('x_root', c_int), ('y_root', c_int), ('state', c_uint), ('button', c_uint), ('same_screen', c_int), ] XButtonEvent = struct_anon_38 # /usr/include/X11/Xlib.h:621 XButtonPressedEvent = XButtonEvent # /usr/include/X11/Xlib.h:622 XButtonReleasedEvent = XButtonEvent # /usr/include/X11/Xlib.h:623 class struct_anon_39(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'window', 'root', 'subwindow', 'time', 'x', 'y', 'x_root', 'y_root', 'state', 'is_hint', 'same_screen', ] struct_anon_39._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('window', Window), ('root', Window), ('subwindow', Window), ('time', Time), ('x', c_int), ('y', c_int), ('x_root', c_int), ('y_root', c_int), ('state', c_uint), ('is_hint', c_char), ('same_screen', c_int), ] XMotionEvent = struct_anon_39 # /usr/include/X11/Xlib.h:639 XPointerMovedEvent = XMotionEvent # /usr/include/X11/Xlib.h:640 class struct_anon_40(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'window', 'root', 'subwindow', 'time', 'x', 'y', 'x_root', 'y_root', 'mode', 'detail', 'same_screen', 'focus', 'state', ] struct_anon_40._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('window', Window), ('root', Window), ('subwindow', Window), ('time', Time), ('x', c_int), ('y', c_int), ('x_root', c_int), ('y_root', c_int), ('mode', c_int), ('detail', c_int), ('same_screen', c_int), ('focus', c_int), ('state', c_uint), ] XCrossingEvent = struct_anon_40 # /usr/include/X11/Xlib.h:662 XEnterWindowEvent = XCrossingEvent # /usr/include/X11/Xlib.h:663 XLeaveWindowEvent = XCrossingEvent # /usr/include/X11/Xlib.h:664 class struct_anon_41(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'window', 'mode', 'detail', ] struct_anon_41._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('window', Window), ('mode', c_int), ('detail', c_int), ] XFocusChangeEvent = struct_anon_41 # /usr/include/X11/Xlib.h:680 XFocusInEvent = XFocusChangeEvent # /usr/include/X11/Xlib.h:681 XFocusOutEvent = XFocusChangeEvent # /usr/include/X11/Xlib.h:682 class struct_anon_42(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'window', 'key_vector', ] struct_anon_42._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('window', Window), ('key_vector', c_char * 32), ] XKeymapEvent = struct_anon_42 # /usr/include/X11/Xlib.h:692 class struct_anon_43(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'window', 'x', 'y', 'width', 'height', 'count', ] struct_anon_43._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('window', Window), ('x', c_int), ('y', c_int), ('width', c_int), ('height', c_int), ('count', c_int), ] XExposeEvent = struct_anon_43 # /usr/include/X11/Xlib.h:703 class struct_anon_44(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'drawable', 'x', 'y', 'width', 'height', 'count', 'major_code', 'minor_code', ] struct_anon_44._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('drawable', Drawable), ('x', c_int), ('y', c_int), ('width', c_int), ('height', c_int), ('count', c_int), ('major_code', c_int), ('minor_code', c_int), ] XGraphicsExposeEvent = struct_anon_44 # /usr/include/X11/Xlib.h:716 class struct_anon_45(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'drawable', 'major_code', 'minor_code', ] struct_anon_45._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('drawable', Drawable), ('major_code', c_int), ('minor_code', c_int), ] XNoExposeEvent = struct_anon_45 # /usr/include/X11/Xlib.h:726 class struct_anon_46(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'window', 'state', ] struct_anon_46._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('window', Window), ('state', c_int), ] XVisibilityEvent = struct_anon_46 # /usr/include/X11/Xlib.h:735 class struct_anon_47(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'parent', 'window', 'x', 'y', 'width', 'height', 'border_width', 'override_redirect', ] struct_anon_47._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('parent', Window), ('window', Window), ('x', c_int), ('y', c_int), ('width', c_int), ('height', c_int), ('border_width', c_int), ('override_redirect', c_int), ] XCreateWindowEvent = struct_anon_47 # /usr/include/X11/Xlib.h:748 class struct_anon_48(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'event', 'window', ] struct_anon_48._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('event', Window), ('window', Window), ] XDestroyWindowEvent = struct_anon_48 # /usr/include/X11/Xlib.h:757 class struct_anon_49(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'event', 'window', 'from_configure', ] struct_anon_49._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('event', Window), ('window', Window), ('from_configure', c_int), ] XUnmapEvent = struct_anon_49 # /usr/include/X11/Xlib.h:767 class struct_anon_50(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'event', 'window', 'override_redirect', ] struct_anon_50._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('event', Window), ('window', Window), ('override_redirect', c_int), ] XMapEvent = struct_anon_50 # /usr/include/X11/Xlib.h:777 class struct_anon_51(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'parent', 'window', ] struct_anon_51._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('parent', Window), ('window', Window), ] XMapRequestEvent = struct_anon_51 # /usr/include/X11/Xlib.h:786 class struct_anon_52(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'event', 'window', 'parent', 'x', 'y', 'override_redirect', ] struct_anon_52._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('event', Window), ('window', Window), ('parent', Window), ('x', c_int), ('y', c_int), ('override_redirect', c_int), ] XReparentEvent = struct_anon_52 # /usr/include/X11/Xlib.h:798 class struct_anon_53(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'event', 'window', 'x', 'y', 'width', 'height', 'border_width', 'above', 'override_redirect', ] struct_anon_53._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('event', Window), ('window', Window), ('x', c_int), ('y', c_int), ('width', c_int), ('height', c_int), ('border_width', c_int), ('above', Window), ('override_redirect', c_int), ] XConfigureEvent = struct_anon_53 # /usr/include/X11/Xlib.h:812 class struct_anon_54(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'event', 'window', 'x', 'y', ] struct_anon_54._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('event', Window), ('window', Window), ('x', c_int), ('y', c_int), ] XGravityEvent = struct_anon_54 # /usr/include/X11/Xlib.h:822 class struct_anon_55(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'window', 'width', 'height', ] struct_anon_55._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('window', Window), ('width', c_int), ('height', c_int), ] XResizeRequestEvent = struct_anon_55 # /usr/include/X11/Xlib.h:831 class struct_anon_56(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'parent', 'window', 'x', 'y', 'width', 'height', 'border_width', 'above', 'detail', 'value_mask', ] struct_anon_56._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('parent', Window), ('window', Window), ('x', c_int), ('y', c_int), ('width', c_int), ('height', c_int), ('border_width', c_int), ('above', Window), ('detail', c_int), ('value_mask', c_ulong), ] XConfigureRequestEvent = struct_anon_56 # /usr/include/X11/Xlib.h:846 class struct_anon_57(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'event', 'window', 'place', ] struct_anon_57._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('event', Window), ('window', Window), ('place', c_int), ] XCirculateEvent = struct_anon_57 # /usr/include/X11/Xlib.h:856 class struct_anon_58(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'parent', 'window', 'place', ] struct_anon_58._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('parent', Window), ('window', Window), ('place', c_int), ] XCirculateRequestEvent = struct_anon_58 # /usr/include/X11/Xlib.h:866 class struct_anon_59(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'window', 'atom', 'time', 'state', ] struct_anon_59._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('window', Window), ('atom', Atom), ('time', Time), ('state', c_int), ] XPropertyEvent = struct_anon_59 # /usr/include/X11/Xlib.h:877 class struct_anon_60(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'window', 'selection', 'time', ] struct_anon_60._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('window', Window), ('selection', Atom), ('time', Time), ] XSelectionClearEvent = struct_anon_60 # /usr/include/X11/Xlib.h:887 class struct_anon_61(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'owner', 'requestor', 'selection', 'target', 'property', 'time', ] struct_anon_61._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('owner', Window), ('requestor', Window), ('selection', Atom), ('target', Atom), ('property', Atom), ('time', Time), ] XSelectionRequestEvent = struct_anon_61 # /usr/include/X11/Xlib.h:900 class struct_anon_62(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'requestor', 'selection', 'target', 'property', 'time', ] struct_anon_62._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('requestor', Window), ('selection', Atom), ('target', Atom), ('property', Atom), ('time', Time), ] XSelectionEvent = struct_anon_62 # /usr/include/X11/Xlib.h:912 class struct_anon_63(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'window', 'colormap', 'new', 'state', ] struct_anon_63._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('window', Window), ('colormap', Colormap), ('new', c_int), ('state', c_int), ] XColormapEvent = struct_anon_63 # /usr/include/X11/Xlib.h:927 class struct_anon_64(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'window', 'message_type', 'format', 'data', ] class struct_anon_65(Union): __slots__ = [ 'b', 's', 'l', ] struct_anon_65._fields_ = [ ('b', c_char * 20), ('s', c_short * 10), ('l', c_long * 5), ] struct_anon_64._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('window', Window), ('message_type', Atom), ('format', c_int), ('data', struct_anon_65), ] XClientMessageEvent = struct_anon_64 # /usr/include/X11/Xlib.h:942 class struct_anon_66(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'window', 'request', 'first_keycode', 'count', ] struct_anon_66._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('window', Window), ('request', c_int), ('first_keycode', c_int), ('count', c_int), ] XMappingEvent = struct_anon_66 # /usr/include/X11/Xlib.h:954 class struct_anon_67(Structure): __slots__ = [ 'type', 'display', 'resourceid', 'serial', 'error_code', 'request_code', 'minor_code', ] struct_anon_67._fields_ = [ ('type', c_int), ('display', POINTER(Display)), ('resourceid', XID), ('serial', c_ulong), ('error_code', c_ubyte), ('request_code', c_ubyte), ('minor_code', c_ubyte), ] XErrorEvent = struct_anon_67 # /usr/include/X11/Xlib.h:964 class struct_anon_68(Structure): __slots__ = [ 'type', 'serial', 'send_event', 'display', 'window', ] struct_anon_68._fields_ = [ ('type', c_int), ('serial', c_ulong), ('send_event', c_int), ('display', POINTER(Display)), ('window', Window), ] XAnyEvent = struct_anon_68 # /usr/include/X11/Xlib.h:972 class struct__XEvent(Union): __slots__ = [ 'type', 'xany', 'xkey', 'xbutton', 'xmotion', 'xcrossing', 'xfocus', 'xexpose', 'xgraphicsexpose', 'xnoexpose', 'xvisibility', 'xcreatewindow', 'xdestroywindow', 'xunmap', 'xmap', 'xmaprequest', 'xreparent', 'xconfigure', 'xgravity', 'xresizerequest', 'xconfigurerequest', 'xcirculate', 'xcirculaterequest', 'xproperty', 'xselectionclear', 'xselectionrequest', 'xselection', 'xcolormap', 'xclient', 'xmapping', 'xerror', 'xkeymap', 'pad', ] struct__XEvent._fields_ = [ ('type', c_int), ('xany', XAnyEvent), ('xkey', XKeyEvent), ('xbutton', XButtonEvent), ('xmotion', XMotionEvent), ('xcrossing', XCrossingEvent), ('xfocus', XFocusChangeEvent), ('xexpose', XExposeEvent), ('xgraphicsexpose', XGraphicsExposeEvent), ('xnoexpose', XNoExposeEvent), ('xvisibility', XVisibilityEvent), ('xcreatewindow', XCreateWindowEvent), ('xdestroywindow', XDestroyWindowEvent), ('xunmap', XUnmapEvent), ('xmap', XMapEvent), ('xmaprequest', XMapRequestEvent), ('xreparent', XReparentEvent), ('xconfigure', XConfigureEvent), ('xgravity', XGravityEvent), ('xresizerequest', XResizeRequestEvent), ('xconfigurerequest', XConfigureRequestEvent), ('xcirculate', XCirculateEvent), ('xcirculaterequest', XCirculateRequestEvent), ('xproperty', XPropertyEvent), ('xselectionclear', XSelectionClearEvent), ('xselectionrequest', XSelectionRequestEvent), ('xselection', XSelectionEvent), ('xcolormap', XColormapEvent), ('xclient', XClientMessageEvent), ('xmapping', XMappingEvent), ('xerror', XErrorEvent), ('xkeymap', XKeymapEvent), ('pad', c_long * 24), ] XEvent = struct__XEvent # /usr/include/X11/Xlib.h:1012 class struct_anon_69(Structure): __slots__ = [ 'lbearing', 'rbearing', 'width', 'ascent', 'descent', 'attributes', ] struct_anon_69._fields_ = [ ('lbearing', c_short), ('rbearing', c_short), ('width', c_short), ('ascent', c_short), ('descent', c_short), ('attributes', c_ushort), ] XCharStruct = struct_anon_69 # /usr/include/X11/Xlib.h:1027 class struct_anon_70(Structure): __slots__ = [ 'name', 'card32', ] struct_anon_70._fields_ = [ ('name', Atom), ('card32', c_ulong), ] XFontProp = struct_anon_70 # /usr/include/X11/Xlib.h:1036 class struct_anon_71(Structure): __slots__ = [ 'ext_data', 'fid', 'direction', 'min_char_or_byte2', 'max_char_or_byte2', 'min_byte1', 'max_byte1', 'all_chars_exist', 'default_char', 'n_properties', 'properties', 'min_bounds', 'max_bounds', 'per_char', 'ascent', 'descent', ] struct_anon_71._fields_ = [ ('ext_data', POINTER(XExtData)), ('fid', Font), ('direction', c_uint), ('min_char_or_byte2', c_uint), ('max_char_or_byte2', c_uint), ('min_byte1', c_uint), ('max_byte1', c_uint), ('all_chars_exist', c_int), ('default_char', c_uint), ('n_properties', c_int), ('properties', POINTER(XFontProp)), ('min_bounds', XCharStruct), ('max_bounds', XCharStruct), ('per_char', POINTER(XCharStruct)), ('ascent', c_int), ('descent', c_int), ] XFontStruct = struct_anon_71 # /usr/include/X11/Xlib.h:1055 class struct_anon_72(Structure): __slots__ = [ 'chars', 'nchars', 'delta', 'font', ] struct_anon_72._fields_ = [ ('chars', c_char_p), ('nchars', c_int), ('delta', c_int), ('font', Font), ] XTextItem = struct_anon_72 # /usr/include/X11/Xlib.h:1065 class struct_anon_73(Structure): __slots__ = [ 'byte1', 'byte2', ] struct_anon_73._fields_ = [ ('byte1', c_ubyte), ('byte2', c_ubyte), ] XChar2b = struct_anon_73 # /usr/include/X11/Xlib.h:1070 class struct_anon_74(Structure): __slots__ = [ 'chars', 'nchars', 'delta', 'font', ] struct_anon_74._fields_ = [ ('chars', POINTER(XChar2b)), ('nchars', c_int), ('delta', c_int), ('font', Font), ] XTextItem16 = struct_anon_74 # /usr/include/X11/Xlib.h:1077 class struct_anon_75(Union): __slots__ = [ 'display', 'gc', 'visual', 'screen', 'pixmap_format', 'font', ] struct_anon_75._fields_ = [ ('display', POINTER(Display)), ('gc', GC), ('visual', POINTER(Visual)), ('screen', POINTER(Screen)), ('pixmap_format', POINTER(ScreenFormat)), ('font', POINTER(XFontStruct)), ] XEDataObject = struct_anon_75 # /usr/include/X11/Xlib.h:1085 class struct_anon_76(Structure): __slots__ = [ 'max_ink_extent', 'max_logical_extent', ] struct_anon_76._fields_ = [ ('max_ink_extent', XRectangle), ('max_logical_extent', XRectangle), ] XFontSetExtents = struct_anon_76 # /usr/include/X11/Xlib.h:1090 class struct__XOM(Structure): __slots__ = [ ] struct__XOM._fields_ = [ ('_opaque_struct', c_int) ] class struct__XOM(Structure): __slots__ = [ ] struct__XOM._fields_ = [ ('_opaque_struct', c_int) ] XOM = POINTER(struct__XOM) # /usr/include/X11/Xlib.h:1096 class struct__XOC(Structure): __slots__ = [ ] struct__XOC._fields_ = [ ('_opaque_struct', c_int) ] class struct__XOC(Structure): __slots__ = [ ] struct__XOC._fields_ = [ ('_opaque_struct', c_int) ] XOC = POINTER(struct__XOC) # /usr/include/X11/Xlib.h:1097 class struct__XOC(Structure): __slots__ = [ ] struct__XOC._fields_ = [ ('_opaque_struct', c_int) ] class struct__XOC(Structure): __slots__ = [ ] struct__XOC._fields_ = [ ('_opaque_struct', c_int) ] XFontSet = POINTER(struct__XOC) # /usr/include/X11/Xlib.h:1097 class struct_anon_77(Structure): __slots__ = [ 'chars', 'nchars', 'delta', 'font_set', ] struct_anon_77._fields_ = [ ('chars', c_char_p), ('nchars', c_int), ('delta', c_int), ('font_set', XFontSet), ] XmbTextItem = struct_anon_77 # /usr/include/X11/Xlib.h:1104 class struct_anon_78(Structure): __slots__ = [ 'chars', 'nchars', 'delta', 'font_set', ] struct_anon_78._fields_ = [ ('chars', c_wchar_p), ('nchars', c_int), ('delta', c_int), ('font_set', XFontSet), ] XwcTextItem = struct_anon_78 # /usr/include/X11/Xlib.h:1111 class struct_anon_79(Structure): __slots__ = [ 'charset_count', 'charset_list', ] struct_anon_79._fields_ = [ ('charset_count', c_int), ('charset_list', POINTER(c_char_p)), ] XOMCharSetList = struct_anon_79 # /usr/include/X11/Xlib.h:1127 enum_anon_80 = c_int XOMOrientation_LTR_TTB = 0 XOMOrientation_RTL_TTB = 1 XOMOrientation_TTB_LTR = 2 XOMOrientation_TTB_RTL = 3 XOMOrientation_Context = 4 XOrientation = enum_anon_80 # /usr/include/X11/Xlib.h:1135 class struct_anon_81(Structure): __slots__ = [ 'num_orientation', 'orientation', ] struct_anon_81._fields_ = [ ('num_orientation', c_int), ('orientation', POINTER(XOrientation)), ] XOMOrientation = struct_anon_81 # /usr/include/X11/Xlib.h:1140 class struct_anon_82(Structure): __slots__ = [ 'num_font', 'font_struct_list', 'font_name_list', ] struct_anon_82._fields_ = [ ('num_font', c_int), ('font_struct_list', POINTER(POINTER(XFontStruct))), ('font_name_list', POINTER(c_char_p)), ] XOMFontInfo = struct_anon_82 # /usr/include/X11/Xlib.h:1146 class struct__XIM(Structure): __slots__ = [ ] struct__XIM._fields_ = [ ('_opaque_struct', c_int) ] class struct__XIM(Structure): __slots__ = [ ] struct__XIM._fields_ = [ ('_opaque_struct', c_int) ] XIM = POINTER(struct__XIM) # /usr/include/X11/Xlib.h:1148 class struct__XIC(Structure): __slots__ = [ ] struct__XIC._fields_ = [ ('_opaque_struct', c_int) ] class struct__XIC(Structure): __slots__ = [ ] struct__XIC._fields_ = [ ('_opaque_struct', c_int) ] XIC = POINTER(struct__XIC) # /usr/include/X11/Xlib.h:1149 XIMProc = CFUNCTYPE(None, XIM, XPointer, XPointer) # /usr/include/X11/Xlib.h:1151 XICProc = CFUNCTYPE(c_int, XIC, XPointer, XPointer) # /usr/include/X11/Xlib.h:1157 XIDProc = CFUNCTYPE(None, POINTER(Display), XPointer, XPointer) # /usr/include/X11/Xlib.h:1163 XIMStyle = c_ulong # /usr/include/X11/Xlib.h:1169 class struct_anon_83(Structure): __slots__ = [ 'count_styles', 'supported_styles', ] struct_anon_83._fields_ = [ ('count_styles', c_ushort), ('supported_styles', POINTER(XIMStyle)), ] XIMStyles = struct_anon_83 # /usr/include/X11/Xlib.h:1174 XIMPreeditArea = 1 # /usr/include/X11/Xlib.h:1176 XIMPreeditCallbacks = 2 # /usr/include/X11/Xlib.h:1177 XIMPreeditPosition = 4 # /usr/include/X11/Xlib.h:1178 XIMPreeditNothing = 8 # /usr/include/X11/Xlib.h:1179 XIMPreeditNone = 16 # /usr/include/X11/Xlib.h:1180 XIMStatusArea = 256 # /usr/include/X11/Xlib.h:1181 XIMStatusCallbacks = 512 # /usr/include/X11/Xlib.h:1182 XIMStatusNothing = 1024 # /usr/include/X11/Xlib.h:1183 XIMStatusNone = 2048 # /usr/include/X11/Xlib.h:1184 XBufferOverflow = -1 # /usr/include/X11/Xlib.h:1230 XLookupNone = 1 # /usr/include/X11/Xlib.h:1231 XLookupChars = 2 # /usr/include/X11/Xlib.h:1232 XLookupKeySym = 3 # /usr/include/X11/Xlib.h:1233 XLookupBoth = 4 # /usr/include/X11/Xlib.h:1234 XVaNestedList = POINTER(None) # /usr/include/X11/Xlib.h:1236 class struct_anon_84(Structure): __slots__ = [ 'client_data', 'callback', ] struct_anon_84._fields_ = [ ('client_data', XPointer), ('callback', XIMProc), ] XIMCallback = struct_anon_84 # /usr/include/X11/Xlib.h:1241 class struct_anon_85(Structure): __slots__ = [ 'client_data', 'callback', ] struct_anon_85._fields_ = [ ('client_data', XPointer), ('callback', XICProc), ] XICCallback = struct_anon_85 # /usr/include/X11/Xlib.h:1246 XIMFeedback = c_ulong # /usr/include/X11/Xlib.h:1248 XIMReverse = 1 # /usr/include/X11/Xlib.h:1250 XIMUnderline = 2 # /usr/include/X11/Xlib.h:1251 XIMHighlight = 4 # /usr/include/X11/Xlib.h:1252 XIMPrimary = 32 # /usr/include/X11/Xlib.h:1253 XIMSecondary = 64 # /usr/include/X11/Xlib.h:1254 XIMTertiary = 128 # /usr/include/X11/Xlib.h:1255 XIMVisibleToForward = 256 # /usr/include/X11/Xlib.h:1256 XIMVisibleToBackword = 512 # /usr/include/X11/Xlib.h:1257 XIMVisibleToCenter = 1024 # /usr/include/X11/Xlib.h:1258 class struct__XIMText(Structure): __slots__ = [ 'length', 'feedback', 'encoding_is_wchar', 'string', ] class struct_anon_86(Union): __slots__ = [ 'multi_byte', 'wide_char', ] struct_anon_86._fields_ = [ ('multi_byte', c_char_p), ('wide_char', c_wchar_p), ] struct__XIMText._fields_ = [ ('length', c_ushort), ('feedback', POINTER(XIMFeedback)), ('encoding_is_wchar', c_int), ('string', struct_anon_86), ] XIMText = struct__XIMText # /usr/include/X11/Xlib.h:1268 XIMPreeditState = c_ulong # /usr/include/X11/Xlib.h:1270 XIMPreeditUnKnown = 0 # /usr/include/X11/Xlib.h:1272 XIMPreeditEnable = 1 # /usr/include/X11/Xlib.h:1273 XIMPreeditDisable = 2 # /usr/include/X11/Xlib.h:1274 class struct__XIMPreeditStateNotifyCallbackStruct(Structure): __slots__ = [ 'state', ] struct__XIMPreeditStateNotifyCallbackStruct._fields_ = [ ('state', XIMPreeditState), ] XIMPreeditStateNotifyCallbackStruct = struct__XIMPreeditStateNotifyCallbackStruct # /usr/include/X11/Xlib.h:1278 XIMResetState = c_ulong # /usr/include/X11/Xlib.h:1280 XIMInitialState = 1 # /usr/include/X11/Xlib.h:1282 XIMPreserveState = 2 # /usr/include/X11/Xlib.h:1283 XIMStringConversionFeedback = c_ulong # /usr/include/X11/Xlib.h:1285 XIMStringConversionLeftEdge = 1 # /usr/include/X11/Xlib.h:1287 XIMStringConversionRightEdge = 2 # /usr/include/X11/Xlib.h:1288 XIMStringConversionTopEdge = 4 # /usr/include/X11/Xlib.h:1289 XIMStringConversionBottomEdge = 8 # /usr/include/X11/Xlib.h:1290 XIMStringConversionConcealed = 16 # /usr/include/X11/Xlib.h:1291 XIMStringConversionWrapped = 32 # /usr/include/X11/Xlib.h:1292 class struct__XIMStringConversionText(Structure): __slots__ = [ 'length', 'feedback', 'encoding_is_wchar', 'string', ] class struct_anon_87(Union): __slots__ = [ 'mbs', 'wcs', ] struct_anon_87._fields_ = [ ('mbs', c_char_p), ('wcs', c_wchar_p), ] struct__XIMStringConversionText._fields_ = [ ('length', c_ushort), ('feedback', POINTER(XIMStringConversionFeedback)), ('encoding_is_wchar', c_int), ('string', struct_anon_87), ] XIMStringConversionText = struct__XIMStringConversionText # /usr/include/X11/Xlib.h:1302 XIMStringConversionPosition = c_ushort # /usr/include/X11/Xlib.h:1304 XIMStringConversionType = c_ushort # /usr/include/X11/Xlib.h:1306 XIMStringConversionBuffer = 1 # /usr/include/X11/Xlib.h:1308 XIMStringConversionLine = 2 # /usr/include/X11/Xlib.h:1309 XIMStringConversionWord = 3 # /usr/include/X11/Xlib.h:1310 XIMStringConversionChar = 4 # /usr/include/X11/Xlib.h:1311 XIMStringConversionOperation = c_ushort # /usr/include/X11/Xlib.h:1313 XIMStringConversionSubstitution = 1 # /usr/include/X11/Xlib.h:1315 XIMStringConversionRetrieval = 2 # /usr/include/X11/Xlib.h:1316 enum_anon_88 = c_int XIMForwardChar = 0 XIMBackwardChar = 1 XIMForwardWord = 2 XIMBackwardWord = 3 XIMCaretUp = 4 XIMCaretDown = 5 XIMNextLine = 6 XIMPreviousLine = 7 XIMLineStart = 8 XIMLineEnd = 9 XIMAbsolutePosition = 10 XIMDontChange = 11 XIMCaretDirection = enum_anon_88 # /usr/include/X11/Xlib.h:1326 class struct__XIMStringConversionCallbackStruct(Structure): __slots__ = [ 'position', 'direction', 'operation', 'factor', 'text', ] struct__XIMStringConversionCallbackStruct._fields_ = [ ('position', XIMStringConversionPosition), ('direction', XIMCaretDirection), ('operation', XIMStringConversionOperation), ('factor', c_ushort), ('text', POINTER(XIMStringConversionText)), ] XIMStringConversionCallbackStruct = struct__XIMStringConversionCallbackStruct # /usr/include/X11/Xlib.h:1334 class struct__XIMPreeditDrawCallbackStruct(Structure): __slots__ = [ 'caret', 'chg_first', 'chg_length', 'text', ] struct__XIMPreeditDrawCallbackStruct._fields_ = [ ('caret', c_int), ('chg_first', c_int), ('chg_length', c_int), ('text', POINTER(XIMText)), ] XIMPreeditDrawCallbackStruct = struct__XIMPreeditDrawCallbackStruct # /usr/include/X11/Xlib.h:1341 enum_anon_89 = c_int XIMIsInvisible = 0 XIMIsPrimary = 1 XIMIsSecondary = 2 XIMCaretStyle = enum_anon_89 # /usr/include/X11/Xlib.h:1347 class struct__XIMPreeditCaretCallbackStruct(Structure): __slots__ = [ 'position', 'direction', 'style', ] struct__XIMPreeditCaretCallbackStruct._fields_ = [ ('position', c_int), ('direction', XIMCaretDirection), ('style', XIMCaretStyle), ] XIMPreeditCaretCallbackStruct = struct__XIMPreeditCaretCallbackStruct # /usr/include/X11/Xlib.h:1353 enum_anon_90 = c_int XIMTextType = 0 XIMBitmapType = 1 XIMStatusDataType = enum_anon_90 # /usr/include/X11/Xlib.h:1358 class struct__XIMStatusDrawCallbackStruct(Structure): __slots__ = [ 'type', 'data', ] class struct_anon_91(Union): __slots__ = [ 'text', 'bitmap', ] struct_anon_91._fields_ = [ ('text', POINTER(XIMText)), ('bitmap', Pixmap), ] struct__XIMStatusDrawCallbackStruct._fields_ = [ ('type', XIMStatusDataType), ('data', struct_anon_91), ] XIMStatusDrawCallbackStruct = struct__XIMStatusDrawCallbackStruct # /usr/include/X11/Xlib.h:1366 class struct__XIMHotKeyTrigger(Structure): __slots__ = [ 'keysym', 'modifier', 'modifier_mask', ] struct__XIMHotKeyTrigger._fields_ = [ ('keysym', KeySym), ('modifier', c_int), ('modifier_mask', c_int), ] XIMHotKeyTrigger = struct__XIMHotKeyTrigger # /usr/include/X11/Xlib.h:1372 class struct__XIMHotKeyTriggers(Structure): __slots__ = [ 'num_hot_key', 'key', ] struct__XIMHotKeyTriggers._fields_ = [ ('num_hot_key', c_int), ('key', POINTER(XIMHotKeyTrigger)), ] XIMHotKeyTriggers = struct__XIMHotKeyTriggers # /usr/include/X11/Xlib.h:1377 XIMHotKeyState = c_ulong # /usr/include/X11/Xlib.h:1379 XIMHotKeyStateON = 1 # /usr/include/X11/Xlib.h:1381 XIMHotKeyStateOFF = 2 # /usr/include/X11/Xlib.h:1382 class struct_anon_92(Structure): __slots__ = [ 'count_values', 'supported_values', ] struct_anon_92._fields_ = [ ('count_values', c_ushort), ('supported_values', POINTER(c_char_p)), ] XIMValuesList = struct_anon_92 # /usr/include/X11/Xlib.h:1387 # /usr/include/X11/Xlib.h:1397 XLoadQueryFont = _lib.XLoadQueryFont XLoadQueryFont.restype = POINTER(XFontStruct) XLoadQueryFont.argtypes = [POINTER(Display), c_char_p] # /usr/include/X11/Xlib.h:1402 XQueryFont = _lib.XQueryFont XQueryFont.restype = POINTER(XFontStruct) XQueryFont.argtypes = [POINTER(Display), XID] # /usr/include/X11/Xlib.h:1408 XGetMotionEvents = _lib.XGetMotionEvents XGetMotionEvents.restype = POINTER(XTimeCoord) XGetMotionEvents.argtypes = [POINTER(Display), Window, Time, Time, POINTER(c_int)] # /usr/include/X11/Xlib.h:1416 XDeleteModifiermapEntry = _lib.XDeleteModifiermapEntry XDeleteModifiermapEntry.restype = POINTER(XModifierKeymap) XDeleteModifiermapEntry.argtypes = [POINTER(XModifierKeymap), KeyCode, c_int] # /usr/include/X11/Xlib.h:1426 XGetModifierMapping = _lib.XGetModifierMapping XGetModifierMapping.restype = POINTER(XModifierKeymap) XGetModifierMapping.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:1430 XInsertModifiermapEntry = _lib.XInsertModifiermapEntry XInsertModifiermapEntry.restype = POINTER(XModifierKeymap) XInsertModifiermapEntry.argtypes = [POINTER(XModifierKeymap), KeyCode, c_int] # /usr/include/X11/Xlib.h:1440 XNewModifiermap = _lib.XNewModifiermap XNewModifiermap.restype = POINTER(XModifierKeymap) XNewModifiermap.argtypes = [c_int] # /usr/include/X11/Xlib.h:1444 XCreateImage = _lib.XCreateImage XCreateImage.restype = POINTER(XImage) XCreateImage.argtypes = [POINTER(Display), POINTER(Visual), c_uint, c_int, c_int, c_char_p, c_uint, c_uint, c_int, c_int] # /usr/include/X11/Xlib.h:1456 XInitImage = _lib.XInitImage XInitImage.restype = c_int XInitImage.argtypes = [POINTER(XImage)] # /usr/include/X11/Xlib.h:1459 XGetImage = _lib.XGetImage XGetImage.restype = POINTER(XImage) XGetImage.argtypes = [POINTER(Display), Drawable, c_int, c_int, c_uint, c_uint, c_ulong, c_int] # /usr/include/X11/Xlib.h:1469 XGetSubImage = _lib.XGetSubImage XGetSubImage.restype = POINTER(XImage) XGetSubImage.argtypes = [POINTER(Display), Drawable, c_int, c_int, c_uint, c_uint, c_ulong, c_int, POINTER(XImage), c_int, c_int] # /usr/include/X11/Xlib.h:1486 XOpenDisplay = _lib.XOpenDisplay XOpenDisplay.restype = POINTER(Display) XOpenDisplay.argtypes = [c_char_p] # /usr/include/X11/Xlib.h:1490 XrmInitialize = _lib.XrmInitialize XrmInitialize.restype = None XrmInitialize.argtypes = [] # /usr/include/X11/Xlib.h:1494 XFetchBytes = _lib.XFetchBytes XFetchBytes.restype = c_char_p XFetchBytes.argtypes = [POINTER(Display), POINTER(c_int)] # /usr/include/X11/Xlib.h:1498 XFetchBuffer = _lib.XFetchBuffer XFetchBuffer.restype = c_char_p XFetchBuffer.argtypes = [POINTER(Display), POINTER(c_int), c_int] # /usr/include/X11/Xlib.h:1503 XGetAtomName = _lib.XGetAtomName XGetAtomName.restype = c_char_p XGetAtomName.argtypes = [POINTER(Display), Atom] # /usr/include/X11/Xlib.h:1507 XGetAtomNames = _lib.XGetAtomNames XGetAtomNames.restype = c_int XGetAtomNames.argtypes = [POINTER(Display), POINTER(Atom), c_int, POINTER(c_char_p)] # /usr/include/X11/Xlib.h:1513 XGetDefault = _lib.XGetDefault XGetDefault.restype = c_char_p XGetDefault.argtypes = [POINTER(Display), c_char_p, c_char_p] # /usr/include/X11/Xlib.h:1518 XDisplayName = _lib.XDisplayName XDisplayName.restype = c_char_p XDisplayName.argtypes = [c_char_p] # /usr/include/X11/Xlib.h:1521 XKeysymToString = _lib.XKeysymToString XKeysymToString.restype = c_char_p XKeysymToString.argtypes = [KeySym] # /usr/include/X11/Xlib.h:1525 XSynchronize = _lib.XSynchronize XSynchronize.restype = POINTER(CFUNCTYPE(c_int, POINTER(Display))) XSynchronize.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:1531 XSetAfterFunction = _lib.XSetAfterFunction XSetAfterFunction.restype = POINTER(CFUNCTYPE(c_int, POINTER(Display))) XSetAfterFunction.argtypes = [POINTER(Display), CFUNCTYPE(c_int, POINTER(Display))] # /usr/include/X11/Xlib.h:1539 XInternAtom = _lib.XInternAtom XInternAtom.restype = Atom XInternAtom.argtypes = [POINTER(Display), c_char_p, c_int] # /usr/include/X11/Xlib.h:1544 XInternAtoms = _lib.XInternAtoms XInternAtoms.restype = c_int XInternAtoms.argtypes = [POINTER(Display), POINTER(c_char_p), c_int, c_int, POINTER(Atom)] # /usr/include/X11/Xlib.h:1551 XCopyColormapAndFree = _lib.XCopyColormapAndFree XCopyColormapAndFree.restype = Colormap XCopyColormapAndFree.argtypes = [POINTER(Display), Colormap] # /usr/include/X11/Xlib.h:1555 XCreateColormap = _lib.XCreateColormap XCreateColormap.restype = Colormap XCreateColormap.argtypes = [POINTER(Display), Window, POINTER(Visual), c_int] # /usr/include/X11/Xlib.h:1561 XCreatePixmapCursor = _lib.XCreatePixmapCursor XCreatePixmapCursor.restype = Cursor XCreatePixmapCursor.argtypes = [POINTER(Display), Pixmap, Pixmap, POINTER(XColor), POINTER(XColor), c_uint, c_uint] # /usr/include/X11/Xlib.h:1570 XCreateGlyphCursor = _lib.XCreateGlyphCursor XCreateGlyphCursor.restype = Cursor XCreateGlyphCursor.argtypes = [POINTER(Display), Font, Font, c_uint, c_uint, POINTER(XColor), POINTER(XColor)] # /usr/include/X11/Xlib.h:1579 XCreateFontCursor = _lib.XCreateFontCursor XCreateFontCursor.restype = Cursor XCreateFontCursor.argtypes = [POINTER(Display), c_uint] # /usr/include/X11/Xlib.h:1583 XLoadFont = _lib.XLoadFont XLoadFont.restype = Font XLoadFont.argtypes = [POINTER(Display), c_char_p] # /usr/include/X11/Xlib.h:1587 XCreateGC = _lib.XCreateGC XCreateGC.restype = GC XCreateGC.argtypes = [POINTER(Display), Drawable, c_ulong, POINTER(XGCValues)] # /usr/include/X11/Xlib.h:1593 XGContextFromGC = _lib.XGContextFromGC XGContextFromGC.restype = GContext XGContextFromGC.argtypes = [GC] # /usr/include/X11/Xlib.h:1596 XFlushGC = _lib.XFlushGC XFlushGC.restype = None XFlushGC.argtypes = [POINTER(Display), GC] # /usr/include/X11/Xlib.h:1600 XCreatePixmap = _lib.XCreatePixmap XCreatePixmap.restype = Pixmap XCreatePixmap.argtypes = [POINTER(Display), Drawable, c_uint, c_uint, c_uint] # /usr/include/X11/Xlib.h:1607 XCreateBitmapFromData = _lib.XCreateBitmapFromData XCreateBitmapFromData.restype = Pixmap XCreateBitmapFromData.argtypes = [POINTER(Display), Drawable, c_char_p, c_uint, c_uint] # /usr/include/X11/Xlib.h:1614 XCreatePixmapFromBitmapData = _lib.XCreatePixmapFromBitmapData XCreatePixmapFromBitmapData.restype = Pixmap XCreatePixmapFromBitmapData.argtypes = [POINTER(Display), Drawable, c_char_p, c_uint, c_uint, c_ulong, c_ulong, c_uint] # /usr/include/X11/Xlib.h:1624 XCreateSimpleWindow = _lib.XCreateSimpleWindow XCreateSimpleWindow.restype = Window XCreateSimpleWindow.argtypes = [POINTER(Display), Window, c_int, c_int, c_uint, c_uint, c_uint, c_ulong, c_ulong] # /usr/include/X11/Xlib.h:1635 XGetSelectionOwner = _lib.XGetSelectionOwner XGetSelectionOwner.restype = Window XGetSelectionOwner.argtypes = [POINTER(Display), Atom] # /usr/include/X11/Xlib.h:1639 XCreateWindow = _lib.XCreateWindow XCreateWindow.restype = Window XCreateWindow.argtypes = [POINTER(Display), Window, c_int, c_int, c_uint, c_uint, c_uint, c_int, c_uint, POINTER(Visual), c_ulong, POINTER(XSetWindowAttributes)] # /usr/include/X11/Xlib.h:1653 XListInstalledColormaps = _lib.XListInstalledColormaps XListInstalledColormaps.restype = POINTER(Colormap) XListInstalledColormaps.argtypes = [POINTER(Display), Window, POINTER(c_int)] # /usr/include/X11/Xlib.h:1658 XListFonts = _lib.XListFonts XListFonts.restype = POINTER(c_char_p) XListFonts.argtypes = [POINTER(Display), c_char_p, c_int, POINTER(c_int)] # /usr/include/X11/Xlib.h:1664 XListFontsWithInfo = _lib.XListFontsWithInfo XListFontsWithInfo.restype = POINTER(c_char_p) XListFontsWithInfo.argtypes = [POINTER(Display), c_char_p, c_int, POINTER(c_int), POINTER(POINTER(XFontStruct))] # /usr/include/X11/Xlib.h:1671 XGetFontPath = _lib.XGetFontPath XGetFontPath.restype = POINTER(c_char_p) XGetFontPath.argtypes = [POINTER(Display), POINTER(c_int)] # /usr/include/X11/Xlib.h:1675 XListExtensions = _lib.XListExtensions XListExtensions.restype = POINTER(c_char_p) XListExtensions.argtypes = [POINTER(Display), POINTER(c_int)] # /usr/include/X11/Xlib.h:1679 XListProperties = _lib.XListProperties XListProperties.restype = POINTER(Atom) XListProperties.argtypes = [POINTER(Display), Window, POINTER(c_int)] # /usr/include/X11/Xlib.h:1684 XListHosts = _lib.XListHosts XListHosts.restype = POINTER(XHostAddress) XListHosts.argtypes = [POINTER(Display), POINTER(c_int), POINTER(c_int)] # /usr/include/X11/Xlib.h:1689 XKeycodeToKeysym = _lib.XKeycodeToKeysym XKeycodeToKeysym.restype = KeySym XKeycodeToKeysym.argtypes = [POINTER(Display), KeyCode, c_int] # /usr/include/X11/Xlib.h:1698 XLookupKeysym = _lib.XLookupKeysym XLookupKeysym.restype = KeySym XLookupKeysym.argtypes = [POINTER(XKeyEvent), c_int] # /usr/include/X11/Xlib.h:1702 XGetKeyboardMapping = _lib.XGetKeyboardMapping XGetKeyboardMapping.restype = POINTER(KeySym) XGetKeyboardMapping.argtypes = [POINTER(Display), KeyCode, c_int, POINTER(c_int)] # /usr/include/X11/Xlib.h:1712 XStringToKeysym = _lib.XStringToKeysym XStringToKeysym.restype = KeySym XStringToKeysym.argtypes = [c_char_p] # /usr/include/X11/Xlib.h:1715 XMaxRequestSize = _lib.XMaxRequestSize XMaxRequestSize.restype = c_long XMaxRequestSize.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:1718 XExtendedMaxRequestSize = _lib.XExtendedMaxRequestSize XExtendedMaxRequestSize.restype = c_long XExtendedMaxRequestSize.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:1721 XResourceManagerString = _lib.XResourceManagerString XResourceManagerString.restype = c_char_p XResourceManagerString.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:1724 XScreenResourceString = _lib.XScreenResourceString XScreenResourceString.restype = c_char_p XScreenResourceString.argtypes = [POINTER(Screen)] # /usr/include/X11/Xlib.h:1727 XDisplayMotionBufferSize = _lib.XDisplayMotionBufferSize XDisplayMotionBufferSize.restype = c_ulong XDisplayMotionBufferSize.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:1730 XVisualIDFromVisual = _lib.XVisualIDFromVisual XVisualIDFromVisual.restype = VisualID XVisualIDFromVisual.argtypes = [POINTER(Visual)] # /usr/include/X11/Xlib.h:1736 XInitThreads = _lib.XInitThreads XInitThreads.restype = c_int XInitThreads.argtypes = [] # /usr/include/X11/Xlib.h:1740 XLockDisplay = _lib.XLockDisplay XLockDisplay.restype = None XLockDisplay.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:1744 XUnlockDisplay = _lib.XUnlockDisplay XUnlockDisplay.restype = None XUnlockDisplay.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:1750 XInitExtension = _lib.XInitExtension XInitExtension.restype = POINTER(XExtCodes) XInitExtension.argtypes = [POINTER(Display), c_char_p] # /usr/include/X11/Xlib.h:1755 XAddExtension = _lib.XAddExtension XAddExtension.restype = POINTER(XExtCodes) XAddExtension.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:1758 XFindOnExtensionList = _lib.XFindOnExtensionList XFindOnExtensionList.restype = POINTER(XExtData) XFindOnExtensionList.argtypes = [POINTER(POINTER(XExtData)), c_int] # /usr/include/X11/Xlib.h:1762 XEHeadOfExtensionList = _lib.XEHeadOfExtensionList XEHeadOfExtensionList.restype = POINTER(POINTER(XExtData)) XEHeadOfExtensionList.argtypes = [XEDataObject] # /usr/include/X11/Xlib.h:1767 XRootWindow = _lib.XRootWindow XRootWindow.restype = Window XRootWindow.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:1771 XDefaultRootWindow = _lib.XDefaultRootWindow XDefaultRootWindow.restype = Window XDefaultRootWindow.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:1774 XRootWindowOfScreen = _lib.XRootWindowOfScreen XRootWindowOfScreen.restype = Window XRootWindowOfScreen.argtypes = [POINTER(Screen)] # /usr/include/X11/Xlib.h:1777 XDefaultVisual = _lib.XDefaultVisual XDefaultVisual.restype = POINTER(Visual) XDefaultVisual.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:1781 XDefaultVisualOfScreen = _lib.XDefaultVisualOfScreen XDefaultVisualOfScreen.restype = POINTER(Visual) XDefaultVisualOfScreen.argtypes = [POINTER(Screen)] # /usr/include/X11/Xlib.h:1784 XDefaultGC = _lib.XDefaultGC XDefaultGC.restype = GC XDefaultGC.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:1788 XDefaultGCOfScreen = _lib.XDefaultGCOfScreen XDefaultGCOfScreen.restype = GC XDefaultGCOfScreen.argtypes = [POINTER(Screen)] # /usr/include/X11/Xlib.h:1791 XBlackPixel = _lib.XBlackPixel XBlackPixel.restype = c_ulong XBlackPixel.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:1795 XWhitePixel = _lib.XWhitePixel XWhitePixel.restype = c_ulong XWhitePixel.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:1799 XAllPlanes = _lib.XAllPlanes XAllPlanes.restype = c_ulong XAllPlanes.argtypes = [] # /usr/include/X11/Xlib.h:1802 XBlackPixelOfScreen = _lib.XBlackPixelOfScreen XBlackPixelOfScreen.restype = c_ulong XBlackPixelOfScreen.argtypes = [POINTER(Screen)] # /usr/include/X11/Xlib.h:1805 XWhitePixelOfScreen = _lib.XWhitePixelOfScreen XWhitePixelOfScreen.restype = c_ulong XWhitePixelOfScreen.argtypes = [POINTER(Screen)] # /usr/include/X11/Xlib.h:1808 XNextRequest = _lib.XNextRequest XNextRequest.restype = c_ulong XNextRequest.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:1811 XLastKnownRequestProcessed = _lib.XLastKnownRequestProcessed XLastKnownRequestProcessed.restype = c_ulong XLastKnownRequestProcessed.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:1814 XServerVendor = _lib.XServerVendor XServerVendor.restype = c_char_p XServerVendor.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:1817 XDisplayString = _lib.XDisplayString XDisplayString.restype = c_char_p XDisplayString.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:1820 XDefaultColormap = _lib.XDefaultColormap XDefaultColormap.restype = Colormap XDefaultColormap.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:1824 XDefaultColormapOfScreen = _lib.XDefaultColormapOfScreen XDefaultColormapOfScreen.restype = Colormap XDefaultColormapOfScreen.argtypes = [POINTER(Screen)] # /usr/include/X11/Xlib.h:1827 XDisplayOfScreen = _lib.XDisplayOfScreen XDisplayOfScreen.restype = POINTER(Display) XDisplayOfScreen.argtypes = [POINTER(Screen)] # /usr/include/X11/Xlib.h:1830 XScreenOfDisplay = _lib.XScreenOfDisplay XScreenOfDisplay.restype = POINTER(Screen) XScreenOfDisplay.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:1834 XDefaultScreenOfDisplay = _lib.XDefaultScreenOfDisplay XDefaultScreenOfDisplay.restype = POINTER(Screen) XDefaultScreenOfDisplay.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:1837 XEventMaskOfScreen = _lib.XEventMaskOfScreen XEventMaskOfScreen.restype = c_long XEventMaskOfScreen.argtypes = [POINTER(Screen)] # /usr/include/X11/Xlib.h:1841 XScreenNumberOfScreen = _lib.XScreenNumberOfScreen XScreenNumberOfScreen.restype = c_int XScreenNumberOfScreen.argtypes = [POINTER(Screen)] XErrorHandler = CFUNCTYPE(c_int, POINTER(Display), POINTER(XErrorEvent)) # /usr/include/X11/Xlib.h:1845 # /usr/include/X11/Xlib.h:1850 XSetErrorHandler = _lib.XSetErrorHandler XSetErrorHandler.restype = XErrorHandler XSetErrorHandler.argtypes = [XErrorHandler] XIOErrorHandler = CFUNCTYPE(c_int, POINTER(Display)) # /usr/include/X11/Xlib.h:1855 # /usr/include/X11/Xlib.h:1859 XSetIOErrorHandler = _lib.XSetIOErrorHandler XSetIOErrorHandler.restype = XIOErrorHandler XSetIOErrorHandler.argtypes = [XIOErrorHandler] # /usr/include/X11/Xlib.h:1864 XListPixmapFormats = _lib.XListPixmapFormats XListPixmapFormats.restype = POINTER(XPixmapFormatValues) XListPixmapFormats.argtypes = [POINTER(Display), POINTER(c_int)] # /usr/include/X11/Xlib.h:1868 XListDepths = _lib.XListDepths XListDepths.restype = POINTER(c_int) XListDepths.argtypes = [POINTER(Display), c_int, POINTER(c_int)] # /usr/include/X11/Xlib.h:1876 XReconfigureWMWindow = _lib.XReconfigureWMWindow XReconfigureWMWindow.restype = c_int XReconfigureWMWindow.argtypes = [POINTER(Display), Window, c_int, c_uint, POINTER(XWindowChanges)] # /usr/include/X11/Xlib.h:1884 XGetWMProtocols = _lib.XGetWMProtocols XGetWMProtocols.restype = c_int XGetWMProtocols.argtypes = [POINTER(Display), Window, POINTER(POINTER(Atom)), POINTER(c_int)] # /usr/include/X11/Xlib.h:1890 XSetWMProtocols = _lib.XSetWMProtocols XSetWMProtocols.restype = c_int XSetWMProtocols.argtypes = [POINTER(Display), Window, POINTER(Atom), c_int] # /usr/include/X11/Xlib.h:1896 XIconifyWindow = _lib.XIconifyWindow XIconifyWindow.restype = c_int XIconifyWindow.argtypes = [POINTER(Display), Window, c_int] # /usr/include/X11/Xlib.h:1901 XWithdrawWindow = _lib.XWithdrawWindow XWithdrawWindow.restype = c_int XWithdrawWindow.argtypes = [POINTER(Display), Window, c_int] # /usr/include/X11/Xlib.h:1906 XGetCommand = _lib.XGetCommand XGetCommand.restype = c_int XGetCommand.argtypes = [POINTER(Display), Window, POINTER(POINTER(c_char_p)), POINTER(c_int)] # /usr/include/X11/Xlib.h:1912 XGetWMColormapWindows = _lib.XGetWMColormapWindows XGetWMColormapWindows.restype = c_int XGetWMColormapWindows.argtypes = [POINTER(Display), Window, POINTER(POINTER(Window)), POINTER(c_int)] # /usr/include/X11/Xlib.h:1918 XSetWMColormapWindows = _lib.XSetWMColormapWindows XSetWMColormapWindows.restype = c_int XSetWMColormapWindows.argtypes = [POINTER(Display), Window, POINTER(Window), c_int] # /usr/include/X11/Xlib.h:1924 XFreeStringList = _lib.XFreeStringList XFreeStringList.restype = None XFreeStringList.argtypes = [POINTER(c_char_p)] # /usr/include/X11/Xlib.h:1927 XSetTransientForHint = _lib.XSetTransientForHint XSetTransientForHint.restype = c_int XSetTransientForHint.argtypes = [POINTER(Display), Window, Window] # /usr/include/X11/Xlib.h:1935 XActivateScreenSaver = _lib.XActivateScreenSaver XActivateScreenSaver.restype = c_int XActivateScreenSaver.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:1939 XAddHost = _lib.XAddHost XAddHost.restype = c_int XAddHost.argtypes = [POINTER(Display), POINTER(XHostAddress)] # /usr/include/X11/Xlib.h:1944 XAddHosts = _lib.XAddHosts XAddHosts.restype = c_int XAddHosts.argtypes = [POINTER(Display), POINTER(XHostAddress), c_int] class struct__XExtData(Structure): __slots__ = [ ] struct__XExtData._fields_ = [ ('_opaque_struct', c_int) ] # /usr/include/X11/Xlib.h:1950 XAddToExtensionList = _lib.XAddToExtensionList XAddToExtensionList.restype = c_int XAddToExtensionList.argtypes = [POINTER(POINTER(struct__XExtData)), POINTER(XExtData)] # /usr/include/X11/Xlib.h:1955 XAddToSaveSet = _lib.XAddToSaveSet XAddToSaveSet.restype = c_int XAddToSaveSet.argtypes = [POINTER(Display), Window] # /usr/include/X11/Xlib.h:1960 XAllocColor = _lib.XAllocColor XAllocColor.restype = c_int XAllocColor.argtypes = [POINTER(Display), Colormap, POINTER(XColor)] # /usr/include/X11/Xlib.h:1966 XAllocColorCells = _lib.XAllocColorCells XAllocColorCells.restype = c_int XAllocColorCells.argtypes = [POINTER(Display), Colormap, c_int, POINTER(c_ulong), c_uint, POINTER(c_ulong), c_uint] # /usr/include/X11/Xlib.h:1976 XAllocColorPlanes = _lib.XAllocColorPlanes XAllocColorPlanes.restype = c_int XAllocColorPlanes.argtypes = [POINTER(Display), Colormap, c_int, POINTER(c_ulong), c_int, c_int, c_int, c_int, POINTER(c_ulong), POINTER(c_ulong), POINTER(c_ulong)] # /usr/include/X11/Xlib.h:1990 XAllocNamedColor = _lib.XAllocNamedColor XAllocNamedColor.restype = c_int XAllocNamedColor.argtypes = [POINTER(Display), Colormap, c_char_p, POINTER(XColor), POINTER(XColor)] # /usr/include/X11/Xlib.h:1998 XAllowEvents = _lib.XAllowEvents XAllowEvents.restype = c_int XAllowEvents.argtypes = [POINTER(Display), c_int, Time] # /usr/include/X11/Xlib.h:2004 XAutoRepeatOff = _lib.XAutoRepeatOff XAutoRepeatOff.restype = c_int XAutoRepeatOff.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:2008 XAutoRepeatOn = _lib.XAutoRepeatOn XAutoRepeatOn.restype = c_int XAutoRepeatOn.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:2012 XBell = _lib.XBell XBell.restype = c_int XBell.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:2017 XBitmapBitOrder = _lib.XBitmapBitOrder XBitmapBitOrder.restype = c_int XBitmapBitOrder.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:2021 XBitmapPad = _lib.XBitmapPad XBitmapPad.restype = c_int XBitmapPad.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:2025 XBitmapUnit = _lib.XBitmapUnit XBitmapUnit.restype = c_int XBitmapUnit.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:2029 XCellsOfScreen = _lib.XCellsOfScreen XCellsOfScreen.restype = c_int XCellsOfScreen.argtypes = [POINTER(Screen)] # /usr/include/X11/Xlib.h:2033 XChangeActivePointerGrab = _lib.XChangeActivePointerGrab XChangeActivePointerGrab.restype = c_int XChangeActivePointerGrab.argtypes = [POINTER(Display), c_uint, Cursor, Time] # /usr/include/X11/Xlib.h:2040 XChangeGC = _lib.XChangeGC XChangeGC.restype = c_int XChangeGC.argtypes = [POINTER(Display), GC, c_ulong, POINTER(XGCValues)] # /usr/include/X11/Xlib.h:2047 XChangeKeyboardControl = _lib.XChangeKeyboardControl XChangeKeyboardControl.restype = c_int XChangeKeyboardControl.argtypes = [POINTER(Display), c_ulong, POINTER(XKeyboardControl)] # /usr/include/X11/Xlib.h:2053 XChangeKeyboardMapping = _lib.XChangeKeyboardMapping XChangeKeyboardMapping.restype = c_int XChangeKeyboardMapping.argtypes = [POINTER(Display), c_int, c_int, POINTER(KeySym), c_int] # /usr/include/X11/Xlib.h:2061 XChangePointerControl = _lib.XChangePointerControl XChangePointerControl.restype = c_int XChangePointerControl.argtypes = [POINTER(Display), c_int, c_int, c_int, c_int, c_int] # /usr/include/X11/Xlib.h:2070 XChangeProperty = _lib.XChangeProperty XChangeProperty.restype = c_int XChangeProperty.argtypes = [POINTER(Display), Window, Atom, Atom, c_int, c_int, POINTER(c_ubyte), c_int] # /usr/include/X11/Xlib.h:2081 XChangeSaveSet = _lib.XChangeSaveSet XChangeSaveSet.restype = c_int XChangeSaveSet.argtypes = [POINTER(Display), Window, c_int] # /usr/include/X11/Xlib.h:2087 XChangeWindowAttributes = _lib.XChangeWindowAttributes XChangeWindowAttributes.restype = c_int XChangeWindowAttributes.argtypes = [POINTER(Display), Window, c_ulong, POINTER(XSetWindowAttributes)] # /usr/include/X11/Xlib.h:2094 XCheckIfEvent = _lib.XCheckIfEvent XCheckIfEvent.restype = c_int XCheckIfEvent.argtypes = [POINTER(Display), POINTER(XEvent), CFUNCTYPE(c_int, POINTER(Display), POINTER(XEvent), XPointer), XPointer] # /usr/include/X11/Xlib.h:2105 XCheckMaskEvent = _lib.XCheckMaskEvent XCheckMaskEvent.restype = c_int XCheckMaskEvent.argtypes = [POINTER(Display), c_long, POINTER(XEvent)] # /usr/include/X11/Xlib.h:2111 XCheckTypedEvent = _lib.XCheckTypedEvent XCheckTypedEvent.restype = c_int XCheckTypedEvent.argtypes = [POINTER(Display), c_int, POINTER(XEvent)] # /usr/include/X11/Xlib.h:2117 XCheckTypedWindowEvent = _lib.XCheckTypedWindowEvent XCheckTypedWindowEvent.restype = c_int XCheckTypedWindowEvent.argtypes = [POINTER(Display), Window, c_int, POINTER(XEvent)] # /usr/include/X11/Xlib.h:2124 XCheckWindowEvent = _lib.XCheckWindowEvent XCheckWindowEvent.restype = c_int XCheckWindowEvent.argtypes = [POINTER(Display), Window, c_long, POINTER(XEvent)] # /usr/include/X11/Xlib.h:2131 XCirculateSubwindows = _lib.XCirculateSubwindows XCirculateSubwindows.restype = c_int XCirculateSubwindows.argtypes = [POINTER(Display), Window, c_int] # /usr/include/X11/Xlib.h:2137 XCirculateSubwindowsDown = _lib.XCirculateSubwindowsDown XCirculateSubwindowsDown.restype = c_int XCirculateSubwindowsDown.argtypes = [POINTER(Display), Window] # /usr/include/X11/Xlib.h:2142 XCirculateSubwindowsUp = _lib.XCirculateSubwindowsUp XCirculateSubwindowsUp.restype = c_int XCirculateSubwindowsUp.argtypes = [POINTER(Display), Window] # /usr/include/X11/Xlib.h:2147 XClearArea = _lib.XClearArea XClearArea.restype = c_int XClearArea.argtypes = [POINTER(Display), Window, c_int, c_int, c_uint, c_uint, c_int] # /usr/include/X11/Xlib.h:2157 XClearWindow = _lib.XClearWindow XClearWindow.restype = c_int XClearWindow.argtypes = [POINTER(Display), Window] # /usr/include/X11/Xlib.h:2162 XCloseDisplay = _lib.XCloseDisplay XCloseDisplay.restype = c_int XCloseDisplay.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:2166 XConfigureWindow = _lib.XConfigureWindow XConfigureWindow.restype = c_int XConfigureWindow.argtypes = [POINTER(Display), Window, c_uint, POINTER(XWindowChanges)] # /usr/include/X11/Xlib.h:2173 XConnectionNumber = _lib.XConnectionNumber XConnectionNumber.restype = c_int XConnectionNumber.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:2177 XConvertSelection = _lib.XConvertSelection XConvertSelection.restype = c_int XConvertSelection.argtypes = [POINTER(Display), Atom, Atom, Atom, Window, Time] # /usr/include/X11/Xlib.h:2186 XCopyArea = _lib.XCopyArea XCopyArea.restype = c_int XCopyArea.argtypes = [POINTER(Display), Drawable, Drawable, GC, c_int, c_int, c_uint, c_uint, c_int, c_int] # /usr/include/X11/Xlib.h:2199 XCopyGC = _lib.XCopyGC XCopyGC.restype = c_int XCopyGC.argtypes = [POINTER(Display), GC, c_ulong, GC] # /usr/include/X11/Xlib.h:2206 XCopyPlane = _lib.XCopyPlane XCopyPlane.restype = c_int XCopyPlane.argtypes = [POINTER(Display), Drawable, Drawable, GC, c_int, c_int, c_uint, c_uint, c_int, c_int, c_ulong] # /usr/include/X11/Xlib.h:2220 XDefaultDepth = _lib.XDefaultDepth XDefaultDepth.restype = c_int XDefaultDepth.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:2225 XDefaultDepthOfScreen = _lib.XDefaultDepthOfScreen XDefaultDepthOfScreen.restype = c_int XDefaultDepthOfScreen.argtypes = [POINTER(Screen)] # /usr/include/X11/Xlib.h:2229 XDefaultScreen = _lib.XDefaultScreen XDefaultScreen.restype = c_int XDefaultScreen.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:2233 XDefineCursor = _lib.XDefineCursor XDefineCursor.restype = c_int XDefineCursor.argtypes = [POINTER(Display), Window, Cursor] # /usr/include/X11/Xlib.h:2239 XDeleteProperty = _lib.XDeleteProperty XDeleteProperty.restype = c_int XDeleteProperty.argtypes = [POINTER(Display), Window, Atom] # /usr/include/X11/Xlib.h:2245 XDestroyWindow = _lib.XDestroyWindow XDestroyWindow.restype = c_int XDestroyWindow.argtypes = [POINTER(Display), Window] # /usr/include/X11/Xlib.h:2250 XDestroySubwindows = _lib.XDestroySubwindows XDestroySubwindows.restype = c_int XDestroySubwindows.argtypes = [POINTER(Display), Window] # /usr/include/X11/Xlib.h:2255 XDoesBackingStore = _lib.XDoesBackingStore XDoesBackingStore.restype = c_int XDoesBackingStore.argtypes = [POINTER(Screen)] # /usr/include/X11/Xlib.h:2259 XDoesSaveUnders = _lib.XDoesSaveUnders XDoesSaveUnders.restype = c_int XDoesSaveUnders.argtypes = [POINTER(Screen)] # /usr/include/X11/Xlib.h:2263 XDisableAccessControl = _lib.XDisableAccessControl XDisableAccessControl.restype = c_int XDisableAccessControl.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:2268 XDisplayCells = _lib.XDisplayCells XDisplayCells.restype = c_int XDisplayCells.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:2273 XDisplayHeight = _lib.XDisplayHeight XDisplayHeight.restype = c_int XDisplayHeight.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:2278 XDisplayHeightMM = _lib.XDisplayHeightMM XDisplayHeightMM.restype = c_int XDisplayHeightMM.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:2283 XDisplayKeycodes = _lib.XDisplayKeycodes XDisplayKeycodes.restype = c_int XDisplayKeycodes.argtypes = [POINTER(Display), POINTER(c_int), POINTER(c_int)] # /usr/include/X11/Xlib.h:2289 XDisplayPlanes = _lib.XDisplayPlanes XDisplayPlanes.restype = c_int XDisplayPlanes.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:2294 XDisplayWidth = _lib.XDisplayWidth XDisplayWidth.restype = c_int XDisplayWidth.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:2299 XDisplayWidthMM = _lib.XDisplayWidthMM XDisplayWidthMM.restype = c_int XDisplayWidthMM.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:2304 XDrawArc = _lib.XDrawArc XDrawArc.restype = c_int XDrawArc.argtypes = [POINTER(Display), Drawable, GC, c_int, c_int, c_uint, c_uint, c_int, c_int] # /usr/include/X11/Xlib.h:2316 XDrawArcs = _lib.XDrawArcs XDrawArcs.restype = c_int XDrawArcs.argtypes = [POINTER(Display), Drawable, GC, POINTER(XArc), c_int] # /usr/include/X11/Xlib.h:2324 XDrawImageString = _lib.XDrawImageString XDrawImageString.restype = c_int XDrawImageString.argtypes = [POINTER(Display), Drawable, GC, c_int, c_int, c_char_p, c_int] # /usr/include/X11/Xlib.h:2334 XDrawImageString16 = _lib.XDrawImageString16 XDrawImageString16.restype = c_int XDrawImageString16.argtypes = [POINTER(Display), Drawable, GC, c_int, c_int, POINTER(XChar2b), c_int] # /usr/include/X11/Xlib.h:2344 XDrawLine = _lib.XDrawLine XDrawLine.restype = c_int XDrawLine.argtypes = [POINTER(Display), Drawable, GC, c_int, c_int, c_int, c_int] # /usr/include/X11/Xlib.h:2354 XDrawLines = _lib.XDrawLines XDrawLines.restype = c_int XDrawLines.argtypes = [POINTER(Display), Drawable, GC, POINTER(XPoint), c_int, c_int] # /usr/include/X11/Xlib.h:2363 XDrawPoint = _lib.XDrawPoint XDrawPoint.restype = c_int XDrawPoint.argtypes = [POINTER(Display), Drawable, GC, c_int, c_int] # /usr/include/X11/Xlib.h:2371 XDrawPoints = _lib.XDrawPoints XDrawPoints.restype = c_int XDrawPoints.argtypes = [POINTER(Display), Drawable, GC, POINTER(XPoint), c_int, c_int] # /usr/include/X11/Xlib.h:2380 XDrawRectangle = _lib.XDrawRectangle XDrawRectangle.restype = c_int XDrawRectangle.argtypes = [POINTER(Display), Drawable, GC, c_int, c_int, c_uint, c_uint] # /usr/include/X11/Xlib.h:2390 XDrawRectangles = _lib.XDrawRectangles XDrawRectangles.restype = c_int XDrawRectangles.argtypes = [POINTER(Display), Drawable, GC, POINTER(XRectangle), c_int] # /usr/include/X11/Xlib.h:2398 XDrawSegments = _lib.XDrawSegments XDrawSegments.restype = c_int XDrawSegments.argtypes = [POINTER(Display), Drawable, GC, POINTER(XSegment), c_int] # /usr/include/X11/Xlib.h:2406 XDrawString = _lib.XDrawString XDrawString.restype = c_int XDrawString.argtypes = [POINTER(Display), Drawable, GC, c_int, c_int, c_char_p, c_int] # /usr/include/X11/Xlib.h:2416 XDrawString16 = _lib.XDrawString16 XDrawString16.restype = c_int XDrawString16.argtypes = [POINTER(Display), Drawable, GC, c_int, c_int, POINTER(XChar2b), c_int] # /usr/include/X11/Xlib.h:2426 XDrawText = _lib.XDrawText XDrawText.restype = c_int XDrawText.argtypes = [POINTER(Display), Drawable, GC, c_int, c_int, POINTER(XTextItem), c_int] # /usr/include/X11/Xlib.h:2436 XDrawText16 = _lib.XDrawText16 XDrawText16.restype = c_int XDrawText16.argtypes = [POINTER(Display), Drawable, GC, c_int, c_int, POINTER(XTextItem16), c_int] # /usr/include/X11/Xlib.h:2446 XEnableAccessControl = _lib.XEnableAccessControl XEnableAccessControl.restype = c_int XEnableAccessControl.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:2450 XEventsQueued = _lib.XEventsQueued XEventsQueued.restype = c_int XEventsQueued.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:2455 XFetchName = _lib.XFetchName XFetchName.restype = c_int XFetchName.argtypes = [POINTER(Display), Window, POINTER(c_char_p)] # /usr/include/X11/Xlib.h:2461 XFillArc = _lib.XFillArc XFillArc.restype = c_int XFillArc.argtypes = [POINTER(Display), Drawable, GC, c_int, c_int, c_uint, c_uint, c_int, c_int] # /usr/include/X11/Xlib.h:2473 XFillArcs = _lib.XFillArcs XFillArcs.restype = c_int XFillArcs.argtypes = [POINTER(Display), Drawable, GC, POINTER(XArc), c_int] # /usr/include/X11/Xlib.h:2481 XFillPolygon = _lib.XFillPolygon XFillPolygon.restype = c_int XFillPolygon.argtypes = [POINTER(Display), Drawable, GC, POINTER(XPoint), c_int, c_int, c_int] # /usr/include/X11/Xlib.h:2491 XFillRectangle = _lib.XFillRectangle XFillRectangle.restype = c_int XFillRectangle.argtypes = [POINTER(Display), Drawable, GC, c_int, c_int, c_uint, c_uint] # /usr/include/X11/Xlib.h:2501 XFillRectangles = _lib.XFillRectangles XFillRectangles.restype = c_int XFillRectangles.argtypes = [POINTER(Display), Drawable, GC, POINTER(XRectangle), c_int] # /usr/include/X11/Xlib.h:2509 XFlush = _lib.XFlush XFlush.restype = c_int XFlush.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:2513 XForceScreenSaver = _lib.XForceScreenSaver XForceScreenSaver.restype = c_int XForceScreenSaver.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:2518 XFree = _lib.XFree XFree.restype = c_int XFree.argtypes = [POINTER(None)] # /usr/include/X11/Xlib.h:2522 XFreeColormap = _lib.XFreeColormap XFreeColormap.restype = c_int XFreeColormap.argtypes = [POINTER(Display), Colormap] # /usr/include/X11/Xlib.h:2527 XFreeColors = _lib.XFreeColors XFreeColors.restype = c_int XFreeColors.argtypes = [POINTER(Display), Colormap, POINTER(c_ulong), c_int, c_ulong] # /usr/include/X11/Xlib.h:2535 XFreeCursor = _lib.XFreeCursor XFreeCursor.restype = c_int XFreeCursor.argtypes = [POINTER(Display), Cursor] # /usr/include/X11/Xlib.h:2540 XFreeExtensionList = _lib.XFreeExtensionList XFreeExtensionList.restype = c_int XFreeExtensionList.argtypes = [POINTER(c_char_p)] # /usr/include/X11/Xlib.h:2544 XFreeFont = _lib.XFreeFont XFreeFont.restype = c_int XFreeFont.argtypes = [POINTER(Display), POINTER(XFontStruct)] # /usr/include/X11/Xlib.h:2549 XFreeFontInfo = _lib.XFreeFontInfo XFreeFontInfo.restype = c_int XFreeFontInfo.argtypes = [POINTER(c_char_p), POINTER(XFontStruct), c_int] # /usr/include/X11/Xlib.h:2555 XFreeFontNames = _lib.XFreeFontNames XFreeFontNames.restype = c_int XFreeFontNames.argtypes = [POINTER(c_char_p)] # /usr/include/X11/Xlib.h:2559 XFreeFontPath = _lib.XFreeFontPath XFreeFontPath.restype = c_int XFreeFontPath.argtypes = [POINTER(c_char_p)] # /usr/include/X11/Xlib.h:2563 XFreeGC = _lib.XFreeGC XFreeGC.restype = c_int XFreeGC.argtypes = [POINTER(Display), GC] # /usr/include/X11/Xlib.h:2568 XFreeModifiermap = _lib.XFreeModifiermap XFreeModifiermap.restype = c_int XFreeModifiermap.argtypes = [POINTER(XModifierKeymap)] # /usr/include/X11/Xlib.h:2572 XFreePixmap = _lib.XFreePixmap XFreePixmap.restype = c_int XFreePixmap.argtypes = [POINTER(Display), Pixmap] # /usr/include/X11/Xlib.h:2577 XGeometry = _lib.XGeometry XGeometry.restype = c_int XGeometry.argtypes = [POINTER(Display), c_int, c_char_p, c_char_p, c_uint, c_uint, c_uint, c_int, c_int, POINTER(c_int), POINTER(c_int), POINTER(c_int), POINTER(c_int)] # /usr/include/X11/Xlib.h:2593 XGetErrorDatabaseText = _lib.XGetErrorDatabaseText XGetErrorDatabaseText.restype = c_int XGetErrorDatabaseText.argtypes = [POINTER(Display), c_char_p, c_char_p, c_char_p, c_char_p, c_int] # /usr/include/X11/Xlib.h:2602 XGetErrorText = _lib.XGetErrorText XGetErrorText.restype = c_int XGetErrorText.argtypes = [POINTER(Display), c_int, c_char_p, c_int] # /usr/include/X11/Xlib.h:2609 XGetFontProperty = _lib.XGetFontProperty XGetFontProperty.restype = c_int XGetFontProperty.argtypes = [POINTER(XFontStruct), Atom, POINTER(c_ulong)] # /usr/include/X11/Xlib.h:2615 XGetGCValues = _lib.XGetGCValues XGetGCValues.restype = c_int XGetGCValues.argtypes = [POINTER(Display), GC, c_ulong, POINTER(XGCValues)] # /usr/include/X11/Xlib.h:2622 XGetGeometry = _lib.XGetGeometry XGetGeometry.restype = c_int XGetGeometry.argtypes = [POINTER(Display), Drawable, POINTER(Window), POINTER(c_int), POINTER(c_int), POINTER(c_uint), POINTER(c_uint), POINTER(c_uint), POINTER(c_uint)] # /usr/include/X11/Xlib.h:2634 XGetIconName = _lib.XGetIconName XGetIconName.restype = c_int XGetIconName.argtypes = [POINTER(Display), Window, POINTER(c_char_p)] # /usr/include/X11/Xlib.h:2640 XGetInputFocus = _lib.XGetInputFocus XGetInputFocus.restype = c_int XGetInputFocus.argtypes = [POINTER(Display), POINTER(Window), POINTER(c_int)] # /usr/include/X11/Xlib.h:2646 XGetKeyboardControl = _lib.XGetKeyboardControl XGetKeyboardControl.restype = c_int XGetKeyboardControl.argtypes = [POINTER(Display), POINTER(XKeyboardState)] # /usr/include/X11/Xlib.h:2651 XGetPointerControl = _lib.XGetPointerControl XGetPointerControl.restype = c_int XGetPointerControl.argtypes = [POINTER(Display), POINTER(c_int), POINTER(c_int), POINTER(c_int)] # /usr/include/X11/Xlib.h:2658 XGetPointerMapping = _lib.XGetPointerMapping XGetPointerMapping.restype = c_int XGetPointerMapping.argtypes = [POINTER(Display), POINTER(c_ubyte), c_int] # /usr/include/X11/Xlib.h:2664 XGetScreenSaver = _lib.XGetScreenSaver XGetScreenSaver.restype = c_int XGetScreenSaver.argtypes = [POINTER(Display), POINTER(c_int), POINTER(c_int), POINTER(c_int), POINTER(c_int)] # /usr/include/X11/Xlib.h:2672 XGetTransientForHint = _lib.XGetTransientForHint XGetTransientForHint.restype = c_int XGetTransientForHint.argtypes = [POINTER(Display), Window, POINTER(Window)] # /usr/include/X11/Xlib.h:2678 XGetWindowProperty = _lib.XGetWindowProperty XGetWindowProperty.restype = c_int XGetWindowProperty.argtypes = [POINTER(Display), Window, Atom, c_long, c_long, c_int, Atom, POINTER(Atom), POINTER(c_int), POINTER(c_ulong), POINTER(c_ulong), POINTER(POINTER(c_ubyte))] # /usr/include/X11/Xlib.h:2693 XGetWindowAttributes = _lib.XGetWindowAttributes XGetWindowAttributes.restype = c_int XGetWindowAttributes.argtypes = [POINTER(Display), Window, POINTER(XWindowAttributes)] # /usr/include/X11/Xlib.h:2699 XGrabButton = _lib.XGrabButton XGrabButton.restype = c_int XGrabButton.argtypes = [POINTER(Display), c_uint, c_uint, Window, c_int, c_uint, c_int, c_int, Window, Cursor] # /usr/include/X11/Xlib.h:2712 XGrabKey = _lib.XGrabKey XGrabKey.restype = c_int XGrabKey.argtypes = [POINTER(Display), c_int, c_uint, Window, c_int, c_int, c_int] # /usr/include/X11/Xlib.h:2722 XGrabKeyboard = _lib.XGrabKeyboard XGrabKeyboard.restype = c_int XGrabKeyboard.argtypes = [POINTER(Display), Window, c_int, c_int, c_int, Time] # /usr/include/X11/Xlib.h:2731 XGrabPointer = _lib.XGrabPointer XGrabPointer.restype = c_int XGrabPointer.argtypes = [POINTER(Display), Window, c_int, c_uint, c_int, c_int, Window, Cursor, Time] # /usr/include/X11/Xlib.h:2743 XGrabServer = _lib.XGrabServer XGrabServer.restype = c_int XGrabServer.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:2747 XHeightMMOfScreen = _lib.XHeightMMOfScreen XHeightMMOfScreen.restype = c_int XHeightMMOfScreen.argtypes = [POINTER(Screen)] # /usr/include/X11/Xlib.h:2751 XHeightOfScreen = _lib.XHeightOfScreen XHeightOfScreen.restype = c_int XHeightOfScreen.argtypes = [POINTER(Screen)] # /usr/include/X11/Xlib.h:2755 XIfEvent = _lib.XIfEvent XIfEvent.restype = c_int XIfEvent.argtypes = [POINTER(Display), POINTER(XEvent), CFUNCTYPE(c_int, POINTER(Display), POINTER(XEvent), XPointer), XPointer] # /usr/include/X11/Xlib.h:2766 XImageByteOrder = _lib.XImageByteOrder XImageByteOrder.restype = c_int XImageByteOrder.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:2770 XInstallColormap = _lib.XInstallColormap XInstallColormap.restype = c_int XInstallColormap.argtypes = [POINTER(Display), Colormap] # /usr/include/X11/Xlib.h:2775 XKeysymToKeycode = _lib.XKeysymToKeycode XKeysymToKeycode.restype = KeyCode XKeysymToKeycode.argtypes = [POINTER(Display), KeySym] # /usr/include/X11/Xlib.h:2780 XKillClient = _lib.XKillClient XKillClient.restype = c_int XKillClient.argtypes = [POINTER(Display), XID] # /usr/include/X11/Xlib.h:2785 XLookupColor = _lib.XLookupColor XLookupColor.restype = c_int XLookupColor.argtypes = [POINTER(Display), Colormap, c_char_p, POINTER(XColor), POINTER(XColor)] # /usr/include/X11/Xlib.h:2793 XLowerWindow = _lib.XLowerWindow XLowerWindow.restype = c_int XLowerWindow.argtypes = [POINTER(Display), Window] # /usr/include/X11/Xlib.h:2798 XMapRaised = _lib.XMapRaised XMapRaised.restype = c_int XMapRaised.argtypes = [POINTER(Display), Window] # /usr/include/X11/Xlib.h:2803 XMapSubwindows = _lib.XMapSubwindows XMapSubwindows.restype = c_int XMapSubwindows.argtypes = [POINTER(Display), Window] # /usr/include/X11/Xlib.h:2808 XMapWindow = _lib.XMapWindow XMapWindow.restype = c_int XMapWindow.argtypes = [POINTER(Display), Window] # /usr/include/X11/Xlib.h:2813 XMaskEvent = _lib.XMaskEvent XMaskEvent.restype = c_int XMaskEvent.argtypes = [POINTER(Display), c_long, POINTER(XEvent)] # /usr/include/X11/Xlib.h:2819 XMaxCmapsOfScreen = _lib.XMaxCmapsOfScreen XMaxCmapsOfScreen.restype = c_int XMaxCmapsOfScreen.argtypes = [POINTER(Screen)] # /usr/include/X11/Xlib.h:2823 XMinCmapsOfScreen = _lib.XMinCmapsOfScreen XMinCmapsOfScreen.restype = c_int XMinCmapsOfScreen.argtypes = [POINTER(Screen)] # /usr/include/X11/Xlib.h:2827 XMoveResizeWindow = _lib.XMoveResizeWindow XMoveResizeWindow.restype = c_int XMoveResizeWindow.argtypes = [POINTER(Display), Window, c_int, c_int, c_uint, c_uint] # /usr/include/X11/Xlib.h:2836 XMoveWindow = _lib.XMoveWindow XMoveWindow.restype = c_int XMoveWindow.argtypes = [POINTER(Display), Window, c_int, c_int] # /usr/include/X11/Xlib.h:2843 XNextEvent = _lib.XNextEvent XNextEvent.restype = c_int XNextEvent.argtypes = [POINTER(Display), POINTER(XEvent)] # /usr/include/X11/Xlib.h:2848 XNoOp = _lib.XNoOp XNoOp.restype = c_int XNoOp.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:2852 XParseColor = _lib.XParseColor XParseColor.restype = c_int XParseColor.argtypes = [POINTER(Display), Colormap, c_char_p, POINTER(XColor)] # /usr/include/X11/Xlib.h:2859 XParseGeometry = _lib.XParseGeometry XParseGeometry.restype = c_int XParseGeometry.argtypes = [c_char_p, POINTER(c_int), POINTER(c_int), POINTER(c_uint), POINTER(c_uint)] # /usr/include/X11/Xlib.h:2867 XPeekEvent = _lib.XPeekEvent XPeekEvent.restype = c_int XPeekEvent.argtypes = [POINTER(Display), POINTER(XEvent)] # /usr/include/X11/Xlib.h:2872 XPeekIfEvent = _lib.XPeekIfEvent XPeekIfEvent.restype = c_int XPeekIfEvent.argtypes = [POINTER(Display), POINTER(XEvent), CFUNCTYPE(c_int, POINTER(Display), POINTER(XEvent), XPointer), XPointer] # /usr/include/X11/Xlib.h:2883 XPending = _lib.XPending XPending.restype = c_int XPending.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:2887 XPlanesOfScreen = _lib.XPlanesOfScreen XPlanesOfScreen.restype = c_int XPlanesOfScreen.argtypes = [POINTER(Screen)] # /usr/include/X11/Xlib.h:2891 XProtocolRevision = _lib.XProtocolRevision XProtocolRevision.restype = c_int XProtocolRevision.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:2895 XProtocolVersion = _lib.XProtocolVersion XProtocolVersion.restype = c_int XProtocolVersion.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:2900 XPutBackEvent = _lib.XPutBackEvent XPutBackEvent.restype = c_int XPutBackEvent.argtypes = [POINTER(Display), POINTER(XEvent)] # /usr/include/X11/Xlib.h:2905 XPutImage = _lib.XPutImage XPutImage.restype = c_int XPutImage.argtypes = [POINTER(Display), Drawable, GC, POINTER(XImage), c_int, c_int, c_int, c_int, c_uint, c_uint] # /usr/include/X11/Xlib.h:2918 XQLength = _lib.XQLength XQLength.restype = c_int XQLength.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:2922 XQueryBestCursor = _lib.XQueryBestCursor XQueryBestCursor.restype = c_int XQueryBestCursor.argtypes = [POINTER(Display), Drawable, c_uint, c_uint, POINTER(c_uint), POINTER(c_uint)] # /usr/include/X11/Xlib.h:2931 XQueryBestSize = _lib.XQueryBestSize XQueryBestSize.restype = c_int XQueryBestSize.argtypes = [POINTER(Display), c_int, Drawable, c_uint, c_uint, POINTER(c_uint), POINTER(c_uint)] # /usr/include/X11/Xlib.h:2941 XQueryBestStipple = _lib.XQueryBestStipple XQueryBestStipple.restype = c_int XQueryBestStipple.argtypes = [POINTER(Display), Drawable, c_uint, c_uint, POINTER(c_uint), POINTER(c_uint)] # /usr/include/X11/Xlib.h:2950 XQueryBestTile = _lib.XQueryBestTile XQueryBestTile.restype = c_int XQueryBestTile.argtypes = [POINTER(Display), Drawable, c_uint, c_uint, POINTER(c_uint), POINTER(c_uint)] # /usr/include/X11/Xlib.h:2959 XQueryColor = _lib.XQueryColor XQueryColor.restype = c_int XQueryColor.argtypes = [POINTER(Display), Colormap, POINTER(XColor)] # /usr/include/X11/Xlib.h:2965 XQueryColors = _lib.XQueryColors XQueryColors.restype = c_int XQueryColors.argtypes = [POINTER(Display), Colormap, POINTER(XColor), c_int] # /usr/include/X11/Xlib.h:2972 XQueryExtension = _lib.XQueryExtension XQueryExtension.restype = c_int XQueryExtension.argtypes = [POINTER(Display), c_char_p, POINTER(c_int), POINTER(c_int), POINTER(c_int)] # /usr/include/X11/Xlib.h:2980 XQueryKeymap = _lib.XQueryKeymap XQueryKeymap.restype = c_int XQueryKeymap.argtypes = [POINTER(Display), c_char * 32] # /usr/include/X11/Xlib.h:2985 XQueryPointer = _lib.XQueryPointer XQueryPointer.restype = c_int XQueryPointer.argtypes = [POINTER(Display), Window, POINTER(Window), POINTER(Window), POINTER(c_int), POINTER(c_int), POINTER(c_int), POINTER(c_int), POINTER(c_uint)] # /usr/include/X11/Xlib.h:2997 XQueryTextExtents = _lib.XQueryTextExtents XQueryTextExtents.restype = c_int XQueryTextExtents.argtypes = [POINTER(Display), XID, c_char_p, c_int, POINTER(c_int), POINTER(c_int), POINTER(c_int), POINTER(XCharStruct)] # /usr/include/X11/Xlib.h:3008 XQueryTextExtents16 = _lib.XQueryTextExtents16 XQueryTextExtents16.restype = c_int XQueryTextExtents16.argtypes = [POINTER(Display), XID, POINTER(XChar2b), c_int, POINTER(c_int), POINTER(c_int), POINTER(c_int), POINTER(XCharStruct)] # /usr/include/X11/Xlib.h:3019 XQueryTree = _lib.XQueryTree XQueryTree.restype = c_int XQueryTree.argtypes = [POINTER(Display), Window, POINTER(Window), POINTER(Window), POINTER(POINTER(Window)), POINTER(c_uint)] # /usr/include/X11/Xlib.h:3028 XRaiseWindow = _lib.XRaiseWindow XRaiseWindow.restype = c_int XRaiseWindow.argtypes = [POINTER(Display), Window] # /usr/include/X11/Xlib.h:3033 XReadBitmapFile = _lib.XReadBitmapFile XReadBitmapFile.restype = c_int XReadBitmapFile.argtypes = [POINTER(Display), Drawable, c_char_p, POINTER(c_uint), POINTER(c_uint), POINTER(Pixmap), POINTER(c_int), POINTER(c_int)] # /usr/include/X11/Xlib.h:3044 XReadBitmapFileData = _lib.XReadBitmapFileData XReadBitmapFileData.restype = c_int XReadBitmapFileData.argtypes = [c_char_p, POINTER(c_uint), POINTER(c_uint), POINTER(POINTER(c_ubyte)), POINTER(c_int), POINTER(c_int)] # /usr/include/X11/Xlib.h:3053 XRebindKeysym = _lib.XRebindKeysym XRebindKeysym.restype = c_int XRebindKeysym.argtypes = [POINTER(Display), KeySym, POINTER(KeySym), c_int, POINTER(c_ubyte), c_int] # /usr/include/X11/Xlib.h:3062 XRecolorCursor = _lib.XRecolorCursor XRecolorCursor.restype = c_int XRecolorCursor.argtypes = [POINTER(Display), Cursor, POINTER(XColor), POINTER(XColor)] # /usr/include/X11/Xlib.h:3069 XRefreshKeyboardMapping = _lib.XRefreshKeyboardMapping XRefreshKeyboardMapping.restype = c_int XRefreshKeyboardMapping.argtypes = [POINTER(XMappingEvent)] # /usr/include/X11/Xlib.h:3073 XRemoveFromSaveSet = _lib.XRemoveFromSaveSet XRemoveFromSaveSet.restype = c_int XRemoveFromSaveSet.argtypes = [POINTER(Display), Window] # /usr/include/X11/Xlib.h:3078 XRemoveHost = _lib.XRemoveHost XRemoveHost.restype = c_int XRemoveHost.argtypes = [POINTER(Display), POINTER(XHostAddress)] # /usr/include/X11/Xlib.h:3083 XRemoveHosts = _lib.XRemoveHosts XRemoveHosts.restype = c_int XRemoveHosts.argtypes = [POINTER(Display), POINTER(XHostAddress), c_int] # /usr/include/X11/Xlib.h:3089 XReparentWindow = _lib.XReparentWindow XReparentWindow.restype = c_int XReparentWindow.argtypes = [POINTER(Display), Window, Window, c_int, c_int] # /usr/include/X11/Xlib.h:3097 XResetScreenSaver = _lib.XResetScreenSaver XResetScreenSaver.restype = c_int XResetScreenSaver.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:3101 XResizeWindow = _lib.XResizeWindow XResizeWindow.restype = c_int XResizeWindow.argtypes = [POINTER(Display), Window, c_uint, c_uint] # /usr/include/X11/Xlib.h:3108 XRestackWindows = _lib.XRestackWindows XRestackWindows.restype = c_int XRestackWindows.argtypes = [POINTER(Display), POINTER(Window), c_int] # /usr/include/X11/Xlib.h:3114 XRotateBuffers = _lib.XRotateBuffers XRotateBuffers.restype = c_int XRotateBuffers.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:3119 XRotateWindowProperties = _lib.XRotateWindowProperties XRotateWindowProperties.restype = c_int XRotateWindowProperties.argtypes = [POINTER(Display), Window, POINTER(Atom), c_int, c_int] # /usr/include/X11/Xlib.h:3127 XScreenCount = _lib.XScreenCount XScreenCount.restype = c_int XScreenCount.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:3131 XSelectInput = _lib.XSelectInput XSelectInput.restype = c_int XSelectInput.argtypes = [POINTER(Display), Window, c_long] # /usr/include/X11/Xlib.h:3137 XSendEvent = _lib.XSendEvent XSendEvent.restype = c_int XSendEvent.argtypes = [POINTER(Display), Window, c_int, c_long, POINTER(XEvent)] # /usr/include/X11/Xlib.h:3145 XSetAccessControl = _lib.XSetAccessControl XSetAccessControl.restype = c_int XSetAccessControl.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:3150 XSetArcMode = _lib.XSetArcMode XSetArcMode.restype = c_int XSetArcMode.argtypes = [POINTER(Display), GC, c_int] # /usr/include/X11/Xlib.h:3156 XSetBackground = _lib.XSetBackground XSetBackground.restype = c_int XSetBackground.argtypes = [POINTER(Display), GC, c_ulong] # /usr/include/X11/Xlib.h:3162 XSetClipMask = _lib.XSetClipMask XSetClipMask.restype = c_int XSetClipMask.argtypes = [POINTER(Display), GC, Pixmap] # /usr/include/X11/Xlib.h:3168 XSetClipOrigin = _lib.XSetClipOrigin XSetClipOrigin.restype = c_int XSetClipOrigin.argtypes = [POINTER(Display), GC, c_int, c_int] # /usr/include/X11/Xlib.h:3175 XSetClipRectangles = _lib.XSetClipRectangles XSetClipRectangles.restype = c_int XSetClipRectangles.argtypes = [POINTER(Display), GC, c_int, c_int, POINTER(XRectangle), c_int, c_int] # /usr/include/X11/Xlib.h:3185 XSetCloseDownMode = _lib.XSetCloseDownMode XSetCloseDownMode.restype = c_int XSetCloseDownMode.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:3190 XSetCommand = _lib.XSetCommand XSetCommand.restype = c_int XSetCommand.argtypes = [POINTER(Display), Window, POINTER(c_char_p), c_int] # /usr/include/X11/Xlib.h:3197 XSetDashes = _lib.XSetDashes XSetDashes.restype = c_int XSetDashes.argtypes = [POINTER(Display), GC, c_int, c_char_p, c_int] # /usr/include/X11/Xlib.h:3205 XSetFillRule = _lib.XSetFillRule XSetFillRule.restype = c_int XSetFillRule.argtypes = [POINTER(Display), GC, c_int] # /usr/include/X11/Xlib.h:3211 XSetFillStyle = _lib.XSetFillStyle XSetFillStyle.restype = c_int XSetFillStyle.argtypes = [POINTER(Display), GC, c_int] # /usr/include/X11/Xlib.h:3217 XSetFont = _lib.XSetFont XSetFont.restype = c_int XSetFont.argtypes = [POINTER(Display), GC, Font] # /usr/include/X11/Xlib.h:3223 XSetFontPath = _lib.XSetFontPath XSetFontPath.restype = c_int XSetFontPath.argtypes = [POINTER(Display), POINTER(c_char_p), c_int] # /usr/include/X11/Xlib.h:3229 XSetForeground = _lib.XSetForeground XSetForeground.restype = c_int XSetForeground.argtypes = [POINTER(Display), GC, c_ulong] # /usr/include/X11/Xlib.h:3235 XSetFunction = _lib.XSetFunction XSetFunction.restype = c_int XSetFunction.argtypes = [POINTER(Display), GC, c_int] # /usr/include/X11/Xlib.h:3241 XSetGraphicsExposures = _lib.XSetGraphicsExposures XSetGraphicsExposures.restype = c_int XSetGraphicsExposures.argtypes = [POINTER(Display), GC, c_int] # /usr/include/X11/Xlib.h:3247 XSetIconName = _lib.XSetIconName XSetIconName.restype = c_int XSetIconName.argtypes = [POINTER(Display), Window, c_char_p] # /usr/include/X11/Xlib.h:3253 XSetInputFocus = _lib.XSetInputFocus XSetInputFocus.restype = c_int XSetInputFocus.argtypes = [POINTER(Display), Window, c_int, Time] # /usr/include/X11/Xlib.h:3260 XSetLineAttributes = _lib.XSetLineAttributes XSetLineAttributes.restype = c_int XSetLineAttributes.argtypes = [POINTER(Display), GC, c_uint, c_int, c_int, c_int] # /usr/include/X11/Xlib.h:3269 XSetModifierMapping = _lib.XSetModifierMapping XSetModifierMapping.restype = c_int XSetModifierMapping.argtypes = [POINTER(Display), POINTER(XModifierKeymap)] # /usr/include/X11/Xlib.h:3274 XSetPlaneMask = _lib.XSetPlaneMask XSetPlaneMask.restype = c_int XSetPlaneMask.argtypes = [POINTER(Display), GC, c_ulong] # /usr/include/X11/Xlib.h:3280 XSetPointerMapping = _lib.XSetPointerMapping XSetPointerMapping.restype = c_int XSetPointerMapping.argtypes = [POINTER(Display), POINTER(c_ubyte), c_int] # /usr/include/X11/Xlib.h:3286 XSetScreenSaver = _lib.XSetScreenSaver XSetScreenSaver.restype = c_int XSetScreenSaver.argtypes = [POINTER(Display), c_int, c_int, c_int, c_int] # /usr/include/X11/Xlib.h:3294 XSetSelectionOwner = _lib.XSetSelectionOwner XSetSelectionOwner.restype = c_int XSetSelectionOwner.argtypes = [POINTER(Display), Atom, Window, Time] # /usr/include/X11/Xlib.h:3301 XSetState = _lib.XSetState XSetState.restype = c_int XSetState.argtypes = [POINTER(Display), GC, c_ulong, c_ulong, c_int, c_ulong] # /usr/include/X11/Xlib.h:3310 XSetStipple = _lib.XSetStipple XSetStipple.restype = c_int XSetStipple.argtypes = [POINTER(Display), GC, Pixmap] # /usr/include/X11/Xlib.h:3316 XSetSubwindowMode = _lib.XSetSubwindowMode XSetSubwindowMode.restype = c_int XSetSubwindowMode.argtypes = [POINTER(Display), GC, c_int] # /usr/include/X11/Xlib.h:3322 XSetTSOrigin = _lib.XSetTSOrigin XSetTSOrigin.restype = c_int XSetTSOrigin.argtypes = [POINTER(Display), GC, c_int, c_int] # /usr/include/X11/Xlib.h:3329 XSetTile = _lib.XSetTile XSetTile.restype = c_int XSetTile.argtypes = [POINTER(Display), GC, Pixmap] # /usr/include/X11/Xlib.h:3335 XSetWindowBackground = _lib.XSetWindowBackground XSetWindowBackground.restype = c_int XSetWindowBackground.argtypes = [POINTER(Display), Window, c_ulong] # /usr/include/X11/Xlib.h:3341 XSetWindowBackgroundPixmap = _lib.XSetWindowBackgroundPixmap XSetWindowBackgroundPixmap.restype = c_int XSetWindowBackgroundPixmap.argtypes = [POINTER(Display), Window, Pixmap] # /usr/include/X11/Xlib.h:3347 XSetWindowBorder = _lib.XSetWindowBorder XSetWindowBorder.restype = c_int XSetWindowBorder.argtypes = [POINTER(Display), Window, c_ulong] # /usr/include/X11/Xlib.h:3353 XSetWindowBorderPixmap = _lib.XSetWindowBorderPixmap XSetWindowBorderPixmap.restype = c_int XSetWindowBorderPixmap.argtypes = [POINTER(Display), Window, Pixmap] # /usr/include/X11/Xlib.h:3359 XSetWindowBorderWidth = _lib.XSetWindowBorderWidth XSetWindowBorderWidth.restype = c_int XSetWindowBorderWidth.argtypes = [POINTER(Display), Window, c_uint] # /usr/include/X11/Xlib.h:3365 XSetWindowColormap = _lib.XSetWindowColormap XSetWindowColormap.restype = c_int XSetWindowColormap.argtypes = [POINTER(Display), Window, Colormap] # /usr/include/X11/Xlib.h:3371 XStoreBuffer = _lib.XStoreBuffer XStoreBuffer.restype = c_int XStoreBuffer.argtypes = [POINTER(Display), c_char_p, c_int, c_int] # /usr/include/X11/Xlib.h:3378 XStoreBytes = _lib.XStoreBytes XStoreBytes.restype = c_int XStoreBytes.argtypes = [POINTER(Display), c_char_p, c_int] # /usr/include/X11/Xlib.h:3384 XStoreColor = _lib.XStoreColor XStoreColor.restype = c_int XStoreColor.argtypes = [POINTER(Display), Colormap, POINTER(XColor)] # /usr/include/X11/Xlib.h:3390 XStoreColors = _lib.XStoreColors XStoreColors.restype = c_int XStoreColors.argtypes = [POINTER(Display), Colormap, POINTER(XColor), c_int] # /usr/include/X11/Xlib.h:3397 XStoreName = _lib.XStoreName XStoreName.restype = c_int XStoreName.argtypes = [POINTER(Display), Window, c_char_p] # /usr/include/X11/Xlib.h:3403 XStoreNamedColor = _lib.XStoreNamedColor XStoreNamedColor.restype = c_int XStoreNamedColor.argtypes = [POINTER(Display), Colormap, c_char_p, c_ulong, c_int] # /usr/include/X11/Xlib.h:3411 XSync = _lib.XSync XSync.restype = c_int XSync.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:3416 XTextExtents = _lib.XTextExtents XTextExtents.restype = c_int XTextExtents.argtypes = [POINTER(XFontStruct), c_char_p, c_int, POINTER(c_int), POINTER(c_int), POINTER(c_int), POINTER(XCharStruct)] # /usr/include/X11/Xlib.h:3426 XTextExtents16 = _lib.XTextExtents16 XTextExtents16.restype = c_int XTextExtents16.argtypes = [POINTER(XFontStruct), POINTER(XChar2b), c_int, POINTER(c_int), POINTER(c_int), POINTER(c_int), POINTER(XCharStruct)] # /usr/include/X11/Xlib.h:3436 XTextWidth = _lib.XTextWidth XTextWidth.restype = c_int XTextWidth.argtypes = [POINTER(XFontStruct), c_char_p, c_int] # /usr/include/X11/Xlib.h:3442 XTextWidth16 = _lib.XTextWidth16 XTextWidth16.restype = c_int XTextWidth16.argtypes = [POINTER(XFontStruct), POINTER(XChar2b), c_int] # /usr/include/X11/Xlib.h:3448 XTranslateCoordinates = _lib.XTranslateCoordinates XTranslateCoordinates.restype = c_int XTranslateCoordinates.argtypes = [POINTER(Display), Window, Window, c_int, c_int, POINTER(c_int), POINTER(c_int), POINTER(Window)] # /usr/include/X11/Xlib.h:3459 XUndefineCursor = _lib.XUndefineCursor XUndefineCursor.restype = c_int XUndefineCursor.argtypes = [POINTER(Display), Window] # /usr/include/X11/Xlib.h:3464 XUngrabButton = _lib.XUngrabButton XUngrabButton.restype = c_int XUngrabButton.argtypes = [POINTER(Display), c_uint, c_uint, Window] # /usr/include/X11/Xlib.h:3471 XUngrabKey = _lib.XUngrabKey XUngrabKey.restype = c_int XUngrabKey.argtypes = [POINTER(Display), c_int, c_uint, Window] # /usr/include/X11/Xlib.h:3478 XUngrabKeyboard = _lib.XUngrabKeyboard XUngrabKeyboard.restype = c_int XUngrabKeyboard.argtypes = [POINTER(Display), Time] # /usr/include/X11/Xlib.h:3483 XUngrabPointer = _lib.XUngrabPointer XUngrabPointer.restype = c_int XUngrabPointer.argtypes = [POINTER(Display), Time] # /usr/include/X11/Xlib.h:3488 XUngrabServer = _lib.XUngrabServer XUngrabServer.restype = c_int XUngrabServer.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:3492 XUninstallColormap = _lib.XUninstallColormap XUninstallColormap.restype = c_int XUninstallColormap.argtypes = [POINTER(Display), Colormap] # /usr/include/X11/Xlib.h:3497 XUnloadFont = _lib.XUnloadFont XUnloadFont.restype = c_int XUnloadFont.argtypes = [POINTER(Display), Font] # /usr/include/X11/Xlib.h:3502 XUnmapSubwindows = _lib.XUnmapSubwindows XUnmapSubwindows.restype = c_int XUnmapSubwindows.argtypes = [POINTER(Display), Window] # /usr/include/X11/Xlib.h:3507 XUnmapWindow = _lib.XUnmapWindow XUnmapWindow.restype = c_int XUnmapWindow.argtypes = [POINTER(Display), Window] # /usr/include/X11/Xlib.h:3512 XVendorRelease = _lib.XVendorRelease XVendorRelease.restype = c_int XVendorRelease.argtypes = [POINTER(Display)] # /usr/include/X11/Xlib.h:3516 XWarpPointer = _lib.XWarpPointer XWarpPointer.restype = c_int XWarpPointer.argtypes = [POINTER(Display), Window, Window, c_int, c_int, c_uint, c_uint, c_int, c_int] # /usr/include/X11/Xlib.h:3528 XWidthMMOfScreen = _lib.XWidthMMOfScreen XWidthMMOfScreen.restype = c_int XWidthMMOfScreen.argtypes = [POINTER(Screen)] # /usr/include/X11/Xlib.h:3532 XWidthOfScreen = _lib.XWidthOfScreen XWidthOfScreen.restype = c_int XWidthOfScreen.argtypes = [POINTER(Screen)] # /usr/include/X11/Xlib.h:3536 XWindowEvent = _lib.XWindowEvent XWindowEvent.restype = c_int XWindowEvent.argtypes = [POINTER(Display), Window, c_long, POINTER(XEvent)] # /usr/include/X11/Xlib.h:3543 XWriteBitmapFile = _lib.XWriteBitmapFile XWriteBitmapFile.restype = c_int XWriteBitmapFile.argtypes = [POINTER(Display), c_char_p, Pixmap, c_uint, c_uint, c_int, c_int] # /usr/include/X11/Xlib.h:3553 XSupportsLocale = _lib.XSupportsLocale XSupportsLocale.restype = c_int XSupportsLocale.argtypes = [] # /usr/include/X11/Xlib.h:3555 XSetLocaleModifiers = _lib.XSetLocaleModifiers XSetLocaleModifiers.restype = c_char_p XSetLocaleModifiers.argtypes = [c_char_p] class struct__XrmHashBucketRec(Structure): __slots__ = [ ] struct__XrmHashBucketRec._fields_ = [ ('_opaque_struct', c_int) ] # /usr/include/X11/Xlib.h:3559 XOpenOM = _lib.XOpenOM XOpenOM.restype = XOM XOpenOM.argtypes = [POINTER(Display), POINTER(struct__XrmHashBucketRec), c_char_p, c_char_p] # /usr/include/X11/Xlib.h:3566 XCloseOM = _lib.XCloseOM XCloseOM.restype = c_int XCloseOM.argtypes = [XOM] # /usr/include/X11/Xlib.h:3570 XSetOMValues = _lib.XSetOMValues XSetOMValues.restype = c_char_p XSetOMValues.argtypes = [XOM] # /usr/include/X11/Xlib.h:3575 XGetOMValues = _lib.XGetOMValues XGetOMValues.restype = c_char_p XGetOMValues.argtypes = [XOM] # /usr/include/X11/Xlib.h:3580 XDisplayOfOM = _lib.XDisplayOfOM XDisplayOfOM.restype = POINTER(Display) XDisplayOfOM.argtypes = [XOM] # /usr/include/X11/Xlib.h:3584 XLocaleOfOM = _lib.XLocaleOfOM XLocaleOfOM.restype = c_char_p XLocaleOfOM.argtypes = [XOM] # /usr/include/X11/Xlib.h:3588 XCreateOC = _lib.XCreateOC XCreateOC.restype = XOC XCreateOC.argtypes = [XOM] # /usr/include/X11/Xlib.h:3593 XDestroyOC = _lib.XDestroyOC XDestroyOC.restype = None XDestroyOC.argtypes = [XOC] # /usr/include/X11/Xlib.h:3597 XOMOfOC = _lib.XOMOfOC XOMOfOC.restype = XOM XOMOfOC.argtypes = [XOC] # /usr/include/X11/Xlib.h:3601 XSetOCValues = _lib.XSetOCValues XSetOCValues.restype = c_char_p XSetOCValues.argtypes = [XOC] # /usr/include/X11/Xlib.h:3606 XGetOCValues = _lib.XGetOCValues XGetOCValues.restype = c_char_p XGetOCValues.argtypes = [XOC] # /usr/include/X11/Xlib.h:3611 XCreateFontSet = _lib.XCreateFontSet XCreateFontSet.restype = XFontSet XCreateFontSet.argtypes = [POINTER(Display), c_char_p, POINTER(POINTER(c_char_p)), POINTER(c_int), POINTER(c_char_p)] # /usr/include/X11/Xlib.h:3619 XFreeFontSet = _lib.XFreeFontSet XFreeFontSet.restype = None XFreeFontSet.argtypes = [POINTER(Display), XFontSet] # /usr/include/X11/Xlib.h:3624 XFontsOfFontSet = _lib.XFontsOfFontSet XFontsOfFontSet.restype = c_int XFontsOfFontSet.argtypes = [XFontSet, POINTER(POINTER(POINTER(XFontStruct))), POINTER(POINTER(c_char_p))] # /usr/include/X11/Xlib.h:3630 XBaseFontNameListOfFontSet = _lib.XBaseFontNameListOfFontSet XBaseFontNameListOfFontSet.restype = c_char_p XBaseFontNameListOfFontSet.argtypes = [XFontSet] # /usr/include/X11/Xlib.h:3634 XLocaleOfFontSet = _lib.XLocaleOfFontSet XLocaleOfFontSet.restype = c_char_p XLocaleOfFontSet.argtypes = [XFontSet] # /usr/include/X11/Xlib.h:3638 XContextDependentDrawing = _lib.XContextDependentDrawing XContextDependentDrawing.restype = c_int XContextDependentDrawing.argtypes = [XFontSet] # /usr/include/X11/Xlib.h:3642 XDirectionalDependentDrawing = _lib.XDirectionalDependentDrawing XDirectionalDependentDrawing.restype = c_int XDirectionalDependentDrawing.argtypes = [XFontSet] # /usr/include/X11/Xlib.h:3646 XContextualDrawing = _lib.XContextualDrawing XContextualDrawing.restype = c_int XContextualDrawing.argtypes = [XFontSet] # /usr/include/X11/Xlib.h:3650 XExtentsOfFontSet = _lib.XExtentsOfFontSet XExtentsOfFontSet.restype = POINTER(XFontSetExtents) XExtentsOfFontSet.argtypes = [XFontSet] # /usr/include/X11/Xlib.h:3654 XmbTextEscapement = _lib.XmbTextEscapement XmbTextEscapement.restype = c_int XmbTextEscapement.argtypes = [XFontSet, c_char_p, c_int] # /usr/include/X11/Xlib.h:3660 XwcTextEscapement = _lib.XwcTextEscapement XwcTextEscapement.restype = c_int XwcTextEscapement.argtypes = [XFontSet, c_wchar_p, c_int] # /usr/include/X11/Xlib.h:3666 Xutf8TextEscapement = _lib.Xutf8TextEscapement Xutf8TextEscapement.restype = c_int Xutf8TextEscapement.argtypes = [XFontSet, c_char_p, c_int] # /usr/include/X11/Xlib.h:3672 XmbTextExtents = _lib.XmbTextExtents XmbTextExtents.restype = c_int XmbTextExtents.argtypes = [XFontSet, c_char_p, c_int, POINTER(XRectangle), POINTER(XRectangle)] # /usr/include/X11/Xlib.h:3680 XwcTextExtents = _lib.XwcTextExtents XwcTextExtents.restype = c_int XwcTextExtents.argtypes = [XFontSet, c_wchar_p, c_int, POINTER(XRectangle), POINTER(XRectangle)] # /usr/include/X11/Xlib.h:3688 Xutf8TextExtents = _lib.Xutf8TextExtents Xutf8TextExtents.restype = c_int Xutf8TextExtents.argtypes = [XFontSet, c_char_p, c_int, POINTER(XRectangle), POINTER(XRectangle)] # /usr/include/X11/Xlib.h:3696 XmbTextPerCharExtents = _lib.XmbTextPerCharExtents XmbTextPerCharExtents.restype = c_int XmbTextPerCharExtents.argtypes = [XFontSet, c_char_p, c_int, POINTER(XRectangle), POINTER(XRectangle), c_int, POINTER(c_int), POINTER(XRectangle), POINTER(XRectangle)] # /usr/include/X11/Xlib.h:3708 XwcTextPerCharExtents = _lib.XwcTextPerCharExtents XwcTextPerCharExtents.restype = c_int XwcTextPerCharExtents.argtypes = [XFontSet, c_wchar_p, c_int, POINTER(XRectangle), POINTER(XRectangle), c_int, POINTER(c_int), POINTER(XRectangle), POINTER(XRectangle)] # /usr/include/X11/Xlib.h:3720 Xutf8TextPerCharExtents = _lib.Xutf8TextPerCharExtents Xutf8TextPerCharExtents.restype = c_int Xutf8TextPerCharExtents.argtypes = [XFontSet, c_char_p, c_int, POINTER(XRectangle), POINTER(XRectangle), c_int, POINTER(c_int), POINTER(XRectangle), POINTER(XRectangle)] # /usr/include/X11/Xlib.h:3732 XmbDrawText = _lib.XmbDrawText XmbDrawText.restype = None XmbDrawText.argtypes = [POINTER(Display), Drawable, GC, c_int, c_int, POINTER(XmbTextItem), c_int] # /usr/include/X11/Xlib.h:3742 XwcDrawText = _lib.XwcDrawText XwcDrawText.restype = None XwcDrawText.argtypes = [POINTER(Display), Drawable, GC, c_int, c_int, POINTER(XwcTextItem), c_int] # /usr/include/X11/Xlib.h:3752 Xutf8DrawText = _lib.Xutf8DrawText Xutf8DrawText.restype = None Xutf8DrawText.argtypes = [POINTER(Display), Drawable, GC, c_int, c_int, POINTER(XmbTextItem), c_int] # /usr/include/X11/Xlib.h:3762 XmbDrawString = _lib.XmbDrawString XmbDrawString.restype = None XmbDrawString.argtypes = [POINTER(Display), Drawable, XFontSet, GC, c_int, c_int, c_char_p, c_int] # /usr/include/X11/Xlib.h:3773 XwcDrawString = _lib.XwcDrawString XwcDrawString.restype = None XwcDrawString.argtypes = [POINTER(Display), Drawable, XFontSet, GC, c_int, c_int, c_wchar_p, c_int] # /usr/include/X11/Xlib.h:3784 Xutf8DrawString = _lib.Xutf8DrawString Xutf8DrawString.restype = None Xutf8DrawString.argtypes = [POINTER(Display), Drawable, XFontSet, GC, c_int, c_int, c_char_p, c_int] # /usr/include/X11/Xlib.h:3795 XmbDrawImageString = _lib.XmbDrawImageString XmbDrawImageString.restype = None XmbDrawImageString.argtypes = [POINTER(Display), Drawable, XFontSet, GC, c_int, c_int, c_char_p, c_int] # /usr/include/X11/Xlib.h:3806 XwcDrawImageString = _lib.XwcDrawImageString XwcDrawImageString.restype = None XwcDrawImageString.argtypes = [POINTER(Display), Drawable, XFontSet, GC, c_int, c_int, c_wchar_p, c_int] # /usr/include/X11/Xlib.h:3817 Xutf8DrawImageString = _lib.Xutf8DrawImageString Xutf8DrawImageString.restype = None Xutf8DrawImageString.argtypes = [POINTER(Display), Drawable, XFontSet, GC, c_int, c_int, c_char_p, c_int] class struct__XrmHashBucketRec(Structure): __slots__ = [ ] struct__XrmHashBucketRec._fields_ = [ ('_opaque_struct', c_int) ] # /usr/include/X11/Xlib.h:3828 XOpenIM = _lib.XOpenIM XOpenIM.restype = XIM XOpenIM.argtypes = [POINTER(Display), POINTER(struct__XrmHashBucketRec), c_char_p, c_char_p] # /usr/include/X11/Xlib.h:3835 XCloseIM = _lib.XCloseIM XCloseIM.restype = c_int XCloseIM.argtypes = [XIM] # /usr/include/X11/Xlib.h:3839 XGetIMValues = _lib.XGetIMValues XGetIMValues.restype = c_char_p XGetIMValues.argtypes = [XIM] # /usr/include/X11/Xlib.h:3843 XSetIMValues = _lib.XSetIMValues XSetIMValues.restype = c_char_p XSetIMValues.argtypes = [XIM] # /usr/include/X11/Xlib.h:3847 XDisplayOfIM = _lib.XDisplayOfIM XDisplayOfIM.restype = POINTER(Display) XDisplayOfIM.argtypes = [XIM] # /usr/include/X11/Xlib.h:3851 XLocaleOfIM = _lib.XLocaleOfIM XLocaleOfIM.restype = c_char_p XLocaleOfIM.argtypes = [XIM] # /usr/include/X11/Xlib.h:3855 XCreateIC = _lib.XCreateIC XCreateIC.restype = XIC XCreateIC.argtypes = [XIM] # /usr/include/X11/Xlib.h:3859 XDestroyIC = _lib.XDestroyIC XDestroyIC.restype = None XDestroyIC.argtypes = [XIC] # /usr/include/X11/Xlib.h:3863 XSetICFocus = _lib.XSetICFocus XSetICFocus.restype = None XSetICFocus.argtypes = [XIC] # /usr/include/X11/Xlib.h:3867 XUnsetICFocus = _lib.XUnsetICFocus XUnsetICFocus.restype = None XUnsetICFocus.argtypes = [XIC] # /usr/include/X11/Xlib.h:3871 XwcResetIC = _lib.XwcResetIC XwcResetIC.restype = c_wchar_p XwcResetIC.argtypes = [XIC] # /usr/include/X11/Xlib.h:3875 XmbResetIC = _lib.XmbResetIC XmbResetIC.restype = c_char_p XmbResetIC.argtypes = [XIC] # /usr/include/X11/Xlib.h:3879 Xutf8ResetIC = _lib.Xutf8ResetIC Xutf8ResetIC.restype = c_char_p Xutf8ResetIC.argtypes = [XIC] # /usr/include/X11/Xlib.h:3883 XSetICValues = _lib.XSetICValues XSetICValues.restype = c_char_p XSetICValues.argtypes = [XIC] # /usr/include/X11/Xlib.h:3887 XGetICValues = _lib.XGetICValues XGetICValues.restype = c_char_p XGetICValues.argtypes = [XIC] # /usr/include/X11/Xlib.h:3891 XIMOfIC = _lib.XIMOfIC XIMOfIC.restype = XIM XIMOfIC.argtypes = [XIC] # /usr/include/X11/Xlib.h:3895 XFilterEvent = _lib.XFilterEvent XFilterEvent.restype = c_int XFilterEvent.argtypes = [POINTER(XEvent), Window] # /usr/include/X11/Xlib.h:3900 XmbLookupString = _lib.XmbLookupString XmbLookupString.restype = c_int XmbLookupString.argtypes = [XIC, POINTER(XKeyPressedEvent), c_char_p, c_int, POINTER(KeySym), POINTER(c_int)] # /usr/include/X11/Xlib.h:3909 XwcLookupString = _lib.XwcLookupString XwcLookupString.restype = c_int XwcLookupString.argtypes = [XIC, POINTER(XKeyPressedEvent), c_wchar_p, c_int, POINTER(KeySym), POINTER(c_int)] # /usr/include/X11/Xlib.h:3918 Xutf8LookupString = _lib.Xutf8LookupString Xutf8LookupString.restype = c_int Xutf8LookupString.argtypes = [XIC, POINTER(XKeyPressedEvent), c_char_p, c_int, POINTER(KeySym), POINTER(c_int)] # /usr/include/X11/Xlib.h:3927 XVaCreateNestedList = _lib.XVaCreateNestedList XVaCreateNestedList.restype = XVaNestedList XVaCreateNestedList.argtypes = [c_int] class struct__XrmHashBucketRec(Structure): __slots__ = [ ] struct__XrmHashBucketRec._fields_ = [ ('_opaque_struct', c_int) ] # /usr/include/X11/Xlib.h:3933 XRegisterIMInstantiateCallback = _lib.XRegisterIMInstantiateCallback XRegisterIMInstantiateCallback.restype = c_int XRegisterIMInstantiateCallback.argtypes = [POINTER(Display), POINTER(struct__XrmHashBucketRec), c_char_p, c_char_p, XIDProc, XPointer] class struct__XrmHashBucketRec(Structure): __slots__ = [ ] struct__XrmHashBucketRec._fields_ = [ ('_opaque_struct', c_int) ] # /usr/include/X11/Xlib.h:3942 XUnregisterIMInstantiateCallback = _lib.XUnregisterIMInstantiateCallback XUnregisterIMInstantiateCallback.restype = c_int XUnregisterIMInstantiateCallback.argtypes = [POINTER(Display), POINTER(struct__XrmHashBucketRec), c_char_p, c_char_p, XIDProc, XPointer] XConnectionWatchProc = CFUNCTYPE(None, POINTER(Display), XPointer, c_int, c_int, POINTER(XPointer)) # /usr/include/X11/Xlib.h:3951 # /usr/include/X11/Xlib.h:3960 XInternalConnectionNumbers = _lib.XInternalConnectionNumbers XInternalConnectionNumbers.restype = c_int XInternalConnectionNumbers.argtypes = [POINTER(Display), POINTER(POINTER(c_int)), POINTER(c_int)] # /usr/include/X11/Xlib.h:3966 XProcessInternalConnection = _lib.XProcessInternalConnection XProcessInternalConnection.restype = None XProcessInternalConnection.argtypes = [POINTER(Display), c_int] # /usr/include/X11/Xlib.h:3971 XAddConnectionWatch = _lib.XAddConnectionWatch XAddConnectionWatch.restype = c_int XAddConnectionWatch.argtypes = [POINTER(Display), XConnectionWatchProc, XPointer] # /usr/include/X11/Xlib.h:3977 XRemoveConnectionWatch = _lib.XRemoveConnectionWatch XRemoveConnectionWatch.restype = None XRemoveConnectionWatch.argtypes = [POINTER(Display), XConnectionWatchProc, XPointer] # /usr/include/X11/Xlib.h:3983 XSetAuthorization = _lib.XSetAuthorization XSetAuthorization.restype = None XSetAuthorization.argtypes = [c_char_p, c_int, c_char_p, c_int] # /usr/include/X11/Xlib.h:3990 _Xmbtowc = _lib._Xmbtowc _Xmbtowc.restype = c_int _Xmbtowc.argtypes = [c_wchar_p, c_char_p, c_int] # /usr/include/X11/Xlib.h:4001 _Xwctomb = _lib._Xwctomb _Xwctomb.restype = c_int _Xwctomb.argtypes = [c_char_p, c_wchar] NoValue = 0 # /usr/include/X11/Xutil.h:4791 XValue = 1 # /usr/include/X11/Xutil.h:4792 YValue = 2 # /usr/include/X11/Xutil.h:4793 WidthValue = 4 # /usr/include/X11/Xutil.h:4794 HeightValue = 8 # /usr/include/X11/Xutil.h:4795 AllValues = 15 # /usr/include/X11/Xutil.h:4796 XNegative = 16 # /usr/include/X11/Xutil.h:4797 YNegative = 32 # /usr/include/X11/Xutil.h:4798 class struct_anon_93(Structure): __slots__ = [ 'flags', 'x', 'y', 'width', 'height', 'min_width', 'min_height', 'max_width', 'max_height', 'width_inc', 'height_inc', 'min_aspect', 'max_aspect', 'base_width', 'base_height', 'win_gravity', ] class struct_anon_94(Structure): __slots__ = [ 'x', 'y', ] struct_anon_94._fields_ = [ ('x', c_int), ('y', c_int), ] class struct_anon_95(Structure): __slots__ = [ 'x', 'y', ] struct_anon_95._fields_ = [ ('x', c_int), ('y', c_int), ] struct_anon_93._fields_ = [ ('flags', c_long), ('x', c_int), ('y', c_int), ('width', c_int), ('height', c_int), ('min_width', c_int), ('min_height', c_int), ('max_width', c_int), ('max_height', c_int), ('width_inc', c_int), ('height_inc', c_int), ('min_aspect', struct_anon_94), ('max_aspect', struct_anon_95), ('base_width', c_int), ('base_height', c_int), ('win_gravity', c_int), ] XSizeHints = struct_anon_93 # /usr/include/X11/Xutil.h:4817 USPosition = 1 # /usr/include/X11/Xutil.h:4825 USSize = 2 # /usr/include/X11/Xutil.h:4826 PPosition = 4 # /usr/include/X11/Xutil.h:4828 PSize = 8 # /usr/include/X11/Xutil.h:4829 PMinSize = 16 # /usr/include/X11/Xutil.h:4830 PMaxSize = 32 # /usr/include/X11/Xutil.h:4831 PResizeInc = 64 # /usr/include/X11/Xutil.h:4832 PAspect = 128 # /usr/include/X11/Xutil.h:4833 PBaseSize = 256 # /usr/include/X11/Xutil.h:4834 PWinGravity = 512 # /usr/include/X11/Xutil.h:4835 PAllHints = 252 # /usr/include/X11/Xutil.h:4838 class struct_anon_96(Structure): __slots__ = [ 'flags', 'input', 'initial_state', 'icon_pixmap', 'icon_window', 'icon_x', 'icon_y', 'icon_mask', 'window_group', ] struct_anon_96._fields_ = [ ('flags', c_long), ('input', c_int), ('initial_state', c_int), ('icon_pixmap', Pixmap), ('icon_window', Window), ('icon_x', c_int), ('icon_y', c_int), ('icon_mask', Pixmap), ('window_group', XID), ] XWMHints = struct_anon_96 # /usr/include/X11/Xutil.h:4853 InputHint = 1 # /usr/include/X11/Xutil.h:4857 StateHint = 2 # /usr/include/X11/Xutil.h:4858 IconPixmapHint = 4 # /usr/include/X11/Xutil.h:4859 IconWindowHint = 8 # /usr/include/X11/Xutil.h:4860 IconPositionHint = 16 # /usr/include/X11/Xutil.h:4861 IconMaskHint = 32 # /usr/include/X11/Xutil.h:4862 WindowGroupHint = 64 # /usr/include/X11/Xutil.h:4863 AllHints = 127 # /usr/include/X11/Xutil.h:4864 XUrgencyHint = 256 # /usr/include/X11/Xutil.h:4866 WithdrawnState = 0 # /usr/include/X11/Xutil.h:4869 NormalState = 1 # /usr/include/X11/Xutil.h:4870 IconicState = 3 # /usr/include/X11/Xutil.h:4871 DontCareState = 0 # /usr/include/X11/Xutil.h:4876 ZoomState = 2 # /usr/include/X11/Xutil.h:4877 InactiveState = 4 # /usr/include/X11/Xutil.h:4878 class struct_anon_97(Structure): __slots__ = [ 'value', 'encoding', 'format', 'nitems', ] struct_anon_97._fields_ = [ ('value', POINTER(c_ubyte)), ('encoding', Atom), ('format', c_int), ('nitems', c_ulong), ] XTextProperty = struct_anon_97 # /usr/include/X11/Xutil.h:4891 XNoMemory = -1 # /usr/include/X11/Xutil.h:4893 XLocaleNotSupported = -2 # /usr/include/X11/Xutil.h:4894 XConverterNotFound = -3 # /usr/include/X11/Xutil.h:4895 enum_anon_98 = c_int XStringStyle = 0 XCompoundTextStyle = 1 XTextStyle = 2 XStdICCTextStyle = 3 XUTF8StringStyle = 4 XICCEncodingStyle = enum_anon_98 # /usr/include/X11/Xutil.h:4904 class struct_anon_99(Structure): __slots__ = [ 'min_width', 'min_height', 'max_width', 'max_height', 'width_inc', 'height_inc', ] struct_anon_99._fields_ = [ ('min_width', c_int), ('min_height', c_int), ('max_width', c_int), ('max_height', c_int), ('width_inc', c_int), ('height_inc', c_int), ] XIconSize = struct_anon_99 # /usr/include/X11/Xutil.h:4910 class struct_anon_100(Structure): __slots__ = [ 'res_name', 'res_class', ] struct_anon_100._fields_ = [ ('res_name', c_char_p), ('res_class', c_char_p), ] XClassHint = struct_anon_100 # /usr/include/X11/Xutil.h:4915 class struct__XComposeStatus(Structure): __slots__ = [ 'compose_ptr', 'chars_matched', ] struct__XComposeStatus._fields_ = [ ('compose_ptr', XPointer), ('chars_matched', c_int), ] XComposeStatus = struct__XComposeStatus # /usr/include/X11/Xutil.h:4957 class struct__XRegion(Structure): __slots__ = [ ] struct__XRegion._fields_ = [ ('_opaque_struct', c_int) ] class struct__XRegion(Structure): __slots__ = [ ] struct__XRegion._fields_ = [ ('_opaque_struct', c_int) ] Region = POINTER(struct__XRegion) # /usr/include/X11/Xutil.h:4996 RectangleOut = 0 # /usr/include/X11/Xutil.h:5000 RectangleIn = 1 # /usr/include/X11/Xutil.h:5001 RectanglePart = 2 # /usr/include/X11/Xutil.h:5002 XVisualInfo = pyglet.gl.glx.XVisualInfo VisualNoMask = 0 # /usr/include/X11/Xutil.h:5027 VisualIDMask = 1 # /usr/include/X11/Xutil.h:5028 VisualScreenMask = 2 # /usr/include/X11/Xutil.h:5029 VisualDepthMask = 4 # /usr/include/X11/Xutil.h:5030 VisualClassMask = 8 # /usr/include/X11/Xutil.h:5031 VisualRedMaskMask = 16 # /usr/include/X11/Xutil.h:5032 VisualGreenMaskMask = 32 # /usr/include/X11/Xutil.h:5033 VisualBlueMaskMask = 64 # /usr/include/X11/Xutil.h:5034 VisualColormapSizeMask = 128 # /usr/include/X11/Xutil.h:5035 VisualBitsPerRGBMask = 256 # /usr/include/X11/Xutil.h:5036 VisualAllMask = 511 # /usr/include/X11/Xutil.h:5037 class struct_anon_102(Structure): __slots__ = [ 'colormap', 'red_max', 'red_mult', 'green_max', 'green_mult', 'blue_max', 'blue_mult', 'base_pixel', 'visualid', 'killid', ] struct_anon_102._fields_ = [ ('colormap', Colormap), ('red_max', c_ulong), ('red_mult', c_ulong), ('green_max', c_ulong), ('green_mult', c_ulong), ('blue_max', c_ulong), ('blue_mult', c_ulong), ('base_pixel', c_ulong), ('visualid', VisualID), ('killid', XID), ] XStandardColormap = struct_anon_102 # /usr/include/X11/Xutil.h:5054 BitmapSuccess = 0 # /usr/include/X11/Xutil.h:5062 BitmapOpenFailed = 1 # /usr/include/X11/Xutil.h:5063 BitmapFileInvalid = 2 # /usr/include/X11/Xutil.h:5064 BitmapNoMemory = 3 # /usr/include/X11/Xutil.h:5065 XCSUCCESS = 0 # /usr/include/X11/Xutil.h:5076 XCNOMEM = 1 # /usr/include/X11/Xutil.h:5077 XCNOENT = 2 # /usr/include/X11/Xutil.h:5078 XContext = c_int # /usr/include/X11/Xutil.h:5080 # /usr/include/X11/Xutil.h:5089 XAllocClassHint = _lib.XAllocClassHint XAllocClassHint.restype = POINTER(XClassHint) XAllocClassHint.argtypes = [] # /usr/include/X11/Xutil.h:5093 XAllocIconSize = _lib.XAllocIconSize XAllocIconSize.restype = POINTER(XIconSize) XAllocIconSize.argtypes = [] # /usr/include/X11/Xutil.h:5097 XAllocSizeHints = _lib.XAllocSizeHints XAllocSizeHints.restype = POINTER(XSizeHints) XAllocSizeHints.argtypes = [] # /usr/include/X11/Xutil.h:5101 XAllocStandardColormap = _lib.XAllocStandardColormap XAllocStandardColormap.restype = POINTER(XStandardColormap) XAllocStandardColormap.argtypes = [] # /usr/include/X11/Xutil.h:5105 XAllocWMHints = _lib.XAllocWMHints XAllocWMHints.restype = POINTER(XWMHints) XAllocWMHints.argtypes = [] # /usr/include/X11/Xutil.h:5109 XClipBox = _lib.XClipBox XClipBox.restype = c_int XClipBox.argtypes = [Region, POINTER(XRectangle)] # /usr/include/X11/Xutil.h:5114 XCreateRegion = _lib.XCreateRegion XCreateRegion.restype = Region XCreateRegion.argtypes = [] # /usr/include/X11/Xutil.h:5118 XDefaultString = _lib.XDefaultString XDefaultString.restype = c_char_p XDefaultString.argtypes = [] # /usr/include/X11/Xutil.h:5120 XDeleteContext = _lib.XDeleteContext XDeleteContext.restype = c_int XDeleteContext.argtypes = [POINTER(Display), XID, XContext] # /usr/include/X11/Xutil.h:5126 XDestroyRegion = _lib.XDestroyRegion XDestroyRegion.restype = c_int XDestroyRegion.argtypes = [Region] # /usr/include/X11/Xutil.h:5130 XEmptyRegion = _lib.XEmptyRegion XEmptyRegion.restype = c_int XEmptyRegion.argtypes = [Region] # /usr/include/X11/Xutil.h:5134 XEqualRegion = _lib.XEqualRegion XEqualRegion.restype = c_int XEqualRegion.argtypes = [Region, Region] # /usr/include/X11/Xutil.h:5139 XFindContext = _lib.XFindContext XFindContext.restype = c_int XFindContext.argtypes = [POINTER(Display), XID, XContext, POINTER(XPointer)] # /usr/include/X11/Xutil.h:5146 XGetClassHint = _lib.XGetClassHint XGetClassHint.restype = c_int XGetClassHint.argtypes = [POINTER(Display), Window, POINTER(XClassHint)] # /usr/include/X11/Xutil.h:5152 XGetIconSizes = _lib.XGetIconSizes XGetIconSizes.restype = c_int XGetIconSizes.argtypes = [POINTER(Display), Window, POINTER(POINTER(XIconSize)), POINTER(c_int)] # /usr/include/X11/Xutil.h:5159 XGetNormalHints = _lib.XGetNormalHints XGetNormalHints.restype = c_int XGetNormalHints.argtypes = [POINTER(Display), Window, POINTER(XSizeHints)] # /usr/include/X11/Xutil.h:5165 XGetRGBColormaps = _lib.XGetRGBColormaps XGetRGBColormaps.restype = c_int XGetRGBColormaps.argtypes = [POINTER(Display), Window, POINTER(POINTER(XStandardColormap)), POINTER(c_int), Atom] # /usr/include/X11/Xutil.h:5173 XGetSizeHints = _lib.XGetSizeHints XGetSizeHints.restype = c_int XGetSizeHints.argtypes = [POINTER(Display), Window, POINTER(XSizeHints), Atom] # /usr/include/X11/Xutil.h:5180 XGetStandardColormap = _lib.XGetStandardColormap XGetStandardColormap.restype = c_int XGetStandardColormap.argtypes = [POINTER(Display), Window, POINTER(XStandardColormap), Atom] # /usr/include/X11/Xutil.h:5187 XGetTextProperty = _lib.XGetTextProperty XGetTextProperty.restype = c_int XGetTextProperty.argtypes = [POINTER(Display), Window, POINTER(XTextProperty), Atom] # /usr/include/X11/Xutil.h:5194 XGetVisualInfo = _lib.XGetVisualInfo XGetVisualInfo.restype = POINTER(XVisualInfo) XGetVisualInfo.argtypes = [POINTER(Display), c_long, POINTER(XVisualInfo), POINTER(c_int)] # /usr/include/X11/Xutil.h:5201 XGetWMClientMachine = _lib.XGetWMClientMachine XGetWMClientMachine.restype = c_int XGetWMClientMachine.argtypes = [POINTER(Display), Window, POINTER(XTextProperty)] # /usr/include/X11/Xutil.h:5207 XGetWMHints = _lib.XGetWMHints XGetWMHints.restype = POINTER(XWMHints) XGetWMHints.argtypes = [POINTER(Display), Window] # /usr/include/X11/Xutil.h:5212 XGetWMIconName = _lib.XGetWMIconName XGetWMIconName.restype = c_int XGetWMIconName.argtypes = [POINTER(Display), Window, POINTER(XTextProperty)] # /usr/include/X11/Xutil.h:5218 XGetWMName = _lib.XGetWMName XGetWMName.restype = c_int XGetWMName.argtypes = [POINTER(Display), Window, POINTER(XTextProperty)] # /usr/include/X11/Xutil.h:5224 XGetWMNormalHints = _lib.XGetWMNormalHints XGetWMNormalHints.restype = c_int XGetWMNormalHints.argtypes = [POINTER(Display), Window, POINTER(XSizeHints), POINTER(c_long)] # /usr/include/X11/Xutil.h:5231 XGetWMSizeHints = _lib.XGetWMSizeHints XGetWMSizeHints.restype = c_int XGetWMSizeHints.argtypes = [POINTER(Display), Window, POINTER(XSizeHints), POINTER(c_long), Atom] # /usr/include/X11/Xutil.h:5239 XGetZoomHints = _lib.XGetZoomHints XGetZoomHints.restype = c_int XGetZoomHints.argtypes = [POINTER(Display), Window, POINTER(XSizeHints)] # /usr/include/X11/Xutil.h:5245 XIntersectRegion = _lib.XIntersectRegion XIntersectRegion.restype = c_int XIntersectRegion.argtypes = [Region, Region, Region] # /usr/include/X11/Xutil.h:5251 XConvertCase = _lib.XConvertCase XConvertCase.restype = None XConvertCase.argtypes = [KeySym, POINTER(KeySym), POINTER(KeySym)] # /usr/include/X11/Xutil.h:5257 XLookupString = _lib.XLookupString XLookupString.restype = c_int XLookupString.argtypes = [POINTER(XKeyEvent), c_char_p, c_int, POINTER(KeySym), POINTER(XComposeStatus)] # /usr/include/X11/Xutil.h:5265 XMatchVisualInfo = _lib.XMatchVisualInfo XMatchVisualInfo.restype = c_int XMatchVisualInfo.argtypes = [POINTER(Display), c_int, c_int, c_int, POINTER(XVisualInfo)] # /usr/include/X11/Xutil.h:5273 XOffsetRegion = _lib.XOffsetRegion XOffsetRegion.restype = c_int XOffsetRegion.argtypes = [Region, c_int, c_int] # /usr/include/X11/Xutil.h:5279 XPointInRegion = _lib.XPointInRegion XPointInRegion.restype = c_int XPointInRegion.argtypes = [Region, c_int, c_int] # /usr/include/X11/Xutil.h:5285 XPolygonRegion = _lib.XPolygonRegion XPolygonRegion.restype = Region XPolygonRegion.argtypes = [POINTER(XPoint), c_int, c_int] # /usr/include/X11/Xutil.h:5291 XRectInRegion = _lib.XRectInRegion XRectInRegion.restype = c_int XRectInRegion.argtypes = [Region, c_int, c_int, c_uint, c_uint] # /usr/include/X11/Xutil.h:5299 XSaveContext = _lib.XSaveContext XSaveContext.restype = c_int XSaveContext.argtypes = [POINTER(Display), XID, XContext, c_char_p] # /usr/include/X11/Xutil.h:5306 XSetClassHint = _lib.XSetClassHint XSetClassHint.restype = c_int XSetClassHint.argtypes = [POINTER(Display), Window, POINTER(XClassHint)] # /usr/include/X11/Xutil.h:5312 XSetIconSizes = _lib.XSetIconSizes XSetIconSizes.restype = c_int XSetIconSizes.argtypes = [POINTER(Display), Window, POINTER(XIconSize), c_int] # /usr/include/X11/Xutil.h:5319 XSetNormalHints = _lib.XSetNormalHints XSetNormalHints.restype = c_int XSetNormalHints.argtypes = [POINTER(Display), Window, POINTER(XSizeHints)] # /usr/include/X11/Xutil.h:5325 XSetRGBColormaps = _lib.XSetRGBColormaps XSetRGBColormaps.restype = None XSetRGBColormaps.argtypes = [POINTER(Display), Window, POINTER(XStandardColormap), c_int, Atom] # /usr/include/X11/Xutil.h:5333 XSetSizeHints = _lib.XSetSizeHints XSetSizeHints.restype = c_int XSetSizeHints.argtypes = [POINTER(Display), Window, POINTER(XSizeHints), Atom] # /usr/include/X11/Xutil.h:5340 XSetStandardProperties = _lib.XSetStandardProperties XSetStandardProperties.restype = c_int XSetStandardProperties.argtypes = [POINTER(Display), Window, c_char_p, c_char_p, Pixmap, POINTER(c_char_p), c_int, POINTER(XSizeHints)] # /usr/include/X11/Xutil.h:5351 XSetTextProperty = _lib.XSetTextProperty XSetTextProperty.restype = None XSetTextProperty.argtypes = [POINTER(Display), Window, POINTER(XTextProperty), Atom] # /usr/include/X11/Xutil.h:5358 XSetWMClientMachine = _lib.XSetWMClientMachine XSetWMClientMachine.restype = None XSetWMClientMachine.argtypes = [POINTER(Display), Window, POINTER(XTextProperty)] # /usr/include/X11/Xutil.h:5364 XSetWMHints = _lib.XSetWMHints XSetWMHints.restype = c_int XSetWMHints.argtypes = [POINTER(Display), Window, POINTER(XWMHints)] # /usr/include/X11/Xutil.h:5370 XSetWMIconName = _lib.XSetWMIconName XSetWMIconName.restype = None XSetWMIconName.argtypes = [POINTER(Display), Window, POINTER(XTextProperty)] # /usr/include/X11/Xutil.h:5376 XSetWMName = _lib.XSetWMName XSetWMName.restype = None XSetWMName.argtypes = [POINTER(Display), Window, POINTER(XTextProperty)] # /usr/include/X11/Xutil.h:5382 XSetWMNormalHints = _lib.XSetWMNormalHints XSetWMNormalHints.restype = None XSetWMNormalHints.argtypes = [POINTER(Display), Window, POINTER(XSizeHints)] # /usr/include/X11/Xutil.h:5388 XSetWMProperties = _lib.XSetWMProperties XSetWMProperties.restype = None XSetWMProperties.argtypes = [POINTER(Display), Window, POINTER(XTextProperty), POINTER(XTextProperty), POINTER(c_char_p), c_int, POINTER(XSizeHints), POINTER(XWMHints), POINTER(XClassHint)] # /usr/include/X11/Xutil.h:5400 XmbSetWMProperties = _lib.XmbSetWMProperties XmbSetWMProperties.restype = None XmbSetWMProperties.argtypes = [POINTER(Display), Window, c_char_p, c_char_p, POINTER(c_char_p), c_int, POINTER(XSizeHints), POINTER(XWMHints), POINTER(XClassHint)] # /usr/include/X11/Xutil.h:5412 Xutf8SetWMProperties = _lib.Xutf8SetWMProperties Xutf8SetWMProperties.restype = None Xutf8SetWMProperties.argtypes = [POINTER(Display), Window, c_char_p, c_char_p, POINTER(c_char_p), c_int, POINTER(XSizeHints), POINTER(XWMHints), POINTER(XClassHint)] # /usr/include/X11/Xutil.h:5424 XSetWMSizeHints = _lib.XSetWMSizeHints XSetWMSizeHints.restype = None XSetWMSizeHints.argtypes = [POINTER(Display), Window, POINTER(XSizeHints), Atom] # /usr/include/X11/Xutil.h:5431 XSetRegion = _lib.XSetRegion XSetRegion.restype = c_int XSetRegion.argtypes = [POINTER(Display), GC, Region] # /usr/include/X11/Xutil.h:5437 XSetStandardColormap = _lib.XSetStandardColormap XSetStandardColormap.restype = None XSetStandardColormap.argtypes = [POINTER(Display), Window, POINTER(XStandardColormap), Atom] # /usr/include/X11/Xutil.h:5444 XSetZoomHints = _lib.XSetZoomHints XSetZoomHints.restype = c_int XSetZoomHints.argtypes = [POINTER(Display), Window, POINTER(XSizeHints)] # /usr/include/X11/Xutil.h:5450 XShrinkRegion = _lib.XShrinkRegion XShrinkRegion.restype = c_int XShrinkRegion.argtypes = [Region, c_int, c_int] # /usr/include/X11/Xutil.h:5456 XStringListToTextProperty = _lib.XStringListToTextProperty XStringListToTextProperty.restype = c_int XStringListToTextProperty.argtypes = [POINTER(c_char_p), c_int, POINTER(XTextProperty)] # /usr/include/X11/Xutil.h:5462 XSubtractRegion = _lib.XSubtractRegion XSubtractRegion.restype = c_int XSubtractRegion.argtypes = [Region, Region, Region] # /usr/include/X11/Xutil.h:5468 XmbTextListToTextProperty = _lib.XmbTextListToTextProperty XmbTextListToTextProperty.restype = c_int XmbTextListToTextProperty.argtypes = [POINTER(Display), POINTER(c_char_p), c_int, XICCEncodingStyle, POINTER(XTextProperty)] # /usr/include/X11/Xutil.h:5476 XwcTextListToTextProperty = _lib.XwcTextListToTextProperty XwcTextListToTextProperty.restype = c_int XwcTextListToTextProperty.argtypes = [POINTER(Display), POINTER(c_wchar_p), c_int, XICCEncodingStyle, POINTER(XTextProperty)] # /usr/include/X11/Xutil.h:5484 Xutf8TextListToTextProperty = _lib.Xutf8TextListToTextProperty Xutf8TextListToTextProperty.restype = c_int Xutf8TextListToTextProperty.argtypes = [POINTER(Display), POINTER(c_char_p), c_int, XICCEncodingStyle, POINTER(XTextProperty)] # /usr/include/X11/Xutil.h:5492 XwcFreeStringList = _lib.XwcFreeStringList XwcFreeStringList.restype = None XwcFreeStringList.argtypes = [POINTER(c_wchar_p)] # /usr/include/X11/Xutil.h:5496 XTextPropertyToStringList = _lib.XTextPropertyToStringList XTextPropertyToStringList.restype = c_int XTextPropertyToStringList.argtypes = [POINTER(XTextProperty), POINTER(POINTER(c_char_p)), POINTER(c_int)] # /usr/include/X11/Xutil.h:5502 XmbTextPropertyToTextList = _lib.XmbTextPropertyToTextList XmbTextPropertyToTextList.restype = c_int XmbTextPropertyToTextList.argtypes = [POINTER(Display), POINTER(XTextProperty), POINTER(POINTER(c_char_p)), POINTER(c_int)] # /usr/include/X11/Xutil.h:5509 XwcTextPropertyToTextList = _lib.XwcTextPropertyToTextList XwcTextPropertyToTextList.restype = c_int XwcTextPropertyToTextList.argtypes = [POINTER(Display), POINTER(XTextProperty), POINTER(POINTER(c_wchar_p)), POINTER(c_int)] # /usr/include/X11/Xutil.h:5516 Xutf8TextPropertyToTextList = _lib.Xutf8TextPropertyToTextList Xutf8TextPropertyToTextList.restype = c_int Xutf8TextPropertyToTextList.argtypes = [POINTER(Display), POINTER(XTextProperty), POINTER(POINTER(c_char_p)), POINTER(c_int)] # /usr/include/X11/Xutil.h:5523 XUnionRectWithRegion = _lib.XUnionRectWithRegion XUnionRectWithRegion.restype = c_int XUnionRectWithRegion.argtypes = [POINTER(XRectangle), Region, Region] # /usr/include/X11/Xutil.h:5529 XUnionRegion = _lib.XUnionRegion XUnionRegion.restype = c_int XUnionRegion.argtypes = [Region, Region, Region] # /usr/include/X11/Xutil.h:5535 XWMGeometry = _lib.XWMGeometry XWMGeometry.restype = c_int XWMGeometry.argtypes = [POINTER(Display), c_int, c_char_p, c_char_p, c_uint, POINTER(XSizeHints), POINTER(c_int), POINTER(c_int), POINTER(c_int), POINTER(c_int), POINTER(c_int)] # /usr/include/X11/Xutil.h:5549 XXorRegion = _lib.XXorRegion XXorRegion.restype = c_int XXorRegion.argtypes = [Region, Region, Region] __all__ = ['XlibSpecificationRelease', 'X_PROTOCOL', 'X_PROTOCOL_REVISION', 'XID', 'Mask', 'Atom', 'VisualID', 'Time', 'Window', 'Drawable', 'Font', 'Pixmap', 'Cursor', 'Colormap', 'GContext', 'KeySym', 'KeyCode', 'None_', 'ParentRelative', 'CopyFromParent', 'PointerWindow', 'InputFocus', 'PointerRoot', 'AnyPropertyType', 'AnyKey', 'AnyButton', 'AllTemporary', 'CurrentTime', 'NoSymbol', 'NoEventMask', 'KeyPressMask', 'KeyReleaseMask', 'ButtonPressMask', 'ButtonReleaseMask', 'EnterWindowMask', 'LeaveWindowMask', 'PointerMotionMask', 'PointerMotionHintMask', 'Button1MotionMask', 'Button2MotionMask', 'Button3MotionMask', 'Button4MotionMask', 'Button5MotionMask', 'ButtonMotionMask', 'KeymapStateMask', 'ExposureMask', 'VisibilityChangeMask', 'StructureNotifyMask', 'ResizeRedirectMask', 'SubstructureNotifyMask', 'SubstructureRedirectMask', 'FocusChangeMask', 'PropertyChangeMask', 'ColormapChangeMask', 'OwnerGrabButtonMask', 'KeyPress', 'KeyRelease', 'ButtonPress', 'ButtonRelease', 'MotionNotify', 'EnterNotify', 'LeaveNotify', 'FocusIn', 'FocusOut', 'KeymapNotify', 'Expose', 'GraphicsExpose', 'NoExpose', 'VisibilityNotify', 'CreateNotify', 'DestroyNotify', 'UnmapNotify', 'MapNotify', 'MapRequest', 'ReparentNotify', 'ConfigureNotify', 'ConfigureRequest', 'GravityNotify', 'ResizeRequest', 'CirculateNotify', 'CirculateRequest', 'PropertyNotify', 'SelectionClear', 'SelectionRequest', 'SelectionNotify', 'ColormapNotify', 'ClientMessage', 'MappingNotify', 'LASTEvent', 'ShiftMask', 'LockMask', 'ControlMask', 'Mod1Mask', 'Mod2Mask', 'Mod3Mask', 'Mod4Mask', 'Mod5Mask', 'ShiftMapIndex', 'LockMapIndex', 'ControlMapIndex', 'Mod1MapIndex', 'Mod2MapIndex', 'Mod3MapIndex', 'Mod4MapIndex', 'Mod5MapIndex', 'Button1Mask', 'Button2Mask', 'Button3Mask', 'Button4Mask', 'Button5Mask', 'AnyModifier', 'Button1', 'Button2', 'Button3', 'Button4', 'Button5', 'NotifyNormal', 'NotifyGrab', 'NotifyUngrab', 'NotifyWhileGrabbed', 'NotifyHint', 'NotifyAncestor', 'NotifyVirtual', 'NotifyInferior', 'NotifyNonlinear', 'NotifyNonlinearVirtual', 'NotifyPointer', 'NotifyPointerRoot', 'NotifyDetailNone', 'VisibilityUnobscured', 'VisibilityPartiallyObscured', 'VisibilityFullyObscured', 'PlaceOnTop', 'PlaceOnBottom', 'FamilyInternet', 'FamilyDECnet', 'FamilyChaos', 'FamilyInternet6', 'FamilyServerInterpreted', 'PropertyNewValue', 'PropertyDelete', 'ColormapUninstalled', 'ColormapInstalled', 'GrabModeSync', 'GrabModeAsync', 'GrabSuccess', 'AlreadyGrabbed', 'GrabInvalidTime', 'GrabNotViewable', 'GrabFrozen', 'AsyncPointer', 'SyncPointer', 'ReplayPointer', 'AsyncKeyboard', 'SyncKeyboard', 'ReplayKeyboard', 'AsyncBoth', 'SyncBoth', 'RevertToParent', 'Success', 'BadRequest', 'BadValue', 'BadWindow', 'BadPixmap', 'BadAtom', 'BadCursor', 'BadFont', 'BadMatch', 'BadDrawable', 'BadAccess', 'BadAlloc', 'BadColor', 'BadGC', 'BadIDChoice', 'BadName', 'BadLength', 'BadImplementation', 'FirstExtensionError', 'LastExtensionError', 'InputOutput', 'InputOnly', 'CWBackPixmap', 'CWBackPixel', 'CWBorderPixmap', 'CWBorderPixel', 'CWBitGravity', 'CWWinGravity', 'CWBackingStore', 'CWBackingPlanes', 'CWBackingPixel', 'CWOverrideRedirect', 'CWSaveUnder', 'CWEventMask', 'CWDontPropagate', 'CWColormap', 'CWCursor', 'CWX', 'CWY', 'CWWidth', 'CWHeight', 'CWBorderWidth', 'CWSibling', 'CWStackMode', 'ForgetGravity', 'NorthWestGravity', 'NorthGravity', 'NorthEastGravity', 'WestGravity', 'CenterGravity', 'EastGravity', 'SouthWestGravity', 'SouthGravity', 'SouthEastGravity', 'StaticGravity', 'UnmapGravity', 'NotUseful', 'WhenMapped', 'Always', 'IsUnmapped', 'IsUnviewable', 'IsViewable', 'SetModeInsert', 'SetModeDelete', 'DestroyAll', 'RetainPermanent', 'RetainTemporary', 'Above', 'Below', 'TopIf', 'BottomIf', 'Opposite', 'RaiseLowest', 'LowerHighest', 'PropModeReplace', 'PropModePrepend', 'PropModeAppend', 'GXclear', 'GXand', 'GXandReverse', 'GXcopy', 'GXandInverted', 'GXnoop', 'GXxor', 'GXor', 'GXnor', 'GXequiv', 'GXinvert', 'GXorReverse', 'GXcopyInverted', 'GXorInverted', 'GXnand', 'GXset', 'LineSolid', 'LineOnOffDash', 'LineDoubleDash', 'CapNotLast', 'CapButt', 'CapRound', 'CapProjecting', 'JoinMiter', 'JoinRound', 'JoinBevel', 'FillSolid', 'FillTiled', 'FillStippled', 'FillOpaqueStippled', 'EvenOddRule', 'WindingRule', 'ClipByChildren', 'IncludeInferiors', 'Unsorted', 'YSorted', 'YXSorted', 'YXBanded', 'CoordModeOrigin', 'CoordModePrevious', 'Complex', 'Nonconvex', 'Convex', 'ArcChord', 'ArcPieSlice', 'GCFunction', 'GCPlaneMask', 'GCForeground', 'GCBackground', 'GCLineWidth', 'GCLineStyle', 'GCCapStyle', 'GCJoinStyle', 'GCFillStyle', 'GCFillRule', 'GCTile', 'GCStipple', 'GCTileStipXOrigin', 'GCTileStipYOrigin', 'GCFont', 'GCSubwindowMode', 'GCGraphicsExposures', 'GCClipXOrigin', 'GCClipYOrigin', 'GCClipMask', 'GCDashOffset', 'GCDashList', 'GCArcMode', 'GCLastBit', 'FontLeftToRight', 'FontRightToLeft', 'FontChange', 'XYBitmap', 'XYPixmap', 'ZPixmap', 'AllocNone', 'AllocAll', 'DoRed', 'DoGreen', 'DoBlue', 'CursorShape', 'TileShape', 'StippleShape', 'AutoRepeatModeOff', 'AutoRepeatModeOn', 'AutoRepeatModeDefault', 'LedModeOff', 'LedModeOn', 'KBKeyClickPercent', 'KBBellPercent', 'KBBellPitch', 'KBBellDuration', 'KBLed', 'KBLedMode', 'KBKey', 'KBAutoRepeatMode', 'MappingSuccess', 'MappingBusy', 'MappingFailed', 'MappingModifier', 'MappingKeyboard', 'MappingPointer', 'DontPreferBlanking', 'PreferBlanking', 'DefaultBlanking', 'DisableScreenSaver', 'DisableScreenInterval', 'DontAllowExposures', 'AllowExposures', 'DefaultExposures', 'ScreenSaverReset', 'ScreenSaverActive', 'HostInsert', 'HostDelete', 'EnableAccess', 'DisableAccess', 'StaticGray', 'GrayScale', 'StaticColor', 'PseudoColor', 'TrueColor', 'DirectColor', 'LSBFirst', 'MSBFirst', '_Xmblen', 'X_HAVE_UTF8_STRING', 'XPointer', 'Bool', 'Status', 'True', 'False', 'QueuedAlready', 'QueuedAfterReading', 'QueuedAfterFlush', 'XExtData', 'XExtCodes', 'XPixmapFormatValues', 'XGCValues', 'GC', 'Visual', 'Depth', 'Screen', 'ScreenFormat', 'XSetWindowAttributes', 'XWindowAttributes', 'XHostAddress', 'XServerInterpretedAddress', 'XImage', 'XWindowChanges', 'XColor', 'XSegment', 'XPoint', 'XRectangle', 'XArc', 'XKeyboardControl', 'XKeyboardState', 'XTimeCoord', 'XModifierKeymap', 'Display', '_XPrivDisplay', 'XKeyEvent', 'XKeyPressedEvent', 'XKeyReleasedEvent', 'XButtonEvent', 'XButtonPressedEvent', 'XButtonReleasedEvent', 'XMotionEvent', 'XPointerMovedEvent', 'XCrossingEvent', 'XEnterWindowEvent', 'XLeaveWindowEvent', 'XFocusChangeEvent', 'XFocusInEvent', 'XFocusOutEvent', 'XKeymapEvent', 'XExposeEvent', 'XGraphicsExposeEvent', 'XNoExposeEvent', 'XVisibilityEvent', 'XCreateWindowEvent', 'XDestroyWindowEvent', 'XUnmapEvent', 'XMapEvent', 'XMapRequestEvent', 'XReparentEvent', 'XConfigureEvent', 'XGravityEvent', 'XResizeRequestEvent', 'XConfigureRequestEvent', 'XCirculateEvent', 'XCirculateRequestEvent', 'XPropertyEvent', 'XSelectionClearEvent', 'XSelectionRequestEvent', 'XSelectionEvent', 'XColormapEvent', 'XClientMessageEvent', 'XMappingEvent', 'XErrorEvent', 'XAnyEvent', 'XEvent', 'XCharStruct', 'XFontProp', 'XFontStruct', 'XTextItem', 'XChar2b', 'XTextItem16', 'XEDataObject', 'XFontSetExtents', 'XOM', 'XOC', 'XFontSet', 'XmbTextItem', 'XwcTextItem', 'XOMCharSetList', 'XOrientation', 'XOMOrientation_LTR_TTB', 'XOMOrientation_RTL_TTB', 'XOMOrientation_TTB_LTR', 'XOMOrientation_TTB_RTL', 'XOMOrientation_Context', 'XOMOrientation', 'XOMFontInfo', 'XIM', 'XIC', 'XIMProc', 'XICProc', 'XIDProc', 'XIMStyle', 'XIMStyles', 'XIMPreeditArea', 'XIMPreeditCallbacks', 'XIMPreeditPosition', 'XIMPreeditNothing', 'XIMPreeditNone', 'XIMStatusArea', 'XIMStatusCallbacks', 'XIMStatusNothing', 'XIMStatusNone', 'XBufferOverflow', 'XLookupNone', 'XLookupChars', 'XLookupKeySym', 'XLookupBoth', 'XVaNestedList', 'XIMCallback', 'XICCallback', 'XIMFeedback', 'XIMReverse', 'XIMUnderline', 'XIMHighlight', 'XIMPrimary', 'XIMSecondary', 'XIMTertiary', 'XIMVisibleToForward', 'XIMVisibleToBackword', 'XIMVisibleToCenter', 'XIMText', 'XIMPreeditState', 'XIMPreeditUnKnown', 'XIMPreeditEnable', 'XIMPreeditDisable', 'XIMPreeditStateNotifyCallbackStruct', 'XIMResetState', 'XIMInitialState', 'XIMPreserveState', 'XIMStringConversionFeedback', 'XIMStringConversionLeftEdge', 'XIMStringConversionRightEdge', 'XIMStringConversionTopEdge', 'XIMStringConversionBottomEdge', 'XIMStringConversionConcealed', 'XIMStringConversionWrapped', 'XIMStringConversionText', 'XIMStringConversionPosition', 'XIMStringConversionType', 'XIMStringConversionBuffer', 'XIMStringConversionLine', 'XIMStringConversionWord', 'XIMStringConversionChar', 'XIMStringConversionOperation', 'XIMStringConversionSubstitution', 'XIMStringConversionRetrieval', 'XIMCaretDirection', 'XIMForwardChar', 'XIMBackwardChar', 'XIMForwardWord', 'XIMBackwardWord', 'XIMCaretUp', 'XIMCaretDown', 'XIMNextLine', 'XIMPreviousLine', 'XIMLineStart', 'XIMLineEnd', 'XIMAbsolutePosition', 'XIMDontChange', 'XIMStringConversionCallbackStruct', 'XIMPreeditDrawCallbackStruct', 'XIMCaretStyle', 'XIMIsInvisible', 'XIMIsPrimary', 'XIMIsSecondary', 'XIMPreeditCaretCallbackStruct', 'XIMStatusDataType', 'XIMTextType', 'XIMBitmapType', 'XIMStatusDrawCallbackStruct', 'XIMHotKeyTrigger', 'XIMHotKeyTriggers', 'XIMHotKeyState', 'XIMHotKeyStateON', 'XIMHotKeyStateOFF', 'XIMValuesList', 'XLoadQueryFont', 'XQueryFont', 'XGetMotionEvents', 'XDeleteModifiermapEntry', 'XGetModifierMapping', 'XInsertModifiermapEntry', 'XNewModifiermap', 'XCreateImage', 'XInitImage', 'XGetImage', 'XGetSubImage', 'XOpenDisplay', 'XrmInitialize', 'XFetchBytes', 'XFetchBuffer', 'XGetAtomName', 'XGetAtomNames', 'XGetDefault', 'XDisplayName', 'XKeysymToString', 'XSynchronize', 'XSetAfterFunction', 'XInternAtom', 'XInternAtoms', 'XCopyColormapAndFree', 'XCreateColormap', 'XCreatePixmapCursor', 'XCreateGlyphCursor', 'XCreateFontCursor', 'XLoadFont', 'XCreateGC', 'XGContextFromGC', 'XFlushGC', 'XCreatePixmap', 'XCreateBitmapFromData', 'XCreatePixmapFromBitmapData', 'XCreateSimpleWindow', 'XGetSelectionOwner', 'XCreateWindow', 'XListInstalledColormaps', 'XListFonts', 'XListFontsWithInfo', 'XGetFontPath', 'XListExtensions', 'XListProperties', 'XListHosts', 'XKeycodeToKeysym', 'XLookupKeysym', 'XGetKeyboardMapping', 'XStringToKeysym', 'XMaxRequestSize', 'XExtendedMaxRequestSize', 'XResourceManagerString', 'XScreenResourceString', 'XDisplayMotionBufferSize', 'XVisualIDFromVisual', 'XInitThreads', 'XLockDisplay', 'XUnlockDisplay', 'XInitExtension', 'XAddExtension', 'XFindOnExtensionList', 'XEHeadOfExtensionList', 'XRootWindow', 'XDefaultRootWindow', 'XRootWindowOfScreen', 'XDefaultVisual', 'XDefaultVisualOfScreen', 'XDefaultGC', 'XDefaultGCOfScreen', 'XBlackPixel', 'XWhitePixel', 'XAllPlanes', 'XBlackPixelOfScreen', 'XWhitePixelOfScreen', 'XNextRequest', 'XLastKnownRequestProcessed', 'XServerVendor', 'XDisplayString', 'XDefaultColormap', 'XDefaultColormapOfScreen', 'XDisplayOfScreen', 'XScreenOfDisplay', 'XDefaultScreenOfDisplay', 'XEventMaskOfScreen', 'XScreenNumberOfScreen', 'XErrorHandler', 'XSetErrorHandler', 'XIOErrorHandler', 'XSetIOErrorHandler', 'XListPixmapFormats', 'XListDepths', 'XReconfigureWMWindow', 'XGetWMProtocols', 'XSetWMProtocols', 'XIconifyWindow', 'XWithdrawWindow', 'XGetCommand', 'XGetWMColormapWindows', 'XSetWMColormapWindows', 'XFreeStringList', 'XSetTransientForHint', 'XActivateScreenSaver', 'XAddHost', 'XAddHosts', 'XAddToExtensionList', 'XAddToSaveSet', 'XAllocColor', 'XAllocColorCells', 'XAllocColorPlanes', 'XAllocNamedColor', 'XAllowEvents', 'XAutoRepeatOff', 'XAutoRepeatOn', 'XBell', 'XBitmapBitOrder', 'XBitmapPad', 'XBitmapUnit', 'XCellsOfScreen', 'XChangeActivePointerGrab', 'XChangeGC', 'XChangeKeyboardControl', 'XChangeKeyboardMapping', 'XChangePointerControl', 'XChangeProperty', 'XChangeSaveSet', 'XChangeWindowAttributes', 'XCheckIfEvent', 'XCheckMaskEvent', 'XCheckTypedEvent', 'XCheckTypedWindowEvent', 'XCheckWindowEvent', 'XCirculateSubwindows', 'XCirculateSubwindowsDown', 'XCirculateSubwindowsUp', 'XClearArea', 'XClearWindow', 'XCloseDisplay', 'XConfigureWindow', 'XConnectionNumber', 'XConvertSelection', 'XCopyArea', 'XCopyGC', 'XCopyPlane', 'XDefaultDepth', 'XDefaultDepthOfScreen', 'XDefaultScreen', 'XDefineCursor', 'XDeleteProperty', 'XDestroyWindow', 'XDestroySubwindows', 'XDoesBackingStore', 'XDoesSaveUnders', 'XDisableAccessControl', 'XDisplayCells', 'XDisplayHeight', 'XDisplayHeightMM', 'XDisplayKeycodes', 'XDisplayPlanes', 'XDisplayWidth', 'XDisplayWidthMM', 'XDrawArc', 'XDrawArcs', 'XDrawImageString', 'XDrawImageString16', 'XDrawLine', 'XDrawLines', 'XDrawPoint', 'XDrawPoints', 'XDrawRectangle', 'XDrawRectangles', 'XDrawSegments', 'XDrawString', 'XDrawString16', 'XDrawText', 'XDrawText16', 'XEnableAccessControl', 'XEventsQueued', 'XFetchName', 'XFillArc', 'XFillArcs', 'XFillPolygon', 'XFillRectangle', 'XFillRectangles', 'XFlush', 'XForceScreenSaver', 'XFree', 'XFreeColormap', 'XFreeColors', 'XFreeCursor', 'XFreeExtensionList', 'XFreeFont', 'XFreeFontInfo', 'XFreeFontNames', 'XFreeFontPath', 'XFreeGC', 'XFreeModifiermap', 'XFreePixmap', 'XGeometry', 'XGetErrorDatabaseText', 'XGetErrorText', 'XGetFontProperty', 'XGetGCValues', 'XGetGeometry', 'XGetIconName', 'XGetInputFocus', 'XGetKeyboardControl', 'XGetPointerControl', 'XGetPointerMapping', 'XGetScreenSaver', 'XGetTransientForHint', 'XGetWindowProperty', 'XGetWindowAttributes', 'XGrabButton', 'XGrabKey', 'XGrabKeyboard', 'XGrabPointer', 'XGrabServer', 'XHeightMMOfScreen', 'XHeightOfScreen', 'XIfEvent', 'XImageByteOrder', 'XInstallColormap', 'XKeysymToKeycode', 'XKillClient', 'XLookupColor', 'XLowerWindow', 'XMapRaised', 'XMapSubwindows', 'XMapWindow', 'XMaskEvent', 'XMaxCmapsOfScreen', 'XMinCmapsOfScreen', 'XMoveResizeWindow', 'XMoveWindow', 'XNextEvent', 'XNoOp', 'XParseColor', 'XParseGeometry', 'XPeekEvent', 'XPeekIfEvent', 'XPending', 'XPlanesOfScreen', 'XProtocolRevision', 'XProtocolVersion', 'XPutBackEvent', 'XPutImage', 'XQLength', 'XQueryBestCursor', 'XQueryBestSize', 'XQueryBestStipple', 'XQueryBestTile', 'XQueryColor', 'XQueryColors', 'XQueryExtension', 'XQueryKeymap', 'XQueryPointer', 'XQueryTextExtents', 'XQueryTextExtents16', 'XQueryTree', 'XRaiseWindow', 'XReadBitmapFile', 'XReadBitmapFileData', 'XRebindKeysym', 'XRecolorCursor', 'XRefreshKeyboardMapping', 'XRemoveFromSaveSet', 'XRemoveHost', 'XRemoveHosts', 'XReparentWindow', 'XResetScreenSaver', 'XResizeWindow', 'XRestackWindows', 'XRotateBuffers', 'XRotateWindowProperties', 'XScreenCount', 'XSelectInput', 'XSendEvent', 'XSetAccessControl', 'XSetArcMode', 'XSetBackground', 'XSetClipMask', 'XSetClipOrigin', 'XSetClipRectangles', 'XSetCloseDownMode', 'XSetCommand', 'XSetDashes', 'XSetFillRule', 'XSetFillStyle', 'XSetFont', 'XSetFontPath', 'XSetForeground', 'XSetFunction', 'XSetGraphicsExposures', 'XSetIconName', 'XSetInputFocus', 'XSetLineAttributes', 'XSetModifierMapping', 'XSetPlaneMask', 'XSetPointerMapping', 'XSetScreenSaver', 'XSetSelectionOwner', 'XSetState', 'XSetStipple', 'XSetSubwindowMode', 'XSetTSOrigin', 'XSetTile', 'XSetWindowBackground', 'XSetWindowBackgroundPixmap', 'XSetWindowBorder', 'XSetWindowBorderPixmap', 'XSetWindowBorderWidth', 'XSetWindowColormap', 'XStoreBuffer', 'XStoreBytes', 'XStoreColor', 'XStoreColors', 'XStoreName', 'XStoreNamedColor', 'XSync', 'XTextExtents', 'XTextExtents16', 'XTextWidth', 'XTextWidth16', 'XTranslateCoordinates', 'XUndefineCursor', 'XUngrabButton', 'XUngrabKey', 'XUngrabKeyboard', 'XUngrabPointer', 'XUngrabServer', 'XUninstallColormap', 'XUnloadFont', 'XUnmapSubwindows', 'XUnmapWindow', 'XVendorRelease', 'XWarpPointer', 'XWidthMMOfScreen', 'XWidthOfScreen', 'XWindowEvent', 'XWriteBitmapFile', 'XSupportsLocale', 'XSetLocaleModifiers', 'XOpenOM', 'XCloseOM', 'XSetOMValues', 'XGetOMValues', 'XDisplayOfOM', 'XLocaleOfOM', 'XCreateOC', 'XDestroyOC', 'XOMOfOC', 'XSetOCValues', 'XGetOCValues', 'XCreateFontSet', 'XFreeFontSet', 'XFontsOfFontSet', 'XBaseFontNameListOfFontSet', 'XLocaleOfFontSet', 'XContextDependentDrawing', 'XDirectionalDependentDrawing', 'XContextualDrawing', 'XExtentsOfFontSet', 'XmbTextEscapement', 'XwcTextEscapement', 'Xutf8TextEscapement', 'XmbTextExtents', 'XwcTextExtents', 'Xutf8TextExtents', 'XmbTextPerCharExtents', 'XwcTextPerCharExtents', 'Xutf8TextPerCharExtents', 'XmbDrawText', 'XwcDrawText', 'Xutf8DrawText', 'XmbDrawString', 'XwcDrawString', 'Xutf8DrawString', 'XmbDrawImageString', 'XwcDrawImageString', 'Xutf8DrawImageString', 'XOpenIM', 'XCloseIM', 'XGetIMValues', 'XSetIMValues', 'XDisplayOfIM', 'XLocaleOfIM', 'XCreateIC', 'XDestroyIC', 'XSetICFocus', 'XUnsetICFocus', 'XwcResetIC', 'XmbResetIC', 'Xutf8ResetIC', 'XSetICValues', 'XGetICValues', 'XIMOfIC', 'XFilterEvent', 'XmbLookupString', 'XwcLookupString', 'Xutf8LookupString', 'XVaCreateNestedList', 'XRegisterIMInstantiateCallback', 'XUnregisterIMInstantiateCallback', 'XConnectionWatchProc', 'XInternalConnectionNumbers', 'XProcessInternalConnection', 'XAddConnectionWatch', 'XRemoveConnectionWatch', 'XSetAuthorization', '_Xmbtowc', '_Xwctomb', 'NoValue', 'XValue', 'YValue', 'WidthValue', 'HeightValue', 'AllValues', 'XNegative', 'YNegative', 'XSizeHints', 'USPosition', 'USSize', 'PPosition', 'PSize', 'PMinSize', 'PMaxSize', 'PResizeInc', 'PAspect', 'PBaseSize', 'PWinGravity', 'PAllHints', 'XWMHints', 'InputHint', 'StateHint', 'IconPixmapHint', 'IconWindowHint', 'IconPositionHint', 'IconMaskHint', 'WindowGroupHint', 'AllHints', 'XUrgencyHint', 'WithdrawnState', 'NormalState', 'IconicState', 'DontCareState', 'ZoomState', 'InactiveState', 'XTextProperty', 'XNoMemory', 'XLocaleNotSupported', 'XConverterNotFound', 'XICCEncodingStyle', 'XStringStyle', 'XCompoundTextStyle', 'XTextStyle', 'XStdICCTextStyle', 'XUTF8StringStyle', 'XIconSize', 'XClassHint', 'XComposeStatus', 'Region', 'RectangleOut', 'RectangleIn', 'RectanglePart', 'XVisualInfo', 'VisualNoMask', 'VisualIDMask', 'VisualScreenMask', 'VisualDepthMask', 'VisualClassMask', 'VisualRedMaskMask', 'VisualGreenMaskMask', 'VisualBlueMaskMask', 'VisualColormapSizeMask', 'VisualBitsPerRGBMask', 'VisualAllMask', 'XStandardColormap', 'BitmapSuccess', 'BitmapOpenFailed', 'BitmapFileInvalid', 'BitmapNoMemory', 'XCSUCCESS', 'XCNOMEM', 'XCNOENT', 'XContext', 'XAllocClassHint', 'XAllocIconSize', 'XAllocSizeHints', 'XAllocStandardColormap', 'XAllocWMHints', 'XClipBox', 'XCreateRegion', 'XDefaultString', 'XDeleteContext', 'XDestroyRegion', 'XEmptyRegion', 'XEqualRegion', 'XFindContext', 'XGetClassHint', 'XGetIconSizes', 'XGetNormalHints', 'XGetRGBColormaps', 'XGetSizeHints', 'XGetStandardColormap', 'XGetTextProperty', 'XGetVisualInfo', 'XGetWMClientMachine', 'XGetWMHints', 'XGetWMIconName', 'XGetWMName', 'XGetWMNormalHints', 'XGetWMSizeHints', 'XGetZoomHints', 'XIntersectRegion', 'XConvertCase', 'XLookupString', 'XMatchVisualInfo', 'XOffsetRegion', 'XPointInRegion', 'XPolygonRegion', 'XRectInRegion', 'XSaveContext', 'XSetClassHint', 'XSetIconSizes', 'XSetNormalHints', 'XSetRGBColormaps', 'XSetSizeHints', 'XSetStandardProperties', 'XSetTextProperty', 'XSetWMClientMachine', 'XSetWMHints', 'XSetWMIconName', 'XSetWMName', 'XSetWMNormalHints', 'XSetWMProperties', 'XmbSetWMProperties', 'Xutf8SetWMProperties', 'XSetWMSizeHints', 'XSetRegion', 'XSetStandardColormap', 'XSetZoomHints', 'XShrinkRegion', 'XStringListToTextProperty', 'XSubtractRegion', 'XmbTextListToTextProperty', 'XwcTextListToTextProperty', 'Xutf8TextListToTextProperty', 'XwcFreeStringList', 'XTextPropertyToStringList', 'XmbTextPropertyToTextList', 'XwcTextPropertyToTextList', 'Xutf8TextPropertyToTextList', 'XUnionRectWithRegion', 'XUnionRegion', 'XWMGeometry', 'XXorRegion'] pyglet-1.1.4/pyglet/window/xlib/xinerama.py0000600013464101346420000000766311317241561017152 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 Xinerama Generated with: tools/genwrappers.py Do not modify this file. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: xinerama.py 1579 2008-01-15 14:47:19Z Alex.Holkner $' import ctypes from ctypes import * import pyglet.lib _lib = pyglet.lib.load_library('Xinerama') _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)] import pyglet.gl.glx import pyglet.window.xlib.xlib class struct_anon_181(Structure): __slots__ = [ 'screen_number', 'x_org', 'y_org', 'width', 'height', ] struct_anon_181._fields_ = [ ('screen_number', c_int), ('x_org', c_short), ('y_org', c_short), ('width', c_short), ('height', c_short), ] XineramaScreenInfo = struct_anon_181 # /usr/include/X11/extensions/Xinerama.h:40 Display = pyglet.gl.glx.Display # /usr/include/X11/extensions/Xinerama.h:44 XineramaQueryExtension = _lib.XineramaQueryExtension XineramaQueryExtension.restype = c_int XineramaQueryExtension.argtypes = [POINTER(Display), POINTER(c_int), POINTER(c_int)] # /usr/include/X11/extensions/Xinerama.h:50 XineramaQueryVersion = _lib.XineramaQueryVersion XineramaQueryVersion.restype = c_int XineramaQueryVersion.argtypes = [POINTER(Display), POINTER(c_int), POINTER(c_int)] # /usr/include/X11/extensions/Xinerama.h:56 XineramaIsActive = _lib.XineramaIsActive XineramaIsActive.restype = c_int XineramaIsActive.argtypes = [POINTER(Display)] # /usr/include/X11/extensions/Xinerama.h:67 XineramaQueryScreens = _lib.XineramaQueryScreens XineramaQueryScreens.restype = POINTER(XineramaScreenInfo) XineramaQueryScreens.argtypes = [POINTER(Display), POINTER(c_int)] __all__ = ['XineramaScreenInfo', 'XineramaQueryExtension', 'XineramaQueryVersion', 'XineramaIsActive', 'XineramaQueryScreens'] pyglet-1.1.4/pyglet/graphics/0002700013464101346420000000000011317255174014320 5ustar yohyohpyglet-1.1.4/pyglet/graphics/vertexdomain.py0000600013464101346420000006774611317241561017416 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 accommodate 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): starts = [s * self.index_element_size + self.index_buffer.ptr for s in starts] starts = cast((GLuint * primcount)(*starts), POINTER(c_void_p)) sizes = (GLsizei * primcount)(*sizes) glMultiDrawElements(mode, sizes, GL_UNSIGNED_INT, 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.''') pyglet-1.1.4/pyglet/graphics/vertexbuffer.py0000600013464101346420000004763411317241561017412 0ustar yohyoh# ---------------------------------------------------------------------------- # 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() pyglet-1.1.4/pyglet/graphics/__init__.py0000600013464101346420000006134611317241561016436 0ustar yohyoh# ---------------------------------------------------------------------------- # 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, specified 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 degenerate 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``. Unfortunately 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) # 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.__formats = 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) pyglet-1.1.4/pyglet/graphics/allocation.py0000600013464101346420000003321211317241561017013 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 maintain 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 capacity 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)) pyglet-1.1.4/pyglet/graphics/vertexattribute.py0000600013464101346420000003716311317241561020140 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 serialize 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, } pyglet-1.1.4/pyglet/image/0002700013464101346420000000000011317255174013602 5ustar yohyohpyglet-1.1.4/pyglet/image/__init__.py0000600013464101346420000025722211317241561015720 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 2541 2009-12-31 04:31:11Z benjamin.coder.smith@gmail.com $' 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 initially 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(self, 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 _is_rectangle = False 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, force_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, the image already is a texture, or the image has power 2 dimensions, 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``). If the `force_rectangle` parameter is ``True``, one of these extensions must be present, and the returned texture always has target ``GL_TEXTURE_RECTANGLE_ARB`` or ``GL_TEXTURE_RECTANGLE_NV``. 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. `force_rectangle` : bool True if the texture must be created as a rectangle. **Since:** pyglet 1.1.4. :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, force_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 `force_rectangle` : bool ``True`` if a rectangle must be created; see `AbstractImage.get_texture`. **Since:** pyglet 1.1.4 :rtype: cls or cls.region_class ''' internalformat = self._get_internalformat(self.format) texture = cls.create(self.width, self.height, internalformat, rectangle, force_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, force_rectangle=False): if (not self._current_texture or (not self._current_texture._is_rectangle and force_rectangle)): self._current_texture = self.create_texture(Texture, rectangle, force_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, force_rectangle=False): if force_rectangle: raise ImageException( 'Compressed texture rectangles not supported') 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, force_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`. `force_rectangle` : bool ``True`` if a rectangular texture is required. See `AbstractImage.get_texture`. **Since:** pyglet 1.1.4. :rtype: `Texture` :since: pyglet 1.1 ''' target = GL_TEXTURE_2D if rectangle or force_rectangle: if not force_rectangle and _is_pow2(width) and _is_pow2(height): rectangle = False elif gl_info.have_extension('GL_ARB_texture_rectangle'): target = GL_TEXTURE_RECTANGLE_ARB rectangle = True elif gl_info.have_extension('GL_NV_texture_rectangle'): target = GL_TEXTURE_RECTANGLE_NV rectangle = True else: rectangle = False if force_rectangle and not rectangle: raise ImageException('Texture rectangle extensions not available') 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._is_rectangle = True 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, force_rectangle=False): if force_rectangle and not self._is_rectangle: raise ImageException('Texture is not a rectangle.') 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 = images[0].anchor_x texture.anchor_y = images[0].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, 'RGBA', 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 auxiliary 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) x, y, width, height = 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 auxiliary buffers. ''' gl_format = GL_RGBA format = 'RGBA' def get_texture(self, rectangle=False, force_rectangle=False): texture = Texture.create(self.width, self.height, GL_RGBA, rectangle, force_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, force_rectangle=False): assert rectangle == False and force_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_texture(self, rectangle=False, force_rectangle=False): return self.image.get_texture(rectangle, force_rectangle) 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() pyglet-1.1.4/pyglet/image/codecs/0002700013464101346420000000000011317255174015042 5ustar yohyohpyglet-1.1.4/pyglet/image/codecs/png.py0000600013464101346420000000727611317241561016207 0ustar yohyoh# ---------------------------------------------------------------------------- # 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()] pyglet-1.1.4/pyglet/image/codecs/__init__.py0000600013464101346420000001752711317241561017162 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 pyglet-1.1.4/pyglet/image/codecs/gdkpixbuf2.py0000600013464101346420000001337111317241561017461 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 2496 2009-08-19 01:17:30Z benjamin.coder.smith $' 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) 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() pyglet-1.1.4/pyglet/image/codecs/s3tc.py0000600013464101346420000003267011317241561016273 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 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 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 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 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 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) pyglet-1.1.4/pyglet/image/codecs/dds.py0000600013464101346420000001651711317241561016173 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 2496 2009-08-19 01:17:30Z benjamin.coder.smith $' from ctypes import * import struct from pyglet.gl import * 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 mipmaps = 1 if desc.dwFlags & DDSD_DEPTH: raise DDSException('Volume DDS files unsupported') 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, 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 [] pyglet-1.1.4/pyglet/image/codecs/gif.py0000600013464101346420000001245511317241561016163 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 2496 2009-08-19 01:17:30Z benjamin.coder.smith $' 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 ImageDecodeException('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 pyglet-1.1.4/pyglet/image/codecs/gdiplus.py0000600013464101346420000002117011317241561017057 0ustar yohyoh# ---------------------------------------------------------------------------- # 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() pyglet-1.1.4/pyglet/image/codecs/pil.py0000600013464101346420000000776311317241561016210 0ustar yohyoh# ---------------------------------------------------------------------------- # 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()] pyglet-1.1.4/pyglet/image/codecs/pypng.py0000600013464101346420000012031711317241561016550 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 = self.buf[offset:offset+n] if isinstance(r, array): r = r.tostring() self.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() pyglet-1.1.4/pyglet/image/codecs/quicktime.py0000600013464101346420000002316511317241561017411 0ustar yohyoh# ---------------------------------------------------------------------------- # 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) quicktime.CloseComponent(importer) 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 [] pyglet-1.1.4/pyglet/image/codecs/bmp.py0000600013464101346420000003024611317241561016172 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 [] pyglet-1.1.4/pyglet/image/atlas.py0000600013464101346420000002157111317241561015261 0ustar yohyoh# ---------------------------------------------------------------------------- # 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 * self.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 accommodate 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) pyglet-1.1.4/NOTICE0000600013464101346420000000141611266427730012124 0ustar yohyohpyglet Copyright 2006-2008 Alex Holkner http://www.pyglet.org pyglet includes contributions from the following organisations and individuals: Blue Box Devices SR Research Anthony Baxter Anthony Briggs Andrew Campbell Ondrej Certik Peter Dilley Casey Duncan Alan Green Brian Grogan Jr Richard Jones George LeCompte Matthew Marshall Tobias Sargeant Andreas Schiefer Peter Shinners Nathan Stocks pyglet/window/win32/constants.py is derived from Python for Windows Extensions. Copyright 1994-2001 Mark Hammond. pyglet/image/codecs/pypng.py is derived from png.py. Copyright 2006 Johann C. Rocholl. contrib/layout/Plex is derived from Plex. Copyright Greg Ewing. tools/wraptypes/lex.py and tools/wraptypes/yacc.py are derived from ply. Copyright 2001-2006 David M. Beazley. pyglet-1.1.4/README0000600013464101346420000000244111266427730012077 0ustar yohyohpyglet ====== http://www.pyglet.org/ pyglet provides an object-oriented programming interface for developing games and other visually-rich applications for Windows, Mac OS X and Linux. Requirements ------------ pyglet requires one of the following operating systems: * Windows XP (32-bit only) * Mac OS X 10.3 or later * Linux, with the following libraries (most recent distributions will have these in a default installation): * OpenGL and GLX * GDK 2.0 or later (required for loading images) * OpenAL or ALSA (required for playing audio) pyglet requires either: * Python 2.4 with ctypes installed * Python 2.5 or 2.6 Installation ------------ If you're reading this README from a source distribution, install pyglet with:: python setup.py install There are no compilation steps during the installation; if you prefer, you can simply add this directory to your PYTHONPATH and use pyglet without installing it. Support ------- pyglet has an active developer and user community. If you find a bug, please open an issue at http://code.google.com/p/pyglet/issues (requires a Google account) or email Alex.Holkner@gmail.com. Please join us on the mailing list at http://groups.google.com/group/pyglet-users For more information and an RSS news feed, visit http://www.pyglet.org pyglet-1.1.4/setup.py0000600013464101346420000002436311272314531012727 0ustar yohyoh#!/usr/bin/env python ''' ''' __docformat__ = 'restructuredtext' __version__ = '$Id: setup.py 2530 2009-10-18 01:39:18Z benjamin.coder.smith $' import os import shutil import sys # Bump pyglet/__init__.py version as well. VERSION = '1.1.4' long_description = '''pyglet provides an object-oriented programming interface for developing games and other visually-rich applications for Windows, Mac OS X and Linux.''' setup_info = dict( # Metadata name='pyglet', version=VERSION, author='Alex Holkner', author_email='Alex.Holkner@gmail.com', url='http://www.pyglet.org/', download_url='http://www.pyglet.org/download.html', description='Cross-platform windowing and multimedia library', long_description=long_description, license='BSD', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: MacOS X', 'Environment :: Win32 (MS Windows)', 'Environment :: X11 Applications', 'Intended Audience :: Developers', 'License :: OSI Approved :: BSD License', 'Operating System :: MacOS :: MacOS X', 'Operating System :: Microsoft :: Windows', # XP 'Operating System :: POSIX :: Linux', 'Programming Language :: Python', 'Topic :: Games/Entertainment', 'Topic :: Software Development :: Libraries :: Python Modules', ], # Package info packages=[ 'pyglet', 'pyglet.app', 'pyglet.font', 'pyglet.gl', 'pyglet.graphics', 'pyglet.image', 'pyglet.image.codecs', 'pyglet.media', 'pyglet.media.drivers', 'pyglet.media.drivers.alsa', 'pyglet.media.drivers.directsound', 'pyglet.media.drivers.openal', 'pyglet.text', 'pyglet.text.formats', 'pyglet.window', 'pyglet.window.carbon', 'pyglet.window.win32', 'pyglet.window.xlib', ], ) setuptools_info = dict( zip_safe=True, ) if 'bdist_egg' in sys.argv or 'develop' in sys.argv: from setuptools import setup _have_setuptools = True # Don't walk SVN tree for default manifest from setuptools.command import egg_info from setuptools.command import sdist egg_info.walk_revctrl = lambda: [] sdist.walk_revctrl = lambda: [] # Insert additional command-line arguments into install_lib when # bdist_egg calls it, to compile byte-code with optimizations. # This is a dirty hack. from setuptools.command import bdist_egg old_call_command = bdist_egg.bdist_egg.call_command def call_command(self, *args, **kwargs): if args[0] == 'install_lib': kwargs['optimize'] = 2 kwargs['compile'] = False cmd = old_call_command(self, *args, **kwargs) return cmd bdist_egg.bdist_egg.call_command = call_command elif 'bdist_mpkg' in sys.argv: from setuptools import setup _have_setuptools = True from bdist_mpkg_pyglet import plists, pkg, cmd_bdist_mpkg, tools # Check for ctypes if installing into Python 2.4 def ctypes_requirement(pkgname, prefix): prefix = os.path.join(prefix, 'ctypes') title = '%s requires ctypes 1.0 or later to install with Python 2.4' \ % pkgname kw = dict( LabelKey='ctypes', TitleKey=title, MessageKey=title, ) return plists.path_requirement(prefix, **kw) # Subclass bdist_mpkg class pyglet_bdist_mpkg(cmd_bdist_mpkg.bdist_mpkg): # Don't include platform or python version in mpkg name (aesthetics) def finalize_package_data(self): cmd_bdist_mpkg.bdist_mpkg.finalize_package_data(self) self.metapackagename = '-'.join([self.get_name(), self.get_version()]) + '.mpkg' self.pseudoinstall_root = self.get_pseudoinstall_root() self.packagesdir = os.path.join( self.get_metapackage(), self.component_directory ) def get_metapackage_info(self): info = dict(cmd_bdist_mpkg.bdist_mpkg.get_metapackage_info(self)) info.update(dict( # Set background image alignment IFPkgFlagBackgroundScaling='none', IFPkgFlagBackgroundAlignment='topleft', # Remove specific Python version requirement from metapackage, # is per-package now. IFRequirementDicts=[], )) return info # Override how packages are made. purelib forces creation of a # separate package for each required python version, all symlinked to # the same Archive.bom. def make_scheme_package(self, scheme): assert scheme == 'purelib' # Make AVbin package pkgname = 'AVbin' pkgfile = pkgname + '.pkg' self.packages.append((pkgfile, self.get_scheme_status(scheme))) pkgdir = os.path.join(self.packagesdir, pkgfile) self.mkpath(pkgdir) version = self.get_scheme_version(scheme) info = dict(self.get_scheme_info(scheme)) description = 'AVbin audio and video support (recommended)' files = list(tools.walk_files('build/avbin')) common = 'build/avbin' prefix = '/usr/local/lib' pkg.make_package(self, pkgname, version, files, common, prefix, pkgdir, info, description) # pyglet packages files, common, prefix = self.get_scheme_root(scheme) def add_package(python_dir, package_dir, pyver, pkgname, description): scheme_prefix = package_dir pkgfile = pkgname + '.pkg' self.packages.append((pkgfile, self.get_scheme_status(scheme))) pkgdir = os.path.join(self.packagesdir, pkgfile) self.mkpath(pkgdir) version = self.get_scheme_version(scheme) requirements = [ plists.python_requirement(self.get_name(), prefix=python_dir, version=pyver)] if pyver == '2.4': requirements.append(ctypes_requirement(self.get_name(), prefix=scheme_prefix)) info = dict(self.get_scheme_info(scheme)) info.update(dict( IFRequirementDicts=requirements, )) pkg.make_package(self, pkgname, version, files, common, scheme_prefix, pkgdir, info, description, ) # Move the archive up to the metapackage and symlink to it pkgfile = os.path.join(pkgdir, 'Contents/Archive.pax.gz') shutil.move(pkgfile, os.path.join(pkgdir, '../../Archive.pax.gz')) os.symlink('../../../Archive.pax.gz', pkgfile) pkgfile = os.path.join(pkgdir, 'Contents/Archive.bom') shutil.move(pkgfile, os.path.join(pkgdir, '../../Archive.bom')) os.symlink('../../../Archive.bom', pkgfile) self.scheme_hook(scheme, pkgname, version, files, common, prefix, pkgdir) add_package( '/System/Library/Frameworks/Python.framework/Versions/2.5', '/Library/Python/2.5/site-packages', '2.5', 'pyglet-syspy2.5', 'pyglet for Python 2.5 in /System/Library') add_package( '/System/Library/Frameworks/Python.framework/Versions/2.6', '/Library/Python/2.6/site-packages', '2.6', 'pyglet-syspy2.6', 'pyglet for Python 2.6 in /System/Library') add_package( '/Library/Frameworks/Python.framework/Versions/2.4', '/Library/Frameworks/Python.framework/Versions/2.4' \ '/lib/python2.4/site-packages', '2.4', 'pyglet-py2.4', 'pyglet for Python 2.4 in /Library') add_package( '/Library/Frameworks/Python.framework/Versions/2.5', '/Library/Frameworks/Python.framework/Versions/2.5' \ '/lib/python2.5/site-packages', '2.5', 'pyglet-py2.5', 'pyglet for Python 2.5 in /Library') add_package( '/Library/Frameworks/Python.framework/Versions/2.6', '/Library/Frameworks/Python.framework/Versions/2.6' \ '/lib/python2.6/site-packages', '2.6', 'pyglet-py2.6', 'pyglet for Python 2.6 in /Library') add_package( '/opt/local/', '/opt/local/lib/python2.4/site-packages', '2.4', 'pyglet-macports-py2.4', 'pyglet for MacPorts Python 2.4 in /opt/local') add_package( '/opt/local/', '/opt/local/lib/python2.5/site-packages', '2.5', 'pyglet-macports-py2.5', 'pyglet for MacPorts Python 2.5 in /opt/local') add_package( '/opt/local/', '/opt/local/lib/python2.6/site-packages', '2.6', 'pyglet-macports-py2.6', 'pyglet for MacPorts Python 2.6 in /opt/local') # Don't build to an absolute path, assume within site-packages (makes # it easier to symlink the same archive for all packages) def get_scheme_install_prefix(self, scheme): return scheme # Don't byte compile (waste of space, try to do it in postflight TODO). def byte_compile(self): pass setuptools_info.update(dict( cmdclass={'bdist_mpkg': pyglet_bdist_mpkg,} )) else: from distutils.core import setup _have_setuptools = False if _have_setuptools: # Additional dict values for setuptools setup_info.update(setuptools_info) install_requires = [] if sys.version_info < (2, 5, 0): install_requires.append('ctypes') setup_info.update(dict( install_requires=install_requires, )) setup(**setup_info) pyglet-1.1.4/LICENSE0000600013464101346420000000273711266427730012234 0ustar yohyohCopyright (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-1.1.4/examples/0002700013464101346420000000000011505734504013030 5ustar yohyohpyglet-1.1.4/examples/text_input.py0000700013464101346420000001137411266427730015620 0ustar yohyoh#!/usr/bin/env python '''Demonstrates basic use of IncrementalTextLayout and Caret. A simple widget-like system is created in this example supporting keyboard and mouse focus. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import pyglet class Rectangle(object): '''Draws a rectangle into a batch.''' def __init__(self, x1, y1, x2, y2, batch): self.vertex_list = batch.add(4, pyglet.gl.GL_QUADS, None, ('v2i', [x1, y1, x2, y1, x2, y2, x1, y2]), ('c4B', [200, 200, 220, 255] * 4) ) class TextWidget(object): def __init__(self, text, x, y, width, batch): self.document = pyglet.text.document.UnformattedDocument(text) self.document.set_style(0, len(self.document.text), dict(color=(0, 0, 0, 255)) ) font = self.document.get_font() height = font.ascent - font.descent self.layout = pyglet.text.layout.IncrementalTextLayout( self.document, width, height, multiline=False, batch=batch) self.caret = pyglet.text.caret.Caret(self.layout) self.layout.x = x self.layout.y = y # Rectangular outline pad = 2 self.rectangle = Rectangle(x - pad, y - pad, x + width + pad, y + height + pad, batch) def hit_test(self, x, y): return (0 < x - self.layout.x < self.layout.width and 0 < y - self.layout.y < self.layout.height) class Window(pyglet.window.Window): def __init__(self, *args, **kwargs): super(Window, self).__init__(400, 140, caption='Text entry') self.batch = pyglet.graphics.Batch() self.labels = [ pyglet.text.Label('Name', x=10, y=100, anchor_y='bottom', color=(0, 0, 0, 255), batch=self.batch), pyglet.text.Label('Species', x=10, y=60, anchor_y='bottom', color=(0, 0, 0, 255), batch=self.batch), pyglet.text.Label('Special abilities', x=10, y=20, anchor_y='bottom', color=(0, 0, 0, 255), batch=self.batch) ] self.widgets = [ TextWidget('', 200, 100, self.width - 210, self.batch), TextWidget('', 200, 60, self.width - 210, self.batch), TextWidget('', 200, 20, self.width - 210, self.batch) ] self.text_cursor = self.get_system_mouse_cursor('text') self.focus = None self.set_focus(self.widgets[0]) def on_resize(self, width, height): super(Window, self).on_resize(width, height) for widget in self.widgets: widget.width = width - 110 def on_draw(self): pyglet.gl.glClearColor(1, 1, 1, 1) self.clear() self.batch.draw() def on_mouse_motion(self, x, y, dx, dy): for widget in self.widgets: if widget.hit_test(x, y): self.set_mouse_cursor(self.text_cursor) break else: self.set_mouse_cursor(None) def on_mouse_press(self, x, y, button, modifiers): for widget in self.widgets: if widget.hit_test(x, y): self.set_focus(widget) break else: self.set_focus(None) if self.focus: self.focus.caret.on_mouse_press(x, y, button, modifiers) def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers): if self.focus: self.focus.caret.on_mouse_drag(x, y, dx, dy, buttons, modifiers) def on_text(self, text): if self.focus: self.focus.caret.on_text(text) def on_text_motion(self, motion): if self.focus: self.focus.caret.on_text_motion(motion) def on_text_motion_select(self, motion): if self.focus: self.focus.caret.on_text_motion_select(motion) def on_key_press(self, symbol, modifiers): if symbol == pyglet.window.key.TAB: if modifiers & pyglet.window.key.MOD_SHIFT: dir = -1 else: dir = 1 if self.focus in self.widgets: i = self.widgets.index(self.focus) else: i = 0 dir = 0 self.set_focus(self.widgets[(i + dir) % len(self.widgets)]) elif symbol == pyglet.window.key.ESCAPE: pyglet.app.exit() def set_focus(self, focus): if self.focus: self.focus.caret.visible = False self.focus.caret.mark = self.focus.caret.position = 0 self.focus = focus if self.focus: self.focus.caret.visible = True self.focus.caret.mark = 0 self.focus.caret.position = len(self.focus.document.text) window = Window(resizable=True) pyglet.app.run() pyglet-1.1.4/examples/soundspace/0002700013464101346420000000000011317255174015176 5ustar yohyohpyglet-1.1.4/examples/soundspace/soundspace.py0000700013464101346420000004441211266427730017724 0ustar yohyoh#!/usr/bin/env python # ---------------------------------------------------------------------------- # 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: soundspace.py 2529 2009-10-12 17:39:44Z benjamin.coder.smith@gmail.com $ import math import os from pyglet.gl import * from pyglet import font from pyglet import media from pyglet import resource from pyglet import window import reader resource.path.append('res') resource.reindex() # Check for AVbin try: from pyglet.media import avbin except ImportError: raise ImportError('AVbin is required for this example, see ' 'http://code.google.com/p/avbin') def disc(r, x, y, slices=20, start=0, end=2*math.pi): d = (end - start) / (slices - 1) s = start points = [(x, y)] + [(x + r * math.cos(a*d+s), y + r * math.sin(a*d+s)) \ for a in range(slices)] points = ((GLfloat * 2) * len(points))(*points) glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT) glEnableClientState(GL_VERTEX_ARRAY) glVertexPointer(2, GL_FLOAT, 0, points) glDrawArrays(GL_TRIANGLE_FAN, 0, len(points)) glPopClientAttrib() def circle(r, x, y, slices=20): d = 2 * math.pi / slices points = [(x + r * math.cos(a*d), y + r * math.sin(a*d)) \ for a in range(slices)] points = ((GLfloat * 2) * len(points))(*points) glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT) glEnableClientState(GL_VERTEX_ARRAY) glVertexPointer(2, GL_FLOAT, 0, points) glDrawArrays(GL_LINE_LOOP, 0, len(points)) glPopClientAttrib() def orientation_angle(orientation): return math.atan2(orientation[2], orientation[0]) class Handle(object): tip = '' def __init__(self, player): self.player = player def hit_test(self, x, y, z): dx, dy, dz = [a - b for a, b in zip(self.pos(), (x, y, z))] if dx * dx + dy * dy + dz * dz < self.radius * self.radius: return -dx, -dy, -dz def draw(self): pass def begin_drag(self, window, offset): self.win = window self.offset = offset return self def on_mouse_press(self, x, y, button, modifiers): self.win.remove_handlers(self) def on_mouse_release(self, x, y, button, modifiers): self.win.remove_handlers(self) class LabelHandle(Handle): def __init__(self, player): super(LabelHandle, self).__init__(player) self.text = font.Text(font.load('', 10), '', color=(0, 0, 0, 1), valign='top', halign='center') def hit_test(self, x, y, z): return None def draw(self): if hasattr(player, 'label'): x, _, y = self.player.position # ech. fudge scale back to 1 mat = (GLfloat * 16)() glGetFloatv(GL_MODELVIEW_MATRIX, mat) glPushMatrix() glTranslatef(x, y, 0) glScalef(1/mat[0], 1/mat[5], 1/mat[10]) glTranslatef(0, -5, 0) self.text.text = self.player.label self.text.draw() glPopMatrix() class PositionHandle(Handle): tip = 'position' radius = .3 def draw(self): glPushMatrix() glTranslatef(self.player.position[0], self.player.position[2], 0) glColor3f(1, 0, 0) glBegin(GL_TRIANGLES) glVertex2f(0, self.radius) glVertex2f(-self.radius * math.sqrt(3) / 2, -.5 * self.radius) glVertex2f(self.radius * math.sqrt(3) / 2, -.5 * self.radius) glEnd() glPopMatrix() def pos(self): return self.player.position def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers): pos = self.win.mouse_transform(x, y) self.player.position = \ (pos[0] - self.offset[0], pos[1] - self.offset[1], pos[2] - self.offset[2]) class OrientationHandle(Handle): radius = .1 length = 1.5 def pos(self): x, _, z = self.player.position dir = self.get_orientation() sz = math.sqrt(dir[0] ** 2 + dir[1] ** 2 + dir[2] ** 2) or 1 if sz != 0: x += dir[0] / sz * self.length z += dir[2] / sz * self.length return x, 0, z def draw(self): glPushAttrib(GL_ENABLE_BIT | GL_CURRENT_BIT) px, _, py = self.player.position x, _, y = self.pos() # Dashed line glColor3f(.3, .3, .3) glEnable(GL_LINE_STIPPLE) glLineStipple(1, 0x7777) glBegin(GL_LINES) glVertex2f(px, py) glVertex2f(x, y) glEnd() # This handle (orientation) glColor3f(1, 1, 0) disc(self.radius, x, y) glPopAttrib() def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers): px, py, pz = self.player.position hx, hy, hz = self.win.mouse_transform(x, y) self.set_orientation( (hx - self.offset[0] - px, hy - self.offset[1] - py, hz - self.offset[2] - pz)) class ConeOrientationHandle(OrientationHandle): tip = 'cone_orientation' def get_orientation(self): return self.player.cone_orientation def set_orientation(self, orientation): self.player.cone_orientation = orientation class ForwardOrientationHandle(OrientationHandle): tip = 'forward_orientation' def get_orientation(self): return self.player.forward_orientation def set_orientation(self, orientation): self.player.forward_orientation = orientation class ConeAngleHandle(Handle): radius = .1 def pos(self): px, py, pz = self.player.position angle = orientation_angle(self.player.cone_orientation) angle += self.get_angle() * math.pi / 180. / 2 x = math.cos(angle) * self.length z = math.sin(angle) * self.length return px + x, py, pz + z def draw(self): glPushAttrib(GL_ENABLE_BIT | GL_CURRENT_BIT) # Fill glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) glColor4f(*self.fill_color) px, _, py = self.player.position angle = orientation_angle(self.player.cone_orientation) a = self.get_angle() * math.pi / 180. disc(self.length, px, py, start=angle - a/2, end=angle + a/2) # Handle x, _, y = self.pos() glColor4f(*self.color) disc(self.radius, x, y) glPopAttrib() def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers): px, py, pz = self.player.position hx, hy, hz = self.win.mouse_transform(x, y) angle = orientation_angle(self.player.cone_orientation) hangle = orientation_angle((hx - px, hy - py, hz - pz)) if hangle < angle: hangle += math.pi * 2 res = min(max((hangle - angle) * 2, 0), math.pi * 2) self.set_angle(res * 180. / math.pi) class ConeInnerAngleHandle(ConeAngleHandle): tip = 'cone_inner_angle' length = 1. color = (.2, .8, .2, 1) fill_color = (0, 1, 0, .1) def get_angle(self): return self.player.cone_inner_angle def set_angle(self, angle): self.player.cone_inner_angle = angle class ConeOuterAngleHandle(ConeAngleHandle): tip = 'cone_outer_angle' length = 1.2 color = (.2, .2, .8, 1) fill_color = (0, 0, 1, .1) def get_angle(self): return self.player.cone_outer_angle def set_angle(self, angle): self.player.cone_outer_angle = angle class MoreHandle(Handle): tip = 'More...' radius = .2 open = False open_width = 1.5 open_height = 1.5 def pos(self): x, y, z = self.player.position return x + 1, y, z + 1 def draw(self): x, _, z = self.pos() if self.open: x -= .2 z += .2 glPushAttrib(GL_ENABLE_BIT) glEnable(GL_BLEND) glColor4f(1, 1, 1, .8) glBegin(GL_QUADS) glVertex2f(x, z) glVertex2f(x + self.open_width, z) glVertex2f(x + self.open_width, z - self.open_height) glVertex2f(x, z - self.open_height) glEnd() glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) glColor4f(0, 0, 0, 1) glBegin(GL_QUADS) glVertex2f(x, z) glVertex2f(x + self.open_width, z) glVertex2f(x + self.open_width, z - self.open_height) glVertex2f(x, z - self.open_height) glEnd() glPolygonMode(GL_FRONT_AND_BACK, GL_FILL) glPopAttrib() else: glColor3f(1, 1, 1) disc(self.radius, x, z) glColor3f(0, 0, 0) circle(self.radius, x, z) r = self.radius - 0.1 glBegin(GL_LINES) glVertex2f(x - r, z) glVertex2f(x + r, z) glVertex2f(x, z - r) glVertex2f(x, z + r) glEnd() def begin_drag(self, window, offset): self.open = True self.win = window self.win.set_more_player_handles(self.player) return self def on_mouse_press(self, x, y, button, modifiers): x, y, z = self.win.mouse_transform(x, y) for handle in self.win.more_handles: if handle.hit_test(x, y, z): return self.win.set_more_player_handles(None) self.win.remove_handlers(self) self.open = False def on_mouse_release(self, x, y, button, modifiers): pass class SliderHandle(Handle): length = 1. width = .05 radius = .1 def __init__(self, player, x, z): super(SliderHandle, self).__init__(player) self.x = x self.z = z def pos(self): x, y, z = self.player.position x += self.x + self.get_value() * self.length z += self.z return x, y, z def draw(self): x = self.x + self.player.position[0] z = self.z + self.player.position[2] # Groove glColor3f(.5, .5, .5) glBegin(GL_QUADS) glVertex2f(x, z - self.width/2) glVertex2f(x + self.length, z - self.width/2) glVertex2f(x + self.length, z + self.width/2) glVertex2f(x, z + self.width/2) glEnd() # Thumb x, _, z = self.pos() glColor3f(.2, .2, .2) disc(self.radius, x, z) def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers): px, py, pz = self.player.position hx, hy, hz = self.win.mouse_transform(x, y) value = float(hx - px - self.x) / self.length value = min(max(value, 0), 1) self.set_value(value) class VolumeHandle(SliderHandle): tip = 'volume' def __init__(self, player): super(VolumeHandle, self).__init__(player, 1, .9) def get_value(self): return self.player.volume def set_value(self, value): self.player.volume = value class ListenerVolumeHandle(SliderHandle): tip = 'volume' def __init__(self, player): super(ListenerVolumeHandle, self).__init__(player, -.5, -1) def get_value(self): return self.player.volume def set_value(self, value): self.player.volume = value class MinDistanceHandle(SliderHandle): tip = 'min_distance' def __init__(self, player): super(MinDistanceHandle, self).__init__(player, 1, .6) def get_value(self): return self.player.min_distance / 5. def set_value(self, value): self.player.min_distance = value * 5. class MaxDistanceHandle(SliderHandle): tip = 'max_distance' def __init__(self, player): super(MaxDistanceHandle, self).__init__(player, 1, .3) def get_value(self): return min(self.player.max_distance / 5., 1.0) def set_value(self, value): self.player.max_distance = value * 5. class ConeOuterGainHandle(SliderHandle): tip = 'cone_outer_gain' def __init__(self, player): super(ConeOuterGainHandle, self).__init__(player, 1, 0) def get_value(self): return self.player.cone_outer_gain def set_value(self, value): self.player.cone_outer_gain = value class SoundSpaceWindow(window.Window): def __init__(self, **kwargs): kwargs.update(dict( caption='Sound Space', resizable=True, )) super(SoundSpaceWindow, self).__init__(**kwargs) self.players = [] self.handles = [] self.more_handles = [] self.handles.append(PositionHandle(media.listener)) self.handles.append(ForwardOrientationHandle(media.listener)) self.handles.append(ListenerVolumeHandle(media.listener)) self.handles.append(LabelHandle(media.listener)) self.tip = font.Text(font.load('', 10), '', color=(0, 0, 0, 1), halign='center', valign='top') self.tip_player = None # pixels per unit self.zoom = 40 self.tx = self.width/2 self.ty = self.height/2 def add_player(self, player): self.players.append(player) self.handles.append(PositionHandle(player)) self.handles.append(ConeOrientationHandle(player)) self.handles.append(ConeInnerAngleHandle(player)) self.handles.append(ConeOuterAngleHandle(player)) self.handles.append(LabelHandle(player)) self.handles.append(MoreHandle(player)) def set_more_player_handles(self, player): if player: self.more_handles = [ VolumeHandle(player), MinDistanceHandle(player), MaxDistanceHandle(player), ConeOuterGainHandle(player), ] else: self.more_handles = [] def draw_background(self): glLoadIdentity() glPushAttrib(GL_CURRENT_BIT) glColor3f(1, 1, 1) glBegin(GL_LINES) for i in range(0, self.width, self.zoom): glVertex2f(i, 0) glVertex2f(i, self.height) for i in range(0, self.height, self.zoom): glVertex2f(0, i) glVertex2f(self.width, i) glEnd() glPopAttrib() def camera_transform(self): glLoadIdentity() glTranslatef(self.tx, self.ty, 0) glScalef(self.zoom, self.zoom, 1) def mouse_transform(self, x, y): return (float(x - self.tx) / self.zoom, 0, float(y - self.ty) / self.zoom) def player_transform(self, player): return (player.position[0] * self.zoom + self.tx, player.position[2] * self.zoom + self.ty) def hit_test(self, mouse_x, mouse_y): x, y, z = self.mouse_transform(mouse_x, mouse_y) for handle in self.more_handles[::-1] + self.handles[::-1]: offset = handle.hit_test(x, y, z) if offset: return handle, offset return None, None def run(self): while not self.has_exit: for player in self.players: player.dispatch_events() self.dispatch_events() glClearColor(.8, .8, .8, 1) self.clear() self.draw_background() glPushMatrix() self.camera_transform() for handle in self.handles + self.more_handles: handle.draw() glPopMatrix() if self.tip_player: player_pos = self.player_transform(self.tip_player) self.tip.x = player_pos[0] self.tip.y = player_pos[1] - 15 self.tip.draw() self.flip() def on_mouse_scroll(self, x, y, dx, dy): self.zoom += dy * 10 self.zoom = min(max(self.zoom, 10), 100) def on_mouse_press(self, x, y, button, modifiers): handle, offset = self.hit_test(x, y) if handle: self.push_handlers(handle.begin_drag(self, offset)) else: self.push_handlers(PanView(self)) def on_mouse_motion(self, x, y, dx, dy): handle, offset = self.hit_test(x, y) if handle: self.tip.text = handle.tip pos = self.player_transform(handle.player) self.tip_player = handle.player else: self.tip.text = '' class PanView(object): def __init__(self, window): self.win = window def on_mouse_release(self, x, y, button, modifiers): self.win.remove_handlers(self) def on_mouse_press(self, x, y, button, modifiers): self.win.remove_handlers(self) def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers): self.win.tx += dx self.win.ty += dy if __name__ == '__main__': # We swap Y and Z, moving to left-handed system media.listener.up_orientation = (0, -1, 0) # Start facing up (er, forwards) media.listener.forward_orientation = (0, 0, 1) media.listener.label = 'Listener' w = SoundSpaceWindow() r = reader.SpaceReader(w) r.read(resource.file('space.txt')) for player in w.players: player.play() pass w.run() pyglet-1.1.4/examples/soundspace/README0000600013464101346420000000220511266427730016057 0ustar yohyohSound Space =========== This is a toy program for playing with positional audio in pyglet (http://www.pyglet.org). On Linux, OpenAL is required. The source code is licensed under the BSD license, which is quite permissive (see the source headers for details). Audio samples were generated with Apple GarageBand. Usage ----- Run the toy with:: python soundspace.py Everything is controlled with the mouse. Hover over a control to see its name. Click and drag an empty area to pan the view, and scroll the scroll wheel to zoom in and out. The red triangles can be dragged to move the position of a player or listener. The dashed line to the yellow handle shows the cone orientation; this can be reoriented by dragging it. The blue and green segments represent the outer and inner cone angles, respectively. You can resize the angle by dragging the handle attached to the cone. There is a master volume control beneath the listener. Click the (+) sign on a player to show the min_gain, max_gain, cone_outer_gain and volume controls. The initial configuration is given in res/space.txt; it should be self-explanatory (parsed by reader.py). pyglet-1.1.4/examples/soundspace/res/0002700013464101346420000000000011317255174015767 5ustar yohyohpyglet-1.1.4/examples/soundspace/res/guitar.ogg0000600013464101346420000023513411266427730017772 0ustar yohyohOggSPAcZaS[vorbisD8OggSPAcZ-vorbisXiph.Org libVorbis I 20040629vorbis"BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CS# G,]6MuC74ӴmUut]_uhPTU]WeUW}[}UUYՖa} Uum]X~2tu[h뺱̾L(CLABH)R9)sRB)RR9&%sNJ(PJKB)RZl՚Z5Z(PJ[k5FAȜ9'Z(9*:)Z,)X9'%J!JL%C*b,)ZlŘs(ŒJl%X[L9s9'%sNJ(RRksR:)eJ*)XJJ1sNJ!BJ%SJRb+)XJjŘsK1PR%KJ1snAh-c(%cC)b,)cŘs(%ƒJ%X[sNZkmsЩZSLsYsZ(PJZ[9Rb+)XJŘskPJ%XKJ5k5ZŘkjs1Sk5kNZsc&BCVQ!J1A141朔1 R1R2 RRR RkRRj4%(4d% `pA'@pBdH4,1$&(@Et.:B H 7<'RpFGHH!DD4OggSTPAcZa8v7!)%"!"!%& )(+'*&#)*,))+))ʽu#"*tIwfNF)\cϛ){St?q=G-aݿQQIY9L]ƽHi[xX|W̾Rd4bxtmʑTB&{ */BǮ}w/ȪPq.6L+<]^k`^\o-YM lnt𴺣[VcVlG-߼ i-V ',?{%b_w+1YJس!Hi, ~Y5sHDs HPhE-D)'W~ O87 GZeG8݂^狮GZӗzvJHg-4 `8}c?֭pp0("d . h[V2,iëq0Ǚc = ͤyhiymXx")u7@)_yJ"< )GA|YwFV-aznp PZc89+ M5+zqJ{ҪCXoqbuTC^s;y'm:Dm iWk@mxJf6sJs|{c&ڔ rG_C +m+gѠ/Xӹw~5Xs04S B)0@궉Z9A,9Iek(̮]G"eʼ;+$Ussݯ 8ZHh?z8 _\ $$>Ȱ:!xp749̹LbR7{]D,S' @@| F̨RJD.hi,#}fZ@m kGRY=?ˑ[i,;Y2@Ҙѯ˩So~`Eۚ١Ƽjݸ0( L&|gG^\]zxh =qQ$cBٺXPA+d|>փEG>/qܛC߃:t7L ,e ;H}L#$򫌙$^=[_NFJ 4Vn̘=>0n("23PI A}Lk>OVNh ++iɟt5#b OK+?17ۗŻ{[(2HږlD,7}eQA؊>~UvPP *KˊR5P/ikfICM/K kT@-`m,9]E= " P C_-%K"\&> ]i+Dc3޼yaQE- ,ӱj|uGc^!ϾA&9ԡJ̠/@xuvZ0~XXޤTjˠOM[Lu7Rd0KxL-t08qA?(gg B@C'/<~,Tw^t 7dއtšv| ~Gƨ7$qS9/CeK]vi@#m6[c]l&DIZ~Z@kV׌rR cTdF;S mnpcD.10)eRAJ^:N$H S>eɌHZp)(\M|FA[O``M]oE:+: wK/B)f$%ax*.Lf:. z$w?fHǫf|`nI斞WZR_%~j{n aU%KpUݟH{; U" 4ߍ K?>mz WrLzߟR;4|UAE:M!q+6 4JCX#?ctfOZ)\NLa{OڥNJY-lȨ)qhbX=kCؓ)~ad*1#._ƗXug#cͅt\AoO̚5O#!??jПY`TݸB|wQLV36`tbR ~K'Ĭsgf{MS@4b_}E'a-aZ3 aj, D/&F/KoXG'aJ/Mxڤus9]An#IqN>K8_/*x}2+71!4$##٩}VlKÂH{Ica ӹ9UK6}BWZ~sW̸6g[ E}ܬy)zC HK[JNc/ٙyEZ0]o̳y%4cMܤҖhA`5wdToYP!F]]x@ >W(bkl%48IԦ|~gFm귘 )qpBCy'~+X ^@M\DM\n$'Z~q_\ .Ƒ !yȮǍ_( z¨ U؄~5qDLuLD6;_ myW1%SvƑ٣q`_IgKا~~L=oqm`_ eF*ȌBe#AFcLp]UA2 aT:r@vdEJᵧ[ˬx,]Ȟ^isYUߍMw`eV^`pheMޗ4L/mFYG3D!R%[ε]͖<<^kx؂S{ooa)L^aVkh㩷追f%8+R'ّ~N4.,@\`D+Š1VS L;Po h4/}9 Q@6d6IjB_OxMc $A1z&ZP($؉61齷z ߑ6(js&NtovsZٙ${_LnTQ&f 䯘$bnN\[S\!0Q\_Yfa - ٠g0 Rrh g=BUK+"&wU\w1ƬV<=1b0Hϸ;{H^_kJaZGGMJo0TBi`Y=pb[lO~@ P(j" ?u<[?QfD ;a; , 0S_̙>F}iShXS~пLۡÆw:+k0.Vd ր(z ?Xe5pg-J  cp9r'TIA5T *o0[DZ7.ti/lp[Q+ɯMTK 5ΐmǯV̴X ةfˀF-\ͦ)J$0Ϸ}U%9OggS@PAcZ7ý !$"!&,(!"!"(+)*',#$! #"+).$)*)&(&((%()¿>Ua~ 0Yi 8 p`N(t ņz 4@IP|HP$(@. TS,F.p IbX'G1"}L*r-?}AHy~?(B 0$8<gU)7dVi'O w < K 1 hH wBCoy 0URj;6+]#Gg]B2`Zk x?` h$ Ō!"N.`HdF8GaPx^hE$Kn\F\ӂQG Ag`6Lf`V$_ڀ~5tn뀳 (V@@iM/r 7ESkGW*tqyI+pEi}'t`m3: 5FnDŽ k^X3dIr$  gq7Y{Q淛4[-na CXwap/6j;e'r@X={fĐa&c xȽEկ'[}1{A.Pt+7p ^LfOÁ[-ct"Y=YgL WZ:}b# j;PE~9 d׹˿r?j+R5;!![L.Ko?o ﰫAw,ys_߷c;>UCu:+gjss:/~,Β=҈13I' Cyu-on1\ahB[zV+ pՎ)z')jan Zjor H&,4=\0GEta{Ц(g UPQ#,ɟ'|jj ,k#&H?/w):˦ @ ]Wo Iڑ:g(ϵJim |H'ӱ)"bT8)݌Jh[tȈD uQse( adihs]-I*<GN܊|8sp3(q`u]XHd@>Z6H۸@>Mʗkdeá ȼb jX=Y7PsK'{4~ AOP.fѴj'G iHv|@PL;^ ]DWKkyL۾RrdRΟNN%Vd8ZDnFġ.~y^HXYU]367SoHX$PJNU1\U޸j{ K#L'KNJ$<\b {@yVڧ /Hy!{J2J@pH8pW7b|M#^Ϻ l5 @'n Z>Ҝ1P*7lQz)X,wxFQyRZK7ֱ#oM/H֖T를-Ϫ^s^csC8YuTy$-bY:8k0ɕH{ wq!"HmT.Yv -MiԨy7ޞSd㱵X.6aut<虲02,/RƲs `6DiW {>8Đ<i}Yb~KO q)v»DHg{eB4Bo޵T6`4E+Vm-* 8pc9TMsLWtb/gW8iZ-'oy:JR9QI`cc} @i5h/_>|$2BL;꯬1 ];{?bJ yujVzn#xCȳ齜 v# A]CsfD*V)D}i6$7@;GeݷYW*0ڵ7 p<}a{o/켁 Ϙ2]tư.D`xnn0ϘA'd5]1 רi?0un6'^ճjBUbŮ[\TúT;;]o$;vX23{iLd[^ӝ ƵsV7ilZPu<xq0A$#6;K}83(70'țDٌB$K-5Yt|r7m"d뿗Ep)<~2'YdvA%!o&mKɘd{ӚsKDRׅpb6Wd]b}X}w*P`*|MP D1aƋ6 3jQKՊ7v/p1mS؊G@gWG ba"O|S){W}R$XbR1ZN ] `-Wmr>M2ζ+ijd{@4PPR} lXĄ1'5S'@Xe@l_eLcAvwuUƥR-?Y],!*b0g;aaWs~q~pf ϠL \H `o@:n !b{חNV,KWꛡU]n>9` ۆ E]Gw.yȅ|Kqo?R@2g<Ħ,]{p0:,] D\p3QP pI뜴Qÿ Pp,ʦA6*ӿ;eoYS3`P P&BqG+/Wm1p5ѕ(4;*bV}sڨ&;4׳ƻUd|$Ycf!"tN|4Л+ @ؚKc5 YA ЋS̹HB]F?\[""\17 1=UM6/ \a㝄뾟@t+9Ro{&Da9Ǧ>2 Nz0-NG,3͓J jJl"[{< -Z`^3H&6@`Fm-^К9jS(XˁpsAh^,Q}4W"KzDm(X mar_;ۊ䜢Q fV<t < jhdl쓼 nSKK9~qSdQz^-{ wt+I JČ2H t )@ҧ@b P: PqπfR-@Dfho\JUEJxx{] Z :|x%Ze^kA. T2x9^SCk [S-HOh`@fH0a\ W ҠnbQ|"@ aèpvpjo-JJjT/hBaoD4VhW.3ѐbL\ijG X&OggSPAcZv480$$!##"#(+,,$$$&()*"!!#! ))+!&(&'^ l%,q7^ + !nH5G`ch H n@C;@4 kV*;^#'4PePK+KrUp|$ xso`3wf"iy$Yc *}QF!.`OELD' l0|Mے?2Pqg1M̤ HtinėSoWQhAXTu~v!o LAue ޟz 0i*k7/ +tC@is` `!qCݟ1> 7#.BF`=V4w7vwZ7 gmoR 'p-!_WdIK/\-k׏. Vo,ɈbK<9$\Յ'D˪7>O25Hwh|ߍ}5;De3}^#$rS 2h8`R1"3YENk`]ԨS5Y{z*r)ss |[II2%g،Ȯlvzd=)-Ht{Y}k5o/ 0`/iAHң!E>% *vI/702ضJM<4+{Hh`@`lr6&ŀwjQ2fÜIOq$br=g(Z85'vuLP9|DAO' C˂RivJ~,0JYBKaάT;viJ5r kfswY<`Yr)K d@&(Jy@U{NR6zC? W,j^` _LgqGE$$v Vgr؄G Te| pVe11dɓě~ӓik˾ڇ i;Pomi=-s:F]o,I"su!r+"ļzԋ˟_@64ݍ0/ ĩL} Y4dmvUѷ$Ql90@΢M\YѿQg#f0ȎA+ `ٗ|6q P]Mʄ dXwr #Ƴ_qhʘe',h!ȚNcV0l ,!"(G9$фw kws{|]}x@J{{DQ+8:xyiݣQQH-xn,@[$։ex|J׾Q"qشoVfՠ֗L ԳW p}@Sh: L>4Qz_`ZȋT'pTrҐ2y9з̼ZƹVXh 99C0lߝ&Wm7{{Nj3N9zU.QVL>(`+H=8:k3[L_Mx|@U-_R{d 5|O y|n8ڨpSq}aj $ %8#`4߂PRF8SZkcuZ!݉xpU`# ĭ@Z 4-+iq4*/mpe {iĆ,Y2T+M?5)(G /`4nPI{1/HT^ ܘ>S:%%  4P8 8J @'6L6(AжLP֡ZӍ+pj]mKV<6<@FJE 3B +~_t"&*0uX 8ŏsﯛ L1d ^ɣnY}Z|鎽)uB. 8 ${m 3<h  \|P@ ,*\, Ss=_@RuD tikȆX,:7g@ k`bP=_~ I<F@$w3*@7uw"v\cĘ0ѭnOA$fc`q {[ a=vU5UG@0T]-؆F%|YTMM 0_ ]eκ/-02W@# tW4E\m1aW& j -AL `l Շ9c)m_Ӂ;_u?@F(B-7ܟtrE?e?\XJď҆@`}MIg(Pp ١ F*@$4 'g6.ӄ pSFB3#2+a Gwtb(˳m~GX?s{1isIz'\eH]k6`^ׁ:2kG [I yƅi#uƴ!:R̈́ @ SGOFxޖqLɃH} n@j'r4! Ro4Hհ2gwx뉔Xܰbo !'m3fj)጗:mJc|} Kc3KYl?d^mYO2dEs$݅P|qieD\&$qxiRm̌ 4:}> ],reofa睷3 x ""X8?o:ٿ`[Lܺyaۍbۋ\GF @r>) ̐TQri<@8w/RNu7(ۚ2OܰLylI*Zn*N[:#bg GcuQm}uc\`a_`3KVVk@I92mq&H BF0޺z1IZ:\=2)KIW/Dҍkn%L2VbDYD>I2 * )ɳKy|R.NN y4Ѥ MnG-*"pC=P>\Wٹ@2sSn2H'(`^1D%DOHgN:BB YӑұiAGM}z8"-d.ںijj'zW{x-%DncZb +u ĕdl*ZqhwpS"Qktb7 P E۟?< Xtyƫ)Swb稢QE^HC+GܱY&Ҽw W 0N4ts󊱆'/c/*uLS^˿-#tmnGկNoI_= =$މ5(p͑f6zUN6ʯFKO_F=֓Z o4;@>1uj\%%Z؏ڈ9oy[@l̼vg:~[%k?- ?MȀP̰- T rk.'0 R_[;Mq )`L(P(P\Z+CG$x @pOi+30_&~qmLKi<!n xl״Bs@%^ ՏÒUL  N'UbP‚g xV`# S tW 9,* w jG$37Yd*Y h Um 3=%[@F+\tNfNOd=zBM~mi+HUg̶Vmgm0lР#6<jQAQPh.)*~Bno$$?jJZO3&d&‘]f;{%U1!VT"B7ouSԒjWxkU! q}:SSBDoIAK4dǹ$(o [/5u*myy^%o|o6.Ir]:\%YJae樟}٬k ,A%wҘ0d6^lDa %f lhFEǐOXQM< 9؂#u!;;%Mk_/.F́'ӈ 0JE9?dl>4}Y~lݍ[[m()mI欹^jnc_ָxl3MjoAOO,Xd~`@߅bG^O!jdtu~>2\1TJO9"F)^)^,5xN}oKVyK.)|F++W7Ϡ0V]_uqe9d6m/gݿE&:/ e@b~dto ,Fq;XdL @XPU4te6^NtxVi@d?X)p_ Vi 6nfA pfP4 b:TZ` ͥe L&]W{dŢ(0Ś[:>sL;s7QAdS<_Nm"߿ .JoZ @ LkҎ@Xk1;*V ~xdR,*DuI2Q7R_pTH~QGAKE:{mb?`X!Z`b6Z#Kyke#G-$YKB=]I;&H^<6Y Ϙכ;qvPD0Y_OՁ{^=4cj %EvzrK3/(M%H y53l+@c0S"05N@ _ഇy`?-3<4C `?C77YY+c NMZzPUUwNsmmT-@ߞ? cY \;g5mT!cU3-ҋN9 0>h,\6 g'1h¶!Lw|$-jc'*R3fl)wGmzߠgEf`!P?[.oM,8[τ@$,p:Cu)6>v"M ̈́}0tzx H}1"ݔcW,&5@ "YԞH6l}d>.35l&k1vV^__5JԷJF[ybShk8שԅїoW 0X~9VԇZ0i JM*@[U8v(MltLƮCj@g&E`DuvpR fs`P{^Ḻ=UA[鍊ѵt}/2;yμ#h =Vp 2ZO8=˳ƝΈ%/uj/*iJf1UЊ,'y4 㗻D"{s ${ɍ5pv ϱM/q* @G)Ogyz.GX^Zr~) _8cy:5P?X+W 5 W:Sg|L )'T2߳~jaFڶ)>x[ 0`z,|06 : s~,hϸUgcQ=WTUcuSMzqұMCB[%N?Id7۔fk]|/QZh(%~3i& aizk_ bSUMO16ޖL) ؈,x!#6b4P'@SMՄg$4j!!"V@5˒v(qD!* J[wj`zڻjD-"n/0U휥lwh3GE|1<_;ǗZbWBJ*`?qz*1,ædEއCu@B*8Ŝ`/xF(n?DyUout"kT0J9`"}6lKz:tFuX/lf\EsCG2LOggS@PAcZ@=" #" )))(),**!" *,"#!!*+*!##"!'',+)* ),*"(&)'ƴ7&$hJ8(A}j*n~h 07"33 DGxigRN cW"tV(v6Uq T'Fznl"_N*oVjn)ߓ^Ƽk\ĐAȮ r:jYl,5TK_&Ȟ750u@Sk~%@ӌZNE8vw|5g a˴xe=>!?>*=T]r+A ^(esWG'+,u?*=]166Oē^RVF Hݿ`~z.u>C@u҉scunkW$ύ}~pzdan{HTh UY{pLA%XEmG},Ne[Z1oжV-y$PEKoPv)Vn4{gJrG'lG9d`#;! v^eIaRRx/VaD`%G45^_vr5{vUü ޯݢ2&a.X:Wuu:N`s+$p^ټ+?-[KB\-qoо"M}j2*n89/m~Q7FG=aڠ777" Isϋƒ=Kvj֙ԏ<чpΪAa<.B'Nd%K-lj0rz ?v,fr|C5"q|<`{{vx .Y93>F"i .NUƔ~= (G9 1 ȬLƚ:PݐltN-ߊ%؍sԽyhBg|u o?j@Bl/̜|oHv5m)6Ho>ͬBB; Cw\r A9x k+}8"/d&ږm~B~Pdr*cܑ-42D!N}Y>_bJp݊ixoqv1jrs"Z)%F&+dFrBW!J%jxS;iH]๺ټ^1&G3h %[lN:>}I6>DLvǘܹcA4 "Q &,7vd.mh$~FT!3x)vC]|#$"9ΪD vT(FfSts3zu^xȂp5}pP_Bt΢ۮʡf 1L ߳ff[cg @V$J]ۋMwOO-^q7yڝ}YP@w`Ȯ3!vj+j]n*~G]֑UJu'~_ЪbyЗgOWlh]hۙkḯ2Ns67r\H6ue؄z 7|Y(]/ er y$Pċ@?@p36I;qaIՑ"8vƋ?jfNM6BȀ`a9ċ9N~^hwZ3$xx,,Ƌ\O {O,FMf3F_ءƕ~wsd[ 2GeU +,S^ |7Q`?$w3W,;?r;o<}wƛ:kY4 `٧'KsZZ*'˃iŦɶE )z1VΏoH$%,hIހQ窜M~Y]У v;Zo6L4"-WOjz"h[?-fDAmy99y]Ԃ'Ry^ZjK~!o0ۺuEi @}\TlVK/$HiغUrYLY|6DxNR/~+K@Zutc ,ػ OߩkDzJZ暴2GRPV;jnUZss-qIE_f2>ij贷ا*em9Cf񬪼fz>IBEeq (sSpB 'k QzG{ Kcc59,SfhQ;ؠ'97;1C`@Q47jxsnj{)#[i]d9V~whsZf0` 6rfŏU>e:,6w3 S=3 U,2烶(#,Ӗ r_w'Ul]2nMZ b׏7# ~aUumTߡ3aMkH_?J%F)" <ױ(ww@@gq9wl/fUx~?3 ~VK$pQfBP@{fp~Mدf{;FeF*CE۲vMҳ&6ZY{ewwd9ذ ; 40 r ӛBϒKs0d8< YS]qHZxUCн+.GCC' a- JhG@*gDXYP6Qd@ZO_; n :Z`A`\2aiZeN׭r6exK*KK i.XZg~gK!I4x+HhD0- .$$t 7 HdPo@obAopS(V(qp*<8 jQiԡB4U"r>N5\ `%"T&fan=M'(/4!]C8ҵC`~X}ϓ@W&3NId@{+o÷W3m sjK-{=^ǛX `Z,8+ԈRGjxˏ4RgCsq awu|dTw%A}i\PW;lc 8ų[POggSPAcZOH3!*))"""!%''!+&("!"!#**""$#"!,-+*$l}> t (zP%`0q.'}dڙ-ԆXp}=rv~mzR!BdpfpאKiɡaI%4Sʧr,Y~k`#HĹp'c3ۛb 2rsD. Wٝ[5 E/fc_2c(_ڻtʉ|CZ,9awIgd$gՈ1q4xˤ-C/=~4CutZ 2L&k߇?q0*A;Itf`?&bwA=F:Lc0 1"X]]}uQXmP'֨Z:0=bF}V2ݨlP~j4@a*,f(a5Tl?-%eN[^64p敼 4IjBZO@i f&Ad0xdkU}+FAT{H^+"(B.rT+bnL\H|bo(+:5@kVID(^,HU(͢v7:ɂ*?]L2#'~>f٩''T~LzєKšoI^^#xQ& O%lp> Z|vƌ9m;ڇp/&".o9FbeyӀnw_}" 7 9d鲨1~$@DŽɈ)7k,t/(kLrO(2|Xx+Xt"dhSJB `MFl[B92qO_e=18Q߻³ksP') βCW )ČadXoRbv7%CD:S 3L zjʊ Џw}g۩%fy;ưs ,=ZvFQI'f]ƀ~@N/< ^s_K]`z'S-@լL#vy%F'0 M_+$HݛdZ}|X, ύ-~u@#$=wj0*m>1oVSG 9m"K5"ƳA#\Vhj:o+s*Ȕ@iKKG5YZ{teQd@l'C+4Ս[I/|]MWma감r*_ 4{̗}W&" XUs}ʉ:D6ǧg aA%H ?cOtS<>H=z:3"Q֗G[G}߹VUV /b,p5E zCxM-g' `aR:e $F$Hڌj]zG fs^ĀVi|[Bo-Xz'LNɈ\穳qv,ޛ8_6+r~cOH?WfR:BL̒~f{=W5VLm9SEz&I0!VPdG2D/ OKazm2ݟk*,b:yQO$U3F"0(,>Tٞy[z%)&I H>% }u /Gu4th5ʋ'5|v{ 8 nT:\OPkȰ8j>3"x-KH~|lpg%92_xb:H>`8RS6sm0fBH? ȼ8XF==o`MYKsA+@n:QPξՏOG޸k12# ;j"SFZU5Zڿ%.꩕`em 0+c/~{gna!y85*DSB;r/06 ]Za|I@j J.DȎ8{Sȶ֗ڇhq5o~y\/y37=*B2}8ޒ.fsL<:34(aׇIH@uhOR0 a%gN^ϭ7Czt@p$#u[)xav e.v7:tH&0=G.+_WI$@`}bb)MD}-|=:phڮ5$~AU> '؜us3@`jX6i41\JF9H Pxg5U'^#JوS_6Z?k_C"b+W@361C5E?AhEBTy`qo/nn͔5 Y]O nTyl @7/'+d}3N39N+BtJ?˺J|\oK ..wQVSjg%5y~K? [fFm̱00 Z :@ ( p.' ^Z5f| $ǫ5OD#(DOWBбP)lu`l8mVg؛X, HzkK 2$4G%[]"}F1W\g@L - 03`& p%SuS EѠflkx U?ث'C!؛(}<뱓 Z3:CMvVr:7\e_pI;2OX>r v#PFyCH.Ldf>T<`!o^ D.ozh#)]dNSrX΢$̫\LU25?;mX�lg"eySB[Hы5:"e9]h>,* 4z9߸%@e;A&~t`EvL:vf`!{#@Bzj/!y2=2/=I,*v1%3P$ʺ:ĩ]e"f)9A$کnd&>\FY{Qΐ䦀@P |Ցmg}%ɜ.x!tn90lT B{+#Q{^8={ض@-Cܰk|N*U^4M㮱C^Hs3=gmTGQV=Y V 9;cIc+ŦRQ 2@/b4\_PZoi7~ܹ2{0Ɲ̞kbN޳cB#3g 9rVP (ވ +a2NlܪrmqtY3 BҜalm&ĘSJfVR$Oټ}ZVuuΆOQ%ՀHEcgQHxa OggS9PAcZ(nE,)*!# !#!(+**')*&()&)+**Ƿ!!)~MB~΅⓰(G;6;[u3k`̹)(?Q(P=Q5VmrqVĈ0RkN[4dZ>6K%ƍp} MT6Ϯط1E0261l I 3M&vQ(G[ Vޖ4ba,1B^s:tƹڎ߇`{U-&~(0c\Q#Dc84vFIr#eb#CZwp4>ڐ>kYb!99np!:wܘpv =RDm¢@:g*z0VˬÍ)~4 !x[T)1ЕP(3M:c&4ӻQ R_ wo_,߁A!0O_#CMzLMq̈=ylM$;ّB7Ж-ILx= Y^etf܇@ۋ1-]GI8*3O5WqΥ6yJ۪@O6&zbJ ;="2tk+b-m<=@!UvޙwsWYC#^b\U)qj"GsĮ?OJL`Dyۭ*9GƳ9.4n $ځx&!|QxGz1 S%>@/` E4t ތU|؋ɜ г ֛r&r6kmze.$߉I`p).jl'{$ce>@=%ltO^Og} $al0mI#]6:?1sWPEc!EĕKƫ`⯝QsTݲG[ nk\=qtt$rδ/وjda_qloE9jϿd64>U14gJ Ou9p|9g]1wtw۲Ss񕭷OcTc>m,Ї hX #A!CPͲfbF&7&9hbU:P65Ek x*BkihTP`j_(u"ޜҠEkuo!l$yu}4G޻iP,'sM gRG}" x;`3`>( tp4EpD_ $6` )^'@ s @ `oq7@Dsn7 "(M T m/! Jp\7 BuQchW޸Uc]'(镋9Ql )@`H8L W JY@oܸq\"@YG1Z}PpJV8|*| @k܉~ܸ4|@KT/pFs?)M^XMC$>1SZOe/FsV> (90#AZ`t$e%X whY@_;CZ@aPNf5noW,AL6 M|2գ!<!6Gf3ڟ ~= 7Ul}Sj }O @H A,0F@`zL(*nY5%ڀкUYD q"-`CC}i2Z!puHQFjBP͸z0.5wA,Z:8 uxWU]$m젗̜"  ;֎3@6}#p)P6u `N 1|7[$@:}R -d]o8B",kbC[F Qϝ$w@84tFL=X_ '`>HM!GN 4-N+;.Ql-uZ0F7ŴV~D 1/>|e5/fxX}FrmC!^ߖbˈ٨]ls13@,N:rԛXq, T4f7%v~,GۺO0 Ec )D!vI͗=e1w{N?9 {r+܄ܳ }z.^y6Ă#֏gjIO_\͚płlgw{jҴgܵ|L! Y eS LPD0WJǮvQzHCcC!P^#sHwO;Z Smb$EʩOggS@PAcZ F +*!"!""'(*ȴci͏>bS8cXU3HH08!kgFȵ3.[+7Vqn~>O~qOv2zV;H! rvt\uf=d|xK0ޜўճ&SkTΕٌv噇\3:Pf(^eӤ3 qeRgt 1nE+3N'XjJY`3Jֶ~L1EvJ7GXѹE(GEH[&|h<ߴi7ljNUQmE䠾M \`5#6?.tSSN>B&O??~hv>= V=I+"{Qo۽]}%f>kK)~vA>M uȎC:@L1,mnu3)j1BN_zybx{?&xfNi#@ͪզj%PXj|cS)N+γ_#m?xo,WQ: 7,W~ֵ){ųĐِ @ޕS L0l"+:㌅ lc['j*\$uv=`~{5;c: dʹ*׳CYMEhCMOA^bJftF~Yco߱o/;X8pޫKĝ00Q$7bӵ ޕ4&P:0O4D%3ufVu:ڹ07 靾X|a[m7doPc+]I&&]. w:ĮQcj m+?SW()4@t#1 tzaBwu LԆ0P&; j*1@1Vh4z7Rd:jGme&*dwyi q.x!VvXֱ5nL%1[x7Wb@Ie9,`~rfLаd/H\"IKO`@3]RǾ}WdڽX~kujuE˗mXT7-#kkRAy4|EJH%߱Y'< @lkъbh2D)}&rqz,Ga"K"q12tvBOޟwb|S[>z{(%.ۧ'GXxHOϾ=/TO6YrQ)c[̻K&͑~gsR>+ݟ*|WS4 ރ>!hwJzBu( m!<:t# K㣣v~<+n$59(Z|o6Ф*g3sG΃q׈;WZE&ugVt{ C%Nq$Nw`ifH7NN{#ٚXp__r.VZPabt0 ʮ=/j6o3 |ey,0T| GE ;uH u@$31C@M`G4`{G5IvIMGFOMO; hvnIoĵs޲k4Q 4z b0;w #Qy*/7M@39k ;n&ftT_ԽɦL"vX T^w֧E` `poYdb7k8 _ǫk{Va&`q1T7^a<_t -v0F~iZ&lH( pHQ] "x8j>RᵉxT[Gv``0ǣ1[ w smDurbFGTHԽZJp ʻ~IAޗ!'H`jaoL }3@όVZqޭ[kيno*>yܸ{-eb,.ŏ#,̡3#H +vr8u[w̋Z+mCat8rzDxXs8xӾN k8V3Ce;AQYocB ,Jƙ̊ >m 038v=OQxe!U{YEÑ֧K2dK!sTTiC:=ǎpN[f9ʨ^Q_Fe{}Kx$:W4>?l'78 \oE<:غsu-2A ːf:m5>lG6`|\M`!x"js­Nynk>'Aq;B[;1¼pSx9W!}&utl6}ʎn\{$j%|ߑ;#4ޕ,s L@Klitg[F΂@ytɜ[#EC `75Ch-*?Eo& ?_]t {Np1jEY\JwF3m*yy Gvl6dXanjEY4ޕ4u`}8yI6(c(6Kb#=ym˹]cBG̭H 19\+&a$+-udU,/ǗpYwd %ib*V W"cøHi2E&Rw|ԃ~X/b -͍D[@@B@.Im["<8NQ:nd(֌3[Q Jd9vt̐ϕ6LVR7"MD՚w=,w &Ibq^JP/F!OJT d|cEpDJK]Ϩ ~˞''s0; ̉M22}kϞK!N[w/ۺ3U9Lit7 +8@~+XM)aX׍ ND¡Erka Epyr$NmuĜ,£~T__M/Zh\CdӘvw4*ZVKC:e$* Z@Q`_jEly\f|}V*Ph4$nQ5!/@-f@ZhM: T|WZzy+r*/21Ԩ` sd{e)›aw۵n%djo(bs~M);V5 _+ɲ7l6 w%ƞ3(@C[Qk5R߳öKR^D⃩P<1 }< |Zvmj{6{t^x֟YќPo~.p2^Wjs!؎ȑaF @#x˔>XsimDƗLq8۸$W`7.Z RNp ?32ek}Oqѣ,ނ%Xc2ŒQ5bǣ=Qxʶ}(wDؽIfWA[7,$̺ FT__wGOYatb'n퐯ɧ ~$}=SQhǘ*9x f) maֵHE&X͢ ^mK15}g kP.x,e ȯaNiba&GCK6'eAM{$*RpA@OggSPAcZ ր-!!$*''(*')&() #')*'&(((,)*.UD *C]UJX/ φшR2@@)Xȕ-.~V ߻aEzD}RdQX~{ j.3 ou9]mUwYڕq4V:M8qn)ϕ;nq-)ٴVF36*=Ze]^0[qYFKb<:gYHд_{B ?%R_<ݙNӻಡ^We_IX4Vc bĤxf#F5woO6d*,&Kb|[TiBlsEҀ N*u$tF9=\| { }`A4:5}iko҃8pv19 rj>w=>G~$7llj)9d8eMm3# m%]Evk'8GhZ~tE`,~aq'N%cMƼc2&&##4MGkU_凘H~-8NӟZWe_?wvYʗ%j. OխK 1aZ?S:2O`AWgp&γؖDIRpI káSsO){~Ӓɀlq#lX ƅ!-`=\h3w'tSWgrfJ h]/S)O$&uR6q>NO3.+Ol1&;v^XLvu-վ4? L1$pi8 ڴ{*Jȋs%0 (oѲt(A}(-~2FW܎,XvwEnq;yy $ZaHѾnZ wOzAZ>69Ƿ^QiqdW~} ^F]c[LTdLQ-]Q8 &3F S~ti~ܾU3M? 2Q ˸7O>E$c߼p,MƋ1 HQ٭Lnw, 156 PzZaKC6Uz= '#W3 :;c DFd!z7mv=K0Zjˉ!yxߝ,%hXz9?Ghj@= ~isRKIuǘ_ܾ Xd= 3KRB蕓wHL}*Y[1%FtՇj2 H&hH qQkA^O*rL(=meT]gȇDN {Xg_ f |llsB0Pd51FX,ޖ,KoXZ⣱.fm  9,:c|cv|۴U59: Պ+CZ9ԣ(0]օs[[")Z5dDu}:,+J~}={ "|6YNt:ç.{ e>Uv\0vz!&z1|ff/> 1A9a2ގ<#{"Bz(LHEcEGG,7a=~:o Ķ7G Euu2 _[R*>Iv;Vߨ`0Ѷ؂3feWTXԫ)hFy >N;Bȿc7B@&x7FAD^뇟q|1ykHOWc%fe}) fP/dƂnvg4zo )HˎsL&>q^ et-9ʹ7ngwr궩fXcxD݇DU~GǠ<>4e͘aFc};`SDzuBMmDHi#m9ۚ3O:5ïTXYXXڵF EIq-TW.}gBryc__tm( Cb~1>8=Ύ0ܵۧd.P]m_]'ӟmJuh*d@ L l!*Od M* UB3~ϴ&--1bYBJ`OggS=PAcZ Q&M1 ! $",()" "" )%!!!)*"!), #()&Vdl:G15,>[`L]F&i EF@Դ^3nWپ/__CWu@0dܜ:`By@:%Zax=F }"x1+Sqls؉"zwEPՀ.Go!En OC ?߱!h.vCFj24_ R,dd߫{:Wh[:RF@"ܴ5IX{./~@ P~%ͩIM=+DI V`prt!jj DƕiL4@@t F sv[iƋl&O @^YLV/n˩SL?A 0luc- "<$<6TsȻHC vwk[?csG^!<-R;m/QF!JYާ y@t͇{BXZ^EDuQhY E G]&e[\^a+`u# |HZ]WC a5R" P}web#VtȧHݒk-@1įDgC77)Jćz<*y8YU:kOq_wi;v^KW}uj'B^\aNc*,F1Y"Dlh"~4V c6Ӟ P,pėD%pҬM 4SʣO#N%rMVmg lI,y@pk֙v/z[#m-b$j gXPOXe J,椶e:1ت<]Ab[,30xzeI[}LF6,ӝăAw%MNUڿ%"|Hzti2XpuPoBld0v} e3w}nn^~XKzl͵OMi) eWOxR͞>𚐤(|HR9Hn ;_g6JhKk7rsv: thz"žpIn^v~)й0 Ph)2#BOqlK$6|Baw}xL@TG"zd R~]ebN|S ,V&̐~StTT.-vkm!ҁOl; ~JihK],eؗ[Z]Y% %ܸ>MIfNz"`C]`@VRq)8!kc@bXܣ1[mG]\eqq"`w3&?սj^^6Ђaݚ:6&#3zӚs$ PE$ݰ}1C'7쒞7~m^t7 +Z7%s>K._`2\EwZ`&?/z`V Ս Y`bꥼ_<!tA\ Yv *t |H9ooNVɼL>>hm9bd|Pj *;BaDm`m{V (c| F PpHh]i-`7S]=8OKPzUځd.ʾɟDTlNzYHos+BߌPĴ[FH (x!R H}W ~Mpmʶu5D+}( dE@?0< 6{=-lp6UEnێ> {'鸒:j0gJkaʞI@VɽtiFlZ)eIN$sdNUNh׹\rB<|n'ew :I m3V׌loʔDFsXa,Ή"Xy*KHS5,Vi}hۏ>;jMlHLKX5m$HaQ3r1{ 0i;&&*\д@! `kKoayt(>e{L=Gգ["ZIorRPw@+#F&$˙'(]Ci:JcBzklʶ=MjtA쪛L K@,f9׏~hcQ b?jkP,1 $KGm]'>o= @x,!]ތql%AN=ɷyA%jdj2,eÄ9ݭ: eGk'ښ탲 Jtq6r b8jG/*Ӽ~|DeIPPs_'wc'*:չjHOY2j>\pw' ~pzlib ;DnM1#˜ mR~iMGHxM1V{ "%ïG̻s!1drn96_o6F7ܴdNBͦP5frFK2Wdx饕ٓ$Ռ5)+ӳGէ6l3 J&'\;\$7N Rrˑm%RC'h<RH j|-ŗd`,A-y12&v2}:HJgPŴf@ѯJ..ޥH_@Gcff;8ڪ_זAq'upV\` cښg52I57eҜC?Z[Xx?RoR%cvH{V5QJYǂ 0|'J"G% J%_1_]7W @&@ Iܴ% J~Uh@kГgkMO6o Rى":.})Ԋ09~6k?bPl, yKk0'aNp.N[G TeDSR@%:jM<]jP/vD*Do?@#PiM ;+[# I.`S #l Fpag!CIsC}:kc>xUQkhjLV j;D6{x@O@l,p5>P $+pDD<-P Y@ih?UDwel h3cD WSQ#98͔o-\q^_0i^>h%/}m5 vg$0 0 p 5l "Prv;m"z hˢuTPfUEZ4즒6GjGͩlScf4˱qV-V DC@[q?M3A10" xHm&[6qT X^k>c^7[ڿ%C"QԀ< q\rsFd͆@} jw Gk Ҳb5m~1D?>%̏nɄ1F\BD ~@8=;l@'bE!#P593K0;1I7&RItآv4[x7ݽ˝!(`KgbY'w(LdmWєQjݎˌV}1"n.TaO*hr%9W9T09lٮ`z%F cGh:Yxbl*@_b9kJrJO[A@'MB`b8+sy Lg_0)Ćcs<Ʒog JO%} |= mrtζ\q5:0`gduj K{LԻm/fؾ+= s#̷Z9v1oQop mβNtSlg,.Hͼu rk6fPza]dh>T(Ӽ96?sƔp< V3:RZ?JEFy4R4@<\y*Ȕ8"?hШYQ$-%4|bfdzƚCLP)cR5="ZZڜDSRX/ii:lVf)u0K~YҡsJIDGgStd <V6~W%kU~f/ZEm(:-#߳Y"η}Bm˱ʒ_3h_u#ľ9ə erŷyxeos({[0ٟ/j"&:l /rվ.Xy̙ `@ N;~IKbH'8p>ȕțLZS`=b ۗ `bnW1eͰ{{@{F,v|: Dh8[NCs7,Sxs `aKښ,[n[ơ7kFƳėj'k$}/nS4ĕw\2Ed@dbS}9תK3qmV&;Sv @痊k~vC90e@^_ƕ U" ` Q4; nTC}&(pp`U~խ5DXkԢo>bjS7 ם35 ~w^Z-:S\"?3mNc" .@wHF=X[W{3 t#o*әLր-,$}Ɖv8`@ƴkUNu6m DZ~CǹcvgM |+לux ԣwjIyocA˅tmVȣԟCRҋo@3jLPm8S ;QF շ[1\wzz,꺆Y?Cu-ȪSً(d,Oeɷl|F-sFr @ h$ו |wH[hqŁyֻ!L۲wPTvL_9/YsC;VS;\ p4FEYpOծ8b1ѱ%e8sBj?`jH F"bP]2Hyf Ҫ@ -ldweBӏC5+ C)@j"` & T6~UL扡{VJ¹`n= ,`n66&hh`y3-|0P"X<*Pkm/@1j(xQ9"Dg @Ue*rP@6qXʊ@44s67 B4%`>_=z3`->cIKle+IZ5t{p :a q30z^@`0q${O-=_^H͢ |0EEˠVMѩ @ RyPzu,@O и=]X|zwBR0#@ 7^ʜA:}# TSa5$x@@P]R&u?-듍LNgB#!~7gTk'ҿVyYP_\oB(aP`N#~9t<&5&$h~t>9 q=+y0QQDnF_|5w~;`'RX߿?hOYFr|)D01x0%M?ep'ʳdl5b2 #8SY@dкV%zn.@֕Dg{m M]_ƙ3Ž.DC>]㔟rZ/(x˿9a9,oUW=K.jFT&xC*ʻrxaー:Ҫ}ݯNrgl)S\ɂD|lX,\R8pi~QRS(|ж5%^_Db*nx֛&D]ݹ@"hӚ򦾷 Y6=a-~jmQD u4?6÷ "gĆ󎻟,@ _s}Q}H)hBDcOoF3a  Qy'DSB8Dђ\¤y>? G}j2'$7R7.k ,5 y{u@c1=h6G/<+ڼ$Mlii[4/RvfEFۦuBx,avCQmN;j9R0$Éc~9h$XԚ)ד̳n( <<#o<:E S(@ t@V;5 STD>Fh PJPd 2YD 1yHn<:o+gB(b9"9\!0 4a԰%kL H n PYD pD$2\S=t @)P<4!/ )^"TqoJ7 t |0!! ~Uu\:#ֹ[Jp\HPptga5|A?>X" S<+p܍ ҅WfLg()qw ‘9*Aĭ&A^Wq>7;!34[@ @Yrhy6 Ѝpmẅ́& NDn\gp8P^f X Z9 xjxD*pfV@^-<)bQUۚzb|a>R} Οqڨۑt|jԃ aZ"R}c?Ov꒥Rww@h$|hQgU,.]9x :@`16 @2*xڠѥ:Ch- 007\ŪVd+䆧"-@-X |X3CV&KT ܰhn">ef.A2%@(%{sxHX 3F<{B3&ݙ*5`ӚC*9fH;js:,oPKՙ4r{N:2/$ CN 8(X74Y$)odAh&Τ#,!蘶sס1xD:KMIdЖ ALŝRK;-κ#w2YGm ʤ=qa7gXo4!zWzlgۈ=Y7ɓO $404_ȎQez=ω\г,&?Mns,K} n$ɨ2F0eLqK޿)4x%jSd$|17|y=8c =tzڕco ͎K\;EǴpXŐケH*z2p; }A̽kqE$'w$vxF筚4a[uO'{A[d2#G6f;+-SðgO8ޕT=wI^7m&u8:<-ѸHϬfEQZk3vV-)'vXCFU!$V}KY%~`k%B|),9̢d]DPi~oi,Qh ![JvBC'pPx{tJBn'Pk{T7|dVlԶzK; K p "s/6LZJ[QgڟF-Db5=jb*r@ڰS]sR鵄(&orcnz>uѹd/Q.@{@jSOggS@,PAcZ 44""!#*)'*'''*ɸ ! )+"**+!'((() "!!*)F_3MkWJn{l PDv~X:@z.c h&;; ~s?/@@σBEfrv u/7:Ė_ߙ@^Lu*5bFwoU njw ŞL>(%]Ɖ~qf\CS_Sp mN?d;VMAdx; ޸4: M>%8Mή&gc^ٞ ( j|/Yim/[5oXf/īT=Szc M*b=$.[c'tm{;^<\Ȗ"_J$Wrh>#1.1gU7b?BPD;a{ˮÑXԙJ>-b*\ T_ ,n[\|٘ur"pBG䇲,+8,h0HE06нxT|E3)ӃS0iN00'+˅̪fFL^ Ka-ᜡ5H$תm pA" MIGb@|`[c.:cK6! P(n.wI5 l]0K@ *H D0GT?]  PA%eO(0Z( Jh G.kp6j*TVBns B2`t σV~[1lUt> pJ؄'M<<9 a-~bP‚(,0[C{p@ST@oldm~ TLn ~uU)@rnB!-qCN_ *# 8.@^ЯL^XG_%tREW[p:nhРA=!aĴA܂LH6j.gPo u\l eh ds<`VcVԽ8?.Mp= m^_b6}8-Yl*;r='/j ם(|]%[9l&`QlmT "S,_Tb϶$yooi9  uf_+q:בFڄgy>j[vMW×g @pAe )wBen}{&tY=ÑeaL>AM"70#vQ+`@%%&R>46-`:XBx@F>M*E/졎f)r*uDmv=wҽcxg`"*OWs 7w?\*4VR,>Om~Aja!#Ð@޲䔮kߤc6>kE8Rzga P:-)Z^ޯ`UM_Mf"?=HbM;zT-Z\-qPN-xš7)Ũ/y}[D!ec-D!W{ʸв+A}њETJYw2LGiĭ ^bmq1q  Z4;1;*ZYk{n6jvsT+Q v7̃g2!Kh{4(tDM7N @SFpy_6[}_yب4lvL Zz/1) C&s$ cZ%*_wf[` <ף+!ezߙ?Qrq,'P@`k-דop0ބ\uH,\ݵwZ X (e/sy9uM'9v9u~-gOJc]X(ru txQ1\jm&9Lxr$%~!~Ϲ+_~f=>54&jzy}Y! q Ѐ m`@L^k-[T,Z㵛<((f XyΜ]ao278hV-A cGPߟ Aŀ,/-jf~˟>CJa ")fk)<'~+|FiLuVul"JX + ` 0 y_.[0FmۏaHͻp=Վㆃ⊿R!ؑr =0YaIѧ?he6gzRgFh}s-0N+@>0C(#CF0>Sxk U KN U NahW.NkQmݬko=i"YC>2$_ċc`Mwxan&L_]}vc~azbsGq@pI]/o}d~ nR>iI뱈M8 ~d΁D 7>40_yS6/.RIC{ +o^KL DHּ#f{T!ʢM&V7Q|ݖbg"rIh9gϵভnb҆+fn=h!-5 v7t4}T[AM̤gEڂݭ%2Zrؗ6ޛ8Aauc&QPzgr3ۖߢmxo؃8L "3hS\Ť >gE%C$RLy8. ə${aSryKf&˿&MQ?rw[ 6Ô{ޙЉ gF ,$͑zрZb 5ηJj@gx e1wo?3Ѯt] Oz;* /!9=!q^boe 3ibږѩ:}XZ;ݲa[4c,Dco;@J5'1ߵi֬KίJIm8MO zf+xz*AC2 -\f4P6tсy魏7gU P#isre0ע02xxvzOggSuPAcZ ?!!!!!!+)()*+%%! (+Į"!!""++!!!#"())+)'"'+*$((+-**)(~t.*4c/DjD[= eFVSeqCYSyG1zT6*\W!JTOw31֙'|jhn0a-t=;d5txrG{C8G q>D=S>;=w@4Xi7>DŽEWq@^4~q؝efcw9oBX R*BරWQ=(AU>_l;pj}8^D,=)`VV]Ů\I4@C`=:>q_GD?]J$eP5"21jk Ty/!?;DH;*Mdi|Ale<4$ysN%~m( Ho>3~i+z_"™vH*^o:h"%AiCdz׫b)+ c8Ԥ̞MĴb"aO,E#;hk$!+} GYzm[GݥMĮNR949>iZ9Ƥd1=0rFG_$ ӧ!e/6Iʁd]FGpk] eq cws`箓U^jZkغjcq!4յFJxuHb!|đ@.4eݿ' J>5F{G 9Z$ܑCSq' cWz}M9^ ;NДXt\C:Z#|xyK(Z *#+`֔V=ih6!Iv+3m? @qeҹw|,I2҅uWFG(ܴ=\'U\r[h_+n<0;^LezDX_̬9zDt.L#AC3ṂV9iȜ|ɚ"π ->8,wEeQR´MYRUk] k,Yk ?'aik=2Pu^᳞[~|3轏D/Dh+D {9a o~?1EQ|n e"##s0nw$vm\c#iu3 }&2R<*;gu/Q(ѷ6~8b_"Y 8Ʃ$va#ʸ,Oy\B;ێ@zحQbȹ[xڢWoVĄƜy+ P p%ZU1~)NH&_nbX]3H#6+x[w%w nr =4ưw\M!pP lk—z&rpb -.aw Y׾k K^>^SږuC$"ӊg/7sc(a = ɵrz?#w(qs<ߵ9`#A\WX,W^Bϼ8lQDxomWWf1:[^MNM8'#7x`E$מCkCA8wٺVƲ' ^mNFf,ƆyBB!ǜu=~[>aW,]2D K0 vr.E6ʞzmogepۈ, ?;jX1r{9tǤ]MLf׹p,O$eyMɥ@h0i>I5X+tZQ!>3PWrAVDňqW{OحIלB I [|ѓuCN"+HAsGB1 ;(1߮m&,-v ~^ Z' J6ȯY&U^JEi:Ci9N;6&iZ`Nzg:&L$]~8KҖh_IdW1[;ī1@5341Ƨ:7Ծ܍ ċ9 8pd _TmUس Y2khV3A3][edj LƋ4N=;_sR:uiߴƋү*@`9>Ft`6Fhq`D`ζDY^5w0&iTGB,13;YMg9x@}ufׄaE?~)^8ە߽;Ce<"ݮ&Y9װ~ߗZ 'HZW-ԘV/C41/Vd b{x&VIWqBO<3u|N <p], 6J?ՓOٗ\ @ 8eAd̈́p)q BZ]E}ŨzcԜ<} &n8n"ƓSϲu#t I>)=߯'lJ- e23i+]ŖϧDJU`aata׶f4kuሿkS7.4Wٚ&rƳWߧ/DO爦 Mʏw}V_X gT1ƔصHYVC2HMy3R5N@l4Ƴ[8} 0EuW}%aBFMFGo`Sg[`Mh"d$wC@юfhHynUCj1eUDύsY.nR6k$X>ZS=зh s><۱ ݪ _NC߇$!6 >'3DS;ẏ#g5g2+4o}=gw2Lắ8V<(I[?,_ݓ|(Z|-xoOP P.l@Pr@ tb%4sl D^kL}^Ѓ@+ xDJb\N2CVX7Vh1C-  Fxw-T~lwp92Z|iD=in-AN7| K;II! O؁'OggSPAcZRT7#"$#"+)!!)(+''+ !()"" "#**$% ! $-,+*^h150v`Q'ga! j$ A|19qRh3w4kNfE B]x-t{'ѭ X~яp4lkbՙfORnm,TrdWa1u-~h96}ܪbm N:' N a9pS DR W b[6/BH;P8-pv+PMzPx p@TS@h-@gU\&5UA`\s@k6eVA AJO?`_;^0sX%~5 p'6S $$(0J*LBX8,GF(@3T HR6$`E> [(~҉>8x]M>1EN3s9[ 'S`MgpI38\7SJZ&@& ;xw슜iW4k(T8е_;(X Fqo"E|ONmKh\U1=٪OBwxJ>Z*r` y1Q_?Qȏ? #~0sM$: W.`g%"迮 o(<Sh@:r0ØuQ S:˴ w\UW-%pTlR͎> qb @`~f4eՕMS,p3ƳYg ,寔}{o,g{ FG4RslG'v }V~04ոƻKD 2d?{: +!M!eG1մ*9= 0btB0vƩ ؿhQ dkӑ`Û YVkZQُf6 #s@2Vzsdb]g.Ж{_>,=۫<N\^֖T v9іqrx~WR~\ڪ)ni|~Vz8 V܀a˰ @' Ū /PBh/rQiþ`] uEBR G Aܶ[3Q^}ZMwҎԾ'yhz)EV߻|Ę7O\ob^׌lA.4m#-%lE#d0|}uXk)~>W8h.|%cFa6I<$`<r0rhL+~s wLtzG~{qm~U fyw$ ݆73 r/tp+ o^cd0 }-D =vBwlVۊ.ƨcA'@tF ŪShr$vnnT |w5g-K8g_}+826a=&v'l=0 lVg,ˈwkK;qH5 5s@w@p0u4:7+v @ąHhB2WK!Tod>wS e ]4 1Mz;sӔNA  -Kə 1vU&֝8Tȷ̠sܝ3Xhh޶RThs,xDg{$Qa{Y/?nͽuc0-uCg7%MRv?BO2(E}߂˝h{7A}c?[c~z 31K G~ "{ HƉ `Uq)e/ Y,ӽ v ;52/߷],J*r 4׭Eļˍ#66Z$KqWJp?ܹ`H0+{T1/9Icg_DZۣ ~g_eo$s;Zk$wP |A]PyQ5<$`u(#X1$hIh8[:*f"[ja¥)7U1Zw ቚb5{(BK4hb "AD[7c}jkdw}j?ǠwAO5X73AbA`H>KG]1{ksʩ|rCworV´6H/v {MOnrvsdTP3bӔE*׷𼮈F~5!2iw]&ߋ8aF~p PY`N'3[]=S:aȈ:(8hX~;D|6HfWO@i$Id̀\= ưx  KeLJ#'OfmDU|)"HDܾ>z*@^HM@eƣlNa:lpf?͹H_ӼiuFl/yܦ/M W;q'tl>P)G9$DhR1Û3*n:$Qi.#PΚ__dO'JF!VqyO"YWIa" P^rZ߁atS2\k2 (snvzxY^Zkk[޷7к*c9^g';ࡍdIM?(@>RxiYm 22cJ d,~aZ[7^tOdRlBmd?4BzDz=FB"RVdҧMOV˪K0?=-zEˆiIPqړ PEz PaddG&E ZEY2A辩ϻRāXi %- }4T?Ptfs&_}Y2 F>gd,}rul١RF>H(x 9qr'F"%67DƴwG+B 6yx4@| ƨeR@l#^w1&5ݘ=C+X6 $qu`}zN6'_* عʒw,aR \4}h|iO[:8qkDL!華z\G$X|f`y/u:cc?A0L1q̆ ; )j,yz9y>dL+p`,@:xI #0x5ݩ@MQ(0Y]qM&k_h͜x@:i6^įs5"Tt} [:r[lf6=H&y D&ݕ1@!xiG*tҁ҇ g%k$\׽zj\L ۜ`N=  TƐAZE| M, g|=xĠ՘ 5boBO44ŁfxB |%ۄp(Lm nOTL'nZJ|lɖK 0O7$s H :~7%2)M^6Qi[bju nG !%3" T @$ @o-#^EpS 1-:AOh7DÜꎬjTYd'e?>ey1A5WOCVk&CcT`v J'ROggSPAcZ/ "')+(('!"  (+),*)%)&&"('-IJ̐jJ?U>MROFFeUVB wh$kl bb-X=p1(NR$n`!;F#YG-F;O'^V{g~Udns29S u赤7 LGݜIDs<`zd 6vGreҶ2s~Z\9ce RBr 2AḤ*FC7Bx A4-صAD %H25]& 12ţ|:bXoē Y<FZ" 7XMɰd1fja\f_K/$`>qrpdx! 0%h%W82PNJPCnۤna `ke %C3 %" GAX3],K8}6ni㕵)Hپ- #comtUþZ&8oe4^+)h1*X 6> ƭ$;Qi@#s-c/ [HjQgCY燓oV9*M%]B~TVr2yȑmCۯҿDԀz]-5Dibv>>Al c`ؼH~Mē"U F]Med#H⧙O;Jh%FM `@Z.VP՗qITaH}ؽ 1fֳWMyY+OD (`+}b&0~dvi:rI9sA e,hCCݲseOhx 3xlmO&&NIMAiiwta~XrPn,ivX߫DAcǓ[!ik`Յ~ncˋ;"4G9ys =tsu}>vG\U[=Db#X`n8Wmإ> >7g u2Ua z\_7 dV^ǍF=~Zk]^^^WG& _%[z)/B :x5Z{VYxY:Xok4^T"GD͠{u(ۏԴmo]hずT~fF A }Mfbz_ _);6O> P(9@3kj(gfHBG}sv10<_csy )phbm\r rֿM,}->@j5:Ò  ~k̳7< @$ M*Vy[?07͉9-)V_Z AYm{k94l2vH Ƕk$Ӽߌ~Tc_'u ` GVyZd/F MJd UH&lCefl H -}5im`D{&tqlQỿ 73S{d_rK$Cә-sΘ\Fʡ3jb@b!a}|fdvI Dj|mX&ՈqSbS]l 9 f 4p^LB P` _S^@Zu uG @*)Z5@f aZJⷋnU[@[q Nx l#P=$ &`_l Xdq l3è@7Y7޸Uu]'Fң;_)9Q \W :AG0 1#={CI!< Y V3z0$fjp TE'hc(+0JjP@\C ! kG0*f߈p gsWxئ з,'+F c^39ďS.1(9L  !`V DU,V)8|nz L U~^38br{W{-:ÈՑIs1lU x)wPNϨ9C.`KOGaOr] .`Ă ACH p7pPe`x *D&< w(gKS. zɳN24rrj:KÐln 8w(K$i9gu S, H D~s1YtzNIڊ|  6@&42s;a[H3ZIT8Vx51{484sw'0uÈW%Vۀr*@R7z^ndKlK|OQ>D~~|Gѩ}ig`>t4If={E`_$pfP(F* S?]bbqi6Izcz BbS=eK |eOHgcݡp@ B-wD-W*L7#|}HlK-1'pfFPk3)vJHZ/-XOggSwPAcZN$ !!")( "# ! '(M 7$;G6w/( Fc[_͗C|oi1crzNp5NWb5;Ug`hKPvB0LqNׅZm##5MQ?^poA ,sFÄ^vsw6rfAƸ5͠m!Zi:o3nloUQ엲4ANc~#^}rBF@y A2i$]cQ5^F$ @HQ+05l{nԐ!q$tbt ;}.9;34>0(nTԽٖl9ؖ>Jyc rF+?@ٛ\!| ,Hv4;groWB֛#A{d:tk]cN$l5ZsMtl`Kfb\smmoq]HҘp}Y@[^ J]ľǢ#kXز NN`\^-&I,S󑷄L4FE"Q06q+-LOz]4M9>cj1^v[`Lkɠ`̟V G@O<(0`5լI*:-4.g}Y}nh'LMϛ]F3Z8e?Տc jʔ4m4M; Y1c3ơ=n*ͥd紇Y+e!65[AuF`ТW؊@eZޕ4P"Ӎ HDdzǐ-D`auV8`{.`dvD]J Db//µ7C9[ s%ύBkUF9qqfrgZ ?Jm7 H$^LS[aZ`;M?r*`ޕSu,̯B@u$4i hu|oQՆEecZv(J~U)8\W^~ֳk__T૔kOm_d<@[TeL)U-G͊/[bQnLb&YU842V|@ LK`2+M1+ײ@2&:cXj95ӧIh C{@ի=C-*55eqms.+ڢ KD0'Fkd~/aO!+/- '5-iw-R薶 {Xv"D2/kL .f> \t&&z^銧bB/Coc0Lq>bmTkڅTJ'*)jPA:6aݿ>~H`V"o*()h×5t "w?Wf –C05IH}@TԶXJՌ-S(>JX?ɆȘ~y@(۔#'2ޭS)kH[~ӣpΆFj21Δt#m@p`Ik%JGw_Swn tFaZ?3֯q`xgm8 )C4dVAubPTHrCwͽ GjFzT~.}TB^DHSK p8g:SNfٲS \M&5E'r>~7+hPPLI!3z3}gz%6= U1t]WnaNo]f'pL4(6 #s T\`J"7c!ז4a}oWARhJ׹M>E+84㚬Q 򝉅dF/#؜w)4Z'9F ZsK\K860ϲA\`Ē4 K-MxΩ5guDNLj^NZ͘~ךfX*?Dsц^ssȄ{Mg5zqFUrSWQL=U*k4z(ӽ嚻pK,4tS[ & Q{,eLA VvEkk[;o^~mlǗP!O+kQO$[mwȼ &Ay$'ZT(rwƎ,J6<]iF2^j9Cxbc) +ڍBN^a Yۂ]@$d|߿=s$􋹥MLۍk IpG -Xu@BIwjj2 [ XjF;~mY|,8s"%}#}נ>5%©ӿQ5|F c& YO3L#!'{ ,XbUAaGeCF=5`r~ʠF609M#jtaٵiĊ9ͣ0&2_JY3ܭn-YQ(Fy#&q>vU5049pAH|[RJ4t} , ȕ:`eTh+B~fo^OIF_'DӵΖ-9iUC, ;䷴ M\KQ-w}2ڢ/'uOV?FXg*~= ~!Xf@M/[u"M"~}.0ӄqE2r.Pq{f.%RH>G}!9O8Q+Т͖3E"O2@eĀCF6dm;Z;C&63R;F"qV7D l˹!OJ*I8űn~tF{lB!4, DC@0{ėg3xĠ͖Z%@ԷF m3Gt+@3ibzLGdޚ̒ݕ3T!Z;ąF{]o[Y; N}-f VVj/K.^ voW}ʮ4PWН\q"3 KRS]C-8P73 G4hujk[oblxҬ>KtHTOT4 ]3WMcn'.s-@ўػ=Bm$mCX=lvhO ]åǷG5ZwfTqݟ @ɇzUB7+vUh@vz(?m z8Sy4Eq411ۺhv#E&lW5} "hpT_2R(,qq;{+^d {q-Fv$ݚdamI1cldtQ)|\j: t\ e亯\O2Qͷ.D,z)мcZMa"Z{?b ZkUӡG{xt @vqm~iQrXuSzYX$O5A28a=]J.axr2Ja8BZq'oWj ÙPDi\Ǣ >_=:|kv`v fe>l)n^8{ĤLng͗f&gI5ƕe,Z3ܳDƸx ,S@`MqMbOƳQo̮f2A@sQ}ۯ7Sȕ;]:"~X_05ɦEpYO+&SqiqZ,nr#4fÙFmE"~7u7Q < ev#8o/ (ZXq8++x[|[ ,Ӳ&a5lR`a=OWeV`;101iop< , ef'{y$4>}٩ӭ}Zz$x*`?SN?qWs==stf&C:̹5!Wt֊nbdz2E\⿜{)rY'>vQ!q ~:%ԪV9w}>N {*3GQڜ^qR.e^ߨ(**46"CȳHPWLq ~PLxݝl= dfICK=Œ/ׅWCsPM%S:='oZ9?2= l#QJ%}&FStgI<τR I~â FWǏߒͭ{ Rx@ g3 QB.Gǭ8ВS p9tfЄ ' 5O[>h5起$Q{ۺQ@]M7s[kڟ_-wg19Nob F6N1VOaq0m7thj/Qr\lq&˛pb J]"oۛ/G4]j` [ 7kA9oG^}h ,6!OenodfloSKcglr΅X4`>09iۑ}xsޖe̊x;r5k^G6is c\iKJ Nq>P;z.A3@9@[FeWفȆ1w2Ɍ?g:1Lb^5?l)z)JPV’ 5ze .-֕Bْ,PT$Ҫd!e w,A((e0UɸG tW2Li:fc"xVt_o^/^3.ё5w>%Y#P.p]͐:B+Db$w:?ݶ1Cp} L2e#sy]['Z"!#P蜡41lP$HeR̍Y"#g^ Ez.Vl 2 哌?̝9fxPxg sje_/7BtWÇdBy2^-jOd"y[`aB-<s9IoX_cf{-)yqK4R9V}z\r| ^_0}֑3{#A<2HIYa,[3뛮" m~^c?n6: G'lS%VrO7s)thuDн蹠8X558çkPʖ/R訤*n$1Bpqy>{,9 8B>).&)uZv }Kk+PiB!5wI:|MshzN]`4 >t9g>ǻ6d]RS:Z?:K. PPtiy|ˎ&d* VJ@}{UR:b6&"*۹\Hfˢ-Q(瑏^a[FS&{7pX!>m.n<Wn |\"'Zd<7l슑eKǑӌ` f;wQv6ݿ,Ա ge?5\1Z~G{6C^~#@"7MM?фlݠKso4Olo7hx+׵fU]aJru~o 8Y4-g^% {|_z 4Uk"b !մqs?ۈ )\5wX%^?:G}xtHx}[LFlV8Dn9f[tуVFx X ~Ts4EKhɪ!Ȭء$^kMZ.KLGԫvYGک㫐iUPSxZl=v)E:Y)#گPao ؋XX=(JazDyK_ @lĮ%UR~e)&Y^D 1A ,|uYGu@1YH@p"_7wC;#G犗9Ni]3h]rꐋ ^ez drߏm*ү "Q%ً(H?2P} F׃>KݵJlgh_FUB c{ܱS><p_u!G =u @!a-Gխ9BDVm癗f\CYq%hS]>Oy]mi"h喯O5}(j9~rȧM xB}ndk?%1:;U}0 ] sH|#/B7u>̘MFg,[ove"P:3R(3)ۜR$;Sސzrn޹țsrƏ>6; K>Ű?Kr&k|z4Ӭ6Vı4cTYBUUb#y +Dy>,ÝoDg}?nb [*`D]Z\^6ݤOggSBPAcZH,')kVa,bT\}tuuG=ASRL&%Xk2%.|7maM ,* s?2d ,i bWnoUoX`"COBADƉĘ1wNb&l=Z+@(8#4 ` c'[`{ ਾZCcmhb]e$}jc`~]mܤş؆xNL`4M<M6ǂ+`nm KCj 5~aS.l8y%~9%#GD!ީ3MN7oww@<^]g1s>݁`̷Ӕ$Kb$YVWWA dߐHֆqZ(,uJu rB9 p@ >.3 ,0"Iޖb *ph`JmQSf ՊZ޲nɦcH~B ʛZipyglet-1.1.4/examples/soundspace/res/drums.ogg0000600013464101346420000022404111266427730017624 0ustar yohyohOggSOAcZ=vorbisD8OggSOAcZ-vorbisXiph.Org libVorbis I 20040629vorbis"BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CS# G,]6MuC74ӴmUut]_uhPTU]WeUW}[}UUYՖa} Uum]X~2tu[h뺱̾L(CLABH)R9)sRB)RR9&%sNJ(PJKB)RZl՚Z5Z(PJ[k5FAȜ9'Z(9*:)Z,)X9'%J!JL%C*b,)ZlŘs(ŒJl%X[L9s9'%sNJ(RRksR:)eJ*)XJJ1sNJ!BJ%SJRb+)XJjŘsK1PR%KJ1snAh-c(%cC)b,)cŘs(%ƒJ%X[sNZkmsЩZSLsYsZ(PJZ[9Rb+)XJŘskPJ%XKJ5k5ZŘkjs1Sk5kNZsc&BCVQ!J1A141朔1 R1R2 RRR RkRRj4%(4d% `pA'@pBdH4,1$&(@Et.:B H 7<'RpFGHH!DD4OggS@ZOAcZL{Dn&!-***#!)''l&Ѵ=Wߝ_ Fi4J|5'h} x:uTat',& MWfakPG5;[3~k Ntg}(? /ZN8fwN!`hb^|m ,ЭvVBa"$~ݳOw7NL\YCħj|so7Zd% Pg]j1CvMsqyk8hϙ%!uL1Qb6_^JWy`hȮ?56aqQ"^]/zMjt X~Pic|6{8˶mPKm?->< fd0,0B)ly@'7dc3zH%hMhEHB,Qp*AR HCsD⟪Ս2w7ڐXf o/%j?nU:ͫ $Y.u/;]d%09orśF4A_O˳?fopr> ~nY`I+۽o`M@ѠPp4uPpiגdu8gz^*~{U1 ZLҹI*pQBdi*E62IyvR>*ZBR3 R,_QԾ<63G/h*Lhު4.0v/u1R!,k#'?f<ZR}e(IJc\&Pʲ̋|6j,V]rjepPf'*"Sc&AkR6r[][s apfո ]gvJ/>{YˬEjрX@ؤEKW 7R>Dž=<J@TI+^F2ҙIR ^IԬn4MZEI`yR ^cJ@VA[\~Tr룏r;S 342zt:^: q'8C$Hr! E$f9Ws#557 6vҒ<Dzf*d?]aUfZn C[ !>7XT,FH쾹nK20SR&0f 0 E坔 iY 9oSEE 0a ӿ_G| DB2RϢAYf4F 4ijmČ)e}|[03S C&6D[>]q:s|\K}EqY`$S̛3Bpz" CoOgsE ]`<ϟz4#y]Pzѓ, v=Lo0+9Q߃7t?q ⋉,5!\Nr3GVwOr+wճvu;1]Vq`uJ RC8D]c9d0Є_0LӪUsrZ7Y=ϻ/դ:ZPHɜ'R LzhR/`$i wU_mQg]F8WGgdvM\G,gfnYw >L;?ؚMw>uiotts/K?ˡP}8vQi Q ^!D ~"ނo;=fe;۪#i:U㯋uufDZWss_fp9Y% Pk޴FhZ >mM!ĽIЃ ݄1FX+tܗ4&6aY<=4P vA^1?v?X̤ #m)_¡my@DlUkIPn-jW7])?7Y!CNآd9ڤkw-MUz;8~|MGR9m6K2r$Y&djx xG!!o&KcrytY]U@mP /9]_V C/:ϣ*)_@r=}ϫvN52cO{vg_TaF GZ|͙WoڏF{Yx{嫣QB0}Y3R|Q' zBb2%0a4'J^wo@ ס jHB=fD5(axsyҢwZ!hB4lB).5KekbyD>3gR!x?|wVUJѥ) kTas 4q ]L[y ވCkl?E?m; ҵ{#lRxϗf"q;Z4 T" zfS:%jJ19wvwLO\FzU }⯻7nevqyǢ4;-.S|{3pnjٗєq!)]:PiPϿiuRaG@aؚɎqa bX1EIU8Nx Tzp_u+eMɨQ5M~ݿ6;rԵAEU6X!K&aibkff }Hʰ5绳iw.S@4Cb<7yݶJKR!J/f0yX Dd3ۮ1`UL$**`r/l3ay,DHP!G?jfd"- =^ ^퍶~ϑ{s`jN9"a,HL@C*z6 L. X}I|,DuG ko6F0|pUŋ'>$5/ߕcM3VpV^$(;?"Yl8>uGDv24#@]"xԘcZ}gxP).>fi{Ni6omXjBNPΤK2mslu-=c`$?j-'պ.&A\κWD0ð9wHjS$Pk_%LzWu0yuVI)-ĩ{ /6/TxlkWf3@]z&Oڷ~/\ `X;fmTiVhh9gZ6xB,ɉbNEmy^6ĕFf/.H(N@20Z?Rm2!F?Lo#X&MBnx. j]%d%k,|өZ+ f@f1a)dDԞ߄6Z*sz(%9OS+Л1] V)WJ{{{E}SFUwt5kV)Ej6¨r+i36#vΕ I||ƌ0ψ2' Zc$tcO64 fp yy2qkBB  YHpiWGTyQBdMS\~-4 qmy,jXvYŏ[HwA_?Ƨo4_2,|[l Rz]\Bj$Vofy1qJ#`9韷}[h*kpG9&P!'Uu;v8!]_Ƿl ӲMBK"na徝»,Ƃŀkqp#RGd~7̕e^3|[٬@\ק`B^Hd}3@M}S~G uIPq] Uo=>fL,LsnRZfgz{f^lv "ob> COCΝs0ËS//`~+쉪/Yv' 3'L,TP+T^ \ DŽs0CIShh&{>tLv/L iUrt}`+ˏ`ã͍^ gQgt0$93L1B _IE&PN7oQu~nO"LhSx)I"l 0UNt֬tK,z L ^Gg{2!S0 A J`M5hǷxM}6; 4pZ6}O)L j+ d`}k{ v a>X(Mݵ+itJEZ4Zl{泥Bh(U{a+#(^|[;VH蜖x 6" s XA({n {:ho EpCgWӽ:Oa#{q7^9SHsI3䌺8"WߐE0嗵ꝓw.+U`[%۽rӵy{^=/{VRd1v6GN 6Hf>}wۺ4 L,KG8-xN^EB#ד ӻJ|i #ޛBN{@@vڱKQ1JE4b yLN(-p(UQ`gmܤ̶ je4D``E :ˣy\NšDo4le0@^lJ F¤|JL ϥ4 +tj`$`BMzȯ9?3ts3j{Oq{IVQGhWe!#L6x3d%?l<;Fee9bBta%YV̮l}{\bzҒ4AEF->GebO@{:G%o?U:`~̒F&>M#ӾcMZS#_۩I3oWHv/aX"GT v15i$:#Qj}{y O|M-Go1w736^8ƿ<hʼngOggSOAcZk*$1$# ""!"+')#"# "*('#('("###!"+(*)m2gFo*"5:l%6v36k150")\H{!uMߍpxֽ_ϨUO/ ] nhwv*QvLl3-F@bLT.9 $>LRv~gâB!(ӯLR7ہmF4̝Z ^"?rp0Y~ wGfG w54i]( ׻Vb;ڭ˹DYly<5> elgs x%3,C6$O޼?,B by?ª݁MsMH4Y8>"%\S2Hvyi*I;Y4\j@?4W[LgۢԮs9)m-zi `;: pIN%ic) Ķ!Ӌ=zP?C^u_XPT  D)JwȽ𚃐YAЩ(9W[&5&e{u(^z=0-^x0vw4ɘCgV&GRUIл(y!:U]]xcݾWH ۫9@ߨ,-פAsj[%>1wr?mE$jzM>S&܁W,xvM(j'de6&U*j<^Z}lY0?) FO-Ha-8&"w禮^#ےP6WWxНa]>AhqZ^+#tQ3g7/d'Ti2gi=ջqb&5\YU8\Dsf>m]?@5}L4vY:h`HzUd0@4Jp-ĩJbfՌ:I??|(Gǻz{NR?k U̓TX%'eK k(`A%l1Sf3s H a:&θ-ln@:3~ -)_1)T_7WAYr=g3KksZ-'Daw:>j#򏇜 j<-gV1Taw%ݻeNx<}ZIFll\_y7l17wj^V>c+YzRLLL>@BбWQHl}tp=W 4z9łRy `[ I y Wwџu8U<קYvwA|vM'lYeIt= \))n `;E\Aѻf}%φ~]+omY H^3m%!ԈyCǷq ٌKE֬Yc!6sC4VEM۶ɠvļlÁ7sq]FIt} ;R9XiH x WVd*ھ}oڅdeN)5/>tfhM5|Mj;drwe lc\Au~_S)M6$L,zނ!-k{37L_&tv/7c^=RI6v侱:$Ӈ`W ܒj8w ߢ -PIFs]n7PxT=GW&LQ?P@k"_͑}Elٹc=3VQ싡Oa/kØ,l6S]Qm+W^Cg)6<2ċ^Sl&ds([.6%oQ{j)J+p|׎X Pt[B)@@[y} jGP ```\96P D]2<rm[U W,$F9-&Qd}sIћfb'_LxB#(dc?X:_HrmWV:"ۏ]oj:|g|(7e ǹ$)/>v:b s\{L!{M{dώ$7:źl=\~c:qMNm0*|C6fXž6dAimIYv~roj9 [Wcړ|;xpiebi[~,5rc"p,p%tclބmYz VАfC*Ť;/}ޖt_6;SN桉G/˼>o2ԡNG"qfSʁM`Pwٳʠme>(Y(R:9-jBަP2M1?~_˄,pʔ洑+e'NjК؂|NV&/Vcb|X+siO,ϼ|\{7][YiRpxR왴2Z'ax xBxc ZFǑ6 (&1|A/^aJgzz g² 3Z.%(J7yP[0 '@ݖ.2q;($xR8wOv @6ae@p OggS@^OAcZ, ')(!! #(((}SJ&`C)cN=chSj`;MqӛF#릇i5PAMF/,&H?W`k.u,ܶ5>1mJ׮d!w^R]ёlw>Z58ҼtVZ),~s$OD7ב"B@t^D=[in[I #J@P' ۠=J#%ry>1󦖉tܯw’2ؽzc oKms΋XZZ&pgH1E!V6XꞋX-ښU(Ìj[SwaI-&M@r|}̩IG.ɡ[?n.tnAYiA]z'ME+-?˲tdClb GV4wy>GɒC@.ߘSLXlCJ&"[:熾 h0SAь$r B {MZ`@r ֜kȕ84HRvq 4ZB:dmϲm{V-fzXg܎PO';]:*?O6*囚 'szԏ4clk<@Z2A,͖kydQU!)^<[矵%хNӿv~Rg ߜ>\ή̕*5K+}ai#Jsc#(*#{2!bUڮ\Yd}&z L롌Vv8vV aJ VY=ΩRk`+lig##wObHxܷz}}7}f5ngc7@|Drn<ѻ^>"j -R_*Rsj6憖Vcy~$ 6$rFzN4\vP4DU1gT!t&>+Lܙ {41-Q+\nr1?tgo2M|fSUbM>DZL^ Uhιl]^ H|(G=ub 1M^d=:ؚYfnqΛi(c2)̭^*2;9r['^a=3r7\u頒؛OG=˸&=mҪz?/; ݪpAdU-jm6b;ҧ%K~x;v+exނjSȧq 2;z"RpCK O{B4ƫ,}?*kh )&::~0V@rks@GO(L B/ MJFYlrVVL3C6Pq^^=ĮY"L\M{헫EfS/V FҨaKa9"uF0IIrc9Q/*@\ɵ3],W$T萊xTYhI#!Aei[ 3~k^/|fi*cj<>CB+p2,Y:A8%\,|'ns7aez1~NIp>QN;DHid6T u Dݸh4p mjޘİ-~^F;@{OJSZC!@% 0Z ERkE^b8=A=hިx&oGXt4iHX;n%߲c9.}&9l\|N4&|Α~cD3#ՄZ׼mGP@+TBӣG:\`V Z(Ԅ0ʡJ| ߕr0x=dpox-ٜ͚'Z#&V R`ި4xL@&dO89SRD ,Fqn{ꌧ Byĭ麺|0Vvfy8U^UɡQx]#c Lp{WhA%S\gmgZig:hZp65ᵨ0`?N:T9#sD=ܚ =-wj)tbVwĴ0!IC$g%3ɮ ijx?iKeUuMt D;W6#4TEW_vf۝g*QJ@|)%C @緾,e']y"p"RZ8L<{@y f8]FD6^#XX[ܺ9 Ĝn\&E?jKC^JvX | Dw 0~YrFwChCd8 @?;g"8nY*1Po%nPi^Ɍzp7glyQkԇ"m;#!_ %Jt-=ݿ|V@ `ŢޔZkիpσҳ5>Mz)'^m)$Q1ݭ"h,%b[m٬:6fGVvTd 44+>26B 鵊DCm;Y#V\To|Y4(U:~PYv1L;Fj0]%=kU,}U>_2k\r`DA|B*RmRmE ,P>G8<<-wdLR~ &ĚjA^HubRXzg&/ycRB *yvVZH07BRזdwFSo,H0 wWG0W58/9fSբV&:r~DuդY b.McR<wtGeRJb%VleLP`G)xC̿ay #u:!PA#O.>%8F$$kY&H#O4Jyg'fUdWÄ́j`Յ1__Ӄ5ߵ||tĆMݒ^ĐHÌ;goq:H,)hWwȬR&OBT=b.KEQU>f"s'|= BW"&_̪њH7NQ|PQ}=XB eLJRDizMBc!m1ס\!T]3Dz ׎;fb* Vj[^jBF>#&&z2u"]R| !ImBfEQ&0m6z:[Gy[Dqv@Ь_gڤš82-:J0xٸ)(nKk0{Y A,ۓo)[}H-;lc؉T"1Z&j7ED5M/ 8๬۲a*_UT_ 9??ګY0FX@_6^ ]+ikoU-%}s7lةek~nL=(pU]Mq`jX"u:Q ȩD~yMMӷ=-iZ lm (sCēP<0dgEog('d+qm@jjv0'r>L,`EwF&v{Fl"9%8iرc\vݪ(7\iSLHom'"U֙Mqz1£!kly4ڌ&}meae6@U鶔+4T+*  XԮ}/fD\o6> |B 0Kч@d^Z̵^9{\o_G55HĶQ!RXtNj&.ƍSXumj{3m0U"[iwi֓z~OW8loD$thγoЗDQsT},>,`~mYh\-X~fh/}d77) KG҂ӛ=w,<Cb%d@lRأʁ `UєmZӂR"_GHq&WN|-D&c#@ETp@Z-J_VlF r4Cڜ=bdy9K[MI`3ymJFcf% uahK}`3 6 bJ`[Q[g$gh=p{y R ]%w ݮWi 4̘Pӊe\4UM)ֆZSnlB3'08\wYAh 8IOh44|WYyd -}#MiRrmb! 3pۨ4>UUkNcB 10cmSm9,#% ;[3u{TtmLnGq 5^*9OtZXp2J'%9cd-$|8Ν(҉v;8 7CW +d#$t$<,O$^},1@`lm\K@)= 29,{ѣ|}/$/-A;ILЁ:vC(Eӹ> 3\?N̡5]AT'!?:&p4ZFDzl {HO`LŞQs~ïr@Pӈ|?TK! :@z-6XG#+H @ҺAd0M4Y*KRsW$/ǒ!^&:X2}Rvl#\.)s^L'F`$R0˰yxKp ЁNe ^t@>z}=VC`đ 6f,di2`[o>nUG}WJa0v37 qXOgS"{MgO)9+lH<UY4G4*X)n?AbvV&D9E0x'3kHrKaxbW>Vi,mX;HC d'u Al NRץyۿW zf?݂uIc.{ԛ[}[0* \]f)yt#xʅ7(zLW3| P T/b|gq'0(s2~C;Y,zQS*~V0py;qj䊗[{uS G>:jEF~aoYF, j?ѐsGsbwzl HScƨ-'mI'iw7ssWpzF [ΐ 0#&u;JW#`LPoKb4TVP1洏v>9C^İuهλ6d1lִua"9υCYM*'y~L8"}^*]EҰvP."w"%er-lz- ~]̋P]v}*VZP%{/oA#` 8FUsu"P~%I?Ah|x~w3 ͈CVәy 7eExO* Ձz xOggS OAcZR>)"#$"$!++%%%##*ټ:M>҅ ޝwa.kj,(s\k_M2&#a6l`n0]hhXcM˜? ,'9>%r| Գ)Kn ԏjK!Ծ)u~4ؿIFQa;$Gcx}Z*"b#b=&d5,$N(nQ xƉ;~7 ~N&89,I F(TJ`%Q޾#Y}fiJQh;-WT+2[bg^lF1][e%JL%&Oy&oUñ)`ٵ+YJXrHy *[ܚuhmO9_$=~Y^x^E &Bt2j\=ʫ y=M?xN==M/A+wLUKQ?dv&9浛ev裧l T9ifV%-qkQ>vˬ; P!%YC'qX9;u04:Kk)*B>)z*z,|ܬ*()Qy ~ ȃΜ>ua:p=hl`?Oy0D\04Eu?NſTڧ3UxN~ߵpz@ЃRs`RC;Ĵ{t2WF}kL0Y2mZOgUQWT$;%]ViV}vJ?5M# }ݞOH(I C 7A_缁.N TU <{1exw8|bB<×(jf 3(:6~J9D>_AI-7Bd.W/&RqxjuD ٓP52q>ǩ{2 bvR+\H>$Jd2Ei6tieBP HxzHprkzmHVGvXK&LN2$~iEk ~RdimFS3mT>рy<\O_=/RDGXJ}d)#^c j%3L)ezSH[?u5zUWX0£r+e7-+NTYRTqIYIbe]^k]5bH DqɺGh_-$0)P$`^˔A ?UUd' ̌&}1f_4Ì+o-7qY*/P|#v_343ݔ}8e*Zj٢ &)duЀ{wdn"",d(hrCj/[i! sQ9[t~pGy'3]g<)q׋> RLa?+[ J̫mQ@]VڏkG@]e3aaАjE v-7!F[ ~x yA s$QH^DLX$L an*X9)en6{uo@եcyʓ;c=d:FCJ1${WJ1,>ShqP7=* +p ).!tc@akny1mW!LEhEq ~8qgnԬ)ɶ>m'%t[ |ՑyBDCx-iHMxu9tsTz'tQfBU^%%5嶿oVنb&L< :Z;܈I٘ڧmx=fW ]}D zfz ]Upo׳A]"ZbfXNe7|uJIw9v6Ej!1+doՊx>;D ݡ^!MQ&0i1T_w(0xhpn4!ϊ O8@vI|ae@[r-llAF>d+$MwIN/{V˲4\hums h>.œ̭G"p VJ݀bjxr YI&tsx_6(*3`*܎L c}X$M7^5` tHeI cmΰ_ p_Ӯ1Ŀ)(U@pw3360J4z$ J ͽ HF s!ۛջ|뛊Y%ݗѵB. Tz_ui} $zHBg;0eOBYK| OggS^OAcZCo1*&'" !$""#(**!%"+)#$###!*)'' (*)T܄ʓUEfwT|D^ۃ2l!z>9 ؝_m!*]a=}U ؔ(X(oOBэ2NuuEFC;_oL)% _2$_KYy;!iZQx WkvOOz!/boc{ABOJu1Up9Ioid`{/k}Yc[ElERHBY~R]Wf֭'i+&O! F+BDtJZ" Y'1])`?DBo(8ݮՋYEP.e bLWTg:eU}uy\9ڷti*tu AɒeF[!,h^h M4 |1nT$/: vG@GPFcDdkrMNJh06Rx[DマnA[#Pk}=Έ)my^j]U3PLUA=Kq&P'V)#mE['8_`$KNy~Qݒ] ),7nT-ݥFzX,Rv5dse* |Be 4,&d3Ze /o:!B;9&V3\<<~.)*F* x@}3)]+BV`X>݌F?D~*1Bd:׶D!]*Y|{JYXBt{8c4 g[ ?s:;Dɢ(HM`9zurqjpYd < fln@gg+!렞lNI0qE- G-ki(2rC :[C|bnX]}N/ƣzG?܏z=ә sd?a_o)%_5A. gHozɋ:V6o{;ljaX염pNgsTf[ar_K9wpwK hʕ9\DdoCAαFE[Q;~-J~ BZ=6/= @vvH;\ku#!zTW&]~ ~ X&͎-=QW԰1JW>ayiptfj|a2g!h{)XFGu?#}`H(^܎AoIΐi$(Y'/Ĝ&sa9㺘Wfj?gnv,B  mϲa~8_Nmk4+q$gXѐoeEB; QJoއ=3%i' 3jEZ'a>N%47Ґ(*0)\ HADx6h^&ԶG2a۹4^]]qlj9722 &SK{Nd!ODJr|TgO+)$EKVF{lDfjvH؄{js[W!uB')ZjVڽo6TB "le3m͟*h)7kĵ}b;Yt'yQlf"Fh}D$>*(#L뇵!Oy &wY$3C8Q?Cza v1^hN[l@'YN/ @>ac [j'k^>o^c]WTA~d7lm=ED# Г{b:4 ́)ݥl QU ;0_-Nkk * hQ4,#fO~TlI1ɀSc{q;!圯fyp[v]FY]\§lxcZJZ mbBֵy?[֯ImIכX5_رwV]90aETďA`j0(:W&??$_&-f&I}pd>" '¬&O80)iM?͢L|= KZB ZDZhFK;Y v*`@cvޢqv(Ο6]J؆vjUŽϮL̚\"L@T Чͅᤀ4deA:Β4s~f*d<@wfexU&wܢP pBG)I}: H`vV[I{)t @uYH:7ťU%^E\T:?.~4[?3PU35A6Vz수 d\ձOzsd,JjI Q(P6C>n4ƀJ4UCI8wYw VZCg-` IlSG #8X1RAt,AL>3(àt%z/qdXӈgb I,$ǔd$"E<&I@d tl5nZiTsyCJܱ/,W`|]cM85BBh ylf߉Q [Rݥʠʣ=`0@FB g˛͗B$R Qq H|j'ǟ{9൸N t@^s+ݣׅLVYYSZ#Jyw O%+4ƃV6쩩Pj8NJZ(dfPqQ S@x -QfkUܕC8jѽ[#t3{s.jM1{b JLMI\~. >{?Ռ;3%k=M\4cd>DM<ɘa*\QzA 0hT]=]-@q|KKs-rڑs^n?& XhRWF(r0s mM y[}O~IݜG^+ѷ9' :{K7΂󖈲ҺTݘ͹oGSZ0V\ڂoɖ轿!;tJn 0M#3Hʔ#Q[ qZ~Ըj"hD]VќIڞ1@aŦvOggS@OAcZ WK"""! ))'!#)*&*^B$?P27<̽Il:Qzf8^mo$^KwpJa@30z."ȋL9QTVErtxXp;*V#oWRj3SK.>,ƠiNݶXfHn]؝Uٹ{Ja<@Ӆ4\,{/H,I ?,H2 ^+6 ;{)=G3#93bs;uQ(MO59l.g$];CHht%cΆޙs0J:̛0ʰ5;nZ_1Sɋ7(C'H44u?Yt: Gb{I0@͌&޶vyE:O܁Mke.gWe7@ 9"z]I P5}X-8st K ~yת JZ- `ht2 lGwF=>wيK,T"1u4`a7qW?5[։z&r3ϓ[taTH $IX%zGSMy.H:{p5Ё%Dg䂰-0`)ØWrߖrBž;Y0#$~İAPK(~-VisHg +g>fMD]iZ{d0>~[[rE^ ,z8N rs%,45Ko3&iȨxZ0yh,OIw 0UhrRU4=B6x8'j}=cactB,eθV,ļ4|Bcm疚5Xi}Tx@4>뽟s(῿r7m/=3acȍ7M۪jE6,Ys7FySQV DB/w2lȃ3ļcq n5-`ʟ CĬ"W֓"/DwO @i/m&}S.N<*RBw!FrdmS l,UY$}_H/ nm ر1f`Msoo9nrБ,'_:\j'%Uů5- ĨYe|GUv7Sⶒ.DEƱ?0H$yt'O!:Zڙp塩:| A1ih ~s+^4mh4qLI>9=)jLl<ݾ;uŐֶd3qޭ͈ACiB%ؓxm' .rݭ_eUrL3g}v=)O:-);X{+ݬ[u`]]E#}d}`^}h%+-nm^Ud0{/1^HAyrB\^=,Tf2#9~Dl7SنLAmhQ2k;ӼSw܈ :H6d$]I&xevԧ9"J 9cϼC1R17vj4$ym &X`Xiuv(.wOquig;C^L^ }Μjs'^>5CnA-@sFW1[Yq'`S$OOcz00>rEq197~Q,OE龖qƻjp_#o}b-ip 5YsM /$0 HV:b-υLEgaT$ ;iTdL#ə[?Df@| ԉ}^[(Pmǯv3 }=W'tf*ֆڞk , lI c=9jUo?O?m@ko5aϩ9z'qx32+@MXdk=KֵQzBZ껉7|l7,Շ/pۊ[$5syؿUOз2^`>Բ2w7v*R 7#Le98ܜvΟz:B VKq.i2*j#ۊlhv%7gV~F}ީzU>yQ%6MFRuhK$>.i#8 = vcvX|Ƹw?C<:q:Րkf,5UIw>ɉ 5\ì^Ihhg+xso@?tX9sAI5YzLd d:QM,$Ik;1"{+\Gt+/‹?ȿZh"(.3y^PM YӍ}.%$ZN6n]* H^G;Xqb8pYx#}?&f<4O $ŅL"Cw 5` hfzwy|"=JPI AOⵑeu8YnvVҐLi^Z/E-޺z4Cw}Mf#ǀ"Le,?/\{pQA⨠@[MnfXak2MF"7R8НC6 Ti@ m&lW[7ˊ%PKj.=Hh"35YV %OqQbz50c/9hv'v C!Gv JdCjH_%O|Kb4Ok.^ :KŠqkveG}#:8l(JbKS ,r ٭sN-5wЄb6Ĥ]c+\υRO{gc23ڵe\ś/Nߎ*xN QVwd8 ԳP`%SR,iX<$v}) k3/sOike:#$Tʈ\s]|GXa|F눷.&wb9ڄG\jv7?Z6bwBV+1={#@8ڧxS 1Ch4'pR쀦g:ϫB ,'K>_qgh~ѓ|o.f#Kqpyt0{,J)|IdX<.0YPV1'+5s#;R1Ӻi }-|ic)͒nk)A揫׀ `rViHIgC!k><4!}.f!3ԭ[OggSOAcZ O ## $$"!)**$((')&tǹ47xR]C ݤHFrڳWg"e}Q?kzb᭛GC/+'~!=+nm۠ýYEulѮ2n wRJ1 61c}f[i2oɖݐ$Uo2xo{ʹpBJYih'maֆ>V( 4x {ۧj22%GBP%eeMw7"N~|Ѵ'oAEdW"ZU*"XN6U@@t 2oERXMX|a-C;! &t:?!KBXmߣ2!@k[{_ ?E֩9Raðv$P :DSy?q{ZKZo$̠*d[;UK%|^cE) 0%A^g;ۛ ]-?SjC!;Ł?YK~+cqd/ 6pCHuVM Zedh TII"]{͈m$ p Îz'lX}.Gm;Qy.f Нw#o~s؅Fm`si N2Zw0+6hHs>@@u+F]DI f0$,У 8ZǕgEY5iGr6\uF@2~kK/t|3ET )HB~x\Ȍ-foR`R: Y$܉ zѓfq;hIo͟!k{tJ$W4_f `YhX]]f:GO~];5tDC͠q+ m#0DJȠ䤏OOB>l=LՠF|fǺyhzc*T0ހ@4lmjaJ- WG*W B*BnQ)xk'K52Gzo]vZh1u*1bZ3>iYP'=I9(KҤ"9K76~)O`P+jjn8i{4kHM=Jd/VvVkj| 6'|'E׉W[O?> %uyXTeJq»0Iym3 ;J5ͷi4 ,1賑B?1lp{&q2l:$.7B1P' TWԔZʆ2ry||XfM齲6#&;: 9Ƀ%&jnOra6 ׬xo.}Ko8E-T(1hS*+fƉjx)\~ټN%p"vO"Do΁fF(}֚i:y-wWt͸3eu)vQ{dVŸ<En Cbo*b֊N(+-ŷ(3Juԏv] fmg 4鄢-jְ]2tw^N)" "D؏ ::DF2 9 BfL3^kZǹf)b*ziM8\X >J#6<}pT+rE\{#b7jMH-`Uxl;Ď40<\@BnlXЀ&ә :Żc}>ɊzM[2p^&&&ynGw=Omg`IM0uL֚8x YvB# DԱEӯ#ϗЪ ni}:߯>L1'F6x祌˜^Ը5.. Ym. Z% y>OM7'#5i7SI,|K4}0+D֊y0/1ȃ[d?1S;{sd{gْͻT ӯ!Mf!XD;"@RO/>ەk.9S^ηN o:6 8Gg"ȱ"R E(KB.y&vYIZvQ.`Q,DdY ft3mQ!<߈M+JW^䜦&@+& ym{w]|;uEʻAltY^$֣ @S6FڧuJ/ KSL'և Dfq$n{uP,1c(;b=d-SryI(S>{ m@Et/X#bU%z.f&9sR/ⴛ=ҏo;d C1OY>\ 6ThzH9"Y}h[}.8(x Io@ҽx`ڻ`Y,Etl Y_N̬ԩz'1 Ah i,`X %r>|noL`w8vac–ףK5ACOĚ(%wg#/QWf{i36VG4^;&w1^ \S dZzE{Y^$( ;eL<6"܇Yk!!T9JwCR l}wX MAcm̜kb#0+t8ubHî괲 v=*<~ z|Gthz% ښ잗xr|g_Er5MQve3Ce̷2PkDsEʼna(z}Y*zi,Ufy@-4tb ZQ}/>e$B;ԋ,Iq;d7Q)8=sMcÚۃ]nT[~ـ߈6=ǚIݺehۿ_U4IL!5[hO͖\I@rW#> ;Qs6HF߃r%j]6qmL4sMrʞ+<۽]tVhy%a5^ zvAƥȿYNSh%[?3s{EΒD>̤)Lr'faR@|W>Kn?B^ ]`i'1Cg׫XV zI/Hka߻I(ʽ. HвX  渜cS9ʣ<&?k"zS;.4Ր=3+nnɮi=LI&|LR)m5o,r r/J G<<$԰I6b%e8U^ b`Nq:+чv: Mhz\L?@LϹ~|X*U/ejiXۙ=KRRٙ p^kM/PYIo{T,hi+a `( d0;zEX4<&2_?Vwt-P`隸,>Y x7/,$"v&7eB*x"#A Hʳӱ-UhغA@r){@&p"}o (})2hsd3:Dz&e--fv[m CD0'vo*~X SIH'صvyc1n)1Q_ȣ #<}Uc{G/wr!0.c!0x3XMxsb>z}@K3&Jϙ 2Mܲ:} ;W=O[hFRןekŚWù;oNcr\$U!)#{c^$Xf%E'gԂrHKU}7؃w@9iibFi=Vma` )lX*h1 SFחP&ajlT@ə!2z"k490O?E.E&@?M%}7+lw{4Kϻ6lY4%?vw!S!_0$W >wOGz'e$B g]J8軧\$.x|sM "8YF?Trof2UK3Z,3 Z~ zU\1v72#1Yz@~gKL׳wl:O _oB5LnhգessOJ'CiD`$/-2q2E%it".I||.L62^pvʎ:{ Ge෧Kmf/N>>\gޏscsg j"؛z<~dZwq;a"PDB&GĂHк|G&: @R7fğKY/Ws^CkV !zO3+`'9y?Rqsc0=8<,snMwod&X 49 @ L.cH=R @-(p]zI$5#GL-̪$fHf6~45\ Kcdn@-D lyX#s2^ \]P$pX=y|z5bH$7pg;dU~q5."g=qx"Yl3MW;oq#dգdz9QЈJ۷T@k6hp"ij4ӗo_ . C]u,#g]X:2 iiVeC^grp2Ԣ8ΡQ(C$S6UGء`$[/vB[ڼ8Z[9O.h$@}i3MvN7/UYZ@)h\Dؽ-"DnA(e;?נFFKR1Vf(R7WD-_dwlh .Xǣ=X"Vczޥ5Qngk:;M|Wo閪dN j)xWЦƟƎ#&moߎKo< 7TF~<C Q7%5b Je?p*v>I K^VjLp1D{ Ltsղ䁸BZU}8T*?j,Acj}/?xEbNDGU "ȚEҦR-|C0wTޘ|^Y| g;ػ7'ߗt3 +6Hr9}1rr=l2E-f1T YgWX@<_U>*=q|l:7V&dQ( i_#ѵzx{u5t<|rrcٛ8\.[ SZQ=e*1lL$aӞ/@d&{s.wKގ Цɣ0UcPb2tlW0IJZPQ:q;"~Ǖuc} @R=he*$@?PiBnI@A̗ ?~ip?5B@Hk]˳|1[{D}e Kьk?D/}[zurJFILaS?xtz юU:eq QV.`'{upN6ךۏ:f>@+H%{7F &1jѭaO1f6%i* g{fzws_XFڷ=Vij*=h#9(Oc`{`v>7މ=oQm:m>ɵ'^_z|K!CY\ ޹UT)bẝ!>hZ,#ƌ>o#+LS[bpkLH7fVg.:Z)Κ^ Oܜ;=ukl4B_K^;^!DoAF}ֲ46lP"Lmf#׸xqjQQ[>TL^}0^^L>$UFQB:!s z/5?y$Ysw{G_wERpeX:y@%g,WjώŽvEזa馲q0˹V1Sc$~KZnBH4,r.o, 8Jͣs$Uϲ"s\DdK edM=iwcjŊHWO5  Vv˰DSIRυ'CY/ xy>jGWHZлF>k_A-BJ! ~#+t/Rku|~$T?d1o&4B l֓Pi\cʣKUҗ֑"G6e~ /lr6S5Mp]TGvpFrsvn[<돼R,6`e Y ^IY(au|Fe_ #\t>kIOggSOAcZ (g !"-)'#!$*+))(hN=6dϺxYd "C߶fηX#U*o?tiNkk|b=JN] z _e!;yac8KepOP#~a.{LUQ.b`ZT4Pzhibfp%%\kx~Yc/X//G, @ɒ)BH4cUz*c靯qEuFc3>"d.Ң73F2"xURuYaϬ5켮*kvQًWa^hŀgo7o`±pB4z);IBM&Fx4?і"'1(K!%pBN ˰TꞈM6~s 0v)19*rɸf_COv>M1T^oZfͬ: L] \.kO~9n甑qU|%iP#fy`4J_W) d@u ,.X8nASP* 4YW zIË!gj`5sܗ;*ʔ0-N:$i̝)-ƭvݍJlp m^yIfi$T$Wzx+mvDogfºb߃ԗ3`g[R*SAhJli_Xo3lűQv)S>EgCG-WYƻ3UP+Z/{Bϱ`gި +$c@E ,?2oh}WO$gm7r(GK0o:'JoQo) ޯњnjemzJ23Z$E2SZJqNYlIAML/@DcPM9:cOk>ӽPb=TJ8RV}!Pp>< "54ш%2 %T֖֯5ʐI4HJ7ߥ׫}YHsc`qaIvsWB:+ G !ox<bJÞ0 WIN4~2{'J-̖5ɵՕ-M S o÷J~|ŀ68&}}vOB=,a4 jP3~}E|vڿks"!v& &1`ɨ 9*X# ;o˵{h4A*.ƭKZF\Y30*`zG>M|gcQroh@%D-DXD`zF.`28zD"P'jʌ(B4|@纫KѤJ΢7t?OMti"*PU轻Ns˵yyqY& Y`= `\gff=^ N\&(k+Te? W ^J5UGV3ؖs?`Nd w†͂On8nu^kوl:>H`)Ӯ̛qs 0 6zdk=|j#П5B C*kweS $V2`m>Fu!mjA{m2)[۽݂Tdx]rL8U// *jڨ3G~~>Z0 ?o6`Gm#`YI Rp_8!5uUK}.>.!5sH7i@ćPW/5jrVYδSKbj G -zV:EWXߠ#ϐq}o~՟\Ԟ2cC]bB `D_"=9rW:<(v2@ØLP #/s*ݴhr_}vÇfJǣ̻\ sY*_5@__-NGsq5]p1Sh Mm ȏxI #7Ӑ k[6 mX݌{ Dص+̘ѳ^_]G{|~IĶ N0dcFڣKZCڏ0^_ C.B#fs 0qidh0YĨvlU4G rJT,A9eG-4^-"'#6י1D <0WVV'-"EB9s8/Qܬ(dv8aԉMƫe=!$"4bL[|44GA:g`C֌JJ0#6ʽm `%HR6}cwo^?oΐ&h̦[N+ܷ%UܪڪeZ v91sûGLs]'^h#Cj>!(ly;gX""ZUZE7n }B> L@ӆ$Ut@ å1UuUӆ+ s8ѝYB @3b ]m7<TVrPr߬ y)_S4(p29ʑOOַB @xS]ns^n-CUk,&[rQQfo#PNt`ft.FSBq0nN==&`(,bL&kǪspfPW\b )gXۢR^8B.UI-^Z\L+ ~׆Ď@^FNUb˟ڬ#I_Q [Oy%+׆(}y.L_E2u7MN y}n#8,NfkʥX/ buj9MVzXrzMA:\ o8xwV}<&P2HS[dn>Z}"ЁA- 襄P7`LL3ݿ?YWgIaM*‹ iv9$wUʶ'mlN~N Zƌk-1G dA3 WfD V&0^ yݗ ܑ[X^Z`.ȭ\,ښZȐ ʁ44-2R~,k"t(c)BQ]>sUڈjLQύ*Òg/qeahH@[@]'lasr;$0n AN$~IUg9<`OggSOAcZ )+""!!$#*'','%*)!""!!!(('6I^cq#f 002;0IchI Wgeu?6ꞷH3{ߥ8avD6.́CAl"'ƿ2*"k?ruL4m>bk9_Fc>:C~J>-ݟ9[`i@̒ ~ݲo4&ozTP$QE AFD.1uW4 yT$yn|xgkyedxWD, z7gfO5:cَM}Ų9`};[6$ ::OUf0m~2|'~? Kq`  oӉreZܶ$k_Gϧv9z50ۉ6LۢKqwsڀ^ӑI~Dg]ѣΤ|T&,.@ VKOu]׊佔%F6kzR_0 ٣ I-"6 ՛W/4]c^*K7TIQXfiE4sEMjq6 ag.f钅Uly63|w|+ۤ("r"=Шj1>g ѡ X4X`$K=ۛ&fitxf!^Bmp{4v3>4s6ՠNNiQ/$J8Rm`c@SvٖDG}JSoiabڗ (ǑY=2+p?HiOPh]>ɌLe=Ek":GQ4zf:B(0\YcvIOIVd@ZKc3˘1gl~a[M+D` g2"yQPZڍlbʡw߹-cvBV-k,%/(ehʌf?ܼ>ءnLFg?@wdPKв{ވ26Aaw_}]KޙQ7qmۛ4 g4^tި.+ ߱ ]۰]Weu{mKYhof['\ox^M(dr%0,Jpr-uLj/N}h9ެ"cSQrج-!?tH}H>﫮='q@v?TQ 6gv,evm$ҔP2A8_%/Jko+ h ߊޛj]$0E K+`"*ِ"쟭Ypyu:]AnvE=ȩu)ٚ&o$y`YNgfKqꍣx_g]V4de?8Pp(=:MkmO0|iak+Q8.ư[n |bs@ʕC}X^N_B{v+ |"n@@^qZ\oګw_f\TVz 0h~b}$Q%{ɱ)4/_߇r/ ˕|HɼPm|:myvR<ӧ&R'56il k,;ayXb!޳Ј*&CyL@2|f.1轢KUBؓ`ڟ.td%ȅ GgNW5!|+~4iHRc||r8H#e4a5Lڡͱ~{]Ͳ׿տm@ĨN+cRn~`p$ÞQ4͖X_knZR'(m=1dag?QŻPGQ]S'ɨ׀?"`0~2Kﺖ02wЙda U\ݬI0z[c@4hHٵy1>-!`U%Ӻz-༚v!Cb툧*- &# }o8ol<#-g0 "Dyvэߛ u0(иM, (W~.̺gWLJǧ1D%p(lX.MT[o̐ 5%EtDuF/maK$ņUw&Raq^[N0^}nmڪ`?#d4 HBGM o%x飩gX=~騘92t> fcw *}IQcG 橼_y\S6M>ݩ^qsUG':豁S}sF`eWwHatXYi<Dގ^g ]> ,%*TM3& )2csVG9+FSrHT 0MoHǣ%Jf|A³}^dT)jd}d.F(U0O + c~(Pxvu3`X@g #ӐUh8yi8/yCەe\)retVH,[Xۚ"pLٹtdKѐF Ϟ,wۋ5LZT3߮kObHW+zZoD[h%zrA5@\=틾=t>ƃJ]#)f,qus8rˑ9eg1Qea`^Z~X."̊d>X\OcnY-4ċ5Z3}N{;BpMxP4T?"lh6Ė)5YsE3Df(zx!Y'Z:0đzȾg9}bF 6 =O9GֻXq4a>*>,M?A'Ѝ9wӣ @ &5;=Ď#x.쇓 vUhָRԦ窂]DGC*s#^GL4&/r;hr6UV9='Ғqk=Uvx8ȗ-+w}L"Y9Zl~ ΜS RO@| ,aOggStOAcZH*W)$"!"")**"$"! #%+(%((*D?pYl"2S`@B}X,ϰ%(@t$ En0B]:D5? aYLls0h~ Zu=+~A~`XϸӋ6XΟ掽D^Q#xңibe~@5hb2:S Q}f4#-i:.ZAQ<+m[Woe:A3< (ȁ+`jcSvIITIFx[S`{T E,Bq|E4Yz T&H|+|P<(x>Po`”% Z4O hm zM"go6RL~B̩ )mR2-CĂ{`Z}d-}kiK)0ׅՌ.@pd iH l$r /TxȥHE\z؞`{ϐ BQm^᯿=>!kLqMV,6n֪~؄| w)@ 6\=VJXaR1R{Y{=@I䡟ª| (ZLet:}"[^._y_Fi,G R4=ӤA&ͤ=|Nv1YlvV/+6+[4d"! q-$& =}2!oWVhoIJiCv$I#[7ZDS1!^QKנKL\W2'mfƂҾ̫3oDضL"x#=usd{ G UeooMQLm'|1BTN6SjHTleuNjQBQNS%%NR Rw?0f-+V!.=V@3j a:z!Lȷ2tL,@>1O6A2%0,u~/Hqv7\scնv7v%בbտ[LD秒jX $&-.^欞*juQ* P]/~bd?Z2io#"V"nY||=VX gMwfKB+QBTvPAYrX\R~:0,'~#a{+Go g̃gQtvK(N hҔl"a`U# 4C6;l?iIp0pˋ];˄د]?Ub5YMޞ^Kd/ok$ 4ǏGJE0~ JZ lDO0@tF-t׹R+ulBM fk̈ .UG%BCw`X{*ʊb*e+ԼœPxd 3G4%b ^tM#-v g&!?c@kk_G3N}H 4 `2#戯L#gc?jH@t멦#;topZNׯELLo~UsM|H0hRaKpjz՗q~SyzMXk#yB`{oIA+KK48;{;c^`~a\BɆ}˪:P9`7xAc |v=E%ZOb\ϭa`N?pWp5Ll|/cᚚ- }#@=J!@6_jU2m(={^ ]A!۟o-M P)A o&o~#yAAR1om:\sYǘ9Vdjl䊠`JovH!yVWXUẠy)տZ`iEp>R*/Nd(vn5d,@&-FϥMR2^ ]TO=rp$(f ^byV5gvbGSwRE խ4riiU7UOO"r *FE"FPrϸH&HY2%ޞj0c;oM w VH(oa2^< c ӖB1{^{)jCnlj;}f'j!$2 M30Zcu2/U͡bS eKGO{=6-اB澹V1*Z`Y9K51@H2}ʋo{KKb# y_o;]=J* s etO8Φ}=Q1эʬnk[{ot\ X]^z (Av@E-YJR煄Il=:ޘ2fI w@Z9ryR05f/"@)HT /;2ۭ=vr">J- @! ].qd+qPұf߷@FtTa"vcBghE ۞6zPHONix[0g72e]Ɇp&EgwD4Wbudq+H, |BTޏ;,*܆oUhiJ`Aֲ!/>`x& aHPnsxbӀ-4k\Yd(B%AGR BP7߻tbBlxx3\)^,ޔ ]]?"@t2V gמ|,8aӼ11'BW-Yl<-AqA&/5R8l>-+ה8hRAEdC#ڐBV XW|G4}ԟHnsZgU:` KF`X ԛ(Z_t^@jڛwIӘC?k9gG+E{N4*~u}*_DJhٳnwlzZ`2d==f&iy`f!~SwX&SBĞ@N?ɹ~u.ᎻsMd 4߇ f~}L0؃9̤63dM"[˷x#5V[d:t܋E]]&!?_J˹:}U6g/VPD/`ѡLio9 Bυ9¹$]t,˘C%G<:ʎJʽ>an!mh!s{82tZ]r"kϟюw)^~Ysc"D;(Ld"FKF͓tyllʝ0`W(h+胺]eN.(|q | 1]įiPaP%@OH^5@`r@GSvA h̹'ϸףXnjŪnLN OF7.GjN;c$4T<3F4ѩ m==A1s~ Խ^z;iC7}$iϋeY㠝[רS:бM @]4H!!zFV!챁 xgH ,})~xn8::ҳ=W$OVU0ЀN*5Ucf$*F> t#\2,J~\Pu-rdRzvFP K#uOt>gvz)c }8. ?'6s:9 rNu:+`κmW>'FӉuK@M<އE|[e6hV EWxK o L46}Jz.d!7fnӚek5њ'%E Ò~%kͳR((kt:$6\ը֙ =zY[*Z>'rE\߹c1K. ;d]d}S%ScO\$@_I}4E|le`@vWb>)@{S(&lq;FWjj: E @3Z^nߦlB_PS5V;b0/,&Ih۔?W}0Tb.S&7a^צ:GE&rR3ERv]n6/e۶ DN(\{CpT#34#q/әt Cf^ K`; :&HJ,2p BwT1;V#/*XT[c ꍡ*?'gm_s+qzOrU ֳB_/s۞Z:l5v湖x;#7Tt7婚&`&dQ'S]7bNkM?:fyLSsFڕ+v|nE!BOsumdFE %K8=%$~yњ[ Ճ,&V; eL[:3䉆ض T^YsU-"ABeqmn@z=tح$AdUL}IA#$eޢ@t'&G|r<8{soE"DL{R\ٓF_dH<& ߻㨳-pkH{b0a2OW㠮a( FS.}.xC}E\b6ITڦBO(;vf,>Aâ9Ӭf/_krd]YQd8Y HXW\|nGy([>.4.S\;R,ͨG UY)CO +m}GZkBrqS#^xD`B0װ47>#Ȧ38Bt@~oިO"VQ/s^BD XL͵%kР=<~2'N$$eclw ʏ=iykT[r_68\o㋯·# OggS&OAcZg0(((##&($"!$$"))) ,()(˄k_S _zSiߏ9C# u3@&']df1+wVka˜AKvƔr SkP7&BTBg<l`a5zbC[ gmD gv_ 3E@\{G`f@F@Smc|3uQi<2@^ĬgvOD;ǟDnĢ$l$ӳ7lñ!>KKR]iߕYV`?C1;8fũYeI$^Sa!K[r$\*|)@=y{F YhP4L*{86jAE6EGF(>D:eRԂ7u6&Tͪ\&<3"#Ƨ\继ښtއu_M|]:q,կ{wr1jU-vҦ]{&/:뱟{l ;oє@huɫO030"B0bֹ\etܗ*Y,1U{LBd,DϱrEZ*&TMj w[OOT),u#R#U2mWq|ma!r:q0a|>c>g NiWR-lLx4yAHJPG΄o ,'3 ,"*<^h2)4kfTks ,*Y T@O˶G $L}^A7Ma弅qH:B%L[*t h.LNڅ0$+':D<s eXei>J];A>6#ua*d*&znXSJOF3֎ͯJgRE5}¬ޓDЯ@ncZ=vaL0 036 i%CNM c bGn@G-a_SH 6I͸, Y,2Ɍ*t<`%I%n!ޑ[KL0оF~FFGrc^z}E&G]*EhJv*t2BWlWf7ǡga͵p*R T}B8ΊxîoANzf`/GrIꆹ f+`bnC'?M=T қ~9G\eiZ(B {R|@,0ˈ'L >իI[z 2ځ  D3@{"!Y.+| w(z و>T@+5laOz-(q وslx .S "Ѐ+N\o Жho27goߦC;M@y8fs"﫺Zy{rAӧxp l`aܨZsuQ[]x/rʊ+D1sBhJ^BV 4f1TߛJy:5Ql$u4jV݇y <^K+wYt2I"9e 4GPfpte#|}y!Տ̐XڞN2H hLM &O>y@\)pKh{&P@8H540l: *ͩ@wݷ\ }5!;% 0L^TOKkOMEb`lQ`\gI ʤ]DL qpe[e+Sq~wg{ʖhCsW͟e*inA[ހ Y%[H-!"u"yޡ{7>yYmPΙ Xbm]qY0}I mJ#flԁm%~C%ɬ;EXGpNd-x- 3j"Ȩ\W@t[eAlê+"t?;ՠ@{[+36FDSWf{Y\jYX iY`|w?I ]hT[,#VׄӪ*H(Q9]Ol 1n''ex:5ڇ: H֝gڈ$?F23i;@ w>/ O%s=1bo0u ĊV!9'!Ζ+"6T^ ѭ82&G{;^!2z#FhU&O Dhv2H5H0`*i>V36tc#05l6[oܛiDP/?+lM ]ן)ϫX]գi:>16V/'oq{}kєuߺDd0&`hbdTj}jV+QVz7ft bY$TB+in8v@'h4LmKG{R1y.Zu$hltx a `~=kHB}ѻ!0@{0>c_گOC\h`FGlSLݙ$8+IߊlWG!%șx Q24U+d$2:gugsq09M8Mg<zJ5؂& pbYwf`MZu7t%݋%4Lf¤z??J_S_ }ޱ^1^ɗ?S5|kic^ Nj0wڵ>Y3QxǮ?x3 ^us !ތs)! p/D0D#KD yﵻuQ&{gڵ&ۼZgfvΦZfd赋ŋk"2vFMy;~=C=WwngMQ! 鱾ja!"cũ) $SZpN% @}_`EW:Jx1]\z2+QWXaXְ'\6 .u 0i -+Y\.n%*(##!!#*& $!*)&)l{ %[we 3L<лѶ΋س9zmԣzRm\,SE , νцjJ/Q2=h7=Q9찀m,P^zha &=%nxdGdy l&dV&3[ɋL`?~1 æAЫ3,}oD޶3|8llD QΦ:JBi(| I}me5 @d+@/Mf]DDSڨ>]J<7&}(GfI|xMA&r 'T&qguOTγ[(+c}|߹;{iZV=qٕoP^&{D0Rm>Al>[nQVѦa;~zȈ #{O|_lXpw8V8{[ڄ%OQƩsV{guM\pp <@1ڨ Ge;xN~JuB "еs!Eѩ)@5?<_ֵ8m*U ֶA*] 9Mc#qV'd3+8mfXmM+]yM(,#2 pL6ULH'%aFO-|`pOP~t'?@f:pQt# !zN}W69G9ZlwwD9F_FHWFzT/kiFRuz]5RnkE5uO9-k9r'3k'mheA'o%|DE? cjV{ٙ7.6 M <5xP -_,ٌNF? !{SDL9lMw ?\lXp)6-!dj;+>%䦰~=?vc5'ZV_]? JDU8~O|cyxz&`Aflu+ e%wŹ÷t] 6 l+}zh'fq{U}jsvVY'jXAbڐ$X˙{oY9.a|m8ȣetV^UO:p WO[6a}z;D]CK%y8,$**YoG h\0`Ob,J&HF^ Hz 5r EgvӜL{ I p6!KotDPo Lz2?-ޅFլowewđTH(x@FfܴQ\am=ante ]vl|-nIH߅Yћlo?M$Xhu?dxZ_^oÛ6Թ˭̉n/\ !c^3P.11@mG;󁖍Z}ſZpݥW<72Uq:}}k1]gXY>F"K\s"b9'\}ԯA8{SnR6pC3>i~:X }nXlV|߼u[bMO‡QP~l2*#߾Fb$!Vн~,4z{ [ʊ5\EBPJs IVyz`Uw?fN }c6Kmj# h t @|:}&{c%O 53=rHhuz+ڨ*9WW3cheMí00TC&;׋/N{xJ\ݕQ0cYTfN@7ԁMߎ<;O%MY ʥvCj`n\- BOu w0Δ(m:}ݗE!yޔ)IffU##~vn{iQE7# %d}:i9IXs2+somy`ޱc>g;ݮ~G\6JRxz"rߞFU^YmśYG0b9,%Y9*P*<ȱ.@A#$˟&z;t]Y< QD`viNA +?RWDGDѻP'hhsjx~9o|']>۟[#ijBQvRFUq{y_5E6$odIz氙1]`|e|M8, ;KA,h6̊1O3`dY i^Ths-V,? 5OggS@OAcZ[%!""$#$$)&!!$##%(&Y~=k[sf$s.,$F;I@pFrD9G|5Y-ySf 63D&˹yqgM >`ӘXq xRGyF'h;[Ш<9۱ c)D <֎4B9tH: ׃`]؆,}5D✆BZpecUQ@ͭ4fF.'M3.Od[]k;= ,Bl:?:p1)gk=&W`g=xƿp)^[my@df FƮ!)ޣb ~ߐ6%m.AǓ=Ox>P‰]}}=F stWi7Ǡ&gs`^fB(>u5*Iѐ N~=8c9Q۵"1[ޢbo6Vگ'ΜI(zdTIs +kA;vZ 1.v$(t%SmYOph "<2 "KWQFieۤy`)Se]+T.3@z: v8I—s'(0?,֏g vY)$z5/w|]٘u~X{iS$af yqI%KۃsV?= \Չu9I"cv0qɏ=UmjFKvMZuc"ש |u 0":G,+KДf 6o5jUleF/=BZ}0ž,;~DFJP "sfXdml0 &fƾ ʋqU haN{* 픲I?!\X%Zd.Ba[6<*<p7zޮShK4XJWJGV+jrs/nlL#V\0UDty$HM(l|U\w-Z!6v0m4=<.FfBR1`P)rިW$ `ɇ@\ F68%jE ekqIe=0ʬ33, 0lh~\;U!hu ,JCƉ՛Ku]_FK$OqvZ?jg hXaz&vQFy,=VGIKӸ߲awٸTdh=H PIO|ݿ 5o": 'A|24PP@9c;.& ^2r؀@ؚԑ%IFCyh]IۀZՓlx]N8/.: gFfX'n=ڋj @a !s^~V<<鿘py`)MϺ@e;-f4uz >ytE 8HpZσ@>Rk~=byiŽݏSL)E2#g|j.cjAbks ]s"Jjr;;1^ i:oQ0dZȎ҂յBc)n/DM@X;+4%D&=ki%zAޘԲE "oߋx!t& t[ymJc8~M2G%.$}q+ @$լ6Xk#WUW б"8ofjZbg &[)/C*WsCM23BZC=0D8̘ -,݃̔{tJ`&" -}$Ք ! H p~j$n׸;J@@g,$ǎȫ:it%"$_}@OkAK$ܚ w2<,]r7$7@>wH٧}mMEoỏ |_8 L<2G/oq6ӊ466:ٌ۠<w+z4I'Bv}IeNbuuS%tߙ>xvtf6.+`>NwvTwʠE2r'Y4VC^oj^$hKR'I;9.8M#>f}4e G,B|k:,t 6M`RZS^'~V'R ZrW;sJ_ڃ8x26uWr i\ABUu/mFw@Zjv%੄75|K[NR]+~3Q[s2Z *aY[ B~ ]X|Pu5#rF"PM>z4:w(^ #~:&] hfg!Qp&ځ)YLL9J1yeO@;|Cρ)辯M 4⛻;d Ʉ$4y. V^<D Ў80 ;l%7b6V9yc.~^06j\QvޔMNTd7!)ILВe^y].U.246^+X#׻hv?9ނhl.pA~# ޮtf䷰ =,H^<F!B~CbDi&`6)9uIIg{+kq`4ص.La1ܗٔkmv8Gg$rfGӉX4k8UtєNj|Elr'ˡ$!LsuYu"7.0Bn'R]HLe M%mrڙsn_=nrn埱YlB+ϞERTHU;{-ޗ2TheAhύ(62~lı.㕑~u{|T}~,ZSF>J:r66ȅm-MWG͍`x:"SP+;d PX\nr37޴ݘX;~WQ>CƻcП)ǺFgetȣ/tz9EJp#7V-g2$Q16U@hFNקVd;&͏=>lވ< z5rNI٣BE(2%9W_o ?1[ Od#h-Jf\M&/Eeixuєt:$ZFz@0^Y'\u_wNN{)}qWDdfsKbZjI̞1GVwQ&"~0OggSBOAcZ&P8&L:rJ`],O_gMKfˆiͪkC|g@ 3-J oc ǼBw`W⒌I}8si ƌHh-@WRl>[D ȡċw /T8 ^W&c`̘0L#& |rw8SbD*wF}?rY𒃈]!zx! k {-m%4ߝVVw<μ rY' pBꁆtgqÝMf¼c Upyglet-1.1.4/examples/soundspace/res/bass.ogg0000600013464101346420000020341311266427730017422 0ustar yohyohOggSNAcZjŇvorbisD8OggSNAcZCz-vorbisXiph.Org libVorbis I 20040629vorbis"BCV@$s*FsBPBkBL2L[%s!B[(АU@AxA!%=X'=!9xiA!B!B!E9h'A08 8E9X'A B9!$5HP9,(05(0ԃ BI5gAxiA!$AHAFAX9A*9 4d((  @Qqɑɱ  YHHH$Y%Y%Y扪,˲,˲,2 HPQ Eq Yd8Xh爎4CS# G,]6MuC74ӴmUut]_uhPTU]WeUW}[}UUYՖa} Uum]X~2tu[h뺱̾L(CLABH)R9)sRB)RR9&%sNJ(PJKB)RZl՚Z5Z(PJ[k5FAȜ9'Z(9*:)Z,)X9'%J!JL%C*b,)ZlŘs(ŒJl%X[L9s9'%sNJ(RRksR:)eJ*)XJJ1sNJ!BJ%SJRb+)XJjŘsK1PR%KJ1snAh-c(%cC)b,)cŘs(%ƒJ%X[sNZkmsЩZSLsYsZ(PJZ[9Rb+)XJŘskPJ%XKJ5k5ZŘkjs1Sk5kNZsc&BCVQ!J1A141朔1 R1R2 RRR RkRRj4%(4d% `pA'@pBdH4,1$&(@Et.:B H 7<'RpFGHH!DD4OggSdNAcZZW-+'' %(& " '&t9?i;?Ay=B?`Xy:~œ.-VYmG5K]P`]tI{6 BSh~KM?M&0XcFoIl..rbTsHyQ0:e"J%UOWT啩5n~b#`mqe33,X/+|N?@@sm ۼ7z;)ʹFZI@cgesk0*:ݘyXz1ȍCf&{TO>;r̂EMC83xf?0I+CAGzWΔJ36uaEVyeWBcl'}&cܤc ]G3*L>Ig:4ҳs6`f0DF`ؼu5U~]<~XE0 H@93 4g@ـ PpH[\Emޥs~SBRa&=萉fɤ\a0 (߈fD/ZQ>!(~w9g:(ِ8 P9c f$doXACZrH2Yn?I"uKK.'d=<(vg[ |O]ʝGB7Q}J6~,~eQT znŘTDj"a{1 m/#Pn-f=Wk½"K4 p M5ԁ({CmYH x1"mlIdrӡqQf}]2r5΂v]ģUhzG_Bv:-Ȉe[W"] _)P`'#Jk+ށlP˘ɤ!MYD8<ތ:Pղ֝؍.` =E<7_{_w40H[:N <(|#CVAB99Fgwh^ܞtG_ҏnY]NHp4O!ewa9mVM8t+.]3-/R!(X=^{ݘ l(n"Vbc ex&Ɔ7=^UOMe_DNlks2Wy9 ؐ$ŒHyנ([Z竟aϊqM  wwI]2*G%Daؽ@:1XQ&޷ ߡ ~ϏY*4Y}TDNR@R ɫ7_u+~aclS+uAX>^Z'K;KJr;3-mmHlL/wBdL*[|4O%Tzww ֿNaqnZ(8>PΓ}nIT7d &ًUkr;x {<7?cr~b}ܜY*;f i~_0FS=.9[3J1 & :a ITFv+kTU<=16mCz8IJj}/F $i!tё5-kRJWt0U!ipFzw?2LY&vhO,m`yB# oF-f&5=\ nzLMLi@\ޔ=!^b[7}! DHZ!h!+/t @wYIFVKYwJT][&xҮހ\fQٱf!PL83OQ\V@tafWQb"5C|vW1"a[%ZBh^Lތv](h#6}pHs&ly:YXHj0ȣMp7-$Db>XEH8Sdfɮ8jY o+Zm4} C" uߍ^J o[kFh}"}*XI{.ܽq73MV>Lnٕs;9WdEO(ʶFx@r_{${jmKQ `aє Ӻ:b}D7+DكzXf^TT_%Iw@"M* 2Y>ij w("lK~[#O;ک9rtǙj+l 44~qqC^DYU g .#|YAo KRm:b&wRt5$l.L?Kk ^}9)9*\$_4Ru2$,|gK[(@N%t;|˪} x_aF {7b?ˋ=B]@;=h_D.eF~gL_ss z%h~ QudVH.׷|+P \7J)k[ܘd!\zDcـ 8{ 7TM)[i!vUq}+ﱪ q=mw~rI,BPØ @9mhGտVҮOmڤq2~s=LyUtv=Jfm1K;z *A1!q+f{⑮GRtz o0H&DsM&SB4}] `sع%peJmۆ`iǪNUUaBЛϫȜ[]̡qdF >m.LVosBoTGiysMc[~~gG&yT>)kB *}51w:6uBD CF`(7'3 {E]aF_~D(dW(]0</3 .h-J6aR,-[/DJ7;$5ɋKP OggSNAcZ>! $(%%4_y SCT&7 ,_@n|):r~NEi=Sd-՝B*3in l.*G5r{RP<2dn,-ŵ-ky\WT{$t&ӢK4ǵxӯ02#xں}3:VEe}LUסɑClV#t'޵fu&1єfv:&S5 gn=TRP`>zJf%8[>ɾ@uxy ,Nʝ shݻtX B;ڈk{ℓl|(q1чV l6١}aƇ^!BR#)COu]?vp/bzH4Kb.zm;{l?eLѲ.D~ŸKM@!7MȞlsH٪&RTDBȅ1h$y{*C 94ً@j$ ^ap%Wh9Ʒ$ʏQ'aX<߶;zx1ߒ۷G;:-Fh'Z|wPO+;~lތ6KQ49UWsDG'Z'EI`i=ѓ4r+Cmu3ItEFssFPKqF[_nXd|8)vAm"&ۡ]]#rZ(]+ F,^m^68lj ѓ:*J{tCv{U+듻)ɪ́l~%#r=%>x!q&=-;v6仟Qd1w!:p5hNDbwqjR̲P>]޷iM TcI0Z: d$ }x>ѨG?A{ii費uQcS4hM,zմEn{u|Rm_m!,"R{Z+3&.$[*Qgkq0~ݔUgDpMN]׎ ¡@c(F ~ctV[k\xztBIn%]@)!m|1n%\ގrVRX/2KCcRn6G#֧U&^?zEzev_] ۱.I 1GK;])*L~m3Jngqn; O61 hZMˈR>] CC-k; D[ d-Ni vZkfᄉ 2#ʧH]9vK!"AViAmmԼmG9L4s0ky}+6Qݍ$0Eq`gq]u9v4|<\GY{PlEPuޯyxJ`X@낪 PL\\4cA~&@iȜ{>9HRSr&pW%/e?'Yg&Dsc@l KO|ʰ^Q !L/J-e;ubNn]ZhlbdcZqGN6AA!ch\Ÿa ` 3HV}?GY =_%t G"4HER%T0s}yqq0G*vC Lٷ)Wbxb,5#1!`:-wx^SgK$q$'w~E\ sc a͌*l&o׮I:DJ<F_ rkZ pDc(vuC"=`L}?^RYMQ5LLvYa uoO\~g[Ϣs4Wv z'hj ơ5ih|hCW]Yuh¢ >k6xžɍ8_-Ta:.Sq-2kf㦡e ~~:(tN^L:>#_c g!;49k.9I]y#"BhEBt`_n=^goa8o}1ow.Luwy%@$LW^ig+8];|}h>]NpSOI zΚͦůZXa``ۊ~ Oz\'qZϧb'f{D'E=mK>7 y%o,(y4>{qn_1ܕ}hR'64hf*W=鞮Om+p\@xZ Zu^篮`FO/e3Γנ5(}[ѹEf8z28AI_Q㣜ᐯEvKM 5F̶|{բHl9 Wzx~ZL^,~yYilIB"uC?~MCts31G*O6[2qzE{(e{"`R`H(V#EЙviP` 4Bc; P %=}kT}g;]^+>sKӿ/9.wSW}Q0\ZRJ @!6h h ֣%t͘p34nl 6\}aw 7ֹ<yk?ï<-0i:DӞ/Y=*Z; sAOggS/NAcZR~}Vp┿zRc^t`?]ړ>yN\xk&DI(}!iy4yiժP hbE/5\L$\Vpd$6W%2n0&C^߂x(HÅݏ%,"Rv܌:ݺK3ZŘy@)өl`*r7w/и)3ܦ#a$8'bAB&IxŚnJ! Lf.G#5!a>!DxyTj[?&C s1i l f@J{d!Kg0iF# <4Ayk3,tΑ49px_!'TSȰWg?euf*4MxpHfK~AJب>ŠțplrIm5%u^2,@3M^}ɻtho/wt[ Hh#yI6/YTca&`:A@`tRA0:G&j^.i)aSjcP1]-L.gCaEgtYɗ`$ָ9vC/JSJ4Ra+vqRZsV<^l?|+@fu^lÌ%g.dyc˞b^6Er8%y&寢L.PŖ`iND"BðV]bhP3tͬ4efݮ.O.ӍL?/?Y̨m0]Ϙ||)5 @@6^q{9?j 0`[X_[ #0:!9I&X # k'#+A}!&:!Z{ Of~4J2dݣSJ/"WgS)A j{t`|~Gt?MJ ,iS*D0 S; ~,Qä wЍ.)TQfKiV mq ϱK]\nLΦʹ,55u֊~Zٟyf9I7/#9!eyjQcZ9<c/F^FjGZ;12' +EbKJ?O9!=}.h+ !K:맽lLt 1'QWNqZ7IV&n[Ɣ>6OV3gW%;գWMJd^.HT҆:HF7i{ǞE sG_ͶǨD6upnQʭޒ>յU#g/:Ͱ0e=OF]VYMvs"m}ʎw(F9,6$ȩQ@m}ތf@1L |.Bzr/x۾wdސsg1MY^3 >욗%Ҩ.87]B+I``X]jpiJg2 N;V^wRH;#'S[~r2ȨX{TkDw)i7MeֻV.0z>p2#<|Er3rjU/6kȔ ,`4;LD@D~uū}.Lrz]i+c42[M :pFW+S!JҜs!PhyZeOܑӛ΋ g^80FA`fh$-nHt@~^Lƈ bԛGo2ƉLYpT}UmC ?aP2auԙ^LeoTl rT!*?_qc+,H%8/#w]AхvwyjpuEf$&uޘ|.R<", c_Gf;2)&fB uv:k5*S[pneB6*HlMlE;Q]u:6VIQ&7,,dN"G p:qЎduBhm6rĭap ht~nqN&]R9OX`ӽ$VgS^ 1 ,="H`BTѰ?Rsx&~lz'["=t>;w[ (ZMrdF¢r/mʪֽ|zhv r]0419L#t0>|1`w$BRZD{τIfN=\OsKZ ZuܝفqNLMn!^^ M.2fsuh֤e\+#Tߖ@ň4\s08 +Y @ #Kg/x- .c1:!gfBF},Dg39Yq6OGɳ{^$gRl]Ϣ  yL)xo&G*8='3X x2Tfw>{θQbcbsit3DAG,-~mcv/h (&T^<]P03 f"ض[atV?m['tv@E  &Rl ee!Sc)s6!orBO?PZw?09n\Y4ygtKdr|fB硅Jܦ{|taGTޣSobݬu" ܈m+ 3uZiruoKt @g>+r8СYFc,D 1v[Y;{\[1)"t,]J9eeΝ9K0 *Uh5dE jkg)nF|Wm_dDQI#j斦n$k;m#=<1G :H Y\㢡ƘjGu]fAt2Kі`iC)=/YCĜO-V+!ϝ LzJFlx`+xw?>峖,\QFBk'J$KJ?:~h)vݻq:O*Ynү=:qk >:M3gB cMlƂ1Ff7kI=f4" [ʵI\㽉*jzndW_=l<ؙ$NĤ3bUY1U=?#'+%<%zr]o*I̗Ua7YS>O "/--"Gd$9jGEZZO'Ca(} ^†҄_N^eU?mҒ oPcKD8L5Y_Y1^28 龝9P`R&k3&RŊXT k@T%|̼Ny. VӽO`ԢRqaUMh(})nFvqR@mZ3 %Y6jŬ1=DK5fuë1mU0"2O1 \<7@ΆBog^ȑnc\(FMP[a@^N%-Hy9[4Zס='$^s`&t2,4t]Z ϵS]=~w0in2%.8p [6g׼JF)ʦ9]9yqMpY!fJ8ϖ}l2AkR"iubXt?NYH?΁m0K(Z'ԓqfoԺfL4B Jns%d=QlBHh3T E#_Dmλ~ܡ\de Ʒ#0C׻s dh7X >0M]KE5JQ HC4k*Z:(3"Ɍ\$еTzcc9K$V,DbEx_  ~ .f>$!YƄ`@K?I_,,M򿌸d=ϛ} e~:8y<-Qhk'kD8Rx /d8r )2E2$#?zK\󊥦V qT{VlI o &B^$iOwu2 M'"[zklڰU͸Eev̾ $*F^W%ٔJ4rfxFo-~}n(F9L' 7ǩ@G'ܐl>DDNRsbVvzcNh4K4 L~|"ŨXaoO\z%,@I/,D 用wJ8g3צ fH@Njx]f1D/x|MSccw6ilC0)TlA^mj;"RuYxJHNy~AѸ2v !rDXr (Mb{f-S"9>?$i@ia^lobm[U}7]|>:{ 9}|l+;Zevz,4Q5<2 nJ=$T` !XL%gBVCf akƑ2UђȽ16l r }?I ޣc@;!EkXߺWRTMt0@nO|欩%}!2 |9:aB8 u+FXUqYJc6OV{m/m̻ER,#u' sHDe2jh7y]ϵٳ1K%~-4@;0_Q LSmY&"PWCE7=qo_e< 2o]NbP0؃h:\qOu&~#(0b`aNҋay۶ǖ,h?9 {#)@~=fN0kvPYD<+Lx+Jߌc_-D@Gg.X}1tui,gEtHg'\ Q!LFs}&n-mQ:}{PgdIR8WRۄA0NT?9yE߸}dtՙo'{Lkfpn> cц)ߝDd9 SYOrLWo ~f 3ਏX~OveH)nXY9j,`̟rs2#hfIL;F0WD_G?mS%,rNRʹғI+z"4u~k>N5f-0N{ls6Vr8ļ9ok%0d'A Ս|FܠeT[O~)u`|{lQg@iHNd4Ferl+lk(k\/Oj.nok6N”ڄ. z9o1v"tswjUQ=Éfk[~ڵrl*[;t`~۠BY 0TN p$f1h!dZZjiǩᶬ>'z| Cs>$!oFJ_w`/ͭhmba#+ך(ڨWEFy3H;eNN*,3.ǎN6OX}9.\Ɇ4IcpO#<4qpͲ}w,pWJJ8jWm@_~Q* nz (ZwohY['K{w:/L$ՙ ,c>!8lӵ؄ڰ@g=`!G~VS&+R)8Hzk(핪ft˩]@yѨo^A-q`K:L4=$ˬMkzh0am̶`aڼLؔP(4<8LuJX5=jrLiSڊ6 ă yUB ēY ]sRw ;,1Y,_t #aZ9nл[Gʻ"LXǦ$i,jxdtYZv(Ěm=b|qSRܾnڬ!u[5s')k]j1Lڴt*wR}Y }+z.rNNe6 c<^#/.2󇠍n4><ޔ=mL|ޫW3`^ ^)b }6U_:=*0QqjZ\ٖQ^S:~Mr~E=>~t`zj &xv=mjgCW @PQԵ}çX⠺-0搙V+5Cb=OJ~ZŦ@^[g\Q@3$|ldchmB ҷ{զ3YtsaJkjyyb.Wts9՟(3yf]縛o(yd;C| ZQ2gcY֭^<ޤ陰N#}y8悕ƎD8ʧ6^NS}I}8G3ҡ?<8[pAwF\=v 6(RgHRȗ6K26NF@$= 8xWOS)̿RX)͵ &{@lXstgaIϭ &\h AjRe 2^2e/`=1W5uErA.PA8-LC\"Hz I\K:6/5QL!!W>{2v P+ľr6)21( l^JiۅعweGA?Fv6'6 {A' wL7S{C}2ЅiDY1;T@Y #VOD,}PhMb~Ƈ]\ΎXS|!">,"ʧ5'G j~l޴v](+e;*\W* '!hF/&FPW?X"P=MذrWxrEH]^Sq@Tw\K>9(mG~ -Y5ٓe? \:sQ17ݓGMÎ.Fy޸gjy:5[E^=VQ0 #LTDg8H*ܭx4He" F~f|T~;*pAjh,sȾ( eeuQ (V ~6 GQ$1[c"{<> aЈp5Wgj5y$GL1ݴdoQ(i{Tb:B5ծo=bZ) Ώ -eO#YsGh8D]':mlN7~9<˵84٭l߬hiJ?u|dʽX\7 p,Y9#3J!1L yQ RX{k)ىNu4JA>mV'G_sްnŤ=yZDpj"C9~@&BG+fbQukRCIHZ1YemELLzIJ %NB/ h]#8tq L13Bh<8ܜ/[%c+_ٲ!$HLP=Y7q$-hIu"9:Ɵx]$i2ӔjɩLW3!Q7tsRKruf%yE5*(G`S<܆D 0/Hnrq\>\/0/Lܻi_ 1ha0l6gGTPwl9pk($p[sz`X9F8,J䐩!Mkih_f#3 H+R[ݦ"R#{:UryG5=2s@*$LLJhDe"}q8 M`Ѕ"a&kg6_Hgh + J p/0*dO˝'ȝ\㡌Y' Ywh:}/xwУ|LcOgyo ^\q*Zs'=OQ#8QĻM 0 b2+Q Ξ4s jvGC`H۶2v/ۯ#`+v&d -)-|ݕd5.IMY7w2R'2Z8$~,>˛Q@QIyq h#fbd /F-|LN>40n 8p A鯈Ov˿[ab;\Gw~^3_ 52]_93JNYjY%_a+9?J.646j,޴una(z/rZcᥗi(bd16Y[<ͧ|wtl'JUX%A-},=(Kǡ=LM/*j򜷉j%OtZը4Y wzR@1HgF{2b!TȘO40FDC2po,? ~n3LܲbX}1H~&P6m'HrEN.# پb/Sof*xE>2K? "c%ByM_E83YѕsHE_3q&^BE$i{zq:l&+٦O J*L?H['&0IB/'b7yUtKH¥7һJf7 훮~+ 7=3<g=h=%]Ek„)Lo@jS-첬 |>F {ΐ5?K <}D(2RuZCԤ0"࿓v;=Q^z.9CCh916j}NK$B0]qr>+ǜ讬L+8$}7d1c ×}a`dk[Tp_/ՀoIpMG(ٔZDiMm{`aCm׮"Psv1 t ,z~t++;~KoE|Usd{~{+reoۿ5zsfr!ic3*(0/fj;=]5fŎ@av@_ &$\ gD78 ⦅P×ZWUjVp@ H7Fv/soE,h)ZP4t]# aFnp[ ly0I8{;/qu&b,.LEXfsdk~"S!Ez(\ĸv+)C'n&("n>^b>jC3s뫥A%A&[d吳?NqXy`~\ތzH0{9ccT? DQ<bH eß.ަ#]6]JFx/_Pi:v9_Pz ΠKDb YɫoQ%{$)CᐪEW)Ks9E;On*t$" Nk.ZЦ B1҈ :"'F BR~ b[ǼB}6u-bG '= {5%tHfiG}Æ}QUO? 2|%OggS@^NAcZ?a`<ޔuYI[l˥Gtl戀<[/v=<%9\ϯ80Js {'j{AKDDsPq-LOӆ荄9d 7=~*^E([ǍPUK3 #`7(XqajDžԁ佤^L@aMJξB\,KaHA+'I'Gm_w^_'h20繯IԱ u&PSFP0܆m [ӥjecP{r3~T)q8]v1QԵ㠮cHp$M1`aӾ4M`K2DK|/9gG䤣zbRnsh4OHSem8'=H;T/m1CPě>:t'èM_HHIgs-֨V$1'y en [h<~$xak+=ct Yg]J$r$ԅ+7v}MBO1i_ײ`OjkO"1qVZ]}[/~L'ARő ⃥imqHQQDE>w?e DU(Z6> k'6iuhBўxPW򵟘ғIhPzw|l'Fsg + hE]^]~=>ڦU| Z `,iH=!$)۰uV4MZ"b |Q^X0jFӤ#orNMiOid$jTcݼCkWS+'͆\$K{g)ߚgT6 hL<3v1M07_9sF\db462NkIRb3)peXxuaY0y o3bdL)q{9º'hCBa?T+сe:C!ӱZ.8Xu,ʣL4sɴ-_:O ҙ(f˚5q6 *sw#rK8H|͏1H-[W|"E&TȌ߳BDm-T/| oUeSTRSMWZ:r>"FOݱ[^<޷3d^b>Z,McxJ6_NQk,BS,fLjίo &̽q"Tʪ2a}D!.YƜF^Ii:D.mB(E(d]d"qg؄7^,Y/$րFy?c0uq Iփs!V>mxek(F߉c 0$J= B}sZאa<*XCZajJyV^85lZ}oѳYngGȞS InZYjg峴(4Z~MtrΤhJ?D12X^Ԗ}=! )H6A ;TTHۘ(w#v=bLf Ϳ:xmL9_gԾ =4LqL3nj#Gcx(0n/錿2&g[RVP,$`ʯ :dlN,zc^ar+UoY _p1O*{iL\9%5Z{Y ~Luc_{DZ:aa( M%.̫&K: 屽Uj:$3VZ&E#ƠTݦxsl VRZZ`/YPPIA5X*wӘL j>qfkl~w19!Ibc6+8^_+6,fVM[)o'E=Gj?M*T]};e^ZFcOvI1nK*'!f)zG[`Pe e}(EyLi^}纇=f@e"]b;y+ѻƨ-,\ *\iT9-9KU f{eD.VnԴVY5aZ}9C.ɬ|O=evlPG€}TTIGsv6!#F?1<ѩ2'&0jԘngm%4C$Ƥ ]{ߑZ+t ߴLNcu>V&C\``Iql]"QRGX+J{i[>>&pmXaiwN1_1S}bh\3'_ۦL= /@y[6=]^P@u9hRz.e9Fo:_`V[14c\V }u MQw^\A]v:r`UPg6#L'V,gTI ׈ZqC k&X uf1G|ڴ uw,>^N0V ))wzsf [CI>@O\BK 4m䈠IP`E{<>zm ke(N2zҝNE'َ6}`iZS$ l`ZPC XjmHG;5YEJPWS56 ݶf[s2D}3lH2bZTfGş6g;OA]VL9e?[Ӟ1(g)t|'z}p_;.OggS@NAcZ:|oMB\ !۰ِAӄB0 VUʋ;4~5w{̺j]}"ǂjC)E(po1kw쥎# .ݏ,^mva3IT7YMH, a]o\[I߫cޗ\EGPЌ/:Mdz*D;;%[ܹŸk>4ŷ 8z->:yKNA<*zC8j1~=Ǔ]#il +y(54ˀ&d_\AЁMj=(@`on=_^Nʇ)^nv|ax:^ ⑷tܮr^/XEf%}9=4 cw(&n%3_`q%C*bY>džk Y޽+|:w]@f*"c&glW3#5`w햱"b^}}z0%Ҏk@ft1"p^-d|Z$&QkdP:j-СIqʫ{/|ú?| =<^J?5aNUh!c3̣}:4_r&q/ڍ+VT#ÙU<  Hbb>l7RJRc*P"ٹށOU|N70eY ::a2 ƾe{{[ݛrPvEdR̳y#:Q.[d%e]fOY,rU6U?(nÂ(N)Dv zg>>\``m;7> 4ƄFFb'jÖlc>:L|7b`p]~ rH6Y1k-^8B~T +Vң-wS"V7˛kpj3obfGM|S L8_IЃqs0tdʉ±۴%{~>zAqF^j٨u?Sm(jRLpzm 8ڭۍUǴmL2;PNj,CN?a.4#e˞.Edi$醲9t-w&Hࢵ/s@^\NHw`[3 h&Tgt&bfהv4~+G@̇"Y=M<9@ao pNi)]->g2]lAߝw͂3Wsl K꬧o9Ct,L4MdiFE Ylv vE*DM{\Ksҫphi27$Zz?F</.0.0T0=/ږ:v~aM֤@uiV~+xk{@R[`J!3t}c`Fop}l)^8;c<tԢBHZJ,(PZa!׺PPèhI[~aQ L{&[y`J( .4 ɓ]BwVf P2]QAD0c޶ÃuA yW 7BBX3ڗ"ꍭX*|p9tct9ϻ{=I95!CaR΢3N5w5L3|YJ7,X,c|:O3 0W]Zw3M9wf`WϴC;dP!,bq%V噤EÁ=`Rj,+[ގh Ǥ؇ouv5s)ݏL2#L(2iݮ.HF+Aqhn_l&_#,>Xt~\OWh1-Cyv$d%YNd]~iI!9m&k %s_lk ~KB3]4 =9fr/d[ @չ`E&hR'-V@{nXri`' $>/&00S~ÿmvk^oNgG%}Bbݯ:`[AX圷Xŝ"xM,sYBLWSd-!ⷀ(_CՇYSE-8 S>]dZzxz0ާפphG#,3T,25G-y"=M>IDG#l]qv賻\ u&=sEpPCi3J֦ ߸ѬM>[3}!Vq^qFFu{A$299w\8bVV8HYxw$>ex˙I؛N_= ެ'yUpܝmhgf9jAtȼ?bz0>GGF@n&,P{w`<'Ki;=͔#GCX<85~s( ljQ$$̄+qDi!LyhPr;;; _GP&_Gr,5펾BiRثw_ ޘ?D qH)fAЂ$fFjG~ɹӺ{//S{޲t@k5ͻ i17vپ+rז ]K|sȜtzsc>fb-ڰ3eV=fL)2=[EbU bگ#yYXdSŸ)x^fDz3a^~9)-?D*bں^dёp/E9b4q8=Ay,?"-6eҁº& ޘ|}dcGrFHGS67f#~^kK)=g _3|;#nUo~oP^5=1n7zfL?(ٿ.2]P!1*s61Z\'\3G?_hB<4`c )h,2͌ 6>u5va% ӳ=gd#/Fs {vdy1X9gt:!CW,, /F!g\Ag*?Oyn հ;UIY7G6Hl/c :G(Ptqdaל R`ضmQAD|h$fʟN]anHaYةX{n,|19BXp{* ĚR9~,NVTy8߅['i {4bW!H\u` ە! %٩X>+$4Yczqlj^ˋ5#=,%N#PxhH3s{gTDmҼVdQ3VL:,Hla|]DȀsr|W¶m}=O)($<+320ĺB'P!]x:&ŴQ7nW;YuGx5l3`5Uƶ ˞8yޭ53$c)(oGXSҭ_IfOj'nLFf^)GZ+X$TY!@~y٤=sZ6J?Pcg_׷YriSFy,dH&o!sh+:Pd`&tĤ.I<$D;HyzrC}>ꃖLgh# ~۽LCcINpʵ\Me/^0T>Fd1F΋p1Vuljq.D?~,LR_N:YO2R2PwqD{-W$ Jsa%kfZ}аjm[*a__͉lL0;1ѕv=86ᠶ?uQ駱}[`{nګ3|9USNsget&9@q,gv+E߽r{xfdFnYާCXȈZFEW 2IOݎ=Ɇ Ʒe(>YԶe!R񐵙 ,>^:{0 qQ1}Xd10n#76]7)ݝ|椟L'eg|Y(Ă3-o콽Ah:o805 t`|woR8}{(m#S&7zR%0UX׈FZq 9hJ<{'읒G2W Z9`X@_.Xnp\O0:o?ÝɈ4KXB= ER#R C?J&|yIb>sυZH"FTh YiO/_ַ] ȑQ'_\V;.o+ H\noYdcfjwLiȰe{(<,˦{ukχ"HLОzdL&BC(t¦߿VʭP ?lagC8̷ȳw.4 I~Uyʟs.ՠl11ڠ6A:{,dH>A\lD[:AU4\˂=8*.h5+QmO{ ts l,SlUf-\^G3aQ i Oi [ r6F8FO{Jzk~GĨum;t6@0 Z.Փ^}VV_W:ߩ\Ϥy@;00ynUr>p~%M`@ >S>qe<囘iY4y&yR_(L4`Vq ';xrhm-,.ra\4F`m.!yPHg,M8JWD!)SOҘzn@*LG2|DVBnjbXSɵr"Ynk!B0 }l`dOhD0< ~ŀ7se=&O/ / ]]h@IKtaH֎_ !Ag"cwE<#t&~̞ M/rQ%t+ϕCZOga<޴hRVqN_9S*8 Ȱ+_ `h[za`m)tJj](-@& !=VҢr}}M2\w$0b^|JA7P 8 64~ta>^@2}@ua8[~vH2ͮ;&T${&M4 fZja.=ZVTü S`6 [$zY |UyРB,5} }7{@<ćv1K ZZdZ5{m&@X~ъlVnۃ0EMQ]xdf= m8;V֖ח ]&h*@&j62tCBgj#:d;h o:FKh>NrYY=M3 V*SOۅXKr"GĚc6>[֙MI%:*n=D-9"ծ%c44`pGc% q$甅z=^@E} e`N?iccB}Rⲿ>^_峊`o !`%;i#v:3ow?q5h˧dϞhAOodHCĴ%^1۷VB9 ~}Oҹs˼Hx.C _LNlpD>UZ>g!\̨3\ޔ=BhU#lRL\Q'* +@[X @1t`COR?ҜHM}lGFLŏ׮@ʶ1rC!؝L~75Ûa1TZ'}ɭ=żZūu%2!:F[hS[9퐴ĂG\4c&]=s;Llq(7basۊBm| 8HfWnp]̿WW?b pB z9!+.8t6! ufZd .w |n~^ EڞE*Saz}S]Ц`wh'r|FP~\-˜qZ~ABax9Yٟr}{oZ;QZ)U\Rl&@2LjK;K2/IJ\qB/̷dWJ",'1bogт 30 9Z ^$Ē,t^\1M cN㾼d< MQ >~dXҩj[Y ,fтO,+d8Nt:II/&'otAmxԷlsM耻pn<9fsbL>&^jčoٕJ b5_b4O;_S C5"1xMU/KYLP/ّKRKu[XիJ(w!'ĬT#k7:}oH#Y!ukcQ%լa5= 3K6ļ ѱWִv5@,@и(0[E4+(GZ MFi}O->oyws:o.9N+;DP_}leV+7u?MuYt5B&Hu0RFS6 +ͪI۩xGٞ;XD'?$ܜ~XhGotq@^ \Zfd"uD3u l;txlr'tdsb[/Bf+u9"\)HW__7X$d4!=YTZúV&{p~Y1@>WLI0-vw6nEOT 41 &YPfbIED=ÂP4S7,\ze ˆX5k3&D lCյ`Gh iR0oP2,R6Y,IJOBI}-Dh{<ɓ} E!oX3M5w/hlTLw)u x=['jJ[:-y_Ɉ6(#&"qɏ #Y <^>Pf8;h2+sOQݣhӊ'EаY|GϩJkt`tRS\Z9aF$s@[cSK\c+ۭ(~j'@7Ku'+f  zcSl6 Ic` cTŔMo%eB)lKdS옳XU䱕JJ~y?svb_ast"{6sn鷃,Q]:niSី+ (@ ']Gdnʎk3?Ö,ݸ* %đlvb:Xܐ 4\׈{w Qq&8c`s P.uț-}3=m#l뽗hAJM{躮:H waL*0iَw4-4b )yeV`ېEs,ÑȐ_c6LYǡ>\Nh SM@?#w+cjjAs*TNr a )͠^gh@t(aYOKw$t>= ğ' SxћM?KmZ8I OJw^f-L޴mIa,I~T~I@>yi`K/-kȧy;o`G I܋`D +q`d\?O*{PNwQ6rXHͦZ&7 Q',IN`l31zW<ٷ 1drJZ9W0|y.t`\ksRfIG^/E𡠱žzpZYYB$mRj=𤵻P ]b#8 ާ 9"m~f,Wom:Ÿٽs@q[@aiGnaD3H3lf#S g"FTfVGaǃ@#ىw{H&)Q=m>B Y׸C@$W+9ِ/\l6Q-d'z?uA_S} -:/>}k|yGO.|^Ila4kFOߖKnB˷#hw&Si.Ytt.&wY(8ck mU>y~HgN'lBd>"zbζ?{3]I(rz}NMO:m{x,cv#>e'ud@GO˘ˬ! מ5z_j^ne%/U1$_iIPֵ}6 Q"Nr%pRng{!HD=dւ H45t  =-7Ti[=a, ށzF &;&Gz< PPz! CÝ # \WW.eTj=[?mlsSPQv~koHaGNsv`5ކ@jaM`սCbHh* ~<\0V>5=!#I@bBB06h5#S OS-D=}UjK|s])0%FtwSަql<oK݅ 0E5C{_u/"cz/ᒞ+Uœ_D8>xȋ%~wM^S m"r&3F-FKCɧ 2k'XGu<"DtaVm;JE]\.䨱(}(ݟ߅r3QY*Cq<뎬sřǓr!3gi<#^p.M<ޅOEc>7ޘ5=Ì9F8'ֈ}[V)yo:wH K&{Y;i.8>,B|EnupobVPV|)0d*GP"60yufD%)h@Re /XA TH>W/$C$|wӬTU &~`;:3 #zM;_9~z3. 5kQ-񒓰ܒ{hiǦP7Utt?Gѹit^cJr];{:ɵ2PeC 6^9eRo kdKTaɲar^va>Ѓqɓ] t0T {;CztuOa#f[343fgkURv?v z8cZ L8[BfS?Ƶu0boq+s[ky"هL~cGP'_]$Ewg2T7H3)@4u&Ɍ1;ؚ@3||̅]={!Br.02myE9w.6$ =ZR2BZ{gzkZK(Z蹽<)ڂTb yxc*Ӂ}toY>j!Diik3" 81s08 ~{[bI ^ACwSLbR <>#bi0=' 2=3m #$_:eXG 'VhzֺspVF˕ &"CpD˳p=XfLAyܤ| c`>Bj֛᢯+_<鷾6.S%Mm[m)T=K D^|l0#w"2v\}hD( 0=h!o9khgBqߓTVE # ` (w\HHh#9r-V{nIPA5p,"7- 1[G ){)SdZ]t# XzXZB/.@2t ޘb$+ v;:H@o2킈f&t TУx)e?q[=^[>ݭ<6 MR"~),=]Ir F ;Q\,*-,1l+,fN@dSC9`=J-+nTG*|}4}@OggS@ONAcZ k~n#3ƽ(Zw {iG)DlѣOY4;c Ȩ5>) fv]{"Li{Շc3 ]/[;FfJ&w=g Y6Ě~sd N\yiJD?A\Kr9avR==Qn>q/JuG"u!ZL|5ObubcN*e$Nse^ Qބ2_k ;w%8hӎ bȄo~hȁdցcouK8 iB `v]DiyC^|dp>&4h|)%0v:jjL/0FDNɬxg;9Q>}oK!sRsr멇zMa7Ͻ`'ڒiWҮĹC|F< vg:A&D䑥?O營du?q3x:hD05t`>FB/iBV}[/zeo+lnhzji2: % vM~rV guoA7 2_pCfmun36qNH +$v;Q1_p̻Zg4(^,"Sv`B)^B0Ym00>^4RW t7!qHj2k>]>L j'fah뺮k6Hy)C̈@Ȭ4gF9؟״yzz mOA0ŵY#2Cu+7jV@ Ry"uϔWҙYp#qs}Qj;*]Q˥kv#D/S YTRV)TLlw^ZX0p2zo8=, cib(g! w?v 3t^jzQH#QlSc3ugrIIk9F ^:s-3Ds",|(fajgW9o'c8W=wB|:0:K'kH9!ӌ3gqVl7?NBhˣvVgG>-n~UHRΫ8kf0-USQujͽ&D)O3)˻1n]c(}54^ LC@b;nKb(kutWL4›~_ 6QphMG/hQ%6zP)5TzPvAnP6R{7LNlIP_z!uZh0o:.',)}) `|~ 1@)s]D  !|4-Ym0ɟgޒO Xu{(_J:M(JiFq;*J#|> |XWHD,ѵg=>夎hK" Pyqmk~~&lX_`NZDJ/34zeZBǎ`asڳʙ3Jv{Nf`s]93Iqk] NY/UXLw9)zf.Z D0և+p::x?G ڬzܷ8  TXhޗܞzF 21`@)18F4o%oswB2a,CHN7oʰR3)Nt4flde8Lc{I~ f隸0h嚭*G6!f]L%T}fTs+Jً@~27`;|zA eݡ@^\Nµ[Z c4bDTF|MHL] }cm ?(O*HEx? 4DhȤZ~͜%*|B;':3 }`!=p^]JvCíܗzfVrkbw :^\`R.@ x4YsJ_1IZuC45Z7)_73bc?Ȑ5w>8XzJ5ɉĹ$c?ćoށ$eҏW3HCL5juڤ긁T ӵw#]CJ]>&FP,`?f{Φ;yiMt6;ziwB+Kn`uZ L9xkwь;j[-%ϸ *IP+,UϮEKFqaPML.pxܚ/(߃+@i<><&`8݌hL; e!oZY_jTtq<("dED{s"y/bD%SA}⤹PK‡f?Mdt;6m/N7;4:cD<-TɼI1df [GS^n,8LBF, b)e%G[l9ȡ6Ӱ‡n/k,RKe,Ka;gxcf.ZS28D9|ub^G9։8:9 215ٮԗr:/F|>} ='"r{^гx) "϶vGiI<ϔjt'\*tsbȄA yMfRa?MDӈq!6D/ SF)AhU7<DQ= ,]TV9m?8e)5rND:8aw@@ `a?L`FGUfbH "6, f_Y?1￲f&`&R1-͗6~CEQ-"쨪Qyi3렪Ԧ90`KuZPe-GLΨ7z745udE٩vХglU/e_]=!)g#fp뾄7̲DC~ }6iZNzz u@ڗUuٹT+\[wkN$:Ms򊤱*99,dYCc5hglʂq:u@ 3I^*X@T I~ͭo+^>w_s PPNu=f)m)F`/k}k6߫/]2źQ٫` nᴔd+WiFkI͡VS >5aUwHu.6{7$@Pct6~U ?_1 ެ5%}3,xv {Yi--xTt[&_?ۿ'O#уw2 JkE5CLlvI9"Y%%āsEƇ5un+fw4&Xc ͭx~)`el$Dv d KhDG,Zj~J;z5[[om >j:6JL-;+tOng(.fBCl[Z4ӴdwsYƯ7/O$arܣwPH$}UsOy+~}t_^^~ӣ w&LVv_ѭ}ubCqv0Kz9}{I:$AI9i%f@[4k*_/T6X•#0i<&e=ʺ%_`Hv\u\?l ZL*r $2rTzzFLY m$SZ~9mXP-ZiQ`GucU)F;<_;2$iM 1.ֆ!7* }iX$َ1@")wO}<8'Ccv|*ڏ =ds;@Y-fߡus۰OK:|;)wsޢT grPbaRŶ 8ɜxVy?1FR^.C h p zެߎ>:wnvV;Mϖp6Y:dpIs$pg폶i/sk>or:6R8ݧ*rؗ\'ӜoC˷ǯ֒׏;` >Ziׇh#!}2>>XT;`x"}DHgT߅tx: 9Gn2ۓ҅$9L p0CNcf}!x\sӽ zOoX.(D+mWDw4\9A!G!5 Я07R\GR!vGAT PI Y3ܛJn'y`[?L# $hvh*q`~B d7` 蔀%Q3ȦGSlTKvPgD^3['\P\ \w젪75+sc<N03U>X\WWWw}ydX<- 0X9cii6g鈣c-R#Kp_?ssf#2Z-:YvwGj*VLlYH]\W^G\cmJķRi`ra8C˱&<i2 4r٨Fp v9vm<չA^ e@^l>\us;Nպ ɶ6-BQqѭD8FZb17>l$Bt%`cEW "Ea܋F ~|ތr]=c;ă;I;qrES4ڲa`u<$5[6tt/k`uE5IT?Q>8Zf9aq~P9 gL MX^l޴2)sӟbY2bABh HI$3DӐڽ8'tW2SPE&")wәC}'Lㅳ,xp([ı*Qā O6~;[-,T^,4 Rr{7}R43t F1i<8}WwF =oCZ~QeEhb6Ak ;#č4oF~4,q[.;3t] *%*i$V|#;'L@^M:K5EH͇ v p;?j^\\9҂Yq =͚S[3w^]-woV. n'7W[ ݁#Sg¬iLIH?+-Vj[o@#Lk<@se&TX;?#z<L^C!I_MYKD:t['HIƖDm6ELIRUavQs˕U ~͏NlS[.;sm%c!PJH`&=z {? /'D[hI06j\|H@GpG#FձNO3ÏuCWe3,S# KC3}Gg m\#yE9rɶRsZ AK~WlR*0VsdWؤ2sXբuRonW'v/qa |9ȭi,φ|A%ŷ_ T.ۤڕwOwڮ_)!ܙDuP ݖ8V(**̕L#h@%k J;KtI< l quỳ]R2Y/SuM4w@h\fD[-Vfm9&mNRYxZ;gc [Q;sf)9hì`G<B@ukXe:CUV뇧yX C:RQt>厪w[3pD{y(EbF^=ݘXIE+=t]cÝox[~=HϮ|"t!t$# p)t:F(*YG4(Ly'30lsiqcTE"t|H5`گfKĝٝquoޘts)8\]e)q7z0KۿA*[ؕ߾l\ޔk~WV<V9"Zob" ,62EOSINx߰Wq_MPM$,G k@LP4ܶ}UgcgzZ 3䌵EK8nPIYOFPWgiT7/.ll4ra,or'[X&R)D'G gpSST|q3L> 2 V+(LNDO4YVvy=v(Z>i<2뛷m)s%s򜐬FYcώc#\4cnuor/}`Ll`\׎Rciyc#ܾJ&Ds!KfqOLB "%(-3gM/ y "(7.D<)cW6B^^f -VtX- O>SxW:@^l\sTٽ8,ت+gBxlgl@z;qb? ۽h&K  >y v H bc=.1ů!蓘N9kB8^WYE)硊gi ȯLޔ=GCj[lr 6#ttRG(|kWt(\҄-x[jR"m)O?fїRퟗɢa>O=8fXy[ZidDxN =2zWt[-@n.+Q"{#cF-3(ht(tGjw]i_+NULgWBW9"im#!۱<@Tr!jypQn[+orB (&j4ކ]$ .D~<~1c(Ez& 6[2F[)0p<뜦D8[9'ϡG 31N ,u wCmI%$RLcgx"I:0N|5QZn4fNJΎ{&Ղa}. XYk?vtumA>L|)16a*8ϩ2 F890c_NS^y_H|C |6Z+" A6!Q|Li>0`$>܊_׶kr Q}zW7/{D&jYfƣ^LXt0btz Vot/F@ !{n}Ykw,R͹DPiMœo@_[^vmԳBɌ,=0Ӂ-2p֬el74 mNYfq0-&L~9Vq^!G0FAP]GҌtuH[{(Z`=NY[YVXu7=vK+,Sj7{iR={.Uf* B4ENydGPrjqN,~Hi@wŘTH+$dO-gKYFVoz,c}V>1\>?GpϷEaXV~[Ȕ0(rzc/xtBsm]RIȬ=L>/{)…b|˴3"9j'u 7t^m~ж%b>}I<B0j߈Fབྷ/'2Ag~Pȟκ myg [)vyw6dQ[W$QPZ/IGo;|tEp ?S)pA6?'u4\£ FS+jcjHS0"`bWIc3M] Π9K$䌁g}Pi}6V ~S0ĸhjnm139|Z;cgGzXVKXu]6#^ aIOggS@zNAcZ{L9ez\W1 x2Dq~A9ܭD,j;::9)2VOkTZ&htw١d6mD|XL}.cIE]V&V ~rw֮i%0zf! :i^P`vKuIZ>JhY~ሧ{Ϸ&w s!e2 1B9ډ Oխl4Lm ۬>'Ĭ<P&dKw n1v4j[ E,'sn@J#tU Tr+0/΄h!r it#*f=Ɣ8.P_Yw(|wLf A{R84<ۭGñ-d" @=p/5WHHsӶr/Ep&=k{L fe>? oU4WZJC["PaF)H,ӹgkAn'o0"KdioI[E{ ,f*c[=i>9 :+$J=E0jJH5]JǦaz%XvG\A[Ф]5v!d}o:Zi\D2DR "M39p˜+9n:R`Vx{Ch:+dltuܝABx! ,z\:du]ɛ>lCql`tr mO`іis;?7}'Sgs0͂"ͯDr`Z 79rax?-%jq{kƒS dnh}x!ƛM5"~ڂ;*ǔ@afa䍙b3݌544߭X!n63d-S.0zjh\$u߷/oV^Gq1Cgم𪭯iJ`S_yVF \!>8GF=džD[1glȆ\ +p'=~̴{>6 ^9  |cce,eԫ,- `e+ wA)x6>tz3d򿷾x*Vp5Z;~$w{7:G}Y帝Z/۳NLH2,lY)|W'.ϩ2TE$?]lH;HKP߁Om-~,`R -E?hң:Ѽ`2A^=!z yDčCAu#4{W&MA!@M@r#ف>i䝳- S1f`ÜBm -ʈMQ`̩`GP5s) X>^L+.07Վ>6FgGDz?YC'3*NcTo3YhYA3>mlb-vpK\mz&g@Vt=OM"[\3!{LvRT4 "`4_qS;d91]-A6&|x#+#I=W˒F:FH+Pqt;~M*) rɏ"9ԃ+ !*5 fujs!~! j[rZZ1z_gA%DJFVؐ{7/&luKwh,[[ ,&\N]c?D m?tG!4B1;LM$$#j?<葋`9vCb̵\{9ؾ9 4}-Mɋۈ$ig~2g ! ٵ䆽*U=7k@#@1@OG*@4!t000O٩l4>:Dy^.JcRBEö1٬ T,yZfR@g !6`w3aZ[=FKwI+4y;KT>^\ ϙЁv=#{ǒ)ÌؒiG3t4]Ĭu'q_fi.̒RWâfޡdJfxZ2"-=䎌#h5Y8d>a&kLc%kvO0}#@F`dt^]Sm @/cF(%9Ȓ9O_8S \ϹЪKI.:U(%DTL2 TWfBBxhгMrёd:E}0]OAkFa۳[eۋrN#_5 j.;x_d%,4ACT\Tv}D +立%UF6Cv6FȻ=H]/aR߁3EZ a$ǖq~\29~%Ma*]9O(ZJOI[ᜃn<5g!ηa,Di)Ы & ~\&Dy^D =MfP!F0V=2K<x);GN&H%>x*;*Þé7j!^ں em$ɶ@G" |U{mVWAMLej^E'] 4^q#T@E{J=pI{I˶Agz@aB-mYEVd YDg&9DXW 0 + U7tUn4aX*[c*h8OggS@NAcZg7p##&&^\&0cnl AFE*"-LyƽҢh̔ cDxy ](s֎#y䀖Ű]}>u8ۄwg#v.! ^9gVǾZ_fOu1 iu*&Gto.  r覓]h;DJ6oNҰgxVшpbXTwy!3p$ cSN(op#BE9!5()-U+Be5P.*6> hoa`^ NYid\b@1R a+c"~nߙ\R:Oh Y i 3c "*n<8#9xcʜn\=#ٍ֦œ3fئ~ r6~LIL,P&u"&bK$!nQC v5izEdƚTseO.~zu"}U$W!M4`i̋rDЊlZb=bX*) $\2ZGAy\>}9:LڐjK-D[F,//o*Y4Y@'= A0P/iY gYHKgkmv*8Qmv ( S.;u1NŤUu4IōqlKmŬKc!8V4 )%Ӗ`yui7(}$qW{k^!ԖӶ KC-Sjá8GӳWqu뽗\WvEj؍V5K_;r _Txz>lgƻcԬZ(ug5!]qz{,Q:1"C75(gY 񡩊-i7gT=f%i_i~ z4լ3=z2: O<̴ɭWW5| 1鞇5~ݴ)qc̽|n@{1ah#}LbNsg2\&f }40F\&Sh]i$noɟa"vp޿D&EGU&Gް)O;_F&:X-#ACwhtH:8RbB"Oϱ`Gd B"#Ys1 V]V)5׾OPl'mxrHyB^۱g ^st%O-)yY)L4A Ψ9ܰ7>"ey'AM@8D؆L Pm.v腡B0KL7`dT)Նt   (ݝt*\)TbIv<';:MnmuIxm/EdE<| 6\/xHB]jȏ<34X@~c 2+@4)ߢ<4**/e0lSԔk IȽ'_T dvu;#X=gbMã -G:W'Cb~^:]'fyM+.˰ZQa%R*M:m[H|}`>梃: gɔ#Xeڙ6O(b (8q KMl:)G~4"+JgQ5=oa(yѠMXKXb7,]h."OĔmp h<@|] " ̬ͿD9+ɺ0Ec,Wq5Kyw4s?- f#R14;5$Ww# #{jFw(nj/x:jlC\. B*in|?@=ޘ7 B3Qvog4Bb4my4yD&ɳɑ/LΥBX`/jwSRs&+^ T˔+Mh*'y4|dWl2v^ag%G[Oj") mB^?d zc,\}l1B XWYc~Vmmҙ*cAtE+rfTe^ďNd/cCq=A˥H  xhZ$s3(>3n#PH @#kVk *D3(fRoPm$iK -LYo*ki^ezWk_D(,1H@gD|2Q -+:T$t߽zիW'FF"%]368=6 }ǭ+ 69YYfJ$Y/x/l$rQM"Ch{ i=E h 3#:d!+ڎq ]{8z@]|waA!/S[ VIʷgWa:h΋l9/+ !,ZYt{W}=+wn F6ӫp8/nH@ 4> }l/1"? k <`~.F  V%٦b/ b:+EOv0\ƐNe6 E nD\4mg3'3+VbܓDVvJ4,}]RS6b'lm]d/8'g VK(OggSBNAcZ&1mMD KfJBkDt?آ L%*/hîĐx%5߇,cecp1.>%/q^w U6c b5DQ?.:ufkqٔbSwT.Tk9;#l4xI5~\Jɾ Mb<# G,]6MuC74ӴmUut]_uhPTU]WeUW}[}UUYՖa} Uum]X~2tu[h뺱̾L(CLABH)R9)sRB)RR9&%sNJ(PJKB)RZl՚Z5Z(PJ[k5FAȜ9'Z(9*:)Z,)X9'%J!JL%C*b,)ZlŘs(ŒJl%X[L9s9'%sNJ(RRksR:)eJ*)XJJ1sNJ!BJ%SJRb+)XJjŘsK1PR%KJ1snAh-c(%cC)b,)cŘs(%ƒJ%X[sNZkmsЩZSLsYsZ(PJZ[9Rb+)XJŘskPJ%XKJ5k5ZŘkjs1Sk5kNZsc&BCVQ!J1A141朔1 R1R2 RRR RkRRj4%(4d% `pA'@pBdH4,1$&(@Et.:B H 7<'RpFGHH!DD4OggS[QAcZ8("%& "#! ''$LvO']r-/m@N~P<٭ o&-Ns}}~C`gLBLݭ?D;mՓW; $T-_{L8݌;e9#+(,ݻP@eO%lDˉݢz1/ D[<=9 0𺩷_qW&h\=>X = M`EI|$LۣO=CÀOo *zu$ZAL u΄ Ў/|&iGT/U8Ɨ7SOј"ߡl{r_g28aCƮ'϶}\ԉ&Je4Z距jǿTOs< k :VW M_{cLuAM 21 F 5PxyGx;st:+1 uv_/`Ob K{860  =zP^3ag)y0IvS0O4˜2 L h +BGs8g.! ZHtj3h@nlЅ 3K'.FG\Rkװ4<z9h4XPN̆+@*T> "PK(P)WafI0L j^?!d6\?|W<4~;+>T8W?NY:x O&h@j,l!ЁJ@7@M |S _R kYzhN PZ rJb"DB>P~i;К\gfg(Goyۀ`+_fk'xn~+g*eT)s83@ * K):@+NA ɧ ItWtʓZDj@SfGo2DX sBj'N[|x.Zt@c R6utإHHtB0&H.3|ުߵgdG9fzD]uY- j @ ԡ0RXAR *#3Q O4\3&dK8d^hP'O aÈ$qD 3%7l79u XY =/-))ʞBj Z3>_!cbj D  Oc30@HO?+wۼg e]N]DWRm4J( 6 fG0H&H8 -@ A8jL=h26\z0ԦLq=P`!C{Av8@l &vF/ow|R,W2-D&`i3Âтd:0GPzbhj-Z;7'4i@"po*( 6*Twq<GJ``v/TxƄ1~ ,t~ ԟX,񧊟wK*n-Ƞ -.:z3=4S҉/WaD&QqX\*+U <|"OtM%d([=E?cC]'@\1h4PK0:: Wj8' ZH&#6e qHamvC 4$M'4& sD= &J̓,.`gBS@(}8(&\R8/:O|, & X?oP ʻlu'⤲5XXGk`@$@&P :v6 haL$NGluH CKBͰFpiuoy 0 L`NO۠J+ ^6]T ##`LLcܯ枅؉Z6~F{% @ t@(@@LiP{΍~ne8 %Iidh Mv4"VO Xk0]4n}=+!]%{Ȍ?C5L~g:Y|*$u3lmS@4O X8A,p: @=X*a{v Qm g0bd&@#u(~ubPB G?+Z X@ ~W3ۢvoURE܆:hHlcaD{w+*]{p\)ORD( ]n  SvNy7sm>+-/Xbbz^%_֊sYtT^'_^)y0  h2]&r>5dXnl(فZ,+% թkpUh]@2(%x1{{YJ ^EWc}O UxC25b# 4Hdр8,@XB"a!Fө؍ [ؠbuPW!).9- 8Cfv9m< \;5PX^tMK&P>ObRñWsN^3'Q5`F \#ir$@B%"~GMa}*L[UrGP RX$s7*p&ԩC@EaXx*Cy:Kpz0 Yr4C @}>E fǑݕc3), +@k`h%@tZ\ҖIڅOX$zSUs+C8$ Xv GfymnzL': Wgv@/ʥW^XsyڄXi?ڌH H@UB#XZD"}KLl}̬ xPt\Ht@/j xZ'_GP-0> jBnd2QOch@248OggSQAcZmG )&g=:Aw<'3R @a'FD0@S2S !U=, 0pgsk 4Ҁ.ʓM]?(jdYYbw C?pقs' wqnk *q rRjEp_',V ݛ|#l{ؤJ 6@`U ${z̉ ?")"xdL@T@`)=^:[} $Sݚ}vF0O@Џ[%f4OUx7 FHʇ⏄|/ls Oshz 6> - n.9Z Ϥp:z QZMR s'!tKUa""=O'(] P @pcA>W7㥥|]`zN8 \:f,ID&2e5/-8U78,]TL(IYt&&ey|ġ,,p0 p@_{(J/Hr]d_qMAMJ˂}ZkPNyY 9n2w2܃fԙEMVh@Qð Pި`4<¬Z$څC".KB&&pD l敂:@}^45wR`5 hr[Si_xL+d@sߘ]0ܵYp܅=VTz\]t^ֿ9-h/8\ev0* GF@o8d aId~ JoJSj-ux %`'Tq(I]B C=‰R p493 oI6۹NܝR8[Hم8+Evx|Am"4 444u‚fChH@f3'A0k_8,w8h7&z-2lRῶE'PԂONv\a[~ Zx u 1H:LC!t=cxŅE-/!|O=vޗS?G- $hYH!r-oD 7I7ܦ@%@SxbP9 +BUA:lpmh Ȓf!« |Xpd2Vja{gnTM3=62YfV>5)uGڐ IMjwrl<` 5 ZˍT(+>)iv^0Jp`@[W mU! 0)Mf!2sBihi-(%5^ym2, 8 ͆da4\N%25 'O X2iS Nd=,4E!1\WIr9ϗ@6ь 棆qV(9jT[EU7`c EKȯQ)p/Z ԹVH<~+ 3@(F/M K<PrE1>k Ԝ p`:o18poQ؄8P4R7S `ۜ` 0DDD)3 ;?q+VR2pcҁ0 p懒57 & /" d0~%"o`ئ:l^2lBF{)}SwK"ٽV*DohNlCz{~#Nȭ+; | 8ކ75Fۅ\\O,8^?j6a,#Rw?ܱ-e!'8ύhA!Avf6#o|`˟p@oYְ 4 \@#&>tWg"o ̚@5/v : `87ugSo>E ిa @j f(P3.a S̪ a)BcsPcv\@*qsN;nTؗSp04ӊ<P u Gd ا KQ 6[ބPE Lo`J 4tXȈ[07-\ )Ed%*,z\ŝV v4d" r+W؃(oix8)! `f p {(4P=C< ^YnXlOg鼗ߊg ?B9I@b" 3n#"@uL# L4@D|ՇDQBL*B +g%/~ D-;lB!c"_u}?=&әD[V΋09[" A4ӫBgxOggS$QAcZ"()(fCkh!ZVoiG -֓ ݖBCTA}*vTGGlW|?[M; IUz:[(Bd;ìwOKLOZkfx,9$,@E镴p֗x|3<d\@ 6x3`h|@Z3~*~6.SH( h-Vՠ ($̂p~lpu~4% .G y;>G' Y"SAk>-(]NsO߮e"]CxX4fD&X `[| A  qZ}m-A 4h[ \Cp/4̒rp(@̗Pwb0op=&ܛ,tB E?ތ[ُJnGtU&< hZiSv.@[h-"Dy%B=pr ޲)p (~ooS/`m- p `N @KX^r}:Z ܗo; #yBb t v @[6+@K`@a紫Σ( *X'e| CqCy;<Y n@8Lҝ3<o+d|̝Y4i5.xEho:apU|[pL08 D6@ Z!mߙhvG[Pek,% /M2<&L sQ4 xdWkNEwW"pxw' 3|%6N!!lFӜ@bl؀`p*nX oDSخwp8NP`5L_1Pߨ7`M\ K:L0$}&{(m1f8tdGulXXN'tl`f0@ pgUijpT}H00)]N ZW@ N2 n <ϟ >#;36G0`8kS@%iTu[EPfa@@F0]JYiP>[Yx`Њ@!Xb(M/̧yML%haX`slk0@OK"-D.ӕ\m3-\#^͛ǝ`KZ_9)R@mm hKUg3w'Q&OǍބ&tj e(4Q  v7gF` p6,n8 Wm%kA /^%ՂA9o3L]ճ L8Vj!p t6 c BuIKbTu M1̈7ܯӁ3@+ط(@xT! v?ue%:f.2#0Pԧ$p$2 VE)4M/8=.]/p͂%ѣf4H@lskWxݫ3sA|YД6 >'IXw?Að>qD30/SXaBpgF6PbPPWC[K{*=l:$7>56RyE.rt N{_J%GDylHHvY@°$  xٯ6j`f.f,D7,\|(\ph1fvT~XC4 $ Tx!p8gO~.Ɯ=dnS,dͪ \7y y?Ӛi*wP<P,Hؠ@ (F3]jHP\IrmS L g0-pǮ[擐0\mȧk+ a `2e0 aq", Db)<E:mX~iE=@rAWksc( ĦA@Dhpsf/>wWF˔AjK dyixkӭ#W`S|# ч p7b rȀ#Cͦ/{plp7} (މjΨ9(K/168ZӀ`Ђ{ݚRǯa3  u <7j+Q(O g`bQVB+S3Rf0~y zjwh?S;Nc"8%q2ur c#ah_9hp[:OKsR@BvSpŷ̼%bĢ zy^Κ ogDɈ|y, 4PD0hW)5 0>@ P8WZ\\iQCl p {|CD Xt#0"` durʷpy1͒a'~yiT8\JH; HXa1l1T7>G! e`&7[ =`y0z-ҐN.E n @K8ك4R`#n@> TQ \ iyXSz4 ӐAV3IAЁ^yw<@2-\pY iԍg`, @R(nn 7,aNw4ۋGYZ,5ӻ7H *;6ɱL> p+ZT֡P~{1KZOD wbO׵'#>ܹf|bflua.&ӗ|fq+Ґ[z4CZ94'iA,*- %A@=)0 6ͮ;q*FJJzi[tV,pU4uTs{r;ѫx>tNH;qݚ5EvDh /3| 0 w'(*&m3KQqO>xK8ߊhADxd+ psi.tlfƭ>HfH#4nnPg3Lu/S\`<&da o#L>@P,,`; U p@ t |^L@ @' eI +ÅґDX (n }Ķ8cIPyhSP^[ڻ@:OΪ^*2Rj6pY"q(X2_ApUz.`'` P=L%p䏟h@>77ʱYUo? \(0 FJ (O^*F-֔Ň8ȱ >Y %t8hH_Nwa Z*`@!}vx%՛M\@56sK$m*5 ?)VruXk/_` :-NmhZ\P\68` SH?~`L| <[C-]+agAN h PVNZT5 X`[ibMBKt?#]]@N$@`p@K 34 ؼKD@ L(7-+Kia)8!Ͱ u 4 ~%XxPp xloirCb{  2ﴳD򡫞ڧRw< d逖5Ϟ>@X.`CO$` HyC6DK~PR9j1ςB`ZnmͶ%`,aOQ/Ϣpfoq(Y+ (~ _-^C+( W6HXOb6 ?Ǿ:nk:ex p 08-{׵Nn7_#Tt~_:@ jEc~A`Y̻625J+8#Qa$^ įD/`|א[[K^d,؆NAh H8` ~OfS/8]N=G+D7,J=*`Q@?c:''p,Bct/em3JF 7Oa&ؾp0A'4?i_]p,@&R^ Lж$c&opf($\3LaZ^B ``C=Bxlc0y'Ӿ-WGB. ~!|W{g@ͼp<IAX%ЮCgqܹ > q zp=Jw!rOTW<&@Yi4}t#H2V V37  aA fܟ̖@y 6f K:>` lhh[a![`r9lCf4ء) _ = X04*Y;UqFݚjc&Ì[(&L,,:L@0 x*+@/o@Nc3h@[.Pk&"X`dGY*<ڲ֋^UTFr+Ү1w/ Rf0R@l`}Ah~ڥʿ; isũpm h$ h5h a9 rܿ,ej Qla*ߵ3Bt! .%lJ:;Dఽj|BB:Q``1 g9, ;;g @vEɅ~;V@a?G R$t$(;I <,N$"0 Ytwv|a9Sx2 &a:aUN\0FM[eUxwܪv5^1 CƀNs LЗY DǣfK~Ʌ_'J|--P H@!D0+yq$7a ܙcT`t 4~!f(<$=\!C t,@H JB#DiZj40IYN U_+@'7anH7iC~|%! ^0h&.|(lr<\YDZd}zxh\=VP;voYW-1\\=h"I;.dM%~WDV^1䋑'!챥Id[=g24rޓsR_- jSDwdߵǷXɁAӌ܃} +z:JVT顴HY"%@fxO;SY>AfH+fc4`q{M[<Qw.h?ɯ}=zQz E.la1G&fhq)&:D&xmp yZ4Y"(1(:t]ԧ ܊OI]p ƹ itm72@ QYecg7\H\@7\p@)03lhF!@ ` _~EFg @I>+e^u7#u lK4- /  mY˧ԷwqseQan5@J t~>3 |t] lo< [?Jtf\e+%n&QѰ N:5a2 0_yRqI<=$AUFdC{ P/(3e5޹,d+0xx'xOggS@QAcZw#&%~nZY 7Aіm@@r~0 ^6Jf*jQљh5#X/))`,@(.$]R|$BdȷcdcA6 @ 0r?=¤}[cusJ @l6ds=YW.uyՕ .9%UI >(@Eb8 c_tK}`[ ;oȢYQ$^+6Li|IvĢ$H l @[HJ , VN(R_>k9DsawfsTC < \ x p@r74ds]0F:>6?-eμO_GSfmH  8 `Иi64@?Lw$,W H^rBT(o@iҀХ'2u"\iǸ9i ?/e.cεOՏs\U8Te&` { R`vކ1m LA JB/Pd=@1DYD`v+hHwN@ <~N+[(64prss\kD%`cJh@%sCwyfي%"𒓮AfSn`V@Oy&Je!,<$> v e<ٝjIjv3D\ my&Ao~e"_)ŵ;1dn1B바ԓ2u4m F: @45i&ȃA$D?`ԙ[Mw/2Ncŕ 3e,YaU;Lŗ0L%Hpk  @v38И >MXy#zz ;aYlHl,, a4M˂ 6  BHZ8S2(9;)* '1LW- ҥ{Hvʦ\7SN&c4WM4FLKǍ4d؛8&cB{(?<˫] 1gm4@``KxC*O*] P>(_@lU`dC?dMFWm GF@Lg!!SQE HMC Fe)D#0A@u2@ 1Fc[ioKCei{z?R'mEКOPh1@i0њ0ofd\og2 06@x ibQ4 j mH_U|0IҞ\`[XZC0tIs"74AA9*? rZu*PzDP/E`X ~MG@$ #Q aFuyT8;&#;h6Ph @"ZgqL-'mkĦ=*eRNZv bq be gM .4O,1!ߛ<x1Py0{H `J, AZq`@'@浤T0"AP 4$]:@0[xE&8)ޒc*-l$1oC(fr PCY9/@6/}XB :M?]6p_\6 h4 5 sc3uKiT1Ҟ\9=+tSDp^J9 9xL] (j 3ʺM`ahnpS>- S@rLpx"E37@ 16c+Uz6%e/MJXZ bTE,8S j(8[LyfxS``W`a\u?SGAv31gx0$K,A^2 `$"5s:B_O16ڵn0\Z)ݲ;&P 7MvU~g54[h'[h-!}Hx$^D0pQ@ZL~ڕ?n ߪs 'Pc[XM6"ȍH_DK72P Gp5x|05"BC,94*x'C`GH:R>eHϫɥi.$LaРvمLVLKh{ DIf\Pg>S I;m.žd%0Ym"x} ZU$G 3@ba_$]=~ $y,04d \ϣ ! bR9tVN^.PdߗN3 j *vqsId^Tݝ;v{bkw"xuXVЮ:\\w]ݦ _nn-aho:EZUsд;isoUp,f @cl xl``}C &KnRKy@=F#4/V)r l}5W1 *b 0 GL+IJ9R 8|%SYE3Kx/+gwG}{z/[F ._&0HH 4h@ %  E0պ~sxi[>b,5jPd0K'.@W+p)MuWf *P2@ ^:4: 0&8?<`#`& p6-=^p@ @@um0BE @6Զ` />u?$t,Eުl׳I$5}p2 @8@<|LP{-jΆ.\ '\T(@-*R``*@Z~i@Vއ5?̣or6gz3q]K%ANF8 , H}Kd i)mTE&3h7@\KMp(0Ox`Ȍ x91%`^)9vRɮIm1@:A@j1gDt%lT$^JD=RN+ÄxV!P'Z :@^lp5o e C~5LӅNF~9/ $`#0*6s4 p `l?jrNkH)O `%ZRnM\ @p(-* eB0-1@M~tN OggSbQAcZ)+$MfPh'H&h'VfX3^VӼh mnbjlN\[Z l E 8C}L ׌8pm]$EVg%v` q")hi,b  ,˧,n|Oو C8OSE@U KU\Hi7O*46%(yl>]6qGbX8Wif   ==] UaOivݣh-SoE-*};A O-RaX1@  d?VI%zwK3SZY:0Ga9EKW307ABHw ;v)`(EQ E'x_u5&Nu:^mi])Ò9.88s$%0* >"=sgEbAk{QJ3qRBɳEЊ :Q:_ L mr5lBx ɐM80 &>l+CI.,lX`h"#TiCc[깓AIETQg.&;2A4~ ϙ9pf7r [,@ybcn"`uE\;H8:f -e x"3k̒67y!׶Bl T}@uj$U9Lj(\]5( &D;!S?6WtǸRkj a:t즆F5>"iev`#Z ޚNIr#dtq۬, ,ll5a 軵X^K^!6]]W: ^@eqʙ^(p5d,Č_Z dqC#$X鞐U:=Ck.gI $mLsWQVA4\=*BӐb0#td]ۏ߅Rx҄4/oh.48U8@f֝poH"nPk6M5v f ܂DKY  b-"93aM?͘srνL=kl &} noX/|%%g]ťm FpmF\rLvA2^.s:'F!e[wa+;*; @!\ ۍ` Po֦[xOi+刢Oydv0 GF0@KwvgZeK8$:8$A YbaЇ?nJ̹.(AZ;. ُ0P1%禾C1hOe)Kyb,aXDo/v }3%݅ sOfGyYg*yq<|Q}fUN]s:X`p"T`AhuIJ2CTc)UlA}hu~_&`[ `-7 `8y,A%Q@0ʭgˏ㹜xv{Q((<@s@*iY`C@ 0:g.^K}JC?Ź2,B9]\gCrpY&@?X:QOIP?Ou Uqyr./5/K[;` [m_@;TCF939A)2P\h:@@--=fZĺ ? ` Ao&iu~HMܿSSgrt#D}*8IB`p03pyh)$hx "CO}}mL7<=$Ղ9>C_Ef† ikn+Jz ]RXYȓ0QT0!> 5Wu:XVg筋wu^@A"i`O fuM @p"e,lѸ +z+ u؂0h78T3iubBH}, ,(_p3 ٲ2Z>jKp;bRNU#I&[KϠS %3Hf@ $4-%U*Z'POpB S#Lxb`(py? 9%2A5h`袣eN j[raNR#Ŀrg^cgD;A_  | i PD 4-fVQP_JL;@YtxW@\+C] Q 1 Tx5Bw&1v7Q&uemO8\oV&$np9*t04p8_f`l "|o0M}ʥ&֗Q*p/+ j^0w7 _HI!)&GR6%Qު-o"D*/˚T% , S06hP *YLsH ks*l@]%d( u@7.+0O{@ 4>Lsxq]ʿv``s 30lhH0|"p9v.*VPj-.]s'!%[iR|ajJ#s{678H'`M@zQ[XlhRAl69L4\ԀOggS@QAcZnŁ$#%)((%(Tݽ?ɷ6@*Mp6ng* N*uqnu0R <Q˹my?vY*m5[ 8 -@hf@P=eMOTRAӔ09;ģ`ա-v NؘAlr-5`Ќ> of'hxp!ȡAk&6Bi@L#F'=OHmYmRh&Hz А@ [X}qm]" DhW3^J_MQ/lmCO ~S瑹*g<lqwQCHKԘ\'`xk' ><^-rV<}BETx,Jt4$H-PjA7EECF 8 ;̓ZHrH >|6y2ޚ h>n 0M ֽ\iڅole]7mVCݟ!.^<^=ޖJ$sNtѓ!l&5 X,=hVBXBHЉlkϸ~SmN4A|ZظS?B5n1ByZNKhE.k -ʐyf{Q]5p,x!UK_ߤ4r&a#IBh4.RC ,`$@U*ol3zCf )nB)M9b%./-qF- 4Y6Ҍ x^GIJ~b?Pu\ Wzi*e4XX8@ @7411)3P"%ZviZ.Bl8X Gv @I 'P&7h Bh+G,1{0 ^+R&{%%ϫwҝE+glq@RX# >DL̟XcY1[E OQR9-t7L*v÷sXb71! ~ }$&OhbB€xcpW>6mԤ @M VG,EYRKv-T4ȼ=;KLHf y* eOWSGgPW,41,p9>#r&7T]n ʿ3 38e*tl#.='za!!jwd-:߿0< x] D\7{W/RNn0tӜ>@Z̩ E:TzSX@![~\ٿ[~kr`5[ԓ}DH%8?#={ c|o|?`;hvk`A h p6ms`Al6wjHJLS!7$ S|@. qO)p(7* @C@%'"p`,GZL?;Nɉs]JN3>#6p,H.$y8M2>d ~E\}tH/}@y)ˀ D[07i)C$<e~0O1ӬU ;䞨G[ZR ]`O$E#BNx pv&h ,HIAt 6!EfکsӺ u Cz+UX0(p(pxMJ"xHFHLL;6KJ"Η0oCG9@ tht>OD\4-*AJ টv{R 25TSX~@y 0e*`@p I lr@*7^6=&iSa5$5 4NQGBh5X") OD9ׯK.jQ"j*pmAHLP [b;)BB\Xi(&,~6Ic*#6;zY`0R@@0_OUrU[n_%PgNNCQT(O`6jU~B:@Gx'rŠ n7M`l Ѐd^&m!{!7LZAegA [*`p[FzE$ΡE:7/n7P uW5[`]a`}{S @l O @x u ^|s>*wpJIP;h(p3 0^ >4@@%5u(,< ;X2M' ۀ3-W y!`I@n 7N_w$ x^#=kM|~5G@J :4N& ``Nh\ :`@01rrQhƒЧΕj޽P@!@μFD'[n_`v# Ni@=el}s ZH`={%Ŧ_ȸʂ*~4 Foz>DBU|Q)in!io9@ut,+7ee|^*.fOl ? < 6Lp4Z24A'%:.}C>vq@x- Gcf}{0Gex*M1U\j"\>PTvs2!P>/P@wd=&@y1N(t~ۭWʃ{]F>Eu~J@ %xl$Ak Z$lD9|Fr|]/Q4(dP t/ %JA M67@yCNMR*n0n|B  N ~wTWǸZneBU$u  *A .Kl{RсUg" T"DX2E7gC#^7AfYKn@k!px5?41wmWXKq)LrclT-u  @[nP1* qFT3=BE-JAANTZON Tp/l ^Fj^3-8_`4rh h)zΉ ]W'UB=s=9pf)a-t6l~{u2zMhbB)8Ȫ@LJhS(f=|v;Liy$n3iVk t_\#+# ћޛ$H;Iy\[sLQ50n$@""˲bW.φ.ԉ*VG(W4Gy -ΰҀɐ _Џ7@< *Obb \_! zWL&eJ ޚ'A{=2CϠ4h4 ZM RrjL$ΚǏ޴Wa1qjzJp@S+=8O l! @ \M𰁒s`mFgx*_3w@e[K5Z#>mOJ[νg2#,nP2XF`(5KBUߞ8JMX8H+9ܐ/jrb?c+!y(dȝko nС|M@@s>ŲBEo ?k/N]k>O=<ff4]b[}Qƻ@ A1AzD"+b#,z4vs!0_c7\C?0VIrOji&Vh iq6uOz4TzZv3@+J+u!卟liLݍ.{?9R1( g}&7bL5d߽aoz=-8Ir=I_wW@ }l@7GuX.>"vrPz:[t`Pp 2`=4@&zo͒#b$B6Ц -|_Z_\'x*5mu١FScQQ5 垿9 ZYs;ν MS@Y}h-2mc ܐ!~+&wb^RʎU()R0'qA,5bThX`HȺHz?K3%v`RQ+ <"PW!}Ŷ}hd. C\~3#/jE 6 2S&$~;; Uķ3V,J`SCMÆ0#؃z M%P?_!̕Jȍ* ,=PBw) 8Y܃43@*ݰ g7V ;*59h h MV~+g't6~+xshI94 v >S'8P@KIko-:وœb\?=- wf4$0n8mLLpv3 HJd*urm,J00? _ ^+W3uK8[uPcRAh% qnJdI" lBHQpbG_V+9cM6! 2( X 4,ku_?l㗪F s| QP^7D%`: b7_ \Y0*SE>LL> &7o~ W3ik&a꣤; @9@? <:m$6 @*xĀBGx Ǹu e`>Ah%u6#5Q _@ a Fw\y8cKF=m < lvtX,pԀ^4CwWI1SEU8$Q0@0Km nH-UZZPpP+pk!*mpz@7|`N]_ je>ONCۓE1?Q?#hо  @gh8bhA4&AP k_m^8Xrr#w !Z i-$@*fb 9xWJHu(wڬޯOyImW'Q~V\(gh5;`:&O6^ AѮ5'g׻6&P @gV0~T`H *CYB 5 fvdԍ*5lTl~ 7@hOggS@QAcZ w>Ew{E8J*˗΁;#h h$d0X8 3&@gvnaɽDFQh)7k]a< L!\EjR@ԁPPИ(Lu:~),w:CSYtx x8B6,Z` IQzh"A]"$)7ҪOЂ Bf6Da#aKS 6 ŕ y9Upxe 4;IL;9(gyXTu/Yf,ZhXa$ZĢT'⒒a&SkrKNelB \ZS `Ð+2ԙ-c;<0fPBX t41rQ ˜<>ʯbva?2$qrUdTgvF$Ʊ6J4DXr]ɪpgNE`ڦ`RS,~~8@y9 nTZZCO ;)PiEw C>/h1 ^֯m?|?7[L%$*W}u qd DV"+eZ g"nE-Z0RƂFt(Ƞ*@) ' ײ hF?m=B%oB @ 3 `>wFgd,uGtFؒЁ5 dHD%!`!DZX#{KטR*"Z<'D|iJ  X>af,LB"?&z6?[MŰE05gU?gk]Tc >ثK&i:iTI $l:,"OI~% RǴSG Ψe@ p-Lx) Nh? 8S KL2k\\=&Lnc]4(مOga!$=nS\܆ 4x@U@ `! 'nQE Ls_JyXS<VoۡN*0/R ]e7\`1fA0D!e/$GqqU34lr`X(s@'BBl=Z4Vt"Hnni"Tʣ:L9m( `~>8p(,casF! 0FqȲ~1lABQ~#_#Ka VïZJ|q<Ӑ'4@9'5zih-Yfո՞-$U,P[y 5n@ 0& b)9Atg3(4WB\3[z>WW]/ 9 (> F_4S_)+q@Mz["A& - ?~Qb":310hp]7P/!!9 x-FD #0Ls =>܀$;k迫!-p DtHEWz,m5MV;k_Wɟff X+h0|R @lu24B . ,:e(Hq8-SS Wr"Noc¤uͻ P(-˕ &0Q3V3@3F?#v)Q}pLPC'^ 2,l6@^{"n&b/tG 2 Y6 ̀,gn)|X^  51*!\0JVTDY|pÂaVE?)i{9IpJahS @$4XhPRD+{Su}Q\Sō Lp%7i@ q=a2d##8ҍ -0Du7 `AfCᇣh?wKʛǚϙNil. 4\8`a$H@`PRk7}[8"賈[*"P qHp |v`IV@0MXp5;J`\N0_m (KF ~ְ =H ?>7pDW:bnb   d @+L&` auZi^,:n܈Ã@aRj@͟L N`\)p (e()s} (`nJJT*3E?NMo Ur5IÜc~ @!@h񻄱Jh倗K4 +2QF_@|vQQ} 0 Q!t_eKz؆2`@p5 @Vb1 o+' iͱJ4(l253t&sE4`a$d0`c.?cAWoaN`n.ZL/^U/@*)1zd /8ރCa\T릁1i)%8md0>7mM4ZiE}*/'$ nCùHe PE00kCOš{[47, XT4$VfweցdBU L?&  jcHtM+f+irg<4_gޚcn˛ A# $,@!Ii>]d&xKA^ GQt,?Ehr Pp76ibu{*}ևLO6Tp "){s 4T$>mut@>?Yn#PŖL/ h `A=jV7,&=UAQD:\e NЂgQ0i<ߡpO <ō-4! `|>0*2ެSR!<^ʥ ^>I9h6$z!'5bj}\xSP(WK|lfμU3 2crn4B/Wv%?s@aAW Ӕ<߁>`z( ֭|TwriXFiq4tUlXc/ Zx[XЉQnXχ s8pL7@׵C؏!#o3+7HN | L*+ۑyx`OggSQAcZ ̊d !"!'(&!4o`x # )i@{0~ @eXqߤx)7bD-hx &0rN@ gU1ݤП/*#K`: CBx3L(D:< 7 ڈএ l8%&@X ` ImZƘܖ(P+ި.[62x\PY)PbfN]{͊JHn`&H˞T3 7.=:Fie]Ch9flֿ~dI2lI&M `Q&E0Y@ ;[ PnS&JL5  6ߵt'}fe4\ / `PJۤYFj:DٵO'- ]nl֙mM}Q &Lۍ?F DžH\  LۣwrC.NoBJ䙻? *+4<٥D0 #2ʇCXf)idn m~Y!$k)|DTҰy$@l)b͖ -g3FD\;mo JRCAi@Yt药-oW/sLWe ]z3L_P0oP?-|\A0QP#p0>řߩH&-hg(w_EW'؆D^4  dN Nj2g}:| F3A pK{e 5pkQ0 ~+@0[z>Q wz|L@@^%3hp \9 &2)yb6:\ؠytk"robbT9?4P} -A~L'p@? {D4{`XB:%(uqy ]I`O4'X f!8Kp@O l@00=5;O-a6Aq8ӆNkP(4u0> sZ`FJ 4 g6,imAoT]⍬ n@969O%P'h @  3_hZ@zv7: 8)a9P`t }'L (> _UG@}0`RNX(%K;0HrP?y^o&RJk tTUn-7(xh. dOw|Q72eoN[_dyS,$6hNXwGP^?Ј&~= KdLT ;-&jY_BWp׆]7S5j%>6HǼsw )<~yΌ#*kk9[rwx6XAb6~iE3opU}7qLrFyEN_8?sb OY ,@DG#IOk1-:nj%ۥr3l݋p@) i soā]0kU dC h9Hʹb}%a`ԙumӊ6 i"yo X$y?ӏ#"LuJFi )?-#Jh]׎`Agch gr\R  W@v`4Q\ lF{kTH{Av.DbDT1jV7ff,^=0YtC["+/ @#4 `q)@X Tmlu:ɞlzqᨺ_8|ra ]2[^f毸 R@XtkCI= m|0_'*qmSQ.uC#JS` G ¬*YwhXKI^O"gjЪTYM.zI~4mCW_@t/,Vp !m:s>_@Ab}@j]i^g4}*P ;=ͤż8Tn?dnG 4-Πi4 bkqTȓxR+-KD bqMB F,Yo2* JdqQw̩EjhW~._r `8q;DiTSCö)GDmwK*h&6AH$@.) WL6IV*5Z 5d[F6O@9;<[0RRjZz$n?JO^}TaxyGZ#1 T&'4R7\-Hxwpr*@tLӛ))*&m}iꈜpyӝ ҖL 7 4`8 <3A 8+1HMݒSc3Yۇ\ROSª#Xx@[>2lkk܀M4@?0?~*&3ȍ\puV'ܴm8 :t:.>w lSf$4HTfMDRG3Z zQ? `n hrV#h+(@(9\n9s۴YKm6Xru#y(4(`8@g?JQpP$0@3n|D^|iP \ {@LpiP],;^_MW`:2sPKHU'qTC.Z<Bp` `80fO*-|ӡa2Е ;@ 3z@Mw9B( *2ﴳ 8) ѥFE#8$.ai  HHhc ,')O =&s-&Bb)TaBE[G @|C|W,|&>*&3ВTzxMy.xJ<-f#6  %`[ dke]/ZBC9i%t ʴ j('/[1̰R ` 1<FgSs2TR቗1Sgo l>6, @ ̀d> I`@EjiN3 u9c8e:n@Rr?Zo2).A (}P TB@t0lX V駡 ? h$pip`y)X\'@O`H`#-Ȳ0Btlp*sA`gbH`M*,/n.@|=}eL-: ^ V>zPUCYCw &lB AD:H4G<%J]I+X|X/:S(0S i->(T*)/}O,̂J@YKXv*~.i>8WX`A7M_NZJXBop5NLSF4>-p0(p eMu,Y[ACf4gQ7 $ ^Ot h{ՙ$t%l $] ,4 "``ϘW4L>3KQõXf2Xsh,5,@wD@!L\*)v߹ H\)YWo hV=FhG^*>$sݦ:̠ЈL8if@0ckLe?ZO숸N` O 摌L5wSRu 7*Pgpԛ_HgqD$X,觜AiA;\'s+JLyA l8HZ@0D|ϒ<2q*f.`oeH//Pdiii@ <. ښe`m 1 )PFGU?nE&1fMIX۴,ZL D0pRx,s;7]My8mhʈxA!ev? rnW奄j̯؛xSL~ ͙7Y%N=3+(7۰ if@% JR@M-gg xIps- F #8%0x v(!}j26Ew{Q)WN@~ܿ=(FzNzL#ٌMo @Z8@O;Uwr̉gSP2B¡IKeByhJs\mԻb6XN* TEv,f?ϣ|e&`7J@JhPEv_AV Uuؤ phq `ffHeHV@ 0t ݅*f $ pCp(cndkw|V&a!O  څ""O՗8Zp E#Т ! \4ڔ0@  {Q;g3۠ *zp`;Q8 PQeV8]7\1@v@J3:G`ٻQ?Ok@p BPg l `\ hi8D\![( Vq@( )pZAiT^`\G_3w! 7c@ ^D~B2 yZ/  t%9hpƙFhL OggSQAcZ l& $%" eN{,r|r7hjh fh @4?C&2)-k෠`!R i*Qm06q,x3m`` J]x=rE4 Ʌf>A{4>䬤wGX@ݴ`hNe;Z pCw'ba;4poIT|k$nf"@+Er,`/Fts63wb+ F.lMrE)wxm0; ͣX XXX 8Щ e`I De _XfioISTE gMp{},ݢ M(P|_ߺ}Op}4UGҡd<tB ^v?lm6&60;HZ8G 24&$p 4@jx&ޓ F*,`H#'(5,'TpiBW+8D` xR Dwh>J{Wi ^ v?Xq3Gn%m  Ѐ H`x,@0%ۮq#yFÅ: FL!\ ʩOdΫ5pd*OL `hF"ZEs``> >vi gf>H2 Ɖ$-F:MUu8Kr{' bC HE(҅ ,?5a\W9 PFGsLi1 ? c`ľtgӀ#k@sXh$ 6'>~OrKvɞ t1( Ÿ9u; $kUPāg1"n:]p!1 @"->5t`ތ9{zmoDX{q λM$N\hK3 ⠲ z .@6D7Йvz= WLq5f seX@8 d4#݈;<Lun1=YaA6eagذhX1$OI~7.CeZL{q nK\OB&ap *%K@/fb:!_di= @Fxm.xp7(0u?hg^olSIt wfh cA ׻Y vRM)\;OPp#Oo}*P!nO@B@L cܬ4 { c`8 ?t^6Tg$8EBe$DD0*R,6SU&=55FeY+3q<`bCEB ,FW}qye&~?1`I7h {/aut(u@3f\`& D nWxb XO 2hsV4 Ġd_{.JhF WpneO@Ҁ@DsコO \$ h؀` j`ƹm[3||d5(RC(<|yguO2y zm* 9f^|DA Lu.VQNH`ZZ  `P*hxHxmU*Zp'"3t g2VAX0nزI$|Ha46\棁zڭ?]b>2ɪ h- 7HZMʴW[36WPȶ@Bo՘59`VS EFlPt K$v ؋41J LڍK8;%OEmьh)"TusDRԊwjQPFLX׺hM0!l $)WL YݐAf!?)piL|\f @w{` `Y5 6pb']U8dLc`Tbdw@6HRB1?!}5{J iw>@ 1H\@T-@[6ZIkg-TDM˃86뢁@ZfpOggS.QAcZ'&!&*%L-ηO7y@9υ藢Y7#eJLU\ocwQ:5j]jxs\ :Jx^}jX,8$8 4-`.9=A@~iR]zlZDw,P q[ZA^.!qGej H,oZ#cR5@\$(o 81XNJ!U5]!ŧ 0_\+ uhI3z"@| WJ>ܿ 6%YXWJ fʿN;xPA.(X$M`2  DxϿ_i7qGLhgK/#pS5*Hy<IUCUHgg /A/4 f?քAK]  gN + )@  `i?V4]XSW5Up)#Px @] 2phГ#FTnBvrK 6K`!<{j$kXL,>Ӥ',3zXK 8  2 3{Lkm7K5Su+LwMf|D([`+ P@)̇t0^?s̩zTS ׶ $phK08I@ p@Ioe2ԄϢ`(7n@4*  x&P~e?dbs⧟N6hsk\tjN0*!W Hx#?jf rHo 48[\:@s@Z :8fy{Kf؎@5J$HpC6Ѐ$X3+  XCD3M\ZQ AxLUBcTPy BwukJ.@88u`; a+ @ W3\؆~?UJ{n.gΎr,^@_&S %6#46Pk(TD7%xtPPaϕEpz<y~ˆa*31 _om3FS:Wțʹt|V.uV6 ^`KЀ8WH˭ͼq[R:'z&E6(p f` ~`Ɩ(Z0$]7܃U xz @lia8GQ܀;"sA75Mf#"@M?>c$#Π>efp- 8 x @c%ѽrESJp(1BVT!`;0Ͽ9x *2|ЙL|~5]^25ex@GMĿE1 p7 jA!IlKg7\a>JW{ZA9h!ɺM>a mvCxCg, $QQnvAIş%KP] +46en~v_jb!iݘܨ#z~;M6* F1ea9]Z[U݄bx KwSA(雀 A~M(Cb1d =`80Fve`;!JkY 2ղ504Tjl!ޔ}ӘdOd}^G*xX@ Na ]EY(c@yKo嗴(f @XȀؖ2:F Ojw q;U. <пHFD32ҫr /=T=5;{EޘLĿЉn2+k`A`hmC`:̚dqwKG bwIqP@aǐkMd͉Ø4憙 ?n%l0o+2HrNz Iyr+8{}! >0 6˾8oYc<ٵ腿B&(ng}4Vb73d%ިzV[FI5 8ޥٖ nEWp}?e/Fj.lV( 08a#+pVouQ&kN?Mg{4+ݏy3j@ I L N P6tP-dnML ѪkIbE4cD|UN % 4 MH3 - !QBE;S.+It`AOggSQAcZ#  &(! #%&&MWzsr: ?Yh|t=;8 4  ms4h`h;5'Ej5sRlpҳKk  } hw*X`@3 t Mv`,r|+%=Nr'y ;$YƲ N`@g2 "DqU^VѢW'LJD0PVHBěnpC )OOA/ALBB>˭һ1;y=ʥI9Wݎ( NIo}0`ɠ 5HO  8 Da}E^鲈h:ty^m)U&ō3|o!q 9&}`&`.@P"*q=ƏwX˙)s-TDS*5`,/#4p1CND`_ Ѥ+ '.O@ުmo4O+p.2JBܮxҰ P 40'p6.$[.`$ `1Qs^pU,[&"]ႡNEJn`V(7+S$vCY(} 2+PiӛB5cy(nekNƎwn"3f8l^5:pAд` e|CG^`].Iͭ58 Wb?QXPX9g 0~J !/+QdjUz o_^N[VqAܠs \`[-4 49ەگKSEXtm4 ,,PN8-xp(c~) + cC2MAC\fޭe׆rWcgsg~P[P' <[`nu%缝~! bhgU) IUu?]V4tRJcROx>bb}vї +S7zD;jqD ϶j؆IeK Kl/Id=E }dVc?d=9u\=Z]B?"fLTݽַ@%bq;[D{y,ToR"V$`4t㨇әnAOߨA^RZ=R"(d#Dw?ᰌD@`JnWFw:F&z p*ׂaP M1NYĪQh(5é@ˏFKԬ[ R4Nb?wz 6O DL-2&s&. utI8 p4K rHpqg.ƨ?g63(7 p'%6x|bzU 26f?}H04'+~X{N 5gh/L#ޚM ,WtNTF4-l4&FRhh@L ,p=m}]+/ po·ewPyi@$MA>J zԳp'TOj@nq`x.ZWL;\Wdi~./?;+Z;$-y~w.}C6D #!В>pӆk5b;s k:[@4$0R<q) p`24?b'`&We`@<#ͼhXi[G6:,c@\e-˦f!@ j^AO*e 8 6u 4<+^X,}ZMM\Lh$ -h œ/̟{**Ez`Z ~kVQ*@9,3 p&b?-;#-ӆjOܔMqQr ;*!ݹ[ikʦ 6&@&Y hRN dAzYE:3k5u.P1hN(*i.c7 (4`f1D¥s,r,@'pZ)[^ ~Pg..Cl80*`fWE 3$+@jAF0*5 iS~v  @RժM*$*QJ"0%VGEok속#u=Laiod)(P<y3P DvDToyֹ (M5+R`l?I EkF[Ko}ot=!iވ mU=Ͽv4۱}73D؀U Ѥ11)j$|sq|SUWX+9{&,zt 8@ 3t> 94S7lU̷Uq ,d,|m^ %A?~s`Ch" `y)=ZïI Qin(})Wߨ\ſVI$YO0{2iyjͱR9Ѭ UjLӭ X,Ēh#Ts>w;c0#6@[j}[²w8x %Mmlg RL[!(|d 1SZ^7 P1-M-@fpl,(^:/!' ~ vG훈{ExdEt 6BY@U@4,J`-xQy+I-Wkϋ:ZAS.5BJ VvG? @lPjxwj!OggSBQAcZq;~;vܙu 4~=S~w,l" G% ;iD H"iL@Au}Cy6Ս7Z܄1 =Q;', @(PK| t<~+v6ԅ ~f4p,*In 4Jn}mRLKe>g*K ܯjX06 !@ .2ãr-`-H PTf nG 螪C[k 4GIGaMGH:T#h>& @z:|fW]#Z1Z-7Tnte Cf_28'9{ i vM>quV/γ$)tM#p$߀]%  p]Lz 7oflK `GHH1_aَO8r\8Nk**)"3$"Q9$>6+}%*9㺦UH&yhibZ; @0|m1%6UWeXr6hDn0Zhl4"Y@%;l~?8gJѳj ~I_(>GN-.%'LlfwA:r$,@W5" P'`b]ipuR?6#a(4$GoΣ̞e=܈#cx uĴq`*4R P:p_Q0  i̓Ȃ=L< µN K -;% 4s[YSҿbi `   >ߑNi-˷,$ӠG6 =śp `J"PdU&v$Vvn~wʓ}!=?Rw/l% T@ 6&P̷*}64jκB]Uj 0+ TV-*]2SE`FVEA(@96PCs \C^O"0( 8q}_`+$$@Pu*$qN%{%ԟB^4 !q lP6Y?#-v-B_dl E Ojp ^-W\WE6MdD < ,}R-J<5u7Ҧx<'n$P:Pԓ*Wz@k>QOH!{~^F@0Q"`w'oes[<[HZ/a 6-H. Z4 N$^s`kn";ra P P(~+px3σaٱ88 ;ęlix4'4&zxO6,&MO"W d8*qm8 %j# z H,"]+`+B9"]BtF#J-n/B)QX45u [ !/& W33|u gX-8|wD=N"0̹A#A `J4Xl <3W5:ͅ?ߢ)@8%&, O S2=-:`EٚnRAɇC O>Id &>wgN5b\^6F xA`K:>"%++=1zCA`C޹tEXޫbJ7H'ڝy 39 ϘD(p_/f*7QZ&xl.>S6 O>L~x rt`8$<жhx@BMD_vhjMTTKE4&xK\=` - 9aoCh1&W>MzÅe Wޚ-;I{~@>/./QJ~vx0 `^"kh-r 8A TP /q᫉=o\&:0Eph4",8 n`'l$nLV\ A<>OJ859Gipyt$lld~_в0ܻ8)0f]D!qfҔe*rt<۫T us<r# ow\MGO[M"Wsq;\ Xv!4B']Հ84+.̓C LB7-&6 xKS3at^m0!k^*GYЈC0ܹ_+5A A\w)Gis7(Fxzes=CfC i)Uj|eAmb :xA~ꅵqٳ'PwٚH([|NqG8;7^Ki/K_GK`5w*Lpyglet-1.1.4/examples/soundspace/reader.py0000600013464101346420000001056311266427730017021 0ustar yohyoh# ---------------------------------------------------------------------------- # 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: reader.py 2528 2009-10-12 17:23:12Z benjamin.coder.smith@gmail.com $ import os import math from pyglet import media class PlayerReader(object): def __init__(self, player): self.player = player def line(self, line, lineno): parts = line.split() if parts[0] == 'position': if len(parts) < 4: raise ReaderException('Invalid position line %d' % lineno) self.player.position = tuple([float(x) for x in parts[1:]]) if parts[0] == 'cone_orientation': if len(parts) < 4: raise ReaderException('Invalid orientation line %d' % lineno) self.player.cone_orientation = tuple([float(x) for x in parts[1:]]) elif parts[0] == 'outer_cone_angle': if len(parts) < 2: raise ReaderException('Invalid angle line %d' % lineno) self.player.cone_outer_angle = float(parts[1]) elif parts[0] == 'inner_cone_angle': if len(parts) < 2: raise ReaderException('Invalid angle line %d' % lineno) self.player.cone_inner_angle = float(parts[1]) elif parts[0] == 'label': if len(parts) < 2: raise ReaderException('Invalid label line %d' % lineno) self.player.label = parts[1] class SpaceReader(object): def __init__(self, space): self.basedir = '' self.space = space def read(self, file): if not hasattr(file, 'read'): self.basedir = os.path.dirname(file) file = open(file, 'rt') elif hasattr(file, 'name'): self.basedir = os.path.dirname(file.name) reader = None lineno = 0 for line in file: lineno += 1 if not line.strip() or line.startswith('#'): continue if line.startswith(' '): if not reader: raise ReaderException( 'Unexpected indented block line %d' % lineno) reader.line(line, lineno) else: reader = None parts = line.split() if parts[0] == 'loop': if len(parts) < 2: raise ReaderException( 'No loop filename line %d' % lineno) player = media.Player() player.eos_action = 'loop' player.queue(self.source(parts[1], streaming=False)) self.space.add_player(player) reader = PlayerReader(player) def source(self, filename, **kwargs): filename = os.path.join(self.basedir, filename) return media.load(filename, **kwargs) pyglet-1.1.4/examples/timer.py0000700013464101346420000000625711266427730014541 0ustar yohyoh#!/usr/bin/env python # ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- '''A full-screen minute:second timer. Leave it in charge of your conference lighting talks. After 5 minutes, the timer goes red. This limit is easily adjustable by hacking the source code. Press spacebar to start, stop and reset the timer. ''' import pyglet window = pyglet.window.Window(fullscreen=True) class Timer(object): def __init__(self): self.label = pyglet.text.Label('00:00', font_size=360, x=window.width//2, y=window.height//2, anchor_x='center', anchor_y='center') self.reset() def reset(self): self.time = 0 self.running = False self.label.text = '00:00' self.label.color = (255, 255, 255, 255) def update(self, dt): if self.running: self.time += dt m, s = divmod(self.time, 60) self.label.text = '%02d:%02d' % (m, s) if m >= 5: self.label.color = (180, 0, 0, 255) @window.event def on_key_press(symbol, modifiers): if symbol == pyglet.window.key.SPACE: if timer.running: timer.running = False else: if timer.time > 0: timer.reset() else: timer.running = True elif symbol == pyglet.window.key.ESCAPE: window.close() @window.event def on_draw(): window.clear() timer.label.draw() timer = Timer() pyglet.clock.schedule_interval(timer.update, 1) pyglet.app.run() pyglet-1.1.4/examples/video.py0000700013464101346420000000462011266427730014517 0ustar yohyoh#!/usr/bin/env python # ---------------------------------------------------------------------------- # 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 example of video playback. Usage:: video.py See the Programming Guide for a partial list of supported video formats. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: video.py 1967 2008-03-23 07:02:51Z Alex.Holkner $' import sys import pyglet if len(sys.argv) < 2: print __doc__ sys.exit(1) source = pyglet.media.load(sys.argv[1]) format = source.video_format if not format: print 'No video track in this source.' sys.exit(1) player = pyglet.media.Player() player.queue(source) player.play() window = pyglet.window.Window(width=format.width, height=format.height) @window.event def on_draw(): player.get_texture().blit(0, 0) pyglet.app.run() pyglet-1.1.4/examples/media_player.py0000700013464101346420000002616111266427730016050 0ustar yohyoh#!/usr/bin/env python # ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- '''Audio and video player with simple GUI controls. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import sys from pyglet.gl import * import pyglet from pyglet.window import key def draw_rect(x, y, width, height): glBegin(GL_LINE_LOOP) glVertex2f(x, y) glVertex2f(x + width, y) glVertex2f(x + width, y + height) glVertex2f(x, y + height) glEnd() class Control(pyglet.event.EventDispatcher): x = y = 0 width = height = 10 def __init__(self, parent): super(Control, self).__init__() self.parent = parent def hit_test(self, x, y): return (self.x < x < self.x + self.width and self.y < y < self.y + self.height) def capture_events(self): self.parent.push_handlers(self) def release_events(self): self.parent.remove_handlers(self) class Button(Control): charged = False def draw(self): if self.charged: glColor3f(1, 0, 0) draw_rect(self.x, self.y, self.width, self.height) glColor3f(1, 1, 1) self.draw_label() def on_mouse_press(self, x, y, button, modifiers): self.capture_events() self.charged = True def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers): self.charged = self.hit_test(x, y) def on_mouse_release(self, x, y, button, modifiers): self.release_events() if self.hit_test(x, y): self.dispatch_event('on_press') self.charged = False Button.register_event_type('on_press') class TextButton(Button): def __init__(self, *args, **kwargs): super(TextButton, self).__init__(*args, **kwargs) self._text = pyglet.text.Label('', anchor_x='center', anchor_y='center') def draw_label(self): self._text.x = self.x + self.width / 2 self._text.y = self.y + self.height / 2 self._text.draw() def set_text(self, text): self._text.text = text text = property(lambda self: self._text.text, set_text) class Slider(Control): THUMB_WIDTH = 6 THUMB_HEIGHT = 10 GROOVE_HEIGHT = 2 def draw(self): center_y = self.y + self.height / 2 draw_rect(self.x, center_y - self.GROOVE_HEIGHT / 2, self.width, self.GROOVE_HEIGHT) pos = self.x + self.value * self.width / (self.max - self.min) draw_rect(pos - self.THUMB_WIDTH / 2, center_y - self.THUMB_HEIGHT / 2, self.THUMB_WIDTH, self.THUMB_HEIGHT) def coordinate_to_value(self, x): return float(x - self.x) / self.width * (self.max - self.min) + self.min def on_mouse_press(self, x, y, button, modifiers): value = self.coordinate_to_value(x) self.capture_events() self.dispatch_event('on_begin_scroll') self.dispatch_event('on_change', value) def on_mouse_drag(self, x, y, dx, dy, buttons, modifiers): value = min(max(self.coordinate_to_value(x), self.min), self.max) self.dispatch_event('on_change', value) def on_mouse_release(self, x, y, button, modifiers): self.release_events() self.dispatch_event('on_end_scroll') Slider.register_event_type('on_begin_scroll') Slider.register_event_type('on_end_scroll') Slider.register_event_type('on_change') class PlayerWindow(pyglet.window.Window): GUI_WIDTH = 400 GUI_HEIGHT = 40 GUI_PADDING = 4 GUI_BUTTON_HEIGHT = 16 def __init__(self, player): super(PlayerWindow, self).__init__(caption='Media Player', visible=False, resizable=True) self.player = player self.player.push_handlers(self) self.player.eos_action = self.player.EOS_PAUSE self.slider = Slider(self) self.slider.x = self.GUI_PADDING self.slider.y = self.GUI_PADDING * 2 + self.GUI_BUTTON_HEIGHT self.slider.on_begin_scroll = lambda: player.pause() self.slider.on_end_scroll = lambda: player.play() self.slider.on_change = lambda value: player.seek(value) self.play_pause_button = TextButton(self) self.play_pause_button.x = self.GUI_PADDING self.play_pause_button.y = self.GUI_PADDING self.play_pause_button.height = self.GUI_BUTTON_HEIGHT self.play_pause_button.width = 45 self.play_pause_button.on_press = self.on_play_pause win = self self.window_button = TextButton(self) self.window_button.x = self.play_pause_button.x + \ self.play_pause_button.width + self.GUI_PADDING self.window_button.y = self.GUI_PADDING self.window_button.height = self.GUI_BUTTON_HEIGHT self.window_button.width = 90 self.window_button.text = 'Windowed' self.window_button.on_press = lambda: win.set_fullscreen(False) self.controls = [ self.slider, self.play_pause_button, self.window_button, ] x = self.window_button.x + self.window_button.width + self.GUI_PADDING i = 0 for screen in self.display.get_screens(): screen_button = TextButton(self) screen_button.x = x screen_button.y = self.GUI_PADDING screen_button.height = self.GUI_BUTTON_HEIGHT screen_button.width = 80 screen_button.text = 'Screen %d' % (i + 1) screen_button.on_press = \ (lambda s: lambda: win.set_fullscreen(True, screen=s))(screen) self.controls.append(screen_button) i += 1 x += screen_button.width + self.GUI_PADDING def on_eos(self): self.gui_update_state() def gui_update_source(self): if self.player.source: source = self.player.source self.slider.min = 0. self.slider.max = source.duration self.gui_update_state() def gui_update_state(self): if self.player.playing: self.play_pause_button.text = 'Pause' else: self.play_pause_button.text = 'Play' def get_video_size(self): if not self.player.source or not self.player.source.video_format: return 0, 0 video_format = self.player.source.video_format width = video_format.width height = video_format.height if video_format.sample_aspect > 1: width *= video_format.sample_aspect elif video_format.sample_aspect < 1: height /= video_format.sample_aspect return width, height def set_default_video_size(self): '''Make the window size just big enough to show the current video and the GUI.''' width = self.GUI_WIDTH height = self.GUI_HEIGHT video_width, video_height = self.get_video_size() width = max(width, video_width) height += video_height self.set_size(int(width), int(height)) def on_resize(self, width, height): '''Position and size video image.''' super(PlayerWindow, self).on_resize(width, height) self.slider.width = width - self.GUI_PADDING * 2 height -= self.GUI_HEIGHT if height <= 0: return video_width, video_height = self.get_video_size() if video_width == 0 or video_height == 0: return display_aspect = width / float(height) video_aspect = video_width / float(video_height) if video_aspect > display_aspect: self.video_width = width self.video_height = width / video_aspect else: self.video_height = height self.video_width = height * video_aspect self.video_x = (width - self.video_width) / 2 self.video_y = (height - self.video_height) / 2 + self.GUI_HEIGHT def on_mouse_press(self, x, y, button, modifiers): for control in self.controls: if control.hit_test(x, y): control.on_mouse_press(x, y, button, modifiers) def on_key_press(self, symbol, modifiers): if symbol == key.SPACE: self.on_play_pause() elif symbol == key.ESCAPE: self.dispatch_event('on_close') def on_close(self): self.player.pause() self.close() def on_play_pause(self): if self.player.playing: self.player.pause() else: if self.player.time >= self.player.source.duration: self.player.seek(0) self.player.play() self.gui_update_state() def on_draw(self): self.clear() # Video if self.player.source and self.player.source.video_format: self.player.get_texture().blit(self.video_x, self.video_y, width=self.video_width, height=self.video_height) # GUI self.slider.value = self.player.time for control in self.controls: control.draw() if __name__ == '__main__': if len(sys.argv) < 2: print 'Usage: media_player.py [ ...]' sys.exit(1) for filename in sys.argv[1:]: player = pyglet.media.Player() window = PlayerWindow(player) source = pyglet.media.load(filename) player.queue(source) window.gui_update_source() window.set_default_video_size() window.set_visible(True) window.gui_update_state() player.play() pyglet.app.run() pyglet-1.1.4/examples/events.py0000700013464101346420000000367011266427730014721 0ustar yohyoh#!/usr/bin/env python # ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- '''Prints all window events to stdout. ''' import pyglet window = pyglet.window.Window(resizable=True) @window.event def on_draw(): window.clear() window.push_handlers(pyglet.window.event.WindowEventLogger()) pyglet.app.run() pyglet-1.1.4/examples/html_label.py0000700013464101346420000000554711266427730015525 0ustar yohyoh#!/usr/bin/env python # ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- '''A simple demonstration of the HTMLLabel class, as it might be used on a help or introductory screen. ''' __docformat__ = 'restructuredtext' __version__ = '$Id: $' import os import pyglet html = '''

HTML labels in pyglet

HTML labels are a simple way to add formatted text to your application. Different fonts, styles and colours are supported.

This window has been made resizable; text will reflow to fit the new size. ''' window = pyglet.window.Window(resizable=True) location = pyglet.resource.FileLocation(os.path.dirname(__file__)) label = pyglet.text.HTMLLabel(html, location=location, width=window.width, multiline=True, anchor_y='center') @window.event def on_resize(width, height): # Wrap text to the width of the window label.width = window.width # Keep text vertically centered in the window label.y = window.height // 2 @window.event def on_draw(): window.clear() label.draw() pyglet.gl.glClearColor(1, 1, 1, 1) pyglet.app.run() pyglet-1.1.4/examples/programming_guide/0002700013464101346420000000000011505734504016527 5ustar yohyohpyglet-1.1.4/examples/programming_guide/animation.py0000700013464101346420000000530311266427727021074 0ustar yohyoh#!/usr/bin/env python # ---------------------------------------------------------------------------- # 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 and display a GIF animation. Usage:: animation.py [] If the filename is omitted, a sample animation is loaded ''' __docformat__ = 'restructuredtext' __version__ = '$Id: animation.py 1967 2008-03-23 07:02:51Z Alex.Holkner $' # The dinosaur.gif file packaged alongside this script is in the public # domain, it was obtained from http://www.gifanimations.com/. import sys import pyglet if len(sys.argv) > 1: # Load the animation from file path. animation = pyglet.image.load_animation(sys.argv[1]) bin = pyglet.image.atlas.TextureBin() animation.add_to_texture_bin(bin) else: # Load animation from resource (this script's directory). animation = pyglet.resource.animation('dinosaur.gif') sprite = pyglet.sprite.Sprite(animation) window = pyglet.window.Window(width=sprite.width, height=sprite.height) # Set window background color to white. pyglet.gl.glClearColor(1, 1, 1, 1) @window.event def on_draw(): window.clear() sprite.draw() pyglet.app.run() pyglet-1.1.4/examples/programming_guide/hello_world.py0000700013464101346420000000432611266427727021433 0ustar yohyoh#!/usr/bin/env python # ---------------------------------------------------------------------------- # 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: hello_world.py 2090 2008-05-29 12:49:25Z Alex.Holkner $' import pyglet window = pyglet.window.Window() label = pyglet.text.Label('Hello, world', font_name='Times New Roman', font_size=36, x=window.width//2, y=window.height//2, anchor_x='center', anchor_y='center') @window.event def on_draw(): window.clear() label.draw() pyglet.app.run() pyglet-1.1.4/examples/programming_guide/events.py0000700013464101346420000000461111266427727020422 0ustar yohyoh#!/usr/bin/env python # ---------------------------------------------------------------------------- # 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: events.py 1966 2008-03-23 07:01:26Z Alex.Holkner $' import pyglet from pyglet.window import key from pyglet.window import mouse window = pyglet.window.Window() @window.event def on_key_press(symbol, modifiers): if symbol == key.A: print 'The "A" key was pressed.' elif symbol == key.LEFT: print 'The left arrow key was pressed.' elif symbol == key.ENTER: print 'The enter key was pressed.' @window.event def on_mouse_press(x, y, button, modifiers): if button == mouse.LEFT: print 'The left mouse button was pressed.' @window.event def on_draw(): window.clear() pyglet.app.run() pyglet-1.1.4/examples/programming_guide/window_subclass.py0000700013464101346420000000416711266427727022332 0ustar yohyoh#!/usr/bin/env python # ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- '''Demonstrates a useful pattern for pyglet applications: subclassing Window. ''' import pyglet class HelloWorldWindow(pyglet.window.Window): def __init__(self): super(HelloWorldWindow, self).__init__() self.label = pyglet.text.Label('Hello, world!') def on_draw(self): self.clear() self.label.draw() if __name__ == '__main__': window = HelloWorldWindow() pyglet.app.run() pyglet-1.1.4/examples/programming_guide/image_viewer.py0000700013464101346420000000377311266427727021571 0ustar yohyoh#!/usr/bin/env python # ---------------------------------------------------------------------------- # 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: image_viewer.py 1966 2008-03-23 07:01:26Z Alex.Holkner $' import pyglet window = pyglet.window.Window() image = pyglet.resource.image('kitten.jpg') @window.event def on_draw(): window.clear() image.blit(0, 0) pyglet.app.run() pyglet-1.1.4/examples/window_platform_event.py0000700013464101346420000000642711266427730020034 0ustar yohyoh#!/usr/bin/env python # ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- '''Demonstrates how to handle a platform-specific event not defined in pyglet by subclassing Window. This is not for the faint-hearted! A message will be printed to stdout when the following events are caught: - On Mac OS X, the window drag region is clicked. - On Windows, the display resolution is changed. - On Linux, the window properties are changed. ''' import pyglet # Check for Carbon (OS X) try: from pyglet.window.carbon import * _have_carbon = True except ImportError: _have_carbon = False # Check for Win32 try: from pyglet.window.win32 import * from pyglet.window.win32.constants import * _have_win32 = True except ImportError: _have_win32 = False # Check for Xlib (Linux) try: from pyglet.window.xlib import * _have_xlib = True except ImportError: _have_xlib = False # Subclass Window class MyWindow(pyglet.window.Window): if _have_carbon: @CarbonEventHandler(kEventClassWindow, kEventWindowClickDragRgn) def _on_window_click_drag_rgn(self, next_handler, event, data): print 'Clicked drag rgn.' carbon.CallNextEventHandler(next_handler, event) return noErr if _have_win32: @Win32EventHandler(WM_DISPLAYCHANGE) def _on_window_display_change(self, msg, lParam, wParam): print 'Display resolution changed.' return 0 if _have_xlib: @XlibEventHandler(xlib.PropertyNotify) def _on_window_property_notify(self, event): print 'Property notify.' if __name__ == '__main__': window = MyWindow() pyglet.app.run() pyglet-1.1.4/examples/image_display.py0000700013464101346420000000536511266427730016227 0ustar yohyoh#!/usr/bin/env python # ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- '''Display an image. Usage:: display.py A checkerboard background is visible behind any transparent areas of the image. ''' import sys import pyglet from pyglet.gl import * window = pyglet.window.Window(visible=False, resizable=True) @window.event def on_draw(): background.blit_tiled(0, 0, 0, window.width, window.height) img.blit(window.width // 2, window.height // 2, 0) if __name__ == '__main__': if len(sys.argv) != 2: print __doc__ sys.exit(1) filename = sys.argv[1] img = pyglet.image.load(filename).get_texture(rectangle=True) img.anchor_x = img.width // 2 img.anchor_y = img.height // 2 checks = pyglet.image.create(32, 32, pyglet.image.CheckerImagePattern()) background = pyglet.image.TileableTexture.create_for_image(checks) # Enable alpha blending, required for image.blit. glEnable(GL_BLEND) glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) window.width = img.width window.height = img.height window.set_visible() pyglet.app.run() pyglet-1.1.4/examples/multiple_windows.py0000700013464101346420000000524011266427730017015 0ustar yohyoh#!/usr/bin/env python # ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- '''Demonstrates how to manage OpenGL calls between two independent windows. ''' import pyglet from pyglet.gl import * def on_resize(width, height): glViewport(0, 0, width, height) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(60., width / float(height), 1., 100.) glMatrixMode(GL_MODELVIEW) def setup(): glClearColor(1, 1, 1, 1) glColor3f(.5, .5, .5) def on_draw(): glClear(GL_COLOR_BUFFER_BIT) glLoadIdentity() glTranslatef(0, 0, -5) glRotatef(r, 0, 0, 1) glRectf(-1, -1, 1, 1) r = 0 def update(dt): global r r += 1 if r > 360: r = 0 pyglet.clock.schedule_interval(update, 1/20.) w1 = pyglet.window.Window(200, 200, caption='First window', resizable=True) w1.on_resize = on_resize w1.on_draw = on_draw w1.switch_to() setup() w2 = pyglet.window.Window(300, 300, caption='Second window', resizable=True) w2.on_resize = on_resize w2.on_draw = on_draw w2.switch_to() setup() pyglet.app.run() pyglet-1.1.4/examples/image_convert.py0000700013464101346420000000461411266427730016236 0ustar yohyoh#!/usr/bin/env python # ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- '''Convert an image to another file format supported by pyglet. Usage:: python image_convert.py ''' import sys import pyglet def convert(src, dest): if '.dds' in src.lower(): # Compressed textures need to be uploaded to the video card before # they can be saved. texture = pyglet.image.load(src).get_texture() texture.save(dest) else: # Otherwise just save the loaded image in the new format. image = pyglet.image.load(src) image.save(dest) if __name__ == '__main__': if len(sys.argv) != 3: print __doc__ sys.exit(1) src = sys.argv[1] dest = sys.argv[2] convert(src, dest) pyglet-1.1.4/examples/opengl.py0000700013464101346420000001440611266427730014700 0ustar yohyoh#!/usr/bin/env python # ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- '''Displays a rotating torus using OpenGL. This example demonstrates: * Using a 3D projection on a window by overriding the default on_resize handler * Enabling multisampling if available * Drawing a simple 3D primitive using vertex and index arrays * Using a display list * Fixed-pipeline lighting ''' from math import pi, sin, cos from pyglet.gl import * import pyglet try: # Try and create a window with multisampling (antialiasing) config = Config(sample_buffers=1, samples=4, depth_size=16, double_buffer=True,) window = pyglet.window.Window(resizable=True, config=config) except pyglet.window.NoSuchConfigException: # Fall back to no multisampling for old hardware window = pyglet.window.Window(resizable=True) @window.event def on_resize(width, height): # Override the default on_resize handler to create a 3D projection glViewport(0, 0, width, height) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(60., width / float(height), .1, 1000.) glMatrixMode(GL_MODELVIEW) return pyglet.event.EVENT_HANDLED def update(dt): global rx, ry, rz rx += dt * 1 ry += dt * 80 rz += dt * 30 rx %= 360 ry %= 360 rz %= 360 pyglet.clock.schedule(update) @window.event def on_draw(): glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glLoadIdentity() glTranslatef(0, 0, -4) glRotatef(rz, 0, 0, 1) glRotatef(ry, 0, 1, 0) glRotatef(rx, 1, 0, 0) torus.draw() def setup(): # One-time GL setup glClearColor(1, 1, 1, 1) glColor3f(1, 0, 0) glEnable(GL_DEPTH_TEST) glEnable(GL_CULL_FACE) # Uncomment this line for a wireframe view #glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) # Simple light setup. On Windows GL_LIGHT0 is enabled by default, # but this is not the case on Linux or Mac, so remember to always # include it. glEnable(GL_LIGHTING) glEnable(GL_LIGHT0) glEnable(GL_LIGHT1) # Define a simple function to create ctypes arrays of floats: def vec(*args): return (GLfloat * len(args))(*args) glLightfv(GL_LIGHT0, GL_POSITION, vec(.5, .5, 1, 0)) glLightfv(GL_LIGHT0, GL_SPECULAR, vec(.5, .5, 1, 1)) glLightfv(GL_LIGHT0, GL_DIFFUSE, vec(1, 1, 1, 1)) glLightfv(GL_LIGHT1, GL_POSITION, vec(1, 0, .5, 0)) glLightfv(GL_LIGHT1, GL_DIFFUSE, vec(.5, .5, .5, 1)) glLightfv(GL_LIGHT1, GL_SPECULAR, vec(1, 1, 1, 1)) glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.5, 0, 0.3, 1)) glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, vec(1, 1, 1, 1)) glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 50) class Torus(object): def __init__(self, radius, inner_radius, slices, inner_slices): # Create the vertex and normal arrays. vertices = [] normals = [] u_step = 2 * pi / (slices - 1) v_step = 2 * pi / (inner_slices - 1) u = 0. for i in range(slices): cos_u = cos(u) sin_u = sin(u) v = 0. for j in range(inner_slices): cos_v = cos(v) sin_v = sin(v) d = (radius + inner_radius * cos_v) x = d * cos_u y = d * sin_u z = inner_radius * sin_v nx = cos_u * cos_v ny = sin_u * cos_v nz = sin_v vertices.extend([x, y, z]) normals.extend([nx, ny, nz]) v += v_step u += u_step # Create ctypes arrays of the lists vertices = (GLfloat * len(vertices))(*vertices) normals = (GLfloat * len(normals))(*normals) # Create a list of triangle indices. indices = [] for i in range(slices - 1): for j in range(inner_slices - 1): p = i * inner_slices + j indices.extend([p, p + inner_slices, p + inner_slices + 1]) indices.extend([p, p + inner_slices + 1, p + 1]) indices = (GLuint * len(indices))(*indices) # Compile a display list self.list = glGenLists(1) glNewList(self.list, GL_COMPILE) glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT) glEnableClientState(GL_VERTEX_ARRAY) glEnableClientState(GL_NORMAL_ARRAY) glVertexPointer(3, GL_FLOAT, 0, vertices) glNormalPointer(GL_FLOAT, 0, normals) glDrawElements(GL_TRIANGLES, len(indices), GL_UNSIGNED_INT, indices) glPopClientAttrib() glEndList() def draw(self): glCallList(self.list) setup() torus = Torus(1, 0.3, 50, 30) rx = ry = rz = 0 pyglet.app.run() pyglet-1.1.4/examples/pyglet.png0000600013464101346420000001465711266427730015063 0ustar yohyohPNG  IHDR>abKGD pHYstIME5woMdRyUS3:%8(0B@vD!-`YH0!! 0[upvw~9BJɭ!D8ЫBPPU-] N'R ܳjB8`p.ǁWN)exV$~^: ~`vR6!{?x x_ XJ\z"vlg{ !>^YX.U|& |RzЌr;{{}{U!bܞX<'̿! Xy/nbX'bkɩTUu~oyc q!} NΚES㛚9SSÉJ_ȁ2Cm;qY)[[xS̊7.^$̒;GE}++R[B2 S̞ˆ~&ӧPXH1s70GJY |=4BLdϜIPNoe,**\I)Zw~g/V"HL@֌ը]~9`Dž)03X3a#\\ZH!ڕ6?q]`@bb8R^`g4CR\eOc`v gyV+KF`jn\%%R;w&u$3o>rk?D!0:lBD끡zߟ@R|9g/]rx#3f?,'>YY\ijrR2#"3{))ćΟg߶h2'Oqgvˢ"g&=4E''>#ף޷/qV+22cr2f]o`"'46gUV+hln&f2&!h !R_UEQ55d|%ybӹsc7,-MOBnFhQL~mP%*-K үә:06:Yqq!9" 1>S b"%*׆*{݃%.wI%?đ"B:d<@o s뫧55:yyGb ̙BJɤMt )g b9͐3|DGB~LMw(Wd3cOJcrr%jI%uORb^8pჱM&HNf}1#.ΩabH?"CBX0p飄iJDŘ24$X: 0dzgOq,20ϯ"?_)̻dĈN̝сl^0lofltҹ8vO#F>^1BPz3tQ覾m 'N$ {L&) }!#6ΝUOYZYi*W19:4tGDuЁ / u]T4EKuUR"#mE 071X;}&u=|. T3K`/Do%ɕlfqF=WmPf-xJ95:_D'W Ӈ<Uu[?[7my1xxL*OfN.ߟyI[,|h<豇;My >?MV._v!0'!5֜-GPsrnϕ 3_'\EqQJλ)\Ȕ]$05SD}W /w rPt6ٌs6Ee:\S񆹏"H&wFɎF/̯+N[ϝ+دtLy5_(\+%ݱJ~uWসU,EFŪq^"@.9vmcэs/M tr 2JoI)^Q#ZO|5+)0~Ҧd`@x8j!- ЋU3׾%F]6[K<{rrν 5Xr2f`;(cƍ,581:]JZ8eܭfUKxNknf<׆'d|ǐի'wuzjA'4@KOJ߲iwm۔*':e۬Bxk(1`AaaNS'رMҙjmźK-JN645BBScFWPTYJJ pZV4IISs3@vS.(FDFz ;zrq3 {{7 ild?~@zeB&>Y,x^36Y;(3 {/ݶڻ*HOF9q(P% 7PevwI^z")$S2QC<T_Z[hMγ{{EޝӦU+LQx{ PRZ,;r$gdnb"Xؑˊ S(C L;MQ\t$5 ⭣GYTo@FFE^sejs@5Ц p3_];QWαtRg޶ny9[SCE]ǃgKssiP|eV*9 ,3NW:7Ϗu&0NQs'Oݻ`B? XkUT#Z%F0#BuC}s XaxXcs3}V{}ǭ-(`ږ-*R^S5-ʕ>u bDkq#Oy[M&^<إk N8!fp8)- W7=u^_|Gטt ?!`(g!JRkfHO))zZ|Cߕ+YxRtUp1ɍ:dFS~k>i>-P^WLjk]*fcV|15eaj8^Yɑ ^J._6L%%9hqv۔M ([E_[|=yGʲN=lSc4ܥ*wij{x=c dۤIkm >ܩaRJݳGO6ehrprl,*M /Fzx oؚ5*/Wx#߷w3%&ܡ$W=b1K¯Dxa޽[k2p}+kO7o_6gނc_ŧIA WZu(omho*;-0)-|=JV?0Tϸxeii>642'3ә<K{һDl.]X0p`/Y\¬,6VScx^4.OuR"#Y0hPk Xxꦍ6If`!"I%`X۹3cbC0dWTQRbd9} ,mhA(Ad@11 FxMZdi)ۊUQ?U3y-Zhy(dtZeX~S@~M TnIx:Z!x*ٻWI)Q܆v`0^J7u ЊFH^I/b;f൶hAab^p!@DHՎLgL}Ze;OcÀ.^k㖥| HiG2-w`"[c;6w6!B[bp.`ﴱk )^-؃Q!@y{ԫGY=&Wx/xRIENDB`pyglet-1.1.4/examples/graphics.py0000700013464101346420000001427411266427730015217 0ustar yohyoh#!/usr/bin/env python # ---------------------------------------------------------------------------- # 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. # ---------------------------------------------------------------------------- '''Displays a rotating torus using the pyglet.graphics API. This example is very similar to examples/opengl.py, but uses the pyglet.graphics API to construct the indexed vertex arrays instead of using OpenGL calls explicitly. This has the advantage that VBOs will be used on supporting hardware automatically. The vertex list is added to a batch, allowing it to be easily rendered alongside other vertex lists with minimal overhead. ''' from math import pi, sin, cos import pyglet from pyglet.gl import * try: # Try and create a window with multisampling (antialiasing) config = Config(sample_buffers=1, samples=4, depth_size=16, double_buffer=True,) window = pyglet.window.Window(resizable=True, config=config) except pyglet.window.NoSuchConfigException: # Fall back to no multisampling for old hardware window = pyglet.window.Window(resizable=True) @window.event def on_resize(width, height): # Override the default on_resize handler to create a 3D projection glViewport(0, 0, width, height) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(60., width / float(height), .1, 1000.) glMatrixMode(GL_MODELVIEW) return pyglet.event.EVENT_HANDLED def update(dt): global rx, ry, rz rx += dt * 1 ry += dt * 80 rz += dt * 30 rx %= 360 ry %= 360 rz %= 360 pyglet.clock.schedule(update) @window.event def on_draw(): glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glLoadIdentity() glTranslatef(0, 0, -4) glRotatef(rz, 0, 0, 1) glRotatef(ry, 0, 1, 0) glRotatef(rx, 1, 0, 0) batch.draw() def setup(): # One-time GL setup glClearColor(1, 1, 1, 1) glColor3f(1, 0, 0) glEnable(GL_DEPTH_TEST) glEnable(GL_CULL_FACE) # Uncomment this line for a wireframe view #glPolygonMode(GL_FRONT_AND_BACK, GL_LINE) # Simple light setup. On Windows GL_LIGHT0 is enabled by default, # but this is not the case on Linux or Mac, so remember to always # include it. glEnable(GL_LIGHTING) glEnable(GL_LIGHT0) glEnable(GL_LIGHT1) # Define a simple function to create ctypes arrays of floats: def vec(*args): return (GLfloat * len(args))(*args) glLightfv(GL_LIGHT0, GL_POSITION, vec(.5, .5, 1, 0)) glLightfv(GL_LIGHT0, GL_SPECULAR, vec(.5, .5, 1, 1)) glLightfv(GL_LIGHT0, GL_DIFFUSE, vec(1, 1, 1, 1)) glLightfv(GL_LIGHT1, GL_POSITION, vec(1, 0, .5, 0)) glLightfv(GL_LIGHT1, GL_DIFFUSE, vec(.5, .5, .5, 1)) glLightfv(GL_LIGHT1, GL_SPECULAR, vec(1, 1, 1, 1)) glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.5, 0, 0.3, 1)) glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, vec(1, 1, 1, 1)) glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 50) class Torus(object): list = None def __init__(self, radius, inner_radius, slices, inner_slices, batch, group=None): # Create the vertex and normal arrays. vertices = [] normals = [] u_step = 2 * pi / (slices - 1) v_step = 2 * pi / (inner_slices - 1) u = 0. for i in range(slices): cos_u = cos(u) sin_u = sin(u) v = 0. for j in range(inner_slices): cos_v = cos(v) sin_v = sin(v) d = (radius + inner_radius * cos_v) x = d * cos_u y = d * sin_u z = inner_radius * sin_v nx = cos_u * cos_v ny = sin_u * cos_v nz = sin_v vertices.extend([x, y, z]) normals.extend([nx, ny, nz]) v += v_step u += u_step # Create a list of triangle indices. indices = [] for i in range(slices - 1): for j in range(inner_slices - 1): p = i * inner_slices + j indices.extend([p, p + inner_slices, p + inner_slices + 1]) indices.extend([p, p + inner_slices + 1, p + 1]) self.vertex_list = batch.add_indexed(len(vertices)//3, GL_TRIANGLES, group, indices, ('v3f/static', vertices), ('n3f/static', normals)) def delete(self): self.vertex_list.delete() setup() batch = pyglet.graphics.Batch() torus = Torus(1, 0.3, 50, 30, batch=batch) rx = ry = rz = 0 pyglet.app.run() pyglet-1.1.4/examples/fixed_resolution.py0000700013464101346420000001334511266427730016777 0ustar yohyoh#!/usr/bin/env python # ---------------------------------------------------------------------------- # 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:$ '''Demonstrates one way of fixing the display resolution to a certain size, but rendering to the full screen. The method used in this example is: 1. Set the OpenGL viewport to the fixed resolution 2. Render the scene using any OpenGL functions (here, just a polygon) 3. Copy the framebuffer into a texture 4. Reset the OpenGL viewport to the window (full screen) size 5. Blit the texture to the framebuffer Recent video cards could also render the scene directly to the texture using EXT_framebuffer_object. (This is not demonstrated in this example). ''' from pyglet.gl import * import pyglet # Create a fullscreen window using the user's desktop resolution. You can # also use this technique on ordinary resizable windows. window = pyglet.window.Window(fullscreen=True) # Use 320x200 fixed resolution to make the effect completely obvious. You # can change this to a more reasonable value such as 800x600 here. target_resolution = 320, 200 class FixedResolutionViewport(object): def __init__(self, window, width, height, filtered=False): self.window = window self.width = width self.height = height self.texture = pyglet.image.Texture.create(width, height, rectangle=True) if not filtered: # By default the texture will be bilinear filtered when scaled # up. If requested, turn filtering off. This makes the image # aliased, but is more suitable for pixel art. glTexParameteri(self.texture.target, GL_TEXTURE_MAG_FILTER, GL_NEAREST) glTexParameteri(self.texture.target, GL_TEXTURE_MIN_FILTER, GL_NEAREST) def begin(self): glViewport(0, 0, self.width, self.height) self.set_fixed_projection() def end(self): buffer = pyglet.image.get_buffer_manager().get_color_buffer() self.texture.blit_into(buffer, 0, 0, 0) glViewport(0, 0, self.window.width, self.window.height) self.set_window_projection() aspect_width = self.window.width / float(self.width) aspect_height = self.window.height / float(self.height) if aspect_width > aspect_height: scale_width = aspect_height * self.width scale_height = aspect_height * self.height else: scale_width = aspect_width * self.width scale_height = aspect_width * self.height x = (self.window.width - scale_width) / 2 y = (self.window.height - scale_height) / 2 glClearColor(0, 0, 0, 1) glClear(GL_COLOR_BUFFER_BIT) glLoadIdentity() glColor3f(1, 1, 1) self.texture.blit(x, y, width=scale_width, height=scale_height) def set_fixed_projection(self): # Override this method if you need to change the projection of the # fixed resolution viewport. glMatrixMode(GL_PROJECTION) glLoadIdentity() glOrtho(0, self.width, 0, self.height, -1, 1) glMatrixMode(GL_MODELVIEW) def set_window_projection(self): # This is the same as the default window projection, reprinted here # for clarity. glMatrixMode(GL_PROJECTION) glLoadIdentity() glOrtho(0, self.window.width, 0, self.window.height, -1, 1) glMatrixMode(GL_MODELVIEW) target_width, target_height = target_resolution viewport = FixedResolutionViewport(window, target_width, target_height, filtered=False) def draw_scene(): '''Draw the scene, assuming the fixed resolution viewport and projection have been set up. This just draws the rotated polygon.''' glClearColor(1, 1, 1, 1) glClear(GL_COLOR_BUFFER_BIT) glLoadIdentity() w, h = target_resolution glTranslatef(w/2, h/2, 0) glRotatef(rotate, 0, 0, 1) glColor3f(1, 0, 0) s = min(w, h) / 3 glRectf(-s, -s, s, s) rotate = 0 def update(dt): global rotate rotate += dt * 20 pyglet.clock.schedule_interval(update, 1/60.) @window.event def on_draw(): viewport.begin() window.clear() draw_scene() viewport.end() pyglet.app.run() pyglet-1.1.4/CHANGELOG0000600013464101346420000005260511272314531012427 0ustar yohyoh1.1.4 * Bugfix release http://code.google.com/p/pyglet/issues/list * Issue 368: permission issues with some doc and example files * Issue 381: Missing attribute in VertexDomain when changing the group attribute of a sprite multiple times * Issue 382: evdev device name unicode problem * Issue 390: Various typos and keyword errors in pyglet * Issue 391: code cleanups for pyglet.image * Issue 392: code cleanups for text and font * Issue 393: code cleanup for input and app * Issue 407: random crash with pyglet.clock.tick() * Issue 408: IncrementalTextLayout, when deleted, still renders into its batch on document update * Issue 410: typo in pyglet/font/base.py * Issue 413: TileableTexture interchanges red and blue in some JPGs * Issue 414: Carbon platform missing support for multiple mouse buttons during drag * Issue 416: Endless loop in pyglet.resource.reindex() * Issue 422: Documentation: pyglet.resource and pats * Issue 423: glMultiDrawElements called with incorrect arguments in method IndexedVertexDomain.draw * Issue 424: Small documentation error in document layout model page * Issue 426: Attempt to load resource from zipfile with no internal directory structure fails * Issue 436: QuickTimeImageDecoder leaks memory * Issue 439: EVENT_CLOSE test can't be passed * Issue 440: tests/window/WINDOW_SET_MOUSE_SYSTEM_CURSOR does not exit when escape is pressed * Issue 443: after the test window.EVENT_SHOW_HIDE process must be killed * Issue 444: tests/resources/RES_LOAD_IMAGE opens a slew of windows and doesn't close them * Issue 447: import time missing from pyglet.app.win32 (pyglet 1.1 maintenance branch) * Issue 449: astraea example missing font * Backport fix for RES_LOAD test15 from trunk * Add tests/clock/MULTICORE.py * improve clock test with pyglet.clock.tick 1.1.3 * pyglet.clock: Fixed schedule_once with zero timeout * pyglet.font: Fixed non-Unicode text rendering * pyglet.graphics: Fixed cache invalidation in VertexList.resize * pyglet.graphics: Fixed TextureGroup.__eq__ * pyglet.graphics: Fixed generic attributes * pyglet.resource: Fixed resource indexing of deep directories * pyglet.resource: Fixed path separator bug * pyglet.text: Fixed IncrementalTextLayout with grapheme boundaries * pyglet.text: Fixed ScrollableTextLayout * Win32: Fixed glyph rendering of multi-character grapheme clusters 1.1.2 * pyglet.clock: Fixed schedule_interval_soft after large delta * pyglet.clock: Deprecated set_fps_limit * pyglet.font: Fixed rendering of glyphs requiring Unicode combiners and extenders * pyglet.graphics: Fixed memory error in vertex list migration * pyglet.graphics: Fixed early garbage collection of buffers in draw() * pyglet.graphics: Fixed vertex domains mixing static and stream attributes * pyglet.image: Fixed bounds assertion on ImageGrid.__getitem__ * pyglet.media: Fixed OpenGL extension string splitting when extension string is not available * pyglet.media: Removed OpenGL functions alListener3i and alListeneriv, not available on some OpenGL implementations * pyglet.resource: Fixed path separator for indexed paths: '/' is now used even on Windows. * pyglet.window: Fixed mouse pointer visibility after fullscreen switching * OS X: Fixed metrics of zero-width space * OS X: Installer now looks for Python 2.6 installation * Win32: Fixed context checking during initialisation * Win32: Fixed run loop polling state * Win32: Installer now looks for Python 2.6 installation 1.1.1 * examples: Fixed graphics.py triangle windings * pyglet.clock: Fixed resource leak in Clock.unschedule * pyglet.clock: Fixed schedule_* functions initial schedule time * pyglet.gl: Fixed create_context exception * pyglet.graphics: Fixed memory error with interleaved arrays * pyglet.media: Fixed driver enumeration during driver init failure * pyglet.media: Fixed parsing of OpenAL extensions list * pyglet.text: Fixed TextLayout.delete not deleting inline boxes * pyglet.text: Fixed caret blinking when period is 0 * pyglet.text: Fixed caret motion at end of line * pyglet.text: Replaced scissor with clipping planes in ScrollableTextLayout, fixing rendering under transform. * pyglet.text: Fixed reflow of text above overlong lines * pyglet.window: Fixed initial fullscreen screen selection 1.1 * docs: Various minor documentation fixes * docs: Fixed docstrings referring to pyglet.image.BufferManager as being singleton * pyglet: Fixed lazy loading bug failing to update module cache * pyglet.clock: Fixed unschedule not taking effect until after current tick is complete * pyglet.font: Reintroduced Text.leading and Text.line_height properties * pyglet.font: Fixed Text.halign * pyglet.font: Fixed Text.color * pyglet.graphics: Disabled VBO for Radeon X1600 * pyglet.graphics: Fixed resource leak of VBOs * pyglet.graphics: Fixed GC of cyclic buffer and attribute objects * pyglet.graphics: Improved performance for drivers that don't suffer the VBO flush problem * pyglet.image: Fixed ColorbufferImage.get_region * pyglet.image: Fixed Animation.from_image_sequence with loop * pyglet.image: Fixed BufferManager cache for resizing windows * pyglet.image: Fixed Texture.set_mipmap_image * pyglet.image: Fixed Animation.get_duration * pyglet.sprite: Fixed unassignment of Sprite.group * pyglet.text: Fixed ScrollableTextLayoutGroup.width * pyglet.text: Fixed TextLayout usage after vertex list deletion * OS X: Fixed loading of fonts with Unicode names * OS X: Fixed handling of mice with more than three buttons * Win32: Fixed redundant mouse motion events being generated 1.1beta2 * docs: Added sections on new text layout features * examples: Added text_input.py example * pyglet: Added debug_texture option * pyglet: Fixed destructors calling non-existent methods during program shutdown * pyglet.clock: Fixed memory leak in all schedule functions * pyglet.font: Fixed fonts being GC'd inefficiently in common case * pyglet.font: Fixed Unicode font names with fontconfig * pyglet.graphics: Fixed memory leak, improved GC performance * pyglet.graphics: Fixed IndexedVertexDomain.draw * pyglet.graphics: Fixed TextureGroup.__eq__ * pyglet.graphics: Fixed VBO data being drawn before upload complete on non-nvidia drivers * pyglet.image: Fixed glTexImage data being GC'd before finished * pyglet.media: Fixed Player when next() called redundantly * pyglet.media: Fixed Player.seek() when no sources queued * pyglet.media: Reduced garbage noise after seeking in OpenAL * pyglet.media: Fixed initial audio properties propogation when audio player recreated * pyglet.text: Fixed HTMLLabel.text property set * pyglet.text: Added default position for AbstractDocument.get_style * pyglet.text: Fixed IncrementalTextLayout vertical alignment after modification * pyglet.text: Fixed layout width for paragraphs with indent style * pyglet.text: Renamed halign and valign properties to anchor_x and anchor_y * pyglet.text: Added TextLayout.content_valign property * pyglet.text: Changed styles using points and pixels to consistent "distance" units * pyglet.text: Added halign to Layout constructor * pyglet.sprite: Fixed animations with only one frame * pyglet.window: Added Window.invalid flag * Linux: Removed redundant declarations in xlib.py for faster loading * Linux: Fixed Window.on_close event for GLX 1.2 and earlier * Linux: Fixed international dead key processing * Linux: Fixed window borders on Intel chips running Compiz * Win32: Fixed event loop during window move and resize * Win32: Fixed DirectSound crash when specifying very low volume 1.1beta1 * docs: Added "Debugging tools" section to programming guide * docs: Clarified usage of ClockDisplay in module docstring * examples: Fixed polygon winding in opengl.py * pyglet: Added debug trace options * pyglet: Renamed "debug_graphics_enable_vbo" option to "graphics_vbo" * pyglet: Fixed import errors breaking the exception stack due to class instance used as module * pyglet.clock: Added ClockDisplay.unschedule * pyglet.font: Fixed Text.width * pyglet.image: get_transform() now operates around the anchor * pyglet.image: Added fallback BMP loader * pyglet.gl: Fixed GL/GLU strings being re-requested each frame * pyglet.graphics: Fixed VertexList.migrate * pyglet.graphics: Fixed memory leak with unused groups in a batch * pyglet.graphics: Fixed IndexedVertexList.draw * pyglet.media: Added have_avbin * pyglet.media: MediaFormatException now subclasses MediaException * pyglet.media: 24 bit audio files loaded with RIFF loader are now rejected early * pyglet.resource: Fixed resource.get_location * pyglet.resource: Resource path locations are now indexed deeply * pyglet.sprite: Added usage parameter * pyglet.text: Fixed multiple width/multiline issues, changed text class constructors to accomodate * pyglet.text: Added DocumentLabel.get_style and set_style * pyglet.text: Fixed layout states clobbering current color * pyglet.text: Fixed error when document truncated past caret position * pyglet.text: Move some style constants into HTML loader class for easier overriding * Linux: Fixed BMP loading for certain BMP files * OS X: AVbin default location is now /usr/local/lib * OS X: Libraries are now searched for in the application bundle before standard system paths * OS X: Now distributed with AVbin 3 * Win32: Fixed GDI+ error message * Win32: Now distributed with AVbin 3 1.1alpha2 * New module: pyglet.info, for bug reports * docs: Many docstrings added to public methods * docs: Programming guide updated for pyglet 1.1 * docs: Fixed docstring errors in pyglet.resource * examples: Most examples have been updated to demonstrate pyglet 1.1 * examples: Added animation.py and video.py * pyglet: Fixed lazy importing for detection by py2exe, etc * pyglet.app: Added exit() convenience function * pyglet.clock: Fixed rescheduling bug on computers with lousy clocks * pyglet.event: Fixed handlers deleted during dispatch * pyglet.graphics: Fixed VBO disable option * pyglet.image: Fixed animation loading on all platforms * pyglet.image: Set a default delay of 100ms for GIF frames with a delay of <= 10ms (mimicks Firefox and Safari behaviour) * pyglet.media: Deprecated Player.texture for Player.get_texture * pyglet.media: Fixed buffer underrun handling in ALSA and OpenAL * pyglet.sprite: Fixed destruction of incomplete object * pyglet.sprite: Added color property * pyglet.text: Fixed layout of empty document * pyglet.text: Fixed content width calculation causing glitches in caret motion and scrolling * pyglet.text: Added some public methods and properties to expose more internal state * pyglet.text: Added on_layout_change event * pyglet.text: Fixed redundant incremental layout updates * pyglet.text: Refactored HTML and structured text decoders * pyglet.text: Fixed rendering of line breaks without word wrapping * pyglet.resource: Caches now use weak references * pyglet.window: Fixed Window.close() crashing when called more than once * pyglet.window: Fixed motion event key mappings on Linux and Windows * pyglet.window.key: Added MOD_ACCEL modifier * Linux: Fixed font names for some TrueType fonts * Linux: Fixed config attribute types * OS X: Improved audio playback and event loop response * OS X: Fixed mouse delta of first event after setting exclusive * OS X: Fixed menu tracking and application quit event * OS X: Fixed window size events during creation and setting fullscreen * OS X: Fixed TGA support * OS X: Fixed fullscreen for external monitors that don't report their maximum refresh rate * OS X: Fixed mouse cursor visibility after minimising window * Win32: Improved event loop response * Win32: Fixed garbage being played after end of sounds * Win32: Context sharing now raises an exception instead of failing silently 1.1alpha1 * New modules: app, graphics, image.atlas, resource, sprite, text * pyglet: Most modules are now accessible after importing just "pyglet" * pyglet.clock: Added get_sleep_time * pyglet.clock: Added optional poll parameter to tick * pyglet.clock: Added schedule_interval_soft * pyglet.event: Added remove_handler and remove_handlers * pyglet.event: Fixed @event decorator overriding methods instead of using the event stack * pyglet.font: Font name and size parameters are now optional * pyglet.font: Fixed Text.z attribute being ignored * pyglet.font: Tab characters are now treated as whitespace glyphs * pyglet.font: DPI now defaults to 96 on all platforms * pyglet.font: Font cache is now a weakref dictionary, so font textures will be deleted when they are not being used * pyglet.gl: OpenGL can now be used before a window is created * pyglet.gl: Added current_context var, deprecated get_current_context * pyglet.image: Added get_image_data, get_texture, get_mipmapped_texture, get_texture_sequence, get_image_data, get_data * pyglet.image: Deprecated properties corresponding to those new methods * pyglet.image: Added anchor_x, anchor_y attributes * pyglet.image: Added Animation and support for animated GIF * pyglet.image: Added __iter__ for AbstractImageSequence * pyglet.image: Added get_transform * pyglet.image: Fixed GC problem causing some loaded textures to appear empty on some machines * pyglet.image: Added Texture.create * pyglet.image: Added rectangle parameter to many methods as a convenient way to create texture rectangles * pyglet.media: Player now schedules its own updates on clock * pyglet.media: Deprecated dispatch_events * pyglet.media: Fixed silent audio driver get_time * pyglet.media: Fixed OpenAL behaviour during buffer underruns * pyglet.media: Added get_next_video_timestamp and get_next_video_frame * pyglet.window: on_resize handlers now have a guarantee that their window is the active OpenGL context * pyglet.window: Deprecated WindowExitHandler * pyglet.window: Added on_draw event * Linux: Windows implement _NET_WM_SYNC_REQUEST protocol where supported * Linux: X11 errors are now ignored instead of causing a crash * Linux: Fixed errors in private Xlib ctypes wrapping * Linux: Fixed text events being generated while CTRL or ALT pressed * Linux: Added workaround for PCF fonts that do not publish metrics * OS X: Improved glyph kerning * OS X: Fixed QuickTime image codec not raising an exception when decode error encountered * OS X: Fixed rare QuickTime image load problem causing Bus Error * Win32: Fixed DirectSound audio driver timestamps * Win32: Fixed reduntant attempt to load mapi32.dll 1.0.2 * Egg for 2.5 is now compiled for Python 2.5, not 2.5b3. 1.0.1 * OS X: Fixed permissions on installed files. 1.0 * Added easy_install download URL * docs: Clarification to ManagedSoundPlayer * docs: Fixed typo of set_exclusive_mouse * pyglet.gl: Fixed a missing import * pyglet.event: Better error message when handler has wrong parameters * pyglet.event: Fixed invokation of properties during introspection * pyglet.font: Fixed non-integer font metrics on all platforms * pyglet.font: Improved vertical centering * pyglet.image: Fixed ColorBufferImage.texture property * pyglet.media: Fixed queuing of multiple StaticSources * pyglet.media: Fixed sequential playback of sources with different audio formats * pyglet.window: Added options['vsync'] override * Linux: No longer requires ldconfig to locate libraries * Linux: Fixed assumption about existance of certain WM atoms * OS X: Fixed install path for system Python * OS X: Fixed context switch after window is deleted * Win32: Fixed text inter-glyph spacing * Win32: Clarified that Windows Vista is not supported in this release 1.0beta3 * docs: Fixed the documentation of default parameter values * examples: Added fixed_resolution example * pyglet.event: Allow EVENT_HANDLED to be any true value * pyglet.font: Ascent and descent are integer on all platforms now * pyglet.media: Several fixes to procedural sounds * pyglet.media: Fixed StaticSource usage with non-string source data * pyglet.window: Providing width or height with fullscreen parameter to constructor will now raise an exception * OS X: Fixed interaction with non-pyglet window event loops * OS X: Installer will use the system-installed and MacPorts versions of Python if found * OS X: Fixed library paths for systems with a case-sensitive file system * OS X: Fixed mouse events in fullscreen windows * OS X: Fixed reported window size of fullscreen windows * Linux: Fixed error with >3 button mice * Linux: Fixed default font use * Win32: GDI+ is now used for font rendering, fixing antialiasing issues * Win32: Font glyphs are now correctly aligned to the baseline * Win32: Fixed queued media playback 1.0beta2 * examples: soundspace gives error if AVbin is not available * examples: opengl.py made to demonstrate more OpenGL features * tests: Logs to a file by default * pyglet.image: Fixed image data pitch and row-ordering conversion * Linux: Fixed 16-bit GLX 1.0 configuration * Win32: avbin.dll is installed into the correct system directory * Win32: Workaround for "GDI Generic" driver glTexSubImage2D bug 1.0beta1 * Removed shebangs from all library files * docs: Numerous formatting fixes to documentation, including restoring missing tables and linking in program examples * examples: Added soundspace example * examples: Sounds for astraea and noisy are no longer license-encumbered * examples: "Fire" key in astraea moved to spacebar to avoid hotkey in Lepoard * examples: Fixed rewind/seek behaviour of media_player * tests: Fixed import of tests.regression module regardless of PYTHONPATH * pyglet: Added environment variables for default global options * pyglet.clock: Fixed unschedule of clock items out of order * pyglet.font: Fixed font.add_directory() * pyglet.font: Fixed text wrapping in GlyphString at corner cases * pyglet.media: Improved media streaming behaviour under loaded CPU * pyglet.media: Implemented playback of video without sound * pyglet.media: Removed redundant positional audio properties, and redefined some to be compatible with both OpenAL and DirectSound * pyglet.media: Fixed OpenAL 1.1 timing * pyglet.media: Improved OpenAL underrun recovery * pyglet.window: Removed extended Latin-1 key symbols * pyglet.window: Added scroll lock key modifier * pyglet.window: Fixed data type of mouse coordinates to int * pyglet.window: Unified and fixed platform-specific event decorator * OS X: Fixed fullscreen windows on non-primary monitor * Linux: Fixed non-ASCII text input * Linux: Added ALSA audio driver * Linux: Small refactoring of window event dispatch * Linux: Fixed lost key events under loaded CPU * Linux: Fixed borderless window behaviour * Linux: Fixed fullscreen window reactivation * Win32: Added DirectSound audio driver * Win32: Fixed interaction with language bar * Win32: Fixed key events for non-ASCII keys * Win32: Fixed motion event being fired on key release * Win32: Fixed window close event * Win32: Fixed handling of system error messages * Win32: Improved playback of sound with software-based audio devices * Win32: Fixed support for cygming special build of Python 1.0alpha2 * Complete change in interface and implementation of pyglet.media * Window events are now only dispatched from the dispatch_events() function, and in a consistent order across platforms. * Abstract class WindowEventDispatcher removed, its functionality is now in BaseWindow. * Added DPI parameter to font.load() * Renamed mouse.MOUSE_*_BUTTON to mouse.LEFT, mouse.MIDDLE and mouse.RIGHT * Window.set_size() now raises an exception if the window is fullscreen * Textures are now deleted when discarded, rather than requiring delete() * Fixed the calculated width of font.Text instances. * Renamed examples/event_test.py to examples/events.py * Added media_player.py and Programming Guide examples. * Added tools/gl_info.py and tools/al_info.py into the source dists. * Added tests/regression/__init__.py into the source dists * OS X: Fixed fullscreen windowing * OS X: Fixed dylib loading when DYLD_FALLBACK_LIBRARY_PATH is defined * OS X: Fixed various mouse-visibility, exclusivity and position problems * OS X: Support the menu bar and application quit events * Linux: Fixed exclusive mode problems when keyboard focus is lost * Linux: Support for bitmap fonts. * Linux: Fixed GLX 1.0, ATI and MESA implementations * Linux: Improved vsync support across video drivers * Linux: Fixed library loading to observe LD_LIBRARY_PATH * Win32: Window is now "Unicode-aware" 1.0alpha1 * Initial release. pyglet-1.1.4/tools/0002700013464101346420000000000011317255174012354 5ustar yohyohpyglet-1.1.4/tools/inspect_font.py0000700013464101346420000000132411266427711015423 0ustar yohyoh#!/usr/bin/python # $Id:$ '''Display font information. Usage:: inspect_font.py [ ...] ''' import sys from pyglet.font import ttf def inspect_font(filename): try: info = ttf.TruetypeInfo(filename) print '%s:' % filename, print info.get_name('family'), print 'bold=%r' % info.is_bold(), print 'italic=%r' % info.is_italic(), except: print '''%s could not be identified. It is probably not a TrueType or OpenType font. However, pyglet may still be able to load it on some platforms.''' % filename if __name__ == '__main__': if len(sys.argv) < 2: print __doc__ for filename in sys.argv[1:]: inspect_font(filename)