mcfletch / openglcontext

PyOpenGL testing/demonstration context
Other
10 stars 5 forks source link

OpenGLContext 2.0

Changelog:

2.0.0c1 -> 2.1.0a1

PyOpenGL 3.x compatibility

Support for Numpy

PyVRML97 project split back out into separate project

A few more tests/demos

Register and look up node-types explicitly using plug-in framework.

Register and look up context-types explicitly using plug-in framework.

Expose scripts for vrml_view and choosecontext.

2.0.0b1 -> 2.0.0c1

Refactoring and code cleanup:

Major scripts moved to the bin subdirectory.

Contexts now have classmethods for their "main" functions.

Scripts to choose the default context class and font.

Application data directory now hidden on non-Win32 platforms
(.OpenGLContext instead of OpenGLContext).

Mechanism for specifying context attributes (size, depth,
buffer type, etceteras).  See the 
    contextdefinition.ContextDefinition
Node-class for details.

Default getScenegraph implementation of getattr(self,'sg',None).

Force flush before swap buffers (attempt to compensate for 
rendering artefacts on Linux).

Non-standard MouseOver node for constructing buttons.

PyGame interactivity fixes

    Work on making the PyGame interactions, particularly keyboard
    repeats, act in the same way as the keyboard interactions under
    wxPython and GLUT

wxTestingContext icons

    wxPython testing context now has icons set for the frame so that
    it isn't showing the (ugly) default windows icons.

A few more tests/demos

    wx_with_controls.py -- demo of wxPython context + interacting
        control outside the context

    arbwindowpos.py -- ARB extension for pixel-level positioning of
        bitmap position within the rendering window

Resources directory w/ OpenGLContext icons for easy import

Dispatcher module completely factored out into the SourceForge 
pydispatcher project.

Switched registerCallback to using class-methods, switched demo 
to using those methods to allow non-context-dependent registration 
of mouse events.

Refactoring of mouse-based events, addition of code to allow 
"captured" and "bubbling" events (parent recieves events 
before/after children and can cancel further propagation).

Bug Fixes:

    Try ImageTexture stub when PIL not available

    Workaround for strange bug with wxPython where the main thread 
    appears as two different objects, depending on whether it's in 
    a callback or not.

    Test for bugs in PyOpenGL's feedback mode operation

Additionally, some work has been done on the browser sub-package,
but it is still not finished to even prototype stages yet.  It may,
however, be useful as a source of sample code to some people.

2.0.0a4 -> 2.0.0b1

Optimization and accelerator modules:

    The entire rendering pipeline has been noticeably sped up,
    with a number of key performance bottlenecks rewritten
    using C modules (which should compile on any Python+Numeric
    setup).

Frustum Culling:

    Bounding box calculation for common geometry types, including
    caching and automatic updating of bounding boxes.

    Frustum extraction from model view matrix.

Polygonal and Bitmap Text (TTF):

    Use of (new) ttfquery package based on the fonttools package
    allows scanning for system fonts (or fonts in a given directory)
    and doing primitive face-name matching for those fonts.  Uses
    direct extraction of font outlines for polygonal text.

    Context customization point for setup

    Eliminated BitmapText node, use FontStyle.format ='bitmap' 
    instead.

All rendering methods and functions are now given a "mode"
argument, and generally pass that argument to the functions 
they call to provide access to the current renderpass, context,
etc.

GLE-based extrusion geometry types added

Added object for managing initialized extensions for a given
context

Added some utility mechanisms for dealing with parametric 
equations of planes expressed as 4-item arrays.

Switch to using Mip-mapped textures by default

Polygon tessellation code reworked and generalized (used
by the polygonal text engine, for instance).

Added (disabled) code to use display lists instead of array 
geometry for rendering indexed face sets.

Broke out vertex and polygon classes from IFS module

wxPython context:

    Added wants-chars style to work properly in panels

    wxPython context should also be somewhat more stable,
    particularly when used with Python 2.2.3.  Workarounds for
    Python 2.2.2 bugs are still in place, but they do not
    guarantee that no errors will occur, merely reduce the
    likelihood when using Python 2.2.2.

    Added ability to provide an OpenGL attribList for wxContext.

Bug Fixes (too many to list everything):

    Textures and display-lists in particular have significant
    bug fixes checked in.  Many of these were simply making
    the objects context-specific.  Also caught strange bug where
    display list creation is returning 0 rather than raising
    exceptions.

    Textured transparent geometry (i.e. geometry whose textures
    have Alpha channels) are now rendered during the transparent 
    rendering pass, rather than the opaque rendering pass.

    Fix for unlit textured geometry not showing white as base colour.

    TextureTransform logic bug eliminated (was occasionally leaving 
    the texture transform active).

    The cache API is now  easier to use, and hopefully will not
    be triggering Python 2.2.2 errors anymore.

    Python 2.3 compatibility revisions

    Removed premature optimisation which was eliminating USE'd 
    transparent shapes even though the matrices were different.

    Fix for build_normalPerVertex to properly build the normals 
    (produces true smoothing, rather than the rather strange 
    looking results of the previous version).

2.0.0a3 -> 2.0.0a4

PROTOs:

    Initial support for prototyped nodes added, which
    allows for loading a wider swath of VRML content. No
    support for EXTERNPROTO as-of-yet.

    Refactored vrml.vrml97.prototypes into vrml.route and
    vrml.vrml97.script modules

