Re: Two more demos - converted from exmaples in OpenGL redbook

Kang Zhao <[email protected]> Sat, 25 May 2013 10:31:04 +0800
Newsgroups gmane.comp.python.opengl.devel
Message-ID <CAKChtJ24phWak=i5yBE6M3ZSQHifDoHS8i-YtJFa+oFrKvFpaA@mail.gmail.com>
--001a11c231de0e068f04dd81b5ca
Content-Type: multipart/alternative; boundary=001a11c231de0e068b04dd81b5c8

--001a11c231de0e068b04dd81b5c8
Content-Type: text/plain; charset=ISO-8859-1

Sorry that I realized the two .py files I atatched in previous mail
contained some typos and obsolete codes.

The updated files are attached.

Kang


On Sat, May 25, 2013 at 10:08 AM, Kang Zhao <[email protected]> wrote:

> 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
>
>

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

<div dir=3D"ltr"><div>Sorry that I realized the two .py files I atatched in=
 previous mail contained some typos and obsolete codes.<br><br></div>The up=
dated files are attached.<br><br>Kang<br></div><div class=3D"gmail_extra"><=
br>
<br><div class=3D"gmail_quote">On Sat, May 25, 2013 at 10:08 AM, Kang Zhao =
<span dir=3D"ltr">&lt;<a href=3D"mailto:[email protected]" target=3D"_b=
lank">[email protected]</a>&gt;</span> wrote:<br><blockquote class=3D"g=
mail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-l=
eft:1ex">
<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>
</blockquote></div><br></div>

