Last saved: Mon 18 Jul 2011 02:08:52 PM 


Update POD documentation
    * OpenGL.pod refer to POGL project at sf.net
    * Clean up refs to source, bins, information
    * Deprecate old support and clean up bindings


Remove support for PM on OS/2
    * Strip out
    * Add documentation to last version with support
    * May be moot since GLX needs to go as well
       * All we need as far as GLX goes is the ability
         to create an X11 window and context for rendering
	 via Perl OpenGL.  Should be able to take a GLX
	 context (Tk embedding, for example)


Add support for more GLUT variant export control:
    * :freeglutconstants and :freeglutfunctions
    * :appleglutconstants and :appleglutfunctions


Make code handle "missing" windows:
    * Calls glutGetWindow() and assumes win is valid
    * If win==0, need to handle appropriately and *not* do anything with win


Resolve ASPerl PPM build problems:
    * win32 fails because of the FreeGLUT install during Makefile.PL
    * linux fails because FreeGLUT is not found
    * Mac OS X fails because the GLUT compile env is not right
    * What does ASPerl do re external packages needed to build?


Evaluate local include directory usage
    * needed for win32 since we install
    * check we're using the systemwide files
    * if not, why not


Refactor XS files partition
    * move common macro defs to single place
    * make separate include headers for RPN, OGA ...
    * split out constants by library
    * resplit pogl_gl.xs by function groups


Enhance CPAN Testers automated testing support
    * Improve diagnostic output for debugging test results
    * Add a "compile and link only" build of POGL


Improve library and headers checks in Makefile.PL
    * Required libraries are OpenGL and GLUT/FreeGLUT
        * what about GLU, GLX, others?
        * GLUT is available on *all* GLX platforms
	* Mac OS X has a non-X11 GLUT library with extensions:
	    * glutCheckLoop()   -- same as glutMainLoopEvent()
	    * glutWMCloseFunc() -- same as glutCloseFunc()
    * If libraries and headers are not available exit 0
    * Devel::CheckLib to check


Evaluate backwards compatibility
    * document compatibility, at a minimum
    * provide feedback info to report issuues
    * primary goal is OpenGL, GLUT, GLU support
    * secondary goal is more perlish interface


Clean up glp*() routine support:
    * add friendlier display selection function (glpInitDisplayString?)
    * backwards compatible where possible
    * strip out required GLX or X11 specific code
    * layer over GLUT environment
        * N.B. *GLUT is on *all* GLX systems but may not use GLX
	* What is needed to support Tk+X11 bindings (just context?)
	* Is Tk even being used?
	* Investigate Gtk+ or wxWidgets for embedding
	* GLUI as an easy, simple starter (performance?)


Fix examples/ directory
    * update to use GLUT rather than glp()
    * verify all examples work (most appear to)
    * remove broken cruft
    * redo planets example to be more realistic:
        * planets aren't spheres
	* sun has no depth + jaggies
	* colors are off
	* animation is jumpy (how to smooth out)
	* give saturn *real* rings
	* what is blue wedge in earth view?
	* basic texture for planets


Implement basic template for GLUT/GLUI apps
   * Simple default/bare bones option
   * Generic version with typical interaction
   * Customizable version (runtime?)
   * Maybe in examples directory as a module to use


Add Geometry Shader support


Add bindings to GLUI


Move test apps to t/ subdirectory from test.pl
    * Split into interactive and non-interactive tests
    * Skip interactive tests if no OpenGL context
    * need to test for each major functionality
        * GL
        * GLU
        * GLUT/FreeGLUT
        * RPN
        * Array
        * back compatibility (glp routines)
    * NOTE: require_ok() and use_ok() don't like $VERSION w git suffix


Implement safe glutInit
    * check if done_glutInit before calling glutInit()
    * carp/croak/quiet error settings


Fix OpenGL/GLUT error handling for perl
    * GLUT errors should not kill the interpreter
        * Add carp/croak on no glutInit to glut functions to prevent exit(1)
        * Add carp/croak to glutDisplayFunc() with null callback.
        * Add carp/croak to glutSetKeyRepeat() with invalid repeat mode
        * Add carp/croak to glutSetCursor() with unknown cursor type
    * Investigate addition of adding return values to perl code
        * This would be great for a debug mode
        * No return value if not in debug mode (or always undef?)
        * undef for error; 1 for void or vice versa?
    * Add toggle & display of OpenGL errors a la glutReportErrors()


Finish perl bindings to remaining FreeGLUT functions:
    * glutGetProcAddress
        * what does this mean at perl level?
        * maybe use Inline to generate a new binding
        * is there a runtime alternative?
    * glutJoystickFunc
        * need to add non-callback argument
        * document current function


Improve support for non-standard OpenGL configurations
    * Add command line options for perl Makefile.PL
        * set CFLAGS and other build options
        * Make single point override for INCLUDE information
    * Document how to edit Makefile.PL


OpenGLUT support for building
    * OpenGLUT appears to be a dead project, use FreeGLUT.
    * OpenGL support not planned at this time


Make POGL GLUT-proof
    * Make build work with GLUT-only and GLUT+FreeGLUT configurations
      * GLUT-only: build and run with reduced functionality
      * GLUT+FreeGLUT: build should correctly select and use FreeGLUT
    * Nothing should break if you have GLUT rather than FreeGLUT
        (as long as you are only using the GLUT subset of FreeGLUT)
    * Some functionality may be quietly disabled (glutMainLoop extensions)
    * Some functionality may be emulated (glutBitmapString)
    * make work with readline event loop for perldl shell
        * reverse callback strategy
        * what about a GUI window mode for perldl in that case?


Fix current POGL configuration and build process
    * Clean up use of configuration information
    * Make the compile and config results unambiguous
        * Compile flags have two types
            * System info flags: HAVE_GLX, HAVE_GLUT, ...
            * Build flags: BUILD_GLUT, BUILD_FREEGLUT, ...
        * Exactly what libraries are being used
	* Library versions and locations/paths
        * What are the compile and link configuration
	    * split out compile/link by libraries
	        * OpenGL
		* GLU
		* GLUT
		* GLX
        * What bindings are actually enabled?
        * Use the same information to build POGL as glversion
    * Refactor Makefile.PL to be comprehensible.
        * strip out unused options
        * remove include and link directories that do not exist
        * replace make of glversion by perl based functionality
        * toolkit option: GLUT and FreeGLUT
        * interface option: GLX/unix, WGL/win32, [ AGL/CGL? ]


Refactor config/build for portability and simplicity
    * use Module::Build framework
    * use constant rather than XS constant function
    * use GLEW and autogeneration for bindings
        * why does GLEW require GLX_VERSION_1_2?


Miscellaneous portability improvements
    * Convert malloc() and calloc() calls to Newx(), Newxc(), and Newxz()
    * Convert free() to Safefree() to match.


Implement complete matrix test capability
    * document/implement a test matrix for regression and stability tests
    * setup virtualized test environment for POGL and PDL
    * factors to include
        * perl vs activeperl vs strawberry
        * GLX vs WGL vs CGL/AGL
        * hardware vs software/Mesa
        * OS