Events:

    Partial rework of the mouse-events API to allow the
    events to be handled during the event-cascade,
    addition of support for event-cascade deferal of event
    processing to eventhandler mix-in and Context classes.

    Addition of support in the event base class for tracking
    visited node/field combinations, calling of base-class
    initializer from the sub-class initializer's.

    ROUTEs are now active for fields

    IS mappings now work for PROTO fields (sub-class of ROUTE)

    Introduction of Event class in the vrml package, should
    become the base-class for OpenGLContext.events.event

Cleanup of bugs in Shape,  Switch and WGLFont where corner-
cases were not properly caught (e.g. no geometry, whichChoice
out-of-bounds, no text on a line)

IndexedFaceSet:

    Reworked generation code extensively, now supports
    colour-per-face and normal-per-face modes of VRML97

    Added a few sanity checks as well.

PixelTexture node added.

Preliminary Cylinder and Cone implementations.

Stub implementations of LOD, Inline and Billboard nodes.

Fix for transparent-geometry rendering (depth-buffer-testing
enabled).

Consolidated vrml.node and vrml.vrml97.node into vrml.node
Moved fieldtypes to vrml package instead of VRML97 package

Made default testing-context preference-sequence wx, Pygame,
then GLUT

Made all Bindable types also act as Children, since they are
present in the scenegraph hierarchy.

Fix for parsing hexidecimal-encoded SFImage fields (as seen
in PixelTextures).

Work-around for Python 2.2.2 calling of receiver methods in
dispatcher.

Considerably more robust getField implementation in
protofunctions

2.0.0a2 -> 2.0.0a3

Major Documentation updates (almost all doc-strings are
updated in all modules).

Loaders:

    Fixed bug with local-file loading where a local-file combined 
    with the url ../ would give a result of: z:../ , we now create 
    a file-path url in cases where a local-file is loaded.

    Moved vrml2pklgz script to loaders module.

    Re-added "dump" method to VRML97 loader.

ViewPlatform:

    Fix for the straighten method

    Elimination of distance attribute

    Switch to new-style classes

    Loosening of the API for setPosition and setOrientation

    Fix for bug in the "forward" method

    Mix-in:

        Eliminated trackball attribute and unProject method, 
        commented out the unused slider interface

Minor tweaks/optimisations to vectorutilities.

Nodes:

    Changed Node.externalURL back to a simple attribute value
    of the class (bug-fix)

    Made SFNode and MFNode donate rootSceneGraph to children
    without them when values are set.

    Eliminated unused WeakMFNode field-type

    Fixed bug in WeakField implementation (returned a weak 
    reference)

    Added a bound field to CubeBackground.

    Fixed inheritence for WeakSFNode, eliminated cube-background 
    work-around for rootSceneGraph tracking.

    Texture/ImageTexture:

        Refactored PIL texture conversions

        Fixed typo/copying bug in Texture.__del__

        Fix for image loading (default baseURI re-instated), 
        reduced levels on a number of log messages

    Fix for cube-background render when last glColor set
    the color to black.

    Added fields Background to shadow those in CubeBackground 
    which prevent ImageTexture objects being linearised to 
    VRML97 where they shouldn't be.

Complete rework of the field.Field implementation to 
eliminate the seperate "fieldtype" objects in favour
of making fieldtypes the actual type (class) of the 
field.  [ MAJOR CHANGE ]

Unused methods deleted from OverallPass

Fixed bug in the builtin( ) function, it would only properly
report for Nodes before, instead of working for both Nodes or
prototypes/classes.

Events:

    Eliminated use of Start and Stop Timer Events as 
    parents for Pause and Resume events

    InternalTime's now generate FractionalEvents in a few
    more places.

    Moved the examine manager to the events package

    EventManger.registerCallback raises NotImplementedError
    instead of SystemError if a sub-class doesn't implement
    the method.

    Minor cleanup in Event and EventHandler classes

Switch a few classes to being new-style classes.

Testing Code:

    ambient_only made a sub-class of the vrml_view test

    Removed obsolete glut stencil buffer test script

2.0.0a1 -> 2.0.0a2

Made scenegraph.regDefName de-register references to the 
object by it's previous defName if possible.

Added PROTO name declaration to BitmapText

Changed NurbsTrimmedSurface name to TrimmedSurface to 
follow the nurbs-extension naming scheme

Added "standardPrototype" function to loaders.vrml97 to
allow for programmatic registry of standardPrototypes for
the loader

Documentation updates.

A few setup and manifest changes.

Added a texture-specific log to the debug/logs module.

Addition of "root" protofunction for getting the root
scenegraph for a node (doesn't currently support 
automatically setting the root field for children, however)

Elimination of weakref dicts for implementating scenegraph, 
uses protofunctions instead

Elimination of "DEF" and "PROTO" references in favour of
protofunctions.defName and protofunctions.protoName

Image and Texture Loading:

    Initial support for loading textures across the network,
    basically it's the original VRML97 loader with a bit of
    refactoring to support both images and scenes.

    Caching textures (only creating a single OpenGL texture
    if there are multiple ImageTextures which use the same 
    PIL image)

    PIL paletted texture -> RGB

    PIL resize of non-power-of-two textures

IFS Tesellation -- commented out debugging code
when IFS runs out of vertex indices before it
runs out of other indices, just considers itself
done now (lets some malformed content load)

.cvsignore files added throughout

Added missing attribution for glprint test