--001a11c231de0e068b04dd81b5c8--
--001a11c231de0e068f04dd81b5ca
Content-Type: application/octet-stream; name="select.py"
Content-Disposition: attachment; filename="select.py"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hh46k0zp2

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
--001a11c231de0e068f04dd81b5ca
Content-Type: application/octet-stream; name="picksquare.py"
Content-Disposition: attachment; filename="picksquare.py"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hh46k67q3

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
eXMuZXhpdCgpDQoNCiMgIGFtb3VudCBvZiBjb2xvciBmb3IgZWFjaCBzcXVhcmUNCmJvYXJkID0g
W1swIGZvciBpIGluIHJhbmdlKDMpXSBmb3IgaiBpbiByYW5nZSgzKV0NCg0KIyBDbGVhciBjb2xv
ciB2YWx1ZSBmb3IgZXZlcnkgc3F1YXJlIG9uIHRoZSBib2FyZA0KZGVmIGluaXQoKToNCiAgICBm
b3IgaSBpbiByYW5nZSgzKToNCiAgICAgICAgZm9yIGogaW4gcmFuZ2UoMyk6DQogICAgICAgICAg
ICBib2FyZFtpXVtqXSA9IDA7DQogICAgZ2xDbGVhckNvbG9yICgwLjAsIDAuMCwgMC4wLCAwLjAp
Ow0KDQonJycNCi8qICBUaGUgbmluZSBzcXVhcmVzIGFyZSBkcmF3bi4gIEluIHNlbGVjdGlvbiBt
b2RlLCBlYWNoIA0KICogIHNxdWFyZSBpcyBnaXZlbiB0d28gbmFtZXM6ICBvbmUgZm9yIHRoZSBy
b3cgYW5kIHRoZSANCiAqICBvdGhlciBmb3IgdGhlIGNvbHVtbiBvbiB0aGUgZ3JpZC4gIFRoZSBj
b2xvciBvZiBlYWNoIA0KICogIHNxdWFyZSBpcyBkZXRlcm1pbmVkIGJ5IGl0cyBwb3NpdGlvbiBv
biB0aGUgZ3JpZCwgYW5kIA0KICogIHRoZSB2YWx1ZSBpbiB0aGUgYm9hcmRbXVtdIGFycmF5Lg0K
ICovDQogJycnDQpkZWYgZHJhd1NxdWFyZXMobW9kZSk6DQogICAgZm9yIGkgaW4gcmFuZ2UoMyk6
DQogICAgICAgIGlmIG1vZGUgPT0gR0xfU0VMRUNUOg0KICAgICAgICAgICAgZ2xMb2FkTmFtZSAo
aSk7DQogICAgICAgIGZvciBqIGluIHJhbmdlKDMpOg0KICAgICAgICAgICAgaWYgKG1vZGUgPT0g
R0xfU0VMRUNUKToNCiAgICAgICAgICAgICAgICBnbFB1c2hOYW1lIChqKTsgICAgICAgICAgICAg
IA0KICAgICAgICAgICAgZ2xDb2xvcjNmIChmbG9hdChpLzMuMCksIGZsb2F0IChqLzMuMCksIGZs
b2F0KGJvYXJkW2ldW2pdLzMuMCkgKTsNCiAgICAgICAgICAgIGdsUmVjdGkgKGksIGosIGkrMSwg
aisxKTsNCiAgICAgICAgICAgIGlmIG1vZGUgPT0gR0xfU0VMRUNUOg0KICAgICAgICAgICAgICAg
IGdsUG9wTmFtZSAoKTsNCg0KJycnDQovKiAgcHJvY2Vzc0hpdHMgcHJpbnRzIG91dCB0aGUgY29u
dGVudHMgb2YgdGhlIA0KICogIHNlbGVjdGlvbiBhcnJheS4NCiAqLw0KJycnDQpkZWYgcHJvY2Vz
c0hpdHMgKGhpdF9idWZmZXIpOiAgICANCiAgICBwcmludCAiaGl0cyA9ICVkIiUobGVuKGhpdF9i
dWZmZXIpKTsgDQogICAgZm9yIGhpdF9yZWNvcmQgaW4gaGl0X2J1ZmZlcjoNCiAgICAgICAgejEs
IHoyLCBuYW1lcyA9IGhpdF9yZWNvcmQNCiAgICAgICAgcHJpbnQgIiBudW1iZXIgb2YgbmFtZXMg
Zm9yIGhpdCA9ICVkIiUobGVuKG5hbWVzKSkNCiAgICAgICAgcHJpbnQgIiB6MSBpcyAlZywiJXox
ICsgIiAgejIgaXMgJWciJXoyDQogICAgICAgIHByaW50ICIgdGhlIG5hbWVzIGFyZSAiOw0KICAg
ICAgICBwcmludCBuYW1lcyAgIA0KICAgICAgICBpaSA9IGludChuYW1lc1swXSkNCiAgICAgICAg
amogPSBpbnQobmFtZXNbMV0pDQogICAgICAgIGJvYXJkW2lpXVtqal0gPSAoYm9hcmRbaWldW2pq
XSArIDEpICUgMzsgICAgDQoNCg0KJycnDQovKiAgcGlja1NxdWFyZXMoKSBzZXRzIHVwIHNlbGVj
dGlvbiBtb2RlLCBuYW1lIHN0YWNrLCANCiAqICBhbmQgcHJvamVjdGlvbiBtYXRyaXggZm9yIHBp
Y2tpbmcuICBUaGVuIHRoZSANCiAqICBvYmplY3RzIGFyZSBkcmF3bi4NCiAqLw0KICcnJw0KDQoN
CmRlZiBwaWNrU3F1YXJlcyhidXR0b24sIHN0YXRlLCB4LCAgeSk6DQogICAgaWYgYnV0dG9uICE9
IEdMVVRfTEVGVF9CVVRUT04gb3Igc3RhdGUgIT0gR0xVVF9ET1dOIDoNCiAgICAgICAgcmV0dXJu
Ow0KICAgIA0KICAgIHZpZXdwb3J0ID0gZ2xHZXRJbnRlZ2VydiAoR0xfVklFV1BPUlQpOw0KDQog
ICAgQlVGU0laRT01MTINCiAgICBnbFNlbGVjdEJ1ZmZlciAoQlVGU0laRSk7DQogICAgZ2xSZW5k
ZXJNb2RlIChHTF9TRUxFQ1QpOw0KICAgIA0KICAgIGdsSW5pdE5hbWVzKCk7DQogICAgZ2xQdXNo
TmFtZSgwKTsNCiAgICANCiAgICBnbE1hdHJpeE1vZGUgKEdMX1BST0pFQ1RJT04pOw0KICAgIGds
UHVzaE1hdHJpeCAoKTsNCiAgICBnbExvYWRJZGVudGl0eSAoKTsNCiAgIA0KICAgICMgIGNyZWF0
ZSA1eDUgcGl4ZWwgcGlja2luZyByZWdpb24gbmVhciBjdXJzb3IgbG9jYXRpb24NCiAgICBnbHVQ
aWNrTWF0cml4IChmbG9hdCh4KSwgZmxvYXQodmlld3BvcnRbM10gLSB5KSwgNS4wLCA1LjAsIHZp
ZXdwb3J0KTsNCiAgICBnbHVPcnRobzJEICgwLjAsIDMuMCwgMC4wLCAzLjApOw0KICAgIGRyYXdT
cXVhcmVzIChHTF9TRUxFQ1QpOw0KDQogICAgZ2xNYXRyaXhNb2RlIChHTF9QUk9KRUNUSU9OKTsN
CiAgICBnbFBvcE1hdHJpeCAoKTsNCiAgICBnbEZsdXNoICgpOw0KICAgIA0KICAgIGhpdF9idWZm
ZXIgPSBnbFJlbmRlck1vZGUgKEdMX1JFTkRFUik7DQogICAgcHJvY2Vzc0hpdHMgKGhpdF9idWZm
ZXIpOw0KICAgIGdsdXRQb3N0UmVkaXNwbGF5KCk7DQoNCmRlZiBkaXNwbGF5KCk6DQogICAgZ2xD
bGVhcihHTF9DT0xPUl9CVUZGRVJfQklUKTsNCiAgICBkcmF3U3F1YXJlcyAoR0xfUkVOREVSKTsN
CiAgICBnbEZsdXNoKCk7DQoNCmRlZiByZXNoYXBlKHcsIGgpOg0KICAgIGdsVmlld3BvcnQoMCwg
MCwgdywgaCk7DQogICAgZ2xNYXRyaXhNb2RlKEdMX1BST0pFQ1RJT04pOw0KICAgIGdsTG9hZElk
ZW50aXR5KCk7DQogICAgZ2x1T3J0aG8yRCAoMC4wLCAzLjAsIDAuMCwgMy4wKTsNCiAgICBnbE1h
dHJpeE1vZGUoR0xfTU9ERUxWSUVXKTsNCiAgICBnbExvYWRJZGVudGl0eSgpOw0KDQoNCiMgTWFp
biBMb29wDQppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOg0KICAgIGdsdXRJbml0KHN5cy5hcmd2
KTsNCiAgICBnbHV0SW5pdERpc3BsYXlNb2RlIChHTFVUX1NJTkdMRSB8IEdMVVRfUkdCKTsNCiAg
ICBnbHV0SW5pdFdpbmRvd1NpemUgKDEwMCwgMTAwKTsNCiAgICBnbHV0SW5pdFdpbmRvd1Bvc2l0
aW9uICgxMDAsIDEwMCk7DQogICAgZ2x1dENyZWF0ZVdpbmRvdyAoc3lzLmFyZ3ZbMF0pOw0KICAg
IGluaXQgKCk7DQogICAgZ2x1dE1vdXNlRnVuYyAocGlja1NxdWFyZXMpOw0KICAgIGdsdXRSZXNo
YXBlRnVuYyhyZXNoYXBlKTsNCiAgICBnbHV0RGlzcGxheUZ1bmMoZGlzcGxheSk7IA0KICAgIGds
dXRNYWluTG9vcCgpOw0KDQoNCg0KDQo=
--001a11c231de0e068f04dd81b5ca
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
--001a11c231de0e068f04dd81b5ca
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

--001a11c231de0e068f04dd81b5ca--