Two more demos - converted from exmaples in OpenGL redbook

Kang Zhao <[email protected]> Sat, 25 May 2013 10:08:32 +0800
Newsgroups gmane.comp.python.opengl.devel
Message-ID <CAKChtJ0hxgXt3NK7jtZ1o3paTNO0t9sv6STMTXe9R53g-ZN+yA@mail.gmail.com>
--089e01294a8076d9ec04dd816498
Content-Type: multipart/alternative; boundary=089e01294a8076d9e704dd816496

--089e01294a8076d9e704dd816496
Content-Type: text/plain; charset=ISO-8859-1

Hello developers,

During my study of pyOpenGL, I converted two more examples in OpenGL
redbook  with pyOpenGL, which I didn't find under "PyOpenGLDemo\redbook"
with PyOpenGLDemo package. The files are attached.

Please feel free to include them into the PyOpenGLDemo package if you don't
see any issue.  PS, I am not sure what is the right practice to contribute
such files, thus I simply email them to this list.

You may find the codes are not perfectly Pythonic. I did it by intention to
keep the codes look the same as the original C code as possible. And please
feel free to polish them as needed - I am still on my way in learning
Python. :)

Regards,
Kang

--089e01294a8076d9e704dd816496
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div><div><div><div>Hello developers,<br><br></div>During =
my study of pyOpenGL, I converted two more examples in OpenGL redbook=A0 wi=
th pyOpenGL, which I didn&#39;t find under &quot;PyOpenGLDemo\redbook&quot;=
 with PyOpenGLDemo package. The files are attached. <br>
<br></div>Please feel free to include them into the PyOpenGLDemo package if=
 you don&#39;t see any issue.=A0 PS, I am not sure what is the right practi=
ce to contribute such files, thus I simply email them to this list.<br><br>
</div>You may find the codes are not perfectly Pythonic. I did it by intent=
ion to keep the codes look the same as the original C code as possible. And=
 please feel free to polish them as needed - I am still on my way in learni=
ng Python. :)<br>
<br></div><div>Regards,<br></div>Kang<br><br></div>

--089e01294a8076d9e704dd816496--
--089e01294a8076d9ec04dd816498
Content-Type: application/octet-stream; name="select.py"
Content-Disposition: attachment; filename="select.py"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hh459c050

