Last saved: Tue 20 Sep 2011 09:52:40 AM 


Fix segfault in glutMainLoop() for test.pl on vista
    * Build debug perl for win32
    * Get gdb for MinGW
    * Same with MSVC 6.0 and latest
    * Does same code with Prima::OpenGL not segfault?


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.


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


Evaluate strategy for legacy POGL going forward:
    * Factor out RPN, OGA, ...
    * Can implementation be less OGA specific
    * Support OGA, PDLs, ...
    * What about using just PDL::Core stuff


Enhance CPAN Testers automated testing support
    * Improve diagnostic output for debugging test results
    * Add a "compile and link only" build of POGL
    * Base on GLEW or GLee implementation
       * Start with GLEW for more cross-platform
       * Can implementation be made wrapper library independent?


Improve library and headers checks in Makefile.PL
    * Required libraries are OpenGL and a GUI/context providing toolkit
        * GLUT/FreeGLUT, Prima::OpenGL, GTk+, WxWidgets,...
        * 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()
        * what about GLU, GLX, others?
    * 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
    * move to common, clear choice as default!


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 or other GUI/context environment
        * N.B. *GLUT is on *all* GLX systems but may not use GLX
	* What is needed to support Tk+X11 bindings (just context?)
	* Investigate Gtk+ or wxWidgets for embedding
	* GLUI as an easy, simple starter (performance?)


Fix examples/ directory
    * update to use GLUT rather than glp()
        * make simple toolkit wrapper
	* hide details of the underlying GUI layer
	* simplify demo code
    * 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


Add support for more GLUT variant export control:
    * Split GLUT into a separate module
        * I.e., remove GUI dependencies from POGL
        * Need generic context interface standard
	* Should be able to use Prima instead
	* or WxWidgets or GTk or ...
    * :freeglutconstants and :freeglutfunctions
    * :appleglutconstants and :appleglutfunctions


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


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()
        * Call glGetError in a loop until no errors returned
	* Do check for all OpenGL commands


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


OpenGLUT support for building
    * OpenGLUT is a dead project, use FreeGLUT.
    * Add info to docs re *no* OpenGLUT


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
       * Extract GL, GLX, and WGL constants from glew.h, glxew.h and wglew.h
       * Extract GLU constants from glu.h
       * Extract GLUT and FreeGLUT from glut.h and freeglut_*.h
       * Verify that these pre-extracted versions work ok
    * use GLEW and autogeneration for bindings
        * why does GLEW require GLX_VERSION_1_2?


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)
	* PDL object support
    * NOTE: require_ok() and use_ok() don't like $VERSION w git suffix


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


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
