NCI questions
I've been working on parsing the function prototypes in the GL/GLU/GLUT/GLX headers, in preparation for generating bindings for all of them during the Parrot build. Currently my prototype parser is able to compute NCI signatures for all but 14 out of the 1835 total prototypes found in my system's headers. Those 14 failures break down as follows: 5 Parrot NCI doesn't handle 'long long', only 'long long *' 4 Callback registration functions neither Parrot nor I handle yet 3 GetProcAddress-type functions; not sure how to deal with these 2 SGI-specific (IRIS?) headers required, which I don't have -- 14 TOTAL The second group I'll handle soon, and the fourth group I'll just ignore for now. That leaves the first and third groups, for which I could use some advice: 1. Any suggestions on a sane way to handle 'long long' NCI arguments, when Parrot could be built with either 32 or 64 bit INTVAL? 2. How do you create an NCI Sub (like the dlfunc op does) using a function pointer returned anonymously by a function, instead of by name using the normal dlfunc op? Also, I'm having to squash away signed/unsigned distinctions for non-pointer NCI arguments with integer types, because current Parrot NCI always forces integer types to signed. Any way to lift this limitation? -'f
[perl #52988] [NEW] OpenGL binding, part 1
# New Ticket Created by Geoffrey Broadwell # Please include the string: [perl #52988] # in the subject line of all future correspondence about this issue. # URL: http://rt.perl.org/rt3/Ticket/Display.html?id=52988 (I have heard nothing at all since my last posting on this subject, so I have continued working on it on my own.) I have now converted all of my OpenGL binding proof of concept code to the Parrot build system and directory structure. I have also added parsing of GL/GLU/GLUT headers to obtain all OpenGL #defines, fixed some bugs, and generally cleaned up some messy bits. This is still *FAR* from a complete OpenGL binding, but it includes a working animation example, and is considerably more right in its implementation than my previous postings. It will even properly respect a '--without-opengl' flag to Configure.pl. Now that 0.6.1 is out, please consider adding the attached patch to the Parrot trunk ... I'd like help with platform porting concerns, and I'd really like to reduce the size of my local diffs. :-) -'f === CREDITS == --- CREDITS (revision 4769) +++ CREDITS (local) @@ -247,6 +247,7 @@ D: Fix typo in PARROT_BIGENDIAN case N: Geoff Broadwell +D: OpenGL binding D: examples fixes N: Gerard Goossen === MANIFEST == --- MANIFEST (revision 4769) +++ MANIFEST (local) @@ -266,6 +266,8 @@ config/auto/memalign/test_c2.in [] config/auto/msvc.pm [] config/auto/msvc/test_c.in [] +config/auto/opengl.pm [] +config/auto/opengl/opengl.in[] config/auto/ops.pm [] config/auto/pack.pm [] config/auto/perldoc.pm [] @@ -317,6 +319,7 @@ config/gen/makefiles/pirc.in[] config/gen/makefiles/root.in[] config/gen/makefiles/tge.in [] +config/gen/opengl.pm[] config/gen/parrot_include.pm[] config/gen/platform.pm [] config/gen/platform/aix/asm.s [] @@ -653,6 +656,7 @@ examples/nci/ls.pir [main]doc examples/nci/sdl_blue_rectangle.pir [main]doc examples/nci/win32api.pir [main]doc +examples/opengl/triangle.pir[main]doc examples/pasm/cat.pasm [main]doc examples/pasm/fact.pasm [main]doc examples/pasm/hello.pasm[main]doc @@ -2595,6 +2599,8 @@ runtime/parrot/library/JSON.pir [library] runtime/parrot/library/MIME/Base64.pir [library] runtime/parrot/library/Math/Random/mt19937ar.pir[library] +runtime/parrot/library/NCI/call_toolkit_init.pir[library] +runtime/parrot/library/OpenGL.pir [library] runtime/parrot/library/PCT/README [library] runtime/parrot/library/PGE/Dumper.pir [library] runtime/parrot/library/PGE/Glob.pir [library] @@ -3468,6 +3474,7 @@ t/steps/auto_msvc-02.t [] t/steps/auto_msvc-03.t [] t/steps/auto_msvc-04.t [] +t/steps/auto_opengl-01.t[] t/steps/auto_ops-01.t [] t/steps/auto_pack-01.t [] t/steps/auto_perldoc-01.t [] @@ -3504,6 +3511,7 @@ t/steps/gen_core_pmcs-01.t [] t/steps/gen_languages-01.t [] t/steps/gen_makefiles-01.t [] +t/steps/gen_opengl-01.t [] t/steps/gen_parrot_include-01.t [] t/steps/gen_platform-01.t [] t/steps/init_defaults-01.t [] === MANIFEST.generated == --- MANIFEST.generated (revision 4769) +++ MANIFEST.generated (local) @@ -129,6 +129,10 @@ runtime/parrot/dynext/gdbmhash.dll[library] runtime/parrot/dynext/gdbmhash.dylib [library] runtime/parrot/dynext/gdbmhash.so [library] +runtime/parrot/dynext/libglutcb.bundle[library] +runtime/parrot/dynext/libglutcb.dll [library]
[perl #52988] [PATCH] OpenGL binding, part 1
On Wed Apr 16 14:34:05 2008, geoff wrote: Now that 0.6.1 is out, please consider adding the attached patch to the Parrot trunk ... I'd like help with platform porting concerns, and I'd really like to reduce the size of my local diffs. :-) Here's what I get on linux/amd64: Determining if your platform supports OpenGL...yes, GLUT 4. ... [EMAIL PROTECTED] parrot-trunk % ./parrot examples/opengl/triangle.pir error:imcc:Constant 'GL_MANGLE_C1' value must be a number, stringliteral or register in file 'opengl_defines.pasm' line 1394 included from 'examples/opengl/triangle.pir' line 1 The relevant portion of opengl_defines.pasm: .macro_const GL_MAD_ATI 0x8968 .macro_const GL_MAGNITUDE_BIAS_NV0x8718 .macro_const GL_MAGNITUDE_SCALE_NV 0x8712 .macro_const GL_MANGLE_C1DO .macro_const GL_MANGLE_C2This .macro_const GL_MANGLE_C3get .macro_const GL_MANGLE_C4get .macro_const GL_MAP1_BINORMAL_EXT0x8446 .macro_const GL_MAP1_COLOR_4 0x0D90 .macro_const GL_MAP1_GRID_DOMAIN 0x0DD0 It looks like this is a parsing bug, caused by some weird stuff in one of my header files. The top of my /usr/include/GL/gl_mangle.h looks like this: #if 0 #define GL_MANGLE_C1 DO NOT EDIT!!! - TO REGENERATE from gl.h, EXECUTE THIS FILE IN SHELL (/bin/sh) and save the output #define GL_MANGLE_C2 This file is used to create GL function protypes and aliases for the function names files=gl.h glext.h #define GL_MANGLE_C3 get regeneration header - copy everything in this file above the 'REGENERATE_TO_END' line awk '!done; /^\/\*REGENERATE_TO_END/ {done=1}' $0 echo #define GL_MANGLE_C4 get aliases grep '^GLAPI' $files | sed -e 's/.*ENTRY gl\([^( ]*\).*$/#define gl\1 MANGLE(\1)/' | sort | uniq echo echo #endif /* GL_MANGLE_H */ exit #endif /* REGENERATION */ Pretty, huh. Mark
M2 Bytecode format
: Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Hi, Jonathan (and everyone else)! Wednesday on IRC, we discussed the M2 Bytecode format milestone. This email is my attempt to formalize a plan for this work. I am hoping you will read through it and tell me how wrong I am. :) First off, I've created a branch (named pdd13pbc) for this. So that's where all this work is going to go. As we discussed, there are two top level goals here: 1. Update the disk format and/or interface to match the PDD13 spec. 2. Move all of the .pbc-handling code into a PackFile.pmc class. At your suggestion, I'm going to be focusing on the second option. It seems to me that I should tackle this in the following order: 2.1. Create some simple PMC classes named as specified in PDD13. 2.2. Toss together some methods which wrap around the existing src/packfile.c, src/packdump.c and src/packout.c functions. 2.3. Write a bunch of tests, test the hell out of it. 2.4. Start moving everything in parrot over to use the new PMC-based packfile API. 2.5. Copypaste pieces of packfile.c, packout.c, packdump.c code into the PMCs, to make them self-reliant. 2.6. Test the hell out of it. (Again.) 2.7. Rip out src/pack*.c and make sure nothing breaks. Questions: Does this plan sound reasonable? Should this PMC implement the pdump functionality (src/packdump.c) as well as packfile.c/packout.c? Speaking of pdump, it seems to be mentioned in various places, mostly documentation and scripts, but it does not actually seem to be buildable. Judging from the documentation, there used to be a make pdump, but not any more. What's up with that? Should I be tracking these subtasks in RT, or just keeping track of things on my own? Mark
Re: M2 Bytecode format
On Thu, Apr 17, 2008 at 10:59 AM, Mark Glines [EMAIL PROTECTED] wrote: : Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Hi, Jonathan (and everyone else)! Wednesday on IRC, we discussed the M2 Bytecode format milestone. This email is my attempt to formalize a plan for this work. I am hoping you will read through it and tell me how wrong I am. :) First off, I've created a branch (named pdd13pbc) for this. So that's where all this work is going to go. +1 As we discussed, there are two top level goals here: 1. Update the disk format and/or interface to match the PDD13 spec. 2. Move all of the .pbc-handling code into a PackFile.pmc class. At your suggestion, I'm going to be focusing on the second option. It seems to me that I should tackle this in the following order: 2.1. Create some simple PMC classes named as specified in PDD13. 2.2. Toss together some methods which wrap around the existing src/packfile.c, src/packdump.c and src/packout.c functions. 2.3. Write a bunch of tests, test the hell out of it. 2.4. Start moving everything in parrot over to use the new PMC-based packfile API. 2.5. Copypaste pieces of packfile.c, packout.c, packdump.c code into the PMCs, to make them self-reliant. 2.6. Test the hell out of it. (Again.) 2.7. Rip out src/pack*.c and make sure nothing breaks. Questions: Does this plan sound reasonable? Should this PMC implement the pdump functionality (src/packdump.c) as well as packfile.c/packout.c? Speaking of pdump, it seems to be mentioned in various places, mostly documentation and scripts, but it does not actually seem to be buildable. Judging from the documentation, there used to be a make pdump, but not any more. What's up with that? Should I be tracking these subtasks in RT, or just keeping track of things on my own? RT works. Thanks! Mark -- Will Coke Coleda
Re: [perl #52988] [PATCH] OpenGL binding, part 1
On Thu, 2008-04-17 at 05:49 -0700, Mark Glines via RT wrote: It looks like this is a parsing bug, caused by some weird stuff in one of my header files. The top of my /usr/include/GL/gl_mangle.h looks like this: #if 0 #define GL_MANGLE_C1 DO NOT EDIT!!! - TO REGENERATE from gl.h, EXECUTE THIS FILE IN SHELL (/bin/sh) and save the output #define GL_MANGLE_C2 This file is used to create GL function protypes and aliases for the function names files=gl.h glext.h #define GL_MANGLE_C3 get regeneration header - copy everything in this file above the 'REGENERATE_TO_END' line awk '!done; /^\/\*REGENERATE_TO_END/ {done=1}' $0 echo #define GL_MANGLE_C4 get aliases grep '^GLAPI' $files | sed -e 's/.*ENTRY gl\([^( ]*\).*$/#define gl\1 MANGLE(\1)/' | sort | uniq echo echo #endif /* GL_MANGLE_H */ exit #endif /* REGENERATION */ Oh man, that's just nasty. What the heck was that coder thinking?!? Clearly the problem is too much exposure to sed and awk. :-) I was hoping to not have to try to parse that kind of mess correctly, but it looks like I've got three options: 1. Parse the headers for real, instead of the current 80% solution. 2. Special case '#if 0 ... #endif'. 3. Parse the define *values*, and toss any that don't look right. I'm thinking #3, since it's probably best to have that safety check anyway, and it's probably the easiest. I'll work on that one. Pretty, huh. Oh yeah. Nice catch, thank you! -'f
Re: [perl #52988] [PATCH] OpenGL binding, part 1
On Thu, 17 Apr 2008 08:16:23 -0700 Geoffrey Broadwell [EMAIL PROTECTED] wrote: 3. Parse the define *values*, and toss any that don't look right. I'm thinking #3, since it's probably best to have that safety check anyway, and it's probably the easiest. I'll work on that one. Sounds good to me. Clearly those values weren't meant to actually be used anywhere. Mark
[perl #52818] readline detection failing (linux x86_64)
A solution was implemented at revision 27020. They might be cases where this doesn't work. (hope not)
Re: parrot benchmarking
If optimized builds are to be the default, however, someone needs to either hunt down and fix all the wrong attribute_null decorations, or apply a patch similar in spirit to the one I proposed in [PATCH] Re: [perl #50684] String Failures with -O2 (GCC 4.1.3, 32-bit x86 Linux) Otherwise core dumps will ensue. -- Andy Dougherty [EMAIL PROTECTED]
Re: parrot benchmarking
On Thu, 2008-04-17 at 15:35 -0400, Andy Dougherty wrote: If optimized builds are to be the default, however, someone needs to either hunt down and fix all the wrong attribute_null decorations, or apply a patch similar in spirit to the one I proposed in [PATCH] Re: [perl #50684] String Failures with -O2 (GCC 4.1.3, 32-bit x86 Linux) Otherwise core dumps will ensue. I see this particular priority bump to be a Good Thing, actually. I'd really like to see the correctness of optimized parrot ratcheted up a few notches -- so I can feel safe using it all the time. :-) -'f
Re: PCT tutorial update suggestions
On Fri, Apr 11, 2008 at 5:32 AM, Patrick R. Michaud [EMAIL PROTECTED] wrote: With some recent PCT-related changes I think we may want to update the tutorials a bit. 1. Remove the custom List class. ResizablePMCArray now has built-in shift/unshift/push/pop methods, so we can use it directly from NQP and don't need to create a custom List class to be able to invoke these operations. 2. Remove :scope attribute from PAST::Var nodes. My intent has been that most PAST::Var nodes for simple variables would not require individual scope attributes; with the changes I checked into Parrot tonight this should be easier. In Squaak's case this means that the Cidentifier action method should now read: method identifier($/) { make PAST::Var.new( :name($name), :viviself('Undef'), :node($/) ); } In particular, note that there's no longer a need to explicitly search outer blocks for the scope -- PCT will handle this automatically. To indicate that all undeclared variables should default to 'package' scope, we use the Csymbol_defaults method on the top-level block. For Squaak, we add the following to its TOP action method: $?BLOCK.symbol_defaults(:scope('package')); This says that 'package' scope is to be used for any PAST::Var node that doesn't have its own :scope and that doesn't have a scope provided by an outer block's symbol hash. 3. (Bonus problem) Eliminate @?BLOCK Since PAST::Var nodes no longer need to search outer blocks (PCT will handle that), we no longer need to maintain a @?BLOCK array. So, for bonus points, eliminate @?BLOCK from the Squaak methods. I don't really see immediately that @?BLOCK can be removed... blocks open and close, but $?BLOCk should always point to the current block, right? So, in order to restore $?BLOCK, we need to store the old one somewhere, and this must be done in a LIFO order (to allow for multiple nested blocks). Maybe I'm missing something. Could you explain this a bit? thanks! kjs If I can help explain or demonstrate any of the above, let me know. Thanks! Pm
Re: parrot benchmarking
On Thursday 17 April 2008 12:35:42 Andy Dougherty wrote: If optimized builds are to be the default, however, someone needs to either hunt down and fix all the wrong attribute_null decorations, or apply a patch similar in spirit to the one I proposed in [PATCH] Re: [perl #50684] String Failures with -O2 (GCC 4.1.3, 32-bit x86 Linux) Otherwise core dumps will ensue. Agreed; I'll look into this over the next few days. -- c
M2 Bytecode format
From: Mark Glines [EMAIL PROTECTED] Date: Thu, 17 Apr 2008 07:59:03 -0700 . . . Should this PMC implement the pdump functionality (src/packdump.c) as well as packfile.c/packout.c? I find pdump somewhat useful. Speaking of pdump, it seems to be mentioned in various places, mostly documentation and scripts, but it does not actually seem to be buildable. Judging from the documentation, there used to be a make pdump, but not any more. What's up with that? See config/gen/makefiles/root.in line 929. This works for me (GNU/Linux i586) in r26999. -- Bob Rogers http://rgrjr.dyndns.org/
[perl #52818] readline detection failing (linux x86_64)
On Thu Apr 17 10:51:10 2008, ambs wrote: A solution was implemented at revision 27020. They might be cases where this doesn't work. (hope not) This is what I got on Linux at r27021: Determining if your platform supports readline...cc -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DHASATTRIBUTE_CONST -DHASATTRIBUTE_DEPRECATED -DHASATTRIBUTE_MALLOC -DHASATTRIBUTE_NONNULL -DHASATTRIBUTE_NORETURN -DHASATTRIBUTE_PURE -DHASATTRIBUTE_UNUSED -DHASATTRIBUTE_WARN_UNUSED_RESULT -falign-functions=16 -fvisibility=hidden -maccumulate-outgoing-args -W -Wall -Waggregate-return -Wbad-function-cast -Wc++-compat -Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment -Wdeclaration-after-statement -Wdisabled-optimization -Wendif-labels -Wextra -Wformat -Wformat-extra-args -Wformat-nonliteral -Wformat-security -Wformat-y2k -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wimport -Winit-self -Winline -Winvalid-pch -Wmain -Wmissing-braces -Wmissing-declarations -Wmissing-field-initializers -Wno-missing-format-attribute -Wmissing-include-dirs -Wmissing-prototypes -Wnested-externs -Wnonnull -Wpacked -Wparentheses -Wpointer-arith -Wreturn-type -Wsequence-point -Wno-shadow -Wsign-compare -Wstrict-aliasing -Wstrict-aliasing=2 -Wswitch -Wswitch-default -Wtrigraphs -Wundef -Wunknown-pragmas -Wno-unused -Wvariadic-macros -Wwrite-strings -I./include -c test.c cc -L/usr/local/lib -Wl,-E test.o -o test -lnsl -ldl -lm -lcrypt -lutil -lpthread -lrt -lreadline /usr/bin/ld: cannot find -lreadline collect2: ld returned 1 exit status cc -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DHASATTRIBUTE_CONST -DHASATTRIBUTE_DEPRECATED -DHASATTRIBUTE_MALLOC -DHASATTRIBUTE_NONNULL -DHASATTRIBUTE_NORETURN -DHASATTRIBUTE_PURE -DHASATTRIBUTE_UNUSED -DHASATTRIBUTE_WARN_UNUSED_RESULT -falign-functions=16 -fvisibility=hidden -maccumulate-outgoing-args -W -Wall -Waggregate-return -Wbad-function-cast -Wc++-compat -Wcast-align -Wcast-qual -Wchar-subscripts -Wcomment -Wdeclaration-after-statement -Wdisabled-optimization -Wendif-labels -Wextra -Wformat -Wformat-extra-args -Wformat-nonliteral -Wformat-security -Wformat-y2k -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wimport -Winit-self -Winline -Winvalid-pch -Wmain -Wmissing-braces -Wmissing-declarations -Wmissing-field-initializers -Wno-missing-format-attribute -Wmissing-include-dirs -Wmissing-prototypes -Wnested-externs -Wnonnull -Wpacked -Wparentheses -Wpointer-arith -Wreturn-type -Wsequence-point -Wno-shadow -Wsign-compare -Wstrict-aliasing -Wstrict-aliasing=2 -Wswitch -Wswitch-default -Wtrigraphs -Wundef -Wunknown-pragmas -Wno-unused -Wvariadic-macros -Wwrite-strings -I./include -c test.c cc -L/usr/local/lib -Wl,-E test.o -o test -lnsl -ldl -lm -lcrypt -lutil -lpthread -lrt -lreadline -lncurses /usr/bin/ld: cannot find -lreadline collect2: ld returned 1 exit status (no) ...no. Setting Configuration Data: ( verbose = undef, ); But whenever I say 'sudo apt-get install libreadline5', I'm told the package is up-to-date. Configure.pl continues to correctly detect readline on my Mac OS X 10.4, where (IIRC) I installed it via Fink. kid51
Re: [perl #52988] [PATCH] OpenGL binding, part 1
On Thu, 2008-04-17 at 08:33 -0700, Mark Glines via RT wrote: On Thu, 17 Apr 2008 08:16:23 -0700 Geoffrey Broadwell [EMAIL PROTECTED] wrote: 3. Parse the define *values*, and toss any that don't look right. I'm thinking #3, since it's probably best to have that safety check anyway, and it's probably the easiest. I'll work on that one. Sounds good to me. Clearly those values weren't meant to actually be used anywhere. OK, try the attached version of the patch. The only thing different than the old patch is a few lines in the code that parses the header defines. Now only integer hex constants and integer or floating point decimal constants are allowed. (Constants defined to be the same as other constants still work.) Any other value will be ignored, with an optional message indicating the value that could not be parsed, if --verbose is on. -'f === CREDITS == --- CREDITS (revision 4780) +++ CREDITS (local) @@ -247,6 +247,7 @@ D: Fix typo in PARROT_BIGENDIAN case N: Geoff Broadwell +D: OpenGL binding D: examples fixes N: Gerard Goossen === MANIFEST == --- MANIFEST (revision 4780) +++ MANIFEST (local) @@ -266,6 +266,8 @@ config/auto/memalign/test_c2.in [] config/auto/msvc.pm [] config/auto/msvc/test_c.in [] +config/auto/opengl.pm [] +config/auto/opengl/opengl.in[] config/auto/ops.pm [] config/auto/pack.pm [] config/auto/perldoc.pm [] @@ -317,6 +319,7 @@ config/gen/makefiles/pirc.in[] config/gen/makefiles/root.in[] config/gen/makefiles/tge.in [] +config/gen/opengl.pm[] config/gen/parrot_include.pm[] config/gen/platform.pm [] config/gen/platform/aix/asm.s [] @@ -653,6 +656,7 @@ examples/nci/ls.pir [main]doc examples/nci/sdl_blue_rectangle.pir [main]doc examples/nci/win32api.pir [main]doc +examples/opengl/triangle.pir[main]doc examples/pasm/cat.pasm [main]doc examples/pasm/fact.pasm [main]doc examples/pasm/hello.pasm[main]doc @@ -2595,6 +2599,8 @@ runtime/parrot/library/JSON.pir [library] runtime/parrot/library/MIME/Base64.pir [library] runtime/parrot/library/Math/Random/mt19937ar.pir[library] +runtime/parrot/library/NCI/call_toolkit_init.pir[library] +runtime/parrot/library/OpenGL.pir [library] runtime/parrot/library/PCT/README [library] runtime/parrot/library/PGE/Dumper.pir [library] runtime/parrot/library/PGE/Glob.pir [library] @@ -3468,6 +3474,7 @@ t/steps/auto_msvc-02.t [] t/steps/auto_msvc-03.t [] t/steps/auto_msvc-04.t [] +t/steps/auto_opengl-01.t[] t/steps/auto_ops-01.t [] t/steps/auto_pack-01.t [] t/steps/auto_perldoc-01.t [] @@ -3504,6 +3511,7 @@ t/steps/gen_core_pmcs-01.t [] t/steps/gen_languages-01.t [] t/steps/gen_makefiles-01.t [] +t/steps/gen_opengl-01.t [] t/steps/gen_parrot_include-01.t [] t/steps/gen_platform-01.t [] t/steps/init_defaults-01.t [] === MANIFEST.generated == --- MANIFEST.generated (revision 4780) +++ MANIFEST.generated (local) @@ -129,6 +129,10 @@ runtime/parrot/dynext/gdbmhash.dll[library] runtime/parrot/dynext/gdbmhash.dylib [library] runtime/parrot/dynext/gdbmhash.so [library] +runtime/parrot/dynext/libglutcb.bundle[library] +runtime/parrot/dynext/libglutcb.dll [library] +runtime/parrot/dynext/libglutcb.dylib [library] +runtime/parrot/dynext/libglutcb.so[library] runtime/parrot/dynext/libnci_test.bundle [library]
[perl #52988] [PATCH] OpenGL binding, part 1
On Thu Apr 17 21:14:44 2008, geoff wrote: OK, try the attached version of the patch. Works For Me. So now lets see how much it breaks for everyone else. :) Applied in r27022, with the following modifications: * Removed trailing whitespace to pass codingstd test. * Rearranged config/gen/opengl.pm a bit, so that the POD snippets occur in the same order as it will occur in the output, to pass perlcritic.t and pod.t. Mark