IyEvdXNyL2Jpbi9weXRob24NCg0KIyBUaGlzIGlzIHN0YXRlbWVudCBpcyByZXF1aXJlZCBieSB0
aGUgYnVpbGQgc3lzdGVtIHRvIHF1ZXJ5IGJ1aWxkIGluZm8NCmlmIF9fbmFtZV9fID09ICdfX2J1
aWxkX18nOg0KICAgIHJhaXNlIEV4Y2VwdGlvbg0KDQonJycNCnNlbGVjdC5jIGZyb20gdGhlIFJl
ZGJvb2sgZXhhbXBsZXMuICANCkNvbnZlcnRlZCB0byBQeXRob24gYnkgS2FuZyBaaGFvICh6aGFv
a2FuZy5jbkBnbWFpbC5jb20pIE1heSwyMDEzLg0KVGVzdGVkIHdpdGggUHlPcGVuR0wgMy4wLjIN
Cg0KLyoNCiAqIENvcHlyaWdodCAoYykgMTk5My0xOTk5LCBTaWxpY29uIEdyYXBoaWNzLCBJbmMu
DQogKiBBTEwgUklHSFRTIFJFU0VSVkVEIA0KICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1v
ZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgDQogKiBhbnkgcHVycG9zZSBh
bmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3Zl
DQogKiBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGgg
dGhlIGNvcHlyaWdodCBub3RpY2UNCiAqIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVh
ciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IA0KICogdGhlIG5hbWUgb2Yg
U2lsaWNvbiBHcmFwaGljcywgSW5jLiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZw0KICogb3Ig
cHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljLA0KICogd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiANCiAqDQogKiBUSEUg
TUFURVJJQUwgRU1CT0RJRUQgT04gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBUTyBZT1UgIkFT
LUlTIg0KICogQU5EIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MsIElNUExJ
RUQgT1IgT1RIRVJXSVNFLA0KICogSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdB
UlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUg0KICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBJTiBOTyBFVkVOVCBTSEFMTCBTSUxJQ09ODQogKiBHUkFQSElDUywgSU5DLiAg
QkUgTElBQkxFIFRPIFlPVSBPUiBBTllPTkUgRUxTRSBGT1IgQU5ZIERJUkVDVCwNCiAqIFNQRUNJ
QUwsIElOQ0lERU5UQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkN
CiAqIEtJTkQsIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIsIElOQ0xVRElORyBXSVRIT1VUIExJ
TUlUQVRJT04sDQogKiBMT1NTIE9GIFBST0ZJVCwgTE9TUyBPRiBVU0UsIFNBVklOR1MgT1IgUkVW
RU5VRSwgT1IgVEhFIENMQUlNUyBPRg0KICogVEhJUkQgUEFSVElFUywgV0hFVEhFUiBPUiBOT1Qg
U0lMSUNPTiBHUkFQSElDUywgSU5DLiAgSEFTIEJFRU4NCiAqIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggTE9TUywgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQogKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQ0K
ICogUE9TU0VTU0lPTiwgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuDQogKiAN
CiAqIFVTIEdvdmVybm1lbnQgVXNlcnMgUmVzdHJpY3RlZCBSaWdodHMgDQogKiBVc2UsIGR1cGxp
Y2F0aW9uLCBvciBkaXNjbG9zdXJlIGJ5IHRoZSBHb3Zlcm5tZW50IGlzIHN1YmplY3QgdG8NCiAq
IHJlc3RyaWN0aW9ucyBzZXQgZm9ydGggaW4gRkFSIDUyLjIyNy4xOShjKSgyKSBvciBzdWJwYXJh
Z3JhcGgNCiAqIChjKSgxKShpaSkgb2YgdGhlIFJpZ2h0cyBpbiBUZWNobmljYWwgRGF0YSBhbmQg
Q29tcHV0ZXIgU29mdHdhcmUNCiAqIGNsYXVzZSBhdCBERkFSUyAyNTIuMjI3LTcwMTMgYW5kL29y
IGluIHNpbWlsYXIgb3Igc3VjY2Vzc29yDQogKiBjbGF1c2VzIGluIHRoZSBGQVIgb3IgdGhlIERP
RCBvciBOQVNBIEZBUiBTdXBwbGVtZW50Lg0KICogVW5wdWJsaXNoZWQtLSByaWdodHMgcmVzZXJ2
ZWQgdW5kZXIgdGhlIGNvcHlyaWdodCBsYXdzIG9mIHRoZQ0KICogVW5pdGVkIFN0YXRlcy4gIENv
bnRyYWN0b3IvbWFudWZhY3R1cmVyIGlzIFNpbGljb24gR3JhcGhpY3MsDQogKiBJbmMuLCAyMDEx
IE4uICBTaG9yZWxpbmUgQmx2ZC4sIE1vdW50YWluIFZpZXcsIENBIDk0MDM5LTczMTEuDQogKg0K
ICogT3BlbkdMKFIpIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgU2lsaWNvbiBHcmFwaGlj
cywgSW5jLg0KICovDQoNCi8qDQogKiBzZWxlY3QuYw0KICogVGhpcyBpcyBhbiBpbGx1c3RyYXRp
b24gb2YgdGhlIHNlbGVjdGlvbiBtb2RlIGFuZCANCiAqIG5hbWUgc3RhY2ssIHdoaWNoIGRldGVj
dHMgd2hldGhlciBvYmplY3RzIHdoaWNoIGNvbGxpZGUgDQogKiB3aXRoIGEgdmlld2luZyB2b2x1
bWUuICBGaXJzdCwgZm91ciB0cmlhbmdsZXMgYW5kIGEgDQogKiByZWN0YW5ndWxhciBib3ggcmVw
cmVzZW50aW5nIGEgdmlld2luZyB2b2x1bWUgYXJlIGRyYXduIA0KICogKGRyYXdTY2VuZSByb3V0
aW5lKS4gIFRoZSBncmVlbiB0cmlhbmdsZSBhbmQgeWVsbG93IA0KICogdHJpYW5nbGVzIGFwcGVh
ciB0byBsaWUgd2l0aGluIHRoZSB2aWV3aW5nIHZvbHVtZSwgYnV0IA0KICogdGhlIHJlZCB0cmlh
bmdsZSBhcHBlYXJzIHRvIGxpZSBvdXRzaWRlIGl0LiAgVGhlbiB0aGUgDQogKiBzZWxlY3Rpb24g
bW9kZSBpcyBlbnRlcmVkIChzZWxlY3RPYmplY3RzIHJvdXRpbmUpLiAgDQogKiBEcmF3aW5nIHRv
IHRoZSBzY3JlZW4gY2Vhc2VzLiAgVG8gc2VlIGlmIGFueSBjb2xsaXNpb25zIA0KICogb2NjdXIs
IHRoZSBmb3VyIHRyaWFuZ2xlcyBhcmUgY2FsbGVkLiAgSW4gdGhpcyBleGFtcGxlLCANCiAqIHRo
ZSBncmVlbiB0cmlhbmdsZSBjYXVzZXMgb25lIGhpdCB3aXRoIHRoZSBuYW1lIDEsIGFuZCANCiAq
IHRoZSB5ZWxsb3cgdHJpYW5nbGVzIGNhdXNlIG9uZSBoaXQgd2l0aCB0aGUgbmFtZSAzLg0KICov
DQoNCicnJw0KDQppbXBvcnQgc3lzICANCnRyeTogIA0KICAgIGZyb20gT3BlbkdMLkdMVVQgaW1w
b3J0ICogIA0KICAgIGZyb20gT3BlbkdMLkdMIGltcG9ydCAqICANCiAgICBmcm9tIE9wZW5HTC5H
TFUgaW1wb3J0ICogIA0KZXhjZXB0OiAgDQogICAgcHJpbnQgIkVSUk9SOiBQeU9wZW5HTCBub3Qg
aW5zdGFsbGVkIHByb3Blcmx5LiIgIA0KICAgIHN5cy5leGl0KCkNCg0KZGVmIGRyYXdUcmlhbmds
ZSAoIHgxLCAgeTEsICB4MiwgeTIsICB4MywgIHkzLCAgeik6DQogICAgZ2xCZWdpbiAoR0xfVFJJ
QU5HTEVTKTsNCiAgICBnbFZlcnRleDNmICh4MSwgeTEsIHopOw0KICAgIGdsVmVydGV4M2YgKHgy
LCB5Miwgeik7DQogICAgZ2xWZXJ0ZXgzZiAoeDMsIHkzLCB6KTsNCiAgICBnbEVuZCAoKTsNCg0K
ZGVmIGRyYXdWaWV3Vm9sdW1lICh4MSwgeDIsICB5MSwgeTIsIHoxLCAgejIpOg0KICAgIGdsQ29s
b3IzZiAoMS4wLCAxLjAsIDEuMCk7DQogICAgZ2xCZWdpbiAoR0xfTElORV9MT09QKTsNCiAgICBn
bFZlcnRleDNmICh4MSwgeTEsIC16MSk7DQogICAgZ2xWZXJ0ZXgzZiAoeDIsIHkxLCAtejEpOw0K
ICAgIGdsVmVydGV4M2YgKHgyLCB5MiwgLXoxKTsNCiAgICBnbFZlcnRleDNmICh4MSwgeTIsIC16
MSk7DQogICAgZ2xFbmQgKCk7DQogICAgDQogICAgZ2xCZWdpbiAoR0xfTElORV9MT09QKTsNCiAg
ICBnbFZlcnRleDNmICh4MSwgeTEsIC16Mik7DQogICAgZ2xWZXJ0ZXgzZiAoeDIsIHkxLCAtejIp
Ow0KICAgIGdsVmVydGV4M2YgKHgyLCB5MiwgLXoyKTsNCiAgICBnbFZlcnRleDNmICh4MSwgeTIs
IC16Mik7DQogICAgZ2xFbmQgKCk7DQogICAgICAgIA0KICAgIGdsQmVnaW4gKEdMX0xJTkVTKTsg
ICMgIDQgbGluZXMNCiAgICBnbFZlcnRleDNmICh4MSwgeTEsIC16MSk7DQogICAgZ2xWZXJ0ZXgz
ZiAoeDEsIHkxLCAtejIpOw0KICAgIGdsVmVydGV4M2YgKHgxLCB5MiwgLXoxKTsNCiAgICBnbFZl
cnRleDNmICh4MSwgeTIsIC16Mik7DQogICAgZ2xWZXJ0ZXgzZiAoeDIsIHkxLCAtejEpOw0KICAg
IGdsVmVydGV4M2YgKHgyLCB5MSwgLXoyKTsNCiAgICBnbFZlcnRleDNmICh4MiwgeTIsIC16MSk7
DQogICAgZ2xWZXJ0ZXgzZiAoeDIsIHkyLCAtejIpOw0KICAgIGdsRW5kICgpOw0KDQoNCmRlZiBk
cmF3U2NlbmUgKCk6DQogICAgZ2xNYXRyaXhNb2RlIChHTF9QUk9KRUNUSU9OKTsNCiAgICBnbExv
YWRJZGVudGl0eSAoKTsNCiAgICBnbHVQZXJzcGVjdGl2ZSAoNDAuMCwgNC4wLzMuMCwgMS4wLCAx
MDAuMCk7DQogICAgDQogICAgZ2xNYXRyaXhNb2RlIChHTF9NT0RFTFZJRVcpOw0KICAgIGdsTG9h
ZElkZW50aXR5ICgpOw0KICAgIGdsdUxvb2tBdCAoNy41LCA3LjUsIDEyLjUsIDIuNSwgMi41LCAt
NS4wLCAwLjAsIDEuMCwgMC4wKTsNCiAgICBnbENvbG9yM2YgKDAuMCwgMS4wLCAwLjApOyAgICMg
IGdyZWVuIHRyaWFuZ2xlDQogICAgZHJhd1RyaWFuZ2xlICgyLjAsIDIuMCwgMy4wLCAyLjAsIDIu
NSwgMy4wLCAtNS4wKTsNCiAgICBnbENvbG9yM2YgKDEuMCwgMC4wLCAwLjApOyAgICMgIHJlZCB0
cmlhbmdsZQ0KICAgIGRyYXdUcmlhbmdsZSAoMi4wLCA3LjAsIDMuMCwgNy4wLCAyLjUsIDguMCwg
LTUuMCk7DQogICAgZ2xDb2xvcjNmICgxLjAsIDEuMCwgMC4wKTsgICAjIHllbGxvdyB0cmlhbmds
ZXMNCiAgICBkcmF3VHJpYW5nbGUgKDIuMCwgMi4wLCAzLjAsIDIuMCwgMi41LCAzLjAsIDAuMCk7
DQogICAgZHJhd1RyaWFuZ2xlICgyLjAsIDIuMCwgMy4wLCAyLjAsIDIuNSwgMy4wLCAtMTAuMCk7
DQogICAgZHJhd1ZpZXdWb2x1bWUgKDAuMCwgNS4wLCAwLjAsIDUuMCwgMC4wLCAxMC4wKTsNCg0K
ZGVmIHByb2Nlc3NIaXRzIChoaXRfYnVmZmVyKToNCiAgICBwcmludCAiaGl0cyA9ICVkIiUobGVu
KGhpdF9idWZmZXIpKTsgDQogICAgZm9yIGhpdF9yZWNvcmQgaW4gaGl0X2J1ZmZlcjoNCiAgICAg
ICAgejEsIHoyLCBuYW1lcyA9IGhpdF9yZWNvcmQNCiAgICAgICAgcHJpbnQgIiBudW1iZXIgb2Yg
bmFtZXMgZm9yIGhpdCA9ICVkIiUobGVuKG5hbWVzKSkNCiAgICAgICAgcHJpbnQgIiB6MSBpcyAl
ZywiJXoxICsgIiAgejIgaXMgJWciJXoyDQogICAgICAgIHByaW50ICIgdGhlIG5hbWUgaXMgIjsN
CiAgICAgICAgcHJpbnQgbmFtZXMNCg0KZGVmIHNlbGVjdE9iamVjdHMoKToNCiAgICBTSVpFID0g
NTEyOw0KICAgIGdsU2VsZWN0QnVmZmVyKFNJWkUpOw0KICAgIGdsUmVuZGVyTW9kZSAoR0xfU0VM
RUNUKTsNCiAgICANCiAgICBnbEluaXROYW1lcygpOw0KICAgIGdsUHVzaE5hbWUoMCk7DQogICAg
DQogICAgZ2xQdXNoTWF0cml4ICgpOw0KICAgIGdsTWF0cml4TW9kZSAoR0xfUFJPSkVDVElPTik7
DQogICAgZ2xMb2FkSWRlbnRpdHkgKCk7DQogICAgZ2xPcnRobyAoMC4wLCA1LjAsIDAuMCwgNS4w
LCAwLjAsIDEwLjApOw0KICAgIGdsTWF0cml4TW9kZSAoR0xfTU9ERUxWSUVXKTsNCiAgICBnbExv
YWRJZGVudGl0eSAoKTsNCiAgICBnbExvYWROYW1lKDEpOw0KICAgIGRyYXdUcmlhbmdsZSAoMi4w
LCAyLjAsIDMuMCwgMi4wLCAyLjUsIDMuMCwgLTUuMCk7DQogICAgZ2xMb2FkTmFtZSgyKTsNCiAg
ICBkcmF3VHJpYW5nbGUgKDIuMCwgNy4wLCAzLjAsIDcuMCwgMi41LCA4LjAsIC01LjApOw0KICAg
IGdsTG9hZE5hbWUoMyk7DQogICAgZHJhd1RyaWFuZ2xlICgyLjAsIDIuMCwgMy4wLCAyLjAsIDIu
NSwgMy4wLCAwLjApOw0KICAgIGRyYXdUcmlhbmdsZSAoMi4wLCAyLjAsIDMuMCwgMi4wLCAyLjUs
IDMuMCwgLTEwLjApOw0KICAgIGdsUG9wTWF0cml4ICgpOw0KICAgIGdsRmx1c2ggKCk7DQogICAg
DQogICAgaGl0X2J1ZmZlciA9IGdsUmVuZGVyTW9kZSAoR0xfUkVOREVSKTsNCiAgICBwcm9jZXNz
SGl0cyAoaGl0X2J1ZmZlcik7IA0KDQpkZWYgaW5pdCAoKToNCiAgICBnbEVuYWJsZShHTF9ERVBU
SF9URVNUKTsNCiAgICBnbFNoYWRlTW9kZWwoR0xfRkxBVCk7DQoNCmRlZiBkaXNwbGF5KCk6DQog
ICAgZ2xDbGVhckNvbG9yICgwLjAsIDAuMCwgMC4wLCAwLjApOw0KICAgIGdsQ2xlYXIoR0xfQ09M
T1JfQlVGRkVSX0JJVCB8IEdMX0RFUFRIX0JVRkZFUl9CSVQpOw0KICAgIGRyYXdTY2VuZSAoKTsN
CiAgICBzZWxlY3RPYmplY3RzICgpOw0KICAgIGdsRmx1c2goKTsNCg0KaWYgX19uYW1lX18gPT0g
Il9fbWFpbl9fIjoNCiAgICBnbHV0SW5pdChzeXMuYXJndik7DQogICAgZ2x1dEluaXREaXNwbGF5
TW9kZSAoR0xVVF9TSU5HTEUgfCBHTFVUX1JHQiB8IEdMVVRfREVQVEgpOw0KICAgIGdsdXRJbml0
V2luZG93U2l6ZSAoMjAwLCAyMDApOw0KICAgIGdsdXRJbml0V2luZG93UG9zaXRpb24gKDEwMCwg
MTAwKTsNCiAgICBnbHV0Q3JlYXRlV2luZG93IChzeXMuYXJndlswXSk7DQogICAgaW5pdCgpOw0K
ICAgIGdsdXREaXNwbGF5RnVuYyhkaXNwbGF5KTsNCiAgICBnbHV0TWFpbkxvb3AoKTsNCg0K
--089e01294a8076d9ec04dd816498
Content-Type: application/octet-stream; name="picksquare.py"
Content-Disposition: attachment; filename="picksquare.py"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hh459vsu1

