OSG Change log ============== 9th August 2001 - osg-0.8.42.tar.gz o Toned down the specular light values set by default in osgUtil::SceneView:: setDefaults from 0.8 to .1, this reduces the effect of scaling of normals on lighting - which was causing a bad flikering affect on models contains scaling. This points to a need to automatically scale the normals, but more on this in a future release. o Removed WXFLAGS from Make/makedefs.* since it is nolonger required. o From Randall Hopper - fixed compliations problems under IRIX on flt plugin. o Fixed bugs in osg::Camera::calc_fovx() and calc_fovy() which causing them to return incorrect values. o Added code to osgimpostor demo to insert an Impostor above models which don't have an osg::Group at their root. o Fixed bug in osgUtil::VisualsRequirementsVisitor so that by default the alpha and stencil buffers are not required. o Added reporting of visuals requested in osgGLUT::Viewer::open(), accessible only as INFO, so doesn't get reported by default. To see the reporting set the environmental variable OSGNOTIFYLEVEL INFO 8th August 2001 - osg-20010808.tar.gz o Made the new flt loader the standard flt loader for the release, deleted the old one. o From Brede Johansen - fix to material sharing in new flt loader. - new default values for the light source in SceneView::setDefaults. o From Randall Hopper - fixes to osgWX and wxsgv. 7th August 2001 - osg-20010807.tar.gz o Updated version numbers to reflect the imminent 0.8.42 release. o Fixes to osg::Camera::calc_fovx() and calc_fovy() which were incorrectly takening into account zNear in calculation of field of view. o From Randall Hopper - fixes to warnings under IRIX in the .dw plugin. o From Randall Hopper/Robert Osfield - fixes for the unix Makefile and source files in src/Demos/wxsgv demo. o From Karsten Weiss - bug fixes to osg::Group::removeChild and replaceChild. 6th August 2001 - osg-20010806.tar.gz o From Ben Discoe - integated osgWX library and Demos wxsgv viewer, which demonstrates osg integration with wxWindows!!! note, Unix Makefiles have not been tested yet, and the the MS projects are not linked up by default. o From Ben Discoe - fixed a misleading typo in src/osgUtil/Registry.cpp. - added a guard into SceneView::draw() to prevent a crash when no scene data is attached to the scene view and the draw method is called. o Fixed waning in osg::CullingVolume::operator = (..) related to a missing return *this; o Renamed osgUtil::BufferRequirementsVisitor to osgUtil::VisualsRequirmentsVisitor to make it more in keeping with the setting up of OpenGL 'visuals', and changed the apply(StateSet&) method to applyStateSet(StateSet&) to prevent warnings under IRIX. o Converted src/osgPlugin/newflt/Makefile from dos style text into unix style text. 5th August 2001 - osg-20010805.tar.gz o Fixed culling bug related to having osg::Transform within the scene graph which scale dramatically - the bug was in osg::Plane which didn't renormalize the plane equation after transformation. Renormalization is required for the isCulled(BoundingSphere&,..) method. o From Geoff Michel - primitive and depth complextity statistics added to osgUtil::RenderBin/RenderStage and osgGLUT::Viewer. New class osgUtil::Statistics records no of primitive etc per frame. o Fixed bug in osgUtil::CullVisitor::pushCullViewState(..) where the up vector was being incorrectly transformed, resulting in sporadic impostor orientations. o From Randall Hooper - fixes to CullVisitor to solve inappropriate warnings which occured when the near and far values were calculated with the range numerically rounding errors. Also fix to osg::Matrix::transform3x3 which was implementated incorrectly. o From Brede Johansen - integrated update flt loader which will allow it to handle old Open Flight file versions. - also Integrated a small patch to osgPlugins/flt/flt2osg.cpp from Judd Tracy w.r.t converting ConvertFromFLT::visitDOF(..) to use osg::Transform instead or osg::Group. I have added a comment to this method as it still isn't complete, and will need the osg::Transform's matrix to be set up to refelct the DOFRecord. - Testing with Berkleys dataset revealled that the new flt loader was creating one triangle per geoset which causes a massive loss in performance, I've look for an obvious cause for this, but don't understand the code enough to track it down. I have reverted to the old flt (0.8.41) plugin and moved the new flt plugin to src/osgPlugins/newflt. I will make it the default once the problem has been fixed. RO. o Added osg::Matrix::set(const float* ) implemention to src/osg/Matrix.cpp. o Fixed typos of "spshere","albiet","overiden" & "completly" in include/osg. 25th July 2001 - osg-0.8.41 o Replaced osg::Camera::setModelTransform(..) with more flexible osg::Camera::attachTransform(TransformMode,Matrix*) which allows for setting of both a EYE_TO_MODEL or MODEL_TO_EYE transforms. osg::Camera::getTransform(TransformMode) and dirtyTransform() has also been added, the later to allow the Camera to know about external modifications to attach transforms. o Updated NEWS file. o Removed second entry for png plugin from src/osgPlugins/Makefile. 24th July 2001 - osg-20010724.tar.gz o Updated the INSTALL file to include mention of make install and make help. o Fixed two bugs in the osg::Impostor implementation, the first related to the handling of empty impostors, the second was the handling of impostors composed of depth sorted bins. 23rd July 2001 - osg-20010723.tar.gz o Bumped version numbers up to 0.8.41 in preperation for the release. o Fixed a bug in src/osgPlugin/pfb's conversion of Performer texture filter modes into osg, the mag filter was being set with a invalid enumerant. The bug resolved itself as OpenGL errors being reported to the console on loading some .pfb files. o Added osgUtil::RenderStageLighting to encapsulate the lighting of the osgUtil::RenderStage, and to allow sharing of lighting between RenderStages, such when using pre-rendering stages. o Added osg::Drawable::s/getSupportDisplayList() which can be used to prevent display lists from being used on specified drawables. Typical use would be to protect dynamic drawables such as continous level of details drawables from being encapsulated with a display list. Attempts to turn on display lists on such a drawable will now results in a warning, and will have no affect on the drawable. o Added osgUtil::BufferRequirementsVisitor to traverse a scene graph establishing the OpenGL buffers required to support rendering of that scene graph. The results can then be used by applications to set up there windows with the corret visuals. Modified osgGLUT:: Viewer::open() to use the new visitor and set up the buffers accordingly. The calls to gluInitDisplayString in the demos are now redundent and have been removed. 21th July 2001 - osg-20010721.tar.gz o Added support for depth sorting of impostor sprites into osgUtil::CullVisitor and added public methods to osg::CullVisitor to allow the switching on or off or impostor depth sorting, and the turning on or off of impostors. o Added demo osgviews to demostrate multiple views of single scene, not currently functional, will fix later. o From Randall Hopper - support for multiple viewports in osgGLUT::Viewer. o From Geoff Mitchel - new OpenGL based stats reporting added to osgGLUT::Viewer. Similar in style to Performer's perfly stats. o Fixed the osg::Camera::home() method so its sets to the OpenGL defaults position of looking down the z axis, with the upvector along the +ve y axis. o Fixed a warning in osg::State. 18th July 2001 - osg-20010718.tar.gz o Further improvements to the osg::Impostor implementation, various bugs have been fixed and out of date ImpostorSprite's can now be reused via an osg::ImpostorSpriteManager, which is stored in the osgUtil::CullVisitor. o Added an osgUtil::InsertImpostorsVisitor which traverses the scene graph inserting osg::Impostor nodes above osg::Group's (and its subclasses such osg::Transform) and converts osg::LOD nodes into osg::Impostor nodes. The demo osgimpostor has been modified to use the new InsertImpostorsVisitor. 13th July 2001 - osg-20010713.tar.gz o Various improvements to the osg::Imposter implementation, now includes pixel error calculation which will work for both perspective and othographic projections. The Impostor doesn't currently support texture reuse, but the much of the code to support is implemented, yet have to tie up the loose ends for the next release now. o Fixes to osg::Texture::copyTexSubImage2D to ensure that _mag_filter was set to LINEAR, to ensure that mipmaps arn't used. o Fixed Visual C++ workspace file for .dw plugin, to ensure under debug build it correctly links to glu library. 12th July 2001 - osg-20010712.tar.gz o Added src/Demo/osgimpostor to demonstrate how to use the new osg::Imppostor node and to test the impostor implementation. o Implemented first cut of osg::Impostor, ImpostorSprite, and RenderToTextureStage. Implemention not complete, and bugs exists which prevent the textured quad appearing with its texture?! o Fixed osg::Camera::zNear()/zFar() methods which returning the wrong values. o Updated AUTHORS file. o From Geoff Mitchel, .dw (design workshop) loader plugin. o Fixed coordinate transformation in osgPlugins/obj - Alias Wave OBJ loader. o Fixed minor unsigned to signed comparision warning in osg::Texture. 1st July 2001 - osg-20010701.tar.gz o Rewritten osg::Camera class to support Otho, Frustum and Perspective projection modes. Significant API changes have been made, the new Camera implementation is not backwards compatible. o Added osg::ClippingVolume to represent a convex clipping volume. o Added osg::Plane class to support view frustum clipping and other operations requiring plane operations. o Made corrections to osgtexture usage details. o From Ulrich Hertlein - fixes to osg::Texture to prevent bind of textures to NULL image data and added missing #include to osgUtil::IntersectVistor. o Removed the erroneous inline keyword from infront of osg::StateSet::setRenderBinToInherit(..) which was causing compilation errors under IRIX. o Fixed file permission problems in include/osg/Object, and osgDB. o Fixed a bug in osgGlut::Viewer where view frustum culling and small feature culling could be toggled off, o Fixed a bug in osg::Quat::makeRot(Vec3,Vec3) where the angle calculated was incorrectly calculated. Also added a couple of set methods and made the constructors inline. o Added osg::Drawable::dirtyBound() which should be called when geometry is updated. Note it does not dirty geodes above - this will have to be done by caller. June 26th osg-20010626.tar.gz o Several changes related to making the NewCullVisitor now the standard CullVisitor, since it now has greater functionalility, performance and more robust than the previous incarnation of CullVistor. - Removed osgUtil::Renderer as this is now rendundent thanks to the new RenderStage functionality. - Replaced osgUtil::CullVisitor by osgUtil::NewCullVisitor and removed NewCullVisitor references as these are nolnger needed. - Moved osgUtil::CullViewState out of osgUtil::CullVisitor header and into its only file header and source files. - Updated osgUtil::SceneView to only refer to new standard CullVisitor. - Updated Unix and VisualStudio files accordingly. o Fixed problem related to calculation of the near far planes when a non-uniform transformation exists in the scene graph. o Fixed problem related to view fustum culling when a non-uniform transformation exists in the scene graph. Solution was to use the transpose of the inverse transformation matrix to transform plane normals rather than the transformation matrix as used for points. o Fixed two bugs in osg::notify(), pinpointed by Randall Hooper. The first was in osg::initNotifyLevel() - the check for DEBUG was hidding the settings for DEBUG_FP and DEBUG_INFO since it was first of these in the if/else code and all contain the word DEBUG. The solution was to move DEBUG check to the last entry. The second bug was related to osg::setNotifyLevel() - if this method was called before the first call to osg::notify() then osg::notify would automatically call initNotifyLevel and overwrite the setNotifyLevel value. The fix was to make setNotifyLevel call initNotifyLevel itself before setting the value, and add protection into initNotifyLevel so that the internal code is never executed more than once. June 22nd - osg-20010622.tar.gz o Added osgUtil::NewCullVisitor::createOrReuseMatrix() and createOrReuseRenderLeaf() methods to allow reuse of what was temporary memory from frame to frame. Combined with the new near and far plane code, the cull traversal for models like Performer town is now 40-60% faster, and on models with a large nuber of internal transforms the figure can be 80+% faster :-) o Changed the techinique for calculating the near and far planes inside NewCullVsitor to be more efficient - now about up to and over 4 times faster! Makes a particular difference on models with large numbers of transform nodes. o Changed osg::Draw::drawImmediateMode() so that it takes an osg::State as a parameter. o Changed the referencs to -glut in unix Makefiles so that is is specified by a $(GLUTLIB) paramter, which is now set in the Make/makedefs.* files. This allows the GLUTLIB to be changed to allow linking to static glut libraries. It defaults still defaults to -glut as before, so no change in standard behavior will be noticed. o Added osgUtil::RenderToTextureStage in preperation for support for Imposters. o Added osg::Impostor, ImpostorSprite header and source files, these files are simply shells for future integration work, and do not currently function as Impostors. Modified osg::NodeVisitor and osg::CullVisitor so that they now recognise the Impostor node. June 18th - osg-20010618.tar.gz o Reverted to the prev_ReaderWriterPNG.cpp since I was having problems loading png files that used to work. This will break other png files for which the new_ReaderWriterPNG.cpp was created to handle. Both clearly arn't up to job and need a rewrite. Will do this later... o Made osg::Camera::draw_PROJECTION() and osg::Camera::draw_MODELVIEW() virtial functions to allow subclassing. o Removed the references to opengl.lib and glu.lib from the lwo loaders as they arn't required. o Under Unix, changed the names of the jpeg and tiff plugins from libdb_jpg.so and libdb_tif.so to libdb_jpeg.so and libdb_tiff.so respectively, and used the new addFileExtensionAlias to alias the common file etension to use these new names. This makes it consistent with the name of the directories and source files in the distribution. Windows already used this convention. o Added osgDB::Registry::addFileExtensionAlias(,) to allow file extension to be aliased to appropriate osgPlugins. Current default aliases are: addFileExtensionAlias("rgba", "rgb"); addFileExtensionAlias("int", "rgb"); addFileExtensionAlias("inta", "rgb"); addFileExtensionAlias("bw", "rgb"); addFileExtensionAlias("jpg", "jpeg"); addFileExtensionAlias("jpe", "jpeg"); addFileExtensionAlias("tif", "tiff"); addFileExtensionAlias("geo", "lwo"); addFileExtensionAlias("lw", "lwo"); o Pulled libtiff, libpng and libjpg win32 image libraries from the OpenIL image library distrbution and placed them into a zip archive for win32 users to install, instead of having to trawl the internet for them. June 15th 2001 - osg-20010615.tar.gz o Updated the TARGET_INCLUDE_FILES to reflect current set of include files so that make install works properly once more. o Fixed the src/osgUtil/Tesselate.cpp so that it detects the defination of GLU_VERSION_1_2 and use modern glu tesselation functions rather than the old style deprecated glu tess functions. This fixed compilation problems under recent versions of Mesa. o Fixed the texture coordinates of the top of the tank in the hangglide demo - the center point texture coords were not being initiliaed o Fixed a crash in osg::Texture::apply() which occurred when it was called without a valid image being attached. The fix is simply to add an _image.valid() check at the begining of the method. o Changed src/Demos/sgv/Makefile so that it defaulted to *not* linking with Performer - the previous dev release had this as default which it shouldn't have. June 13th 2001 - osg-20010613.tar.gz o Added support osg::StateSet::RenderBinDetails into .osg reader/writer plugin. This now allows multi-pass models to be saved and loaded, such as osfreflect demo can now be reproduced in a .osg file. o Added support for osg::Stencil, osg::Depth, osg::ClipPlane and osg::ColorMask classes to .osg reader/writer plugin. o Added support osg::Drawable:UseDisplayList into .osg reader/writer plugin. o Fixed the src/osgPlugins/pfb/ConvertFromPerformer.cpp so that is scales the shininess value correctly when converting materials to osg. o Added checks to osg::Material::set*(..) methods to use the new bounds checking utilties to clamp values to valid ranges. o Added include/osg/BoudingChecking header file with template definitions for clamping paramters to specified ranges. template functions provided are: clampGEQUAL(...), clampLEQUAL(..) amd clampBetweenRange(). 11th June 2001 - osg-20010611.tar.gz o Went through library source adding, where required to suppress spurious warnings in during MSVC++ debug compilation, pragma warning ( disable 4786) o Changed the mapping of coordinates in the .obj and .lwo loaders from +x east, +y upwards, +z north (as specified in file specs) to the OSG's +x east,+y north,+z updwards. The windings of triangles has also been flipped to handle this change. o Added a RegistryPtr class to handle the destruction of the the registry, assinging NULL to the pointer once the registry is deleted. Subsequent calls to the get() of RegistryPtr will return NULL, which can be used for testing whether the registry still exists or not. This means that Registry::instance() will now return NULL if the registry has been automatically deleted. The RegisterDotOsgWrapperProxy and RegistryReaderWriterProxy have been modified to use this new property to prevent the registry being called once it has been deleted. This has been done to prevent out of order destruction causes seg faults on exit. o Added Tesselator to src/osgUtil to be used in for breaking up concave polygons into triangles - uses the glu tesselator. o Reimplemeted src/osgPlugins/lwo to use new tesselator and allocate seperate vertex lists for each material type. o From Randall Hopper - Added missing int from static definition in src/GLUT/Viewer.cpp. o Removed use to OSGHOME from src/osgPlugins/lwo & obj Makefiles, replacing with normal relative include paths for makedefs and rules. o Removed unnecessary glib reference from src/osgPlugins/lwo/Makefile. 7th June 20001 - osg-200010607.tar.gz o From Ulrich Hertlein - .obj and .lwo loaders. Various fixes and porting to Windows done by Robert Osfield. o Fixed bug in osgcube related to the color of the cube having an alpha value of 0.0, which resulted in all OpenGL fragmennts failing the AlphaFunc test which is now on by default. Changed the alpha to 1.0 for opaque. o Implemented a multi-pass reflection demo in src/Demos/osgreflect which uses the stencil buffer to tag mirror bits, and 5 render bins to order rendering as Mark Kilgard's paper "Improving Shadow and Reflections via the Stencil Buffer" which can be download at the NVidia website. o Moved osg::Stencil, osg::Depth and osg::ColorMask from src/Demos/osgreflect into the core osg library. o Added osg::ClipPlane StateAttribute subclass to encapsulate OpenGL's glClipPlane function. 31st May 2001 - osg-20010531.tar.gz o Added osg::Stencil, osg::Depth and osg::ColorMask StateAttribute subclasses to the osgreflect demo to enable multi-pass use of the stencil buffer. osgreflect.cpp has yet to be modified to take advatange of these new state class or multi-bin functionality, this will be done for the next dev release. The Stencil, Depth and ColorMask classes will be added into the core osg for the next release. o Added beginings of osgUtil::NewCullVisitor which will support the new multi-pass/stage functionality, and replace osgUtil::CullVisitor once the functionality is finalised. osgUtil::SceneView has been modified to use either NewCullVisitor & RenderBin etc or the previous CullVisitor/Renderer functionality. SceneView defaults to the NewCullVisitor. o Added beginings of osgUtil::RenderBin,osgUtil::DepthSortedBin and osg::RenderStage to support multi-pass and multi-stage rendering. o Fixed bug in osg::Matrix::mult(const Matrix& lhs,const Matrix& rhs) which occured when either the lhs or rhs paramters were the same matrix and 'this'. The osg::Matrix::invert(const Matrix& m) also sufferd the potential problem. In both methods I've added checks against the 'this' pointer to trap these cases and create a temporary copy of 'this' before proceeding. o From Ulrich Hertlein - support for texture subloading in osg::Texture. 25th May 20001 - osg-20010525.tar.gz o Added new osgUtil::RenderLeaf class for storing drawable, matrix & depth data and for rendering in conjunction with osgUtil::Renderer. RenderLeaves are themselves stored inside the RenderGraph and replace the previous pair which did a similar job. The new class allows extension, via subclassing, of the data stored in a RenderLeaf, such as id's for picking, and also override of the local rendering behavior via a its virtual render(..) method. o Changed the printing of frame rate stats so that it prints out appropriately every second rather than every frame, therefore reducing the overhead of printing out to the terminal. o Added prioritizeTextures() method to osgUtil::Renderer which parses the draw bins and calculates the most appropriate texture priotization. o Added getTextureObject(..) and getTextureObjectSize() to osg::Texture to allow details of the texture object to be publicly accessed. o Implemented view frustum culling that switches of redundent checks against the side sides of the view frustum when traversing children. 19th May 2001 - osg-0.8.40 (minor updates made to release of 18th May) o Small correction to NEWS file. o Small updates to index.html. o Removed '-ldl' from makedefs.irix.* as it is not required. 18th May 2001 - osg-0.8.40 o Updated Make/makedefs.* to better support FreeBSD compilation. o Updated index.html and doc/Doxyfiles/* to include references to the osgDB library and osgtexture demo program. o Changed the default IRIX make to make.std, and make.nonstd to make irix.old. o Added src/Demos/osgtexture - a demo to demostrate the various texture modes possible with osg::Texture. o Fixed CullVisitor::setCullingActive(..) so that it now sets the current CullViewState's modes as it should, previously only the CullVisitor::pushMatrix() was setting these values. o From Zang Zong Shan - bug fix to osg::Group::removeChild() to ensure that the parent is removed from its child properly. o From Karsten Wiess (with small mods for to avoid sqrt by Robert Osfield) added osg::BoundingSphere::intersects( const BoundingSphere& bs ) o Add comments to methods include/osg/StateSet and StateAttribute. o Added osg::Texture::readImageFromFramebuffer(...) from Karsten Weiss' Imposter code. Note, name of method has been changed (from get..) and State parameter added to allow the handling of multiple contexts. o Changed the png plugin to use code from simage rather than previous png code that the osg used, solving a crash reported on some png files. o Added temporary fixes into include/osg/StateSet, src/osg/StateSet.cpp and src/osgPlugins/osg/StateSet.cpp to get round a crash under Windows when saving a dot osg file. Actual problem has not been isolated, so fix will be removed once real problem has been solved. o From - added support for IMB_MIRROR_REPAT extension into osg::Texture and .osg plugin. o Added code to osgPlugins/osg/Texture.cpp to record the original name of the image filename to be passed onto the image filename, instead of the absolute path with name as recorded by the image plugins themselves. This changes preserves the name from loaded .osg through to any subsequent save .osg. 10th May 2001 - osg_20010510.tar.gz o Bumped version numbers up to 0.8.40 o Added #include to osgUtil/SmoothingVisitor. 9th May 2001 - osg-20010509.tar.gz o From Randall Hooper - modifications to osg::Timer, Makefile's and the addition of Makefile/makedefs.freebsd Makefile/makerules.freebsd to add support for the FreeBSD flavor of Unix! o From Axel Volley - fixes to FieldReader and RenderGraph headers and to Make/makedefs.irix.* to fix compilation problems which have occurred under IRIX with the latest dev versions. o Added the ability to clean and reuse the RenderGraph tree from frame to frame, thus reducing the memory overhead of allocation and deleting on each frame. 8th May 2001 - osg-20010508.tar.gz o Added osg::StateAttribute::clone()=0 to the StateAttribute header file to complete the overriding of osg::Object's virtual methods. o Revised the StateAttribute/StateSet/State API a small amount to make it more consistent. o Fixed memory leak in new version of CullVisitor where more Matrices were being allocated than required, and were left unreferenced. o Fixed viewing bug in hangglide, introduced in osg-20010418.tar.gz with the modifications to the osg::CameraManipulator base class. o Added const and inline to methods in include/osg/* header files, making it more explicit which methods are inline, and which paramters and returns types are const. The later can help compilers produce appropriate compiler errors when inappripriate things are done with return types, which is good for compile error detection, and also allows the compiler to more aggressive optimizer code. o Fixed compilation error in osg::Output::open(,,,) under windows by removing method. This is not a problem to end users since the method was only added for absolute completness of overriding the ofstream::open() method. 6th May 2001 - osg-20010506.tar.gz o Added osg::State::apply(const osg::StateSet*) to apply a StateSet without requiring a pushStateSet(),apply(),popStateSet() as required in previous dev version. Combined with the two changes changes below draw traversal times have been reduced significantly on models with large number of state changes (such as billboarded trees in Performer town.) Both Cull and Draw traversal times are now faster than previous releases. o Moved the support for tranform Matrices in the osgUtil::RenderGraph into a Drawable/Matrix pair rather than one per RenderGraph element. Modifed osgUtil::CullVisitor and osgUtil::Renderer to reflect this change. o Added 'inline' keyword to numerous methods in osg and osgUtil header files to give a less subtle hints to compilers than a inline method is indeed inline. VisualC++ particularily seems to need inline to specified explicitly. o Added osgDB::Output::s/getPathNameHint() and Output::setPathNameHint(..) to to help future support for absolute filepaths, relative file paths in the .osg outout. Currently only implements AS_IS and FILENAME_ONLY. 3rd May 2001 - osg-20010503.tar.gz o Modified osgUtil::SceneView to reference the RenderGraph and Renderer's. o Modified osgUtil::CullVisitor so it creates a RenderGraph instead on the previous DrawBin. o Added osg::StateSet::g/setRenderingHint(..) to allow hints to be passed on to the Renderer to allow it place the drawables in the appropriate rendering bin for rendering. This allows, for instance the rendering transparent bin to be addressed independantly from the current GL_BLEND mode. An int is used so more than just Opqaue or Transparent bins could be referenced from within the scene graph (but these must be handled by Renderer subclasses.) o Replaced osgUtil::DrawBin by osg::Renderer which traverses a RenderGraph to generate its own render bins, supports basic coursed grained state sorting. Designed to subclassed to allow users to modify the rendering behaviour. o Implemented new osgUtil::RenderGraph class for storing state, matrix and drawable data produced from a cull traversal (such as by CullVisitor.) o Removed all osg::StateAttribute subclasses static void enable()/disable() as these have been made redundent by the new osg::State/StateSet & StateAttribute functionality. o Removed osg::Lighting since it is now redundent thanks to new functionality of osg::State/StateSet & StateAttribute functionality. o Reworked the .osg, .pfb, .3ds and .flt loaders to use the new osg::StateSet class. o Reworked osgUtil, osgDB, osgGLUT, Demos/osgcube, osgreflect and hanglide to use the new osg::StateSet class. osg::StateSet class. o Renamed osgUtil::GeoStateManipulator to osgUtil::StateSetManipulator be consitent with GeoState's replacement. o Replaced osg::GeoState with new more flexible osg::StateSet. osg::GeoState nolonger exists so users will have to port to use the new osg::StateSet. Functionality can easily be mapped across to the StateSet so this should not be difficult task. o Removed the deprecated RenderVisitor since it has now been replaced by the more flexible and powerful CullVisitor/DrawBin pair (which themselves may be replaced later by more flexible and powerful...:) o Fixed osg:Geode::computeBound() method so that it handled empty geode's correctly setting the Bounding Sphere to default initialized state to represent and empty sphere. Previous (nan,nan,nan) was calculated for the center of the bounding sphere for empty data. o To fix a compliation collision when #define DEBUG is used and Notify is included, have changed enum NotifySeverity { ... DEBUG=5, FP_DEBUG=6 } to enum NotifySeverity { ... DEBUG_INFO=5, DEBUG_FP=6 } 18th April 2001 - osg-20010418.tar.gz o From Neil Salter, additions to osgUtil of new osgUtil::GUIEventHandler, osgUtil::SceneViewManipulator and osgUtil::GeoStateManipulator. o Fixed date problems in distribution which occured in osg-20010416.tar.gz. o Added make stats option to the root Makefile to allow the number of lines of code in each component of the OSG to be logged. 16th April 2001 - osg-20010416.tar.gz o Added Don Burns sgv key bindings documentaiton into doc/sgv.html o Added s/getState() to osgUtil::DisplayListVisitor to provide state for the compile display list method to use. Added new DisplayListMode COMPILE_ON_DISPLAY_LISTS which is implemented so that if display lists are already switched on in the traversed scene graph are compiled. o Added support for multiple OpenGL contexts (and hence multiple seperate texture object and display lists) into osg::Texture::apply(State&) and osg::Drawable::draw(State&). This allows the OSG to work in multipipe systems. o Added (State& state) parameter to both osg::StateAttribute::apply(State&) and osg::Drawable::draw(State&) to allow the handling multiple OpenGL context. All subclass' of StateAttribute and Drawable have been updated to reflect this new paramter. o Added s/getContextID() to osg::State to handle the specification of a unique unsigned int to specifiy the current active OpenGL context. This value is in turn used by osg::Texture and osg::Drawable to manage multiple texture binds and display lists, one for each OpenGL context, thus enabling multi-pipe support. o Fixed the osgDB::Registry::writeObject() so that it supports the writing of osg::Object UniqueID out to .osg. 7th April 2001 - osg-20010407.tar.gz o Added numerous get and set methods to a large proportion of classes in the core osg library. Made methods const correct where appropriate. Also modifed several enum type names to be more consistent from class to class. o From Karsten Wiess - added osg::Matrix::makeRot(Vec3,Vec3). o Added ostream << operator to osg::Matrix for debugging purposes. o Changed osg::Object::isSameKindAs(Object*) to be const correct i.e isSameKindAs(const Object*) const. All subclasses of osg::Object have been updated to reflect this change. o Changed the osg::Billboard::get* functions so that they return values rather than requiring the paramter passesing. This has been done to be more consistent with the rest of the osg, make it easier to use and improve the potential for compiler optimization. o Moved loadObject/Image/NodeFile from include/osg/Registry into include/osgDB/ReadFile, and renamed them readObject/Image/NodeFile to keep consistency with ReaderWriter & Registry. o Moved saveObject/Image/NodeFile from include/osg/Registry into include/osgDB/ReadFile, and renamed them writeObject/Image/NodeFile to keep consistency with ReaderWriter & Registry. o Moved database & dynamic plugin support out of core osg library into seperate osgDB library which is now an optional layer above the core osg. o Moved osg ascii support & ReaderWriter out of core osg library and into a seperate osgPlugins osg plugin. o Moved rgb image reader out of core osg library and into a seperate osgPlugins osg plugin. o Removed osg::Scene since it is now redundent thanks to the new ability to attach osg::GeoState to all internal nodes within the scene graph. o Removed osg::Sequence as it was nothing more than a shell implemention, which could be inappropriately used. Will implement properly later. 29th March 2001 - osg-20010329.tar.gz o renamed the following methods in osg::GeoSet for consistancy: getNumIndices() -> getNumCoordIndices() getCIndex() -> getCoordIndices() getNumNIndices() -> getNumNormalIndices() getNIndices() -> getNormalIndices() getNumCIndices() -> getNumColorIndices() getColIndex() -> getColorIndices() getNumTIndices() -> getNumTextureIndices() getTIndex() -> getTextureIndices() o Itegrated changes from Bryan Woods for Mac port: - include/osg/Timer - small macintosh #define comment out. - src/osg/FileNameUtils.cpp - added using std::tolower,std::stlen within #machintosh guards. - src/osgGLUT/Viewier.cpp - #ifndef machintosh printing out of library name and version in constructor. - src/sgv.cpp & repsective files osgcube,osgreflect and hanglide have moved the glutInit(,) call to the top of each main function. - updated the Metroworks file o Added a src/Demos/sgv/Makefile.performer and Makefile.standard to all the direct linking to Performer hack to be easily applied to sgv to get round the know problems with dynamically linking to Peformer. o Changed osgUtil::SceneViewer::draw() method so it would clear background even if no model have been attached to the scene view. o Changed include/osg/Notify to use #ifdef __GNUC__ instead of __linux as guard for dummy code required to prevent a gcc warning. 25th March 2001 - osg-0.8.39.tar.gz o Added option for uint indices in osg::GeoSet to allow very large models to be represented. o Moved the distribution version numbering from previous osg-0.8-39.tar.gz style to more standard osg-0.8.39.tar.gz The distribution directory also now reflects the new version numbering, so rather than the OpenSceneGraph-0.8 the directory will be osg-0.8.39. These two changes bring the OSG into line with established conventions in the open source world. o From Karsten Wiess - added small piece of dummy code into include/osg/Notify to prevent inappropriate gcc warnings. o From Neil Salter - updated the doc/Doxyfiles directory to handle the proposed version number i.e. osg-0.8.39 for next version. - updated NEWS file to be compatibile with new automated scripts for generating Doxygen documentation for distribution. - updated osg banner in html pages to indicate documentation is from the distribution. o Fixed typo in src/osgPlugins/lib3ds/track.cpp which caused the lib3ds to fail to build. 21st March 2001 - osg_src-20010321.tar.gz o Added osg::StateAttribute base class, changed all state attribute classes so that they now inherit from osg::StateAttribute and changed osg::GeoSet to work with osg::StateAttribute. All StateAttrbute subclasses (Texture/TexGen...) all now register with the osg::Registry, and all .osg file reading uses these prototype as per image,node, and drawable prototypes. Although osg::GeoState is still hardwired to certain state attributes as before much of the infrastructure around it has be upgraded to pave the way for a more flexible osg::GeoState. o Removed _drawBin->reset() from CullVisitor::reset() since it should be reset extrenal to the CullVisitor. o Added osgUtil::SceneView::s/getDrawBin() methods. o Changed the lib3ds includes to be local header paths and changed lib3ds/float.h to lib3ds/lib3ds_float.h to avoid collisions with the system float.h. Note, the changes to path required changes to both the source, Unix Makefile and VisualStudio lib3ds.dsp files. o Changed the usage text to reflect the name of osgreflect. o Removed app and cull traversal calls from osgGLUT::Viewer::draw(), since there are now handled by their own app() and cull() methods. 18th March 2001 - osg_src-20010318.tar.gz o Implemented base class osg::Drawable from which osg::GeoSet is now derived. osg::Geode now contains a list of osg::Drawables, and osg::Registry and osg::Input have been extended to handle dynamic exensions of osg::Drawable in file IO. Numerous files have been modified to support the new structure, it is also likely to break user code, look at the code with the plugins and demos to see how adapt code to the new style. The changes are likely to be minimal - for instance geode->addGeoSet(geoset) would change to geode->addDrawable(geoset). Some .osg files no longer load due to a bug introduced with the above changes - still investigating it, likely to be just a typo somewhere... o Renamed DCS -> Transform. o Renamed Seg -> LineSegment. 15th March 2001 - osg_src-20010315.tar.gz o Added osgUtil::SceneView::setAppVisitor(), getAppVisitor() and app() to support user defined app traversal. o Added support for the new SceneView::app() traversal into osgGLUT/Viewer and cleaned up the app(),cull() and draw() methods. o Added an AppVisitor to the Demos/osgreflect which rotates the loaded model about its center point. o Added a osg::NodeVisitor::reset() to be called prior to each traversal to allow subclasses to flush internal set for each traversal. 14th March 2001 - osg_src-20010314.tar.gz o Added reflection demo, which can be found in Demos/osgreflect. o Made osg::Reference::_refCount mutable and the ref() & unref() const methods, to faciliate the referencing of const objects. o Added support for attaching osg::GeoState to internal nodes in the scene graph. This enables subgraph's state to be overridden, which enables several multipass techniques, such as planar reflections. o Added src/osg/State.cpp to help manage pushing and popping of current state. include/osg/State previously existed but was just a shell, and has now been updated to provide funcitonal interface! o Fixed a typo in VisualStudio/Demos/osgcube/osgcube.dsp which caused debug build link time errors - a space was missing between two library names. o Added osg::FrontFace state attribute class for managing the OpenGL glFrontFace(,) on a per osg::GeoState basis. Added files include/osg/FrontFace and src/osg/FrontFace.cpp and modified include/osg/GeoState, src/osg/GeoState.cpp. o Added osg::GeoState::merge(osg::GeoState* lhs,osg::GeoState* rhs) method to osg::GeoState, for use in the new osgUtil::DrawBin. o Updated comments in include/osgUtil/SmoothingVisitor, TriStripVisitor and include/osg/Scene. o Corrected header guards in DisplayListVisitor to be consistent with rest of library, and updated comments. o Update NEWS with small revisions. o Fixed crash in NvTriStrip due to TriStripVisitor calculating the number of vertices one to small, which resulted in memory errors. 6th March 2001 - osg_src-20010306.tar.gz o Added new class osgUtil::CullVisitor and osgUtil::DrawBin which are steps towards spliting up the osgUtil::RenderVisitor into its component parts. o Updated NvTriStripObject.cpp with patch from NVidia. o Updated the NEWS information to allow automatic parsing of the file for NEWS and headlines on the osg website implmented by Neil Salter. o From Karsten Weiss - added comments and correct typo's in include/osg/Scene and include/osg/Group o Added osg::PolygonMode state attribute class for managing the OpenGL glPolygonMode(,) on a per osg::GeoState basis. Added files include/osg/PolygonMode and src/osg/PolygonMode.cpp and modified include/osg/GeoState, src/osg/GeoState.cpp and src/osgGLUT/Viewer.cpp to utilize the new class. 4th March 2001 - osg_src-20010304.tar.gz o Changed osg::Scene and osg::DCS to use osg::ref_ptr<> instead of directly managing dynamically memory. o Fixed crash due memory errors in osgUtil::IntersectVistor. o Updated NEWS with main items for ChangeLog dating back to the first days of the ChangeLog. o Changed the file extension checking methods in ReaderWriterOSG, ReaderWriterRGB, ReaderWriterOSGTGZ, ReaderWriterTGZ, ReaderWriterZIP to use use new function osg::equalCaseInsensitive(lhs,rhs). o General purge of warnings in libs and plugins. o From Neil Salter - spelling corrections to include/osgGLUT/Viewer. - updates to doc/Doxyfiles/*. o Added extensions guard to src/Demos/hangglide/ReaderWriterFLY.cpp which fixes the bug where the hangglide demo does can only read .osg or .fly input files. o Updated the index.html and doc/index.html with the OSG banner and new text and various clean ups. Added doc/OpenSceneGraphBanner.jpg o Fixes to get dev version below compiling under IRIX std and non std compile options - FileNameUtils.cpp, Seg.cpp, NvTriStrip.cpp and lib3ds/quat.cpp. 1st March 2001 - osg_src-20010301.tar.gz o Macintosh port of osg from Bryan with mods for integration by Robert. - Added Metrowerks make files. - Added strdup defintion into src/osg/FileUtils.cpp to ensure compatiblity under mac. - Added #defined(macintosh) into include/osg/Types to define M_PI etc. - Integrated changes to src/osg/DynamicLibrary.cpp for macintosh port. - Integrated changes to src/osg/FileNameUtils.cpp for macintosh port. - Integrated changes to src/osg/FileUtils.cpp for macintosh port. - Integrated changes to src/osg/Registry.cpp for macintosh port. - Integrated changes to src/osg/Texture.cpp for macintosh port. - Integrated changes to src/osg/Timer.cpp for macintosh port. - Integrated changes to src/osg/GLExtensions.cpp for macintosh port. - Integrated changes to src/osgUtil/RenderVisitor.cpp for macintosh port. - Integrated changes to src/osgUtil/IntersectVisitor.cpp for macintosh port. - Integrated changes to include/osgGLUT/Viewer for macintosh port. - Integrated changes to src/osgGLUT/Viewer.cpp for macintosh port. - Integrated macintosh timmer support into include/osg/Timer - Modified src/osg/Texture.cpp to take account of the new file name type in osg::Image. - Converted osg::Image::_fileName from char* to std::string to avoid issues with portability due to strdup not being availble on mac. 28th Faburary 2001 - osg_src-20010228.tar.gz o Updated the osgUtil::TriStripVisitor to create seperate tri strips, which fixes crashes which occured under Windows. Significant speed up is can be achieved for many datasets by applying the tri stripper. However, right now it can flip triangle orientation which if back face culling is on may cause a model to apparantly disapper... Turn off back face culling to see all surfaces. This 'feature' will be fixed to maintain surface orientation before and after tri stripping. 24th Feburary 2001 - osg_src-20010224.tar.gz o Modified osg::GeoSet to support sharing of the coord, normal, texture and colour index list in both the .osg IO and the handling fast paths for rendering. o Added support for smoothing groups to 3ds plugin. o Added support for beautify to unix makefiles and ran it on .cpp files. o Added osgUtil::TriStripVisitor which use NvTriStrip to create optimized triangular strips. Modified osgGLUT::Viewer to tri strip when 'R' is pressed (for tRi strip). *Note* this is work in progress and its is known to crash in certain circumstances. o From Karsten Weiss - added comments to osg::Switch. o Removed redundent src/Demos/hangglide/Trees.cpp. o Added < operator to osg::Vec2,3 & 4. o Changed the implementation of osgUtil::SmoothingVisitor to fix a bug and to increase algorithm speed - now O(nlogn) rather than O(n^2). 17th Feburary 2001 - osg_src-0.8-38.tar.gz o Added REPLACE to osg::TexEnv which supports the equivilant GL_REPLACE texture environment mode. o Fixed osg::GeoSet rendering bug which occurs when an coord index list is mixed with normals (or colors) which are attached to the geoset on a per vertex basis. o Made appropriate osgUtil::RenderVisitor get methods const. o Changed osg::Geode::getNumGeosets() to osg::Geode::getNumGeoSets() for consistentcy and made it and several other osg::Geode methods const. 15th Feburary 2001 - osg_src-20010215.tar.gz o Added beginings of a 3ds loader, based on lib3ds, can now load meshes and textures. o Added file search function osg::findFileInDirectory(..) which has the option of doing case insensitve comparisons of names. Useful for handling dos mixed case filenames under unix. 3ds files are particularily prone to incorret case between filename in .3ds file and file on disk, this method allows these problem filename to be handled gracefully under unix. Also add osg::equalCaseInsensitive() which takes two strings and compares them for equality ignoring case to support the above osg::findFileInDirectory(..) o Added new demo app - osgconv which takes loads specified files, and then writes out the resultant model to a specified file. o Updated version number in doc/Doxyfiles/Doxyfile_all, src/osg/Version.cpp src/osgUtil/Version.cpp and src/osgGLUT/Version.cpp. o Added include/osgGLUT into the TARGET_DIRS list in Make/makedefs.linux and Make/makedefs.irix.nonstd & makedefs.irix.std 10th Feburary 2001 - osg_src-0.8-37.tar.gz o Moved camera manipulator registration from osgGLUT::Viewer::constructor, and setting of home in osgGLUT::Viewer::init() to happen in osgGLUT::Viewer::run() and only when not other initialized. This allows programs with use the the osgGLUT::Viewer class can set up there own camera manipulators as in src/Demos/hangglide. o Moved src/osgPlugins/fly to src/Demos/hangglide and created a simply hang glider flight simulator. o Added support for ARB and S3TC texture compression into osg::Texture and methods to control the way that the internalFormat is used for OpenGL textures. o Updated version numbers in src/osg/Version.cpp, osgUtil/Version.cpp, osgGLUT/Version.cpp and doc/Doxyfile. o Removed src/osgPlugins/matrix.h&.cpp,vector.h&.cpp,oldtrees.cpp. o From Karsten Wies - fix to src/osg/Switch.cpp to solve IO bug, corrections to comments in include/osg/Registry. o From Neil Salter - changes to support both doc++ and doxygen documention. 29th January 2001 - osg_src-20010129.tar.gz o Moved src/Demos/cube to src/Demos/osgcube to remove install conflicts under RH7, changed cube.cpp to osgcube.cpp, changed src/Demos/osgcube/Makefile changed VisualStudio/VisualStudio.dsw and VisualStudio/Demos/cube etc.. o Removed two obsolete object files in src/osg/{ExtensionSupported.o,OSG.o} o Removed vi swp file OpenSceneGraph-0.8/dist/.osg.spec.swp o Fixed file permission of in doc/MindMap and doc/UML. o Removed comma's at end of enumerator list in include/osg/GeoState and src/osgPlugins/FaceRecord.h 28th January 2001 - osg_src-0.8-36.tar.gz o Rewrote the implementation of osg::notify() once again to solve a crash under Windows when an int is passed to the absorb stream. Have moved the ofstream to a local static definition in osg::notify() rather than a global in Notify.cpp. Note, the absorb stream is now always set to "nul" or "/dev/null" under Windows and Unix respectively, and can no longer be set to a user file. o Did spell check on include/osg/Notify, Notify.cpp, FAQ. o Added a couple of comments to src/osg/Billboard.cpp to explain current incomplete implementation. o Fixed minor warning in include/osg/mem_ptr. o Updated src/osg/Version.cpp, src/osgUtil/Version.cpp & src/osgGLUT/Version.cpp to version 0.8.36. 25th January 2001 - osg_src-0.8-35.tar.gz o Added basic comments to osgUtil::GUIActionAdapter explain a little of how it might be used in. o Added reading from .osg files of the "Axis x y z" for osg::Billboard, previously osg::Billboard::readLocalData ignored the Axis paramter even though it was saved. o From Karsten Weiss : - Spelling corrections to comments in include/osg/Object & Node. - Extra comments to include/osg/Matrix. o Fixed bug in osg::Image::ensureDimensionsArePowerOfTwo() where message was being written out without guarding against the image name being NULL. o Fixed the osg::notify() messaging function under Windows, with same functionality that has exisited under unix - allowing users to absorb messages, send them to cerr, cout or to a nominated file, controlled via environmental variables, or set functions with the application. o Went through all include/osg header files removing redundent includes to minimize compile time. Removed include's of glu.h and glx.h in the include/osg/GL header file as these are only required in specific cases. o Removed UnrefOp functor from inclide/osg/Referenced and changed all dependent files to use osg::ref_ptr<> instead for handling memory. o From Don Burns : -code for smoothing normals on osg::GeoSet's, integrated code into osgUtil::SmoothingVisitor (RO) -Bug fix for for_each_triangle() to ensure that orientation of triangles is correct. o Added new osg::mem_ptr template class (include/osg/mem_ptr) for refence counting with data which does not internally support ref/unref themselves (as required my ref_ptr and supplied normally by deriving form osg::Referenced) instead delagating the responisbility of reference counting and deleting unreferenced memory to an associated osg::MemoryAdapter. o Moved osg::ref_ptr from include/osg/Referenced into its own header file include/osg/ref_ptr. Cleaned up numerous files to include the new header file. o Moved osg::MemoryAdapter from osg::Node into its own file, include/osg/MemoryAdapter, and moved osg::ReaderWriter from osg::Registry into its own file include/osg/ReaderWriter. o Clean up most warnings associated with the new -W -Wall pedantic warnings option. o Rename include/osg/OSG to FileUtils to reflect its now less central role in the OSG scene graph, renamed osg::FindFile osg::findFile, osg::SetFilePath to osg::setFilePath, added osg::getFilePath() and add osg::getDirectoryContents. Removed most references to the old include/osg/OSG as they wern't required! Renamed the references which were required. o Renamed osgUtil::GUIActionAdapter::needRedraw() to requestRedraw(), needContinuousUpdate() to requestContinuousUpdate() and needWarpPointer to requestWarpPointer. Removed the redundent bool paramter from requestRedraw. Updated Trackball, Drive and Flight manipulators and osgGLUT to reflect new names. Changed the default drive mode so it uses left and right mouse buttons for speed control instead of using the mouse y position. Both are still availble via original 'A' and 'Q' keybindings. o Moved contents of README to INSTALL, and made README a bare bones readme. Updated index.html to link to both. o Moved include/osg/ExtensionSupported to include/osg/GLExtensions. Renamed osg::ExtensionSupported to osg::isGLExtensionSupported, reimplemented osg::isGLExtensionSupported to use std::set's for increased speed. Added osg::getGLExtensionFuncPtr() as a cross platform way to get OpenGL extension functions. Updated Point.cpp and Texture.cpp to use the new methods and clean up the support for OpenGL extensions. Cleaned up include/OSG/GL. o From Axel Volley: Added support for OBJECT_LINEAR and EYE_LINEAR TexGen modes, Added support for the Anistropic texture filter extension to Texture.cpp. o Moved the information about plugin dependancies from README to index.html and made the links to the appropriate web sites. Added links for data sources. o Updated the FAQ in to reflect progress to beta and new documetation details. o Moved the createNodeFromImage functionality from the image readers into osg::Registry::readNode(), removing readers readNode() functions. Added osg::Registry::setCreateNodeFromImage(bool flag) and equivilant get function to support the switching on and off of this functionality. This is then is by the new archieve functionality. o Added src/osgPlugins/tgz for general tarball models. o Added src/osgPlugins/zip for general zipped models. o From Don, src/osgPlugins/osgtgz for a osg tarball models. dist/Irix for creating IRIX binary distributions. o Removed redundent NSPlugin and src/Viewer directorties. o Fixed compilation error in src/osgPlugin/flt under IRIX related to flt::Record::Record(const Record&):Referenced() {}. 6th December 2000 - osg_src-0.8-34.tar.gz o To bring the main branch inline with the autoconf branch, and inline with standard open source conventions, have made the following changes. - Copied and doc/index.html to index.html and modified to ref. README file and new relative paths of the documention. - Added AUTHORS file. - Rename and moved doc/CHANGES.txt to ChangeLog, doc/TODO.txt to TODO, doc/FAQ.txt to FAQ, LICENSE to COPYING. README.txt to README. Note, removing the .txt from files means that Windows won't be able to pick up on the file type automatically. However, they didn't have the Win32 style end of line conventions so they still wern't much use. By adding the index.html to the root directory this now allows Win32 users to browse the relevant files via Netscape or IE which can handle the unix style text files. I felt this was the best compromise. o Added notify messages to osg::Registry::read/writeOject/Node/Image() for when a plugin for a file extensions hasn't been found and for when a file hasn't been successfully read. o Added Axel Volley's UML diagrams to doc/UML. o Added mind maps on DesignPatterns and MissionState to doc/MindMaps. o Added new library command line options (see below) into src/Demos/sgv. o Integrated Graeme Harkness's reworking of src/Viewer into src/osgGLUT and Demos/sgv. Added Graeme's new Demos/cube which provides a simple demonstration of animation. o Added ReaderWriterPFB::readImage() to enable the loading of .pfu images into the osg, even if .pfb arn't used. Note, you'll need to run the viewer something like 'sgv -e pfb datfile.osg. o Added pfMultiprocess(0) to ReaderWriterPFB.cpp. o Added -W predatic warning option to compilation under Linux, and cleaned up the headers and source in response. o Added osg::Image::ensureDimensionsArePowerOfTwo() and a call to it from osg::Texture::apply() when mip mapped textures are required. Added packing aligment value to osg::Image, defaulting to 4 if the image width is a factor of 4, otherwise defaulting to 1. osg::Texture::apply() now used this osg::Image::_packing value to set glPixelStorei(); o Added sgv usage help to Viewer.cpp. Running 'sgv' will now report the command line options for sgv. Outputs the following : usage: sgv [options] infile1 [infile2 ...] options: -l libraryName - load plugin of name libraryName i.e. -l osgdb_pfb Useful for loading reader/writers which can load other file formats in addition to its extension. -e extensionName - load reader/wrter plugin for file extension i.e. -e pfb Useful short hand for specifying full library name as done with -l above, as it automatically expands to the full library name appropriate for each platform. o Added command line options -l and -e to Viewer.cpp to assist usage of plugins which can load more than indicated by their standard file extension type. See above for details. For instance pfb plugin can load *many* file formats. Try 'sgv -e pfb /usr/share/Performer/data/teapot.dxf'. o From Ben Discoe, added osg::Matrix::setTrans() and getTrans(). o Moved src/pfPlugin to src/osgPlugins/pfb and added code to enable the plugin to work with the osg as a plugin in addition to it previous functionality as a Performer plugin. Creating a link from lib/osgPlugins/osgdb_pfb.so to lib/libpfosg.so should be sufficient from Performer to pick up on the library. Added support for copying image data across from pfTexture to osg::Image texture and handling of pfMaterial::getColorMode(). Added to src/osgPlugins/pfbREADEME.txt to documentation some of the features and issues of the Performer plugin. o Fixed bug in osg::GeoState related to loading and saving of the new alpha_test paramter, which wasn't initialised in the osg::GeoState constructor. 22nd December 2000 - osg_src-0.8-33.tar.gz o Integated Brede Johansen's update to flt loader. o Added function osg::getLowerCaseFileExtension() to osg/FileNameUtils, modifed osg::Registry::createLibraryNameForFile() and osg::ReaderWriterRGB::readImage() to use this function for correctly recognising upper case extensions as equivilant to their lower case counterpart, i.e. .RGB should be interepreted as .rgb. o Fixed intersection bug which occured of osg:GeoSet's containing osg::GeoSet::TRIANGLES primitive bug. Bug was due to compilers incorrectly optimizing a templated function & functor, fixed by small reordering of the code, works perflectly now?! o Updated the README.txt with info on the dependancies of the new plugins. o Created VisualC++ project files for gif,jpeg,tga,tiff image loaders. o Commented out disabling of depth testing for transparent bin as it was causing visual artifacts on several models. 21st Decemeber 2000 - osg_src-20001221.tar.gz o Added an osg::createGeodeForImage(Image* image) method in osg/Image to create a geometry node around a image so that it can visualised within the scene without having to create all the required Geode, GeoSet, GeoState and Texture classes. Added a call to above from each of the image loaders so that images themselves can be loaded into sgv... Thereby making sgv an 3D image viewer! o From Don, added facility in osg::Texture so that if _min_filter == LINEAR || _min_filter == NEAREST then create a glTexImate2D, otherwise create a gluBuild2DMipmaps texture. o From Don, added code to display able depth testing of the transparent bin in the osgUtil::RenderVisitor:render() method. 20th Decemeber 2000 - osg_src-20001220.tar.gz o Incorportated the following image loaders from the simage library. src/osgPlugins/gif /jpeg /pic /tga /tiff Note, have only written unix makefile's so far, VisualStudio files need to be written before the next release. o Changed osgGetVersion() and osgUtilGetVersion() so that they return const char* instead of the original float. o added osg::GeoSet::s/getUseDisplayList(),dirtyDisplayList() and virtual method drawImmediateMode() which draws primitive without ever calling or creating a display list. The draw() has been changed to handle the new _useDisplayList flag so that it automatically creates a display list if the flag is true and uses the display list on further calls to draw(). draw() is nolonger a virtual method and therfore should *not* be overriden, drawImmediateMode() is now the method to override. This allows subclasses of osg::GeoSet to automatically take advantage of display lists. o From Brede, added option to osgUtil::SceneView to enable the automatic calculate of near and far planes on each frame to be switched on/off. o From Kartsen, spelling fixes to comments in Switch and GeoSet. 18th December 2000 - osg_src_20001218.tar.gz o Changed the directory structure in preperation for autoconf integration. o Converted pf2osg and osg2pf into a libpfosg.so plugin for Performer, instead of stand alone conversion programs, new pffb plugin can be found in src/pfPlugin. o Changed the osg::Material default _colorMode to OFF, and the global material _colorMode default to AMBIENT_AND_DIFFUSE. o Added read/write support for interleaved arrays into osg::GeoSet. 16th December 2000 - osg_src_20001216.tar.gz o Added osg::AlphaFunc state object. o Added support for osg::AlphaFunc into osg::GeoState. o Added support for osg::AlphaFunc into flight_park.fly. o Changed osg::Material::apply() so only required glMaterial's are called. o Integrated Don's work on adding glVertexArrays etc to osg::GeoSet. 12th December 2000 - osg_src-20001212.tar.gz o Integrated Karsten's standardisation of the library header guards. o Added osg::LightSource node. o Added get methods to osg::Light. o Modified osgUtil::RenderVisitor is track osg::LightSource nodes. o Modified osgUtil::SceneView so that it can handle headlight, sky light, and no scene view lights for the extra lights it adds to the scene for viewing. In the later mode only osg::LightSource's will light the scene. o Modified Viewer.cpp so that it toggles between the above scene view lighting modes above using the 'L' key. o Changed osg::Geode and osg::Group to rely upon ref_ptr<> for memory management rather the previous mode which required explicit ref and and unref statements. o Made osg::GeoSet::draw() and osg::GeoSet::getBound() virtual functions to allow user-drawn objects. A short term fix only. 8th December 2000 - osg_src-0.8-32.tar.gz o Added osg::Node::s/getNodeMask() as a fore runner to full implementation of TraversalMasks. o Added osg::loadNodeFile(),osg::loadImageFile() and osg::loadObjectFile() to osg/Registry header, as convienince functions for loading data. o Added osg::Camera::s/getFieldOfView() methods and split up the draw method into draw_PROJECTION() and draw_MODELVIEW() methods. Converted osg::SceneView is use these methods instead own gl calls. o Added osg::Timer class for high resolution, low overhead time stamping, converted sgv to use it. Timer class based on Don's real time frame scheduling library. o Added extension guards to .rgb reader/writer to prevent it from trying to load non rgb models. Accepted extensions are rgb,rgba,int,inta & bw. o Added osg::Node::setUserData(void*,MemoryAdapter*), osg::Node::getUserData() and osg::Node::getMemoryAdapter() and osg::MemoryAdapter to support user data. o Added png image file format loader. o From Ben Discoe: - updated LOD to use distance squared for evaluating child usage to remove need to computing sqrt. - png to osg::Image conversion code. o From Kartsen Weiss, fixes and improvents to sgv help message. o From Brede Johansen: - added osg::Node::setName( const char* name )to get round a crash under Windows, caused by a VisualC++ bug, which occurs under to multiple assignment of C style string to C++ strings. - bug fix for .rgb plug-in to solve problems with some textures with alpha values. The water tower, fences and fences now render properly in Performer Town! o Added osgUtil::SceneView::set/getBackgroundColor() for setting the background colour used by glClearColor(). o Added osgUtil::SceneView::projectWindowIntoObject(), projectWindowXYIntoObject() and projectObjectIntoWindow() to assist converting to and from window coordinates and object coordinates. o Added osg::Image* osg::Texture::getImage() to osg::Texure and converted it to use ref_ptr for handling the image memory. Added osg::Texture::getFilter() && getWrap() and seperated out enum TextureMode into enum WrapParameter & WrapMode, and FilterParameter & FilterMode. o Converted osg::GeoSet to use ref_ptr for handling the geostate memory. 2nd December 2000 - osg_src-0.8-31.tar.gz o Added osgUtil::SceneView to encapsulate the details required to render a view of a scene - the scene data, light, global geostate, camera and rendervisitor. o Cleaned up Viewer/Viewer.h & .cpp to use the new osgUtil::SceneView. o Integated Brede Johansen's update to flt loader. o Added .txt extension to README,CHANGES,TODO and FAQ to aid reading of files under Windows. o Added osg/Version and osgUtil/Version which provide external C functions for getting library name and version. Also can be used by autoconf to check for existance of the osg and osgUtil libraries. o Implemented missing osg::Camera::home(); o Fixed bug in osg::Material::apply() where no texture would be appear on surfaces on the first frame. glBindTexture was not being called with the correct parameter on creation of the OpenGL texture. o Removed redundent glEnable(GL_LIGHTING) from Viewer.cpp. o Changed the osg::Light::setDirection(Vec4&) to setDirection(Vec3&). o From Karsten Weiss : Comments added to osg::Light and osg::RenderVisitor. Fixes to make install parts of osg/src/Makefile. 28th November 2000 - osg_src-0.8-30.tar.gz o Added osg::Object::isSameKindAs(Object* obj) to aid object type comparions. This allowed osg::Object::readClone(Input& fr) to be extended to automatically detect 'Use ObjectID' syntax in .osg files, which fixes errors in reading .osg files saved from some data models created correctly by the flt loader. o Integated Brede Johansen's update to flt to handle transparency. o Commented out the flt::Registry::instance()->removedPrototype() call from RegisterRecordProxy() flt::RegisterRecordProxy destructor, which was causing a segmentation fault on exit under Linux due to destruction ordering - gnu c++ doesn't seem to honour construction/destruction order?! Prior to this 'fix', did the following changes to clean up memory allocation & deallocation as an attempt to fix the segmentation fault on exit! Changed the memory allocation of RegisterRecordProxy children to use osg::ref_ptr<> for automatic deallocation. Removed the flt::Record::_init(), _copy() and _free() moving the functionality into the constructor and destructor to simplify. flt::Record copy operator and copy constructor made private to prevent misuse. o Rewrote osg::Material so that it handles both FRONT and BACK face materials within one class, with support for FRONT_AND_BACK. o Added two sided lighting toggle to Viewer and NSPlugin. o Changed the LODBias in Viewer and NSPlugin to 1.0 (previously 2.0). o Added '#define GL_GLEXT_LEGACY 1' to osg/GL to fix compilation problems which occur on some implementation of OpenGL under Linux. 18th Novemeber 2000 - osg_src-0.8-29.tar.gz o Integrated Don Burns' Linux Netscape plug-in. o Added osg::PolygonOffset state attribute. o Added support for osg::Point and osg::PolygonOffset into osg::GeoState. o Extended osg::CullFace to encompass which face to cull, i.e FRONT,BACK or FRONT_AND_BACK, and added IO support. o Added read/write ascii to osg::Point and osg::PolygonOffset o From Don, moved light source from above model, to behind eye point for sgv and the Netscape plug-in. o Fixed material inheritance bug, by modifing osg::GeoState so that it now inherits attributes from the global state if they are not set locally. o From Brede Johansen, bug fixes in flt loader, setting of externals and redudent 'dummy' groups in LOD's. o Changed the default compilation of loaders so that pf2osg and osg2pf are not compiled by default under Linux or IRIX, ideally the presence of Performer should be detected automatically and compilation set accordingly, however this may have to wait for autoconf work. o Fixed warnings generated by gcc-2.96 in flt,fly,pf2osg and Viewer. o Changed 'const int' and 'const bool' returns type in Loaders/flt to 'int' and 'bool' respectively. This fixed silly warnings under IRIX. o In Loaders/flt changed all cout, cerr and printf's to osg::notify(). o From Karsten Weiss : - Updated OSG_ROOT/README to account for sh shells & added contact details. - Changed variable 'or' to 'ori' in Loaders/fly/base.cpp to enable compilator under later versions of gnu c++. - Comments added to BoundingBox, Lighting, CullFace and Quat. - BoundingBox::contains() bug fixed. - Changes to remove warnings generated in Loader/flt with gcc-2.96. o Updated FAQ. o Updated OSG_ROOT/README with contact details. o Changed osg::Registry and flt::Registry to use ref_ptr<> to automatically handle attached prototypes memory usage. o Removed flt/Referenced.h and replaced flt::Referenced with osg::Referenced. o Removed vnf loader is it was only a to help import a single file from an now out of date format, its existance was clogging up the distribution. 10th November 2000 - osg_src-0.8-28.tar.gz o Added Brede Johansen .flt loader. o Integrated Neil Salter's new implementation of osg::notify() which uses a NotifyInit class with a 'nifty' counter to ensure construction. o Changed osg::TexEnv,TexMat,Fog,Point,Transparency & Material so that they area all derived from osg::Object. All state components are now derived from osg::Object. o Changed osg::GeoState::setAttribute(..) and getAttribute() methods so that they deal with osg::Object's rather than void*. o Changed osg::GeoState so that it uses ref_ptr<> to automatically manage attribute memory whilst supporting attribute sharing. o Added to osg::ref_ptr<> extra operators =,==,!= & a valid() method. o Added osg::Point which enables control of OpenGL point size. o Added osg::ExtensionSupported which allows the querring of support for OpenGL extensions. o Changed the default global lighting mode to ON in sgv. o Changed the toggling bahviour in sgv between lighting and texture ON and OFF, new behaviour should be more consistent. 6th November 2000 - osg_src-0.8-27.tar.gz o Added option in osgUtil::FlightManipulator for automatically yawing the camera into the bank, and made it the default operation. o Changed the implementation of osg::notify() to default to simply cout for all platforms, rather than just Windows. This is a temporary measure to fix the crashes under IRIX and Linux. Work is underway to provide a robust implementation of osg::notify(). o Added Neil Salter's Doxyfile makefile to docs/ for generating Doxygen documetation. o Changed the #define's in include/osg/Transparency to enumerated types and removed the SGTRANSPARENCY_ prefix as its now within the scope of the Transparency class itself. o Changed the #define's in include/osg/TexEnv to enumerated types and removed the SGTEXENV_MODE_ prefix as its now within the scope of the TexEnv class itself. o Changed the #define's in include/osg/TexGen to enumerated types and removed the SGTEXGEN_ prefix as its now within the scope of the TexGen class itself. o Changed the #define's in include/osg/Material to enumerated types and removed the SGMAT_ prefix as its now within the scope of the Material class itself. o Changed the #define's in include/osg/Fog to enumerated types and removed the FOG_ prefix as its now within the scope of the Fog class itself. o Changed the #define MIN_CACHE_SIZE in include/osg/Field to enumerated type, therefore keeping it within the Field's scope. o Changed the #define MINIMUM_FIELD_READER_QUEUE_SIZE in include/osg/ FieldReaderIteraor to enumerated type, therefore keeping it within the FieldReaderIterator's scope. 3rd November 2000 - osg_src-0.8-26.tar.gz o Removed the GSET_ prefix from the osg::GeoSet enumerated types as its no longer required, since the enumerated types are within the osg::GeoSet's scope. o Added osg::notify() function for redirecting messages either to stdout or stderr (cout or cerr) or /usr/tmp/osg.info, depending upon the severity level set. The environmental variable OSGNOTIFYLEVEL can be set to overide the default level which is osg::NOTICE. See include/osg/Notify for more details of the levels available. Current implementation only works under Linux and IRIX, under Windows the output is simply directed to cout. o In osgUtil::DriveManipulator added the option to use the mouse y poistion to govern the speed in addition to the previous left button to speed up, right button to slow down/reverse. The two modes can be toggled by pressing 'q' and 'a' respectively. Default is using the mouse y position for speed. o Changed osgUtil::TrackballManipulator so that it supports proper trackball style manipulation. o Added a zoom limit to the osgUtil::TrackballManipulator to prevent the user from zooming into a point. Under this limit the zoom operation nolonger zooms in but pushes the eye and look points forward down the look vector, keeping the distance constant. o Added osg::Camera::getLookVector() and osg::Camera::getFocalDistance() methods. o Added osgUtil::DriveManipulator. o Renamed osgUtil::GUIUpdateState to osgUtill::GUIActionAdapter and moved it to its own file. o Fixed bug in osgUtil::IntersectVisitor related to reference counting and NULL object. o Added osgUtil::FlightManipulator. o Modified sgv to enable support for multiple camera manipulators. o Added resize event and window min and max to osgUtil::GUIEventAdapter. o Added resize event and window min and max to GLUTEventAdapter. 27th October 2000 - osg_src-0.8-25.tar.gz o Added support for string descriptions to be added to osg::Node's, which can be saved and loaded via .osg data file. o Fixed bugs in osg::FieldReaderIterator & osg::GeoSet related to the osg::FieldReaderIterator::matchSequence() method, detected when implementing string descripters IO. o Modified osg::Light so its derives from osg::Object. o Added osg::Matrix::preScale(),postScale() methods. o Added methods to osgUtil::CameraManipulator. o Added osgUtil::GUIEventAdapter::time() to log the time of an event. o Rewrote osgUtil::GUIUpdateState so it now based on virtual functions. o Implementated trackball functionality in osgUtil::TrackballManipulator. o Ported sgv over to use new osgUtil::CameraManipulator rather than old trackball functionality, removed original trackball code. o Changed the frame delay in sgv to default to off, pressing '-' turns the frame delay on, then successively slow sgv down, pressing '+' reduces the frame delay again until it turns off as before. o Added matrix multiplication methods into osg::Camera, and added method for calculating the side vector of the camera. o Added methods to osgUtil::CameraManipulator to extend the functionality which can be exposed to users of a generic camera maniupluator. o Added osgUtil::RenderVisitor::setLookAt(const Camera&) method to make it convinient to use camera's with the render visitor. o From Don, added Unix Makefile support for make install, instlinks, home and automatic detection of OS type. Changed target lib directory for loader plug-in to lib/OSGLoaders. o Added /usr/lib{32}/OSGLoaders DSO search path for and to prepend file name with "OSGLoaders/" if the standard search fails. o Renamed osgUtil::GUIEventAdaptor to osgUtil::GUIEventAdapter. o Renamed osg::RP<> to osg::ref_ptr<> to make it clearer its usage and to be more consistent with STL's auto_ptr<>. o Added osgUtil::CompileGeoSetsVisitor, original existed in sgv. o Changed the osg::GeoSet::compile() method so that it calls the GeoSet's GeoState apply method before creating the OpenGL Display List. Note, the state is still NOT compiled into the Display List. This improves performance significantly when running the program remotely. o Cleaned up the methods in osgUtil::CameraManipulator. o Added support for returning intersection normals from osgUtil::IntersectVisitor. 20th October 2000 - osg_src-0.8-24.tar.gz o With assistance for Simon Cooke and Brede Johansen added support for relative include, lib and bin paths into the VisualStudio workspace files. o Changed the link to glut from glut.lib to glut32.lib in VisualStudio workspace files. o Updated the root READE to reflect the simplified Windows compilation. o Added support for osg::GeoState into osg::Scene. o Added osg::Quat::get(Matrix&) & osg::Quat::set(Matrix&) into osg::Quat, submission from Brede Johansen, orginal source from gamasutra.com. o Fixed crash in osgUtil::RenderVisitor::reset(), caused by an unguarded ptr->unref(). o Added -Wall to Linux makedefs, and fixed resultant warnings. o Added preliminary interfaces to osgUtil::GUIEventAdaptor, osgUtil::GUIUpdateState and base class osgUtil::CameraManipulator. 14th October 2000 - osg_src-0.8-23.tar.gz o Updated the root README file to mention the Data download, the dependancies (i.e GLUT) and slightly clearer Win32 instructions. o Added == operator into osg::Vec2, osg::Vec3 and osg::Vec4. o Removed float* and const float* conversion operators from osg::Vec2, osg::Vec3 and osg::Vec4. o Added Neil Salter's osgUtil work on camera manipulators into the osg distribution under include/osgUtil and src/osgUtil and moved the original src directory to src/osg. Modified Linux and IRIX makefile to account for new library and structure. o Moved osgUtil::Camera into osg::Camera. o Moved osg::RenderVisitor and osg::IntersectVisitor into osgUtil:: RenderVisitor and osgUtil::IntersectVisitor. o Added osgUtil/Export into osgUtil to handle DLL's under Windows. o Modified Viewer.cpp to take account of the new osgUtil library and placement of RenderVisitor and IntersectVisitor. 7th October 2000 - osg_src-0.8-22.tar.gz o Fixed crash under Windows when activating the osg::IntersectVisitor in the scene graph viewer sgv. Bug appears to be an MS Visual C++ bug when using a std::multiset iterator and combining std::map and std::multiset. Replacing the later by a std::vector has curred the problem, but also required an explicit sort on the vector in osg::IteratorVisitor::intersect() to achieve the desired functionality. o Fixed the use of gluUnproject() in Viewer.cpp so that it properly resolved the difference in window coordinates between GLUT mouse position which origin is top left, and OpenGL which is bottom left. This fixed picking problems apparent under previous release. o Cleaned up the intersection messages and added timing code to report the length of time required for the osg::IntersectVisitor to traverse the scene. o Added '-OPT:Olimit=0' compile flag to IRIX makedefs to allow large methods, such as the osg::for_each_triangle() template function, to be optimised. o Streamlined the intersect code a little, improving performance by around 20% over previous release. 5th October 2000 - osg_src-0.8-21.tar.gz o Added support for shooting a ray through the scene in Viewer.cpp, by pressing 'i' a ray is shot from the mouse position projected onto the near and far plane into the scene reporting back the hit objects, uses the new osg::IntersectVisitor. Note, results are not 100% reliable yet, to be worked on. o Completed first iteration of osg::IntersectVisitor. Visitor allows the intersection of specified segment with the scene, reporting back node path to intersected geoset's and intersection point and object to world transformation. o Added templated function osg::for_each_triangle() to include/osg/GeoSet which allows a functor to iterated through all triangles within a osg::GeoSet. The function decomposses quads and polygons into triangles. o Added osg::Node::getParent(), getParents() and getNumParents() to osg::Node to allow public access to parent list. o Added more doc++ comments to osg::Node & osg::Object. 21st September 2000 - osg_src-0.8-20.tar.gz o Added new osg::Seg class for representing a single line segment, providing methods for intersecting with BoundingSpheres, BoundingBoxes and triangles(not implemented yet), and for transforming the segment. Typical use is for ray based intersections of the scene. o Added the beginnings of a new osg::IntersectVisitor for traversing a scene to find the intersection of attached osg::Seg's with osg::GeoSet's. osg::Seg and osg::IntersectVisitor should be completed for the next release. o Added !operator to osg::RP<> and made osg::RP<>::get() const. o Moved osg::BoundingBox from osg/Types to its own osg/BoundingBox and added default constructor which initializes it to an invalid bounding box (by setting xMaxxMax and other useful methods for accessing and updating the bounding box. Changed the internal representation from eight floats to two osg::Vec3 one each for min and max values. o Moved osg::BoundingSphere from osg/Types to its own osg/BoundingSphere and added default constructor which initializes it to an invalid bounding sphere (by setting radius<0), added isValid() method which returns true if radius is zero or positive and other useful methods for accessing and updating the bounding sphere. o Modified osg::Node so that getBound() return a reference to the internal node's BoundingSphere (which could be invalid), rather than the previous version which required the passing of BoundingSphere which was written to if there was a valid bounding box. This new implementation is more efficient (less copying of data) and more convenient to work with. o Added culling active flags into osg::RenderVisitor and Viewer.cpp, to allow view frustum and small feature culling to be switched on and off at run-time, using 'C' and 'c' to toggle each culling technique repsectively. 15th September 2000 - osg_src-0.8-19.tar.gz o Added osg::RenderVisitor::setTransparencySortMode() to allow two modes of depth sorting the transparency bin - the original implementation is set with LOOK_VECTOR_DISTANCE and new implementation OBJECT_EYE_POINT_DISTANCE. The osg::RenderVisitor::apply methods have been modified to support both modes. The later produces better results when rendering billboards such a trees. o Added osg::RenderVisitor::calcNearFar(double& near,double& far), to be called after the cull traversal, which goes through the resultant opaque and transparent binds for their depth range. Returns false if the bins are empty and near and far planes cannot be set, true on success. The near and far plane can then be used when setting OpenGL's near and far planes. The near plane is return as is and may be zero or negative and therefore will need to be clamped by the calling function if the using gluPerpsective() when setting up the OpenGL projection matrix. This clamping will not be required when use gluOrtho(). o Viewing.cpp has been modified to support the new calcNearFar method, and does the required clamping to capture invalid values. This has solved problems with Z fighting which existed before on models such as Tux_rocket.osg. o Added project file VisualStudio/libFly/libFly.dsp to support the .fly loader plug-in. Modified several of the .cpp & .h files in Loaders/fly to enable compilation under Win32 and to remove the resulting 'double to float conversion' warnings under Win32. o Improved support for plug-ins under Win32 by adding the environmental variable PATH to the search path used for located the required .dll. o Modified osg::Registry::createLibraryNameForExt so that under Win32 the when linking to the debug build of the osg library (osgd.dll) the debug build of the plug-in is also sought (for instance osg_flyd.dll). When using the release build of the osg library (osg.dll) it will default to using the release build of the plug-in (i.e. osg_fly.dll). Mixing debug and release builds under Win32 causes problems with the osg::Registry - producing two or more versions of the singleton! This is a appears to be MS linker bug as its does not resolve the symbols correctly between debug and release builds **!! o To README added example autoexect.bat extract for a helping Windows users getting up and running. 7th September 2000 - osg_src-0.8-18.tar.gz o Implemented a parent list for osg::Node to allow nodes to keep track of their parents. The links to their parents are automatically managed osg::Group::addChild() and removeChild() and destructor. o Added osg::Node::ascend(NodeVisitor&) which traverses the nodes parent list applying the node visitor to each node in turn. This is equivalent to osg::Node::traverse(NodeVisitor&), but typically won't need to be overridden like traverse() is. o Added support for parent traversal into osg::NodeVisitor so that scenes can be traversed upwards as well as the traditional top down traversal. This is useful for propagating changes of leaf and internal nodes upto their parents which enclose them. o Added osg::Node::dirtyBound() method which set the _bound_computed flag to zero so that the next osg::getBound() is forced to recompute the bounding sphere. o Added support into osg::DCS for calling dirtyBound() recursively up the nodes parent paths. This fixes the report view frustum culling bug when viewing Torus.osg. o Changed the #define is osg::Texture to enum TextureMode. o Removed the SGTEX_ prefix from osg::Texture::TextureMode's. o Removed the SGSTATE_ prefix from osg::GeoState::AttributeType and osg::GeoState::AttributeType. 4th September 2000 - osg_src-0.8-17.tar.gz o Changed osg::Sequence so it derives from osg::Group rather than osg::Switch. o Improved the support for pfSwith in the Performer converter pf2osg. o Changed osg::Node so that the node name _name is now a std::string rather than a C style char* string. This clears up a problem with osg:::Node::setName which was erronously handling the freeing of mememory. o Changed Loader/osg2pf.cpp and Viewier/Viewer.cpp inlight of the change to std::string name in osg::Node. o Fixed (again?!) compilation problem on Irix (missing osg:: in Loaders/osg2pf.) o Fixed a bug in Viewer.cpp related to loading multiple files, which resulted in sgv viewing an empty model. 3rd September 2000 - osg_src-0.8-16.tar.gz o Fixed compilation problem on Irix (missing osg:: in Loaders/osg2pf.) o Basic Implemention of small feature culling in osg::RenderVisitor, based on culling objects with small screen size projected into the viewport. o Added support for Don Burns real-time frame schedualer into sgv. To compile the viewer with Don's library RTfs use the Viewer/Makefile.rtfs which links with the appropriate libraries and define's SGV_USE_RTFS which is now used in Viewer.cpp to utilise the frame rate schedualing. o Changed osg::Light::init() so that it set the internal variables to predefined constants rather than capturing the values from the current OpenGL state as done previously. The previous versions of osg::Light needed to be constructed in a valid current context. The capturing of the current OpenGL light state can now done with a new method osg::Light::captureLightState(). o Added osg::Image::scaleImage(int s,int t,int r) which uses gluScaleImage to scale up/down the image. Useful for scaling down images for graphics cards which can not handle large images, such as the Voodoo1,2 & 3. 27th August 2000 - osg_src-0.8-15.tar.gz o Implemented osg::Switch node with similar functionality to performer, allowing all, none or a single child to be selected. o From Graeme, ostream << operator's added to osg::Vec2/3/4 and osg::Quat. o From Graeme, Added osg::Qauat::makeRot which creates a rotation Quat which will rotate vec1 to vec2. o Fixed some of the /// comments on osg::Quat so that doc++ handles it better as it doesn't seem to like multi-line usage of ///. o Fixed compilation problem on Windows with GeoSet.cpp - required the inclusion of to handle the use of FLT_MAX. 25th August 2000 - osg_src-0.8-14.tar.gz o Implemented basic view frustum in the render visitor. Performance is now pretty close to Performer on Performer town on the Onyx2. o Modified the iostream includes so that the .h versions can be included by defining OSG_USE_IO_DOT_H, or by default includes the standard C++ version without the .h. 21st August 2000 - osg_src-0.8-13.tar.gz o Removed old converter code in OSG.cpp as its is now enterirly replaced by functionality in osg::Registry and osg::DynamicLibrary. o Added support for '/' and '*' keys into sgv for altering the LOD bias. o Added support for '?' key into sgv for printing out help. o Added support for 'o' key into sgv for output scene to "saved_model.osg". o Small improvements to osg2pf, now can handle normals. o Added osg::GeoState::getMode and osg::GeoState::getAttribute() methods. o Fixed compilation problem under Irix in sgv.cpp. o Fixed compilation problems under Windows. o Added new models Data/esprit.osg and Data/paraglider.osg. o Re-exported Cow.osg, Tux.osg and Tux_rocket.osg from Performer, correcting artifacts relating to state inheritance in the previous .osg models. o Removed Loaders/osg as it was only there to illustrate how to write and reader/writer library (as loading functionalilty is is already built into libosg.so.) Loaders/fly and Loaders/vnf both serve the purpose of illustrating read/writer functionality, making Loaders/osg redundent. 17th August 2000 - osg_src-0.8-12.tar.gz o Fixed a bug with the CompileGeoSets visitor in Viewer.cpp where the visitor was not using the new traversal conventions. The bug ment that 0.8-11 would have only compiled OpenGL display list for the first child of an LOD, Switch and Sequence and leave the rest to be rendered without display lists. This fix now allows all osg::GeoSet to be visited and display lists compiled - which should improve performance on systems where display list are important. o Implemented a *very* basic view frustum culling to get a handle on the potential performance improvements. I've added the ability cull objects wholely behind the eye point. This is clearly much less powerful at culling than proper view frustum culling but is much quicker to implement. Performance improvement is _non_existant_ through to *AMAZING*. On lowly PI233 & TNT Linux box I'm now getting 5 frames a sec when viewering the whole model, through to 6-8 frames a sec looking close up to the town to 40-50 frames when looking at the out-lying farms and mountains. Full view frustum culling promises even better results! 16th August 2000 - osg_src_0.8-11.tar.gz o Completed basic LOD functionality in osg:LOD and osg::RenderVisitor. o Modified Performer to OSG converter to handle LOD's. o Added a templated function write out arrays of data to osg::Output, while enable multiple values to written out on each line, defaulting to 10 values per line. o Modified osg::GeoSet to use enabling duplicated code to be removed and the .osg file format to be more compact virtual of the multiple values values per line. o Added the ablity to chain osg::NodeVisitor's together to enable user defined traversers to be used in preferences to the standard osg::Node::traverse(). o Added a traversal mode to osg::NodeVisitor to enable osg::Node::traverse() to distingush whether to traverse all children or only those which are active such as when traversing a switch or sequence. 10th August 2000 - osg_src_0.8-10.tar.gz o Further work of the OSG to Performer converter osg2pf. Can now convert basic geometry. o Fixed the osg::Billboard::computeBound() so it accounts for the billboard positions correctly. o Fixed a memory deallocation problem in RenderVisitor which caused a serious memory leak which would eventually grind the system to a halt on big models. o Added support for a global osg::GeoState into Viewer.cpp and osg::GeoState, also add the ability to overide local state modes with the global state, or inherit the local state from the global state. This enables the sgv keys 't' and 'l' to work as would as one would expect. o Created a new method osg::GeoState::apply(GeoState* global,GeoState* prev) which takes the previously applied GeoState and then only applies the differences. This is crude step to mimic the pushState and popState in Performer's pfState class - but does achieve the lazy state updating. This just a short term step, but does give some healthy performance improvements - the old way produced a draw time of ~42ms on Performer town, with the new lazy updating of state the draw time is ~25ms (on a Onyx2 IR.) This is the about same draw time as Perfly when culling is switched off. Enabling culling in Perfly more than halves the draw time. o Modified osg::Billboard::calcTransform() & calcRotation() to do the hand coded maths calculations rather than using generic osg::Matrix operations to do it. This has cut the cull traversal down for 16ms to 12ms. Combined with the new lazy state updating frame rates on Performer town now hits 24 frames a second. o Added data access methods to osg::GeoSet and osg::Referenced. 7th August 2000 - osg_src-0.8-09.tar.gz o Added some temporary timing code to Viewer to reveal rendering bottle necks. o Modified osg::RenderVisitor so it handles osg::Billboards more efficiently by storing the inverse matrix stack in sync with the current matrix stack. o Changed Make/makedefs.linux and Make/makedefs.irix to use -O2 instead of the previous -g setting. This speeds up the cull traversal by 2-3 times. 5th August 2000 - osg_src-0.8-08.tar.gz o Fixed build problems under Windows. o Added basic support for pfLOD,pfSwitch and pfSequence into pf2osg. o Implemented osg::Switch and osg::LOD to just traverse their first child rather than all their children as osg::Group does. This is a temporary measure to get round the lack of full implementations of osg::Switch and osg::LOD. o Added osg::Sequence basic interface, core functionality remains to be implemented. 3rd August 2000 - osg_src-0.8-07.tar.gz o Added osg/FileNameUtils which is a collection of useful functions for parsing filenames. o Further work on the Performer converter pf2osg, now can load most models from the Performer distribution, including Performer town. Performance with sgv compares well with perfly on most models but Performer town is significantly slower than with perfly (5fps vs 50fps on a Onyx2 IR). It looks like the OSG current simplicistic state management needs a revamp to get performance up where it belongs... This is will be done in the near future. o Added support for flat shaded primtives into osg::GeoSet as per pfGeoSet, this was required to bring across several key peformer models such as Performer town. o Added bare bones of an OSG to Performer conversion program, osg2pf under Loaders/osg2pf. o Modified osg::Node so that it saves and loads its name if it has one. 28th July 2000 - osg-0.8-06.tar.gz o Futher work on Performer converter pf2osg. o Bug fixes to osg::GeoSet revealled by the Performer work. 26th July 2000 - osg-0.8-05.tar.gz o Added support for osg::Object sharing in the reading and writing of the .osg format. This enables a MASSIVE speed up on models which can share GeoState's. Expect order of magnitude of speed up on models such as /usr/share/Performer/data/iris.flt (from the Performer distribution and converted using the new pf2osg converter. o Added support of pfObject sharing in the Performer converter, taking advantage on the above. o Bug fixes to the writing of osg::GeoSet's to .osg files. 19th July 2000 - osg-0.8-04.tar.gz o Due to problems with integrating Performer as plug-in on Linux, have converted it to work as a conversion program - now called pf2osg and can be found in Loaders/pfb. 5th July 2000 - osg-0.8-03.tar.gz o Bugs fixes to support in osg::GeoSet for normal, colour and texture coordinate binding, and modified the .osg ascii format to reflect this. o Added glMaterialColor() to Viewer/Viewer.cpp to enable colors to be activated on osg::GeoSet's. Without it untextured models would turn only be coloured by current glMaterial rather than the current glColor. o Moved the compilation of the display lists from the init stage into the draw function, as the requests to glGenLists was failing within the Viewing::init's glContext. glDisplay lists are now created correctly with a nice improvement in speed :-) 4th July 2000 - osg-0.8-02.tar.gz o new version numbering scheme to be consistent with the RedHat scheme - ie. ProjectName-Version-Release. The current alpah release has been assigned as version 0.8, and the release number 02 reflecting this is the second release under the new scheme (alot can happen in day:-) o Support for RedHat RPM distributions has been added, and can be found in OpenSceneGraph-0.8/dist/RedHatRPM. o Further work on the Peformer loader, which can now read in pfGroup,pfDCS,pfGeode, pfGeoSet and small bit of pfGeoState/pfMaterial. o Improved the support in osg::GeoSet for normal, colour and texture coordinate binding, and modified the .osg ascii format to reflect this. o All .osg ascii files in Data were updated to reflect the new binding information. 3rd July 2000 - osg_src_20000703.tar.gz o Changed the return types for several of the operators in osg::Vec2/3/4. o Further work on osg::Billboard. o Further work on Loader/pfb. 27th June 2000 - osg_src_20000627.tar.gz o Added make snapsrc and make snapdata to the root Makefile to allow smaller source only and data only distributions. o Completed Billboard::Mode::AXIAL_ROT functionalilty which fits the case of billboarded trees, POINT_ROT_EYE and POINT_ROT_WORLD left to complete. o Removed the reference to Image library in pfb Makefile which caused the build of the Performer loader to break under linux. 26th June 2000 - osg_20000626.tar.gz o Added the Don Burns' hang gliding flight simulator database loader example into distribtion under Loader/fly. The data file used to select which components of the database to load has been added as Data/flight_park.fly. The scene can be loaded in the standard way i.e. "sgv flight_park.fly" o Created the beginings of a Performer .pfb loader. The work is ongoing, the first signs of life can be found in Loaders/pfb. o Continued work on osg::Registry related to dynamic loading of Reader/Writer plug-ins, its now works as intended! o Continued work on the new osg::Billboard class, completing the class interface and saving and loading functions. Calculation of the rotation matrix used to orientate the billboard towards the eye point is final element left to implement - coming soon! o Added support for osg::Billboard into osg::RenderVisitor. o Fixed a bug in osg::RenderVisitor::pushMatrix() relating to pre/post multiplication of matrices. o Changed the * operator in osg::Matrix to return a osg::Matrix rather than a osg::Matrix*. 20th June 2000 - osg_20000620.tar.gz o Fixed Irix compile problems related to missging std:: from use of std library strings in Loaders/Osg/osg.cpp on Irix. o Fixed crash in sgv due to Loaders/Osg/osg.cpp using the same static variable name as src/ReaderWriterOSG.cpp. o Removed temporary code (from osg_20000619) in Viewer.cpp which was used for testing loading and closing at runtime of dynamic libraries (plug-ins). 19th June 2000 - osg_20000619.tar.gz o New osg::Vec2, Vec3 and Vec4 have been written and placed in individual header files, replacing original typdef float[] versions in osg/Types. The new Vec classes now add a range maths operations with them such as multiplication, dot and cross product. o New osg::DynamicLibrary class has been written to encapsulate the loading and closing of dynamic libraries across different platforms with one consistent interface. o osg::DynamicLibrary support has been added to osg::Registry, not fully implemented yet, but will soon replace the old style dso support seen in osg/OSG.cpp. o osg::Registry, osg::RegisterReaderWriterProxy, osg::RegisterObjectProxy, have all been modified to support the removal of automatically deleted Prototypes and ReaderWriters from the Registry. Automatic deletion occurs when a dynamic library is closed - the proxies now deregister themselves when this happens ensuring that these deleted objects are never referenced. This facility enables reader/writer plug-ins to be loaded when needed then closed to free up the space again, all at run-time. o Renamed include/osg/ReferencedPointer to include/osg/Referenced to reflect the main class it defines. 6th June 20000 - osg_20000606.tar.gz o Modified the root Makefile so that it can target linux or irix compilation directly by copying the appropriate makerules/makedefs. README now reflects the simplified make. o Changed the names of Make/makedefs.sgi and Make/makedefs.sgi to Make/makedefs.irix and Make/makedefs.irix to make it more consistent and allow for sgi's new Linux boxes:-) 29th May 20000 - osg_20000529.tar.gz o Added clean up of 'so_locations' & 'ii_files' into sgi build rules. o Fixed compilation problems due to shortcomming of MicroSoft C++ 6.0 when handling static const's declared within the scope of class. Have changed to #define, less C++ but works... 28th May 20000 - osg_20000528.tar.gz o Moved the doc directory to docs to be consistent with other Open Source software projects. o Created osg::Billboard class, currently only 1/3rd complete. o Implemented the .osg ASCCII file read and write methods for osg::DCS. o Moved defines & enums which were in the osg global namespace into the classes they are associated (this has now broken the Win32 - currently investigating.) o Removed the virtual int osg::Node::classType() function as its function is better served by RTTI such as dynamic_cast<>. o Added automatic register proxy to osg::Scene so it properly registers itself with osg::Registry. o Added shell of the osg::LOD and osg::Switch classes which will be implemented fully at a later date. o Changed a cout to printf in src/Registry.cpp to fix a dumb crash under Win32 - MicroSoft still can't write decent compilers... o Modified several library class so that they use the convention of _variableName for class member variables, these classes were developed before the the above convention was adopted as standard. o Fixed bug in Geoset_osg.cpp related to GL Display Lists. o Merged file_p.cpp into file.cpp files and removed file_p.cpp exept for GeoSet_p.cpp which was kepth seperate due to its size. GeoSet_p.cpp has been renamed GeoSet_ogl.cpp to reflect its primary function. 25th May 2000 - osg_20000525.tar.gz o Changed library header files in include/osg/ from C style .h to the new Standard C++ style without suffix. For instance include/osg/Node.h has become include/osg/Node. o Moved all osg::Branch functionality to osg::Group, and removed osg::Branch. o Changes to src/*.cpp, Viewer/* and Loaders/Osg/* to account for the above header and osg::Group changs. o Fixed some inappropriate permission in the data directory. 22nd May 2000 - osg_20000522.tar.gz o Added to the FAQ. o Added more functionality to the osg::Matrix. o Incorportated makedefs.sgi fix to handle .cpp extensions. 16th May 2000 - osg_20000516.tar.gz o Added more doc++ comments to headers file. 14th May 2000 - osg_20000514.tar.gz o moved .cxx extensions to .cpp. o removed sg prefix from all library files and class as they were redudent virtue of the new osg namespace. o changed the include/OSG to include/osg to keep it consistent with library and namespace capitilization. o added osg namespace it the remaining classes which were missed the first time round! o add first iteration of the FAQ. o fixed the permission of files - many incorrectly had executable permissions. 9th May 2000 - osg_20000509.tar.gz o reduced the STL platform specific #ifdef's. o remove using namespace from all header files, so not to pollute user space. 8th May 2000 - osg_20000508.tar.gz o osg namespace implemented. 6th May 2000 - osg_20000506.tar.gz o Added CHANGES list for logging changes from version to version. o Added TODO list for list desired functionality and development activity. o Beautified the code using bcpp. 2nd May 2000 - osg_20000502.tar.gz Release first alpha version, compiles under Windows95, Linux and Irix, distribtion includes : o unix makefiles for Linux, Irix and Win32 via MS VC++6.0 workspace files. o basic GLUT based scene graph viewer - sgv. o basic Scene Graph nodes, such as sgBranch, sgGeode. o basic Drawing primitive and state containers GeoSet and GeoState. o basic Maths/Geometry classes such as sgMatrix, sgVec2/3/4. o refence counting and smart pointers via sgReferenced and sgRP<> classes. o support for automatic object registration with sgRegistry. o support for automatic reader writer plug-ins with sgReaderWriter/sgRegistry. o input parsing classes sgField,sgFieldReader. o .osg ascii file reader/writer. o .rgb/.rgba (sgi format) images reader. o automatically generated documention from header files using doc++.