IyEvdXNyL2Jpbi9weXRob24NCg0KIyBUaGlzIGlzIHN0YXRlbWVudCBpcyByZXF1aXJlZCBieSB0
aGUgYnVpbGQgc3lzdGVtIHRvIHF1ZXJ5IGJ1aWxkIGluZm8NCmlmIF9fbmFtZV9fID09ICdfX2J1
aWxkX18nOg0KICAgIHJhaXNlIEV4Y2VwdGlvbg0KDQonJycNCg0KcGlja3NxdWFyZS5jIGZyb20g
dGhlIFJlZGJvb2sgZXhhbXBsZXMuICANCkNvbnZlcnRlZCB0byBQeXRob24gYnkgS2FuZyBaaGFv
ICh6aGFva2FuZy5jbkBnbWFpbC5jb20pIE1heSwyMDEzLg0KVGVzdGVkIHdpdGggUHlPcGVuR0wg
My4wLjINCg0KLyoNCiAqIENvcHlyaWdodCAoYykgMTk5My0xOTk5LCBTaWxpY29uIEdyYXBoaWNz
LCBJbmMuDQogKiBBTEwgUklHSFRTIFJFU0VSVkVEIA0KICogUGVybWlzc2lvbiB0byB1c2UsIGNv
cHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgDQogKiBhbnkgcHVy
cG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhl
IGFib3ZlDQogKiBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0
IGJvdGggdGhlIGNvcHlyaWdodCBub3RpY2UNCiAqIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl
IGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IA0KICogdGhlIG5h
bWUgb2YgU2lsaWNvbiBHcmFwaGljcywgSW5jLiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZw0K
ICogb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljLA0KICogd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiANCiAqDQog
KiBUSEUgTUFURVJJQUwgRU1CT0RJRUQgT04gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBUTyBZ
T1UgIkFTLUlTIg0KICogQU5EIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ms
IElNUExJRUQgT1IgT1RIRVJXSVNFLA0KICogSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwg
QU5ZIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUg0KICogRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBJTiBOTyBFVkVOVCBTSEFMTCBTSUxJQ09ODQogKiBHUkFQSElDUywg
SU5DLiAgQkUgTElBQkxFIFRPIFlPVSBPUiBBTllPTkUgRUxTRSBGT1IgQU5ZIERJUkVDVCwNCiAq
IFNQRUNJQUwsIElOQ0lERU5UQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBP
RiBBTlkNCiAqIEtJTkQsIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIsIElOQ0xVRElORyBXSVRI
T1VUIExJTUlUQVRJT04sDQogKiBMT1NTIE9GIFBST0ZJVCwgTE9TUyBPRiBVU0UsIFNBVklOR1Mg
T1IgUkVWRU5VRSwgT1IgVEhFIENMQUlNUyBPRg0KICogVEhJUkQgUEFSVElFUywgV0hFVEhFUiBP
UiBOT1QgU0lMSUNPTiBHUkFQSElDUywgSU5DLiAgSEFTIEJFRU4NCiAqIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggTE9TUywgSE9XRVZFUiBDQVVTRUQgQU5EIE9ODQogKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI
IFRIRQ0KICogUE9TU0VTU0lPTiwgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUu
DQogKiANCiAqIFVTIEdvdmVybm1lbnQgVXNlcnMgUmVzdHJpY3RlZCBSaWdodHMgDQogKiBVc2Us
IGR1cGxpY2F0aW9uLCBvciBkaXNjbG9zdXJlIGJ5IHRoZSBHb3Zlcm5tZW50IGlzIHN1YmplY3Qg
dG8NCiAqIHJlc3RyaWN0aW9ucyBzZXQgZm9ydGggaW4gRkFSIDUyLjIyNy4xOShjKSgyKSBvciBz
dWJwYXJhZ3JhcGgNCiAqIChjKSgxKShpaSkgb2YgdGhlIFJpZ2h0cyBpbiBUZWNobmljYWwgRGF0
YSBhbmQgQ29tcHV0ZXIgU29mdHdhcmUNCiAqIGNsYXVzZSBhdCBERkFSUyAyNTIuMjI3LTcwMTMg
YW5kL29yIGluIHNpbWlsYXIgb3Igc3VjY2Vzc29yDQogKiBjbGF1c2VzIGluIHRoZSBGQVIgb3Ig
dGhlIERPRCBvciBOQVNBIEZBUiBTdXBwbGVtZW50Lg0KICogVW5wdWJsaXNoZWQtLSByaWdodHMg
cmVzZXJ2ZWQgdW5kZXIgdGhlIGNvcHlyaWdodCBsYXdzIG9mIHRoZQ0KICogVW5pdGVkIFN0YXRl
cy4gIENvbnRyYWN0b3IvbWFudWZhY3R1cmVyIGlzIFNpbGljb24gR3JhcGhpY3MsDQogKiBJbmMu
LCAyMDExIE4uICBTaG9yZWxpbmUgQmx2ZC4sIE1vdW50YWluIFZpZXcsIENBIDk0MDM5LTczMTEu
DQogKg0KICogT3BlbkdMKFIpIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgU2lsaWNvbiBH
cmFwaGljcywgSW5jLg0KICovDQoNCi8qDQogKiBwaWNrc3F1YXJlLmMNCiAqIFVzZSBvZiBtdWx0
aXBsZSBuYW1lcyBhbmQgcGlja2luZyBhcmUgZGVtb25zdHJhdGVkLiAgDQogKiBBIDN4MyBncmlk
IG9mIHNxdWFyZXMgaXMgZHJhd24uICBXaGVuIHRoZSBsZWZ0IG1vdXNlIA0KICogYnV0dG9uIGlz
IHByZXNzZWQsIGFsbCBzcXVhcmVzIHVuZGVyIHRoZSBjdXJzb3IgcG9zaXRpb24gDQogKiBoYXZl
IHRoZWlyIGNvbG9yIGNoYW5nZWQuDQogKi8NCiANCiAnJycNCg0KaW1wb3J0IHN5cyAgDQp0cnk6
ICANCiAgICBmcm9tIE9wZW5HTC5HTFVUIGltcG9ydCAqICANCiAgICBmcm9tIE9wZW5HTC5HTCBp
bXBvcnQgKiAgDQogICAgZnJvbSBPcGVuR0wuR0xVIGltcG9ydCAqICANCmV4Y2VwdDogIA0KICAg
IHByaW50ICJFUlJPUjogUHlPcGVuR0wgbm90IGluc3RhbGxlZCBwcm9wZXJseS4iICANCiAgICBz
eXMuZXhpdCgpDQoNCicnJyAgYW1vdW50IG9mIGNvbG9yIGZvciBlYWNoIHNxdWFyZSAgICAnJycN
CmJvYXJkID0gW1swIGZvciBpIGluIHJhbmdlKDMpXSBmb3IgaiBpbiByYW5nZSgzKV0NCg0KJycn
IENsZWFyIGNvbG9yIHZhbHVlIGZvciBldmVyeSBzcXVhcmUgb24gdGhlIGJvYXJkICAgJycnDQpk
ZWYgaW5pdCgpOg0KICAgIGZvciBpIGluIHJhbmdlKDMpOg0KICAgICAgICBmb3IgaiBpbiByYW5n
ZSgzKToNCiAgICAgICAgICAgIGJvYXJkW2ldW2pdID0gMDsNCiAgICBnbENsZWFyQ29sb3IgKDAu
MCwgMC4wLCAwLjAsIDAuMCk7DQoNCicnJw0KLyogIFRoZSBuaW5lIHNxdWFyZXMgYXJlIGRyYXdu
LiAgSW4gc2VsZWN0aW9uIG1vZGUsIGVhY2ggDQogKiAgc3F1YXJlIGlzIGdpdmVuIHR3byBuYW1l
czogIG9uZSBmb3IgdGhlIHJvdyBhbmQgdGhlIA0KICogIG90aGVyIGZvciB0aGUgY29sdW1uIG9u
IHRoZSBncmlkLiAgVGhlIGNvbG9yIG9mIGVhY2ggDQogKiAgc3F1YXJlIGlzIGRldGVybWluZWQg
YnkgaXRzIHBvc2l0aW9uIG9uIHRoZSBncmlkLCBhbmQgDQogKiAgdGhlIHZhbHVlIGluIHRoZSBi
b2FyZFtdW10gYXJyYXkuDQogKi8NCiAnJycNCmRlZiBkcmF3U3F1YXJlcyhtb2RlKToNCiAgICBm
b3IgaSBpbiByYW5nZSgzKToNCiAgICAgICAgaWYgbW9kZSA9PSBHTF9TRUxFQ1Q6DQogICAgICAg
ICAgICBnbExvYWROYW1lIChpKTsNCiAgICAgICAgZm9yIGogaW4gcmFuZ2UoMyk6DQogICAgICAg
ICAgICBpZiAobW9kZSA9PSBHTF9TRUxFQ1QpOg0KICAgICAgICAgICAgICAgIGdsUHVzaE5hbWUg
KGopOyAgICAgICAgICAgICAgDQogICAgICAgICAgICBnbENvbG9yM2YgKGZsb2F0KGkvMy4wKSwg
ZmxvYXQgKGovMy4wKSwgZmxvYXQoYm9hcmRbaV1bal0vMy4wKSApOw0KICAgICAgICAgICAgZ2xS
ZWN0aSAoaSwgaiwgaSsxLCBqKzEpOw0KICAgICAgICAgICAgaWYgbW9kZSA9PSBHTF9TRUxFQ1Q6
DQogICAgICAgICAgICAgICAgZ2xQb3BOYW1lICgpOw0KDQonJycNCi8qICBwcm9jZXNzSGl0cyBw
cmludHMgb3V0IHRoZSBjb250ZW50cyBvZiB0aGUgDQogKiAgc2VsZWN0aW9uIGFycmF5Lg0KICov
DQonJycNCmRlZiBwcm9jZXNzSGl0cyAoaGl0X2J1ZmZlcik6ICAgIA0KICAgIHByaW50ICJoaXRz
ID0gJWQiJShsZW4oaGl0X2J1ZmZlcikpOyANCiAgICBmb3IgaGl0X3JlY29yZCBpbiBoaXRfYnVm
ZmVyOg0KICAgICAgICB6MSwgejIsIG5hbWVzID0gaGl0X3JlY29yZA0KICAgICAgICBwcmludCAi
IG51bWJlciBvZiBuYW1lcyBmb3IgaGl0ID0gJWQiJShsZW4obmFtZXMpKQ0KICAgICAgICBwcmlu
dCAiIHoxIGlzICVnLCIlejEgKyAiICB6MiBpcyAlZyIlejINCiAgICAgICAgcHJpbnQgIiB0aGUg
bmFtZXMgYXJlICI7DQogICAgICAgIHByaW50IG5hbWVzICAgDQogICAgICAgIGlpID0gaW50KG5h
bWVzWzBdKQ0KICAgICAgICBqaiA9IGludChuYW1lc1sxXSkNCiAgICAgICAgYm9hcmRbaWldW2pq
XSA9IChib2FyZFtpaV1bampdICsgMSkgJSAzOyAgICANCg0KDQonJycNCi8qICBwaWNrU3F1YXJl
cygpIHNldHMgdXAgc2VsZWN0aW9uIG1vZGUsIG5hbWUgc3RhY2ssIA0KICogIGFuZCBwcm9qZWN0
aW9uIG1hdHJpeCBmb3IgcGlja2luZy4gIFRoZW4gdGhlIA0KICogIG9iamVjdHMgYXJlIGRyYXdu
Lg0KICovDQogJycnDQoNCkJVRlNJWkU9NTEyDQpkZWYgcGlja1NxdWFyZXMoYnV0dG9uLCBzdGF0
ZSwgeCwgIHkpOg0KICAgIGlmIGJ1dHRvbiAhPSBHTFVUX0xFRlRfQlVUVE9OIG9yIHN0YXRlICE9
IEdMVVRfRE9XTiA6DQogICAgICAgIHJldHVybjsNCiAgICANCiAgICB2aWV3cG9ydCA9IGdsR2V0
SW50ZWdlcnYgKEdMX1ZJRVdQT1JUKTsNCg0KICAgIGdsU2VsZWN0QnVmZmVyIChCVUZTSVpFKTsN
CiAgICBnbFJlbmRlck1vZGUgKEdMX1NFTEVDVCk7DQogICAgDQogICAgZ2xJbml0TmFtZXMoKTsN
CiAgICBnbFB1c2hOYW1lKDApOw0KICAgIA0KICAgIGdsTWF0cml4TW9kZSAoR0xfUFJPSkVDVElP
Tik7DQogICAgZ2xQdXNoTWF0cml4ICgpOw0KICAgIGdsTG9hZElkZW50aXR5ICgpOw0KICAgDQog
ICAgIyAgY3JlYXRlIDV4NSBwaXhlbCBwaWNraW5nIHJlZ2lvbiBuZWFyIGN1cnNvciBsb2NhdGlv
bg0KICAgIGdsdVBpY2tNYXRyaXggKGZsb2F0KHgpLCBmbG9hdCh2aWV3cG9ydFszXSAtIHkpLCA1
LjAsIDUuMCwgdmlld3BvcnQpOw0KICAgIGdsdU9ydGhvMkQgKDAuMCwgMy4wLCAwLjAsIDMuMCk7
DQogICAgZHJhd1NxdWFyZXMgKEdMX1NFTEVDVCk7DQoNCiAgICBnbE1hdHJpeE1vZGUgKEdMX1BS
T0pFQ1RJT04pOw0KICAgIGdsUG9wTWF0cml4ICgpOw0KICAgIGdsRmx1c2ggKCk7DQogICAgDQog
ICAgaGl0X2J1ZmZlciA9IGdsUmVuZGVyTW9kZSAoR0xfUkVOREVSKTsNCiAgICBwcm9jZXNzSGl0
cyAoaGl0X2J1ZmZlcik7DQogICAgZ2x1dFBvc3RSZWRpc3BsYXkoKTsNCg0KZGVmIGRpc3BsYXko
KToNCiAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOw0KICAgIGRyYXdTcXVhcmVzIChH
TF9SRU5ERVIpOw0KICAgIGdsRmx1c2goKTsNCg0KZGVmIHJlc2hhcGUodywgaCk6DQogICAgZ2xW
aWV3cG9ydCgwLCAwLCB3LCBoKTsNCiAgICBnbE1hdHJpeE1vZGUoR0xfUFJPSkVDVElPTik7DQog
ICAgZ2xMb2FkSWRlbnRpdHkoKTsNCiAgICBnbHVPcnRobzJEICgwLjAsIDMuMCwgMC4wLCAzLjAp
Ow0KICAgIGdsTWF0cml4TW9kZShHTF9NT0RFTFZJRVcpOw0KICAgIGdsTG9hZElkZW50aXR5KCk7
DQoNCmRlZiBrZXlib2FyZChrZXksIHgsIHkpOg0KICAgIGlmIGtleSA9PSAyNzoNCiAgICAgICAg
ZXhpdCgwKTsNCg0KIyBNYWluIExvb3ANCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6DQogICAg
Z2x1dEluaXQoc3lzLmFyZ3YpOw0KICAgIGdsdXRJbml0RGlzcGxheU1vZGUgKEdMVVRfU0lOR0xF
IHwgR0xVVF9SR0IgfCBHTFVUX0RFUFRIKTsNCiAgICBnbHV0SW5pdFdpbmRvd1NpemUgKDEwMCwg
MTAwKTsNCiAgICBnbHV0SW5pdFdpbmRvd1Bvc2l0aW9uICgxMDAsIDEwMCk7DQogICAgZ2x1dENy
ZWF0ZVdpbmRvdyAoc3lzLmFyZ3ZbMF0pOw0KICAgIGluaXQgKCk7DQogICAgZ2x1dFJlc2hhcGVG
dW5jIChyZXNoYXBlKTsNCiAgICBnbHV0RGlzcGxheUZ1bmMoZGlzcGxheSk7IA0KICAgIGdsdXRN
b3VzZUZ1bmMgKHBpY2tTcXVhcmVzKTsNCiAgICBnbHV0S2V5Ym9hcmRGdW5jIChrZXlib2FyZCk7
DQogICAgZ2x1dE1haW5Mb29wKCk7DQogICAgDQogICAgR0xfSU5ERVhfQklUUw0KDQoNCg0K
--089e01294a8076d9ec04dd816498
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

------------------------------------------------------------------------------
Try New Relic Now & We'll Send You this Cool Shirt
New Relic is the only SaaS-based application performance monitoring service 
that delivers powerful full stack analytics. Optimize and monitor your
browser, app, & servers with just a few lines of code. Try New Relic
and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may
--089e01294a8076d9ec04dd816498
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
PyOpenGL Homepage
http://pyopengl.sourceforge.net
_______________________________________________
PyOpenGL-Devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/pyopengl-devel

--089e01294a8076d9ec04dd816498--